[IMP] improved error message, constraints must allways propose a solution
[odoo/odoo.git] / addons / hr_recruitment / hr_recruitment_view.xml
index ee2221b..69a7c10 100644 (file)
@@ -6,11 +6,6 @@
             name="Recruitment"
             parent="hr.menu_hr_configuration"
             sequence="2"/>
-        <menuitem
-            id="menu_hr_config_applicant"
-            name="Applicant"
-            parent="menu_hr_recruitment_recruitment"
-            sequence="2"/>
 
     # ------------------------------------------------------
     # Job Categories
         <field name="view_type">form</field>
         <field name="view_id" ref="crm.crm_case_categ_tree-view"/>
         <field name="domain">[('object_id.model', '=', 'hr.applicant')]</field>
-        <field name="context">{'object_id':'hr.applicant'}</field>
+        <field name="context" eval="{'object_id': ref('model_hr_applicant')}"/>
     </record>
     # ------------------------------------------------------
     # Stage
     # ------------------------------------------------------
     <record id="hr_job_stage_act" model="ir.actions.act_window">
-        <field name="name">Applicant Stages</field>
+        <field name="name">Recruitment / Applicants Stages</field>
         <field name="res_model">hr.recruitment.stage</field>
         <field name="view_type">form</field>
         <field name="domain">[]</field>
         <field name="context">{}</field>
+        <field name="help">Define here your stages of the recruitment process, for example: qualification call, first interview, second interview, refused, hired.</field>
     </record>
 
-    <menuitem action="hr_job_stage_act" id="menu_hr_job_stage_act" name="Stages" parent="menu_hr_config_applicant"/>
 
     # ------------------------------------------------------
     # Jobs
@@ -48,6 +43,7 @@
         <field name="arch" type="xml">
             <tree string="Applicants" colors="grey:state in ('cancel','done');blue:state=='pending'">
                 <field name="create_date"/>
+                <field name="name" string="Subject"/>
                 <field name="partner_name"/>
                 <field name="email_from"/>
                 <field name="partner_phone"/>
@@ -57,6 +53,7 @@
                 <button name="stage_next" string="Next" states="open,pending" type="object" icon="gtk-go-forward"/>
                 <field name="title_action" invisible="context.get('invisible_next_action', True)"/>
                 <field name="date_action" invisible="context.get('invisible_next_date', True)"/>
+                <field name="source_id" invisible="1"/>
                 <field name="survey" invisible="1"/>
                 <field name="response" invisible="1"/>
                 <field name="priority"/>
@@ -67,8 +64,6 @@
                 <field name="state"/>
                 <button name="case_open" string="In Progress" 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_cancel" string="Refused" states="draft,open,pending" type="object" icon="gtk-cancel"/>
             </tree>
         </field>
     </record>
                         <field name="name" string="Subject"/>
                         <field name="partner_name"/>
                         <field name="job_id" on_change="onchange_job(job_id)"/>
-                        <button string="Schedule a Phone Call" name="%(action_hr_recruitment_phonecall)d" icon="gtk-redo" type="action"/>
-                        <button name="action_makeMeeting" type="object" string="Schedule Meeting" icon="terp-hr"/>
+                        <button name="action_makeMeeting" type="object" string="Meeting" icon="gtk-index"/>
                     <newline/>
-                    <field name="department_id" widget="selection"/>
+                    <field name="department_id" widget="selection" on_change="onchange_department_id(department_id)"/>
                     <group colspan="2" col="4">
-                        <field name="stage_id" domain="[('department_id','=',department_id)]"/>
+                        <field name="stage_id" domain="['|',('department_id','=',department_id),('department_id','=',False)]"/>
                         <button name="stage_previous" string="" type="object" icon="gtk-go-back"/>
                         <button icon="gtk-go-forward" string="" name="stage_next" type="object"/>
                     </group>
                     <field name="user_id"/>
-                    <button name="action_print_survey" string="Print Interview" type="object" icon="gtk-print" attrs="{'readonly':[('survey','=',False)]}"/>
-                    <button name="%(survey.action_view_survey_question_message)d" string="Interview Question" type="action" icon="gtk-execute" context="{'survey_id': survey, 'response_id': [response], 'response_no':0 ,'active' : response, 'object' : 'hr.applicant', 'cur_id' :active_id}" attrs="{'readonly':[('survey','=',False)]}" groups="base.group_extended"/>
+                    <field name="survey" invisible="1"/>
+                    <button name="action_print_survey" string="Interview" type="object" icon="gtk-print" attrs="{'readonly':[('survey','=',False)]}"/>
+                    <button name="%(survey.action_view_survey_question_message)d" string="Answer" type="action" icon="gtk-execute" context="{'survey_id': survey, 'response_id': [response], 'response_no':0 ,'active' : response, 'object' : 'hr.applicant'}" attrs="{'readonly':[('survey','=',False)]}" groups="base.group_extended"/>
+                    <field name="response" invisible="1"/>
                     <newline/>
-          <field name="date_action"/>
-          <field name="title_action"/>
+                    <field name="date_action"/>
+                    <field name="title_action"/>
                 </group>
                 <notebook colspan="4">
                     <page string="Job Info">
                         <group col="3" colspan="2">
                             <separator colspan="3" string="Contact"/>
-                            <field name="partner_id" on_change="onchange_partner_id(partner_id, email_from)" />
+                            <field name="partner_id" on_change="onchange_partner_id(partner_id, email_from)"/>
                             <button string="Create Partner"
                                     name="%(action_hr_recruitment_partner_create)d"
-                                    icon="terp-mail-replied" type="action" attrs="{'readonly':[('partner_id','!=',False)]}"/>
+                                    icon="gtk-index" type="action" attrs="{'readonly':[('partner_id','!=',False)]}" groups="base.group_partner_manager"/>
                             <newline/>
                             <field name="partner_address_id" on_change="onchange_partner_address_id(partner_address_id, email_from)" colspan="3"/>
                             <field name="email_from" colspan="3"/>
                             <field name="partner_phone" colspan="3"/>
                             <field name="partner_mobile" colspan="3"/>
                         </group>
-                        <group col="2" colspan="2">
-                            <separator colspan="2" string="Contract Data"/>
-                            <field name="availability"/>
+                        <group col="3" colspan="2">
+                            <separator colspan="3" string="Contract Data"/>
+                            <field name="availability" colspan="3"/>
                             <field name="salary_expected"/>
+                            <field name="salary_expected_extra" nolabel="1"/>
                             <field name="salary_proposed"/>
+                            <field name="salary_proposed_extra" nolabel="1"/>
                         </group>
                         <group col="2" colspan="2">
                             <separator colspan="2" string="Qualification"/>
-                            <!-- <field name="type_id" domain="[('object_id.model', '=', 'hr.applicant')]"/>-->
                             <field name="type_id"/>
                             <field name="priority" string="Appreciation"/>
+                            <field name="source_id"/>
                             <field name="reference"/>
                         </group>
                         <group col="2" colspan="2">
                         </group>
                         <separator colspan="4" string="Status"/>
                         <group col="8" colspan="4">
-                            <field name="state"/>
+                            <field name="state" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/>
+                            <button name="case_cancel" string="Refuse" states="draft,open,pending" type="object" icon="gtk-cancel"/>
                             <button name="case_open" string="In Progress" 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_cancel" string="Refused" states="draft,open,pending" type="object" icon="gtk-cancel"/>
+                            <button name="case_pending" string="Pending" states="open" type="object" icon="gtk-media-pause"/>
+                            <button name="%(action_hr_recruitment_hired_employee)d" string="Hire" states="open,pending" type="action" icon="terp-partner"/>
                             <button name="case_reset" string="Reset to New" states="done,cancel" type="object" icon="gtk-convert"/>
                         </group>
                    </page>
-                   <page string="Emails" groups="base.group_extended">
+                   <page string="Communication &amp; History" groups="base.group_extended">
                        <group colspan="4">
                            <field colspan="4" name="email_cc" string="Global CC" widget="char"/>
                        </group>
-                       <field name="message_ids" colspan="4" nolabel="1" mode="tree,form">
-                            <tree string="Communication history">
+                       <field name="message_ids" colspan="4" nolabel="1" mode="tree" readonly="1">
+                            <tree string="History">
                                 <field name="display_text" string="History Information"/>
-                                <field name="history" invisible="1"/>
+                                <field name="email_from" invisible="1"/>
                                 <button
-                                    string="Reply" attrs="{'invisible': [('history', '!=', True)]}"
-                                    name="%(crm.action_crm_send_mail)d"
-                                    context="{'mail':'reply', 'model': 'hr.applicant', 'include_original' : True}"
+                                    string="Reply" attrs="{'invisible': [('email_from', '=', False)]}"
+                                    name="%(mail.action_email_compose_message_wizard)d"
+                                    context="{'mail.compose.message.mode':'reply', 'message_id':active_id}"
                                     icon="terp-mail-replied" type="action" />
                             </tree>
-                            <form string="Communication history">
-                                <group col="4" colspan="4">
-                                    <field name="email_from"/>
-                                    <field name="date"/>
-                                    <field name="email_to" widget="char" size="512"/>
-                                    <field name="email_cc" widget="char" size="512"/>
-                                    <field name="name" colspan="4" widget="char" size="512"/>
-                                    <field name="history" invisible="1"/>
-                                </group>
-                                <notebook colspan="4">
-                                    <page string="Details">
-                                        <group attrs="{'invisible': [('history', '!=', True)]}">
-                                            <field name="description" colspan="4" nolabel="1" height="250"/>
-                                            <button colspan="4"
-                                                string="Reply"
-                                                name="%(crm.action_crm_send_mail)d"
-                                                context="{'mail':'reply', 'model': 'hr.applicant', 'include_original' : True}"
-                                                icon="terp-mail-replied" type="action" />
-                                        </group>
-                                        <group attrs="{'invisible': [('history', '=', True)]}">
-                                            <field name="display_text" colspan="4" nolabel="1"  height="250"/>
-                                        </group>
-                                    </page>
-                                    <page string="Attachments">
-                                        <field name="attachment_ids" colspan="4" readonly="1" nolabel="1"/>
-                                    </page>
-                                </notebook>
-                            </form>
                         </field>
-                         <button string="Add New Note"
+                        <button string="Add Internal Note"
                                 name="%(crm.action_crm_add_note)d"
                                 context="{'model': 'crm.lead' }"
                                 icon="terp-document-new" type="action" />
                         <button string="Send New Email"
-                           name="%(crm.action_crm_send_mail)d"
-                           context="{'mail':'new', 'model': 'hr.applicant'}"
-                           icon="terp-mail-message-new" type="action" />
+                            name="%(mail.action_email_compose_message_wizard)d"
+                            icon="terp-mail-message-new" type="action"/>
                  </page>
                  <page string="Notes">
                      <field name="description" nolabel="1" colspan="4"/>
         <field name="type">search</field>
         <field name="arch" type="xml">
             <search string="Search Jobs">
-               <filter icon="terp-check" string="Current"
-                   domain="[('state','in',('draft','open'))]"
-                   help="All new and in progress jobs"
-                   default="1"
-                   name="current"
-               />
-               <filter icon="terp-document-new" string="New"
+               <filter icon="terp-document-new" string="New" name="filter_new" 
                    domain="[('state','=','draft')]"
                    help="All Initial Jobs"
                />
-               <filter icon="terp-camera_test" string="In Progress"
+               <filter icon="terp-camera_test" string="In Progress" name="filter_inprogress"
                    domain="[('state','=','open')]"
                    help="Open Jobs"
                />
                <separator orientation="vertical"/>
                <filter icon="terp-gtk-jump-to-ltr" string="Next Actions"
                     context="{'invisible_next_action':False, 'invisible_next_date':False}"
-                    domain="[]"
-                    help="View Next Action and Date"/>
+                    domain="[('date_action','&lt;&gt;',False)]"
+                    help="Filter and view on next actions and date"/>
                <separator orientation="vertical"/>
-               <field name="partner_name"/>
-               <field name="email_from"/>
+               <field name="partner_name" filter_domain="['|','|',('name','ilike',self),('partner_name','ilike',self),('email_from','ilike',self)]" string="Subject / Applicant"/>
                <field name="job_id" widget="selection"/>
                <field name="user_id">
-                    <filter domain="[('user_id','=',False)]" help="Unassigned Recruitements" icon="terp-personal-" separator="1"/>
-               </field>
-               <field name="department_id" widget="selection" string="Department" context="{'invisible_department': False}">
-                   <filter icon="terp-personal+" context="{'invisible_department': False}"
-                       domain="[('department_id','=',context.get('department_id',False))]"
-                       help="My Department"/>
+                    <filter domain="[('user_id','=',False)]" help="Unassigned Recruitments" icon="terp-personal-" />
                </field>
                <newline/>
-                <group expand="0" string="Group By..." colspan="11" col="20">
+                <group expand="0" string="Group By...">
                     <filter string="Responsible" icon="terp-personal" domain="[]"  context="{'group_by':'user_id'}"/>
                     <filter string="Department" icon="terp-personal+" domain="[]" context="{'group_by':'department_id'}"/>
                     <separator orientation="vertical"/>
                     <filter string="Appreciation" icon="terp-face-plain" domain="[]" context="{'group_by':'priority'}"/>
                     <filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
                     <filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
+                    <filter string="Source" icon="terp-face-plain" domain="[]" context="{'group_by':'source_id'}"/>
                     <separator orientation="vertical"/>
                     <filter string="Creation Date" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}"/>
                 </group>
         </field>
     </record>
 
+    <!-- hr Applicant Kanban View -->
 
+    <record model="ir.ui.view" id="hr_kanban_view_applicant">
+        <field name="name">Hr Applicants kanban</field>
+        <field name="model">hr.applicant</field>
+        <field name="type">kanban</field>
+        <field name="arch" type="xml">
+            <kanban default_group_by="stage_id">
+                <field name="color"/>
+                <field name="state"/>
+                <field name="priority"/>
+                <field name="survey"/>
+                <field name="user_id"/>
+                <field name="user_email"/>
+                <templates>
+                    <t t-name="partner-infos">
+                        <div t-if="record.partner_phone.raw_value">
+                            Phone: <field name="partner_phone"/>
+                        </div>
+                        <div t-if="record.partner_mobile.raw_value">
+                            Mobile: <field name="partner_mobile"/>
+                        </div>
+                    </t>
+                    <t t-name="kanban-box">
+                        <t t-if="record.priority.raw_value == 1" t-set="border">oe_kanban_color_red</t>
+                        <div t-attf-class="#{kanban_color(record.color.raw_value)} #{border || ''}">
+                            <div class="oe_kanban_box oe_kanban_color_border">
+                                <table class="oe_kanban_table oe_kanban_box_header oe_kanban_color_bgdark oe_kanban_color_border oe_kanban_draghandle">
+                                <tr>
+                                    <td align="left" valign="middle" class="oe_kanban_title" tooltip="partner-infos">
+                                        <field name="partner_name"/>
+                                        <t t-if="!record.partner_name.raw_value">
+                                            <field name="email_from"/>
+                                        </t>
+                                    </td>
+                                    <td valign="top" width="22"><img t-att-src="kanban_gravatar(record.user_email.value, 22)" class="oe_kanban_gravatar" t-att-title="record.user_id.value"/></td>
+                                </tr>
+                                </table>
+                                <div class="oe_kanban_box_content oe_kanban_color_bglight oe_kanban_box_show_onclick_trigger oe_kanban_color_border">
+                                    <div class="oe_kanban_right">
+                                        <span class="oe_kanban_highlight">
+                                            <t t-set="priority" t-value="record.priority.raw_value || 5"/>
+                                            <a type="object" name="set_priority" args="['3']" t-if="priority gt 3">
+                                                <img src="/web/static/src/img/icons/star-off.png" width="16" height="16"/>
+                                            </a>
+                                            <a type="object" name="set_priority" args="['5']" t-if="priority lte 3">
+                                                <img t-attf-src="/web/static/src/img/icons/star-#{priority lte 3 ? 'on' : 'off'}.png" width="16" height="16"/>
+                                            </a>
+                                            <a type="object" name="set_priority" args="['2']">
+                                                <img t-attf-src="/web/static/src/img/icons/star-#{priority lte 2 ? 'on' : 'off'}.png" width="16" height="16"/>
+                                            </a>
+                                            <a type="object" name="set_priority" args="['1']">
+                                                <img t-attf-src="/web/static/src/img/icons/star-#{priority == 1 ? 'on' : 'off'}.png" width="16" height="16"/>
+                                            </a>
+                                        </span>
+                                    </div>
+
+                                    <field name="job_id"/>
+                                    <t t-if="!record.job_id.raw_value">
+                                        <field name="name"/>
+                                    </t>
+
+                                    <div class="oe_kanban_clear" style="padding-top: 4px"/>
+
+                                    <div t-if="record.type_id.raw_value or record.source_id.raw_value">
+                                        <span t-if="record.type_id.raw_value" class="oe_kanban_highlight oe_kanban_button" style="font-size: 100%%">
+                                            <field name="type_id"/>
+                                        </span>
+                                        <span t-if="record.source_id.raw_value" class="oe_kanban_highlight oe_kanban_button" style="font-size: 100%%">
+                                            <field name="source_id"/>
+                                        </span>
+                                    </div>
+                                    <div t-if="record.date_action.raw_value or record.title_action.raw_value">
+                                        <i t-if="record.date_action.raw_value"><field name="date_action"/> :</i> <field name="title_action"/>
+                                    </div>
+                                </div>
+                                <div class="oe_kanban_buttons_set oe_kanban_color_border oe_kanban_color_bglight oe_kanban_box_show_onclick">
+                                    <div class="oe_kanban_left">
+                                        <a string="Edit" icon="gtk-edit" type="edit"/>
+                                        <a string="Delete" icon="gtk-close" type="delete"/>
+                                        <a string="Change Color" icon="color-picker" type="color" name="color"/>
+                                        <a string="Send New Email" name="%(mail.action_email_compose_message_wizard)d" icon="terp-mail-message-new" type="action"/>
+                                        <a string="Add Internal Note" name="%(crm.action_crm_add_note)d" context="{'model': 'crm.lead' }" icon="terp-document-new" type="action"/>
+                                        <a string="Schedule Meeting" name="action_makeMeeting" type="object" icon="stock_calendar"/>
+                                        <a t-if="record.survey.raw_value" name="action_print_survey" type="object" string="Print Interview" icon="gtk-print" />
+                                    </div>
+                                    <div class="oe_kanban_right">
+                                        <a name="case_open" string="In Progress" states="draft,pending" type="object" icon="kanban-apply"/>
+                                        <a name="case_pending" string="Pending" states="draft,open" type="object" icon="kanban-pause"/>
+                                    </div>
+                                    <br class="oe_kanban_clear"/>
+                                </div>
+                            </div>
+                        </div>
+                    </t>
+                </templates>
+            </kanban>
+        </field>
+    </record>
     # ------------------------------------------------------
     # HR Job
     # ------------------------------------------------------
         <field name="type">form</field>
         <field name="inherit_id" ref="hr.view_hr_job_form"/>
         <field name="arch" type="xml">
-            <field name="no_of_employee" position="after">
+            <field name="department_id" position="after">
                 <field name="survey_id"/>
             </field>
         </field>
             <tree string="Stages">
                 <field name="sequence" invisible="1"/>
                 <field name="name"/>
-                <field name="department_id"/>
+                <field name="department_id" groups="base.group_extended"/>
             </tree>
         </field>
     </record>
                 <group colspan="4" col="6">
                     <separator string="Stage Definition" colspan="6"/>
                     <field name="name" select="1"/>
-                    <field name="department_id"/>
+                    <field name="department_id" groups="base.group_extended"/>
                     <field name="sequence"/>
                 </group>
                 <separator string="Requirements" colspan="4"/>
         <field name="res_model">hr.recruitment.stage</field>
         <field name="view_type">form</field>
         <field name="view_id" ref="hr_recruitment_stage_tree"/>
+        <field name="help"> Check if the following stages are matching your recruitment process. Don't forget to specify the department if your recruitment process is different according to the job position.</field>
     </record>
 
     <menuitem
         <field name="view_id" ref="hr_recruitment_degree_tree"/>
     </record>
 
+     <menuitem
+            id="menu_hr_recruitment_degree"
+            name="Degrees"
+            parent="menu_hr_recruitment_recruitment"
+            action="hr_recruitment_degree_action"
+            sequence="1"/>
+
+<!-- Source Tree View -->
+
+    <record model="ir.ui.view" id="hr_recruitment_source_tree">
+        <field name="name">hr.recruitment.source.tree</field>
+        <field name="model">hr.recruitment.source</field>
+        <field name="type">tree</field>
+        <field name="arch" type="xml">
+            <tree string="Sources of Applicants">
+                <field name="name"/>
+            </tree>
+        </field>
+    </record>
+    <record model="ir.ui.view" id="hr_recruitment_source_form">
+        <field name="name">hr.recruitment.source.form</field>
+        <field name="model">hr.recruitment.source</field>
+        <field name="type">form</field>
+        <field name="arch" type="xml">
+            <form string="Sources of Applicants">
+                <field name="name"/>
+            </form>
+        </field>
+    </record>
+    <record id="hr_recruitment_source_action" model="ir.actions.act_window">
+        <field name="name">Sources of Applicants</field>
+        <field name="res_model">hr.recruitment.source</field>
+        <field name="view_type">form</field>
+    </record>
+
+     <menuitem
+            id="menu_hr_recruitment_source"
+            parent="menu_hr_recruitment_recruitment"
+            action="hr_recruitment_source_action"
+            sequence="1"/>
+
+
     </data>
 </openerp>