132 lines
6.0 KiB
Python
132 lines
6.0 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
import base64
|
|
import io
|
|
|
|
from PIL import Image
|
|
from datetime import datetime
|
|
|
|
from odoo.tests import TransactionCase
|
|
|
|
|
|
class TestActionButtons(TransactionCase):
|
|
""" Test visibility of the following buttons:
|
|
- Send/Sign Report
|
|
"""
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
if 'sale_line_id' in cls.env['project.task']._fields:
|
|
cls.skipTest(cls, '`industry_fsm_sale` module must not be installed to run the tests')
|
|
cls.customer = cls.env['res.partner'].create({'name': 'My Customer'})
|
|
cls.env.company.timesheet_encode_uom_id = cls.env.ref('uom.product_uom_hour')
|
|
cls.project = cls.env['project.project'].create({
|
|
'name': 'My Project',
|
|
'partner_id': cls.customer.id,
|
|
'allow_timesheets': True,
|
|
'allow_worksheets': True,
|
|
'is_fsm': True,
|
|
'company_id': cls.env.company.id,
|
|
})
|
|
cls.task = cls.env['project.task'].create({
|
|
'name': 'My Task',
|
|
'project_id': cls.project.id,
|
|
'partner_id': cls.customer.id,
|
|
'worksheet_template_id': cls.env.ref('industry_fsm_report.fsm_worksheet_template').id,
|
|
})
|
|
cls.employee = cls.env['hr.employee'].with_company(cls.env.company).create({
|
|
'name': 'Employee Default',
|
|
'user_id': cls.env.uid,
|
|
})
|
|
cls.timesheet = cls.env['account.analytic.line'].create({
|
|
'task_id': cls.task.id,
|
|
'project_id': cls.project.id,
|
|
'date': datetime.now(),
|
|
'name': 'My Timesheet',
|
|
'user_id': cls.env.uid,
|
|
'unit_amount': 1,
|
|
})
|
|
|
|
def test_send_sign_report_buttons_visibility_conditions(self):
|
|
# Sign/Send not visible if Time = 0 AND Worksheet = 0
|
|
# Visible in non primary if Time > 0 OR Worksheet > 0
|
|
# Visible in primary if Time > 0 AND Worksheet > 0
|
|
# Send should be visible in primary if T,W > 0 and report not sent yet
|
|
# Send should be visible in secondary if T || W > 0 or report already sent
|
|
|
|
# Check Enabled Counter
|
|
self.assertEqual(self.task.display_enabled_conditions_count, 2)
|
|
|
|
# Sign/send only visible if 'worksheets' is enabled on the project
|
|
self.project.allow_worksheets = False
|
|
self.assertFalse(self.task.display_sign_report_primary)
|
|
self.assertFalse(self.task.display_sign_report_secondary)
|
|
self.assertFalse(self.task.display_send_report_primary)
|
|
self.assertFalse(self.task.display_send_report_secondary)
|
|
self.assertEqual(self.task.display_enabled_conditions_count, 1)
|
|
|
|
self.project.allow_timesheets = False
|
|
self.timesheet.task_id = False # Unlink the task from the timesheet
|
|
self.assertEqual(self.task.display_enabled_conditions_count, 0)
|
|
self.project.write({
|
|
'allow_worksheets': True,
|
|
'allow_timesheets': True,
|
|
})
|
|
self.assertEqual(self.task.display_enabled_conditions_count, 2)
|
|
|
|
# Not visible
|
|
self.assertFalse(self.task.display_sign_report_primary)
|
|
self.assertFalse(self.task.display_sign_report_secondary)
|
|
self.assertFalse(self.task.display_send_report_primary)
|
|
self.assertFalse(self.task.display_send_report_secondary)
|
|
|
|
# Secondary if time > 0 only
|
|
self.assertEqual(self.task.display_satisfied_conditions_count, 0)
|
|
self.timesheet.task_id = self.task # Link the task to the timesheet
|
|
self.assertEqual(self.task.display_satisfied_conditions_count, 1)
|
|
self.assertFalse(self.task.display_sign_report_primary)
|
|
self.assertTrue(self.task.display_sign_report_secondary)
|
|
self.assertFalse(self.task.display_send_report_primary)
|
|
self.assertTrue(self.task.display_send_report_secondary) # Not signed yet
|
|
self.timesheet.task_id = False # Unlink the task from the timesheet
|
|
|
|
# Secondary if worksheet > 0 only
|
|
self.assertEqual(self.task.display_satisfied_conditions_count, 0)
|
|
worksheet_vals = {
|
|
'x_name': 'This is a name',
|
|
'x_comments': 'This is a comment',
|
|
'x_project_task_id': self.task.id,
|
|
}
|
|
worksheet = self.env[self.task.worksheet_template_id.model_id.model].create(worksheet_vals)
|
|
self.task._compute_worksheet_count()
|
|
self.assertEqual(self.task.display_satisfied_conditions_count, 1)
|
|
self.assertTrue(self.task.worksheet_count)
|
|
self.assertFalse(self.task.display_sign_report_primary)
|
|
self.assertTrue(self.task.display_sign_report_secondary)
|
|
self.assertFalse(self.task.display_send_report_primary)
|
|
self.assertTrue(self.task.display_send_report_secondary) # Not signed yet
|
|
worksheet.unlink()
|
|
|
|
# Primary of all conditions met
|
|
self.timesheet.task_id = self.task # Link the task to the timesheet
|
|
worksheet = self.env[self.task.worksheet_template_id.model_id.model].create(worksheet_vals)
|
|
self.task._compute_worksheet_count()
|
|
self.assertEqual(self.task.display_satisfied_conditions_count, 2)
|
|
self.assertTrue(self.task.display_sign_report_primary)
|
|
self.assertFalse(self.task.display_sign_report_secondary)
|
|
self.assertTrue(self.task.display_send_report_primary) # Report is not signed yet
|
|
self.assertFalse(self.task.display_send_report_secondary) # Report is not signed yet
|
|
|
|
# Send visible in primary if report is signed and not sent yet
|
|
f = io.BytesIO()
|
|
Image.new('RGB', (50, 50)).save(f, 'PNG')
|
|
f.seek(0)
|
|
image = base64.b64encode(f.read())
|
|
self.task.worksheet_signature = image
|
|
self.assertTrue(self.task.display_send_report_primary) # Report is signed, not sent yet
|
|
self.assertFalse(self.task.display_send_report_secondary)
|
|
self.task.fsm_is_sent = True
|
|
self.assertFalse(self.task.display_send_report_primary)
|
|
self.assertFalse(self.task.display_send_report_secondary) # Report is sent then do not display button
|