2018-01-16 06:58:15 +01:00
|
|
|
# -*- coding: utf-8 -*-
|
2018-01-16 11:34:37 +01:00
|
|
|
# Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details.
|
2018-01-16 06:58:15 +01:00
|
|
|
|
2018-01-16 11:34:37 +01:00
|
|
|
from flectra import http, _
|
|
|
|
from flectra.addons.http_routing.models.ir_http import slug
|
|
|
|
from flectra.http import request
|
2018-01-16 06:58:15 +01:00
|
|
|
|
|
|
|
|
|
|
|
class WebsiteHrRecruitment(http.Controller):
|
|
|
|
def sitemap_jobs(env, rule, qs):
|
|
|
|
if not qs or qs.lower() in '/jobs':
|
|
|
|
yield {'loc': '/jobs'}
|
|
|
|
|
|
|
|
@http.route([
|
|
|
|
'/jobs',
|
|
|
|
'/jobs/country/<model("res.country"):country>',
|
|
|
|
'/jobs/department/<model("hr.department"):department>',
|
|
|
|
'/jobs/country/<model("res.country"):country>/department/<model("hr.department"):department>',
|
|
|
|
'/jobs/office/<int:office_id>',
|
|
|
|
'/jobs/country/<model("res.country"):country>/office/<int:office_id>',
|
|
|
|
'/jobs/department/<model("hr.department"):department>/office/<int:office_id>',
|
|
|
|
'/jobs/country/<model("res.country"):country>/department/<model("hr.department"):department>/office/<int:office_id>',
|
|
|
|
], type='http', auth="public", website=True, sitemap=sitemap_jobs)
|
|
|
|
def jobs(self, country=None, department=None, office_id=None, **kwargs):
|
|
|
|
env = request.env(context=dict(request.env.context, show_address=True, no_tag_br=True))
|
|
|
|
|
|
|
|
Country = env['res.country']
|
|
|
|
Jobs = env['hr.job']
|
|
|
|
|
|
|
|
# List jobs available to current UID
|
|
|
|
job_ids = Jobs.search([], order="website_published desc,no_of_recruitment desc").ids
|
2018-01-01 12:57:36 +01:00
|
|
|
if not request.env['res.users'].has_group('website.group_website_publisher'):
|
[IMP] Improve Multi-Website Functionalities:-
- Affected Modules:
website_sale, website_blog, website_partner, website_crm_partner_assign,
website_customer, website_slides, website_links, website_membership,
website_hr, website_hr_recruitment, website_payment, website_sale_delivery,
website_forum, website_event
- Remove unnecessary model `website.product.pricelist` from website_sale,
All its mechanism already transferd to existing model `product.pricelist`
- Change in `product.pricelist` model, make website_id(o2m) to website_ids(m2m),
As user can choose that same pricelist can be used in multiple websites
- Added `default_website` as default values in `website_ids(m2m)` & `website_id(m2o)` field in
almost all affected modules (mentioned above!!)
- To use/publish things(like... product, pricelist, blog, forum, events, etc...) in website,
User have to set `website_published` mechanism `on` (if it's available for that model/object),
Also have to set/assign different websites in `website_ids` field as per needs
2018-02-06 10:43:31 +01:00
|
|
|
job_ids = Jobs.search([('website_ids', 'in', request.website.id)], order="website_published desc, no_of_recruitment desc").ids
|
2018-01-16 06:58:15 +01:00
|
|
|
# Browse jobs as superuser, because address is restricted
|
|
|
|
jobs = Jobs.sudo().browse(job_ids)
|
|
|
|
|
|
|
|
# Default search by user country
|
|
|
|
if not (country or department or office_id or kwargs.get('all_countries')):
|
|
|
|
country_code = request.session['geoip'].get('country_code')
|
|
|
|
if country_code:
|
|
|
|
countries_ = Country.search([('code', '=', country_code)])
|
|
|
|
country = countries_[0] if countries_ else None
|
|
|
|
if not any(j for j in jobs if j.address_id and j.address_id.country_id == country):
|
|
|
|
country = False
|
|
|
|
|
|
|
|
# Filter job / office for country
|
|
|
|
if country and not kwargs.get('all_countries'):
|
|
|
|
jobs = [j for j in jobs if j.address_id is None or j.address_id.country_id and j.address_id.country_id.id == country.id]
|
|
|
|
offices = set(j.address_id for j in jobs if j.address_id is None or j.address_id.country_id and j.address_id.country_id.id == country.id)
|
|
|
|
else:
|
|
|
|
offices = set(j.address_id for j in jobs if j.address_id)
|
|
|
|
|
|
|
|
# Deduce departments and countries offices of those jobs
|
|
|
|
departments = set(j.department_id for j in jobs if j.department_id)
|
|
|
|
countries = set(o.country_id for o in offices if o.country_id)
|
|
|
|
|
|
|
|
if department:
|
|
|
|
jobs = [j for j in jobs if j.department_id and j.department_id.id == department.id]
|
|
|
|
if office_id and office_id in [x.id for x in offices]:
|
|
|
|
jobs = [j for j in jobs if j.address_id and j.address_id.id == office_id]
|
|
|
|
else:
|
|
|
|
office_id = False
|
|
|
|
|
|
|
|
# Render page
|
|
|
|
return request.render("website_hr_recruitment.index", {
|
|
|
|
'jobs': jobs,
|
|
|
|
'countries': countries,
|
|
|
|
'departments': departments,
|
|
|
|
'offices': offices,
|
|
|
|
'country_id': country,
|
|
|
|
'department_id': department,
|
|
|
|
'office_id': office_id,
|
|
|
|
})
|
|
|
|
|
|
|
|
@http.route('/jobs/add', type='http', auth="user", website=True)
|
|
|
|
def jobs_add(self, **kwargs):
|
|
|
|
job = request.env['hr.job'].create({
|
|
|
|
'name': _('Job Title'),
|
|
|
|
})
|
|
|
|
return request.redirect("/jobs/detail/%s?enable_editor=1" % slug(job))
|
|
|
|
|
|
|
|
@http.route('/jobs/detail/<model("hr.job"):job>', type='http', auth="public", website=True)
|
|
|
|
def jobs_detail(self, job, **kwargs):
|
[IMP] Improve Multi-Website Functionalities:-
- Affected Modules:
website_sale, website_blog, website_partner, website_crm_partner_assign,
website_customer, website_slides, website_links, website_membership,
website_hr, website_hr_recruitment, website_payment, website_sale_delivery,
website_forum, website_event
- Remove unnecessary model `website.product.pricelist` from website_sale,
All its mechanism already transferd to existing model `product.pricelist`
- Change in `product.pricelist` model, make website_id(o2m) to website_ids(m2m),
As user can choose that same pricelist can be used in multiple websites
- Added `default_website` as default values in `website_ids(m2m)` & `website_id(m2o)` field in
almost all affected modules (mentioned above!!)
- To use/publish things(like... product, pricelist, blog, forum, events, etc...) in website,
User have to set `website_published` mechanism `on` (if it's available for that model/object),
Also have to set/assign different websites in `website_ids` field as per needs
2018-02-06 10:43:31 +01:00
|
|
|
if not request.env.user.has_group('website.group_website_publisher') \
|
|
|
|
and request.website.id not in job.website_ids.ids:
|
|
|
|
return request.render('website.404')
|
2018-01-16 06:58:15 +01:00
|
|
|
return request.render("website_hr_recruitment.detail", {
|
|
|
|
'job': job,
|
|
|
|
'main_object': job,
|
|
|
|
})
|
|
|
|
|
|
|
|
@http.route('/jobs/apply/<model("hr.job"):job>', type='http', auth="public", website=True)
|
|
|
|
def jobs_apply(self, job, **kwargs):
|
|
|
|
error = {}
|
|
|
|
default = {}
|
|
|
|
if 'website_hr_recruitment_error' in request.session:
|
|
|
|
error = request.session.pop('website_hr_recruitment_error')
|
|
|
|
default = request.session.pop('website_hr_recruitment_default')
|
|
|
|
return request.render("website_hr_recruitment.apply", {
|
|
|
|
'job': job,
|
|
|
|
'error': error,
|
|
|
|
'default': default,
|
|
|
|
})
|