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)