[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:
@@ -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 > 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>
|
||||
|
||||
@@ -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'),
|
||||
'|',
|
||||
'&',
|
||||
('amount', '=', 18),
|
||||
('tax_group_id', '=', ref('l10n_in.igst_group')),
|
||||
'&',
|
||||
('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'),
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 -->
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user