[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:
@@ -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',
|
||||
|
||||
@@ -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
|
||||
@@ -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)))
|
||||
@@ -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,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>
|
||||
|
||||
Reference in New Issue
Block a user