@ -0,0 +1,49 @@ |
|||
.. image:: https://img.shields.io/badge/license-OPL--1-red.svg |
|||
:target: https://www.odoo.com/documentation/17.0/legal/licenses.html#odoo-apps |
|||
:alt: License: OPL-1 |
|||
|
|||
Sales Incentives |
|||
================ |
|||
Shows the Incentive Calculation |
|||
|
|||
Configuration |
|||
============= |
|||
* No additional configurations needed |
|||
|
|||
License |
|||
------- |
|||
Odoo Proprietary License v1.0 (OPL-1) |
|||
(https://www.odoo.com/documentation/user/12.0/legal/licenses/licenses.html) |
|||
|
|||
Company |
|||
------- |
|||
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
|||
|
|||
Credits |
|||
------- |
|||
* Developers: (V13) Nimisha Murali, |
|||
(V15) Neeraj, |
|||
(V16) Javid, |
|||
(V17) Aswin A K |
|||
Contact: odoo@cybrosys.com |
|||
|
|||
Contacts |
|||
-------- |
|||
* Mail Contact : odoo@cybrosys.com |
|||
|
|||
Bug Tracker |
|||
----------- |
|||
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. |
|||
|
|||
Maintainer |
|||
========== |
|||
.. image:: https://cybrosys.com/images/logo.png |
|||
:target: https://cybrosys.com |
|||
|
|||
This module is maintained by Cybrosys Technologies. |
|||
|
|||
For support and more information, please visit https://www.cybrosys.com |
|||
|
|||
Further information |
|||
=================== |
|||
HTML Description: `<static/description/index.html>`__ |
@ -0,0 +1,22 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: ASWIN A K (odoo@cybrosys.com) |
|||
# |
|||
# This program is under the terms of the Odoo Proprietary License v1.0 |
|||
# (OPL-1) It is forbidden to publish, distribute, sublicense, or sell |
|||
# copies of the Software or modified copies of the Software. |
|||
# |
|||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
|||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|||
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|||
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR |
|||
# THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|||
# |
|||
################################################################################ |
|||
from . import models |
@ -0,0 +1,57 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: ASWIN A K (odoo@cybrosys.com) |
|||
# |
|||
# This program is under the terms of the Odoo Proprietary License v1.0 |
|||
# (OPL-1) It is forbidden to publish, distribute, sublicense, or sell |
|||
# copies of the Software or modified copies of the Software. |
|||
# |
|||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
|||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|||
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|||
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR |
|||
# THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|||
# |
|||
################################################################################ |
|||
{ |
|||
'name': 'Sales Incentives', |
|||
'version': '17.0.1.0.0', |
|||
'category': 'Extra Tools', |
|||
'summary': "This module will calculate incentive for each salesperson" |
|||
" based on sale target in gamification", |
|||
'description': "This module will calculate incentive for salesperson in " |
|||
"gamification,incentive version 17," |
|||
"salesman,extra salary,salesman commision," |
|||
" sale target,sale achievement,gamification,challenge," |
|||
" crm,incentive,goal achievement,goal,extra pay," |
|||
"sales target, rewards,target complete,employee,extra work," |
|||
" work salary, achievement", |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'maintainer': 'Cybrosys Techno Solutions', |
|||
'website': 'https://cybrosys.com', |
|||
'depends': ['sale', 'crm', 'gamification', 'account'], |
|||
'data': [ |
|||
'security/ir.model.access.csv', |
|||
'views/sales_incentive_views.xml', |
|||
'views/incentive_approve_views.xml', |
|||
'views/goal_views.xml', |
|||
'views/gamification_challenge_views.xml', |
|||
'report/incentive_report.xml', |
|||
'views/calculate_incentive_views.xml', |
|||
'views/sales_incentive_calculation_menus.xml', |
|||
], |
|||
'images': ['static/description/banner.jpg'], |
|||
'license': 'OPL-1', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': False, |
|||
'price': 79, |
|||
'currency': 'EUR', |
|||
} |
@ -0,0 +1,6 @@ |
|||
## Module <sales_incentive_calculation> |
|||
|
|||
#### 19.02.2024 |
|||
#### Version 17.0.1.0.0 |
|||
##### ADD |
|||
- Initial commit for Sales Incentives |
@ -0,0 +1,27 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: ASWIN A K (odoo@cybrosys.com) |
|||
# |
|||
# This program is under the terms of the Odoo Proprietary License v1.0 |
|||
# (OPL-1) It is forbidden to publish, distribute, sublicense, or sell |
|||
# copies of the Software or modified copies of the Software. |
|||
# |
|||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
|||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|||
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|||
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR |
|||
# THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|||
# |
|||
################################################################################ |
|||
from . import calculate_incentive |
|||
from . import gamification_challenge |
|||
from . import goal |
|||
from . import incentive_approve |
|||
from . import sales_incentive |
|||
from . import select_incentive |
@ -0,0 +1,108 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: ASWIN A K (odoo@cybrosys.com) |
|||
# |
|||
# This program is under the terms of the Odoo Proprietary License v1.0 |
|||
# (OPL-1) It is forbidden to publish, distribute, sublicense, or sell |
|||
# copies of the Software or modified copies of the Software. |
|||
# |
|||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
|||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|||
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|||
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR |
|||
# THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|||
# |
|||
################################################################################ |
|||
from odoo import fields, models, _ |
|||
from odoo.exceptions import UserError |
|||
|
|||
|
|||
class CalculateIncentive(models.Model): |
|||
""" |
|||
This class represents the model for calculating and tracking sales |
|||
incentives. Each instance of this model corresponds to a specific |
|||
calculation of incentives for a salesperson based on their achieved goals. |
|||
""" |
|||
_name = 'calculate.incentive' |
|||
_description = 'Calculate Incentive' |
|||
|
|||
salesperson_id = fields.Many2one( |
|||
'res.users', |
|||
string='Salesperson', |
|||
help='salesperson associated with the scheme' |
|||
) |
|||
goal = fields.Float( |
|||
string='Target', |
|||
help='Target amount that the salesperson needs to achieve.' |
|||
) |
|||
achieved = fields.Float( |
|||
string='Achievement', |
|||
help='Achieved amount by the salesperson.' |
|||
) |
|||
achievement_percentage = fields.Float( |
|||
string='Achievement %', |
|||
help='Achievement in percentage.' |
|||
) |
|||
incentive = fields.Float( |
|||
string='Incentive', |
|||
help='Total incentive earned by the salesperson.') |
|||
check = fields.Boolean(string="Check", |
|||
help="Used to check if it is paid or not") |
|||
start_date = fields.Date( |
|||
string='Start Date', |
|||
help='The start date for the period associated with the goal.' |
|||
) |
|||
end_date = fields.Date( |
|||
string='End Date', |
|||
help='The end date for the period associated with the goal.' |
|||
) |
|||
date_check = fields.Boolean( |
|||
compute='_compute_date_check', |
|||
help='Computed field indicating whether the dates meet end date.') |
|||
status = fields.Selection( |
|||
[('unpaid', 'Not Paid'), |
|||
('submit', 'Submitted To Accountant'), ('paid', 'Paid'), |
|||
('reject', 'Rejected')], string='State', default='unpaid', |
|||
help='Status of the record.' |
|||
) |
|||
|
|||
def _compute_date_check(self): |
|||
""" |
|||
Compute the date check for each record. |
|||
This method iterates over the records and checks if the end date |
|||
is less than or equal to the current date. If true, it sets the |
|||
date_check field to True; otherwise, it sets it to False. |
|||
:return: None |
|||
""" |
|||
for rec in self: |
|||
rec.date_check = False |
|||
if rec.end_date <= fields.Date.today(): |
|||
rec.date_check = True |
|||
|
|||
def action_submit_to_accountant(self): |
|||
""" |
|||
Creates an 'approve.incentive' record for the calculated incentive |
|||
amount, and updates the status to 'Submitted To Accountant'. |
|||
If the incentive amount is 0.0, a UserError is raised. |
|||
""" |
|||
if self.incentive == 0.0: |
|||
raise UserError(_('Incentive amount is 0.0')) |
|||
data = { |
|||
'salesperson_id': self.salesperson_id.id, |
|||
'goal': self.goal, |
|||
'achieved': self.achieved, |
|||
'achievement_percentage': self.achievement_percentage, |
|||
'incentive': self.incentive, |
|||
'status': 'submit', |
|||
'start_date': self.start_date, |
|||
'end_date': self.end_date, |
|||
} |
|||
self.env['approve.incentive'].create(data) |
|||
self.check = True |
|||
self.status = 'submit' |
@ -0,0 +1,46 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: ASWIN A K (odoo@cybrosys.com) |
|||
# |
|||
# This program is under the terms of the Odoo Proprietary License v1.0 |
|||
# (OPL-1) It is forbidden to publish, distribute, sublicense, or sell |
|||
# copies of the Software or modified copies of the Software. |
|||
# |
|||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
|||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|||
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|||
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR |
|||
# THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|||
# |
|||
################################################################################ |
|||
from odoo import api, fields, models, _ |
|||
from odoo.exceptions import UserError |
|||
|
|||
|
|||
class Challenge(models.Model): |
|||
""" |
|||
Extends the base 'gamification.challenge' model to include an additional |
|||
field 'incentive_calculation' that allows specifying whether the challenge |
|||
should be used in incentive calculations. |
|||
""" |
|||
_inherit = 'gamification.challenge' |
|||
|
|||
incentive_calculation = fields.Boolean( |
|||
string='Use in incentive calculation', copy=False) |
|||
|
|||
@api.onchange('incentive_calculation') |
|||
def _onchange_incentive_calculation(self): |
|||
""" |
|||
Checks if any gamification_challenge is |
|||
active for incentive_calculation |
|||
""" |
|||
if self.search([('incentive_calculation', '=', True)]): |
|||
if self.incentive_calculation: |
|||
raise UserError( |
|||
_('Another goal already active for incentive calculation')) |
@ -0,0 +1,49 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: ASWIN A K (odoo@cybrosys.com) |
|||
# |
|||
# This program is under the terms of the Odoo Proprietary License v1.0 |
|||
# (OPL-1) It is forbidden to publish, distribute, sublicense, or sell |
|||
# copies of the Software or modified copies of the Software. |
|||
# |
|||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
|||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|||
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|||
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR |
|||
# THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|||
# |
|||
################################################################################ |
|||
from odoo import fields, models |
|||
|
|||
|
|||
class Goals(models.Model): |
|||
""" |
|||
Extends the base 'gamification.goal' model to include additional fields |
|||
'target_achievement_percentage' and 'incentive'. |
|||
The 'target_achievement_percentage' field is computed based on the current |
|||
and target goals, and 'incentive' represents the calculated incentive for |
|||
the goal. |
|||
""" |
|||
_inherit = 'gamification.goal' |
|||
|
|||
target_achievement_percentage = fields.Float( |
|||
string='percentage', |
|||
compute='_compute_target_achievement_percentage', |
|||
help='Target Achievement Percentage') |
|||
incentive = fields.Float(string='Incentive') |
|||
|
|||
def _compute_target_achievement_percentage(self): |
|||
""" |
|||
Calculates target_achievement_percentage |
|||
""" |
|||
for rec in self: |
|||
rec.target_achievement_percentage = False |
|||
if rec.target_goal != 0: |
|||
rec.target_achievement_percentage = ( |
|||
rec.current/rec.target_goal)*100 |
@ -0,0 +1,137 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: ASWIN A K (odoo@cybrosys.com) |
|||
# |
|||
# This program is under the terms of the Odoo Proprietary License v1.0 |
|||
# (OPL-1) It is forbidden to publish, distribute, sublicense, or sell |
|||
# copies of the Software or modified copies of the Software. |
|||
# |
|||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
|||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|||
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|||
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR |
|||
# THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|||
# |
|||
################################################################################ |
|||
from odoo import fields, models, _ |
|||
from odoo.exceptions import UserError |
|||
|
|||
|
|||
class SalesIncentive(models.Model): |
|||
""" |
|||
This class represents the 'approve.incentive' model, which is used to |
|||
approve and manage sales incentives for salespersons. It includes fields for |
|||
tracking salesperson details, incentive information, and the approval |
|||
status. |
|||
""" |
|||
_name = 'approve.incentive' |
|||
_description = 'Approve Incentive' |
|||
_rec_name = 'salesperson_id' |
|||
|
|||
salesperson_id = fields.Many2one( |
|||
'res.users', string='Salesperson', |
|||
help='Salesperson associated with the scheme.') |
|||
name = fields.Char(string='Name') |
|||
goal = fields.Float( |
|||
string='Target', |
|||
help='Target amount that the salesperson needs to achieve.') |
|||
achieved = fields.Float(string='Achievement', |
|||
help='Achieved amount by the salesperson.') |
|||
achievement_percentage = fields.Float(string='Achievement %', |
|||
help='Achievement in percentage.') |
|||
incentive = fields.Float(string='Incentive', |
|||
help='Total incentive earned by the salesperson.') |
|||
status = fields.Selection([('unpaid', 'Not Paid'), |
|||
('submit', 'Submitted To Accountant'), |
|||
('paid', 'Paid'), ('reject', 'Rejected')], |
|||
string='State', default='unpaid', |
|||
help='Status of the incentive.' |
|||
) |
|||
journal_id = fields.Many2one('account.journal', |
|||
string='Journal', |
|||
help='Select the accounting journal.' |
|||
) |
|||
check = fields.Boolean(string="Check", |
|||
help="Used to check if it is paid or not") |
|||
debit_account_id = fields.Many2one( |
|||
'account.account', |
|||
domain=[('deprecated', '=', False)], |
|||
string='Debit account', |
|||
help='Select the debit account.' |
|||
) |
|||
credit_account_id = fields.Many2one( |
|||
'account.account', |
|||
domain=[('deprecated', '=', False)], |
|||
string='Credit account', |
|||
help='Select the credit account.' |
|||
) |
|||
start_date = fields.Date( |
|||
string='Start Date', |
|||
help='The start date for the period associated with the scheme.') |
|||
end_date = fields.Date( |
|||
string='End Date', |
|||
help='The end date for the period associated with the scheme.' |
|||
) |
|||
|
|||
def action_approve(self): |
|||
""" |
|||
Approves the incentive and creates account_move with the |
|||
corresponding values. Changes the state. |
|||
""" |
|||
if not (self.journal_id |
|||
and self.debit_account_id and self.credit_account_id): |
|||
raise UserError( |
|||
_('You must enter journal, debit account and credit account')) |
|||
lines = [fields.Command.create({ |
|||
'account_id': self.credit_account_id.id, |
|||
'partner_id': self.salesperson_id.partner_id.id, |
|||
'credit': self.incentive, |
|||
'name': 'Incentive' |
|||
}), fields.Command.create({ |
|||
'account_id': self.debit_account_id.id, |
|||
'partner_id': self.salesperson_id.partner_id.id, |
|||
'debit': self.incentive |
|||
})] |
|||
val = { |
|||
'date': fields.Date.today(), |
|||
'journal_id': self.journal_id.id, |
|||
'line_ids': lines |
|||
} |
|||
self.env['account.move'].create(val) |
|||
calc = self.env['calculate.incentive'].search( |
|||
[('salesperson_id', '=', self.salesperson_id.id), |
|||
('start_date', '=', self.start_date), |
|||
('end_date', '=', self.end_date), |
|||
('status', '=', 'submit')]) |
|||
self.write({ |
|||
'status': 'paid', |
|||
'check': True |
|||
}) |
|||
calc.write({ |
|||
'status': 'paid', |
|||
'check': True |
|||
}) |
|||
|
|||
def action_rejected(self): |
|||
""" |
|||
Rejects the incentive request and changes the state. |
|||
""" |
|||
self.write({ |
|||
'status': 'reject', |
|||
'check': True |
|||
}) |
|||
calc = self.env['calculate.incentive'].search( |
|||
[('salesperson_id', '=', self.salesperson_id.id), |
|||
('start_date', '=', self.start_date), |
|||
('end_date', '=', self.end_date), |
|||
('status', '=', 'submit')]) |
|||
calc.write({ |
|||
'status': 'reject', |
|||
'check': True |
|||
}) |
@ -0,0 +1,179 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: ASWIN A K (odoo@cybrosys.com) |
|||
# |
|||
# This program is under the terms of the Odoo Proprietary License v1.0 |
|||
# (OPL-1) It is forbidden to publish, distribute, sublicense, or sell |
|||
# copies of the Software or modified copies of the Software. |
|||
# |
|||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
|||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|||
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|||
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR |
|||
# THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|||
# |
|||
################################################################################ |
|||
from odoo import api, fields, models, _ |
|||
from odoo.exceptions import UserError |
|||
|
|||
|
|||
class SalesIncentive(models.Model): |
|||
""" |
|||
This class represents the Sales Incentive model, which is used to configure |
|||
incentive schemes for sales personnel. It allows defining various parameters |
|||
such as the calculation method, incentive tiers, and activation status. |
|||
""" |
|||
_name = 'sales.incentive' |
|||
_description = 'Sales Incentive' |
|||
|
|||
name = fields.Char( |
|||
string='Name', |
|||
help='Enter the name for your record. This field is required.', |
|||
required=True) |
|||
calculation_method = fields.Selection( |
|||
[('linear', 'Linear'), ('step', 'Tiered Commission Plan')], |
|||
help='Tired : the amount of Incentive ' |
|||
'increases as the sales person achieves more.', |
|||
string='Based On', default='linear') |
|||
select_incentive_ids = fields.One2many( |
|||
'select.incentive', 'sales_incentive_id') |
|||
active_calculation = fields.Boolean( |
|||
string='Active', |
|||
copy=False, |
|||
help='This field controls whether the scheme is active or not.') |
|||
|
|||
@api.onchange('active_calculation') |
|||
def _onchange_active_calculation(self): |
|||
""" |
|||
Checks for any active_calculation, if any returns a user error. |
|||
""" |
|||
if self.search([('active_calculation', '=', True)]): |
|||
if self.active_calculation: |
|||
raise UserError( |
|||
_('Another scheme already active for incentive calculation') |
|||
) |
|||
|
|||
def action_incentive_compute(self): |
|||
""" |
|||
Computes calculate_incentive and returns it. |
|||
""" |
|||
calc = self.env['calculate.incentive'].search([]) |
|||
challenge = self.env['gamification.challenge'].search( |
|||
[('incentive_calculation', '=', True)]) |
|||
docs = self.env['gamification.goal'].search( |
|||
[('challenge_id', 'in', challenge.ids)]) |
|||
self.send_warnings(challenge, docs) |
|||
unlink_date_list = self.filter_expired_calc_records(calc, docs) |
|||
self.unlink_expired_calc_records(unlink_date_list) |
|||
for goal in docs: |
|||
incentive = 0.0 |
|||
if self.calculation_method == 'linear': |
|||
incentive = self.calculate_linear_incentive(goal, incentive) |
|||
else: |
|||
incentive = self.calculate_tiered_incentive(goal) |
|||
data = { |
|||
'salesperson_id': goal.user_id.id, |
|||
'goal': goal.target_goal, |
|||
'achieved': goal.current, |
|||
'achievement_percentage': goal.target_achievement_percentage, |
|||
'incentive': incentive, |
|||
'start_date': goal.start_date, |
|||
'end_date': goal.end_date, |
|||
'status': 'unpaid', |
|||
} |
|||
self.env['calculate.incentive'].create(data) |
|||
return { |
|||
'name': 'Incentive', |
|||
'type': 'ir.actions.act_window', |
|||
'view_mode': 'tree', |
|||
'res_model': 'calculate.incentive', |
|||
'target': 'current', |
|||
} |
|||
|
|||
def calculate_linear_incentive(self, goal, incentive, highest=0): |
|||
"""Find the incentive by using linear method""" |
|||
for select_line in self.select_incentive_ids: |
|||
if ((goal.target_achievement_percentage >= |
|||
select_line.upto_percent) |
|||
and (select_line.upto_percent > highest)): |
|||
highest = select_line.upto_percent |
|||
if select_line.incentive_type == 'percent': |
|||
incentive = goal.current * ( |
|||
select_line.reward / 100) |
|||
else: |
|||
incentive = select_line.reward |
|||
goal.incentive = incentive |
|||
return incentive |
|||
|
|||
def send_warnings(self, challenge, docs): |
|||
"""It is a method to raise warnings |
|||
:param1 challenge |
|||
:param2 docs that is goals of the challenge |
|||
""" |
|||
if not (challenge and docs): |
|||
raise UserError( |
|||
_('There is on active challenge and goal for calculation')) |
|||
if docs.filtered(lambda goal: not goal.end_date): |
|||
error_users = "'s, ".join(docs.mapped('user_id.name')) |
|||
raise UserError( |
|||
_(f"The goal {error_users}'s " |
|||
f"{docs[0].display_name} has no end date.")) |
|||
|
|||
def filter_expired_calc_records(self, calc, docs): |
|||
""" |
|||
Filter calculate_incentive records based on expiration date. |
|||
""" |
|||
unlink_date_list = [] |
|||
for record in calc: |
|||
if record.end_date >= (fields.Date.today()): |
|||
record.unlink() |
|||
elif docs[0].end_date == record.end_date: |
|||
unlink_date_list.append(record.id) |
|||
return unlink_date_list |
|||
|
|||
def unlink_expired_calc_records(self, unlink_date_list): |
|||
""" |
|||
Unlink expired calculate_incentive records. |
|||
""" |
|||
self.env['calculate.incentive'].search( |
|||
[('id', 'in', unlink_date_list)]).unlink() |
|||
|
|||
def calculate_tiered_incentive(self, goal): |
|||
""" |
|||
Calculate incentive for tiered commission plan. |
|||
""" |
|||
incentive = 0.0 |
|||
sum_value = 0.0 |
|||
old = 0.0 |
|||
final_incentive = 0.0 |
|||
|
|||
for select_line in self.select_incentive_ids.sorted( |
|||
lambda x: x.upto_percent): |
|||
if (goal.target_achievement_percentage |
|||
>= select_line.upto_percent): |
|||
new = (goal.target_goal * ( |
|||
select_line.upto_percent / 100)) - old |
|||
sum_value += new |
|||
if select_line.incentive_type == 'percent': |
|||
incentive += new * (select_line.reward / 100) |
|||
else: |
|||
incentive += select_line.reward |
|||
old = goal.target_goal * ( |
|||
select_line.upto_percent / 100) |
|||
elif sum_value < goal.current and sum_value != 0.0: |
|||
last_incentive = goal.current - sum_value |
|||
if select_line.incentive_type == 'percent': |
|||
final_incentive = last_incentive * ( |
|||
select_line.reward / 100) |
|||
else: |
|||
final_incentive = select_line.reward |
|||
sum_value += goal.current - sum_value |
|||
incentive += final_incentive |
|||
goal.incentive = incentive |
|||
return incentive |
@ -0,0 +1,42 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: ASWIN A K (odoo@cybrosys.com) |
|||
# |
|||
# This program is under the terms of the Odoo Proprietary License v1.0 |
|||
# (OPL-1) It is forbidden to publish, distribute, sublicense, or sell |
|||
# copies of the Software or modified copies of the Software. |
|||
# |
|||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
|||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|||
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|||
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR |
|||
# THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|||
# |
|||
################################################################################ |
|||
from odoo import fields, models |
|||
|
|||
|
|||
class IncentiveSettings(models.Model): |
|||
"""This model is used to handle incentive criteria""" |
|||
_name = 'select.incentive' |
|||
_description = 'Select Incentive Settings' |
|||
|
|||
upto_percent = fields.Float( |
|||
string='Achievement %', |
|||
help='This field represents the percentage of the achievement.') |
|||
reward = fields.Float(string='Reward', help='Specify the reward amount') |
|||
incentive_type = fields.Selection( |
|||
[('percent', 'Percentage'), |
|||
('amount', 'Amount')], string='Type', default='percent', |
|||
help='Whether the reward is calculated as a percentage or an amount.') |
|||
sales_incentive_id = fields.Many2one( |
|||
'sales.incentive', |
|||
'Incentive', |
|||
help='This field establishes a link between the ' |
|||
'current record and a specific sales incentive.') |
@ -0,0 +1,41 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<!-- Report action --> |
|||
<record id="action_incentive_report" model="ir.actions.report"> |
|||
<field name="name">Incentive Report</field> |
|||
<field name="model">calculate.incentive</field> |
|||
<field name="report_type">qweb-pdf</field> |
|||
<field name="report_name">sales_incentive_calculation.report_incentive</field> |
|||
<field name="report_file">sales_incentive_calculation.report_incentive</field> |
|||
<field name="binding_model_id" ref="model_calculate_incentive"/> |
|||
<field name="binding_type">report</field> |
|||
</record> |
|||
|
|||
<!-- Template for the report action--> |
|||
<template id="report_incentive"> |
|||
<t t-call="web.html_container"> |
|||
<t t-call="web.external_layout"> |
|||
<div class="page"> |
|||
<h1 align="center">INCENTIVE REPORT</h1> |
|||
<table align="center" style="font-size:20px;" class="table table-condensed"> |
|||
<tr> |
|||
<td><strong>Salesperson</strong> </td> |
|||
<td><strong>Target</strong> </td> |
|||
<td><strong>Achievement</strong> </td> |
|||
<td><strong>Incentive</strong> </td> |
|||
</tr> |
|||
<t t-foreach="docs" t-as="o"> |
|||
<tr> |
|||
<td><t t-esc="o.salesperson_id.name"/></td> |
|||
<td><t t-esc="o.goal"/></td> |
|||
<td><t t-esc="o.achieved"/></td> |
|||
<td><t t-esc="o.incentive"/></td> |
|||
</tr> |
|||
</t> |
|||
</table> |
|||
</div> |
|||
</t> |
|||
</t> |
|||
</template> |
|||
|
|||
</odoo> |
|
After Width: | Height: | Size: 36 KiB |
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.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 673 B |
After Width: | Height: | Size: 11 KiB |
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: 80 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 565 B |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 72 KiB |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 128 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 85 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 224 KiB |
After Width: | Height: | Size: 79 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 142 KiB |
After Width: | Height: | Size: 111 KiB |
After Width: | Height: | Size: 121 KiB |
After Width: | Height: | Size: 119 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 259 KiB |
After Width: | Height: | Size: 776 KiB |
After Width: | Height: | Size: 193 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 134 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 106 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 101 KiB |
@ -0,0 +1,778 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
|
|||
<head> |
|||
<meta charset="UTF-8"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|||
<title>Odoo App 3 Index</title> |
|||
<!-- Bootstrap CSS --> |
|||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css" |
|||
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> |
|||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.1/css/all.min.css"> |
|||
<link rel="preconnect" href="https://fonts.googleapis.com"> |
|||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> |
|||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet"> |
|||
</head> |
|||
<body> |
|||
<section> |
|||
<div class="container" style="font-family: 'Inter', sans-serif !important;background-color: #fff !important;"> |
|||
<div class="row"> |
|||
<div class="col-sm-12 col-md-12 col-lg-12 d-flex justify-content-between flex-wrap align-items-sm-center" |
|||
style="border-bottom:1px solid rgba(0, 0, 0, 0.22)"> |
|||
<div class="my-3"> |
|||
<img src="assets/misc/Cybrosys R.png" style="width:auto !important; height:40px !important"> |
|||
</div> |
|||
<div class="my-3 d-flex align-items-center"> |
|||
<div class="text-center" |
|||
style="background-color:#017E84 !important;font-size: 0.8rem !important; color:#fff !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:50px !important; min-width: 120px !important;"> |
|||
Community |
|||
</div> |
|||
<div class="text-center" |
|||
style="background-color:#875A7B !important; color:#fff !important;font-size: 0.8rem !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:50px !important;min-width: 120px !important;"> |
|||
Enterprise |
|||
</div> |
|||
<div class="text-center" |
|||
style="background-color:#7C7BAD !important; color:#fff !important;font-size: 0.8rem !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:50px !important; min-width: 120px !important;"> |
|||
Odoo.sh |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-sm-12 col-md-12 col-lg-12 text-center d-flex align-items-center flex-column" |
|||
style="margin: 80px 0px !important;"> |
|||
<h1 style="font-size: 2.8rem;font-weight: 700; color: |
|||
#1A202C;"> |
|||
Sales Incentives</h1> |
|||
<p class="my-3 mb-4" |
|||
style="max-width: 80%; font-weight: 400 !important; line-height: 32px; color: #718096;"> |
|||
Calculates incentive for salesperson based on sale target in gamification. |
|||
</p> |
|||
<div style="width: 80%; margin-top: 3rem;"> |
|||
<img src="assets/screenshots/hero-v17.gif" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="container mt-5 mb-5"> |
|||
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-4"> |
|||
<p class="m-0" style="font-weight: 600; font-size: 24px; color:#714b67 !important">Key Highlights |
|||
</p> |
|||
</div> |
|||
<div class="row py-4"> |
|||
<div class="col-md-6 col-sm-12 p-3"> |
|||
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px; |
|||
background: #FFF; |
|||
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); "> |
|||
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67; |
|||
display: flex; justify-content: center; align-items: center; |
|||
margin-right: 10px; flex-shrink: 0;"> |
|||
<i class="fa-solid fa-star " style="color: #fff;font-size:14px;"></i> |
|||
</div> |
|||
<div> |
|||
<p style="color: #1A202C;font-weight: 600; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Linear Method.</p> |
|||
<p class="m-0" style="color:#718096">Generates incentive for sale target given in gamification based on:-Linear Method. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-6 col-sm-12 p-3"> |
|||
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px; |
|||
background: #FFF; |
|||
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); "> |
|||
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67; |
|||
display: flex; justify-content: center; align-items: center; |
|||
margin-right: 10px; flex-shrink: 0;"> |
|||
<i class="fa-solid fa-star " style="color: #fff;font-size:14px;"></i> |
|||
</div> |
|||
<div> |
|||
<p style="color: #1A202C;font-weight: 600; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Tiered Commission Plan.</p> |
|||
<p class="m-0" style="color:#718096">Generates incentive for sale target given in gamification based on:-Tiered Commission Plan. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-6 col-sm-12 p-3"> |
|||
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px; |
|||
background: #FFF; |
|||
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); "> |
|||
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67; |
|||
display: flex; justify-content: center; align-items: center; |
|||
margin-right: 10px; flex-shrink: 0;"> |
|||
<i class="fa-solid fa-star " style="color: #fff;font-size:14px;"></i> |
|||
</div> |
|||
<div> |
|||
<p style="color: #1A202C;font-weight: 600; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Percentage.</p> |
|||
<p class="m-0" style="color:#718096">Calculates incentive based on:-Percentage. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-6 col-sm-12 p-3"> |
|||
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px; |
|||
background: #FFF; |
|||
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); "> |
|||
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67; |
|||
display: flex; justify-content: center; align-items: center; |
|||
margin-right: 10px; flex-shrink: 0; "> |
|||
<i class="fa-solid fa-star " style="color: #fff;font-size:14px;"></i> |
|||
</div> |
|||
<div> |
|||
<p style="color: #1A202C;font-weight: 600; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Fixed amount.</p> |
|||
<p class="m-0" style="color:#718096"> Calculates incentive based on:-Fixed amount. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="container rounded" > |
|||
<ul class="nav nav-tabs d-flex" style="width: fit-content;margin: 0 auto;gap: 1rem;"> |
|||
<li class="col text-center py-2 text-nowrap " |
|||
style="color: #fff; background-color: #714B67;border-radius: 6px 6px 0px 0px;"><a |
|||
class="active show" data-toggle="tab" href="#tab1" |
|||
style="color: #fff;font-weight: 500; background-color: #714B67; text-decoration: none;"> |
|||
<i class="fa-regular fa-image pr-2" style="color: #fff;"></i> |
|||
Screenshots</a></li> |
|||
<li class="col text-center py-2 text-nowrap " |
|||
style="color: #fff; background-color: #714B67;border-radius: 6px 6px 0px 0px;"><a |
|||
data-toggle="tab" href="#tab2" |
|||
style="color: #fff;font-weight: 500; text-decoration: none;"><i |
|||
class="fa-solid fa-star pr-2" style="color: #fff;"></i>Features</a></li> |
|||
<li class="col text-center py-2 text-nowrap " |
|||
style="color: #fff; background-color: #714B67;border-radius: 6px 6px 0px 0px;"><a |
|||
data-toggle="tab" href="#tab3" |
|||
style="color: #fff;font-weight: 500; text-decoration: none; background-color: #714B67;"><i |
|||
class="fa-solid fa-book-open pr-2" style="color: #fff;"></i>Released Notes</a></li> |
|||
</ul> |
|||
<div class="tab-content" style="background-color: rgba(121, 113, 119, 0.04);"> |
|||
<div id="tab1" class="tab-pane fade in active show"> |
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/1.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h2 class="mt-2" |
|||
style=" font-weight:600 !important; color:#714B67!important; font-size:1.7rem !important"> |
|||
Configure |
|||
</h2> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
Sales manager can set challenge for salesperson. Go to CRM --> Challenges --> Challenges and select sales challenge to be used for incentive calculation. |
|||
Select 'Use in incentive calculation' to use this challenge in incentive calculation. You can set periodicity as 'Monthly', 'weekly', 'yearly' and the |
|||
incentive will be calculated based on these dates. You can set the target value to reach. |
|||
The incentive calculation will be based on this target.</h4> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/2.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h2 class="mt-2" |
|||
style=" font-weight:600 !important; color:#714B67!important; font-size:1.7rem !important"> |
|||
Challenge and Achievement |
|||
</h2> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
Go to CRM --> Challenges --> Goals and you can see the target set for the challenge and |
|||
achievement made by each salesperson. Based on this target and achievement, |
|||
incentive can be calculated for each salesperson.</h4> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/3.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h2 class="mt-2" |
|||
style=" font-weight:600 !important; color:#714B67!important; font-size:1.7rem !important"> |
|||
Compute Incentive |
|||
</h2> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
You can create the method of incentive calculation in CRM --> Challenges --> Incentive Scheme. |
|||
Select 'linear or Tiered Commission Plan' as the method for calculation. |
|||
In the 'achievement%' column, you can give the minimum achievement percentage to be reached for getting incentive. |
|||
In the 'reward' column, specify the reward when this achievement% is reached. |
|||
If the 'Type' column is selected as 'percentage', then reward column will be considered as percentage of amount to be given for this achievement. |
|||
If 'Type' is 'amount', then reward will be the amount specified in the reward column. |
|||
Click on 'compute incentive' button to calculate incentive based on the given settings.</h4> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/4.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h2 class="mt-2" |
|||
style=" font-weight:600 !important; color:#714B67!important; font-size:1.7rem !important"> |
|||
Linear Method |
|||
</h2> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
If the selected method is 'linear', then 'compute incentive' will calculate incentive based on linear method. |
|||
For example, if the target is 10,00,000 and the achievement is 6,90,000, that is 69%, incentive for this will be calculated in the 50% slab. |
|||
So, Incentive for upto 50% achievement is 2%, so incentive will be 2% of achievement(690,000). |
|||
i,e.13800. If type is given as amount, then that amount will be given as incentive. |
|||
In 70% slab, incentive is given as amount 10,000. So, for 89% achievement, incentive will be 10,000 as given in the slab settings. |
|||
The lowest achievement% given in slab settings will be considered as minimum achievement percentage. |
|||
You can set the amount to be given for each achievement in the settings.</h4> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/5.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h2 class="mt-2" |
|||
style=" font-weight:600 !important; color:#714B67!important; font-size:1.7rem !important"> |
|||
Tiered Commission Plan Method |
|||
</h2> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
If the selected method is 'Tiered Commission Plan', then 'compute incentive' will calculate incentive based on incremental basis. |
|||
For example, Consider target is 10,00,000 and achievement is 6,90,000. The reward for 50% in slab is 2% and reward for 70% in slab is 10,000. |
|||
Target is 10,00,000 so, we take 50% of target ,that is 5,00,000 and give 2% reward for 5,00,000. that is 10,000. |
|||
Remaining 19% will be given reward of next achievement% specified in the slab settings. |
|||
Considering 70% as next achievement specified in slab settings and reward for 70% is 10,000 and type is amount. |
|||
So incentive for the remaining achievement of 19% will be 10,000. Total incentive becomes 20,000. |
|||
If type selected is percentage, then incentive will be reward for remaining percentage.</h4> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/6.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h2 class="mt-2" |
|||
style=" font-weight:600 !important; color:#714B67!important; font-size:1.7rem !important"> |
|||
Incentives Approval |
|||
</h2> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
You can submit the incentives for approval when the end date is reached. |
|||
If incentive is calculated on monthly basis, then it can be submitted for approval at the end of the month. |
|||
Refresh the challenge to get the next month calculations and to submit previous month incentives for approval. |
|||
To refresh challenge, go to CRM --> Challenges --> Challenges and select the challenge used in incentive calculation, click on 'refresh challenge' button. |
|||
Now when you compute the incentive again, you can submit the previous month incentives by clicking on 'Submit for approval'.</h4> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/7.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h2 class="mt-2" |
|||
style=" font-weight:600 !important; color:#714B67!important; font-size:1.7rem !important"> |
|||
Submitted to Accountant |
|||
</h2> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
Then status will become 'submitted to accountant' and the submitted incentives will be send for approval.</h4> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/8.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h2 class="mt-2" |
|||
style=" font-weight:600 !important; color:#714B67!important; font-size:1.7rem !important"> |
|||
Submitted Incentives |
|||
</h2> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
Accountant can see the submitted incentives in Invoicing --> Customers --> Approvals --> Incentives to Approve</h4> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/9.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h2 class="mt-2" |
|||
style=" font-weight:600 !important; color:#714B67!important; font-size:1.7rem !important"> |
|||
Approve or Reject |
|||
</h2> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
Accountant can approve or reject the submitted incentives.</h4> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/10.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h2 class="mt-2" |
|||
style=" font-weight:600 !important; color:#714B67!important; font-size:1.7rem !important"> |
|||
After Approval or Rejection |
|||
</h2> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
If approved, then state changes to paid and journal entry will be created for this incentive in draft state. |
|||
If rejected, then status changes to rejected.</h4> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/11.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h2 class="mt-2" |
|||
style=" font-weight:600 !important; color:#714B67!important; font-size:1.7rem !important"> |
|||
Approved Entry in the Journal |
|||
</h2> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
Approved incentives will have an entry in the journal as draft.</h4> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div id="tab2" class="tab-pane fade"> |
|||
<div class="col-mg-12" style="padding: 1rem 4rem;"> |
|||
<ul style="list-style: none; padding: 1rem 0;font-weight: 500;"> |
|||
<li class="py-3" |
|||
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<span style="margin-right: 12px;"><img src="assets/misc/star (1) 2.svg" alt="" |
|||
width="16px"></span>Generates incentive for sale target given in gamification based on:-Linear Method. |
|||
</li> |
|||
<li class="py-3" |
|||
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<span style="margin-right: 12px;"><img src="assets/misc/star (1) 2.svg" alt="" |
|||
width="16px"></span>Generates incentive for sale target given in gamification based on:-Tiered Commission Plan. |
|||
</li> |
|||
<li class="py-3" |
|||
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<span style="margin-right: 12px;"><img src="assets/misc/star (1) 2.svg" alt="" |
|||
width="16px"></span>Calculates incentive based on:-Percentage. |
|||
<!-- <ul style="list-style: none;font-weight: 400; color:#718096"> |
|||
<li>A Project will be created in the name of Manufacturing Order , |
|||
and Task will be created in the name of Work Order. The Time |
|||
tracking of the Work Order will be added as Timesheet.</li> |
|||
</ul> --> |
|||
</li> |
|||
<li class="py-3" |
|||
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<span style="margin-right: 12px;"><img src="assets/misc/star (1) 2.svg" alt="" |
|||
width="16px"></span>Calculates incentive based on:-Fixed amount. |
|||
<!-- <ul style="list-style: none;font-weight: 400; color:#718096"> |
|||
<li>A Project will be created in the name of Manufacturing Order , |
|||
and Task will be created in the name of Work Order. The Time |
|||
tracking of the Work Order will be added as Timesheet.</li> |
|||
</ul> --> |
|||
</li> |
|||
|
|||
</ul> |
|||
</div> |
|||
</div> |
|||
<div id="tab3" class="tab-pane fade"> |
|||
<div class="col-mg-12 active" style="padding: 1rem 4rem;"> |
|||
<div class="py-3" |
|||
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="d-flex mb-3" style="font-size: 0.8rem; font-weight: 500;"><span>Version |
|||
17.0.1.0.0</span><span class="px-2">|</span><span |
|||
style="color: #714B67;font-weight: 600;">Released on:20th Dec 2023</span> |
|||
</div> |
|||
<p class="m-0" |
|||
style=" color:#718096!important; font-size:1rem !important;line-height: 28px;"> |
|||
|
|||
Initial commit for Sales Incentives.</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="container mt-5"> |
|||
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-5"> |
|||
<p class="m-0" style="font-weight: 600; font-size: 24px; color:#000 !important">Related Products</p> |
|||
</div> |
|||
</div> |
|||
<div id="myCarousel" class="carousel slide py-3" data-ride="carousel"> |
|||
<div class="carousel-inner"> |
|||
<div class="carousel-item active"> |
|||
<div class="row p-4"> |
|||
<div class="col"> |
|||
<div class="p-3"> |
|||
<a href="https://apps.odoo.com/apps/modules/16.0/manufacturing_reports/" style="color: #000; text-decoration: none;"> |
|||
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
|||
<div style="width: 300px; "> |
|||
<img src="assets/modules/1.png" alt="" width="100%" height="auto"> |
|||
|
|||
</div> |
|||
<p class="text-center pt-2 text-black font-weight-bold">Manufacturing Reports</p> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<div class="col"> |
|||
<div class="p-3"> |
|||
<a href="https://apps.odoo.com/apps/modules/16.0/mrp_work_order_print/" style="color: #000; text-decoration: none;"> |
|||
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
|||
<div style="width: 300px; "> |
|||
<img src="assets/modules/2.png" alt="" width="100%" height="auto"> |
|||
|
|||
</div> |
|||
<p class="text-center pt-2 text-black font-weight-bold">Print Work Order Details</p> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<div class="col"> |
|||
<div class="p-3"> |
|||
<a href="https://apps.odoo.com/apps/modules/16.0/bom_total_cost/" style="color: #000; text-decoration: none;"> |
|||
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
|||
<div style="width: 300px; "> |
|||
<img src="assets/modules/3.png" alt="" width="100%" height="auto"> |
|||
|
|||
</div> |
|||
<p class="text-center pt-2 text-black font-weight-bold">Show Total Cost On BOM</p> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="carousel-item"> |
|||
<div class="row p-4"> |
|||
<div class="col"> |
|||
<div class="p-3"> |
|||
<a href="https://apps.odoo.com/apps/modules/16.0/simple_mrp_order/" style="color: #000; text-decoration: none;"> |
|||
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
|||
<div style="width: 300px; "> |
|||
<img src="assets/modules/4.png" alt="" width="100%" height="auto"> |
|||
|
|||
</div> |
|||
<p class="text-center pt-2 text-black font-weight-bold">Simple Manufacturing Orders</p> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<div class="col"> |
|||
<div class="p-3"> |
|||
<a href="https://apps.odoo.com/apps/modules/16.0/bom_multiple_product/" style="color: #000; text-decoration: none;"> |
|||
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
|||
<div style="width: 300px;"> |
|||
<img src="assets/modules/5.png" alt="" width="100%" height="auto"> |
|||
|
|||
</div> |
|||
<p class="text-center pt-2 text-black font-weight-bold">BOM Multiple Product Selection</p> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<div class="col"> |
|||
<div class="p-3"> |
|||
<a href="https://apps.odoo.com/apps/modules/16.0/cw_mrp/" style="color: #000; text-decoration: none;"> |
|||
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
|||
<div style="width: 300px;"> |
|||
<img src="assets/modules/6.png" alt="" width="100%" height="auto"> |
|||
</div> |
|||
<p class="text-center pt-2 text-black font-weight-bold"> Catch Weight Management: Manufacturing</p> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<a class="carousel-control-prev" href="#myCarousel" data-slide="prev" style="width: 35px; color: #000;"> |
|||
<span class="carousel-control-prev-icon"> |
|||
<i class="fa fa-chevron-left" style="font-size: 24px;"></i> |
|||
</span> |
|||
</a> |
|||
<a class="carousel-control-next" href="#myCarousel" data-slide="next" style="width: 35px; color: #000;"> |
|||
<span class="carousel-control-next-icon"> |
|||
<i class="fa fa-chevron-right" style="font-size: 24px;"></i> |
|||
</span> |
|||
</a> |
|||
</div> |
|||
<div class="container mt-5"> |
|||
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-4"> |
|||
<p class="m-0" style="font-weight: 600; font-size: 24px; color:#000 !important">Our Services</p> |
|||
|
|||
</div> |
|||
</div> |
|||
<div class="container my-5"> |
|||
<div class="row py-3"> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;"> |
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#13EA36 ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/cogs.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Customization</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;"> |
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#DBC711; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/wrench.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Implementation</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative; border-radius: 4px;"> |
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#FF6B6B ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/lifebuoy.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Support</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative; border-radius: 4px;"> |
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#FFA801 ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/user.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Hire Odoo Developer</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative; border-radius: 4px;"> |
|||
|
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#54A0FF; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/puzzle.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Integration</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;"> |
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#6D7680 ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/update.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Migration</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;"> |
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#786FA6 ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/consultation.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Consultancy</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px;position: relative;border-radius: 4px;"> |
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#F8A5C2 ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/training.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Implementation</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;"> |
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#E6BE26; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/license.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Licensing Consultancy</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="container mt-5"> |
|||
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-4"> |
|||
<p class="m-0" style="font-weight: 600; font-size: 24px; color:#000 !important">Our Industries</p> |
|||
|
|||
</div> |
|||
</div> |
|||
<div class="container"> |
|||
<div class="row my-5 py-4"> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100 " |
|||
style="border-right: 1px solid rgb(209, 209, 209); border-bottom: 1px solid rgb(209, 209, 209); padding: 30px; box-shadow: 6px 0 10px rgba(228, 227, 227, 0.373);"> |
|||
<img src="assets/icons/trading-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Trading</p> |
|||
<p>Easily procure and sell your products</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-right: 1px solid rgb(209, 209, 209);border-bottom: 1px solid rgb(209, 209, 209); padding: 30px;"> |
|||
<img src="assets/icons/pos-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">POS</p> |
|||
<p>Easy configuration and convivial experience</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-right: 1px solid rgb(209, 209, 209);border-bottom: 1px solid rgba(0, 0, 0, 0.2); padding: 30px; box-shadow: 0 5px 10px rgba(228, 227, 227, 0.373)"> |
|||
<img src="assets/icons/education-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Education</p> |
|||
<p>A platform for educational management</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-bottom: 1px solid rgb(209, 209, 209); padding: 30px; "> |
|||
<img src="assets/icons/manufacturing-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Manufacturing</p> |
|||
<p>Plan, track and schedule your operations</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-right: 1px solid rgb(209, 209, 209); padding: 30px;"> |
|||
<img src="assets/icons/ecom-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">E-commerce & Website</p> |
|||
<p>Mobile friendly, awe-inspiring product pages</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-right: 1px solid rgb(209, 209, 209); padding: 30px;box-shadow: 0 -5px 10px rgba(228, 227, 227, 0.373);"> |
|||
<img src="assets/icons/service-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Service Management</p> |
|||
<p>Keep track of services and invoice</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-right: 1px solid rgb(209, 209, 209); padding: 30px; "> |
|||
<img src="assets/icons/restaurant-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Restaurant</p> |
|||
<p>Run your bar or restaurant methodically</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style=" padding: 30px;box-shadow: -5px 0 10px rgba(228, 227, 227, 0.373);"> |
|||
<img src="assets/icons/hotel-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Hotel Management</p> |
|||
<p>An all-inclusive hotel management application</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="container mt-5"> |
|||
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-5"> |
|||
<p class="m-0" style="font-weight: 600; font-size: 24px; color:#000 !important">Support</p> |
|||
</div> |
|||
</div> |
|||
<div class="container my-5"> |
|||
<div class="row" style="background-color: #FFFAFE;"> |
|||
<div class="col-md-6 pb-4 d-flex align-items-center justify-content-center" |
|||
style="border-right: 1px solid #D9D9D9;"> |
|||
<div style="padding: 30px;"> |
|||
<div class="d-flex align-items-center"> |
|||
<img src="assets/misc/support (1) 1.svg" alt="" width="60px" style="margin-right: 12px;"> |
|||
<div style="padding: 0px 8px;"> |
|||
<span |
|||
style="color: #714B67;font-size: 24px;font-weight: 600;padding-bottom: 1rem;">Need |
|||
Help?</span> |
|||
<p class="m-0" style="color:#718096;">Got questions or need help? Get in touch.</p> |
|||
<div style="font-weight: 400;"><span><img src="assets/misc/support-email.svg" alt="" |
|||
width="18px" |
|||
style="filter: invert(1);margin-right: 0.8rem;"></span>odoo@cybrosys.com |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-6 pb-4 d-flex align-items-center justify-content-center"> |
|||
<div style="padding: 30px;"> |
|||
<div class="d-flex align-items-center"> |
|||
<img src="assets/misc/whatsapp 1.svg" alt="" width="60px" style="margin-right: 12px;"> |
|||
<div> |
|||
<span style="color: #714B67;font-size: 24px;font-weight: 600;">WhatsApp</span> |
|||
<p class="m-0" style="color:#718096;">Say hi to us on WhatsApp!</p> |
|||
<div style="font-weight: 400; font-size: 16px;"><span><img src="assets/misc/phone.svg" |
|||
alt="" width="14px" |
|||
style="filter: invert(1); margin-right: 0.8rem;"></span>+91 |
|||
99456767686</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<!-- Optional JavaScript --> |
|||
<!-- jQuery first, then Popper.js, then Bootstrap JS --> |
|||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> |
|||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> |
|||
</body> |
|||
</html> |
@ -0,0 +1,70 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<!-- Tree view of calculate.incentive --> |
|||
<record id="calculate_incentive_view_tree" model="ir.ui.view"> |
|||
<field name="name"> |
|||
calculate.incentive.view.tree.sales_incentive_calculation |
|||
</field> |
|||
<field name="model">calculate.incentive</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Incentive" create="false" import="false"> |
|||
<field name="salesperson_id"/> |
|||
<field name="goal"/> |
|||
<field name="achieved"/> |
|||
<field name="achievement_percentage"/> |
|||
<field name="incentive"/> |
|||
<field name="start_date"/> |
|||
<field name="end_date"/> |
|||
<field name="status"/> |
|||
<field name="check" column_invisible="True"/> |
|||
<field name="date_check" column_invisible="True"/> |
|||
<button name="action_submit_to_accountant" type="object" |
|||
string="Submit for approval" |
|||
invisible="check or not date_check"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<!-- Form view of calculate.incentive --> |
|||
<record id="calculate_incentive_view_form" model="ir.ui.view"> |
|||
<field name="name"> |
|||
calculate.incentive.view.form.sales_incentive_calculation |
|||
</field> |
|||
<field name="model">calculate.incentive</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Incentive Approval"> |
|||
<header> |
|||
<field name="check" invisible="1"/> |
|||
<button name="action_submit_to_accountant" type="object" |
|||
string="Submit to accountant" invisible="check"/> |
|||
<field name="status" widget="statusbar" |
|||
statusbar_visible="unpaid,submit,paid"/> |
|||
</header> |
|||
<sheet> |
|||
<group> |
|||
<field name="salesperson_id" |
|||
readonly="status == 'paid'"/> |
|||
<field name="goal" readonly="status == 'paid'"/> |
|||
<field name="achieved" readonly="status == 'paid'"/> |
|||
<field name="achievement_percentage" |
|||
readonly="status == 'paid'"/> |
|||
<field name="incentive" readonly="status == 'paid'"/> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<!-- Action for calculate.incentive --> |
|||
<record id="calculate_incentive_action" model="ir.actions.act_window"> |
|||
<field name="name">Incentive Calculation</field> |
|||
<field name="type">ir.actions.act_window</field> |
|||
<field name="res_model">calculate.incentive</field> |
|||
<field name="view_mode">tree,pivot,form</field> |
|||
<field name="help" type="html"> |
|||
<p class="oe_view_nocontent_create"> |
|||
Click to create a new incentive setting. |
|||
</p> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,14 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<!-- Inherit gamification.challenge_form_view and add the field to it --> |
|||
<record id="challenge_form_view" model="ir.ui.view"> |
|||
<field name="name">gamification.challenge.view.form.inherit.sales_incentive_calculation</field> |
|||
<field name="model">gamification.challenge</field> |
|||
<field name="inherit_id" ref="gamification.challenge_form_view"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//field[@name='manager_id']" position="after"> |
|||
<field name="incentive_calculation"/> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,17 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<!-- Inherit gamification.goal_list_view and add the field to it --> |
|||
<record id="goal_list_view" model="ir.ui.view"> |
|||
<field name="name"> |
|||
gamification.goal.view.tree.inherit.sales_incentive_calculation |
|||
</field> |
|||
<field name="model">gamification.goal</field> |
|||
<field name="inherit_id" ref="gamification.goal_list_view"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//tree" position="inside"> |
|||
<field name="target_achievement_percentage" |
|||
column_invisible="True"/> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,93 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<!-- Tree view of approve.incentive --> |
|||
<record id="approve_incentive_view_tree" model="ir.ui.view"> |
|||
<field name="name"> |
|||
approve.incentive.view.tree.sales_incentive_calculation |
|||
</field> |
|||
<field name="model">approve.incentive</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Sales"> |
|||
<field name="salesperson_id"/> |
|||
<field name="goal"/> |
|||
<field name="achieved"/> |
|||
<field name="achievement_percentage"/> |
|||
<field name="incentive"/> |
|||
<field name="status"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<!-- Form view of approve.incentive --> |
|||
<record id="approve_incentive_view_form" model="ir.ui.view"> |
|||
<field name="name"> |
|||
approve.incentive.view.form.sales_incentive_calculation |
|||
</field> |
|||
<field name="model">approve.incentive</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Incentive Approval"> |
|||
<header> |
|||
<field name="check" invisible="1"/> |
|||
<button name="action_approve" type="object" string="Approve" |
|||
invisible="check"/> |
|||
<button name="action_rejected" type="object" string="Reject" |
|||
invisible="check"/> |
|||
<field name="status" widget="statusbar" |
|||
statusbar_visible="unpaid,submit,paid"/> |
|||
</header> |
|||
<sheet> |
|||
<group> |
|||
<group> |
|||
<field name="salesperson_id" |
|||
readonly="status == 'paid' or status == 'reject'"/> |
|||
<field name="goal" |
|||
readonly="status == 'paid' or status == 'reject'"/> |
|||
<field name="achieved" |
|||
readonly="status == 'paid' or status == 'reject'"/> |
|||
<field name="achievement_percentage" |
|||
readonly="status == 'paid' or status == 'reject'"/> |
|||
|
|||
</group> |
|||
<group> |
|||
<field name="incentive" |
|||
readonly="status == 'paid' or status == 'reject'"/> |
|||
<field name="journal_id" |
|||
readonly="status == 'paid' or status == 'reject'"/> |
|||
<field name="debit_account_id" |
|||
readonly="status == 'paid' or status == 'reject'"/> |
|||
<field name="credit_account_id" |
|||
readonly="status == 'paid' or status == 'reject'"/> |
|||
</group> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<!-- Search view of approve.incentive --> |
|||
<record id="approve_incentive_view_search" model="ir.ui.view"> |
|||
<field name="name"> |
|||
approve.incentive.search.sales_incentive_calculation |
|||
</field> |
|||
<field name="model">approve.incentive</field> |
|||
<field name="arch" type="xml"> |
|||
<search string="By status"> |
|||
<filter name="status" string="date" |
|||
domain="[('status','=', 'submit')]"/> |
|||
</search> |
|||
</field> |
|||
</record> |
|||
|
|||
<!-- Action for approve.incentive --> |
|||
<record id="approve_incentive_action" model="ir.actions.act_window"> |
|||
<field name="name">Incentive Approval</field> |
|||
<field name="type">ir.actions.act_window</field> |
|||
<field name="res_model">approve.incentive</field> |
|||
<field name="view_mode">tree,form</field> |
|||
<field name="help" type="html"> |
|||
<p class="oe_view_nocontent_create"> |
|||
Click to create a new incentive setting. |
|||
</p> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,31 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<!-- Menu items--> |
|||
<menuitem id="menu_crm_gamification" parent="crm.crm_menu_root" |
|||
groups="sales_team.group_sale_manager" name="Challenges" |
|||
sequence="40"/> |
|||
<menuitem id="menu_invoice_incentive" |
|||
parent="account.menu_finance_receivables" name="Approvals" |
|||
sequence="999"/> |
|||
|
|||
<menuitem id="gamification_badge_menu_crm" |
|||
parent="menu_crm_gamification" |
|||
action="gamification.badge_list_action"/> |
|||
<menuitem id="gamification_challenge_menu_crm" |
|||
parent="menu_crm_gamification" |
|||
action="gamification.challenge_list_action"/> |
|||
<menuitem id="gamification_goal_menu_crm" parent="menu_crm_gamification" |
|||
action="gamification.goal_list_action"/> |
|||
<menuitem id="gamification_incentive_menu_crm" name="Incentive Scheme" |
|||
parent="menu_crm_gamification" |
|||
action="sales_incentive_calculation.sales_incentive_action"/> |
|||
<menuitem id="gamification_incentive_salesperson" |
|||
name="Incentive Calculation" parent="menu_crm_gamification" |
|||
action="sales_incentive_calculation.calculate_incentive_action"/> |
|||
|
|||
<menuitem id="gamification_incentive_approve" |
|||
name="Incentives to Approve" |
|||
parent="menu_invoice_incentive" |
|||
groups="account.group_account_user,account.group_account_manager,sales_team.group_sale_manager" |
|||
action="sales_incentive_calculation.approve_incentive_action"/> |
|||
</odoo> |
@ -0,0 +1,63 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<!-- Form view of sales.incentive --> |
|||
<record id="sales_incentive_view_form" model="ir.ui.view"> |
|||
<field name="name">sales.incentive.view.form</field> |
|||
<field name="model">sales.incentive</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Incentive Settings"> |
|||
<sheet> |
|||
<div align="right"> |
|||
<button name="action_incentive_compute" type="object" |
|||
string="Compute incentive" |
|||
invisible="not active_calculation"/> |
|||
</div> |
|||
<group> |
|||
<group> |
|||
<field name="name"/> |
|||
<field name="active_calculation"/> |
|||
<field name="calculation_method" widget="radio" |
|||
colspan="1"/> |
|||
</group> |
|||
</group> |
|||
<notebook> |
|||
<page string="Incentive settings"> |
|||
<field name="select_incentive_ids"> |
|||
<tree editable="bottom"> |
|||
<field name="upto_percent"/> |
|||
<field name="reward"/> |
|||
<field name="incentive_type"/> |
|||
</tree> |
|||
</field> |
|||
</page> |
|||
</notebook> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<!-- Tree view of sales.incentive --> |
|||
<record id="sales_incentive_view_tree" model="ir.ui.view"> |
|||
<field name="name">sales.incentive.view.tree</field> |
|||
<field name="model">sales.incentive</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Sales"> |
|||
<field name="name"/> |
|||
<field name="calculation_method"/> |
|||
<field name="active_calculation"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<!-- Action for sales.incentive--> |
|||
<record id="sales_incentive_action" model="ir.actions.act_window"> |
|||
<field name="name">Incentive</field> |
|||
<field name="res_model">sales.incentive</field> |
|||
<field name="view_mode">tree,form</field> |
|||
<field name="help" type="html"> |
|||
<p class="oe_view_nocontent_create"> |
|||
Click to create a new incentive Scheme. |
|||
</p> |
|||
</field> |
|||
</record> |
|||
</odoo> |