| @ -0,0 +1,44 @@ | |||
| .. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg | |||
|     :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html | |||
|     :alt: License: AGPL-3 | |||
| 
 | |||
| Advance HR Attendance Dashboard | |||
| ============================== | |||
| * Attendance module for Odoo 15. | |||
| 
 | |||
| Installation | |||
| ============ | |||
| 	- www.odoo.com/documentation/15.0/setup/install.html | |||
| 	- Install our custom addon | |||
| 
 | |||
| Company | |||
| ------- | |||
| * `Cybrosys Techno Solutions <https://cybrosys.com/>`__ | |||
| 
 | |||
| License | |||
| ------- | |||
| General Public License, Version 3 (AGPL v3). | |||
| (https://www.gnu.org/licenses/agpl-3.0-standalone.html) | |||
| 
 | |||
| Credits | |||
| ------- | |||
| * Developers: (V16) Nihala KP @cybrosys | |||
| 
 | |||
| Contacts | |||
| -------- | |||
| * Mail Contact : odoo@cybrosys.com | |||
| 
 | |||
| Bug Tracker | |||
| ----------- | |||
| Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. | |||
| 
 | |||
| Maintainer | |||
| ========== | |||
| This module is maintained by Cybrosys Technologies. | |||
| 
 | |||
| For support and more information, please visit https://www.cybrosys.com | |||
| 
 | |||
| 
 | |||
| Further information | |||
| =================== | |||
| HTML Description: `<static/description/index.html>`__ | |||
| @ -0,0 +1,23 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Cybrosys Technogies @cybrosys(odoo@cybrosys.com) | |||
| # | |||
| #    You can modify it under the terms of the GNU AFFERO | |||
| #    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | |||
| # | |||
| #    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 (AGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | |||
| #    (AGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| from . import models | |||
| from . import report | |||
| @ -0,0 +1,61 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Cybrosys Technogies @cybrosys(odoo@cybrosys.com) | |||
| # | |||
| #    You can modify it under the terms of the GNU AFFERO | |||
| #    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | |||
| # | |||
| #    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 (AGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | |||
| #    (AGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| { | |||
|     'name': 'Advance HR Attendance Dashboard', | |||
|     'version': '15.0.1.0.0', | |||
|     'category': "Human Resources", | |||
|     'summary': """This module helps you to view leaves of employee based on | |||
|      different leave types.""", | |||
|     'description': """Advance HR Attendance Dashboard helps for  | |||
|      filtering attendance data,  finding specific employees attendance data, | |||
|      and for displaying attendance information, also we can print the | |||
|      attendance in pdf format .""", | |||
|     'author': 'Cybrosys Techno Solutions', | |||
|     'company': 'Cybrosys Techno Solutions', | |||
|     'maintainer': 'Cybrosys Techno Solutions', | |||
|     'website': "https://www.cybrosys.com", | |||
|     'depends': ["hr_holidays", "hr", "hr_attendance"], | |||
|     'data': [ | |||
|         "views/hr_leave_type_views.xml", | |||
|         "views/advance_hr_attendance_dashboard_menus.xml", | |||
|         "views/res_config_settings_views.xml", | |||
|         "report/hr_attendance_reports.xml", | |||
|         "report/hr_attendance_templates.xml", | |||
|     ], | |||
|     "assets": { | |||
|         'web.assets_backend': [ | |||
|             "advance_hr_attendance_dashboard/static/src/js/attendance_dashboard.js", | |||
|             "advance_hr_attendance_dashboard/static/src/scss/attendance_dashboard.scss", | |||
|         ], | |||
|         'web.assets_qweb': [ | |||
|             "advance_hr_attendance_dashboard/static/src/xml/attendance_dashboard_templates.xml", | |||
|         ], | |||
|     }, | |||
|     "external_dependencies": { | |||
|         "python": ["pandas"], | |||
|     }, | |||
|     'images': ['static/description/banner.jpg'], | |||
|     'license': 'AGPL-3', | |||
|     'installable': True, | |||
|     'application': False, | |||
|     'auto_install': False | |||
| } | |||
| @ -0,0 +1,6 @@ | |||
| ## Module <advance_hr_attendance_dashboard> | |||
| 
 | |||
| #### 24.04.2024 | |||
| #### Version 15.0.1.0.0 | |||
| #### ADD | |||
| - Initial commit for Advance HR Attendance Dashboard | |||
| @ -0,0 +1,24 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Cybrosys Technogies @cybrosys(odoo@cybrosys.com) | |||
| # | |||
| #    You can modify it under the terms of the GNU AFFERO | |||
| #    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | |||
| # | |||
| #    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 (AGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | |||
| #    (AGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| from . import hr_employee | |||
| from . import hr_leave_type | |||
| from . import res_config_settings | |||
| @ -0,0 +1,136 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Cybrosys Technogies @cybrosys(odoo@cybrosys.com) | |||
| # | |||
| #    You can modify it under the terms of the GNU AFFERO | |||
| #    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | |||
| # | |||
| #    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 (AGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | |||
| #    (AGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| import pandas | |||
| from datetime import date, timedelta | |||
| from odoo import api, fields, models | |||
| from odoo.http import request | |||
| from odoo.tools import date_utils | |||
| 
 | |||
| 
 | |||
| class HrEmployee(models.Model): | |||
|     """This module extends the 'hr.employee' model of  Odoo Employees Module. | |||
|      It adds a new method called 'get_employee_leave_data', which is used to | |||
|      retrieve data for the dashboard.""" | |||
|     _inherit = 'hr.employee' | |||
|     _check_company_auto = True | |||
| 
 | |||
|     @api.model | |||
|     def get_employee_leave_data(self, option): | |||
|         """Returns data to the dashboard""" | |||
|         employee_data = [] | |||
|         dates = False | |||
|         if option == 'this_week': | |||
|             dates = pandas.date_range( | |||
|                 date_utils.start_of(fields.Date.today(), 'week'), | |||
|                 date_utils.end_of(fields.Date.today(), 'week') - timedelta( | |||
|                     days=0), | |||
|                 freq='d').strftime( | |||
|                 "%Y-%m-%d").tolist() | |||
|         elif option == 'this_month': | |||
|             dates = pandas.date_range( | |||
|                 date_utils.start_of(fields.Date.today(), 'month'), | |||
|                 date_utils.end_of(fields.Date.today(), 'month') - timedelta( | |||
|                     days=0), | |||
|                 freq='d').strftime( | |||
|                 "%Y-%m-%d").tolist() | |||
|         elif option == 'last_15_days': | |||
|             dates = [str(date.today() - timedelta(days=day)) | |||
|                      for day in range(15)] | |||
|         cids = request.httprequest.cookies.get('cids') | |||
|         allowed_company_ids = [int(cid) for cid in cids.split(',')] | |||
|         for employee in self.env['hr.employee'].search( | |||
|                 [('company_id', '=', allowed_company_ids)]): | |||
|             leave_data = [] | |||
|             employee_present_dates = [] | |||
|             employee_leave_dates = [] | |||
|             total_absent_count = 0 | |||
|             query = (""" | |||
|                 SELECT hl.id,employee_id,request_date_from,request_date_to, | |||
|                 hlt.leave_code,hlt.color | |||
|                 FROM hr_leave hl | |||
| 				INNER JOIN hr_leave_type hlt ON hlt.id = hl.holiday_status_id  | |||
|                 WHERE hl.state = 'validate' AND employee_id = '%s'""" | |||
|                      % employee.id) | |||
|             self._cr.execute(query) | |||
|             all_leave_rec = self._cr.dictfetchall() | |||
|             for leave in all_leave_rec: | |||
|                 leave_dates = pandas.date_range( | |||
|                     leave.get('request_date_from'), | |||
|                     leave.get('request_date_to') - timedelta( | |||
|                         days=0), | |||
|                     freq='d').strftime( | |||
|                     "%Y-%m-%d").tolist() | |||
|                 leave_dates.insert(0, leave.get('leave_code')) | |||
|                 leave_dates.insert(1, leave.get('color')) | |||
|                 for leave_date in leave_dates: | |||
|                     if leave_date in dates: | |||
|                         employee_leave_dates.append( | |||
|                             leave_date | |||
|                         ) | |||
|             for employee_check_in in employee.attendance_ids: | |||
|                 employee_present_dates.append( | |||
|                     str(employee_check_in.check_in.date())) | |||
|             for leave_date in dates: | |||
|                 color = "#ffffff" | |||
|                 marks = self.env['ir.config_parameter'].sudo().get_param( | |||
|                     'advance_hr_attendance_' | |||
|                     'dashboard.present') | |||
|                 absent = self.env['ir.config_parameter'].sudo().get_param( | |||
|                     'advance_hr_attendance_' | |||
|                     'dashboard.absent') | |||
|                 state = None | |||
|                 if marks: | |||
|                     if leave_date in employee_present_dates: | |||
|                         state = marks.capitalize() | |||
|                     else: | |||
|                         state = absent.capitalize() | |||
|                 if leave_date in employee_leave_dates: | |||
|                     state = leave_dates[0] | |||
|                     color = "#F06050" if leave_dates[1] == 1 \ | |||
|                         else "#F4A460" if leave_dates[1] == 2 \ | |||
|                         else "#F7CD1F" if leave_dates[1] == 3 \ | |||
|                         else "#6CC1ED" if leave_dates[1] == 4 \ | |||
|                         else "#814968" if leave_dates[1] == 5 \ | |||
|                         else "#EB7E7F" if leave_dates[1] == 6 \ | |||
|                         else "#2C8397" if leave_dates[1] == 7 \ | |||
|                         else "#475577" if leave_dates[1] == 8 \ | |||
|                         else "#D6145F" if leave_dates[1] == 9 \ | |||
|                         else "#30C381" if leave_dates[1] == 10 \ | |||
|                         else "#9365B8" if leave_dates[1] == 11 \ | |||
|                         else "#ffffff" | |||
|                     total_absent_count += 1 | |||
|                 leave_data.append({ | |||
|                     'id': employee.id, | |||
|                     'leave_date': leave_date, | |||
|                     'state': state, | |||
|                     'color': color | |||
|                 }) | |||
|             employee_data.append({ | |||
|                 'id': employee.id, | |||
|                 'name': employee.name, | |||
|                 'leave_data': leave_data[::-1], | |||
|                 'total_absent_count': total_absent_count | |||
|             }) | |||
|         return { | |||
|             'employee_data': employee_data, | |||
|             'filtered_duration_dates': dates[::-1] | |||
|         } | |||
| @ -0,0 +1,52 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Cybrosys Technogies @cybrosys(odoo@cybrosys.com) | |||
| # | |||
| #    You can modify it under the terms of the GNU AFFERO | |||
| #    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | |||
| # | |||
| #    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 (AGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | |||
| #    (AGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| from odoo import fields, models | |||
| 
 | |||
| 
 | |||
| class HrLeaveType(models.Model): | |||
|     """This module inherits from the 'hr.leave.type' model of the Odoo Time Off | |||
|     Module. It adds a new field called 'leave_code', which is a selection field | |||
|     that allows users to choose from a list of predefined leave codes.""" | |||
|     _inherit = 'hr.leave.type' | |||
| 
 | |||
|     leave_code = fields.Selection( | |||
|         [('UL', 'UL'), | |||
|          ('SL', 'SL'), | |||
|          ('RL', 'RL'), | |||
|          ('NL', 'NL'), | |||
|          ('ML', 'ML'), | |||
|          ('FL', 'FL'), | |||
|          ('CL', 'CL'), | |||
|          ('PL', 'PL'), | |||
|          ('OL', 'OL')], | |||
|         required=True, | |||
|         string="Leave Code", | |||
|         default="NL", | |||
|         help="UL = Unpaid Leave\n" | |||
|              " SL = Sick Leave\n" | |||
|              " RL = Regular Leave\n" | |||
|              " NL = Normal Leave\n" | |||
|              " ML = Maternity Leave\n" | |||
|              " FL = Festival Leave\n" | |||
|              " CL = Compensatory Leave\n" | |||
|              " PL = Paid Leave\n" | |||
|              " OL = Other Leave") | |||
| @ -0,0 +1,45 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Cybrosys Technogies @cybrosys(odoo@cybrosys.com) | |||
| # | |||
| #    You can modify it under the terms of the GNU AFFERO | |||
| #    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | |||
| # | |||
| #    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 (AGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | |||
| #    (AGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| from odoo import fields, models | |||
| 
 | |||
| 
 | |||
| class ResConfigSettings(models.TransientModel): | |||
|     """This class extends the `res.config.settings` model to add configuration | |||
|      settings for the HR Attendance Dashboard's default present and absent | |||
|       marks.  """ | |||
|     _inherit = 'res.config.settings' | |||
| 
 | |||
|     present = fields.Selection([('present', 'Present'), | |||
|                                 ('\u2714', '✔'), ('\u2705', '✅ '), ('p', 'P')], | |||
|                                string='Default Present Mark', | |||
|                                config_parameter='advance_hr_attendance_' | |||
|                                                 'dashboard.present', | |||
|                                help='Select the default mark for present ' | |||
|                                     'attendance.') | |||
|     absent = fields.Selection([('absent', 'Absent'), | |||
|                                ('\u2716', '✘'), ('\u274C', '❌'), | |||
|                                ('\u2B55', '⭕'), ('a', 'A') | |||
|                                ], string='Default Absent Mark', | |||
|                               config_parameter='advance_hr_attendance_' | |||
|                                                'dashboard.absent', | |||
|                               help='Select the default mark for absent ' | |||
|                                    'attendance.') | |||
| @ -0,0 +1,22 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Cybrosys Technogies @cybrosys(odoo@cybrosys.com) | |||
| # | |||
| #    You can modify it under the terms of the GNU AFFERO | |||
| #    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | |||
| # | |||
| #    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 (AGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | |||
| #    (AGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| from . import hr_attendance_report | |||
| @ -0,0 +1,38 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Cybrosys Technogies @cybrosys(odoo@cybrosys.com) | |||
| # | |||
| #    You can modify it under the terms of the GNU AFFERO | |||
| #    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | |||
| # | |||
| #    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 (AGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | |||
| #    (AGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| from odoo import api, models | |||
| 
 | |||
| 
 | |||
| class ReportHrAttendance(models.AbstractModel): | |||
|     """This is an abstract model for the Attendance Report of Employees.""" | |||
|     _name = 'report.advance_hr_attendance_dashboard.report_hr_attendance' | |||
|     _description = 'Attendance Report  of Employees' | |||
| 
 | |||
|     @api.model | |||
|     def _get_report_values(self, doc_ids, data=None): | |||
|         """Get the report values for the Attendance Report.""" | |||
|         print(data) | |||
|         return { | |||
|             'doc_model': 'hr.attendance', | |||
|             'data': data, | |||
|             'self': self, | |||
|         } | |||
| @ -0,0 +1,32 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!-- | |||
|    This XML snippet defines an action for generating the Attendance Report in PDF format. | |||
|    It associates the report with the 'hr.employee' model and specifies the QWeb PDF report type. | |||
|    The 'report_name' and 'report_file' fields provide the technical names of the report to be used. | |||
|    --> | |||
|     <record id="paperformat_attendance" model="report.paperformat"> | |||
|     <field name="name">A4 - statement</field> | |||
|     <field name="default" eval="True" /> | |||
|     <field name="format">A4</field> | |||
|     <field name="page_height">0</field> | |||
|     <field name="page_width">0</field> | |||
|     <field name="orientation">Landscape</field> | |||
|     <field name="margin_top">20</field> | |||
|     <field name="margin_bottom">32</field> | |||
|     <field name="margin_left">7</field> | |||
|     <field name="margin_right">7</field> | |||
|     <field name="header_line" eval="False" /> | |||
|     <field name="header_spacing">15</field> | |||
|     <field name="dpi">90</field> | |||
| </record> | |||
|     <record id="action_report_hr_attendance" model="ir.actions.report"> | |||
|         <field name="name">Attendance Report</field> | |||
|         <field name="model">hr.employee</field> | |||
|         <field name="report_type">qweb-pdf</field> | |||
|         <field name="report_name">advance_hr_attendance_dashboard.report_hr_attendance</field> | |||
|         <field name="report_file">advance_hr_attendance_dashboard.report_hr_attendance</field> | |||
|         <field name="paperformat_id" ref="advance_hr_attendance_dashboard.paperformat_attendance"/> | |||
|     </record> | |||
| 
 | |||
| </odoo> | |||
| @ -0,0 +1,21 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!-- | |||
|         This template defines the structure and layout for the Attendance Report. | |||
|         It uses two call tags to include other templates for the external layout and HTML container. | |||
|         The report data is expected to contain 'tHead' and 'tBody' keys for the table's header and body content, respectively. | |||
|         --> | |||
|     <template id="report_hr_attendance"> | |||
|         <t t-call="web.html_container"> | |||
|             <t t-call="web.external_layout"> | |||
|                 <div class="page"> | |||
|                     <h2>Attendance Report</h2> | |||
|                     <table class="table"> | |||
|                         <div t-raw="data['tHead']"/> | |||
|                         <div t-raw="data['tBody']"/> | |||
|                     </table> | |||
|                 </div> | |||
|             </t> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| After Width: | Height: | Size: 3.6 KiB | 
| After Width: | Height: | Size: 310 B | 
| After Width: | Height: | Size: 1.3 KiB | 
| After Width: | Height: | Size: 1.4 KiB | 
| After Width: | Height: | Size: 576 B | 
| After Width: | Height: | Size: 733 B | 
| After Width: | Height: | Size: 911 B | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 673 B | 
| After Width: | Height: | Size: 878 B | 
| After Width: | Height: | Size: 653 B | 
| After Width: | Height: | Size: 905 B | 
| After Width: | Height: | Size: 839 B | 
| After Width: | Height: | Size: 427 B | 
| After Width: | Height: | Size: 627 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 988 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 1.5 KiB | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 1.9 KiB | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 2.1 KiB | 
| After Width: | Height: | Size: 4.4 KiB | 
| After Width: | Height: | Size: 589 B | 
| After Width: | Height: | Size: 3.4 KiB | 
| After Width: | Height: | Size: 1.7 KiB | 
| After Width: | Height: | Size: 2.3 KiB | 
| After Width: | Height: | Size: 967 B | 
| After Width: | Height: | Size: 1.6 KiB | 
| After Width: | Height: | Size: 3.8 KiB | 
| After Width: | Height: | Size: 5.0 KiB | 
| After Width: | Height: | Size: 538 KiB | 
| After Width: | Height: | Size: 59 KiB | 
| After Width: | Height: | Size: 60 KiB | 
| After Width: | Height: | Size: 65 KiB | 
| After Width: | Height: | Size: 105 KiB | 
| After Width: | Height: | Size: 57 KiB | 
| After Width: | Height: | Size: 102 KiB | 
| After Width: | Height: | Size: 87 KiB | 
| After Width: | Height: | Size: 94 KiB | 
| After Width: | Height: | Size: 85 KiB | 
| After Width: | Height: | Size: 53 KiB | 
| After Width: | Height: | Size: 18 KiB | 
| After Width: | Height: | Size: 94 KiB | 
| After Width: | Height: | Size: 96 KiB | 
| After Width: | Height: | Size: 228 KiB | 
| After Width: | Height: | Size: 94 KiB | 
| After Width: | Height: | Size: 7.8 KiB | 
| @ -0,0 +1,662 @@ | |||
| <div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;" | |||
|      xmlns="http://www.w3.org/1999/html"> | |||
|     <!-- TITLE BAR --> | |||
|     <div class="d-flex align-items-center justify-content-between" | |||
|          style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;"> | |||
|         <img src="assets/misc/cybrosys-logo.png" width="42" height="42" | |||
|              style="width: 42px; height: 42px;"/> | |||
|         <div> | |||
|             <div | |||
|                     style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" | |||
|                     class="mr-2"> | |||
|                 <i class="fa fa-check mr-1"></i>Community | |||
|             </div> | |||
|             <div | |||
|                     style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" | |||
|                     class="mr-2"> | |||
|                 <i class="fa fa-check mr-1"></i>Enterprise | |||
|             </div> | |||
|             <div style="color: #017E84; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" | |||
|                  class="mr-2"> | |||
|                 <i class="fa fa-check mr-1"></i>Odoo.sh | |||
|             </div> | |||
|         </div> | |||
|     </div> | |||
|     <!-- END OF TITLE BAR --> | |||
|     <div class="container"> | |||
|         <div class="row"> | |||
|             <div class="col-sm-12 col-md-12 col-lg-12"> | |||
|                 <!-- APP HERO --> | |||
|                 <h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;"> | |||
|                     Advance HR Attendance Dashboard</h1> | |||
|                 <p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;"> | |||
|                     An Advanced Dashboard For Monitoring And Managing The | |||
|                     Employees Attendance Data.</p> | |||
|                 <!-- END OF APP HERO --> | |||
|                 <img src="assets/screenshots/v15-hero.gif" | |||
|                      class="img-responsive" | |||
|                      style="width: 100%; margin-left: auto; margin-right: auto;"/> | |||
|             </div> | |||
|         </div> | |||
|     </div> | |||
| 
 | |||
| 
 | |||
| </div> | |||
| 
 | |||
| <!-- NAVIGATION SECTION --> | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="assets/misc/compass.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Explore This | |||
|         Module</h2> | |||
| </div> | |||
| <div class="row my-4" style="font-family: 'Montserrat', sans-serif;"> | |||
|     <div class="col-sm-12 col-md-6 my-3"> | |||
|         <a href="#overview"> | |||
|             <div class="d-flex justify-content-between align-items-center" | |||
|                  style="background-color: #f5f5f5; padding: 30px; width: 100%;"> | |||
|                 <div> | |||
|                     <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span> | |||
|                     <span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33;  display: block;">Learn | |||
|             more about this | |||
|             module</span> | |||
|                 </div> | |||
|                 <img src="assets/misc/right-arrow.png" width="36" height="36"/> | |||
|             </div> | |||
|         </a> | |||
|     </div> | |||
|     <div class="col-sm-12 col-md-6 my-3"> | |||
|         <a href="#features"> | |||
|             <div class="d-flex justify-content-between align-items-center" | |||
|                  style="background-color: #f5f5f5; padding: 30px; width: 100%;"> | |||
|                 <div> | |||
|                     <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span> | |||
|                     <span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33;  display: block;">View | |||
|             features of this | |||
|             module</span> | |||
|                 </div> | |||
|                 <img src="assets/misc/right-arrow.png" width="36" height="36"/> | |||
|             </div> | |||
|         </a> | |||
|     </div> | |||
|     <div class="col-sm-12 col-md-6 my-3"> | |||
|         <a href="#screenshots"> | |||
|             <div class="d-flex justify-content-between align-items-center" | |||
|                  style="background-color: #f5f5f5; padding: 30px; width: 100%;"> | |||
|                 <div> | |||
|                     <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span> | |||
|                     <span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33;  display: block;">View | |||
|             screenshots for this | |||
|             module</span> | |||
|                 </div> | |||
|                 <img src="assets/misc/right-arrow.png" width="36" height="36"/> | |||
|             </div> | |||
|         </a> | |||
|     </div> | |||
| </div> | |||
| <!-- END OF NAVIGATION SECTION --> | |||
| 
 | |||
| <!-- OVERVIEW SECTION --> | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="assets/misc/pie-chart.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Overview | |||
|     </h2> | |||
| </div> | |||
| <div class="row" | |||
|      style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> | |||
|     <div class="col-sm-12 py-4"> | |||
|         This Module Helps you to View Leaves of Employee Based on Different | |||
|         Leave Types. | |||
|     </div> | |||
| </div> | |||
| <!-- END OF OVERVIEW SECTION --> | |||
| 
 | |||
| <!-- FEATURES SECTION --> | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="assets/misc/features.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Features | |||
|     </h2> | |||
| </div> | |||
| <div class="row" | |||
|      style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> | |||
|     <div class="col-sm-12 col-md-6"> | |||
|         <div class="d-flex align-items-center" | |||
|              style="margin-top: 40px; margin-bottom: 40px"> | |||
|             <img src="assets/misc/check-box.png" class="mr-2"/> | |||
|             <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> View Leaves of Employee Based on Different Leave Types.</span> | |||
|         </div> | |||
|         <div class="d-flex align-items-center" | |||
|              style="margin-top: 30px; margin-bottom: 30px"> | |||
|             <img src="assets/misc/check-box.png" class="mr-2"/> | |||
|             <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|         Print PDF Report.</span> | |||
|         </div> | |||
|         <div class="d-flex align-items-center" | |||
|              style="margin-top: 30px; margin-bottom: 30px"> | |||
|             <img src="assets/misc/check-box.png" class="mr-2"/> | |||
|             <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|         Filter Based on Employee Name. | |||
|       </span> | |||
|         </div> | |||
| 
 | |||
|     </div> | |||
| </div> | |||
| <!-- END OF FEATURES SECTION --> | |||
| 
 | |||
| <!-- SCREENSHOTS SECTION --> | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px;" | |||
|      id="screenshots"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="assets/misc/pictures.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Screenshots | |||
|     </h2> | |||
| </div> | |||
| <div class="row"> | |||
|     <div class="col-sm-12"> | |||
| 
 | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | |||
|                 Set Leave Code in Time Off Types | |||
|             </p> | |||
|             <img src="assets/screenshots/9.png" class="img-thumbnail"> | |||
|         </div> | |||
| 
 | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | |||
|                 Set Default Present Mark For Present And Default Absent Mark For | |||
|                 Absent From Configuration. </p> | |||
|             <img src="assets/screenshots/7.png" class="img-thumbnail"> | |||
|         </div> | |||
| 
 | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | |||
|                 HR Attendance Dashboard filtered by Week.</p> | |||
|             <img src="assets/screenshots/2.png" class="img-thumbnail"> | |||
|         </div> | |||
| 
 | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | |||
|                 HR Attendance Dashboard filtered by 15 days. | |||
|             </p> | |||
|             <img src="assets/screenshots/3.png" class="img-thumbnail"> | |||
|         </div> | |||
| 
 | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | |||
|                 HR Attendance Dashboard filtered by Monthly. | |||
|             </p> | |||
|             <img src="assets/screenshots/4.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | |||
|                 HR Attendance Dashboard filtered by Employee. | |||
|             </p> | |||
|             <img src="assets/screenshots/5.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | |||
|                 PDF reports | |||
|             </p> | |||
|             <img src="assets/screenshots/6.png" class="img-thumbnail"> | |||
|         </div> | |||
|     </div> | |||
| </div> | |||
| <!-- END OF SCREENSHOTS SECTION --> | |||
| 
 | |||
| <!-- RELATED PRODUCTS --> | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="assets/misc/categories.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Related | |||
|         Products | |||
|     </h2> | |||
| </div> | |||
| <div class="row"> | |||
|     <div class="col-sm-12"> | |||
|         <div id="demo1" class="row carousel slide" data-ride="carousel"> | |||
|             <!-- The slideshow --> | |||
|             <div class="carousel-inner" style="padding: 30px;"> | |||
|                 <div class="carousel-item" style="min-height: 198.656px;"> | |||
|                     <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | |||
|                          style="float:left"> | |||
|                         <a href="https://apps.odoo.com/apps/modules/15.0/auto_database_backup/" | |||
|                            target="_blank"> | |||
|                             <div style="border-radius:10px"> | |||
|                                 <img class="img img-responsive center-block" | |||
|                                      style="border-radius: 0px;" | |||
|                                      src="assets/modules/auto_database_backup.gif"> | |||
|                             </div> | |||
|                         </a> | |||
|                     </div> | |||
|                     <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | |||
|                          style="float:left"> | |||
|                         <a href="https://apps.odoo.com/apps/modules/15.0/hide_menu_user/" | |||
|                            target="_blank"> | |||
|                             <div style="border-radius:10px"> | |||
|                                 <img class="img img-responsive center-block" | |||
|                                      style="border-radius: 0px;" | |||
|                                      src="assets/modules/hide_menu_user.png"> | |||
|                             </div> | |||
|                         </a> | |||
|                     </div> | |||
|                     <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | |||
|                          style="float:left"> | |||
|                         <a href="https://apps.odoo.com/apps/modules/15.0/odoo_dynamic_dashboard/" | |||
|                            target="_blank"> | |||
|                             <div style="border-radius:10px"> | |||
|                                 <img class="img img-responsive center-block" | |||
|                                      style="border-radius: 0px;" | |||
|                                      src="assets/modules/odoo_dynamic_dashboard.png"> | |||
|                             </div> | |||
|                         </a> | |||
|                     </div> | |||
|                 </div> | |||
|                 <div class="carousel-item active" | |||
|                      style="min-height: 198.656px;"> | |||
|                     <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | |||
|                          style="float:left"> | |||
|                         <a href="https://apps.odoo.com/apps/modules/15.0/odoo_website_helpdesk/" | |||
|                            target="_blank"> | |||
|                             <div style="border-radius:10px"> | |||
|                                 <img class="img img-responsive center-block" | |||
|                                      style="border-radius: 0px;" | |||
|                                      src="assets/modules/odoo_website_helpdesk.png"> | |||
|                             </div> | |||
|                         </a> | |||
|                     </div> | |||
|                     <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | |||
|                          style="float:left"> | |||
|                         <a href="https://apps.odoo.com/apps/modules/15.0/web_login_styles/" | |||
|                            target="_blank"> | |||
|                             <div style="border-radius:10px"> | |||
|                                 <img class="img img-responsive center-block" | |||
|                                      style="border-radius: 0px;" | |||
|                                      src="assets/modules/web_login_styles.png"> | |||
|                             </div> | |||
|                         </a> | |||
|                     </div> | |||
|                     <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | |||
|                          style="float:left"> | |||
|                         <a href="https://apps.odoo.com/apps/modules/15.0/multi_branch_base/" | |||
|                            target="_blank"> | |||
|                             <div style="border-radius:10px"> | |||
|                                 <img class="img img-responsive center-block" | |||
|                                      style="border-radius: 0px;" | |||
|                                      src="assets/modules/multi_branch_base.png"> | |||
|                             </div> | |||
|                         </a> | |||
|                     </div> | |||
|                 </div> | |||
|             </div> | |||
|             <!-- Left and right controls --> | |||
|             <a class="carousel-control-prev" href="#demo1" data-slide="prev" | |||
|                style="width:35px; color:#000"> <span | |||
|                     class="carousel-control-prev-icon"><i | |||
|                     class="fa fa-chevron-left" | |||
|                     style="font-size:24px"></i></span> | |||
|             </a> <a class="carousel-control-next" href="#demo1" | |||
|                     data-slide="next" style="width:35px; color:#000"> | |||
|             <span class="carousel-control-next-icon"><i | |||
|                     class="fa fa-chevron-right" | |||
|                     style="font-size:24px"></i></span> | |||
|         </a> | |||
|         </div> | |||
|     </div> | |||
| </div> | |||
| <!-- END OF RELATED PRODUCTS --> | |||
| 
 | |||
| <!-- OUR SERVICES --> | |||
| 
 | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="assets/misc/star.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Our Services | |||
|     </h2> | |||
| </div> | |||
| 
 | |||
| <div class="container my-5"> | |||
|     <div class="row"> | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/cogs.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo | |||
|                 Customization</h6> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/wrench.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo | |||
|                 Implementation</h6> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/lifebuoy.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo | |||
|                 Support</h6> | |||
|         </div> | |||
| 
 | |||
| 
 | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/user.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Hire | |||
|                 Odoo | |||
|                 Developer</h6> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #54a0ff  !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/puzzle.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo | |||
|                 Integration</h6> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/update.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo | |||
|                 Migration</h6> | |||
|         </div> | |||
| 
 | |||
| 
 | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/consultation.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo | |||
|                 Consultancy</h6> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/training.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo | |||
|                 Implementation</h6> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/license.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo | |||
|                 Licensing Consultancy</h6> | |||
|         </div> | |||
|     </div> | |||
| 
 | |||
| </div> | |||
| 
 | |||
| <!-- END OF OUR SERVICES --> | |||
| 
 | |||
| <!-- OUR INDUSTRIES --> | |||
| 
 | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="assets/misc/corporate.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Our | |||
|         Industries | |||
|     </h2> | |||
| </div> | |||
| 
 | |||
| <div class="container my-5"> | |||
|     <div class="row"> | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/trading-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Trading | |||
|                 </h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Easily procure | |||
|                     and | |||
|                     sell your products</p> | |||
|             </div> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/pos-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     POS | |||
|                 </h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Easy | |||
|                     configuration | |||
|                     and convivial experience</p> | |||
|             </div> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/education-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Education | |||
|                 </h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     A platform for | |||
|                     educational management</p> | |||
|             </div> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/manufacturing-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Manufacturing | |||
|                 </h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Plan, track and | |||
|                     schedule your operations</p> | |||
|             </div> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/ecom-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     E-commerce & Website | |||
|                 </h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Mobile | |||
|                     friendly, | |||
|                     awe-inspiring product pages</p> | |||
|             </div> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/service-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Service Management | |||
|                 </h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Keep track of | |||
|                     services and invoice</p> | |||
|             </div> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/restaurant-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Restaurant | |||
|                 </h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Run your bar or | |||
|                     restaurant methodically</p> | |||
|             </div> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/hotel-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Hotel Management | |||
|                 </h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     An | |||
|                     all-inclusive | |||
|                     hotel management application</p> | |||
|             </div> | |||
|         </div> | |||
|     </div> | |||
| </div> | |||
| 
 | |||
| <!-- END OF OUR INDUSTRIES --> | |||
| 
 | |||
| <!-- SUPPORT --> | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="assets/misc/customer-support.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Support | |||
|     </h2> | |||
| </div> | |||
| <div class="container mt-5"> | |||
|     <div class="row"> | |||
|         <div class="col-sm-12 col-md-6"> | |||
|             <div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> | |||
|                 <div class="mr-4 d-flex justify-content-center align-items-center" | |||
|                      style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> | |||
|                     <img src="assets/misc/support.png" height="48" width="48" | |||
|                          style="width: 42px; height: 42px;"/> | |||
|                 </div> | |||
|                 <div> | |||
|                     <h4>Need Help?</h4> | |||
|                     <p style="line-height: 100%;">Got questions or need help? | |||
|                         Get in touch.</p> | |||
|                     <a href="mailto:odoo@cybrosys.com"> | |||
|                         <p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;"> | |||
|                             odoo@cybrosys.com</p> | |||
|                     </a> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <div class="col-sm-12 col-md-6"> | |||
|             <div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> | |||
|                 <div class="mr-4 d-flex justify-content-center align-items-center" | |||
|                      style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> | |||
|                     <img src="assets/misc/whatsapp.png" height="52" width="52" | |||
|                          style="width: 52px; height: 52px;"/> | |||
|                 </div> | |||
|                 <div> | |||
|                     <h4>WhatsApp</h4> | |||
|                     <p style="line-height: 100%;">Say hi to us on WhatsApp!</p> | |||
|                     <a href="https://api.whatsapp.com/send?phone=918606827707"> | |||
|                         <p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;"> | |||
|                             +91 86068 | |||
|                             27707</p> | |||
|                     </a> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|     </div> | |||
|     <div class="row"> | |||
|         <div class="col-sm-12 my-5 d-flex justify-content-center align-items-center"> | |||
|             <img src="assets/misc/logo.png" width="144" height="31" | |||
|                  style="width:144px; height: 31px; margin-top: 40px;"/> | |||
|         </div> | |||
|     </div> | |||
| </div> | |||
| <!-- END OF SUPPORT --> | |||
| @ -0,0 +1,65 @@ | |||
| /* @odoo-module */ | |||
| const { Component, useState } = owl; | |||
| const { useRef } = owl.hooks; | |||
| import { registry } from "@web/core/registry"; | |||
| import rpc from "web.rpc"; | |||
| import { useService } from "@web/core/utils/hooks"; | |||
| class AttendanceDashboard extends Component { | |||
|     setup() { | |||
|         this.action = useService('action') | |||
|         this.state = useState({ | |||
|             filteredDurationDates: [], | |||
|             employeeData: [] | |||
|         }) | |||
|         this.root = useRef('attendance-dashboard') | |||
|         // Apply the "This Week" filter by default
 | |||
|         this.onclick_this_filter("this_week") | |||
|     } | |||
|     onChangeFilter(ev) { | |||
|         ev.stopPropagation(); | |||
|         this.onclick_this_filter(ev.target.value); | |||
|     } | |||
|     _OnClickSearchEmployee(ev) { | |||
|         let searchbar = this.root.el.querySelector('#search-bar').value?.toLowerCase() | |||
|         var attendance_table_rows = this.root.el.querySelector('#attendance_table_nm').children[1] | |||
|         for (let tableData of attendance_table_rows.children) { | |||
|             tableData.style.display = (!tableData.children[0].getAttribute("data-name").toLowerCase().includes(searchbar)) ? 'none' : ''; | |||
|         } | |||
|     } | |||
|     _OnClickPdfReport(ev) { | |||
|         const table = this.root.el.querySelector('#attendance_table_nm') | |||
|         let tHead = table.children[0].innerHTML | |||
|         let tBody = table.children[1].innerHTML | |||
|         return this.action.doAction({ | |||
|             type: 'ir.actions.report', | |||
|             report_type: 'qweb-pdf', | |||
|             report_name: 'advance_hr_attendance_dashboard.report_hr_attendance', | |||
|             report_file: 'advance_hr_attendance_dashboard.report_hr_attendance', | |||
|             data: { 'tHead': tHead, 'tBody': tBody } | |||
|         }); | |||
|     } | |||
|     async onclick_this_filter(filter) { | |||
|         await rpc.query({ | |||
|             model: "hr.employee", | |||
|             method: "get_employee_leave_data", | |||
|             args: [filter] | |||
|         }).then((result) => { | |||
|             this.result = result | |||
|             this.state.filteredDurationDates = result.filtered_duration_dates | |||
|             this.state.employeeData = result.employee_data | |||
|         }); | |||
|     } | |||
|     formatDate(inputDate) { | |||
|         const months = [ | |||
|             'JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', | |||
|             'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC' | |||
|         ]; | |||
|         const parts = inputDate.split('-'); | |||
|         const day = parts[2]; | |||
|         const month = months[parseInt(parts[1], 10) - 1]; | |||
|         const year = parts[0]; | |||
|         return `${day}-${month}-${year}`; | |||
|     } | |||
| } | |||
| AttendanceDashboard.template = 'AttendanceDashboard'; | |||
| registry.category("actions").add("attendance_dashboard", AttendanceDashboard); | |||
| @ -0,0 +1,12 @@ | |||
| .attendance_table{ | |||
|     float:left; | |||
|     margin:22px 10px; | |||
| } | |||
| .attendance th , thead  , tr , tbody , tfoot{ | |||
|     padding:1em; | |||
|     border:1px solid #ccc; | |||
| } | |||
| .table-data{ | |||
|     border-left:1px solid; | |||
|     color: grey; | |||
| } | |||
| @ -0,0 +1,96 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <template> | |||
|     <t t-name="AttendanceDashboard" owl="1"> | |||
|         <div class="o_action_manager" style="height: 100%; overflow-y:scroll" | |||
|              t-ref="attendance-dashboard"> | |||
|             <div class="employee_dashboard"> | |||
|                 <div style="padding:10px;"> | |||
|                     <p> | |||
|                         <h1>HR Attendance Dashboard</h1> | |||
|                     </p> | |||
|                 </div> | |||
|                 <div style="float:left; width:25%; padding:0px 10px;"> | |||
|                     <form class="form-group col-6 w-auto"> | |||
|                         <select style="border:1px solid #333;" | |||
|                                 id="filter_duration" | |||
|                                 class="form-control" | |||
|                                 t-on-change="onChangeFilter" | |||
|                                 t-ref="filter_duration"> | |||
|                             <option value=""/> | |||
|                             <option id="this_week" | |||
|                                     value="this_week" | |||
|                                     selected="selected">This Week | |||
|                             </option> | |||
|                             <option id="last_15_days" | |||
|                                     value="last_15_days">Last 15 days | |||
|                             </option> | |||
|                             <option id="this_month" | |||
|                                     value="this_month">This Month | |||
|                             </option> | |||
|                         </select> | |||
|                     </form> | |||
|                 </div> | |||
|                 <div style="padding:0px 5px; float:left;"> | |||
|                     <button type="object" | |||
|                             t-on-click="_OnClickPdfReport" | |||
|                             class="btn btn-primary print_attendance_pdf_report"> | |||
|                         Print PDF | |||
|                     </button> | |||
|                 </div> | |||
|                 <div style="display:flex; margin-left:37px; width:30%; float:left;"> | |||
|                     <input type="text" class="search-bar" | |||
|                            style="border:1px solid #333;" | |||
|                            id="search-bar"/> | |||
|                     <button type="object" t-on-click="_OnClickSearchEmployee" | |||
|                             class="btn btn-primary search_employee" | |||
|                             style="margin:0px 10px;"> | |||
|                         Search | |||
|                     </button> | |||
|                 </div> | |||
|                 <div class="attendance_table"> | |||
|                     <table id="attendance_table" class="hr_attendance"/> | |||
|                 </div> | |||
|                 <div class="attendance"> | |||
|                     <table class="table" id="attendance_table_nm"> | |||
|                         <thead class="attendance"> | |||
|                             <tr> | |||
|                                 <th style="width:9%;"> | |||
|                                     <strong>Employee Name</strong> | |||
|                                 </th> | |||
|                                 <t t-foreach="state.filteredDurationDates" | |||
|                                    t-as="tDate" | |||
|                                    t-key="tDate_index"> | |||
|                                     <th style="width:6%;" | |||
|                                         t-esc="formatDate(tDate)"/> | |||
|                                 </t> | |||
|                                 <th style="width:0%; text-align: center;"> | |||
|                                     <strong>Total</strong> | |||
|                                 </th> | |||
|                             </tr> | |||
|                         </thead> | |||
|                         <tbody class="attendance"> | |||
|                             <tr t-foreach="state.employeeData" t-as="employee" | |||
|                                 t-key="employee_index" class="attendance"> | |||
|                                 <td t-esc="employee.name" | |||
|                                     t-att-data-name="employee.name"/> | |||
|                                 <t t-foreach="employee.leave_data" | |||
|                                    t-as="leave" | |||
|                                    t-key="leave_index"> | |||
|                                     <td class="employee-leave-data table-data" | |||
|                                         t-attf-style="background: {{ leave.color }}"> | |||
|                                         <t t-if="leave.state"> | |||
|                                             <span class="leave-data" | |||
|                                                   t-esc="leave.state or 'null'"/> | |||
|                                         </t> | |||
|                                     </td> | |||
|                                 </t> | |||
|                                 <td t-esc="employee.total_absent_count" | |||
|                                     style="text-align: center;"/> | |||
|                             </tr> | |||
|                         </tbody> | |||
|                     </table> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|     </t> | |||
| </template> | |||
| @ -0,0 +1,13 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!-- Definition of an action client for the Attendance Dashboard --> | |||
|     <record id="action_dashboard_attendance" model="ir.actions.client"> | |||
|         <field name="name">Attendance Dashboard</field> | |||
|         <field name="tag">attendance_dashboard</field> | |||
|     </record> | |||
|     <!-- Menu item for the Attendance Dashboard --> | |||
|     <menuitem id="menu_attendance_dashboard" name="Dashboard" | |||
|               parent="hr_attendance.menu_hr_attendance_root" | |||
|               sequence="0" | |||
|               action="action_dashboard_attendance"/> | |||
| </odoo> | |||
| @ -0,0 +1,21 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!-- | |||
|    This XML snippet defines a new record for extending the 'hr.leave.type' form view. | |||
|    It adds a new field 'leave_code' after the existing field 'leave_validation_type'. | |||
|    The new field allows users to set a custom leave code for a specific holiday status. | |||
|    --> | |||
|     <record id="edit_holiday_status_form" model="ir.ui.view"> | |||
|         <field name="name"> | |||
|             hr.leave.type.view.form.inherit.advance.hr.attendance.dashboard | |||
|         </field> | |||
|         <field name="model">hr.leave.type</field> | |||
|         <field name="inherit_id" ref="hr_holidays.edit_holiday_status_form"/> | |||
|         <field name="arch" type="xml"> | |||
|             <xpath expr="//field[@name='leave_validation_type']" | |||
|                    position="after"> | |||
|                 <field name="leave_code"/> | |||
|             </xpath> | |||
|         </field> | |||
|     </record> | |||
| </odoo> | |||
| @ -0,0 +1,54 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <odoo> | |||
|     <!-- This XML defines a customization for Odoo's configuration settings view related to attendance. --> | |||
|     <record id="res_config_settings_view_form" model="ir.ui.view"> | |||
|         <field name="name"> | |||
|             res.config.settings.view.form.inherit.advance.hr.attendance.dashboard | |||
|         </field> | |||
|         <field name="model">res.config.settings</field> | |||
|         <field name="priority" eval="80"/> | |||
|         <field name="inherit_id" | |||
|                ref="hr_attendance.res_config_settings_view_form"/> | |||
|         <field name="arch" type="xml"> | |||
|             <xpath expr="//div[contains(@data-key,'hr_attendance')]" | |||
|                    position="inside"> | |||
|                 <h2>Choose Attendance Marks</h2> | |||
|                 <div class="row mt16 o_settings_container" | |||
|                      name="kiosk_mode_setting_container"> | |||
|                     <div class="col-12 col-lg-6 o_setting_box"> | |||
|                         <div class="o_setting_right_pane"> | |||
|                             <label for="present"/> | |||
|                             <span class="fa fa-lg fa-building-o" | |||
|                                   title="Values set here are company-specific." | |||
|                                   role="img" | |||
|                                   aria-label="Values set here are company-specific." | |||
|                             /> | |||
|                             <div class="content-group"> | |||
|                                 <div class="mt16"> | |||
|                                     <field name="present" required="1" | |||
|                                            class="w-75"/> | |||
|                                 </div> | |||
|                             </div> | |||
|                         </div> | |||
|                     </div> | |||
|                     <div class="col-12 col-lg-6 o_setting_box"> | |||
|                         <div class="o_setting_right_pane"> | |||
|                             <label for="absent"/> | |||
|                             <span class="fa fa-lg fa-building-o" | |||
|                                   title="Values set here are company-specific." | |||
|                                   role="img" | |||
|                                   aria-label="Values set here are company-specific." | |||
|                             /> | |||
|                             <div class="content-group"> | |||
|                                 <div class="mt16"> | |||
|                                     <field name="absent" required="1" | |||
|                                            class="w-75"/> | |||
|                                 </div> | |||
|                             </div> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|             </xpath> | |||
|         </field> | |||
|     </record> | |||
| </odoo> | |||