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

178 lines
6.7 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.exceptions import UserError
from odoo.tests import tagged
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
@tagged('post_install', '-at_install')
class TestFleetVehicleLogServices(AccountTestInvoicingCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.vendor = cls.env['res.partner'].create({'name': "Vendor"})
cls.purchaser = cls.env['res.partner'].create({'name': "Purchaser"})
brand = cls.env["fleet.vehicle.model.brand"].create({
"name": "Audi",
})
model = cls.env["fleet.vehicle.model"].create({
"brand_id": brand.id,
"name": "A3",
})
cls.car_1, cls.car_2 = cls.env["fleet.vehicle"].create([
{
"model_id": model.id,
"driver_id": cls.purchaser.id,
"plan_to_change_car": False
},
{
"model_id": model.id,
"driver_id": cls.purchaser.id,
"plan_to_change_car": False
}
])
cls.bill = cls.env['account.move'].create({
'move_type': 'in_invoice',
'partner_id': cls.vendor.id,
'invoice_date': '2019-01-01',
'date': '2019-01-01',
})
cls.service_line = cls.env['account.move.line'].create({
'name': 'line',
'price_unit': 50.0,
'vehicle_id': cls.car_1.id,
'move_id': cls.bill.id,
})
cls.fleet_service_type = cls.env['fleet.service.type'].create({
'name': 'Test service type',
'category': 'service',
})
def test_service_bill_right_amount(self):
self.bill.action_post()
# check if the log service is created
self.assertEqual(self.car_1.log_services[0].account_move_line_id.move_id, self.bill)
self.assertEqual(self.car_1.log_services[0].amount, self.service_line.price_subtotal)
self.bill.button_draft()
self.service_line.price_unit = 110
self.bill.action_post()
# check if the log service's amount is equal to the new price
self.assertEqual(self.car_1.log_services[0].amount, self.service_line.price_unit)
def test_service_bill_deletion(self):
service_line_2 = self.env['account.move.line'].create({
'name': 'line',
'price_unit': 150.0,
'vehicle_id': self.car_2.id,
'move_id': self.bill.id,
})
self.bill.action_post()
# check if the log service is created
self.assertEqual(self.car_1.log_services[0].account_move_line_id.move_id, self.bill)
self.assertEqual(self.car_1.log_services[0].amount, self.service_line.price_subtotal)
self.assertEqual(self.car_2.log_services[0].account_move_line_id.move_id, self.bill)
self.assertEqual(self.car_2.log_services[0].amount, service_line_2.price_subtotal)
self.bill.button_draft()
self.service_line.unlink()
self.assertFalse(self.car_1.log_services)
self.assertEqual(self.car_2.log_services[0].account_move_line_id.move_id, self.bill)
self.assertEqual(self.car_2.log_services[0].amount, service_line_2.price_subtotal)
def test_service_log_deletion(self):
self.bill.action_post()
# check if the log service is created
self.assertEqual(self.car_1.log_services[0].account_move_line_id.move_id, self.bill)
self.assertEqual(self.car_1.log_services[0].amount, self.service_line.price_subtotal)
# a log services linked to a bill cannot be deleted
with self.assertRaises(UserError):
self.car_1.log_services[0].unlink()
log_service_without_bill = self.env['fleet.vehicle.log.services'].create({
'vehicle_id': self.car_1.id,
'service_type_id': self.fleet_service_type.id,
'amount': 1440,
})
log_service_without_bill.unlink()
def test_service_bill_change_vehicle(self):
self.bill.action_post()
# check if the log service is created
self.assertEqual(self.car_1.log_services[0].account_move_line_id.move_id, self.bill)
self.assertEqual(self.car_1.log_services[0].amount, self.service_line.price_subtotal)
self.bill.button_draft()
self.service_line.vehicle_id = self.car_2
self.bill.action_post()
self.assertFalse(self.car_1.log_services)
self.assertEqual(self.car_2.log_services[0].account_move_line_id.move_id, self.bill)
self.assertEqual(self.car_2.log_services[0].amount, self.service_line.price_subtotal)
# remove the vehicle should also delete the service
self.bill.button_draft()
self.service_line.vehicle_id = False
self.bill.action_post()
self.assertFalse(self.car_2.log_services)
self.assertFalse(self.service_line.vehicle_log_service_ids)
# putting car 2 back should create a new service
self.bill.button_draft()
self.service_line.vehicle_id = self.car_2
self.bill.action_post()
self.assertEqual(self.car_2.log_services[0].account_move_line_id.move_id, self.bill)
self.assertEqual(self.car_2.log_services[0].amount, self.service_line.price_subtotal)
def test_fleet_log_services_amount(self):
other_currency = self.setup_other_currency('EUR')
brand = self.env["fleet.vehicle.model.brand"].create({
"name": "Audi",
})
model = self.env["fleet.vehicle.model"].create({
"brand_id": brand.id,
"name": "A3",
})
car = self.env["fleet.vehicle"].create({
"model_id": model.id,
"plan_to_change_car": False
})
partner = self.env['res.partner'].create({
"name": "Test Partner",
})
move = self.env['account.move'].create({
'move_type': 'in_invoice',
'partner_id': partner.id,
'invoice_date': '2019-01-01',
'date': '2019-01-01',
'currency_id': other_currency.id,
'line_ids': [
(0, 0, {
'account_id': self.company_data['default_account_expense'].id,
'vehicle_id': car.id,
'quantity': 1,
'price_unit': 5000
})
],
})
move.action_post()
line = move.line_ids[0]
fleet_service = self.env['fleet.vehicle.log.services'].search([('vendor_id', '=', partner.id),
('description', '=', False)])
self.assertNotEqual(line.debit, line.price_subtotal)
self.assertEqual(fleet_service.amount, line.debit)