diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2023-07-21 10:00:16 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2023-07-21 10:00:16 +0700 |
| commit | ce1c11b9be9274cf281a00cc340969f094a698be (patch) | |
| tree | e588927438d7784f9c9fee3dd3147dc4ae81699a | |
| parent | f953c7c5915e15bd499f374d49403ef2567e0071 (diff) | |
update receipt bill
| -rw-r--r-- | indoteknik_custom/models/bill_receipt.py | 98 | ||||
| -rw-r--r-- | indoteknik_custom/views/bill_receipt.xml | 57 |
2 files changed, 110 insertions, 45 deletions
diff --git a/indoteknik_custom/models/bill_receipt.py b/indoteknik_custom/models/bill_receipt.py index b3f7f0ae..5e03fdce 100644 --- a/indoteknik_custom/models/bill_receipt.py +++ b/indoteknik_custom/models/bill_receipt.py @@ -1,30 +1,68 @@ from odoo import models, api, fields from odoo.exceptions import AccessError, UserError, ValidationError -from datetime import timedelta, date +from datetime import timedelta import logging _logger = logging.getLogger(__name__) + class BillReceipt(models.Model): - _name = "bill.receipt" - _description = "Bill Receipt" - _rec_name = 'number' + _name = 'bill.receipt' + _description = 'Bill Receipt' + _order = 'bill_date desc, id desc' - number = fields.Char(string='Document No', index=True, copy=False, readonly=True, tracking=True) - partner_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') + number = fields.Char(string='Document No', index=True, copy=False, readonly=True) + bill_date = fields.Date(string='Bill Date', required=True) + partner_id = fields.Many2one( + 'res.partner', string='Vendor', + required=True, change_default=True, index=True, tracking=1) + bill_line = fields.One2many('bill.receipt.line', 'bill_id', string='Bill Receipt Lines', auto_join=True) + # dunning_level = fields.Integer(string='Bill Level', default=30, help='30 hari sebelum jatuh tempo invoice') + date_kirim_tukar_faktur = fields.Date(string='Kirim Faktur') + resi_tukar_faktur = fields.Char(string='Resi Faktur') + date_terima_tukar_faktur = fields.Date(string='Terima Faktur') + shipper_faktur_id = fields.Many2one('delivery.carrier', string='Shipper Faktur') + is_validated = fields.Boolean(string='Validated') + notification = fields.Char(string='Notification') - @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 self.validated: + def copy_date_faktur(self): + if not self.is_validated: + raise UserError('Harus di validate dulu') + for line in self.bill_line: + invoice = line.invoice_id + if not invoice.date_kirim_tukar_faktur and self.date_kirim_tukar_faktur: + invoice.date_kirim_tukar_faktur = self.date_kirim_tukar_faktur + tukar_date = self.date_kirim_tukar_faktur + term = invoice.invoice_payment_term_id + add_days = 0 + for line in term.line_ids: + add_days += line.days + due_date = tukar_date + timedelta(days=add_days) + invoice.invoice_date_due = due_date + if not invoice.resi_tukar_faktur: + invoice.resi_tukar_faktur = self.resi_tukar_faktur + if not invoice.date_terima_tukar_faktur and self.date_terima_tukar_faktur: + invoice.date_terima_tukar_faktur = self.date_terima_tukar_faktur + tukar_date = self.date_terima_tukar_faktur + term = invoice.invoice_payment_term_id + add_days = 0 + for line in term.line_ids: + add_days += line.days + due_date = tukar_date + timedelta(days=add_days) + invoice.invoice_date_due = due_date + if not invoice.shipper_faktur_id: + invoice.shipper_faktur_id = self.shipper_faktur_id + self.notification = 'Berhasil copy tanggal terima faktur ke setiap invoice %s' % self.date_terima_tukar_faktur + + def validate_bill(self): + if not self.bill_line: + raise UserError('Bill Line masih kosong, generate dulu') + else: + self.is_validated = True + self.notification = 'Jangan lupa klik Copy Date jika sudah ada tanggal kirim / tanggal terima faktur' + + def generate_bill_line(self): + if self.is_validated: raise UserError('Sudah di validate, tidak bisa digenerate ulang') if self.bill_line: raise UserError('Harus hapus semua line jika ingin generate ulang') @@ -39,8 +77,8 @@ class BillReceipt(models.Model): query = [ ('move_type', '=', 'in_invoice'), ('state', '=', 'posted'), - ('payment_state', '=', 'not_paid'), ('partner_id', '=', partner.id), + ('payment_state', '=', 'not_paid'), ('date_kirim_tukar_faktur', '=', False), ] invoices = self.env['account.move'].search(query, order='invoice_date') @@ -58,19 +96,15 @@ class BillReceipt(models.Model): 'due_date': invoice.invoice_date_due }]) count += 1 - _logger.info("Bill Receipt Line generated %s" % count) - - self.validated = True + _logger.info("Bill Line generated %s" % count) + + @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 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' @@ -80,8 +114,10 @@ class BillReceiptLine(models.Model): partner_id = fields.Many2one('res.partner', string='Customer') invoice_id = fields.Many2one('account.move', string='Invoice') date_invoice = fields.Date(string='Invoice Date') + # due_date = fields.Date(string='Due Date') efaktur_id = fields.Many2one('vit.efaktur', string='Faktur Pajak') reference = fields.Char(string='Reference') total_amt = fields.Float(string='Total Amount') open_amt = fields.Float(string='Open Amount') - due_date = fields.Date(string='Due Date')
\ No newline at end of file + due_date = fields.Date(string='Due Date') + diff --git a/indoteknik_custom/views/bill_receipt.xml b/indoteknik_custom/views/bill_receipt.xml index 138bd0a0..c9ab492a 100644 --- a/indoteknik_custom/views/bill_receipt.xml +++ b/indoteknik_custom/views/bill_receipt.xml @@ -6,10 +6,13 @@ <field name="arch" type="xml"> <tree> <field name="number"/> + <field name="bill_date"/> <field name="partner_id"/> - <field name="document_date"/> - <field name="description"/> - <field name="validated"/> + <field name="is_validated" readonly="1"/> + <field name="date_kirim_tukar_faktur"/> + <field name="resi_tukar_faktur"/> + <field name="date_terima_tukar_faktur"/> + <field name="shipper_faktur_id"/> </tree> </field> </record> @@ -37,29 +40,41 @@ <field name="arch" type="xml"> <form> <header> - <button name="validate_button" + <button name="generate_bill_line" + string="Generate" + type="object" + class="mr-2 oe_highlight oe_edit_only" + /> + <button name="validate_bill" string="Validate" type="object" + class="mr-2 oe_highlight oe_edit_only" /> - <button name="cancel_button" - string="Cancel" - type="object" + <button name="copy_date_faktur" + string="Copy Date" + type="object" + class="oe_highlight oe_edit_only" /> </header> <sheet> <group> <group> - <field name="partner_id" attrs="{'readonly': [('validated', '=', True)]}"/> - <field name="document_date" attrs="{'readonly': [('validated', '=', True)]}"/> - <field name="description" attrs="{'readonly': [('validated', '=', True)]}"/> + <field name="number"/> + <field name="partner_id"/> + <field name="bill_date"/> + <field name="notification" readonly="1"/> </group> <group> - <field name="validated" readonly="1"/> + <field name="is_validated" readonly="1"/> + <field name="date_kirim_tukar_faktur"/> + <field name="resi_tukar_faktur"/> + <field name="date_terima_tukar_faktur"/> + <field name="shipper_faktur_id"/> </group> </group> <notebook> - <page string="Bill Line" name="bill_line"> - <field name="bill_line" attrs="{'readonly': [('validated', '=', True)]}"/> + <page string="Bills"> + <field name="bill_line" attrs="{'readonly': [('is_validated', '=', True)]}"/> </page> </notebook> </sheet> @@ -67,16 +82,30 @@ </field> </record> + <record id="view_bill_receipt_filter" model="ir.ui.view"> + <field name="name">bill.receipt.list.select</field> + <field name="model">bill.receipt</field> + <field name="priority" eval="15"/> + <field name="arch" type="xml"> + <search string="Search Bills"> + <field name="number"/> + <field name="partner_id"/> + <field name="bill_line" string="Bill" filter_domain="[('bill_line.invoice_id', 'ilike', self)]"/> + </search> + </field> + </record> + <record id="bill_receipt_action" model="ir.actions.act_window"> <field name="name">Bill Line</field> <field name="type">ir.actions.act_window</field> <field name="res_model">bill.receipt</field> + <field name="search_view_id" ref="view_bill_receipt_filter"/> <field name="view_mode">tree,form</field> </record> <menuitem id="menu_bill_receipt" - name="Bill Line" + name="Bill Receipt" parent="account.menu_finance_reports" sequence="250" action="bill_receipt_action" |
