templates/front/form/contact.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('contact')) }}">
  4. {% endblock %}
  5. {% block cssadicional %}
  6. <link rel="stylesheet" href="{{ asset('static/js/validationform/validationEngine.jquery.css') }}">
  7. {% if info.captchaShow and info.captchaSite and info.captchaSecret %}
  8. <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback" async defer></script>
  9. <script type="text/javascript">
  10.   var onloadCallback = function() {
  11.     var element = document.getElementById('g-recaptcha-response');
  12.     element.classList.add('validate[required]');
  13.   };
  14. </script>
  15. {% endif %}
  16. {% endblock %}
  17. {% block classbody %}{% endblock %}
  18. {% block content %}
  19.     <section class="contacto">
  20.         <div class="contacto_banner">
  21.             <div class="contacto_banner_content ww_center">
  22.                 <div class="contacto_banner_miga">
  23.                     <ul>
  24.                         <li><a href="{{ path('home') }}">Inicio</a></li>
  25.                         <li><a class="active">Contacto</a></li>
  26.                     </ul>
  27.                 </div>
  28.                 {% if sd.title %}
  29.                     <h2 class="contacto_banner_title">{{ sd.title }}</h2>
  30.                 {% endif %}
  31.             </div>
  32.         </div>
  33.         <div class="contacto_wrap ww_center">
  34.             <div class="contacto_left">
  35.                 <div class="contacto_info">
  36.                     {% if forms.contactTitle %}
  37.                         <h2>{{ forms.contactTitle }}</h2>
  38.                     {% endif %}
  39.                     {% if forms.contactText %}
  40.                         <p>{{ forms.contactText|nl2br }}</p>
  41.                     {% endif %}
  42.                 </div>
  43.                 <div class="contacto_form">
  44.                     {{ form_start(form, {'attr': {'id': 'contactoForm'}}) }}
  45.                         {% include 'front/templates/form_utm_fields.html.twig' %}
  46.                         {{ form_widget(form.typeConsultation) }}
  47.                         {{ form_widget(form.typePerson) }}
  48.                         {{ form_widget(form.documentType) }}
  49.                         {{ form_widget(form.documentNumber) }}
  50.                         <div class="contacto_select">
  51.                             <select name="" id="form_contact_type_consultation" class="inputEffect validate[required]">
  52.                                 <option value="" disabled selected>Seleccione su tipo de consulta</option>
  53.                                 {% for item in forms.contactTypes %}
  54.                                     <option value="{{ item.title }}" data-link="{{ item.link }}">{{ item.title }}</option>
  55.                                 {% endfor %}
  56.                             </select>
  57.                             <span class="icon-arrow_drop_down"></span>
  58.                         </div>
  59.                         <div class="contacto_radius">
  60.                             <div class="contacto_tab_radio">
  61.                                 <input checked type="radio" name="form_type" class="checkedInput" value="Empresa" id="form_contact_legal_person">
  62.                                 <label for="form_contact_legal_person">Soy empresa</label>
  63.                             </div>
  64.                             <div class="contacto_tab_radio">
  65.                                 <input type="radio" name="form_type" class="checkedInput" value="Persona natural" id="form_contact_natural_person">
  66.                                 <label for="form_contact_natural_person">Soy Persona Natural</label>
  67.                             </div>
  68.                         </div>
  69.                         <ul>
  70.                             <li class="noneInputsEmpresa">
  71.                                 <div class="contacto_row_input">
  72.                                     <div class="contacto_input">
  73.                                         <input type="text" placeholder="" id="form_contact_document_number_legal_person" class="inputEffect soloNumber form_notActive validate[required] form_contact_document_number">
  74.                                         <label for="form_document_number_legal_person">RUC *</label>
  75.                                     </div>
  76.                                     <div class="contacto_input">
  77.                                         {{ form_widget(form.company, {'attr': {'class': 'inputEffect form_notActive validate[required]'}}) }}
  78.                                         <label for="form_contact_company">Empresa *</label>
  79.                                     </div>
  80.                                 </div>
  81.                             </li>
  82.                             <li class="noneInputs">
  83.                                 <div class="contacto_row_input">
  84.                                     <div class="contacto_input">
  85.                                         <select id="form_contact_document_types" class="inputEffect">
  86.                                             <option value="" disabled selected></option>
  87.                                             {% for item in forms.documentTypes %}
  88.                                                 <option value="{{ item.title }}">{{ item.title }}</option>
  89.                                             {% endfor %}
  90.                                         </select>
  91.                                         <label class="field_text" for="form_contact_document_types">Tipo de documento *<span class="icon-arrow_drop_down"></span></label>
  92.                                     </div>
  93.                                     <div class="contacto_input">
  94.                                         <input type="text" placeholder="" id="form_contact_document_number_natural_person" class="inputEffect soloNumber form_isActive validate[required] form_contact_document_number">
  95.                                         <label for="form_document_number_natural_person">Número de documento  *</label>
  96.                                     </div>
  97.                                 </div>
  98.                             </li>
  99.                             <li class="">
  100.                                 <div class="contacto_row_input">
  101.                                     <div class="contacto_input">
  102.                                         {{ form_widget(form.name, {'attr': {'class': 'inputEffect validate[required]'}}) }}
  103.                                         <label for="form_contact_name">Nombres *</label>
  104.                                     </div>
  105.                                     <div class="contacto_input">
  106.                                         {{ form_widget(form.department, {'attr': {'class': 'inputEffect validate[required]'}}) }}
  107.                                         <label for="form_contact_department">Departamento *</label>
  108.                                     </div>
  109.                                 </div>
  110.                             </li>
  111.                             <li>
  112.                                 <div class="contacto_row_input">
  113.                                     <div class="contacto_input">
  114.                                         {{ form_widget(form.phone, {'attr': {'class': 'inputEffect soloNumber validate[required, custom[phone]]'}}) }}
  115.                                         <label for="form_contact_phone">Teléfono *</label>
  116.                                     </div>
  117.                                     <div class="contacto_input">
  118.                                         {{ form_widget(form.email, {'attr': {'class': 'inputEffect validate[required, custom[email]]'}}) }}
  119.                                         <label for="form_contact_email">Correo Electrónico *</label>
  120.                                     </div>
  121.                                 </div>
  122.                             </li>
  123.                             <li>
  124.                                 <div class="contacto_input contacto_textarea">
  125.                                     {{ form_widget(form.message, {'attr': {'class': 'inputEffect validate[required]'}}) }}
  126.                                     <label for="form_contact_message">Mensaje *</label>
  127.                                 </div>
  128.                             </li>
  129.                         </ul>
  130.                         <div class="contacto_obligatorio">
  131.                             <p>* Campos obligatorios</p>
  132.                         </div>
  133.                         <div class="contacto_check">
  134.                             <input type="checkbox" id="inputCheck" class="validate[required]" name="">
  135.                             <label for="inputCheck">
  136.                                 <span class="contacto_check_active"></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.                         {% if info.captchaShow and info.captchaSite and info.captchaSecret %}
  141.                         <div style="padding-top:20px;">
  142.                             <div class="g-recaptcha" data-sitekey="{{ info.captchaSite }}"></div>
  143.                         </div>
  144.                         {% endif %}
  145.                         <div class="contacto_btn">
  146.                             <button class="btn btn_blue" id="btnForm">Enviar</button>
  147.                         </div>
  148.                     {{ form_end(form) }}
  149.                 </div>
  150.             </div>
  151.             {% if sd.customerServiceShow and sd.customerServiceItems|length > 0 %}
  152.                 <div class="contacto_rigth">
  153.                     <h2>{{ sd.customerServiceTitle ?: 'Atención al cliente' }}</h2>
  154.                     {% for item in sd.customerServiceItems %}
  155.                         <h3>{{ item.city }}</h3>
  156.                         <a href="tel:{{ item.phone|only_numbers }}"><span class="icon-phone_in_talk"></span>{{ item.phone }}</a>
  157.                         <a href="mailto:{{ item.email }}"><span class="icon-mail_outline"></span>{{ item.email }}</a>
  158.                         <a href="{{ item.address|google_maps_search }}" target="_blank"><span class="icon-place-1"></span>{{ item.address }}</a>
  159.                         <p><span class="icon-hour"></span>{{ item.officeHours|nl2br }}</p>
  160.                     {% endfor %}
  161.                 </div>
  162.             {% endif %}
  163.         </div>
  164.     </section>
  165. {% endblock %}
  166. {% block jsfinal %}
  167.     <script src="{{ asset('static/js/validationform/jquery.validationEngine-es.js') }}"></script>
  168.     <script src="{{ asset('static/js/validationform/staff.validationEngine.js') }}"></script>
  169.     <script type="text/javascript">
  170.         efectInput = function (inputName, efectInput) {
  171.             const inputs = document.getElementsByClassName(inputName);
  172.             for (let i = 0; i < inputs.length; i++) {
  173.                 inputs[i].addEventListener('change', function () {
  174.                     if (this.value) {
  175.                         this.nextElementSibling.classList.add(efectInput)
  176.                     } else {
  177.                         this.nextElementSibling.classList.remove(efectInput)
  178.                     }
  179.                 })
  180.                 inputs[i].addEventListener('keyup', function () {
  181.                     if (this.value === "") {
  182.                         this.nextElementSibling.classList.remove(efectInput)
  183.                     } else {
  184.                         this.nextElementSibling.classList.add(efectInput)
  185.                     }
  186.                 })
  187.             }
  188.         };
  189.         efectInput('inputEffect', 'fijar')
  190.         {# FIELDS #}
  191.         const quoteFields = $(".contacto_input input, .contacto_input select, .contacto_input textarea");
  192.         $(quoteFields).focusin(function() {
  193.             $(this).addClass('border');
  194.         });
  195.         $(quoteFields).focusout(function() {
  196.             if ($(this).val() === "") {
  197.                 $(this).removeClass('border');
  198.             }
  199.         });
  200.         $(quoteFields).each(function() {
  201.             if ($(this).val()) {
  202.                 $(this).addClass('border');
  203.             }
  204.         });
  205.         $('.soloNumber').keypress(validateNumber);
  206.         function validateNumber(event) {
  207.             const key = window.event ? event.keyCode : event.which;
  208.             if (event.keyCode === 8 || event.keyCode === 46) {
  209.                 return true;
  210.             } else return !(key < 48 || key > 57);
  211.         }
  212.         {# END #}
  213.         let InputChecked = document.querySelectorAll('.checkedInput');
  214.         let elementDivHidden = document.querySelectorAll('.form_isActive');
  215.         let elementDivVisible = document.querySelectorAll('.form_notActive');
  216.         InputChecked.forEach((item)=>{
  217.             item.addEventListener('change', ()=>{
  218.                 if(item.value === 'Empresa'){
  219.                     elementDivHidden.forEach((el)=>{
  220.                         el.disabled = true
  221.                         el.closest('.noneInputs').style.display = 'none'
  222.                     })
  223.                     elementDivVisible.forEach((el)=>{
  224.                         el.disabled = false
  225.                         el.closest('.noneInputsEmpresa').style.display = 'block'
  226.                     })
  227.                 } else{
  228.                     elementDivHidden.forEach((el)=>{
  229.                         el.disabled = false
  230.                         el.closest('.noneInputs').style.display = 'block'
  231.                     })
  232.                     elementDivVisible.forEach((el)=>{
  233.                         el.disabled = true
  234.                         el.closest('.noneInputsEmpresa').style.display = 'none'
  235.                     })
  236.                 }
  237.             })
  238.         })
  239.         $('#form_contact_legal_person').on('change', function () {
  240.             $('#form_contact_typePerson').val($(this).val());
  241.             $('#form_contact_document_types').val('');
  242.             $('#form_contact_document_number_natural_person').val('');
  243.             $('#form_contact_document_number_legal_person').val('');
  244.             $('#form_contact_documentType').val('RUC');
  245.             $('#form_contact_documentNumber').val('');
  246.             $('#form_contact_company').val('');
  247.         })
  248.         $('#form_contact_natural_person').on('change', function () {
  249.             $('#form_contact_typePerson').val($(this).val());
  250.             $('#form_contact_document_types').val('');
  251.             $('#form_contact_document_number_natural_person').val('');
  252.             $('#form_contact_document_number_legal_person').val('');
  253.             $('#form_contact_documentType').val('');
  254.             $('#form_contact_documentNumber').val('');
  255.         })
  256.         $('#form_contact_legal_person').trigger('change');
  257.         $('.form_contact_document_number').on('keyup', function () {
  258.             $('#form_contact_documentNumber').val($(this).val());
  259.         })
  260.         $('#form_contact_document_types').on('change', function () {
  261.             $('#form_contact_documentType').val($(this).val());
  262.         })
  263.         $('#form_contact_type_consultation').on('change', function () {
  264.             $('#form_contact_typeConsultation').val($(this).val());
  265.         })
  266.         const form_contact = $('#contactoForm');
  267.         const form_contact_button = $('#btnForm');
  268.         form_contact.validationEngine('attach', {
  269.             promptPosition: "topLeft",
  270.             autoHidePrompt: true,
  271.             autoHideDelay: 3000,
  272.             binded: false,
  273.             scroll: false
  274.         });
  275.         $('#form_contact_type_consultation').change(function(e){
  276.             e.preventDefault();
  277.             let link = $(this).find('option:selected').eq(0).data('link');
  278.             if( link ) {
  279.                 location.href = link;
  280.             }
  281.         })
  282.         
  283.         form_contact_button.on('click', function (event) {
  284.             event.preventDefault();
  285.             const valid = form_contact.validationEngine('validate');
  286.             if (valid) {
  287.                 form_contact.submit();
  288.             }
  289.         });
  290.     </script>
  291. {% endblock %}