[MERGE] hr_recruitment tags

bzr revid: al@openerp.com-20120816233347-pvlcwf0ibt0v4qdg
This commit is contained in:
Antony Lesuisse 2012-08-17 01:33:47 +02:00
commit feb8dc097d
8 changed files with 122 additions and 45 deletions

View File

@ -19,12 +19,13 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################## ##############################################################################
{ {
'name': 'Recruitment Process', 'name': 'Recruitment Process',
'version': '1.0', 'version': '1.0',
'category': 'Human Resources', 'category': 'Human Resources',
"sequence": 24, 'sequence': 24,
"summary": "Recruitment Process, Job Descriptions", 'summary': 'Recruitment Process, Job Descriptions',
'description': """ 'description': """
Manages job positions and the recruitment process. Manages job positions and the recruitment process.
================================================== ==================================================
@ -46,7 +47,7 @@ system to store and search in your CV base.
'base_calendar', 'base_calendar',
'fetchmail', 'fetchmail',
], ],
'update_xml': [ 'data': [
'wizard/hr_recruitment_employee_hired.xml', 'wizard/hr_recruitment_employee_hired.xml',
'wizard/hr_recruitment_create_partner_job_view.xml', 'wizard/hr_recruitment_create_partner_job_view.xml',
'hr_recruitment_view.xml', 'hr_recruitment_view.xml',
@ -57,19 +58,18 @@ system to store and search in your CV base.
'board_hr_recruitment_statistical_view.xml', 'board_hr_recruitment_statistical_view.xml',
'hr_recruitment_installer_view.xml', 'hr_recruitment_installer_view.xml',
'res_config_view.xml', 'res_config_view.xml',
],
'init_xml': [
'hr_recruitment_data.xml' 'hr_recruitment_data.xml'
], ],
'demo_xml': [ 'demo': [
'hr_recruitment_demo.yml', 'hr_recruitment_demo.yml',
], ],
'test':[ 'js': ['static/src/js/hr_recruitment.js'],
'test/recruitment_process.yml', 'test': [
], 'test/recruitment_process.yml',
],
'installable': True, 'installable': True,
'auto_install': False, 'auto_install': False,
'certificate' : '001073437025460275621', 'certificate': '001073437025460275621',
'application': True, 'application': True,
} }

View File

@ -198,6 +198,7 @@ class hr_applicant(base_stage, osv.Model):
When the case is over, the state is set to \'Done\'.\ When the case is over, the state is set to \'Done\'.\
If the case needs to be reviewed then the state is \ If the case needs to be reviewed then the state is \
set to \'Pending\'.'), set to \'Pending\'.'),
'categ_ids': fields.many2many('hr.applicant_category', string='Categories'),
'company_id': fields.many2one('res.company', 'Company'), 'company_id': fields.many2one('res.company', 'Company'),
'user_id': fields.many2one('res.users', 'Responsible'), 'user_id': fields.many2one('res.users', 'Responsible'),
# Applicant Columns # Applicant Columns
@ -350,7 +351,7 @@ class hr_applicant(base_stage, osv.Model):
if isinstance(ids, (str, int, long)): if isinstance(ids, (str, int, long)):
ids = [ids] ids = [ids]
if update_vals is None: vals = {} if update_vals is None: vals = {}
update_vals.update({ update_vals.update({
'description': msg.get('body'), 'description': msg.get('body'),
'email_from': msg.get('from'), 'email_from': msg.get('from'),
@ -510,7 +511,7 @@ class hr_job(osv.osv):
_inherits = {'mail.alias': 'alias_id'} _inherits = {'mail.alias': 'alias_id'}
_columns = { _columns = {
'survey_id': fields.many2one('survey', 'Interview Form', help="Choose an interview form for this job position and you will be able to print/answer this interview from all applicants who apply for this job"), 'survey_id': fields.many2one('survey', 'Interview Form', help="Choose an interview form for this job position and you will be able to print/answer this interview from all applicants who apply for this job"),
'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="cascade", required=True, 'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="cascade", required=True,
help="Email alias for this job position. New emails will automatically " help="Email alias for this job position. New emails will automatically "
"create new applicants for this job position."), "create new applicants for this job position."),
} }
@ -521,13 +522,13 @@ class hr_job(osv.osv):
def _auto_init(self, cr, context=None): def _auto_init(self, cr, context=None):
"""Installation hook to create aliases for all jobs and avoid constraint errors.""" """Installation hook to create aliases for all jobs and avoid constraint errors."""
# disable the unique alias_id not null constraint, to avoid spurious warning during # disable the unique alias_id not null constraint, to avoid spurious warning during
# super.auto_init. We'll reinstall it afterwards. # super.auto_init. We'll reinstall it afterwards.
self._columns['alias_id'].required = False self._columns['alias_id'].required = False
super(hr_job,self)._auto_init(cr, context=context) super(hr_job,self)._auto_init(cr, context=context)
registry = RegistryManager.get(cr.dbname) registry = RegistryManager.get(cr.dbname)
mail_alias = registry.get('mail.alias') mail_alias = registry.get('mail.alias')
hr_jobs = registry.get('hr.job') hr_jobs = registry.get('hr.job')
@ -555,7 +556,7 @@ class hr_job(osv.osv):
mail_alias = self.pool.get('mail.alias') mail_alias = self.pool.get('mail.alias')
if not vals.get('alias_id'): if not vals.get('alias_id'):
vals.pop('alias_name', None) # prevent errors during copy() vals.pop('alias_name', None) # prevent errors during copy()
alias_id = mail_alias.create_unique_alias(cr, uid, alias_id = mail_alias.create_unique_alias(cr, uid,
# Using '+' allows using subaddressing for those who don't # Using '+' allows using subaddressing for those who don't
# have a catchall domain setup. # have a catchall domain setup.
{'alias_name': 'jobs+'+vals['name']}, {'alias_name': 'jobs+'+vals['name']},
@ -573,7 +574,7 @@ class hr_job(osv.osv):
res = super(hr_job, self).unlink(cr, uid, ids, context=context) res = super(hr_job, self).unlink(cr, uid, ids, context=context)
mail_alias.unlink(cr, uid, alias_ids, context=context) mail_alias.unlink(cr, uid, alias_ids, context=context)
return res return res
def action_print_survey(self, cr, uid, ids, context=None): def action_print_survey(self, cr, uid, ids, context=None):
if context is None: if context is None:
context = {} context = {}
@ -591,4 +592,12 @@ class hr_job(osv.osv):
'nodestroy':True, 'nodestroy':True,
} }
class applicant_category(osv.osv):
""" Category of applicant """
_name = "hr.applicant_category"
_description = "Category of applicant"
_columns = {
'name': fields.char('Name', size=64, required=True, translate=True),
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -176,6 +176,9 @@
</div> </div>
</group> </group>
</group> </group>
<group>
<field name="categ_ids" widget="many2many_tags"/>
</group>
<separator string="Application Summary"/> <separator string="Application Summary"/>
<field name="description" placeholder="Feedback of interviews..."/> <field name="description" placeholder="Feedback of interviews..."/>
</sheet> </sheet>
@ -265,6 +268,7 @@
<field name="job_id"/> <field name="job_id"/>
<field name="title_action"/> <field name="title_action"/>
<field name="department_id"/> <field name="department_id"/>
<field name="categ_ids"/>
<templates> <templates>
<t t-name="kanban-tooltip"> <t t-name="kanban-tooltip">
<ul class="oe_kanban_tooltip"> <ul class="oe_kanban_tooltip">
@ -309,6 +313,13 @@
<img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar"/> <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar"/>
</div> </div>
<div class="oe_kanban_footer_left" style="margin-top:5px;">
<div class="oe_left oe_tags">
<t t-foreach="record.categ_ids.raw_value" t-as="categ_id">
<span class="oe_tag" t-att-data-categ_id="categ_id"></span>
</t>
</div>
</div>
</div> </div>
<div class="oe_clear"></div> <div class="oe_clear"></div>
</div> </div>

View File

@ -8,3 +8,5 @@ access_survey_hr_user,survey.hr.user,survey.model_survey,base.group_hr_user,1,1,
access_crm_meeting_hruser,crm.meeting.hruser,base_calendar.model_crm_meeting,base.group_hr_user,1,1,1,1 access_crm_meeting_hruser,crm.meeting.hruser,base_calendar.model_crm_meeting,base.group_hr_user,1,1,1,1
access_hr_recruitment_source_hr_officer,hr.recruitment.source,model_hr_recruitment_source,base.group_hr_user,1,1,1,1 access_hr_recruitment_source_hr_officer,hr.recruitment.source,model_hr_recruitment_source,base.group_hr_user,1,1,1,1
access_hr_recruitment_source_all,hr.recruitment.source,model_hr_recruitment_source,,1,0,0,0 access_hr_recruitment_source_all,hr.recruitment.source,model_hr_recruitment_source,,1,0,0,0
access_hr_applicant_category,hr.applicant_category,model_hr_applicant_category,,1,0,0,0
access_hr_applicant_category_manager,hr.applicant_category,model_hr_applicant_category,base.group_hr_manager,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
8 access_crm_meeting_hruser crm.meeting.hruser base_calendar.model_crm_meeting base.group_hr_user 1 1 1 1
9 access_hr_recruitment_source_hr_officer hr.recruitment.source model_hr_recruitment_source base.group_hr_user 1 1 1 1
10 access_hr_recruitment_source_all hr.recruitment.source model_hr_recruitment_source 1 0 0 0
11 access_hr_applicant_category hr.applicant_category model_hr_applicant_category 1 0 0 0
12 access_hr_applicant_category_manager hr.applicant_category model_hr_applicant_category base.group_hr_manager 1 1 1 1

View File

@ -0,0 +1,35 @@
openerp.hr_recruitment = function(openerp) {
openerp.web_kanban.KanbanView.include({
applicant_display_categ_names: function() {
/*
* Set proper names to applicant categories.
* In kanban views, many2many fields only return a list of ids.
* Therefore, we have to fetch the matching data by ourselves.
*/
var self = this;
var categ_ids = [];
// Collect categories ids
self.$element.find('span[data-categ_id]').each(function() {
categ_ids.push($(this).data('categ_id'));
});
// Find their matching names
var dataset = new openerp.web.DataSetSearch(self, 'hr.applicant_category', self.session.context, [['id', 'in', _.uniq(categ_ids)]]);
dataset.read_slice(['id', 'name']).then(function(result) {
_.each(result, function(v, k) {
// Set the proper value in the DOM and display the element
self.$element.find('span[data-categ_id=' + v.id + ']').text(v.name);
});
});
},
on_groups_started: function() {
var self = this;
self._super.apply(self, arguments);
if (self.dataset.model === 'hr.applicant') {
self.applicant_display_categ_names();
}
}
});
};

View File

@ -20,10 +20,14 @@
############################################################################## ##############################################################################
{ {
'name' : "Portal", 'name' : 'Portal',
'version' : "1.0", 'version' : '1.0',
'depends' : ["base", "share", "auth_anonymous"], 'depends' : [
'author' : "OpenERP SA", 'base',
'share',
'auth_anonymous'
],
'author' : 'OpenERP SA',
'category': 'Portal', 'category': 'Portal',
'description': """ 'description': """
Customize access to your OpenERP database to external users by creating portals. Customize access to your OpenERP database to external users by creating portals.

View File

@ -19,18 +19,33 @@
# #
############################################################################## ##############################################################################
{ {
"name": "Project Management", 'name': 'Project Management',
"version": "1.1", 'version': '1.1',
"author": "OpenERP SA", 'author': 'OpenERP SA',
"website": "http://www.openerp.com", 'website': 'http://www.openerp.com',
"category": "Project Management", 'category': 'Project Management',
"sequence": 8, 'sequence': 8,
"summary": "Projects, Tasks", 'summary': 'Projects, Tasks',
"images": ["images/gantt.png", "images/project_dashboard.jpeg","images/project_task_tree.jpeg","images/project_task.jpeg","images/project.jpeg","images/task_analysis.jpeg"], 'images': [
"depends": ["base_setup", "base_status", "product", "analytic", "board", "mail", "resource","web_kanban"], 'images/gantt.png',
"description": """ 'images/project_dashboard.jpeg',
'images/project_task_tree.jpeg',
'images/project_task.jpeg',
'images/project.jpeg',
'images/task_analysis.jpeg'
],
'depends': [
'base_setup',
'base_status',
'product',
'analytic',
'board',
'mail',
'resource',
'web_kanban'
],
'description': """
Project Management module tracks multi-level projects, tasks, work done on tasks. Project Management module tracks multi-level projects, tasks, work done on tasks.
================================================================================= =================================================================================
@ -41,22 +56,21 @@ Dashboard for project management that includes:
* List of My Open Tasks * List of My Open Tasks
* Graph of My Remaining Hours by Project * Graph of My Remaining Hours by Project
""", """,
"init_xml": [], 'data': [
"update_xml": [ 'security/project_security.xml',
"security/project_security.xml", 'wizard/project_task_delegate_view.xml',
"wizard/project_task_delegate_view.xml", 'wizard/project_task_reevaluate_view.xml',
"wizard/project_task_reevaluate_view.xml", 'security/ir.model.access.csv',
"security/ir.model.access.csv", 'project_data.xml',
"project_data.xml", 'project_view.xml',
"project_view.xml", 'process/task_process.xml',
"process/task_process.xml", 'res_partner_view.xml',
"res_partner_view.xml", 'report/project_report_view.xml',
"report/project_report_view.xml",
'report/project_cumulative.xml', 'report/project_cumulative.xml',
"board_project_view.xml", 'board_project_view.xml',
'res_config_view.xml', 'res_config_view.xml',
], ],
'demo_xml': [ 'demo': [
'project_demo.xml', 'project_demo.xml',
], ],
'test':[ 'test':[

View File

@ -18,3 +18,5 @@ access_account_analytic_line_project,account.analytic.line project,analytic.mode
access_project_task_history,project.task.history project,project.model_project_task_history,project.group_project_user,1,1,1,0 access_project_task_history,project.task.history project,project.model_project_task_history,project.group_project_user,1,1,1,0
access_project_task_history_cumulative,project.task.history project,project.model_project_task_history_cumulative,project.group_project_manager,1,0,0,0 access_project_task_history_cumulative,project.task.history project,project.model_project_task_history_cumulative,project.group_project_manager,1,0,0,0
access_resource_calendar,project.resource_calendar manager,resource.model_resource_calendar,project.group_project_manager,1,0,0,0 access_resource_calendar,project.resource_calendar manager,resource.model_resource_calendar,project.group_project_manager,1,0,0,0
access_project_category,project.project_category,model_project_category,,1,0,0,0
access_project_category_manager,project.project_category,model_project_category,project.group_project_manager,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
18 access_project_task_history project.task.history project project.model_project_task_history project.group_project_user 1 1 1 0
19 access_project_task_history_cumulative project.task.history project project.model_project_task_history_cumulative project.group_project_manager 1 0 0 0
20 access_resource_calendar project.resource_calendar manager resource.model_resource_calendar project.group_project_manager 1 0 0 0
21 access_project_category project.project_category model_project_category 1 0 0 0
22 access_project_category_manager project.project_category model_project_category project.group_project_manager 1 1 1 1