from odoo import models, fields, api, _ class ResPartner(models.Model): _inherit = 'res.partner' contact_type = fields.Selection([('internal','In-House'),('external','Client-Side')], required=True, default='internal') company_id = fields.Many2one('res.company', default=lambda self: self.env.user.company_id) # Vendor Statistics Fields total_positions_requested = fields.Integer(compute='_compute_vendor_statistics', string='Positions Requested') total_submitted = fields.Integer(compute='_compute_vendor_statistics', string='Total Submitted') total_hired = fields.Integer(compute='_compute_vendor_statistics', string='Total Hired') total_rejected = fields.Integer(compute='_compute_vendor_statistics', string='Total Rejected') job_recruitment_ids = fields.One2many('hr.job.recruitment', 'requested_by', string='Job Requests') @api.depends('contact_type') def _compute_vendor_statistics(self): for partner in self: if partner.contact_type == 'external': # Get all job recruitments requested by this vendor job_recruitments = self.env['hr.job.recruitment'].search([ ('requested_by', '=', partner.id) ]) partner.total_positions_requested = sum(job_recruitments.mapped('no_of_recruitment')) partner.total_submitted = sum(job_recruitments.mapped('no_of_submissions')) partner.total_hired = sum(job_recruitments.mapped('no_of_hired_employee')) partner.total_rejected = sum(job_recruitments.mapped('no_of_refused_submissions')) else: partner.total_positions_requested = 0 partner.total_submitted = 0 partner.total_hired = 0 partner.total_rejected = 0 def action_create_job_request(self): """Action to create a new job request from vendor""" self.ensure_one() return { 'type': 'ir.actions.act_window', 'name': _('Create Job Request'), 'res_model': 'hr.job.recruitment', 'view_mode': 'form', 'target': 'current', 'context': { 'default_requested_by': self.id, 'default_recruitment_type': 'external', 'default_address_id': self.id if self.is_company else (self.parent_id.id if self.parent_id else False), } }