Odoo18-Base/addons/l10n_in_ewaybill_stock/tests/test_ewaybill_stock.py
2025-01-06 10:57:38 +07:00

193 lines
6.9 KiB
Python

from freezegun import freeze_time
from odoo import _
from odoo.fields import Command
from odoo.tests import tagged
from odoo.addons.l10n_in.tests.common import L10nInTestInvoicingCommon
@tagged('post_install', '-at_install', 'post_install_l10n')
class TestStockEwaybill(L10nInTestInvoicingCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env.user.groups_id += cls.env.ref('stock.group_stock_manager')
cls.product_a.standard_price = 500.00
cls.partner_a.write({
'vat': '27DJMPM8965E1ZE',
'l10n_in_gst_treatment': 'regular',
'state_id': cls.state_in_mh.id,
'zip': '431122'
})
def _create_stock_picking(self):
warehouse = self.env['stock.warehouse'].search([('company_id', '=', self.env.company.id)])
delivery_picking = self.env['stock.picking'].create({
'partner_id': self.partner_a.id,
'picking_type_id': warehouse.out_type_id.id,
'move_ids': [Command.create({
'name': self.product_a.name,
'product_id': self.product_a.id,
'product_uom_qty': 5,
'quantity': 5,
'location_id': self.env.ref('stock.stock_location_customers').id,
'location_dest_id': warehouse.lot_stock_id.id,
})]
})
delivery_picking.button_validate()
return delivery_picking
@freeze_time('2024-04-26')
def test_ewaybill_stock(self):
delivery_picking = self._create_stock_picking()
ewaybill = self.env['l10n.in.ewaybill'].create({
'picking_id': delivery_picking.id,
'mode': False,
'type_id': self.env.ref('l10n_in_ewaybill_stock.type_delivery_challan_sub_line_sales').id,
})
self.assertRecordValues(ewaybill, [{
'state': 'pending',
'display_name': _('Pending'),
'fiscal_position_id': self.fp_in_inter_state.id,
}])
ewaybill.fiscal_position_id = self.fp_in_inter_state
self.assertEqual(ewaybill.move_ids[0].ewaybill_tax_ids, self.igst_sale_5)
expected_json = {
'supplyType': 'O',
'subSupplyType': '10',
'docType': 'CHL',
'transactionType': 1,
'transDistance': '0',
'docNo': 'compa/OUT/00001',
'docDate': '26/04/2024',
'fromGstin': '24AAGCC7144L6ZE',
'toGstin': '27DJMPM8965E1ZE',
'fromTrdName': 'Default Company',
'toTrdName': 'Partner Intra State',
'fromStateCode': 24,
'toStateCode': 27,
'fromAddr1': 'Khodiyar Chowk',
'toAddr1': 'Karansinhji Rd',
'fromAddr2': 'Sala Number 3',
'toAddr2': 'Karanpara',
'fromPlace': 'Amreli',
'toPlace': 'Rajkot',
'fromPincode': 365220,
'toPincode': 431122,
'actToStateCode': 27,
'actFromStateCode': 24,
'itemList': [{
'productName': 'product_a',
'hsnCode': '111111',
'productDesc': 'product_a',
'quantity': 5.0,
'qtyUnit': 'UNT',
'taxableAmount': 2500.0,
'igstRate': 5.0,
}],
'totalValue': 2500.0,
'cgstValue': 0.0,
'sgstValue': 0.0,
'igstValue': 125.0,
'cessValue': 0.0,
'cessNonAdvolValue': 0.0,
'otherValue': 0.0,
'totInvValue': 2625.0
}
self.assertDictEqual(ewaybill._ewaybill_generate_direct_json(), expected_json)
@freeze_time('2024-04-26')
def test_ewaybill_stock_test_2(self):
"""
Ewaybill challan type other test with description
"""
delivery_picking = self._create_stock_picking()
ewaybill = self.env['l10n.in.ewaybill'].create({
'picking_id': delivery_picking.id,
'transporter_id': self.partner_a.id,
'mode': False,
'type_id': self.env.ref('l10n_in_ewaybill_stock.type_delivery_challan_sub_others').id,
'type_description': "Other reasons"
})
expected_json = {
'supplyType': 'O',
'subSupplyType': '8',
'subSupplyDesc': 'Other reasons',
'docType': 'CHL',
'transactionType': 1,
'transDistance': '0',
'docNo': 'compa/OUT/00002',
'docDate': '26/04/2024',
'fromGstin': '24AAGCC7144L6ZE',
'toGstin': '27DJMPM8965E1ZE',
'fromTrdName': 'Default Company',
'toTrdName': 'Partner Intra State',
'fromStateCode': 24,
'toStateCode': 27,
'fromAddr1': 'Khodiyar Chowk',
'toAddr1': 'Karansinhji Rd',
'fromAddr2': 'Sala Number 3',
'toAddr2': 'Karanpara',
'fromPlace': 'Amreli',
'toPlace': 'Rajkot',
'fromPincode': 365220,
'toPincode': 431122,
'actToStateCode': 27,
'actFromStateCode': 24,
'transporterId': '27DJMPM8965E1ZE',
'transporterName': 'Partner Intra State',
'itemList': [
{
'productName': 'product_a',
'hsnCode': '111111',
'productDesc': 'product_a',
'quantity': 5.0,
'qtyUnit': 'UNT',
'taxableAmount': 2500.0,
'igstRate': 5.0
}
],
'totalValue': 2500.0,
'cgstValue': 0.0,
'sgstValue': 0.0,
'igstValue': 125.0,
'cessValue': 0.0,
'cessNonAdvolValue': 0.0,
'otherValue': 0.0,
'totInvValue': 2625.0
}
self.assertDictEqual(ewaybill._ewaybill_generate_direct_json(), expected_json)
@freeze_time('2024-04-26')
def test_ewaybill_stock_test_3(self):
"""
Ewaybill Zero distance test
"""
delivery_picking = self._create_stock_picking()
ewaybill = self.env['l10n.in.ewaybill'].create({
'type_id': self.env.ref('l10n_in_ewaybill_stock.type_delivery_challan_sub_others').id,
'type_description': "Other reasons",
'picking_id': delivery_picking.id,
'transporter_id': self.partner_a.id,
'mode': '2',
'distance': 0,
'transportation_doc_no': 123456789,
'transportation_doc_date': '2024-04-26'
})
expected_distance = 118
response = {
'status_cd': '1',
'status_desc': 'EWAYBILL request succeeds',
'data': {
'ewayBillNo': 123456789012,
'ewayBillDate': '26/02/2024 12:09:43 PM',
'validUpto': '27/02/2024 12:09:43 PM',
"alert": ", Distance between these two pincodes is 118, "
}
}
ewaybill._l10n_in_ewaybill_stock_handle_zero_distance_alert_if_present(response)
self.assertEqual(ewaybill.distance, expected_distance)