summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorDhaval Suthar <dut@odoo.com>2017-05-10 14:37:37 +0200
committerThibault Delavallée <tde@odoo.com>2017-05-10 15:02:17 +0200
commit956b9f88f7196aa2bb5f4f339b553a6365e7253b (patch)
tree8ac3bbde46a94164b30afdc395b39cbad8d5c83f /addons
parent25411cfbd06b2914bc09a4416ec309009aa068f6 (diff)
[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;
Diffstat (limited to 'addons')
-rw-r--r--addons/hr_recruitment/__init__.py1
-rw-r--r--addons/hr_recruitment/models/hr_recruitment.py6
-rw-r--r--addons/hr_recruitment/report/__init__.py4
-rw-r--r--addons/hr_recruitment/report/hr_recruitment_report.py84
-rw-r--r--addons/hr_recruitment/report/hr_recruitment_report_views.xml73
-rw-r--r--addons/hr_recruitment/security/ir.model.access.csv1
-rw-r--r--addons/hr_recruitment/views/hr_recruitment_views.xml12
7 files changed, 54 insertions, 127 deletions
diff --git a/addons/hr_recruitment/__init__.py b/addons/hr_recruitment/__init__.py
index c3aa29d685e..8134f974fbf 100644
--- a/addons/hr_recruitment/__init__.py
+++ b/addons/hr_recruitment/__init__.py
@@ -2,4 +2,3 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
-from . import report
diff --git a/addons/hr_recruitment/models/hr_recruitment.py b/addons/hr_recruitment/models/hr_recruitment.py
index 3080f328457..8fe63cb0dd5 100644
--- a/addons/hr_recruitment/models/hr_recruitment.py
+++ b/addons/hr_recruitment/models/hr_recruitment.py
@@ -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):
diff --git a/addons/hr_recruitment/report/__init__.py b/addons/hr_recruitment/report/__init__.py
deleted file mode 100644
index f8808cb9486..00000000000
--- a/addons/hr_recruitment/report/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-# -*- encoding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from . import hr_recruitment_report
diff --git a/addons/hr_recruitment/report/hr_recruitment_report.py b/addons/hr_recruitment/report/hr_recruitment_report.py
deleted file mode 100644
index f32133a5421..00000000000
--- a/addons/hr_recruitment/report/hr_recruitment_report.py
+++ /dev/null
@@ -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
- )
- """)
diff --git a/addons/hr_recruitment/report/hr_recruitment_report_views.xml b/addons/hr_recruitment/report/hr_recruitment_report_views.xml
index 06519474476..44d80331bf5 100644
--- a/addons/hr_recruitment/report/hr_recruitment_report_views.xml
+++ b/addons/hr_recruitment/report/hr_recruitment_report_views.xml
@@ -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','&lt;=', time.strftime('%%Y-12-31')),('date_create','&gt;=',time.strftime('%%Y-01-01'))]"/>
+ <filter string="This Year" name="year" domain="[('create_date','&lt;=', time.strftime('%%Y-12-31')),('create_date','&gt;=',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>
diff --git a/addons/hr_recruitment/security/ir.model.access.csv b/addons/hr_recruitment/security/ir.model.access.csv
index f996f829c98..a30b91b9667 100644
--- a/addons/hr_recruitment/security/ir.model.access.csv
+++ b/addons/hr_recruitment/security/ir.model.access.csv
@@ -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
diff --git a/addons/hr_recruitment/views/hr_recruitment_views.xml b/addons/hr_recruitment/views/hr_recruitment_views.xml
index 27a3e33aab2..a970aea785e 100644
--- a/addons/hr_recruitment/views/hr_recruitment_views.xml
+++ b/addons/hr_recruitment/views/hr_recruitment_views.xml
@@ -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>