summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2022-09-16 15:04:15 +0700
committerIT Fixcomart <it@fixcomart.co.id>2022-09-16 15:04:15 +0700
commitfb267c3e3b6d093c95d8e8330e619b195396ccc2 (patch)
tree84e76a6f717529ba7fe30677ab84847c79cd6fe9 /indoteknik_custom/models
parenta367175504164b47dffa0263a65c03ea6cdc9912 (diff)
Scan Delivery Order
Diffstat (limited to 'indoteknik_custom/models')
-rwxr-xr-xindoteknik_custom/models/__init__.py1
-rw-r--r--indoteknik_custom/models/delivery_order.py100
-rw-r--r--indoteknik_custom/models/stock_picking.py31
3 files changed, 127 insertions, 5 deletions
diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py
index 6407387c..e4913205 100755
--- a/indoteknik_custom/models/__init__.py
+++ b/indoteknik_custom/models/__init__.py
@@ -23,3 +23,4 @@ from . import blog_post
from . import stock_move
from . import stock_picking
from . import stock_picking_type
+from . import delivery_order
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
diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py
index 390ae8b2..17e8aa22 100644
--- a/indoteknik_custom/models/stock_picking.py
+++ b/indoteknik_custom/models/stock_picking.py
@@ -10,11 +10,32 @@ class StockPicking(models.Model):
date_efaktur_exported = fields.Datetime(string='eFaktur Exported Date')
# Delivery Order
- driver_departure_date = fields.Datetime(string='Driver Departure Date', readonly=True)
- driver_arrival_date = fields.Datetime(string='Driver Arrival Date', readonly=True)
- delivery_tracking_no = fields.Char(string='Delivery Tracking Number', readonly=True)
- driver_id = fields.Many2one('res.users', string='Driver', readonly=True)
- picking_code = fields.Char(string="Picking Code", readonly=True, copy=False)
+ driver_departure_date = fields.Datetime(
+ string='Driver Departure Date',
+ readonly=True,
+ copy=False
+ )
+ driver_arrival_date = fields.Datetime(
+ string='Driver Arrival Date',
+ readonly=True,
+ copy=False
+ )
+ delivery_tracking_no = fields.Char(
+ string='Delivery Tracking Number',
+ readonly=True,
+ copy=False
+ )
+ driver_id = fields.Many2one(
+ comodel_name='res.users',
+ string='Driver',
+ readonly=True,
+ copy=False
+ )
+ picking_code = fields.Char(
+ string="Picking Code",
+ readonly=True,
+ copy=False
+ )
@api.onchange('picking_type_id')
def _onchange_operation_type(self):