1 # -*- coding: utf-8 -*-
2 from openerp.addons.web import http
3 from openerp import SUPERUSER_ID
4 from openerp.addons.web.http import request
5 from openerp.addons.website import website
9 from urllib import quote_plus
11 class website_hr_recruitment(http.Controller):
13 @website.route(['/jobs', '/jobs/page/<int:page>/', '/department/<id>/', '/department/<id>/page/<int:page>/'], type='http', auth="public")
14 def jobs(self, id=0, page=1, **post):
15 id = id and int(id) or 0
16 website = request.registry['website']
17 hr_job_obj = request.registry['hr.job']
18 hr_department_obj = request.registry['hr.department']
20 domain = [(1, '=', 1)] or [('website_published', '=', True)]
21 search = [("state", 'in', ['recruit', 'open'])]
24 domain += [('department_id','=', id)]
25 jobpost_ids = hr_job_obj.search(request.cr, request.uid, domain)
26 request.cr.execute("select distinct(com.id) from hr_job job, res_company com where com.id=job.company_id")
28 for i in request.cr.fetchall():
30 companies = request.registry['res.company'].browse(request.cr, request.uid, ids)
32 for rec in hr_job_obj.browse(request.cr, request.uid, jobpost_ids):
33 vals[rec.id] = {'count': int(rec.no_of_recruitment), 'date_recruitment': rec.write_date.split(' ')[0]}
37 request.cr.execute("select * from hr_department")
38 for i in request.cr.fetchall():
39 department_ids.append(i[0])
42 pager = request.website.pager(url="/jobs/", total=len(jobpost_ids), page=page, step=step, scope=5)
43 #jobpost_ids = hr_job_obj.search(request.cr, request.uid, domain, limit=step, offset=pager['offset'])
47 'companies': companies,
48 'res_job': hr_job_obj.browse(request.cr, request.uid, jobpost_ids),
49 'departments': hr_department_obj.browse(request.cr, request.uid, department_ids),
51 'no_of_jobs': len(hr_job_obj.browse(request.cr, request.uid, jobpost_ids)),
54 return request.website.render("website_hr_recruitment.index", values)
56 @website.route(['/job/detail/<id>'], type='http', auth="public")
57 def detail(self, id=0):
58 id = id and int(id) or 0
59 website = request.registry['website']
61 'job': request.registry['hr.job'].browse(request.cr, request.uid, id),
62 'vals_date': request.registry['hr.job'].browse(request.cr, request.uid, id).write_date.split(' ')[0]
64 return request.website.render("website_hr_recruitment.detail", values)
66 @website.route(['/job/success'], type='http', auth="admin")
67 def success(self, **post):
68 id = request.registry['hr.applicant'].create(request.cr, request.uid, post)
71 'name': post['ufile'].filename,
72 'datas': base64.encodestring(post['ufile'].read()),
73 'datas_fname': post['ufile'].filename,
74 'res_model': 'hr.applicant',
75 'res_name': post['name'],
78 request.registry['ir.attachment'].create(request.cr, request.uid, attachment_values)
79 website = request.registry['website']
81 'jobid': post['job_id']
83 return request.website.render("website_hr_recruitment.thankyou", values)
85 @website.route(['/apply/<int:id>'], type='http', auth="public")
86 def applyjobpost(self, id=0):
87 id = id and int(id) or 0
88 job = request.registry['hr.job'].browse(request.cr, request.uid, id)
92 return request.website.render("website_hr_recruitment.applyjobpost", values)
94 @website.route(['/job/detail/<int:job_id>/subscribe'], type='http', auth="public")
95 def subscribe(self, job_id=None, **post):
96 partner_obj = request.registry['res.partner']
97 job_obj = request.registry['hr.job']
98 user_obj = request.registry['res.users']
100 if job_id and 'subscribe' in post and (post.get('email') or not request.context['is_public_user']):
101 if request.context['is_public_user']:
102 partner_ids = partner_obj.search(
103 request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))],
104 context=request.context)
107 "email": post.get('email'),
108 "name": "Subscribe: %s" % post.get('email')
110 partner_ids = [partner_obj.create(
111 request.cr, SUPERUSER_ID, partner_data, context=request.context)]
113 partner_ids = [user_obj.browse(
114 request.cr, request.uid, request.uid,
115 context=request.context).partner_id.id]
116 job_obj.check_access_rule(request.cr, request.uid, [job_id],
117 'read', request.context)
118 job_obj.message_subscribe(request.cr, SUPERUSER_ID, [job_id],
119 partner_ids, request.context)
121 return self.detail(id=job_id)
123 @website.route(['/job/detail/<int:job_id>/unsubscribe'], type='http', auth="public")
124 def unsubscribe(self, job_id=None, **post):
125 partner_obj = request.registry['res.partner']
126 job_obj = request.registry['hr.job']
127 user_obj = request.registry['res.users']
129 if job_id and 'unsubscribe' in post and (post.get('email') or not request.context['is_public_user']):
130 if request.context['is_public_user']:
131 partner_ids = partner_obj.search(
132 request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))],
133 context=request.context)
135 partner_ids = [user_obj.browse(request.cr, request.uid, request.uid, request.context).partner_id.id]
136 job_obj.check_access_rule(request.cr, request.uid, [job_id], 'read', request.context)
137 job_obj.message_unsubscribe(request.cr, SUPERUSER_ID, [job_id], partner_ids, request.context)
139 return self.detail(id=job_id)
141 @website.route('/recruitment/published', type='json', auth="admin")
142 def published (self, **post):
143 hr_job = request.registry['hr.job']
145 rec = hr_job.browse(request.cr, request.uid, id)
148 if rec.website_published:
149 vals['state'] = 'recruit'
150 if rec.no_of_recruitment == 0.0:
151 vals ['no_of_recruitment'] = 1.0
153 vals['state'] = 'open'
154 vals ['no_of_recruitment'] = 0.0
156 res = hr_job.write(request.cr, request.uid, [rec.id], vals)
157 obj = hr_job.browse(request.cr, request.uid, id)
158 return { 'count': obj.no_of_recruitment, 'state': obj.state, 'published': obj.website_published }
159 # vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: