| @ -0,0 +1,50 @@ | |||
| .. 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 | |||
| 
 | |||
| Employee Bonus | |||
| ============== | |||
| This module will help you in managing employee bonus. | |||
| 
 | |||
| Configuration | |||
| ============= | |||
| * Add users to the three user groups | |||
|     - User: can create and submit the bonus request | |||
|     - Department Head: can approve the bonus request of users | |||
|     - Manager(HR Manager): can do the final approval | |||
| 
 | |||
| Company | |||
| ------- | |||
| * `Cybrosys Techno Solutions <https://cybrosys.com/>`__ | |||
| 
 | |||
| License | |||
| ------- | |||
| Affero General Public License v3.0 (AGPL v3) | |||
| 
 | |||
| (https://www.gnu.org/licenses/agpl-3.0-standalone.html) | |||
| 
 | |||
| Credits | |||
| ------- | |||
| Developer : (V14) Ruksana P, 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: Ruksana P  (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,53 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################### | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Ruksana P  (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': 'Employee Bonus', | |||
|     'version': '14.0.1.0.0', | |||
|     'category': 'Human Resources', | |||
|     'summary': """This module will help you in managing the employee bonus""", | |||
|     'description': """This module helps to manage the bonus for employees , the  | |||
|      user can submit the bonus request , department head can validate request  | |||
|      manager can approve the request of employees and billing administrator can | |||
|      post the journal entry. The approved bonus amount will be added to payslip | |||
|      """, | |||
|     'author': 'Cybrosys Techno Solutions', | |||
|     'company': 'Cybrosys Techno Solutions', | |||
|     'maintainer': 'Cybrosys Techno Solutions', | |||
|     'website': "https://www.cybrosys.com", | |||
|     'depends': ['account', 'hr', 'hr_payroll'], | |||
|     'data': [ | |||
|         'security/employee_bonus_manager_groups.xml', | |||
|         'security/bonus_request_security.xml', | |||
|         'security/ir.model.access.csv', | |||
|         'data/ir_sequence_data.xml', | |||
|         'data/hr_salary_rule_data.xml', | |||
|         'data/hr_payslip_input_type_data.xml', | |||
|         'views/bonus_request_views.xml', | |||
|         'views/bonus_reason_views.xml', | |||
|         'views/employee_bonus_manager_menus.xml' | |||
|     ], | |||
|     'images': ['static/description/banner.png'], | |||
|     'license': 'AGPL-3', | |||
|     'installable': True, | |||
|     'auto_install': False, | |||
|     'application': True | |||
| } | |||
| @ -0,0 +1,8 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo noupdate="1"> | |||
|     <!-- Input type Employee Bonus   --> | |||
|     <record id="hr_payslip_input_type_bonus" model="hr.payslip.input.type"> | |||
|         <field name="name">Employee Bonus</field> | |||
|         <field name="code">BONUS</field> | |||
|     </record> | |||
| </odoo> | |||
| @ -0,0 +1,13 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo noupdate="1"> | |||
|     <!-- Salary rule Employee Bonus   --> | |||
|     <record id="hr_salary_rule_bonus" model="hr.salary.rule"> | |||
|         <field name="amount_select">code</field> | |||
|         <field name="code">BONUS</field> | |||
|         <field name="category_id" ref="hr_payroll.ALW"/> | |||
|         <field name="name">Employee Bonus</field> | |||
|         <field name="sequence" eval="59"/> | |||
|         <field name="amount_python_compute">result = inputs.BONUS.amount</field> | |||
|         <field name="struct_id" ref="hr_payroll.structure_002"/> | |||
|     </record> | |||
| </odoo> | |||
| @ -0,0 +1,11 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <odoo noupdate="1"> | |||
|     <!-- Sequence number for Bonus Request --> | |||
|     <record id="ir_sequence_bonus_request" model="ir.sequence"> | |||
|         <field name="name">Bonus Request Sequence</field> | |||
|         <field name="code">bonus.request</field> | |||
|         <field name="prefix">BR/</field> | |||
|         <field name="padding">4</field> | |||
|         <field name="company_id" eval="False"/> | |||
|     </record> | |||
| </odoo> | |||
| @ -0,0 +1,6 @@ | |||
| ## Module <employee_bonus_manager> | |||
| 
 | |||
| #### 26.09.2023 | |||
| #### Version 14.0.1.0.0 | |||
| #### ADD | |||
| - Initial Commit for Employee Bonus | |||
| @ -0,0 +1,24 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################### | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Ruksana P (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 bonus_reason | |||
| from . import bonus_request | |||
| from . import hr_payslip | |||
| @ -0,0 +1,31 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################### | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Ruksana P  (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 BonusReason(models.Model): | |||
|     """ This class is used to create the bonus reasons. """ | |||
|     _name = "bonus.reason" | |||
|     _description = 'Bonus Reason Records' | |||
| 
 | |||
|     name = fields.Char(string='Reason', required=True, | |||
|                        help='Reason to be added for the bonus requests.') | |||
| @ -0,0 +1,241 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################### | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Ruksana P  (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 | |||
| 
 | |||
| 
 | |||
| class BonusRequest(models.Model): | |||
|     """ | |||
|     This class is created for model bonus.request. It contains fields and | |||
|     functions for the model. | |||
|     Methods: | |||
|         create(self, vals): | |||
|             override create function for generating sequence number for the new | |||
|             records of the model. | |||
|         action_confirm(self): | |||
|             actions to perform when clicking on the 'Confirm' button. | |||
|         action_department_approve(self): | |||
|             actions to perform when clicking on the 'Approve by Department' | |||
|             button. | |||
|         action_manager_approve(self): | |||
|             actions to perform when clicking on the 'Approve by Manager' | |||
|             button. | |||
|         action_reject(self): | |||
|             actions to perform when clicking on the 'Reject' button. | |||
|         action_reset_to_draft(self): | |||
|             actions to perform when clicking on the 'Reset to Draft' button. | |||
|     """ | |||
|     _name = 'bonus.request' | |||
|     _description = 'Create Bonus Request' | |||
|     _inherit = 'mail.thread' | |||
|     _rec_name = 'reference' | |||
| 
 | |||
|     reference = fields.Char(string='Reference Number', copy=False, | |||
|                             help='Sequence number for the bonus request.') | |||
|     state = fields.Selection([('draft', 'Draft'), ('submitted', 'Submitted'), | |||
|                               ('department_approved', 'Department Approved'), | |||
|                               ('manager_approved', 'Manager Approved'), | |||
|                               ('rejected', 'Rejected'), | |||
|                               ('accounting', 'Accounting Head Approved')], | |||
|                              string='State', default='draft', tracking=True, | |||
|                              help='State of the bonus request', copy=False, | |||
|                              group_expand='_group_expand_states') | |||
|     employee_id = fields.Many2one('hr.employee', string='Employee', store=True, | |||
|                                   required=True, tracking=True, | |||
|                                   help='The bonus will be given to this ' | |||
|                                        'employee') | |||
|     user_id = fields.Many2one('res.users', string='User', | |||
|                               related='employee_id.user_id', | |||
|                               help='The user of the employee(If any)') | |||
|     department_id = fields.Many2one('hr.department', string='Department', | |||
|                                     help='The department of the employee', | |||
|                                     store=True) | |||
|     job_id = fields.Many2one('hr.job', string='Job', store=True, | |||
|                              help='Job of the employee') | |||
|     bonus_reason_id = fields.Many2one('bonus.reason', string='Bonus Reason', | |||
|                                       help='Reason for providing the Bonus', | |||
|                                       required=True) | |||
|     confirmed_user_id = fields.Many2one('res.users', string='Confirmed by', | |||
|                                         readonly=True, copy=False, | |||
|                                         help='This field will record the name ' | |||
|                                              'of the person who confirmed ' | |||
|                                              'the bonus request.') | |||
|     confirmed_date = fields.Date(string='Confirmed Date', readonly=True, | |||
|                                  copy=False, tracking=True, | |||
|                                  help='Confirmed date of bonus request') | |||
|     bonus_amount = fields.Float(string='Bonus Amount', tracking=True, | |||
|                                 help='This amount will be given as the bonus.') | |||
|     currency_id = fields.Many2one('res.currency', string='Company Currency', | |||
|                                   readonly=True, | |||
|                                   default=lambda self: | |||
|                                   self.env.user.company_id.currency_id, | |||
|                                   help='Company Currency') | |||
|     company_id = fields.Many2one('res.company', string='Company', readonly=True, | |||
|                                  default=lambda self: self.env.company, | |||
|                                  help='Company of the user.') | |||
|     department_approved_date = fields.Date(string='Department Approved Date', | |||
|                                            readonly=True, copy=False, | |||
|                                            help='Date on which the bonus ' | |||
|                                                 'request is approved by the ' | |||
|                                                 'Department.') | |||
|     manager_approved_date = fields.Date(string='Manager Approved Date', | |||
|                                         readonly=True, copy=False, | |||
|                                         help='Date on which the bonus request ' | |||
|                                              'is approved by the Manager.') | |||
|     department_manager_id = fields.Many2one('res.users', readonly=True, | |||
|                                             help='Name of the Department Head,' | |||
|                                                  ' who approved the bonus ' | |||
|                                                  'request', copy=False, | |||
|                                             string='Department Head') | |||
|     hr_manager_id = fields.Many2one('res.users', string='Manager', copy=False, | |||
|                                     help='Name of the Manager, who approved the' | |||
|                                          ' bonus request', readonly=True) | |||
|     journal_id = fields.Many2one('account.journal', string='Bonus Journal', | |||
|                                  help='The Jornal for bonus request', | |||
|                                  company_dependent=True, required=False, | |||
|                                  domain="[('type', '=', 'general')]", | |||
|                                  states={'accounting': [('required', True)]}) | |||
|     move_id = fields.Many2one('account.move', string='Accounting Entry', | |||
|                               help='Accounting entry of bonus request', | |||
|                               readonly=True) | |||
|     credit_account_id = fields.Many2one('account.account', | |||
|                                         string='Credit Account', readonly=True, | |||
|                                         help='The credit account for creating ' | |||
|                                              'journal entry', | |||
|                                         states={'manager_approved': [ | |||
|                                             ('required', True), | |||
|                                             ('readonly', False)]}) | |||
|     debit_account_id = fields.Many2one('account.account', | |||
|                                        string='Debit Account', readonly=True, | |||
|                                        help='The debit account for creating ' | |||
|                                             'journal entry', | |||
|                                        states={'manager_approved': [ | |||
|                                            ('required', True), | |||
|                                            ('readonly', False)]}) | |||
| 
 | |||
|     @api.model | |||
|     def create(self, vals): | |||
|         """ Override the create function for creating new sequence number. | |||
|         Args: vals (dict): values for creating new records. | |||
|        Returns: models.Model: the created records of 'bonus.request'.""" | |||
|         if vals.get('reference', 'New') == 'New': | |||
|             vals['reference'] = self.env['ir.sequence'].next_by_code( | |||
|                 'bonus.request') or 'New' | |||
|         res = super(BonusRequest, self).create(vals) | |||
|         return res | |||
| 
 | |||
|     @api.onchange('employee_id') | |||
|     def _onchange_employee_id(self): | |||
|         """ When changing employee_id , the department_id and job_id of | |||
|         employee is changed """ | |||
|         if self.employee_id: | |||
|             self.department_id = self.employee_id.department_id | |||
|             self.job_id = self.employee_id.job_id | |||
| 
 | |||
|     def _group_expand_states(self, domain, states, order): | |||
|         """To add the states in the kanban view""" | |||
|         return [key for | |||
|                 key, val in type(self).state.selection] | |||
| 
 | |||
|     def action_confirm(self): | |||
|         """ Function for the 'Confirm' button to change the state to 'submitted', | |||
|         and update the confirmed user and date.""" | |||
|         self.write({ | |||
|             'state': 'submitted', | |||
|             'confirmed_user_id': self._uid, | |||
|             'confirmed_date': fields.Date.today() | |||
|         }) | |||
| 
 | |||
|     def action_department_approve(self): | |||
|         """ Function for the 'Approve by Department' button to change the state to | |||
|         'department_approved', and update the department manager and approved | |||
|         time. """ | |||
|         self.write({ | |||
|             'state': 'department_approved', | |||
|             'department_manager_id': self._uid, | |||
|             'department_approved_date': fields.Date.today() | |||
|         }) | |||
| 
 | |||
|     def action_manager_approve(self): | |||
|         """ Function for the 'Approve by Manager' button to change the state to | |||
|         'manager_approved', and update the HR manager and approved date & time. | |||
|         """ | |||
|         self.write({ | |||
|             'state': 'manager_approved', | |||
|             'hr_manager_id': self._uid, | |||
|             'manager_approved_date': fields.Date.today() | |||
|         }) | |||
| 
 | |||
|     def action_reject(self): | |||
|         """ Function for the 'Reject' button to change the state to 'rejected'. | |||
|         """ | |||
|         self.state = 'rejected' | |||
| 
 | |||
|     def action_reset_to_draft(self): | |||
|         """ Function for the 'Reset to Draft' button to change the state to | |||
|         'draft' and reset the fields which are to be updated on changing the | |||
|         states.""" | |||
|         self.write({ | |||
|             'state': 'draft', | |||
|             'confirmed_user_id': False, | |||
|             'confirmed_date': False, | |||
|             'department_manager_id': False, | |||
|             'department_approved_date': False, | |||
|             'hr_manager_id': False, | |||
|             'manager_approved_date': False | |||
|         }) | |||
| 
 | |||
|     def action_post_journal_entry(self): | |||
|         """ Function for the 'Post Journal Entry' button to create a draft | |||
|         entry for approved bonus request """ | |||
|         account_move = self.env['account.move'].create({ | |||
|             'ref': self.reference, | |||
|             'state': 'draft', | |||
|             'date': self.manager_approved_date, | |||
|             'journal_id': self.journal_id.id, | |||
|             'line_ids': [ | |||
|                 (0, 0, { | |||
|                     'account_id': self.credit_account_id.id, | |||
|                     'credit': self.bonus_amount, | |||
|                     'name': self.employee_id.name + '-' + self.reference, | |||
|                     'debit': 0.0, | |||
|                 }), | |||
|                 (0, 0, { | |||
|                     'account_id': self.debit_account_id.id, | |||
|                     'debit': self.bonus_amount, | |||
|                     'name': self.employee_id.name + '-' + self.reference, | |||
|                     'credit': 0.0, | |||
|                 }) | |||
|             ] | |||
|         }) | |||
|         account_move.state = 'posted' | |||
|         self.move_id = account_move.id | |||
|         self.state = 'accounting' | |||
| 
 | |||
|     def action_view_journal_items(self): | |||
|         """To view the journal items for the bonus request""" | |||
|         return { | |||
|             'name': 'Journal Items', | |||
|             'type': 'ir.actions.act_window', | |||
|             'res_model': 'account.move', | |||
|             'view_mode': 'form', | |||
|             'res_id': self.move_id.id | |||
|         } | |||
| @ -0,0 +1,46 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################### | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Ruksana P  (odoo@cybrosys.com) | |||
| # | |||
| #    You can modify it under the terms of the GNU AFFERO | |||
| #    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | |||
| #    (AGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################### | |||
| from odoo import api, models | |||
| 
 | |||
| 
 | |||
| class HrPayslip(models.Model): | |||
|     """ This class is used to create the bonus reasons. """ | |||
|     _inherit = "hr.payslip" | |||
| 
 | |||
|     @api.onchange('employee_id', 'date_from', 'date_to') | |||
|     def _onchange_employee_id(self): | |||
|         """ When changing employee the bonus amount for the employee will be | |||
|         loaded as other input  """ | |||
|         bonus_rule = self.env.ref( | |||
|             'employee_bonus_manager.hr_salary_rule_bonus') | |||
|         if bonus_rule.struct_id == self.struct_id: | |||
|             bonus = self.env['bonus.request'].search([ | |||
|                 ('employee_id', '=', self.employee_id.id), | |||
|                 ('state', '=', 'accounting'), ('move_id.state', '=', 'posted'), | |||
|                 ('move_id.date', '>=', self.date_from), | |||
|                 ('move_id.date', '<=', self.date_to)]) | |||
|             amount = sum(bonus.mapped('bonus_amount')) | |||
|             self.input_line_ids = [(0, 0, { | |||
|                 'input_type_id': self.env.ref( | |||
|                     'employee_bonus_manager.hr_payslip_input_type_bonus'), | |||
|                 'amount': amount, | |||
|             })] | |||
| @ -0,0 +1,12 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <odoo noupdate="1"> | |||
|     <!-- Record rules for Bonus Request --> | |||
|     <!-- Multi-company rule --> | |||
|     <record id="bonus_request_rule_company" model="ir.rule"> | |||
|         <field name="name">Bonus Request multi company rule</field> | |||
|         <field name="model_id" ref="model_bonus_request"/> | |||
|         <field name="domain_force">['|', ('company_id', '=', False), | |||
|             ('company_id', 'in', company_ids)] | |||
|         </field> | |||
|     </record> | |||
| </odoo> | |||
| @ -0,0 +1,37 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <odoo> | |||
|     <!-- Module category for the module to add the security groups --> | |||
|     <record id="module_employee_bonus_manager" model="ir.module.category"> | |||
|         <field name="name">Employee Bonus</field> | |||
|         <field name="description">Access for Employee Bonus module</field> | |||
|         <field name="sequence">50</field> | |||
|     </record> | |||
|     <!-- The security groups for the module --> | |||
|     <!-- The User group for creating bonus request --> | |||
|     <record id="employee_bonus_manager_group_user" model="res.groups"> | |||
|         <field name="name">User</field> | |||
|         <field name="category_id" ref="module_employee_bonus_manager"/> | |||
|         <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> | |||
|     </record> | |||
|     <!-- The Department Head group for validating bonus request --> | |||
|     <record id="employee_bonus_manager_group_department" model="res.groups"> | |||
|         <field name="name">Department Head</field> | |||
|         <field name="category_id" ref="module_employee_bonus_manager"/> | |||
|         <field name="implied_ids" | |||
|                eval="[(4, ref('employee_bonus_manager_group_user'))]"/> | |||
|     </record> | |||
|     <!-- The Manager group for approving bonus request --> | |||
|     <record id="employee_bonus_manager_group_manager" model="res.groups"> | |||
|         <field name="name">Manager</field> | |||
|         <field name="category_id" ref="module_employee_bonus_manager"/> | |||
|         <field name="implied_ids" | |||
|                eval="[(4, ref('employee_bonus_manager_group_department'))]"/> | |||
|         <field name="users" | |||
|                eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> | |||
|     </record> | |||
|     <!-- Add the default user to the security group User --> | |||
|     <record id="base.default_user" model="res.users"> | |||
|         <field name="groups_id" | |||
|                eval="[(4,ref('employee_bonus_manager_group_user'))]"/> | |||
|     </record> | |||
| </odoo> | |||
| 
 | 
| After Width: | Height: | Size: 3.6 KiB | 
| After Width: | Height: | Size: 310 B | 
| After Width: | Height: | Size: 1.3 KiB | 
| After Width: | Height: | Size: 1.4 KiB | 
| After Width: | Height: | Size: 576 B | 
| After Width: | Height: | Size: 733 B | 
| After Width: | Height: | Size: 911 B | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 673 B | 
| After Width: | Height: | Size: 878 B | 
| After Width: | Height: | Size: 653 B | 
| After Width: | Height: | Size: 905 B | 
| After Width: | Height: | Size: 839 B | 
| After Width: | Height: | Size: 427 B | 
| After Width: | Height: | Size: 627 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 988 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 1.5 KiB | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 1.9 KiB | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 2.1 KiB | 
| After Width: | Height: | Size: 4.4 KiB | 
| After Width: | Height: | Size: 589 B | 
| After Width: | Height: | Size: 3.4 KiB | 
| After Width: | Height: | Size: 1.7 KiB | 
| After Width: | Height: | Size: 2.3 KiB | 
| After Width: | Height: | Size: 967 B | 
| After Width: | Height: | Size: 1.6 KiB | 
| After Width: | Height: | Size: 3.8 KiB | 
| After Width: | Height: | Size: 5.0 KiB | 
| After Width: | Height: | Size: 60 KiB | 
| After Width: | Height: | Size: 59 KiB | 
| After Width: | Height: | Size: 56 KiB | 
| After Width: | Height: | Size: 48 KiB | 
| After Width: | Height: | Size: 54 KiB | 
| After Width: | Height: | Size: 71 KiB | 
| After Width: | Height: | Size: 159 KiB | 
| After Width: | Height: | Size: 142 KiB | 
| After Width: | Height: | Size: 144 KiB | 
| After Width: | Height: | Size: 149 KiB | 
| After Width: | Height: | Size: 158 KiB | 
| After Width: | Height: | Size: 169 KiB | 
| After Width: | Height: | Size: 125 KiB | 
| After Width: | Height: | Size: 110 KiB | 
| After Width: | Height: | Size: 137 KiB | 
| After Width: | Height: | Size: 193 KiB | 
| After Width: | Height: | Size: 187 KiB | 
| After Width: | Height: | Size: 185 KiB | 
| After Width: | Height: | Size: 90 KiB | 
| After Width: | Height: | Size: 93 KiB | 
| After Width: | Height: | Size: 94 KiB | 
| After Width: | Height: | Size: 163 KiB | 
| After Width: | Height: | Size: 190 KiB | 
| After Width: | Height: | Size: 64 KiB | 
| After Width: | Height: | Size: 108 KiB | 
| After Width: | Height: | Size: 126 KiB | 
| After Width: | Height: | Size: 130 KiB | 
| After Width: | Height: | Size: 136 KiB | 
| After Width: | Height: | Size: 548 KiB | 
| After Width: | Height: | Size: 72 KiB | 
| After Width: | Height: | Size: 8.6 KiB | 
| @ -0,0 +1,705 @@ | |||
| <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: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" | |||
|                  class="mr-2"> | |||
|                 <i class="fa fa-check mr-1"></i>Enterprise | |||
|             </div> | |||
|             <div style="color: #017E84; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" | |||
|                  class="mr-2"> | |||
|                 <i class="fa fa-check mr-1"></i>Odoo.sh | |||
|             </div> | |||
|         </div> | |||
|     </div> | |||
|     <!-- END OF TITLE BAR --> | |||
|     <div class="container"> | |||
|         <div class="row"> | |||
|             <div class="col-sm-12 col-md-12 col-lg-12"> | |||
|                 <!-- APP HERO --> | |||
|                 <h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;"> | |||
|                     Employee Bonus</h1> | |||
|                 <p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;"> | |||
|                     It Helps To Manage The Bonuses Of The Employees.</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 provides an option to manage the | |||
|         bonuses of the employees. The user, department head, or managers can | |||
|         create the bonus request for the employees. The bonus will be approved | |||
|         after the three level approvals. The final approved bonus amount is | |||
|         reimbursed | |||
|         in next payslip of the employee. | |||
|     </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"> | |||
|         <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;">Easy to manage Employee Bonus.</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;">Three user groups - User, Department Head and Manager.</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;">User can create the bonus request for the employees.</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;">Department head, Manager and Accounting head can approve or reject the requests.</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;">The Accounting head approved bonus amount will reimburse in next payslip of employee.</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;">Easy to use.</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;"> | |||
|                 There will be three user groups. | |||
|             </h3> | |||
|             <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | |||
|                 User with billing access.</p> | |||
|             <img src="assets/screenshots/1.png" class="img-thumbnail"> | |||
|             <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | |||
|                 Department Head with billing access.</p> | |||
|             <img src="assets/screenshots/2.png" class="img-thumbnail"> | |||
|             <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | |||
|                 Manager with billing access.</p> | |||
|             <img src="assets/screenshots/3.png" class="img-thumbnail"> | |||
|             <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | |||
|                 User/Department head/Manager with billing administrator | |||
|                 access.</p> | |||
|             <img src="assets/screenshots/4.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 Separate menu for bonus reasons. Here, you can create bonus | |||
|                 reasons which has to be provided when creating the bonus | |||
|                 request. | |||
|             </h3> | |||
|             <img src="assets/screenshots/5.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 The user can create and confirm bonus requests for the | |||
|                 employees. | |||
|             </h3> | |||
|             <img src="assets/screenshots/6.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 Once it is submitted, the state will be changed to SUBMITTED | |||
|                 and the name of the submitted person and submitted date will | |||
|                 be recorded. Next, it has to be approved by the department | |||
|                 head/ manager. | |||
|             </h3> | |||
|             <img src="assets/screenshots/7.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 The department head/ manager can approve or reject the request. | |||
|             </h3> | |||
|             <img src="assets/screenshots/8.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 If rejected, it will go to the REJECTED state. And if needed, it | |||
|                 can be reset to the DRAFT state. | |||
|             </h3> | |||
|             <img src="assets/screenshots/9.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 Once the request is approved by the department head, it will | |||
|                 move on to the DEPARTMENT APPROVED state. | |||
|                 The name of the department head and approved date will | |||
|                 be recorded. Next, it has to be approved by the manager. | |||
|             </h3> | |||
|             <img src="assets/screenshots/10.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 The manager can approve or reject the request. | |||
|             </h3> | |||
|             <img src="assets/screenshots/11.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 Once the request is approved by the manager, it will move to the | |||
|                 MANAGER APPROVED state. | |||
|                 The name of the manager and approved date will be recorded. The | |||
|                 changes will also be visible in the chatter. | |||
|             </h3> | |||
|             <img src="assets/screenshots/12.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 The accounting head can edit the Accounting Information and | |||
|                 click the ACCOUNTING HEAD APPROVAL (final approval)button to | |||
|                 post the journal entries. | |||
|             </h3> | |||
|             <img src="assets/screenshots/13.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 Once the request is approved by the accounting | |||
|                 head, it will move to the ACCOUNTING HEAD APPROVED state. | |||
|             </h3> | |||
|             <img src="assets/screenshots/14.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 Now, we can see the corresponding journal entries for bonus | |||
|                 request by clicking Journal Items smart button | |||
|             </h3> | |||
|             <img src="assets/screenshots/15.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 The salary rule for bonus is loaded. | |||
|             </h3> | |||
|             <img src="assets/screenshots/16.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 When calculating payslip for employee, the bonus amount is | |||
|                 loaded as Other Input for those who have the final approved | |||
|                 bonus | |||
|                 request for the dates of payslip. | |||
|             </h3> | |||
|             <img src="assets/screenshots/17.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 When computing sheet, the bonus rule is taken account. | |||
|             </h3> | |||
|             <img src="assets/screenshots/18.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 Separate menus will be available for viewing all bonus requests | |||
|                 and, the requests to be approved by the department and the | |||
|                 manager and accounting head. | |||
|                 The users can see only the All Requests menu and view their own | |||
|                 requests. | |||
|             </h3> | |||
|             <img src="assets/screenshots/19.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 Department Approval menu will display all the confirmed bonus | |||
|                 requests which are ready for the Department approval. | |||
|             </h3> | |||
|             <img src="assets/screenshots/20.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 Manager Approval menu will display all the confirmed bonus | |||
|                 requests which are ready for the Manager approval. | |||
|             </h3> | |||
|             <img src="assets/screenshots/21.png" class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 Accounting Head Approval menu will display all the manager | |||
|                 approved bonus | |||
|                 requests which are ready for the Accounting Head approval. | |||
|             </h3> | |||
|             <img src="assets/screenshots/22.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-lg-12 d-flex flex-column justify-content-center" | |||
|          style="text-align: center; padding: 2.5rem 1rem !important;"> | |||
|         <h2 style="color: #212529 !important;">Suggested Products</h2> | |||
|         <hr | |||
|                 style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/> | |||
|         <div id="demo1" class="row carousel slide" data-ride="carousel"> | |||
|             <!-- The slideshow --> | |||
|             <div class="carousel-inner"> | |||
|                 <div class="carousel-item active" style="min-height:0px"> | |||
|                     <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | |||
|                          style="float:left"> | |||
|                         <a href="https://apps.odoo.com/apps/modules/14.0/employee_documents_expiry/" | |||
|                            target="_blank"> | |||
|                             <div style="border-radius:10px"> | |||
|                                 <img class="img img-responsive center-block" | |||
|                                      style="border-top-left-radius:10px; border-top-right-radius:10px" | |||
|                                      src="./assets/modules/employee_document.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/14.0/timesheets_by_employee/" | |||
|                            target="_blank"> | |||
|                             <div style="border-radius:10px"> | |||
|                                 <img class="img img-responsive center-block" | |||
|                                      style="border-top-left-radius:10px; border-top-right-radius:10px" | |||
|                                      src="./assets/modules/employee_timesheet.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/14.0/employee_covid_vaccination_info/" | |||
|                            target="_blank"> | |||
|                             <div style="border-radius:10px"> | |||
|                                 <img class="img img-responsive center-block" | |||
|                                      style="border-top-left-radius:10px; border-top-right-radius:10px" | |||
|                                      src="./assets/modules/employee_covid_info.png"> | |||
|                             </div> | |||
|                         </a> | |||
|                     </div> | |||
|                 </div> | |||
|                 <div class="carousel-item" style="min-height:0px"> | |||
|                     <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | |||
|                          style="float:left"> | |||
|                         <a href="https://apps.odoo.com/apps/modules/14.0/hr_vacation_mngmt/" | |||
|                            target="_blank"> | |||
|                             <div style="border-radius:10px"> | |||
|                                 <img class="img img-responsive center-block" | |||
|                                      style="border-top-left-radius:10px; border-top-right-radius:10px" | |||
|                                      src="./assets/modules/vacation.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/14.0/ohrms_holidays_approval/" | |||
|                            target="_blank"> | |||
|                             <div style="border-radius:10px"> | |||
|                                 <img class="img img-responsive center-block" | |||
|                                      style="border-top-left-radius:10px; border-top-right-radius:10px" | |||
|                                      src="./assets/modules/leave_approval.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/14.0/ohrms_overtime/" | |||
|                            target="_blank"> | |||
|                             <div style="border-radius:10px"> | |||
|                                 <img class="img img-responsive center-block" | |||
|                                      style="border-top-left-radius:10px; border-top-right-radius:10px" | |||
|                                      src="./assets/modules/over_time.png"> | |||
|                             </div> | |||
|                         </a> | |||
|                     </div> | |||
|                 </div> | |||
|             </div> | |||
|             <!-- Left and right controls --> | |||
|             <a class="carousel-control-prev" href="#demo1" data-slide="prev" | |||
|                style="left:-25px;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="right:-25px;width: 35px;color: #000;"> | |||
|                     <span class="carousel-control-next-icon"><i | |||
|                             class="fa fa-chevron-right" | |||
|                             style="font-size:24px"></i></span> | |||
|         </a> | |||
|         </div> | |||
|     </div> | |||
| </div> | |||
| <!-- END OF RELATED PRODUCTS --> | |||
| 
 | |||
| <!-- OUR SERVICES --> | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="assets/misc/star.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Our Services</h2> | |||
| </div> | |||
| <div class="container my-5"> | |||
|     <div class="row"> | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/cogs.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo Customization</h6> | |||
|         </div> | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/wrench.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo Implementation</h6> | |||
|         </div> | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/lifebuoy.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo Support</h6> | |||
|         </div> | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/user.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Hire Odoo Developer</h6> | |||
|         </div> | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #54a0ff  !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/puzzle.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo Integration</h6> | |||
|         </div> | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/update.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo Migration</h6> | |||
|         </div> | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/consultation.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo Consultancy</h6> | |||
|         </div> | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/training.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo Implementation</h6> | |||
|         </div> | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/license.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo Licensing Consultancy</h6> | |||
|         </div> | |||
|     </div> | |||
| </div> | |||
| <!-- END OF OUR SERVICES --> | |||
| 
 | |||
| <!-- OUR INDUSTRIES --> | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="assets/misc/corporate.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Our Industries</h2> | |||
| </div> | |||
| <div class="container my-5"> | |||
|     <div class="row"> | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/trading-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Trading</h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Easily procure and sell your products</p> | |||
|             </div> | |||
|         </div> | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/pos-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     POS</h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Easy configuration and convivial experience</p> | |||
|             </div> | |||
|         </div> | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/education-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Education</h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     A platform for educational management</p> | |||
|             </div> | |||
|         </div> | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/manufacturing-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Manufacturing</h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Plan, track and schedule your operations</p> | |||
|             </div> | |||
|         </div> | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/ecom-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     E-commerce & Website</h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Mobile friendly, awe-inspiring product pages</p> | |||
|             </div> | |||
|         </div> | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/service-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Service Management</h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Keep track of services and invoice</p> | |||
|             </div> | |||
|         </div> | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/restaurant-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Restaurant</h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Run your bar or restaurant methodically</p> | |||
|             </div> | |||
|         </div> | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/hotel-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Hotel Management</h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     An all-inclusive hotel management application</p> | |||
|             </div> | |||
|         </div> | |||
|     </div> | |||
| </div> | |||
| <!-- END OF OUR INDUSTRIES --> | |||
| 
 | |||
| <!-- SUPPORT --> | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="assets/misc/customer-support.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Support</h2> | |||
| </div> | |||
| <div class="container mt-5"> | |||
|     <div class="row"> | |||
|         <div class="col-sm-12 col-md-6"> | |||
|             <div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> | |||
|                 <div class="mr-4 d-flex justify-content-center align-items-center" | |||
|                      style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> | |||
|                     <img src="assets/misc/support.png" height="48" width="48" | |||
|                          style="width: 42px; height: 42px;"/> | |||
|                 </div> | |||
|                 <div> | |||
|                     <h4>Need Help?</h4> | |||
|                     <p style="line-height: 100%;">Got questions or need help? | |||
|                         Get in touch.</p> | |||
|                     <a href="mailto:odoo@cybrosys.com"> | |||
|                         <p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;"> | |||
|                             odoo@cybrosys.com</p> | |||
|                     </a> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <div class="col-sm-12 col-md-6"> | |||
|             <div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> | |||
|                 <div class="mr-4 d-flex justify-content-center align-items-center" | |||
|                      style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> | |||
|                     <img src="assets/misc/whatsapp.png" height="52" width="52" | |||
|                          style="width: 52px; height: 52px;"/> | |||
|                 </div> | |||
|                 <div> | |||
|                     <h4>WhatsApp</h4> | |||
|                     <p style="line-height: 100%;">Say hi to us on WhatsApp!</p> | |||
|                     <a href="https://api.whatsapp.com/send?phone=918606827707"> | |||
|                         <p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;"> | |||
|                             +91 86068 27707</p> | |||
|                     </a> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|     </div> | |||
|     <div class="row"> | |||
|         <div class="col-sm-12 my-5 d-flex justify-content-center align-items-center"> | |||
|             <img src="assets/misc/logo.png" width="144" height="31" | |||
|                  style="width:144px; height: 31px; margin-top: 40px;"/> | |||
|         </div> | |||
|     </div> | |||
| </div> | |||
| <!-- END OF SUPPORT --> | |||
| @ -0,0 +1,41 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!-- Tree view for Bonus Reasons --> | |||
|     <record id="bonus_reason_view_tree" model="ir.ui.view"> | |||
|         <field name="name">bonus.reason.view.tree</field> | |||
|         <field name="model">bonus.reason</field> | |||
|         <field name="arch" type="xml"> | |||
|             <tree string="Bonus Reasons" editable="bottom" sample="1"> | |||
|                 <field name="name"/> | |||
|             </tree> | |||
|         </field> | |||
|     </record> | |||
|     <!-- Form view for Bonus Reason --> | |||
|     <record id="bonus_reason_view_from" model="ir.ui.view"> | |||
|         <field name="name">bonus.reason.view.form</field> | |||
|         <field name="model">bonus.reason</field> | |||
|         <field name="arch" type="xml"> | |||
|             <form string="Bonus Reason"> | |||
|                 <sheet> | |||
|                     <div class="oe_title"> | |||
|                         <label for="name"/> | |||
|                         <h1> | |||
|                             <field name="name" placeholder="e.g. Sales Profit"/> | |||
|                         </h1> | |||
|                     </div> | |||
|                 </sheet> | |||
|             </form> | |||
|         </field> | |||
|     </record> | |||
|     <!-- Action window for Bonus Reason --> | |||
|     <record id="bonus_reason_action" model="ir.actions.act_window"> | |||
|         <field name="name">Bonus Reasons</field> | |||
|         <field name="res_model">bonus.reason</field> | |||
|         <field name="view_id" ref="bonus_reason_view_tree"/> | |||
|         <field name="help" type="html"> | |||
|             <p class="o_view_nocontent_smiling_face"> | |||
|                 Add new bonus reasons | |||
|             </p> | |||
|         </field> | |||
|     </record> | |||
| </odoo> | |||
| @ -0,0 +1,353 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!-- Form view for Bonus Request --> | |||
|     <record id="bonus_request_view_form" model="ir.ui.view"> | |||
|         <field name="name">bonus.request.view.form</field> | |||
|         <field name="model">bonus.request</field> | |||
|         <field name="arch" type="xml"> | |||
|             <form> | |||
|                 <header> | |||
|                     <field name="state" widget="statusbar" | |||
|                            statusbar_visible="draft,submitted,department_approved,manager_approved,accounting,posted"/> | |||
|                     <button name="action_confirm" type="object" string="Submit" | |||
|                             attrs="{'invisible':[('state','!=','draft')]}" | |||
|                             class="btn-primary"/> | |||
|                     <button name="action_department_approve" type="object" | |||
|                             string="Approve by Department" | |||
|                             attrs="{'invisible':[('state','!=','submitted')]}" | |||
|                             class="btn-primary" | |||
|                             groups="employee_bonus_manager.employee_bonus_manager_group_department"/> | |||
|                     <button name="action_manager_approve" type="object" | |||
|                             string="Approve by Manager" | |||
|                             attrs="{'invisible':[('state','!=','department_approved')]}" | |||
|                             class="btn-primary" | |||
|                             groups="employee_bonus_manager.employee_bonus_manager_group_manager"/> | |||
|                     <button name="action_reject" type="object" string="Reject" | |||
|                             groups="employee_bonus_manager.employee_bonus_manager_group_department" | |||
|                             attrs="{'invisible':[('state','!=','submitted')]}"/> | |||
|                     <button name="action_reject" type="object" string="Reject" | |||
|                             groups="employee_bonus_manager.employee_bonus_manager_group_manager" | |||
|                             attrs="{'invisible':[('state','!=','department_approved')]}"/> | |||
|                     <button name="action_reset_to_draft" type="object" | |||
|                             string="Reset to Draft" | |||
|                             groups="employee_bonus_manager.employee_bonus_manager_group_department" | |||
|                             attrs="{'invisible':[('state','!=','rejected')]}"/> | |||
|                     <button name="action_post_journal_entry" type="object" | |||
|                             string="Accounting Head Approval" | |||
|                             groups="account.group_account_manager" | |||
|                             attrs="{'invisible':[('state','!=','manager_approved')]}"/> | |||
|                 </header> | |||
|                 <sheet> | |||
|                     <div name="button_box" class="oe_button_box"> | |||
|                         <button class="oe_stat_button" type="object" | |||
|                                 name="action_view_journal_items" | |||
|                                 attrs="{'invisible' : [('move_id','=',False)]}" | |||
|                                 icon="fa-bars"> | |||
|                             <div class="o_field_widget o_stat_info"> | |||
|                                 <span class="o_stat_text">Journal</span> | |||
|                                 <span class="o_stat_text">Items</span> | |||
|                             </div> | |||
|                         </button> | |||
|                     </div> | |||
|                     <h1> | |||
|                         <field name="reference" readonly="1"/> | |||
|                     </h1> | |||
|                     <h2> | |||
|                         <field name="employee_id" | |||
|                                attrs="{'readonly':[('state','!=','draft')]}"/> | |||
|                     </h2> | |||
|                     <group> | |||
|                         <group> | |||
|                             <field name="department_id"/> | |||
|                             <field name="job_id"/> | |||
|                             <field name="bonus_reason_id" | |||
|                                    attrs="{'readonly':[('state','!=','draft')]}"/> | |||
|                         </group> | |||
|                         <group> | |||
|                             <field name="create_date"/> | |||
|                             <field name="bonus_amount" widget="monetary" | |||
|                                    attrs="{'readonly':[('state','not in',('draft','submitted'))]}"/> | |||
|                             <field name="currency_id" invisible="1"/> | |||
|                         </group> | |||
|                     </group> | |||
|                     <notebook> | |||
|                         <page string="Extra Information"> | |||
|                             <group> | |||
|                                 <group> | |||
|                                     <field name="confirmed_date"/> | |||
|                                     <field name="department_manager_id"/> | |||
|                                     <field name="department_approved_date"/> | |||
|                                 </group> | |||
|                                 <group> | |||
|                                     <field name="confirmed_user_id"/> | |||
|                                     <field name="hr_manager_id"/> | |||
|                                     <field name="manager_approved_date"/> | |||
|                                 </group> | |||
|                             </group> | |||
|                         </page> | |||
|                         <page string="Accounting Information" | |||
|                               groups="account.group_account_manager" | |||
|                               attrs="{'invisible': [('state', 'not in' , ['manager_approved','accounting'])]}"> | |||
|                             <group> | |||
|                                 <group> | |||
|                                     <field name="journal_id"/> | |||
|                                     <field name="move_id"/> | |||
|                                 </group> | |||
|                                 <group> | |||
|                                     <field name="credit_account_id"/> | |||
|                                     <field name="debit_account_id"/> | |||
|                                 </group> | |||
|                             </group> | |||
|                         </page> | |||
|                     </notebook> | |||
|                 </sheet> | |||
|                 <div class="oe_chatter"> | |||
|                     <field name="message_follower_ids" widget="mail_followers"/> | |||
|                     <field name="message_ids" widget="mail_thread"/> | |||
|                 </div> | |||
|             </form> | |||
|         </field> | |||
|     </record> | |||
|     <!-- Tree view for Bonus Requests --> | |||
|     <record id="bonus_request_view_tree" model="ir.ui.view"> | |||
|         <field name="name">bonus.request.view.tree</field> | |||
|         <field name="model">bonus.request</field> | |||
|         <field name="arch" type="xml"> | |||
|             <tree default_order='create_date' | |||
|                   decoration-warning="state == 'draft'" | |||
|                   decoration-info="state == 'department_approved'" | |||
|                   decoration-success="state == 'manager_approved'" | |||
|                   decoration-danger="state == 'rejected'"> | |||
|                 <field name="reference"/> | |||
|                 <field name="employee_id"/> | |||
|                 <field name="department_id"/> | |||
|                 <field name="job_id"/> | |||
|                 <field name="bonus_reason_id"/> | |||
|                 <field name="create_date" optional="show"/> | |||
|                 <field name="confirmed_date" optional="hide"/> | |||
|                 <field name="confirmed_user_id" optional="hide"/> | |||
|                 <field name="bonus_amount" widget="monetary"/> | |||
|                 <field name="currency_id" invisible="1"/> | |||
|                 <field name="department_approved_date" optional="hide"/> | |||
|                 <field name="manager_approved_date" optional="hide"/> | |||
|                 <field name="department_manager_id" optional="hide"/> | |||
|                 <field name="hr_manager_id" optional="hide"/> | |||
|                 <field name="state" string="State" widget="badge" | |||
|                        decoration-warning="state == 'draft'" | |||
|                        decoration-info="state == 'department_approved'" | |||
|                        decoration-success="state == 'manager_approved'" | |||
|                        decoration-danger="state == 'rejected'"/> | |||
|             </tree> | |||
|         </field> | |||
|     </record> | |||
|     <!-- Kanban view for Bonus Requests --> | |||
|     <record id="bonus_request_view_kanban" model="ir.ui.view"> | |||
|         <field name="name">bonus.request.view.kanban</field> | |||
|         <field name="model">bonus.request</field> | |||
|         <field name="arch" type="xml"> | |||
|             <kanban class="o_bonus_request_kanban" records_draggable="0" | |||
|                     default_group_by="state" default_order="state"> | |||
|                 <field name="reference"/> | |||
|                 <field name="employee_id"/> | |||
|                 <field name="department_id"/> | |||
|                 <field name="job_id"/> | |||
|                 <field name="bonus_reason_id"/> | |||
|                 <field name="create_date"/> | |||
|                 <field name="confirmed_date" optional="show"/> | |||
|                 <field name="bonus_amount" widget="monetary"/> | |||
|                 <field name="currency_id" invisible="1"/> | |||
|                 <field name="department_approved_date" optional="show"/> | |||
|                 <field name="manager_approved_date" optional="show"/> | |||
|                 <field name="department_manager_id" optional="show"/> | |||
|                 <field name="hr_manager_id" optional="show"/> | |||
|                 <field name="state"/> | |||
|                 <templates> | |||
|                     <t t-name="kanban-box"> | |||
|                         <div t-attf-class="oe_kanban_global_click"> | |||
|                             <div class="oe_kanban_details"> | |||
|                                 <strong class="o_kanban_record_title"> | |||
|                                     <div class="float-end"> | |||
|                                         <field name="create_date"/> | |||
|                                     </div> | |||
|                                     <field name="employee_id"/> | |||
|                                     <br/> | |||
|                                     <field name="bonus_reason_id"/> | |||
|                                 </strong> | |||
|                                 <div> | |||
|                                     <field name="bonus_amount" | |||
|                                            widget="monetary"/> | |||
|                                     <field name="currency_id" invisible="1"/> | |||
|                                 </div> | |||
|                                 <div class="o_kanban_record_bottom flex-wrap"> | |||
|                                     <div class="oe_kanban_bottom_left"> | |||
|                                         <t t-esc="record.reference.value"/> | |||
|                                     </div> | |||
|                                     <div class="oe_kanban_bottom_right"> | |||
|                                         <t t-esc="record.state.value"/> | |||
|                                     </div> | |||
|                                 </div> | |||
|                             </div> | |||
|                         </div> | |||
|                     </t> | |||
|                 </templates> | |||
|             </kanban> | |||
|         </field> | |||
|     </record> | |||
|     <!-- Graph view for Bonus Requests --> | |||
|     <record id="bonus_request_view_graph" model="ir.ui.view"> | |||
|         <field name="name">bonus.request.view.graph</field> | |||
|         <field name="model">bonus.request</field> | |||
|         <field name="arch" type="xml"> | |||
|             <graph string="Bonus Request"> | |||
|                 <field name="employee_id"/> | |||
|                 <field name="state"/> | |||
|             </graph> | |||
|         </field> | |||
|     </record> | |||
|     <!-- Pivot view for Bonus Requests --> | |||
|     <record id="bonus_request_view_pivot" model="ir.ui.view"> | |||
|         <field name="name">bonus.request.view.pivot</field> | |||
|         <field name="model">bonus.request</field> | |||
|         <field name="arch" type="xml"> | |||
|             <pivot string="Bonus Request"> | |||
|                 <field name="employee_id"/> | |||
|                 <field name="state"/> | |||
|             </pivot> | |||
|         </field> | |||
|     </record> | |||
|     <!-- Calendar view for Bonus Requests --> | |||
|     <record id="bonus_request_view_calendar" model="ir.ui.view"> | |||
|         <field name="name">bonus.request.view.calendar</field> | |||
|         <field name="model">bonus.request</field> | |||
|         <field name="priority" eval="2"/> | |||
|         <field name="arch" type="xml"> | |||
|             <calendar string="Bonus Requests" create="0" mode="month" | |||
|                       date_start="create_date" color="state" hide_time="true" | |||
|                       event_limit="5"> | |||
|                 <field name="employee_id"/> | |||
|                 <field name="department_id"/> | |||
|                 <field name="job_id"/> | |||
|                 <field name="bonus_reason_id"/> | |||
|                 <field name="create_date"/> | |||
|                 <field name="confirmed_date"/> | |||
|                 <field name="bonus_amount" widget="monetary"/> | |||
|                 <field name="currency_id" invisible="1"/> | |||
|                 <field name="department_approved_date"/> | |||
|                 <field name="manager_approved_date"/> | |||
|                 <field name="department_manager_id"/> | |||
|                 <field name="hr_manager_id"/> | |||
|             </calendar> | |||
|         </field> | |||
|     </record> | |||
|     <!-- Search view for Bonus Requests --> | |||
|     <record id="bonus_request_view_search" model="ir.ui.view"> | |||
|         <field name="name">bonus.request.view.search</field> | |||
|         <field name="model">bonus.request</field> | |||
|         <field name="arch" type="xml"> | |||
|             <search> | |||
|                 <field name="reference"/> | |||
|                 <field name="employee_id"/> | |||
|                 <field name="department_id"/> | |||
|                 <field name="job_id"/> | |||
|                 <field name="bonus_reason_id"/> | |||
|                 <field name="create_date"/> | |||
|                 <field name="confirmed_date" optional="show"/> | |||
|                 <field name="bonus_amount" widget="monetary"/> | |||
|                 <field name="currency_id" invisible="1"/> | |||
|                 <field name="department_approved_date" optional="show"/> | |||
|                 <field name="manager_approved_date" optional="show"/> | |||
|                 <field name="department_manager_id" optional="show"/> | |||
|                 <field name="hr_manager_id" optional="show"/> | |||
|                 <field name="state"/> | |||
|                 <group expand="0" string="Group By"> | |||
|                     <filter name="group_by_state" string="Status" | |||
|                             context="{'group_by': 'state'}"/> | |||
|                     <filter name="group_by_employee_id" string="Employee" | |||
|                             context="{'group_by': 'employee_id'}"/> | |||
|                     <filter name="group_by_create_date" string="Created Date" | |||
|                             context="{'group_by': 'create_date'}"/> | |||
|                     <filter name="group_by_department_id" string="Department" | |||
|                             context="{'group_by': 'department_id'}"/> | |||
|                     <filter name="group_by_job_id" string="Job" | |||
|                             context="{'group_by': 'job_id'}"/> | |||
|                 </group> | |||
|                 <filter name="confirmed_today" string="Confirmed Today" | |||
|                         domain="[('confirmed_date', '=', datetime.datetime.now().strftime('%Y-%m-%d'))]"/> | |||
|                 <filter name="department_approved_date_today" | |||
|                         string="Department Approved: Today" | |||
|                         domain="[('department_approved_date', '=', datetime.datetime.now().strftime('%Y-%m-%d'))]"/> | |||
|                 <filter name="manager_approved_date_today" | |||
|                         string="Manager Approved: Today" | |||
|                         domain="[('manager_approved_date', '=', datetime.datetime.now().strftime('%Y-%m-%d'))]"/> | |||
|                 <filter name="draft" string="Draft" | |||
|                         domain="[('state', '=','draft' )]"/> | |||
|                 <filter name="submitted" string="Confirmed" | |||
|                         domain="[('state', '=','submitted' )]"/> | |||
|                 <filter name="department_approved" | |||
|                         string="Approval by Department" | |||
|                         domain="[('state', '=','department_approved' )]"/> | |||
|                 <filter name="manager_approved" string="Approval by Manager" | |||
|                         domain="[('state', '=','manager_approved' )]"/> | |||
|                 <filter name="rejected" string="Rejected" | |||
|                         domain="[('state', '=','rejected' )]"/> | |||
|             </search> | |||
|         </field> | |||
|     </record> | |||
|     <!-- Action window for Bonus Request --> | |||
|     <record id="bonus_request_action" model="ir.actions.act_window"> | |||
|         <field name="name">Bonus Requests</field> | |||
|         <field name="res_model">bonus.request</field> | |||
|         <field name="view_mode">tree,kanban,graph,pivot,calendar,form</field> | |||
|         <field name="search_view_id" ref="bonus_request_view_search"/> | |||
|         <field name="help" type="html"> | |||
|             <p class="o_view_nocontent_smiling_face"> | |||
|                 Create new bonus request | |||
|             </p> | |||
|         </field> | |||
|     </record> | |||
|     <!-- Action window for Bonus Request: for Department Approval --> | |||
|     <record id="bonus_request_department_action" model="ir.actions.act_window"> | |||
|         <field name="name">Department Approval</field> | |||
|         <field name="type">ir.actions.act_window</field> | |||
|         <field name="res_model">bonus.request</field> | |||
|         <field name="view_mode">tree,kanban,graph,pivot,calendar,form</field> | |||
|         <field name="context">{'create': False}</field> | |||
|         <field name="domain">[('state','=','submitted')]</field> | |||
|         <field name="search_view_id" ref="bonus_request_view_search"/> | |||
|         <field name="help" type="html"> | |||
|             <p class="o_view_nocontent_smiling_face"> | |||
|                 No requests found for department approval | |||
|             </p> | |||
|         </field> | |||
|     </record> | |||
|     <!-- Action window for Bonus Request: for Manager Approval --> | |||
|     <record id="bonus_request_manager_action" model="ir.actions.act_window"> | |||
|         <field name="name">Manager Approval</field> | |||
|         <field name="type">ir.actions.act_window</field> | |||
|         <field name="res_model">bonus.request</field> | |||
|         <field name="view_mode">tree,kanban,graph,pivot,calendar,form</field> | |||
|         <field name="context">{'create': False}</field> | |||
|         <field name="domain">[('state','=','department_approved')]</field> | |||
|         <field name="search_view_id" ref="bonus_request_view_search"/> | |||
|         <field name="help" type="html"> | |||
|             <p class="o_view_nocontent_smiling_face"> | |||
|                 No requests found for Manager approval | |||
|             </p> | |||
|         </field> | |||
|     </record> | |||
|     <!-- Action window for Bonus Request: for Accounting Head --> | |||
|     <record id="bonus_request_accounting_action" model="ir.actions.act_window"> | |||
|         <field name="name">Accounting Head Approval</field> | |||
|         <field name="type">ir.actions.act_window</field> | |||
|         <field name="res_model">bonus.request</field> | |||
|         <field name="view_mode">tree,kanban,graph,pivot,calendar,form</field> | |||
|         <field name="context">{'create': False}</field> | |||
|         <field name="domain">[('state','=','manager_approved')]</field> | |||
|         <field name="search_view_id" ref="bonus_request_view_search"/> | |||
|         <field name="help" type="html"> | |||
|             <p class="o_view_nocontent_smiling_face"> | |||
|                 No requests found for Accounting Head | |||
|             </p> | |||
|         </field> | |||
|     </record> | |||
| </odoo> | |||
| @ -0,0 +1,49 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <odoo> | |||
|     <!-- Root Menu for the module --> | |||
|     <menuitem id="employee_bonus_manager_menu_root" name="Bonus Requests" | |||
|               web_icon="employee_bonus_manager,static/description/icon.png" | |||
|               sequence="190"/> | |||
|     <!-- Menus and submenus for the module --> | |||
|     <!--    Main menu 'Requests' for creating bonus request--> | |||
|     <menuitem id="bonus_request_menu" name="Requests" | |||
|               parent="employee_bonus_manager.employee_bonus_manager_menu_root" | |||
|               sequence="1"/> | |||
|     <!--    Sub menu 'All Requests' for action of creating bonus request--> | |||
|     <menuitem id="bonus_request_menu_request" name="All Requests" | |||
|               parent="employee_bonus_manager.bonus_request_menu" | |||
|               action="bonus_request_action" sequence="1"/> | |||
|     <!--    Sub menu 'For Approval' request for creating bonus request--> | |||
|     <menuitem id="bonus_request_menu_approve" name="For Approval" | |||
|               parent="employee_bonus_manager.bonus_request_menu" | |||
|               groups="employee_bonus_manager.employee_bonus_manager_group_department" | |||
|               sequence="2"/> | |||
|     <!--    Sub menu 'Department' for viewing department bonus request records--> | |||
|     <menuitem id="bonus_request_menu_department" name="Department" | |||
|               parent="employee_bonus_manager.bonus_request_menu_approve" | |||
|               action="bonus_request_department_action" | |||
|               groups="employee_bonus_manager.employee_bonus_manager_group_department" | |||
|               sequence="1"/> | |||
|     <!--    Sub menu 'Manager' for viewing manager bonus request records--> | |||
|     <menuitem id="bonus_request_menu_manager" name="Manager" | |||
|               parent="employee_bonus_manager.bonus_request_menu_approve" | |||
|               action="bonus_request_manager_action" | |||
|               groups="employee_bonus_manager.employee_bonus_manager_group_manager" | |||
|               sequence="2"/> | |||
|     <!--    Sub menu 'Accounting Head' for viewing bonus request to be approved | |||
|             by Accounting head --> | |||
|     <menuitem id="bonus_request_menu_accounting" name="Accounting Head" | |||
|               parent="employee_bonus_manager.bonus_request_menu_approve" | |||
|               action="bonus_request_accounting_action" | |||
|               groups="account.group_account_manager" | |||
|               sequence="3"/> | |||
|     <!--    Main menu 'Configuration' for the settings of bonus request--> | |||
|     <menuitem id="employee_bonus_manager_menu_configuration" | |||
|               name="Configuration" | |||
|               parent="employee_bonus_manager.employee_bonus_manager_menu_root" | |||
|               sequence="100"/> | |||
|     <!--    Sub menu 'Bonus Reasons' for creating bonus reasons--> | |||
|     <menuitem id="bonus_reason_menu" name="Bonus Reasons" | |||
|               parent="employee_bonus_manager.employee_bonus_manager_menu_configuration" | |||
|               action="bonus_reason_action" sequence="1"/> | |||
| </odoo> | |||