From 1e6e30216c6e1f01d191f2cfb60bf241f441ec84 Mon Sep 17 00:00:00 2001 From: Jigar Vaghela Date: Tue, 16 Jun 2020 11:37:27 +0000 Subject: [PATCH] [IMP] l10n_in_sale_*: set gst_treatment and journal when create from other then form view when sale order is created from website sale then onchange is not called so value is empty So here we use computed readonly False, store True for l10n_in_gst_treatment and l10n_in_journal_id in sale.order X-original-commit: e44b9f44c81f418e0afea4aa24ed5bb41a2d210b --- addons/l10n_in_sale/models/sale_order.py | 43 ++++++++++++------- .../l10n_in_sale_stock/models/sale_order.py | 13 +++--- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/addons/l10n_in_sale/models/sale_order.py b/addons/l10n_in_sale/models/sale_order.py index 316246e12e4..09ca0784683 100644 --- a/addons/l10n_in_sale/models/sale_order.py +++ b/addons/l10n_in_sale/models/sale_order.py @@ -9,7 +9,7 @@ class SaleOrder(models.Model): 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)]}) - l10n_in_journal_id = fields.Many2one('account.journal', string="Journal", readonly=True, states={'draft': [('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)]}) l10n_in_gst_treatment = fields.Selection([ ('regular', 'Registered Business - Regular'), ('composition', 'Registered Business - Composition'), @@ -18,9 +18,34 @@ class SaleOrder(models.Model): ('overseas', 'Overseas'), ('special_economic_zone', 'Special Economic Zone'), ('deemed_export', 'Deemed Export'), - ], string="GST Treatment", readonly=True, states={'draft': [('readonly', False)]}) + ], string="GST Treatment", readonly=True, states={'draft': [('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': @@ -29,17 +54,3 @@ class SaleOrder(models.Model): invoice_vals['journal_id'] = self.l10n_in_journal_id.id invoice_vals['l10n_in_gst_treatment'] = self.l10n_in_gst_treatment return invoice_vals - - @api.onchange('company_id') - def l10n_in_onchange_company_id(self): - if self.l10n_in_company_country_code == 'IN': - domain = [('company_id', '=', self.company_id.id), ('type', '=', 'sale')] - journal = self.env['account.journal'].search(domain, limit=1) - if journal: - self.l10n_in_journal_id = journal.id - - @api.onchange('partner_id') - def onchange_partner_id(self): - if self.l10n_in_company_country_code == 'IN': - self.l10n_in_gst_treatment = self.partner_id.l10n_in_gst_treatment - return super().onchange_partner_id() diff --git a/addons/l10n_in_sale_stock/models/sale_order.py b/addons/l10n_in_sale_stock/models/sale_order.py index 02b46faaf8a..5c07b5e67de 100644 --- a/addons/l10n_in_sale_stock/models/sale_order.py +++ b/addons/l10n_in_sale_stock/models/sale_order.py @@ -7,9 +7,10 @@ from odoo import models, fields, api class SaleOrder(models.Model): _inherit = "sale.order" - @api.onchange('company_id', 'warehouse_id') - def l10n_in_onchange_company_id(self): - if self.warehouse_id.l10n_in_sale_journal_id: - self.l10n_in_journal_id = self.warehouse_id.l10n_in_sale_journal_id.id - else: - super().l10n_in_onchange_company_id() + @api.depends('company_id', 'warehouse_id') + def _compute_l10n_in_journal_id(self): + super()._compute_l10n_in_journal_id() + for order in self: + if order.l10n_in_company_country_code == 'IN': + if order.warehouse_id.l10n_in_sale_journal_id: + order.l10n_in_journal_id = order.warehouse_id.l10n_in_sale_journal_id.id