odoo18/addons_extensions/requisitions/models/hr_requisition.py

86 lines
3.7 KiB
Python

from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
class RecruitmentRequisition(models.Model):
_name = 'recruitment.requisition'
_description = 'Recruitment Requisition'
_inherit = ['mail.thread', 'mail.activity.mixin']
name = fields.Char(string="Requisition Name", required=True, default="New")
department_id = fields.Many2one('hr.department', string="Department", required=True)
requested_by = fields.Many2one('res.users', string="Requested By", default=lambda self: self.env.user)
requested_on = fields.Date(string='Requested On')
hr_manager_id = fields.Many2one('res.users', string="HR Manager", compute='_compute_hr_manager')
hr_job = fields.Many2one('')
position_title = fields.Char(string="Position Title", required=True)
number_of_positions = fields.Integer(string="Number of Positions", required=True)
job_description = fields.Html(string="Job Summary")
job_id = fields.Many2one('hr.job',"JD ID")
state = fields.Selection([
('draft', 'Draft'),
('waiting_approval', 'Waiting Approval'),
('approved', 'Approved'),
('done', 'Done'),
('cancel', 'Cancelled')
], default='draft', track_visibility='onchange')
notes = fields.Text(string="Notes")
primary_skill_ids = fields.Many2many('hr.skill', "recruitment_requisition_primary_hr_skill_rel",
'hr_job_id', 'hr_skill_id', "Primary Skills", required=True)
secondary_skill_ids = fields.Many2many('hr.skill', "recruitment_requisition_secondary_hr_skill_rel",
'hr_job_id', 'hr_skill_id', "Secondary Skills")
assign_to = fields.Many2one('res.users', domain=lambda self: [
('groups_id', 'in', self.env.ref('hr_recruitment.group_hr_recruitment_user').id)])
@api.depends('requested_by')
def _compute_hr_manager(self):
hr_id = self.env['ir.config_parameter'].sudo().get_param('requisitions.requisition_hr_id')
self.hr_manager_id = self.env['res.users'].sudo().browse(int(hr_id)) if hr_id else False
def action_submit(self):
self.name = self.env['ir.sequence'].next_by_code('hr.requisitions')
self.requested_on = fields.Date.today()
self.state = 'waiting_approval'
template = self.env.ref('requisitions.mail_template_recruitment_requisition_notification') # Replace `module_name` with your module name
if template:
template.send_mail(self.id, force_send=True)
def action_approve(self):
for rec in self:
if not rec.assign_to:
raise ValidationError(_("Please Assign a recruitment user"))
rec.state = 'approved'
rec.button_create_jd()
def action_cancel(self):
return {
'type': 'ir.actions.act_window',
'res_model': 'recruitment.requisition.cancel.wizard',
'view_mode': 'form',
'target': 'new',
'context': {'active_id': self.id},
}
def button_create_jd(self):
self.job_id = self.env['hr.job'].create({
'name': self.position_title,
'department_id': self.department_id.id,
'no_of_recruitment':self.number_of_positions,
'description':self.job_description,
'skill_ids': [(6, 0, self.primary_skill_ids.ids)],
'secondary_skill_ids': [(6, 0, self.secondary_skill_ids.ids)],
'requested_by': self.requested_by.partner_id.id,
'user_id': self.assign_to.id
})
self.state ='done'
class HRJob(models.Model):
_inherit = 'hr.job'
requested_by = fields.Many2one('res.partner', string="Requested By", default=lambda self: self.env.user.partner_id)