summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/delivery_order.py
blob: 06cdd878722399789fc1c89617c00882ce6f539d (plain)
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
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