[REF] hr_recruitment: replace report by pivot / graph views
hr.recruitment.report is not necessary anymore as it can be replaced by classic pivot and graph views on hr.applicant model. Applicant has been slighty modified to ease reporting * adding group_operator average on both salary fields; * adding missin delay to close computation on applicant;
This commit is contained in:
committed by
Thibault Delavallée
parent
25411cfbd0
commit
956b9f88f7
@@ -2,4 +2,3 @@
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import models
|
||||
from . import report
|
||||
|
||||
@@ -140,8 +140,8 @@ class Applicant(models.Model):
|
||||
job_id = fields.Many2one('hr.job', "Applied Job")
|
||||
salary_proposed_extra = fields.Char("Proposed Salary Extra", help="Salary Proposed by the Organisation, extra advantages")
|
||||
salary_expected_extra = fields.Char("Expected Salary Extra", help="Salary Expected by Applicant, extra advantages")
|
||||
salary_proposed = fields.Float("Proposed Salary", help="Salary Proposed by the Organisation")
|
||||
salary_expected = fields.Float("Expected Salary", help="Salary Expected by Applicant")
|
||||
salary_proposed = fields.Float("Proposed Salary", group_operator="avg", help="Salary Proposed by the Organisation")
|
||||
salary_expected = fields.Float("Expected Salary", group_operator="avg", help="Salary Expected by Applicant")
|
||||
availability = fields.Date("Availability", help="The date at which the applicant will be available to start working")
|
||||
partner_name = fields.Char("Applicant's Name")
|
||||
partner_phone = fields.Char("Phone", size=32)
|
||||
@@ -151,6 +151,7 @@ class Applicant(models.Model):
|
||||
reference = fields.Char("Referred By")
|
||||
day_open = fields.Float(compute='_compute_day', string="Days to Open")
|
||||
day_close = fields.Float(compute='_compute_day', string="Days to Close")
|
||||
delay_close = fields.Float(compute="_compute_day", string='Delay to Close', readonly=True, group_operator="avg", help="Number of Delay to close", store=True)
|
||||
color = fields.Integer("Color Index", default=0)
|
||||
emp_id = fields.Many2one('hr.employee', string="Employee", track_visibility="onchange", help="Employee linked to the applicant.")
|
||||
user_email = fields.Char(related='user_id.email', type="char", string="User Email", readonly=True)
|
||||
@@ -170,6 +171,7 @@ class Applicant(models.Model):
|
||||
date_create = datetime.strptime(self.create_date, tools.DEFAULT_SERVER_DATETIME_FORMAT)
|
||||
date_closed = datetime.strptime(self.date_closed, tools.DEFAULT_SERVER_DATETIME_FORMAT)
|
||||
self.day_close = (date_closed - date_create).total_seconds() / (24.0 * 3600)
|
||||
self.delay_close = self.day_close - self.day_open
|
||||
|
||||
@api.multi
|
||||
def _get_attachment_number(self):
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import hr_recruitment_report
|
||||
@@ -1,84 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import api, fields, models, tools
|
||||
from odoo.addons.hr_recruitment.models import hr_recruitment
|
||||
|
||||
|
||||
class HrRecruitmentReport(models.Model):
|
||||
_name = "hr.recruitment.report"
|
||||
_description = "Recruitments Statistics"
|
||||
_auto = False
|
||||
_rec_name = 'date_create'
|
||||
_order = 'date_create desc'
|
||||
|
||||
active = fields.Boolean('Active')
|
||||
user_id = fields.Many2one('res.users', 'User', readonly=True)
|
||||
company_id = fields.Many2one('res.company', 'Company', readonly=True)
|
||||
date_create = fields.Datetime('Create Date', readonly=True)
|
||||
date_last_stage_update = fields.Datetime('Last Stage Update', readonly=True)
|
||||
date_closed = fields.Date('Closed', readonly=True)
|
||||
job_id = fields.Many2one('hr.job', 'Applied Job', readonly=True)
|
||||
stage_id = fields.Many2one('hr.recruitment.stage', 'Stage')
|
||||
type_id = fields.Many2one('hr.recruitment.degree', 'Degree')
|
||||
department_id = fields.Many2one('hr.department', 'Department', readonly=True)
|
||||
priority = fields.Selection(hr_recruitment.AVAILABLE_PRIORITIES, 'Appreciation')
|
||||
salary_prop = fields.Float("Salary Proposed", digits=0)
|
||||
salary_prop_avg = fields.Float("Avg. Proposed Salary", group_operator="avg", digits=0)
|
||||
salary_exp = fields.Float("Salary Expected", digits=0)
|
||||
salary_exp_avg = fields.Float("Avg. Expected Salary", group_operator="avg", digits=0)
|
||||
partner_id = fields.Many2one('res.partner', 'Partner', readonly=True)
|
||||
delay_close = fields.Float('Avg. Delay to Close', digits=(16, 2), readonly=True, group_operator="avg", help="Number of Days to close the project issue")
|
||||
last_stage_id = fields.Many2one('hr.recruitment.stage', 'Last Stage')
|
||||
medium_id = fields.Many2one('utm.medium', 'Medium', readonly=True, help="This is the method of delivery. Ex: Postcard, Email, or Banner Ad")
|
||||
source_id = fields.Many2one('utm.source', 'Source', readonly=True, help="This is the source of the link Ex: Search Engine, another domain, or name of email list")
|
||||
|
||||
@api.model_cr
|
||||
def init(self):
|
||||
tools.drop_view_if_exists(self._cr, 'hr_recruitment_report')
|
||||
self._cr.execute("""
|
||||
create or replace view hr_recruitment_report as (
|
||||
select
|
||||
min(s.id) as id,
|
||||
s.active,
|
||||
s.create_date as date_create,
|
||||
date(s.date_closed) as date_closed,
|
||||
s.date_last_stage_update as date_last_stage_update,
|
||||
s.partner_id,
|
||||
s.company_id,
|
||||
s.user_id,
|
||||
s.job_id,
|
||||
s.type_id,
|
||||
s.department_id,
|
||||
s.priority,
|
||||
s.stage_id,
|
||||
s.last_stage_id,
|
||||
s.medium_id,
|
||||
s.source_id,
|
||||
sum(salary_proposed) as salary_prop,
|
||||
(sum(salary_proposed)/count(*)) as salary_prop_avg,
|
||||
sum(salary_expected) as salary_exp,
|
||||
(sum(salary_expected)/count(*)) as salary_exp_avg,
|
||||
extract('epoch' from (s.write_date-s.create_date))/(3600*24) as delay_close,
|
||||
count(*) as nbr
|
||||
from hr_applicant s
|
||||
group by
|
||||
s.active,
|
||||
s.date_open,
|
||||
s.create_date,
|
||||
s.write_date,
|
||||
s.date_closed,
|
||||
s.date_last_stage_update,
|
||||
s.partner_id,
|
||||
s.company_id,
|
||||
s.user_id,
|
||||
s.stage_id,
|
||||
s.last_stage_id,
|
||||
s.type_id,
|
||||
s.priority,
|
||||
s.job_id,
|
||||
s.department_id,
|
||||
s.medium_id,
|
||||
s.source_id
|
||||
)
|
||||
""")
|
||||
@@ -2,8 +2,8 @@
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="view_hr_recruitment_report_pivot" model="ir.ui.view">
|
||||
<field name="name">hr.recruitment.report.pivot</field>
|
||||
<field name="model">hr.recruitment.report</field>
|
||||
<field name="name">hr.applicant.pivot</field>
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot string="Recruitment Analysis" disable_linking="True">
|
||||
<field name="stage_id" type="row"/>
|
||||
@@ -13,8 +13,8 @@
|
||||
</record>
|
||||
|
||||
<record id="view_hr_recruitment_report_graph" model="ir.ui.view">
|
||||
<field name="name">hr.recruitment.report.graph</field>
|
||||
<field name="model">hr.recruitment.report</field>
|
||||
<field name="name">hr.applicant.graph</field>
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Recruitment Analysis">
|
||||
<field name="stage_id" type="row"/>
|
||||
@@ -23,35 +23,15 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Custom reports (aka filters) -->
|
||||
<record id="filter_recruitment_report_recruiter" model="ir.filters">
|
||||
<field name="name">By Recruiter</field>
|
||||
<field name="model_id">hr.recruitment.report</field>
|
||||
<field name="user_id" eval="False"/>
|
||||
<field name="context">{'group_by': ['date_create:month', 'user_id'], 'col_group_by': ['date_create:month']}</field>
|
||||
</record>
|
||||
<record id="filter_recruitment_report_job" model="ir.filters">
|
||||
<field name="name">By Job</field>
|
||||
<field name="model_id">hr.recruitment.report</field>
|
||||
<field name="user_id" eval="False"/>
|
||||
<field name="context">{'group_by': ['date_create:month', 'job_id'], 'col_group_by': ['date_create:month']}</field>
|
||||
</record>
|
||||
<record id="filter_recruitment_report_departmnet" model="ir.filters">
|
||||
<field name="name">By Department</field>
|
||||
<field name="model_id">hr.recruitment.report</field>
|
||||
<field name="user_id" eval="False"/>
|
||||
<field name="context">{'group_by': ['date_create:month', 'department_id'], 'col_group_by': ['date_create:month']}</field>
|
||||
</record>
|
||||
|
||||
<record id="view_hr_recruitment_report_search" model="ir.ui.view">
|
||||
<field name="name">hr.recruitment.report.search</field>
|
||||
<field name="model">hr.recruitment.report</field>
|
||||
<field name="name">hr.applicant.search</field>
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Recruitment Analysis">
|
||||
<field name="job_id"/>
|
||||
<field name="department_id"/>
|
||||
<field name="user_id"/>
|
||||
<filter string="This Year" name="year" domain="[('date_create','<=', time.strftime('%%Y-12-31')),('date_create','>=',time.strftime('%%Y-01-01'))]"/>
|
||||
<filter string="This Year" name="year" domain="[('create_date','<=', time.strftime('%%Y-12-31')),('create_date','>=',time.strftime('%%Y-01-01'))]"/>
|
||||
<separator/>
|
||||
<filter string="Unassigned" domain="[('user_id', '=', False)]"/>
|
||||
<separator/>
|
||||
@@ -64,7 +44,7 @@
|
||||
<field name="priority"/>
|
||||
<field name="stage_id"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="date_create"/>
|
||||
<field name="create_date"/>
|
||||
<field name="date_closed"/>
|
||||
</group>
|
||||
<group expand="1" string="Group By">
|
||||
@@ -74,7 +54,7 @@
|
||||
<filter string="Department" name="department" context="{'group_by':'department_id'}"/>
|
||||
<filter string="Stage" context="{'group_by':'stage_id'}" />
|
||||
<separator/>
|
||||
<filter string="Creation Week" context="{'group_by':'date_create:week'}" help="Creation Week"/>
|
||||
<filter string="Creation Week" context="{'group_by':'create_date:week'}" help="Creation Week"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
@@ -82,17 +62,21 @@
|
||||
|
||||
<record id="action_hr_recruitment_report_all" model="ir.actions.act_window">
|
||||
<field name="name">Recruitment Analysis</field>
|
||||
<field name="res_model">hr.recruitment.report</field>
|
||||
<field name="res_model">hr.applicant</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">graph,pivot</field>
|
||||
<field name="search_view_id" ref="view_hr_recruitment_report_search"/>
|
||||
<field name="view_ids" eval="[
|
||||
(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'pivot', 'view_id': ref('view_hr_recruitment_report_pivot')}),
|
||||
(0, 0, {'view_mode': 'graph', 'view_id': ref('view_hr_recruitment_report_graph')})]"/>
|
||||
<field name="context">{}</field> <!-- force empty -->
|
||||
</record>
|
||||
<menuitem name="Reporting" id="report_hr_recruitment" parent="menu_hr_recruitment_root"
|
||||
<menuitem name="Reports" id="report_hr_recruitment" parent="menu_hr_recruitment_root"
|
||||
sequence="99" action="action_hr_recruitment_report_all"/>
|
||||
<record id="action_hr_recruitment_report_filtered_department" model="ir.actions.act_window">
|
||||
<field name="name">Recruitment Analysis</field>
|
||||
<field name="res_model">hr.recruitment.report</field>
|
||||
<field name="res_model">hr.applicant</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">graph,pivot</field>
|
||||
<field name="search_view_id" ref="view_hr_recruitment_report_search"/>
|
||||
@@ -104,7 +88,7 @@
|
||||
|
||||
<record id="action_hr_recruitment_report_filtered_job" model="ir.actions.act_window">
|
||||
<field name="name">Recruitment Analysis</field>
|
||||
<field name="res_model">hr.recruitment.report</field>
|
||||
<field name="res_model">hr.applicant</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">graph,pivot</field>
|
||||
<field name="search_view_id" ref="view_hr_recruitment_report_search"/>
|
||||
@@ -114,5 +98,28 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Custom reports (aka filters) -->
|
||||
<record id="filter_recruitment_report_recruiter" model="ir.filters">
|
||||
<field name="name">By Recruiter</field>
|
||||
<field name="model_id">hr.applicant</field>
|
||||
<field name="user_id" eval="False"/>
|
||||
<field name="action_id" ref="action_hr_recruitment_report_all"/>
|
||||
<field name="context">{'group_by': ['create_date:month', 'user_id'], 'col_group_by': ['create_date:month']}</field>
|
||||
</record>
|
||||
<record id="filter_recruitment_report_job" model="ir.filters">
|
||||
<field name="name">By Job</field>
|
||||
<field name="model_id">hr.applicant</field>
|
||||
<field name="user_id" eval="False"/>
|
||||
<field name="action_id" ref="action_hr_recruitment_report_all"/>
|
||||
<field name="context">{'group_by': ['create_date:month', 'job_id'], 'col_group_by': ['create_date:month']}</field>
|
||||
</record>
|
||||
<record id="filter_recruitment_report_departmnet" model="ir.filters">
|
||||
<field name="name">By Department</field>
|
||||
<field name="model_id">hr.applicant</field>
|
||||
<field name="user_id" eval="False"/>
|
||||
<field name="action_id" ref="action_hr_recruitment_report_all"/>
|
||||
<field name="context">{'group_by': ['create_date:month', 'department_id'], 'col_group_by': ['create_date:month']}</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_hr_applicant_user,hr.applicant.user,model_hr_applicant,group_hr_recruitment_user,1,1,1,1
|
||||
access_hr_recruitment_report,hr.recruitment.report,model_hr_recruitment_report,group_hr_recruitment_user,1,1,1,1
|
||||
access_hr_recruitment_stage_user,hr.recruitment.stage.user,model_hr_recruitment_stage,group_hr_recruitment_user,1,0,0,0
|
||||
access_hr_recruitment_stage_manager,hr.recruitment.stage.manager,model_hr_recruitment_stage,group_hr_recruitment_user,1,1,1,1
|
||||
access_hr_recruitment_degree,hr.recruitment.degree,model_hr_recruitment_degree,group_hr_recruitment_user,1,1,1,1
|
||||
|
||||
|
@@ -323,6 +323,7 @@
|
||||
<field name="name">Applications</field>
|
||||
<field name="res_model">hr.applicant</field>
|
||||
<field name="view_mode">kanban,tree,form,graph,calendar,pivot</field>
|
||||
<field name="search_view_id" ref="view_crm_case_jobs_filter"/>
|
||||
<field name="context">{'search_default_job_id': [active_id], 'default_job_id': active_id}</field>
|
||||
<field name="help" type="html">
|
||||
<p>
|
||||
@@ -525,7 +526,7 @@
|
||||
<record model="ir.actions.act_window" id="crm_case_categ0_act_job">
|
||||
<field name="name">Applications</field>
|
||||
<field name="res_model">hr.applicant</field>
|
||||
<field name="view_mode">kanban,tree,form,graph,calendar,pivot</field>
|
||||
<field name="view_mode">kanban,tree,form,pivot,graph,calendar</field>
|
||||
<field name="view_id" eval="False"/>
|
||||
<field name="search_view_id" ref="view_crm_case_jobs_filter"/>
|
||||
<field name="context">{}</field>
|
||||
@@ -556,12 +557,19 @@
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_hr_sec_form_view_act_job">
|
||||
<field name="sequence" eval="3"/>
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="crm_case_form_view_job"/>
|
||||
<field name="act_window_id" ref="crm_case_categ0_act_job"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_applicant_action_view_pivot" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="3"/>
|
||||
<field name="view_mode">pivot</field>
|
||||
<field name="view_id" ref="crm_case_pivot_view_job"/>
|
||||
<field name="act_window_id" ref="crm_case_categ0_act_job"/>
|
||||
</record>
|
||||
|
||||
<record id="action_hr_sec_graph_view_act_job" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="4"/>
|
||||
<field name="view_mode">graph</field>
|
||||
|
||||
Reference in New Issue
Block a user