{% extends "front/_common/_base.html.twig" %}
{% block linkcanonical %}
<link rel="canonical" href="{{ absolute_url(path('claim')) }}">
{% endblock %}
{% block cssadicional %}
<style>
.b21Firma { margin: 15px 0; }
.b21Firma canvas { border: 1px solid #ccc; border-radius: 4px; display: block; background: #fff; max-width: 100%; }
.b21Firma .btnLimpiar { margin-top: 5px; padding: 5px 15px; cursor: pointer; background-color: #6a6867; color: #fff; border: 0; height: 45px; width: 150px; }
.b21WrapMenorEdad .b21WrapInput { display: none; }
.b22Libro .b21WrapColCorrelative { height: 54px; }
.icon-iconos-10{
position: absolute;
right: 15px;
top: 20px;
}
.textlb{
margin:20px 0px;
}
.textlb p{
text-align: start;
}
</style>
{% endblock %}
{% block classbody %}{% endblock %}
{% block content %}
<div class="wanchoSecondary b22Libro">
<ul class="b21MigaCustom b10LeftMigaPan">
<li><a href="{{ path('home') }}">Home</a></li> /
<li class="active"><a href="{{ path('claim') }}">Libro de reclamo</a></li>
</ul>
{{ form_start(form, {'attr': {'enctype': 'multipart/form-data'}}) }}
{% include 'front/templates/form_utm_fields.html.twig' %}
{{ form_widget(form.establishment) }}
{{ form_widget(form.good) }}
{{ form_widget(form.type) }}
{{ form_widget(form.authorization) }}
{% if forms.claimTitle %}
<h4 class="titleStandard b22LibroTitle">{{ forms.claimTitle }}</h4>
{% endif %}
{% if forms.claimCompanyName or forms.claimCompanyRuc or forms.claimCompanyAddress %}
<div class="b21WrapText " >
{% if forms.claimCompanyName %}<p><strong>{{ forms.claimCompanyName }}</strong></p>{% endif %}
{% if forms.claimCompanyRuc %}<p>RUC: {{ forms.claimCompanyRuc }}</p>{% endif %}
{% if forms.claimCompanyAddress %}<p>Dirección: {{ forms.claimCompanyAddress|nl2br }}</p>{% endif %}
</div>
{% endif %}
{% if forms.claimText %}
<div class="b21WrapText">{{ forms.claimText|nl2br }}</div>
{% endif %}
{% if forms.claimEstablishmentTitle or forms.claimEstablishmentRuc or forms.claimEstablishmentRazonSocial or forms.claimEstablishmentDireccion %}
<div class="b21WrapText textlb" >
{% if forms.claimEstablishmentTitle %}<p><strong>{{ forms.claimEstablishmentTitle }}</strong></p>{% endif %}
{% if forms.claimEstablishmentRuc %}<p>RUC: {{ forms.claimEstablishmentRuc }}</p>{% endif %}
{% if forms.claimEstablishmentRazonSocial %}<p>Razón Social: {{ forms.claimEstablishmentRazonSocial }}</p>{% endif %}
{% if forms.claimEstablishmentDireccion %}<p>Dirección: {{ forms.claimEstablishmentDireccion|nl2br }}</p>{% endif %}
</div>
{% endif %}
<div class="b21WrapInput b21WrapInputDato">
<div class="b21WrapCol">
<div class="b21WrapColDate">
<span>Fecha:</span>
<span>{{ "now"|date('d/m/Y') }}</span>
</div>
</div>
<div class="b21WrapCol b21WrapColCorrelative">
<span>Nº {{ entity.code }}</span>
</div>
</div>
<!-- {% if forms.claimEstablishmentsText %}
<div class="b21WrapTextP">{{ forms.claimEstablishmentsText|nl2br }}</div>
{% endif %} -->
<!-- <div class="b21WrapInput">
<div class="b21Select">
<select class="form-contact-select" id="form-establecimiento">
<option value="" disabled selected></option>
{% for item in forms.claimEstablishmentsItems %}
<option data-ruc="{{ item.ruc }}" value="{{ item.title }}">{{ item.title }}</option>
{% endfor %}
</select>
<span class="form-label">Establecimiento</span>
<i class="icon-iconos-10"></i>
</div>
<div class="b21Input b21InputNoLabel">
<input class="form-contact" type="text" value="" id="form-ruc" readonly>
</div>
</div> -->
<!-- {% if forms.claimEstablishmentsNote %}
<div class="b21WrapTextP">{{ forms.claimEstablishmentsNote|nl2br }}</div>
{% endif %} -->
<div class="b21WrapRow">
{% if forms.claimP1Title %}
<h4 class="titleStandard">1. {{ forms.claimP1Title }}</h4>
{% endif %}
<div class="">
<div class="b21Input">
{{ form_widget(form.name, {'attr': {'data-expresion': 'text', 'class': 'validKeypress g-text form-contact validate[custom[onlyLetterSp]]'}}) }}
<span class="form-label">Nombres</span>
</div>
</div>
<div class="b21WrapInput">
<div class="b21Input">
{{ form_widget(form.lastname, {'attr': {'data-expresion': 'text', 'class': 'validKeypress g-text form-contact validate[custom[onlyLetterSp]]'}}) }}
<span class="form-label">Apellido Paterno</span>
</div>
<div class="b21Input">
{{ form_widget(form.apellido_materno, {'attr': {'data-expresion': 'text', 'class': 'validKeypress g-text form-contact validate[custom[onlyLetterSp]]'}}) }}
<span class="form-label">Apellido Materno</span>
</div>
</div>
<div class="b21WrapInput">
<div class="b21Input">
{{ form_widget(form.phone, {'attr': {'data-expresion': 'number', 'class': 'validKeypress g-number form-contact validate[custom[onlyNumberSp]]'}}) }}
<span class="form-label">Teléfono</span>
</div>
<div class="b21Input">
{{ form_widget(form.email, {'attr': {'class': 'form-contact validate[custom[email]]'}}) }}
<span class="form-label">Correo</span>
</div>
</div>
<div class="b21WrapInput">
<div class="b21Select">
{{ form_widget(form.documentType, {'attr': {'class': 'form-contact-select validate'}}) }}
<span class="form-label">Tipo de documento</span>
<i class="icon-iconos-10"></i>
</div>
<div class="b21Input">
{{ form_widget(form.documentNumber, {'attr': {'data-expresion': 'text', 'class': 'form-contact validate'}}) }}
<span class="form-label">N° de documento</span>
</div>
</div>
<div class="b21WrapInput">
<div class="b21Input">
{{ form_widget(form.department, {'attr': {'class': 'form-contact validate'}}) }}
<span class="form-label">Ciudad</span>
</div>
<div class="b21Input">
{{ form_widget(form.address, {'attr': {'class': 'form-contact validate'}}) }}
<span class="form-label">Dirección</span>
</div>
</div>
<div class="b21WrapMenorEdad">
<div class="b21WrapCheckbox b21WrapCheckboxP">
<input type="checkbox" id="chk_menor_edad" class="form-input checkbox checkMenor">
<label for="chk_menor_edad">Menor de edad</label>
{{ form_widget(form.younger, {'attr': {'id': 'form_claim_younger', 'class': 'hidden'}}) }}
</div>
</div>
<div id="bloque-apoderado" style="display: none;">
<div class="">
<div class="b21Input">
{{ form_widget(form.tutorName, {'attr': {'data-expresion': 'text', 'class': 'validKeypress g-text form-contact'}}) }}
<span class="form-label">Nombres del tutor</span>
</div>
</div>
<div class="b21WrapInput">
<div class="b21Input">
{{ form_widget(form.tutorLastName, {'attr': {'data-expresion': 'text', 'class': 'validKeypress g-text form-contact'}}) }}
<span class="form-label">Apellido Paterno del tutor</span>
</div>
<div class="b21Input">
{{ form_widget(form.tutorApellidoMaterno, {'attr': {'data-expresion': 'text', 'class': 'validKeypress g-text form-contact'}}) }}
<span class="form-label">Apellido Materno del tutor</span>
</div>
</div>
<div class="b21WrapInput">
<div class="b21Input">
{{ form_widget(form.tutorPhone, {'attr': {'data-expresion': 'number', 'class': 'validKeypress g-number form-contact'}}) }}
<span class="form-label">Teléfono</span>
</div>
<div class="b21Input">
{{ form_widget(form.tutorEmail, {'attr': {'class': 'form-contact'}}) }}
<span class="form-label">E-mail</span>
</div>
</div>
<div class="b21WrapInput">
<div class="b21Select">
{{ form_widget(form.tutorDocumentType, {'attr': {'class': 'form-contact-select'}}) }}
<span class="form-label">Tipo de documento</span>
<i class="icon-iconos-10"></i>
</div>
<div class="b21Input">
{{ form_widget(form.tutorDocumentNumber, {'attr': {'class': 'form-contact'}}) }}
<span class="form-label">N° de documento</span>
</div>
</div>
</div>
</div>
<div class="b21WrapRow">
{% if forms.claimP2Title %}
<h4 class="titleStandard">2. {{ forms.claimP2Title }}</h4>
{% endif %}
<div class="b21WrapRadio">
{% for item in forms.claimGoods %}
<div class="b21WrapRadioCol">
<input type="radio" class="form_good" id="radio-good_{{ loop.index }}" name="tipo_reclamo" value="{{ item.title }}" />
<label for="radio-good_{{ loop.index }}">{{ item.title }}</label>
</div>
{% endfor %}
</div>
<div class="b21WrapInput">
<div class="b21Select">
<select class="form-contact-select" id="form_claim_currency">
<option value="" disabled selected></option>
{% set monedas = forms.claimCurrencies is not empty ? forms.claimCurrencies : [{name: "Soles"}, {name: "Dolares"}] %}
{% for currency in monedas %}
<option value="{{ currency.name }}">{{ currency.name }}</option>
{% endfor %}
</select>
<span class="form-label">Moneda</span>
<i class="icon-iconos-10"></i>
</div>
{{ form_widget(form.currency) }}
<div class="b21Input">
{{ form_widget(form.amount, {'attr': {'class': 'form-contact', 'onkeypress': 'return event.charCode >= 48 && event.charCode <= 57 || event.charCode == 46'}}) }}
<span class="form-label">Valor del Producto/servicio</span>
</div>
</div>
<div class="b21Textarea">
{{ form_widget(form.description, {'attr': {'cols': '40', 'rows': '10', 'class': 'form-contact'}}) }}
<span class="form-label">Descripción</span>
</div>
</div>
<div class="b21WrapRow">
{% if forms.claimP3Title %}
<h4 class="titleStandard">3. {{ forms.claimP3Title }}</h4>
{% endif %}
<div class="b21WrapRadio">
{% for item in forms.claimTypes %}
<div class="b21WrapRadioCol">
<input type="radio" class="form_type" id="radio-type_{{ loop.index }}" name="tipo_consumidor" value="{{ item.title }}" />
<label for="radio-type_{{ loop.index }}">{{ item.title }}</label>
<!-- <span>*</span> -->
</div>
{% endfor %}
</div>
<div class="b21WrapTextP">
{% for item in forms.claimTypes %}
<p>*{{ item.title }}: {{ item.description|nl2br }}</p>
{% endfor %}
</div>
<div class="b21Textarea">
{{ form_widget(form.detail, {'attr': {'cols': '40', 'rows': '10', 'class': 'form-contact validate'}}) }}
<span class="form-label">Detalle</span>
</div>
<div class="b21Textarea">
{{ form_widget(form.demand, {'attr': {'cols': '40', 'rows': '10', 'class': 'form-contact validate'}}) }}
<span class="form-label">Pedido</span>
</div>
<div class="b21Firma">
<label class="form-label">Firma</label>
<canvas id="firmaCanvas" width="400" height="150"></canvas>
<button type="button" class="btnLimpiar" id="limpiarFirma">Limpiar</button>
<input type="hidden" id="firmaData" name="form[firma]" value="">
</div>
<div class="b21File">
<div class="b21FileBox">
<i class="icon-copy"></i>
<span class="b21FileText">Adjuntar archivo</span>
<label for="archivo_libro" class="b21FileTextFormat">Adjuntar archivo (PDF, PPTX, WORD o imágenes JPG, PNG)</label>
<input size="40" id="archivo_libro" accept=".pdf,.pptx,.word,.jpg,.png" type="file" name="form_file">
</div>
</div>
</div>
<div class="b21WrapRow">
{% if forms.claimP4Title %}
<h4 class="titleStandard">4. {{ forms.claimP4Title }}</h4>
{% endif %}
<div class="b21Textarea">
<textarea readonly></textarea>
</div>
<div class="b21WrapTextP">
{% set f = entity.answerDate %}
{% set answer_date = f|day ~ ', ' ~ f|date('d') ~ ' de ' ~ f|month|capitalize ~ ' del ' ~ f|date('Y') %}
{{ forms.claimDescription|replace({'%fecha_respuesta%': answer_date})|raw }}
</div>
</div>
<div class="b21WrapRow">
{# {% if forms.claimP5Title %}
<h4 class="titleStandard">5. {{ forms.claimP5Title }}</h4>
{% endif %}
<div class="b21WrapRadio">
<div class="b21WrapRadioCol">
<input type="radio" class="form_authorization" id="radio_authorization_yes" name="authorization_option" value="Sí" />
<label for="radio_authorization_yes">Sí</label>
<span>*</span>
</div>
<div class="b21WrapRadioCol">
<input type="radio" class="form_authorization" id="radio_authorization_no" name="authorization_option" value="No" />
<label for="radio_authorization_no">No</label>
<span>*</span>
</div>
</div> #}
<!-- <div class="b21Paragraph">
(*) Campos obligatorios.
</div> -->
{% if forms.claimNotes|length > 0 %}
<div class="b21WrapTextP">
{% for item in forms.claimNotes %}
<p>* {{ item.text|nl2br }}</p>
{% endfor %}
</div>
{% endif %}
</div>
<div class="b21WrapCheckbox">
<input type="checkbox" id="b21Checkbox" name="">
<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>
</div>
<button class="buttonStandard gray b21Btn" id="BtnLibro">Enviar</button>
{% if info.showCaptcha %}
<input type="hidden" name="recaptcha_token" id="recaptchaToken">
{% endif %}
{{ form_end(form) }}
</div>
{% endblock %}
{% block jsfinal %}
{% if info.showCaptcha %}
<script src="https://www.google.com/recaptcha/api.js?render={{ info.captchaSite }}"></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('{{ info.captchaSite }}', {action: 'submit'}).then(function(token) {
document.getElementById('recaptchaToken').value = token;
});
});
</script>
{% endif %}
<script type="text/javascript">
jQuery(function ($) {
$("form").validationEngine('attach', {
promptPosition: "topLeft",
autoHidePrompt: true,
autoPositionUpdate: false,
autoHideDelay: 2000,
binded: false,
scroll: false,
validateNonVisibleFields: true
})
$('#form-establecimiento').on('change', function () {
const value = $(this).val();
const ruc = $(this).find('option:selected').data('ruc');
const form_ruc = $('#form-ruc');
$('#form_claim_establishment').val(value);
form_ruc.val('');
if (ruc) {
form_ruc.val('RUC: ' + ruc);
}
});
$('#BtnLibro').on('click', function (event) {
event.preventDefault();
const item = $(this);
const form = item.closest('form');
const firmaData = $('#firmaData').val();
if (!firmaData) {
alert('Por favor firme antes de enviar');
return;
}
const valid = form.validationEngine('validate');
if (valid) {
item.prop('disabled', true).text('Enviando...');
form.submit();
} else {
item.prop('disabled', false).text('Enviar');
}
});
// $('.form_authorization').on('click', function () {
// $('#form_claim_authorization').val($('.form_authorization:checked').val());
// })
$('.form_good').on('click', function () {
$('#form_claim_good').val($('.form_good:checked').val());
})
$('.form_type').on('click', function () {
$('#form_claim_type').val($('.form_type:checked').val());
})
$('#form_claim_currency').on('change', function () {
const value = $(this).val();
$('input[name="form_claim[currency]"]').val(value);
});
$('#chk_menor_edad').on('change', function () {
if ($(this).is(':checked')) {
$('#bloque-apoderado').show();
$('#form_claim_younger').val('1');
} else {
$('#bloque-apoderado').hide();
$('#form_claim_younger').val('0');
}
});
const departmentField = $('#form_claim_department');
const provinceField = $('#form_claim_province');
const districtField = $('#form_claim_district');
const departmentSelect = $('#form_field_department');
const provinceSelect = $('#form_field_province');
const districtSelect = $('#form_field_district');
departmentSelect.on('change', function () {
const department = $(this).find('option:selected').data('option');
const value = $(this).val();
departmentField.val(null);
provinceField.val(null);
districtField.val(null);
if (department) {
departmentField.val(value);
loadProvinces();
}
})
provinceSelect.on('change', function () {
const province = $(this).find('option:selected').data('option');
const value = $(this).val();
provinceField.val(null);
districtField.val(null);
if (province) {
provinceField.val(value);
loadDistricts();
}
})
districtSelect.on('change', function () {
const district = $(this).find('option:selected').data('option');
const value = $(this).val();
districtField.val(null);
if (district) {
districtField.val(value);
}
})
function loadProvinces() {
const department = departmentSelect.find('option:selected').data('option');
if (!department) {
return false;
}
$.ajax({
url: '{{ path('get_provinces_by_department') }}',
type: 'post',
data: {department: department},
beforeSend: function () {
departmentSelect.prop('disabled', true);
provinceSelect.prop('disabled', true).html(createPlaceholder()).siblings('label').removeClass('fijar');
districtSelect.prop('disabled', true).html(createPlaceholder()).siblings('label').removeClass('fijar');
provinceField.val(null);
},
success: function (data) {
provinceSelect.prop('disabled', false).html(createOptions(data));
},
complete: function () {
departmentSelect.prop('disabled', false);
}
})
}
function loadDistricts() {
const province = provinceSelect.find('option:selected').data('option');
if (!province) {
return false;
}
$.ajax({
url: '{{ path('get_districts_by_province') }}',
type: 'post',
data: {province: province},
beforeSend: function () {
departmentSelect.prop('disabled', true);
provinceSelect.prop('disabled', true);
districtSelect.prop('disabled', true).html(createPlaceholder()).siblings('label').removeClass('fijar');
},
success: function (data) {
districtSelect.prop('disabled', false).html(createOptions(data));
},
complete: function () {
departmentSelect.prop('disabled', false);
provinceSelect.prop('disabled', false);
}
})
}
function createPlaceholder() {
return '<option value="" selected="selected"></option>';
}
function createOptions(data) {
let options = createPlaceholder();
$.each(data, function (i, v) {
options += createOption(v);
});
return options
}
function createOption(item) {
return '<option value="' + item['title'] + '" data-option="' + item['slug'] + '">' + item['title'] + '</option>';
}
var canvas = document.getElementById('firmaCanvas');
var ctx = canvas.getContext('2d');
var drawing = false;
var lastX = 0;
var lastY = 0;
function startPosition(e) {
drawing = true;
var pos = getPos(e);
lastX = pos.x;
lastY = pos.y;
}
function endPosition() {
drawing = false;
ctx.beginPath();
document.getElementById('firmaData').value = canvas.toDataURL();
}
function getPos(e) {
var rect = canvas.getBoundingClientRect();
if (e.touches) {
return {
x: e.touches[0].clientX - rect.left,
y: e.touches[0].clientY - rect.top
};
}
return {
x: e.clientX - rect.left,
y: e.clientY - rect.top
};
}
function draw(e) {
if (!drawing) return;
e.preventDefault();
var pos = getPos(e);
ctx.strokeStyle = '#000';
ctx.lineWidth = 2;
ctx.lineCap = 'round';
ctx.beginPath();
ctx.moveTo(lastX, lastY);
ctx.lineTo(pos.x, pos.y);
ctx.stroke();
lastX = pos.x;
lastY = pos.y;
}
canvas.addEventListener('mousedown', startPosition);
canvas.addEventListener('mouseup', endPosition);
canvas.addEventListener('mouseleave', function() {
if (drawing) {
drawing = false;
ctx.beginPath();
document.getElementById('firmaData').value = canvas.toDataURL();
}
});
canvas.addEventListener('mousemove', draw);
canvas.addEventListener('touchstart', startPosition);
canvas.addEventListener('touchend', endPosition);
canvas.addEventListener('touchmove', draw);
document.addEventListener('mouseup', function() {
if (drawing) {
drawing = false;
ctx.beginPath();
document.getElementById('firmaData').value = canvas.toDataURL();
}
});
document.getElementById('limpiarFirma').addEventListener('click', function() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
document.getElementById('firmaData').value = '';
});
canvas.addEventListener('mouseup', function() {
document.getElementById('firmaData').value = canvas.toDataURL();
});
})
</script>
{% endblock %}