You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
5.4 KiB
137 lines
5.4 KiB
# -*- 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
|
|
})
|
|
|