Merge branch 'dev/mejoras_tiradas' into 'main'

Dev/mejoras tiradas

See merge request jjimenez/safekat!185
This commit is contained in:
2024-03-12 19:46:22 +00:00
21 changed files with 6722 additions and 6187 deletions

View File

@ -21,12 +21,37 @@ class Js_loader extends BaseController
}
function translate_js($translationFile)
{
$this->response->setHeader('Content-Type', 'text/javascript');
$locale = service('request')->getLocale();
$path = "Language/{$locale}/$translationFile.php";
$lang = require APPPATH.$path;
return view('themes/_commonPartialsBs/translate.js', ['array_php' => $lang, 'var_name' => $translationFile]);
}
function datosLibro_js()
{
$this->response->setHeader('Content-Type', 'text/javascript');
return view('themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosLibroItems.js');
}
function previsualizador_js()
{
$this->response->setHeader('Content-Type', 'text/javascript');
return view('themes/backend/vuexy/form/presupuestos/cosidotapablanda/previews.js');
}
function lineasPresupuesto_js()
{
$this->response->setHeader('Content-Type', 'text/javascript');
return view('themes/backend/vuexy/form/presupuestos/cosidotapablanda/_lineasPresupuestoItems.js');
}
function tiradasAlternativas_js()
{
$this->response->setHeader('Content-Type', 'text/javascript');
@ -45,5 +70,17 @@ class Js_loader extends BaseController
return view('themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosEnvios.js');
}
function resumenPresupuestos_js()
{
$this->response->setHeader('Content-Type', 'text/javascript');
return view('themes/backend/vuexy/form/presupuestos/cosidotapablanda/_resumenPresupuestos.js');
}
function presupuestos_js()
{
$this->response->setHeader('Content-Type', 'text/javascript');
return view('themes/backend/vuexy/form/presupuestos/cosidotapablanda/_presupuestos.js');
}
}

View File

@ -339,6 +339,8 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
$this->viewData['papelGenericoRotativaNegroList'] = $this->getPapelGenericoRotativaNegro();
$this->viewData['papelGenericoRotativaColorList'] = $this->getPapelGenericoRotativaColor();
$this->viewData['direccionesList'] = $this->getDirecciones($id);
// Acabados exteriores
$this->viewData['acabadosCubierta'] = $this->getAcabadosCubierta();
$this->viewData['acabadosSobrecubierta'] = $this->getAcabadosSobrecubierta();
@ -1295,4 +1297,9 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
$model = model('App\Models\Configuracion\ConfiguracionSistemaModel');
return $model->getPOD();
}
protected function getDirecciones($presupuesto_id){
$model = model('App\Models\Presupuestos\PresupuestoDireccionesModel');
return $model->where('presupuesto_id', $presupuesto_id)->findAll();
}
}

View File

@ -92,8 +92,8 @@ return [
'encuadernacion' => 'Binding',
'solapasCubierta' => 'Cover dust jacket',
'solapasAnchoCubierta' => 'Cover dust jacket width',
'1cara' => '1 side',
'2caras' => '2 sides',
'unaCara' => '1 side',
'dosCaras' => '2 sides',
'bn' => 'BW',
'bnhq' => 'BWHQ',
'color' => 'Colour',

View File

@ -108,8 +108,8 @@ return [
'solapasAnchoCubierta' => 'Ancho solapas cub.',
'solapasAnchoSobrecubierta' => 'Ancho solapas sobrecub.',
'sinImpresion' => 'Sin impresion',
'1cara' => '1 cara',
'2caras' => '2 caras',
'unaCara' => '1 cara',
'dosCaras' => '2 caras',
'bn' => 'BN',
'bnhq' => 'BNHQ',
'color' => 'Color',
@ -257,6 +257,7 @@ return [
'requerido' => 'El campo {field} es obligatorio.',
'max_length' => 'El campo {field} no puede exceder los {param} caracteres de longitud.',
'no_lp_for_merma' => 'Inserte líneas de presupuesto para calcular la merma',
'ejemplares_envio' => 'El número de ejemplares enviados no coincide con la tirada',
],
'errores' => [

View File

@ -17,9 +17,9 @@ return [
'paginasMax' => 'Páginas Max',
'paginasMin' => 'Páginas Min',
'dimensiones' => 'Dimensiones',
'menor_a5' =>'Menor A5',
'menor_a5' =>'Hasta A5',
'entre_a5_a4' =>'Entre A5 y A4',
'mayor_a4' =>'Mayor A4',
'mayor_a4' =>'Desde A4',
'por_defecto' =>'Genérico',
'moduleExplanation' => 'El número de páginas reflejado en este apartado se refiere por ejemplar, no al total del pedido',
'margen' => 'Margen',

View File

@ -0,0 +1 @@
window.<?php echo $var_name; ?> = <?= json_encode($array_php); ?>;

View File

@ -1,3 +1,10 @@
const actionBtns_direcciones = function(data) {
return `
<span class="edit-add"><a href="javascript:void(0);"><i class="ti ti-pencil ti-sm btn-edit-add mx-2" data-id="${data.id}"></i></a></span>
<a href="javascript:void(0);"><i class="ti ti-trash ti-sm tiradas-alternativas delete-add-row mx-2"></i></a>
`;
};
// Funcion para obtener el peso total del libro
function get_peso_libro(){
@ -51,7 +58,7 @@ async function get_coste_envio_tiradasAlternativas(tirada){
const cantidad = Math.floor(tirada*porcentaje/100.0);
const peso_envio = cantidad*peso_libro/1000.0;
const datos_tarifa = await get_precio_envio(peso_envio, rowData.paisId, rowData.cp, parseInt(rowData.entregaPieCalle)==1?'palets':'cajas');
if(datos_tarifa.id!=null){
if(peso_envio>parseFloat(datos_tarifa.peso_max)){
@ -68,4 +75,345 @@ async function get_coste_envio_tiradasAlternativas(tirada){
}
return {coste, margen};
}
}
function checkInsertar(){
var cantidad_total = 0
$('#tableOfDireccionesEnvio').DataTable().rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var data = this.data();
cantidad_total += parseInt(data.cantidad )
} );
var htmlString = ''
if(cantidad_total < parseInt($('#tirada').val())){
$('#rowInsertar').css('display', 'flex')
}
else{
$('#rowInsertar').css('display', 'none')
}
if(cantidad_total != parseInt($('#tirada').val())){
htmlString = `
<div class="alert alert-warning d-flex align-items-baseline" role="alert">
<span class="alert-icon alert-icon-lg text-primary me-2">
<i class="ti ti-bell ti-sm"></i>
</span>
<div class="d-flex flex-column ps-1">
<h5 class="alert-heading mb-2">` +
window.Presupuestos.validation.ejemplares_envio +
`</h5>
</div>
</div>`;
}
$('#alert-envios').html(htmlString)
}
async function updateTablaEnvios(tirada_inicial = null, tirada = null){
var peso_total_libro = get_peso_libro();
$('#tableOfDireccionesEnvio').DataTable().rows().every(async function ( rowIdx, tableLoop, rowLoop ) {
var rowData = this.data();
if(tirada_inicial!=null && tirada!=null){
const porcentaje = parseInt(rowData.cantidad)/tirada_inicial*100.0;
const cantidad = Math.floor(tirada*porcentaje/100.0);
rowData.cantidad = cantidad
}
const peso_envio = peso_total_libro*parseInt(rowData.cantidad)/1000.0;
var datos_tarifa = await get_precio_envio(peso_envio, rowData.paisId, rowData.cp, parseInt(rowData.entregaPieCalle)==1?'palets':'cajas');
if(datos_tarifa.id!=null){
if(peso_envio>parseFloat(datos_tarifa.peso_max)){
datos_tarifa.precio = parseFloat(datos_tarifa.peso_min) + (peso_envio-parseFloat(datos_tarifa.peso_min))*parseFloat(datos_tarifa.precio_adicional);
}
// si no se calcula linealmente
else{
m=((parseFloat(datos_tarifa.precio_max)-parseFloat(datos_tarifa.precio_min))/(parseFloat(datos_tarifa.peso_max)-parseFloat(datos_tarifa.peso_min)));
b=parseFloat(datos_tarifa.precio_max)-m*parseFloat(datos_tarifa.peso_max);
datos_tarifa.precio = parseFloat(m*peso_envio+b);
}
datos_tarifa.cantidad = parseInt($('#add_cantidad').val());
datos_tarifa.peso = peso_envio;
$('#tableOfDireccionesEnvio').DataTable().row(rowIdx)
.data({
'tarifa_id': datos_tarifa.id,
'cantidad': rowData.cantidad,
'peso': datos_tarifa.peso.toFixed(3),
'att': rowData.att,
'email': rowData.email,
'direccion': rowData.direccion,
'cp': rowData.cp,
'municipio': rowData.municipio,
'provincia': rowData.provincia,
'paisId': rowData.paisId,
'telefono': rowData.telefono,
'proveedor': datos_tarifa.proveedor,
'proveedor_id': datos_tarifa.proveedor_id,
'precio': datos_tarifa.precio.toFixed(2),
'margen': datos_tarifa.margen,
'entregaPieCalle': rowData.entregaPieCalle,
'actionBtns_direcciones': actionBtns_direcciones,
})
.draw();
checkInsertar()
//updateTotales(false, false, true)
updatePresupuesto({
update_lineas: false,
update_servicios: false,
update_envios: false,
update_resumen: true,
update_tiradas_alternativas: true
})
}
else{
popErrorAlert(window.error_no_tarifa_envio, 'error-tarifa')
}
})
}
$('#insertar_direccion').on('click', function(){
$("#addressForm").attr('action','create')
var $newAddDialog = $("#addressForm")
var maximaCantidad = parseInt($('#tirada').val())
$("#add_cantidad").attr("max" , maximaCantidad);
$("#add_cantidad").val( maximaCantidad);
$("#add_cantidad").on('change', function(){
$("#add_cantidad").val(parseInt($("#add_cantidad").val())>maximaCantidad ? maximaCantidad : $("#add_cantidad").val())
})
cantidad_total = 0
tableEnvios.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var data = this.data();
cantidad_total += parseInt(data.cantidad)
} );
$('#add_cantidad').attr('max-value', parseInt($('#tirada').val())-cantidad_total)
$('#add_cantidad').val(parseInt($('#tirada').val())-cantidad_total)
$newAddDialog.modal('show')
})
const lastColNr_direcciones = $('#tableOfDireccionesEnvio').find("tr:first th").length - 1;
$(document).on('click', '.delete-add-row', function(e) {
const row = $(this).closest('tr');
tableEnvios.row( row )
.remove()
.draw();
checkInsertar()
//updateTotales(false, false, true)
updatePresupuesto({
update_lineas: false,
update_servicios: false,
update_envios: false,
update_resumen: true,
update_tiradas_alternativas: true
})
})
$(document).on('click', '.btn-edit-add', function(e) {
const row = $(this).closest('tr');
var data = tableEnvios.row( row ).data()
$("#addressForm").attr('action','edit')
$("#addressForm").attr('row', row[0]._DT_RowIndex)
$("#addressForm").attr('presupuestodireccion_id', $(this).attr('data-id'))
var $newAddDialog = $("#addressForm")
var maximaCantidad = parseInt($('#tirada').val())
$("#add_cantidad").attr("max" , maximaCantidad);
$("#add_cantidad").val( maximaCantidad);
$("#add_cantidad").on('change', function(){
$("#add_cantidad").val(parseInt($("#add_cantidad").val())>maximaCantidad ? maximaCantidad : $("#add_cantidad").val())
})
cantidad_total = 0
tableEnvios.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var data2 = this.data();
cantidad_total += parseInt(data2.cantidad)
} );
cantidad_total -= parseInt(data.cantidad) // Si es editar tienes que restar los de la linea actual
$('#add_cantidad').attr('max-value', parseInt($('#tirada').val())-cantidad_total)
$('#add_cantidad').val(parseInt($('#tirada').val())-cantidad_total)
$('#add_att').val(data.att)
$('#add_direccion').val(data.direccion)
$('#add_email').val(data.email)
$('#add_cp').val(data.cp)
$('#add_municipio').val(data.municipio)
$('#add_provincia').val(data.provincia)
$('#add_pais_id').val(data.paisId)
$('#add_telefono').val(data.telefono)
$('#add_cantidad').val(data.cantidad)
$('#add_entregaPieCalle').prop('checked', data.entregaPieCalle==1?true:false)
$newAddDialog.modal('show')
})
$('#recoger_en_taller').change(function(){
if(this.checked) {
$('#rowTable').css('display', 'none')
$('#rowInsertar').css('display', 'none')
tableEnvios.clear().draw()
}
else{
$('#rowTable').css('display', 'flex')
$('#rowInsertar').css('display', 'flex')
tableEnvios.columns.adjust();
}
})
var tableEnvios = $('#tableOfDireccionesEnvio').DataTable( {
draw:5,
serverSide: false,
processing: true,
autoWidth: true,
responsive: true,
order: [[ 0, "asc" ]],
pageLength: 20,
lengthChange: false,
searching: false,
paging: false,
info: false,
scrollX: true,
columns: [
{ 'data': 'tarifa_id' },
{ 'data': 'cantidad' },
{ 'data': 'peso' },
{ 'data': 'att' },
{ 'data': 'email' },
{ 'data': 'direccion' },
{ 'data': 'cp' },
{ 'data': 'municipio' },
{ 'data': 'paisId' ,
render: function(data, type, row, meta) {
var pais = window.paisList.find(element => element.id == data);
return pais['nombre'];
},
},
{ 'data': 'telefono' },
{ 'data': 'proveedor'},
{ 'data': 'proveedor_id'},
{ 'data': 'precio' },
{ 'data': 'margen' },
{ 'data': 'entregaPieCalle' },
{
data: actionBtns_direcciones,
className: 'row-edit dt-center'
}
],
columnDefs: [
{
orderable: false,
searchable: false,
targets: [lastColNr_direcciones]
},
{"orderData": [ 0], "targets": 0 },
],
columnDefs: [
{
target: [0,11,13,14],
visible: false,
searchable: false
},
],
language: {
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
},
} );
function save_datos_envios(){
$.post( window.routes_envios.dataTableOfPresupuestoDirecciones,
Object.assign({tipo: "clear_lineas", presupuesto_id: id}, window.token_ajax))
.done(function( data ) {
tableEnvios.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var data = this.data();
$.post( '/presupuestos/presupuestodirecciones/add',
Object.assign({
presupuesto_id : id,
tarifa_id : data.tarifa_id,
cantidad : data.cantidad,
peso : data.peso,
att : data.att,
email : data.email,
direccion : data.direccion,
paisId : data.paisId,
provincia : data.provincia,
municipio : data.municipio,
cp : data.cp,
telefono : data.telefono,
precio : data.precio,
margen : data.margen,
proveedor : data.proveedor,
proveedor_id : data.proveedor_id,
entregaPieCalle : data.entregaPieCalle}, window.token_ajax))
});
})
}
function load_datos_envios(){
window.direccionesList.forEach((linea) => {
tableEnvios.row
.add({
'tarifa_id': linea.tarifa_id,
'cantidad': linea.cantidad,
'peso': linea.peso,
'att': linea.att,
'email': linea.email,
'direccion': linea.direccion,
'cp': linea.cp,
'municipio': linea.municipio,
'provincia': linea.provincia,
'paisId': linea.pais_id,
'telefono': linea.telefono,
'proveedor': linea.proveedor,
'proveedor_id': linea.proveedor_id,
'precio': linea.precio,
'margen': linea.margen,
'entregaPieCalle': linea.entregaPieCalle,
'actionBtns_direcciones': actionBtns_direcciones,
})
.draw();
checkInsertar()
});
updatePresupuesto({
update_lineas: false,
update_servicios: false,
update_envios: false,
update_resumen: true,
update_tiradas_alternativas: false
})
}

View File

@ -60,335 +60,19 @@
<!------------------------------------------->
<?= $this->section("additionalInlineJs") ?>
$('#insertar_direccion').on('click', function(){
$("#addressForm").attr('action','create')
var $newAddDialog = $("#addressForm")
var maximaCantidad = parseInt($('#tirada').val())
$("#add_cantidad").attr("max" , maximaCantidad);
$("#add_cantidad").val( maximaCantidad);
$("#add_cantidad").on('change', function(){
$("#add_cantidad").val(parseInt($("#add_cantidad").val())>maximaCantidad ? maximaCantidad : $("#add_cantidad").val())
})
window.paisList = <?php echo json_encode($paisList); ?>;
window.direccionesList = <?php echo json_encode($direccionesList); ?>;
cantidad_total = 0
tableEnvios.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var data = this.data();
cantidad_total += parseInt(data.cantidad)
} );
$('#add_cantidad').attr('max-value', parseInt($('#tirada').val())-cantidad_total)
$('#add_cantidad').val(parseInt($('#tirada').val())-cantidad_total)
$newAddDialog.modal('show')
})
const lastColNr_direcciones = $('#tableOfDireccionesEnvio').find("tr:first th").length - 1;
const actionBtns_direcciones = function(data) {
return `
<span class="edit-add"><a href="javascript:void(0);"><i class="ti ti-pencil ti-sm btn-edit-add mx-2" data-id="${data.id}"></i></a></span>
<a href="javascript:void(0);"><i class="ti ti-trash ti-sm tiradas-alternativas delete-add-row mx-2"></i></a>
`;
};
function updateTablaEnvios(){
var peso_total_libro = get_peso_libro();
tableEnvios.rows().every(async function ( rowIdx, tableLoop, rowLoop ) {
var rowData = this.data();
const peso_envio = peso_total_libro*parseInt(rowData.cantidad)/1000.0;
var datos_tarifa = await get_precio_envio(peso_envio, rowData.paisId, rowData.cp, parseInt(rowData.entregaPieCalle)==1?'palets':'cajas');
if(datos_tarifa.id!=null){
if(peso_envio>parseFloat(datos_tarifa.peso_max)){
datos_tarifa.precio = parseFloat(datos_tarifa.peso_min) + (peso_envio-parseFloat(datos_tarifa.peso_min))*parseFloat(datos_tarifa.precio_adicional);
}
// si no se calcula linealmente
else{
m=((parseFloat(datos_tarifa.precio_max)-parseFloat(datos_tarifa.precio_min))/(parseFloat(datos_tarifa.peso_max)-parseFloat(datos_tarifa.peso_min)));
b=parseFloat(datos_tarifa.precio_max)-m*parseFloat(datos_tarifa.peso_max);
datos_tarifa.precio = parseFloat(m*peso_envio+b);
}
datos_tarifa.cantidad = parseInt($('#add_cantidad').val());
datos_tarifa.peso = peso_envio;
tableEnvios.row(rowIdx)
.data({
'tarifa_id': datos_tarifa.id,
'cantidad': rowData.cantidad,
'peso': datos_tarifa.peso.toFixed(3),
'att': rowData.att,
'email': rowData.email,
'direccion': rowData.direccion,
'cp': rowData.cp,
'municipio': rowData.municipio,
'provincia': rowData.provincia,
'paisId': rowData.paisId,
'telefono': rowData.telefono,
'proveedor': datos_tarifa.proveedor,
'proveedor_id': datos_tarifa.proveedor_id,
'precio': datos_tarifa.precio.toFixed(2),
'margen': datos_tarifa.margen,
'entregaPieCalle': rowData.entregaPieCalle,
'actionBtns_direcciones': actionBtns_direcciones,
})
.draw();
checkInsertar()
updateTotales(false, false, true)
}
else{
popErrorAlert('<?= lang('PresupuestosDirecciones.validation.no_tarifa') ?>', 'error-tarifa')
}
})
window.routes_envios = {
dataTableOfPresupuestoDirecciones: '<?= route_to('dataTableOfPresupuestoDirecciones') ?>'
}
$(document).on('click', '.delete-add-row', function(e) {
const row = $(this).closest('tr');
tableEnvios.row( row )
.remove()
.draw();
checkInsertar()
updateTotales(false, false, true)
})
$(document).on('click', '.btn-edit-add', function(e) {
const row = $(this).closest('tr');
var data = tableEnvios.row( row ).data()
$("#addressForm").attr('action','edit')
$("#addressForm").attr('row', row[0]._DT_RowIndex)
$("#addressForm").attr('presupuestodireccion_id', $(this).attr('data-id'))
var $newAddDialog = $("#addressForm")
var maximaCantidad = parseInt($('#tirada').val())
$("#add_cantidad").attr("max" , maximaCantidad);
$("#add_cantidad").val( maximaCantidad);
$("#add_cantidad").on('change', function(){
$("#add_cantidad").val(parseInt($("#add_cantidad").val())>maximaCantidad ? maximaCantidad : $("#add_cantidad").val())
})
cantidad_total = 0
tableEnvios.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var data2 = this.data();
cantidad_total += parseInt(data2.cantidad)
} );
cantidad_total -= parseInt(data.cantidad) // Si es editar tienes que restar los de la linea actual
$('#add_cantidad').attr('max-value', parseInt($('#tirada').val())-cantidad_total)
$('#add_cantidad').val(parseInt($('#tirada').val())-cantidad_total)
$('#add_att').val(data.att)
$('#add_direccion').val(data.direccion)
$('#add_email').val(data.email)
$('#add_cp').val(data.cp)
$('#add_municipio').val(data.municipio)
$('#add_provincia').val(data.provincia)
$('#add_pais_id').val(data.paisId)
$('#add_telefono').val(data.telefono)
$('#add_cantidad').val(data.cantidad)
$('#add_entregaPieCalle').prop('checked', data.entregaPieCalle==1?true:false)
$newAddDialog.modal('show')
})
const paisList = <?php echo json_encode($paisList); ?>;
$('#recoger_en_taller').change(function(){
if(this.checked) {
$('#rowTable').css('display', 'none')
$('#rowInsertar').css('display', 'none')
tableEnvios.clear().draw()
}
else{
$('#rowTable').css('display', 'flex')
$('#rowInsertar').css('display', 'flex')
tableEnvios.columns.adjust();
}
})
var tableEnvios = $('#tableOfDireccionesEnvio').DataTable( {
draw:5,
serverSide: false,
processing: true,
autoWidth: true,
responsive: true,
order: [[ 0, "asc" ]],
pageLength: 20,
lengthChange: false,
searching: false,
paging: false,
info: false,
scrollX: true,
columns: [
{ 'data': 'tarifa_id' },
{ 'data': 'cantidad' },
{ 'data': 'peso' },
{ 'data': 'att' },
{ 'data': 'email' },
{ 'data': 'direccion' },
{ 'data': 'cp' },
{ 'data': 'municipio' },
{ 'data': 'paisId' ,
render: function(data, type, row, meta) {
var value = paisList.find(element => element.id === data);
return value['nombre'];
},
},
{ 'data': 'telefono' },
{ 'data': 'proveedor'},
{ 'data': 'proveedor_id'},
{ 'data': 'precio' },
{ 'data': 'margen' },
{ 'data': 'entregaPieCalle' },
{
data: actionBtns_direcciones,
className: 'row-edit dt-center'
}
],
columnDefs: [
{
orderable: false,
searchable: false,
targets: [lastColNr_direcciones]
},
{"orderData": [ 0], "targets": 0 },
],
columnDefs: [
{
target: [0,11,13,14],
visible: false,
searchable: false
},
],
language: {
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
},
} );
function checkInsertar(){
cantidad_total = 0
tableEnvios.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var data = this.data();
cantidad_total += parseInt(data.cantidad )
} );
htmlString = ''
if(cantidad_total < parseInt($('#tirada').val())){
$('#rowInsertar').css('display', 'flex')
}
else{
$('#rowInsertar').css('display', 'none')
}
if(cantidad_total != parseInt($('#tirada').val())){
htmlString = `
<div class="alert alert-warning d-flex align-items-baseline" role="alert">
<span class="alert-icon alert-icon-lg text-primary me-2">
<i class="ti ti-bell ti-sm"></i>
</span>
<div class="d-flex flex-column ps-1">
<h5 class="alert-heading mb-2"><?= lang("PresupuestosDirecciones.validation.ejemplares_envio") ?></h5>
</div>
</div>`;
}
$('#alert-envios').html(htmlString)
}
function save_datos_envios(){
$.post( '<?= route_to('dataTableOfPresupuestoDirecciones') ?>',
{
tipo: "clear_lineas",
presupuesto_id: id,
<?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v,
})
.done(function( data ) {
tableEnvios.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var data = this.data();
$.post( '/presupuestos/presupuestodirecciones/add',
{
presupuesto_id : id,
tarifa_id : data.tarifa_id,
cantidad : data.cantidad,
peso : data.peso,
att : data.att,
email : data.email,
direccion : data.direccion,
paisId : data.paisId,
provincia : data.provincia,
municipio : data.municipio,
cp : data.cp,
telefono : data.telefono,
precio : data.precio,
margen : data.margen,
proveedor : data.proveedor,
proveedor_id : data.proveedor_id,
entregaPieCalle : data.entregaPieCalle,
<?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v,
})
});
})
}
load_datos_envios()
function load_datos_envios(){
$.post( '<?= route_to('dataTableOfPresupuestoDirecciones') ?>',
{
draw: 1,
columns: 1,
search: {
value: "",
},
presupuesto_id: id,
<?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v,
})
.done(function( data ) {
data.data.forEach((linea) => {
tableEnvios.row
.add({
'tarifa_id': linea.tarifa_id,
'cantidad': linea.cantidad,
'peso': linea.peso,
'att': linea.att,
'email': linea.email,
'direccion': linea.direccion,
'cp': linea.cp,
'municipio': linea.municipio,
'provincia': linea.provincia,
'paisId': linea.pais_id,
'telefono': linea.telefono,
'proveedor': linea.proveedor,
'proveedor_id': linea.proveedor_id,
'precio': linea.precio,
'margen': linea.margen,
'entregaPieCalle': linea.entregaPieCalle,
'actionBtns_direcciones': actionBtns_direcciones,
})
.draw();
checkInsertar()
updateTotales(false, false, true)
});
$('#tableOfDireccionesEnvio').bind('draw.dt', update_tiradas_alternativas);
})
}
window.url_get_precio_envio = '<?= route_to('processDataDirecciones') ?>';
window.error_no_tarifa_envio = '<?= lang('PresupuestosDirecciones.validation.no_tarifa') ?>'
window.token_ajax= {<?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v};
$( document ).ready(function() {
load_datos_envios();
});
<?= $this->endSection() ?>

View File

@ -0,0 +1,146 @@
$('#paginas').on("change", function () {
const url2 = window.location.href;
const url_parts2 = url2.split('/');
if(url_parts2[url_parts2.length-2] == 'edit'){
checkPaginasPresupuesto()
// Si es negro o color
if ($('#tipoImpresion').select2('data')[0].id == 'negro' ||
$('#tipoImpresion').select2('data')[0].id == 'color') {
$('#compPaginasNegro').val(parseInt($('#paginas').val())-parseInt($('#compPaginasColor').val()));
$('#compPaginasNegro').trigger('change')
}
// Si es negrohq o colorhq
if ($('#tipoImpresion').select2('data')[0].id == 'negrohq' ||
$('#tipoImpresion').select2('data')[0].id == 'colorhq') {
$('#compPaginasNegrohq').val(parseInt($('#paginas').val())-parseInt($('#compPaginasColorhq').val()));
$('#compPaginasNegrohq').trigger('change');
}
//update_servicios(false)
//updateLineasPresupuesto()
updatePresupuesto({
update_lineas: true,
update_servicios: true,
update_envios: true,
update_resumen: true,
update_tiradas_alternativas: true
})
}
});
$('.solapas_cubierta').on('change', function(){
$('#compGramajeCubierta').trigger('change')
})
$('.solapas_sobrecubierta').on('change', function(){
$('#compGramajeSobrecubierta').trigger('change')
})
$('#tirada').on("change", function (update_tiradas_alternativas = true) {
calcular_mermas()
const url2 = window.location.href;
const url_parts2 = url2.split('/');
if(url_parts2[url_parts2.length-2] == 'edit'){
//update_servicios(false)
//updateLineasPresupuesto()
if(update_tiradas_alternativas)
updatePresupuesto({
update_lineas: true,
update_servicios: false,
update_envios: false,
update_resumen: false,
update_tiradas_alternativas: false
})
else
updatePresupuesto({
update_lineas: true,
update_servicios: false,
update_envios: false,
update_resumen: false,
update_tiradas_alternativas: false
})
checkInsertar()
}
})
function calcular_mermas(){
const tirada = parseInt($('#tirada').val())
var merma = 0
htmlString = ''
if(tirada> parseInt($('#POD').val())){
merma = tirada*0.1<=30 ? tirada*0.1 : 30
}
else{
merma_lineas = []
tableLineasPresupuesto.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var rowData = this.data();
if(rowData.row_id != 'lp_guardas' && rowData.row_id != 'lp_cubierta' && rowData.row_id != 'lp_sobrecubierta'){
const formas_linea = parseInt($('#isCosido').val())==0?parseInt(rowData.formas):parseInt(rowData.formas)/2
if(formas_linea > tirada)
merma_lineas.push(formas_linea-tirada)
else
merma_lineas.push(tirada%formas_linea)
}
})
if(merma_lineas.length>0)
merma = Math.max(...merma_lineas)
else{
htmlString = `
<div class="alert alert-warning d-flex align-items-baseline" role="alert">
<span class="alert-icon alert-icon-lg text-primary me-2">
<i class="ti ti-bell ti-sm"></i>
</span>
<div class="d-flex flex-column ps-1">
<h5 class="alert-heading mb-2"><?= lang("Presupuestos.validation.no_lp_for_merma") ?></h5>
</div>
</div>`;
merma = 0
}
}
$('#mermacubierta').val(parseInt(merma))
$('#merma').val(parseInt(merma))
$('#alert-datosLibro').html(htmlString)
}
$('#papelFormatoId').select2({
allowClear: false,
});
$('#papelFormatoPersonalizado').on("click",function(){
var checkbox = document.getElementById('papelFormatoPersonalizado');
if(checkbox.checked == true){
document.getElementById("papelFormatoAncho").style.display = "block";
document.getElementById("papelFormatoAlto").style.display = "block";
$('#papelFormatoId').next(".select2-container").hide();
$('#papelFormatoId').val(0).change();
document.getElementById("label_papelFormatoId").innerHTML =
"<?=lang('Presupuestos.papelFormatoId') ?> (" +
"<?=lang('Presupuestos.papelFormatoAncho') ?> x <?=lang('Presupuestos.papelFormatoAncho') ?>)*";
}
else{
document.getElementById("papelFormatoAncho").value= "";
document.getElementById("papelFormatoAlto").value= "";
document.getElementById("papelFormatoAncho").style.display = "none";
document.getElementById("papelFormatoAlto").style.display = "none";
$('#papelFormatoId').next(".select2-container").show();
document.getElementById("label_papelFormatoId").innerHTML =
"<?=lang('Presupuestos.papelFormatoId') ?>*";
}
});

View File

@ -327,106 +327,6 @@
<!------------------------------------------->
<?= $this->section("additionalInlineJs") ?>
$('#paginas').on("change", function () {
const url2 = window.location.href;
const url_parts2 = url2.split('/');
if(url_parts2[url_parts2.length-2] == 'edit'){
checkPaginasPresupuesto()
updateLineasPresupuesto()
// Si es negro o color
if ($('#tipoImpresion').select2('data')[0].id == 'negro' ||
$('#tipoImpresion').select2('data')[0].id == 'color') {
$('#compPaginasNegro').val(parseInt($('#paginas').val())-parseInt($('#compPaginasColor').val()));
$('#compPaginasNegro').trigger('change')
}
// Si es negrohq o colorhq
if ($('#tipoImpresion').select2('data')[0].id == 'negrohq' ||
$('#tipoImpresion').select2('data')[0].id == 'colorhq') {
$('#compPaginasNegrohq').val(parseInt($('#paginas').val())-parseInt($('#compPaginasColorhq').val()));
$('#compPaginasNegrohq').trigger('change');
}
update_servicios(false)
}
});
$('.solapas_cubierta').on('change', function(){
$('#compGramajeCubierta').trigger('change')
})
$('.solapas_sobrecubierta').on('change', function(){
$('#compGramajeSobrecubierta').trigger('change')
})
$('#tirada').on("change", function () {
calcular_mermas()
const url2 = window.location.href;
const url_parts2 = url2.split('/');
if(url_parts2[url_parts2.length-2] == 'edit'){
update_servicios(false)
updateLineasPresupuesto()
checkInsertar()
}
})
function calcular_mermas(){
const tirada = parseInt($('#tirada').val())
var merma = 0
htmlString = ''
if(tirada><?php echo $POD; ?>){
merma = tirada*0.1<=30 ? tirada*0.1 : 30
}
else{
merma_lineas = []
tableLineasPresupuesto.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var rowData = this.data();
if(rowData.row_id != 'lp_guardas' && rowData.row_id != 'lp_cubierta' && rowData.row_id != 'lp_sobrecubierta'){
const formas_linea = <?php echo $isCosido; ?>==0?parseInt(rowData.formas):parseInt(rowData.formas)/2
if(formas_linea > tirada)
merma_lineas.push(formas_linea-tirada)
else
merma_lineas.push(tirada%formas_linea)
}
})
if(merma_lineas.length>0)
merma = Math.max(...merma_lineas)
else{
htmlString = `
<div class="alert alert-warning d-flex align-items-baseline" role="alert">
<span class="alert-icon alert-icon-lg text-primary me-2">
<i class="ti ti-bell ti-sm"></i>
</span>
<div class="d-flex flex-column ps-1">
<h5 class="alert-heading mb-2"><?= lang("Presupuestos.validation.no_lp_for_merma") ?></h5>
</div>
</div>`;
merma = 0
}
}
$('#mermacubierta').val(parseInt(merma))
$('#merma').val(parseInt(merma))
$('#alert-datosLibro').html(htmlString)
}
$('#papelFormatoId').select2({
allowClear: false,
});
let initTamanioPersonalizado = <?php echo ($presupuestoEntity->papel_formato_personalizado==true?1:0); ?>;
if(initTamanioPersonalizado != null){
@ -435,27 +335,7 @@ if(initTamanioPersonalizado != null){
}
}
$('#papelFormatoPersonalizado').on("click",function(){
var checkbox = document.getElementById('papelFormatoPersonalizado');
if(checkbox.checked == true){
document.getElementById("papelFormatoAncho").style.display = "block";
document.getElementById("papelFormatoAlto").style.display = "block";
$('#papelFormatoId').next(".select2-container").hide();
$('#papelFormatoId').val(0).change();
document.getElementById("label_papelFormatoId").innerHTML =
"<?=lang('Presupuestos.papelFormatoId') ?> (" +
"<?=lang('Presupuestos.papelFormatoAncho') ?> x <?=lang('Presupuestos.papelFormatoAncho') ?>)*";
}
else{
document.getElementById("papelFormatoAncho").value= "";
document.getElementById("papelFormatoAlto").value= "";
document.getElementById("papelFormatoAncho").style.display = "none";
document.getElementById("papelFormatoAlto").style.display = "none";
$('#papelFormatoId').next(".select2-container").show();
document.getElementById("label_papelFormatoId").innerHTML =
"<?=lang('Presupuestos.papelFormatoId') ?>*";
}
});
<?php if(str_contains($formAction,'edit')): ?>
var ancho_libro = getDimensionLibro().ancho;
@ -493,8 +373,7 @@ function event_change_formato(){
ancho_libro = getDimensionLibro().ancho;
alto_libro = getDimensionLibro().alto;
checkPaginasPresupuesto()
updateLineasPresupuesto()
// Si es negro o color
if ($('#tipoImpresion').select2('data')[0].id == 'negro' ||
$('#tipoImpresion').select2('data')[0].id == 'color') {
@ -509,7 +388,17 @@ function event_change_formato(){
$('#compPapelCubierta').trigger('change');
$('#compPapelSobrecubierta').trigger('change');
update_servicios(false)
checkPaginasPresupuesto()
updatePresupuesto({
update_lineas: true,
update_servicios: true,
update_envios: true,
update_resumen: true,
update_tiradas_alternativas: true
})
//updateLineasPresupuesto()
//update_servicios(false)
}
<?php endif; ?>

View File

@ -188,10 +188,10 @@
<div class="col-md-12 col-lg-2 px-4">
<select id="compCarasCubierta" name="comp_paginas_cubierta" class="form-control select2bs2 comp_cubierta_items" style="width: 100%;">
<option value="2">
<p><?= lang('Presupuestos.1cara') ?></p>
<p><?= lang('Presupuestos.unaCara') ?></p>
</option>
<option value="4">
<p><?= lang('Presupuestos.2caras') ?></p>
<p><?= lang('Presupuestos.dosCaras') ?></p>
</option>
</select>
</div>
@ -261,10 +261,10 @@
<p><?= lang('Presupuestos.sinImpresion') ?></p>
</option>
<option value="4">
<p><?= lang('Presupuestos.1cara') ?></p>
<p><?= lang('Presupuestos.unaCara') ?></p>
</option>
<option value="8">
<p><?= lang('Presupuestos.2caras') ?></p>
<p><?= lang('Presupuestos.dosCaras') ?></p>
</option>
</select>
</div>

View File

@ -250,7 +250,14 @@ $('#saveDireccionEnvio').on('click', function(){
})
}
checkInsertar()
updateTotales(false, false, true)
//updateTotales(false, false, true)
updatePresupuesto({
update_lineas: false,
update_servicios: true,
update_envios: false,
update_resumen: true,
update_tiradas_alternativas: true
})
$('#addressForm').modal("hide");
}

View File

@ -0,0 +1,91 @@
async function updatePresupuesto(
{
update_lineas = false,
update_servicios = false,
update_envios = false,
update_resumen = false,
update_tiradas_alternativas = false
}) {
new Promise(
async function(resolve, reject){
if(update_lineas){
await updateLineasPresupuesto()
}
else
resolve()
}
).then(function(){
new Promise(
async function(resolve, reject){
if(update_servicios){
await actualizar_servicios()
}
else
resolve()
}
)
}).then(function(){
new Promise(
function(resolve, reject){
if(update_envios){
updateTablaEnvios()
}
else
resolve()
}
)
}).then(function(){
new Promise(
function(resolve, reject){
if(update_resumen){
updateTotales()
}
else
resolve()
}
)
}).then(function(){
new Promise(
async function(resolve, reject){
if(update_tiradas_alternativas){
await actualizar_tiradas_alternativas()
}
else
resolve()
}
)
})
}
async function updateLineasPresupuesto(){
$('#tableLineasPresupuesto tbody tr:visible ').each(async function(){
if(this.id.endsWith('lp_bn')){
await calcularPresupuesto_bn({}, true);
}
else if(this.id.endsWith('lp_bnhq')){
await calcularPresupuesto_bnhq({}, true);
}
else if(this.id.endsWith('lp_color')){
await calcularPresupuesto_color({}, true);
}
else if(this.id.endsWith('lp_colorhq')){
await calcularPresupuesto_colorhq({}, true);
}
else if(this.id.endsWith('lp_rot_bn')){
await calcularPresupuesto_rot_bn(false, true, {})
}
else if(this.id.endsWith('lp_rot_color')){
await calcularPresupuesto_rot_color(false, true, {})
}
else if(this.id.endsWith('_cubierta')){
await calcularPresupuesto_cubierta(false, {})
}
else if(this.id.endsWith('_guardas')){
await calcularPresupuesto_guardas(false, {})
}
})
}

View File

@ -77,205 +77,7 @@
</div> <!-- //.accordion-collapse -->
</div> <!-- //.accordion-item -->
</div> <!-- //.accordion -->
<!------------------------------------------------------->
<!-- Código JS comportamiento ?????. -->
<!------------------------------------------------------->
<?= $this->section("additionalInlineJs") ?>
function updateTotales(updateLP=true, updateServicios=true, updateEnvio=true){
var totalPapel = 0
var margenPapel = 0
var totalImpresion = 0
var totalImpresionforMargen = 0
var margenImpresion = 0
var totalServicios = 0
var margenServicios = 0
var totalEnvios = 0
var margenEnvios = 0
if(updateLP){
if(typeof tableLineasPresupuesto !== 'undefined'){
tableLineasPresupuesto.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var rowData = this.data();
if(rowData.check_papel_total){
totalPapel += parseFloat($('#' + rowData.row_id + '_totalPapelPedido').val())
margenPapel += parseFloat($('#' + rowData.row_id + '_margenPapelPedido').val())
}
if(rowData.check_impresion_total){
totalImpresion += parseFloat($('#' + rowData.row_id + '_precioImpresion').val())
totalImpresion += parseFloat($('#' + rowData.row_id + '_totalClicks').val())
if(rowData.maquinaTipo=='inkjet'){
totalImpresion += parseFloat(rowData.totalTinta)
totalImpresion += parseFloat(rowData.totalCorte)
}
margenImpresion += parseFloat($('#' + rowData.row_id + '_margenImpresion').val())
margenImpresion += parseFloat($('#' + rowData.row_id + '_margenClicks').val())
if(!isNaN(parseFloat($('#' + rowData.row_id + 'lp_bn_totalTinta').val())))
totalImpresion += parseFloat($('#' + rowData.row_id + 'lp_bn_totalTinta').val())
}
})
}
totalImpresion -= margenImpresion
totalPapel -= margenPapel
var porcentajeMargenPapel = isNaN(margenPapel/(totalPapel)*100.0)?0:margenPapel/(totalPapel)*100.0
$('#porcentajeMargenPapel').text(porcentajeMargenPapel.toFixed(0) + '%')
$('#totalCostePapel').text(totalPapel.toFixed(2)+ '€')
$('#margenPapel').text(margenPapel.toFixed(2) + '€')
var porcentajeMargenImpresion = isNaN(margenImpresion/(totalImpresion)*100.0)?0:margenImpresion/(totalImpresion)*100.0
$('#porcentajeMargenImpresion').text(porcentajeMargenImpresion.toFixed(0) + '%')
$('#totalCosteImpresion').text(totalImpresion.toFixed(2) + '€')
$('#margenImpresion').text(margenImpresion.toFixed(2) + '€')
}
else{
totalPapel = parseFloat($('#totalCostePapel').text().replace('€', ''))
margenPapel = parseFloat($('#margenPapel').text().replace('€', ''))
totalImpresion = parseFloat($('#totalCosteImpresion').text().replace('€', ''))
margenImpresion = parseFloat($('#margenImpresion').text().replace('€', ''))
}
if(updateServicios){
if ( typeof tableServiciosEnc !== 'undefined' && tableServiciosEnc.rows().count() > 0){
$('#tableOfServiciosEncuadernacion tbody tr').each(function(){
var currentRow = $(this).closest("tr");
var subId = $('#tableOfServiciosEncuadernacion').DataTable().cell(currentRow,0).node().innerHTML;
var total = parseFloat($('#precio_total_encuadernado_' + subId)[0].value)
totalServicios += total
margenServicios += (total*parseFloat($('#enc_margen_' + subId)[0].innerHTML)/100.0)
})
}
if ( typeof tableServiciosAcabado !== 'undefined' && tableServiciosAcabado.rows().count() > 0){
$('#tableOfServiciosAcabado tbody tr').each(function(){
var currentRow = $(this).closest("tr");
var subId = $('#tableOfServiciosAcabado').DataTable().cell(currentRow,0).node().innerHTML;
var total = parseFloat($('#precio_total_acabado_' + subId)[0].value)
totalServicios += total
margenServicios += (total*parseFloat($('#acabado_margen_' + subId)[0].innerHTML)/100.0)
})
}
if ( typeof tableServiciosPreimpresion !== 'undefined' && tableServiciosPreimpresion.rows().count() > 0){
$('#tableOfServiciosPreimpresion tbody tr').each(function(){
var currentRow = $(this).closest("tr");
var subId = $('#tableOfServiciosPreimpresion').DataTable().cell(currentRow,0).node().innerHTML;
var total = parseFloat($('#precio_preimpresion_' + subId)[0].value)
totalServicios += total
margenServicios += (total*parseFloat($('#preimpresion_margen_' + subId)[0].innerHTML)/100.0)
})
}
if ( typeof tableServiciosManipulado !== 'undefined' && tableServiciosManipulado.rows().count() > 0){
$('#tableOfServiciosManipulado tbody tr').each(function(){
var currentRow = $(this).closest("tr");
var subId = $('#tableOfServiciosManipulado').DataTable().cell(currentRow,0).node().innerHTML;
var total = parseFloat($('#precio_total_manipulado_' + subId)[0].value)
totalServicios += total
margenServicios += (total*parseFloat($('#manipulado_margen_' + subId)[0].innerHTML)/100.0)
})
}
totalServicios -= margenServicios;
var porcentajeMargenServicios = margenServicios/(margenServicios+totalServicios)*100
$('#porcentajeMargenServicios').text(isNaN(porcentajeMargenServicios.toFixed(0))?0:porcentajeMargenServicios.toFixed(0) + '%')
$('#totalServicios').text(totalServicios.toFixed(2) + '€')
$('#margenServicios').text(margenServicios.toFixed(2) + '€')
}
else{
totalServicios = parseFloat($('#totalServicios').text().replace('€', ''))
margenServicios = parseFloat($('#margenServicios').text().replace('€', ''))
}
if(updateEnvio){
if ( typeof tableEnvios !== 'undefined' && tableEnvios.rows().count() > 0){
tableEnvios.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var data = this.data()
totalEnvios += parseFloat(data.precio)
margenEnvios += parseFloat((data.precio)*data.margen/100)
} );
}
totalEnvios -= margenEnvios
$('#totalEnvios').text(totalEnvios.toFixed(2) + '€')
$('#margenEnvios').text(margenEnvios.toFixed(2) + '€')
}
else{
totalEnvios = parseFloat($('#totalEnvios').text().replace('€', ''))
margenEnvios = parseFloat($('#margenEnvios').text().replace('€', ''))
}
var totalCostes = totalPapel + totalImpresion + totalServicios + totalEnvios
var totalMargenes = margenPapel + margenImpresion + margenServicios + margenEnvios
$('#totalCostes').text((totalCostes).toFixed(2) + '€')
$('#totalMargenes').text((totalMargenes).toFixed(2) + '€')
if($('#total_descuentoPercent').val()<0){
$('#total_descuentoPercent').val(0)
}
var totalAntesDescuento = totalCostes + totalMargenes
var totalDescuento = totalAntesDescuento * parseInt($('#total_descuentoPercent').val())/100
var totalPresupuesto = totalAntesDescuento - totalDescuento
var precioUnidad = totalPresupuesto/parseInt($('#tirada').val())
$('#totalAntesDescuento').text((totalAntesDescuento).toFixed(2) + '€')
$('#descuentoTotal').text((totalDescuento).toFixed(2) + '€')
$('#totalDespuesDecuento').text((totalPresupuesto).toFixed(2) + '€')
$('#precioUnidadPresupuesto').text((precioUnidad).toFixed(2) + '€')
}
function getValuesResumenForm(){
var formResumen = ""
formResumen += '&total_coste_papel=' + $('#totalCostePapel').text().replace('€', '')
formResumen += '&total_margen_papel=' + $('#margenPapel').text().replace('€', '')
formResumen += '&total_margenPercent_papel=' + $('#porcentajeMargenPapel').text().replace('%', '')
formResumen += '&total_coste_impresion=' + $('#totalCosteImpresion').text().replace('€', '')
formResumen += '&total_margen_impresion=' + $('#margenImpresion').text().replace('€', '')
formResumen += '&total_margenPercent_impresion=' + $('#porcentajeMargenImpresion').text().replace('%', '')
formResumen += '&total_coste_servicios=' + $('#totalServicios').text().replace('€', '')
formResumen += '&total_margen_servicios=' + $('#margenServicios').text().replace('€', '')
formResumen += '&total_margenPercent_servicios=' + $('#porcentajeMargenServicios').text().replace('%', '')
formResumen += '&total_coste_envios=' + $('#totalEnvios').text().replace('€', '')
formResumen += '&total_margen_envios=' + $('#margenEnvios').text().replace('€', '')
formResumen += '&total_costes=' + $('#totalCostes').text().replace('€', '')
formResumen += '&total_margenes=' + $('#totalMargenes').text().replace('€', '')
formResumen += '&total_antes_descuento=' + $('#totalAntesDescuento').text().replace('€', '')
formResumen += '&total_descuento=' + $('#descuentoTotal').text().replace('€', '')
formResumen += '&total_descuentoPercent=' + $('#total_descuentoPercent').val()
formResumen += '&total_presupuesto=' + $('#totalDespuesDecuento').text().replace('€', '')
formResumen += '&total_precio_unidad=' + $('#precioUnidadPresupuesto').text().replace('€', '')
return formResumen
}
$(".update-totales").on("change", function(){
updateTotales(true, true, true)
})
<?= $this->endSection() ?>

View File

@ -0,0 +1,195 @@
function updateTotales(updateLP=true, updateServicios=true, updateEnvio=true){
var totalPapel = 0
var margenPapel = 0
var totalImpresion = 0
var totalImpresionforMargen = 0
var margenImpresion = 0
var totalServicios = 0
var margenServicios = 0
var totalEnvios = 0
var margenEnvios = 0
if(updateLP){
if(typeof $("#tableLineasPresupuesto").DataTable() !== 'undefined'){
$("#tableLineasPresupuesto").DataTable().rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var rowData = this.data();
if(rowData.check_papel_total){
totalPapel += parseFloat($('#' + rowData.row_id + '_totalPapelPedido').val())
margenPapel += parseFloat($('#' + rowData.row_id + '_margenPapelPedido').val())
}
if(rowData.check_impresion_total){
totalImpresion += parseFloat($('#' + rowData.row_id + '_precioImpresion').val())
totalImpresion += parseFloat($('#' + rowData.row_id + '_totalClicks').val())
if(rowData.maquinaTipo=='inkjet'){
totalImpresion += parseFloat(rowData.totalTinta)
totalImpresion += parseFloat(rowData.totalCorte)
}
margenImpresion += parseFloat($('#' + rowData.row_id + '_margenImpresion').val())
margenImpresion += parseFloat($('#' + rowData.row_id + '_margenClicks').val())
if(!isNaN(parseFloat($('#' + rowData.row_id + 'lp_bn_totalTinta').val())))
totalImpresion += parseFloat($('#' + rowData.row_id + 'lp_bn_totalTinta').val())
}
})
}
totalImpresion -= margenImpresion
totalPapel -= margenPapel
var porcentajeMargenPapel = isNaN(margenPapel/(totalPapel)*100.0)?0:margenPapel/(totalPapel)*100.0
$('#porcentajeMargenPapel').text(porcentajeMargenPapel.toFixed(0) + '%')
$('#totalCostePapel').text(totalPapel.toFixed(2)+ '€')
$('#margenPapel').text(margenPapel.toFixed(2) + '€')
var porcentajeMargenImpresion = isNaN(margenImpresion/(totalImpresion)*100.0)?0:margenImpresion/(totalImpresion)*100.0
$('#porcentajeMargenImpresion').text(porcentajeMargenImpresion.toFixed(0) + '%')
$('#totalCosteImpresion').text(totalImpresion.toFixed(2) + '€')
$('#margenImpresion').text(margenImpresion.toFixed(2) + '€')
}
else{
totalPapel = parseFloat($('#totalCostePapel').text().replace('€', ''))
margenPapel = parseFloat($('#margenPapel').text().replace('€', ''))
totalImpresion = parseFloat($('#totalCosteImpresion').text().replace('€', ''))
margenImpresion = parseFloat($('#margenImpresion').text().replace('€', ''))
}
if(updateServicios){
if ( typeof $("#tableOfServiciosEncuadernacion").DataTable() !== 'undefined' && $("#tableOfServiciosEncuadernacion").DataTable().rows().count() > 0){
$('#tableOfServiciosEncuadernacion tbody tr').each(function(){
var currentRow = $(this).closest("tr");
var subId = $('#tableOfServiciosEncuadernacion').DataTable().cell(currentRow,0).node().innerHTML;
var total = parseFloat($('#precio_total_encuadernado_' + subId)[0].value)
totalServicios += total
margenServicios += (total*parseFloat($('#enc_margen_' + subId)[0].innerHTML)/100.0)
})
}
if ( typeof $("#tableOfServiciosAcabado").DataTable() !== 'undefined' && $("#tableOfServiciosAcabado").DataTable().rows().count() > 0){
$('#tableOfServiciosAcabado tbody tr').each(function(){
var currentRow = $(this).closest("tr");
var subId = $('#tableOfServiciosAcabado').DataTable().cell(currentRow,0).node().innerHTML;
var total = parseFloat($('#precio_total_acabado_' + subId)[0].value)
totalServicios += total
margenServicios += (total*parseFloat($('#acabado_margen_' + subId)[0].innerHTML)/100.0)
})
}
if ( typeof $("#tableOfServiciosPreimpresion").DataTable() !== 'undefined' && $("#tableOfServiciosPreimpresion").DataTable().rows().count() > 0){
$('#tableOfServiciosPreimpresion tbody tr').each(function(){
var currentRow = $(this).closest("tr");
var subId = $('#tableOfServiciosPreimpresion').DataTable().cell(currentRow,0).node().innerHTML;
var total = parseFloat($('#precio_preimpresion_' + subId)[0].value)
totalServicios += total
margenServicios += (total*parseFloat($('#preimpresion_margen_' + subId)[0].innerHTML)/100.0)
})
}
if ( typeof $("#tableOfServiciosManipulado").DataTable() !== 'undefined' && $("#tableOfServiciosManipulado").DataTable().rows().count() > 0){
$('#tableOfServiciosManipulado tbody tr').each(function(){
var currentRow = $(this).closest("tr");
var subId = $('#tableOfServiciosManipulado').DataTable().cell(currentRow,0).node().innerHTML;
var total = parseFloat($('#precio_total_manipulado_' + subId)[0].value)
totalServicios += total
margenServicios += (total*parseFloat($('#manipulado_margen_' + subId)[0].innerHTML)/100.0)
})
}
totalServicios -= margenServicios;
var porcentajeMargenServicios = margenServicios/(margenServicios+totalServicios)*100
$('#porcentajeMargenServicios').text(isNaN(porcentajeMargenServicios.toFixed(0))?0:porcentajeMargenServicios.toFixed(0) + '%')
$('#totalServicios').text(totalServicios.toFixed(2) + '€')
$('#margenServicios').text(margenServicios.toFixed(2) + '€')
}
else{
totalServicios = parseFloat($('#totalServicios').text().replace('€', ''))
margenServicios = parseFloat($('#margenServicios').text().replace('€', ''))
}
if(updateEnvio){
if ( typeof $('#tableOfDireccionesEnvio').DataTable() !== 'undefined' && $('#tableOfDireccionesEnvio').DataTable().rows().count() > 0){
$('#tableOfDireccionesEnvio').DataTable().rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var data = this.data()
totalEnvios += parseFloat(data.precio)
margenEnvios += parseFloat((data.precio)*data.margen/100)
} );
}
totalEnvios -= margenEnvios
$('#totalEnvios').text(totalEnvios.toFixed(2) + '€')
$('#margenEnvios').text(margenEnvios.toFixed(2) + '€')
}
else{
totalEnvios = parseFloat($('#totalEnvios').text().replace('€', ''))
margenEnvios = parseFloat($('#margenEnvios').text().replace('€', ''))
}
var totalCostes = totalPapel + totalImpresion + totalServicios + totalEnvios
var totalMargenes = margenPapel + margenImpresion + margenServicios + margenEnvios
$('#totalCostes').text((totalCostes).toFixed(2) + '€')
$('#totalMargenes').text((totalMargenes).toFixed(2) + '€')
if($('#total_descuentoPercent').val()<0){
$('#total_descuentoPercent').val(0)
}
var totalAntesDescuento = totalCostes + totalMargenes
var totalDescuento = totalAntesDescuento * parseInt($('#total_descuentoPercent').val())/100
var totalPresupuesto = totalAntesDescuento - totalDescuento
var precioUnidad = totalPresupuesto/parseInt($('#tirada').val())
$('#totalAntesDescuento').text((totalAntesDescuento).toFixed(2) + '€')
$('#descuentoTotal').text((totalDescuento).toFixed(2) + '€')
$('#totalDespuesDecuento').text((totalPresupuesto).toFixed(2) + '€')
$('#precioUnidadPresupuesto').text((precioUnidad).toFixed(2) + '€')
}
function getValuesResumenForm(){
var formResumen = ""
formResumen += '&total_coste_papel=' + $('#totalCostePapel').text().replace('€', '')
formResumen += '&total_margen_papel=' + $('#margenPapel').text().replace('€', '')
formResumen += '&total_margenPercent_papel=' + $('#porcentajeMargenPapel').text().replace('%', '')
formResumen += '&total_coste_impresion=' + $('#totalCosteImpresion').text().replace('€', '')
formResumen += '&total_margen_impresion=' + $('#margenImpresion').text().replace('€', '')
formResumen += '&total_margenPercent_impresion=' + $('#porcentajeMargenImpresion').text().replace('%', '')
formResumen += '&total_coste_servicios=' + $('#totalServicios').text().replace('€', '')
formResumen += '&total_margen_servicios=' + $('#margenServicios').text().replace('€', '')
formResumen += '&total_margenPercent_servicios=' + $('#porcentajeMargenServicios').text().replace('%', '')
formResumen += '&total_coste_envios=' + $('#totalEnvios').text().replace('€', '')
formResumen += '&total_margen_envios=' + $('#margenEnvios').text().replace('€', '')
formResumen += '&total_costes=' + $('#totalCostes').text().replace('€', '')
formResumen += '&total_margenes=' + $('#totalMargenes').text().replace('€', '')
formResumen += '&total_antes_descuento=' + $('#totalAntesDescuento').text().replace('€', '')
formResumen += '&total_descuento=' + $('#descuentoTotal').text().replace('€', '')
formResumen += '&total_descuentoPercent=' + $('#total_descuentoPercent').val()
formResumen += '&total_presupuesto=' + $('#totalDespuesDecuento').text().replace('€', '')
formResumen += '&total_precio_unidad=' + $('#precioUnidadPresupuesto').text().replace('€', '')
return formResumen
}
$(".update-totales").on("change", function(){
updatePresupuesto({
update_lineas: false,
update_servicios: false,
update_envios: false,
update_resumen: true,
update_tiradas_alternativas: false
})
})

View File

@ -5,6 +5,7 @@ const lastColNr_tiradasAlt = $('#tableTiradas').find("tr:first th").length - 1;
// Función para generar los botones de acción de la tabla de tiradas
const actionBtns_tiradasAlt = function (data) {
return `
<a href="javascript:void(0);"><i class="ti ti-check ti-sm comfirm-tirada-alt mx-2" data-id="${data.row_id}"></i></a>
<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete-tirada mx-2" data-id="${data.row_id}"></i></a>
`;
};
@ -22,7 +23,7 @@ var tableTiradas;
initTableTiradas();
fill_tiradas_alternativas();
$('.tiradas-alternativas').each(function() {
/*$('.tiradas-alternativas').each(function() {
if ($(this).is('input')) {
$(this).bind('change', update_tiradas_alternativas);
} else if ($(this).is('button')) {
@ -34,21 +35,23 @@ var tableTiradas;
// para los botones de borrar
$(this).bind('click', update_tiradas_alternativas);
}
});
});*/
})();
function update_tiradas_alternativas(){
// se obtiene la primera columna de la tabla de tiradas
const data = tableTiradas.rows().data().toArray();
// se borra la tabla de tiradas
tableTiradas.clear().draw();
const tiradas = data.map(row => row.tirada);
// por cada tirada, se añade una fila a la tabla de tiradas
tiradas.forEach(tirada => {
add_tirada_alternativa(tirada);
});
async function actualizar_tiradas_alternativas(){
if(tableTiradas !== undefined && tableTiradas.rows().count() > 0){
// se obtiene la primera columna de la tabla de tiradas
const data = tableTiradas.rows().data().toArray();
// se borra la tabla de tiradas
tableTiradas.clear().draw();
const tiradas = data.map(row => row.tirada);
// por cada tirada, se añade una fila a la tabla de tiradas
await tiradas.forEach(async function(tirada){
await add_tirada_alternativa(tirada);
});
}
}
@ -62,7 +65,7 @@ $('#add_tirada_alt').on('click', function () {
// Funcion para añadir una tirada alternativa
function add_tirada_alternativa(tirada_alt) {
async function add_tirada_alternativa(tirada_alt) {
// se comprueba que la tirada no existe ya en la tabla
const exists = tableTiradas.rows().data().toArray().some(row => row.tirada == tirada_alt);
@ -92,7 +95,7 @@ function add_tirada_alternativa(tirada_alt) {
datos = Object.assign(datos, window.token_ajax);
// Se realiza la petición AJAX
$.ajax({
await $.ajax({
type: "POST",
url: window.get_tirada_url,
data: datos,
@ -109,28 +112,38 @@ function add_tirada_alternativa(tirada_alt) {
if(data.lineas.length >0){
// Se cogen los valores de la linea con los datos correspondientes
$.each(data.lineas, function(key, value) {
data.lineas.forEach(function(value) {
coste_total += value.total_coste;
margen_total += value.total_margen;
});
//console.log(datos.tirada);
// Se obtiene el precio de los servicios
const valueAcabados = await get_servAcabados_tiradasAlternativas(parseInt(datos.tirada));
costes_servicios += valueAcabados.coste;
margen_servicios += valueAcabados.margen;
costes_servicios += parseFloat(valueAcabados.coste);
margen_servicios += parseFloat(valueAcabados.margen);
//console.log('coste acabados ('+ datos.tirada +'): ' + valueAcabados.coste);
const valueEncuadernacion = await get_servEncuadernacion_tiradasAlternativas(
parseInt(datos.tirada), parseInt( $('#paginas').val()), parseInt(dimension.ancho), parseInt(dimension.alto));
costes_servicios += valueEncuadernacion.coste;
margen_servicios += valueEncuadernacion.margen;
costes_servicios += parseFloat(valueEncuadernacion.coste);
margen_servicios += parseFloat(valueEncuadernacion.margen);
//console.log('coste encuadernacion ('+ datos.tirada +'): ' + valueEncuadernacion.coste);
const valueManipulado = await get_servManipulado_tiradasAlternativas(parseInt(datos.tirada));
costes_servicios += valueManipulado.coste;
margen_servicios += valueManipulado.margen;
costes_servicios += parseFloat(valueManipulado.coste);
margen_servicios += parseFloat(valueManipulado.margen);
//console.log('coste manipulado ('+ datos.tirada +'): ' + valueManipulado.coste);
const valuePreimpresion = await get_servPreimpresion_tiradasAlternativas(parseInt(datos.tirada));
costes_servicios += valuePreimpresion.coste;
margen_servicios += valuePreimpresion.margen;
costes_servicios += parseFloat(valuePreimpresion.coste);
margen_servicios += parseFloat(valuePreimpresion.margen);
//console.log('coste preimpresion ('+ datos.tirada +'): ' + valuePreimpresion.coste);
const valueTransporte = await get_coste_envio_tiradasAlternativas(parseInt(datos.tirada));
coste_envio = valueTransporte.coste;
@ -157,7 +170,7 @@ function add_tirada_alternativa(tirada_alt) {
}
else {
var htmlString = '';
if(!typeIsOk){
if(typeIsOk){
htmlString = `
<div class="alert alert-warning d-flex align-items-baseline" role="alert">
<span class="alert-icon alert-icon-lg text-primary me-2">
@ -180,7 +193,11 @@ function add_tirada_alternativa(tirada_alt) {
</div>
</div>`;
}
$('#alert-tiradas_alt').html(htmlString);
$('#alert-tiradas_alt').hide().empty().html(htmlString).fadeIn("slow", function(){
setTimeout(function(){
$('#alert-tiradas_alt').fadeOut("slow");
}, 5000);
});
}
@ -212,7 +229,7 @@ function initTableTiradas() {
"paging": false,
"info": false,
"searching": false,
"ordering": false,
"ordering": true,
"autoWidth": false,
"responsive": true,
"columnDefs": [
@ -238,6 +255,7 @@ function initTableTiradas() {
className: 'row-edit dt-center'
}
],
order: [[0, 'asc']]
});
}
@ -251,6 +269,19 @@ $(document).on('click', '.btn-delete-tirada', function (e) {
})
// Función para usar la tirada alternativa como tirada principal
$(document).on('click', '.comfirm-tirada-alt', function (e) {
const row = $(this).closest('tr');
const data = tableTiradas.row(row).data();
updateTablaEnvios($('#tirada').val(), data.tirada).then(function(){
$('#tirada').val(data.tirada);
$('#tirada').trigger('change', [false]);
})
})
// Función para generar el JSON de las lineas de presupuesto para calcular las tiradas
function generate_json_tiradas() {

View File

@ -243,6 +243,12 @@
const url = window.location.href;
const url_parts = url.split('/');
if (url_parts[url_parts.length - 2] == 'edit') {
id = url_parts[url_parts.length - 1];
} else {
id = -1;
}
<?php if (str_contains($formAction, 'edit')): ?>
<?= $this->section("additionalInlineJs") ?>
@ -250,15 +256,7 @@ const url_parts = url.split('/');
function generate_json_tiradas() {
const data = tableTiradas.rows().data().toArray();
$('#tirada_alternativa_json_data').val(JSON.stringify(data));
}
if (url_parts[url_parts.length - 2] == 'edit') {
id = url_parts[url_parts.length - 1];
} else {
id = -1;
}
}
$('#presupuestoForm').on("submit", function(event) {
event.preventDefault();
@ -298,6 +296,10 @@ const url_parts = url.split('/');
<?php endif; ?>
<!------------------------------------------->
<!-- Variables generales usadas en los ficheros js -->
<!------------------------------------------->
@ -306,7 +308,7 @@ const url_parts = url.split('/');
window.token_ajax= {<?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v};
window.csrf_token = '<?= csrf_token() ?>';
<?= $this->endSection() ?>
<?php endif; ?>
@ -327,12 +329,17 @@ const url_parts = url.split('/');
<script src="<?= site_url("themes/vuexy/vendor/libs/datatables-sk/plugins/select/dataTables.select.min.js") ?>"></script>
<script src="<?= site_url('themes/vuexy/js/datatables-editor/dataTables.editor.min.js') ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/autosize/autosize.js') ?>"></script>
<script src="<?= site_url('js_loader/translate_js/Presupuestos') ?>"></script>
<script src="<?= site_url('js_loader/datosLibro_js') ?>"></script>
<?php if (str_contains($formAction, 'edit')): ?>
<script src="<?= site_url('js_loader/comparadorCosidoTapaBlanda_js') ?>"></script>
<script src="<?= site_url('js_loader/previsualizador_js') ?>"></script>
<script src="<?= site_url('js_loader/lineasPresupuesto_js') ?>"></script>
<script src="<?= site_url('js_loader/tiradasAlternativas_js') ?>"></script>
<script src="<?= site_url('js_loader/datosServicios_js') ?>"></script>
<script src="<?= site_url('js_loader/datosEnvios_js') ?>"></script>
<script src="<?= site_url('js_loader/resumenPresupuestos_js') ?>"></script>
<script src="<?= site_url('js_loader/presupuestos_js') ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/two/two.js') ?>"></script>
<?php endif; ?>
<?= $this->endSection() ?>