summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/bill_receipt.py
blob: 39d5f31b913ef35e7eb0bc0c93e11df020bc8132 (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
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