summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/approval_date_doc.py
blob: 638b44d74369a83ceefd7ad82d12ce3981d8002a (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
from odoo import models, api, fields
from odoo.exceptions import AccessError, UserError, ValidationError
from datetime import timedelta, date, datetime  
import logging

_logger = logging.getLogger(__name__)

class ApprovalDateDoc(models.Model):
    _name = "approval.date.doc"
    _description = "Approval Date Doc"
    _rec_name = 'number'

    picking_id = fields.Many2one('stock.picking', string='Picking')
    number = fields.Char(string='Document No', index=True, copy=False, readonly=True, tracking=True)
    driver_departure_date = fields.Datetime(
        string='Driver Departure Date',
        copy=False
    )
    state = fields.Selection([('draft', 'Draft'), ('done', 'Done'), ('cancel', 'Cancel')], string='State', default='draft', tracking=True)
    approve_date = fields.Datetime(string='Approve Date', copy=False)
    approve_by = fields.Many2one('res.users', string='Approve By', copy=False)
    sale_id = fields.Many2one('sale.order', string='Sale Order')
    partner_id = fields.Many2one('res.partner', string='Partner', related='picking_id.partner_id')
    note = fields.Char(string='Note')

    @api.onchange('picking_id')
    def onchange_picking_id(self):
        if self.picking_id:
            self.sale_id = self.picking_id.sale_id.id
    
    def check_invoice_so_picking(self):
        for rec in self:
            invoice = self.env['account.move'].search_count([('sale_id', '=', rec.picking_id.sale_id.id)])

            if invoice < 1:
                raise UserError("Sales Order Belum Memiliki Invoice, Anda Bisa Edit Di DO nya langsung")

    def button_approve(self):
        if not self.env.user.is_accounting:
            raise UserError("Hanya Accounting Yang Bisa Approve")
        self.check_invoice_so_picking
        # Tambahkan context saat mengupdate date_doc_kirim
        self.picking_id.with_context(from_button_approve=True).write({
            'driver_departure_date': self.driver_departure_date,
            'date_doc_kirim': self.driver_departure_date,
            'update_date_doc_kirim_add': True
        })
        self.state = 'done'
        self.approve_date = datetime.utcnow()
        self.approve_by = self.env.user.id
 
    def button_cancel(self):
        self.state = 'cancel'

    @api.model
    def create(self, vals):
        vals['number'] = self.env['ir.sequence'].next_by_code('approval.date.doc') or '0'
        result = super(ApprovalDateDoc, self).create(vals)
        return result