Files
suite/timesheet_exception/tests/test_timesheet_exception.py

100 lines
4.3 KiB
Python

# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from odoo import fields
from odoo.tests import common, Form
class TestTimesheetException(common.TransactionCase):
def setUp(self):
super().setUp()
self.env = self.env(context=dict(self.env.context, tracking_disable=True))
def test_timesheet_create_exception(self):
exception = self.env.ref('timesheet_exception.except_unit_amount_over_eight_hours')
exception.active = True
project = self.env['project.project'].with_context(tracking_disable=True).create({
'name': 'Project for selling timesheets',
})
today = fields.Date.today()
service_category_id = self.env['product.category'].create({
'name': 'Services',
'parent_id': self.env.ref('product.product_category_1').id,
}).id
uom_hour_id = self.env.ref('uom.product_uom_hour').id
product = self.env['product.product'].create({
'name': 'Service Product (Prepaid Hours)',
'categ_id': service_category_id,
'type': 'service',
'list_price': 250.00,
'standard_price': 190.00,
'invoice_policy': 'delivery',
'uom_id': uom_hour_id,
'uom_po_id': uom_hour_id,
'default_code': 'SERV-DELI1',
'taxes_id': False,
})
product.product_tmpl_id.service_policy = 'ordered_timesheet'
partner = self.env['res.partner'].create({
'name': 'Test Partner',
'company_id': False,
})
so = self.env['sale.order'].with_context(mail_notrack=True, mail_create_nolog=True).create({
'partner_id': partner.id,
'project_id': project.id,
})
so_line = self.env['sale.order.line'].create([{
'order_id': so.id,
'name': product.name,
'product_id': product.id,
'product_uom_qty': 10,
'qty_delivered': 2,
'price_unit': product.list_price,
'project_id': project.id,
}])
timesheet = self.env['account.analytic.line'].with_user(self.env.user).create({
'name': "my timesheet 1",
'project_id': project.id,
'date': today,
'unit_amount': 9.0,
})
# Created exceptions on create.
self.assertTrue(timesheet.exception_ids)
# Will return action on write, which may or not be followed.
action = timesheet.write({
'name': 'Test Timesheet - Test Written',
})
self.assertTrue(timesheet.exception_ids)
self.assertTrue(action)
self.assertEqual(action.get('res_model'), 'timesheet.exception.confirm')
# Simulation the opening of the wizard timesheet_exception_confirm and
# set ignore_exception to True
timesheet_exception_confirm = Form(self.env[action['res_model']].with_context(action['context'])).save()
timesheet_exception_confirm.ignore = True
timesheet_exception_confirm.action_confirm()
self.assertTrue(timesheet.ignore_exception)
# No exceptions should be on create with a lower than 8 in unit_amount
# Also no exceptions because timesheet.so_line.product_template_id.service_policy == 'ordered_timesheet' and timesheet.so_line.qty_delivered + timesheet.unit_amount < timesheet.so_line.product_uom_qty
timesheet = self.env['account.analytic.line'].with_user(self.env.user).create({
'name': "my timesheet 1",
'project_id': project.id,
'date': today,
'unit_amount': 7.0,
})
self.assertFalse(timesheet.exception_ids)
# timesheet.unit_amount = 17.0
timesheet = self.env['account.analytic.line'].with_user(self.env.user).create({
'name': "my timesheet 1",
'project_id': project.id,
'date': today,
'unit_amount': 17.0,
})
# Exceptions because timesheet.so_line.product_template_id.service_policy == 'ordered_timesheet' and timesheet.so_line.qty_delivered + timesheet.unit_amount > timesheet.so_line.product_uom_qty
self.assertTrue(timesheet.exception_ids)