diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-11-01 22:25:41 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-11-01 22:25:41 +0700 |
| commit | bac2e79164b6c0712cc489e8f4d7aee830997afd (patch) | |
| tree | 9496f840d4ae8808a64738a332594e2dc833f7c1 | |
| parent | 6fdaee1c7b6557dc2e61ac7b5c1172d285ea7421 (diff) | |
| parent | d5e783d3a91b9ba782f4aebb21e558779a83f8b6 (diff) | |
Merge commit 'd5e783d3a91b9ba782f4aebb21e558779a83f8b6'
| -rwxr-xr-x | indoteknik_custom/__manifest__.py | 2 | ||||
| -rwxr-xr-x | indoteknik_custom/models/__init__.py | 1 | ||||
| -rw-r--r-- | indoteknik_custom/models/account_move.py | 28 | ||||
| -rw-r--r-- | indoteknik_custom/models/dunning_run.py | 60 | ||||
| -rwxr-xr-x | indoteknik_custom/security/ir.model.access.csv | 4 | ||||
| -rw-r--r-- | indoteknik_custom/views/account_move.xml | 31 | ||||
| -rw-r--r-- | indoteknik_custom/views/dunning_run.xml | 72 |
7 files changed, 197 insertions, 1 deletions
diff --git a/indoteknik_custom/__manifest__.py b/indoteknik_custom/__manifest__.py index 96988258..a703bcef 100755 --- a/indoteknik_custom/__manifest__.py +++ b/indoteknik_custom/__manifest__.py @@ -42,6 +42,8 @@ 'views/stock_picking_type.xml', 'views/users.xml', 'views/delivery_carrier.xml', + 'views/account_move.xml', + 'views/dunning_run.xml', 'report/report.xml', 'report/report_banner_banner.xml', 'report/report_banner_banner2.xml', diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py index 37a8d31f..94fe56fe 100755 --- a/indoteknik_custom/models/__init__.py +++ b/indoteknik_custom/models/__init__.py @@ -28,3 +28,4 @@ from . import product_pricelist from . import users from . import ir_attachment from . import delivery_carrier +from . import dunning_run diff --git a/indoteknik_custom/models/account_move.py b/indoteknik_custom/models/account_move.py index 224e22ec..aa4b0b1e 100644 --- a/indoteknik_custom/models/account_move.py +++ b/indoteknik_custom/models/account_move.py @@ -1,7 +1,35 @@ from odoo import models, api, fields +from datetime import timedelta class AccountMove(models.Model): _inherit = 'account.move' date_send_fp = fields.Datetime(string="Tanggal Kirim Faktur Pajak") last_log_fp = fields.Char(string="Log Terakhir Faktur Pajak") + # use for industry business + 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') + + @api.onchange('date_kirim_tukar_faktur') + def change_date_kirim_tukar_faktur(self): + for invoice in self: + tukar_date = invoice.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 + + @api.onchange('date_terima_tukar_faktur') + def change_date_terima_tukar_faktur(self): + for invoice in self: + tukar_date = invoice.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 diff --git a/indoteknik_custom/models/dunning_run.py b/indoteknik_custom/models/dunning_run.py new file mode 100644 index 00000000..5d98bb98 --- /dev/null +++ b/indoteknik_custom/models/dunning_run.py @@ -0,0 +1,60 @@ +from odoo import models, api, fields +from odoo.exceptions import AccessError, UserError, ValidationError +import logging + +_logger = logging.getLogger(__name__) + + +class DunningRun(models.Model): + _name = 'dunning.run' + _description = 'Dunning Run' + _order = 'dunning_date desc, id desc' + + number = fields.Char(string='Document No', index=True, required=True, copy=False, readonly=True) + dunning_date = fields.Date(string='Dunning Date') + partner_id = fields.Many2one( + 'res.partner', string='Customer', + required=True, change_default=True, index=True, tracking=1) + dunning_line = fields.One2many('dunning.run.line', 'dunning_id', string='Dunning Lines', auto_join=True) + dunning_level = fields.Integer(string='Dunning Level', default=30, help='30 hari sebelum jatuh tempo invoice') + + def generate_dunning_line(self): + # validation + if not self.partner_id: + raise UserError('Customer harus diisi') + if self.dunning_level <= 0: + raise UserError('Dunning Level harus diisi lebih dari 0') + + invoices = self.env['account.move'].search([ + ('amount_residual_signed', '>', 0), + ('partner_id', '=', self.partner_id), + ('move_type', '=', 'out_invoice'), + ('state', '=', 'posted'), + ]) + count = 0 + for invoice in invoices: + self.env['dunning.run.line'].create([{ + 'dunning_id': self.id, + 'invoice_id': invoice.id, + 'date_invoice': invoice.invoice_date, + 'efaktur_id': invoice.efaktur_id, + 'reference': invoice.ref, + 'open_amt': invoice.amount_residual_signed + }]) + count += 1 + _logger.info("Dunning Line generated %s" % count) + + +class DunningRunLine(models.Model): + _name = 'dunning.run.line' + _description = 'Dunning Run Line' + _order = 'dunning_id, id' + + dunning_id = fields.Many2one('dunning.run', string='Dunning Ref', required=True, ondelete='cascade', index=True, copy=False) + 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') + open_amt = fields.Float(string='Open Amount') + diff --git a/indoteknik_custom/security/ir.model.access.csv b/indoteknik_custom/security/ir.model.access.csv index 78e56b30..9d2137f6 100755 --- a/indoteknik_custom/security/ir.model.access.csv +++ b/indoteknik_custom/security/ir.model.access.csv @@ -11,4 +11,6 @@ access_purchase_pricelist,access.purchase.pricelist,model_purchase_pricelist,,1, access_sale_monitoring,access.sale.monitoring,model_sale_monitoring,,1,1,1,1 access_sale_monitoring_detail,access.sale.monitoring.detail,model_sale_monitoring_detail,,1,1,1,1 access_delivery_order,access.delivery.order,model_delivery_order,,1,1,1,1 -access_delivery_order_line,access.delivery.order.line,model_delivery_order_line,,1,1,1,1
\ No newline at end of file +access_delivery_order_line,access.delivery.order.line,model_delivery_order_line,,1,1,1,1 +access_dunning_run,access.dunning.run,model_dunning_run,,1,1,1,1 +access_dunning_run_line,access.dunning.run.line,model_dunning_run_line,,1,1,1,1
\ No newline at end of file diff --git a/indoteknik_custom/views/account_move.xml b/indoteknik_custom/views/account_move.xml new file mode 100644 index 00000000..6e52f075 --- /dev/null +++ b/indoteknik_custom/views/account_move.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<odoo> + <data> + <record id="account_move_form_inherit" model="ir.ui.view"> + <field name="name">Account Move</field> + <field name="model">account.move</field> + <field name="inherit_id" ref="account.view_move_form"/> + <field name="arch" type="xml"> + <field name="invoice_user_id" position="after"> + <field name="date_kirim_tukar_faktur"/> + <field name="shipper_faktur_id"/> + <field name="resi_tukar_faktur"/> + <field name="date_terima_tukar_faktur"/> + </field> + </field> + </record> + <record id="account_move_tree_inherit" model="ir.ui.view"> + <field name="name">Account Move</field> + <field name="model">account.move</field> + <field name="inherit_id" ref="account.view_out_invoice_tree"/> + <field name="arch" type="xml"> + <field name="payment_state" position="after"> + <field name="date_kirim_tukar_faktur"/> + <field name="shipper_faktur_id"/> + <field name="resi_tukar_faktur"/> + <field name="date_terima_tukar_faktur"/> + </field> + </field> + </record> + </data> +</odoo>
\ No newline at end of file diff --git a/indoteknik_custom/views/dunning_run.xml b/indoteknik_custom/views/dunning_run.xml new file mode 100644 index 00000000..b18748ea --- /dev/null +++ b/indoteknik_custom/views/dunning_run.xml @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<odoo> + <record id="dunning_run_tree" model="ir.ui.view"> + <field name="name">dunning.run.tree</field> + <field name="model">dunning.run</field> + <field name="arch" type="xml"> + <tree> + <field name="id"/> + <field name="number"/> + <field name="dunning_date"/> + <field name="partner_id"/> + <field name="dunning_level"/> + </tree> + </field> + </record> + + <record id="dunning_run_line_tree" model="ir.ui.view"> + <field name="name">dunning.run.line.tree</field> + <field name="model">dunning.run.line</field> + <field name="arch" type="xml"> + <tree> + <field name="invoice_id"/> + <field name="date_invoice"/> + <field name="efaktur_id"/> + <field name="reference"/> + <field name="open_amt"/> + </tree> + </field> + </record> + + <record id="dunning_run_form" model="ir.ui.view"> + <field name="name">dunning.run.form</field> + <field name="model">dunning.run</field> + <field name="arch" type="xml"> + <form> + <sheet string="Dunning"> + <div class="oe_button_box" name="button_box"/> + <group> + <group> + <field name="number"/> + <field name="partner_id"/> + <field name="dunning_level"/> + <button name="generate_dunning_line" + string="Generate" + type="object" + class="oe_highlight oe_edit_only" + /> + </group> + </group> + <notebook> + <page string="Invoices"> + <field name="dunning_line"/> + </page> + </notebook> + </sheet> + </form> + </field> + </record> + + <record id="dunning_run_action" model="ir.actions.act_window"> + <field name="name">Dunning Run</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">dunning.run</field> + <field name="view_mode">tree,form</field> + </record> + + <menuitem id="menu_dunning_run" + name="Dunning Run" + action="dunning_run_action" + parent="account.menu_finance_reports" + sequence="200"/> +</odoo>
\ No newline at end of file |
