From ed5b7ed656e9b4d790317612459a6b12197d136b Mon Sep 17 00:00:00 2001 From: IT Fixcomart Date: Mon, 12 Sep 2022 16:05:12 +0700 Subject: delivery_order in sale_order and stock_picking --- indoteknik_custom/models/sale_order.py | 1 + indoteknik_custom/models/stock_picking.py | 11 +++++++++++ 2 files changed, 12 insertions(+) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 6f901809..3db6e432 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -17,6 +17,7 @@ class SaleOrder(models.Model): ('pengajuan2', 'Approval Tyas'), ('approved', 'Approved'), ], string='Approval Status', readonly=True, copy=False, index=True, tracking=3) + carrier_id = fields.Many2one('delivery.carrier', string='Shipping Method') # def sale_order_approve(self): # for order in self: diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 5142bc5f..179faadd 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -1,4 +1,5 @@ from odoo import fields, models, api +from datetime import datetime class StockPicking(models.Model): @@ -9,6 +10,13 @@ class StockPicking(models.Model): is_efaktur_exported = fields.Boolean(string='Is eFaktur Exported') 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) + @api.onchange('picking_type_id') def _onchange_operation_type(self): self.is_internal_use = self.picking_type_id.is_internal_use @@ -16,6 +24,9 @@ class StockPicking(models.Model): @api.model def create(self, vals): + if not self.picking_code: + vals['picking_code'] = self.env['ir.sequence'].next_by_code('stock.picking.code') or '0' + self._use_faktur(vals) return super(StockPicking, self).create(vals) -- cgit v1.2.3 From a367175504164b47dffa0263a65c03ea6cdc9912 Mon Sep 17 00:00:00 2001 From: IT Fixcomart Date: Mon, 12 Sep 2022 16:13:28 +0700 Subject: fix error stock_picking view --- indoteknik_custom/models/stock_picking.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 7fb22023..390ae8b2 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -5,9 +5,9 @@ class StockPicking(models.Model): _inherit = 'stock.picking' is_internal_use = fields.Boolean('Internal Use', help='flag which is internal use or not') account_id = fields.Many2one('account.account', string='Account') - # efaktur_id = fields.Many2one('vit.efaktur', string='Faktur Pajak') - # is_efaktur_exported = fields.Boolean(string='Is eFaktur Exported') - # date_efaktur_exported = fields.Datetime(string='eFaktur Exported Date') + efaktur_id = fields.Many2one('vit.efaktur', string='Faktur Pajak') + is_efaktur_exported = fields.Boolean(string='Is eFaktur Exported') + date_efaktur_exported = fields.Datetime(string='eFaktur Exported Date') # Delivery Order driver_departure_date = fields.Datetime(string='Driver Departure Date', readonly=True) -- cgit v1.2.3 From fb267c3e3b6d093c95d8e8330e619b195396ccc2 Mon Sep 17 00:00:00 2001 From: IT Fixcomart Date: Fri, 16 Sep 2022 15:04:15 +0700 Subject: Scan Delivery Order --- indoteknik_custom/models/__init__.py | 1 + indoteknik_custom/models/delivery_order.py | 100 +++++++++++++++++++++++++++++ indoteknik_custom/models/stock_picking.py | 31 +++++++-- 3 files changed, 127 insertions(+), 5 deletions(-) create mode 100644 indoteknik_custom/models/delivery_order.py (limited to 'indoteknik_custom/models') 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): -- cgit v1.2.3 From b1c1914eafc652711633f6f11b096a2013cad7e2 Mon Sep 17 00:00:00 2001 From: IT Fixcomart Date: Fri, 16 Sep 2022 16:28:15 +0700 Subject: create compute have_visit_service in sale order --- indoteknik_custom/models/sale_order.py | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 3db6e432..be5dedef 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -18,6 +18,13 @@ class SaleOrder(models.Model): ('approved', 'Approved'), ], string='Approval Status', readonly=True, copy=False, index=True, tracking=3) carrier_id = fields.Many2one('delivery.carrier', string='Shipping Method') + have_visit_service = fields.Boolean(string='Have Visit Service', help='To compute is customer get visit service', compute='_compute_have_visit_service') + + def _compute_have_visit_service(self): + limit = 20000000 + self.have_visit_service = False + if self.amount_total > limit: + self.have_visit_service = True # def sale_order_approve(self): # for order in self: -- cgit v1.2.3