diff --git a/employee_late_check_in/README.rst b/employee_late_check_in/README.rst new file mode 100644 index 000000000..9a3a056ad --- /dev/null +++ b/employee_late_check_in/README.rst @@ -0,0 +1,18 @@ +Employee Late Check-in Penalty v13 +================================== +Employee Late Check-in + +Installation +============ + - www.odoo.com/documentation/13.0/setup/install.html + - Install our custom addon + +Configuration +============= + + No additional configurations needed + +Credits +======= + Developer: Ijaz Ahammed v13 @ cybrosys, Contact: odoo@cybrosys.com + diff --git a/employee_late_check_in/__init__.py b/employee_late_check_in/__init__.py new file mode 100644 index 000000000..107f73b07 --- /dev/null +++ b/employee_late_check_in/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +################################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies (). +# Author: Ijaz Ahammed (odoo@cybrosys.com) +# +# 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/employee_late_check_in/__manifest__.py b/employee_late_check_in/__manifest__.py new file mode 100644 index 000000000..a53bc99e3 --- /dev/null +++ b/employee_late_check_in/__manifest__.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +################################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies (). +# Author: Ijaz Ahammed (odoo@cybrosys.com) +# +# 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': 'Employee Late Check-in', + 'version': '13.0.1.0.0', + 'summary': """This module Allows Employee Late check-in deduction/penalty""", + 'description': """This module Allows Employee Late check-in deduction/penalty""", + 'author': "Cybrosys Techno Solutions", + 'company': 'Cybrosys Techno Solutions', + 'website': 'https://www.cybrosys.com', + 'maintainer': 'Cybrosys Techno Solutions', + 'category': 'Human Resources', + 'depends': ['hr_attendance', 'hr_payroll_community', 'hr_contract'], + 'data': [ + 'views/res_config_settings.xml', + 'views/hr_attendance_view.xml', + 'views/late_check_in_view.xml', + 'views/hr_employee.xml', + 'security/ir.model.access.csv', + 'data/cron.xml', + 'data/salary_rule.xml', + ], + 'images': ['static/description/banner.png'], + 'license': 'AGPL-3', + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/employee_late_check_in/data/cron.xml b/employee_late_check_in/data/cron.xml new file mode 100644 index 000000000..adac90421 --- /dev/null +++ b/employee_late_check_in/data/cron.xml @@ -0,0 +1,16 @@ + + + + + Attendance: Late Check-in + + code + model.late_check_in_records() + + 1 + days + -1 + + + + \ No newline at end of file diff --git a/employee_late_check_in/data/salary_rule.xml b/employee_late_check_in/data/salary_rule.xml new file mode 100644 index 000000000..ea31847f8 --- /dev/null +++ b/employee_late_check_in/data/salary_rule.xml @@ -0,0 +1,29 @@ + + + + Late Check-in + + LC + + code + code + +amount = 0 +try: + if inputs.LC: + amount = inputs.LC.amount +except: + amount = 0 +result = -amount + + + + + LCS + Base Salary Structure For Late Check-in + + + + + \ No newline at end of file diff --git a/employee_late_check_in/doc/RELEASE_NOTES.md b/employee_late_check_in/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..53ec7483d --- /dev/null +++ b/employee_late_check_in/doc/RELEASE_NOTES.md @@ -0,0 +1,8 @@ +## Module + +#### 02.05.2020 +#### Version 13.0.1.0.0 +#### ADD + +Initial Commit for employee_late_check_in + diff --git a/employee_late_check_in/models/__init__.py b/employee_late_check_in/models/__init__.py new file mode 100644 index 000000000..f76df1bae --- /dev/null +++ b/employee_late_check_in/models/__init__.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +################################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies (). +# Author: Ijaz Ahammed (odoo@cybrosys.com) +# +# 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 res_config_settings +from . import hr_attendance +from . import late_check_in +from . import hr_payslip +from . import hr_employee diff --git a/employee_late_check_in/models/hr_attendance.py b/employee_late_check_in/models/hr_attendance.py new file mode 100644 index 000000000..1e0767669 --- /dev/null +++ b/employee_late_check_in/models/hr_attendance.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- +################################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies (). +# Author: Ijaz Ahammed (odoo@cybrosys.com) +# +# 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, date +from pytz import timezone, UTC +import pytz +from odoo import models, fields, api + + +class HrAttendance(models.Model): + _inherit = 'hr.attendance' + + late_check_in = fields.Integer(string="Late Check-in(Minutes)", compute="get_late_minutes") + + def get_late_minutes(self): + for rec in self: + + rec.late_check_in = 0.0 + week_day = rec.sudo().check_in.weekday() + if rec.employee_id.contract_id: + work_schedule = rec.sudo().employee_id.contract_id.resource_calendar_id + for schedule in work_schedule.sudo().attendance_ids: + if schedule.dayofweek == str(week_day) and schedule.day_period == 'morning': + work_from = schedule.hour_from + result = '{0:02.0f}:{1:02.0f}'.format(*divmod(work_from * 60, 60)) + + user_tz = self.env.user.tz + dt = rec.check_in + + if user_tz in pytz.all_timezones: + old_tz = pytz.timezone('UTC') + new_tz = pytz.timezone(user_tz) + dt = old_tz.localize(dt).astimezone(new_tz) + str_time = dt.strftime("%H:%M") + check_in_date = datetime.strptime(str_time, "%H:%M").time() + start_date = datetime.strptime(result, "%H:%M").time() + t1 = timedelta(hours=check_in_date.hour, minutes=check_in_date.minute) + t2 = timedelta(hours=start_date.hour, minutes=start_date.minute) + if check_in_date > start_date: + final = t1 - t2 + rec.sudo().late_check_in = final.total_seconds() / 60 + + def late_check_in_records(self): + existing_records = self.env['late.check_in'].sudo().search([]).attendance_id.ids + minutes_after = int(self.env['ir.config_parameter'].sudo().get_param('late_check_in_after')) or 0 + max_limit = int(self.env['ir.config_parameter'].sudo().get_param('maximum_minutes')) or 0 + late_check_in_ids = self.sudo().search([('id', 'not in', existing_records)]) + for rec in late_check_in_ids: + late_check_in = rec.sudo().late_check_in + 210 + if rec.late_check_in > minutes_after and late_check_in > minutes_after and late_check_in < max_limit: + self.env['late.check_in'].sudo().create({ + 'employee_id': rec.employee_id.id, + 'late_minutes': late_check_in, + 'date': rec.check_in.date(), + 'attendance_id': rec.id, + }) diff --git a/employee_late_check_in/models/hr_employee.py b/employee_late_check_in/models/hr_employee.py new file mode 100644 index 000000000..72b1d9f3b --- /dev/null +++ b/employee_late_check_in/models/hr_employee.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +################################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies (). +# Author: Ijaz Ahammed (odoo@cybrosys.com) +# +# 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 HrEmployee(models.Model): + _inherit = 'hr.employee' + + late_check_in_count = fields.Integer(string="Late Check-In", compute="get_late_check_in_count") + + def action_to_open_late_check_in_records(self): + domain = [ + ('employee_id', '=', self.id), + ] + return { + 'name': _('Employee Late Check-in'), + 'domain': domain, + 'res_model': 'late.check_in', + 'type': 'ir.actions.act_window', + 'view_mode': 'tree,form', + 'limit': 80, + } + + def get_late_check_in_count(self): + self.late_check_in_count = self.env['late.check_in'].search_count([('employee_id', '=', self.id)]) + + +class HrEmployees(models.Model): + _inherit = 'hr.employee.public' + + late_check_in_count = fields.Integer(string="Late Check-In", compute="get_late_check_in_count") + + def action_to_open_late_check_in_records(self): + domain = [ + ('employee_id', '=', self.id), + ] + return { + 'name': _('Employee Late Check-in'), + 'domain': domain, + 'res_model': 'late.check_in', + 'type': 'ir.actions.act_window', + 'view_mode': 'tree,form', + 'limit': 80, + } + + def get_late_check_in_count(self): + self.late_check_in_count = self.env['late.check_in'].search_count([('employee_id', '=', self.id)]) diff --git a/employee_late_check_in/models/hr_payslip.py b/employee_late_check_in/models/hr_payslip.py new file mode 100644 index 000000000..27a8cc2fc --- /dev/null +++ b/employee_late_check_in/models/hr_payslip.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +################################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies (). +# Author: Ijaz Ahammed (odoo@cybrosys.com) +# +# 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, api, fields + + +class PayslipLateCheckIn(models.Model): + _inherit = 'hr.payslip' + + late_check_in_ids = fields.Many2many('late.check_in') + + @api.model + def get_inputs(self, contracts, date_from, date_to): + """ + function used for writing late check-in record in payslip + input tree. + + """ + res = super(PayslipLateCheckIn, self).get_inputs(contracts, date_to, date_from) + late_check_in_type = self.env.ref('employee_late_check_in.late_check_in') + contract = self.contract_id + late_check_in_id = self.env['late.check_in'].search([('employee_id', '=', self.employee_id.id), + ('date', '<=', self.date_to), + ('date', '>=', self.date_from), + ('state', '=', 'approved'), + ]) + amount = late_check_in_id.mapped('amount') + cash_amount = sum(amount) + if late_check_in_id: + self.late_check_in_ids = late_check_in_id + input_data = { + 'name': late_check_in_type.name, + 'code': late_check_in_type.code, + 'amount': cash_amount, + 'contract_id': contract.id, + } + res.append(input_data) + return res + + def action_payslip_done(self): + """ + function used for marking deducted Late check-in + request. + + """ + for recd in self.late_check_in_ids: + recd.state = 'deducted' + return super(PayslipLateCheckIn, self).action_payslip_done() diff --git a/employee_late_check_in/models/late_check_in.py b/employee_late_check_in/models/late_check_in.py new file mode 100644 index 000000000..34771d89c --- /dev/null +++ b/employee_late_check_in/models/late_check_in.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +################################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies (). +# Author: Ijaz Ahammed (odoo@cybrosys.com) +# +# 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, api + + +class LateCheckIn(models.Model): + _name = 'late.check_in' + + name = fields.Char() + employee_id = fields.Many2one('hr.employee', string="Employee") + late_minutes = fields.Integer(string="Late Minutes") + date = fields.Date(string="Date") + amount = fields.Float(string="Amount", compute="get_penalty_amount") + state = fields.Selection([('draft', 'Draft'), + ('approved', 'Approved'), + ('refused', 'Refused'), + ('deducted', 'Deducted')], string="state", + default="draft") + attendance_id = fields.Many2one('hr.attendance', string='attendance') + + # current_user_boolean = fields.Boolean() + @api.model + def create(self, values): + seq = self.env['ir.sequence'].next_by_code('late.check_in') or '/' + values['name'] = seq + return super(LateCheckIn, self.sudo()).create(values) + + def get_penalty_amount(self): + for rec in self: + amount = float(self.env['ir.config_parameter'].sudo().get_param('deduction_amount')) + rec.amount = amount + if self.env['ir.config_parameter'].sudo().get_param('deduction_type') == 'minutes': + rec.amount = amount * rec.late_minutes + + def approve(self): + self.state = 'approved' + + def reject(self): + self.state = 'refused' diff --git a/employee_late_check_in/models/res_config_settings.py b/employee_late_check_in/models/res_config_settings.py new file mode 100644 index 000000000..461af39f3 --- /dev/null +++ b/employee_late_check_in/models/res_config_settings.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +################################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies (). +# Author: Ijaz Ahammed (odoo@cybrosys.com) +# +# 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 LateCheckinSettings(models.TransientModel): + _inherit = 'res.config.settings' + + deduction_amount = fields.Float(string="Deduction Amount", + config_parameter='employee_late_check_in.deduction_amount') + maximum_minutes = fields.Char(string="Maximum Late Minute", + config_parameter='employee_late_check_in.maximum_minutes') + late_check_in_after = fields.Char(string="Late Check-in Starts After", + config_parameter='employee_late_check_in.late_check_in_after') + unpaid_leave = fields.Boolean(string="Unpaid Leave", + config_parameter='employee_late_check_in.unpaid_leave') + deduction_type = fields.Selection([('minutes', 'Per Minutes'), ('total', 'Per Total')], + config_parameter='employee_late_check_in.deduction_type', default="minutes") + + def set_values(self): + res = super(LateCheckinSettings, self).set_values() + self.env['ir.config_parameter'].sudo().set_param('deduction_amount', self.deduction_amount) + self.env['ir.config_parameter'].sudo().set_param('maximum_minutes', self.maximum_minutes) + self.env['ir.config_parameter'].sudo().set_param('late_check_in_after', self.late_check_in_after) + self.env['ir.config_parameter'].sudo().set_param('unpaid_leave', self.unpaid_leave) + self.env['ir.config_parameter'].sudo().set_param('deduction_type', self.deduction_type) + return res diff --git a/employee_late_check_in/security/ir.model.access.csv b/employee_late_check_in/security/ir.model.access.csv new file mode 100644 index 000000000..9f0811965 --- /dev/null +++ b/employee_late_check_in/security/ir.model.access.csv @@ -0,0 +1,4 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_late_checkin_manager,access.late_check_in.manager,model_late_check_in,hr.group_hr_manager,1,1,0,1 +access_late_checkin_officer,access.late_check_in.officer,model_late_check_in,hr.group_hr_user,1,1,0,0 +access_late_checkin_user,access.late_check_in.user,model_late_check_in,base.group_user,1,0,0,0 \ No newline at end of file diff --git a/employee_late_check_in/static/description/banner.png b/employee_late_check_in/static/description/banner.png new file mode 100644 index 000000000..dadc81701 Binary files /dev/null and b/employee_late_check_in/static/description/banner.png differ diff --git a/employee_late_check_in/static/description/icon.png b/employee_late_check_in/static/description/icon.png new file mode 100644 index 000000000..939028e2f Binary files /dev/null and b/employee_late_check_in/static/description/icon.png differ diff --git a/employee_late_check_in/static/description/images/booking_order.png b/employee_late_check_in/static/description/images/booking_order.png new file mode 100644 index 000000000..4d3da60bb Binary files /dev/null and b/employee_late_check_in/static/description/images/booking_order.png differ diff --git a/employee_late_check_in/static/description/images/chart_view.png b/employee_late_check_in/static/description/images/chart_view.png new file mode 100644 index 000000000..5a6807eac Binary files /dev/null and b/employee_late_check_in/static/description/images/chart_view.png differ diff --git a/employee_late_check_in/static/description/images/checked.png b/employee_late_check_in/static/description/images/checked.png new file mode 100644 index 000000000..578cedb80 Binary files /dev/null and b/employee_late_check_in/static/description/images/checked.png differ diff --git a/employee_late_check_in/static/description/images/cybrosys.png b/employee_late_check_in/static/description/images/cybrosys.png new file mode 100644 index 000000000..d76b5bafb Binary files /dev/null and b/employee_late_check_in/static/description/images/cybrosys.png differ diff --git a/employee_late_check_in/static/description/images/dashboard.png b/employee_late_check_in/static/description/images/dashboard.png new file mode 100644 index 000000000..a3250c6e0 Binary files /dev/null and b/employee_late_check_in/static/description/images/dashboard.png differ diff --git a/employee_late_check_in/static/description/images/late_check_in_screen_shot1.png b/employee_late_check_in/static/description/images/late_check_in_screen_shot1.png new file mode 100644 index 000000000..2260f6585 Binary files /dev/null and b/employee_late_check_in/static/description/images/late_check_in_screen_shot1.png differ diff --git a/employee_late_check_in/static/description/images/late_check_in_screen_shot2.png b/employee_late_check_in/static/description/images/late_check_in_screen_shot2.png new file mode 100644 index 000000000..83039f85a Binary files /dev/null and b/employee_late_check_in/static/description/images/late_check_in_screen_shot2.png differ diff --git a/employee_late_check_in/static/description/images/late_check_in_screen_shot3.png b/employee_late_check_in/static/description/images/late_check_in_screen_shot3.png new file mode 100644 index 000000000..6c1633161 Binary files /dev/null and b/employee_late_check_in/static/description/images/late_check_in_screen_shot3.png differ diff --git a/employee_late_check_in/static/description/images/late_check_in_screen_shot4.png b/employee_late_check_in/static/description/images/late_check_in_screen_shot4.png new file mode 100644 index 000000000..f90181758 Binary files /dev/null and b/employee_late_check_in/static/description/images/late_check_in_screen_shot4.png differ diff --git a/employee_late_check_in/static/description/images/late_check_in_screen_shot5.png b/employee_late_check_in/static/description/images/late_check_in_screen_shot5.png new file mode 100644 index 000000000..66ab3fada Binary files /dev/null and b/employee_late_check_in/static/description/images/late_check_in_screen_shot5.png differ diff --git a/employee_late_check_in/static/description/images/late_check_in_screen_shot6.png b/employee_late_check_in/static/description/images/late_check_in_screen_shot6.png new file mode 100644 index 000000000..7818b97a6 Binary files /dev/null and b/employee_late_check_in/static/description/images/late_check_in_screen_shot6.png differ diff --git a/employee_late_check_in/static/description/images/late_check_in_screen_shot7.png b/employee_late_check_in/static/description/images/late_check_in_screen_shot7.png new file mode 100644 index 000000000..4ccd74d62 Binary files /dev/null and b/employee_late_check_in/static/description/images/late_check_in_screen_shot7.png differ diff --git a/employee_late_check_in/static/description/images/late_checkin_main_image.png b/employee_late_check_in/static/description/images/late_checkin_main_image.png new file mode 100644 index 000000000..612b2f963 Binary files /dev/null and b/employee_late_check_in/static/description/images/late_checkin_main_image.png differ diff --git a/employee_late_check_in/static/description/images/product_creation.png b/employee_late_check_in/static/description/images/product_creation.png new file mode 100644 index 000000000..9f62d36ce Binary files /dev/null and b/employee_late_check_in/static/description/images/product_creation.png differ diff --git a/employee_late_check_in/static/description/images/tile_view.png b/employee_late_check_in/static/description/images/tile_view.png new file mode 100644 index 000000000..919a5b8c8 Binary files /dev/null and b/employee_late_check_in/static/description/images/tile_view.png differ diff --git a/employee_late_check_in/static/description/images/tree_view.png b/employee_late_check_in/static/description/images/tree_view.png new file mode 100644 index 000000000..ebfaddf92 Binary files /dev/null and b/employee_late_check_in/static/description/images/tree_view.png differ diff --git a/employee_late_check_in/static/description/index.html b/employee_late_check_in/static/description/index.html new file mode 100644 index 000000000..ed16179bd --- /dev/null +++ b/employee_late_check_in/static/description/index.html @@ -0,0 +1,568 @@ +
+ cybrosys-logo
+
+
+
+

Employee Late Check-in Penalty

+

+ Employee Late Check-in deduction from payroll +

+
+

Key Highlights

+
    +
  • + check + Late Check-in Minutes in attendance log +
  • +
  • + checkDeduction based on configuration +
  • +
  • + checkManager Approval +
  • +
  • + checkLate check-in deduction from payslip +
  • +
+
+
+
+
+
+
+
+ +
+
+ +

Overview

+
+

+ This module Allows Employee Late check-in deduction/penalty +

+
+
+ +

POS Dashboard

+
+
    +
  • + checkLate Check-in minutes in Attendance log +
  • +
  • + checkDeduction based on configuration +
  • +
  • + checkManager Approval +
  • +
  • + checkLate check-in deduction from payslip +
  • + +
+
+ +
+
+

Screenshots

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

Suggested Products

+
+ +
+
+

Our Service

+
+ +
+
+
+

Our Industries

+
+ +
+
+
+
+ Odoo Industry
+
+
+

+ + Trading

+

+ Easily procure and sell your products.

+
+
+
+
+
+ Odoo Industry +
+
+
+

+ + Manufacturing

+

+ Plan, track and schedule your operations.

+
+
+
+
+
+ + Odoo Industry
+
+
+

+ + Restaurant

+

+ Run your bar or restaurant methodical.

+
+
+
+
+
+ Odoo Industry
+
+
+

+ + POS

+

+ Easy configuring and convivial selling.

+
+
+
+
+
+ Odoo Industry
+
+
+

+ + E-commerce & Website

+

+ Mobile friendly, awe-inspiring product pages.

+
+
+
+
+
+ + Odoo Industry
+
+
+

+ + Hotel Management

+

+ An all-inclusive hotel management application.

+
+
+
+
+
+ + Odoo Industry
+
+
+

+ + Education

+

+ A Collaborative platform for educational management.

+
+
+
+
+
+ Odoo Industry
+
+
+

+ + Service Management

+

+ Keep track of services and invoice accordingly.

+
+
+
+
+
+ +
+
+
+

Need Any Help?

+
+

If you have anything to share with us based on your use of this module, please + let us know. We are ready to offer our support.

+
+

Email us

+

odoo@cybrosys.com / info@cybrosys.com

+
+
+

Contact Us

+ www.cybrosys.com +
+
+
+
+
+
+
+
+
+ +
+ + + + + + + +
+
+
+ \ No newline at end of file diff --git a/employee_late_check_in/views/hr_attendance_view.xml b/employee_late_check_in/views/hr_attendance_view.xml new file mode 100644 index 000000000..5888a7894 --- /dev/null +++ b/employee_late_check_in/views/hr_attendance_view.xml @@ -0,0 +1,14 @@ + + + + + inherited_hr.attendance.tree + hr.attendance + + + + + + + + \ No newline at end of file diff --git a/employee_late_check_in/views/hr_employee.xml b/employee_late_check_in/views/hr_employee.xml new file mode 100644 index 000000000..57530e9db --- /dev/null +++ b/employee_late_check_in/views/hr_employee.xml @@ -0,0 +1,36 @@ + + + + view.employee.form + hr.employee.public + + +
+ +
+
+
+ + + + view.employee.form + hr.employee + + +
+ +
+
+
+
+
\ No newline at end of file diff --git a/employee_late_check_in/views/late_check_in_view.xml b/employee_late_check_in/views/late_check_in_view.xml new file mode 100644 index 000000000..dd481a04b --- /dev/null +++ b/employee_late_check_in/views/late_check_in_view.xml @@ -0,0 +1,117 @@ + + + + + late.check_in.sequence + late.check_in + LC + + + 5 + + + + + + + late.check_in.form + late.check_in + +
+
+ +
+ +
+

+ +

+
+ + + + + + + + + + + +
+
+
+
+ + + late.check_in.search.view + late.check_in + + + + + + + + + + + + late.check_in.tree + late.check_in + + + + + + + + + + + + + + + Late Check-in + late.check_in + tree,form + { + 'search_default_group_employee': 1, + } + + + + + + + + + late_check_in.Inherited.View + hr.payslip + + + + + + + + + +
+
diff --git a/employee_late_check_in/views/res_config_settings.xml b/employee_late_check_in/views/res_config_settings.xml new file mode 100644 index 000000000..6a5c7ce0c --- /dev/null +++ b/employee_late_check_in/views/res_config_settings.xml @@ -0,0 +1,75 @@ + + + + + Late Check-in Configurations + res.config.settings + + + + +

Late Check-in

+
+
+
+
+
+
+
+
+
+
+ + + +
+
+
+ + + + + + + + + + + + + + +
+
\ No newline at end of file