diff options
Diffstat (limited to 'addons/l10n_in/models/account.py')
| -rw-r--r-- | addons/l10n_in/models/account.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/addons/l10n_in/models/account.py b/addons/l10n_in/models/account.py new file mode 100644 index 00000000..bdc6e36d --- /dev/null +++ b/addons/l10n_in/models/account.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError + + +class AccountJournal(models.Model): + _inherit = "account.journal" + + # Use for filter import and export type. + l10n_in_gstin_partner_id = fields.Many2one('res.partner', string="GSTIN Unit", ondelete="restrict", help="GSTIN related to this journal. If empty then consider as company GSTIN.") + + def name_get(self): + """ + Add GSTIN number in name as suffix so user can easily find the right journal. + Used super to ensure nothing is missed. + """ + result = super().name_get() + result_dict = dict(result) + indian_journals = self.filtered(lambda j: j.company_id.country_id.code == 'IN' and + j.l10n_in_gstin_partner_id and j.l10n_in_gstin_partner_id.vat) + for journal in indian_journals: + name = result_dict[journal.id] + name += "- %s" % (journal.l10n_in_gstin_partner_id.vat) + result_dict[journal.id] = name + return list(result_dict.items()) + + +class AccountMoveLine(models.Model): + _inherit = "account.move.line" + + @api.depends('move_id.line_ids', 'move_id.line_ids.tax_line_id', 'move_id.line_ids.debit', 'move_id.line_ids.credit') + def _compute_tax_base_amount(self): + aml = self.filtered(lambda l: l.company_id.country_id.code == 'IN' and l.tax_line_id and l.product_id) + for move_line in aml: + base_lines = move_line.move_id.line_ids.filtered(lambda line: move_line.tax_line_id in line.tax_ids and move_line.product_id == line.product_id) + move_line.tax_base_amount = abs(sum(base_lines.mapped('balance'))) + remaining_aml = self - aml + if remaining_aml: + return super(AccountMoveLine, remaining_aml)._compute_tax_base_amount() + + +class AccountTax(models.Model): + _inherit = 'account.tax' + + l10n_in_reverse_charge = fields.Boolean("Reverse charge", help="Tick this if this tax is reverse charge. Only for Indian accounting") + + def get_grouping_key(self, invoice_tax_val): + """ Returns a string that will be used to group account.invoice.tax sharing the same properties""" + key = super(AccountTax, self).get_grouping_key(invoice_tax_val) + if self.company_id.country_id.code == 'IN': + key += "-%s-%s"% (invoice_tax_val.get('l10n_in_product_id', False), + invoice_tax_val.get('l10n_in_uom_id', False)) + return key |
