mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
100 lines
4.3 KiB
Python
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)
|