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. {% endblock %}
  5. {% block cssadicional %}{% endblock %}
  6. {% block classbody %}{% endblock %}
  7. {% block content %}
  8.     <div class="wanchoSecondary b22Libro">
  9.         <ul class="b21MigaCustom b10LeftMigaPan">
  10.             <li><a href="{{ path('home') }}">Home</a></li>&nbsp;/ &nbsp;
  11.             <li class="active"><a href="{{ path('claim') }}">Libro de reclamo</a></li>
  12.         </ul>
  13.         {{ form_start(form, {'attr': {'enctype': 'multipart/form-data'}}) }}
  14.             {% include 'front/templates/form_utm_fields.html.twig' %}
  15.             {{ form_widget(form.establishment) }}
  16.             {{ form_widget(form.good) }}
  17.             {{ form_widget(form.type) }}
  18.             {{ form_widget(form.authorization) }}
  19.             {% if forms.claimTitle %}
  20.                 <h4 class="titleStandard b22LibroTitle">{{ forms.claimTitle }}</h4>
  21.             {% endif %}
  22.             {% if forms.claimText %}
  23.                 <div class="b21WrapText">{{ forms.claimText|nl2br }}</div>
  24.             {% endif %}
  25.             <div class="b21WrapInput b21WrapInputDato">
  26.                 <div class="b21WrapCol">
  27.                     <div class="b21WrapColDate">
  28.                         <span>Fecha:</span>
  29.                         <span>{{ "now"|date('d/m/Y') }}</span>
  30.                     </div>
  31.                 </div>
  32.                 <div class="b21WrapCol b21WrapColCorrelative">
  33.                     <span>Nº {{ entity.code }}</span>
  34.                 </div>
  35.             </div>
  36.             {% if forms.claimEstablishmentsText %}
  37.                 <div class="b21WrapTextP">{{ forms.claimEstablishmentsText|nl2br }}</div>
  38.             {% endif %}
  39.             <div class="b21WrapInput">
  40.                 <div class="b21Select">
  41.                     <select class="form-contact-select" id="form-establecimiento">
  42.                         <option value="" disabled selected></option>
  43.                         {% for item in forms.claimEstablishmentsItems %}
  44.                             <option data-ruc="{{ item.ruc }}" value="{{ item.title }}">{{ item.title }}</option>
  45.                         {% endfor %}
  46.                     </select>
  47.                     <span class="form-label">Establecimiento</span>
  48.                     <i class="icon-iconos-10"></i>
  49.                 </div>
  50.                 <div class="b21Input b21InputNoLabel">
  51.                     <input class="form-contact" type="text" value="" id="form-ruc">
  52.                 </div>
  53.             </div>
  54.             {% if forms.claimEstablishmentsNote %}
  55.                 <div class="b21WrapTextP">{{ forms.claimEstablishmentsNote|nl2br }}</div>
  56.             {% endif %}
  57.             <div class="b21WrapRow">
  58.                 {% if forms.claimP1Title %}
  59.                     <h4 class="titleStandard">1. {{ forms.claimP1Title }}</h4>
  60.                 {% endif %}
  61.                 <div class="b21WrapInput">
  62.                     <div class="b21Input">
  63.                         {{ form_widget(form.name, {'attr': {'data-expresion': 'text', 'class': 'validKeypress g-text form-contact validate[required,custom[onlyLetterSp]]'}}) }}
  64.                         <span class="form-label">Nombres*</span>
  65.                     </div>
  66.                     <div class="b21Input">
  67.                         {{ form_widget(form.lastname, {'attr': {'data-expresion': 'text', 'class': 'validKeypress g-text form-contact validate[required,custom[onlyLetterSp]]'}}) }}
  68.                         <span class="form-label">Apellidos*</span>
  69.                     </div>
  70.                 </div>
  71.                 <div class="b21WrapInput">
  72.                     <div class="b21Input">
  73.                         {{ form_widget(form.phone, {'attr': {'data-expresion': 'number', 'class': 'validKeypress g-number form-contact validate[required,custom[onlyNumberSp]]'}}) }}
  74.                         <span class="form-label">Teléfono*</span>
  75.                     </div>
  76.                     <div class="b21Input">
  77.                         {{ form_widget(form.email, {'attr': {'class': 'form-contact validate[required,custom[email]]'}}) }}
  78.                         <span class="form-label">Correo*</span>
  79.                     </div>
  80.                 </div>
  81.                 <div class="b21WrapInput">
  82.                     <div class="b21Select">
  83.                         {{ form_widget(form.documentType) }}
  84.                         <select class="form-contact-select validate[required]" id="form_claim_document_type">
  85.                             <option value="" disabled selected></option>
  86.                             <option value="DNI">DNI</option>
  87.                             <option value="CE">CE</option>
  88.                             <option value="Pasaporte">Pasaporte</option>
  89.                         </select>
  90.                         <span class="form-label">Tipo de documento*</span>
  91.                         <i class="icon-iconos-10"></i>
  92.                     </div>
  93.                     <div class="b21Input">
  94.                         {{ form_widget(form.documentNumber, {'attr': {'data-expresion': 'text', 'class': 'form-contact validate[required]'}}) }}
  95.                         <span class="form-label">N° de documento*</span>
  96.                     </div>
  97.                 </div>
  98.                 <div class="b21WrapInput">
  99.                     <div class="b21Select">
  100.                         {{ form_widget(form.department) }}
  101.                         <select class="form-contact-select validate[required]" id="form_field_department">
  102.                             <option value="" disabled selected></option>
  103.                             {% for item in departmentsArray %}
  104.                                 <option value="{{ item.title }}" data-option="{{ item.slug }}">{{ item.title }}</option>
  105.                             {% endfor %}
  106.                         </select>
  107.                         <span class="form-label">Departamento*</span>
  108.                         <i class="icon-iconos-10"></i>
  109.                     </div>
  110.                     <div class="b21Select">
  111.                         {{ form_widget(form.province, {'attr': {'class': 'form-contact-select validate[required]'}}) }}
  112.                         <select class="form-contact-select validate[required]" id="form_field_province" disabled>
  113.                             <option value="" selected="selected"></option>
  114.                         </select>
  115.                         <span class="form-label">Provincia*</span>
  116.                         <i class="icon-iconos-10"></i>
  117.                     </div>
  118.                 </div>
  119.                 <div class="b21WrapInput">
  120.                     <div class="b21Select">
  121.                         {{ form_widget(form.district, {'attr': {'class': 'form-contact-select validate[required]'}}) }}
  122.                         <select class="form-contact-select validate[required]" id="form_field_district" disabled>
  123.                             <option value="" selected="selected"></option>
  124.                         </select>
  125.                         <span class="form-label">Distrito*</span>
  126.                         <i class="icon-iconos-10"></i>
  127.                     </div>
  128.                     <div class="b21Input">
  129.                         {{ form_widget(form.address, {'attr': {'class': 'form-contact validate[required]'}}) }}
  130.                         <span class="form-label">Dirección*</span>
  131.                     </div>
  132.                 </div>
  133.                 <div class="b21WrapMenorEdad">
  134.                     <div class="b21WrapCheckbox b21WrapCheckboxP">
  135.                         {{ form_widget(form.younger, {'attr': {'id': 'b21CheckboxMenorEdad', 'class': 'form-input checkbox checkMenor'}}) }}
  136.                         <label for="form_claim_younger">Menor de edad</label>
  137.                     </div>
  138.                     <div class="b21WrapInput">
  139.                         <div class="b21InputBox">
  140.                             <div class="b21Input">
  141.                                 {{ form_widget(form.tutorName, {'attr': {'data-expresion': 'text', 'class': 'validKeypress g-text g-text-edad form-contact'}}) }}
  142.                                 <span class="form-label">Nombres del tutor*</span>
  143.                             </div>
  144.                             <span class="form-label-text">*Esto aplica si el reclamante es menor de edad</span>
  145.                         </div>
  146.                         <div class="b21InputBox">
  147.                             <div class="b21Input">
  148.                                 {{ form_widget(form.tutorLastName, {'attr': {'data-expresion': 'text', 'class': 'validKeypress g-text g-text-edad form-contact'}}) }}
  149.                                 <span class="form-label">Apellidos*</span>
  150.                             </div>
  151.                             <span class="form-label-text">*Esto aplica si el reclamante es menor de edad</span>
  152.                         </div>
  153.                     </div>
  154.                     <div class="b21WrapInput">
  155.                         <div class="b21Input">
  156.                             {{ form_widget(form.tutorEmail, {'attr': {'data-expresion': 'number', 'class': 'validKeypress g-number g-number-edad form-contact'}}) }}
  157.                             <span class="form-label">Teléfono*</span>
  158.                         </div>
  159.                         <div class="b21Input">
  160.                             {{ form_widget(form.tutorPhone, {'attr': {'class': 'form-contact g-email-edad'}}) }}
  161.                             <span class="form-label">E-mail*</span>
  162.                         </div>
  163.                     </div>
  164.                     <div class="b21WrapInput">
  165.                         <div class="b21Select">
  166.                             {{ form_widget(form.tutorDocumentType) }}
  167.                             <select class="form-contact-select g-validate-edad" id="form_claim_tutor_document_type">
  168.                                 <option value="" disabled selected></option>
  169.                                 <option value="DNI">DNI</option>
  170.                                 <option value="CE">CE</option>
  171.                                 <option value="Pasaporte">Pasaporte</option>
  172.                             </select>
  173.                             <span class="form-label">Tipo de documento*</span>
  174.                             <i class="icon-iconos-10"></i>
  175.                         </div>
  176.                         <div class="b21Input">
  177.                             {{ form_widget(form.tutorDocumentNumber, {'attr': {'class': 'form-contact g-validate-edad'}}) }}
  178.                             <span class="form-label">N° de documento*</span>
  179.                         </div>
  180.                     </div>
  181.                 </div>
  182.             </div>
  183.             <div class="b21WrapRow">
  184.                 {% if forms.claimP2Title %}
  185.                     <h4 class="titleStandard">2. {{ forms.claimP2Title }}</h4>
  186.                 {% endif %}
  187.                 <div class="b21WrapRadio">
  188.                     {% for item in forms.claimGoods %}
  189.                         <div class="b21WrapRadioCol">
  190.                             <input type="radio" class="form_good" id="radio-good_{{ loop.index }}" name="tipo_reclamo" value="{{ item.title }}" />
  191.                             <label for="radio-good_{{ loop.index }}">{{ item.title }}</label>
  192.                         </div>
  193.                     {% endfor %}
  194.                 </div>
  195.                 <div class="b21Textarea">
  196.                     {{ form_widget(form.description, {'attr': {'cols': '40', 'rows': '10', 'class': 'form-contact validate[required]'}}) }}
  197.                     <span class="form-label">Descripción*</span>
  198.                 </div>
  199.                 <div class="b21Input">
  200.                     {{ form_widget(form.amount, {'attr': {'class': 'form-contact validate[required]'}}) }}
  201.                     <span class="form-label">Valor del Producto/servicio*</span>
  202.                 </div>
  203.             </div>
  204.             <div class="b21WrapRow">
  205.                 {% if forms.claimP3Title %}
  206.                     <h4 class="titleStandard">3. {{ forms.claimP3Title }}</h4>
  207.                 {% endif %}
  208.                 <div class="b21WrapRadio">
  209.                     {% for item in forms.claimTypes %}
  210.                         <div class="b21WrapRadioCol">
  211.                             <input type="radio" class="form_type" id="radio-type_{{ loop.index }}" name="tipo_consumidor" value="{{ item.title }}" />
  212.                             <label for="radio-type_{{ loop.index }}">{{ item.title }}</label>
  213.                             <span>**</span>
  214.                         </div>
  215.                     {% endfor %}
  216.                 </div>
  217.                 <div class="b21WrapTextP">
  218.                     {% for item in forms.claimTypes %}
  219.                         <p>*{{ item.title }}: {{ item.description|nl2br }}</p>
  220.                     {% endfor %}
  221.                 </div>
  222.                 <div class="b21Textarea">
  223.                     {{ form_widget(form.detail, {'attr': {'cols': '40', 'rows': '10', 'class': 'form-contact validate[required]'}}) }}
  224.                     <span class="form-label">Detalle*</span>
  225.                 </div>
  226.                 <div class="b21Textarea">
  227.                     {{ form_widget(form.demand, {'attr': {'cols': '40', 'rows': '10', 'class': 'form-contact validate[required]'}}) }}
  228.                     <span class="form-label">Pedido*</span>
  229.                 </div>
  230.                 <div class="b21File">
  231.                     <div class="b21FileBox">
  232.                         <i class="icon-copy"></i>
  233.                         <span class="b21FileText">Adjuntar archivo</span>
  234.                         <label for="archivo_libro" class="b21FileTextFormat">Adjuntar archivo (PDF, PPTX, WORD o imágenes JPG, PNG)</label>
  235.                         <input size="40" id="archivo_libro" accept=".pdf,.pptx,.word,.jpg,.png" type="file" name="form_file">
  236.                     </div>
  237.                 </div>
  238.             </div>
  239.             <div class="b21WrapRow">
  240.                 {% if forms.claimP4Title %}
  241.                     <h4 class="titleStandard">4. {{ forms.claimP4Title }}</h4>
  242.                 {% endif %}
  243.                 <div class="b21WrapTextP">
  244.                     {% set f = entity.answerDate %}
  245.                     {% set answer_date = f|day ~ ', ' ~ f|date('d') ~ ' de ' ~ f|month|capitalize ~ ' del ' ~ f|date('Y') %}
  246.                     {{ forms.claimDescription|replace({'%fecha_respuesta%': answer_date})|raw }}
  247.                 </div>
  248.             </div>
  249.             <div class="b21WrapRow">
  250.                 {% if forms.claimP5Title %}
  251.                     <h4 class="titleStandard">5. {{ forms.claimP5Title }}</h4>
  252.                 {% endif %}
  253.                 <div class="b21WrapRadio">
  254.                     <div class="b21WrapRadioCol">
  255.                         <input type="radio" class="form_authorization" id="radio_authorization_yes" name="authorization_option" value="Sí" />
  256.                         <label for="radio_authorization_yes">Sí</label>
  257.                         <span>**</span>
  258.                     </div>
  259.                     <div class="b21WrapRadioCol">
  260.                         <input type="radio" class="form_authorization" id="radio_authorization_no" name="authorization_option" value="No" />
  261.                         <label for="radio_authorization_no">No</label>
  262.                         <span>**</span>
  263.                     </div>
  264.                 </div>
  265.                 <div class="b21Paragraph">
  266.                     (*) Campos obligatorios.
  267.                 </div>
  268.                 {% if forms.claimNotes|length > 0 %}
  269.                     <div class="b21WrapTextP">
  270.                         {% for item in forms.claimNotes %}
  271.                             <p>* {{ item.text|nl2br }}</p>
  272.                         {% endfor %}
  273.                     </div>
  274.                 {% endif %}
  275.             </div>
  276.             <div class="b21WrapCheckbox">
  277.                 <input type="checkbox" id="b21Checkbox" name="">
  278.                 <label for="b21Checkbox">He leído y acepto los <b><a href="{{ path('terms_and_conditions') }}" target="_blank">Términos y condiciones</a></b> y <b><a href="{{ path('privacy_policies') }}" target="_blank">Políticas de Privacidad</a></b> de UD Trucks</label>
  279.             </div>
  280.             <button class="buttonStandard gray b21Btn" id="BtnLibro">Enviar</button>
  281.             {% if info.showCaptcha %}
  282.                 <input type="hidden" name="recaptcha_token" id="recaptchaToken">
  283.             {% endif %}
  284.         {{ form_end(form) }}
  285.     </div>
  286. {% endblock %}
  287. {% block jsfinal %}
  288.     {% if info.showCaptcha %}
  289.         <script src="https://www.google.com/recaptcha/api.js?render={{ info.captchaSite }}"></script>
  290.         <script>
  291.             grecaptcha.ready(function() {
  292.                 grecaptcha.execute('{{ info.captchaSite }}', {action: 'submit'}).then(function(token) {
  293.                     document.getElementById('recaptchaToken').value = token;
  294.                 });
  295.             });
  296.         </script>
  297.     {% endif %}
  298.     <script type="text/javascript">
  299.         jQuery(function ($) {
  300.             $("form").validationEngine('attach', {
  301.                 promptPosition: "topLeft",
  302.                 autoHidePrompt: true,
  303.                 autoPositionUpdate: false,
  304.                 autoHideDelay: 2000,
  305.                 binded: false,
  306.                 scroll: false,
  307.                 validateNonVisibleFields: true
  308.             })
  309.             $('#form-establecimiento').on('change', function () {
  310.                 const value = $(this).val();
  311.                 const ruc = $(this).find('option:selected').data('ruc');
  312.                 const form_ruc = $('#form-ruc');
  313.                 $('#form_claim_establishment').val(value);
  314.                 form_ruc.val('');
  315.                 if (ruc) {
  316.                     form_ruc.val('RUC: ' + ruc);
  317.                 }
  318.             });
  319.             $('#BtnLibro').on('click', function (event) {
  320.                 event.preventDefault();
  321.                 const item = $(this);
  322.                 const form = item.closest('form');
  323.                 const valid = form.validationEngine('validate');
  324.                 if (valid) {
  325.                     item.prop('disabled', true).text('Enviando...');
  326.                     form.submit();
  327.                 } else {
  328.                     item.prop('disabled', false).text('Enviar');
  329.                 }
  330.             });
  331.             $('.form_authorization').on('click', function () {
  332.                 $('#form_claim_authorization').val($('.form_authorization:checked').val());
  333.             })
  334.             $('.form_good').on('click', function () {
  335.                 $('#form_claim_good').val($('.form_good:checked').val());
  336.             })
  337.             $('.form_type').on('click', function () {
  338.                 $('#form_claim_type').val($('.form_type:checked').val());
  339.             })
  340.             const documentTypeField = $('#form_claim_documentType');
  341.             const documentNumberField = $('#form_claim_documentNumber');
  342.             const tutorDocumentTypeField = $('#form_claim_tutorDocumentType');
  343.             const tutorDocumentNumberField = $('#form_claim_tutorDocumentNumber');
  344.             $('#form_claim_document_type').on('change', function () {
  345.                 updateDocument($(this), documentTypeField, documentNumberField);
  346.             })
  347.             $('#form_claim_tutor_document_type').on('change', function () {
  348.                 updateDocument($(this), tutorDocumentTypeField, tutorDocumentNumberField);
  349.             })
  350.             function updateDocument($this, type, number) {
  351.                 const value = $this.val();
  352.                 if (!value) {
  353.                     type.val(null);
  354.                     number.val(null);
  355.                     number.prop('disabled', true);
  356.                     return;
  357.                 }
  358.                 number.focus();
  359.                 number.prop('disabled', false);
  360.                 type.val(value);
  361.             }
  362.             const departmentField = $('#form_claim_department');
  363.             const provinceField = $('#form_claim_province');
  364.             const districtField = $('#form_claim_district');
  365.             const departmentSelect = $('#form_field_department');
  366.             const provinceSelect = $('#form_field_province');
  367.             const districtSelect = $('#form_field_district');
  368.             departmentSelect.on('change', function () {
  369.                 const department = $(this).find('option:selected').data('option');
  370.                 const value = $(this).val();
  371.                 departmentField.val(null);
  372.                 provinceField.val(null);
  373.                 districtField.val(null);
  374.                 if (department) {
  375.                     departmentField.val(value);
  376.                     loadProvinces();
  377.                 }
  378.             })
  379.             provinceSelect.on('change', function () {
  380.                 const province = $(this).find('option:selected').data('option');
  381.                 const value = $(this).val();
  382.                 provinceField.val(null);
  383.                 districtField.val(null);
  384.                 if (province) {
  385.                     provinceField.val(value);
  386.                     loadDistricts();
  387.                 }
  388.             })
  389.             districtSelect.on('change', function () {
  390.                 const district = $(this).find('option:selected').data('option');
  391.                 const value = $(this).val();
  392.                 districtField.val(null);
  393.                 if (district) {
  394.                     districtField.val(value);
  395.                 }
  396.             })
  397.             function loadProvinces() {
  398.                 const department = departmentSelect.find('option:selected').data('option');
  399.                 if (!department) {
  400.                     return false;
  401.                 }
  402.                 $.ajax({
  403.                     url: '{{ path('get_provinces_by_department') }}',
  404.                     type: 'post',
  405.                     data: {department: department},
  406.                     beforeSend: function () {
  407.                         departmentSelect.prop('disabled', true);
  408.                         provinceSelect.prop('disabled', true).html(createPlaceholder()).siblings('label').removeClass('fijar');
  409.                         districtSelect.prop('disabled', true).html(createPlaceholder()).siblings('label').removeClass('fijar');
  410.                         provinceField.val(null);
  411.                     },
  412.                     success: function (data) {
  413.                         provinceSelect.prop('disabled', false).html(createOptions(data));
  414.                     },
  415.                     complete: function () {
  416.                         departmentSelect.prop('disabled', false);
  417.                     }
  418.                 })
  419.             }
  420.             function loadDistricts() {
  421.                 const province = provinceSelect.find('option:selected').data('option');
  422.                 if (!province) {
  423.                     return false;
  424.                 }
  425.                 $.ajax({
  426.                     url: '{{ path('get_districts_by_province') }}',
  427.                     type: 'post',
  428.                     data: {province: province},
  429.                     beforeSend: function () {
  430.                         departmentSelect.prop('disabled', true);
  431.                         provinceSelect.prop('disabled', true);
  432.                         districtSelect.prop('disabled', true).html(createPlaceholder()).siblings('label').removeClass('fijar');
  433.                     },
  434.                     success: function (data) {
  435.                         districtSelect.prop('disabled', false).html(createOptions(data));
  436.                     },
  437.                     complete: function () {
  438.                         departmentSelect.prop('disabled', false);
  439.                         provinceSelect.prop('disabled', false);
  440.                     }
  441.                 })
  442.             }
  443.             function createPlaceholder() {
  444.                 return '<option value="" selected="selected"></option>';
  445.             }
  446.             function createOptions(data) {
  447.                 let options = createPlaceholder();
  448.                 $.each(data, function (i, v) {
  449.                     options += createOption(v);
  450.                 });
  451.                 return options
  452.             }
  453.             function createOption(item) {
  454.                 return '<option value="' + item['title'] + '" data-option="' + item['slug'] + '">' + item['title'] + '</option>';
  455.             }
  456.         })
  457.     </script>
  458. {% endblock %}