@ -0,0 +1,45 @@ | 
				
			|||
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg | 
				
			|||
    :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html | 
				
			|||
    :alt: License: AGPL-3 | 
				
			|||
 | 
				
			|||
Quick Add Timesheet | 
				
			|||
========================= | 
				
			|||
* Easily Add Timesheet Via Systray. | 
				
			|||
 | 
				
			|||
Configuration | 
				
			|||
============ | 
				
			|||
- www.odoo.com/documentation/16.0/setup/install.html | 
				
			|||
- Install our custom addon | 
				
			|||
 | 
				
			|||
Company | 
				
			|||
------- | 
				
			|||
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ | 
				
			|||
 | 
				
			|||
License | 
				
			|||
------- | 
				
			|||
General Public License, Version 3 (AGPL V3). | 
				
			|||
(http://www.gnu.org/licenses/agpl-3.0-standalone.html) | 
				
			|||
 | 
				
			|||
Credits | 
				
			|||
------- | 
				
			|||
Developer: (V16) Mohammed Dilshad Tk, Contact: odoo@cybrosys.com | 
				
			|||
 | 
				
			|||
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 | 
				
			|||
========== | 
				
			|||
.. image:: https://cybrosys.com/images/logo.png | 
				
			|||
   :target: https://cybrosys.com | 
				
			|||
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,22 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
################################################################################ | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: MOHAMMED DILSHAD TK (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 | 
				
			|||
@ -0,0 +1,45 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
################################################################################ | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: MOHAMMED DILSHAD TK (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': "Quick Add Timesheet", | 
				
			|||
    'version': '16.0.1.0.0', | 
				
			|||
    'category': 'Project', | 
				
			|||
    'summary': 'Easily Add Timesheet Via Systray', | 
				
			|||
    'description': """The module helps to add timesheet from systray by  | 
				
			|||
    selecting project, task and Contents for timesheet.""", | 
				
			|||
    'author': 'Cybrosys Techno Solutions', | 
				
			|||
    'company': 'Cybrosys Techno Solutions', | 
				
			|||
    'maintainer': 'Cybrosys Techno Solutions', | 
				
			|||
    'website': 'https://www.cybrosys.com', | 
				
			|||
    'depends': ['hr_timesheet'], | 
				
			|||
    'assets': { | 
				
			|||
        'web.assets_backend': [ | 
				
			|||
            'easy_timesheet_add/static/src/js/TimesheetSystray.js', | 
				
			|||
            'easy_timesheet_add/static/src/xml/TimesheetSystray.xml', | 
				
			|||
        ] | 
				
			|||
    }, | 
				
			|||
    'images': ['static/description/banner.jpg'], | 
				
			|||
    'license': 'AGPL-3', | 
				
			|||
    'installable': True, | 
				
			|||
    'auto_install': False, | 
				
			|||
    'application': False, | 
				
			|||
} | 
				
			|||
@ -0,0 +1,7 @@ | 
				
			|||
## Module <easy_timesheet_add> | 
				
			|||
 | 
				
			|||
#### 20.04.2024 | 
				
			|||
#### Version 16.0.1.0.0 | 
				
			|||
#### ADD | 
				
			|||
 | 
				
			|||
- Initial commit for Quick Add Timesheet | 
				
			|||
@ -0,0 +1,22 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
################################################################################ | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: MOHAMMED DILSHAD TK (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 account_analytic_line | 
				
			|||
@ -0,0 +1,35 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
################################################################################ | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: MOHAMMED DILSHAD TK (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 AccountAnalyticLine(models.Model): | 
				
			|||
    """Inherits account_analytic_line to store timesheet adding via systray""" | 
				
			|||
    _inherit = 'account.analytic.line' | 
				
			|||
 | 
				
			|||
    start_time = fields.Datetime(help="To store start time of timesheet") | 
				
			|||
    end_time = fields.Datetime(help="To store end time of timesheet") | 
				
			|||
    current_state = fields.Selection([('play', 'play'), ('pause', 'pause')], | 
				
			|||
                                     help="To manage the timesheet adding via " | 
				
			|||
                                          "systray") | 
				
			|||
    pausing_time = fields.Char(help="To store time on pausing") | 
				
			|||
    is_current = fields.Boolean(help="Check is timesheet completed or not") | 
				
			|||
| 
		 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: 80 KiB  | 
| 
		 After Width: | Height: | Size: 80 KiB  | 
| 
		 After Width: | Height: | Size: 86 KiB  | 
| 
		 After Width: | Height: | Size: 84 KiB  | 
| 
		 After Width: | Height: | Size: 80 KiB  | 
| 
		 After Width: | Height: | Size: 90 KiB  | 
| 
		 After Width: | Height: | Size: 950 KiB  | 
| 
		 After Width: | Height: | Size: 960 KiB  | 
| 
		 After Width: | Height: | Size: 960 KiB  | 
| 
		 After Width: | Height: | Size: 948 KiB  | 
| 
		 After Width: | Height: | Size: 955 KiB  | 
| 
		 After Width: | Height: | Size: 154 KiB  | 
| 
		 After Width: | Height: | Size: 341 KiB  | 
| 
		 After Width: | Height: | Size: 54 KiB  | 
| 
		 After Width: | Height: | Size: 19 KiB  | 
@ -0,0 +1,554 @@ | 
				
			|||
<div style="background-color: #714B67; min-height: 600px; width: 100%; padding: 15px; position: relative;"> | 
				
			|||
   <!-- TITLE BAR --> | 
				
			|||
   <div | 
				
			|||
      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 --> | 
				
			|||
   <!-- APP HERO --> | 
				
			|||
   <h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">Quick Add Timesheet</h1> | 
				
			|||
   <p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">A Module For Easily Add Timesheet Via Systray</p> | 
				
			|||
   <!-- END OF APP HERO --> | 
				
			|||
   <img src="assets/screenshots/hero.gif" | 
				
			|||
      style="width: 75%; height: auto; position: absolute; margin-left: auto; margin-right: auto; top: 45%; left: 12%; right: auto;" /> | 
				
			|||
</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 of 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"> | 
				
			|||
      The module helps to add timesheet from systray by selecting project, task and Contents for timesheet. | 
				
			|||
   </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;">Access Rights For Adding Timesheet via systray</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;">Set Timer For Adding Timesheet | 
				
			|||
         </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;">PAUSE and RE-START the timer while counting</span> | 
				
			|||
      </div> | 
				
			|||
   </div> | 
				
			|||
</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;">Time Won't Loss After Logout or Refresh</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;"> | 
				
			|||
         <h3 | 
				
			|||
            style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Stopwatch icon in systray which helps to add timesheet.</h3> | 
				
			|||
         <img src="assets/screenshots/1.png" class="img-thumbnail"> | 
				
			|||
      </div> | 
				
			|||
   </div> | 
				
			|||
   <div class="col-sm-12"> | 
				
			|||
      <div style="display: block; margin: 30px auto;"> | 
				
			|||
         <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> Select project and task</h3> | 
				
			|||
         <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Choose project, task and click START button to start the time.</p> | 
				
			|||
         <img src="assets/screenshots/2.png" class="img-thumbnail"> | 
				
			|||
      </div> | 
				
			|||
   </div> | 
				
			|||
</div> | 
				
			|||
<div class="col-sm-12"> | 
				
			|||
   <div style="display: block; margin: 30px auto;"> | 
				
			|||
      <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Time starts counting</h3> | 
				
			|||
      <p  style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">The timer begins counting and users can pause it by clicking the "Pause" button.</p> | 
				
			|||
      <img src="assets/screenshots/3.png" class="img-thumbnail"> | 
				
			|||
   </div> | 
				
			|||
</div> | 
				
			|||
<div class="col-sm-12"> | 
				
			|||
   <div style="display: block; margin: 30px auto;"> | 
				
			|||
      <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">RE-START after PAUSE</h3> | 
				
			|||
      <p | 
				
			|||
         style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Click Start to continue the paused time</p> | 
				
			|||
      <img src="assets/screenshots/4.png" class="img-thumbnail"> | 
				
			|||
   </div> | 
				
			|||
</div> | 
				
			|||
<div class="col-sm-12"> | 
				
			|||
   <div style="display: block; margin: 30px auto;"> | 
				
			|||
      <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Add description</h3> | 
				
			|||
      <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">After completing the task, please add a description of the task, then click STOP.</p> | 
				
			|||
      <img src="assets/screenshots/5.png" class="img-thumbnail"> | 
				
			|||
   </div> | 
				
			|||
</div> | 
				
			|||
<div class="col-sm-12"> | 
				
			|||
   <div style="display: block; margin: 30px auto;"> | 
				
			|||
      <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Timesheet created</h3> | 
				
			|||
      <p | 
				
			|||
         style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Timesheet will be created for selected project and task with given description</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/16.0/project_task_timer/#" target="_blank"> | 
				
			|||
                     <div style="border-radius:10px"> | 
				
			|||
                        <img class="img img-responsive center-block" style="border-radius: 0px;" | 
				
			|||
                           src="assets/modules/1.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/16.0/timesheets_by_employee/" target="_blank"> | 
				
			|||
                     <div style="border-radius:10px"> | 
				
			|||
                        <img class="img img-responsive center-block" style="border-radius: 0px;" | 
				
			|||
                           src="assets/modules/2.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/16.0/hr_contract_types/" target="_blank"> | 
				
			|||
                     <div style="border-radius:10px"> | 
				
			|||
                        <img class="img img-responsive center-block" style="border-radius: 0px;" | 
				
			|||
                           src="assets/modules/3.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/16.0/projects_task_checklists/" target="_blank"> | 
				
			|||
                     <div style="border-radius:10px"> | 
				
			|||
                        <img class="img img-responsive center-block" style="border-radius: 0px;" | 
				
			|||
                           src="assets/modules/4.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/16.0/task_deadline_reminder/" target="_blank"> | 
				
			|||
                     <div style="border-radius:10px"> | 
				
			|||
                        <img class="img img-responsive center-block" style="border-radius: 0px;" | 
				
			|||
                           src="assets/modules/5.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/16.0/project_task_risk_management_odoo/#" target="_blank"> | 
				
			|||
                     <div style="border-radius:10px"> | 
				
			|||
                        <img class="img img-responsive center-block" style="border-radius: 0px;" | 
				
			|||
                           src="assets/modules/6.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 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 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" | 
				
			|||
               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" | 
				
			|||
               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 --> | 
				
			|||
| 
		 After Width: | Height: | Size: 1.4 KiB  | 
@ -0,0 +1,182 @@ | 
				
			|||
/** @odoo-module **/ | 
				
			|||
import { registry } from "@web/core/registry"; | 
				
			|||
import { Component, useState, useRef, onWillStart } from "@odoo/owl"; | 
				
			|||
import { Dropdown } from "@web/core/dropdown/dropdown"; | 
				
			|||
import { _t } from "@web/core/l10n/translation"; | 
				
			|||
import { useService } from "@web/core/utils/hooks"; | 
				
			|||
import { formatFloatTime } from "@web/views/fields/formatters"; | 
				
			|||
import { FloatTimeField } from "@web/views/fields/float_time/float_time_field"; | 
				
			|||
/** @extends Component to add methods of timesheet view */ | 
				
			|||
export class TimesheetSystray extends Component { | 
				
			|||
	async setup() { | 
				
			|||
	    this.orm = useService("orm"); | 
				
			|||
        this.notification = useService("notification") | 
				
			|||
        this.timesheet = useRef("Timesheet") | 
				
			|||
		this.state = useState({ | 
				
			|||
			project: [], | 
				
			|||
			task: [], | 
				
			|||
			start: false, | 
				
			|||
			WorkTime: null, | 
				
			|||
			timer: false, | 
				
			|||
			Project: 0, | 
				
			|||
			Task: 0, | 
				
			|||
			time: '', | 
				
			|||
			paused: null, | 
				
			|||
			pausedTime: null, | 
				
			|||
			distance: null, | 
				
			|||
			current_task : [], | 
				
			|||
			Access : null | 
				
			|||
		}) | 
				
			|||
        if (await this.env.services.user.hasGroup('hr_timesheet.group_hr_timesheet_user') || | 
				
			|||
	      await this.env.services.user.hasGroup('hr_timesheet.group_hr_timesheet_approver') || | 
				
			|||
	      await this.env.services.user.hasGroup('hr_timesheet.group_timesheet_manager')) { | 
				
			|||
	    this.state.Access = true | 
				
			|||
		this.SearchReadTimeSheet() | 
				
			|||
		this.state.project = await this.orm.searchRead('project.project', []) | 
				
			|||
		this.state.Task = await this.orm.searchRead('project.task', []) | 
				
			|||
	}else{this.state.Access = false} | 
				
			|||
	} | 
				
			|||
	currentDT(){ | 
				
			|||
	    const currentDT = new Date(); | 
				
			|||
        const year = currentDT.getFullYear().toString().padStart(4, '0'); | 
				
			|||
        const month = String(currentDT.getMonth() + 1).padStart(2, '0'); //Months are zero-indexed. so,add 1
 | 
				
			|||
        const day = currentDT.getDate().toString().padStart(2, '0'); | 
				
			|||
        const hours = currentDT.getHours().toString().padStart(2, '0'); | 
				
			|||
        const minutes = currentDT.getMinutes().toString().padStart(2, '0'); | 
				
			|||
        const seconds = currentDT.getSeconds().toString().padStart(2, '0'); | 
				
			|||
        return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; | 
				
			|||
	} | 
				
			|||
	async SearchReadTimeSheet(){ | 
				
			|||
        this.user = await this.orm.searchRead('res.users', | 
				
			|||
		        [["id", "=", this.env.services.user.userId]]) | 
				
			|||
	    this.state.current_task = await this.orm.searchRead('account.analytic.line', | 
				
			|||
		        [["employee_id", "=", this.user[0].employee_id[0]], | 
				
			|||
		        ['is_current', '=', true]]) | 
				
			|||
        if(this.state.current_task[0]){ | 
				
			|||
            if(this.state.current_task[0]['end_time']){ | 
				
			|||
                if(this.state.current_task[0]['current_state'] == 'pause'){ | 
				
			|||
                    var datetime = new Date(new Date().getTime()) | 
				
			|||
                    this.state.time = this.state.current_task[0]['pausing_time'] | 
				
			|||
                    this.state.paused = true; | 
				
			|||
                    this.state.WorkTime = true | 
				
			|||
                }else{ | 
				
			|||
                    this.state.WorkTime = true | 
				
			|||
                    this.state.time = this.state.current_task[0]['pausing_time'] | 
				
			|||
                    const newDate = new Date() | 
				
			|||
                    const timeParts = this.state.time.split(/[hms\s]+/); | 
				
			|||
                    this.state.paused = false; | 
				
			|||
                    newDate.setHours(newDate.getHours() - parseInt(timeParts[0])); | 
				
			|||
                    newDate.setMinutes(newDate.getMinutes() - parseInt(timeParts[1])); | 
				
			|||
                    newDate.setSeconds(newDate.getSeconds() - parseInt(timeParts[2])); | 
				
			|||
                    this.StartCountTime(new Date(newDate).getTime()) | 
				
			|||
                } | 
				
			|||
            }else{ | 
				
			|||
                this.current_time = new Date(this.state.current_task[0]['start_time']) | 
				
			|||
                this.state.WorkTime = true | 
				
			|||
                this.StartCountTime(this.current_time.getTime()) | 
				
			|||
            } | 
				
			|||
		}else{ | 
				
			|||
		    return | 
				
			|||
		} | 
				
			|||
	} | 
				
			|||
	/** Start counting the time **/ | 
				
			|||
	async StartTime() { | 
				
			|||
	    this.SearchReadTimeSheet() | 
				
			|||
	    this.MainDiv = this.timesheet.el | 
				
			|||
	    if (!this.MainDiv.querySelector(".Project").value || | 
				
			|||
	        !this.MainDiv.querySelector(".Task").value) { | 
				
			|||
            return this.notification.add(_t("Choose Project and Task"), { type:'warning'}) | 
				
			|||
        } | 
				
			|||
		this.state.start = true; | 
				
			|||
		this.state.WorkTime = true; | 
				
			|||
		this.state.time = this.MainDiv.querySelector(".time").innerHTML; | 
				
			|||
		this.state.Project = this.MainDiv.querySelector(".Project").value | 
				
			|||
		this.state.Task = this.MainDiv.querySelector(".Task").value | 
				
			|||
		this.state.timer = new Date().getTime() | 
				
			|||
		await this.orm.create("account.analytic.line", [{ | 
				
			|||
			project_id: parseInt(this.state.Project), | 
				
			|||
			task_id: parseInt(this.state.Task), | 
				
			|||
			start_time: await this.currentDT(), | 
				
			|||
			name: " ", | 
				
			|||
			is_current: true | 
				
			|||
		}]); | 
				
			|||
		this.SearchReadTimeSheet() | 
				
			|||
        window.location.reload(); | 
				
			|||
	} | 
				
			|||
	/** Pause the time and store the time **/ | 
				
			|||
	async PauseTime(){ | 
				
			|||
        await this.orm.write("account.analytic.line", [this.state.current_task[0].id], { | 
				
			|||
            end_time: await this.currentDT(), | 
				
			|||
            pausing_time: this.state.time, | 
				
			|||
            current_state: 'pause' | 
				
			|||
        }) | 
				
			|||
        await clearInterval(this.StopWatch); | 
				
			|||
        this.state.paused = true; | 
				
			|||
        this.SearchReadTimeSheet(); | 
				
			|||
        window.location.reload(); | 
				
			|||
	} | 
				
			|||
	/** Start after pause and change the state **/ | 
				
			|||
	async PlayTime() { | 
				
			|||
	    this.state.pausedTime = this.state.current_task[0].pausing_time | 
				
			|||
        await this.orm.write("account.analytic.line", [this.state.current_task[0].id], { | 
				
			|||
            current_state: 'play' | 
				
			|||
        }) | 
				
			|||
        this.SearchReadTimeSheet() | 
				
			|||
	} | 
				
			|||
	/** Add timesheet based on project, task and time **/ | 
				
			|||
	async AddTimesheet() { | 
				
			|||
        if (!this.timesheet.el.querySelector(".Description").value) { | 
				
			|||
	        return this.notification.add(_t("Add a Description"), { type: 'warning'}); | 
				
			|||
	    }else { | 
				
			|||
	        /** Convert 02h 30m format time => 02:30 and create timesheet**/ | 
				
			|||
	        const timeParts =  this.state.time.split(/h |m/); | 
				
			|||
            const hours = Number(timeParts[0]); | 
				
			|||
            const minutes = Number(timeParts[1]); | 
				
			|||
            await this.orm.write("account.analytic.line", [this.state.current_task[0].id], { | 
				
			|||
                end_time: await this.currentDT(), | 
				
			|||
                unit_amount: hours + minutes / 60, | 
				
			|||
			    name: this.timesheet.el.querySelector(".Description").value, | 
				
			|||
                is_current : false | 
				
			|||
            }) | 
				
			|||
        } | 
				
			|||
        clearInterval(this.StopWatch); | 
				
			|||
		this.state.time = '' | 
				
			|||
		this.state.WorkTime = false; | 
				
			|||
        window.location.reload(); | 
				
			|||
	} | 
				
			|||
	/** Running the count down using setInterval function */ | 
				
			|||
	/** and add the time to state for show in view */ | 
				
			|||
	  StartCountTime(start_time) { | 
				
			|||
		var self = this | 
				
			|||
		self.StopWatch = setInterval(async function() { | 
				
			|||
            var currentTime = new Date().getTime() | 
				
			|||
            self.state.distance = currentTime - start_time | 
				
			|||
            var days = Math.floor(self.state.distance / (1000 * 60 * 60 * 24)); | 
				
			|||
            var hours = Math.floor((self.state.distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); | 
				
			|||
            var minutes = Math.floor((self.state.distance % (1000 * 60 * 60)) / (1000 * 60)); | 
				
			|||
            var seconds = Math.floor((self.state.distance % (1000 * 60)) / 1000); | 
				
			|||
            self.state.time = [hours ? hours + 'h' : '00h', minutes ? minutes + 'm' : '00m', seconds ? seconds + 's' : '00s'].join(' '); | 
				
			|||
            self.orm.write("account.analytic.line", [self.state.current_task[0].id], { | 
				
			|||
                pausing_time: self.state.time | 
				
			|||
            }); | 
				
			|||
		}, 1000); | 
				
			|||
	} | 
				
			|||
	/** Filter the tasks bases on selected project **/ | 
				
			|||
	async ChangeProject(project_id) { | 
				
			|||
	    if (project_id){ | 
				
			|||
		    this.state.Task = await this.orm.searchRead('project.task', | 
				
			|||
		        [["project_id", "=", parseInt(project_id)]]) | 
				
			|||
	    } | 
				
			|||
	} | 
				
			|||
	/** Filter the tasks bases on selected project **/ | 
				
			|||
	async ChangeTask(task_id) { | 
				
			|||
	    if(task_id){ | 
				
			|||
	        var project = await this.orm.searchRead('project.project', [["task_ids", "in", [parseInt(task_id)]]]) | 
				
			|||
		    this.timesheet.el.querySelector(".Project").value = project[0].id | 
				
			|||
	    } | 
				
			|||
	} | 
				
			|||
} | 
				
			|||
TimesheetSystray.template = "TimesheetSystray"; | 
				
			|||
TimesheetSystray.components = { Dropdown }; | 
				
			|||
export const systrayItem = { Component: TimesheetSystray, }; | 
				
			|||
registry.category("systray").add("TimesheetSystray", systrayItem, { sequence: 105 }); | 
				
			|||
@ -0,0 +1,84 @@ | 
				
			|||
<?xml version="1.0" encoding="UTF-8" ?> | 
				
			|||
<template xml:space="preserve"> | 
				
			|||
	<!-- Template of timesheet add view template from systray--> | 
				
			|||
	<t t-name="TimesheetSystray" owl="1"> | 
				
			|||
		<Dropdown menuClass="`p-3 b-3`" t-if="this.state.Access"> | 
				
			|||
			<t t-set-slot="toggler"> | 
				
			|||
				<img src="easy_timesheet_add/static/src/img/stopwatch.png" | 
				
			|||
					 width="21px" height="18px"/> | 
				
			|||
			</t> | 
				
			|||
			<t t-set-slot="default"> | 
				
			|||
				<div t-ref="Timesheet" class="mb-2" | 
				
			|||
					 style="width: 300px;min-height: 50px;max-height: 630px"> | 
				
			|||
					<div t-esc="state.time" class="time"/> | 
				
			|||
					<t t-if="!this.state.WorkTime"> | 
				
			|||
						<div> | 
				
			|||
							<div>Project</div> | 
				
			|||
							<div> | 
				
			|||
								<select class="form-select Project" | 
				
			|||
										t-on-change="(ev) => this.ChangeProject(ev.target.value)"> | 
				
			|||
									<option class="bg-secondary" value="">Select a | 
				
			|||
										Project</option> | 
				
			|||
									<t t-foreach="this.state.project" | 
				
			|||
									   t-as="project" | 
				
			|||
									   t-key="project_index"> | 
				
			|||
										<option t-att-value="project.id" | 
				
			|||
												t-att-data="project.display_name" | 
				
			|||
												t-esc="project.display_name"/> | 
				
			|||
									</t> | 
				
			|||
								</select> | 
				
			|||
							</div> | 
				
			|||
								<div>Task</div> | 
				
			|||
							<div> | 
				
			|||
								<select class="form-select Task" | 
				
			|||
										t-on-change="(ev) => this.ChangeTask(ev.target.value)"> | 
				
			|||
									<option class="bg-secondary" value="">Select a | 
				
			|||
										Task</option> | 
				
			|||
									<t t-foreach="this.state.Task" | 
				
			|||
									   t-as="task" t-key="task_index"> | 
				
			|||
										<option t-att-value="task.id" | 
				
			|||
												t-att-data="task.display_name" | 
				
			|||
												t-esc="task.display_name"/> | 
				
			|||
									</t> | 
				
			|||
								</select> | 
				
			|||
							</div> | 
				
			|||
						</div> | 
				
			|||
					</t> | 
				
			|||
					<t t-if="this.state.WorkTime"> | 
				
			|||
						<div> | 
				
			|||
							<small class="">Description</small> | 
				
			|||
						</div> | 
				
			|||
						<div class="fs-3 text-info text-end"> | 
				
			|||
							<textarea class="form-control Description" | 
				
			|||
									  rows="3"/> | 
				
			|||
						</div> | 
				
			|||
					</t> | 
				
			|||
				</div> | 
				
			|||
				<div class="mt-2"> | 
				
			|||
					<button t-if="!this.state.WorkTime" | 
				
			|||
							class="btn btn-success start" | 
				
			|||
							t-on-click="StartTime"> | 
				
			|||
						<span>Start</span> | 
				
			|||
					</button> | 
				
			|||
					<button t-if="this.state.WorkTime" | 
				
			|||
						class="btn btn-danger stop" | 
				
			|||
						t-on-click="AddTimesheet"> | 
				
			|||
						<span>Stop</span> | 
				
			|||
					</button> | 
				
			|||
					<button t-if="this.state.WorkTime and !this.state.paused" | 
				
			|||
						class="btn btn-primary pause" | 
				
			|||
							style="margin-left: 6px" | 
				
			|||
						t-on-click="PauseTime"> | 
				
			|||
						<span>Pause</span> | 
				
			|||
					</button> | 
				
			|||
					<button t-if="this.state.paused" | 
				
			|||
							class="btn btn-primary pause" | 
				
			|||
							style="margin-left: 6px" | 
				
			|||
							t-on-click="PlayTime"> | 
				
			|||
						<span>ReStart</span> | 
				
			|||
						</button> | 
				
			|||
				</div> | 
				
			|||
			</t> | 
				
			|||
		</Dropdown> | 
				
			|||
	</t> | 
				
			|||
</template> | 
				
			|||