From 89a53c90bfeb735f3f256dfadfd24c5c5a5c6328 Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Thu, 19 Jun 2025 09:24:39 +0700 Subject: (andri) penambahan ET product leadtime berdasarkan SLA vendor tanpa logistik & hari libur --- indoteknik_custom/models/sale_order.py | 41 ++++++++++++++++++++++++++++++++++ indoteknik_custom/views/sale_order.xml | 9 ++++++++ 2 files changed, 50 insertions(+) diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index ee9d6f70..7607d4ca 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -349,6 +349,47 @@ class SaleOrder(models.Model): date_unhold = fields.Datetime(string='Date Unhold', tracking=True, readonly=True, help='Waktu ketika SO di Unhold' ) + et_products = fields.Datetime(string='ET Products (SLA Vendor)', compute='_compute_et_products', help="Leadtime produk berdasarkan SLA vendor, tanpa logistik.") + + eta_date_reserved = fields.Datetime( + string="Date Reserved", + compute="_compute_eta_date_reserved", + help="Tanggal DO dengan prefix BU/PICK/ yang sudah 'assigned' dan memiliki reserved date." + ) + + @api.depends('order_line.product_id', 'date_order') + def _compute_et_products(self): + jakarta = pytz.timezone("Asia/Jakarta") + for order in self: + if not order.order_line or not order.date_order: + order.et_products = False + continue + + # Ambil tanggal order sebagai basis + base_date = order.date_order + if base_date.tzinfo is None: + base_date = jakarta.localize(base_date) + else: + base_date = base_date.astimezone(jakarta) + + # Ambil nilai SLA vendor dalam hari + sla_data = order.calculate_sla_by_vendor(order.order_line) + sla_days = sla_data.get('slatime', 1) + + # Hitung ETA produk (tanpa logistik) + eta_datetime = base_date + timedelta(days=sla_days) + + # Simpan ke field sebagai UTC-naive datetime (standar Odoo) + order.et_products = eta_datetime.astimezone(pytz.utc).replace(tzinfo=None) + + @api.depends('picking_ids.state', 'picking_ids.date_reserved') + def _compute_eta_date_reserved(self): + for order in self: + pickings = order.picking_ids.filtered( + lambda p: p.state == 'assigned' and p.date_reserved and 'BU/PICK/' in (p.name or '') + ) + order.eta_date_reserved = min(pickings.mapped('date_reserved')) if pickings else False + @api.onchange('shipping_cost_covered') def _onchange_shipping_cost_covered(self): if self.shipping_cost_covered == 'indoteknik' and self.select_shipping_option == 'biteship': diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml index d0442677..861006cc 100755 --- a/indoteknik_custom/views/sale_order.xml +++ b/indoteknik_custom/views/sale_order.xml @@ -144,6 +144,15 @@ + + + + + + + + + -- cgit v1.2.3 From 130862f48ffebfcd30936b59628090f18e3b3a2a Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Thu, 19 Jun 2025 09:25:35 +0700 Subject: (andri) rev penamaan field --- indoteknik_custom/models/sale_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 7607d4ca..4f8536ca 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -349,7 +349,7 @@ class SaleOrder(models.Model): date_unhold = fields.Datetime(string='Date Unhold', tracking=True, readonly=True, help='Waktu ketika SO di Unhold' ) - et_products = fields.Datetime(string='ET Products (SLA Vendor)', compute='_compute_et_products', help="Leadtime produk berdasarkan SLA vendor, tanpa logistik.") + et_products = fields.Datetime(string='ET Products', compute='_compute_et_products', help="Leadtime produk berdasarkan SLA vendor, tanpa logistik.") eta_date_reserved = fields.Datetime( string="Date Reserved", -- cgit v1.2.3 From c4640e2f846d853412c5f1cb0901e50208fa0216 Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Thu, 19 Jun 2025 09:33:25 +0700 Subject: (andri) ganti keterangan eta date reserved & penyesuaian field ETA --- indoteknik_custom/models/sale_order.py | 2 +- indoteknik_custom/views/sale_order.xml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 4f8536ca..6da46398 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -354,7 +354,7 @@ class SaleOrder(models.Model): eta_date_reserved = fields.Datetime( string="Date Reserved", compute="_compute_eta_date_reserved", - help="Tanggal DO dengan prefix BU/PICK/ yang sudah 'assigned' dan memiliki reserved date." + help="Tanggal pertama kali barang berhasil di-reservasi pada DO (BU/PICK/) yang berstatus Siap Dikirim." ) @api.depends('order_line.product_id', 'date_order') diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml index 861006cc..2a159307 100755 --- a/indoteknik_custom/views/sale_order.xml +++ b/indoteknik_custom/views/sale_order.xml @@ -103,10 +103,10 @@ - + - - + + -- cgit v1.2.3