From 46cc2c3deb299cc61c14a0675221b811aaf999b8 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Fri, 27 Jan 2023 10:42:46 +0700 Subject: initial commit for midtrans development --- indoteknik_api/controllers/api_v1/sale_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1/sale_order.py') diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index f2ec8dfe..4128d9f9 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -142,7 +142,7 @@ class SaleOrder(controller.Controller): 'partner_purchase_order_file': params['value']['po_file'] } sale_order = request.env['sale.order'].create([[parameters]]) - + var = json.loads(kw.get('transaction_time', '{}')) order_line = json.loads(params['value']['order_line']) parameters = [] for line in order_line: -- cgit v1.2.3 From 39e27d0187d352dfea7db1bc1c9aece42e348caa Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Fri, 27 Jan 2023 11:08:02 +0700 Subject: sale order and invoice api --- indoteknik_api/controllers/api_v1/sale_order.py | 27 ++++++------------------- 1 file changed, 6 insertions(+), 21 deletions(-) (limited to 'indoteknik_api/controllers/api_v1/sale_order.py') diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 90dee56c..073f6301 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -30,7 +30,11 @@ class SaleOrder(controller.Controller): domain = [('partner_id', 'in', partner_child_ids)] if params['value']['name']: name = params['value']['name'].replace(' ', '%') - domain.append(('name', 'ilike', '%'+ name +'%')) + domain += [ + '|', + ('name', 'ilike', '%'+ name +'%'), + ('partner_purchase_order_name', 'ilike', '%'+ name +'%') + ] sale_orders = request.env['sale.order'].search(domain, offset=offset, limit=limit) data = { 'sale_order_total': request.env['sale.order'].search_count(domain), @@ -61,26 +65,7 @@ class SaleOrder(controller.Controller): data = {} sale_order = request.env['sale.order'].search(domain) if sale_order: - res_users = request.env['res.users'] - data = { - 'id': sale_order.id, - 'name': sale_order.name, - 'payment_term': sale_order.payment_term_id.name or '', - 'sales': sale_order.user_id.name or '', - 'date_order': self.time_to_str(sale_order.date_order, '%d/%m/%Y %H:%M:%S'), - 'purchase_order_name': sale_order.partner_purchase_order_name, - 'products': [], - 'amount_total': sale_order.amount_total, - 'address': { - 'customer': res_users.api_address_response(sale_order.partner_id), - 'invoice': res_users.api_address_response(sale_order.partner_invoice_id), - 'shipping': res_users.api_address_response(sale_order.partner_shipping_id) - } - } - for line in sale_order.order_line: - product = request.env['product.product'].api_single_response(line.product_id) - product['quantity'] = line.product_uom_qty - data['products'].append(product) + data = request.env['sale.order'].api_v1_single_response(sale_order, context='with_detail') return self.response(data) -- cgit v1.2.3 From 92db799e6902b2a2bd6aca5c95c4ec8e46f816de Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Tue, 31 Jan 2023 09:55:37 +0700 Subject: add product in sale order midtrans --- indoteknik_api/controllers/api_v1/sale_order.py | 27 ++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'indoteknik_api/controllers/api_v1/sale_order.py') diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 7ce8cd43..77c3e233 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -9,6 +9,7 @@ class SaleOrder(controller.Controller): @http.route(prefix + "sale_order_number", auth='public', method=['GET', 'OPTIONS']) def get_number_sale_order(self, **kw): + # for midtrans only user_token = self.authenticate() if not user_token: return self.unauthorized_response() @@ -16,11 +17,31 @@ class SaleOrder(controller.Controller): sale_order_id = int(kw.get('sale_order_id', '0')) sale_number = str(kw.get('sale_number', '')) if sale_order_id > 0: - sales = request.env['sale.order'].search_read([('id', '=', sale_order_id)], fields=['id', 'name', 'amount_total', 'state']) + query = [('id', '=', sale_order_id)] + # sales = request.env['sale.order'].search_read([('id', '=', sale_order_id)], fields=['id', 'name', 'amount_total', 'state']) + sales = request.env['sale.order'].search(query, limit=1) else: - sales = request.env['sale.order'].search_read([('name', '=', sale_number)], fields=['id', 'name', 'amount_total', 'state']) + query = [('name', '=', sale_number)] + # sales = request.env['sale.order'].search_read([('name', '=', sale_number)], fields=['id', 'name', 'amount_total', 'state']) + sales = request.env['sale.order'].search(query, limit=1) + data = [] + for sale in sales: + product_name = '' + product_not_in_id = 0 + for line in sale.order_line: + product_name = line.product_id.name + product_not_in_id = line.product_id.id + break + data.append({ + 'id': sale.id, + 'name': sale.name, + 'amount_total': sale.amount_total, + 'state': sale.state, + 'product_name': product_name, + 'product_not_in_id': product_not_in_id, + }) - return self.response(sales) + return self.response(data) @http.route(PREFIX_PARTNER + 'sale_order', auth='public', method=['GET', 'OPTIONS']) def get_partner_sale_order(self, **kw): -- cgit v1.2.3 From 27a1a3d68f728455ae196d2aa5736858ba623d09 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Tue, 31 Jan 2023 13:57:05 +0700 Subject: api category tree --- indoteknik_api/controllers/api_v1/sale_order.py | 1 - 1 file changed, 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1/sale_order.py') diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 7ce8cd43..9b52e79a 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -127,7 +127,6 @@ class SaleOrder(controller.Controller): 'partner_purchase_order_file': params['value']['po_file'] } sale_order = request.env['sale.order'].create([[parameters]]) - var = json.loads(kw.get('transaction_time', '{}')) order_line = json.loads(params['value']['order_line']) parameters = [] for line in order_line: -- cgit v1.2.3 From 3d402f5a12d50d2264dde918d4b893b9c8943389 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Thu, 2 Feb 2023 17:12:04 +0700 Subject: download tax invoice --- indoteknik_api/controllers/api_v1/sale_order.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1/sale_order.py') diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 11186605..52ccf9fa 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -121,6 +121,7 @@ class SaleOrder(controller.Controller): 'order_line': ['required', 'default:[]'], 'po_number': [], 'po_file': [], + 'type': [], }) if not user_token['partner_id'] == params['value']['partner_id']: @@ -145,8 +146,10 @@ class SaleOrder(controller.Controller): 'real_shipping_id': params['value']['partner_shipping_id'], 'partner_invoice_id': params['value']['partner_invoice_id'], 'partner_purchase_order_name': params['value']['po_number'], - 'partner_purchase_order_file': params['value']['po_file'] + 'partner_purchase_order_file': params['value']['po_file'], } + if params['value']['type'] == 'sale_order': + parameters['approval_status'] = 'pengajuan1' sale_order = request.env['sale.order'].create([[parameters]]) order_line = json.loads(params['value']['order_line']) parameters = [] -- cgit v1.2.3 From 446e3be759d72b7a06b4e4671b91c6f9c8bfa903 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Mon, 6 Feb 2023 12:02:42 +0700 Subject: add api cancel SO and upload PO in SO --- indoteknik_api/controllers/api_v1/sale_order.py | 56 +++++++++++++++++++++++++ 1 file changed, 56 insertions(+) (limited to 'indoteknik_api/controllers/api_v1/sale_order.py') diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 52ccf9fa..9a4b23d9 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -105,6 +105,62 @@ class SaleOrder(controller.Controller): return self.response(data) + @http.route(PREFIX_PARTNER + 'sale_order//upload_po', auth='public', method=['POST', 'OPTIONS'], csrf=False) + def partner_upload_po_sale_order(self, **kw): + user_token = self.authenticate() + if not user_token: + return self.unauthorized_response() + + params = self.get_request_params(kw, { + 'partner_id': ['number'], + 'id': ['number'], + 'name': [], + 'file': [] + }) + if not user_token['partner_id'] == params['value']['partner_id']: + return self.unauthorized_response() + if not params['valid']: + return self.response(code=400, description=params) + partner_child_ids = self.get_partner_child_ids(params['value']['partner_id']) + domain = [ + ('id', '=', params['value']['id']), + ('partner_id', 'in', partner_child_ids) + ] + data = False + sale_order = request.env['sale.order'].search(domain) + if sale_order: + sale_order.partner_purchase_order_name = params['value']['name'] + sale_order.partner_purchase_order_file = params['value']['file'] + data = sale_order.id + return self.response(data) + + @http.route(PREFIX_PARTNER + 'sale_order//cancel', auth='public', method=['POST', 'OPTIONS'], csrf=False) + def partner_cancel_sale_order(self, **kw): + user_token = self.authenticate() + if not user_token: + return self.unauthorized_response() + + params = self.get_request_params(kw, { + 'partner_id': ['number'], + 'id': ['number'] + }) + if not user_token['partner_id'] == params['value']['partner_id']: + return self.unauthorized_response() + if not params['valid']: + return self.response(code=400, description=params) + + partner_child_ids = self.get_partner_child_ids(params['value']['partner_id']) + domain = [ + ('id', '=', params['value']['id']), + ('partner_id', 'in', partner_child_ids) + ] + data = False + sale_order = request.env['sale.order'].search(domain) + if sale_order: + sale_order.state = 'cancel' + data = sale_order.id + return self.response(data) + @http.route(PREFIX_PARTNER + 'sale_order/checkout', auth='public', method=['POST', 'OPTIONS'], csrf=False) def create_partner_sale_order(self, **kw): user_token = self.authenticate() -- cgit v1.2.3 From ef2f9fefe4df844f5a676d2a166dcd4dfdaa249b Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Mon, 6 Feb 2023 16:14:43 +0700 Subject: fix feature --- indoteknik_api/controllers/api_v1/sale_order.py | 40 +++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'indoteknik_api/controllers/api_v1/sale_order.py') diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 9a4b23d9..1c67d6c5 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -3,6 +3,7 @@ from odoo import http from odoo.http import request import json + class SaleOrder(controller.Controller): prefix = '/api/v1/' PREFIX_PARTNER = prefix + 'partner//' @@ -134,6 +135,45 @@ class SaleOrder(controller.Controller): data = sale_order.id return self.response(data) + @http.route(PREFIX_PARTNER + 'sale_order//download_po/', auth='none', method=['GET']) + def partner_download_po_sale_order(self, id, token): + id = int(id) + + rest_api = request.env['rest.api'] + md5_valid = rest_api.md5_salt_valid(id, 'sale.order', token) + if not md5_valid: + return self.response('Unauthorized') + + sale_order = request.env['sale.order'].sudo().search_read([('id', '=', id)], ['partner_purchase_order_name']) + attachment = rest_api.get_single_attachment('sale.order', 'partner_purchase_order_file', id) + if attachment and len(sale_order) > 0: + return rest_api.response_attachment({ + 'content': attachment['datas'], + 'decode_content': True, + 'mimetype': attachment['mimetype'], + 'filename': sale_order[0]['partner_purchase_order_name'] + }) + return self.response('Dokumen tidak ditemukan', code=404) + + @http.route(PREFIX_PARTNER + 'sale_order//download/', auth='none', method=['GET']) + def partner_download_sale_order(self, id, token): + id = int(id) + + rest_api = request.env['rest.api'] + md5_valid = rest_api.md5_salt_valid(id, 'sale.order', token) + if not md5_valid: + return self.response('Unauthorized') + + sale_order = request.env['sale.order'].sudo().search_read([('id', '=', id)], ['name']) + pdf, type = request.env['ir.actions.report'].sudo().search([('report_name', '=', 'sale.report_saleorder')])._render_qweb_pdf([id]) + if pdf and len(sale_order) > 0: + return rest_api.response_attachment({ + 'content': pdf, + 'mimetype': 'application/pdf', + 'filename': sale_order[0]['name'] + }) + return self.response('Dokumen tidak ditemukan', code=404) + @http.route(PREFIX_PARTNER + 'sale_order//cancel', auth='public', method=['POST', 'OPTIONS'], csrf=False) def partner_cancel_sale_order(self, **kw): user_token = self.authenticate() -- cgit v1.2.3