summaryrefslogtreecommitdiff
path: root/addons/l10n_in_sale/models
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/l10n_in_sale/models
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/l10n_in_sale/models')
-rw-r--r--addons/l10n_in_sale/models/__init__.py6
-rw-r--r--addons/l10n_in_sale/models/account_move.py16
-rw-r--r--addons/l10n_in_sale/models/res_partner.py18
-rw-r--r--addons/l10n_in_sale/models/sale_order.py56
4 files changed, 96 insertions, 0 deletions
diff --git a/addons/l10n_in_sale/models/__init__.py b/addons/l10n_in_sale/models/__init__.py
new file mode 100644
index 00000000..37c5b03a
--- /dev/null
+++ b/addons/l10n_in_sale/models/__init__.py
@@ -0,0 +1,6 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import res_partner
+from . import sale_order
+from . import account_move
diff --git a/addons/l10n_in_sale/models/account_move.py b/addons/l10n_in_sale/models/account_move.py
new file mode 100644
index 00000000..d3c12ede
--- /dev/null
+++ b/addons/l10n_in_sale/models/account_move.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, models
+
+
+class AccountMove(models.Model):
+ _inherit = "account.move"
+
+ def _l10n_in_get_shipping_partner(self):
+ shipping_partner = super()._l10n_in_get_shipping_partner()
+ return self.partner_shipping_id or shipping_partner
+
+ @api.model
+ def _l10n_in_get_shipping_partner_gstin(self, shipping_partner):
+ return shipping_partner.l10n_in_shipping_gstin or shipping_partner.vat
diff --git a/addons/l10n_in_sale/models/res_partner.py b/addons/l10n_in_sale/models/res_partner.py
new file mode 100644
index 00000000..6e560489
--- /dev/null
+++ b/addons/l10n_in_sale/models/res_partner.py
@@ -0,0 +1,18 @@
+# -*- 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 ResPartner(models.Model):
+ _inherit = 'res.partner'
+
+ l10n_in_shipping_gstin = fields.Char("Shipping GSTIN")
+
+ @api.constrains('l10n_in_shipping_gstin')
+ def _check_l10n_in_shipping_gstin(self):
+ check_vat_in = self.env['res.partner'].check_vat_in
+ wrong_shipping_gstin_partner = self.filtered(lambda p: p.l10n_in_shipping_gstin and not check_vat_in(p.l10n_in_shipping_gstin))
+ if wrong_shipping_gstin_partner:
+ raise ValidationError(_("The shipping GSTIN number [%s] does not seem to be valid") %(",".join(p.l10n_in_shipping_gstin for p in wrong_shipping_gstin_partner)))
diff --git a/addons/l10n_in_sale/models/sale_order.py b/addons/l10n_in_sale/models/sale_order.py
new file mode 100644
index 00000000..a945d52c
--- /dev/null
+++ b/addons/l10n_in_sale/models/sale_order.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models
+
+
+class SaleOrder(models.Model):
+ _inherit = "sale.order"
+
+ l10n_in_reseller_partner_id = fields.Many2one('res.partner',
+ string='Reseller', domain="[('vat', '!=', False), '|', ('company_id', '=', False), ('company_id', '=', company_id)]", readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]})
+ l10n_in_journal_id = fields.Many2one('account.journal', string="Journal", compute="_compute_l10n_in_journal_id", store=True, readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]})
+ l10n_in_gst_treatment = fields.Selection([
+ ('regular', 'Registered Business - Regular'),
+ ('composition', 'Registered Business - Composition'),
+ ('unregistered', 'Unregistered Business'),
+ ('consumer', 'Consumer'),
+ ('overseas', 'Overseas'),
+ ('special_economic_zone', 'Special Economic Zone'),
+ ('deemed_export', 'Deemed Export'),
+ ], string="GST Treatment", readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, compute="_compute_l10n_in_gst_treatment", store=True)
+ l10n_in_company_country_code = fields.Char(related='company_id.country_id.code', string="Country code")
+
+ @api.depends('partner_id')
+ def _compute_l10n_in_gst_treatment(self):
+ for order in self:
+ # set default value as False so CacheMiss error never occurs for this field.
+ order.l10n_in_gst_treatment = False
+ if order.l10n_in_company_country_code == 'IN':
+ l10n_in_gst_treatment = order.partner_id.l10n_in_gst_treatment
+ if not l10n_in_gst_treatment and order.partner_id.country_id and order.partner_id.country_id.code != 'IN':
+ l10n_in_gst_treatment = 'overseas'
+ if not l10n_in_gst_treatment:
+ l10n_in_gst_treatment = order.partner_id.vat and 'regular' or 'consumer'
+ order.l10n_in_gst_treatment = l10n_in_gst_treatment
+
+ @api.depends('company_id')
+ def _compute_l10n_in_journal_id(self):
+ for order in self:
+ # set default value as False so CacheMiss error never occurs for this field.
+ order.l10n_in_journal_id = False
+ if order.l10n_in_company_country_code == 'IN':
+ domain = [('company_id', '=', order.company_id.id), ('type', '=', 'sale')]
+ journal = self.env['account.journal'].search(domain, limit=1)
+ if journal:
+ order.l10n_in_journal_id = journal.id
+
+
+ def _prepare_invoice(self):
+ invoice_vals = super(SaleOrder, self)._prepare_invoice()
+ if self.l10n_in_company_country_code == 'IN':
+ invoice_vals['l10n_in_reseller_partner_id'] = self.l10n_in_reseller_partner_id.id
+ if self.l10n_in_journal_id:
+ invoice_vals['journal_id'] = self.l10n_in_journal_id.id
+ invoice_vals['l10n_in_gst_treatment'] = self.l10n_in_gst_treatment
+ return invoice_vals