diff --git a/hr_employee_shift/README.rst b/hr_employee_shift/README.rst new file mode 100644 index 000000000..af76a519c --- /dev/null +++ b/hr_employee_shift/README.rst @@ -0,0 +1,43 @@ +OHRMS Employee Shift v10 +======================== + +Easily create, manage, and track employee shift schedules + +Depends +======= +[hr] addon Odoo + +Tech +==== +* [Python] - Models +* [XML] - Odoo views + +Installation +============ +- www.odoo.com/documentation/10.0/setup/install.html +- Install our custom addon + +License +======= +GNU AFFERO GENERAL PUBLIC LICENSE, Version 3 (LGPLv3) +(http://www.gnu.org/licenses/agpl.html) + +Bug Tracker +=========== +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Credits +======= +* Cybrosys Techno Solutions + +Author +------ + +Developer: Saritha Sahadevan, saritha@cybrosys.in + +Maintainer +---------- + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit https://www.cybrosys.com. diff --git a/hr_employee_shift/RELEASE_NOTES.md b/hr_employee_shift/RELEASE_NOTES.md new file mode 100644 index 000000000..932b379ec --- /dev/null +++ b/hr_employee_shift/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module hr_employee_shift + +#### 30.03.2018 +#### Version 10.0.1.0.0 +##### ADD +- Initial commit for OpenHrms Project diff --git a/hr_employee_shift/__init__.py b/hr_employee_shift/__init__.py new file mode 100644 index 000000000..7cacd9c23 --- /dev/null +++ b/hr_employee_shift/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +################################################################################### +# A part of OpenHrms Project +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2018-TODAY Cybrosys Technologies (). +# Author: Saritha Sahadevan () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### +from . import models diff --git a/hr_employee_shift/__manifest__.py b/hr_employee_shift/__manifest__.py new file mode 100644 index 000000000..8f871f24c --- /dev/null +++ b/hr_employee_shift/__manifest__.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +################################################################################### +# A part of OpenHrms Project +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2018-TODAY Cybrosys Technologies (). +# Author: Saritha Sahadevan () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### +{ + 'name': "OHRMS Employee Shift", + 'version': '10.0.1.0', + 'summary': """Easily create, manage, and track employee shift schedules.""", + 'description': """Easily create, manage, and track employee shift schedules.""", + 'category': 'Human Resource', + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.openhrms.com", + 'depends': ['hr', 'hr_payroll'], + 'data': [ + 'security/ir.model.access.csv', + 'security/hr_employee_shift_security.xml', + 'views/hr_employee_shift_view.xml', + 'views/hr_employee_contract_view.xml', + 'views/hr_generate_shift_view.xml', + 'views/templates.xml', + ], + 'images': ["static/description/banner.jpg"], + 'license': "AGPL-3", + 'installable': True, + 'application': True, +} diff --git a/hr_employee_shift/models/__init__.py b/hr_employee_shift/models/__init__.py new file mode 100644 index 000000000..e00ab4743 --- /dev/null +++ b/hr_employee_shift/models/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +################################################################################### +# A part of OpenHrms Project +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2018-TODAY Cybrosys Technologies (). +# Author: Saritha Sahadevan () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### +from . import hr_employee_shift, hr_employee_contract, hr_generate_shift, hr_shift_payroll diff --git a/hr_employee_shift/models/hr_employee_contract.py b/hr_employee_shift/models/hr_employee_contract.py new file mode 100644 index 000000000..532d3f2d7 --- /dev/null +++ b/hr_employee_shift/models/hr_employee_contract.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +################################################################################### +# A part of OpenHrms Project +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2018-TODAY Cybrosys Technologies (). +# Author: Saritha Sahadevan () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### +from odoo.exceptions import Warning +from odoo import models, fields, api, _ + + +class HrEmployeeContract(models.Model): + _inherit = 'hr.contract' + + shift_schedule = fields.One2many('hr.shift.schedule', 'rel_hr_schedule', string="Shift Schedule") + working_hours = fields.Many2one('resource.calendar', string='Working Schedule') + department_id = fields.Many2one('hr.department', string="Department", required=True) + + +class HrSchedule(models.Model): + _name = 'hr.shift.schedule' + + start_date = fields.Date(string="Date From", required=True) + end_date = fields.Date(string="Date To", required=True) + rel_hr_schedule = fields.Many2one('hr.contract') + hr_shift = fields.Many2one('resource.calendar', string="Shift", required=True) + + @api.onchange('start_date', 'end_date') + def get_department(self): + """Adding domain to the hr_shift field""" + hr_department = None + if self.start_date: + hr_department = self.rel_hr_schedule.department_id.id + return { + 'domain': { + 'hr_shift': [('hr_department', '=', hr_department)] + } + } + + @api.multi + def write(self, vals): + self._check_overlap(vals) + return super(HrSchedule, self).write(vals) + + @api.model + def create(self, vals): + self._check_overlap(vals) + return super(HrSchedule, self).create(vals) + + def _check_overlap(self, vals): + if vals.get('start_date', False) and vals.get('end_date', False): + shifts = self.env['hr.shift.schedule'].search([('rel_hr_schedule', '=', vals.get('rel_hr_schedule'))]) + for each in shifts: + if each != shifts[-1]: + if each.end_date >= vals.get('start_date') or each.start_date >= vals.get('start_date'): + raise Warning(_('The dates may not overlap with one another.')) + if vals.get('start_date') > vals.get('end_date'): + raise Warning(_('Start date should be less than end date.')) + return True + diff --git a/hr_employee_shift/models/hr_employee_shift.py b/hr_employee_shift/models/hr_employee_shift.py new file mode 100644 index 000000000..7fd6a3e1d --- /dev/null +++ b/hr_employee_shift/models/hr_employee_shift.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +################################################################################### +# A part of OpenHrms Project +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2018-TODAY Cybrosys Technologies (). +# Author: Saritha Sahadevan () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### +from odoo.exceptions import ValidationError +from odoo import models, fields, api + + +class HrEmployeeShift(models.Model): + _inherit = 'resource.calendar' + + color = fields.Integer(string='Color Index') + hr_department = fields.Many2one('hr.department', string="Department", required=True) + sequence = fields.Integer(string="Sequence", required=True, default=1) + + @api.constrains('sequence') + def validate_seq(self): + record = self.env['resource.calendar'].search([('hr_department', '=', self.hr_department.id), + ('sequence', '=', self.sequence) + ]) + if len(record) > 1: + raise ValidationError("One record with same sequence is already active." + "You can't activate more than one record at a time") diff --git a/hr_employee_shift/models/hr_generate_shift.py b/hr_employee_shift/models/hr_generate_shift.py new file mode 100644 index 000000000..db60362c6 --- /dev/null +++ b/hr_employee_shift/models/hr_generate_shift.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +################################################################################### +# A part of OpenHrms Project +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2018-TODAY Cybrosys Technologies (). +# Author: Saritha Sahadevan () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### +from odoo import models, fields + + +class HrGenerateShift(models.Model): + _name = 'hr.shift.generate' + + hr_department = fields.Many2one('hr.department', string="Department") + start_date = fields.Date(string="Start Date", required=True) + end_date = fields.Date(string="End Date", required=True) + + def action_schedule_shift(self): + """Create mass schedule for all departments based on the shift scheduled in corresponding employee's contract""" + + if self.hr_department: + for contract in self.env['hr.contract'].search([('department_id', '=', self.hr_department.id)]): + if contract.shift_schedule: + for shift_val in contract.shift_schedule: + shift = shift_val.hr_shift + start_date = self.start_date + end_date = self.end_date + shift_obj = self.env['resource.calendar'].search([('hr_department', '=', self.hr_department.id), + ('name', '=', shift.name)], limit=1) + sequence = shift_obj.sequence + seq_no = sequence + 1 + new_shift = self.env['resource.calendar'].search([ + ('sequence', '=', seq_no), ('hr_department', '=', self.hr_department.id)], limit=1) + if new_shift: + shift_ids = [(0, 0, { + 'hr_shift': new_shift.id, + 'start_date': start_date, + 'end_date': end_date + })] + contract.shift_schedule = shift_ids + else: + seq_no = 1 + new_shift = self.env['resource.calendar'].search([ + ('sequence', '=', seq_no), ('hr_department', '=', self.hr_department.id)], limit=1) + if new_shift: + shift_ids = [(0, 0, { + 'hr_shift': new_shift.id, + 'start_date': start_date, + 'end_date': end_date + })] + contract.shift_schedule = shift_ids + else: + for contract in self.env['hr.contract'].search([]): + if contract.shift_schedule and contract.department_id: + for shift_val in contract.shift_schedule: + shift = shift_val.hr_shift + start_date = self.start_date + end_date = self.end_date + shift_obj = self.env['resource.calendar'].search([('hr_department', '=', contract.department_id.id), + ('name', '=', shift.name)], limit=1) + sequence = shift_obj.sequence + seq_no = sequence + 1 + new_shift = self.env['resource.calendar'].search([ + ('sequence', '=', seq_no), ('hr_department', '=', contract.department_id.id)], limit=1) + if new_shift: + shift_ids = [(0, 0, { + 'hr_shift': new_shift.id, + 'start_date': start_date, + 'end_date': end_date + })] + contract.shift_schedule = shift_ids + else: + seq_no = 1 + new_shift = self.env['resource.calendar'].search([ + ('sequence', '=', seq_no), ('hr_department', '=', contract.department_id.id)], limit=1) + shift_ids = [(0, 0, { + 'hr_shift': new_shift.id, + 'start_date': start_date, + 'end_date': end_date + })] + contract.shift_schedule = shift_ids + + + + + diff --git a/hr_employee_shift/models/hr_shift_payroll.py b/hr_employee_shift/models/hr_shift_payroll.py new file mode 100644 index 000000000..2c25766df --- /dev/null +++ b/hr_employee_shift/models/hr_shift_payroll.py @@ -0,0 +1,109 @@ +# -*- coding: utf-8 -*- +################################################################################### +# A part of OpenHrms Project +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2018-TODAY Cybrosys Technologies (). +# Author: Saritha Sahadevan () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### +from datetime import datetime, timedelta +from odoo import models, fields, api, _, tools + + +class HrPayroll(models.Model): + _inherit = 'hr.payslip' + + @api.model + def get_worked_day_lines(self, contract_ids, date_from, date_to): + """ + @param contract_ids: list of contract id + @return: returns a list of dict containing the input that should be applied for the given contract between date_from and date_to + """ + + def was_on_leave_interval(employee_id, date_from, date_to): + date_from = fields.Datetime.to_string(date_from) + date_to = fields.Datetime.to_string(date_to) + return self.env['hr.holidays'].search([ + ('state', '=', 'validate'), + ('employee_id', '=', employee_id), + ('type', '=', 'remove'), + ('date_from', '<=', date_from), + ('date_to', '>=', date_to) + ], limit=1) + + res = [] + # fill only if the contract as a working schedule linked + uom_day = self.env.ref('product.product_uom_day', raise_if_not_found=False) + for contract in self.env['hr.contract'].browse(contract_ids).filtered(lambda contract: contract): + uom_hour = contract.employee_id.resource_id.calendar_id.uom_id or self.env.ref('product.product_uom_hour', + raise_if_not_found=False) + interval_data = [] + holidays = self.env['hr.holidays'] + attendances = { + 'name': _("Normal Working Days paid at 100%"), + 'sequence': 1, + 'code': 'WORK100', + 'number_of_days': 0.0, + 'number_of_hours': 0.0, + 'contract_id': contract.id, + } + leaves = {} + + # Gather all intervals and holidays + for days in contract.shift_schedule: + start_date = datetime.strptime(days.start_date, tools.DEFAULT_SERVER_DATE_FORMAT) + end_date = datetime.strptime(days.end_date, tools.DEFAULT_SERVER_DATE_FORMAT) + + nb_of_days = (end_date - start_date).days + 1 + for day in range(0, nb_of_days): + + working_intervals_on_day = days.hr_shift.get_working_intervals_of_day( + start_dt=start_date + timedelta(days=day)) + for interval in working_intervals_on_day: + interval_data.append( + (interval, was_on_leave_interval(contract.employee_id.id, interval[0], interval[1]))) + + # Extract information from previous data. A working interval is considered: + # - as a leave if a hr.holiday completely covers the period + # - as a working period instead + for interval, holiday in interval_data: + holidays |= holiday + hours = (interval[1] - interval[0]).total_seconds() / 3600.0 + if holiday: + # if he was on leave, fill the leaves dict + if holiday.holiday_status_id.name in leaves: + leaves[holiday.holiday_status_id.name]['number_of_hours'] += hours + else: + leaves[holiday.holiday_status_id.name] = { + 'name': holiday.holiday_status_id.name, + 'sequence': 5, + 'code': holiday.holiday_status_id.name, + 'number_of_days': 0.0, + 'number_of_hours': hours, + 'contract_id': contract.id, + } + else: + # add the input vals to tmp (increment if existing) + attendances['number_of_hours'] += hours + # Clean-up the results + leaves = [value for key, value in leaves.items()] + for data in [attendances] + leaves: + data['number_of_days'] = uom_hour._compute_quantity(data['number_of_hours'], uom_day) \ + if uom_day and uom_hour \ + else data['number_of_hours'] / 8.0 + res.append(data) + return res \ No newline at end of file diff --git a/hr_employee_shift/security/hr_employee_shift_security.xml b/hr_employee_shift/security/hr_employee_shift_security.xml new file mode 100644 index 000000000..2b9a20882 --- /dev/null +++ b/hr_employee_shift/security/hr_employee_shift_security.xml @@ -0,0 +1,16 @@ + + + + Hr Shift Multi Company + + + ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + + + + Hr Shift Genarate Multi Company + + + ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + + \ No newline at end of file diff --git a/hr_employee_shift/security/ir.model.access.csv b/hr_employee_shift/security/ir.model.access.csv new file mode 100644 index 000000000..a51d85c3b --- /dev/null +++ b/hr_employee_shift/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_hr_employee_shift_hr_employee_shift,hr_employee_shift.hr_shift_schedule,model_hr_shift_schedule,hr.group_hr_manager,1,1,1,1 +access_hr_employee_shift_hr_employee_shift1,hr_employee_shift.hr_shift_generate,model_hr_shift_generate,hr.group_hr_manager,1,1,1,1 \ No newline at end of file diff --git a/hr_employee_shift/static/description/HRMS-BUTTON.png b/hr_employee_shift/static/description/HRMS-BUTTON.png new file mode 100644 index 000000000..0f1b65bea Binary files /dev/null and b/hr_employee_shift/static/description/HRMS-BUTTON.png differ diff --git a/hr_employee_shift/static/description/banner.jpg b/hr_employee_shift/static/description/banner.jpg new file mode 100644 index 000000000..9d6978271 Binary files /dev/null and b/hr_employee_shift/static/description/banner.jpg differ diff --git a/hr_employee_shift/static/description/contract1.png b/hr_employee_shift/static/description/contract1.png new file mode 100644 index 000000000..9f29c6cae Binary files /dev/null and b/hr_employee_shift/static/description/contract1.png differ diff --git a/hr_employee_shift/static/description/create_shift.png b/hr_employee_shift/static/description/create_shift.png new file mode 100644 index 000000000..e0635a7f8 Binary files /dev/null and b/hr_employee_shift/static/description/create_shift.png differ diff --git a/hr_employee_shift/static/description/cybro-service.png b/hr_employee_shift/static/description/cybro-service.png new file mode 100644 index 000000000..252929a86 Binary files /dev/null and b/hr_employee_shift/static/description/cybro-service.png differ diff --git a/hr_employee_shift/static/description/cybro_logo.png b/hr_employee_shift/static/description/cybro_logo.png new file mode 100644 index 000000000..bb309114c Binary files /dev/null and b/hr_employee_shift/static/description/cybro_logo.png differ diff --git a/hr_employee_shift/static/description/generate_schedule.png b/hr_employee_shift/static/description/generate_schedule.png new file mode 100644 index 000000000..bb4135bd9 Binary files /dev/null and b/hr_employee_shift/static/description/generate_schedule.png differ diff --git a/hr_employee_shift/static/description/icon.png b/hr_employee_shift/static/description/icon.png new file mode 100644 index 000000000..674251dd4 Binary files /dev/null and b/hr_employee_shift/static/description/icon.png differ diff --git a/hr_employee_shift/static/description/index.html b/hr_employee_shift/static/description/index.html new file mode 100644 index 000000000..57724e483 --- /dev/null +++ b/hr_employee_shift/static/description/index.html @@ -0,0 +1,129 @@ +
+
+
+

OpenHRMS

+

Most advanced open source HR management software

+
+
+
+ +
+
+
+
+ + + +
+
+
+
+ +
+
+
+

Employee Shift Management

+

Easily create, manage, and track employee shift schedules.

+

Cybrosys Technologies

+
+
+

Major Features:

+
    +
  •    Define list of Work Shifts
  • +
  •    Define flexible hour wise shift
  • +
  •    Assign shift in employee contract
  • +
  •    Assign new shift automatically
  • +
+
+
+
+ +
+
+
+

Overview

+

+ Employee Shift Management is a component of Open HRMS suit. + This module allows the user to create and manage employee work shifts. + Administrator can create various shifts according to the working hours and assign the Shift in + employee work contract. The module also helps to automatically assign new shift according to + the shift sequence +

+
+
+
+ +
+
+
+

Create Employee Shift

+
+ +
+
+
+
+ +
+
+

Employee Shift In Contract

+
+
+ +
+
+
+

Have an option to schedule shift in employee contract form. + It is very important to create atleast one shift schedule manually in contract form

+
+
+
+ + +
+
+

Generate Automatic Shifts

+

+

Automatically assign new shift according to the shift sequence

+

+
+
+ +
+
+
+

Employee Shifts

+
+ +
+
+
+
+ +
+
+

Our Odoo Services

+
+
+
+ + +
+

Need Any Help?

+ +
+ diff --git a/hr_employee_shift/static/description/shift.png b/hr_employee_shift/static/description/shift.png new file mode 100644 index 000000000..8500a0c99 Binary files /dev/null and b/hr_employee_shift/static/description/shift.png differ diff --git a/hr_employee_shift/static/src/css/shift_dashboard.css b/hr_employee_shift/static/src/css/shift_dashboard.css new file mode 100644 index 000000000..f99fe0e91 --- /dev/null +++ b/hr_employee_shift/static/src/css/shift_dashboard.css @@ -0,0 +1,7 @@ + +.style_shift{ + color: black !important; + font-size: 15px; + text-align: center; + padding: 10px 0px 2px 3px; +} diff --git a/hr_employee_shift/static/src/less/shift_dashboard.less b/hr_employee_shift/static/src/less/shift_dashboard.less new file mode 100644 index 000000000..60f8a66a4 --- /dev/null +++ b/hr_employee_shift/static/src/less/shift_dashboard.less @@ -0,0 +1,18 @@ +@dashboard-bg-color: white; + +.o_kanban_view.o_kanban_dashboard.o_shift_kanban { + @sale-table-spacing: 20px; + + .o_kanban_record { + min-height: 150px; + max-width: 250px !important; + @media (min-width: @screen-sm-min) { + min-width: 20px; + + } + } + .oe_kanban_content{ + padding-top: 50px!important; + } + +} \ No newline at end of file diff --git a/hr_employee_shift/views/hr_employee_contract_view.xml b/hr_employee_shift/views/hr_employee_contract_view.xml new file mode 100644 index 000000000..bf9ddbec0 --- /dev/null +++ b/hr_employee_shift/views/hr_employee_contract_view.xml @@ -0,0 +1,29 @@ + + + + + employee.contract + hr.contract + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/hr_employee_shift/views/hr_employee_shift_view.xml b/hr_employee_shift/views/hr_employee_shift_view.xml new file mode 100644 index 000000000..aaecc2768 --- /dev/null +++ b/hr_employee_shift/views/hr_employee_shift_view.xml @@ -0,0 +1,76 @@ + + + + + resource.calendar + resource.calendar + + + + + + + + + + + + employee.shift.kanban + resource.calendar + + + + + +
+ +
+
+
+
+
+ +
+
+
+ +
+ [] +
+
+
+
+
+
+
+
+
+ + + Shift Working Time + resource.calendar + form + kanban,tree,form + + + +

+ Define working hours and time table that could be scheduled to your project members +

+
+
+ + + +
+
\ No newline at end of file diff --git a/hr_employee_shift/views/hr_generate_shift_view.xml b/hr_employee_shift/views/hr_generate_shift_view.xml new file mode 100644 index 000000000..63d411109 --- /dev/null +++ b/hr_employee_shift/views/hr_generate_shift_view.xml @@ -0,0 +1,50 @@ + + + + + + + hr_employee_shift_generate_schedule form + hr.shift.generate + +
+ + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + + + Employee Shift + hr.shift.generate + form + new + + + + + + +
+
\ No newline at end of file diff --git a/hr_employee_shift/views/templates.xml b/hr_employee_shift/views/templates.xml new file mode 100644 index 000000000..6768c74e2 --- /dev/null +++ b/hr_employee_shift/views/templates.xml @@ -0,0 +1,9 @@ + + + +