summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntony Lesuisse <al@openerp.com>2014-01-29 06:14:03 +0100
committerAntony Lesuisse <al@openerp.com>2014-01-29 06:14:03 +0100
commit6f8d8434dcd86c33e16788083e5b4efdb5653982 (patch)
tree9a8824efaa78359b6eba5be1a292105c7661ea7a
parent6b7d9f2bac3b3b864d3631f048ca88503a960ce0 (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
-rw-r--r--addons/website/models/website.py6
-rw-r--r--addons/website_hr_recruitment/__openerp__.py8
-rw-r--r--addons/website_hr_recruitment/controllers/main.py128
-rw-r--r--addons/website_hr_recruitment/data/config_data.xml (renamed from addons/website_hr_recruitment/data/website_hr_recruitment_data.xml)0
-rw-r--r--addons/website_hr_recruitment/data/hr_job_demo.xml (renamed from addons/website_hr_recruitment/data/website_hr_recruitment_demo.xml)0
-rw-r--r--addons/website_hr_recruitment/models/__init__.py1
-rw-r--r--addons/website_hr_recruitment/models/hr_department.py11
-rw-r--r--addons/website_hr_recruitment/models/hr_job.py11
-rw-r--r--addons/website_hr_recruitment/security/website_hr_recruitment_security.xml5
-rw-r--r--addons/website_hr_recruitment/static/src/xml/website_hr_recruitment.xml2
-rw-r--r--addons/website_hr_recruitment/views/hr_job_views.xml (renamed from addons/website_hr_recruitment/views/hr_recruitment_backend.xml)5
-rw-r--r--addons/website_hr_recruitment/views/templates.xml (renamed from addons/website_hr_recruitment/views/website_hr_recruitment.xml)26
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 &gt; 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>