50 lines
2.5 KiB
Python
50 lines
2.5 KiB
Python
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),
|
|
}
|
|
} |