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.
		
		
		
		
		
			
		
			
				
					
					
						
							101 lines
						
					
					
						
							4.7 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							101 lines
						
					
					
						
							4.7 KiB
						
					
					
				| # -*- coding: utf-8 -*- | |
| ################################################################################ | |
| # | |
| #    Cybrosys Technologies Pvt. Ltd. | |
| # | |
| #    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |
| #    Author: Junaidul Ansar M (odoo@cybrosys.com) | |
| # | |
| #    You can modify it under the terms of the GNU AFFERO | |
| #    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | |
| # | |
| #    This program is distributed in the hope that it will be useful, | |
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |
| #    GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | |
| # | |
| #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | |
| #    (AGPL v3) along with this program. | |
| #    If not, see <http://www.gnu.org/licenses/>. | |
| # | |
| ################################################################################ | |
| from odoo import api, fields, models | |
| from odoo.exceptions import UserError | |
| 
 | |
| 
 | |
| class EmployeePromotion(models.Model): | |
|     """This model is necessary for add employee promotion details in employee | |
|        module """ | |
|     _name = 'employee.promotion' | |
|     _description = 'Employee Promotion' | |
|     _inherit = ['mail.thread', 'mail.activity.mixin'] | |
|     _rec_name = 'promotion_name' | |
| 
 | |
|     promotion_name = fields.Text(required=True, string='Promotion Name', | |
|                                  help='Promotion name') | |
|     employee_id = fields.Many2one('hr.employee', string='Employee', | |
|                                   required=True, help='Name of employee') | |
|     contract_id = fields.Many2one('hr.contract', string='Contract', | |
|                                   help='Contract of employee', | |
|                                   domain="[('employee_id', '=', employee_id)]") | |
|     job_title_id = fields.Many2one('hr.job', | |
|                                    string='Old Designation', | |
|                                    help='Previous job of employee ') | |
|     job_salary = fields.Float(string='Previous Salary', | |
|                               required=True, help='Previous job salary') | |
|     promotion_date = fields.Date(string='Promotion Date', | |
|                                  default=fields.Date.today(), | |
|                                  help='Date of promotion date') | |
|     promotion_type_id = fields.Many2one('promotion.type', | |
|                                         string='Promotion Type', | |
|                                         required=True, | |
|                                         help='Promotion type of promotion') | |
|     new_designation_id = fields.Many2one('hr.job', | |
|                                          string='New Designation', | |
|                                          required=True, | |
|                                          help='New designation of employee') | |
|     new_salary = fields.Float(string='New Salary', required=True, | |
|                               help='New salary') | |
|     description = fields.Text(string='Description', help='Description of the' | |
|                                                          ' promotion') | |
| 
 | |
|     @api.model | |
|     def create(self, vals): | |
|         """It checks if the new salary is greater than the old salary, | |
|            raising a UserError if it is not the case.""" | |
|         res = super(EmployeePromotion, self).create(vals) | |
|         employee = self.env['hr.employee'].browse(res.employee_id.id) | |
|         employee.write({ | |
|             'promotion_ids': [(4, res.id)], | |
|             'job_id': res.new_designation_id.id | |
|         }) | |
|         if res.job_salary >= res.new_salary: | |
|             raise UserError("New Salary will be Higher than Old ") | |
|         return res | |
| 
 | |
|     @api.onchange('employee_id') | |
|     def _onchange_employee_id(self): | |
|         """This method is called when the employee_id field is changed. | |
|            It searches for an open HR contract history | |
|            record for the selected employee and sets the contract_id and | |
|            job_salary fields based on the | |
|            corresponding values in the contract. | |
|            If no open contract is found, the fields are left blank.""" | |
|         self.job_title_id = self.employee_id.job_id.id | |
|         contract = self.env['hr.contract.history'].search( | |
|             [('employee_id', '=', self.employee_id.id), | |
|              ('state', '=', 'open')]) | |
|         if contract: | |
|             for contract_history in contract: | |
|                 self.contract_id = contract_history.name | |
|                 self.job_salary = contract_history.wage | |
| 
 | |
|     def write(self, vals): | |
|         """ Override the default write method to check if the new salary is | |
|             greater than the current job salary. | |
|             If the new salary is greater, | |
|             raise a UserError with a warning message.""" | |
|         res = super(EmployeePromotion, self).write(vals) | |
|         if self.job_salary >= self.new_salary: | |
|             raise UserError("New Salary will be Higher than Old ") | |
|         return res
 | |
| 
 |