From 6f8d8434dcd86c33e16788083e5b4efdb5653982 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Wed, 29 Jan 2014 06:14:03 +0100 Subject: [PATCH] [FIX] website_hr_recruitment full cleanups - keep url namespace under /jobs - public mode fixes - moved jobs_ids field in hr_recruitment - simplify code, remove dead code and data bzr revid: al@openerp.com-20140129051403-cipao0bllxa85gsg --- addons/website/models/website.py | 6 +- addons/website_hr_recruitment/__openerp__.py | 8 +- .../controllers/main.py | 128 ++++++++---------- ...r_recruitment_data.xml => config_data.xml} | 0 ...r_recruitment_demo.xml => hr_job_demo.xml} | 0 .../website_hr_recruitment/models/__init__.py | 1 - .../models/hr_department.py | 11 -- .../website_hr_recruitment/models/hr_job.py | 11 +- .../website_hr_recruitment_security.xml | 5 +- .../static/src/xml/website_hr_recruitment.xml | 2 +- ...cruitment_backend.xml => hr_job_views.xml} | 5 +- ...bsite_hr_recruitment.xml => templates.xml} | 26 ++-- 12 files changed, 83 insertions(+), 120 deletions(-) rename addons/website_hr_recruitment/data/{website_hr_recruitment_data.xml => config_data.xml} (100%) rename addons/website_hr_recruitment/data/{website_hr_recruitment_demo.xml => hr_job_demo.xml} (100%) delete mode 100644 addons/website_hr_recruitment/models/hr_department.py rename addons/website_hr_recruitment/views/{hr_recruitment_backend.xml => hr_job_views.xml} (96%) rename addons/website_hr_recruitment/views/{website_hr_recruitment.xml => templates.xml} (92%) diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 8c291bcb1a4..f3492d152e7 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -654,13 +654,13 @@ class base_language_install(osv.osv_memory): } return action -class SeoMetadata(osv.Model): +class website_seo_metadata(osv.Model): _name = 'website.seo.metadata' _description = 'SEO metadata' _columns = { - 'website_meta_title': fields.char("Website meta title", size=70, translate=True), - 'website_meta_description': fields.text("Website meta description", size=160, translate=True), + 'website_meta_title': fields.char("Website meta title", translate=True), + 'website_meta_description': fields.text("Website meta description", translate=True), 'website_meta_keywords': fields.char("Website meta keywords", translate=True), } diff --git a/addons/website_hr_recruitment/__openerp__.py b/addons/website_hr_recruitment/__openerp__.py index ed6356f50d4..f09505191d5 100644 --- a/addons/website_hr_recruitment/__openerp__.py +++ b/addons/website_hr_recruitment/__openerp__.py @@ -11,14 +11,14 @@ OpenERP Contact Form 'author': 'OpenERP SA', 'depends': ['website_partner', 'hr_recruitment', 'website_mail'], 'data': [ - 'data/website_hr_recruitment_data.xml', - 'views/website_hr_recruitment.xml', - 'views/hr_recruitment_backend.xml', 'security/ir.model.access.csv', 'security/website_hr_recruitment_security.xml', + 'data/config_data.xml', + 'views/hr_job_views.xml', + 'views/templates.xml', ], 'demo': [ - 'data/website_hr_recruitment_demo.xml', + 'data/hr_job_demo.xml', ], 'css': [ 'static/src/css/*.css' diff --git a/addons/website_hr_recruitment/controllers/main.py b/addons/website_hr_recruitment/controllers/main.py index 096c91677a8..927c843e58d 100644 --- a/addons/website_hr_recruitment/controllers/main.py +++ b/addons/website_hr_recruitment/controllers/main.py @@ -1,102 +1,90 @@ # -*- coding: utf-8 -*- +import base64 + from openerp.addons.web import http from openerp.tools.translate import _ from openerp.addons.web.http import request -from openerp.addons.website.controllers.main import Website as controllers -controllers = controllers() - -import base64 - class website_hr_recruitment(http.Controller): + @http.route([ '/jobs', - '/jobs/department//office/', '/jobs/department/', - '/jobs/office/' + '/jobs/office/' ], type='http', auth="public", website=True, multilang=True) def jobs(self, department=None, office=None): + context=dict(request.context, show_address=True, no_tag_br=True) + cr, uid = request.cr, request.uid + + # office is restriced, deslugify manually + office_id = 0 + if office: + office_id = int(office.split('-')[-1]) + + # Search all available jobs as uid JobsObj = request.registry['hr.job'] - jobpost_ids = JobsObj.search(request.cr, request.uid, [], - order="website_published desc,no_of_recruitment desc", - context=request.context) - jobs = JobsObj.browse(request.cr, request.uid, jobpost_ids, context=dict(request.context, show_address=True, no_tag_br=True)) + job_ids = JobsObj.search(cr, uid, [], order="website_published desc,no_of_recruitment desc", context=context) - departments = set() - offices = set() - for job in jobs: - if job.department_id: - departments.add(job.department_id) - if job.address_id: - offices.add(job.address_id) + # Browse jobs as superuser, because address is restricted + jobs = JobsObj.browse(cr, 1, job_ids, context=context) - if department or office: - _jobs = [] - for job in jobs: - if (department and job.department_id.id == department.id) or \ - (office and job.address_id.id == office.id): - _jobs.append(job) - jobs = _jobs + # Deduce departments and offices of those jobs + departments = set(j.department_id for j in jobs if j.department_id) + offices = set(j.address_id for j in jobs if j.address_id) + # Filter the matching one + jobs = [j for j in jobs if department==None or j.department_id and j.department_id.id == department.id] + jobs = [j for j in jobs if office==None or j.address_id and j.address_id.id == office_id] + + # Render page return request.website.render("website_hr_recruitment.index", { 'jobs': jobs, 'departments': departments, 'offices': offices, - 'active': department and department.id or None, - 'office': office and office.id or None + 'department_id': department and department.id, + 'office_id': office_id, }) - @http.route(['/job/detail/'], type='http', auth="public", website=True, multilang=True) - def detail(self, job, **kwargs): + @http.route('/jobs/add', type='http', auth="user", methods=['POST'], website=True) + def jobs_add(self, **kwargs): + cr, uid, context = request.cr, request.uid, request.context + value = { + 'name': _('New Job Offer'), + } + job_id = request.registry.get('hr.job').create(cr, uid, value, context=context) + return request.redirect("/jobs/detail/%s?enable_editor=1" % job_id) + + @http.route(['/jobs/detail/'], type='http', auth="public", website=True, multilang=True) + def jobs_detail(self, job, **kwargs): return request.website.render("website_hr_recruitment.detail", { 'job': job, 'main_object': job }) - @http.route(['/job/success'], methods=['POST'], type='http', auth="admin", website=True, multilang=True) - def success(self, **post): - data = { - 'name': _('Online Form'), - 'phone': post.get('phone', False), - 'email_from': post.get('email_from', False), - 'partner_name': post.get('partner_name', False), - 'description': post.get('description', False), - 'department_id': post.get('department_id', False), - 'job_id': post.get('job_id', False), - 'user_id': False - } + @http.route(['/jobs/apply/'], type='http', auth="public", website=True, multilang=True) + def jobs_apply(self, job): + return request.website.render("website_hr_recruitment.apply", { 'job': job }) + @http.route(['/jobs/thankyou'], methods=['POST'], type='http', auth="admin", website=True, multilang=True) + def jobs_thankyou(self, **post): + cr, uid, context = request.cr, request.uid, request.context imd = request.registry['ir.model.data'] - try: - model, source_id = imd.get_object_reference(request.cr, request.uid, 'hr_recruitment', 'source_website_company') - data['source_id'] = source_id - except ValueError: - pass + value = { + 'name': _('Online Form'), + 'user_id': False, + 'source_id' : imd.xmlid_to_res_id(cr, uid, 'hr_recruitment.source_website_company'), + } + for f in ['phone', 'email_from', 'partner_name', 'description', 'department_id', 'job_id']: + value[f] = post.get(f) - jobid = request.registry['hr.applicant'].create(request.cr, request.uid, data, context=request.context) + job_id = request.registry['hr.applicant'].create(cr, uid, value, context=context) if post['ufile']: - attachment_values = { + attachment_value = { 'name': post['ufile'].filename, + 'res_name': value['partner_name'], + 'res_model': 'hr.applicant', + 'res_id': job_id, 'datas': base64.encodestring(post['ufile'].read()), 'datas_fname': post['ufile'].filename, - 'res_model': 'hr.applicant', - 'res_name': data['partner_name'], - 'res_id': jobid - } - request.registry['ir.attachment'].create(request.cr, request.uid, attachment_values, context=request.context) + } + request.registry['ir.attachment'].create(cr, uid, attachment_value, context=context) return request.website.render("website_hr_recruitment.thankyou", {}) - @http.route(['/job/apply'], type='http', auth="public", website=True, multilang=True) - def applyjobpost(self, job): - [job_object] = request.registry['hr.job'].browse( - request.cr, request.uid, [int(job)], context=request.context) - - return request.website.render("website_hr_recruitment.applyjobpost", { - 'job': job_object - }) - - @http.route('/job/add_job_offer/', type='http', auth="user", methods=['POST'], website=True, multilang=True) - def add_job_offer(self, **kwargs): - Job = request.registry.get('hr.job') - job_id = Job.create(request.cr, request.uid, { - 'name': 'New Job Offer', - }, context=request.context) - - return request.redirect("/job/detail/%s/?enable_editor=1" % job_id) +# vim :et: diff --git a/addons/website_hr_recruitment/data/website_hr_recruitment_data.xml b/addons/website_hr_recruitment/data/config_data.xml similarity index 100% rename from addons/website_hr_recruitment/data/website_hr_recruitment_data.xml rename to addons/website_hr_recruitment/data/config_data.xml diff --git a/addons/website_hr_recruitment/data/website_hr_recruitment_demo.xml b/addons/website_hr_recruitment/data/hr_job_demo.xml similarity index 100% rename from addons/website_hr_recruitment/data/website_hr_recruitment_demo.xml rename to addons/website_hr_recruitment/data/hr_job_demo.xml diff --git a/addons/website_hr_recruitment/models/__init__.py b/addons/website_hr_recruitment/models/__init__.py index cab7e314c0a..755183a1d3c 100644 --- a/addons/website_hr_recruitment/models/__init__.py +++ b/addons/website_hr_recruitment/models/__init__.py @@ -1,2 +1 @@ import hr_job -import hr_department diff --git a/addons/website_hr_recruitment/models/hr_department.py b/addons/website_hr_recruitment/models/hr_department.py deleted file mode 100644 index 3bb7c8c45db..00000000000 --- a/addons/website_hr_recruitment/models/hr_department.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- - -from openerp.osv import osv, fields - - -class hr_department(osv.osv): - _inherit = "hr.department" - _columns = { - # add field for access right - 'department_ids': fields.one2many('hr.job', 'department_id', 'Department'), - } \ No newline at end of file diff --git a/addons/website_hr_recruitment/models/hr_job.py b/addons/website_hr_recruitment/models/hr_job.py index 8c42671a44c..26036350004 100644 --- a/addons/website_hr_recruitment/models/hr_job.py +++ b/addons/website_hr_recruitment/models/hr_job.py @@ -2,17 +2,14 @@ from openerp.osv import osv, fields - class hr_job(osv.osv): - """ Override to add website-related columns: published, description. """ _name = 'hr.job' _inherit = ['hr.job','website.seo.metadata'] def _website_url(self, cr, uid, ids, field_name, arg, context=None): res = dict.fromkeys(ids, '') - base_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url') for job in self.browse(cr, uid, ids, context=context): - res[job.id] = "%s/job/detail/%s/" % (base_url, job.id) + res[job.id] = "/jobs/detail/%s/" % job.id return res def job_open(self, cr, uid, ids, context=None): @@ -20,9 +17,9 @@ class hr_job(osv.osv): return super(hr_job, self).job_open(cr, uid, ids, context) _columns = { - 'website_published': fields.boolean('Available in the website'), - 'website_description': fields.html('Description for the website'), - 'website_url': fields.function(_website_url, string="Website url", type="char"), + 'website_published': fields.boolean('Published'), + 'website_description': fields.html('Website description'), + 'website_url': fields.function(_website_url, string="Website URL", type="char"), } _defaults = { 'website_published': False diff --git a/addons/website_hr_recruitment/security/website_hr_recruitment_security.xml b/addons/website_hr_recruitment/security/website_hr_recruitment_security.xml index 58effd8272f..724c4dfddce 100644 --- a/addons/website_hr_recruitment/security/website_hr_recruitment_security.xml +++ b/addons/website_hr_recruitment/security/website_hr_recruitment_security.xml @@ -13,12 +13,11 @@ Job department: Public - [('department_ids.website_published', '=', True)] + [('jobs_ids.website_published', '=', True)] - - + \ No newline at end of file diff --git a/addons/website_hr_recruitment/static/src/xml/website_hr_recruitment.xml b/addons/website_hr_recruitment/static/src/xml/website_hr_recruitment.xml index b3371116675..b4ce570a189 100644 --- a/addons/website_hr_recruitment/static/src/xml/website_hr_recruitment.xml +++ b/addons/website_hr_recruitment/static/src/xml/website_hr_recruitment.xml @@ -1,7 +1,7 @@ -
  • New Job Offer
  • +
  • New Job Offer
  • diff --git a/addons/website_hr_recruitment/views/hr_recruitment_backend.xml b/addons/website_hr_recruitment/views/hr_job_views.xml similarity index 96% rename from addons/website_hr_recruitment/views/hr_recruitment_backend.xml rename to addons/website_hr_recruitment/views/hr_job_views.xml index d0883b60e39..c6a0f170f12 100644 --- a/addons/website_hr_recruitment/views/hr_recruitment_backend.xml +++ b/addons/website_hr_recruitment/views/hr_job_views.xml @@ -1,7 +1,6 @@ - hr.job.form.inherit hr.job @@ -12,9 +11,7 @@ - - - + diff --git a/addons/website_hr_recruitment/views/website_hr_recruitment.xml b/addons/website_hr_recruitment/views/templates.xml similarity index 92% rename from addons/website_hr_recruitment/views/website_hr_recruitment.xml rename to addons/website_hr_recruitment/views/templates.xml index beabdcef008..3e057d249f2 100644 --- a/addons/website_hr_recruitment/views/website_hr_recruitment.xml +++ b/addons/website_hr_recruitment/views/templates.xml @@ -1,11 +1,6 @@ - - Jobs - public - Job Posts on your website - -