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.
		
		
		
		
		
			
		
			
				
					
					
						
							108 lines
						
					
					
						
							4.2 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							108 lines
						
					
					
						
							4.2 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 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'
							 | 
						|
								
							 |