From 855f63e1c39ba1ff4d84360845949bc260462c83 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 14 Jul 2023 16:40:27 +0700 Subject: bill receipt --- indoteknik_custom/models/__init__.py | 3 +- indoteknik_custom/models/bill_receipt.py | 70 ++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 indoteknik_custom/models/bill_receipt.py (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py index 9e4d2cf9..8b3296a5 100755 --- a/indoteknik_custom/models/__init__.py +++ b/indoteknik_custom/models/__init__.py @@ -66,4 +66,5 @@ from . import requisition from . import token_storage from . import product_sla from . import account_move_due_extension -from . import voucher \ No newline at end of file +from . import voucher +from . import bill_receipt \ No newline at end of file diff --git a/indoteknik_custom/models/bill_receipt.py b/indoteknik_custom/models/bill_receipt.py new file mode 100644 index 00000000..31c09b33 --- /dev/null +++ b/indoteknik_custom/models/bill_receipt.py @@ -0,0 +1,70 @@ +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") + document_date = fields.Date(string="Document Date") + 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('due.extension') 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') + po_id = fields.Many2one('purchase.order', string='PO') + sale_order_id = fields.Many2one('sale.order', string='Sale Order') + user_id = fields.Many2one('res.users', string='Purchase Rep') + payment_term_id = fields.Many2one('account.payment.term', string='Payment Terms') + amount_total = fields.Float(string='Total') + reference = fields.Char(string='Reference') + + @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 + + -- cgit v1.2.3 From bb8d8fe7824dc929634bf00f2dcc7d51630257d3 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Mon, 17 Jul 2023 13:35:08 +0700 Subject: add new field to receipt bill --- indoteknik_custom/models/bill_receipt.py | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/bill_receipt.py b/indoteknik_custom/models/bill_receipt.py index 31c09b33..806edc25 100644 --- a/indoteknik_custom/models/bill_receipt.py +++ b/indoteknik_custom/models/bill_receipt.py @@ -16,6 +16,15 @@ class BillReceipt(models.Model): 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') + grand_total = fields.Float(string="Grand Total") + + def compute_amt_total_without_service(self): + for order in self: + sum_price_total = 0 + for line in order.order_line: + if line.product_id.type == 'product': + sum_price_total += line.price_total + order.amount_total_without_service = sum_price_total @api.model def create(self, vals): @@ -48,8 +57,33 @@ class BillReceiptLine(models.Model): sale_order_id = fields.Many2one('sale.order', string='Sale Order') 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): -- cgit v1.2.3 From cc4150ade5d8f6cea80ce4acf92907be0a3ed29a Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Tue, 18 Jul 2023 10:31:56 +0700 Subject: refactor receipt bill --- indoteknik_custom/models/bill_receipt.py | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/bill_receipt.py b/indoteknik_custom/models/bill_receipt.py index 806edc25..39d5f31b 100644 --- a/indoteknik_custom/models/bill_receipt.py +++ b/indoteknik_custom/models/bill_receipt.py @@ -11,24 +11,15 @@ class BillReceipt(models.Model): _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") - document_date = fields.Date(string="Document Date") + 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') - grand_total = fields.Float(string="Grand Total") - - def compute_amt_total_without_service(self): - for order in self: - sum_price_total = 0 - for line in order.order_line: - if line.product_id.type == 'product': - sum_price_total += line.price_total - order.amount_total_without_service = sum_price_total @api.model def create(self, vals): - vals['number'] = self.env['ir.sequence'].next_by_code('due.extension') or '0' + vals['number'] = self.env['ir.sequence'].next_by_code('bill.receipt') or '0' result = super(BillReceipt, self).create(vals) return result @@ -53,8 +44,8 @@ class BillReceiptLine(models.Model): _order = 'bill_id, id' bill_id = fields.Many2one('bill.receipt', string='Bill Receipt') - po_id = fields.Many2one('purchase.order', string='PO') 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') -- cgit v1.2.3