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 /indoteknik_custom/models/dunning_run.py | |
| parent | 6fdaee1c7b6557dc2e61ac7b5c1172d285ea7421 (diff) | |
| parent | d5e783d3a91b9ba782f4aebb21e558779a83f8b6 (diff) | |
Merge commit 'd5e783d3a91b9ba782f4aebb21e558779a83f8b6'
Diffstat (limited to 'indoteknik_custom/models/dunning_run.py')
| -rw-r--r-- | indoteknik_custom/models/dunning_run.py | 60 |
1 files changed, 60 insertions, 0 deletions
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') + |
