templates/front/form/claim.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('claim')) }}">
  4.     <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback" async defer></script>
  5.     <script type="text/javascript">
  6.     var onloadCallback = function() {
  7.         var element = document.getElementById('g-recaptcha-response');
  8.         element.classList.add('validate[required]');
  9.     };
  10.     </script>
  11. {% endblock %}
  12. {% block cssadicional %}{% endblock %}
  13. {% block classbody %}{% endblock %}
  14. {% block content %}
  15.     <section class="libro_reclamaciones">
  16.         <div class="libro_reclamaciones_banner">
  17.             {% if sd.title %}
  18.                 <h2>{{ sd.title }}</h2>
  19.             {% endif %}
  20.         </div>
  21.         <div class="libro_reclamaciones_container ww_center">
  22.             {% if sd.text %}
  23.                 <div class="libro_reclamaciones_text">
  24.                     <p>{{ sd.text|nl2br }}</p>
  25.                 </div>
  26.             {% endif %}
  27.             <div class="libro_reclamaciones_text2">
  28.                 {% if sd.companyName %}
  29.                     <p><strong>Razón Social:</strong> {{ sd.companyName }}</p>
  30.                 {% endif %}
  31.                 {% if sd.ruc %}
  32.                     <p><strong>RUC:</strong> {{ sd.ruc }}</p>
  33.                 {% endif %}
  34.                 {% if sd.address %}
  35.                     <p><strong>Dirección:</strong> {{ sd.address }}</p>
  36.                 {% endif %}
  37.             </div>
  38.             <div class="libro_reclamaciones_fecha">
  39.                 <p>Fecha de Presentación: {{ "now"|date('d/m/Y') }}</p>
  40.             </div>
  41.             <div class="libro_reclamaciones_form">
  42.                 {{ form_start(form) }}
  43.                     {{ form_widget(form.utmSource, {'attr': {'class': 'form_utmsource'}}) }}
  44.                     {{ form_widget(form.utmMedium, {'attr': {'class': 'form_utmmedium'}}) }}
  45.                     {{ form_widget(form.utmCampaign, {'attr': {'class': 'form_utmcampaign'}}) }}
  46.                     {{ form_widget(form.utmContent, {'attr': {'class': 'form_utmcontent'}}) }}
  47.                     {{ form_widget(form.utmTerm, {'attr': {'class': 'form_utmterm'}}) }}
  48.                     {{ form_widget(form.gclid, {'attr': {'class': 'gclid'}}) }}
  49.                     {{ form_widget(form.establishment) }}
  50.                     {{ form_widget(form.good) }}
  51.                     {{ form_widget(form.type) }}
  52.                     <h3>1. {{ forms.claimP1Title ?: 'Identificación del Usuario' }}</h3>
  53.                     <ul>
  54.                         <li class="libro_column">
  55.                             <div class="libro_input">
  56.                                 {{ form_widget(form.name, {'attr': {'class': 'inputEffect validate[required]'}}) }}
  57.                                 <label for="nombre">Nombres *</label>
  58.                             </div>
  59.                             <div class="libro_input">
  60.                                 {{ form_widget(form.lastname, {'attr': {'class': 'inputEffect validate[required]'}}) }}
  61.                                 <label for="apellido">Apellidos *</label>
  62.                             </div>
  63.                         </li>
  64.                         <li class="libro_column">
  65.                             <div class="libro_input">
  66.                                 {{ form_widget(form.phone, {'attr': {'class': 'soloNumber inputEffect validate[required, custom[phone]]'}}) }}
  67.                                 <label for="telefono">Teléfono *</label>
  68.                             </div>
  69.                             <div class="libro_input">
  70.                                 {{ form_widget(form.email, {'attr': {'class': 'inputEffect validate[required, custom[email]]'}}) }}
  71.                                 <label for="correo">Correo Electrónico *</label>
  72.                             </div>
  73.                         </li>
  74.                         <li class="libro_column">
  75.                             <div class="libro_input">
  76.                                 {{ form_widget(form.department) }}
  77.                                 <select id="form_field_department" class="inputEffect validate[required]">
  78.                                     <option value="" selected="selected"></option>
  79.                                 </select>
  80.                                 <label for="departamento">Departamento * <span class="icon-arrow_drop_down"></span></label>
  81.                             </div>
  82.                             <div class="libro_input">
  83.                                 {{ form_widget(form.province) }}
  84.                                 <select id="form_field_province" class="inputEffect validate[required]">
  85.                                     <option value="" selected="selected"></option>
  86.                                 </select>
  87.                                 <label for="provincia">Provincia <span class="icon-arrow_drop_down"></span></label>
  88.                             </div>
  89.                         </li>
  90.                         <li class="libro_column">
  91.                             <div class="libro_input">
  92.                                 {{ form_widget(form.district) }}
  93.                                 <select id="form_field_district" class="inputEffect validate[required]">
  94.                                     <option value="" selected="selected"></option>
  95.                                 </select>
  96.                                 <label for="distrito">Distrito * <span class="icon-arrow_drop_down"></span></label>
  97.                             </div>
  98.                         </li>
  99.                         <li>
  100.                             <div class="libro_input">
  101.                                 {{ form_widget(form.address, {'attr': {'class': 'inputEffect'}}) }}
  102.                                 <label for="direccion">Dirección *</label>
  103.                             </div>
  104.                         </li>
  105.                     </ul>
  106.                     <h3>2. {{ forms.claimP2Title ?: 'Identificación del Bien contratado' }}</h3>
  107.                     <ul>
  108.                         <li>
  109.                             <div class="libro_check">
  110.                                 {% for item in forms.claimGoods %}
  111.                                     <div class="libro_check_input">
  112.                                         <input type="radio" id="check_tipo_{{ loop.index }}" class="form_good validate[required]" name="tipo" value="{{ item.title }}">
  113.                                         <label for="check_tipo_{{ loop.index }}">
  114.                                             <span></span>
  115.                                             <p>{{ item.title }}</p>
  116.                                         </label>
  117.                                     </div>
  118.                                 {% endfor %}
  119.                             </div>
  120.                         </li>
  121.                         <li class="libro_column">
  122.                             <div class="libro_input">
  123.                                 {{ form_widget(form.orderNumber, {'attr': {'class': 'soloNumber inputEffect validate[required]'}}) }}
  124.                                 <label for="pedido">Nº de pedido *</label>
  125.                             </div>
  126.                             <div class="libro_input">
  127.                                 {{ form_widget(form.amount, {'attr': {'class': 'inputEffect validate[required]'}}) }}
  128.                                 <label for="monto">Monto *</label>
  129.                             </div>
  130.                         </li>
  131.                         <li>
  132.                             <div class="libro_input">
  133.                                 {{ form_widget(form.description, {'attr': {'class': 'inputEffect validate[required]'}}) }}
  134.                                 <label for="description">Descripción *</label>
  135.                             </div>
  136.                         </li>
  137.                     </ul>
  138.                     <h3>3. {{ forms.claimP3Title ?: 'Detalle de la Reclamación' }}</h3>
  139.                     <ul>
  140.                         <li>
  141.                             <div class="libro_check">
  142.                                 {% for item in forms.claimTypes %}
  143.                                     <div class="libro_check_input">
  144.                                         <input type="radio" id="check_reclamo_{{ loop.index }}" class="form_type validate[required]" name="reclamacion" value="{{ item.title }}">
  145.                                         <label for="check_reclamo_{{ loop.index }}">
  146.                                             <span></span>
  147.                                             <p>{{ item.title }}</p>
  148.                                         </label>
  149.                                     </div>
  150.                                 {% endfor %}
  151.                             </div>
  152.                         </li>
  153.                     </ul>
  154.                     <div class="libro_reclamaciones_text2">
  155.                         {% for item in forms.claimTypes %}
  156.                             <p><strong>*{{ item.title }}:</strong> {{ item.description|nl2br }}</p>
  157.                         {% endfor %}
  158.                     </div>
  159.                     <ul>
  160.                         <li>
  161.                             <div class="libro_input">
  162.                                 {{ form_widget(form.detail, {'attr': {'class': 'inputEffect validate[required]'}}) }}
  163.                                 <label for="description2">Descripción</label>
  164.                             </div>
  165.                         </li>
  166.                         <li>
  167.                             <div class="libro_input">
  168.                                 {{ form_widget(form.demand, {'attr': {'class': 'inputEffect validate[required]'}}) }}
  169.                                 <label for="consumidor">Pedido del consumidor</label>
  170.                             </div>
  171.                         </li>
  172.                     </ul>
  173.                     <h3>4. {{ forms.claimP4Title ?: 'Acciones Adoptadas por el Vendedor' }}</h3>
  174.                     <div class="libro_input">
  175.                         {# {{ form_widget(form.actions, {'attr': {'class': 'inputEffect validate[required]'}}) }} #}
  176.                         <textarea name="" readonly="readonly"></textarea>
  177.                         <label for="actions">Acciones del vendedor</label>
  178.                     </div>
  179.                     <div class="libro_text_vendedor">
  180.                         {% set days_to_response = forms.claimResponseDays|number_format ?: 10 %}
  181.                         {% set f = date('+' ~ days_to_response ~ 'days') %}
  182.                         {% set answer_date = f|day ~ ', ' ~ f|date('d') ~ ' de ' ~ f|month|capitalize ~ ' del ' ~ f|date('Y') %}
  183.                         {{ forms.claimDescription|replace({'%fecha_respuesta%': answer_date})|raw }}
  184.                     </div>
  185.                     <div class="libro_obligatorio">
  186.                         <p>* Campos obligatorios</p>
  187.                     </div>
  188.                     <div class="libro_info">
  189.                         {% for item in forms.claimNotes %}
  190.                             <p>* {{ item.text|nl2br }}</p>
  191.                         {% endfor %}
  192.                     </div>
  193.                     <div class="libro_check_acepto">
  194.                         <input type="checkbox" id="inputCheck" class="validate[required]" name="">
  195.                         <label for="inputCheck">
  196.                             <span class="libro_check_active"></span>
  197.                             <p>Acepto las <a href="{{ path('data_protection_policies') }}" target="_blank">Políticas de Protección de Datos</a></p>
  198.                         </label>
  199.                     </div>
  200.                     {% if info.captchaShow and info.captchaSite and info.captchaSecret %}
  201.                     <div class="libro_info">
  202.                         <div style="padding-top:10px; padding-bottom:10px">
  203.                             <div class="g-recaptcha" data-sitekey="{{ info.captchaSite }}"></div>
  204.                         </div>
  205.                     </div>
  206.                     {% endif %}
  207.                     <div class="libro_reclamaciones_btn">
  208.                         <button class="btn btn_blue" id="btnLibro">Enviar</button>
  209.                     </div>
  210.                 {{ form_end(form) }}
  211.             </div>
  212.         </div>
  213.     </section>
  214. {% endblock %}
  215. {% block jsfinal %}
  216.     <script src="{{ asset('static/js/validationform/jquery.validationEngine-es.js') }}"></script>
  217.     <script src="{{ asset('static/js/validationform/staff.validationEngine.js') }}"></script>
  218.     <script type="text/javascript">
  219.         var efectInput = function(inputName, efectInput){
  220.             var inputs = document.getElementsByClassName(inputName)
  221.             for (var i = 0; i<inputs.length; i++ ) {
  222.                 inputs[i].addEventListener('change', function(){
  223.                     if(this.value){
  224.                         this.nextElementSibling.classList.add(efectInput)
  225.                     } else{
  226.                         this.nextElementSibling.classList.remove(efectInput)
  227.                     }
  228.                 })
  229.                 inputs[i].addEventListener('keyup', function(){
  230.                     if(this.value == ""){
  231.                         this.nextElementSibling.classList.remove(efectInput)
  232.                     } else{
  233.                         this.nextElementSibling.classList.add(efectInput)
  234.                     }
  235.                 })
  236.             }
  237.         }
  238.         $('.soloNumber').keypress(validateNumber);
  239.         function validateNumber(event) {
  240.             var key = window.event ? event.keyCode : event.which;
  241.             if (event.keyCode === 8 || event.keyCode === 46) {
  242.                 return true;
  243.             } else if ( key < 48 || key > 57 ) {
  244.                 return false;
  245.             } else {
  246.                 return true;
  247.             }
  248.         }
  249.         var claimsFields = $(".libro_input input, .libro_input textarea, .libro_input select")
  250.         $(claimsFields).focusin(function() {
  251.             $(this).addClass('border');
  252.         });
  253.         $(claimsFields).focusout(function() {
  254.             if ($(this).val() === "") {
  255.                 $(this).removeClass('border');
  256.             };
  257.         });
  258.         $(claimsFields).each(function() {
  259.             if ($(this).val() != "") {
  260.                 $(this).addClass('border');
  261.             }
  262.         });
  263.         $('#form_claim_establishment').val('{{ sd.companyName }} - RUC {{ sd.ruc }}');
  264.         $('.form_good').on('click', function () {
  265.             $('#form_claim_good').val($('.form_good:checked').val());
  266.         })
  267.         $('.form_type').on('click', function () {
  268.             $('#form_claim_type').val($('.form_type:checked').val());
  269.         })
  270.         const departmentField = $('#form_claim_department');
  271.         const provinceField = $('#form_claim_province');
  272.         const districtField = $('#form_claim_district');
  273.         const departmentSelect = $('#form_field_department');
  274.         const provinceSelect = $('#form_field_province');
  275.         const districtSelect = $('#form_field_district');
  276.         $.ajax({
  277.             url: '{{ path('get_departments') }}',
  278.             type: 'post',
  279.             beforeSend: function () {
  280.                 departmentSelect.prop('disabled', true).html(createPlaceholder());
  281.                 provinceSelect.prop('disabled', true).html(createPlaceholder());
  282.                 districtSelect.prop('disabled', true).html(createPlaceholder());
  283.             },
  284.             success: function (data) {
  285.                 departmentSelect.prop('disabled', false).html(createOptions(data));
  286.             },
  287.             complete: function () {
  288.             }
  289.         })
  290.         departmentSelect.on('change', function () {
  291.             const department = $(this).find('option:selected').data('option');
  292.             const value = $(this).val();
  293.             departmentField.val(null);
  294.             provinceField.val(null);
  295.             districtField.val(null);
  296.             if (department) {
  297.                 departmentField.val(value);
  298.                 loadProvinces();
  299.             }
  300.         })
  301.         provinceSelect.on('change', function () {
  302.             const province = $(this).find('option:selected').data('option');
  303.             const value = $(this).val();
  304.             provinceField.val(null);
  305.             districtField.val(null);
  306.             if (province) {
  307.                 provinceField.val(value);
  308.                 loadDistricts();
  309.             }
  310.         })
  311.         districtSelect.on('change', function () {
  312.             const district = $(this).find('option:selected').data('option');
  313.             const value = $(this).val();
  314.             districtField.val(null);
  315.             if (district) {
  316.                 districtField.val(value);
  317.             }
  318.         })
  319.         function loadProvinces() {
  320.             const department = departmentSelect.find('option:selected').data('option');
  321.             if (!department) {
  322.                 return false;
  323.             }
  324.             $.ajax({
  325.                 url: '{{ path('get_provinces_by_department') }}',
  326.                 type: 'post',
  327.                 data: {department: department},
  328.                 beforeSend: function () {
  329.                     departmentSelect.prop('disabled', true);
  330.                     provinceSelect.prop('disabled', true).html(createPlaceholder()).siblings('label').removeClass('fijar');
  331.                     districtSelect.prop('disabled', true).html(createPlaceholder()).siblings('label').removeClass('fijar');
  332.                     provinceField.val(null);
  333.                 },
  334.                 success: function (data) {
  335.                     provinceSelect.prop('disabled', false).html(createOptions(data));
  336.                 },
  337.                 complete: function () {
  338.                     departmentSelect.prop('disabled', false);
  339.                 }
  340.             })
  341.         }
  342.         function loadDistricts() {
  343.             const province = provinceSelect.find('option:selected').data('option');
  344.             if (!province) {
  345.                 return false;
  346.             }
  347.             $.ajax({
  348.                 url: '{{ path('get_districts_by_province') }}',
  349.                 type: 'post',
  350.                 data: {province: province},
  351.                 beforeSend: function () {
  352.                     departmentSelect.prop('disabled', true);
  353.                     provinceSelect.prop('disabled', true);
  354.                     districtSelect.prop('disabled', true).html(createPlaceholder()).siblings('label').removeClass('fijar');
  355.                 },
  356.                 success: function (data) {
  357.                     districtSelect.prop('disabled', false).html(createOptions(data));
  358.                 },
  359.                 complete: function () {
  360.                     departmentSelect.prop('disabled', false);
  361.                     provinceSelect.prop('disabled', false);
  362.                 }
  363.             })
  364.         }
  365.         function createPlaceholder() {
  366.             return '<option value="" selected="selected"></option>';
  367.         }
  368.         function createOptions(data) {
  369.             let options = createPlaceholder();
  370.             $.each(data, function (i, v) {
  371.                 options += createOption(v);
  372.             });
  373.             return options
  374.         }
  375.         function createOption(item) {
  376.             return '<option value="' + item['title'] + '" data-option="' + item['slug'] + '">' + item['title'] + '</option>';
  377.         }
  378.         $("form").validationEngine('attach', {
  379.             promptPosition : "bottomLeft",
  380.             autoHidePrompt: true,
  381.             autoHideDelay: 300000,
  382.             binded: false,
  383.             scroll: false
  384.         });
  385.         $('#btnLibro').on('click', function(event) {
  386.             event.preventDefault();
  387.             const form = $(this).closest('form');
  388.             const valid = form.validationEngine('validate');
  389.             $(this).attr('disabled', true);
  390.             if (!valid) {
  391.                 console.log('form error');
  392.                 $(this).attr('disabled', false);
  393.             } else {
  394.                 form.submit();
  395.                 console.log('form ok');
  396.             }
  397.         });
  398.     </script>
  399. {% endblock %}