diff options
| author | Rafi Zadanly <zadanlyr@gmail.com> | 2023-08-24 11:28:05 +0700 |
|---|---|---|
| committer | Rafi Zadanly <zadanlyr@gmail.com> | 2023-08-24 11:28:05 +0700 |
| commit | c420bd4e418b2f646e1b3116bdb31e4ff07bf448 (patch) | |
| tree | d004c85cec5800c218fc1b39de3f6e2d842c63bb | |
| parent | 9e4511c8d27665a53d296ee648150121a7f6cf84 (diff) | |
Add estimated arrival days field and estimated time arrival API response
| -rw-r--r-- | indoteknik_api/controllers/api_v1/sale_order.py | 4 | ||||
| -rw-r--r-- | indoteknik_api/controllers/api_v1/stock_picking.py | 2 | ||||
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 1 | ||||
| -rw-r--r-- | indoteknik_custom/models/stock_picking.py | 29 | ||||
| -rwxr-xr-x | indoteknik_custom/views/sale_order.xml | 1 |
5 files changed, 34 insertions, 3 deletions
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 36803466..4f6393a6 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -258,7 +258,8 @@ class SaleOrder(controller.Controller): 'carrier_id': [], 'delivery_service_type': [], 'voucher': [], - 'source': [] + 'source': [], + 'estimated_arrival_days': ['number', 'default:0'] }) if not params['valid']: @@ -283,6 +284,7 @@ class SaleOrder(controller.Controller): 'partner_purchase_order_name': params['value']['po_number'], 'partner_purchase_order_file': params['value']['po_file'], 'delivery_amt': params['value']['delivery_amount'], + 'estimated_arrival_days': params['value']['estimated_arrival_days'], 'shipping_cost_covered': 'customer', 'shipping_paid_by': 'customer', 'carrier_id': params['value']['carrier_id'], diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 7d397b4d..304bc806 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -28,7 +28,7 @@ class StockPicking(controller.Controller): child_ids = request.env['res.partner'].browse(partner_id).get_child_ids() picking_model = request.env['stock.picking'] - default_domain = [('partner_id', 'in', child_ids), ('sale_id', '!=', False), ('origin', 'ilike', 'SO%')] + default_domain = [('partner_id', 'in', child_ids), ('sale_id', '!=', False), ('origin', 'ilike', 'SO%'), ('state', '!=', 'cancel')] domain = default_domain if params['q']: 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 @@ </field> <field name="effective_date" position="after"> <field name="carrier_id"/> + <field name="estimated_arrival_days"/> </field> <page name="customer_signature" position="after"> |
