summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-11-01 22:25:41 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-11-01 22:25:41 +0700
commitbac2e79164b6c0712cc489e8f4d7aee830997afd (patch)
tree9496f840d4ae8808a64738a332594e2dc833f7c1
parent6fdaee1c7b6557dc2e61ac7b5c1172d285ea7421 (diff)
parentd5e783d3a91b9ba782f4aebb21e558779a83f8b6 (diff)
Merge commit 'd5e783d3a91b9ba782f4aebb21e558779a83f8b6'
-rwxr-xr-xindoteknik_custom/__manifest__.py2
-rwxr-xr-xindoteknik_custom/models/__init__.py1
-rw-r--r--indoteknik_custom/models/account_move.py28
-rw-r--r--indoteknik_custom/models/dunning_run.py60
-rwxr-xr-xindoteknik_custom/security/ir.model.access.csv4
-rw-r--r--indoteknik_custom/views/account_move.xml31
-rw-r--r--indoteknik_custom/views/dunning_run.xml72
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