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