[IMP] l10n_in: update demo data, add tax report line and method to get warehouse address

add get warehouse address method
needed in Indian EDI to pass value of dispatched address

improve demo data and bypass one GST number from validation because that GST number use to test EDI

Add Non GST Supplies and State CESS tax report line
Non-GST Supplies and State CESS is required to get related value from the invoice for send EDI

Part-of: odoo/odoo#79995
This commit is contained in:
Jigar Vaghela
2022-04-06 16:45:30 +02:00
parent 5468e41a4d
commit 534167bf96
11 changed files with 180 additions and 12 deletions
@@ -29,5 +29,9 @@
<field name="name">Nil Rated</field>
<field name="country_id" ref="base.in"/>
</record>
<record id="non_gst_supplies_group" model="account.tax.group">
<field name="name">Non GST Supplies</field>
<field name="country_id" ref="base.in"/>
</record>
</data>
</odoo>
@@ -75,6 +75,17 @@
<field name="tag_name">Zero Rated</field>
<field name="sequence">7</field>
</record>
<record id="tax_report_line_non_gst_supplies" model="account.tax.report.line">
<field name="name">Non GST Supplies</field>
<field name="tag_name">Non GST Supplies</field>
<field name="sequence">8</field>
</record>
<!-- The government can impose CESS for purposes such as disaster relief in specific states. So not tax link with this, If government add CESS in specific states then use this in repartition lines-->
<record id="tax_report_line_state_cess" model="account.tax.report.line">
<field name="name">State CESS</field>
<field name="tag_name">State CESS</field>
<field name="sequence">9</field>
</record>
</field>
</record>
</field>
@@ -147,6 +158,39 @@ if tax &gt; result:result=tax</field>
<field name="invoice_repartition_line_ids" eval="[(5, 0, 0), (0,0, { 'factor_percent': 100, 'repartition_type': 'base', 'plus_report_line_ids': [ref('tax_report_line_nil_rated')], }), (0,0, { 'factor_percent': 100, 'repartition_type': 'tax', }), ]"/>
<field name="refund_repartition_line_ids" eval="[(5, 0, 0), (0,0, { 'factor_percent': 100, 'repartition_type': 'base', 'minus_report_line_ids': [ref('tax_report_line_nil_rated')], }), (0,0, { 'factor_percent': 100, 'repartition_type': 'tax', }), ]"/>
</record>
<record id="non_gst_supplies_sale" model="account.tax.template">
<field name="name">Non GST Supplies</field>
<field name="description">Non GST Supplies</field>
<field name="type_tax_use">sale</field>
<field name="amount_type">percent</field>
<field name="amount">0</field>
<field name="chart_template_id" ref="indian_chart_template_standard"/>
<field name="tax_group_id" ref="non_gst_supplies_group"/>
<field name="invoice_repartition_line_ids" eval="[(5, 0, 0),
(0,0, {
'factor_percent': 100,
'repartition_type': 'base',
'plus_report_line_ids': [ref('tax_report_line_non_gst_supplies')],
}),
(0,0, {
'factor_percent': 100,
'repartition_type': 'tax',
}),
]"/>
<field name="refund_repartition_line_ids" eval="[(5, 0, 0),
(0,0, {
'factor_percent': 100,
'repartition_type': 'base',
'minus_report_line_ids': [ref('tax_report_line_non_gst_supplies')],
}),
(0,0, {
'factor_percent': 100,
'repartition_type': 'tax',
}),
]"/>
</record>
<record id="igst_sale_0" model="account.tax.template">
<field name="name">IGST 0%</field>
<field name="description">IGST 0%</field>
+55 -3
View File
@@ -11,9 +11,61 @@
<field name="invoice_date" eval="time.strftime('%Y-%m')+'-01'"/>
<field name="l10n_in_gst_treatment">regular</field>
<field name="journal_id" model="account.journal"
eval="obj().search([
('type', '=', 'sale'),
('company_id', '=', ref('l10n_in.demo_company_in'))], limit=1).id"/>
eval="obj().search([
('type', '=', 'sale'),
('company_id', '=', ref('l10n_in.demo_company_in'))], limit=1).id"/>
<field name="invoice_line_ids" model="account.move.line" eval="[
(0, 0, {
'product_id': ref('product.product_product_8'),
'quantity': 2,
'price_unit': 40000.0,
'tax_ids': [(6, 0, obj().tax_ids.search([
('company_id', '=', ref('l10n_in.demo_company_in')),
('type_tax_use', '=', 'sale'),
('amount','=', 28),
('tax_group_id', '=', ref('l10n_in.igst_group'))], limit=1).ids)]
}),
(0, 0, {
'product_id': ref('product.product_product_9'),
'quantity': 3,
'price_unit': 400.0,
'tax_ids': [(6, 0, obj().tax_ids.search([
('company_id', '=', ref('l10n_in.demo_company_in')),
('type_tax_use', '=', 'sale'),
('amount','=', 18),
('tax_group_id', '=', ref('l10n_in.igst_group'))], limit=1).ids)]
}),
(0, 0, {
'product_id': ref('product.product_product_10'),
'quantity': 4,
'price_unit': 300.0,
'tax_ids': [(6, 0, obj().tax_ids.search([
('company_id', '=', ref('l10n_in.demo_company_in')),
('type_tax_use', '=', 'sale'),
'|',
'&amp;',
('amount', '=', 18),
('tax_group_id', '=', ref('l10n_in.igst_group')),
'&amp;',
('tax_group_id', '=', ref('l10n_in.cess_group')),
('children_tax_ids.amount','=', 5)
], limit=2).ids)]
}),
]"/>
</record>
<record id="demo_invoice_b2b_intra_state" model="account.move">
<field name="move_type">out_invoice</field>
<field name="partner_id" ref="l10n_in.res_partner_registered_customer_intra_state"/>
<field name="l10n_in_reseller_partner_id" ref="l10n_in.res_partner_reseller"/>
<field name="invoice_user_id" ref="base.user_demo"/>
<field name="invoice_payment_term_id" ref="account.account_payment_term_end_following_month"/>
<field name="invoice_date" eval="time.strftime('%Y-%m')+'-01'"/>
<field name="l10n_in_gst_treatment">regular</field>
<field name="journal_id" model="account.journal"
eval="obj().search([
('type', '=', 'sale'),
('company_id', '=', ref('l10n_in.demo_company_in'))], limit=1).id"/>
<field name="invoice_line_ids" model="account.move.line" eval="[
(0, 0, {
'product_id': ref('product.product_product_8'),
+6 -5
View File
@@ -2,12 +2,13 @@
<odoo>
<record id="partner_demo_company_in" model="res.partner">
<field name="name">IN Company</field>
<field name="vat"></field>
<field name="street">A</field>
<field name="city">Kannamangala</field>
<field name="vat">36AABCT1332L011</field>
<field name="street">Block no. 401</field>
<field name="street2">Street 2</field>
<field name="city">Hyderabad</field>
<field name="country_id" ref="base.in"/>
<field name="state_id" ref="base.state_in_wb"/>
<field name="zip">56066</field>
<field name="state_id" ref="base.state_in_ts"/>
<field name="zip">500001</field>
<field name="phone">+91 81234 56789</field>
<field name="email">info@company.inexample.com</field>
<field name="website">www.inexample.com</field>
+16 -2
View File
@@ -25,7 +25,21 @@
<field name="zip">382007</field>
<field name="state_id" ref="base.state_in_gj"/>
<field name="country_id" ref="base.in"/>
<field name="vat">12GEOPS0823BBZH</field>
<field name="vat">24AACCT6304M1ZB</field>
</record>
<record id="res_partner_registered_customer_intra_state" model="res.partner">
<field name="name">Registered Customer Intra State</field>
<field eval="[(6, 0, [ref('l10n_in.res_partner_category_registered')])]" name="category_id"/>
<field name="is_company">1</field>
<field name="l10n_in_gst_treatment">regular</field>
<field name="street">floor-1, Maddikunta-Ankanpally Village</field>
<field name="street2">Post box No 2, NH-65</field>
<field name="city">Sangareddy</field>
<field name="zip">500002</field>
<field name="state_id" ref="base.state_in_ts"/>
<field name="country_id" ref="base.in"/>
<field name="vat">36AAACM4154G1ZO</field>
</record>
<!-- Unregistered Customer -->
@@ -65,7 +79,7 @@
<field name="zip">382007</field>
<field name="state_id" ref="base.state_in_gj"/>
<field name="country_id" ref="base.in"/>
<field name="vat">12GEOPS0823BBZ1</field>
<field name="vat">24GEOPS0823BBZ1</field>
</record>
<!-- Unregistered Customer -->
+8 -2
View File
@@ -17,13 +17,13 @@ class AccountMove(models.Model):
('overseas', 'Overseas'),
('special_economic_zone', 'Special Economic Zone'),
('deemed_export', 'Deemed Export')
], string="GST Treatment", compute="_compute_l10n_in_gst_treatment", store=True, readonly=False)
], string="GST Treatment", compute="_compute_l10n_in_gst_treatment", store=True, readonly=False, copy=True)
l10n_in_state_id = fields.Many2one('res.country.state', string="Location of supply")
l10n_in_gstin = fields.Char(string="GSTIN")
# For Export invoice this data is need in GSTR report
l10n_in_shipping_bill_number = fields.Char('Shipping bill number', readonly=True, states={'draft': [('readonly', False)]})
l10n_in_shipping_bill_date = fields.Date('Shipping bill date', readonly=True, states={'draft': [('readonly', False)]})
l10n_in_shipping_port_code_id = fields.Many2one('l10n_in.port.code', 'Port code', states={'draft': [('readonly', False)]})
l10n_in_shipping_port_code_id = fields.Many2one('l10n_in.port.code', 'Port code', readonly=True, states={'draft': [('readonly', False)]})
l10n_in_reseller_partner_id = fields.Many2one('res.partner', 'Reseller', domain=[('vat', '!=', False)], help="Only Registered Reseller", readonly=True, states={'draft': [('readonly', False)]})
@api.depends('amount_total')
@@ -94,3 +94,9 @@ class AccountMove(models.Model):
if not move.l10n_in_state_id:
move.l10n_in_state_id = company_unit_partner.state_id
return posted
def _l10n_in_get_warehouse_address(self):
"""Return address where goods are delivered/received for Invoice/Bill"""
# TO OVERRIDE
self.ensure_one()
return False
+11
View File
@@ -3,6 +3,7 @@
from odoo import api, fields, models, _
TEST_GST_NUMBER = "36AABCT1332L011"
class ResPartner(models.Model):
_inherit = 'res.partner'
@@ -44,3 +45,13 @@ class ResPartner(models.Model):
def _commercial_fields(self):
res = super()._commercial_fields()
return res + ['l10n_in_gst_treatment']
def check_vat_in(self, vat):
"""
This TEST_GST_NUMBER is used as test credentials for EDI
but this is not a valid number as per the regular expression
so TEST_GST_NUMBER is considered always valid
"""
if vat == TEST_GST_NUMBER:
return True
return super().check_vat_in(vat)
@@ -3,3 +3,4 @@
from . import purchase_order
from . import stock_warehouse
from . import account_move
@@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models
class AccountMove(models.Model):
_inherit = "account.move"
def _l10n_in_get_warehouse_address(self):
res = super()._l10n_in_get_warehouse_address()
if self.invoice_line_ids.purchase_line_id:
company_shipping_id = self.mapped(
"invoice_line_ids.purchase_line_id.move_ids.warehouse_id.partner_id"
)
if len(company_shipping_id) == 1:
return company_shipping_id
return res
@@ -3,3 +3,4 @@
from . import sale_order
from . import stock_warehouse
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 models
class AccountMove(models.Model):
_inherit = "account.move"
def _l10n_in_get_warehouse_address(self):
res = super()._l10n_in_get_warehouse_address()
if self.invoice_line_ids.sale_line_ids:
company_shipping_id = self.mapped("invoice_line_ids.sale_line_ids.order_id.warehouse_id.partner_id")
if len(company_shipping_id) == 1:
return company_shipping_id
return res