[IMP] hr_holidays: add hr_holidays tour

Adds a tour for showing the main process of requesting a time-off.

task-2760450

closes odoo/odoo#87108

Signed-off-by: Kevin Baptiste <kba@odoo.com>
This commit is contained in:
Leonardo Pavan Rocha
2022-05-18 13:08:05 +02:00
parent 2825af7623
commit 39260d2896
4 changed files with 152 additions and 0 deletions
+1
View File
@@ -73,6 +73,7 @@ A synchronization with an internal agenda (Meetings of the CRM module) is also p
'hr_holidays/static/src/dashboard/**/*.scss',
'hr_holidays/static/src/leave_stats/**/*.js',
'hr_holidays/static/src/scss/*.scss',
'hr_holidays/static/src/tours/*.js',
],
'web.tests_assets': [
'hr_holidays/static/tests/helpers/**/*',
@@ -0,0 +1,107 @@
/** @odoo-module **/
import tour from 'web_tour.tour';
import { _t } from 'web.core';
import session from 'web.session';
const leaveType = "NotLimitedHR";
const leaveDateFrom = "01/17/2022";
const leaveDateTo = "01/17/2022";
const description = 'Days off';
tour.register('hr_holidays_tour', {
url: '/web',
rainbowManMessage: _t("Congrats, we can see that your request has been validated."),
test: false
}, [
tour.stepUtils.showAppsMenuItem(),
{
trigger: '.o_app[data-menu-xmlid="hr_holidays.menu_hr_holidays_root"]',
content: _t("Let's discover the Time Off application"),
position: 'bottom',
},
{
trigger: 'button.btn-time-off',
content: _t("Click on any date or on this button to request a time-off"),
position: 'bottom',
},
{
trigger: '.o_field_widget[name="holiday_status_id"]',
content: _t("Let's try to create a Sick Time Off, select it in the list"),
position: 'right',
run: function(actions) {
actions.text(leaveType, this.$anchor.find('input'));
}
},
{
trigger: ".ui-menu-item > a",
auto: true,
in_modal: false
},
{
trigger: 'input[name="request_date_from"]',
content: _t("You can select the period you need to take off, from start date to end date"),
position: 'right',
run: function(actions) {
this.$anchor.val(leaveDateFrom);
this.$anchor.trigger("change");
}
},
{
trigger: 'input[name="request_date_to"]',
content: _t("You can select the period you need to take off, from start date to end date"),
position: 'right',
run: function(actions) {
this.$anchor.val(leaveDateTo);
this.$anchor.trigger("change");
},
auto: true
},
{
trigger: 'textarea[name="name"]',
content: _t("Add some description for the people that will validate it"),
run: `text ${description}`,
position: 'right'
},
{
trigger: `button:contains(${_t('Save')})`,
content: _t("Submit your request"),
position: 'bottom',
},
{
trigger: 'button[data-menu-xmlid="hr_holidays.menu_hr_holidays_approvals"]',
content: _t("Let's go validate it"),
position: 'bottom'
},
{
trigger: 'a[data-menu-xmlid="hr_holidays.menu_open_department_leave_approve"]',
content: _t("Select Time Off"),
position: 'right'
},
{
trigger: 'table.o_list_table',
content: _t("Select the request you just created"),
position: 'bottom',
run: function(actions) {
const rows = this.$anchor.find('tr.o_data_row');
const createdRow = rows.filter((i, row) => {
const el = $(row);
return el.find(`div[name="all_employee_ids"]:contains("${session.name}")`).length &&
el.find(`td[name="name"]:contains("${description}")`).length &&
el.find(`td[name="holiday_status_id"]:contains("${leaveType}")`).length &&
el.find(`td[name="date_from"]:contains("${leaveDateFrom}")`).length &&
el.find(`td[name="date_to"]:contains("${leaveDateTo}")`).length;
});
actions.click(createdRow);
}
},
{
trigger: 'button[name="action_approve"]',
content: _t("Let's approve it"),
position: 'bottom'
},
{
trigger: 'a[data-menu-xmlid="hr_holidays.menu_hr_holidays_root"]',
content: _t("State is now confirmed. We can go back to the calendar"),
position: 'bottom'
}
]);
+1
View File
@@ -6,6 +6,7 @@ from . import test_automatic_leave_dates
from . import test_allocation_access_rights
from . import test_holidays_flow
from . import test_hr_holidays_cancel_leave
from . import test_hr_holidays_tour
from . import test_hr_leave_type
from . import test_accrual_allocations
from . import test_change_department
@@ -0,0 +1,43 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.tests import HttpCase
from odoo.tests.common import tagged
from datetime import date
@tagged('post_install', '-at_install')
class TestHrHolidaysTour(HttpCase):
def test_hr_holidays_tour(self):
admin_user = self.env.ref('base.user_admin')
admin_employee = admin_user.employee_id
HRLeave = self.env['hr.leave']
date_from = date(2022, 1, 17)
date_to = date(2022, 1, 18)
leaves_on_freeze_date = HRLeave.search([
('date_from', '>=', date_from),
('date_to', "<=", date_to),
('employee_id', '=', admin_employee.id)
])
leaves_on_freeze_date.sudo().unlink()
LeaveType = self.env['hr.leave.type'].with_user(admin_user)
holidays_type_1 = LeaveType.create({
'name': 'NotLimitedHR',
'requires_allocation': 'no',
'leave_validation_type': 'hr',
})
# add allocation
allocation = self.env['hr.leave.allocation'].create({
'name': 'Expired Allocation',
'employee_id': admin_employee.id,
'holiday_status_id': holidays_type_1.id,
'number_of_days': 1,
'state': 'confirm',
'date_from': '2022-01-01',
'date_to': '2022-12-31',
})
allocation.action_validate()
self.start_tour('/web', 'hr_holidays_tour', login="admin")