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
130
131
132
|
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])
seq=1
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,
'line_num': seq
}
self.env['report.logbook.sj.line'].create([data])
seq += 1
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
|