[IMP] l10n_in_sale: Simplify GST sale order

GST Treatment:
       * Is show that how This sale order is treated in GST
       * Set default value in customer
       * This is help in GST retrun filing.
       * Value of treamtmnet as below
            - Registered Business - Regular
            - Registered Business - Composition
            - Unregistered Business
            - Consumer
            - Overseas
            - Special Economic Zone
            - Deemed Export
       * GSTIN is required in
            - Registered Business - Regular
            - Registered Business - Composition
            - Special Economic Zone
            - Deemed Export

    Shipping GSTIN:
       * GST identification number or GST number
       * There can be multiple GSTIN for a single person, being an assessee under the Income Tax Act for every State or Union Territory in which such person operates from
       * So When specific invoice and delivery addresses is enabled then user can enter able to enter "Shipping GSTIN" on shipping address of partner
       * Add Validate of this number using regular expression
This commit is contained in:
Jigar Vaghela
2020-04-30 07:20:06 +00:00
parent 205430ffb5
commit d83763627d
7 changed files with 88 additions and 12 deletions
+2 -1
View File
@@ -12,7 +12,8 @@
],
'data': [
'views/report_sale_order.xml',
'views/sale_views.xml'
'views/sale_views.xml',
'views/res_partner_views.xml',
],
'demo': [
'data/product_demo.xml',
+2
View File
@@ -1,4 +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
@@ -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
+18
View File
@@ -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)))
+27 -9
View File
@@ -8,20 +8,38 @@ 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)]", states={'posted': [('readonly', True)]})
l10n_in_journal_id = fields.Many2one('account.journal', string="Journal", states={'posted': [('readonly', True)]})
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_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)]})
l10n_in_company_country_code = fields.Char(related='company_id.country_id.code', string="Country code")
def _prepare_invoice(self):
invoice_vals = super(SaleOrder, self)._prepare_invoice()
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
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
@api.onchange('company_id')
def l10n_in_onchange_company_id(self):
domain = [('company_id', '=', self.company_id.id), ('type', '=', 'sale')]
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
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()
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="l10n_in_view_partner_form" model="ir.ui.view">
<field name="name">l10n.in.res.partner.vat.inherit</field>
<field name="model">res.partner</field>
<field name="priority" eval="100"/>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='vat']" position="after">
<field name="l10n_in_shipping_gstin" groups="sale.group_delivery_invoice_address" attrs="{'invisible': ['|',('type', '!=', 'delivery'),('parent_id', '=', False)]}"/>
</xpath>
<xpath expr="//field[@name='child_ids']/form//field[@name='comment']" position="before">
<field name="l10n_in_shipping_gstin" groups="sale.group_delivery_invoice_address" attrs="{'invisible': [('type', '!=', 'delivery')]}"/>
</xpath>
</field>
</record>
</odoo>
+6 -2
View File
@@ -6,10 +6,14 @@
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='partner_id']" position="after">
<field name="l10n_in_reseller_partner_id" groups="l10n_in.group_l10n_in_reseller"/>
<field name="l10n_in_company_country_code" invisible="1"/>
<field name="l10n_in_reseller_partner_id" groups="l10n_in.group_l10n_in_reseller"
attrs="{'invisible': [('l10n_in_company_country_code','!=', 'IN')]}"/>
<field name="l10n_in_gst_treatment"
attrs="{'invisible':[('l10n_in_company_country_code','!=','IN')],'required':[('l10n_in_company_country_code','=','IN')]}"/>
</xpath>
<xpath expr="//group[@name='sale_info']//field[@name='invoice_status']" position="after">
<field name="l10n_in_journal_id" domain="[('company_id', '=', company_id), ('type','=','sale')]" options="{'no_create': True}"/>
<field name="l10n_in_journal_id" domain="[('company_id', '=', company_id), ('type','=','sale')]" options="{'no_create': True}" attrs="{'invisible': [('l10n_in_company_country_code','!=', 'IN')]}"/>
</xpath>
</field>
</record>