| @ -0,0 +1,46 @@ | |||||
|  | .. 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 | ||||
|  | 
 | ||||
|  | Allocation Time Approval | ||||
|  | ======================== | ||||
|  | This module allows manager to approve project task allocation time. | ||||
|  | 
 | ||||
|  | Configuration | ||||
|  | ============= | ||||
|  | * Choose project administrator or user | ||||
|  | 
 | ||||
|  | Company | ||||
|  | ------- | ||||
|  | * `Cybrosys Techno Solutions <https://cybrosys.com/>`__ | ||||
|  | 
 | ||||
|  | License | ||||
|  | ------- | ||||
|  | GNU AFFERO General Public License, Version 3 (AGPL v3). | ||||
|  | (https://www.gnu.org/licenses/agpl-3.0-standalone.html) | ||||
|  | 
 | ||||
|  | Credits | ||||
|  | ------- | ||||
|  | * Developers:	(V16) Farhana Jahan PT, Contact: odoo@cybrosys.com | ||||
|  | 
 | ||||
|  | Contacts | ||||
|  | -------- | ||||
|  | * Mail Contact : odoo@cybrosys.com | ||||
|  | * Website : https://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 `Our Website <https://cybrosys.com/>`__ | ||||
|  | 
 | ||||
|  | Further information | ||||
|  | =================== | ||||
|  | HTML Description: `<static/description/index.html>`__ | ||||
| @ -0,0 +1,22 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: Farhana Jahan PT(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) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: Farhana Jahan PT(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': 'Allocation Time Approval', | ||||
|  |     'version': '16.0.1.0.0', | ||||
|  |     'category': 'Project', | ||||
|  |     'summary': """ Allocated Time Approval for Project task.""", | ||||
|  |     'description': " This module allows Manager to Approve Project Task " | ||||
|  |                    "Allocation Time.", | ||||
|  |     'author': 'Cybrosys Techno Solutions', | ||||
|  |     'company': 'Cybrosys Techno Solutions', | ||||
|  |     'maintainer': 'Cybrosys Techno Solutions', | ||||
|  |     'website': 'https://www.cybrosys.com', | ||||
|  |     'depends': ['hr_timesheet', 'project','hr'], | ||||
|  |     'data': [ | ||||
|  |         'security/ir.model.access.csv', | ||||
|  |         'data/allocation_time_approval_data.xml', | ||||
|  |         'views/project_task_views.xml', | ||||
|  |         'views/manager_approval_views.xml', | ||||
|  |     ], | ||||
|  |     'images': ['static/description/banner.jpg'], | ||||
|  |     'license': 'AGPL-3', | ||||
|  |     'installable': True, | ||||
|  |     'auto_install': False, | ||||
|  |     'application': False, | ||||
|  | } | ||||
| @ -0,0 +1,15 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||
|  | <odoo> | ||||
|  |     <data noupdate="1"> | ||||
|  |         <!--   Task added in Project Task Type--> | ||||
|  |         <record id="task_type_to_approve" model="project.task.type"> | ||||
|  |             <field name="name">To Approve</field> | ||||
|  |             <field name="sequence">1</field> | ||||
|  |             <field name="project_ids" | ||||
|  |                    eval="[(6, 0, [ref('project.project_project_1'), | ||||
|  |                    ref('project.project_project_2'), | ||||
|  |                    ref('project.project_project_3')])]"/> | ||||
|  |             <field name="fold">True</field> | ||||
|  |         </record> | ||||
|  |     </data> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,5 @@ | |||||
|  | ## Module <allocation_time_approval> | ||||
|  | #### 30.12.2023 | ||||
|  | #### Version 16.0.1.0.0 | ||||
|  | ##### ADD | ||||
|  | - Initial commit for Allocation Time Approval | ||||
| @ -0,0 +1,23 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: Farhana Jahan PT(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 manager_approval | ||||
|  | from . import project_task | ||||
| @ -0,0 +1,66 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: Farhana Jahan PT(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 ManagerApproval(models.Model): | ||||
|  |     """ Create a new model for obtaining | ||||
|  |     Project Time Approval Data for Manager Approval. """ | ||||
|  |     _name = 'manager.approval' | ||||
|  |     _description = "Manager Approval" | ||||
|  | 
 | ||||
|  |     task = fields.Char(string="Task", help="Task name for project") | ||||
|  |     project_id = fields.Many2one("project.project", string="Project", | ||||
|  |                                  help="Corresponding project name") | ||||
|  |     user_ids = fields.Many2many('res.users', string="Assignees", | ||||
|  |                                 help="Corresponding assignees name", | ||||
|  |                                 required=True) | ||||
|  |     planned_hours = fields.Float(string="Allocated Hours", | ||||
|  |                                  help="Allocation time for assignees") | ||||
|  |     button_view_boolean = fields.Boolean(string="Button view", | ||||
|  |                                          help="Button for approve button") | ||||
|  |     button_view_boolean_cancel = fields.Boolean(string="Cancel Button", | ||||
|  |                                                 help="Button for cancel") | ||||
|  |     task_id = fields.Many2one("project.task", string="Project Task", | ||||
|  |                               help="Getting corresponding task") | ||||
|  | 
 | ||||
|  |     def action_approve(self): | ||||
|  |         """ When click on 'Approve' button the datas are created | ||||
|  |          in project_task module""" | ||||
|  |         users = [rec for rec in self.user_ids.ids] | ||||
|  |         self.task_id.update({ | ||||
|  |             'name': self.task, | ||||
|  |             'project_id': self.project_id.id, | ||||
|  |             'user_ids': users, | ||||
|  |             'planned_hours': self.planned_hours, | ||||
|  |             'stage_id': self.env.ref("project.project_stage_1").id, | ||||
|  |             'manager_approval_id': self.id | ||||
|  |         }) | ||||
|  |         self.button_view_boolean = True | ||||
|  |         self.button_view_boolean_cancel = False | ||||
|  | 
 | ||||
|  |     def action_manager_cancel(self): | ||||
|  |         """When click on 'Cancel' button project.task got cancelled""" | ||||
|  |         self.task_id.write({'stage_id': self.env.ref( | ||||
|  |             "project.project_stage_3").id}) | ||||
|  |         self.button_view_boolean_cancel = True | ||||
|  |         self.button_view_boolean = False | ||||
| @ -0,0 +1,215 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: Farhana Jahan PT(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, fields, models, _ | ||||
|  | from odoo.exceptions import ValidationError | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class ProjectTask(models.Model): | ||||
|  |     """ Inherit project,so we are adding certain boolean | ||||
|  |      field for defining stages. """ | ||||
|  |     _inherit = 'project.task' | ||||
|  | 
 | ||||
|  |     new_stage = fields.Boolean(string="New", | ||||
|  |                                help="Boolean to visible manager approve", | ||||
|  |                                compute="_compute_new_stage") | ||||
|  |     to_approve_stage = fields.Boolean(string="To approve", | ||||
|  |                                       compute="_compute_to_approve_stage", | ||||
|  |                                       help="Boolean to change to approve") | ||||
|  |     to_progress_stage = fields.Boolean(string="Task Done", | ||||
|  |                                        compute="_compute_to_progress_stage", | ||||
|  |                                        help="Boolean to progress stage") | ||||
|  |     manager_approval_id = fields.Many2one("manager.approval", | ||||
|  |                                           string="Manager Approval", | ||||
|  |                                           help="Manager Approval") | ||||
|  |     task_create_boolean = fields.Boolean(string="Task Create Boolean", | ||||
|  |                                          help="Task Create Boolean", | ||||
|  |                                          default=True) | ||||
|  | 
 | ||||
|  |     @api.depends('stage_id') | ||||
|  |     def _compute_new_stage(self): | ||||
|  |         """Searches for 'New' stage from project.task.type, | ||||
|  |         When project_task on 'New' stage then New boolean field got True""" | ||||
|  |         for rec in self: | ||||
|  |             rec.new_stage = True if rec.stage_id.id == rec.env.ref( | ||||
|  |                 "project.project_stage_0").id else False | ||||
|  | 
 | ||||
|  |     @api.depends('stage_id') | ||||
|  |     def _compute_to_approve_stage(self): | ||||
|  |         """Searches for 'To Approve' stage from project.task.type, | ||||
|  |         When project_task on 'To Approve' stage then To Approve | ||||
|  |         boolean field got True""" | ||||
|  |         for rec in self: | ||||
|  |             rec.to_approve_stage = True if rec.stage_id.id == rec.env.ref( | ||||
|  |                 "allocation_time_approval.task_type_to_approve").id else False | ||||
|  | 
 | ||||
|  |     @api.depends('stage_id') | ||||
|  |     def _compute_to_progress_stage(self): | ||||
|  |         """Searches for 'In Progress' stage from project.task.type, | ||||
|  |         When project_task on 'In Progress' stage then In Progress | ||||
|  |         boolean field got True""" | ||||
|  |         for rec in self: | ||||
|  |             rec.to_progress_stage = True if rec.stage_id.id == rec.env.ref( | ||||
|  |                 "project.project_stage_1").id else False | ||||
|  | 
 | ||||
|  |     def action_approval(self): | ||||
|  |         """ When click on 'Manager Approval' button the | ||||
|  |         datas are created in manager_approval module, | ||||
|  |         and the stage become 'To Approve'""" | ||||
|  |         self.task_create_boolean = False | ||||
|  |         self.write({'stage_id': self.env.ref( | ||||
|  |             "allocation_time_approval.task_type_to_approve").id}) | ||||
|  |         if not self.task_create_boolean: | ||||
|  |             users = [rec for rec in self.user_ids.ids] | ||||
|  |             self.env['manager.approval'].create({ | ||||
|  |                 'task': self.name, | ||||
|  |                 'project_id': self.project_id.id, | ||||
|  |                 'user_ids': users, | ||||
|  |                 'planned_hours': self.planned_hours, | ||||
|  |                 'task_id': self.id | ||||
|  |             }) | ||||
|  |             self.planned_hours = 0 | ||||
|  | 
 | ||||
|  |     def action_done(self): | ||||
|  |         """ When click on 'Done' the stage become 'Done'""" | ||||
|  |         self.write({'stage_id': self.env.ref('project.project_stage_2').id}) | ||||
|  |         self.manager_approval_id.button_view_boolean = True | ||||
|  |         self.manager_approval_id.button_view_boolean_cancel = True | ||||
|  | 
 | ||||
|  |     def action_cancel(self): | ||||
|  |         """ When click on 'Cancel' the stage become 'Cancel'""" | ||||
|  |         self.write({'stage_id': self.env.ref("project.project_stage_3").id}) | ||||
|  |         self.manager_approval_id.button_view_boolean = True | ||||
|  |         self.manager_approval_id.button_view_boolean_cancel = True | ||||
|  | 
 | ||||
|  |     def write(self, values): | ||||
|  |         """ Function for change stage only for Manager""" | ||||
|  |         current_stage = self.stage_id.name | ||||
|  |         if 'stage_id' in values: | ||||
|  |             new_state = values.get('stage_id') | ||||
|  |             if (current_stage == self.env.ref( | ||||
|  |                     "allocation_time_approval.task_type_to_approve").name) and ( | ||||
|  |                     not self.env.user.has_group( | ||||
|  |                         'project.group_project_manager')): | ||||
|  |                 if new_state in (self.env.ref("project.project_stage_0").id, | ||||
|  |                                  self.env.ref("project.project_stage_1").id, | ||||
|  |                                  self.env.ref("project.project_stage_2").id, | ||||
|  |                                  self.env.ref("project.project_stage_3").id): | ||||
|  |                     raise ValidationError(_( | ||||
|  |                         "Only Managers can perform this move!")) | ||||
|  |             if (current_stage == self.env.ref( | ||||
|  |                     "project.project_stage_0").name) and ( | ||||
|  |                     not self.env.user.has_group( | ||||
|  |                         'project.group_project_manager')): | ||||
|  |                 if new_state != self.env.ref( | ||||
|  |                         "allocation_time_approval.task_type_to_approve").id: | ||||
|  |                     raise ValidationError(_( | ||||
|  |                         "Only Managers can perform this move!")) | ||||
|  |             if (current_stage == self.env.ref( | ||||
|  |                     "project.project_stage_2").name) and ( | ||||
|  |                     not self.env.user.has_group( | ||||
|  |                         'project.group_project_manager')): | ||||
|  |                 if new_state in (self.env.ref( | ||||
|  |                         "allocation_time_approval.task_type_to_approve").id, | ||||
|  |                                  self.env.ref("project.project_stage_0").id, | ||||
|  |                                  self.env.ref("project.project_stage_3").id): | ||||
|  |                     raise ValidationError(_( | ||||
|  |                         "Only Managers can perform this move!")) | ||||
|  |             if (current_stage == self.env.ref( | ||||
|  |                     "project.project_stage_1").name) and ( | ||||
|  |                     not self.env.user.has_group( | ||||
|  |                         'project.group_project_manager')): | ||||
|  |                 if new_state in (self.env.ref("project.project_stage_0").id, | ||||
|  |                                  self.env.ref( | ||||
|  |                                      "allocation_time_approval.task_type_to_approve").id): | ||||
|  |                     raise ValidationError(_( | ||||
|  |                         "Only Managers can perform this move!")) | ||||
|  |             if (current_stage == self.env.ref( | ||||
|  |                     "project.project_stage_3").name) and ( | ||||
|  |                     not self.env.user.has_group( | ||||
|  |                         'project.group_project_manager')): | ||||
|  |                 if new_state in (self.env.ref('project.project_stage_0').id, | ||||
|  |                                  self.env.ref('project.project_stage_1').id, | ||||
|  |                                  self.env.ref('project.project_stage_2').id, | ||||
|  |                                  self.env.ref( | ||||
|  |                                      'allocation_time_approval.task_type_to_approve').id): | ||||
|  |                     raise ValidationError(_( | ||||
|  |                         "Only Managers can perform this move!")) | ||||
|  |             if (new_state == self.env.ref("project.project_stage_0").id) and ( | ||||
|  |                     not self.env.user.has_group( | ||||
|  |                         'project.group_project_manager')): | ||||
|  |                 raise ValidationError(_("Only Managers can perform this move!")) | ||||
|  |             if new_state == self.env.ref( | ||||
|  |                     "allocation_time_approval.task_type_to_approve").id: | ||||
|  |                 if self.task_create_boolean: | ||||
|  |                     users = [rec for rec in self.user_ids.ids] | ||||
|  |                     self.env['manager.approval'].create({ | ||||
|  |                         'task': self.name, | ||||
|  |                         'project_id': self.project_id.id, | ||||
|  |                         'user_ids': users, | ||||
|  |                         'planned_hours': self.planned_hours, | ||||
|  |                         'task_id': self.id | ||||
|  |                     }) | ||||
|  |                     self.planned_hours = 0 | ||||
|  |             if (current_stage == self.env.ref( | ||||
|  |                     "project.project_stage_2").name) and ( | ||||
|  |                     self.env.user.has_group('project.group_project_manager')): | ||||
|  |                 if (new_state == self.env.ref( | ||||
|  |                         "allocation_time_approval.task_type_to_approve").id): | ||||
|  |                     raise ValidationError(_("You can't move this..!")) | ||||
|  |             if (current_stage == self.env.ref( | ||||
|  |                     "allocation_time_approval.task_type_to_approve").name) and ( | ||||
|  |                     self.env.user.has_group('project.group_project_manager')): | ||||
|  |                 if (new_state == self.env.ref( | ||||
|  |                         "project.project_stage_0").id): | ||||
|  |                     task_name = self.env["manager.approval"].search( | ||||
|  |                         [('task', '=', self.name)]) | ||||
|  |                     task_name.unlink() | ||||
|  |                 if (new_state == self.env.ref( | ||||
|  |                         "project.project_stage_2").id): | ||||
|  |                     task_name = self.env["manager.approval"].search( | ||||
|  |                         [('task', '=', self.name)]) | ||||
|  |                     task_name.unlink() | ||||
|  |                 if (new_state == self.env.ref( | ||||
|  |                         "project.project_stage_3").id): | ||||
|  |                     task_name = self.env["manager.approval"].search( | ||||
|  |                         [('task', '=', self.name)]) | ||||
|  |                     task_name.button_view_boolean_cancel = True | ||||
|  |                 if (new_state == self.env.ref( | ||||
|  |                         "project.project_stage_1").id): | ||||
|  |                     task_name = self.env["manager.approval"].search( | ||||
|  |                         [('task', '=', self.name)]) | ||||
|  |                     task_name.button_view_boolean = True | ||||
|  |             if current_stage == self.env.ref("project.project_stage_1").name: | ||||
|  |                 if (new_state == self.env.ref( | ||||
|  |                         "project.project_stage_2").id): | ||||
|  |                     task_name = self.env["manager.approval"].search( | ||||
|  |                         [('task', '=', self.name)]) | ||||
|  |                     task_name.button_view_boolean = True | ||||
|  |                     task_name.button_view_boolean_cancel = True | ||||
|  |             if current_stage == self.env.ref("project.project_stage_1").name: | ||||
|  |                 if (new_state == self.env.ref( | ||||
|  |                         "project.project_stage_3").id): | ||||
|  |                     task_name = self.env["manager.approval"].search( | ||||
|  |                         [('task', '=', self.name)]) | ||||
|  |                     task_name.button_view_boolean = True | ||||
|  |                     task_name.button_view_boolean_cancel = True | ||||
|  |         return super(ProjectTask, self).write(values) | ||||
| 
 | 
| 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: 88 KiB | 
| After Width: | Height: | Size: 81 KiB | 
| After Width: | Height: | Size: 79 KiB | 
| After Width: | Height: | Size: 92 KiB | 
| After Width: | Height: | Size: 82 KiB | 
| After Width: | Height: | Size: 74 KiB | 
| After Width: | Height: | Size: 78 KiB | 
| After Width: | Height: | Size: 222 KiB | 
| After Width: | Height: | Size: 228 KiB | 
| After Width: | Height: | Size: 76 KiB | 
| After Width: | Height: | Size: 110 KiB | 
| After Width: | Height: | Size: 146 KiB | 
| After Width: | Height: | Size: 78 KiB | 
| After Width: | Height: | Size: 143 KiB | 
| After Width: | Height: | Size: 131 KiB | 
| After Width: | Height: | Size: 174 KiB | 
| After Width: | Height: | Size: 194 KiB | 
| After Width: | Height: | Size: 69 KiB | 
| After Width: | Height: | Size: 130 KiB | 
| After Width: | Height: | Size: 388 KiB | 
| After Width: | Height: | Size: 99 KiB | 
| After Width: | Height: | Size: 16 KiB | 
| @ -0,0 +1,607 @@ | |||||
|  | <div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;"> | ||||
|  |   <!-- 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> | ||||
|  |   </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;"> | ||||
|  |           Allocated Hour Approval</h1> | ||||
|  |         <p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;"> | ||||
|  |           This Module Allows Manager To Approve Project Task Allocation Time.</p> | ||||
|  |         <!-- END OF APP HERO --> | ||||
|  |         <img src="assets/screenshots/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 to approve allocation time that given by user,Also manager can edit the task details</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;">Community and Enterprise Support.</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;"> | ||||
|  |         Managers Can Approve Allocation Time. | ||||
|  |       </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;"> | ||||
|  |         Managers Can Edit Task Details. | ||||
|  |       </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;"> | ||||
|  |         Managers Can Cancel The Task. | ||||
|  |       </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 user access for one of the users. | ||||
|  | 
 | ||||
|  |         </p> | ||||
|  |       <img src="assets/screenshots/all_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;"> | ||||
|  |         Also set manager access for a user. | ||||
|  | 
 | ||||
|  |         </p> | ||||
|  |       <img src="assets/screenshots/all_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;"> | ||||
|  |         On user account create a task. | ||||
|  | 
 | ||||
|  |         </p> | ||||
|  |       <img src="assets/screenshots/all_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;"> | ||||
|  |         Also set allocation time,assignees,etc.,then click on 'MANAGER APPROVAL' | ||||
|  | 
 | ||||
|  |         </p> | ||||
|  |       <img src="assets/screenshots/all_6.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;"> | ||||
|  |         Stage changes to 'TO APPROVE'. | ||||
|  | 
 | ||||
|  |         </p> | ||||
|  |       <img src="assets/screenshots/all_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;"> | ||||
|  |         On Manager account,can see the 'Allocation Time Approval' menu in timesheet.Where can assign task to more assignees and also can edit the allocation time,After editing click on APPROVE. | ||||
|  | 
 | ||||
|  |         </p> | ||||
|  |       <img src="assets/screenshots/all_8.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;"> | ||||
|  |         On user account,can see the task stage is changes to 'In Progress'. Click on that task. | ||||
|  | 
 | ||||
|  |         </p> | ||||
|  |       <img src="assets/screenshots/all_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;"> | ||||
|  |         Now we can see the all changes that manager applied,After completing the task user can click on 'DONE'. | ||||
|  | 
 | ||||
|  |         </p> | ||||
|  |       <img src="assets/screenshots/all_10.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;"> | ||||
|  |         In case manager wants to cancel the task,can click on 'CANCEL' button. | ||||
|  | 
 | ||||
|  |         </p> | ||||
|  |       <img src="assets/screenshots/all_12.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;"> | ||||
|  |         On user account can see the cancelled task. | ||||
|  | 
 | ||||
|  |         </p> | ||||
|  |       <img src="assets/screenshots/all_13.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/whatsapp_redirect/" 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/hr_payroll_community/" 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/crm_dashboard/" 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/export_stockinfo_xls/" 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/sale_discount_total/" 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/fleet_rental/" 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 OUR SERVICES --> | ||||
|  | 
 | ||||
|  | <!-- OUR INDUSTRIES --> | ||||
|  | 
 | ||||
|  | <div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | ||||
|  |   <div class="d-flex justify-content-center align-items-center mr-2" | ||||
|  |     style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | ||||
|  |     <img src="assets/misc/corporate.png" /> | ||||
|  |   </div> | ||||
|  |   <h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our | ||||
|  |     Industries | ||||
|  |   </h2> | ||||
|  | </div> | ||||
|  | 
 | ||||
|  | <div class="container my-5"> | ||||
|  |   <div class="row"> | ||||
|  |     <div class="col-lg-3"> | ||||
|  |       <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |         style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |         <img src="assets/icons/trading-black.png" class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |         <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |           Trading | ||||
|  |         </h5> | ||||
|  |         <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |           Easily procure | ||||
|  |           and | ||||
|  |           sell your products</p> | ||||
|  |       </div> | ||||
|  |     </div> | ||||
|  | 
 | ||||
|  |     <div class="col-lg-3"> | ||||
|  |       <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |         style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |         <img src="assets/icons/pos-black.png" class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |         <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |           POS | ||||
|  |         </h5> | ||||
|  |         <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |           Easy | ||||
|  |           configuration | ||||
|  |           and convivial experience</p> | ||||
|  |       </div> | ||||
|  |     </div> | ||||
|  | 
 | ||||
|  |     <div class="col-lg-3"> | ||||
|  |       <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |         style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |         <img src="assets/icons/education-black.png" class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |         <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |           Education | ||||
|  |         </h5> | ||||
|  |         <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |           A platform for | ||||
|  |           educational management</p> | ||||
|  |       </div> | ||||
|  |     </div> | ||||
|  | 
 | ||||
|  |     <div class="col-lg-3"> | ||||
|  |       <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |         style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |         <img src="assets/icons/manufacturing-black.png" class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |         <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |           Manufacturing | ||||
|  |         </h5> | ||||
|  |         <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |           Plan, track and | ||||
|  |           schedule your operations</p> | ||||
|  |       </div> | ||||
|  |     </div> | ||||
|  | 
 | ||||
|  |     <div class="col-lg-3"> | ||||
|  |       <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |         style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |         <img src="assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |         <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |           E-commerce & Website | ||||
|  |         </h5> | ||||
|  |         <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |           Mobile | ||||
|  |           friendly, | ||||
|  |           awe-inspiring product pages</p> | ||||
|  |       </div> | ||||
|  |     </div> | ||||
|  | 
 | ||||
|  |     <div class="col-lg-3"> | ||||
|  |       <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |         style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |         <img src="assets/icons/service-black.png" class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |         <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |           Service Management | ||||
|  |         </h5> | ||||
|  |         <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |           Keep track of | ||||
|  |           services and invoice</p> | ||||
|  |       </div> | ||||
|  |     </div> | ||||
|  | 
 | ||||
|  |     <div class="col-lg-3"> | ||||
|  |       <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |         style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |         <img src="assets/icons/restaurant-black.png" class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |         <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |           Restaurant | ||||
|  |         </h5> | ||||
|  |         <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |           Run your bar or | ||||
|  |           restaurant methodically</p> | ||||
|  |       </div> | ||||
|  |     </div> | ||||
|  | 
 | ||||
|  |     <div class="col-lg-3"> | ||||
|  |       <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |         style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |         <img src="assets/icons/hotel-black.png" class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |         <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |           Hotel Management | ||||
|  |         </h5> | ||||
|  |         <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |           An | ||||
|  |           all-inclusive | ||||
|  |           hotel management application</p> | ||||
|  |       </div> | ||||
|  |     </div> | ||||
|  |   </div> | ||||
|  | </div> | ||||
|  | 
 | ||||
|  | <!-- END OF OUR INDUSTRIES --> | ||||
|  | 
 | ||||
|  | <!-- SUPPORT --> | ||||
|  | <div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | ||||
|  |   <div class="d-flex justify-content-center align-items-center mr-2" | ||||
|  |     style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | ||||
|  |     <img src="assets/misc/customer-support.png" /> | ||||
|  |   </div> | ||||
|  |   <h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Support | ||||
|  |   </h2> | ||||
|  | </div> | ||||
|  | <div class="container mt-5"> | ||||
|  |   <div class="row"> | ||||
|  |     <div class="col-sm-12 col-md-6"> | ||||
|  |       <div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> | ||||
|  |         <div class="mr-4 d-flex justify-content-center align-items-center" | ||||
|  |           style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> | ||||
|  |           <img src="assets/misc/support.png" height="48" width="48" style="width: 42px; height: 42px;" /> | ||||
|  |         </div> | ||||
|  |         <div> | ||||
|  |           <h4>Need Help?</h4> | ||||
|  |           <p style="line-height: 100%;">Got questions or need help? Get in touch.</p> | ||||
|  |           <a href="mailto:odoo@cybrosys.com"> | ||||
|  |             <p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;"> | ||||
|  |               odoo@cybrosys.com</p> | ||||
|  |           </a> | ||||
|  |         </div> | ||||
|  |       </div> | ||||
|  |     </div> | ||||
|  |     <div class="col-sm-12 col-md-6"> | ||||
|  |       <div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> | ||||
|  |         <div class="mr-4 d-flex justify-content-center align-items-center" | ||||
|  |           style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> | ||||
|  |           <img src="assets/misc/whatsapp.png" height="52" width="52" style="width: 52px; height: 52px;" /> | ||||
|  |         </div> | ||||
|  |         <div> | ||||
|  |           <h4>WhatsApp</h4> | ||||
|  |           <p style="line-height: 100%;">Say hi to us on WhatsApp!</p> | ||||
|  |           <a href="https://api.whatsapp.com/send?phone=918606827707"> | ||||
|  |             <p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">+91 86068 | ||||
|  |               27707</p> | ||||
|  |           </a> | ||||
|  |         </div> | ||||
|  |       </div> | ||||
|  |     </div> | ||||
|  |   </div> | ||||
|  |   <div class="row"> | ||||
|  |     <div class="col-sm-12 my-5 d-flex justify-content-center align-items-center"> | ||||
|  |       <img src="assets/misc/logo.png" width="144" height="31" style="width:144px; height: 31px; margin-top: 40px;" /> | ||||
|  |     </div> | ||||
|  |   </div> | ||||
|  | </div> | ||||
| @ -0,0 +1,37 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||
|  | <odoo> | ||||
|  |     <record id="manager_approval_view_list" model="ir.ui.view"> | ||||
|  |         <!--Create a new tree view--> | ||||
|  |         <field name="name">manager.approval.view.list</field> | ||||
|  |         <field name="model">manager.approval</field> | ||||
|  |         <field name="arch" type="xml"> | ||||
|  |             <tree string="Manager Approval" editable="top" create="false"> | ||||
|  |                 <!--Add certain fields to tree view--> | ||||
|  |                 <field name="task"/> | ||||
|  |                 <field name="project_id"/> | ||||
|  |                 <field name="user_ids" widget="many2many_avatar_user"/> | ||||
|  |                 <field name="planned_hours"/> | ||||
|  |                 <field name="button_view_boolean" invisible="1"/> | ||||
|  |                 <field name="button_view_boolean_cancel" invisible="1"/> | ||||
|  |                 <button name="action_approve" string="Approve" | ||||
|  |                         class="oe_highlight" type="object" | ||||
|  |                         attrs="{'invisible': [ | ||||
|  |                         ('button_view_boolean', '=', True)]}"/> | ||||
|  |                 <button name="action_manager_cancel" string="Cancel" | ||||
|  |                         class="oe_highlight" type="object" | ||||
|  |                         attrs="{'invisible': [ | ||||
|  |                         ('button_view_boolean_cancel', '=', True)]}"/> | ||||
|  |             </tree> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  |     <!--Action for Allocation Time Approval--> | ||||
|  |     <record id="manager_approval_action" model="ir.actions.act_window"> | ||||
|  |         <field name="name">Allocation Time Approval</field> | ||||
|  |         <field name="res_model">manager.approval</field> | ||||
|  |         <field name="view_mode">tree</field> | ||||
|  |     </record> | ||||
|  |     <!--Add a menu in Timesheet module--> | ||||
|  |     <menuitem name="Allocated Hour Approval" id="allocated_hour_approval" | ||||
|  |               action="manager_approval_action" | ||||
|  |               parent="hr_timesheet.menu_hr_time_tracking"/> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,47 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||
|  | <odoo> | ||||
|  |     <record id="view_task_form2" model="ir.ui.view"> | ||||
|  |         <!--Inherit Project from view--> | ||||
|  |         <field name="name">project.task.view.form.inherit.allocation.time.approval</field> | ||||
|  |         <field name="model">project.task</field> | ||||
|  |         <field name="inherit_id" ref="project.view_task_form2"/> | ||||
|  |         <field name="arch" type="xml"> | ||||
|  |             <!--Add certain Buttons to header portion--> | ||||
|  |             <xpath expr="//form//header"> | ||||
|  |                 <header> | ||||
|  |                     <button type="object" name="action_approval" | ||||
|  |                             attrs="{'invisible':[('new_stage','=',False)]}"> | ||||
|  |                         Manager Approval | ||||
|  |                     </button> | ||||
|  |                     <button type="object" name="action_done" | ||||
|  |                             attrs="{'invisible':[ | ||||
|  |                             ('to_progress_stage','=',False)]}"> | ||||
|  |                         Done | ||||
|  |                     </button> | ||||
|  |                     <button type="object" name="action_cancel" | ||||
|  |                             attrs="{'invisible':[ | ||||
|  |                             ('to_progress_stage','=',False)]}"> | ||||
|  |                         Cancel | ||||
|  |                     </button> | ||||
|  |                 </header> | ||||
|  |             </xpath> | ||||
|  |             <!--Add certain fields to Project form view--> | ||||
|  |             <field name="tag_ids" position="after"> | ||||
|  |                 <field name="new_stage" invisible="1"/> | ||||
|  |                 <field name="to_approve_stage" invisible="1"/> | ||||
|  |                 <field name="to_progress_stage" invisible="1"/> | ||||
|  |                 <field name="task_create_boolean"/> | ||||
|  |             </field> | ||||
|  |             <!--Make stage as readonly--> | ||||
|  |             <xpath expr="//field[@name='stage_id']" position="attributes"> | ||||
|  |                 <attribute name="options" | ||||
|  |                 >{'readonly':[('to_approve_stage', '=', True)]}</attribute> | ||||
|  |             </xpath> | ||||
|  |             <!--Make Planned Hours as readonly--> | ||||
|  |             <xpath expr="//field[@name='planned_hours']" position="attributes"> | ||||
|  |                 <attribute name="attrs" | ||||
|  |                 >{'readonly':[('to_progress_stage', '=', True)]}</attribute> | ||||
|  |             </xpath> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  | </odoo> | ||||