[FIX] website placeholder; website_hr_recruitment required for ie
authorChristophe Matthieu <chm@openerp.com>
Mon, 24 Feb 2014 14:27:51 +0000 (15:27 +0100)
committerChristophe Matthieu <chm@openerp.com>
Mon, 24 Feb 2014 14:27:51 +0000 (15:27 +0100)
bzr revid: chm@openerp.com-20140224142751-7bolxomy2nc717w0

addons/website/static/src/js/website.js
addons/website_hr_recruitment/controllers/main.py
addons/website_hr_recruitment/views/templates.xml

index 3be70b9..54ee468 100644 (file)
@@ -69,7 +69,8 @@
         website.is_editable = website.is_editable || $('html').data('editable');
         website.is_editable_button= website.is_editable_button || $('html').data('editable');
         dom_ready.resolve();
-        $('input, textarea').placeholder();
+        // fix for ie
+        if($.fn.placeholder) $('input, textarea').placeholder();
     });
 
     website.init_kanban = function ($kanban) {
index c50bc6a..a3cbbe3 100644 (file)
@@ -7,7 +7,6 @@ from openerp.tools.translate import _
 from openerp.addons.web.http import request
 
 class website_hr_recruitment(http.Controller):
-
     @http.route([
         '/jobs',
         '/jobs/department/<model("hr.department"):department>',
@@ -61,27 +60,45 @@ class website_hr_recruitment(http.Controller):
 
     @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,
             }
index 3e057d2..9dab6c6 100644 (file)
                         <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">