Browse Source

Oct 03: [ADD] Initial commit 'advance_hr_attendance_dashboard'

pull/254/merge
Cybrosys Technologies 7 months ago
parent
commit
24c33cee27
  1. 44
      advance_hr_attendance_dashboard/README.rst
  2. 23
      advance_hr_attendance_dashboard/__init__.py
  3. 61
      advance_hr_attendance_dashboard/__manifest__.py
  4. 6
      advance_hr_attendance_dashboard/doc/RELEASE_NOTES.md
  5. 24
      advance_hr_attendance_dashboard/models/__init__.py
  6. 136
      advance_hr_attendance_dashboard/models/hr_employee.py
  7. 52
      advance_hr_attendance_dashboard/models/hr_leave_type.py
  8. 45
      advance_hr_attendance_dashboard/models/res_config_settings.py
  9. 22
      advance_hr_attendance_dashboard/report/__init__.py
  10. 38
      advance_hr_attendance_dashboard/report/hr_attendance_report.py
  11. 32
      advance_hr_attendance_dashboard/report/hr_attendance_reports.xml
  12. 21
      advance_hr_attendance_dashboard/report/hr_attendance_templates.xml
  13. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/check.png
  14. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/chevron.png
  15. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/cogs.png
  16. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/consultation.png
  17. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/ecom-black.png
  18. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/education-black.png
  19. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/hotel-black.png
  20. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/license.png
  21. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/lifebuoy.png
  22. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/manufacturing-black.png
  23. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/pos-black.png
  24. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/puzzle.png
  25. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/restaurant-black.png
  26. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/service-black.png
  27. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/trading-black.png
  28. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/training.png
  29. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/update.png
  30. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/user.png
  31. BIN
      advance_hr_attendance_dashboard/static/description/assets/icons/wrench.png
  32. BIN
      advance_hr_attendance_dashboard/static/description/assets/misc/categories.png
  33. BIN
      advance_hr_attendance_dashboard/static/description/assets/misc/check-box.png
  34. BIN
      advance_hr_attendance_dashboard/static/description/assets/misc/compass.png
  35. BIN
      advance_hr_attendance_dashboard/static/description/assets/misc/corporate.png
  36. BIN
      advance_hr_attendance_dashboard/static/description/assets/misc/customer-support.png
  37. BIN
      advance_hr_attendance_dashboard/static/description/assets/misc/cybrosys-logo.png
  38. BIN
      advance_hr_attendance_dashboard/static/description/assets/misc/features.png
  39. BIN
      advance_hr_attendance_dashboard/static/description/assets/misc/logo.png
  40. BIN
      advance_hr_attendance_dashboard/static/description/assets/misc/pictures.png
  41. BIN
      advance_hr_attendance_dashboard/static/description/assets/misc/pie-chart.png
  42. BIN
      advance_hr_attendance_dashboard/static/description/assets/misc/right-arrow.png
  43. BIN
      advance_hr_attendance_dashboard/static/description/assets/misc/star.png
  44. BIN
      advance_hr_attendance_dashboard/static/description/assets/misc/support.png
  45. BIN
      advance_hr_attendance_dashboard/static/description/assets/misc/whatsapp.png
  46. BIN
      advance_hr_attendance_dashboard/static/description/assets/modules/auto_database_backup.gif
  47. BIN
      advance_hr_attendance_dashboard/static/description/assets/modules/hide_menu_user.png
  48. BIN
      advance_hr_attendance_dashboard/static/description/assets/modules/multi_branch_base.png
  49. BIN
      advance_hr_attendance_dashboard/static/description/assets/modules/odoo_dynamic_dashboard.png
  50. BIN
      advance_hr_attendance_dashboard/static/description/assets/modules/odoo_website_helpdesk.png
  51. BIN
      advance_hr_attendance_dashboard/static/description/assets/modules/web_login_styles.png
  52. BIN
      advance_hr_attendance_dashboard/static/description/assets/screenshots/10.png
  53. BIN
      advance_hr_attendance_dashboard/static/description/assets/screenshots/2.png
  54. BIN
      advance_hr_attendance_dashboard/static/description/assets/screenshots/3.png
  55. BIN
      advance_hr_attendance_dashboard/static/description/assets/screenshots/4.png
  56. BIN
      advance_hr_attendance_dashboard/static/description/assets/screenshots/5.png
  57. BIN
      advance_hr_attendance_dashboard/static/description/assets/screenshots/6.png
  58. BIN
      advance_hr_attendance_dashboard/static/description/assets/screenshots/7.png
  59. BIN
      advance_hr_attendance_dashboard/static/description/assets/screenshots/9.png
  60. BIN
      advance_hr_attendance_dashboard/static/description/assets/screenshots/v15-hero.gif
  61. BIN
      advance_hr_attendance_dashboard/static/description/banner.jpg
  62. BIN
      advance_hr_attendance_dashboard/static/description/icon.png
  63. 662
      advance_hr_attendance_dashboard/static/description/index.html
  64. 65
      advance_hr_attendance_dashboard/static/src/js/attendance_dashboard.js
  65. 12
      advance_hr_attendance_dashboard/static/src/scss/attendance_dashboard.scss
  66. 96
      advance_hr_attendance_dashboard/static/src/xml/attendance_dashboard_templates.xml
  67. 13
      advance_hr_attendance_dashboard/views/advance_hr_attendance_dashboard_menus.xml
  68. 21
      advance_hr_attendance_dashboard/views/hr_leave_type_views.xml
  69. 54
      advance_hr_attendance_dashboard/views/res_config_settings_views.xml

44
advance_hr_attendance_dashboard/README.rst

@ -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>`__

23
advance_hr_attendance_dashboard/__init__.py

@ -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

61
advance_hr_attendance_dashboard/__manifest__.py

@ -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
}

6
advance_hr_attendance_dashboard/doc/RELEASE_NOTES.md

@ -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

24
advance_hr_attendance_dashboard/models/__init__.py

@ -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

136
advance_hr_attendance_dashboard/models/hr_employee.py

@ -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]
}

52
advance_hr_attendance_dashboard/models/hr_leave_type.py

@ -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")

45
advance_hr_attendance_dashboard/models/res_config_settings.py

@ -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.')

22
advance_hr_attendance_dashboard/report/__init__.py

@ -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

38
advance_hr_attendance_dashboard/report/hr_attendance_report.py

@ -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,
}

32
advance_hr_attendance_dashboard/report/hr_attendance_reports.xml

@ -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>

21
advance_hr_attendance_dashboard/report/hr_attendance_templates.xml

@ -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>

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/check.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/chevron.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/cogs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/consultation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/ecom-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/education-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/hotel-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/manufacturing-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/pos-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/puzzle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/restaurant-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/service-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/trading-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/training.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

BIN
advance_hr_attendance_dashboard/static/description/assets/icons/wrench.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/misc/categories.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/misc/check-box.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/misc/compass.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/misc/corporate.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/misc/customer-support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/misc/cybrosys-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/misc/features.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

BIN
advance_hr_attendance_dashboard/static/description/assets/misc/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/misc/pictures.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/misc/pie-chart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/misc/right-arrow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

BIN
advance_hr_attendance_dashboard/static/description/assets/misc/star.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/misc/support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/misc/whatsapp.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/modules/auto_database_backup.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/modules/hide_menu_user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/modules/multi_branch_base.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/modules/odoo_dynamic_dashboard.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/modules/odoo_website_helpdesk.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/modules/web_login_styles.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/screenshots/10.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/screenshots/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/screenshots/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/screenshots/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/screenshots/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/screenshots/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/screenshots/7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/screenshots/9.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
advance_hr_attendance_dashboard/static/description/assets/screenshots/v15-hero.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

BIN
advance_hr_attendance_dashboard/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
advance_hr_attendance_dashboard/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

662
advance_hr_attendance_dashboard/static/description/index.html

@ -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 &amp; 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 -->

65
advance_hr_attendance_dashboard/static/src/js/attendance_dashboard.js

@ -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);

12
advance_hr_attendance_dashboard/static/src/scss/attendance_dashboard.scss

@ -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;
}

96
advance_hr_attendance_dashboard/static/src/xml/attendance_dashboard_templates.xml

@ -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>

13
advance_hr_attendance_dashboard/views/advance_hr_attendance_dashboard_menus.xml

@ -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>

21
advance_hr_attendance_dashboard/views/hr_leave_type_views.xml

@ -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>

54
advance_hr_attendance_dashboard/views/res_config_settings_views.xml

@ -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>
Loading…
Cancel
Save