1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
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 = []
parameters_header = {
'date': current_time,
'created_by': self.env.user.id,
}
report_logbook = self.env['report.logbook.sj'].create([parameters_header])
for line in logbook_line:
picking = self.env['stock.picking'].search([('picking_code', '=', line.name)], limit=1)
if not picking:
picking = self.env['stock.picking'].search([('out_code', '=', line.name)], limit=1)
stock = picking
parent_id = stock.partner_id.parent_id.id
parent_id = parent_id if parent_id else stock.partner_id.id
data = {
'picking_id': stock.id,
'sale_id': stock.sale_id.id,
'name': stock.name,
'driver_id': stock.driver_id.id,
'departure_date': stock.driver_departure_date,
'arrival_date': stock.driver_arrival_date,
'carrier_id': stock.carrier_id.id,
'tracking_no': stock.delivery_tracking_no,
'partner_id': parent_id,
'report_logbook_sj_id': report_logbook.id,
'note': line.note
}
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')
picking_id = fields.Many2one('res.partner', string='Customer')
note = fields.Char(string='Note')
@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 not picking:
picking = self.env['stock.picking'].search([('out_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
self.picking_id = picking.id
delivery_type = self.get_delivery_type(picking.driver_departure_date, picking.driver_arrival_date)
if delivery_type != 'departure':
if picking.driver_departure_date:
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:
if picking.driver_arrival_date:
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
|