From 7df14abdd24cfaf92d92f155a51c0111e9425620 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Fri, 30 Jun 2023 21:29:43 +0700 Subject: get tracking history of airway bill --- indoteknik_custom/models/__init__.py | 1 + indoteknik_custom/models/airway_bill.py | 63 ++++++++++++++++++++++++++ indoteknik_custom/models/stock_picking.py | 1 + indoteknik_custom/security/ir.model.access.csv | 3 +- 4 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 indoteknik_custom/models/airway_bill.py diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py index 3c6ce46c..2f0a230a 100755 --- a/indoteknik_custom/models/__init__.py +++ b/indoteknik_custom/models/__init__.py @@ -63,3 +63,4 @@ from . import procurement_monitoring_detail from . import brand_vendor from . import manufacturing from . import requisition +from . import airway_bill diff --git a/indoteknik_custom/models/airway_bill.py b/indoteknik_custom/models/airway_bill.py new file mode 100644 index 00000000..b81df5dd --- /dev/null +++ b/indoteknik_custom/models/airway_bill.py @@ -0,0 +1,63 @@ +from odoo import models, api, fields +from odoo.exceptions import UserError +from datetime import datetime, timedelta +import logging +import requests +import json + +_logger = logging.getLogger(__name__) + +_key = '7ac9883688da043b50cc32f0e3070bb6' +_url = 'https://pro.rajaongkir.com/api/waybill' + +class AirwayBill(models.Model): + _name = 'airway.bill' + do_id = fields.Many2one('stock.picking', string='DO') + so_id = fields.Many2one('sale.order', string='SO') + number = fields.Char(string='Resi', help='Nomor Resi') + delivered = fields.Char(string='Delivered', help='terkirim atau belum / true or false') + response = fields.Char(string='Response', help='hasil history tracking dalam format json') + + def _update_data_way_bill(self): + # jne, pos, tiki, wahana, jnt, rpx, sap, sicepat, jet, dse, dan first + # 51, 53, 54, 7, 57, 55, 59, 59, 27, 60, 62, 64 + current_time = datetime.now() + delta_time = current_time - timedelta(days=30) + + current_time = current_time.strftime('%Y-%m-%d %H:%M:%S') + delta_time = delta_time.strftime('%Y-%m-%d %H:%M:%S') + query = [ + ('date_done', '>', delta_time), + ('delivery_tracking_no', '!=', False), + ('delivery_tracking_no', 'not ilike', '-'), + ('counter_way_bill', '<=', 7), + ('carrier_id.id', 'in', [51, 53, 54, 7, 57, 55, 59, 59, 27, 60, 62, 64]), + ] + outs = self.env['stock.picking'].search(query, order='id') + for out in outs: + rajaongkir = self.env['rajaongkir.kurir'].search([('delivery_carrier_id', '=', out.carrier_id.id)], limit=1) + history = self._get_waybill_history(out.delivery_tracking_no, rajaongkir.name) + delivered = json.loads(history)['rajaongkir']['result']['delivered'] + values = { + 'do_id': out.id, + 'so_id': out.sale_id.id, + 'number': out.delivery_tracking_no, + 'delivered': delivered, + 'response': history, + } + self.create(values) + out.counter_way_bill = out.counter_way_bill + 1 + + def _get_waybill_history(self, way_bill_number=0, shipper=0): + headers = { + 'content-type': 'application/x-www-form-urlencoded', + 'key': _key, + } + + data = { + 'waybill': way_bill_number, + 'courier': shipper, + } + + response = requests.post(_url, headers=headers, data=data) + return response.text \ No newline at end of file diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index a14e71a3..99c41c02 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -68,6 +68,7 @@ class StockPicking(models.Model): ('hold', 'Hold by Sales'), ('not_paid', 'Customer belum bayar') ], string='Note', help='jika field ini diisi maka tidak akan dihitung ke lead time') + counter_way_bill = fields.Integer(string='Counter Tracking', default=0) def action_create_invoice_from_mr(self): """Create the invoice associated to the PO. diff --git a/indoteknik_custom/security/ir.model.access.csv b/indoteknik_custom/security/ir.model.access.csv index 26e852f1..46ac157d 100755 --- a/indoteknik_custom/security/ir.model.access.csv +++ b/indoteknik_custom/security/ir.model.access.csv @@ -51,4 +51,5 @@ access_rajaongkir_kurir,access.rajaongkir.kurir,model_rajaongkir_kurir,,1,1,1,1 access_brand_vendor,access.brand.vendor,model_brand_vendor,,1,1,1,1 access_requisition,access.requisition,model_requisition,,1,1,1,1 access_requisition_line,access.requisition.line,model_requisition_line,,1,1,1,1 -access_requisition_purchase_match,access.requisition.purchase.match,model_requisition_purchase_match,,1,1,1,1 \ No newline at end of file +access_requisition_purchase_match,access.requisition.purchase.match,model_requisition_purchase_match,,1,1,1,1 +access_airway_bill,access.airway.bill,model_airway_bill,,1,1,1,1 \ No newline at end of file -- cgit v1.2.3 From 3b246a800c9bec73300b8b0f75d4b84c5aa1ffec Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Thu, 6 Jul 2023 13:20:52 +0700 Subject: Add airway bill manifest --- indoteknik_custom/models/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py index cf6887f9..1e98361e 100755 --- a/indoteknik_custom/models/__init__.py +++ b/indoteknik_custom/models/__init__.py @@ -64,4 +64,5 @@ from . import brand_vendor from . import manufacturing from . import requisition from . import airway_bill +from . import airway_bill_manifest from . import account_move_due_extension -- cgit v1.2.3 From 3a008e900f7684843f7bc07109d484f77939e4c7 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Thu, 6 Jul 2023 13:21:08 +0700 Subject: Add airway bill manifest model --- indoteknik_custom/models/airway_bill_manifest.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 indoteknik_custom/models/airway_bill_manifest.py diff --git a/indoteknik_custom/models/airway_bill_manifest.py b/indoteknik_custom/models/airway_bill_manifest.py new file mode 100644 index 00000000..29a76303 --- /dev/null +++ b/indoteknik_custom/models/airway_bill_manifest.py @@ -0,0 +1,11 @@ +from odoo import models, fields + + +class AirwayBillManifest(models.Model): + _name = 'airway.bill.manifest' + + waybill_id = fields.Many2one('airway.bill') + code = fields.Char('Code') + description = fields.Char('Description') + datetime = fields.Datetime('Datetime') + city = fields.Char('city') \ No newline at end of file -- cgit v1.2.3 From 5914d2028dd148d3b83bbd2d27d8580772742762 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Thu, 6 Jul 2023 13:22:18 +0700 Subject: Update airway bill function --- indoteknik_custom/models/airway_bill.py | 28 +++++++++++++++++++++------- indoteknik_custom/models/stock_picking.py | 2 +- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/indoteknik_custom/models/airway_bill.py b/indoteknik_custom/models/airway_bill.py index b81df5dd..781e7cd1 100644 --- a/indoteknik_custom/models/airway_bill.py +++ b/indoteknik_custom/models/airway_bill.py @@ -1,5 +1,4 @@ -from odoo import models, api, fields -from odoo.exceptions import UserError +from odoo import models, fields from datetime import datetime, timedelta import logging import requests @@ -12,12 +11,18 @@ _url = 'https://pro.rajaongkir.com/api/waybill' class AirwayBill(models.Model): _name = 'airway.bill' + _rec_name = 'number' + do_id = fields.Many2one('stock.picking', string='DO') so_id = fields.Many2one('sale.order', string='SO') number = fields.Char(string='Resi', help='Nomor Resi') - delivered = fields.Char(string='Delivered', help='terkirim atau belum / true or false') + delivered = fields.Boolean(string='Delivered', help='terkirim atau belum / true or false') response = fields.Char(string='Response', help='hasil history tracking dalam format json') + def decode_response(self): + self.ensure_one() + return self._json_decode(self.response) + def _update_data_way_bill(self): # jne, pos, tiki, wahana, jnt, rpx, sap, sicepat, jet, dse, dan first # 51, 53, 54, 7, 57, 55, 59, 59, 27, 60, 62, 64 @@ -27,17 +32,20 @@ class AirwayBill(models.Model): current_time = current_time.strftime('%Y-%m-%d %H:%M:%S') delta_time = delta_time.strftime('%Y-%m-%d %H:%M:%S') query = [ + '|', + ('waybill_id.delivered', '=', False), ('date_done', '>', delta_time), ('delivery_tracking_no', '!=', False), ('delivery_tracking_no', 'not ilike', '-'), - ('counter_way_bill', '<=', 7), ('carrier_id.id', 'in', [51, 53, 54, 7, 57, 55, 59, 59, 27, 60, 62, 64]), ] outs = self.env['stock.picking'].search(query, order='id') for out in outs: rajaongkir = self.env['rajaongkir.kurir'].search([('delivery_carrier_id', '=', out.carrier_id.id)], limit=1) history = self._get_waybill_history(out.delivery_tracking_no, rajaongkir.name) - delivered = json.loads(history)['rajaongkir']['result']['delivered'] + if not history: + continue + delivered = history['rajaongkir']['result']['delivered'] values = { 'do_id': out.id, 'so_id': out.sale_id.id, @@ -46,7 +54,6 @@ class AirwayBill(models.Model): 'response': history, } self.create(values) - out.counter_way_bill = out.counter_way_bill + 1 def _get_waybill_history(self, way_bill_number=0, shipper=0): headers = { @@ -60,4 +67,11 @@ class AirwayBill(models.Model): } response = requests.post(_url, headers=headers, data=data) - return response.text \ No newline at end of file + return self._json_decode(response.text) + + def _json_decode(self, content): + try: + response = json.loads(content) + return response + except: + return False \ No newline at end of file diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 99c41c02..724b483b 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -68,7 +68,7 @@ class StockPicking(models.Model): ('hold', 'Hold by Sales'), ('not_paid', 'Customer belum bayar') ], string='Note', help='jika field ini diisi maka tidak akan dihitung ke lead time') - counter_way_bill = fields.Integer(string='Counter Tracking', default=0) + waybill_id = fields.One2many(comodel_name='airway.bill', inverse_name='do_id', string='Airway Bill') def action_create_invoice_from_mr(self): """Create the invoice associated to the PO. -- cgit v1.2.3 From 93f85a378d6a8ea5b04a4320346a1a8decd01514 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Thu, 6 Jul 2023 13:22:29 +0700 Subject: Add views airway bill --- indoteknik_custom/__manifest__.py | 1 + indoteknik_custom/views/airway_bill.xml | 48 +++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 indoteknik_custom/views/airway_bill.xml diff --git a/indoteknik_custom/__manifest__.py b/indoteknik_custom/__manifest__.py index 79f6e195..a8b65ec4 100755 --- a/indoteknik_custom/__manifest__.py +++ b/indoteknik_custom/__manifest__.py @@ -77,6 +77,7 @@ 'views/brand_vendor.xml', 'views/requisition.xml', 'views/landedcost.xml', + 'views/airway_bill.xml', 'report/report.xml', 'report/report_banner_banner.xml', 'report/report_banner_banner2.xml', diff --git a/indoteknik_custom/views/airway_bill.xml b/indoteknik_custom/views/airway_bill.xml new file mode 100644 index 00000000..5f6e700a --- /dev/null +++ b/indoteknik_custom/views/airway_bill.xml @@ -0,0 +1,48 @@ + + + + airway.bill.tree + airway.bill + + + + + + + + + + + + airway.bill.form + airway.bill + +
+ + + + + + + + + + + +
+
+
+ + + Airway Bill + ir.actions.act_window + airway.bill + tree,form + + + +
\ No newline at end of file -- cgit v1.2.3 From 21ee3f19583c28c3df3785eda0e6ce4b4ef7e48d Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 6 Jul 2023 15:55:10 +0700 Subject: API airway bill --- indoteknik_api/controllers/api_v1/sale_order.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index c1665b72..038508c4 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -418,3 +418,23 @@ class SaleOrder(controller.Controller): } return self.response(data) + + @http.route('/api/sale_order//airway', auth='public', methods=['GET']) + def get_sale_order_airway_bill_by_id(self, **kw): + if not self.authenticate(): + return self.unauthorized_response() + + id = kw.get('id') + airway_bill = request.env['airway.bill'].search([('so_id', '=', id)], limit=1) + + data = airway_bill.decode_response() + result = data['rajaongkir']['result'] + + response = { + 'delivery_status': result['delivery_status'], + 'manifest': result['manifest'], + 'delivered': result['delivered'], + 'waybill_number': result['summary']['waybill_number'] + } + + return self.response(response) \ No newline at end of file -- cgit v1.2.3 From 444e0b38349a33c9bd007e262eb8cb7f4c39f61d Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 6 Jul 2023 16:35:21 +0700 Subject: add line to airway bill --- indoteknik_custom/models/airway_bill.py | 50 ++++++++++++++++++++++-- indoteknik_custom/models/airway_bill_manifest.py | 28 ++++++++++++- indoteknik_custom/security/ir.model.access.csv | 3 +- indoteknik_custom/views/airway_bill.xml | 20 +++++++++- 4 files changed, 93 insertions(+), 8 deletions(-) diff --git a/indoteknik_custom/models/airway_bill.py b/indoteknik_custom/models/airway_bill.py index 781e7cd1..6da83af6 100644 --- a/indoteknik_custom/models/airway_bill.py +++ b/indoteknik_custom/models/airway_bill.py @@ -16,14 +16,34 @@ class AirwayBill(models.Model): do_id = fields.Many2one('stock.picking', string='DO') so_id = fields.Many2one('sale.order', string='SO') number = fields.Char(string='Resi', help='Nomor Resi') + manifest_ids = fields.One2many('airway.bill.manifest', 'waybill_id', string='Airway Bill Lines', auto_join=True) delivered = fields.Boolean(string='Delivered', help='terkirim atau belum / true or false') response = fields.Char(string='Response', help='hasil history tracking dalam format json') + way_bill_date = fields.Char(string='Way Bill Date', compute='_compute_way_bill_date') + way_bill_time = fields.Char(string='Way Bill Time') + weigth = fields.Char(string='Weigth') + origin = fields.Char(string='Origin') + destination = fields.Char(string='Destination') + shipper_name = fields.Char(string='Shipper Name') + shipper_address1 = fields.Char(string='Shipper Address 1') + shipper_address2 = fields.Char(string='Shipper Address 2') + shipper_address3 = fields.Char(string='Shipper Address 3') + shipper_city = fields.Char(string='Shipper City') + receiver_name = fields.Char(string='Receiver Name') + receiver_address1 = fields.Char(string='Receiver Address 1') + receiver_address2 = fields.Char(string='Receiver Address 2') + receiver_address3 = fields.Char(string='Receiver Address 3') + receiver_city = fields.Char(string='Receiver City') + status = fields.Char(string='Status') + pod_receiver = fields.Char(string='Pod Receiver') + pod_date = fields.Char(string='Pod Date') + pod_time = fields.Char(string='Pod Time') def decode_response(self): self.ensure_one() return self._json_decode(self.response) - def _update_data_way_bill(self): + def _update_data_way_bill(self, history): # jne, pos, tiki, wahana, jnt, rpx, sap, sicepat, jet, dse, dan first # 51, 53, 54, 7, 57, 55, 59, 59, 27, 60, 62, 64 current_time = datetime.now() @@ -41,7 +61,7 @@ class AirwayBill(models.Model): ] outs = self.env['stock.picking'].search(query, order='id') for out in outs: - rajaongkir = self.env['rajaongkir.kurir'].search([('delivery_carrier_id', '=', out.carrier_id.id)], limit=1) + rajaongkir = self.env['rajaongkir.kurir'].search([('delivery_carrier_id', '=', out.carrier_id.id)]) history = self._get_waybill_history(out.delivery_tracking_no, rajaongkir.name) if not history: continue @@ -53,7 +73,13 @@ class AirwayBill(models.Model): 'delivered': delivered, 'response': history, } - self.create(values) + waybill = out.waybill_id + if not waybill: + waybill = self.create(values) + + waybill.response = history + waybill.manifest_ids.unlink() + self.env['airway.bill.manifest'].generate_airway_bill_line(history, waybill.id) def _get_waybill_history(self, way_bill_number=0, shipper=0): headers = { @@ -74,4 +100,20 @@ class AirwayBill(models.Model): response = json.loads(content) return response except: - return False \ No newline at end of file + return False + + def _get_history(self, key): + response = self.decode_response() + if not response: + return response + return self.decode_response()['raja_ongkir']['result'][key] + + def _compute_way_bill_date(self): + for airway in self: + details = airway._get_history('details') + if details: + airway.way_bill_date = details['waybill_date'] + else: + airway.way_bill_date = '-' + + \ No newline at end of file diff --git a/indoteknik_custom/models/airway_bill_manifest.py b/indoteknik_custom/models/airway_bill_manifest.py index 29a76303..159f4b9a 100644 --- a/indoteknik_custom/models/airway_bill_manifest.py +++ b/indoteknik_custom/models/airway_bill_manifest.py @@ -1,11 +1,35 @@ from odoo import models, fields +import logging +_logger = logging.getLogger(__name__) class AirwayBillManifest(models.Model): _name = 'airway.bill.manifest' + _description = 'Airway B ill Line' + _order = 'waybill_id, id' - waybill_id = fields.Many2one('airway.bill') + waybill_id = fields.Many2one('airway.bill', string='Airway Ref', required=True, ondelete='cascade', index=True, copy=False) code = fields.Char('Code') description = fields.Char('Description') datetime = fields.Datetime('Datetime') - city = fields.Char('city') \ No newline at end of file + city = fields.Char('City') + + + def generate_airway_bill_line(self, history, waybill_id): + manifests = history['rajaongkir']['result']['manifest'] + count = 0 + for manifest in manifests: + code = manifest['manifest_code'] + description = manifest['manifest_description'] + date = manifest['manifest_date'] + time = manifest['manifest_time'] + city = manifest['city_name'] + self.create({ + 'waybill_id': waybill_id, + 'code': code, + 'description': description, + 'datetime': date+' '+time, + 'city': city, + }) + count += 1 + _logger.info("Airway Bill generated %s" % count) \ No newline at end of file diff --git a/indoteknik_custom/security/ir.model.access.csv b/indoteknik_custom/security/ir.model.access.csv index 1df01563..24917d9e 100755 --- a/indoteknik_custom/security/ir.model.access.csv +++ b/indoteknik_custom/security/ir.model.access.csv @@ -54,4 +54,5 @@ access_brand_vendor,access.brand.vendor,model_brand_vendor,,1,1,1,1 access_requisition,access.requisition,model_requisition,,1,1,1,1 access_requisition_line,access.requisition.line,model_requisition_line,,1,1,1,1 access_requisition_purchase_match,access.requisition.purchase.match,model_requisition_purchase_match,,1,1,1,1 -access_airway_bill,access.airway.bill,model_airway_bill,,1,1,1,1 \ No newline at end of file +access_airway_bill,access.airway.bill,model_airway_bill,,1,1,1,1 +access_airway_bill_manifest,access.airway.bill.manifest,model_airway_bill_manifest,,1,1,1,1 \ No newline at end of file diff --git a/indoteknik_custom/views/airway_bill.xml b/indoteknik_custom/views/airway_bill.xml index 5f6e700a..99f80d7b 100644 --- a/indoteknik_custom/views/airway_bill.xml +++ b/indoteknik_custom/views/airway_bill.xml @@ -25,9 +25,27 @@ - + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3 From a07c0242de1c79f3ea0add3ee6b51e2cbf4982b6 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 7 Jul 2023 08:49:23 +0700 Subject: compute field airway bill --- indoteknik_custom/models/airway_bill.py | 175 ++++++++++++++++++++++++++++---- indoteknik_custom/views/airway_bill.xml | 24 +++++ 2 files changed, 177 insertions(+), 22 deletions(-) diff --git a/indoteknik_custom/models/airway_bill.py b/indoteknik_custom/models/airway_bill.py index 6da83af6..09f88a91 100644 --- a/indoteknik_custom/models/airway_bill.py +++ b/indoteknik_custom/models/airway_bill.py @@ -19,25 +19,25 @@ class AirwayBill(models.Model): manifest_ids = fields.One2many('airway.bill.manifest', 'waybill_id', string='Airway Bill Lines', auto_join=True) delivered = fields.Boolean(string='Delivered', help='terkirim atau belum / true or false') response = fields.Char(string='Response', help='hasil history tracking dalam format json') - way_bill_date = fields.Char(string='Way Bill Date', compute='_compute_way_bill_date') - way_bill_time = fields.Char(string='Way Bill Time') - weigth = fields.Char(string='Weigth') - origin = fields.Char(string='Origin') - destination = fields.Char(string='Destination') - shipper_name = fields.Char(string='Shipper Name') - shipper_address1 = fields.Char(string='Shipper Address 1') - shipper_address2 = fields.Char(string='Shipper Address 2') - shipper_address3 = fields.Char(string='Shipper Address 3') - shipper_city = fields.Char(string='Shipper City') - receiver_name = fields.Char(string='Receiver Name') - receiver_address1 = fields.Char(string='Receiver Address 1') - receiver_address2 = fields.Char(string='Receiver Address 2') - receiver_address3 = fields.Char(string='Receiver Address 3') - receiver_city = fields.Char(string='Receiver City') - status = fields.Char(string='Status') - pod_receiver = fields.Char(string='Pod Receiver') - pod_date = fields.Char(string='Pod Date') - pod_time = fields.Char(string='Pod Time') + way_bill_date = fields.Char(string='Way Bill Date', compute='_compute_way_bill_datetime') + # way_bill_time = fields.Char(string='Way Bill Time') + weight = fields.Char(string='Weight ', compute='_compute_way_bill_weight') + origin = fields.Char(string='Origin', compute='_compute_way_bill_origin') + destination = fields.Char(string='Destination', compute='_compute_way_bill_destination') + shipper_name = fields.Char(string='Shipper Name', compute='_compute_way_bill_shipper_name') + shipper_address1 = fields.Char(string='Shipper Address 1', compute='_compute_way_bill_shipper_address1') + shipper_address2 = fields.Char(string='Shipper Address 2', compute='_compute_way_bill_shipper_address2') + shipper_address3 = fields.Char(string='Shipper Address 3', compute='_compute_way_bill_shipper_address3') + shipper_city = fields.Char(string='Shipper City', compute='_compute_way_bill_shipper_city') + receiver_name = fields.Char(string='Receiver Name', compute='_compute_way_bill_receiver_name') + receiver_address1 = fields.Char(string='Receiver Address 1', compute='_compute_way_bill_receiver_address1') + receiver_address2 = fields.Char(string='Receiver Address 2', compute='_compute_way_bill_receiver_address2') + receiver_address3 = fields.Char(string='Receiver Address 3', compute='_compute_way_bill_receiver_address3') + receiver_city = fields.Char(string='Receiver City', compute='_compute_way_bill_receiver_city') + status = fields.Char(string='Status', compute='_compute_way_bill_status') + pod_receiver = fields.Char(string='Pod Receiver', compute='_compute_way_bill_pod_receiver') + pod_datetime = fields.Char(string='Pod Date', compute='_compute_way_bill_pod_datetime') + # pod_time = fields.Char(string='Pod Time') def decode_response(self): self.ensure_one() @@ -108,12 +108,143 @@ class AirwayBill(models.Model): return response return self.decode_response()['raja_ongkir']['result'][key] - def _compute_way_bill_date(self): + def _compute_way_bill_datetime(self): for airway in self: details = airway._get_history('details') if details: - airway.way_bill_date = details['waybill_date'] + waybill_date = details['waybill_date'] + waybill_time = details['waybill_date'] + airway.way_bill_date = waybill_date+' '+waybill_time else: airway.way_bill_date = '-' - \ No newline at end of file + def _compute_way_bill_weight(self): + for airway in self: + details = airway._get_history('details') + if details: + airway.weight = details['weight'] + else: + airway.weight = '-' + + def _compute_way_bill_origin(self): + for airway in self: + details = airway._get_history('details') + if details: + airway.origin = details['origin'] + else: + airway.origin = '-' + + def _compute_way_bill_destination(self): + for airway in self: + details = airway._get_history('details') + if details: + airway.destination = details['destination'] + else: + airway.destination = '-' + + def _compute_way_bill_shipper_name(self): + for airway in self: + details = airway._get_history('details') + if details: + airway.shipper_name = details['shipper_name'] + else: + airway.shipper_name = '-' + + def _compute_way_bill_shipper_address1(self): + for airway in self: + details = airway._get_history('details') + if details: + airway.shipper_address1 = details['shipper_address1'] + else: + airway.shipper_address1 = '-' + + def _compute_way_bill_shipper_address2(self): + for airway in self: + details = airway._get_history('details') + if details: + airway.shipper_address2 = details['shipper_address2'] + else: + airway.shipper_address2 = '-' + + def _compute_way_bill_shipper_address3(self): + for airway in self: + details = airway._get_history('details') + if details: + airway.shipper_address3 = details['shipper_address3'] + else: + airway.shipper_address3 = '-' + + def _compute_way_bill_shipper_city(self): + for airway in self: + details = airway._get_history('details') + if details: + airway.shipper_city = details['shipper_city'] + else: + airway.shipper_city = '-' + + def _compute_way_bill_receiver_name(self): + for airway in self: + details = airway._get_history('details') + if details: + airway.receiver_name = details['receiver_name'] + else: + airway.receiver_name = '-' + + def _compute_way_bill_receiver_address1(self): + for airway in self: + details = airway._get_history('details') + if details: + airway.receiver_address1 = details['receiver_address1'] + else: + airway.receiver_address1 = '-' + + def _compute_way_bill_receiver_address2(self): + for airway in self: + details = airway._get_history('details') + if details: + airway.receiver_address2 = details['receiver_address2'] + else: + airway.receiver_address2 = '-' + + def _compute_way_bill_receiver_address3(self): + for airway in self: + details = airway._get_history('details') + if details: + airway.receiver_address3 = details['receiver_address3'] + else: + airway.receiver_address3 = '-' + + def _compute_way_bill_receiver_city(self): + for airway in self: + details = airway._get_history('details') + if details: + airway.receiver_city = details['receiver_city'] + else: + airway.receiver_city = '-' + + def _compute_way_bill_status(self): + for airway in self: + details = airway._get_history('delivery_status') + if details: + airway.status = details['status'] + else: + airway.status = '-' + + def _compute_way_bill_pod_receiver(self): + for airway in self: + details = airway._get_history('delivery_status') + if details: + airway.pod_receiver = details['pod_receiver'] + else: + airway.pod_receiver = '-' + + def _compute_way_bill_pod_datetime(self): + for airway in self: + details = airway._get_history('delivery_status') +4 if details: + pod_date = details['pod_date'] + pod_time = details['pod_tiem'] + airway.pod_datetime = pod_date+' '+pod_time + else: + airway.pod_datetime = '-' + \ No newline at end of file diff --git a/indoteknik_custom/views/airway_bill.xml b/indoteknik_custom/views/airway_bill.xml index 99f80d7b..2107bdd7 100644 --- a/indoteknik_custom/views/airway_bill.xml +++ b/indoteknik_custom/views/airway_bill.xml @@ -42,9 +42,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3 From a3f31a6b473177a459673bf815d474f7e11d734c Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 7 Jul 2023 09:01:25 +0700 Subject: refactor compute field waybill --- indoteknik_custom/models/airway_bill.py | 149 ++++++++++---------------------- 1 file changed, 47 insertions(+), 102 deletions(-) diff --git a/indoteknik_custom/models/airway_bill.py b/indoteknik_custom/models/airway_bill.py index 09f88a91..8429d250 100644 --- a/indoteknik_custom/models/airway_bill.py +++ b/indoteknik_custom/models/airway_bill.py @@ -106,145 +106,90 @@ class AirwayBill(models.Model): response = self.decode_response() if not response: return response - return self.decode_response()['raja_ongkir']['result'][key] - + return response['raja_ongkir']['result'][key] + + def _compute_way_bill(self, airway, key, attribute): + details = airway._get_history('details') + delivery_status = airway._get_history('delivery_status') + if details: + setattr(airway, attribute, details[key]) + elif delivery_status: + setattr(airway, attribute, delivery_status[key]) + else: + setattr(airway, attribute, '-') + def _compute_way_bill_datetime(self): for airway in self: - details = airway._get_history('details') - if details: - waybill_date = details['waybill_date'] - waybill_time = details['waybill_date'] - airway.way_bill_date = waybill_date+' '+waybill_time - else: - airway.way_bill_date = '-' + self._compute_way_bill(airway, 'waybill_date', 'way_bill_date') def _compute_way_bill_weight(self): for airway in self: - details = airway._get_history('details') - if details: - airway.weight = details['weight'] - else: - airway.weight = '-' - + self._compute_way_bill(airway, 'weight', 'weight') + def _compute_way_bill_origin(self): for airway in self: - details = airway._get_history('details') - if details: - airway.origin = details['origin'] - else: - airway.origin = '-' - + self._compute_way_bill(airway, 'origin', 'origin') + def _compute_way_bill_destination(self): for airway in self: - details = airway._get_history('details') - if details: - airway.destination = details['destination'] - else: - airway.destination = '-' - + self._compute_way_bill(airway, 'destination', 'destination') + def _compute_way_bill_shipper_name(self): for airway in self: - details = airway._get_history('details') - if details: - airway.shipper_name = details['shipper_name'] - else: - airway.shipper_name = '-' - + self._compute_way_bill(airway, 'shipper_name', 'shipper_name') + def _compute_way_bill_shipper_address1(self): for airway in self: - details = airway._get_history('details') - if details: - airway.shipper_address1 = details['shipper_address1'] - else: - airway.shipper_address1 = '-' - + self._compute_way_bill(airway, 'shipper_address1', 'shipper_address1') + def _compute_way_bill_shipper_address2(self): for airway in self: - details = airway._get_history('details') - if details: - airway.shipper_address2 = details['shipper_address2'] - else: - airway.shipper_address2 = '-' - + self._compute_way_bill(airway, 'shipper_address2', 'shipper_address2') + def _compute_way_bill_shipper_address3(self): for airway in self: - details = airway._get_history('details') - if details: - airway.shipper_address3 = details['shipper_address3'] - else: - airway.shipper_address3 = '-' - + self._compute_way_bill(airway, 'shipper_address3', 'shipper_address3') + def _compute_way_bill_shipper_city(self): for airway in self: - details = airway._get_history('details') - if details: - airway.shipper_city = details['shipper_city'] - else: - airway.shipper_city = '-' - + self._compute_way_bill(airway, 'shipper_city', 'shipper_city') + def _compute_way_bill_receiver_name(self): for airway in self: - details = airway._get_history('details') - if details: - airway.receiver_name = details['receiver_name'] - else: - airway.receiver_name = '-' - + self._compute_way_bill(airway, 'receiver_name', 'receiver_name') + def _compute_way_bill_receiver_address1(self): for airway in self: - details = airway._get_history('details') - if details: - airway.receiver_address1 = details['receiver_address1'] - else: - airway.receiver_address1 = '-' - + self._compute_way_bill(airway, 'receiver_address1', 'receiver_address1') + def _compute_way_bill_receiver_address2(self): for airway in self: - details = airway._get_history('details') - if details: - airway.receiver_address2 = details['receiver_address2'] - else: - airway.receiver_address2 = '-' - + self._compute_way_bill(airway, 'receiver_address2', 'receiver_address2') + def _compute_way_bill_receiver_address3(self): for airway in self: - details = airway._get_history('details') - if details: - airway.receiver_address3 = details['receiver_address3'] - else: - airway.receiver_address3 = '-' - + self._compute_way_bill(airway, 'receiver_address3', 'receiver_address3') + def _compute_way_bill_receiver_city(self): for airway in self: - details = airway._get_history('details') - if details: - airway.receiver_city = details['receiver_city'] - else: - airway.receiver_city = '-' - + self._compute_way_bill(airway, 'receiver_city', 'receiver_city') + def _compute_way_bill_status(self): for airway in self: - details = airway._get_history('delivery_status') - if details: - airway.status = details['status'] - else: - airway.status = '-' - + self._compute_way_bill(airway, 'status', 'status') + def _compute_way_bill_pod_receiver(self): for airway in self: - details = airway._get_history('delivery_status') - if details: - airway.pod_receiver = details['pod_receiver'] - else: - airway.pod_receiver = '-' - + self._compute_way_bill(airway, 'pod_receiver', 'pod_receiver') + def _compute_way_bill_pod_datetime(self): for airway in self: details = airway._get_history('delivery_status') -4 if details: + if details: pod_date = details['pod_date'] - pod_time = details['pod_tiem'] - airway.pod_datetime = pod_date+' '+pod_time + pod_time = details['pod_time'] + airway.pod_datetime = pod_date + ' ' + pod_time else: airway.pod_datetime = '-' + \ No newline at end of file -- cgit v1.2.3 From 56df7760109b6e7c322bb8cf6f26b322b5c94bd8 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 7 Jul 2023 10:15:45 +0700 Subject: refactor compute field api airway bill --- indoteknik_custom/models/airway_bill.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/indoteknik_custom/models/airway_bill.py b/indoteknik_custom/models/airway_bill.py index 8429d250..edbaf671 100644 --- a/indoteknik_custom/models/airway_bill.py +++ b/indoteknik_custom/models/airway_bill.py @@ -106,18 +106,18 @@ class AirwayBill(models.Model): response = self.decode_response() if not response: return response - return response['raja_ongkir']['result'][key] + return response.get('raja_ongkir', {}).get('result', {}).get(key) def _compute_way_bill(self, airway, key, attribute): details = airway._get_history('details') delivery_status = airway._get_history('delivery_status') - if details: - setattr(airway, attribute, details[key]) - elif delivery_status: - setattr(airway, attribute, delivery_status[key]) - else: - setattr(airway, attribute, '-') - + value = None + if key in details: + value = details.get(key) + elif key in delivery_status: + value = delivery_status.get(key) + setattr(airway, attribute, value if value else '-') + def _compute_way_bill_datetime(self): for airway in self: self._compute_way_bill(airway, 'waybill_date', 'way_bill_date') @@ -136,7 +136,7 @@ class AirwayBill(models.Model): def _compute_way_bill_shipper_name(self): for airway in self: - self._compute_way_bill(airway, 'shipper_name', 'shipper_name') + self._compute_way_bill(airway, 'shippper_name', 'shipper_name') def _compute_way_bill_shipper_address1(self): for airway in self: @@ -181,14 +181,14 @@ class AirwayBill(models.Model): def _compute_way_bill_pod_receiver(self): for airway in self: self._compute_way_bill(airway, 'pod_receiver', 'pod_receiver') - + def _compute_way_bill_pod_datetime(self): for airway in self: details = airway._get_history('delivery_status') if details: pod_date = details['pod_date'] pod_time = details['pod_time'] - airway.pod_datetime = pod_date + ' ' + pod_time + airway.pod_datetime = pod_date+' '+pod_time else: airway.pod_datetime = '-' -- cgit v1.2.3 From b27d4c067249d4f91d5b8a6ce5c5dd57fbf79292 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 7 Jul 2023 10:55:24 +0700 Subject: refactor response api airway bill --- indoteknik_custom/models/airway_bill.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/indoteknik_custom/models/airway_bill.py b/indoteknik_custom/models/airway_bill.py index edbaf671..638ec530 100644 --- a/indoteknik_custom/models/airway_bill.py +++ b/indoteknik_custom/models/airway_bill.py @@ -43,7 +43,7 @@ class AirwayBill(models.Model): self.ensure_one() return self._json_decode(self.response) - def _update_data_way_bill(self, history): + def _update_data_way_bill(self): # jne, pos, tiki, wahana, jnt, rpx, sap, sicepat, jet, dse, dan first # 51, 53, 54, 7, 57, 55, 59, 59, 27, 60, 62, 64 current_time = datetime.now() @@ -77,7 +77,7 @@ class AirwayBill(models.Model): if not waybill: waybill = self.create(values) - waybill.response = history + waybill.response = json.dumps(history, indent=2, ensure_ascii=False) waybill.manifest_ids.unlink() self.env['airway.bill.manifest'].generate_airway_bill_line(history, waybill.id) @@ -106,15 +106,21 @@ class AirwayBill(models.Model): response = self.decode_response() if not response: return response - return response.get('raja_ongkir', {}).get('result', {}).get(key) + + if response.get('raja_ongkir', {}): + raja_ongkir = response.get('raja_ongkir', {}) + elif response.get('rajaongkir', {}): + raja_ongkir = response.get('rajaongkir', {}) + result = raja_ongkir.get('result', {}) + return result.get(key) def _compute_way_bill(self, airway, key, attribute): details = airway._get_history('details') delivery_status = airway._get_history('delivery_status') value = None - if key in details: + if details and key in details: value = details.get(key) - elif key in delivery_status: + elif delivery_status and key in delivery_status: value = delivery_status.get(key) setattr(airway, attribute, value if value else '-') -- cgit v1.2.3 From 6864978e0088a99b67d8cb0c9a0e9be636de78a8 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Fri, 7 Jul 2023 16:17:32 +0700 Subject: Delete unused field on airway_bill Deleted fields: - way_bill_time - pod_time --- indoteknik_custom/models/airway_bill.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/indoteknik_custom/models/airway_bill.py b/indoteknik_custom/models/airway_bill.py index 638ec530..d92b7e5e 100644 --- a/indoteknik_custom/models/airway_bill.py +++ b/indoteknik_custom/models/airway_bill.py @@ -20,7 +20,6 @@ class AirwayBill(models.Model): delivered = fields.Boolean(string='Delivered', help='terkirim atau belum / true or false') response = fields.Char(string='Response', help='hasil history tracking dalam format json') way_bill_date = fields.Char(string='Way Bill Date', compute='_compute_way_bill_datetime') - # way_bill_time = fields.Char(string='Way Bill Time') weight = fields.Char(string='Weight ', compute='_compute_way_bill_weight') origin = fields.Char(string='Origin', compute='_compute_way_bill_origin') destination = fields.Char(string='Destination', compute='_compute_way_bill_destination') @@ -37,7 +36,6 @@ class AirwayBill(models.Model): status = fields.Char(string='Status', compute='_compute_way_bill_status') pod_receiver = fields.Char(string='Pod Receiver', compute='_compute_way_bill_pod_receiver') pod_datetime = fields.Char(string='Pod Date', compute='_compute_way_bill_pod_datetime') - # pod_time = fields.Char(string='Pod Time') def decode_response(self): self.ensure_one() -- cgit v1.2.3 From aa57ac0744ef0fee2a44f3130e1ddbb1934a5621 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Fri, 7 Jul 2023 16:19:07 +0700 Subject: Add fallback on get history airway bill Fallback when access key ['rajaongkir']['result']['manifest'] to empty array --- indoteknik_custom/models/airway_bill_manifest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/models/airway_bill_manifest.py b/indoteknik_custom/models/airway_bill_manifest.py index 159f4b9a..cba40b3d 100644 --- a/indoteknik_custom/models/airway_bill_manifest.py +++ b/indoteknik_custom/models/airway_bill_manifest.py @@ -16,7 +16,7 @@ class AirwayBillManifest(models.Model): def generate_airway_bill_line(self, history, waybill_id): - manifests = history['rajaongkir']['result']['manifest'] + manifests = history['rajaongkir']['result']['manifest'] or [] count = 0 for manifest in manifests: code = manifest['manifest_code'] -- cgit v1.2.3 From 93146912c0f157edb4d4f08b4b17871277bb9677 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Tue, 18 Jul 2023 10:51:31 +0700 Subject: Add cron xml airway bill and update model, api --- indoteknik_api/controllers/api_v1/sale_order.py | 39 ++++++++++---------- indoteknik_custom/models/airway_bill.py | 2 +- indoteknik_custom/views/airway_bill.xml | 47 ++++++++++++++++--------- 3 files changed, 50 insertions(+), 38 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 038508c4..c3501db4 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -314,6 +314,24 @@ class SaleOrder(controller.Controller): 'id': sale_order.id, 'name': sale_order.name }) + + @http.route(PREFIX_PARTNER + 'sale_order//awb', auth='public', methods=['GET', 'OPTIONS']) + @controller.Controller.must_authorized(private=True, private_key='partner_id') + def get_airway_bill_by_sale_order_id(self, **kw): + id = kw.get('id') + airway_bill = request.env['airway.bill'].search([('so_id', '=', id)], limit=1) + + data = airway_bill.decode_response() + result = data['rajaongkir']['result'] + + response = { + 'delivery_status': result['delivery_status'], + 'manifest': result['manifest'], + 'delivered': result['delivered'], + 'waybill_number': result['summary']['waybill_number'] + } + + return self.response(response) @http.route('/api/sale_order/invoiced', auth='public', methods=['GET']) def get_sale_order_invoiced_by_partner_id(self, **kw): @@ -418,23 +436,4 @@ class SaleOrder(controller.Controller): } return self.response(data) - - @http.route('/api/sale_order//airway', auth='public', methods=['GET']) - def get_sale_order_airway_bill_by_id(self, **kw): - if not self.authenticate(): - return self.unauthorized_response() - - id = kw.get('id') - airway_bill = request.env['airway.bill'].search([('so_id', '=', id)], limit=1) - - data = airway_bill.decode_response() - result = data['rajaongkir']['result'] - - response = { - 'delivery_status': result['delivery_status'], - 'manifest': result['manifest'], - 'delivered': result['delivered'], - 'waybill_number': result['summary']['waybill_number'] - } - - return self.response(response) \ No newline at end of file + \ No newline at end of file diff --git a/indoteknik_custom/models/airway_bill.py b/indoteknik_custom/models/airway_bill.py index d92b7e5e..7379049f 100644 --- a/indoteknik_custom/models/airway_bill.py +++ b/indoteknik_custom/models/airway_bill.py @@ -41,7 +41,7 @@ class AirwayBill(models.Model): self.ensure_one() return self._json_decode(self.response) - def _update_data_way_bill(self): + def _generate(self): # jne, pos, tiki, wahana, jnt, rpx, sap, sicepat, jet, dse, dan first # 51, 53, 54, 7, 57, 55, 59, 59, 27, 60, 62, 64 current_time = datetime.now() diff --git a/indoteknik_custom/views/airway_bill.xml b/indoteknik_custom/views/airway_bill.xml index 2107bdd7..4f4519db 100644 --- a/indoteknik_custom/views/airway_bill.xml +++ b/indoteknik_custom/views/airway_bill.xml @@ -41,31 +41,31 @@ - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - + + + @@ -82,6 +82,19 @@ tree,form + + Airway Bill: Generate + 1 + days + -1 + + + model._generate() + code + 75 + True + + Date: Fri, 28 Jul 2023 11:31:16 +0700 Subject: Refactor airway bill model and views --- indoteknik_custom/models/airway_bill.py | 14 +++++------- indoteknik_custom/models/airway_bill_manifest.py | 10 ++++----- indoteknik_custom/views/airway_bill.xml | 28 +++++++++++++----------- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/indoteknik_custom/models/airway_bill.py b/indoteknik_custom/models/airway_bill.py index 7379049f..463272b4 100644 --- a/indoteknik_custom/models/airway_bill.py +++ b/indoteknik_custom/models/airway_bill.py @@ -41,21 +41,19 @@ class AirwayBill(models.Model): self.ensure_one() return self._json_decode(self.response) - def _generate(self): + def _fetch(self): # jne, pos, tiki, wahana, jnt, rpx, sap, sicepat, jet, dse, dan first - # 51, 53, 54, 7, 57, 55, 59, 59, 27, 60, 62, 64 - current_time = datetime.now() - delta_time = current_time - timedelta(days=30) + carrier_ids = [51, 53, 54, 7, 57, 55, 59, 59, 27, 60, 62, 64] - current_time = current_time.strftime('%Y-%m-%d %H:%M:%S') - delta_time = delta_time.strftime('%Y-%m-%d %H:%M:%S') + delta_time = datetime.now() - timedelta(days=30) # Last 30 days + delta_time = delta_time.strftime('%Y-%m-%d %H:%M:%S') query = [ '|', ('waybill_id.delivered', '=', False), ('date_done', '>', delta_time), ('delivery_tracking_no', '!=', False), ('delivery_tracking_no', 'not ilike', '-'), - ('carrier_id.id', 'in', [51, 53, 54, 7, 57, 55, 59, 59, 27, 60, 62, 64]), + ('carrier_id', 'in', carrier_ids), ] outs = self.env['stock.picking'].search(query, order='id') for out in outs: @@ -77,7 +75,7 @@ class AirwayBill(models.Model): waybill.response = json.dumps(history, indent=2, ensure_ascii=False) waybill.manifest_ids.unlink() - self.env['airway.bill.manifest'].generate_airway_bill_line(history, waybill.id) + self.env['airway.bill.manifest'].generate_airway_bill_line(waybill) def _get_waybill_history(self, way_bill_number=0, shipper=0): headers = { diff --git a/indoteknik_custom/models/airway_bill_manifest.py b/indoteknik_custom/models/airway_bill_manifest.py index cba40b3d..2e16be2c 100644 --- a/indoteknik_custom/models/airway_bill_manifest.py +++ b/indoteknik_custom/models/airway_bill_manifest.py @@ -15,9 +15,9 @@ class AirwayBillManifest(models.Model): city = fields.Char('City') - def generate_airway_bill_line(self, history, waybill_id): + def generate_airway_bill_line(self, waybill): + history = waybill.decode_response() manifests = history['rajaongkir']['result']['manifest'] or [] - count = 0 for manifest in manifests: code = manifest['manifest_code'] description = manifest['manifest_description'] @@ -25,11 +25,9 @@ class AirwayBillManifest(models.Model): time = manifest['manifest_time'] city = manifest['city_name'] self.create({ - 'waybill_id': waybill_id, + 'waybill_id': waybill.id, 'code': code, 'description': description, 'datetime': date+' '+time, 'city': city, - }) - count += 1 - _logger.info("Airway Bill generated %s" % count) \ No newline at end of file + }) \ No newline at end of file diff --git a/indoteknik_custom/views/airway_bill.xml b/indoteknik_custom/views/airway_bill.xml index 4f4519db..bbfd3991 100644 --- a/indoteknik_custom/views/airway_bill.xml +++ b/indoteknik_custom/views/airway_bill.xml @@ -40,24 +40,26 @@ - - - - - + + - - - + + + - - + + + + + + + @@ -82,14 +84,14 @@ tree,form - - Airway Bill: Generate + + Airway Bill: Fetch 1 days -1 - model._generate() + model._fetch() code 75 True -- cgit v1.2.3 From f26b2447f4f233a838e8990a800d975ab27a1557 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Fri, 28 Jul 2023 11:31:28 +0700 Subject: Update airway bill API response --- indoteknik_api/controllers/api_v1/sale_order.py | 39 ++++++++++++++++--------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index c3501db4..9dcd06d0 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -315,21 +315,34 @@ class SaleOrder(controller.Controller): 'name': sale_order.name }) - @http.route(PREFIX_PARTNER + 'sale_order//awb', auth='public', methods=['GET', 'OPTIONS']) + @http.route(PREFIX_PARTNER + 'sale-order//awb', auth='public', methods=['GET', 'OPTIONS']) @controller.Controller.must_authorized(private=True, private_key='partner_id') def get_airway_bill_by_sale_order_id(self, **kw): - id = kw.get('id') - airway_bill = request.env['airway.bill'].search([('so_id', '=', id)], limit=1) - - data = airway_bill.decode_response() - result = data['rajaongkir']['result'] - - response = { - 'delivery_status': result['delivery_status'], - 'manifest': result['manifest'], - 'delivered': result['delivered'], - 'waybill_number': result['summary']['waybill_number'] - } + id = int(kw.get('id', 0)) + response = {'airways': None} + airway_bills = request.env['airway.bill'].search([('so_id', '=', id)]) + + if not airway_bills: + return self.response(response) + + airways = [] + for airway_bill in airway_bills: + data = airway_bill.decode_response() + delivery_order = airway_bill.do_id + result = data['rajaongkir']['result'] + airways.append({ + 'delivery_order': { + 'name': delivery_order.name, + 'carrier': delivery_order.carrier_id.name, + 'receiver_name': airway_bill.receiver_name, + 'receiver_city': airway_bill.receiver_city, + }, + 'delivered': result['delivered'], + 'waybill_number': result['summary']['waybill_number'], + 'delivery_status': result['delivery_status'], + 'manifests': result['manifest'] + }) + response = {'airways': airways} return self.response(response) -- cgit v1.2.3