from odoo import models, api, fields from odoo.exceptions import AccessError, UserError, ValidationError from datetime import timedelta, date import logging _logger = logging.getLogger(__name__) class BillReceipt(models.Model): _name = "bill.receipt" _description = "Bill Receipt" _rec_name = 'number' number = fields.Char(string='Document No', index=True, copy=False, readonly=True, tracking=True) vendor_id = fields.Many2one('res.partner', string="Vendor", required=True) document_date = fields.Date(string="Document Date", required=True) description = fields.Text(string='Description') validated = fields.Boolean(string="Validated", readonly=True) bill_line = fields.One2many('bill.receipt.line', 'bill_id', string='Bill Receipt Lines') @api.model def create(self, vals): vals['number'] = self.env['ir.sequence'].next_by_code('bill.receipt') or '0' result = super(BillReceipt, self).create(vals) return result def validate_button(self): if not self.bill_line: raise UserError('Bill receipt line masih kosong') self.validated = True def cancel_button(self): if not self.bill_line: raise UserError('Bill receipt line masih kosong') if self.validated != True: raise UserError('Document ini belum di validate') self.validated = False class BillReceiptLine(models.Model): _name = 'bill.receipt.line' _description = 'Bill Receipt Line' _order = 'bill_id, id' bill_id = fields.Many2one('bill.receipt', string='Bill Receipt') sale_order_id = fields.Many2one('sale.order', string='Sale Order') po_id = fields.Many2one('purchase.order', string='PO') user_id = fields.Many2one('res.users', string='Purchase Rep') payment_term_id = fields.Many2one('account.payment.term', string='Payment Terms') vendor_id = fields.Many2one('res.partner', string='Vendor') date_approve = fields.Datetime(string='Confirmation Date') date_planned = fields.Datetime(string='Receipt Date') amount_untaxed = fields.Float(string='Untaxed Amount') amount_total = fields.Float(string='Total') reference = fields.Char(string='Reference') partner_ref = fields.Char(string='Vendor Reference') @api.onchange('po_id') def onchange_partner_ref(self): self.partner_ref = self.po_id.partner_ref @api.onchange('po_id') def onchange_vendor_id(self): self.vendor_id = self.po_id.partner_id @api.onchange('po_id') def onchange_date_approve(self): self.date_approve = self.po_id.date_approve @api.onchange('po_id') def onchange_date_planned(self): self.date_planned = self.po_id.date_planned @api.onchange('po_id') def onchange_amount_untaxed(self): self.amount_untaxed = self.po_id.amount_untaxed @api.onchange('po_id') def onchange_user_id(self): self.user_id = self.po_id.user_id @api.onchange('po_id') def onchange_sale_order_id(self): self.sale_order_id = self.po_id.sale_order_id @api.onchange('po_id') def onchange_payment_term_id(self): self.payment_term_id = self.po_id.payment_term_id @api.onchange('po_id') def onchange_amount_total(self): self.amount_total = self.po_id.amount_total