from openerp.addons.web.http import request
class website_hr_recruitment(http.Controller):
-
@http.route([
'/jobs',
'/jobs/department/<model("hr.department"):department>',
@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 })
+ 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.website.render("website_hr_recruitment.apply", { 'job': job, 'error': error, 'default': default})
@http.route(['/jobs/thankyou'], methods=['POST'], type='http', auth="public", website=True, multilang=True)
def jobs_thankyou(self, **post):
cr, uid, context = request.cr, request.uid, request.context
imd = request.registry['ir.model.data']
+
+ error = {}
+ for field_name in ["partner_name", "phone", "email_from"]:
+ if not post.get(field_name):
+ error[field_name] = 'missing'
+ if error:
+ request.session['website_hr_recruitment_error'] = error
+ ufile = post.pop('ufile')
+ if ufile:
+ error['ufile'] = 'reset'
+ request.session['website_hr_recruitment_default'] = post
+ return request.redirect('/jobs/apply/%s' % post.get("job_id"))
+
value = {
- 'name': _('Online Form'),
- 'user_id': False,
'source_id' : imd.xmlid_to_res_id(cr, SUPERUSER_ID, 'hr_recruitment.source_website_company'),
}
- for f in ['phone', 'email_from', 'partner_name', 'description', 'department_id', 'job_id']:
+ for f in ['phone', 'email_from', 'partner_name', 'description']:
value[f] = post.get(f)
+ for f in ['department_id', 'job_id']:
+ value[f] = int(post.get(f) or 0)
- job_id = request.registry['hr.applicant'].create(cr, SUPERUSER_ID, value, context=context)
+ applicant_id = request.registry['hr.applicant'].create(cr, SUPERUSER_ID, value, context=context)
if post['ufile']:
attachment_value = {
'name': post['ufile'].filename,
'res_name': value['partner_name'],
'res_model': 'hr.applicant',
- 'res_id': job_id,
+ 'res_id': applicant_id,
'datas': base64.encodestring(post['ufile'].read()),
'datas_fname': post['ufile'].filename,
}
<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">
+ <div t-attf-class="form-group #{error.get('partner_name') and 'has-error' or ''}">
<label class="col-md-3 col-sm-4 control-label" for="partner_name">Your Name</label>
<div class="col-md-7 col-sm-8">
- <input type="text" class="form-control" name="partner_name" required="True" />
+ <input type="text" t-att-value="default.get('partner_name')" class="form-control" name="partner_name" required="True"/>
</div>
</div>
- <div class="form-group">
+ <div t-attf-class="form-group #{error.get('email_from') and 'has-error' or ''}">
<label class="col-md-3 col-sm-4 control-label" for="email_from">Your Email</label>
<div class="col-md-7 col-sm-8">
- <input type="email" class="form-control" name="email_from" required="True" />
+ <input type="email" t-att-value="default.get('email_from')" class="form-control" name="email_from" required="True"/>
</div>
</div>
- <div class="form-group">
+ <div t-attf-class="form-group #{error.get('phone') and 'has-error' or ''}">
<label class="col-md-3 col-sm-4 control-label" for="phone">Your Phone</label>
<div class="col-md-7 col-sm-8">
- <input type="text" class="form-control" name="phone" required="True" />
+ <input type="text" t-att-value="default.get('phone')" class="form-control" name="phone" required="True"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 col-sm-4 control-label" for="description">Short Introduction</label>
<div class="col-md-7 col-sm-8">
- <textarea class="form-control" name="description" style="min-height: 120px"/>
+ <textarea class="form-control" t-esc="default.get('description')" name="description" style="min-height: 120px"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 col-sm-4 control-label" for="ufile">Resume</label>
<div class="col-md-7 col-sm-8">
<input class="input-file" id="fileInput" type="file" name="ufile"/>
+ <span t-if="error.get('ufile')">Please send again your resume.</span>
</div>
</div>
<div class="form-group">