summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2023-07-21 10:00:16 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2023-07-21 10:00:16 +0700
commitce1c11b9be9274cf281a00cc340969f094a698be (patch)
treee588927438d7784f9c9fee3dd3147dc4ae81699a
parentf953c7c5915e15bd499f374d49403ef2567e0071 (diff)
update receipt bill
-rw-r--r--indoteknik_custom/models/bill_receipt.py98
-rw-r--r--indoteknik_custom/views/bill_receipt.xml57
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"