diff options
| author | IT Fixcomart <it@fixcomart.co.id> | 2022-09-19 11:07:17 +0700 |
|---|---|---|
| committer | IT Fixcomart <it@fixcomart.co.id> | 2022-09-19 11:07:17 +0700 |
| commit | de08a79ca870602ec45f396a8476cfdc3c38aee6 (patch) | |
| tree | b92fb1affefe2579a87edd195fe34f2d8c1ca50d /indoteknik_custom/models/delivery_order.py | |
| parent | 68cb8eaa625b9c96de7aeb9fc45c1db81921661e (diff) | |
| parent | b1c1914eafc652711633f6f11b096a2013cad7e2 (diff) | |
Merge & fix conflicts
Diffstat (limited to 'indoteknik_custom/models/delivery_order.py')
| -rw-r--r-- | indoteknik_custom/models/delivery_order.py | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/indoteknik_custom/models/delivery_order.py b/indoteknik_custom/models/delivery_order.py new file mode 100644 index 00000000..06cdd878 --- /dev/null +++ b/indoteknik_custom/models/delivery_order.py @@ -0,0 +1,100 @@ +from odoo import models, fields, api +from odoo.exceptions import UserError +from pytz import timezone +from datetime import datetime + + +class DeliveryOrder(models.TransientModel): + _name = 'delivery.order' + + name = fields.Char(string='Name', default='Delivery Order') + delivery_order_line_ids = fields.One2many( + comodel_name='delivery.order.line', + inverse_name='delivery_order_id', + string='Delivery Order Line' + ) + + @api.model + def create(self, vals): + current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + + if len(vals['delivery_order_line_ids']) < 1: + raise UserError('Delivery Order harus di-isi sebelum melanjutkan') + + for delivery_order_line in vals['delivery_order_line_ids']: + picking = False + if delivery_order_line[2]['name']: + picking = self.env['stock.picking'].search([('picking_code', '=', delivery_order_line[2]['name'])], limit=1) + + if picking: + if not picking.driver_id: + picking.driver_id = self.env.uid + picking.delivery_tracking_no = delivery_order_line[2]['tracking_no'] + + delivery_type = self.env['delivery.order.line'].get_delivery_type(picking.driver_departure_date, picking.driver_arrival_date) + if delivery_type == 'departure': + picking.driver_departure_date = current_time + elif delivery_type == 'arrival': + picking.driver_arrival_date = current_time + return super(DeliveryOrder, self).create(vals) + + def save_delivery(self): + self.ensure_one() + return { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'title': 'Notification', + 'message': 'Delivery Order berhasil disimpan', + 'next': {'type': 'ir.actions.act_window_close'}, + } + } + + +class DeliveryOrderLine(models.TransientModel): + _name = 'delivery.order.line' + + name = fields.Char(string='DO Number') + driver_id = fields.Many2one(comodel_name='res.users', string='Driver') + departure_date = fields.Char(string='Departure Date') + arrival_date = fields.Char(string='Arrival Date') + tracking_no = fields.Char(string='Tracking No') + delivery_order_id = fields.Many2one('delivery.order', string='Delivery Order') + + @api.onchange('name') + def onchange_name(self): + current_time = datetime.now(timezone('Asia/Jakarta')).strftime('%Y-%m-%d %H:%M:%S') + + if self.name: + if len(self.name) == 13: + self.name = self.name[:-1] + picking = self.env['stock.picking'].search([('picking_code', '=', self.name)], limit=1) + if picking: + if picking.driver_id: + self.driver_id = picking.driver_id + else: + self.driver_id = self.env.uid + + self.tracking_no = picking.delivery_tracking_no + + delivery_type = self.get_delivery_type(picking.driver_departure_date, picking.driver_arrival_date) + if delivery_type != 'departure': + self.departure_date = picking.driver_departure_date.astimezone(timezone('Asia/Jakarta')).strftime('%Y-%m-%d %H:%M:%S') + + if delivery_type == 'departure': + self.departure_date = current_time + elif delivery_type == 'arrival': + self.arrival_date = current_time + else: + self.arrival_date = picking.driver_arrival_date.astimezone(timezone('Asia/Jakarta')).strftime('%Y-%m-%d %H:%M:%S') + else: + raise UserError('Nomor DO tidak ditemukan') + + def get_delivery_type(self, driver_departure_date, driver_arrival_date): + delivery_type = 'departure' + if driver_departure_date: + delivery_type = 'arrival' + if driver_arrival_date: + delivery_type = False + + return delivery_type |
