diff options
| author | Antony Lesuisse <al@openerp.com> | 2014-01-29 06:14:03 +0100 |
|---|---|---|
| committer | Antony Lesuisse <al@openerp.com> | 2014-01-29 06:14:03 +0100 |
| commit | 6f8d8434dcd86c33e16788083e5b4efdb5653982 (patch) | |
| tree | 9a8824efaa78359b6eba5be1a292105c7661ea7a | |
| parent | 6b7d9f2bac3b3b864d3631f048ca88503a960ce0 (diff) | |
[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
12 files changed, 83 insertions, 120 deletions
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/<model("hr.department"):department>/office/<model("res.partner"):office>', '/jobs/department/<model("hr.department"):department>', - '/jobs/office/<model("res.partner"):office>' + '/jobs/office/<string: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) + + # Browse jobs as superuser, because address is restricted + jobs = JobsObj.browse(cr, 1, job_ids, 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) + # 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) - 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 + # 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/<model("hr.job"):job>'], 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/<model("hr.job"):job>'], 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/<model("hr.job"):job>'], 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 index fe6192d351f..fe6192d351f 100644 --- a/addons/website_hr_recruitment/data/website_hr_recruitment_data.xml +++ b/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 index c65d4a02ee0..c65d4a02ee0 100644 --- a/addons/website_hr_recruitment/data/website_hr_recruitment_demo.xml +++ b/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 @@ <record id="hr_department_public" model="ir.rule"> <field name="name">Job department: Public</field> <field name="model_id" ref="hr.model_hr_department"/> - <field name="domain_force">[('department_ids.website_published', '=', True)]</field> + <field name="domain_force">[('jobs_ids.website_published', '=', True)]</field> <field name="perm_read" eval="True"/> <field name="perm_write" eval="False"/> <field name="perm_create" eval="False"/> <field name="perm_unlink" eval="False"/> </record> </data> -</openerp> - +</openerp>
\ 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 @@ <templates id="template" xml:space="preserve"> <t t-extend="website.editorbar"> <t t-jquery="ul.oe_content_menu" t-operation="append"> - <li><a href="/job/add_job_offer/" class="js_link2post">New Job Offer</a></li> + <li><a href="/jobs/add" class="js_link2post">New Job Offer</a></li> </t> </t> </templates> diff --git a/addons/website_hr_recruitment/views/hr_recruitment_backend.xml b/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 @@ <?xml version="1.0" encoding="utf-8"?> <openerp> <data> - <record id="view_hr_job_form" model="ir.ui.view"> <field name="name">hr.job.form.inherit</field> <field name="model">hr.job</field> @@ -12,9 +11,7 @@ <field name="website_url" invisible="1"/> <field name="website_published" class="pull-right" widget="website_button"/> </xpath> - </field> </record> - - </data> +</data> </openerp> diff --git a/addons/website_hr_recruitment/views/website_hr_recruitment.xml b/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 @@ <?xml version="1.0" encoding="utf-8"?> <openerp> <data> -<record id="website_mail_jobs" model="mail.group"> - <field name="name">Jobs</field> - <field name="public">public</field> - <field name="description">Job Posts on your website</field> -</record> <template id="editor_head" inherit_id="website.editor_head" name="Jobs Editor" groups="base.group_hr_manager"> <xpath expr="//script[@id='website_tour_js']" position="after"> @@ -71,7 +66,7 @@ <li t-foreach="jobs" t-as="job" class="media"> <div class="media-body" t-att-data-publish="job.website_published and 'on' or 'off'"> <h3 class="media-heading"> - <a t-attf-href="/job/detail/#{ slug(job) }/"> + <a t-attf-href="/jobs/detail/#{ slug(job) }"> <span t-field="job.name"/> </a> <small t-if="job.no_of_recruitment > 1"> @@ -127,7 +122,7 @@ "fields": ["address"], "no_tag_br": true }'/> - <h5 class="text-center text-muted"> + e<h5 class="text-center text-muted"> <i class="fa fa-clock-o"/> <span t-field="job.write_date"/> </h5> </div> @@ -138,7 +133,7 @@ <div class="container"> <div class="row"> <div class="col-md-12 text-center mt16 mb16"> - <a t-attf-href="/job/apply/?job=#{ job.id }" class="btn btn-primary btn-lg">Apply</a> + <a t-attf-href="/jobs/apply/#{ job.id }" class="btn btn-primary btn-lg">Apply</a> </div> </div> </div> @@ -148,7 +143,7 @@ </t> </template> -<template id="applyjobpost"> +<template id="apply"> <t t-call="website.layout"> <t t-set="additional_title">Apply Job</t> <div id="wrap"> @@ -163,7 +158,7 @@ <div class="row"> <section id="forms"> <!-- TODO Multilingual form action support ? --> - <form class="form-horizontal mt32" action="/job/success" method="post" enctype="multipart/form-data"> + <form class="form-horizontal mt32" action="/jobs/thankyou" method="post" enctype="multipart/form-data"> <input type="hidden" t-att-value="job and job.department_id.id or False" name="department_id"/> <input type="hidden" t-att-value="job and job.id or False" name="job_id"/> <div class="form-group"> @@ -237,10 +232,10 @@ <template id="job_departments" inherit_option_id="website_hr_recruitment.index" name="Filter by Departments"> <xpath expr="//div[@id='jobs_grid_left']" position="inside"> <ul class="nav nav-pills nav-stacked mb32"> - <li t-att-class=" '' if active else 'active' "><a href="/jobs">All Departments</a></li> + <li t-att-class=" '' if department_id else 'active' "><a href="/jobs">All Departments</a></li> <t t-foreach="departments" t-as="department"> - <li t-att-class="department.id == active and 'active' or ''"> - <a t-attf-href="/jobs/department/#{ slug(department) }/" ><span t-field="department.name"/></a> + <li t-att-class="'active' if department_id == department.id else ''"> + <a t-attf-href="/jobs/department/#{ slug(department) }/" ><span t-field="department.name"/></a> </li> </t> </ul> @@ -256,9 +251,9 @@ <template id="job_offices" inherit_option_id="website_hr_recruitment.index" name="Filter by Offices"> <xpath expr="//div[@id='jobs_grid_left']" position="inside"> <ul class="nav nav-pills nav-stacked mb32"> - <li t-att-class=" '' if office else 'active' "><a href="/jobs">All Offices</a></li> + <li t-att-class=" '' if office_id else 'active' "><a href="/jobs">All Offices</a></li> <t t-foreach="offices" t-as="thisoffice"> - <li t-att-class="thisoffice.id == office and 'active' or ''"> + <li t-att-class=" 'active' if office_id == thisoffice.id else '' "> <a t-attf-href="/jobs/office/#{ slug(thisoffice) }/" > <span t-field="thisoffice.city"/><t t-if="thisoffice.country_id">, <span t-field="thisoffice.country_id.name"/> @@ -276,6 +271,5 @@ </xpath> </template> - </data> </openerp> |
