Merge branch 'main' into dev/chat

This commit is contained in:
amazuecos
2024-09-07 20:30:51 +02:00
55 changed files with 2452 additions and 240 deletions

View File

@ -173,7 +173,7 @@ theTable = $('#tableOfPresupuestos').DataTable({
}
],
stateSave: false,
order: [[1, 'asc']],
order: [[1, 'desc']],
language: {
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
},

View File

@ -128,6 +128,21 @@
<input type="number" class="calcular-presupuesto" id="paginas" name="paginas" maxLength="8" step="1" class="form-control" value="<?= old(0, $presupuestoEntity->paginas) ?>">
</div><!--//.mb-3 -->
<div id="div_pagCuadernillo" class="col-sm-3 mb-3">
<label for="paginas_por_cuadernillo" class="form-label">
<?= lang('Presupuestos.paginasCuadernillo') ?>
</label>
<select id="paginasCuadernillo" name="paginas_por_cuadernillo" class="calcular-presupuesto form-control select2bs2" style="width: 100%;">
<?php if (isset($datosPresupuesto->paginasCuadernillo) && is_array($datosPresupuesto->paginasCuadernillo) && !empty($datosPresupuesto->paginasCuadernillo)) :
foreach ($datosPresupuesto->paginasCuadernillo as $value) : ?>
<option value="<?= $value ?>" <?= $value == $presupuestoEntity->paginas_por_cuadernillo ? ' selected' : '' ?>>
<?= $value ?>
</option>
<?php endforeach;
endif; ?>
</select>
</div><!--//.mb-3 -->
</div> <!--//.row -->
<div class="row">

View File

@ -646,11 +646,18 @@ async function calcularPresupuesto() {
clienteId: $('#clienteId').val(),
servicios: servicios,
}
// Si es cosido, se añade el número de páginas del cuadernillo
if ($('#cosidoDiv').hasClass('checked')) {
datos.paginasCuadernillo = $('#paginasCuadernillo').val();
}
// Si hay solapas de cubierta
if ($('#solapasCubierta').is(':checked')) {
datos.solapasCubierta = $('#anchoSolapasCubierta').val()
}
// Si hay sobrecubierta
if ($('#enableSobrecubierta').is(':checked')) {
if($('#papelSobrecubierta option:selected').val()>0 && $('#gramajeSobrecubierta option:selected').val()>0){

View File

@ -218,6 +218,12 @@ function finalizarPresupuesto(confirmar){
clienteId: $('#clienteId').val(),
servicios: servicios,
};
// Si es cosido, se añade el número de páginas del cuadernillo
if ($('#cosidoDiv').hasClass('checked')) {
datos_libro.paginasCuadernillo = $('#paginasCuadernillo').val();
}
// Si hay solapas de cubierta
if ($('#solapasCubierta').is(':checked')) {
datos_libro.solapasCubierta = $('#anchoSolapasCubierta').val()

View File

@ -33,6 +33,12 @@ function updateTipoLibroCheck(el)
else {
$('#tapaDuraDiv').show();
}
if(el.closest('.custom-option-tipo').id == 'cosidoDiv') {
$('#div_pagCuadernillo').show();
}
else {
$('#div_pagCuadernillo').hide();
}
} else {
el.closest('.custom-option-tipo').classList.remove('checked')
}

View File

@ -126,7 +126,7 @@
<div class="col-md-12 col-lg-3 px-4">
<div class="mb-3">
<label for="paisId" class="form-label">
<?=lang('Presupuestos.paisId') ?>*
<?=lang('Presupuestos.paisId') ?>
</label>
<select id="paisId" name="pais_id" class="form-control select2bs" style="width: 100%;" >
<option value=""><?=lang('Basic.global.pleaseSelectA', [lang('Presupuestos.paisId')]) ?></option>

View File

@ -207,12 +207,55 @@ function init_servicio_acabado(){
tableServiciosAcabado.row.add([
element.tarifa_acabado_id,
nombre_completo,
'<select id="proveedor_acabado_' + element.tarifa_acabado_id + '" class="proveedor_acabado select2bs2" style="width: 100%;">' +
'<option value="' + element.proveedor_id + '" selected >' +
element.proveedor +
'</option>' +
'</select>',
'<span id="precio_unidad_acabado_' + element.tarifa_acabado_id + '">' + parseFloat(element.precio_unidad).toFixed(2) + '</span>',
'<input class="update-totales-servicios" id="precio_total_acabado_' + element.tarifa_acabado_id +'" value="' + parseFloat(element.precio_total).toFixed(2) + '"></input>',
'<span style="display: none;" class="update-totales" id="acabado_margen_' + element.tarifa_acabado_id + '">' + parseFloat(element.margen).toFixed(2) + '</span>',
'<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete-serv mx-2" data-id="' + element.tarifa_acabado_id +'" data-text="' + nombre_completo + '"></i></a>'
]).draw(false)
$('#proveedor_acabado_' + element.tarifa_acabado_id).select2({
allowClear: false,
minimumResultsForSearch: -1,
ajax: {
url: window.routes_servicios.menuItemsOfPresupuestoAcabados,
type: 'post',
dataType: 'json',
data: function (params) {
if(parseInt($('#tirada').val())>0){
var tirada = parseInt($('#tirada').val())
}
else{
var tirada = 0
}
var return_data = {
tarifa_id: element.tarifa_acabado_id,
tirada: tirada,
};
return_data = Object.assign(return_data, window.token_ajax);
return return_data;
},
delay: 60,
processResults: function (response) {
yeniden(response[window.csrf_token]);
return {
results: response.menu
};
},
cache: true
}
});
$('#proveedor_acabado_' + element.tarifa_acabado_id).on('change', select_acabado_event)
$('#precio_total_acabado_' + element.tarifa_acabado_id).on('change', function(){
updatePresupuesto({
update_lineas: false,
@ -223,9 +266,55 @@ function init_servicio_acabado(){
})
})
check_serv_acabado_error()
}
function select_acabado_event(){
if(parseInt($('#tirada').val())>0){
var tirada = parseInt($('#tirada').val()) + parseInt($('#merma').val())
}
else{
var tirada = 0
}
var tarifa_id = null;
if(this.id.includes('proveedor_acabado')){
tarifa_id = this.id.split('_')[2];
}
else{
tarifa_id = this.id.split('_')[1];
}
var datos = {
tarifa_acabado_id: tarifa_id,
tirada: tirada,
proveedor_id: parseInt($('#proveedor_acabado_' + tarifa_id).select2('data')[0].id),
POD: parseInt($('#POD').val())
};
datos = Object.assign(datos, window.token_ajax);
$.ajax({
type: "POST",
url: window.routes_servicios.dataTableOfPresupuestoAcabados,
data: datos,
success: function (data) {
$('#precio_unidad_acabado_' + datos.tarifa_acabado_id).text(parseFloat(data.values[0].precio_unidad).toFixed(2))
$('#precio_total_acabado_' + datos.tarifa_acabado_id).val(parseFloat(data.values[0].total).toFixed(2))
$('#acabado_margen_' + datos.tarifa_acabado_id).val(parseFloat(data.values[0].margen).toFixed(2))
yeniden(data[window.csrf_token]);
return true;
},
error: function(e){
return false;
}
})
return false;
}
function check_serv_acabado_error(){
var htmlString = '';
@ -280,6 +369,11 @@ function get_tarifas_acabado(tarifa_id = -1, uso=null){
tableServiciosAcabado.row.add([
row.tarifa_id,
nombre,
'<select id="proveedor_acabado_' + row.tarifa_id + '" class="proveedor_acabado select2bs2" style="width: 100%;">' +
'<option value="' + row.proveedor_id + '" selected >' +
row.proveedor +
'</option>' +
'</select>',
'<span id="precio_unidad_acabado_' + row.tarifa_id + '">' + parseFloat(row.precio_unidad).toFixed(2) + '</span>',
'<input class="update-totales-servicios" id="precio_total_acabado_' + row.tarifa_id +'" value="' + parseFloat(row.total).toFixed(2) + '"></input>',
'<span style="display: none;" class="update-totales" id="acabado_margen_' + row.tarifa_id + '">' + parseFloat(row.margen).toFixed(2) + '</span>',
@ -295,6 +389,44 @@ function get_tarifas_acabado(tarifa_id = -1, uso=null){
update_tiradas_alternativas: true})
})
$('#proveedor_acabado_' + row.tarifa_id).select2({
allowClear: false,
minimumResultsForSearch: -1,
ajax: {
url: window.routes_servicios.menuItemsOfPresupuestoAcabados,
type: 'post',
dataType: 'json',
data: function (params) {
if(parseInt($('#tirada').val())>0){
var tirada = parseInt($('#tirada').val())
}
else{
var tirada = 0
}
var return_data = {
tarifa_id: row.tarifa_id,
tirada: tirada,
};
return_data = Object.assign(return_data, window.token_ajax);
return return_data;
},
delay: 60,
processResults: function (response) {
yeniden(response[window.csrf_token]);
return {
results: response.menu
};
},
cache: true
}
});
$('#proveedor_acabado_' + row.tarifa_id).on('change', select_acabado_event)
});
check_serv_acabado_error()
@ -415,12 +547,15 @@ function get_datos_acabado(){
values['sobrecubierta'] = 0
break
case 2:
values['precio_unidad'] = $(this).text()
values['proveedor_id'] = $(this).children(":first").select2('data')[0].id
break
case 3:
values['precio_total'] = $(this).children(":first").val()
values['precio_unidad'] = $(this).text()
break
case 4:
values['precio_total'] = $(this).children(":first").val()
break
case 5:
values['margen'] = $(this).text()
break
}
@ -518,7 +653,7 @@ function init_servicio_encuadernado(){
const tarifa_id = element.tarifa_encuadernado_id
var proveedor_nombre = element.proveedor===null? window.Presupuestos.no_disponible: element.proveedor
tableServiciosEnc.row.add([
var linea = [
element.tarifa_encuadernado_id,
element.nombre,
'<select id="proveedor_enc_' + element.tarifa_encuadernado_id + '" class="proveedor_enc select2bs2" style="width: 100%;">' +
@ -527,11 +662,14 @@ function init_servicio_encuadernado(){
'</option>' +
'</select>',
'<span id="precio_unidad_encuadernado_' + element.tarifa_encuadernado_id + '">' + parseFloat(element.precio_unidad).toFixed(2) + '</span>',
'<span id="tiempo_encuadernado_' + element.tiempo + '">' + convertirTiempo(element.tiempo) + '</span>',
(element.hasOwnProperty('paginas_por_cuadernillo') && element.paginas_por_cuadernillo!=null)?selectForCuadernillos(element.tarifa_encuadernado_id, element.paginas_por_cuadernillo):'',
'<span id="tiempo_encuadernado_' + element.tarifa_encuadernado_id + '">' + convertirTiempo(element.tiempo) + '</span>',
'<input class="update-totales-servicios" id="precio_total_encuadernado_' + element.tarifa_encuadernado_id +'" value="' + parseFloat(element.precio_total).toFixed(2) + '"></input>',
'<span style="display: none;" class="update-totales" id="enc_margen_' + element.tarifa_encuadernado_id + '">' + parseFloat(element.margen).toFixed(2) + '</span>',
'<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete-serv mx-2" data-id="' + element.tarifa_encuadernado_id +'"></i></a>'
]).draw(false)
]
tableServiciosEnc.row.add(linea).draw(false)
$('#precio_total_encuadernado_' + element.tarifa_encuadernado_id).on('change', function(){
updatePresupuesto({
@ -583,14 +721,40 @@ function init_servicio_encuadernado(){
cache: true
}
});
$('#proveedor_enc_' + element.tarifa_encuadernado_id).on('change', proveedor_enc_event)
$('#proveedor_enc_' + element.tarifa_encuadernado_id).on('change', select_enc_event)
if(element.hasOwnProperty('paginas_por_cuadernillo') && element.paginas_por_cuadernillo!=null){
$('#cuadernillos_' + element.tarifa_encuadernado_id).select2({
allowClear: false,
minimumResultsForSearch: -1,
});
$('#cuadernillos_' + element.tarifa_encuadernado_id).on('change', select_enc_event)
}
});
check_serv_enc_error()
}
function selectForCuadernillos(tarifa_id, select_value){
const value_list = [32, 28, 24, 20, 16];
var string =
'<select id="cuadernillos_' + tarifa_id + '" class="cuadernillo_enc select2bs2" style="width: 50%;">';
for (let i = 0; i < value_list.length; i++) {
string +=
'<option value="' + value_list[i] + '" ' + (value_list[i]==select_value?'selected':'') +'>' +
value_list[i] +
'</option>';
}
string += '</select>';
return string;
}
function convertirTiempo(horas){
if(horas != null && horas.length>0){
if(horas != null){
if(parseFloat(horas)>0){
const seconds = parseFloat(horas) * 3600;
// se convierte a formato hh:mm:ss
@ -598,32 +762,49 @@ function convertirTiempo(horas){
const minutos = Math.floor((seconds % 3600) / 60);
const segundos = seconds % 60;
return h + ':' + minutos + ':' + segundos;
}
}
else{
return "";
}
}
else{
return "";
}
}
function proveedor_enc_event(){
function select_enc_event(){
const dimension = getDimensionLibro();
if(parseInt($('#tirada').val())>0){
var tirada = parseInt($('#tirada').val())
var tirada = parseInt($('#tirada').val()) + parseInt($('#merma').val())
}
else{
var tirada = 0
}
var tarifa_id = null;
if(this.id.includes('proveedor_enc')){
tarifa_id = this.id.split('_')[2];
}
else{
tarifa_id = this.id.split('_')[1];
}
// se checkea si el elemento #cuadernillos_ + tarifa_id existe
var paginas_por_cuadernillo = null;
if($('#cuadernillos_' + tarifa_id).length){
paginas_por_cuadernillo = parseInt($('#cuadernillos_' + tarifa_id).select2('data')[0].id);
}
var datos = {
tarifa_encuadernacion_id: this.id.split('_')[2],
tarifa_encuadernacion_id: tarifa_id,
paginas: parseInt($('#paginas').val())>0?parseInt($('#paginas').val()):0,
tirada: tirada,
ancho: dimension.ancho,
alto: dimension.alto,
proveedor_id: parseInt($('#' + this.id).select2('data')[0].id),
paginas_por_cuadernillo: paginas_por_cuadernillo,
proveedor_id: parseInt($('#proveedor_enc_' + tarifa_id).select2('data')[0].id),
POD: parseInt($('#POD').val())
};
datos = Object.assign(datos, window.token_ajax);
@ -677,7 +858,7 @@ async function get_tarifas_enc(tipo=null, tarifa_id = -1){
const dimension = getDimensionLibro();
if(parseInt($('#tirada').val())>0){
var tirada = parseInt($('#tirada').val())
var tirada = parseInt($('#tirada').val()) + parseInt($('#merma').val())
}
else{
var tirada = 0
@ -685,11 +866,7 @@ async function get_tarifas_enc(tipo=null, tarifa_id = -1){
var datos = {
tarifa_encuadernacion_id : tarifa_id,
solapas: $('#solapas').is(':checked')?1:0,
paginas: parseInt($('#paginas').val())>0?parseInt($('#paginas').val()):0,
tirada: tirada,
ancho: dimension.ancho,
alto: dimension.alto,
POD: parseInt($('#POD').val())
};
datos = Object.assign(datos, window.token_ajax)
@ -719,7 +896,8 @@ async function get_tarifas_enc(tipo=null, tarifa_id = -1){
'</option>' +
'</select>',
'<span id="precio_unidad_encuadernado_' + row.tarifa_id + '">' + parseFloat(row.precio_unidad).toFixed(2) + '</span>',
'<span id="tiempo_encuadernado_' + row.tiempo + '">' + convertirTiempo(row.tiempo) + '</span>',
(row.hasOwnProperty('paginas_por_cuadernillo') && row.paginas_por_cuadernillo!=null)?selectForCuadernillos(row.tarifa_id, 32):'',
'<span id="tiempo_encuadernado_' + row.tarifa_id + '">' + convertirTiempo(row.tiempo) + '</span>',
'<input class="update-totales-servicios" id="precio_total_encuadernado_' + row.tarifa_id +'" value="' + parseFloat(row.total).toFixed(2) + '"></input>',
'<span style="display: none;" class="update-totales" id="enc_margen_' + row.tarifa_id + '">' + parseFloat(row.margen).toFixed(2) + '</span>',
'<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete-serv mx-2" data-id="' + row.tarifa_id +'"></i></a>'
@ -745,7 +923,7 @@ async function get_tarifas_enc(tipo=null, tarifa_id = -1){
data: function (params) {
if( parseInt( $('#tirada').val() )>0){
var tirada = parseInt($('#tirada').val())
var tirada = parseInt($('#tirada').val()) + parseInt($('#merma').val())
}
else{
var tirada = 0
@ -755,8 +933,8 @@ async function get_tarifas_enc(tipo=null, tarifa_id = -1){
tarifa_id: row.tarifa_id,
paginas: parseInt($('#paginas').val())>0?parseInt($('#paginas').val()):0,
tirada: tirada,
ancho: ancho_libro,
alto: alto_libro,
ancho: dimension.ancho,
alto: dimension.alto,
searchtxt: params.term, // search term
}
return_data = Object.assign(return_data, window.token_ajax);
@ -773,9 +951,17 @@ async function get_tarifas_enc(tipo=null, tarifa_id = -1){
}
});
$('#proveedor_enc_' + row.tarifa_id).on('change', proveedor_enc_event)
$('#proveedor_enc_' + row.tarifa_id).on('change', select_enc_event)
if(row.hasOwnProperty('paginas_por_cuadernillo') && row.paginas_por_cuadernillo!=null){
$('#cuadernillos_' + row.tarifa_id).select2({
allowClear: false,
minimumResultsForSearch: -1,
});
$('#cuadernillos_' + row.tarifa_id).on('change', select_enc_event)
}
});
check_serv_enc_error()
yeniden(data[window.csrf_token]);
@ -821,16 +1007,21 @@ function get_datos_encuadernacion(){
case 3:
values['precio_unidad'] = $(this).text()
break
case 4:
case 4:
values['paginas_por_cuadernillo'] = $(this).children(":first").val()
// Si el valor es "undefined" se pone a null
if(values['paginas_por_cuadernillo'] == "undefined")
values['paginas_por_cuadernillo'] = null
case 5:
values['tiempo'] = $(this).text()
// se pasa el string hh:mm:ss a horas
if(values['tiempo'] != null)
values['tiempo'] = parseInt(values['tiempo'].split(':')[0]) + parseInt(values['tiempo'].split(':')[1])/60 + parseInt(values['tiempo'].split(':')[2])/3600
break
case 5:
case 6:
values['precio_total'] = $(this).children(":first").val()
break
case 6:
case 7:
values['margen'] = $(this).text()
break
}
@ -1678,9 +1869,19 @@ async function actualizar_servicios(update_preimpresion=false){
.then(response => response.json())
.then(data => {
data.lines.forEach((line) => {
$('#proveedor_acabado_' + line[0].tarifa_id).off('change')
if(line[0].hasOwnProperty('proveedor_id')){
$('#proveedor_acabado_' + line[0].tarifa_id)
.append('<option selected="selected" value="' + line[0].proveedor_id + '">' + line[0].proveedor + '</option>')
}
else{
$('#proveedor_acabado_' + line[0].tarifa_id).empty()
.append('<option selected="selected" value="' + line[0].proveedor_id + '">' + window.Presupuestos.no_disponible + '</option>')
}
$('#precio_unidad_acabado_' + line[0].tarifa_id).text(parseFloat(line[0].precio_unidad).toFixed(2))
$('#precio_total_acabado_' + line[0].tarifa_id).val(parseFloat(line[0].total).toFixed(2))
$('#acabado_margen_' + line[0].tarifa_id).text(parseFloat(line[0].margen).toFixed(2))
$('#proveedor_acabado_' + line[0].tarifa_id).on('change', select_enc_event)
});
check_serv_acabado_error()
yeniden(data[window.csrf_token]);
@ -1709,7 +1910,7 @@ async function actualizar_servicios(update_preimpresion=false){
$('#precio_unidad_encuadernado_' + line[0].tarifa_id).text(parseFloat(line[0].precio_unidad).toFixed(2))
$('#precio_total_encuadernado_' + line[0].tarifa_id).val(parseFloat(line[0].total).toFixed(2))
$('#enc_margen_' + line[0].tarifa_id).val(parseFloat(line[0].margen).toFixed(2))
$('#proveedor_enc_' + line[0].tarifa_id).on('change', proveedor_enc_event)
$('#proveedor_enc_' + line[0].tarifa_id).on('change', select_enc_event)
});
check_serv_enc_error()
yeniden(data[window.csrf_token]);

View File

@ -90,6 +90,7 @@
<tr>
<th><?= lang('Presupuestos.id') ?></th>
<th><?= lang('Tarifaacabado.tarifaacabado') ?></th>
<th><?= lang('Proveedores.proveedor') ?></th>
<th><?= lang('Presupuestos.precioUnidad') ?></th>
<th><?= lang('Presupuestos.precioTotal') ?></th>
<th></th>
@ -167,6 +168,7 @@
<th><?= lang('Presupuestos.tarifa') ?></th>
<th><?= lang('Proveedores.proveedor') ?></th>
<th><?= lang('Presupuestos.precioUnidad') ?></th>
<th><?= lang('Presupuestos.paginasCuadernillo') ?></th>
<th><?= lang('Presupuestos.tiempo') ?></th>
<th><?= lang('Presupuestos.precioTotal') ?></th>
<th></th>
@ -296,6 +298,7 @@
window.routes_servicios = {
dataTableOfPresupuestoAcabados: "<?=route_to('dataTableOfPresupuestoAcabados') ?>",
menuItemsOfPresupuestoAcabados: '<?= route_to("menuItemsOfPresupuestoAcabados") ?>',
dataTableOfPresupuestoPreimpresion: "<?=route_to('dataTableOfPresupuestoPreimpresiones') ?>",
dataTableOfPresupuestoEncuadernaciones: "<?=route_to('dataTableOfPresupuestoEncuadernaciones') ?>",
dataTableOfPresupuestoManipulados: "<?=route_to('dataTableOfPresupuestoManipulados') ?>",