templates/front/quotation/trucks.html.twig line 1

Open in your IDE?
  1. {% extends "front/_common/_base.html.twig" %}
  2. {% block linkcanonical %}
  3.     <link rel="canonical" href="{{ absolute_url(path('quotation_trucks')) }}">
  4. {% endblock %}
  5. {% block cssadicional %}
  6. {% if info.captchaShow and info.captchaSite and info.captchaSecret %}
  7. <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback" async defer></script>
  8. <script type="text/javascript">
  9.   var onloadCallback = function() {
  10.     var element = document.getElementById('g-recaptcha-response');
  11.     element.classList.add('validate[required]');
  12.   };
  13. </script>
  14. {% endif %}
  15. {% endblock %}
  16. {% block classbody %}{% endblock %}
  17. {% block content %}
  18.     <section class="quote_banner">
  19.         <div class="quote_banner_content ww_center">
  20.             <div class="quote_banner_miga">
  21.                 <ul>
  22.                     <li><a href="{{ path('home') }}">Inicio</a></li>
  23.                     <li><a>Cotizar</a></li>
  24.                 </ul>
  25.             </div>
  26.             <h1 class="quote_banner_title">{{ sd.title }}</h1>
  27.         </div>
  28.     </section>
  29.     <section class="quote_form">
  30.         <div class="quote_form_content ww_center">
  31.             <div class="quote_form_block">
  32.                 {% if sd.text %}
  33.                     <div class="quote_form_description">
  34.                         <p>{{ sd.text|nl2br }}</p>
  35.                     </div>
  36.                 {% endif %}
  37.                 <div class="quote_form_fields">
  38.                     {{ form_start(form, {'attr': {'id': 'form_camiones'}}) }}
  39.                         {% include 'front/templates/form_utm_fields.html.twig' %}
  40.                         {{ form_widget(form.typePerson) }}
  41.                         {{ form_widget(form.documentType) }}
  42.                         {{ form_widget(form.documentNumber) }}
  43.                         {{ form_widget(form.model) }}
  44.                         {{ form_widget(form.crmModel) }}
  45.                         {{ form_widget(form.tonnage) }}
  46.                         <div class="field_radios">
  47.                             <div class="field_radio">
  48.                                 <input type="radio" name="form_type" value="Empresa" id="form_quotation_trucks_legal_person" checked>
  49.                                 <label for="form_quotation_trucks_legal_person" class="field_radio_label">
  50.                                     <span class="field_radio_icon"></span>
  51.                                     <span class="field_radio_text">Soy empresa</span>
  52.                                 </label>
  53.                             </div>
  54.                             <div class="field_radio">
  55.                                 <input type="radio" name="form_type" value="Persona natural" id="form_quotation_trucks_natural_person">
  56.                                 <label for="form_quotation_trucks_natural_person" class="field_radio_label">
  57.                                     <span class="field_radio_icon"></span>
  58.                                     <span class="field_radio_text">Soy Persona Natural</span>
  59.                                 </label>
  60.                             </div>
  61.                         </div>
  62.                         <div class="field_block">
  63.                             <div class="field_item_column quote_field_company">
  64.                                 <div class="field_box">
  65.                                     <input type="text" class="validate[required] soloNumber inputEffect form_quotation_trucks_document_number" id="form_document_number_legal_person">
  66.                                     <label for="form_document_number_legal_person" class="field_text">RUC *</label>
  67.                                 </div>
  68.                                 <div class="field_box">
  69.                                     {{ form_widget(form.company, {'attr': {'class': 'validate[required] inputEffect'}}) }}
  70.                                     <label for="form_quotation_trucks_company" class="field_text">Empresa *</label>
  71.                                 </div>
  72.                             </div>
  73.                             <div class="field_item_column quote_field_person" style="display:none;">
  74.                                 <div class="field_box">
  75.                                     <select id="form_quotation_trucks_document_types" class="inputEffect">
  76.                                         <option value="" disabled selected></option>
  77.                                         {% for item in forms.documentTypes %}
  78.                                             <option value="{{ item.title }}">{{ item.title }}</option>
  79.                                         {% endfor %}
  80.                                     </select>
  81.                                     <label for="form_quotation_trucks_document_types" class="field_text">Tipo de documento *<span class="icon-arrow_drop_down"></span></label>
  82.                                 </div>
  83.                                 <div class="field_box">
  84.                                     <input type="text" class="inputEffect form_quotation_trucks_document_number soloNumber" id="form_quotation_trucks_document_number_natural_person">
  85.                                     <label for="form_quotation_trucks_document_number_natural_person" class="field_text">Número de documento *</label>
  86.                                 </div>
  87.                             </div>
  88.                             <div class="field_item_column">
  89.                                 <div class="field_box">
  90.                                     {{ form_widget(form.name, {'attr': {'class': 'validate[required] inputEffect'}}) }}
  91.                                     <label for="form_quotation_trucks_name" class="field_text">Nombres *</label>
  92.                                 </div>
  93.                                 <div class="field_box">
  94.                                     {{ form_widget(form.lastname, {'attr': {'class': 'validate[required] inputEffect'}}) }}
  95.                                     <label for="form_quotation_trucks_lastname" class="field_text">Apellidos *</label>
  96.                                 </div>
  97.                             </div>
  98.                             <div class="field_item_column">
  99.                                 <div class="field_box">
  100.                                     {{ form_widget(form.phone, {'attr': {'class': 'soloNumber inputEffect validate[required, custom[phone]]'}}) }}
  101.                                     <label for="form_quotation_trucks_phone" class="field_text">Teléfono *</label>
  102.                                 </div>
  103.                                 <div class="field_box">
  104.                                     {{ form_widget(form.email, {'attr': {'class': 'inputEffect validate[required, custom[email]]'}}) }}
  105.                                     <label for="form_quotation_trucks_email" class="field_text">Correo electrónico *</label>
  106.                                 </div>
  107.                             </div>
  108.                             <div class="field_item_column">
  109.                                 <div class="field_box">
  110.                                     {{ form_widget(form.department, {'attr': {'class': 'inputEffect validate[required]'}}) }}
  111.                                     <label for="form_quotation_trucks_department" class="field_text">Departamento *</label>
  112.                                 </div>
  113.                             </div>
  114.                             <div class="field_item_column">
  115.                                 <div class="field_box">
  116.                                     <select class="inputEffect validate[required]" id="form_quotation_trucks_tonnages">
  117.                                         <option value="" disabled selected></option>
  118.                                     </select>
  119.                                     <label for="form_quotation_trucks_tonnages" class="field_text">Carga útil *<span class="icon-arrow_drop_down"></span></label>
  120.                                 </div>
  121.                                 <div class="field_box">
  122.                                     <select class="inputEffect" id="form_quotation_trucks_models">
  123.                                         <option value="" disabled selected></option>
  124.                                     </select>
  125.                                     <label for="form_quotation_trucks_models" class="field_text">Modelo *<span class="icon-arrow_drop_down"></span></label>
  126.                                 </div>
  127.                             </div>
  128.                         </div>
  129.                         <div class="field_required">
  130.                             <p>* Campos obligatorios</p>
  131.                         </div>
  132.                         <div class="field_check_center">
  133.                             <div class="field_check">
  134.                                 <input type="checkbox" id="b2ccamiones_checkbox" class="validate[required]" name="">
  135.                                 <label for="b2ccamiones_checkbox" class="field_check_text">
  136.                                     <span class="field_check_icon"></span>
  137.                                     <p>He leído y acepto las <a href="{{ path('data_protection_policies') }}" target="_blank">Políticas de privacidad</a></p>
  138.                                 </label>
  139.                             </div>
  140.                         </div>
  141.                         {% if info.captchaShow and info.captchaSite and info.captchaSecret %}
  142.                         <div style="padding-top:20px;">
  143.                             <div class="g-recaptcha" data-sitekey="{{ info.captchaSite }}"></div>
  144.                         </div>
  145.                         {% endif %}
  146.                         <div class="field_button">
  147.                             <button class="btn btn_blue btnFormCamiones" id="btnFormCamiones">Enviar</button>
  148.                         </div>
  149.                     {{ form_end(form) }}
  150.                 </div>
  151.             </div>
  152.         </div>
  153.     </section>
  154. {% endblock %}
  155. {% block jsfinal %}
  156.     <script src="{{ asset('static/js/validationform/jquery.validationEngine-es.js') }}"></script>
  157.     <script src="{{ asset('static/js/validationform/staff.validationEngine.js') }}"></script>
  158.     <script type="text/javascript">
  159.         $(function () {
  160.             const quoteFields = $(".field_box input, .field_box select, .field_box textarea");
  161.             $(quoteFields).focusin(function() {
  162.                 $(this).addClass('border');
  163.             });
  164.             $(quoteFields).focusout(function() {
  165.                 if ($(this).val() === "") {
  166.                     $(this).removeClass('border');
  167.                 }
  168.             });
  169.             $(quoteFields).each(function() {
  170.                 if ($(this).val()) {
  171.                     $(this).addClass('border');
  172.                 }
  173.             });
  174.             $('.soloNumber').keypress(validateNumber);
  175.             function validateNumber(event) {
  176.                 const key = window.event ? event.keyCode : event.which;
  177.                 if (event.keyCode === 8 || event.keyCode === 46) {
  178.                     return true;
  179.                 } else return !(key < 48 || key > 57);
  180.             }
  181.             $('#form_quotation_trucks_natural_person').on('change', function () {
  182.                 $('.quote_field_company').hide();
  183.                 $('.quote_field_person').show();
  184.             });
  185.             $('#form_quotation_trucks_legal_person').on('change', function () {
  186.                 $('.quote_field_person').hide();
  187.                 $('.quote_field_company').show();
  188.             });
  189.             $('#form_quotation_trucks_legal_person').on('change', function () {
  190.                 $('#form_quotation_trucks_typePerson').val($(this).val());
  191.                 $('#form_quotation_trucks_document_types').val('');
  192.                 $('#form_quotation_trucks_document_number_natural_person').val('');
  193.                 $('#form_quotation_trucks_document_number_legal_person').val('');
  194.                 $('#form_quotation_trucks_documentType').val('RUC');
  195.                 $('#form_quotation_trucks_documentNumber').val('');
  196.                 $('#form_quotation_trucks_company').val('');
  197.             })
  198.             $('#form_quotation_trucks_natural_person').on('change', function () {
  199.                 $('#form_quotation_trucks_typePerson').val($(this).val());
  200.                 $('#form_quotation_trucks_document_types').val('');
  201.                 $('#form_quotation_trucks_document_number_natural_person').val('');
  202.                 $('#form_quotation_trucks_document_number_legal_person').val('');
  203.                 $('#form_quotation_trucks_documentType').val('');
  204.                 $('#form_quotation_trucks_documentNumber').val('');
  205.             })
  206.             $('#form_quotation_trucks_legal_person').trigger('change');
  207.             $('.form_quotation_trucks_document_number').on('keyup', function () {
  208.                 $('#form_quotation_trucks_documentNumber').val($(this).val());
  209.             })
  210.             $('#form_quotation_trucks_document_types').on('change', function () {
  211.                 $('#form_quotation_trucks_documentType').val($(this).val());
  212.             })
  213.             $('#form_quotation_trucks_models').on('change', function () {
  214.                 $('#form_quotation_trucks_model').val($(this).find('option:selected').data('value'));
  215.                 $('#form_quotation_trucks_crmModel').val($(this).find('option:selected').data('crm-model'));
  216.             })
  217.             $('#form_quotation_trucks_tonnages').on('change', function () {
  218.                 $('#form_quotation_trucks_tonnage').val($(this).find('option:selected').data('value'));
  219.             })
  220.             $('#form_quotation_trucks_tonnages').on('change', function () {
  221.                 updateModels();
  222.             })
  223.             const form_quotation_trucks = $('#form_camiones');
  224.             const form_quotation_trucks_button = $('#btnFormCamiones');
  225.             form_quotation_trucks.validationEngine('attach', {
  226.                 promptPosition: "topLeft",
  227.                 autoHidePrompt: true,
  228.                 autoHideDelay: 3000,
  229.                 binded: false,
  230.                 scroll: false
  231.             });
  232.             form_quotation_trucks_button.on('click', function (event) {
  233.                 event.preventDefault();
  234.                 const valid = form_quotation_trucks.validationEngine('validate');
  235.                 if (valid) {
  236.                     form_quotation_trucks.submit();
  237.                 }
  238.             });
  239.             $.ajax({
  240.                 url: '{{ path('quotation_tonnages') }}',
  241.                 type: 'post',
  242.                 beforeSend: function () {
  243.                     $('#form_quotation_trucks_tonnages').html('').prop('disabled', true);
  244.                     $('#form_quotation_trucks_models').html('').prop('disabled', true);
  245.                 },
  246.                 success: function (data) {
  247.                     $('#form_quotation_trucks_tonnages').html(createSelectTonnage(data));
  248.                 },
  249.                 complete: function () {
  250.                     $('#form_quotation_trucks_tonnages').prop('disabled', false);
  251.                 }
  252.             })
  253.             function updateModels() {
  254.                 const tonnage = $('#form_quotation_trucks_tonnages').val();
  255.                 if (!tonnage) {
  256.                     return;
  257.                 }
  258.                 $.ajax({
  259.                     url: '{{ path('quotation_models_by_tonnage') }}',
  260.                     type: 'post',
  261.                     data: {tonnage: tonnage},
  262.                     beforeSend: function () {
  263.                         $('#form_quotation_trucks_tonnages').prop('disabled', true);
  264.                         $('#form_quotation_trucks_models').html('').prop('disabled', true);
  265.                     },
  266.                     success: function (data) {
  267.                         $('#form_quotation_trucks_models').html(createSelectModel(data));
  268.                     },
  269.                     complete: function () {
  270.                         $('#form_quotation_trucks_tonnages').prop('disabled', false);
  271.                         $('#form_quotation_trucks_models').prop('disabled', false);
  272.                     }
  273.                 })
  274.             }
  275.             function createSelectPlaceholder() {
  276.                 return '<option value="" disabled selected></option>';
  277.             }
  278.             function createSelectOptionTonnage(option) {
  279.                 const value = option['slug'];
  280.                 const text = option['title'];
  281.                 return '<option value="' + value + '" data-value="' + text + '">' + text + '</option>';
  282.             }
  283.             function createSelectOptionModel(option) {
  284.                 const value = option['slug'];
  285.                 const text = option['title'];
  286.                 const crmModel = option['crm_model'];
  287.                 return '<option value="' + value + '" data-value="' + text + '" data-crm-model="' + crmModel + '">' + text + '</option>';
  288.             }
  289.             function createSelectTonnage(data) {
  290.                 let options = createSelectPlaceholder();
  291.                 $.each(data, function (i, v) {
  292.                     options += createSelectOptionTonnage(v);
  293.                 });
  294.                 return options
  295.             }
  296.             function createSelectModel(data) {
  297.                 let options = createSelectPlaceholder();
  298.                 $.each(data, function (i, v) {
  299.                     options += createSelectOptionModel(v);
  300.                 });
  301.                 return options
  302.             }
  303.         });
  304.     </script>
  305. {% endblock %}