oca-ocb-l10n_asia-pacific/odoo-bringout-oca-ocb-l10n_in_pos/l10n_in_pos/tests/common.py
Ernad Husremovic 7f43bbbfcc 19.0 vanilla
2026-03-09 09:31:21 +01:00

90 lines
3.2 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from contextlib import contextmanager
from odoo.fields import Command
from odoo.addons.point_of_sale.tests.common import TestPoSCommon
from odoo.addons.account.tests.common import TestTaxCommon
class TestInPosBase(TestPoSCommon):
"""
Base class for Indian GSTR and POS-related test cases.
This class sets up the company, products, and configuration required
for any test involving GSTR in a POS environment.
"""
@classmethod
@TestTaxCommon.setup_country('in')
def setUpClass(cls):
super().setUpClass()
country_in_id = cls.env.ref("base.in").id
cls.company_data["company"].write({
"vat": "24AAGCC7144L6ZE",
"state_id": cls.env.ref("base.state_in_gj").id,
"street": "street1",
"city": "city1",
"zip": "123456",
"country_id": country_in_id,
"l10n_in_is_gst_registered": True,
})
cls.config = cls.basic_config
cls.gst_5 = cls.env['account.chart.template'].ref('sgst_sale_5')
cls.nil_rated = cls.env['account.chart.template'].ref('nil_rated_sale')
country_in = cls.env.ref('base.in')
state_in_gj = cls.env.ref('base.state_in_gj')
cls.partner_a.write({
'name': "Partner Intra State",
'vat': '24ABCPM8965E1ZE',
'state_id': state_in_gj.id,
'country_id': country_in.id,
'street': "Karansinhji Rd",
'street2': "Karanpara",
'city': "Rajkot",
'zip': "360001",
})
# Common product setup for POS tests
cls._setup_products()
@classmethod
def _setup_products(cls):
"""Sets up products for POS testing with GST."""
cls.product_a.write({
'available_in_pos': True,
'l10n_in_hsn_code': '1111',
'list_price': 100,
'taxes_id': [Command.set(cls.gst_5.ids)], # Tax: 5
})
cls.product_b.write({
'available_in_pos': True,
'l10n_in_hsn_code': '2222',
'list_price': 200,
'taxes_id': [Command.set(cls.gst_5.ids)], # Tax: 10
})
cls.product_c = cls.env['product.product'].create({
'name': 'Product C',
'available_in_pos': True,
'list_price': 300,
'taxes_id': [Command.set(cls.nil_rated.ids)], # Tax: 0
})
@contextmanager
def with_pos_session(self):
"""Opens a new POS session and ensures it is closed properly."""
session = self.open_new_session(0.0)
yield session
session.post_closing_cash_details(0.0)
session.close_session_from_ui()
def _create_order(self, ui_data):
"""Helper to create a POS order from UI data."""
order_data = self.create_ui_order_data(**ui_data)
results = self.env['pos.order'].sync_from_ui([order_data])
return self.env['pos.order'].browse([o['id'] for o in results['pos.order']])
@classmethod
def _create_categ_anglo(cls):
# Stock Valuation support is currently not implemented for Indian localization.
# Once support is added, this method override will be removed.
return False