From 8d45e6557063f708e824b2700331c67168dde6c9 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Tue, 22 Aug 2023 15:56:45 +0700 Subject: Add get stock picking and get stock picking detail tracking API --- indoteknik_custom/models/stock_picking.py | 59 +++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) (limited to 'indoteknik_custom') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 4d1df7ee..f9b077ba 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -2,6 +2,7 @@ from odoo import fields, models, api, _ from odoo.exceptions import AccessError, UserError, ValidationError from odoo.tools.float_utils import float_is_zero from itertools import groupby +import pytz, datetime class StockPicking(models.Model): @@ -351,3 +352,61 @@ class StockPicking(models.Model): picking.delivery_status = "Diterima Ekspedisi" else: picking.delivery_status = "Diterima Konsumen" + + def create_manifest_data(self, description, object): + datetime_str = '' + if isinstance(object, datetime.datetime): + jakarta_timezone = pytz.timezone('Asia/Jakarta') + datetime_str = object.replace(tzinfo=pytz.utc).astimezone(jakarta_timezone).strftime('%Y-%m-%d %H:%M:%S') + return { + 'description': description, + 'datetime': datetime_str + } + + def get_manifests(self): + manifest_datas = [] + + departure_date = self.driver_departure_date + arrival_date = self.driver_arrival_date + + if self.carrier_id.id == 32: # Pickup Bandengan + manifest_datas.append(self.create_manifest_data('Sedang disiapkan', self.create_date)) + if departure_date: + manifest_datas.append(self.create_manifest_data('Siap diambil', departure_date)) + if arrival_date: + manifest_datas.append(self.create_manifest_data('Sudah diambil', arrival_date)) + else: + manifest_datas.append(self.create_manifest_data('Menunggu pickup', self.create_date)) + if departure_date: + manifest_datas.append(self.create_manifest_data('Sedang dikirim', departure_date)) + if arrival_date: + manifest_datas.append(self.create_manifest_data('Sudah sampai', arrival_date)) + + return manifest_datas + + def get_tracking_detail(self): + self.ensure_one() + + response = { + 'delivery_order': { + 'name': self.name, + 'carrier': self.carrier_id.name or '', + 'receiver_name': '', + 'receiver_city': '' + }, + 'delivered': False, + 'waybill_number': self.delivery_tracking_no or '', + 'delivery_status': None + } + + if not self.waybill_id or len(self.waybill_id.manifest_ids) == 0: + response['delivered'] = self.driver_arrival_date != False + response['manifests'] = self.get_manifests() + return response + + response['delivery_order']['receiver_name'] = self.waybill_id.receiver_name, + response['delivery_order']['receiver_city'] = self.waybill_id.receiver_city, + response['delivery_status'] = self.waybill_id._get_history('delivery_status') + response['manifests'] = [self.create_manifest_data(x.description, x.datetime) for x in self.waybill_id.manifest_ids] + + return response -- cgit v1.2.3 From d1e92dcd8ee34d2140edfc2fe440cc53e89eec79 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Wed, 23 Aug 2023 13:28:56 +0700 Subject: Add stock picking api response --- indoteknik_custom/models/stock_picking.py | 1 + 1 file changed, 1 insertion(+) (limited to 'indoteknik_custom') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index f9b077ba..8d1a85ea 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -407,6 +407,7 @@ class StockPicking(models.Model): response['delivery_order']['receiver_name'] = self.waybill_id.receiver_name, response['delivery_order']['receiver_city'] = self.waybill_id.receiver_city, response['delivery_status'] = self.waybill_id._get_history('delivery_status') + response['delivered'] = self.waybill_id.delivered response['manifests'] = [self.create_manifest_data(x.description, x.datetime) for x in self.waybill_id.manifest_ids] return response -- cgit v1.2.3 From c420bd4e418b2f646e1b3116bdb31e4ff07bf448 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Thu, 24 Aug 2023 11:28:05 +0700 Subject: Add estimated arrival days field and estimated time arrival API response --- indoteknik_custom/models/sale_order.py | 1 + indoteknik_custom/models/stock_picking.py | 29 ++++++++++++++++++++++++++++- indoteknik_custom/views/sale_order.xml | 1 + 3 files changed, 30 insertions(+), 1 deletion(-) (limited to 'indoteknik_custom') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index ca98cde4..d0817ad5 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -76,6 +76,7 @@ class SaleOrder(models.Model): voucher_id = fields.Many2one(comodel_name='voucher', string='Voucher') amount_voucher_disc = fields.Float(string='Voucher Discount') source_id = fields.Many2one('utm.source', 'Source', domain="[('id', 'in', [32, 59, 60, 61])]") + estimated_arrival_days = fields.Integer('Estimated Arrival Days', default=0) def _compute_purchase_total(self): for order in self: diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 8d1a85ea..c094b74d 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -396,7 +396,8 @@ class StockPicking(models.Model): }, 'delivered': False, 'waybill_number': self.delivery_tracking_no or '', - 'delivery_status': None + 'delivery_status': None, + 'eta': self.generate_eta_delivery() } if not self.waybill_id or len(self.waybill_id.manifest_ids) == 0: @@ -411,3 +412,29 @@ class StockPicking(models.Model): response['manifests'] = [self.create_manifest_data(x.description, x.datetime) for x in self.waybill_id.manifest_ids] return response + + def generate_eta_delivery(self): + current_date = datetime.datetime.now() + prepare_days = 3 + start_date = self.driver_departure_date or self.create_date + + ead = self.sale_id.estimated_arrival_days or 0 + if not self.driver_departure_date: + ead += prepare_days + + ead_datetime = datetime.timedelta(days=ead) + fastest_eta = start_date + ead_datetime + if not self.driver_departure_date and fastest_eta < current_date: + fastest_eta = current_date + ead_datetime + + longest_days = 3 + longest_eta = fastest_eta + datetime.timedelta(days=longest_days) + + if fastest_eta.year == longest_eta.year: + formatted_fastest_eta = fastest_eta.strftime('%d %b') + formatted_longest_eta = longest_eta.strftime('%d %b %Y') + else: + formatted_fastest_eta = fastest_eta.strftime('%d %b %Y') + formatted_longest_eta = longest_eta.strftime('%d %b %Y') + + return f'{formatted_fastest_eta} - {formatted_longest_eta}' diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml index d2a59621..032156cf 100755 --- a/indoteknik_custom/views/sale_order.xml +++ b/indoteknik_custom/views/sale_order.xml @@ -93,6 +93,7 @@ + -- cgit v1.2.3 From 4d99d85f04f43b05eded0e25f49f1c3c75ba3314 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Thu, 24 Aug 2023 11:36:25 +0700 Subject: Refactor format eta on generate_eta_delivery --- indoteknik_custom/models/stock_picking.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'indoteknik_custom') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index c094b74d..3c064f8f 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -430,11 +430,10 @@ class StockPicking(models.Model): longest_days = 3 longest_eta = fastest_eta + datetime.timedelta(days=longest_days) - if fastest_eta.year == longest_eta.year: - formatted_fastest_eta = fastest_eta.strftime('%d %b') - formatted_longest_eta = longest_eta.strftime('%d %b %Y') - else: - formatted_fastest_eta = fastest_eta.strftime('%d %b %Y') - formatted_longest_eta = longest_eta.strftime('%d %b %Y') + format_time = '%d %b %Y' + format_time_fastest = '%d %b' if fastest_eta.year == longest_eta.year else format_time + + formatted_fastest_eta = fastest_eta.strftime(format_time_fastest) + formatted_longest_eta = longest_eta.strftime(format_time) return f'{formatted_fastest_eta} - {formatted_longest_eta}' -- cgit v1.2.3 From 4c0552bec7c44eb680ae4c0e1e352e14bade9276 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Thu, 24 Aug 2023 14:43:27 +0700 Subject: Update manifest stock picking order --- indoteknik_custom/models/stock_picking.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'indoteknik_custom') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 3c064f8f..e4a3e09e 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -370,17 +370,17 @@ class StockPicking(models.Model): arrival_date = self.driver_arrival_date if self.carrier_id.id == 32: # Pickup Bandengan - manifest_datas.append(self.create_manifest_data('Sedang disiapkan', self.create_date)) - if departure_date: - manifest_datas.append(self.create_manifest_data('Siap diambil', departure_date)) if arrival_date: manifest_datas.append(self.create_manifest_data('Sudah diambil', arrival_date)) - else: - manifest_datas.append(self.create_manifest_data('Menunggu pickup', self.create_date)) if departure_date: - manifest_datas.append(self.create_manifest_data('Sedang dikirim', departure_date)) + manifest_datas.append(self.create_manifest_data('Siap diambil', departure_date)) + manifest_datas.append(self.create_manifest_data('Sedang disiapkan', self.create_date)) + else: if arrival_date: manifest_datas.append(self.create_manifest_data('Sudah sampai', arrival_date)) + if departure_date: + manifest_datas.append(self.create_manifest_data('Sedang dikirim', departure_date)) + manifest_datas.append(self.create_manifest_data('Menunggu pickup', self.create_date)) return manifest_datas -- cgit v1.2.3 From 3757621d0b0232603a3d578b27b845054cae5982 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Mon, 28 Aug 2023 11:02:58 +0700 Subject: Refactor get manifest and add last manifest on get stock picking api --- indoteknik_custom/models/stock_picking.py | 51 ++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 18 deletions(-) (limited to 'indoteknik_custom') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index e4a3e09e..bf321172 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -364,23 +364,39 @@ class StockPicking(models.Model): } def get_manifests(self): - manifest_datas = [] + if self.waybill_id and len(self.waybill_id.manifest_ids) > 0: + return [self.create_manifest_data(x.description, x.datetime) for x in self.waybill_id.manifest_ids] + + status_mapping = { + 'pickup': { + 'arrival': 'Sudah diambil', + 'departure': 'Siap diambil', + 'prepare': 'Sedang disiapkan' + }, + 'delivery': { + 'arrival': 'Sudah sampai', + 'departure': 'Sedang dikirim', + 'prepare': 'Menunggu pickup', + } + } + status_key = 'delivery' + if self.carrier_id.id == 32: + status_key = 'pickup' + + manifest_datas = [] departure_date = self.driver_departure_date arrival_date = self.driver_arrival_date + status = status_mapping.get(status_key) - if self.carrier_id.id == 32: # Pickup Bandengan - if arrival_date: - manifest_datas.append(self.create_manifest_data('Sudah diambil', arrival_date)) - if departure_date: - manifest_datas.append(self.create_manifest_data('Siap diambil', departure_date)) - manifest_datas.append(self.create_manifest_data('Sedang disiapkan', self.create_date)) - else: - if arrival_date: - manifest_datas.append(self.create_manifest_data('Sudah sampai', arrival_date)) - if departure_date: - manifest_datas.append(self.create_manifest_data('Sedang dikirim', departure_date)) - manifest_datas.append(self.create_manifest_data('Menunggu pickup', self.create_date)) + if not status: + return manifest_datas + + if arrival_date: + manifest_datas.append(self.create_manifest_data(status['arrival'], arrival_date)) + if departure_date: + manifest_datas.append(self.create_manifest_data(status['departure'], departure_date)) + manifest_datas.append(self.create_manifest_data(status['prepare'], self.create_date)) return manifest_datas @@ -397,19 +413,18 @@ class StockPicking(models.Model): 'delivered': False, 'waybill_number': self.delivery_tracking_no or '', 'delivery_status': None, - 'eta': self.generate_eta_delivery() + 'eta': self.generate_eta_delivery(), + 'manifests': self.get_manifests() } if not self.waybill_id or len(self.waybill_id.manifest_ids) == 0: response['delivered'] = self.driver_arrival_date != False - response['manifests'] = self.get_manifests() return response - response['delivery_order']['receiver_name'] = self.waybill_id.receiver_name, - response['delivery_order']['receiver_city'] = self.waybill_id.receiver_city, + response['delivery_order']['receiver_name'] = self.waybill_id.receiver_name + response['delivery_order']['receiver_city'] = self.waybill_id.receiver_city response['delivery_status'] = self.waybill_id._get_history('delivery_status') response['delivered'] = self.waybill_id.delivered - response['manifests'] = [self.create_manifest_data(x.description, x.datetime) for x in self.waybill_id.manifest_ids] return response -- cgit v1.2.3