[IMP]Remove pager, Date is in grey after place, & description in div.
[odoo/odoo.git] / addons / website_hr_recruitment / controllers / main.py
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
6 import base64
7 import simplejson
8
9 from urllib import quote_plus
10
11 class website_hr_recruitment(http.Controller):
12
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']
19
20         domain = [(1, '=', 1)] or [('website_published', '=', True)]
21         search = [("state", 'in', ['recruit', 'open'])]
22         domain += search
23         if id != 0:
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")
27         ids = []
28         for i in request.cr.fetchall():
29             ids.append(i[0])
30         companies = request.registry['res.company'].browse(request.cr, request.uid, ids)
31         vals = {}
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]}
34         step = 5
35
36         department_ids = []
37         request.cr.execute("select * from hr_department")
38         for i in request.cr.fetchall():
39             department_ids.append(i[0])
40         active = id
41         step = 5
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'])
44         
45         values = {
46             'active': active,
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),
50             'vals': vals,
51             'no_of_jobs': len(hr_job_obj.browse(request.cr, request.uid, jobpost_ids)),
52            # 'pager': pager
53         }
54         return request.website.render("website_hr_recruitment.index", values)
55
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']
60         values = {
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]
63         }
64         return request.website.render("website_hr_recruitment.detail", values)
65
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)
69         if post['ufile']:
70             attachment_values = {
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'],
76                 'res_id': id
77                 }
78             request.registry['ir.attachment'].create(request.cr, request.uid, attachment_values)
79         website = request.registry['website']
80         values = {
81                 'jobid': post['job_id']
82            }
83         return request.website.render("website_hr_recruitment.thankyou", values)
84    
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)
89         values = {
90             'job': job
91         }
92         return request.website.render("website_hr_recruitment.applyjobpost", values)
93
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']
99
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)
105                 if not partner_ids:
106                     partner_data = {
107                         "email": post.get('email'),
108                         "name": "Subscribe: %s" % post.get('email')
109                     }
110                     partner_ids = [partner_obj.create(
111                         request.cr, SUPERUSER_ID, partner_data, context=request.context)]
112             else:
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)
120
121         return self.detail(id=job_id)
122
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']
128
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)
134             else:
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)
138
139         return self.detail(id=job_id)
140
141     @website.route('/recruitment/published', type='json', auth="admin")
142     def published (self, **post):
143         hr_job = request.registry['hr.job']
144         id = int(post['id'])
145         rec = hr_job.browse(request.cr, request.uid, id)
146         vals = {}
147
148         if rec.website_published:
149             vals['state'] = 'recruit'
150             if rec.no_of_recruitment == 0.0:
151                 vals ['no_of_recruitment'] = 1.0
152         else:
153             vals['state'] = 'open'
154             vals ['no_of_recruitment'] = 0.0
155
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: