summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/logbook_sj.py
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2024-02-07 10:45:51 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2024-02-07 10:45:51 +0700
commitf6be42d37a363b86f4a9ec71ccb38c78cbe2d887 (patch)
tree9c297e776f67e35671012e94d3c64007bd5090d7 /indoteknik_custom/models/logbook_sj.py
parentedb3c1c80931078d40a8f56149aeca9efdcdc07d (diff)
parent29a9ec94f1ad131f398cf119a03a7b927a4c6cba (diff)
Merge branch 'production' into purchasing-job
# Conflicts: # indoteknik_custom/__manifest__.py # indoteknik_custom/models/__init__.py # indoteknik_custom/models/automatic_purchase.py # indoteknik_custom/models/purchase_order_line.py # indoteknik_custom/security/ir.model.access.csv # indoteknik_custom/views/automatic_purchase.xml # indoteknik_custom/views/purchase_order.xml
Diffstat (limited to 'indoteknik_custom/models/logbook_sj.py')
-rw-r--r--indoteknik_custom/models/logbook_sj.py117
1 files changed, 117 insertions, 0 deletions
diff --git a/indoteknik_custom/models/logbook_sj.py b/indoteknik_custom/models/logbook_sj.py
new file mode 100644
index 00000000..567f1ae3
--- /dev/null
+++ b/indoteknik_custom/models/logbook_sj.py
@@ -0,0 +1,117 @@
+from odoo import models, fields, api, _
+from odoo.exceptions import UserError
+from pytz import timezone
+from datetime import datetime
+
+class LogbookSJ(models.TransientModel):
+ _name = 'logbook.sj'
+
+ name = fields.Char(string='Name', default='Logbook SJ')
+ logbook_sj_line = fields.One2many(
+ comodel_name='logbook.sj.line',
+ inverse_name='logbook_sj_id',
+ string='Logbook SJ Line'
+ )
+
+ def create_logbook_sj(self):
+ logbook_line = self.logbook_sj_line
+
+ current_time = datetime.utcnow()
+ report_logbook_ids = []
+ for line in logbook_line:
+ nomor_sj = line.name
+ picking = self.env['stock.picking'].search([
+ ('picking_code', '=', nomor_sj),
+ ])
+ parameters_header = {
+ 'name': nomor_sj,
+ 'date': current_time,
+ 'name_picking': picking.name,
+ 'partner_id': picking.partner_id.id,
+ }
+
+ report_logbook = self.env['report.logbook.sj'].create([parameters_header])
+
+
+ for stock in picking.move_line_ids_without_package:
+ data = {
+ 'product_id': stock.product_id.id,
+ 'location_id': stock.location_id.id,
+ 'product_uom_qty': stock.product_uom_qty,
+ 'qty_done': stock.qty_done,
+ 'product_uom_id': stock.product_uom_id.id,
+ 'report_logbook_sj_id': report_logbook.id
+ }
+ self.env['report.logbook.sj.line'].create([data])
+
+ report_logbook_ids.append(report_logbook.id)
+ line.unlink()
+
+ self.unlink()
+ return {
+ 'name': _('Report Logbook SJ'),
+ 'view_mode': 'tree,form',
+ 'res_model': 'report.logbook.sj',
+ 'target': 'current',
+ 'type': 'ir.actions.act_window',
+ 'domain': [('id', 'in', report_logbook_ids)],
+ }
+
+class LogbookSJLine(models.TransientModel):
+ _name = 'logbook.sj.line'
+
+ name = fields.Char(string='SJ 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')
+ carrier_id = fields.Many2one('delivery.carrier', string='Shipping Method')
+ tracking_no = fields.Char(string='Tracking No')
+ logbook_sj_id = fields.Many2one('logbook.sj', string='Logbook SJ')
+ partner_id = fields.Many2one('res.partner', string='Customer')
+
+ @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
+
+ sale_order = False
+ if picking.origin:
+ sale_order = self.env['sale.order'].search([('name', '=', picking.origin)], limit=1)
+
+ if sale_order.carrier_id:
+ self.carrier_id = sale_order.carrier_id
+
+ self.tracking_no = picking.delivery_tracking_no
+
+ self.partner_id = picking.partner_id
+
+ 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