diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2023-01-13 09:45:49 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2023-01-13 09:45:49 +0700 |
| commit | a560384285965c54d1a6db17e935ebdd829893aa (patch) | |
| tree | 6a4052d96c0d5e29fd171c09645dead33ffe7ec7 | |
| parent | fcff03f98816bc0c8501206de3e4dfac979622b1 (diff) | |
add multiple partner if not parent company in dunning run
| -rw-r--r-- | indoteknik_custom/models/dunning_run.py | 52 | ||||
| -rw-r--r-- | indoteknik_custom/views/dunning_run.xml | 5 | ||||
| -rw-r--r-- | indoteknik_custom/views/ir_sequence.xml | 10 |
3 files changed, 57 insertions, 10 deletions
diff --git a/indoteknik_custom/models/dunning_run.py b/indoteknik_custom/models/dunning_run.py index 5d98bb98..ef6407e8 100644 --- a/indoteknik_custom/models/dunning_run.py +++ b/indoteknik_custom/models/dunning_run.py @@ -10,24 +10,55 @@ class DunningRun(models.Model): _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') + number = fields.Char(string='Document No', index=True, copy=False, readonly=True) + dunning_date = fields.Date(string='Dunning Date', required=True) 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') + # dunning_level = fields.Integer(string='Dunning Level', default=30, help='30 hari sebelum jatuh tempo invoice') + + def generate_dunning_line(self): + if self.partner_id.parent_id: + raise UserError('Harus pilih parent company') + + partners = [] + partners += self.partner_id.child_ids + partners.append(self.partner_id) + + for partner in partners: + query = [ + ('move_type', '=', 'out_invoice'), + ('partner_id', '=', partner.id), + ('outstanding_amount', '>', 0), + ] + invoices = self.env['account.move'].search(query, order='invoice_date') + for invoice in invoices: + parameter_line = { + 'dunning_id': self.id, + 'partner_id': invoice.partner_id, + 'invoice_id': invoice.id, + 'date_invoice': invoice.invoice_date, + 'efaktur_id': invoice.efaktur_id, + 'reference': invoice.ref, + 'open_amt': invoice.outstanding_amount + } + self.env['dunning.run.line'].create([parameter_line]) + + @api.model + def create(self, vals): + vals['number'] = self.env['ir.sequence'].next_by_code('dunning.run') or '0' + result = super(DunningRun, self).create(vals) + return result 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), + ('partner_id', '=', self.partner_id.id), ('move_type', '=', 'out_invoice'), ('state', '=', 'posted'), ]) @@ -37,9 +68,11 @@ class DunningRun(models.Model): 'dunning_id': self.id, 'invoice_id': invoice.id, 'date_invoice': invoice.invoice_date, - 'efaktur_id': invoice.efaktur_id, + 'efaktur_id': invoice.efaktur_id.id, 'reference': invoice.ref, - 'open_amt': invoice.amount_residual_signed + 'total_amt': invoice.amount_total, + 'open_amt': invoice.amount_residual_signed, + 'due_date': invoice.invoice_date_due }]) count += 1 _logger.info("Dunning Line generated %s" % count) @@ -51,10 +84,13 @@ class DunningRunLine(models.Model): _order = 'dunning_id, id' dunning_id = fields.Many2one('dunning.run', string='Dunning Ref', required=True, ondelete='cascade', index=True, copy=False) + 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') diff --git a/indoteknik_custom/views/dunning_run.xml b/indoteknik_custom/views/dunning_run.xml index b18748ea..427653fe 100644 --- a/indoteknik_custom/views/dunning_run.xml +++ b/indoteknik_custom/views/dunning_run.xml @@ -9,7 +9,6 @@ <field name="number"/> <field name="dunning_date"/> <field name="partner_id"/> - <field name="dunning_level"/> </tree> </field> </record> @@ -23,7 +22,9 @@ <field name="date_invoice"/> <field name="efaktur_id"/> <field name="reference"/> + <field name="total_amt"/> <field name="open_amt"/> + <field name="due_date"/> </tree> </field> </record> @@ -39,7 +40,7 @@ <group> <field name="number"/> <field name="partner_id"/> - <field name="dunning_level"/> + <field name="dunning_date"/> <button name="generate_dunning_line" string="Generate" type="object" diff --git a/indoteknik_custom/views/ir_sequence.xml b/indoteknik_custom/views/ir_sequence.xml index df4a5a22..6a6f474d 100644 --- a/indoteknik_custom/views/ir_sequence.xml +++ b/indoteknik_custom/views/ir_sequence.xml @@ -20,5 +20,15 @@ <field name="number_next">1</field> <field name="number_increment">1</field> </record> + + <record id="sequence_dunning_run" model="ir.sequence"> + <field name="name">Dunning Run</field> + <field name="code">dunning.run</field> + <field name="active">TRUE</field> + <field name="prefix">TF/%(year)s/</field> + <field name="padding">5</field> + <field name="number_next">1</field> + <field name="number_increment">1</field> + </record> </data> </odoo>
\ No newline at end of file |
