templates/job_board/apply.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
  2. {% block page_contents %}
  3. <section class="section section-page-title bg-gradient pt-xl-5 py-4" data-aos='fade-down'>
  4.   <div class="container">
  5.     <div class="row">
  6.       <div class="col-12 text-center text-white">
  7.         <h1 class="page-name font-weight-bold my-2">
  8.           {% trans %}DÉPOSER VOTRE CANDIDATURE{% endtrans %}
  9.         </h1>
  10.       </div>
  11.     </div>
  12.   </div>
  13. </section>
  14. <section class="section section-form section-form-2 mb-5 mt-4">
  15.   <div class="container">
  16.     <div class="row">
  17.       <div class="col-12 text-center mb-4">
  18.         <div class="offre-logo mb-3">
  19.           {% if job.logoUrl %}
  20.             <img src="{{ job.logoUrl }}" alt />
  21.           {% endif %}
  22.         </div>
  23.         <div class="font-weight-bold font-30 text-dark-purple mb-3">{{ job.offerTitle }}</div>
  24.         <div class="font-italic text-dark-purple">{% trans %}Référence de l'offre{% endtrans %} : {{ job.code }}</div>
  25.       </div>
  26.       <div class="col-12">
  27.         <form id="apply-job">
  28.           <input type="hidden" name="offer" value="{{ job.id }}">
  29.           <div class="section-title text-left mb-2"><span>/</span> {% trans %}Mon statut ÉSTIAM{% endtrans %}</div>
  30.           <div class="form-group">
  31.             {% for status in statusCandidate %}
  32.               <div class="form-check mx-0 px-0 mb-2">
  33.                 <div class="custom-control custom-radio">
  34.                     <input type="radio" class="custom-control-input" id="status-{{ status.id }}" name="status" value="{{ status.id }}">
  35.                     <label class="custom-control-label text-dark-purple font-weight-normal" for="status-{{ status.id }}">{{ status.name }}</label>
  36.                 </div>
  37.               </div>
  38.             {% endfor %}
  39.           </div>
  40.           
  41.           <div class="section-title text-left mb-2"><span>/</span> {% trans %}Mon dossier ÉSTIAM{% endtrans %}</div>
  42.           <div class="row">
  43.             <div class="col-lg-4">
  44.               <div class="form-group row row-gender align-items-center mt-2">
  45.                 <label class="col-form-label font-weight-normal col-4 pt-0 pb-0">{% trans %}Civilité{% endtrans %}<span class="text-orange">*</span> :</label>
  46.                 <div class="col-8 pl-0">
  47.                     <div class="form-check form-check-inline mr-0">
  48.                       <div class="custom-control custom-radio">
  49.                           <input type="radio" class="custom-control-input" id="mr" name="gender" value="1" required>
  50.                           <label class="custom-control-label text-dark-purple" for="mr">{% trans %}Madame{% endtrans %}</label>
  51.                       </div>
  52.                     </div>
  53.                     <div class="form-check form-check-inline ml-3 mr-0">
  54.                       <div class="custom-control custom-radio">
  55.                           <input type="radio" class="custom-control-input" id="mrs" name="gender" value="0" required>
  56.                           <label class="custom-control-label text-dark-purple" for="mrs">{% trans %}Monsieur{% endtrans %}</label>
  57.                       </div>
  58.                     </div>
  59.                 </div>
  60.               </div>
  61.             </div>
  62.             <div class="col-lg-4">
  63.               <div class="form-group">
  64.                 <input type="text" class="form-control" name="firstName" placeholder="{% trans %}Nom de famille*{% endtrans %}">
  65.               </div>
  66.             </div>
  67.             <div class="col-lg-4">
  68.               <div class="form-group">
  69.                 <input type="text" class="form-control" name="lastName" placeholder="{% trans %}Prénom*{% endtrans %}" required>
  70.               </div>
  71.             </div>
  72.           </div>
  73.           <div class="row">
  74.             <div class="col-lg-4">
  75.               <div class="form-group">
  76.                 <input type="text" class="form-control" name="phone" placeholder="{% trans %}Téléphone*{% endtrans %}" required>
  77.               </div>
  78.             </div>
  79.             <div class="col-lg-4">
  80.               <div class="form-group">
  81.                 <input type="text" class="form-control" name="email" placeholder="{% trans %}Adresse e-mail*{% endtrans %}" required>
  82.               </div>
  83.             </div>
  84.             <div class="col-lg-4">
  85.               <div class="form-group">
  86.                 <select class="form-control" name="studyLevel">
  87.                 <option value>{% trans %}Niveau d'étude{% endtrans %}</option>
  88.                 {% for studyLevel in studyLevels %}
  89.                   <option value="{{ studyLevel.id }}">{{ studyLevel.name }}</option>
  90.                 {% endfor %}
  91.               </select>
  92.               </div>
  93.             </div>
  94.           </div>
  95.           <div class="form-group">
  96.             <textarea class="form-control" name="message" placeholder="{% trans %}Message au recruteur*{% endtrans %}" required></textarea>
  97.           </div>
  98.           <div class="section-title text-left mb-2"><span>/</span> {% trans %}Pièces complémentaires{% endtrans %}</div>
  99.           <p class="font-italic font-weight-300">{% trans %}2 Mo maximum par pièces jointes.{% endtrans %}<br/>
  100.           {% trans %}Formats autorisés : JPG, PDF, PNG (les CV et lettre de motivation peuvent aussi être au format Word).{% endtrans %}</p>
  101.           <div class="row field-upload">
  102.             <div class="col-12 form-group curriculumVitae">
  103.               <div>
  104.                 <div class="group-item mb-1">
  105.                   <input id="file_cv" type="file" class="form-control" name="file_cv" value accept=".pdf,.docx,.doc,.png,.jpg"/>
  106.                   <label class="d-flex flex-column" for="file_cv">
  107.                     <div class="d-flex align-items-center">
  108.                       <span class="upload-btn cursor cloud-btn px-3">
  109.                         <i class="fas fa-cloud-arrow-up"></i>
  110.                       </span>
  111.                       <span class="text-dark-purple ml-3 font-weight-normal">{% trans %}Votre cv <span class="text-orange">*</{% endtrans %}</span>
  112.                     </div>
  113.                     <span class="file-desc flex-1 d-flex align-items-center mt-2">
  114.                       <i class="fa-solid fa-paperclip-vertical text-orange mr-2"></i>
  115.                       <span class="upload-file-name"></span>
  116.                       <i class="far fa-xmark ml-3 cursor"></i>
  117.                     </span>
  118.                   </label>
  119.                 </div>
  120.                 <div class="group-item mb-1">
  121.                   <input id="file_cover" type="file" class="form-control" name="file_cover" value accept=".pdf,.docx,.doc,.png,.jpg"/>
  122.                   <label class="d-flex flex-column" for="file_cover">
  123.                     <div class="d-flex align-items-center">
  124.                       <span class="upload-btn cursor cloud-btn px-3">
  125.                         <i class="fas fa-cloud-arrow-up"></i>
  126.                       </span>
  127.                       <span class="text-dark-purple ml-3 font-weight-normal">{% trans %}Votre lettre de motivation <span class="text-orange">*</{% endtrans %}</span>
  128.                     </div>
  129.                     <span class="file-desc flex-1 d-flex align-items-center mt-2">
  130.                       <i class="fa-solid fa-paperclip-vertical text-orange mr-2"></i>
  131.                       <span class="upload-file-name"></span>
  132.                       <i class="far fa-xmark ml-3 cursor"></i>
  133.                     </span>
  134.                   </label>
  135.                 </div>
  136.               </div>
  137.             </div>
  138.           </div>
  139.           {% if captcha_enabled %}
  140.             <div class="captcha-row mb-4 d-flex justify-content-center">
  141.                 <div class="g-recaptcha animate__animated" data-sitekey="{{captcha_key}}"></div>
  142.             </div>
  143.           {% endif %}
  144.           <div class="notification-error mb-4 text-center text-danger font-weight-bold" style="display: none;"></div>
  145.           <div class="text-center form-submit">
  146.             <button type="submit" id="btn-submit" class="link-gradient"><span>{% trans %}Envoyer votre candidature{% endtrans %}</span><i class="far fa-arrow-right"></i></button>
  147.           </div>
  148.         </form>
  149.       </div>
  150.     </div>
  151.   </div>
  152. </section>
  153. <div class="modal fade" id="thankYouModal" tabindex="-1" role="dialog" aria-labelledby="thankYouModalTitle" aria-hidden="true">
  154.   <div class="modal-dialog modal-dialog-centered" role="document">
  155.     <div class="modal-content">
  156.       <div class="modal-header">
  157.         <a href="{{ path('home') }}">
  158.           <img src="{{ asset('assets/images/logo.svg') }}" alt="Estiam">
  159.         </a>
  160.       </div>
  161.       <div class="modal-body">
  162.         <div class="text-center mb-4">
  163.           {% trans with {'%name%': job.offerTitle} from 'app' %}Nous vous confirmons la bonne réception de votre candidature au poste de <b>%name%</b>. Nous allons l'étudier rapidement afin de vous donner une réponse dans les plus brefs délais. Merci ! %name%{% endtrans %}
  164.         </div>
  165.         <div class="text-center">
  166.           <button type="button" class="common-btn" data-dismiss="modal">{% trans %}Fermer{% endtrans %}</button>
  167.         </div>
  168.       </div>
  169.     </div>
  170.   </div>
  171. </div>
  172. {% endblock %}
  173. {% block custom_javascripts %}
  174. <script type="text/javascript">
  175. $(document).ready(function($){
  176.   var input = $('input[type=file]');
  177.   input.each(function(event){
  178.     $('.curriculumVitae .fa-xmark').click(function (event) {
  179.       event.preventDefault();
  180.       event.stopPropagation();
  181.       $(this).val('')
  182.       $(this).removeClass('selected')
  183.       $(this).next('label .upload-file-name').html('')
  184.     })
  185.     $(this).change(function(event) {
  186.     
  187.       let result = checkFile($(this));
  188.       if(result){
  189.         $(this).val('');
  190.         showMessage(result);
  191.         return false;
  192.       }
  193.       $(this).addClass('selected');
  194.       $(this).next('label').find('.upload-file-name').html(event.target.files[0].name)
  195.     });
  196.   });
  197.   var current_input;
  198.   $('.fa-xmark').click(function (event) {
  199.     current_input = $(this).closest('.group-item').find('input[type=file]');
  200.     event.preventDefault();
  201.     event.stopPropagation();
  202.     current_input.val('');
  203.     current_input.removeClass('selected');
  204.   });
  205.   $('#apply-job').on('submit', function (e) {
  206.       event.preventDefault();
  207.       let $button = $(this).find('#btn-submit');
  208.       loadButton($button);
  209.       {% if captcha_enabled %}
  210.         if (grecaptcha.getResponse().length == 0) {
  211.           showMessage('{% trans %}Veuillez vérifier le recaptcha{% endtrans %}');
  212.           return false;
  213.         }
  214.       {% endif %}
  215.       if(!$("#file_cv").val()){
  216.         showMessage('{% trans %}Merci de choisir votre CV{% endtrans %}');
  217.         return false;
  218.       }
  219.       if(!$("#file_cover").val()){
  220.         showMessage('{% trans %}Merci de choisir votre lettre de motivation{% endtrans %}');
  221.         return false;
  222.       }
  223.       
  224.       let formData = new FormData(this);
  225.       $.ajax({
  226.         url: "{{ path('job.save_apply') }}",
  227.         type: "POST",
  228.         dataType: 'json',
  229.         data : formData,
  230.         contentType: false,
  231.         processData: false,
  232.         success: function(result) {
  233.           if(result.status == 'success'){
  234.             resetForm();
  235.             $('#thankYouModal').modal();
  236.             removeLoadButton($button);
  237.           }else{
  238.             showMessage(result.errors.errorMessage);
  239.           }
  240.           grecaptcha.reset();
  241.         }
  242.       }).always(function () {
  243.         removeLoadButton($button)
  244.       });
  245.   });
  246. });
  247. function resetForm(){
  248.   $('#apply-job').each(function(){
  249.     this.reset();
  250.     $('.fa-xmark').trigger('click');
  251.     $('#skill-selected').text(0);
  252.   });
  253. }
  254. </script>
  255. {% endblock %}