[MERGE] HR Improvement
bzr revid: hmo@tinyerp.com-20100219104719-5e2pb5mweuqcuie6
This commit is contained in:
commit
713ee22c90
|
@ -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>
|
|
@ -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()
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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=""Salesman"" name="name"/>
|
||||
<field eval=""1236547890"" 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=""6633225"" 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=""Fresher"" name="name"/>
|
||||
<field eval=""999666735"" 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=""More than 5 yrs Experience in PHP"" 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=""Marketing Job"" name="name"/>
|
||||
<field eval=""33968745"" 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=""Finance Job"" name="name"/>
|
||||
<field eval=""33968745"" 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=""6630125"" name="partner_phone"/>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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,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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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'}"/>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"/>
|
||||
|
||||
|
|
|
@ -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={}):
|
||||
|
|
|
@ -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','<>','done'),('date_to','<',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>
|
||||
|
|
|
@ -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>
|
|
@ -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:
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
Loading…
Reference in New Issue