[MERGE] HR Improvement

bzr revid: hmo@tinyerp.com-20100219104719-5e2pb5mweuqcuie6
This commit is contained in:
Harry (Open ERP) 2010-02-19 16:17:19 +05:30
commit 713ee22c90
32 changed files with 555 additions and 964 deletions

View File

@ -1,27 +1,27 @@
<?xml version="1.0"?>
<openerp>
<data>
<record model="ir.ui.view" id="view_crm_job_categ_graph">
<field name="name">report.crm.job.categ.graph</field>
<field name="model">report.crm.job.categ</field>
<record model="ir.ui.view" id="view_crm_applicant_categ_graph">
<field name="name">report.crm.applicant.categ.graph</field>
<field name="model">report.crm.applicant.categ</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Jobs by Sections and Categories" type="bar" orientation="horizontal">
<graph string="Applicants by Sections and Categories" type="bar" orientation="horizontal">
<field name="categ_id"/>
<field name="nbr" operator="+"/>
<field name="state" group="True"/>
</graph>
</field>
</record>
<act_window name="Jobs Requests Of The Month by Applied Job"
<act_window name="Applicants Requests Of The Month by Applied Job"
domain="[('month','=',time.strftime('%%m')),('state','!=','done'),('state','!=','cancel')]"
res_model="report.crm.job.categ"
res_model="report.crm.applicant.categ"
view_type="form"
view_mode="graph,tree,form"
view_id="view_crm_job_categ_graph"
id="act_jobs_categ"/>
view_id="view_crm_applicant_categ_graph"
id="act_applicants_categ"/>
<record model="ir.ui.view" id="board_crm_hr_statistical_form">
<field name="name">CRM - Statistical Dashboard Form</field>
<field name="model">board.board</field>
@ -32,8 +32,8 @@
<hpaned>
<child2>
<action
string="Jobs Requests Of The Month by Applied Job"
name="%(act_jobs_categ)d"
string="Applicants Requests Of The Month by Applied Job"
name="%(act_applicants_categ)d"
colspan="4"/>
</child2>
</hpaned>
@ -41,4 +41,4 @@
</field>
</record>
</data>
</openerp>
</openerp>

View File

@ -22,24 +22,24 @@
from osv import fields,osv,orm
from crm import crm
class crm_job(osv.osv):
_name = "crm.job"
_description = "Job Cases"
class crm_applicant(osv.osv):
_name = "crm.applicant"
_description = "Applicant Cases"
_order = "id desc"
_inherit ='crm.case'
_columns = {
_inherit ='crm.case'
_columns = {
'date_closed': fields.datetime('Closed', readonly=True),
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.job')]"),
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.applicant')]"),
'planned_revenue': fields.float('Planned Revenue'),
'planned_cost': fields.float('Planned Costs'),
'probability': fields.float('Probability (%)'),
'probability': fields.float('Probability (%)'),
'partner_name': fields.char("Employee's Name", size=64),
'partner_name2': fields.char('Employee Email', size=64),
'partner_phone': fields.char('Phone', size=32),
'partner_mobile': fields.char('Mobile', size=32),
'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.job')]"),
'type_id': fields.many2one('crm.case.resource.type', 'Type Name', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.job')]"),
'partner_mobile': fields.char('Mobile', size=32),
'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.applicant')]"),
'type_id': fields.many2one('crm.case.resource.type', 'Type Name', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.applicant')]"),
'duration': fields.float('Duration'),
'case_id': fields.many2one('crm.case', 'Related Case'),
'ref' : fields.reference('Reference', selection=crm._links_get, size=128),
@ -49,7 +49,8 @@ class crm_job(osv.osv):
'som': fields.many2one('res.partner.som', 'State of Mind', help="The minds states allow to define a value scale which represents" \
"the partner mentality in relation to our services.The scale has" \
"to be created with a factor for each level from 0 (Very dissatisfied) to 10 (Extremely satisfied)."),
'phonecall_id':fields.many2one ('crm.phonecall', 'Phonecall'),
'phonecall_id':fields.many2one ('crm.phonecall', 'Phonecall'),
'department_id':fields.many2one('hr.department','Department'),
}
crm_job()
crm_applicant()

View File

@ -8,13 +8,13 @@
<record model="crm.case.categ" id="categ_job1">
<field name="name">Salesman</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.job')]" model="ir.model"/>
<field name="object_id" search="[('model','=','crm.applicant')]" model="ir.model"/>
</record>
<record model="crm.case.categ" id="categ_job2">
<field name="name">Junior Developer</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.job')]" model="ir.model"/>
<field name="object_id" search="[('model','=','crm.applicant')]" model="ir.model"/>
</record>
<!-- Resource(type_id) -->
@ -22,17 +22,17 @@
<record model="crm.case.resource.type" id="type_job1">
<field name="name">Graduate</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.job')]" model="ir.model"/>
<field name="object_id" search="[('model','=','crm.applicant')]" model="ir.model"/>
</record>
<record model="crm.case.resource.type" id="type_job2">
<field name="name">Licenced</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.job')]" model="ir.model"/>
<field name="object_id" search="[('model','=','crm.applicant')]" model="ir.model"/>
</record>
<record model="crm.case.resource.type" id="type_job3">
<field name="name"> > Bac +5</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.job')]" model="ir.model"/>
<field name="object_id" search="[('model','=','crm.applicant')]" model="ir.model"/>
</record>
<!-- STAGE(stage_id) -->
@ -40,17 +40,17 @@
<record model="crm.case.stage" id="stage_job1">
<field name="name">Initial Jobs Demand</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.job')]" model="ir.model"/>
<field name="object_id" search="[('model','=','crm.applicant')]" model="ir.model"/>
</record>
<record model="crm.case.stage" id="stage_job2">
<field name="name">First Interview</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.job')]" model="ir.model"/>
<field name="object_id" search="[('model','=','crm.applicant')]" model="ir.model"/>
</record>
<record model="crm.case.stage" id="stage_job3">
<field name="name">Second Interview</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.job')]" model="ir.model"/>
<field name="object_id" search="[('model','=','crm.applicant')]" model="ir.model"/>
</record>
<record model="crm.case.stage" id="stage_job4">
<field name="name">Contract Proposed</field>
@ -60,17 +60,17 @@
<record model="crm.case.stage" id="stage_job5">
<field name="name">Contract Signed</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.job')]" model="ir.model"/>
<field name="object_id" search="[('model','=','crm.applicant')]" model="ir.model"/>
</record>
<record model="crm.case.stage" id="stage_job6">
<field name="name">Refused by Employee</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.job')]" model="ir.model"/>
<field name="object_id" search="[('model','=','crm.applicant')]" model="ir.model"/>
</record>
<record model="crm.case.stage" id="stage_job7">
<field name="name">Refused by Company</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','crm.job')]" model="ir.model"/>
<field name="object_id" search="[('model','=','crm.applicant')]" model="ir.model"/>
</record>
</data>

View File

@ -1,12 +1,12 @@
<?xml version="1.0"?>
<openerp>
<data noupdate="1">
<!--
((((((((((( Demo Cases )))))))))))
<!--
((((((((((( Demo Cases )))))))))))
-->
<!--For Jobs Requests-->
<record id="crm_case_salesman0" model="crm.job">
<record id="crm_case_salesman0" model="crm.applicant">
<field eval="time.strftime('%Y-%m-01 10:35:50')" name="date"/>
<field eval="time.strftime('%Y-%m-03')" name="date_deadline"/>
<field name="type_id" ref="crm_hr.type_job1"/>
@ -25,7 +25,7 @@
<field eval="&quot;Salesman&quot;" name="name"/>
<field eval="&quot;1236547890&quot;" name="partner_phone"/>
</record>
<record id="crm_case_traineemca0" model="crm.job">
<record id="crm_case_traineemca0" model="crm.applicant">
<field model="res.partner.canal" name="canal_id" search="[('name','=','E-mail')]"/>
<field name="partner_address_id" ref="base.res_partner_address_14"/>
<field name="som" ref="base.som_fury"/>
@ -47,7 +47,7 @@
<field eval="time.strftime('%Y-%m-15')" name="date_deadline"/>
<field eval="&quot;6633225&quot;" name="partner_phone"/>
</record>
<record id="crm_case_fresher0" model="crm.job">
<record id="crm_case_fresher0" model="crm.applicant">
<field model="res.partner.canal" name="canal_id" search="[('name','=','direct')]"/>
<field name="som" ref="base.som_happy"/>
<field eval="time.strftime('%Y-%m-15 16:10:00')" name="date"/>
@ -67,7 +67,7 @@
<field eval="&quot;Fresher&quot;" name="name"/>
<field eval="&quot;999666735&quot;" name="partner_phone"/>
</record>
<record id="crm_case_yrsexperienceinphp0" model="crm.job">
<record id="crm_case_yrsexperienceinphp0" model="crm.applicant">
<field eval="time.strftime('%Y-%m-25 16:25:52')" name="date"/>
<field eval="time.strftime('%Y-%m-28')" name="date_deadline"/>
<field name="categ_id" ref="crm_hr.categ_job2"/>
@ -84,7 +84,7 @@
<field name="stage_id" ref="crm_hr.stage_job6"/>
<field eval="&quot;More than 5 yrs Experience in PHP&quot;" name="name"/>
</record>
<record id="crm_case_marketingjob0" model="crm.job">
<record id="crm_case_marketingjob0" model="crm.applicant">
<field eval="time.strftime('%Y-%m-26 17:15:32')" name="date"/>
<field eval="time.strftime('%Y-%m-28')" name="date_deadline"/>
<field name="type_id" ref="crm_hr.type_job2"/>
@ -103,7 +103,7 @@
<field eval="&quot;Marketing Job&quot;" name="name"/>
<field eval="&quot;33968745&quot;" name="partner_phone"/>
</record>
<record id="crm_case_financejob0" model="crm.job">
<record id="crm_case_financejob0" model="crm.applicant">
<field eval="time.strftime('%Y-%m-26 17:39:42')" name="date"/>
<field eval="time.strftime('%Y-%m-28')" name="date_deadline"/>
<field name="type_id" ref="crm_hr.type_job2"/>
@ -121,8 +121,8 @@
<field name="stage_id" ref="crm_hr.stage_job5"/>
<field eval="&quot;Finance Job&quot;" name="name"/>
<field eval="&quot;33968745&quot;" name="partner_phone"/>
</record>
<record id="crm_case_traineemca1" model="crm.job">
</record>
<record id="crm_case_traineemca1" model="crm.applicant">
<field model="res.partner.canal" name="canal_id" search="[('name','=','E-mail')]"/>
<field name="partner_address_id" ref="base.res_partner_address_14"/>
<field name="som" ref="base.som_fury"/>
@ -144,6 +144,6 @@
<field eval="time.strftime('%Y-%m-15')" name="date_deadline"/>
<field eval="&quot;6630125&quot;" name="partner_phone"/>
</record>
</data>
</openerp>

View File

@ -1,15 +1,15 @@
<?xml version="1.0"?>
<openerp>
<data noupdate="1">
<menuitem icon="terp-hr" id="menu_hr" name="Human Resources"/>
<menuitem icon="terp-hr" id="base.menu_hr" name="Human Resources"/>
######################## JOB OPPORTUNITIES (menu) ###########################
<record model="ir.actions.act_window" id="crm_case_categ0_act_job">
<field name="name">Jobs Requests</field>
<field name="res_model">crm.job</field>
<field name="view_mode">tree,calendar,form,graph</field>
<field name="name">Applicants</field>
<field name="res_model">crm.applicant</field>
<field name="view_mode">tree,form,graph</field>
<field name="view_id" ref="crm_case_tree_view_job"/>
<field name="search_view_id" ref="view_crm_case_jobs_filter"/>
<field name="search_view_id" ref="view_crm_case_jobs_filter"/>
</record>
<record model="ir.actions.act_window.view" id="action_crm_sec_tree_view_act_job">
@ -18,12 +18,6 @@
<field name="view_id" ref="crm_case_tree_view_job"/>
<field name="act_window_id" ref="crm_case_categ0_act_job"/>
</record>
<record model="ir.actions.act_window.view" id="action_crm_sec_calendar_view_act_job">
<field name="sequence" eval="2"/>
<field name="view_mode">calendar</field>
<field name="view_id" ref="crm_case_calendar_view_job"/>
<field name="act_window_id" ref="crm_case_categ0_act_job"/>
</record>
<record model="ir.actions.act_window.view" id="action_crm_sec_form_view_act_job">
<field name="sequence" eval="3"/>
<field name="view_mode">form</field>
@ -39,16 +33,16 @@
<!--<menuitem
name="Jobs - Hiring Process"
id="menu_crm_case_job_req_main"
parent="menu_hr"/>-->
parent="base.menu_hr"/>-->
<menuitem
name="Recruitment"
id="menu_crm_case_job_req_main"
parent="menu_hr"/>
id="base.menu_crm_case_job_req_main"
parent="base.menu_hr"/>
<!--
ALL JOBS REQUESTS
-->
<menuitem name="Applicants" parent="menu_crm_case_job_req_main" id="menu_crm_case_categ0_act_job" action="crm_case_categ0_act_job"/>
<menuitem name="Applicants" parent="base.menu_crm_case_job_req_main" id="menu_crm_case_categ0_act_job" action="crm_case_categ0_act_job" sequence="1"/>
</data>
</openerp>

View File

@ -1,29 +1,29 @@
<?xml version="1.0"?>
<openerp>
<data>
# ------------------------------------------------------
# Job Categories
# ------------------------------------------------------
<record id="crm_job_categ_action" model="ir.actions.act_window">
<field name="name">Job Categories</field>
<field name="name">Applicant Categories</field>
<field name="res_model">crm.case.categ</field>
<field name="view_type">form</field>
<field name="view_id" ref="crm.crm_case_categ_tree-view"/>
<field name="domain">[('object_id.model', '=', 'crm.claim')]</field>
<field name="context">{'object_id':'crm.job'}</field>
<field name="view_id" ref="crm.crm_case_categ_tree-view"/>
<field name="domain">[('object_id.model', '=', 'crm.applicant')]</field>
<field name="context">{'object_id':'crm.applicant'}</field>
</record>
# ------------------------------------------------------
# ------------------------------------------------------
# Stage
# ------------------------------------------------------
# ------------------------------------------------------
<record id="crm_job_stage_act" model="ir.actions.act_window">
<field name="name">Job Stages</field>
<field name="name">Applicant Stages</field>
<field name="res_model">crm.case.stage</field>
<field name="view_type">form</field>
<field name="view_id" ref="crm.crm_case_stage_tree"/>
<field name="domain">[('object_id.model', '=', 'crm.claim')]</field>
<field name="context">{'object_id':'crm.job'}</field>
<field name="domain">[('object_id.model', '=', 'crm.applicant')]</field>
<field name="context">{'object_id':'crm.applicant'}</field>
</record>
<menuitem action="crm_job_stage_act" id="menu_crm_job_stage_act" parent="crm.menu_crm_case_stage"/>
# ------------------------------------------------------
@ -31,13 +31,14 @@
# ------------------------------------------------------
<record model="ir.ui.view" id="crm_case_tree_view_job">
<field name="name">CRM - Jobs Requests Tree</field>
<field name="model">crm.job</field>
<field name="name">Jobs - Recruitment Tree</field>
<field name="model">crm.applicant</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Jobs - Recruitment Tree" colors="red:state=='open';black:state in ('draft', 'cancel','done','pending')">
<field name="id"/>
<field name="name" string="Description"/>
<field name="department_id"/>
<field name="partner_name" string="Name"/>
<field name="email_from" string="Candidate Email"/>
<field name="partner_phone" string="Candidate Phone"/>
@ -48,55 +49,48 @@
<field name="state"/>
<button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward"/>
<button name="case_pending" string="Pending" states="draft,open" type="object" icon="gtk-media-pause"/>
<button name="case_close" string="Hired" states="open,draft,pending" type="object" icon="terp-partner"/>
<button name="case_close" string="Hired" states="open,draft,pending" type="object" icon="terp-partner"/>
<button name="case_cancel" string="Refused" states="draft,open,pending" type="object" icon="gtk-cancel"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="crm_case_form_view_job">
<field name="name">CRM - Jobs Requests Form</field>
<field name="model">crm.job</field>
<field name="name">Jobs - Recruitment Form</field>
<field name="model">crm.applicant</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Jobs - Recruitment Form">
<group colspan="4" col="7">
<field name="name" string="Description" colspan="2"/>
<field name="section_id" colspan="1" widget="selection"/>
<field name="department_id" widget="selection"/>
<field name="user_id" string="Responsible" select="2"/>
<button string="Schedule a Phone Call"
name="%(wizard_crm_job_reschedule_phone_call)d" icon="gtk-redo" type="action"/>
<newline/>
<label string="Stage: " align="1.0"/>
<group colspan="1" col="2">
<field name="stage_id" select="1" nolabel="1"/>
<button icon="gtk-go-forward" string="" name="stage_next" type="object"/>
</group>
<field name="date" string="Next Interview"/>
<field name="duration" widget="float_time"/>
<field name="partner_name" string="Candidate Name"/>
<field name="partner_phone"/>
<button name="%(wizard_crm_job_meeting_set)d" string="Schedule Meeting" icon="terp-crm" type="action"/>
<field name="phonecall_id" select="1"/>
<button string="Schedule a Phone Call"
name="%(wizard_crm_job_reschedule_phone_call)d" icon="gtk-redo" type="action" attrs="{'invisible':[('phonecall_id','!=',False)]}"/>
</group>
<notebook colspan="4">
<page string="Job Info">
<field name="partner_name" string="Candidate Name"/>
<field name="partner_name2" string="Candidate Name2"/>
<separator colspan="4" string="Communications"/>
<field name="partner_id" on_change="onchange_partner_id(partner_id, email_from)" />
<field name="partner_address_id" string="Contact" on_change="onchange_partner_address_id(partner_address_id, email_from)" colspan="1"/>
<newline/>
<field name="partner_phone"/>
<field name="partner_mobile"/>
<field name="email_from" string="Candidate Email"/>
<newline/>
<group colspan="2" col="3">
<field name="partner_id" on_change="onchange_partner_id(partner_id, email_from)" />
<button string="Convert to Partner"
<field name="email_from" string="Candidate Email" widget="email"/>
<button string="Convert to Partner"
icon="terp-partner" name="%(wizard_crm_job_partner_create)d"
type="action" attrs="{'invisible':[('partner_id','!=',False)]}"
/>
</group>
<field name="partner_address_id" string="Contact" on_change="onchange_partner_address_id(partner_address_id, email_from)" colspan="1"/>
<newline/>
<newline/>
<separator colspan="4" string="Contract Data"/>
<field name="probability" string="Availability (weeks)"/>
<newline/>
@ -120,7 +114,7 @@
<page string="Internal Notes">
<field name="description" nolabel="1" colspan="4"/>
</page>
<page string="History">
<page string="History" groups="base.group_extended">
<field name="id" select="1"/>
<field name="active"/>
<field name="canal_id"/>
@ -174,23 +168,10 @@
</field>
</record>
<record model="ir.ui.view" id="crm_case_calendar_view_job">
<field name="name">CRM - Jobs Requests Calendar</field>
<field name="model">crm.job</field>
<field name="type">calendar</field>
<field name="priority" eval="2"/>
<field name="arch" type="xml">
<calendar string="Meeting With Candidates" date_start="date" color="user_id" date_delay="duration">
<field name="name"/>
<field name="partner_name"/>
<field name="partner_name2"/>
</calendar>
</field>
</record>
<record model="ir.ui.view" id="crm_case_graph_view_job">
<field name="name">CRM - Jobs Requests Graph</field>
<field name="model">crm.job</field>
<field name="name">Jobs - Recruitment Graph</field>
<field name="model">crm.applicant</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Cases By Stage and Estimates" type="bar" orientation="vertical">
@ -199,11 +180,11 @@
<field name="state" group="True"/>
</graph>
</field>
</record>
</record>
<record id="view_crm_case_jobs_filter" model="ir.ui.view">
<field name="name">CRM - Jobs Requests Search</field>
<field name="model">crm.job</field>
<field name="name">Jobs - Recruitment Search</field>
<field name="model">crm.applicant</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Jobs">
@ -238,12 +219,12 @@
<field name="email_from" select='1' string="Email"/>
<field name="user_id" select="1" widget="selection"/>
</group>
<field name="section_id" select="1" widget="selection" string="Section">
<field name="department_id" select="1" widget="selection" string="Department">
<filter icon="terp-crm"
domain="[('section_id','=',context.get('section_id',False))]"
help="My section"
/>
</field>
domain="[('department_id','=',context.get('department_id',False))]"
help="My Department"/>
</field>
</search>
</field>
</record>

View File

@ -1,29 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<data>
<wizard
id="wizard_crm_job_reschedule_phone_call"
keyword="client_action_multi"
model="crm.job"
name="crm.job.reschedule_phone_call"
model="crm.applicant"
name="crm.applicant.reschedule_phone_call"
multi="True"
string="Schedule Phone Call" />
string="Schedule Phone Call" />
<wizard
id="wizard_crm_job_meeting_set"
keyword="client_action_multi"
model="crm.job"
name="crm.job.meeting_set"
model="crm.applicant"
name="crm.applicant.meeting_set"
multi="True"
string="Schedule Meeting"/>
string="Schedule Meeting"/>
<wizard
id="wizard_crm_job_partner_create"
keyword="client_action_multi"
model="crm.job"
name="crm.job.partner_create"
model="crm.applicant"
name="crm.applicant.partner_create"
multi="True"
string="Create Partner"/>
</data>
</openerp>

View File

@ -1,9 +1,9 @@
from osv import fields,osv
import tools
class report_crm_job_user(osv.osv):
_name = "report.crm.job.user"
_description = "Job by user and section"
class report_crm_applicant_user(osv.osv):
_name = "report.crm.applicant.user"
_description = "Applicant by user and section"
_auto = False
_inherit = "report.crm.case.user"
_columns = {
@ -14,9 +14,9 @@ class report_crm_job_user(osv.osv):
'delay_close': fields.char('Delay to close', size=20, readonly=True),
}
def init(self, cr):
tools.drop_view_if_exists(cr, 'report_crm_job_user')
tools.drop_view_if_exists(cr, 'report_crm_applicant_user')
cr.execute("""
create or replace view report_crm_job_user as (
create or replace view report_crm_applicant_user as (
select
min(c.id) as id,
to_char(c.create_date, 'YYYY') as name,
@ -31,29 +31,29 @@ class report_crm_job_user(osv.osv):
avg(probability)::decimal(16,2) as probability,
to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close
from
crm_job c
crm_applicant c
group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state, c.user_id,c.section_id
)""")
report_crm_job_user()
report_crm_applicant_user()
class report_crm_job_categ(osv.osv):
_name = "report.crm.job.categ"
_description = "Jobs by section and category"
class report_crm_applicant_categ(osv.osv):
_name = "report.crm.applicant.categ"
_description = "Applicants by section and category"
_auto = False
_inherit = "report.crm.case.categ"
_columns = {
'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.job')]"),
'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.applicant')]"),
'amount_revenue': fields.float('Est.Revenue', readonly=True),
'amount_costs': fields.float('Est.Cost', readonly=True),
'amount_revenue_prob': fields.float('Est. Rev*Prob.', readonly=True),
'probability': fields.float('Avg. Probability', readonly=True),
'delay_close': fields.char('Delay Close', size=20, readonly=True),
}
def init(self, cr):
tools.drop_view_if_exists(cr, 'report_crm_job_categ')
tools.drop_view_if_exists(cr, 'report_crm_applicant_categ')
cr.execute("""
create or replace view report_crm_job_categ as (
create or replace view report_crm_applicant_categ as (
select
min(c.id) as id,
to_char(c.create_date, 'YYYY') as name,
@ -68,39 +68,39 @@ class report_crm_job_categ(osv.osv):
avg(probability)::decimal(16,2) as probability,
to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close
from
crm_job c
crm_applicant c
group by c.categ_id,to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state,c.section_id
)""")
report_crm_job_categ()
report_crm_applicant_categ()
class report_crm_job_section(osv.osv):
_name = "report.crm.job.section"
_description = "job by Section"
class report_crm_applicant_section(osv.osv):
_name = "report.crm.applicant.section"
_description = "Applicant by Section"
_auto = False
_inherit = "report.crm.case.section"
def _get_data(self, cr, uid, ids, field_name, arg, context={}):
res = {}
state_perc = 0.0
avg_ans = 0.0
for case in self.browse(cr, uid, ids, context):
if field_name != 'avg_answers':
state = field_name[5:]
cr.execute("select count(*) from crm_job where section_id =%s and state='%s'"%(case.section_id.id,state))
cr.execute("select count(*) from crm_applicant where section_id =%s and state='%s'"%(case.section_id.id,state))
state_cases = cr.fetchone()[0]
perc_state = (state_cases / float(case.nbr_cases) ) * 100
res[case.id] = perc_state
else:
cr.execute('select count(*) from crm_case_log l where l.section_id=%s'%(case.section_id.id))
logs = cr.fetchone()[0]
avg_ans = logs / case.nbr_cases
res[case.id] = avg_ans
res[case.id] = avg_ans
return res
_columns = {
'avg_answers': fields.function(_get_data,string='Avg. Answers', method=True,type="integer"),
'perc_done': fields.function(_get_data,string='%Done', method=True,type="float"),
@ -109,9 +109,9 @@ class report_crm_job_section(osv.osv):
}
_order = 'name desc, section_id'
def init(self, cr):
tools.drop_view_if_exists(cr, 'report_crm_job_section')
tools.drop_view_if_exists(cr, 'report_crm_applicant_section')
cr.execute("""
create or replace view report_crm_job_section as (
create or replace view report_crm_applicant_section as (
select
min(c.id) as id,
to_char(c.create_date, 'YYYY') as name,
@ -123,9 +123,9 @@ class report_crm_job_section(osv.osv):
0.0 as perc_cancel,
to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close
from
crm_job c
crm_applicant c
group by to_char(c.create_date, 'YYYY'),to_char(c.create_date, 'MM'),c.section_id
)""")
report_crm_job_section()
report_crm_applicant_section()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -6,8 +6,8 @@
-->
<record id="view_crm_job_user_tree" model="ir.ui.view">
<field name="name">report.crm.job.user.tree</field>
<field name="model">report.crm.job.user</field>
<field name="name">report.crm.applicant.user.tree</field>
<field name="model">report.crm.applicant.user</field>
<field name="inherit_id" ref="report_crm.view_crm_case_user_tree"/>
<field name="type">tree</field>
<field name="arch" type="xml">
@ -21,8 +21,8 @@
</field>
</record>
<record id="view_crm_job_user_form" model="ir.ui.view">
<field name="name">report.crm.job.user.form</field>
<field name="model">report.crm.job.user</field>
<field name="name">report.crm.applicant.user.form</field>
<field name="model">report.crm.applicant.user</field>
<field name="inherit_id" ref="report_crm.view_crm_case_user_form"/>
<field name="type">form</field>
<field name="arch" type="xml">
@ -37,8 +37,8 @@
</record>
<record id="view_crm_job_user_graph" model="ir.ui.view">
<field name="name">report.crm.job.user.graph</field>
<field name="model">report.crm.job.user</field>
<field name="name">report.crm.applicant.user.graph</field>
<field name="model">report.crm.applicant.user</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph orientation="horizontal" string="jobs by User and Section" type="bar">
@ -50,8 +50,8 @@
</record>
<record id="view_crm_job_user_filter" model="ir.ui.view">
<field name="name">report.crm.job.user.select</field>
<field name="model">report.crm.job.user</field>
<field name="name">report.crm.applicant.user.select</field>
<field name="model">report.crm.applicant.user</field>
<field name="inherit_id" ref="report_crm.view_crm_case_user_filter"/>
<field name="type">search</field>
<field name="arch" type="xml">
@ -61,8 +61,8 @@
</record>
<record id="action_report_crm_job_user_tree" model="ir.actions.act_window">
<field name="name">Jobs by User and Section</field>
<field name="res_model">report.crm.job.user</field>
<field name="name">Applicant by User and Section</field>
<field name="res_model">report.crm.applicant.user</field>
<field name="view_type">form</field>
<field name="view_mode">graph,tree</field>
<field name="view_id" ref="view_crm_job_user_graph"/>
@ -73,14 +73,14 @@
name="Reporting"
parent="hr.menu_hr_root"
sequence="40" />
<menuitem name="Jobs" id="menu_crm_jobs_tree" parent="hr.menu_hr_reporting"/>
<menuitem name="Applicant" id="menu_crm_jobs_tree" parent="hr.menu_hr_reporting" sequence="4"/>
<menuitem action="action_report_crm_job_user_tree" id="menu_crm_job_user_tree" parent="menu_crm_jobs_tree"/>
<!-- # jobs by section and category of case -->
<record id="view_crm_job_categ_tree" model="ir.ui.view">
<field name="name">report.crm.job.categ.tree</field>
<field name="model">report.crm.job.categ</field>
<field name="name">report.crm.applicant.categ.tree</field>
<field name="model">report.crm.applicant.categ</field>
<field name="inherit_id" ref="report_crm.view_crm_case_categ_tree"/>
<field name="type">tree</field>
<field name="arch" type="xml">
@ -94,8 +94,8 @@
</field>
</record>
<record id="view_crm_job_categ_form" model="ir.ui.view">
<field name="name">report.crm.job.categ.form</field>
<field name="model">report.crm.job.categ</field>
<field name="name">report.crm.applicant.categ.form</field>
<field name="model">report.crm.applicant.categ</field>
<field name="inherit_id" ref="report_crm.view_crm_case_categ_form"/>
<field name="type">form</field>
<field name="arch" type="xml">
@ -110,8 +110,8 @@
</record>
<record id="view_crm_job_categ_graph" model="ir.ui.view">
<field name="name">report.crm.job.categ.graph</field>
<field name="model">report.crm.job.categ</field>
<field name="name">report.crm.applicant.categ.graph</field>
<field name="model">report.crm.applicant.categ</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph orientation="horizontal" string="jobs by Section and Categories" type="bar">
@ -123,8 +123,8 @@
</record>
<record id="view_crm_job_categ_filter" model="ir.ui.view">
<field name="name">report.crm.job.categ.select</field>
<field name="model">report.crm.job.categ</field>
<field name="name">report.crm.applicant.categ.select</field>
<field name="model">report.crm.applicant.categ</field>
<field name="inherit_id" ref="report_crm.view_crm_case_categ_filter"/>
<field name="type">search</field>
<field name="arch" type="xml">
@ -134,8 +134,8 @@
</record>
<record id="action_report_crm_job_categ_tree" model="ir.actions.act_window">
<field name="name">Jobs by Categories and Section</field>
<field name="res_model">report.crm.job.categ</field>
<field name="name">Applicant by Categories and Section</field>
<field name="res_model">report.crm.applicant.categ</field>
<field name="view_type">form</field>
<field name="view_mode">graph,tree</field>
<field name="view_id" ref="view_crm_job_categ_graph"/>
@ -146,8 +146,8 @@
<!-- jobs by Section -->
<record id="view_report_crm_job_section_tree" model="ir.ui.view">
<field name="name">report.crm.job.section.tree</field>
<field name="model">report.crm.job.section</field>
<field name="name">report.crm.applicant.section.tree</field>
<field name="model">report.crm.applicant.section</field>
<field name="inherit_id" ref="report_crm.view_report_crm_case_section_tree"/>
<field name="type">tree</field>
<field name="arch" type="xml">
@ -161,8 +161,8 @@
</record>
<record id="view_report_crm_job_section_graph" model="ir.ui.view">
<field name="name">report.crm.job.section.graph</field>
<field name="model">report.crm.job.section</field>
<field name="name">report.crm.applicant.section.graph</field>
<field name="model">report.crm.applicant.section</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph orientation="horizontal" string="jobs by Section" type="bar">
@ -173,8 +173,8 @@
</record>
<record id="view_report_crm_job_section_filter" model="ir.ui.view">
<field name="name">report.crm.job.section.select</field>
<field name="model">report.crm.job.section</field>
<field name="name">report.crm.applicant.section.select</field>
<field name="model">report.crm.applicant.section</field>
<field name="inherit_id" ref="report_crm.view_report_crm_case_section_filter"/>
<field name="type">search</field>
<field name="arch" type="xml">
@ -184,8 +184,8 @@
</record>
<record id="action_report_crm_job_section_tree" model="ir.actions.act_window">
<field name="name">Jobs by Section</field>
<field name="res_model">report.crm.job.section</field>
<field name="name">Applicant by Section</field>
<field name="res_model">report.crm.applicant.section</field>
<field name="view_type">form</field>
<field name="view_mode">graph,tree</field>
<field name="view_id" ref="view_report_crm_job_section_graph"/>

View File

@ -1,5 +1,5 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_crm_job","crm.job","model_crm_job","crm.group_crm_manager",1,1,1,1
"access_report_crm_job_user","report.crm.job.user","model_report_crm_job_user","crm.group_crm_manager",1,0,0,0
"access_report_crm_job_categ","report.crm.job.categ","model_report_crm_job_categ","crm.group_crm_manager",1,0,0,0
"access_repor_crm_job_section","report.crm.job.section","model_report_crm_job_section","crm.group_crm_manager",1,0,0,0
"access_crm_applicant","crm.applicant","model_crm_applicant","crm.group_crm_manager",1,1,1,1
"access_report_crm_applicant_user","report.crm.applicant.user","model_report_crm_applicant_user","crm.group_crm_manager",1,0,0,0
"access_report_crm_applicant_categ","report.crm.applicant.categ","model_report_crm_applicant_categ","crm.group_crm_manager",1,0,0,0
"access_repor_crm_applicant_section","report.crm.applicant.section","model_report_crm_applicant_section","crm.group_crm_manager",1,0,0,0

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_crm_job access_crm_applicant crm.job crm.applicant model_crm_job model_crm_applicant crm.group_crm_manager 1 1 1 1
3 access_report_crm_job_user access_report_crm_applicant_user report.crm.job.user report.crm.applicant.user model_report_crm_job_user model_report_crm_applicant_user crm.group_crm_manager 1 0 0 0
4 access_report_crm_job_categ access_report_crm_applicant_categ report.crm.job.categ report.crm.applicant.categ model_report_crm_job_categ model_report_crm_applicant_categ crm.group_crm_manager 1 0 0 0
5 access_repor_crm_job_section access_repor_crm_applicant_section report.crm.job.section report.crm.applicant.section model_report_crm_job_section model_report_crm_applicant_section crm.group_crm_manager 1 0 0 0

View File

@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
# $Id$
#
@ -40,7 +40,7 @@ class job2phonecall(wizard.interface):
<newline />
<field name='note' colspan="4"/>
<newline />
<field name='section_id' />
<field name='section_id' />
<field name='category_id'/>
</form>"""
@ -50,29 +50,30 @@ class job2phonecall(wizard.interface):
'note' : {'string' : 'Goals', 'type' : 'text'},
'category_id' : {'string' : 'Category', 'type' : 'many2one', 'relation' : 'crm.case.categ', 'required' : True},
'section_id' : {'string' : 'Section', 'type' : 'many2one', 'relation' : 'crm.case.section'},
}
def _default_values(self, cr, uid, data, context):
case_obj = pooler.get_pool(cr.dbname).get('crm.job')
categ_id=pooler.get_pool(cr.dbname).get('crm.case.categ').search(cr, uid, [('name','=','Outbound')])
case = case_obj.browse(cr, uid, data['id'])
def _default_values(self, cr, uid, data, context):
case_obj = pooler.get_pool(cr.dbname).get('crm.applicant')
categ_id=pooler.get_pool(cr.dbname).get('crm.case.categ').search(cr, uid, [('name','=','Outbound')])
case = case_obj.browse(cr, uid, data['id'])
return {
'user_id' : case.user_id and case.user_id.id,
'category_id' : categ_id and categ_id[0] or case.categ_id and case.categ_id.id,
'section_id' : case.section_id and case.section_id.id or False,
'category_id' : categ_id and categ_id[0] or case.categ_id and case.categ_id.id,
'section_id' : case.section_id and case.section_id.id or False,
'note' : case.description
}
def _doIt(self, cr, uid, data, context):
form = data['form']
pool = pooler.get_pool(cr.dbname)
mod_obj = pool.get('ir.model.data')
mod_obj = pool.get('ir.model.data')
result = mod_obj._get_id(cr, uid, 'crm', 'view_crm_case_phonecalls_filter')
res = mod_obj.read(cr, uid, result, ['res_id'])
phonecall_case_obj = pool.get('crm.phonecall')
job_case_obj = pool.get('crm.job')
job_case_obj = pool.get('crm.applicant')
# Select the view
data_obj = pool.get('ir.model.data')
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_phone_tree_view')
id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_phone_form_view')
@ -80,7 +81,7 @@ class job2phonecall(wizard.interface):
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
if id3:
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
for job in job_case_obj.browse(cr, uid, data['ids']):
#TODO : Take other info from job
new_phonecall_id = phonecall_case_obj.create(cr, uid, {
@ -88,7 +89,7 @@ class job2phonecall(wizard.interface):
'user_id' : form['user_id'],
'categ_id' : form['category_id'],
'description' : form['note'],
'date' : form['deadline'],
'date' : form['deadline'],
'section_id' : form['section_id'],
'description':job.description,
'partner_id':job.partner_id.id,
@ -105,7 +106,7 @@ class job2phonecall(wizard.interface):
job_case_obj.write(cr, uid, [job.id], vals)
job_case_obj.case_cancel(cr, uid, [job.id])
phonecall_case_obj.case_open(cr, uid, [new_phonecall_id])
value = {
value = {
'name': _('Phone Call'),
'view_type': 'form',
'view_mode': 'tree,form',
@ -129,14 +130,14 @@ class job2phonecall(wizard.interface):
}
}
job2phonecall('crm.job.reschedule_phone_call')
job2phonecall('crm.applicant.reschedule_phone_call')
class job2meeting(wizard.interface):
def _makeMeeting(self, cr, uid, data, context):
pool = pooler.get_pool(cr.dbname)
job_case_obj = pool.get('crm.job')
meeting_case_obj = pool.get('crm.meeting')
job_case_obj = pool.get('crm.applicant')
meeting_case_obj = pool.get('crm.meeting')
for job in job_case_obj.browse(cr, uid, data['ids']):
new_meeting_id = meeting_case_obj.create(cr, uid, {
'name': job.name,
@ -147,8 +148,8 @@ class job2meeting(wizard.interface):
vals = {}
job_case_obj.write(cr, uid, [job.id], vals)
job_case_obj.case_cancel(cr, uid, [job.id])
meeting_case_obj.case_open(cr, uid, [new_meeting_id])
meeting_case_obj.case_open(cr, uid, [new_meeting_id])
data_obj = pool.get('ir.model.data')
result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_meetings_filter')
id = data_obj.read(cr, uid, result, ['res_id'])
@ -161,7 +162,7 @@ class job2meeting(wizard.interface):
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
if id3:
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
return {
return {
'name': _('Meetings'),
'view_type': 'form',
'view_mode': 'calendar,form,tree',
@ -183,7 +184,7 @@ class job2meeting(wizard.interface):
}
}
job2meeting('crm.job.meeting_set')
job2meeting('crm.applicant.meeting_set')
class partner_create(wizard.interface):
@ -201,7 +202,7 @@ class partner_create(wizard.interface):
def _selectPartner(self, cr, uid, data, context):
pool = pooler.get_pool(cr.dbname)
case_obj = pool.get('crm.job')
case_obj = pool.get('crm.applicant')
for case in case_obj.browse(cr, uid, data['ids']):
if case.partner_id:
raise wizard.except_wizard(_('Warning !'),
@ -210,10 +211,10 @@ class partner_create(wizard.interface):
def _makeOrder(self, cr, uid, data, context):
pool = pooler.get_pool(cr.dbname)
mod_obj = pool.get('ir.model.data')
mod_obj = pool.get('ir.model.data')
result = mod_obj._get_id(cr, uid, 'base', 'view_res_partner_filter')
res = mod_obj.read(cr, uid, result, ['res_id'])
case_obj = pool.get('crm.job')
case_obj = pool.get('crm.applicant')
partner_obj = pool.get('res.partner')
contact_obj = pool.get('res.partner.address')
for case in case_obj.browse(cr, uid, data['ids']):
@ -250,7 +251,7 @@ class partner_create(wizard.interface):
'res_id': int(partner_id),
'view_id': False,
'type': 'ir.actions.act_window',
'search_view_id': res['res_id']
'search_view_id': res['res_id']
}
return value
@ -266,7 +267,7 @@ class partner_create(wizard.interface):
}
}
partner_create('crm.job.partner_create')
partner_create('crm.applicant.partner_create')
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
#
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
@ -15,13 +15,13 @@
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import hr_department
import hr
import installer
import hr_department
import report
import wizard

View File

@ -61,6 +61,33 @@ class hr_employee_marital_status(osv.osv):
}
hr_employee_marital_status()
class crm_job(osv.osv):
def _no_of_employee(self, cr, uid, ids, name,args,context=None):
res = {}
for emp in self.browse(cr, uid, ids):
res[emp.id] = str(len(emp.employee_ids))
return res
_name = "crm.job"
_description = "Job Information"
_columns = {
'name': fields.char('Name', size=128, required=True, select=True),
'ref': fields.char('Code', size=64),
'expected_employees':fields.integer('Expected Employees'),
'no_of_employee': fields.function(_no_of_employee, method=True, string='No of Employee', type='char'),
'employee_ids':fields.one2many('hr.employee', 'job_id','Employees'),
'description': fields.text('Job Description'),
'requirements':fields.text('Requirements'),
'department_id':fields.many2one('hr.department','Department')
}
_defaults = {
'expected_employees': lambda *a: 1,
}
crm_job()
class hr_employee(osv.osv):
_name = "hr.employee"
_description = "Employee"
@ -87,6 +114,9 @@ class hr_employee(osv.osv):
'category_id' : fields.many2one('hr.employee.category', 'Category'),
'child_ids': fields.one2many('hr.employee', 'parent_id','Subordinates'),
'resource_id': fields.many2one('resource.resource','Resource',ondelete='cascade'),
'coach_id':fields.many2one('res.users','Coach'),
'job_id':fields.many2one('crm.job', 'Job'),
}
_defaults = {
'active' : lambda *a: True,
@ -107,4 +137,6 @@ class hr_employee(osv.osv):
]
hr_employee()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -23,9 +23,27 @@ from osv import fields,osv
import tools
class hr_department(osv.osv):
def name_get(self, cr, uid, ids, context=None):
if not len(ids):
return []
reads = self.read(cr, uid, ids, ['name','parent_id'], context)
res = []
for record in reads:
name = record['name']
if record['parent_id']:
name = record['parent_id'][1]+' / '+name
res.append((record['id'], name))
return res
def _dept_name_get_fnc(self, cr, uid, ids, prop, unknow_none, context):
res = self.name_get(cr, uid, ids, context)
return dict(res)
_name = "hr.department"
_columns = {
'name': fields.char('Department Name', size=64, required=True),
'complete_name': fields.function(_dept_name_get_fnc, method=True, type="char", string='Name'),
'company_id': fields.many2one('res.company', 'Company', select=True, required=True),
'parent_id': fields.many2one('hr.department', 'Parent Department', select=True),
'child_ids': fields.one2many('hr.department', 'parent_id', 'Child Departments'),
@ -148,4 +166,11 @@ class res_users(osv.osv):
}
res_users()
#class users(osv.osv):
# _inherit = 'res.users'
# _description = "Users"
# _columns = {
# 'context_department_id': fields.many2one('hr.department', 'Departments'),
# }
#users()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -37,17 +37,31 @@
<field name="field_parent">child_ids</field>
<field name="arch" type="xml">
<tree string="Companies">
<field name="name"/>
<field name="complete_name"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="manager_id"/>
</tree>
</field>
</record>
<record id="view_department_filter" model="ir.ui.view">
<field name="name">Departments</field>
<field name="model">hr.department</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Departments">
<group col='4' colspan='2'>
<field name="name" />
<field name="manager_id" widget="selection"/>
</group>
</search>
</field>
</record>
<record id="open_module_tree_department_tree" model="ir.actions.act_window">
<field name="name">Departments</field>
<field name="res_model">hr.department</field>
<field name="view_type">tree</field>
<field name="domain">[('parent_id','=',False)]</field>
<field name="search_view_id" ref="view_department_filter"/>
</record>
<menuitem action="open_module_tree_department_tree" id="menu_department_tree" parent="base.menu_users"/>
@ -55,10 +69,51 @@
<field name="name">Departments</field>
<field name="res_model">hr.department</field>
<field name="view_type">form</field>
<field name="search_view_id" ref="view_department_filter"/>
</record>
<menuitem action="open_module_tree_department" id="menu_department_def" parent="hr.menu_department_tree"/>
<menuitem action="open_module_tree_department" id="menu_hr_department_tree" parent="menu_hr_human_resources"/>
</data>
<record model="ir.ui.view" id="view_users_form_inherit">
<field name="name">res.users.form</field>
<field name="type">form</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form"/>
<field name="arch" type="xml">
<notebook position="inside">
<page string="Departements Informations">
<separator string="Managers" colspan="4"/>
<field name="parent_id" nolabel="1" colspan="4"/>
<separator string="Subordinates" colspan="4"/>
<field name="child_ids" nolabel="1" colspan="4"/>
</page>
</notebook>
</field>
</record>
<!--<record model="ir.ui.view" id="view_department_form_simple_modif_inherited1">
<field name="name">view.department.form.hr.inherited1</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form_simple_modif" />
<field name="type">form</field>
<field name="arch" type="xml">
<page string="Current Activity" position="inside">
<field name="context_department_id" widget="selection" />
</page>
</field>
</record>
<record id="view_department_form_simple_modif_inherited2" model="ir.ui.view">
<field name="name">view.department.form.hr.inherited2</field>
<field name="model">res.users</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.view_users_form"/>
<field eval="18" name="priority"/>
<field name="arch" type="xml">
<field name="password" position="after">
<field name="context_department_id" completion="1" widget="selection"/>
</field>
</field>
</record>
--></data>
</openerp>

View File

@ -65,8 +65,9 @@
<group col="4" colspan="2">
<separator string="Job Information" colspan="4"/>
<field name="parent_id" select="1" colspan="4"/>
<field name="category_id" colspan="4" widget="selection"/>
<field name="coach_id" select="1" colspan="4"/>
<!-- <field name="category_id" colspan="4" widget="selection"/>-->
<field name="job_id" select="1" colspan="4"/>
</group>
</page>
<page string="Notes">
@ -92,6 +93,21 @@
</tree>
</field>
</record>
<record id="view_employee_filter" model="ir.ui.view">
<field name="name">Employees</field>
<field name="model">hr.employee</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Employees">
<group col='6' colspan='2'>
<field name="name"/>
<field name="parent_id" widget="selection">
<filter icon="terp-partner" domain="[('parent_id','child_of',uid)]" help="Employees under me"/>
</field>
</group>
</search>
</field>
</record>
<record id="open_view_employee_tree" model="ir.actions.act_window">
<field name="name">Employees Structure</field>
<field name="res_model">hr.employee</field>
@ -99,6 +115,7 @@
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_employee_tree"/>
<field name="domain">[('parent_id','=',False)]</field>
<field name="search_view_id" ref="view_employee_filter"/>
</record>
<record id="open_view_employee_list" model="ir.actions.act_window">
@ -107,6 +124,7 @@
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" eval="False"/>
<field name="search_view_id" ref="view_employee_filter"/>
</record>
<!-- <menuitem
id="menu_open_view_employee_list"
@ -125,6 +143,7 @@
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[]</field>
<field name="search_view_id" ref="view_employee_filter"/>
</record>
<!--<menuitem
action="open_view_employee_list_my"
@ -160,11 +179,11 @@
<field name="view_mode">tree,form</field>
</record>
<menuitem
action="action_hr_marital_status"
id="hr_menu_marital_status"
<menuitem
action="action_hr_marital_status"
id="hr_menu_marital_status"
parent="hr.menu_view_employee_category_configuration_form" sequence="3"/>
<!--
=======================
Employee architecture
@ -265,8 +284,8 @@
<field name="res_model">hr.employee</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('category_id','child_of',[active_id])]</field>
<field name="context">{'category_id':active_id}</field>
<!-- <field name="domain">[('category_id','child_of',[active_id])]</field>-->
<!-- <field name="context">{'category_id':active_id}</field>-->
</record>
<record id="hr_employee_category_open" model="ir.values">
@ -279,5 +298,77 @@
<menuitem action="open_view_categ_tree" id="menu_view_employee_category_tree" parent="hr.menu_view_employee_category_form"/>
<record id="view_crm_job_form" model="ir.ui.view">
<field name="name">crm.job.form</field>
<field name="model">crm.job</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Job">
<field name="name" select="1"/>
<field name="ref"/>
<field name="department_id" select="1"/>
<newline/>
<notebook colspan="4">
<page string="Employee">
<field name="employee_ids" colspan='4' nolabel="1" mode="tree,form"/>
<field name="expected_employees"/>
<field name="no_of_employee"/>
</page>
<page string="Description">
<field name="description" colspan='4'/>
<field name="description"/>
</page>
</notebook>
</form>
</field>
</record>
<record id="view_crm_job_tree" model="ir.ui.view">
<field name="name">crm.job.tree</field>
<field name="model">crm.job</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Job">
<field name="name" select="1"/>
<field name="ref"/>
<field name="expected_employees"/>
<field name="department_id" />
<field name="no_of_employee"/>
</tree>
</field>
</record>
<record id="view_job_filter" model="ir.ui.view">
<field name="name">Job</field>
<field name="model">crm.job</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Job">
<group col='3' colspan='4'>
<field name="name"/>
<field name="department_id" widget="selection">
<filter icon="terp-crm"
domain="[('department_id','=',context.get('department_id',False))]"
help="My Departments Jobs"/>
</field>
</group>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="action_crm_job">
<field name="name">Job</field>
<field name="res_model">crm.job</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_crm_job_tree"/>
<field name="search_view_id" ref="view_job_filter"/>
</record>
<menuitem icon="terp-hr" id="base.menu_hr" name="Human Resources"/>
<menuitem
name="Recruitment"
id="base.menu_crm_case_job_req_main"
parent="base.menu_hr"/>
<menuitem name="Job" parent="base.menu_crm_case_job_req_main" id="menu_crm_job" action="action_crm_job" sequence="2"/>
</data>
</openerp>

View File

@ -97,7 +97,7 @@
<field name="type">form</field>
<field name="inherit_id" ref="hr.view_employee_form"/>
<field name="arch" type="xml">
<field name="parent_id" position="after">
<field name="coach_id" position="after">
<field name="state"/>
<button name="attendance_action_change" states="absent" string="Sign In" type="object" icon="gtk-go-back" context="{'type':'sign_in'}"/>
<button name="attendance_action_change" states="present" string="Sign Out" type="object" icon="gtk-go-forward" context="{'type':'sign_out'}"/>

View File

@ -68,7 +68,8 @@ class hr_expense_expense(osv.osv):
'amount': fields.function(_amount, method=True, string='Total Amount'),
'invoice_id': fields.many2one('account.invoice', 'Invoice'),
'currency_id': fields.many2one('res.currency', 'Currency', required=True),
'department_id':fields.many2one('hr.department','Department'),
'company_id': fields.many2one('res.company', 'Company', required=True),
'state': fields.selection([
('draft', 'Draft'),
('confirm', 'Waiting confirmation'),
@ -85,6 +86,7 @@ class hr_expense_expense(osv.osv):
'employee_id' : _employee_get,
'user_id' : lambda cr,uid,id,c={}: id,
'currency_id': _get_currency,
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
}
def expense_confirm(self, cr, uid, ids, *args):
#for exp in self.browse(cr, uid, ids):
@ -215,12 +217,12 @@ class hr_expense_line(osv.osv):
if product_id:
product=self.pool.get('product.product').browse(cr,uid,product_id, context=context)
v['name']=product.name
# Compute based on pricetype of employee company
pricetype_id = self.pool.get('hr.employee').browse(cr,uid,employee_id).user_id.company_id.property_valuation_price_type.id
pricetype=self.pool.get('product.price.type').browse(cr,uid,pricetype_id)
amount_unit=product.price_get(pricetype.field, context)[product.id]
v['unit_amount']=amount_unit
if not uom_id:
v['uom_id']=product.uom_id.id

View File

@ -29,10 +29,13 @@
<tree string="Expenses">
<field name="date"/>
<field name="employee_id"/>
<field name="department_id"/>
<field name="name"/>
<field name="ref"/>
<field name="amount"/>
<field name="state"/>
<button name="confirm" states="draft" string="Confirm" type="workflow" icon="gtk-apply"/>
<button name="refuse" states="confirm,draft,accepted" string="Refuse" type="workflow" icon="gtk-no"/>
</tree>
</field>
</record>
@ -45,10 +48,13 @@
<tree string="Expenses" editable="top">
<field name="date"/>
<field name="employee_id"/>
<field name="department_id"/>
<field name="name"/>
<field name="ref"/>
<field name="amount"/>
<field name="state"/>
<button name="confirm" states="draft" string="Confirm" type="workflow" icon="gtk-apply"/>
<button name="refuse" states="confirm,draft,accepted" string="Refuse" type="workflow" icon="gtk-no"/>
</tree>
</field>
</record>
@ -66,6 +72,8 @@
<field name="date" select="1"/>
<field name="amount"/>
<field name="currency_id"/>
<field name="department_id"/>
<field name="company_id"/>
</group>
<notebook colspan="4">
<page string="Expense Sheet">
@ -92,7 +100,7 @@
<button name="cancel" states="cancel" string="Cancel" type="workflow" icon="gtk-cancel"/>
<button name="validate" states="confirm" string="Accept" type="workflow" icon="gtk-ok"/>
<button name="invoice" states="accepted" string="Invoice" type="workflow" icon="gtk-print"/>
<button name="draft" states="confirm" string="Set to Draft" type="workflow" icon="gtk-convert"/>
<button name="draft" states="confirm,cancelled" string="Set to Draft" type="workflow" icon="gtk-convert"/>
<button name="refuse" states="confirm,draft,accepted" string="Refuse" type="workflow" icon="gtk-no"/>
</group>
</page>
@ -145,6 +153,11 @@
domain="[('user_id','=',uid)]"/>
</field>
<field name="state" select="1"/>
<field name="department_id" widget="selection">
<filter icon="terp-crm"
domain="[('department_id','=',context.get('department_id',False))]"
help="Expenses of My Department"/>
</field>
</group>
</search>
</field>

View File

@ -1,25 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!-- Roles definition -->
<record id="HR" model="res.roles">
<field name="name">Human Resources - Expenses</field>
</record>
<record id="HR_INV" model="res.roles">
<field name="name">Human Resources - Expenses invoice</field>
</record>
<!-- Workflow definition -->
<record id="wkf_expenses" model="workflow">
<field name="name">hr.wkf.expenses</field>
<field name="osv">hr.expense.expense</field>
<field name="on_create">True</field>
</record>
<record id="act_draft" model="workflow.activity">
<field name="wkf_id" ref="wkf_expenses"/>
<field name="name">draft</field>
@ -51,7 +51,7 @@
<field name="name">refused</field>
<field name="kind">function</field>
<field name="action">expense_canceled()</field>
<field name="flow_stop">True</field>
<!-- <field name="flow_stop">True</field>-->
</record>
<record id="act_invoice" model="workflow.activity">
<field name="wkf_id" ref="wkf_expenses"/>
@ -60,7 +60,7 @@
<field name="subflow_id" ref="account.wkf"/>
<field name="action">action_invoice_create()</field>
</record>
<record id="t1" model="workflow.transition">
<field name="act_from" ref="act_draft"/>
<field name="act_to" ref="act_confirm"/>
@ -89,7 +89,7 @@
<field name="act_to" ref="act_refused"/>
<field name="signal">refuse</field>
</record>
<record id="t6" model="workflow.transition">
<field name="act_from" ref="act_accepted"/>
<field name="act_to" ref="act_refused"/>
@ -118,6 +118,11 @@
<field name="act_to" ref="act_refused"/>
<field name="signal">subflow.cancel</field>
</record>
<record id="t11" model="workflow.transition">
<field name="act_from" ref="act_refused"/>
<field name="act_to" ref="act_draft"/>
<field name="signal">draft</field>
<field name="role_id" ref="HR"/>
</record>
</data>
</openerp>

View File

@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
##################################################################################
#
# Copyright (c) 2005-2006 Axelor SARL. (http://www.axelor.com)
# Copyright (c) 2005-2006 Axelor SARL. (http://www.axelor.com)
# and 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# $Id: hr.py 4656 2006-11-24 09:58:42Z Cyp $
@ -37,13 +37,17 @@ class hr_holidays_status(osv.osv):
for record in self.browse(cr, uid, ids, context):
res[record.id] = {}
max_leaves = leaves_taken = 0
obj_ids = self.pool.get('hr.holidays.per.user').search(cr, uid, [('user_id','=',uid),('employee_id','=',employee_id),('holiday_status','=',record.id)])
if obj_ids:
br_ob=self.pool.get('hr.holidays.per.user').browse(cr, uid, obj_ids)[0]
max_leaves=br_ob.max_leaves
if not return_false:
cr.execute("""SELECT type, sum(number_of_days) FROM hr_holidays WHERE employee_id = %s AND state='validate' AND holiday_status_id = %s GROUP BY type""", (str(employee_id), str(record.id)))
for line in cr.fetchall():
if line[0] =='remove':
leaves_taken = -line[1]
leaves_taken = -line[1]
if line[0] =='add':
max_leaves = line[1]
max_leaves = line[1]
res[record.id]['max_leaves'] = max_leaves
res[record.id]['leaves_taken'] = leaves_taken
res[record.id]['remaining_leaves'] = max_leaves - leaves_taken
@ -92,11 +96,11 @@ class hr_holidays_per_user(osv.osv):
result = {}
for holiday_user in self.browse(cr, uid, ids):
days = 0.0
ids_request = obj_holiday.search(cr, uid, [('employee_id', '=', holiday_user.employee_id.id),('state', '=', 'validate'),('holiday_status', '=', holiday_user.holiday_status.id)])
ids_request = obj_holiday.search(cr, uid, [('employee_id', '=', holiday_user.employee_id.id),('state', '=', 'validate'),('holiday_status_id', '=', holiday_user.holiday_status.id)])
if ids_request:
holidays = obj_holiday.browse(cr, uid, ids_request)
for holiday in holidays:
days += holiday.number_of_days
days -= holiday.number_of_days
days = holiday_user.max_leaves - days
result[holiday_user.id] = days
return result
@ -153,7 +157,8 @@ class hr_holidays(osv.osv):
'allocation_type': fields.selection([('employee','Employee Request'),('company','Company Allocation')], 'Allocation Type', required=True, readonly=True, states={'draft':[('readonly',False)]}, help='This field is only for informative purposes, to depict if the leave request/allocation comes from an employee or from the company'),
'parent_id': fields.many2one('hr.holidays', 'Parent'),
'linked_request_ids': fields.one2many('hr.holidays', 'parent_id', 'Linked Requests',),
'holiday_user_id' : fields.many2one('res.users', 'User'),
'holiday_user_id' : fields.many2one('hr.holidays.per.user', 'User'),
'department_id':fields.many2one('hr.department','Department'),
}
_defaults = {
@ -183,7 +188,7 @@ class hr_holidays(osv.osv):
def _update_user_holidays(self, cr, uid, ids):
for record in self.browse(cr, uid, ids):
if record.state=='validate':
holiday_id=self.pool.get('hr.holidays.per.user').search(cr, uid, [('employee_id','=', record.employee_id.id),('holiday_status','=',record.holiday_status.id)])
holiday_id=self.pool.get('hr.holidays.per.user').search(cr, uid, [('employee_id','=', record.employee_id.id),('holiday_status','=',record.holiday_status_id.id)])
if holiday_id:
obj_holidays_per_user=self.pool.get('hr.holidays.per.user').browse(cr, uid,holiday_id[0])
self.pool.get('hr.holidays.per.user').write(cr,uid,obj_holidays_per_user.id,{'leaves_taken':obj_holidays_per_user.leaves_taken - record.number_of_days})
@ -193,10 +198,10 @@ class hr_holidays(osv.osv):
_('You can not cancel this holiday request. first You have to make its case in draft state.'))
else:
self.pool.get('crm.case').unlink(cr,uid,[record.case_id.id])
def _check_date(self, cr, uid, ids):
if ids:
cr.execute('select number_of_days from hr_holidays where id in ('+','.join(map(str, ids))+')')
cr.execute('select number_of_days_temp from hr_holidays where id in ('+','.join(map(str, ids))+')')
res = cr.fetchall()
if res and res[0][0] < 0:
return False
@ -208,7 +213,7 @@ class hr_holidays(osv.osv):
id_holiday = super(hr_holidays, self).create(cr, uid, vals, *args, **kwargs)
self._create_holiday(cr, uid, [id_holiday])
return id_holiday
def unlink(self, cr, uid, ids, context={}):
self._update_user_holidays(cr, uid, ids)
return super(hr_holidays, self).unlink(cr, uid, ids, context)
@ -217,7 +222,7 @@ class hr_holidays(osv.osv):
holidays_user_obj = self.pool.get('hr.holidays.per.user')
holidays_data = self.browse(cr, uid, ids[0])
list_holiday = []
ids_user_hdays = holidays_user_obj.search(cr, uid, [('employee_id', '=', holidays_data.employee_id.id),('holiday_status', '=', holidays_data.holiday_status.id)])
ids_user_hdays = holidays_user_obj.search(cr, uid, [('employee_id', '=', holidays_data.employee_id.id),('holiday_status', '=', holidays_data.holiday_status_id.id)])
for hdays in holidays_user_obj.browse(cr, uid, ids_user_hdays):
for req in hdays.holiday_ids:
list_holiday.append(req.id)
@ -303,7 +308,7 @@ class hr_holidays(osv.osv):
'company_id':record.employee_id.company_id.id,
'resource_id':record.employee_id.resource_id.id
}
self.pool.get('resource.calendar.leaves').create(cr,uid,vals)
#self.pool.get('resource.calendar.leaves').create(cr,uid,vals)
return True

View File

@ -6,10 +6,15 @@
name="Reporting"
parent="hr.menu_hr_root"
sequence="40" />
<menuitem
id="menu_hr_reporting_holidays"
name="Holidays"
parent="hr.menu_hr_reporting"
sequence="3" />
<wizard string="Print Summary of Holidays"
name="hr.holidays.summary"
id="holidays_summary"/>
<menuitem name="Print Summary of Holidays" parent="hr.menu_hr_reporting"
<menuitem name="Print Summary of Holidays" parent="menu_hr_reporting_holidays"
action="holidays_summary"
type="wizard"
id="menu_holidays_summary" sequence="20"/>

View File

@ -14,16 +14,22 @@
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Leave">
<group col='6' colspan='4'>
<filter icon="gtk-execute" string="My Leaves" domain="[('user_id','=',uid)]" separator="1" help="Leaves Related to Current User"/>
<filter icon="gtk-execute" string="My Departments Leaves" domain="[('user_id','child_of',[uid])]" help="Leaves Related to Department"/>
<group col='8' colspan='4'>
<filter icon="terp-hr" domain="[('state','=','draft')]" string="To Confirm"/>
<filter icon="terp-hr" domain="[('state','=','confirm')]" string="To Validate"/>
<separator orientation="vertical"/>
<field name="name" select='1'/>
<field name="state" select="1">
<filter icon="terp-hr" domain="[('state','=','confirm')]" help="Confirmed Holidays"/>
<filter icon="terp-hr" domain="[('state','=','refuse')]" help="Refused Holidays"/>
<filter icon="terp-hr" domain="[('state','=','validate')]" help="Validated Holidays"/>
</field>
<field name="user_id" select="1" widget="selection">
<filter icon="gtk-execute" help="My Leaves" domain="[('user_id','=',uid)]" />
</field>
<field name="department_id" select="1" widget="selection">
<filter icon="gtk-execute" domain="[('department_id','=',context.get('department_id',False))]"
help="My Departments Leaves"/>
</field>
<field name="name" select='1'/>
<field name="user_id" select="1" widget="selection"/>
</group>
</search>
</field>
@ -49,6 +55,7 @@
<field name="employee_id" select="1" required="1"/>
<field name="number_of_days_temp"/>
<field name="manager_id"/>
<field name="department_id"/>
<field name="notes" colspan="4"/>
<newline/>
<field name="state" select="1" colspan="2"/>
@ -76,6 +83,7 @@
<field name="name" select="1"/>
<field name="holiday_status_id" select="1" />
<field name="employee_id" select="1" required="1"/>
<field name="department_id"/>
<field name="number_of_days_temp"/>
<notebook colspan="4">
<page string="General">
@ -107,6 +115,7 @@
<field name="name" select="1"/>
<field name="holiday_status_id" select="1"/>
<field name="employee_id" select="1" />
<field name="department_id"/>
<field name="type"/>
<field name="date_from" select="1" on_change="onchange_date_from(date_to, date_from)" attrs="{'readonly':[('type','=','add')], 'required':[('type','=','remove')]}"/>
<field name="date_to" select="1" on_change="onchange_date_to(date_from, date_to)" attrs="{'readonly':[('type','=','add')], 'required':[('type','=','remove')]}"/>
@ -138,27 +147,49 @@
<tree string="Leaves">
<field name="name"/>
<field name="employee_id"/>
<field name="department_id"/>
<field name="number_of_days" string="Number of Days" sum='Remaining Days'/>
<field name="date_from"/>
<field name="date_to"/>
<field name="holiday_status_id"/>
<field name="state"/>
<field name="type"/>
<!-- <field name="type"/>-->
</tree>
</field>
</record>
<!-- My leave dashboard -->
<record model="ir.ui.view" id="view_my_leave_board_tree">
<record model="ir.ui.view" id="view_my_leave_board_form">
<field name="name">hr.holidays.per.user.form</field>
<field name="model">hr.holidays.per.user</field>
<field name="type">tree</field>
<field name="type">form</field>
<field name="arch" type="xml">
<tree string="My Leaves" editable="top">
<form string="My Leaves" >
<field name="employee_id"/>
<field name="user_id"/>
<field name="holiday_status"/>
<field name="max_leaves"/>
<field name="leaves_taken" />
<field name="remaining_leaves"/>
<field name="notes" colspan="4"/>
</form>
</field>
</record>
<record model="ir.ui.view" id="view_my_leave_board_tree">
<field name="name">hr.holidays.per.user.tree</field>
<field name="model">hr.holidays.per.user</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="My Leaves" editable="top">
<tree string="My Leaves" />
<field name="employee_id"/>
<field name="user_id"/>
<field name="holiday_status"/>
<field name="max_leaves"/>
<field name="leaves_taken" />
<field name="remaining_leaves"/>
<field name="notes"/>
</tree>
</field>
</record>
@ -289,5 +320,18 @@
view_id ="eval('edit_holiday_new')"
id="act_hr_employee_holiday_request"/>
<record model="ir.actions.act_window" id="action_holiday_per_user">
<field name="name">Holiday Per User</field>
<field name="res_model">hr.holidays.per.user</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_my_leave_board_tree"/>
</record>
<menuitem name="Holiday Per User"
action="action_holiday_per_user"
id="menu_holiday_per_user"
parent="hr.menu_open_view_attendance_reason_config"/>
</data>
</openerp>

View File

@ -6,6 +6,11 @@
name="Reporting"
parent="hr.menu_hr_root"
sequence="40" />
<menuitem
id="menu_hr_reporting_timesheet"
name="Timesheet"
parent="hr.menu_hr_reporting"
sequence="1" />
<report auto="False" id="report_user_timesheet" menu="False" model="hr.employee" name="hr.analytical.timesheet" string="Employee timesheet" xsl="hr_timesheet/report/user_timesheet.xsl"/>
<wizard id="wizard_hr_timesheet" menu="False" model="hr.employee" name="hr.analytical.timesheet" string="Employee Timesheet"/>
@ -13,7 +18,7 @@
<!--<menuitem id="next_id_48" name="Timesheet" parent="hr.menu_hr_reporting"/>-->
<!-- <menuitem action="wizard_hr_timesheet" id="menu_wizard_hr_timesheet" parent="next_id_48" type="wizard"
groups="hr.group_hr_manager"/>-->
<menuitem action="wizard_hr_timesheet" id="menu_wizard_hr_timesheet" parent="hr.menu_hr_reporting" type="wizard"
<menuitem action="wizard_hr_timesheet" id="menu_wizard_hr_timesheet" parent="menu_hr_reporting_timesheet" type="wizard"
groups="hr.group_hr_manager"
/>
@ -21,7 +26,7 @@
<menuitem
action="wizard_hr_timesheet_my"
id="menu_wizard_hr_timesheet_my"
parent="hr.menu_hr_reporting"
parent="menu_hr_reporting_timesheet"
type="wizard"
groups="hr.group_hr_user"
/>
@ -33,7 +38,7 @@
action="wizard_hr_timesheet_users"
id="menu_wizard_hr_timesheet_users"
groups="hr.group_hr_manager"
parent="hr.menu_hr_reporting" type="wizard"/>
parent="menu_hr_reporting_timesheet" type="wizard"/>
</data>
</openerp>

View File

@ -6,6 +6,11 @@
name="Reporting"
parent="hr.menu_hr_root"
sequence="40" />
<menuitem
id="menu_hr_reporting_timesheet_invoice"
name="Timesheet Invoice"
parent="hr.menu_hr_reporting"
sequence="2" />
<report auto="False" id="account_analytic_account_cost_ledger" menu="False" model="account.analytic.account" name="hr.timesheet.invoice.account.analytic.account.cost_ledger" rml="account/project/report/cost_ledger.rml" string="Cost Ledger"/>
<wizard id="account_analytic_account_cost_ledger_report" keyword="client_print_multi" model="account.analytic.account" name="hr.timesheet.invoice.account.analytic.account.cost_ledger.report" string="Cost Ledger"/>
@ -29,7 +34,7 @@
<menuitem action="account_analytic_profit"
id="print_account_analytic_profit"
parent="hr.menu_hr_reporting"
parent="menu_hr_reporting_timesheet_invoice"
type="wizard"
groups="hr.group_hr_manager"/>

View File

@ -246,6 +246,7 @@ class hr_timesheet_sheet(osv.osv):
'period_ids': fields.one2many('hr_timesheet_sheet.sheet.day', 'sheet_id', 'Period', readonly=True),
'account_ids': fields.one2many('hr_timesheet_sheet.sheet.account', 'sheet_id', 'Analytic accounts', readonly=True),
'company_id': fields.many2one('res.company', 'Company'),
'department_id':fields.many2one('hr.department','Department'),
}
def _default_date_from(self,cr, uid, context={}):

View File

@ -8,6 +8,7 @@
<field name="arch" type="xml">
<tree string="Timesheets">
<field name="user_id"/>
<field name="department_id"/>
<field name="date_from"/>
<field name="date_to"/>
<field name="name"/>
@ -27,6 +28,7 @@
<field name="arch" type="xml">
<tree string="Timesheets" editable="top">
<field name="user_id"/>
<field name="department_id"/>
<field name="date_from"/>
<field name="date_to"/>
<field name="name"/>
@ -107,6 +109,7 @@
<field name="date_from"/>
<field name="date_to"/>
<field name="company_id" select="1" groups="base.group_multi_company"/>
<field name="department_id"/>
<notebook colspan="4">
<page string="Daily View">
<group col="6" colspan="4">
@ -194,10 +197,7 @@
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Timesheet">
<group col="10" colspan="4">
<filter icon="terp-partner" string="My Timesheets" domain="[('user_id','=',uid)]" help="My Timesheet"/>
<filter icon="terp-crm" string="My departments timesheets" domain="[('user_id', 'child_of', [uid])]" help="My Departments Timesheet"/>
<separator orientation="vertical"/>
<group col="10" colspan="4">
<filter icon="terp-crm" string="Unvalidated" domain="[('state','&lt;&gt;','done'),('date_to','&lt;',time.strftime('%%Y-%%m-%%d'))]" help="Unvalidated Timesheets"/>
<separator orientation="vertical"/>
<field name="state">
@ -205,7 +205,14 @@
<filter icon="terp-hr" domain="[('state','=','confirm')]" help="Confirmed Timesheets"/>
</field>
<field name="name" select="1"/>
<field name="user_id" select="1" widget="selection"/>
<field name="user_id" select="1" widget="selection">
<filter icon="terp-partner" domain="[('user_id','=',uid)]" help="My Timesheet"/>
</field>
<field name="department_id" widget="selection">
<filter icon="terp-crm"
domain="[('department_id','=',context.get('department_id',False))]"
help="My Departments Timesheet"/>
</field>
</group>
</search>
</field>

View File

@ -1,90 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!-- Example employee -->
<record id="timesheet_group1" model="resource.calendar">
<field name="name">38 Hours/Week</field>
</record>
<record id="employee1" model="hr.employee">
<field name="name">Fabien Pinckaers</field>
<!--<field name="regime">45</field>-->
<field name="user_id" ref="base.user_root"/>
<!--<field name="holiday_max">25</field>-->
</record>
<record model="resource.calendar.week">
<field name="name">Monday morning</field>
<field name="dayofweek">0</field>
<field name="hour_from">08</field>
<field name="hour_to">12</field>
<field name="calendar_id" ref="timesheet_group1"/>
</record>
<record model="resource.calendar.week">
<field name="name">Monday evening</field>
<field name="dayofweek">0</field>
<field name="hour_from">13</field>
<field name="hour_to">18</field>
<field name="calendar_id" ref="timesheet_group1"/>
</record>
<record model="resource.calendar.week">
<field name="name">Tuesday morning</field>
<field name="dayofweek">1</field>
<field name="hour_from">08</field>
<field name="hour_to">12</field>
<field name="calendar_id" ref="timesheet_group1"/>
</record>
<record model="resource.calendar.week">
<field name="name">Tuesday evening</field>
<field name="dayofweek">1</field>
<field name="hour_from">13</field>
<field name="hour_to">18</field>
<field name="calendar_id" ref="timesheet_group1"/>
</record>
<record model="resource.calendar.week">
<field name="name">Wednesday morning</field>
<field name="dayofweek">2</field>
<field name="hour_from">08</field>
<field name="hour_to">12</field>
<field name="calendar_id" ref="timesheet_group1"/>
</record>
<record model="resource.calendar.week">
<field name="name">Wednesday evening</field>
<field name="dayofweek">2</field>
<field name="hour_from">13</field>
<field name="hour_to">18</field>
<field name="calendar_id" ref="timesheet_group1"/>
</record>
<record model="resource.calendar.week">
<field name="name">Thursday morning</field>
<field name="dayofweek">3</field>
<field name="hour_from">08</field>
<field name="hour_to">12</field>
<field name="calendar_id" ref="timesheet_group1"/>
</record>
<record model="resource.calendar.week">
<field name="name">Thursday evening</field>
<field name="hour_from">13</field>
<field name="hour_to">18</field>
<field name="dayofweek">3</field>
<field name="calendar_id" ref="timesheet_group1"/>
</record>
<record model="resource.calendar.week">
<field name="name">Friday morning</field>
<field name="dayofweek">4</field>
<field name="hour_from">08</field>
<field name="hour_to">12</field>
<field name="calendar_id" ref="timesheet_group1"/>
</record>
<record model="resource.calendar.week">
<field name="name">Friday evening</field>
<field name="dayofweek">4</field>
<field name="hour_from">13</field>
<field name="hour_to">18</field>
<field name="calendar_id" ref="timesheet_group1"/>
</record>
</data>
</openerp>

View File

@ -1,153 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from osv import fields,osv
import tools
class hr_department(osv.osv):
_name = "hr.department"
_columns = {
'name': fields.char('Department Name', size=64, required=True),
'company_id': fields.many2one('res.company', 'Company', select=True, required=True),
'parent_id': fields.many2one('hr.department', 'Parent Department', select=True),
'child_ids': fields.one2many('hr.department', 'parent_id', 'Child Departments'),
'note': fields.text('Note'),
'manager_id': fields.many2one('res.users', 'Manager', required=True),
'member_ids': fields.many2many('res.users', 'hr_department_user_rel', 'department_id', 'user_id', 'Members'),
}
def _get_members(self,cr, uid, context={}):
mids = self.search(cr, uid, [('manager_id','=',uid)])
result = {uid:1}
for m in self.browse(cr, uid, mids, context):
for user in m.member_ids:
result[user.id] = 1
return result.keys()
def _check_recursion(self, cr, uid, ids):
level = 100
while len(ids):
cr.execute('select distinct parent_id from hr_department where id in ('+','.join(map(str, ids))+')')
ids = filter(None, map(lambda x:x[0], cr.fetchall()))
if not level:
return False
level -= 1
return True
_constraints = [
(_check_recursion, 'Error! You can not create recursive departments.', ['parent_id'])
]
hr_department()
class ir_action_window(osv.osv):
_inherit = 'ir.actions.act_window'
def read(self, cr, uid, ids, fields=None, context=None,
load='_classic_read'):
select = ids
if isinstance(ids, (int, long)):
select = [ids]
res = super(ir_action_window, self).read(cr, uid, select, fields=fields,
context=context, load=load)
for r in res:
mystring = 'department_users_get()'
if mystring in (r.get('domain', '[]') or ''):
r['domain'] = r['domain'].replace(mystring, str(
self.pool.get('hr.department')._get_members(cr, uid)))
if isinstance(ids, (int, long)):
if res:
return res[0]
else:
return False
return res
ir_action_window()
class res_users(osv.osv):
_inherit = 'res.users'
_description = 'res.users'
def _parent_compute(self, cr, uid, ids, name, args, context={}):
result = {}
obj_dept = self.pool.get('hr.department')
for user_id in ids:
ids_dept = obj_dept.search(cr, uid, [('member_ids', 'in', [user_id])])
parent_ids = []
if ids_dept:
data_dept = obj_dept.read(cr, uid, ids_dept, ['manager_id'])
parent_ids = map(lambda x: x['manager_id'][0], data_dept)
result[user_id] = parent_ids
return result
def _parent_search(self, cr, uid, obj, name, args):
parent = []
for arg in args:
if arg[0] == 'parent_id':
parent = arg[2]
child_ids = self._child_compute(cr, uid, parent,name, args, {})
if not child_ids:
return [('id', 'in', [0])]
return [('id', 'in', child_ids.get(uid,[]))]
def _child_compute(self, cr, uid, ids, name, args, context={}):
obj_dept = self.pool.get('hr.department')
obj_user = self.pool.get('res.users')
result = {}
for manager_id in ids:
child_ids = []
mgnt_dept_ids = obj_dept.search(cr, uid, [('manager_id', '=', manager_id)])
ids_dept = obj_dept.search(cr, uid, [('id', 'child_of', mgnt_dept_ids)])
if ids_dept:
data_dept = obj_dept.read(cr, uid, ids_dept, ['member_ids'])
childs = map(lambda x: x['member_ids'], data_dept)
childs = tools.flatten(childs)
childs = obj_user.search(cr, uid, [('id','in',childs),('active','=',True)])
if manager_id in childs:
childs.remove(manager_id)
child_ids.extend(tools.flatten(childs))
set = {}
map(set.__setitem__, child_ids, [])
child_ids = set.keys()
else:
child_ids = []
result[manager_id] = child_ids
return result
def _child_search(self, cr, uid, obj, name, args):
parent = []
for arg in args:
if arg[0] == 'child_ids':
parent = arg[2]
child_ids = self._child_compute(cr, uid, parent,name, args, {})
if not child_ids:
return [('id', 'in', [0])]
return [('id', 'in', child_ids.get(uid,[]))]
_columns = {
'parent_id': fields.function(_parent_compute, relation='res.users',fnct_search=_parent_search, method=True, string="Managers", type='many2many'),
'child_ids': fields.function(_child_compute, relation='res.users', fnct_search=_child_search,method=True, string="Subordinates", type='many2many'),
}
res_users()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,63 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record id="dep_management" model="hr.department">
<field name="name">Management</field>
<field name="company_id" ref="base.main_company"/>
<field name="manager_id" ref="base.user_root"/>
</record>
<record id="dep_administration" model="hr.department">
<field name="name">Administration</field>
<field name="parent_id" ref="dep_management"/>
<field name="company_id" ref="base.main_company"/>
<field name="manager_id" ref="base.user_root"/>
</record>
<record id="dep_technical" model="hr.department">
<field name="name">Technical department</field>
<field name="parent_id" ref="dep_management"/>
<field name="company_id" ref="base.main_company"/>
<field name="manager_id" ref="base.user_root"/>
</record>
<record id="dep_it" model="hr.department">
<field name="name">IT</field>
<field name="parent_id" ref="dep_technical"/>
<field name="company_id" ref="base.main_company"/>
<field name="manager_id" ref="base.user_root"/>
</record>
<record id="dep_marketing" model="hr.department">
<field name="name">Marketing</field>
<field name="parent_id" ref="dep_management"/>
<field name="company_id" ref="base.main_company"/>
<field name="manager_id" ref="base.user_root"/>
</record>
<record id="dep_sales" model="hr.department">
<field name="name">Sales</field>
<field name="company_id" ref="base.main_company"/>
<field name="manager_id" ref="base.user_root"/>
<field name="parent_id" ref="dep_management"/>
</record>
<record id="dep_sales_europe" model="hr.department">
<field name="name">Sales Europe</field>
<field name="company_id" ref="base.main_company"/>
<field name="manager_id" ref="base.user_root"/>
<field name="parent_id" ref="dep_sales"/>
</record>
<record id="dep_sales_america" model="hr.department">
<field name="name">Sales America</field>
<field name="company_id" ref="base.main_company"/>
<field name="manager_id" ref="base.user_root"/>
<field name="parent_id" ref="dep_sales"/>
</record>
</data>
</openerp>

View File

@ -1,79 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!--
======================
department
======================
-->
<record id="view_department_form" model="ir.ui.view">
<field name="name">hr.department.form</field>
<field name="model">hr.department</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="department">
<field colspan="4" name="name" select="1"/>
<field name="company_id" select="1" widget="selection" groups="base.group_multi_company"/>
<field name="parent_id" select="2"/>
<field colspan="4" name="manager_id" select="1"/>
<notebook colspan="4" >
<page string="Members">
<field colspan="4" name="member_ids" nolabel="1"/>
</page>
<page string="Notes">
<field colspan="4" name="note" nolabel="1"/>
</page>
</notebook>
</form>
</field>
</record>
<record id="view_department_tree" model="ir.ui.view">
<field name="name">hr.department.tree</field>
<field name="model">hr.department</field>
<field name="type">tree</field>
<field name="field_parent">child_ids</field>
<field name="arch" type="xml">
<tree string="Companies">
<field name="name"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="manager_id"/>
</tree>
</field>
</record>
<record id="open_module_tree_department_tree" model="ir.actions.act_window">
<field name="name">Departments</field>
<field name="res_model">hr.department</field>
<field name="view_type">tree</field>
<field name="domain">[('parent_id','=',False)]</field>
</record>
<menuitem action="open_module_tree_department_tree" id="menu_department_tree" parent="base.menu_users"/>
<record id="open_module_tree_department" model="ir.actions.act_window">
<field name="name">Departments</field>
<field name="res_model">hr.department</field>
<field name="view_type">form</field>
</record>
<menuitem action="open_module_tree_department" id="menu_department_def" parent="hr.menu_department_tree"/>
<!-- res.users inherit -->
<record model="ir.ui.view" id="view_users_form_inherit">
<field name="name">res.users.form</field>
<field name="type">form</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form"/>
<field name="arch" type="xml">
<notebook position="inside">
<page string="Departements Informations">
<separator string="Managers" colspan="4"/>
<field name="parent_id" nolabel="1" colspan="4"/>
<separator string="Subordinates" colspan="4"/>
<field name="child_ids" nolabel="1" colspan="4"/>
</page>
</notebook>
</field>
</record>
</data>
</openerp>

View File

@ -1,296 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<menuitem icon="terp-hr" id="menu_hr_root" name="Human Resources" sequence="6"/>
<menuitem
id="menu_hr_reporting"
name="Reporting"
parent="hr.menu_hr_root"
sequence="40" />
<menuitem
id="menu_hr_configuration"
name="Configuration"
parent="hr.menu_hr_root"
sequence="5" groups="group_hr_manager"/>
<!--
==========
Employee
==========
-->
<record id="view_employee_form" model="ir.ui.view">
<field name="name">hr.employee.form</field>
<field name="model">hr.employee</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Employee">
<group colspan="4" col="4">
<field name="name" select="1"/>
<field name="active" select="1"/>
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
<field name="user_id"/>
</group>
<notebook colspan="4">
<page string="Personal Information">
<group col="2" colspan="2">
<separator colspan="2" string="Social IDs"/>
<field name="ssnid"/>
<field name="sinid"/>
<field name="otherid"/>
</group>
<group col="2" colspan="2">
<separator string="Status" colspan="2"/>
<field name="gender"/>
<field name="marital"/>
<field name="country_id"/>
<field name="birthday"/>
</group>
<group col="2" colspan="2">
<separator string="Contact Information" colspan="2"/>
<field name="address_home_id" colspan="2"/>
<field name="address_id" colspan="2"/>
<field name="work_phone"/>
<field name="work_email" widget="email" />
<field name="work_location"/>
</group>
<group col="4" colspan="2">
<separator string="Job Information" colspan="4"/>
<field name="parent_id" select="1" colspan="4"/>
<field name="category_id" colspan="4" widget="selection"/>
</group>
</page>
<page string="Notes">
<field colspan="4" nolabel="1" name="notes"/>
</page>
</notebook>
</form>
</field>
</record>
<record id="view_employee_tree" model="ir.ui.view">
<field name="name">hr.employee.tree</field>
<field name="model">hr.employee</field>
<field name="type">tree</field>
<field name="field_parent">child_ids</field>
<field name="arch" type="xml">
<tree string="Employees">
<field name="name"/>
<field name="work_phone"/>
<field name="work_email"/>
<field name="address_id"/>
<field name="parent_id"/>
</tree>
</field>
</record>
<record id="open_view_employee_tree" model="ir.actions.act_window">
<field name="name">Employees Structure</field>
<field name="res_model">hr.employee</field>
<field name="view_type">tree</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_employee_tree"/>
<field name="domain">[('parent_id','=',False)]</field>
</record>
<record id="open_view_employee_list" model="ir.actions.act_window">
<field name="name">Employees</field>
<field name="res_model">hr.employee</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" eval="False"/>
</record>
<menuitem
id="menu_open_view_employee_list"
name="Employees"
groups="group_hr_manager"
parent="hr.menu_hr_root"/>
<menuitem
action="open_view_employee_tree"
id="menu_open_view_employee_tree"
parent="menu_open_view_employee_list"/>
<record id="open_view_employee_list_my" model="ir.actions.act_window">
<field name="name">All Employees</field>
<field name="res_model">hr.employee</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[]</field>
</record>
<menuitem
action="open_view_employee_list_my"
id="menu_open_view_employee_list_my"
parent="menu_open_view_employee_list"/>
<!--
=======================
Employee architecture
=======================
-->
<record id="view_partner_tree2" model="ir.ui.view">
<field name="name">hr.employee.tree</field>
<field name="model">hr.employee</field>
<field name="type">tree</field>
<field name="field_parent">child_ids</field>
<field name="arch" type="xml">
<tree string="Employees">
<field name="name"/>
<field name="user_id"/>
<field name="address_id"/>
</tree>
</field>
</record>
<record id="action2" model="ir.actions.act_window">
<field name="name">Employee Hierarchy</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">hr.employee</field>
<field name="domain">[('id','in',active_ids)]</field>
<field name="view_type">tree</field>
<field name="view_id" ref="view_partner_tree2"/>
</record>
<ir_set>
<field eval="'action'" name="key"/>
<field eval="'client_action_multi'" name="key2"/>
<field eval="['hr.employee']" name="models"/>
<field name="name">Employees Hierarchy</field>
<field eval="'ir.actions.act_window,'+str(action2)" name="value"/>
<field eval="True" name="isobject"/>
<field eval="True" name="replace"/>
</ir_set>
<!--
============
Working Time
============
-->
<record id="create_group" model="ir.ui.view">
<field name="name">resource.calendar.form</field>
<field name="model">resource.calendar</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Working Time Category">
<field name="name" select="1"/>
<field name="manager" select="1"/>
<newline/>
<field colspan="4" name="week_id" nolabel="1" widget="one2many_list"/>
</form>
</field>
</record>
<record id="edit_workgroup" model="ir.actions.act_window">
<field name="name">Working Time Categories</field>
<field name="res_model">resource.calendar</field>
<field name="view_type">form</field>
<field name="view_id" eval="False"/>
</record>
<menuitem action="edit_workgroup" id="menu_edit_workgroup" parent="hr.menu_hr_configuration"/>
<record id="view_timesheet_tree" model="ir.ui.view">
<field name="name">resource.calendar.week.tree</field>
<field name="model">resource.calendar.week</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Working Time">
<field name="name"/>
<field name="dayofweek"/>
<field name="hour_from" widget="float_time"/>
<field name="hour_to" widget="float_time"/>
</tree>
</field>
</record>
<record id="view_timesheet_form" model="ir.ui.view">
<field name="name">resource.calendar.week.form</field>
<field name="model">resource.calendar.week</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Working Time">
<field colspan="4" name="name" select="1"/>
<field name="date_from"/>
<field name="dayofweek" select="1"/>
<field name="hour_from" widget="float_time"/>
<field name="hour_to" widget="float_time"/>
</form>
</field>
</record>
<!--
============
Employee Category
============
-->
<record id="view_employee_category_form" model="ir.ui.view">
<field name="name">hr.employee.category.form</field>
<field name="model">hr.employee.category</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Employee Category">
<field name="name" select="1"/>
<field name="parent_id" select="1"/>
</form>
</field>
</record>
<record id="view_employee_category_list" model="ir.ui.view">
<field name="name">hr.employee.category.list</field>
<field name="model">hr.employee.category</field>
<field name="type">tree</field>
<field eval="8" name="priority"/>
<field name="arch" type="xml">
<tree string="Employees Categories">
<field name="name"/>
<field name="parent_id"/>
</tree>
</field>
</record>
<record id="view_employee_category_tree" model="ir.ui.view">
<field name="name">hr.employee.category.tree</field>
<field name="model">hr.employee.category</field>
<field name="type">tree</field>
<field name="field_parent">child_ids</field>
<field name="arch" type="xml">
<tree string="Employees Categories">
<field name="name"/>
</tree>
</field>
</record>
<record id="open_view_categ_form" model="ir.actions.act_window">
<field name="name">Categories of Employee</field>
<field name="res_model">hr.employee.category</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem action="open_view_categ_form" id="menu_view_employee_category_form" parent="hr.menu_hr_configuration"/>
<record id="open_view_categ_tree" model="ir.actions.act_window">
<field name="name">Categories structure</field>
<field name="res_model">hr.employee.category</field>
<field name="view_type">tree</field>
<field name="view_id" ref="view_employee_category_tree"/>
<field name="domain">[('parent_id','=',False)]</field>
</record>
<record id="hr_employee_normal_action_tree" model="ir.actions.act_window">
<field name="name">Employees</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">hr.employee</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('category_id','child_of',[active_id])]</field>
<field name="context">{'category_id':active_id}</field>
</record>
<record id="hr_employee_category_open" model="ir.values">
<field eval="'tree_but_open'" name="key2"/>
<field eval="'hr.employee.category'" name="model"/>
<field name="name">Employees by Categories</field>
<field eval="'ir.actions.act_window,%d'%hr_employee_normal_action_tree" name="value"/>
<field eval="True" name="object"/>
</record>
<menuitem action="open_view_categ_tree" id="menu_view_employee_category_tree" parent="hr.menu_view_employee_category_form"/>
</data>
</openerp>