<div class="accordion mt-3" id="accordionLineasPresupuesto">
    <div class="card accordion-item active">
        <h2 class="accordion-header" id="headingOne">
            <button type="button" class="accordion-button" data-bs-toggle="collapse" data-bs-target="#accordionLineasPresupuestoTip" aria-expanded="false" aria-controls="accordionLineasPresupuestoTip">
                <h4><?= lang("Presupuestos.lineasPresupuesto") ?></h4>
            </button>
        </h2>

        <div id="accordionLineasPresupuestoTip" class="accordion-collapse collapse show" data-bs-parent="#accordionLineasPresupuesto">
            <div class="accordion-body">

                    <!----------------------------------------------------------------------------->
                    <div id="divAlarmasLineasPresupuesto"></div>
                    <!----------------------------------------------------------------------------->

                    <table id="tableLineasPresupuesto" class="comparator-table table dt-responsive dataTable" style="width: 100%;">
                        <thead>
                            <tr>
                                <th width="10px"></th>
                                <th></th>
                                <th></th>
                                <th></th>
                                <th></th>
                                <th></th>
                                <th></th>
                                <th></th>
                                <th></th>
                                <th></th>
                                <th class="lp-header" width="33px"></th>
                                <th class="lp-header" style="max-width:80px;"><?= lang('Presupuestos.paginas') ?></th>
                                <th class="lp-header"><?= lang('Presupuestos.papel') ?></th>
                                <th class="lp-header" width="100px"><?= lang('Presupuestos.gramaje') ?></th>
                                <th class="lp-header"><?= lang('Presupuestos.marca') ?></th>
                                <th class="lp-header"><?= lang('Presupuestos.maquina') ?></th>
                                <th class="lp-header" width="100px"><?= lang('Presupuestos.tiempo') ?></th>
                                <th class="lp-header" width="100px"><?= lang('Presupuestos.lomo') ?></th>
                                <th class="lp-header" width="100px"><?= lang('Presupuestos.peso') ?></th>
                                <th class="lp-header" width="100px"><?= lang('Presupuestos.totalLinea') ?></th>
                                <th style="max-width:40px;"></th>
                            </tr>
                        </thead>
                        <tbody>

                        </tbody>
                    </table>

                    <div class='row'>
                        <div class='col-md-12 col-lg-9 px-4'></div>
                        <div class='col-md-12 col-lg-3 px-4'>
                            <div class="input-group">
                                <label class="input-group-text" for="addLineasPresupuesto"><?= lang('Presupuestos.addLineaPresupuesto') ?></label>
                                <select class="form-select" id="addLineasPresupuesto" data-native-menu="false">
                                    <option></option>
                                    <option value="lp_bn"><?= lang('Presupuestos.bn') ?></option>
                                    <option value="lp_bnhq"><?= lang('Presupuestos.bnhq') ?></option>
                                    <option value="lp_color"><?= lang('Presupuestos.color') ?></option>
                                    <option value="lp_colorhq"><?= lang('Presupuestos.colorhq') ?></option>
                                    <option value="lp_rot_bn"><?= lang('Presupuestos.rotativa_bn') ?></option>
                                    <option value="lp_rot_color"><?= lang('Presupuestos.rotativa_color') ?></option>
                                    <option value="lp_cubierta"><?= lang('Presupuestos.cubierta') ?></option>
                                </select>
                            </div>
                        </div>
                    </div>

            </div>
        </div>
    </div>
</div>

<!------------------------------------------->
<!-- Código JS de las lineas de presupuesto. -->
<!------------------------------------------->
<?= $this->section("additionalInlineJs") ?>
const papelGenericoNegroList = <?php echo json_encode($papelGenericoNegroList); ?>;
const papelGenericoNegroHQList = <?php echo json_encode($papelGenericoNegroHQList); ?>;
const papelGenericoColorList = <?php echo json_encode($papelGenericoColorList); ?>;
const papelGenericoColorHQList = <?php echo json_encode($papelGenericoColorHQList); ?>;
const papelGenericoCubiertaList = <?php echo json_encode($papelGenericoCubiertaList); ?>;
const papelGenericoSobrecubiertaList = <?php echo json_encode($papelGenericoSobrecubiertaList); ?>;
const papelGenericoRotativaNegroList = <?php echo json_encode($papelGenericoRotativaNegroList); ?>;
const papelGenericoRotativaColorList = <?php echo json_encode($papelGenericoRotativaColorList); ?>;


// Formatting function for row details - modify as you need
function format(d) {
    var value = '<tr>'+
            '<td></td>'+
            '<td></td>'+
            '<td colspan="10">'+
                '<div class="row flex-grow-1 d-flex justify-content-center align-items-end">' +
                    '<div class="col-md-12 col-lg-1">' +
                        "<?= lang("Presupuestos.numeroPliegos") ?>" + 
                        '<input id="' + d.row_id +'_numeroPliegos" name="' + d.row_id +'_numeroPliegos" class="lp-input lp-cell lp-cell-disabled ' + d.row_class +'-input" type="text" value="' + d.numeroPliegos +'">'+
                    '</div>'+
                    '<div class="col-md-12 col-lg-1">' +
                        "<?= lang("Presupuestos.pliegosPedido") ?>" + 
                        '<input id="' + d.row_id +'_pliegosPedido" name="' + d.row_id +'_pliegosPedido" class="lp-input lp-cell lp-cell-disabled ' + d.row_class +'-input" type="text" value="' + d.pliegosPedido +'">'+
                    '</div>'+
                    '<div class="col-md-12 col-lg-1">' +
                        "<?= lang("Presupuestos.precioPliego") ?>" + 
                        '<input id="' + d.row_id +'_precioPliego" name="' + d.row_id +'_precioPliego" class="lp-input lp-cell lp-cell-disabled ' + d.row_class +'-input" type="text" value="' + d.precioPliego +'">'+
                    '</div>'+
                    '<div class="col-md-12 col-lg-1">' +
                        "<?= lang("Presupuestos.libro") ?>" + 
                        '<input id="' + d.row_id +'_libro" name="' + d.row_id +'_libro" class="lp-input lp-cell lp-cell-disabled ' + d.row_class +'-input" type="text" value="' + d.libro +'">'+
                    '</div>'+
                    '<div class="col-md-12 col-lg-1">' +
                        "<?= lang("Presupuestos.totalPapelPedido") ?>" + 
                        '<input id="' + d.row_id +'_totalPapelPedido" name="' + d.row_id +'_totalPapelPedido" class="lp-input lp-cell lp-cell-disabled ' + d.row_class +'-input" type="text" value="' + d.totalPapelPedido +'">'+
                    '</div>'+
                    '<input id="' + d.row_id +'_margenPapelPedido" name="' + d.row_id +'_margenPapelPedido" readonly class="lp-input lp-cell lp-cell-disabled ' + d.row_class + '-input" type="text" value="' + d.margenPapelPedido +'" style="display: none;">' +
                    '<div class="d-flex col-md-auto justify-content-center align-items-center">' +
                        '<input id="' + d.row_id + '_checkPapel" name="' + d.row_id +'_checkPapel" class="update-totales" style="bottom:0;width: 15px; padding: 0; margin:0;" type="checkbox" checked>' + 
                    '</div>'+
                    '<div class="col-md-1 col-lg-1">' +
                        "<?= lang("Presupuestos.click") ?>" + 
                        '<input id="' + d.row_id +'_click" name="' + d.row_id +'_click" class="lp-input lp-cell lp-cell-disabled ' + d.row_class +'-input" type="text" value="' + d.click +'">'+
                    '</div>'+
                    '<div class="col-md-12 col-lg-1">' +
                        "<?= lang("Presupuestos.totalClicks") ?>" + 
                        '<input id="' + d.row_id +'_totalClicks" name="' + d.row_id +'_totalClicks" class="lp-input lp-cell lp-cell-disabled ' + d.row_class +'-input" type="text" value="' + d.totalClicks +'">'+
                    '</div>'+
                    '<div class="col-md-12 col-lg-1">' +
                        "<?= lang("Presupuestos.horas") ?>" + 
                        '<input id="' + d.row_id +'_horasMaquina" name="' + d.row_id +'_horasMaquina" class="lp-input lp-cell lp-cell-disabled ' + d.row_class +'-input" type="text" value="' + d.horasMaquina +'">'+
                    '</div>'+
                    '<div class="col-md-12 col-lg-1">' +
                        "<?= lang("Presupuestos.precioHora") ?>" + 
                        '<input id="' + d.row_id +'_precioHora" name="' + d.row_id +'_precioHora" class="lp-input lp-cell lp-cell-disabled ' + d.row_class +'-input" type="text" value="' + d.precioHora +'">'+
                    '</div>'+
                    '<div class="col-md-12 col-lg-1">' +
                        "<?= lang("Presupuestos.precioImpresion") ?>" + 
                        '<input id="' + d.row_id +'_precioImpresion" name="' + d.row_id +'_precioImpresion" class="lp-input lp-cell lp-cell-disabled ' + d.row_class +'-input" type="text" value="' + d.precioImpresion +'">'+
                    '</div>'+
                    '<div class="d-flex col-md-auto justify-content-center align-items-center">' +
                        '<input id="' + d.row_id + '_checkClicks" name="' + d.row_id +'_checkClicks" class="update-totales" style="bottom:0;width: 15px; padding: 0; margin:0;" type="checkbox" checked>' + 
                    '</div>'+
                    '<input id="' + d.row_id +'_margenImpresion" name="' + d.row_id +'_margenImpresion" readonly class="lp-input lp-cell lp-cell-disabled ' + d.row_class + '-input" type="text" value="' + d.margenImpresion +'" style="display: none;">' +
                '</div>' +
            '</td>'
            
        
    
    
    value += '</tr>'

    if(d.maquinaTipo=='inkjet'){
        value +=
        '<tr>'+
            '<td></td>'+
            '<td></td>'+
            '<td colspan="10">'+
                '<div class="row flex-grow-1 d-flex justify-content-center align-items-end">' +
                    '<div class="col-md-12 col-lg-1">' + 
                        '<button id="' + d.row_id +'_defecto" name="' + d.row_id +'_defecto" type="button" class="btn btn-label-primary waves-effect lp-button"><?= lang('Presupuestos.porDefecto') ?></button>' +
                    '</div>'+
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.numPagColor') ?>' +
                        '<input type="text" id="' + d.row_id +'_numPagColor" name="' + d.row_id +'_numPagColor" class="lp-cell lp-input lp-cell-disabled" readonly value="' + d.numPagColor +'">' + 
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.saturacion') ?>' + 
                        '<input type="text" id="' + d.row_id +'_saturacion" name="' + d.row_id +'_saturacion" class="lp-cell lp-input lp-cell-disabled" readonly value="100">' + 
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.cobNegro') ?>' + 
                        '<input type="text" id="' + d.row_id +'_cobNegro" name="' + d.row_id +'_cobNegro" class="lp-cell lp-input ' + d.row_class +'-input ' + d.row_class +'-tipologia" value="' + d.cobNegro +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.cobCyan') ?>' +
                        '<input type="text" id="' + d.row_id +'_cobCyan" name="' + d.row_id +'_cobCyan" class="lp-cell lp-input ' + d.row_class +'-input ' + d.row_class +'-tipologia" value="' + d.cobCyan +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.cobMagenta') ?>' +
                        '<input type="text" id="' + d.row_id +'_cobMagenta" name="' + d.row_id +'_cobMagenta" class="lp-cell lp-input ' + d.row_class +'-input ' + d.row_class +'-tipologia" value="' + d.cobMagenta +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.cobAmarillo') ?>' +
                        '<input type="text" id="' + d.row_id +'_cobAmarillo" name="' + d.row_id +'_cobAmarillo" class="lp-cell lp-input ' + d.row_class +'-input ' + d.row_class +'-tipologia" value="' + d.cobAmarillo +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.gotaNegro') ?>' +
                        '<input type="text" id="' + d.row_id +'_gotaNegro" name="' + d.row_id +'_gotaNegro" class="lp-cell lp-input ' + d.row_class +'-input ' + d.row_class +'-tipologia" value="' + d.gotaNegro +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1 ">' +
                        '<?= lang('Presupuestos.gotaColor') ?>' +
                        '<input type="text" id="' + d.row_id +'_gotaColor" name="' + d.row_id +'_gotaColor" class="lp-cell lp-input ' + d.row_class +'-input ' + d.row_class +'-tipologia" value="' + d.gotaColor +'">' +
                    '</div>' + 
                    '<div class="col-md-12 col-lg-1" style="display: grid;" >' + 
                        '<?= lang('Presupuestos.aFavorFibra') ?>'  +
                        '<input type="checkbox" id="' + d.row_id +'_aFavorFibra" name="' + d.row_id +'_aFavorFibra" ' + (d.aFavorFibra==true?'checked':'') + '>' + 
                    '</div>' + 
                    '<div class="col-md-12 col-lg-1">' + 
                        '<button id="' + d.row_id +'_vercalculos" name="' + d.row_id +'_vercalculos" type="button" class="btn btn-label-primary waves-effect lp-button"><?= lang('Presupuestos.verCalculos') ?></button>' + 
                    '</div>' +
                '</div>' +
                
            '</td>' +
        '</tr>' +
        '<tr class="calculos_' + d.row_id + '" style="display: none;">'+
            '<td></td>'+
            '<td></td>'+
            '<td colspan="10">'+
                '<div class="row flex-grow-1 d-flex justify-content-center align-items-end">' +
                   (d.row_id.includes('rot')?'<div class="col-md-12 col-lg-1">': '<div class="col-md-12 col-lg-1" style="display:none;">') +
                        '<?= lang('Presupuestos.metrosMinuto') ?>' +
                        '<input type="text" id="' + d.row_id +'_metrosMinuto" name="' + d.row_id +'_metrosMinuto" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.metrosMinuto +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.resolucion') ?>' +
                        '<input type="text" id="' + d.row_id +'_resolucion" name="' + d.row_id +'_resolucion" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.resolucion +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.areaPaginas') ?>' +
                        '<input type="text" id="' + d.row_id +'_areaPaginas" name="' + d.row_id +'_areaPaginas" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.areaPaginas +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.gotasNegro') ?>' +
                        '<input type="text" id="' + d.row_id +'_gotasNegro" name="' + d.row_id +'_gotasNegro" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.gotasNegro +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.gotasCyan') ?>' +
                        '<input type="text" id="' + d.row_id +'_gotasCyan" name="' + d.row_id +'_gotasCyan" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.gotasCyan +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.gotasMagenta') ?>' +
                        '<input type="text" id="' + d.row_id +'_gotasMagenta" name="' + d.row_id +'_gotasMagenta" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.gotasMagenta +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.gotasAmarillo') ?>' +
                        '<input type="text" id="' + d.row_id +'_gotasAmarillo" name="' + d.row_id +'_gotasAmarillo" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.gotasAmarillo +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.precioPagNegro') ?>' +
                        '<input type="text" id="' + d.row_id +'_precioPagNegro" name="' + d.row_id +'_precioPagNegro" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.precioPagNegro +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.precioPagColor') ?>' +
                        '<input type="text" id="' + d.row_id +'_precioPagColor" name="' + d.row_id +'_precioPagColor" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.precioPagColor +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.factorAltura') ?>' + 
                        '<input type="text" id="' + d.row_id +'_factorAltura" name="' + d.row_id +'_factorAltura" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.factorAltura +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.factorAnchura') ?>' +
                        '<input type="text" id="' + d.row_id +'_factorAnchura" name="' + d.row_id +'_factorAnchura" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.factorAnchura +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.paginasPliego') ?>' +
                        '<input type="text" id="' + d.row_id +'_paginasPliego" name="' + d.row_id +'_paginasPliego" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.paginasPliego +'">' +
                    '</div>' +
                '</div>' +
            '</td>' +
        '</tr>' +
        '<tr class="calculos_' + d.row_id + '" style="display: none;">'+
            '<td></td>'+
            '<td></td>'+
            '<td colspan="10">'+
                '<div class="row flex-grow-1 d-flex justify-content-center align-items-end">' +
                    (d.row_id.includes('rot')?'<div class="col-md-12 col-lg-1">': '<div class="col-md-12 col-lg-1" style="display:none;">') +
                        '<?= lang('Presupuestos.metrosPapelLibro') ?>' +
                        '<input type="text" id="' + d.row_id +'_metrosPapelLibro" name="' + d.row_id +'_metrosPapelLibro" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.metrosPapelLibro +'">' +
                    '</div>' +
                    (d.row_id.includes('rot')?'<div class="col-md-12 col-lg-1">': '<div class="col-md-12 col-lg-1" style="display:none;">') +
                        '<?= lang('Presupuestos.metrosPapelTotal') ?>' +
                        '<input type="text" id="' + d.row_id +'_metrosPapelTotal" name="' + d.row_id +'_metrosPapelTotal" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.metrosPapelTotal +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.clicksLibro') ?>' +
                        '<input type="text" id="' + d.row_id +'_clicksLibro" name="' + d.row_id +'_clicksLibro" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.clicksLibro +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.gTintaNegro') ?>' +
                        '<input type="text" id="' + d.row_id +'_gTintaNegro" name="' + d.row_id +'_gTintaNegro" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.gTintaNegro +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.gTintaCyan') ?>' +
                        '<input type="text" id="' + d.row_id +'_gTintaCyan" name="' + d.row_id +'_gTintaCyan" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.gTintaCyan +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.gTintaMagenta') ?>' +
                        '<input type="text" id="' + d.row_id +'_gTintaMagenta" name="' + d.row_id +'_gTintaMagenta" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.gTintaMagenta +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.gTintaAmarillo') ?>' +
                        '<input type="text" id="' + d.row_id +'_gTintaAmarillo" name="' + d.row_id +'_gTintaAmarillo" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.gTintaAmarillo +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.clicksPedido') ?>' +
                        '<input type="text" id="' + d.row_id +'_clicksPedido" name="' + d.row_id +'_clicksPedido" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.clicksPedido +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.totalClicks') ?>' +
                        '<input type="text" id="' + d.row_id +'_totalClicksPedido" name="' + d.row_id +'_totalClicksPedido" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.totalClicksPedido +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.totalTinta') ?>' +
                        '<input type="text" id="' + d.row_id +'_totalTinta" name="' + d.row_id +'_totalTinta" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.totalTinta +'">' +
                    '</div>' +
                    (d.row_id.includes('rot')?'<div class="col-md-12 col-lg-1">': '<div class="col-md-12 col-lg-1" style="display:none;">') +
                        '<?= lang('Presupuestos.totalCorte') ?>' +
                        '<input type="text" id="' + d.row_id +'_totalCorte" name="' + d.row_id +'_totalCorte" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.totalCorte +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.totalImpresion') ?>' +
                        '<input type="text" id="' + d.row_id +'_totalImpresion" name="' + d.row_id +'_totalImpresion" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.totalImpresion +'">' +
                    '</div>' +
                '</div>' +
            '</td>' +
        '</tr>' +
        '<tr class="calculos_' + d.row_id + '" style="display: none;">'+
            '<td></td>'+
            '<td></td>'+
            '<td colspan="10">'+
                '<div class="row flex-grow-1 d-flex justify-content-center align-items-end" >' +
                    (d.row_id.includes('rot')?'<div class="col-md-12 col-lg-1">': '<div class="col-md-12 col-lg-1" style="display:none;">') +
                        '<?= lang('Presupuestos.velocidadCorte') ?>' +
                        '<input type="text" id="' + d.row_id +'_velocidadCorte" name="' + d.row_id +'_velocidadCorte" class="lp-cell lp-input lp-cell-disabled" readonly value="' + d.velocidadCorte +'">' +
                    '</div>' +
                    (d.row_id.includes('rot')?'<div class="col-md-12 col-lg-1">': '<div class="col-md-12 col-lg-1" style="display:none;">') +
                        '<?= lang('Presupuestos.precioHoraCorte') ?>' +
                        '<input type="text" id="' + d.row_id +'_precioHoraCorte" name="' + d.row_id +'_precioHoraCorte" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.precioHoraCorte +'">' +
                    '</div>' +
                    (d.row_id.includes('rot')?'<div class="col-md-12 col-lg-1">': '<div class="col-md-12 col-lg-1" style="display:none;">') +
                        '<?= lang('Presupuestos.tiempoCorte') ?>' +
                        '<input type="text" id="' + d.row_id +'_tiempoCorte" name="' + d.row_id +'_tiempoCorte" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.tiempoCorte +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.gTintaNegroPed') ?>' +
                        '<input type="text" id="' + d.row_id +'_gTintaNegroPed" name="' + d.row_id +'_gTintaNegroPed" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.gTintaNegroPed +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.gTintaCyanPed') ?>' +
                        '<input type="text" id="' + d.row_id +'_gTintaCyanPed" name="' + d.row_id +'_gTintaCyanPed" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.gTintaCyanPed +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.gTintaMagentaPed') ?>' +
                        '<input type="text" id="' + d.row_id +'_gTintaMagentaPed" name="' + d.row_id +'_gTintaMagentaPed" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.gTintaMagentaPed +'">' +
                    '</div>' +
                    '<div class="col-md-12 col-lg-1">' +
                        '<?= lang('Presupuestos.gTintaAmarilloPed') ?>' +
                        '<input type="text" id="' + d.row_id +'_gTintaAmarilloPed" name="' + d.row_id +'_gTintaAmarilloPed" class="lp-cell lp-cell-disabled lp-input ' + d.row_class +'-input" readonly value="' + d.gTintaAmarilloPed +'">'+ 
                    '</div>' +
                '</div>' +
            '</td>' +
        '</tr>' 
    }

    return $(value).toArray();
}

const lastColNr_lp = $('#tableLineasPresupuesto').find("tr:first th").length - 1;

const actionBtns_lp = function(data) {
    return `
    <a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete-lp mx-2" data-id="${data.row_id}"></i></a>
        `;
};

    var tableLineasPresupuesto = new DataTable('#tableLineasPresupuesto',{
    scrollX: true,
    searching: false,
    paging: false,
    info: false,
    ordering: false,
    responsive: true,
    select: false,
    rowId: 'row_id',
    language: {
        url: "//cdn.datatables.net/plug-ins/1.13.4/i18n/<?= config('Basics')->i18n ?>.json"
    },
    columnDefs: [
      {
        targets: 0,
        className:      'dt-control',
        orderable:      false,
        data:           null,
        defaultContent: ''
      },
      {
        targets: [1,2,3,4,5,6,7,8,9],
        orderable:      false,
        visible:        false,
      },
      {
        orderable: false,
        searchable: false,
        targets: [lastColNr_lp]
      },
    ],
    columns: [
        {data: null},
        {data: 'tarifa_impresion_id'},
        {data: 'maquina_ancho'},
        {data: 'maquina_alto'},
        {data: 'maquina_impresion_ancho'},
        {data: 'maquina_impresion_alto'},
        {data: 'formas'},
        {data: 'formas_v'},
        {data: 'formas_h'},
        {data: 'formas_orientacion'},
        {data: 'icon', 
            render: function ( data, type, row, meta ){
                return '<img style="padding: 0; margin:0;" src="' + data + '" />'
            }
        },
        {data: 'paginas', 
            render: function ( data, type, row, meta ) {
                if(row.row_id != "lp_cubierta" && row.row_id != "lp_sobrecubierta")
                    return '<td class="lp-td"><input id="' + row.row_id + '_paginas" name="' + row.row_id + '_paginas" class="lp-cell lp-input paginas-lp" type="text" value="' + data + '"></td>';
                else if(row.row_id == "lp_cubierta"){
                    return ' \
                        <select id="lp_cubierta_paginas" name="comp_paginas_cubierta" class="form-control form-select-sm lp-cell lp-select" style="min-width:50px;"> \
                            <option value="2"> \
                                <p><?= lang('Presupuestos.1cara') ?></p> \
                            </option> \
                            <option value="4"> \
                                <p><?= lang('Presupuestos.2caras') ?></p> \
                            </option> \
                        </select> \
                    ';
                }
            }
        },
        {data: 'papel',
            render: function ( data, type, row, meta ) {
                var select = $('<select>')
                    .attr('id', row.row_id + '_papel')
                    .attr('name', row.row_id + '_papel')
                    .addClass('form-control form-select-sm lp-cell lp-select')
                    .css('min-width', '150px')

                var papelList
                if(row.row_id == 'lp_bn'){
                    papelList = papelGenericoNegroList
                }
                else if (row.row_id == 'lp_bnhq'){
                    papelList = papelGenericoNegroHQList
                }
                else if (row.row_id == 'lp_color'){
                    papelList = papelGenericoColorList
                }
                else if (row.row_id == 'lp_colorhq'){
                    papelList = papelGenericoColorHQList
                }
                else if (row.row_id == 'lp_cubierta'){
                    papelList = papelGenericoCubiertaList
                }
                else if (row.row_id == 'lp_sobrecubierta'){
                    papelList = papelGenericoSobrecubiertaList
                }
                else if (row.row_id == 'lp_rot_bn'){
                    papelList = papelGenericoRotativaNegroList
                }
                else if (row.row_id == 'lp_rot_color'){
                    papelList = papelGenericoRotativaColorList
                }

                papelList.forEach((element) => {
                    var option
                    if(element.id == data)
                        option = '<option value="'+element.id+'" selected>'+element.nombre+'</option>';
                    else
                        option = '<option value="'+element.id+'">'+element.nombre+'</option>';     
                    select.append(option);
                        
                });
                return select[0].outerHTML                
            }
        },
        {data: 'gramaje',
            render: function ( data, type, row, meta ) {
                var select = $('<select>')
                    .attr('id', row.row_id + '_gramaje')
                    .attr('name', row.row_id + '_gramaje')
                    .addClass('form-control form-select-sm lp-cell lp-select ' + row.row_class + '-select')
                    .css('min-width', '40px')

                var option = '<option value="" selected>'+data+'</option>';
                select.append(option);
                        
                return select[0].outerHTML                
            }
        },
        {data: 'papel_impresion',
            render: function ( data, type, row, meta ) {
                var select = $('<select>')
                    .attr('id', row.row_id + '_papelImpresion')
                    .attr('name', row.row_id + '_papelImpresion')
                    .addClass('form-control form-select-sm lp-cell lp-select ' + row.row_class + '-select')
                    .css('min-width', '150px')

                var option = '<option value="' + row.papel_impresion_id+ '" selected>'+ data +'</option>';
                select.append(option);
                        
                return select[0].outerHTML                
            }
        },
        {data: 'maquina',
            render: function ( data, type, row, meta ) {
                var select = $('<select>')
                    .attr('id', row.row_id + '_maquina')
                    .attr('name', row.row_id + '_maquina')
                    .addClass('form-control form-select-sm lp-cell lp-select ' + row.row_class + '-select')
                    .css('min-width', '110px')

                var option = '<option value="' + row.maquina_id+ '" selected>'+ data +'</option>';
                select.append(option);
                        
                return select[0].outerHTML                
            }
        },
        {data: 'tiempo', 
            render: function ( data, type, row, meta ) {
                return '<td class="lp-td"><input id="' + row.row_id + '_tiempo" name="' + row.row_id + '_tiempo" readonly class="lp-cell lp-cell-disabled lp-input ' + row.row_class + '-input " type="text" value="' + data + '"></td>';
            }
        },
        {data: 'lomo', 
            render: function ( data, type, row, meta ) {
                return '<td class="lp-td"><input id="' + row.row_id + '_lomo" name="' + row.row_id + '_lomo" readonly class="lp-cell lp-cell-disabled lp-input ' + row.row_class + '-input" type="text" value="' + data + '"></td>';
            }
        },
        {data: 'peso', 
            render: function ( data, type, row, meta ) {
                return '<td class="lp-td"><input id="' + row.row_id + '_peso" name="' + row.row_id + '_peso" readonly class="lp-cell lp-cell-disabled lp-input ' + row.row_class + '-input" type="text" value="' + data + '"></td>';
            }
        },
        {data: 'total_linea', 
            render: function ( data, type, row, meta ) {
                return '<td class="lp-td"><input id="' + row.row_id + '_total_linea" name="' + row.row_id + '_total_linea" readonly class="lp-cell lp-cell-disabled lp-input ' + row.row_class + '-input " type="text" value="' + data + '"></td>';
            }
        },
        {
            data: actionBtns_lp,
            className: 'row-edit dt-center'
        }
    ]
});

tableLineasPresupuesto.on( 'draw.dt', function () {
    checkPaginasPresupuesto()
    getVisibleTabs()
} );


$(document).on('click', '.btn-delete-lp', function(e) {
   
    const row = $(this).closest('tr');
    tableLineasPresupuesto.row( row )
        .remove()
        .draw();
    updateTotales(true, false, false)
    updateTablaEnvios()
})



// Add event listener for opening and closing details
tableLineasPresupuesto.on('click', 'td.dt-control', function (e) {
    let tr = e.target.closest('tr');
    let row = tableLineasPresupuesto.row(tr);
 
    if (row.child.isShown()) {
        // This row is already open - close it
        row.child.hide();
    }
    else {
        // Open this row
        row.child(format(row.data())).show();
    }
});


function processRowData(row, rowId, rowClass){

    $('#lp_bn_numeroPliegos').val()
    $('#lp_bn_pliegosPedido').val()
    $('#lp_bn_precioPliego').val()
    $('#lp_bn_libro').val()
    $('#lp_bn_totalPapelPedido').val()
    $('#lp_bn_margenPapelPedido').val()
    $('#lp_bn_lomo').val()
    $('#lp_bn_peso').val()
    $('#lp_bn_click').val()
    $('#lp_bn_totalClicks').val()

    var icon = ""
    if(rowId=='lp_bn'){
        if(row.tipo_maquina=='toner')
            icon = '<?= site_url("themes/vuexy/img/safekat/presupuestos/icon_bn.png") ?>'
        else
            icon = '<?= site_url("themes/vuexy/img/safekat/presupuestos/icon_inkjet_bn.png") ?>'
    }
        
    else if(rowId=='lp_bnhq'){
        if(row.tipo_maquina=='toner')
            icon = '<?= site_url("themes/vuexy/img/safekat/presupuestos/icon_bnhq.png") ?>'
        else
            icon = '<?= site_url("themes/vuexy/img/safekat/presupuestos/icon_inkjet_bn.png") ?>'
    }
    else if(rowId=='lp_color'){
        if(row.tipo_maquina=='toner')
            icon = '<?= site_url("themes/vuexy/img/safekat/presupuestos/icon_color.png") ?>'
        else
            icon = '<?= site_url("themes/vuexy/img/safekat/presupuestos/icon_inkjet_color.png") ?>'
    }
    else if(rowId=='lp_colorhq'){
        if(row.tipo_maquina=='toner')
            icon = '<?= site_url("themes/vuexy/img/safekat/presupuestos/icon_colorhq.png") ?>'
        else
            icon = '<?= site_url("themes/vuexy/img/safekat/presupuestos/icon_inkjet_color.png") ?>'
    }
        
    else if(rowId=='lp_cubierta')
        icon = '<?= site_url("themes/vuexy/img/safekat/presupuestos/icon_cubierta.png") ?>'
    else if(rowId=='lp_sobrecubierta')
        icon = '<?= site_url("themes/vuexy/img/safekat/presupuestos/icon_sobrecubierta.png") ?>'
    else if(rowId=='lp_rot_bn')
        icon = '<?= site_url("themes/vuexy/img/safekat/presupuestos/icon_rotativa_bn.png") ?>'
    else if(rowId=='lp_rot_color')
        icon = '<?= site_url("themes/vuexy/img/safekat/presupuestos/icon_rotativa_color.png") ?>'

    const blank_line = (typeof row.tarifa_impresion_id === 'undefined')?1:0;
    var data = {
        'row_id': rowId,
        'row_class': rowClass,

        'tarifa_impresion_id': blank_line?0:isNaN(parseInt(row.tarifa_impresion_id)) ? "" : parseInt(row.tarifa_impresion_id),
        'maquina_ancho': blank_line?0:isNaN(parseFloat(row.dimensiones_maquina[0])) ? "" : parseFloat(row.dimensiones_maquina[0]),
        'maquina_alto': blank_line?0:isNaN(parseFloat(row.dimensiones_maquina[1])) ? "" : parseFloat(row.dimensiones_maquina[1]),
        'maquina_impresion_ancho': blank_line?0:isNaN(parseFloat(row.dimensiones_maquina_impresion[0])) ? "" : parseFloat(row.dimensiones_maquina_impresion[0]),
        'maquina_impresion_alto': blank_line?0:isNaN(parseFloat(row.dimensiones_maquina_impresion[1])) ? "" : parseFloat(row.dimensiones_maquina_impresion[1]),
        'formas': blank_line?0:isNaN(parseInt(row.num_formas.value)) ? 0 : parseInt(row.num_formas.value),
        'formas_v': blank_line?0:isNaN(parseInt(row.num_formas.num_formas_horizontales)) ? 0 : parseInt(row.num_formas.num_formas_horizontales),
        'formas_h': blank_line?0:isNaN(parseInt(row.num_formas.num_formas_verticales)) ? 0 : parseInt(row.num_formas.num_formas_verticales),
        'formas_orientacion': blank_line?0:row.num_formas.posicion_formas,

        'icon': icon,
        'paginas': blank_line?0:row.paginas,
        'papel': blank_line?"":row.papel_generico_id,
        'gramaje': blank_line?"":row.gramaje,
        'papel_impresion': blank_line?"":row.papel_impresion,
        'papel_impresion_id': blank_line?"":row.papel_impresion_id,
        'maquina': blank_line?"":row.maquina,
        'maquina_id': blank_line?"":row.maquina_id,

        'tiempo': blank_line?"":row.tiempo_maquina,
        'lomo': isNaN(parseFloat(row.mano)) ? "" : parseFloat(row.mano).toFixed(2),
        'peso': isNaN(parseFloat(row.peso)) ? "" : parseFloat(row.peso).toFixed(2),
        
        'total_linea': isNaN(parseFloat(row.total_impresion)) ? "" : parseFloat(row.total_impresion).toFixed(2),
        
        'numeroPliegos':isNaN(parseFloat(row.pliegos_libro)) ? "" : parseFloat(row.pliegos_libro).toFixed(2),
        'pliegosPedido': isNaN(parseFloat(row.pliegos_pedido)) ? "" : parseFloat(row.pliegos_pedido).toFixed(2),
        'precioPliego': isNaN(parseFloat(row.precios_pliegos)) ? "" : parseFloat(row.precios_pliegos).toFixed(6),
        'libro': isNaN(parseFloat(row.precio_libro)) ? "" : parseFloat(row.precio_libro).toFixed(2),
        'totalPapelPedido': isNaN(parseFloat(row.precio_pedido)) ? "" : parseFloat(row.precio_pedido).toFixed(2),
        'margenPapelPedido': isNaN(parseFloat(row.margen_papel_pedido)) ? "": parseFloat(row.margen_papel_pedido).toFixed(2),
        'click': isNaN(parseFloat(row.precio_click)) ? "" : parseFloat(row.precio_click).toFixed(6),
        'totalClicks': isNaN(parseFloat(row.precio_click_pedido)) ? "" : parseFloat(row.precio_click_pedido).toFixed(2),
        'horasMaquina': isNaN(parseFloat(row.horas_maquina)) ? "" : parseFloat(row.horas_maquina).toFixed(2),
        'precioHora': isNaN(parseFloat(row.precio_hora)) ? "" : parseFloat(row.precio_hora).toFixed(2),
        'precioImpresion': isNaN(parseFloat(row.precio_impresion_horas)) ? "" : parseFloat(row.precio_impresion_horas).toFixed(2),
        'margenImpresion': isNaN(parseFloat(row.margen_impresion_horas)) ? "" : parseFloat(row.margen_impresion_horas).toFixed(2),
        'maquinaTipo': row.tipo_maquina,
    }

    if(row.tipo_maquina=='inkjet'){
        
        data.numPagColor = row.paginas_color
        data.aFavorFibra = row.a_favor_fibra
        data.cobNegro = isNaN(parseFloat(row.datosTipologias.negro)) ? "" : parseFloat(row.datosTipologias.negro).toFixed(0)
        data.cobCyan = isNaN(parseFloat(row.datosTipologias.cyan)) ? "" : parseFloat(row.datosTipologias.cyan).toFixed(0)
        data.cobMagenta = isNaN(parseFloat(row.datosTipologias.magenta)) ? "" : parseFloat(row.datosTipologias.magenta).toFixed(0)
        data.cobAmarillo = isNaN(parseFloat(row.datosTipologias.amarillo)) ? "" : parseFloat(row.datosTipologias.amarillo).toFixed(0)
        data.gotaNegro = isNaN(parseFloat(row.datosTipologias.gota_negro)) ? "" : parseFloat(row.datosTipologias.gota_negro).toFixed(0)
        data.gotaColor = isNaN(parseFloat(row.datosTipologias.gota_color)) ? "" : parseFloat(row.datosTipologias.gota_color).toFixed(0)
        
        data.resolucion = isNaN(parseFloat(row.resolucion)) ? "" : parseFloat(row.resolucion).toFixed(0)
        data.areaPaginas = isNaN(parseFloat(row.superficie)) ? "" : parseFloat(row.superficie).toFixed(2)
        
        data.gotasNegro = isNaN(parseFloat(row.num_gotas_negro)) ? "" : parseFloat(row.num_gotas_negro).toFixed(0)
        data.gotasCyan = isNaN(parseFloat(row.num_gotas_cyan)) ? "" : parseFloat(row.num_gotas_cyan).toFixed(0)
        data.gotasMagenta = isNaN(parseFloat(row.num_gotas_magenta)) ? "" : parseFloat(row.num_gotas_magenta).toFixed(0)
        data.gotasAmarillo = isNaN(parseFloat(row.num_gotas_amarillo)) ? "" : parseFloat(row.num_gotas_amarillo).toFixed(0)
        data.precioPagNegro = isNaN(parseFloat(row.precio_pagina_negro)) ? "" : parseFloat(row.precio_pagina_negro).toFixed(6)
        data.precioPagColor = isNaN(parseFloat(row.precio_pagina_color)) ? "" : parseFloat(row.precio_pagina_color).toFixed(6)
        data.factorAltura = isNaN(parseFloat(row.factor_altura)) ? "" : parseFloat(row.factor_altura).toFixed(2)
        data.factorAnchura = isNaN(parseFloat(row.factor_anchura)) ? "" : parseFloat(row.factor_anchura).toFixed(2)
        data.paginasPliego = isNaN(parseFloat(row.paginas_por_pliego)) ? "" : parseFloat(row.paginas_por_pliego).toFixed(2)

        if(rowId.includes('rot')){
            data.metrosMinuto = isNaN(parseFloat(row.maquina_velocidad)) ? "" : parseFloat(row.maquina_velocidad).toFixed(2)
            data.metrosPapelLibro = isNaN(parseFloat(row.metros_papel_libro)) ? "" : parseFloat(row.metros_papel_libro).toFixed(2)
            data.metrosPapelTotal = isNaN(parseFloat(row.metros_papel_total)) ? "" : parseFloat(row.metros_papel_total).toFixed(2)
            data.velocidadCorte = isNaN(parseFloat(row.velocidad_corte)) ? "" : parseFloat(row.velocidad_corte).toFixed(2)
            data.precioHoraCorte = isNaN(parseFloat(row.precio_hora_corte)) ? "" : parseFloat(row.precio_hora_corte).toFixed(2)
            data.tiempoCorte = isNaN(parseFloat(row.tiempo_corte)) ? "" : parseFloat(row.tiempo_corte).toFixed(2)
            data.totalCorte = isNaN(parseFloat(row.total_corte)) ? "" : parseFloat(row.total_corte).toFixed(2)
        }
        else{
            data.totalCorte = 0
        }  
        
        data.clicksLibro = isNaN(parseFloat(row.clicks_libro)) ? "" : parseFloat(row.clicks_libro).toFixed(0)
        data.gTintaNegro = isNaN(parseFloat(row.peso_gotas_negro)) ? "" : parseFloat(row.peso_gotas_negro).toFixed(2)
        data.gTintaCyan = isNaN(parseFloat(row.peso_gotas_cyan)) ? "" : parseFloat(row.peso_gotas_cyan).toFixed(2)
        data.gTintaMagenta = isNaN(parseFloat(row.peso_gotas_magenta)) ? "" : parseFloat(row.peso_gotas_magenta).toFixed(2)
        data.gTintaAmarillo = isNaN(parseFloat(row.peso_gotas_amarillo)) ? "" : parseFloat(row.peso_gotas_amarillo).toFixed(2)
        data.clicksPedido = isNaN(parseFloat(row.clicks_pedido)) ? "" : parseFloat(row.clicks_pedido).toFixed(0)
        data.totalClicksPedido = isNaN(parseFloat(row.precio_click_pedido)) ? "" : parseFloat(row.precio_click_pedido).toFixed(2)
        data.totalTinta = isNaN(parseFloat(row.precio_tinta)) ? "" : parseFloat(row.precio_tinta).toFixed(2)
        
        data.totalImpresion = isNaN(parseFloat(row.precio_click_pedido+row.precio_tinta+data.totalCorte)) ? "" : parseFloat(row.precio_click_pedido+row.precio_tinta+data.totalCorte).toFixed(2)

        data.gTintaNegroPed = isNaN(parseFloat(row.peso_gotas_negro_pedido)) ? "" : parseFloat(row.peso_gotas_negro_pedido).toFixed(2)
        data.gTintaCyanPed = isNaN(parseFloat(row.peso_gotas_cyan_pedido)) ? "" : parseFloat(row.peso_gotas_cyan_pedido).toFixed(2)
        data.gTintaMagentaPed = isNaN(parseFloat(row.peso_gotas_magenta_pedido)) ? "" : parseFloat(row.peso_gotas_magenta_pedido).toFixed(2)
        data.gTintaAmarilloPed = isNaN(parseFloat(row.peso_gotas_amarillo_pedido)) ? "" : parseFloat(row.peso_gotas_amarillo_pedido).toFixed(2)


        data.alto_click = row.alto_click
    }

    return data
}


$('#addLineasPresupuesto').val('');

$('.paginas-lp').on('change', function(){
    checkPaginasPresupuesto()
})


function verCalculosInkjet(e){
    if($( ".calculos_" + e.data.rowId ).css('display') == 'none')
        $( ".calculos_" + e.data.rowId ).css('display', 'table-row')
    else{
        $( ".calculos_" + e.data.rowId ).css('display', 'none')
    }
};



function clear_interior(row_id = ''){
    switch(row_id) {
        case 'lp_bn':
            clear_lp_bn(true);
            break;
        case 'lp_color':
            clear_lp_color(true);
            break;
        case 'lp_bnhq':
            clear_lp_bnhq(true);
            break;
        case 'lp_colorhq':
            clear_lp_colorhq(true);
            break;
        default:
            clear_lp_bn(true);
            clear_lp_color(true);
            clear_lp_bnhq(true);
            clear_lp_colorhq(true);
            break;
    }
    if(row_id.length>0)
        tableLineasPresupuesto.row( row_id )
            .remove()
            .draw();
    else{
        tableLineasPresupuesto.row( '#lp_bn' )
            .remove().draw()
        tableLineasPresupuesto.row( '#lp_bnhq' )
            .remove().draw()
        tableLineasPresupuesto.row( '#lp_color' )
            .remove().draw()
        tableLineasPresupuesto.row( '#lp_colorhq' )
            .remove().draw()
    }
}


function clear_rotativa(row_id = ''){
    switch(row_id) {
        case 'lp_rot_bn':
            clear_lp_rot_bn(true);
            break;
        case 'lp_rot_color':
            clear_lp_rot_color(true);
            break;
        default:
            clear_lp_rot_bn(true);
            clear_lp_rot_color(true);
            break;
    }
    if(row_id.length>0)
        tableLineasPresupuesto.row( row_id )
            .remove()
            .draw();
    else{
        tableLineasPresupuesto.row( '#lp_rot_bn' )
            .remove().draw()
        tableLineasPresupuesto.row( '#lp_rot_color' )
            .remove().draw()
    }
}


function clear_cubierta(){
    clear_lp_cubierta(true);
}


$('.insertarLinea').on("click", function (e) {

    if(e.target.id.includes("Plana")){

        clear_interior();
        clear_rotativa();

        var rows = $("#tableCompIntPlana").DataTable().rows( '.selected' ).data().toArray();
        
        for(row of rows){
            if(row['tipo'] =='bn'){
                fill_lp_bn(row, true);
            }
            else if(row['tipo'] =='bnhq'){
                fill_lp_bnhq(row, true);
            }
            else if(row['tipo'] =='color'){
                fill_lp_color(row, true);
            }
            else if(row['tipo'] =='colorhq'){
                fill_lp_colorhq(row, true);
            }
        }
    }
    if(e.target.id.includes("Rotativa")){

        clear_rotativa();
        clear_interior();

        var rows = $("#tableCompIntRotativa").DataTable().rows( '.selected' ).data().toArray();
        for(row of rows){
            if(row['paginasColor'] ==0){
                fill_lp_rot_bn(row, true);
            }
            else if(row['paginasColor'] >0){
                fill_lp_rot_color(row, true);
            }
        }
    }

    if(e.target.id.includes("Cubierta")){

        clear_cubierta();

        var rows = $("#tableCompCubierta").DataTable().rows( '.selected' ).data().toArray();
        for(row of rows){
            fill_lp_cubierta(row, true);
        }
    }
    
});


$('#addLineasPresupuesto').on("change", function (e) {
    
    var data = tableLineasPresupuesto
            .rows()
            .data();

    switch($('#addLineasPresupuesto').val()){
        // Se chequean todas las lineas de negro y todas las de color
        // (solo una de cada en interior)
        
        case 'lp_bn':
            if(data.length>0){
                if( data.filter(x => x.row_id === 'lp_bn').length>0 ||
                    data.filter(x => x.row_id === 'lp_bnhq').length>0 ||
                    data.filter(x => x.row_id === 'lp_rot_bn').length>0 )

                    popErrorAlert('<?=lang('Presupuestos.errores.lineaDuplicada') ?>', 'divAlarmasLineasPresupuesto');
            }
            else{
                var data = processRowData({tipo_maquina: 'toner'}, 'lp_bn', 'lp-bn');
                tableLineasPresupuesto.row.add(data).draw(true)
                eventos_lp_bn()
            }
            
            break
        case 'lp_bnhq':
            if(data.length>0){
                if( data.filter(x => x.row_id === 'lp_bn').length>0 ||
                    data.filter(x => x.row_id === 'lp_bnhq').length>0 ||
                    data.filter(x => x.row_id === 'lp_rot_bn').length>0 )

                    popErrorAlert('<?=lang('Presupuestos.errores.lineaDuplicada') ?>', 'divAlarmasLineasPresupuesto');
            }
            else{
                var data = processRowData({tipo_maquina: 'toner'}, 'lp_bnhq', 'lp-bnhq');
                tableLineasPresupuesto.row.add(data).draw(true)
                eventos_lp_bnhq()
            }
            break
        case 'lp_color':
            if(data.length>0){
                if( data.filter(x => x.row_id === 'lp_color').length>0 ||
                    data.filter(x => x.row_id === 'lp_colorhq').length>0 ||
                    data.filter(x => x.row_id === 'lp_rot_color').length>0 )

                    popErrorAlert('<?=lang('Presupuestos.errores.lineaDuplicada') ?>', 'divAlarmasLineasPresupuesto');
            }
            else{
                var data = processRowData({tipo_maquina: 'toner'}, 'lp_color', 'lp-color');
                tableLineasPresupuesto.row.add(data).draw(true)
                eventos_lp_color()
            }
            break
        case 'lp_colorhq':
            if(data.length>0){
                if( data.filter(x => x.row_id === 'lp_color').length>0 ||
                    data.filter(x => x.row_id === 'lp_colorhq').length>0 ||
                    data.filter(x => x.row_id === 'lp_rot_color').length>0 )

                    popErrorAlert('<?=lang('Presupuestos.errores.lineaDuplicada') ?>', 'divAlarmasLineasPresupuesto');
            }
            else{
                var data = processRowData({tipo_maquina: 'toner'}, 'lp_colorhq', 'lp-colorhq');
                tableLineasPresupuesto.row.add(data).draw(true)
                eventos_lp_colorhq()
            }
            break
        case 'lp_rot_bn':
            if(data.length>0){
                if( data.filter(x => x.row_id === 'lp_bn').length>0 ||
                    data.filter(x => x.row_id === 'lp_bnhq').length>0 ||
                    data.filter(x => x.row_id === 'lp_rot_bn').length>0 )

                    popErrorAlert('<?=lang('Presupuestos.errores.lineaDuplicada') ?>', 'divAlarmasLineasPresupuesto');
            }
            else{
                var data = processRowData({tipo_maquina: 'toner'}, 'lp_rot_bn', 'lp-rot-bn');
                tableLineasPresupuesto.row.add(data).draw(true)
                eventos_lp_rot_bn()
            }
            break
        case 'lp_rot_color':
            if(data.length>0){
                if( data.filter(x => x.row_id === 'lp_color').length>0 ||
                    data.filter(x => x.row_id === 'lp_colorhq').length>0 ||
                    data.filter(x => x.row_id === 'lp_rot_color').length>0 )

                    popErrorAlert('<?=lang('Presupuestos.errores.lineaDuplicada') ?>', 'divAlarmasLineasPresupuesto');
            }
            else{
                var data = processRowData({tipo_maquina: 'toner'}, 'lp_rot_color', 'lp-rot-color');
                tableLineasPresupuesto.row.add(data).draw(true)
                eventos_lp_rot_color()
            }
            break
        case 'lp_cubierta':
            if(data.length>0){
                if( data.filter(x => x.row_id === 'lp_cubierta').length>0)

                    popErrorAlert('<?=lang('Presupuestos.errores.lineaDuplicada') ?>', 'divAlarmasLineasPresupuesto');
            }
            else{
                var data = processRowData({tipo_maquina: 'toner'}, 'lp_cubierta', 'lp-cubierta');
                tableLineasPresupuesto.row.add(data).draw(true)
                eventos_lp_cubierta()
            }
            break
        default:
            break
    }
    $("#tableLineasPresupuesto").DataTable().columns.adjust();
})

function update_total_linea(e){
    total = 0
    if($('#' + e.data.id_linea + '_checkPapel').prop('checked')){
        total += parseFloat($('#' + e.data.id_linea + '_totalPapelPedido').val())
    }
    if($('#' + e.data.id_linea + '_checkClicks').prop('checked')){
        total += parseFloat($('#' + e.data.id_linea + '_precioImpresion').val())
        total += parseFloat($('#' + e.data.id_linea + '_margenImpresion').val())
    }
    
    var rowData = tableLineasPresupuesto.row('#' + e.data.id_linea).data()
    if (rowData.maquinaTipo == 'inkjet'){
        total += parseFloat(rowData.totalTinta)
    }
    if (e.data.id_linea.includes('rot_')){
        total += parseFloat(rowData.totalCorte)
    }

    rowData.total_linea = parseFloat(total).toFixed(2)
    
    tableLineasPresupuesto.row('#' + e.data.id_linea).data(rowData).draw(true)

}

<?= $this->endSection() ?>

<!------------------------------------------->
<!-- Código JS para lp_bn. -->
<!------------------------------------------->
<?= $this->section("additionalInlineJs") ?>
async function set_lp_bn_gramaje(){
    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            clear_lp_bn(true)
        },
        data: {
            tipo: 'gramajeLineasPresupuesto',
            uso:   'interior',
            datos: $('#lp_bn_papel option:selected').val() ,
            tipoLinea: "negro",
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].id, 'text':data.menu[item].text})
                $('#lp_bn_gramaje').append(option);
            });
            $('#lp_bn_gramaje').val('')
        }
    });
}




async function set_lp_bn_papelImpresion(){
    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            $('#lp_bn_papelImpresion').empty()
            $('#lp_bn_maquina').empty()
            clear_lp_bn(false)
        },
        data: {
            tipo: 'papelImpresion',
            uso:   'negro',
            datos: $('#lp_bn_papel option:selected').val() ,
            gramaje: $('#lp_bn_gramaje option:selected').text().trim() ,
            tipoLinea: "negro",
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].id, 'text':data.menu[item].text})
                $('#lp_bn_papelImpresion').append(option);
            });
            $('#lp_bn_papelImpresion').val('')
        }
    });
}


async function set_lp_bn_maquina(){

    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            $('#lp_bn_maquina').empty()
            clear_lp_bn(false)
        },
        data: {
            tipo: 'maquina',
            uso:   'negro',
            tipoLinea: "interior",
            is_rotativa: 0,
            ancho:  getDimensionLibro().ancho,
            alto: getDimensionLibro().alto,
            datos: parseInt($('#tirada').val()) + parseInt($('#merma').val()),
            papel_impresion: $('#lp_bn_papelImpresion option:selected').val() ,
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].maquina_id, 'text':data.menu[item].maquina})
                $('#lp_bn_maquina').append(option);
            });
            $('#lp_bn_maquina').val('')
        }
    });
}


function clear_lp_bn(clear_selectors){
    let pags = $("#lp_bn_paginas" ).val()
    $(".lp-bn-input" ).val("0")
    $("#lp_bn_paginas" ).val(pags)
    if(clear_selectors)
        $( ".lp-bn-select").empty()
}



function change_lp_bn_maquina(){
    if(parseInt($('#lp_bn_paginas').val())>0){
        calcularPresupuesto_bn();
    }
}



function change_lp_bn_paginas(){

    if( parseInt($('#lp_bn_paginas').val())>0 &&
        parseInt($('#lp_bn_papel option:selected').val())>0 &&
        $('#lp_bn_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_bn_papelImpresion option:selected').val())>0
        ){

        calcularPresupuesto_bn();
    }
}

function calcularPresupuesto_bn(input_data={}, updatedTipologias = false){

    const dimension = getDimensionLibro();

    if(Object.keys(input_data).length == 0){

        input_data = {
            paginas:parseInt($('#lp_bn_paginas').val()),
            papel_generico_id: $('#lp_bn_papel option:selected').val(),
            papel_generico: $('#lp_bn_papel option:selected').text().trim(),
            gramaje: $('#lp_bn_gramaje option:selected').text().trim(),
            maquina_id: $('#lp_bn_maquina option:selected').val(),
            papel_impresion_id: $('#lp_bn_papelImpresion option:selected').val()
        }
    }

    var datos = {
        type: 'interior',
        color: 0,
        hq: 0,
        paginas: input_data.paginas,
        tirada: parseInt($('#tirada').val()),
        merma: parseInt($('#merma').val()),
        ancho: dimension.ancho,
        alto: dimension.alto,
        papel_generico_id: input_data.papel_generico_id,
        papel_generico: input_data.papel_generico,
        gramaje: input_data.gramaje,
        cliente_id: $('#clienteId').find(":selected").val(),
        <?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v
    };

    if(updatedTipologias){
        datos.gota_negro= $('#lp_bn_gotaNegro').val()
        datos.gota_color= $('#lp_bn_gotaColor').val()
        datos.negro= $('#lp_bn_cobNegro').val()
        datos.cyan= $('#lp_bn_cobCyan').val()
        datos.magenta= $('#lp_bn_cobMagenta').val()
        datos.amarillo= $('#lp_bn_cobAmarillo').val()
    }

    $.ajax({
        type: "POST",
        url: "/cosidotapablanda/datatable",
        data: datos,
        success: function (data) {

            if(data.lineas.length >0){
                
                $.each(data.lineas, function(key, value) {
                    
                    // Se cogen los valores de la linea con los datos correspondientes
                    if(value.fields.maquina_id ===  input_data.maquina_id &&
                        value.fields.papel_generico_id === input_data.papel_generico_id &&
                        value.fields.papel_impresion_id ===  input_data.papel_impresion_id) {
                            
                            fill_lp_bn(value.fields);
                            return false;
                    }
                    else{
                        clear_lp_bn(false);
                    }
                    
                });

            }
            else{

            }
            yeniden(data.<?= csrf_token() ?>);

        },
        error: function(e){

        }
    })
}

function change_lp_bn_tipologia(){

    if( parseInt($('#lp_bn_paginas').val())>0 &&
        parseInt($('#lp_bn_papel option:selected').val())>0 &&
        $('#lp_bn_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_bn_papelImpresion option:selected').val())>0
        ){

        calcularPresupuesto_bn({},true);
    }
}


function por_defecto_lp_bn(){

    if( parseInt($('#lp_bn_paginas').val())>0 &&
        parseInt($('#lp_bn_papel option:selected').val())>0 &&
        $('#lp_bn_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_bn_papelImpresion option:selected').val())>0
        ){

            calcularPresupuesto_bn();
    }
}


function fill_lp_bn(row, fromComparator=false){

    if(fromComparator){
        
        var input_data = {
            paginas: row.paginas,
            papel_generico_id: row.papelGenericoId,
            gramaje: row.gramaje,
            papel_impresion_id: row.papelImpresionId,
            maquina_id: row.maquinaId,
        }
        calcularPresupuesto_bn(input_data)
    }
    else{
        
        // Si viene de hacerlo a mano...
        data = processRowData(row, 'lp_bn', 'lp-bn');

        var row = tableLineasPresupuesto.row('#lp_bn');
        if(row.length>0)
            tableLineasPresupuesto.row('#lp_bn').data(data).draw(true)
        else{
            tableLineasPresupuesto.row.add(data).draw(true)
            row = tableLineasPresupuesto.row('#lp_bn');
        }
        row.child(format(row.data())).show();

        eventos_lp_bn(data.maquinaTipo=='inkjet'?true:false)

        calcular_mermas()
        updateTotales(true, false, false)
        updateTablaEnvios()
    }

    $("#tableLineasPresupuesto").DataTable().columns.adjust();

}

function eventos_lp_bn(isInkjet = false){
    $('#lp_bn_papel').bind("focus", {clear_selectors: true}, clear_lp_bn);
    $('#lp_bn_gramaje').bind("focus", set_lp_bn_gramaje);
    $('#lp_bn_papelImpresion').focus("focus", set_lp_bn_papelImpresion);
    $('#lp_bn_maquina').bind("focus", set_lp_bn_maquina);
    $('#lp_bn_maquina').bind("change", change_lp_bn_maquina);
    $('#lp_bn_vercalculos').bind("click", {rowId: 'lp_bn'}, verCalculosInkjet);
    
    if(isInkjet){
        $('.lp-bn-tipologia').bind("change", change_lp_bn_tipologia);
        $('#lp_bn_defecto').bind("click", por_defecto_lp_bn);
    }
    
    $('#lp_bn_checkPapel').bind("change", {id_linea: 'lp_bn'}, update_total_linea);
    $('#lp_bn_checkClicks').bind("change", {id_linea: 'lp_bn'}, update_total_linea);
}
<?= $this->endSection() ?>

<!------------------------------------------->
<!-- Código JS para lp_color. -->
<!------------------------------------------->
<?= $this->section("additionalInlineJs") ?>
async function set_lp_color_gramaje(){
    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            clear_lp_color(true)
        },
        data: {
            tipo: 'gramajeLineasPresupuesto',
            uso:   'interior',
            datos: $('#lp_color_papel option:selected').val() ,
            tipoLinea: "color",
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].id, 'text':data.menu[item].text})
                $('#lp_color_gramaje').append(option);
            });
            $('#lp_color_gramaje').val('')
        }
    });
}




async function set_lp_color_papelImpresion(){
    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            $('#lp_color_papelImpresion').empty()
            $('#lp_color_maquina').empty()
            clear_lp_color(false)
        },
        data: {
            tipo: 'papelImpresion',
            uso:   'color',
            datos: $('#lp_color_papel option:selected').val() ,
            gramaje: $('#lp_color_gramaje option:selected').text().trim() ,
            tipoLinea: "color",
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].id, 'text':data.menu[item].text})
                $('#lp_color_papelImpresion').append(option);
            });
            $('#lp_color_papelImpresion').val('')
        }
    });
}


async function set_lp_color_maquina(){

    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            $('#lp_color_maquina').empty()
            clear_lp_color(false)
        },
        data: {
            tipo: 'maquina',
            uso:   'color',
            tipoLinea: "interior",
            is_rotativa: 0,
            ancho:  getDimensionLibro().ancho,
            alto: getDimensionLibro().alto,
            datos: parseInt($('#tirada').val()) + parseInt($('#merma').val()),
            papel_impresion: $('#lp_color_papelImpresion option:selected').val() ,
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].maquina_id, 'text':data.menu[item].maquina})
                $('#lp_color_maquina').append(option);
            });
            $('#lp_color_maquina').val('')
        }
    });
}


function clear_lp_color(clear_selectors){
    let pags = $("#lp_color_paginas" ).val()
    $(".lp-color-input" ).val("0")
    $("#lp_color_paginas" ).val(pags)
    if(clear_selectors)
        $( ".lp-color-select").empty()
}


function change_lp_color_maquina(){

    if(parseInt($('#lp_color_paginas').val())>0){
        calcularPresupuesto_color();
    }
}


function change_lp_color_paginas(){

    if( parseInt($('#lp_color_paginas').val())>0 &&
        parseInt($('#lp_color_papel option:selected').val())>0 &&
        $('#lp_color_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_color_papelImpresion option:selected').val())>0
        ){

        calcularPresupuesto_color();
    }
}

function change_lp_color_tipologia(){

    if( parseInt($('#lp_color_paginas').val())>0 &&
        parseInt($('#lp_color_papel option:selected').val())>0 &&
        $('#lp_color_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_color_papelImpresion option:selected').val())>0
        ){

        calcularPresupuesto_color({},true);
    }
}


function por_defecto_lp_bn(){

    if( parseInt($('#lp_color_paginas').val())>0 &&
        parseInt($('#lp_color_papel option:selected').val())>0 &&
        $('#lp_color_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_color_papelImpresion option:selected').val())>0
        ){

            calcularPresupuesto_color();
    }
}

function calcularPresupuesto_color(input_data={}, updatedTipologias = false){

    const dimension = getDimensionLibro();

    if(Object.keys(input_data).length == 0){

        input_data = {
            paginas:parseInt($('#lp_color_paginas').val()),
            papel_generico_id: $('#lp_color_papel option:selected').val(),
            papel_generico: $('#lp_color_papel option:selected').text().trim(),
            gramaje: $('#lp_color_gramaje option:selected').text().trim(),
            maquina_id: $('#lp_color_maquina option:selected').val(),
            papel_impresion_id: $('#lp_color_papelImpresion option:selected').val()
        }
    }

    let datos = {
        type: 'interior',
        color: 1,
        hq: 0,
        paginas: input_data.paginas,
        tirada: parseInt($('#tirada').val()),
        merma: parseInt($('#merma').val()),
        ancho: dimension.ancho,
        alto: dimension.alto,
        papel_generico_id: input_data.papel_generico_id,
        papel_generico: input_data.papel_generico,
        gramaje: input_data.gramaje,
        cliente_id: $('#clienteId').find(":selected").val(),
        <?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v
    };

    if(updatedTipologias){
        datos.gota_negro= $('#lp_color_gotaNegro').val()
        datos.gota_color= $('#lp_color_gotaColor').val()
        datos.negro= $('#lp_color_cobNegro').val()
        datos.cyan= $('#lp_color_cobCyan').val()
        datos.magenta= $('#lp_color_cobMagenta').val()
        datos.amarillo= $('#lp_color_cobAmarillo').val()
    }

    $.ajax({
        type: "POST",
        url: "/cosidotapablanda/datatable",
        data: datos,
        success: function (data) {

            if(data.lineas.length >0){
                // Se cogen los valores de la linea con los datos correspondientes
                $.each(data.lineas, function(key, value) {
                    if(value.fields.maquina_id ===  input_data.maquina_id &&
                        value.fields.papel_generico_id === input_data.papel_generico_id &&
                        value.fields.papel_impresion_id ===  input_data.papel_impresion_id) {

                            fill_lp_color(value.fields);
                            return false;
                    }
                    else{
                        clear_lp_color(false);
                    }

                });

            }
            else{

            }
            yeniden(data.<?= csrf_token() ?>);

        },
        error: function(e){

        }
    })
}

function fill_lp_color(row, fromComparator=false){

    if(fromComparator){

        var input_data = {
            paginas: row.paginas,
            papel_generico_id: row.papelGenericoId,
            gramaje: row.gramaje,
            papel_impresion_id: row.papelImpresionId,
            maquina_id: row.maquinaId,
        }
        calcularPresupuesto_color(input_data)
    }
    else{
        // Si viene de hacerlo a mano...
        data = processRowData(row, 'lp_color', 'lp-color');

        var row = tableLineasPresupuesto.row('#lp_color');
        if(row.length>0)
            tableLineasPresupuesto.row('#lp_color').data(data).draw(true)
        else{
            tableLineasPresupuesto.row.add(data).draw(true)
            row = tableLineasPresupuesto.row('#lp_color');
        }
        row.child(format(row.data())).show();

        eventos_lp_color(data.maquinaTipo=='inkjet'?true:false)

        calcular_mermas()
        updateTotales(true, false, false)
        updateTablaEnvios()
    }

    $("#tableLineasPresupuesto").DataTable().columns.adjust();

}

function eventos_lp_color(isInkjet = false){

    $('#lp_color_papel').bind("focus", {clear_selectors: true}, clear_lp_color);
    $('#lp_color_gramaje').bind("focus", set_lp_color_gramaje);
    $('#lp_color_papelImpresion').focus("focus", set_lp_color_papelImpresion);
    $('#lp_color_maquina').bind("focus", set_lp_color_maquina);
    $('#lp_color_maquina').bind("change", change_lp_color_maquina);
    $('#lp_color_paginas').bind("change", change_lp_color_paginas);
    $('#lp_color_vercalculos').bind("click", {rowId: 'lp_color'}, verCalculosInkjet);

    if(isInkjet){
        $('.lp-color-tipologia').bind("change", change_lp_color_tipologia);
        $('#lp_color_defecto').bind("click", por_defecto_lp_color);
    }

    $('#lp_color_checkPapel').bind("change", {id_linea: 'lp_color'}, update_total_linea);
    $('#lp_color_checkClicks').bind("change", {id_linea: 'lp_color'}, update_total_linea);
}

<?= $this->endSection() ?>

<!------------------------------------------->
<!-- Código JS para lp_bnhq. -->
<!------------------------------------------->
<?= $this->section("additionalInlineJs") ?>
async function set_lp_bnhq_gramaje(){
    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            clear_lp_bnhq(true)
        },
        data: {
            tipo: 'gramajeLineasPresupuesto',
            uso:   'interior',
            datos: $('#lp_bnhq_papel option:selected').val() ,
            tipoLinea: "negrohq",
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].id, 'text':data.menu[item].text})
                $('#lp_bnhq_gramaje').append(option);
            });
            $('#lp_bnhq_gramaje').val('')
        }
    });
}


async function set_lp_bnhq_papelImpresion(){
    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            $('#lp_bnhq_papelImpresion').empty()
            $('#lp_bnhq_maquina').empty()
            clear_lp_bnhq(false)
        },
        data: {
            tipo: 'papelImpresion',
            uso:   'negrohq',
            datos: $('#lp_bnhq_papel option:selected').val() ,
            gramaje: $('#lp_bnhq_gramaje option:selected').text().trim() ,
            tipoLinea: "negrohq",
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].id, 'text':data.menu[item].text})
                $('#lp_bnhq_papelImpresion').append(option);
            });
            $('#lp_bnhq_papelImpresion').val('')
        }
    });
}


async function set_lp_bnhq_maquina(){

    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            $('#lp_bnhq_maquina').empty()
            clear_lp_bnhq(false)
        },
        data: {
            tipo: 'maquina',
            uso:   'negrohq',
            tipoLinea: "interior",
            is_rotativa: 0,
            ancho:  getDimensionLibro().ancho,
            alto: getDimensionLibro().alto,
            datos: parseInt($('#tirada').val()) + parseInt($('#merma').val()),
            papel_impresion: $('#lp_bnhq_papelImpresion option:selected').val() ,
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].maquina_id, 'text':data.menu[item].maquina})
                $('#lp_bnhq_maquina').append(option);
            });
            $('#lp_bnhq_maquina').val('')
        }
    });
}


function clear_lp_bnhq(clear_selectors){
    let pags = $("#lp_bnhq_paginas" ).val()
    $(".lp-bnhq-input" ).val("0")
    $("#lp_bnhq_paginas" ).val(pags)
    if(clear_selectors)
        $( ".lp-bnhq-select").empty()
}


function change_lp_bnhq_maquina(){

    if(parseInt($('#lp_bnhq_paginas').val())>0){
        calcularPresupuesto_bnhq();
    }
}

function change_lp_bnhq_paginas(){

    if( parseInt($('#lp_bnhq_paginas').val())>0 &&
        parseInt($('#lp_bnhq_papel option:selected').val())>0 &&
        $('#lp_bnhq_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_bnhq_papelImpresion option:selected').val())>0
        ){

        calcularPresupuesto_bnhq();
    }
}


function change_lp_bnhq_tipologia(){

    if( parseInt($('#lp_bnhq_paginas').val())>0 &&
        parseInt($('#lp_bnhq_papel option:selected').val())>0 &&
        $('#lp_bnhq_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_bnhq_papelImpresion option:selected').val())>0
        ){

        calcularPresupuesto_bnhq({},true);
    }
}


function por_defecto_lp_bnhq(){

    if( parseInt($('#lp_bnhq_paginas').val())>0 &&
        parseInt($('#lp_bnhq_papel option:selected').val())>0 &&
        $('#lp_bnhq_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_bnhq_papelImpresion option:selected').val())>0
        ){

            calcularPresupuesto_bnhq();
    }
}


function calcularPresupuesto_bnhq(input_data={}, updatedTipologias = false){

    const dimension = getDimensionLibro();

    if(Object.keys(input_data).length == 0){

        input_data = {
            paginas:parseInt($('#lp_bnhq_paginas').val()),
            papel_generico_id: $('#lp_bnhq_papel option:selected').val(),
            papel_generico: $('#lp_bnhq_papel option:selected').text().trim(),
            gramaje: $('#lp_bnhq_gramaje option:selected').text().trim(),
            maquina_id: $('#lp_bnhq_maquina option:selected').val(),
            papel_impresion_id: $('#lp_bnhq_papelImpresion option:selected').val()
        }
    }

    let datos = {
        type: 'interior',
        color: 0,
        hq: 1,
        paginas: input_data.paginas,
        tirada: parseInt($('#tirada').val()),
        merma: parseInt($('#merma').val()),
        ancho: dimension.ancho,
        alto: dimension.alto,
        papel_generico_id: input_data.papel_generico_id,
        papel_generico: input_data.papel_generico,
        gramaje: input_data.gramaje,
        cliente_id: $('#clienteId').find(":selected").val(),
        <?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v
    };

    if(updatedTipologias){
        datos.gota_negro= $('#lp_bnhq_gotaNegro').val()
        datos.gota_color= $('#lp_bnhq_gotaColor').val()
        datos.negro= $('#lp_bnhq_cobNegro').val()
        datos.cyan= $('#lp_bnhq_cobCyan').val()
        datos.magenta= $('#lp_bnhq_cobMagenta').val()
        datos.amarillo= $('#lp_bnhq_cobAmarillo').val()
    }

    $.ajax({
        type: "POST",
        url: "/cosidotapablanda/datatable",
        data: datos,
        success: function (data) {

            if(data.lineas.length >0){
                // Se cogen los valores de la linea con los datos correspondientes
                $.each(data.lineas, function(key, value) {
                    if(value.fields.maquina_id ===  input_data.maquina_id &&
                        value.fields.papel_generico_id === input_data.papel_generico_id &&
                        value.fields.papel_impresion_id ===  input_data.papel_impresion_id) {

                            fill_lp_bnhq(value.fields);
                            return false;
                    }
                    else{
                        clear_lp_bnhq(false);
                    }

                });

            }
            else{

            }
            yeniden(data.<?= csrf_token() ?>);

        },
        error: function(e){

        }
    })
}

function fill_lp_bnhq(row, fromComparator=false){

    if(fromComparator){

        var input_data = {
            paginas: row.paginas,
            papel_generico_id: row.papelGenericoId,
            gramaje: row.gramaje,
            papel_impresion_id: row.papelImpresionId,
            maquina_id: row.maquinaId,
        }
        calcularPresupuesto_bnhq(input_data)
    }
    else{

        // Si viene de hacerlo a mano...
        data = processRowData(row, 'lp_bnhq', 'lp-bnhq');

        var row = tableLineasPresupuesto.row('#lp_bnhq');
        if(row.length>0)
            tableLineasPresupuesto.row('#lp_bnhq').data(data).draw(true)
        else{
            tableLineasPresupuesto.row.add(data).draw(true)
            row = tableLineasPresupuesto.row('#lp_bnhq');
        }
        row.child(format(row.data())).show();

        eventos_lp_bnhq(data.maquinaTipo=='inkjet'?true:false)

        calcular_mermas()
        updateTotales(true, false, false)
        updateTablaEnvios()
    }

    $("#tableLineasPresupuesto").DataTable().columns.adjust();
}

function eventos_lp_bnhq(isInkjet = false){
    $('#lp_bnhq_papel').bind("focus", {clear_selectors: true}, clear_lp_bnhq);
    $('#lp_bnhq_gramaje').bind("focus", set_lp_bnhq_gramaje);
    $('#lp_bnhq_papelImpresion').focus("focus", set_lp_bnhq_papelImpresion);
    $('#lp_bnhq_maquina').bind("focus", set_lp_bnhq_maquina);
    $('#lp_bnhq_maquina').bind("change", change_lp_bnhq_maquina);
    $('#lp_bnhq_paginas').bind("change", change_lp_bnhq_paginas);
    $('#lp_bnhq_vercalculos').bind("click", {rowId: 'lp_bnhq'}, verCalculosInkjet);

    if(isInkjet){
        $('.lp-bnhq-tipologia').bind("change", change_lp_bnhq_tipologia);
        $('#lp_bnhq_defecto').bind("click", por_defecto_lp_bnhq);
    }

    $('#lp_bnhq_checkPapel').bind("change", {id_linea: 'lp_bnhq'}, update_total_linea);
    $('#lp_bnhq_checkClicks').bind("change", {id_linea: 'lp_bnhq'}, update_total_linea);
}

<?= $this->endSection() ?>

<!------------------------------------------->
<!-- Código JS para lp_colorhq. -->
<!------------------------------------------->
<?= $this->section("additionalInlineJs") ?>
async function set_lp_colorhq_gramaje(){
    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            clear_lp_colorhq(true)
        },
        data: {
            tipo: 'gramajeLineasPresupuesto',
            uso:   'interior',
            datos: $('#lp_colorhq_papel option:selected').val() ,
            tipoLinea: "colorhq",
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].id, 'text':data.menu[item].text})
                $('#lp_colorhq_gramaje').append(option);
            });
            $('#lp_colorhq_gramaje').val('')
        }
    });
}




async function set_lp_colorhq_papelImpresion(){
    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            $('#lp_colorhq_papelImpresion').empty()
            $('#lp_colorhq_maquina').empty()
            clear_lp_colorhq(false)
        },
        data: {
            tipo: 'papelImpresion',
            uso:   'colorhq',
            datos: $('#lp_colorhq_papel option:selected').val() ,
            gramaje: $('#lp_colorhq_gramaje option:selected').text().trim() ,
            tipoLinea: "colorhq",
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].id, 'text':data.menu[item].text})
                $('#lp_colorhq_papelImpresion').append(option);
            });
            $('#lp_colorhq_papelImpresion').val('')
        }
    });
}


async function set_lp_colorhq_maquina(){

    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            $('#lp_colorhq_maquina').empty()
            clear_lp_colorhq(false)
        },
        data: {
            tipo: 'maquina',
            uso:   'colorhq',
            tipoLinea: "interior",
            is_rotativa: 0,
            ancho:  getDimensionLibro().ancho,
            alto: getDimensionLibro().alto,
            datos: parseInt($('#tirada').val()) + parseInt($('#merma').val()),
            papel_impresion: $('#lp_colorhq_papelImpresion option:selected').val() ,
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].maquina_id, 'text':data.menu[item].maquina})
                $('#lp_colorhq_maquina').append(option);
            });
            $('#lp_colorhq_maquina').val('')
        }
    });
}


function clear_lp_colorhq(clear_selectors){
    let pags = $("#lp_colorhq_paginas" ).val()
    $(".lp-colorhq-input" ).val("0")
    $("#lp_colorhq_paginas" ).val(pags)
    if(clear_selectors)
        $( ".lp-colorhq-select").empty()
}


function change_lp_colorhq_maquina(){

    if(parseInt($('#lp_colorhq_paginas').val())>0){
        calcularPresupuesto_colorhq();
    }
}


function change_lp_colorhq_paginas(){

    if( parseInt($('#lp_colorhq_paginas').val())>0 &&
        parseInt($('#lp_colorhq_papel option:selected').val())>0 &&
        $('#lp_colorhq_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_colorhq_papelImpresion option:selected').val())>0
        ){

        calcularPresupuesto_colorhq();
    }
}


function change_lp_colorhq_tipologia(){

    if( parseInt($('#lp_colorhq_paginas').val())>0 &&
        parseInt($('#lp_colorhq_papel option:selected').val())>0 &&
        $('#lp_colorhq_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_colorhq_papelImpresion option:selected').val())>0
        ){

        calcularPresupuesto_colorhq({},true);
    }
}


function por_defecto_lp_colorhq(){

    if( parseInt($('#lp_colorhq_paginas').val())>0 &&
        parseInt($('#lp_colorhq_papel option:selected').val())>0 &&
        $('#lp_colorhq_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_colorhq_papelImpresion option:selected').val())>0
        ){

            calcularPresupuesto_colorhq();
    }
}



function calcularPresupuesto_colorhq(input_data={}, updatedTipologias = false){

    const dimension = getDimensionLibro();

    if(Object.keys(input_data).length == 0){

        input_data = {
            paginas:parseInt($('#lp_colorhq_paginas').val()),
            papel_generico_id: $('#lp_colorhq_papel option:selected').val(),
            papel_generico: $('#lp_colorhq_papel option:selected').text().trim(),
            gramaje: $('#lp_colorhq_gramaje option:selected').text().trim(),
            maquina_id: $('#lp_colorhq_maquina option:selected').val(),
            papel_impresion_id: $('#lp_colorhq_papelImpresion option:selected').val()
        }
    }

    let datos = {
        type: 'interior',
        color: 1,
        hq: 1,
        paginas: input_data.paginas,
        tirada: parseInt($('#tirada').val()),
        merma: parseInt($('#merma').val()),
        ancho: dimension.ancho,
        alto: dimension.alto,
        papel_generico_id: input_data.papel_generico_id,
        papel_generico: input_data.papel_generico,
        gramaje: input_data.gramaje,
        cliente_id: $('#clienteId').find(":selected").val(),
        <?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v
    };

    if(updatedTipologias){
        datos.gota_negro= $('#lp_colorhq_gotaNegro').val()
        datos.gota_color= $('#lp_colorhq_gotaColor').val()
        datos.negro= $('#lp_colorhq_cobNegro').val()
        datos.cyan= $('#lp_colorhq_cobCyan').val()
        datos.magenta= $('#lp_colorhq_cobMagenta').val()
        datos.amarillo= $('#lp_colorhq_cobAmarillo').val()
    }

    $.ajax({
        type: "POST",
        url: "/cosidotapablanda/datatable",
        data: datos,
        success: function (data) {

            if(data.lineas.length >0){
                // Se cogen los valores de la linea con los datos correspondientes
                $.each(data.lineas, function(key, value) {
                    if(value.fields.maquina_id ===  input_data.maquina_id &&
                        value.fields.papel_generico_id === input_data.papel_generico_id &&
                        value.fields.papel_impresion_id ===  input_data.papel_impresion_id) {

                            fill_lp_colorhq(value.fields);
                            return false;
                    }
                    else{
                        clear_lp_colorhq(false);
                    }

                });

            }
            else{

            }
            yeniden(data.<?= csrf_token() ?>);

        },
        error: function(e){

        }
    })
}

function fill_lp_colorhq(row, fromComparator=false){

    if(fromComparator){
        var input_data = {
            paginas: row.paginas,
            papel_generico_id: row.papelGenericoId,
            gramaje: row.gramaje,
            papel_impresion_id: row.papelImpresionId,
            maquina_id: row.maquinaId,
        }
        calcularPresupuesto_colorhq(input_data)
    }
    else{
        // Si viene de hacerlo a mano...
        data = processRowData(row, 'lp_colorhq', 'lp-colorhq');

        var row = tableLineasPresupuesto.row('#lp_colorhq');
        if(row.length>0)
            tableLineasPresupuesto.row('#lp_colorhq').data(data).draw(true)
        else{
            tableLineasPresupuesto.row.add(data).draw(true)
            row = tableLineasPresupuesto.row('#lp_colorhq');
        }
        row.child(format(row.data())).show();

        eventos_lp_colorhq(data.maquinaTipo=='inkjet'?true:false)

        calcular_mermas()
        updateTotales(true, false, false)
        updateTablaEnvios()
    }

    $("#tableLineasPresupuesto").DataTable().columns.adjust();

}

function eventos_lp_colorhq(isInkjet = false){

    $('#lp_colorhq_papel').bind("focus", {clear_selectors: true}, clear_lp_colorhq);
    $('#lp_colorhq_gramaje').bind("focus", set_lp_colorhq_gramaje);
    $('#lp_colorhq_papelImpresion').focus("focus", set_lp_colorhq_papelImpresion);
    $('#lp_colorhq_maquina').bind("focus", set_lp_colorhq_maquina);
    $('#lp_colorhq_maquina').bind("change", change_lp_colorhq_maquina);
    $('#lp_colorhq_paginas').bind("change", change_lp_colorhq_paginas);
    $('#lp_colorhq_vercalculos').bind("click", {rowId: 'lp_colorhq'}, verCalculosInkjet);

    if(isInkjet){
        $('.lp-colorhq-tipologia').bind("change", change_lp_colorhq_tipologia);
        $('#lp_colorhq_defecto').bind("click", por_defecto_lp_colorhq);
    }    

    $('#lp_colorhq_checkPapel').bind("change", {id_linea: 'lp_colorhq'}, update_total_linea);
    $('#lp_colorhq_checkClicks').bind("change", {id_linea: 'lp_colorhq'}, update_total_linea);
}
<?= $this->endSection() ?>

<!------------------------------------------->
<!-- Código JS para lp_rot_bn. -->
<!------------------------------------------->
<?= $this->section("additionalInlineJs") ?>
async function set_lp_rot_bn_gramaje(){

    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            clear_lp_rot_bn(true)
        },
        data: {
            tipo: 'gramajeLineasPresupuesto',
            uso:   'rotativa',
            datos: $('#lp_rot_bn_papel option:selected').val() ,
            tipoLinea: "negro",
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].id, 'text':data.menu[item].text})
                $('#lp_rot_bn_gramaje').append(option);
            });
            $('#lp_rot_bn_gramaje').val('')
        }
    });

}


async function set_lp_rot_bn_papelImpresion(){

    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            $('#lp_rot_bn_papelImpresion').empty()
            $('#lp_rot_bn_maquina').empty()
            clear_lp_rot_bn(false)
        },
        data: {
            tipo: 'papelImpresion',
            uso:   'rotativa',
            datos: $('#lp_rot_bn_papel option:selected').val() ,
            gramaje: $('#lp_rot_bn_gramaje option:selected').text().trim() ,
            tipoLinea: "negro",
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].id, 'text':data.menu[item].text})
                $('#lp_rot_bn_papelImpresion').append(option);
            });
            $('#lp_rot_bn_papelImpresion').val('')
        }
    });
}


async function set_lp_rot_bn_maquina(){

    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            $('#lp_rot_bn_maquina').empty()
            clear_lp_rot_bn(false)
        },
        data: {
            tipo: 'maquina',
            uso:   'negro',
            tipoLinea: "interior",
            is_rotativa: 1,
            ancho:  getDimensionLibro().ancho,
            alto: getDimensionLibro().alto,
            datos: parseInt($('#tirada').val()) + parseInt($('#merma').val()),
            papel_impresion: $('#lp_rot_bn_papelImpresion option:selected').val() ,
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].maquina_id, 'text':data.menu[item].maquina})
                $('#lp_rot_bn_maquina').append(option);
            });
            $('#lp_rot_bn_maquina').val('')
        }
    });
}


function clear_lp_rot_bn(clear_selectors){
    let pags = $("#lp_rot_bn_paginas" ).val()
    $(".lp-rotbn-input" ).val("0")
    $("#lp_rot_bn_paginas" ).val(pags)
    if(clear_selectors)
        $( ".lp-rotbn-select").empty()
}


function change_lp_rot_bn_maquina(){

    if(parseInt($('#lp_rot_bn_paginas').val())>0){
        calcularPresupuesto_rot_bn();
    }
}


function change_lp_rot_bn_paginas(){

    if( parseInt($('#lp_rot_bn_paginas').val())>0 &&
        parseInt($('#lp_rot_bn_papel option:selected').val())>0 &&
        $('#lp_rot_bn_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_rot_bn_papelImpresion option:selected').val())>0
        ){

            calcularPresupuesto_rot_bn();
    }
}


function change_lp_rot_bn_aFavorFibra(){

    
    if( parseInt($('#lp_rot_bn_paginas').val())>0 &&
        parseInt($('#lp_rot_bn_papel option:selected').val())>0 &&
        $('#lp_rot_bn_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_rot_bn_papelImpresion option:selected').val())>0
        ){

            calcularPresupuesto_rot_bn(false, true);
    }
}


function calcularPresupuesto_rot_bn(fromComparador=false, updatedTipologias=false, input_data={}){

    const dimension = getDimensionLibro();

    if(Object.keys(input_data).length == 0){

        input_data = {
            paginas:parseInt($('#lp_rot_bn_paginas').val()),
            papel_generico_id: $('#lp_rot_bn_papel option:selected').val(),
            papel_generico: $('#lp_rot_bn_papel option:selected').text().trim(),
            gramaje: $('#lp_rot_bn_gramaje option:selected').text().trim(),
            maquina_id: $('#lp_rot_bn_maquina option:selected').val(),
            papel_impresion_id: $('#lp_rot_bn_papelImpresion option:selected').val(),
            fibra: $('#lp_rot_bn_aFavorFibra').prop('checked')
        }
    }

    let datos = {
        type: 'interior_rot',
        color: 0,
        hq: 0,
        paginas: input_data.paginas,
        paginas_negro: input_data.paginas,
        paginas_color: 0,
        tirada: parseInt($('#tirada').val()),
        merma: parseInt($('#merma').val()),
        ancho: dimension.ancho,
        alto: dimension.alto,
        papel_generico_id: input_data.papel_generico_id,
        papel_generico: input_data.papel_generico,
        gramaje: input_data.gramaje,
        cliente_id: $('#clienteId').find(":selected").val(),
        <?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v
    };

    if(updatedTipologias){
        datos.gota_negro= $('#lp_rot_bn_gotaNegro').val()
        datos.gota_color= $('#lp_rot_bn_gotaColor').val()
        datos.negro= $('#lp_rot_bn_cobNegro').val()
        datos.cyan= $('#lp_rot_bn_cobCyan').val()
        datos.magenta= $('#lp_rot_bn_cobMagenta').val()
        datos.amarillo= $('#lp_rot_bn_cobAmarillo').val()
    }

    $.ajax({
        type: "POST",
        url: "/cosidotapablanda/datatable",
        data: datos,
        success: function (data) {

            if(data.lineas.length >0){
                // Se cogen los valores de la linea con los datos correspondientes
                $.each(data.lineas, function(key, value) {
                    
                    if(fromComparador){
                        if(value.fields.maquina_id ===  input_data.maquina_id &&
                            value.fields.papel_generico_id === input_data.papel_generico_id &&
                            value.fields.papel_impresion_id ===  input_data.papel_impresion_id) {

                                fill_lp_rot_bn(value.fields);
                                return false;
                        }
                    }
                    else if(value.fields.maquina_id ===  input_data.maquina_id &&
                            value.fields.papel_generico_id === input_data.papel_generico_id &&
                            value.fields.papel_impresion_id ===  input_data.papel_impresion_id &&
                            value.fields.a_favor_fibra == input_data.fibra) {

                            fill_lp_rot_bn(value.fields);
                            return false;
                    }
                    clear_lp_rot_bn(false);
                });

            }
            else{

            }
            yeniden(data.<?= csrf_token() ?>);

        },
        error: function(e){

        }
    })
}



function change_lp_rot_bn_tipologia(){

    if( parseInt($('#lp_rot_bn_paginas').val())>0 &&
        parseInt($('#lp_rot_bn_papel option:selected').val())>0 &&
        $('#lp_rot_bn_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_rot_bn_papelImpresion option:selected').val())>0
        ){

        calcularPresupuesto_rot_bn(false,true);
    }
}


function por_defecto_lp_rot_bn(){

    if( parseInt($('#lp_rot_bn_paginas').val())>0 &&
        parseInt($('#lp_rot_bn_papel option:selected').val())>0 &&
        $('#lp_rot_bn_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_rot_bn_papelImpresion option:selected').val())>0
        ){

            calcularPresupuesto_rot_bn(false);
    }
}


function fill_lp_rot_bn(row, fromComparador=false){

    if(fromComparador){

        var input_data = {
            paginas: row.paginas,
            papel_generico_id: row.papelGenericoId,
            gramaje: row.gramaje,
            papel_impresion_id: row.papelImpresionId,
            maquina_id: row.maquinaId,
            fibra: row.aFavorFibra=='no'?false:true
        }
        
        calcularPresupuesto_rot_bn(false, false, input_data);

    }
    else{
        
        // Si viene de hacerlo a mano...
        data = processRowData(row, 'lp_rot_bn', 'lp-rot-bn');

        var row = tableLineasPresupuesto.row('#lp_rot_bn');
        if(row.length>0)
            tableLineasPresupuesto.row('#lp_rot_bn').data(data).draw(true)
        else{
            tableLineasPresupuesto.row.add(data).draw(true)
            row = tableLineasPresupuesto.row('#lp_rot_bn');
        }
        row.child(format(row.data())).show();

        eventos_lp_rot_bn()

        calcular_mermas()
        updateTotales(true, false, false)
        updateTablaEnvios()
    }

    $('.lp_rot_bn').css('display', '')
    $("#tableLineasPresupuesto").DataTable().columns.adjust();

}

function eventos_lp_rot_bn(){
    $('#lp_rot_bn_papel').bind("focus", {clear_selectors: true}, clear_lp_rot_bn);
    $('#lp_rot_bn_gramaje').bind("focus", set_lp_rot_bn_gramaje);
    $('#lp_rot_bn_papelImpresion').focus("focus", set_lp_rot_bn_papelImpresion);
    $('#lp_rot_bn_maquina').bind("focus", set_lp_rot_bn_maquina);
    $('#lp_rot_bn_maquina').bind("change", change_lp_rot_bn_maquina);
    $('#lp_rot_bn_paginas').bind("change", change_lp_rot_bn_paginas);
    $('#lp_rot_bn_vercalculos').bind("click", {rowId: 'lp_rot_bn'}, verCalculosInkjet);
    $('#lp_rot_bn_aFavorFibra').bind("change", change_lp_rot_bn_aFavorFibra);
    $('.lp-rot-bn-tipologia').bind("change", change_lp_rot_bn_tipologia);
    $('#lp_rot_bn_defecto').bind("click", por_defecto_lp_rot_bn);
    $('#lp_rot_bn_checkPapel').bind("change", {id_linea: 'lp_rot_bn'}, update_total_linea);
    $('#lp_rot_bn_checkClicks').bind("change", {id_linea: 'lp_rot_bn'}, update_total_linea);

    
}
<?= $this->endSection() ?>



<!------------------------------------------->
<!-- Código JS para lp_rot_color. -->
<!------------------------------------------->
<?= $this->section("additionalInlineJs") ?>
async function set_lp_rot_color_gramaje(){

    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            clear_lp_rot_color(true)
        },
        data: {
            tipo: 'gramajeLineasPresupuesto',
            uso:   'rotativa',
            datos: $('#lp_rot_color_papel option:selected').val() ,
            tipoLinea: "color",
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].id, 'text':data.menu[item].text})
                $('#lp_rot_color_gramaje').append(option);
            });
            $('#lp_rot_color_gramaje').val('')
        }
    });

}


async function set_lp_rot_color_papelImpresion(){

    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            $('#lp_rot_color_papelImpresion').empty()
            $('#lp_rot_color_maquina').empty()
            clear_lp_rot_color(false)
        },
        data: {
            tipo: 'papelImpresion',
            uso:   'rotativa',
            datos: $('#lp_rot_color_papel option:selected').val() ,
            gramaje: $('#lp_rot_color_gramaje option:selected').text().trim() ,
            tipoLinea: "color",
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].id, 'text':data.menu[item].text})
                $('#lp_rot_color_papelImpresion').append(option);
            });
            $('#lp_rot_color_papelImpresion').val('')
        }
    });
}


async function set_lp_rot_color_maquina(){

    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            $('#lp_rot_color_maquina').empty()
            clear_lp_rot_color(false)
        },
        data: {
            tipo: 'maquina',
            uso:   'color',
            tipoLinea: "interior",
            is_rotativa: 1,
            ancho:  getDimensionLibro().ancho,
            alto: getDimensionLibro().alto,
            datos: parseInt($('#tirada').val()) + parseInt($('#merma').val()),
            papel_impresion: $('#lp_rot_color_papelImpresion option:selected').val() ,
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].maquina_id, 'text':data.menu[item].maquina})
                $('#lp_rot_color_maquina').append(option);
            });
            $('#lp_rot_color_maquina').val('')
        }
    });
}


function clear_lp_rot_color(clear_selectors){
    let pags = $("#lp_rot_color_paginas" ).val()
    $(".lp-rotcolor-input" ).val("0")
    $("#lp_rot_color_paginas" ).val(pags)
    if(clear_selectors)
        $( ".lp-rotcolor-select").empty()
}


function change_lp_rot_color_maquina(){

    if(parseInt($('#lp_rot_color_paginas').val())>0){
        calcularPresupuesto_rot_color();
    }
}


function change_lp_rot_color_paginas(){

    if( parseInt($('#lp_rot_color_paginas').val())>0 &&
        parseInt($('#lp_rot_color_papel option:selected').val())>0 &&
        $('#lp_rot_color_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_rot_color_papelImpresion option:selected').val())>0
        ){

            calcularPresupuesto_rot_color();
    }
}


function change_lp_rot_color_aFavorFibra(){

    if( parseInt($('#lp_rot_color_paginas').val())>0 &&
        parseInt($('#lp_rot_color_papel option:selected').val())>0 &&
        $('#lp_rot_color_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_rot_color_papelImpresion option:selected').val())>0
        ){

            calcularPresupuesto_rot_color(false, true);
    }
}


function calcularPresupuesto_rot_color(fromComparador=false, updatedTipologias=false, input_data={}){

    const dimension = getDimensionLibro();

    if(Object.keys(input_data).length == 0){

        input_data = {
            paginas:parseInt($('#lp_rot_color_paginas').val()),
            papel_generico_id: $('#lp_rot_color_papel option:selected').val(),
            papel_generico: $('#lp_rot_color_papel option:selected').text().trim(),
            gramaje: $('#lp_rot_color_gramaje option:selected').text().trim(),
            maquina_id: $('#lp_rot_color_maquina option:selected').val(),
            papel_impresion_id: $('#lp_rot_color_papelImpresion option:selected').val(),
            fibra: $('#lp_rot_bn_aFavorFibra').prop('checked')
        }
    }

    let datos = {
        type: 'interior_rot',
        color: 1,
        hq: 0,
        paginas: input_data.paginas,
        paginas_negro: input_data.paginas-parseInt($('#lp_rot_color_numPagColor').val()),
        paginas_color: parseInt($('#lp_rot_color_numPagColor').val()),
        tirada: parseInt($('#tirada').val()),
        merma: parseInt($('#merma').val()),
        ancho: dimension.ancho,
        alto: dimension.alto,
        papel_generico_id: input_data.papel_generico_id,
        papel_generico: input_data.papel_generico,
        gramaje: input_data.gramaje,
        cliente_id: $('#clienteId').find(":selected").val(),
        <?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v
    };

    if(fromComparador){
        datos.paginas_negro = parseInt($('#compPaginasNegro').val())
        datos.paginas_color = parseInt($('#compPaginasColor').val())
    }

    if(updatedTipologias){
        datos.gota_negro= $('#lp_rot_color_gotaNegro').val()
        datos.gota_color= $('#lp_rot_color_gotaColor').val()
        datos.negro= $('#lp_rot_color_cobNegro').val()
        datos.cyan= $('#lp_rot_color_cobCyan').val()
        datos.magenta= $('#lp_rot_color_cobMagenta').val()
        datos.amarillo= $('#lp_rot_color_cobAmarillo').val()
    }

    $.ajax({
        type: "POST",
        url: "/cosidotapablanda/datatable",
        data: datos,
        success: function (data) {

            if(data.lineas.length >0){
                // Se cogen los valores de la linea con los datos correspondientes
                $.each(data.lineas, function(key, value) {
                    fibra = $('#lp_rot_color_aFavorFibra').prop('checked')
                    if(fromComparador){
                        if(value.fields.maquina_id ===  input_data.maquina_id &&
                            value.fields.papel_generico_id === input_data.papel_generico_id &&
                            value.fields.papel_impresion_id ===  input_data.papel_impresion_id) {

                                fill_lp_rot_color(value.fields);
                                return false;
                        }
                    }
                    else if(value.fields.maquina_id ===  input_data.maquina_id &&
                            value.fields.papel_generico_id === input_data.papel_generico_id &&
                            value.fields.papel_impresion_id ===  input_data.papel_impresion_id &&
                            value.fields.a_favor_fibra == input_data.fibra) {

                            fill_lp_rot_color(value.fields);
                            return false;
                    }
                    clear_lp_rot_color(false);
                });

            }
            else{

            }
            yeniden(data.<?= csrf_token() ?>);

        },
        error: function(e){

        }
    })
}


function change_lp_rot_color_tipologia(){

    if( parseInt($('#lp_rot_color_paginas').val())>0 &&
        parseInt($('#lp_rot_color_papel option:selected').val())>0 &&
        $('#lp_rot_color_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_rot_color_papelImpresion option:selected').val())>0
        ){

        calcularPresupuesto_rot_color(false,true);
    }
}


function por_defecto_lp_rot_color(){

    if( parseInt($('#lp_rot_color_paginas').val())>0 &&
        parseInt($('#lp_rot_color_papel option:selected').val())>0 &&
        $('#lp_rot_color_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_rot_color_papelImpresion option:selected').val())>0
        ){

            calcularPresupuesto_rot_color(false);
    }
}


function fill_lp_rot_color(row, fromComparador=false){

    if(fromComparador){
        var input_data = {
            paginas: row.paginas,
            papel_generico_id: row.papelGenericoId,
            gramaje: row.gramaje,
            papel_impresion_id: row.papelImpresionId,
            maquina_id: row.maquinaId,
            fibra: row.aFavorFibra=='no'?false:true
        }

        calcularPresupuesto_rot_color(false, false, input_data);

    }
    else{
        // Si viene de hacerlo a mano...
        // Si viene de hacerlo a mano...
        data = processRowData(row, 'lp_rot_color', 'lp-rot-color');

        var row = tableLineasPresupuesto.row('#lp_rot_color');
        if(row.length>0)
            tableLineasPresupuesto.row('#lp_rot_color').data(data).draw(true)
        else{
            tableLineasPresupuesto.row.add(data).draw(true)
            row = tableLineasPresupuesto.row('#lp_rot_color');
        }
        row.child(format(row.data())).show();

        eventos_lp_rot_color()

        calcular_mermas()
        updateTotales(true, false, false)
        updateTablaEnvios()
    }
    
    $("#tableLineasPresupuesto").DataTable().columns.adjust();

}

function eventos_lp_rot_color(){
    $('#lp_rot_color_papel').bind("focus", {clear_selectors: true}, clear_lp_rot_color);
    $('#lp_rot_color_gramaje').bind("focus", set_lp_rot_color_gramaje);
    $('#lp_rot_color_papelImpresion').focus("focus", set_lp_rot_color_papelImpresion);
    $('#lp_rot_color_maquina').bind("focus", set_lp_rot_color_maquina);
    $('#lp_rot_color_maquina').bind("change", change_lp_rot_color_maquina);
    $('#lp_rot_color_paginas').bind("change", change_lp_rot_color_paginas);
    $('#lp_rot_color_vercalculos').bind("click", {rowId: 'lp_rot_color'}, verCalculosInkjet);
    $('#lp_rot_color_aFavorFibra').bind("change", change_lp_rot_color_aFavorFibra);
    $('.lp-rot-color-tipologia').bind("change", change_lp_rot_color_tipologia);
    $('#lp_rot_color_defecto').bind("click", por_defecto_lp_rot_color);
    $('#lp_rot_color_checkPapel').bind("change", {id_linea: 'lp_rot_color'}, update_total_linea);
    $('#lp_rot_color_checkClicks').bind("change", {id_linea: 'lp_rot_color'}, update_total_linea);
}
<?= $this->endSection() ?>


<!------------------------------------------->
<!-- Código JS para cubierta. -->
<!------------------------------------------->
<?= $this->section("additionalInlineJs") ?>
async function set_lp_cubierta_gramaje(){

    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            clear_lp_cubierta(true)
        },
        data: {
            tipo: 'gramajeLineasPresupuesto',
            uso:   'cubierta',
            datos: $('#lp_cubierta_papel option:selected').val() ,
            tipoLinea: "colorhq",
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].id, 'text':data.menu[item].text})
                $('#lp_cubierta_gramaje').append(option);
            });
            $('#lp_cubierta_gramaje').val('')
        }
    });

}


async function set_lp_cubierta_papelImpresion(){

    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            $('#lp_cubierta_papelImpresion').empty()
            $('#lp_cubierta_maquina').empty()
            clear_lp_cubierta(false)
        },
        data: {
            tipo: 'papelImpresion',
            uso:   'cubierta',
            datos: $('#lp_cubierta_papel option:selected').val() ,
            gramaje: $('#lp_cubierta_gramaje option:selected').text().trim() ,
            tipoLinea: "colorhq",
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].id, 'text':data.menu[item].text})
                $('#lp_cubierta_papelImpresion').append(option);
            });
            $('#lp_cubierta_papelImpresion').val('')
        }
    });
}


async function set_lp_cubierta_maquina(){

    await $.ajax({
        type: 'post',
        url: '<?= route_to("menuItemsOfCosidotapablanda") ?>',
        beforeSend: function() {
            $('#lp_cubierta_maquina').empty()
            clear_lp_cubierta(false)
        },
        data: {
            tipo: 'maquina',
            uso:   'colorhq',
            tipoLinea: "cubierta",
            uso_tarifa: "cubierta",
            is_rotativa: 0,
            ancho:  getDimensionLibro().ancho,
            alto: getDimensionLibro().alto,
            datos: parseInt($('#tirada').val()) + parseInt($('#merma').val()),
            papel_impresion: $('#lp_cubierta_papelImpresion option:selected').val() ,
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success: function (data) {
            yeniden(data.<?= csrf_token() ?>);
            $.each(data.menu, function(item){
                var option = $('<option/>', {'value':data.menu[item].maquina_id, 'text':data.menu[item].maquina})
                $('#lp_cubierta_maquina').append(option);
            });
            $('#lp_cubierta_maquina').val('')
        }
    });
}


function clear_lp_cubierta(clear_selectors){
    let pags = $("#lp_cubierta_paginas option:selected" ).val()
    $(".lp-cubierta-input" ).val("0")
    $("#lp_cubierta_paginas" ).val(pags)
    if(clear_selectors)
        $( ".lp-cubierta-select").empty()
}


function change_lp_cubierta_maquina(){

    if(parseInt($('#lp_cubierta_paginas option:selected').val())>0){
        calcularPresupuesto_cubierta();
    }
}


function change_lp_cubierta_paginas(){

    if( parseInt($('#lp_cubierta_paginas option:selected').val())>0 &&
        parseInt($('#lp_cubierta_papel option:selected').val())>0 &&
        $('#lp_cubierta_gramaje option:selected').text().length>0 &&
        parseInt($('#lp_cubierta_papelImpresion option:selected').val())>0
        ){

            calcularPresupuesto_cubierta();
    }
}


function calcularPresupuesto_cubierta(fromComparador=false, input_data={}){

    const dimension = getDimensionLibro();

    if(Object.keys(input_data).length == 0){

        input_data = {
            paginas:parseInt($('#lp_cubierta_paginas option:selected').val()),
            papel_generico_id: $('#lp_cubierta_papel option:selected').val(),
            papel_generico: $('#lp_cubierta_papel option:selected').text().trim(),
            gramaje: $('#lp_cubierta_gramaje option:selected').text().trim(),
            maquina_id: $('#lp_cubierta_maquina option:selected').val(),
            papel_impresion_id: $('#lp_cubierta_papelImpresion option:selected').val()
        }
    }

    let datos = {
        type: 'cubierta',
        color: 1,
        hq: 1,
        paginas: input_data.paginas,
        paginas_negro: 0,
        paginas_color: 0,
        solapas: $('#solapas').is(':checked')?1:0,
        solapas_ancho: parseInt($('#solapas_ancho').val()),
        tirada: parseInt($('#tirada').val()),
        merma: parseInt($('#mermacubierta').val()),
        ancho: dimension.ancho,
        alto: dimension.alto,
        papel_generico_id: input_data.papel_generico_id,
        papel_generico: input_data.papel_generico,
        gramaje: input_data.gramaje,
        cliente_id: $('#clienteId').find(":selected").val(),
        <?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v
    }

    $.ajax({
        type: "POST",
        url: "/cosidotapablanda/datatable",
        data: datos,
        success: function (data) {

            if(data.lineas.length >0){
                // Se cogen los valores de la linea con los datos correspondientes
                $.each(data.lineas, function(key, value) {
                    if(value.fields.maquina_id ===  input_data.maquina_id &&
                        value.fields.papel_generico_id === input_data.papel_generico_id &&
                        value.fields.papel_impresion_id ===  input_data.papel_impresion_id) {

                            fill_lp_cubierta(value.fields);
                            return false;
                    }
                    clear_lp_cubierta(false);
                });

            }
            else{

            }
            yeniden(data.<?= csrf_token() ?>);

        },
        error: function(e){

        }
    })
}


function fill_lp_cubierta(row, fromComparador=false){

    if(fromComparador){

        var input_data = {
            paginas: row.paginas,
            papel_generico_id: row.papelGenericoId,
            gramaje: row.gramaje,
            papel_impresion_id: row.papelImpresionId,
            maquina_id: row.maquinaId,
        }

        calcularPresupuesto_cubierta(false, input_data);

    }
    else{

        var portadaObjeto = {
            anchoLibro:row.dimensiones_libro[0],
            altoLibro:row.dimensiones_libro[1],
            solapas:$('#solapas_ancho').val(),
            lomo:row.mano};

        //previewEsquemaCubierta(portadaObjeto);

        // Si viene de hacerlo a mano...
        data = processRowData(row, 'lp_cubierta', 'lp-cubierta');

        var row = tableLineasPresupuesto.row('#lp_cubierta');
        if(row.length>0)
            tableLineasPresupuesto.row('#lp_cubierta').data(data).draw(true)
        else{
            tableLineasPresupuesto.row.add(data).draw(true)
            row = tableLineasPresupuesto.row('#lp_cubierta');
        }
        row.child(format(row.data())).show();

        eventos_lp_cubierta()

        calcular_mermas()
        updateTotales(true, false, false)
        updateTablaEnvios()

    }

    $("#tableLineasPresupuesto").DataTable().columns.adjust();

}

function eventos_lp_cubierta(){

    $('#lp_cubierta_papel').bind("focus", {clear_selectors: true}, clear_lp_cubierta);
    $('#lp_cubierta_gramaje').bind("focus", set_lp_cubierta_gramaje);
    $('#lp_cubierta_papelImpresion').focus("focus", set_lp_cubierta_papelImpresion);
    $('#lp_cubierta_maquina').bind("focus", set_lp_cubierta_maquina);
    $('#lp_cubierta_maquina').bind("change", change_lp_cubierta_maquina);
    $('#lp_cubierta_paginas').bind("change", change_lp_cubierta_paginas);
    $('#lp_cubierta_vercalculos').bind("click", {rowId: 'lp_cubierta'}, verCalculosInkjet);
    $('#lp_cubierta_checkPapel').bind("change", {id_linea: 'lp_cubierta'}, update_total_linea);
    $('#lp_cubierta_checkClicks').bind("change", {id_linea: 'lp_cubierta'}, update_total_linea);
}

fill_lp_from_bbdd()

function fill_lp_from_bbdd(){

    const lineasPresupuestoList = <?php echo json_encode($lineasPresupuesto); ?>;
    lineasPresupuestoList.forEach(function(lp) {

        const formas = JSON.parse(lp.formas)
        lp.dimensiones_maquina = [formas.maquina_ancho, formas.maquina_alto]
        lp.dimensiones_maquina_impresion = [formas.maquina_impresion_ancho, formas.maquina_impresion_alto]
        lp.num_formas = {
            value : formas.formas,
            num_formas_verticales : formas.formas_v,
            num_formas_horizontales : formas.formas_h,
            posicion_formas : formas.formas_orientacion
        }
        lp['tipo_maquina'] = lp['maquina_tipo']
        lp['precio_impresion_horas'] = lp['precio_impresion']
        lp['margen_impresion_horas'] = lp['margen_impresion']
        lp['precio_libro'] = lp['libro']
        lp['precio_pedido'] = lp['total_papel_pedido']  
        lp['total_impresion'] = lp['total_linea']  
        lp['precios_pliegos'] = lp['pliegos_precio']  
        lp['papel_generico_id'] = lp['papel_id']  

        dateObj = new Date(lp['tiempo_maquina'] * 1000);
        hours = dateObj.getUTCHours();
        minutes = dateObj.getUTCMinutes();
        seconds = dateObj.getSeconds();
        lp['tiempo_maquina'] = hours.toString().padStart(2, '0') + ':' + 
            minutes.toString().padStart(2, '0') + ':' + 
            seconds.toString().padStart(2, '0');
        
        if(lp.maquina_tipo=='inkjet'){
            
            lp.datosTipologias = {
                negro: lp.rotativa_negro,
                cyan: lp.rotativa_cyan,
                magenta: lp.rotativa_magenta,
                amarillo: lp.rotativa_amarillo,
                gota_negro: lp.rotativa_gota_negro,
                gota_color: lp.rotativa_gota_color,
            }

            lp['paginas_color'] = lp['rotativa_pag_color']

            lp['totalImpresion'] = lp['rotativa_total_impresion']
            lp['a_favor_fibra'] = lp['rotativa_a_favor_fibra']
            
            lp['resolucion'] = lp['rotativa_resolucion']
            lp['superficie'] = lp['rotativa_area_paginas']

            lp['num_gotas_negro'] = lp['rotativa_num_gotas_negro']
            lp['num_gotas_cyan'] = lp['rotativa_num_gotas_cyan']
            lp['num_gotas_magenta'] = lp['rotativa_num_gotas_magenta']
            lp['num_gotas_amarillo'] = lp['rotativa_num_gotas_amarillo'] 

            lp['precio_pagina_negro'] = lp['rotativa_precio_pag_negro']
            lp['precio_pagina_color'] = lp['rotativa_precio_pag_color']
            lp['factor_altura'] = lp['rotativa_factor_altura']
            lp['factor_anchura'] = lp['rotativa_factor_anchura']
            lp['paginas_por_pliego'] = lp['rotativa_pag_por_pliego'] 

            lp['clicks_libro'] = lp['rotativa_clicks_libro']
            lp['peso_gotas_negro'] = lp['rotativa_peso_gotas_negro']
            lp['peso_gotas_cyan'] = lp['rotativa_peso_gotas_cyan']
            lp['peso_gotas_magenta'] = lp['rotativa_peso_gotas_magenta']
            lp['peso_gotas_amarillo'] = lp['rotativa_peso_gotas_amarillo']
            lp['clicks_pedido'] = lp['rotativa_clicks_total']
            lp['precio_click_pedido'] = lp['precio_click_pedido'] 
            lp['precio_tinta'] = lp['rotativa_precio_tinta']
            
            
            lp['peso_gotas_negro_pedido'] = lp['rotativa_peso_gotas_negro_pedido']
            lp['peso_gotas_cyan_pedido'] = lp['rotativa_peso_gotas_cyan_pedido']
            lp['peso_gotas_magenta_pedido'] = lp['rotativa_peso_gotas_magenta_pedido']
            lp['peso_gotas_amarillo_pedido'] = lp['rotativa_peso_gotas_amarillo_pedido'] 

        }
        if(lp.tipo.includes('rot')){
        
            lp['maquina_velocidad'] = lp['rotativa_mxm']
            lp['metros_papel_libro'] = lp['rotativa_metros_libro']
            lp['metros_papel_total'] = lp['rotativa_metros_total']
            lp['velocidad_corte'] = lp['rotativa_velocidad_corte'] 
            lp['precio_hora_corte'] = lp['rotativa_precio_hora_corte']
            lp['tiempo_corte'] = lp['rotativa_tiempo_corte']
            lp['total_corte'] = lp['rotativa_total_corte']
        }
        
        lp['areaPaginas'] = lp['rotativa_superficie']

        data = processRowData(lp, lp.tipo, lp.tipo.replace('_', '-'));

        var row = tableLineasPresupuesto.row("#" + lp.tipo);
        
        tableLineasPresupuesto.row.add(data).draw(true)
        row = tableLineasPresupuesto.row("#" + lp.tipo);
    
        row.child(format(row.data())).show();

        switch(lp.tipo){
            case 'lp_bn':
                eventos_lp_bn()
                break
            case 'lp_bnhq':
                eventos_lp_bnhq()
                break
            case 'lp_color':
                eventos_lp_color()
                break
            case 'lp_colorhq':
                eventos_lp_colorhq()
                break
            case 'lp_rot_bn':
                eventos_lp_rot_bn()
                break
            case 'lp_rot_color':
                eventos_lp_rot_color()
                break
            case 'lp_cubierta':
                eventos_lp_cubierta()
                break
        }
    })

}


async function fill_bbdd_from_lp(presupuesto_id){

    data=[];

    tableLineasPresupuesto.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
        var rowData = this.data();
        const formas = {
            maquina_ancho:  rowData.maquina_ancho,
            maquina_alto:  rowData.maquina_alto,
            maquina_impresion_ancho:  rowData.maquina_impresion_ancho,
            maquina_impresion_alto:  rowData.maquina_impresion_alto,
            formas:  rowData.formas,
            formas_v:  rowData.formas_v,
            formas_h:  rowData.formas_h,
            formas_orientacion:  rowData.formas_orientacion,
        }
        
        var t_maq_str = rowData.tiempo.split(':'); // split it at the colons
        var t_maq = 0
        
        if(t_maq_str.length == 3)
            t_maq = (+t_maq_str[0]) * 3600 + (+t_maq_str[1]) * 60 + (+t_maq_str[2]);

        linea_data = {
            presupuesto_id: presupuesto_id,
            tipo: rowData.row_id,
            paginas: rowData.paginas,
            papel_id: rowData.papel,
            gramaje: rowData.gramaje,
            papel_impresion_id: rowData.papel_impresion_id,
            papel_impresion: rowData.papel_impresion,
            maquina_id: rowData.maquina_id,
            maquina: rowData.maquina,
            maquina_tipo: rowData.maquinaTipo,
            tiempo_maquina: t_maq,
            pliegos_libro: rowData.numeroPliegos,
            pliegos_pedido: rowData.pliegosPedido,
            pliegos_precio: rowData.precioPliego,
            libro: rowData.libro,
            total_papel_pedido: rowData.totalPapelPedido,
            margen_papel_pedido: rowData.margenPapelPedido,
            mano: rowData.lomo,
            peso: rowData.peso,
            precio_click: rowData.click,
            precio_click_pedido: rowData.totalClicks,
            check_papel_total: $('#' + rowData.row_id + '_checkPapel').is(":checked")?1:0,
            check_impresion_total: $('#' + rowData.row_id + '_checkClicks').is(":checked")?1:0,
            tarifa_impresion_id: rowData.tarifa_impresion_id,
            formas: JSON.stringify(formas),

            horas_maquina: rowData.horasMaquina,
            precio_hora: rowData.precioHora,
            precio_impresion: rowData.precioImpresion,
            margen_impresion: rowData.margenImpresion,
            total_linea: rowData.total_linea,
        }

        // maquina rotativa o inkjet
        if(linea_data.maquina_tipo=='inkjet'){
            
                linea_data.rotativa_pag_color = rowData.numPagColor

                linea_data.rotativa_total_impresion = rowData.totalImpresion
                linea_data.rotativa_a_favor_fibra = rowData.aFavorFibra,
                linea_data.rotativa_negro = rowData.cobNegro
                linea_data.rotativa_cyan = rowData.cobCyan
                linea_data.rotativa_magenta = rowData.cobMagenta
                linea_data.rotativa_amarillo = rowData.cobAmarillo
                linea_data.rotativa_gota_negro = rowData.gotaNegro
                linea_data.rotativa_gota_color = rowData.gotaColor

                
                linea_data.rotativa_resolucion = rowData.resolucion
                linea_data.rotativa_area_paginas = rowData.areaPaginas

                linea_data.rotativa_num_gotas_negro = rowData.gotaNegro
                linea_data.rotativa_num_gotas_cyan = rowData.gotasCyan
                linea_data.rotativa_num_gotas_magenta = rowData.gotasMagenta
                linea_data.rotativa_num_gotas_amarillo = rowData.gotasAmarillo

                linea_data.rotativa_precio_pag_negro = rowData.precioPagNegro
                linea_data.rotativa_precio_pag_color = rowData.precioPagColor
                linea_data.rotativa_factor_altura = rowData.factorAltura
                linea_data.rotativa_factor_anchura = rowData.factorAnchura
                linea_data.rotativa_pag_por_pliego = rowData.paginasPliego

                linea_data.rotativa_clicks_libro = rowData.clicksLibro
                linea_data.rotativa_peso_gotas_negro = rowData.gTintaNegro
                linea_data.rotativa_peso_gotas_cyan = rowData.gTintaCyan
                linea_data.rotativa_peso_gotas_magenta = rowData.gTintaMagenta
                linea_data.rotativa_peso_gotas_amarillo = rowData.gTintaAmarillo
                linea_data.rotativa_clicks_total = rowData.clicksPedido
                linea_data.precio_click_pedido = rowData.totalClicksPedido
                linea_data.rotativa_precio_tinta = rowData.totalTinta
                
                
                linea_data.rotativa_peso_gotas_negro_pedido = rowData.gTintaNegroPed
                linea_data.rotativa_peso_gotas_cyan_pedido = rowData.gTintaCyanPed
                linea_data.rotativa_peso_gotas_magenta_pedido = rowData.gTintaMagentaPed
                linea_data.rotativa_peso_gotas_amarillo_pedido = rowData.gTintaAmarilloPed

        }
        if(linea_data.tipo.includes('rot')){
        
            linea_data.rotativa_mxm = rowData.metrosMinuto
            linea_data.rotativa_metros_libro = rowData.metrosPapelLibro
            linea_data.rotativa_metros_total = rowData.metrosPapelTotal
            linea_data.rotativa_velocidad_corte = rowData.velocidadCorte
            linea_data.rotativa_precio_hora_corte = rowData.precioHoraCorte
            linea_data.rotativa_tiempo_corte = rowData.tiempoCorte
            linea_data.rotativa_total_corte = rowData.totalCorte
        }

        data.push(linea_data)
    } );

    
    await $.ajax({
        type: 'post',
        url: '<?= route_to("updateDataOfCosidotapablanda") ?>',

        data: {
            tipo: 'lineasPresupuesto',
            datos:   data,
            presupuesto_id: presupuesto_id,
            <?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v
        },
        dataType: 'json',
        success:function(response){

            token=response.<?= csrf_token() ?>;
            yeniden(token);
        }
    }).fail(function (jqXHR, textStatus, error) {
        // Handle error here
        console.log(jqXHR)
    });
    
}

function updateLineasPresupuesto(){

    $('#tableLineasPresupuesto tbody tr:visible ').each(function(){
        
        if(this.id.endsWith('_bn')){
            checkComparadorInt(false, false, true);
        }
        else if(this.id.endsWith('_bnhq')){
            checkComparadorInt(false, true, true);
        }
        else if(this.id.endsWith('_color')){
            checkComparadorInt(true, false, true);
        }
        else if(this.id.endsWith('_colorhq')){
            checkComparadorInt(true, true, true);
        }
        else if(this.id.endsWith('_rot_bn')){
            checkComparadorInt(false, false, true)
        }
        else if(this.id.endsWith('_rot_color')){
            checkComparadorInt(false,true, true);
        }
        else if(this.id.endsWith('_cubierta')){
            checkComparadorCubierta(true)
        }
        
    })
    
}

function checkPaginasPresupuesto(){

    cantidad_total = 0

    tableLineasPresupuesto.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
        var rowData = this.data();
        if(rowData.row_id != 'lp_cubierta' && rowData.row_id != 'lp_sobrecubierta')
            cantidad_total +=  parseInt(rowData.paginas)
    })
    htmlString = ''
    
    if(cantidad_total != parseInt($('#paginas').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("Presupuestos.errores.paginasLP") ?></h5>
                    </div>
                </div>`;  
    }
    $('#divAlarmasLineasPresupuesto').html(htmlString)
}

checkPaginasPresupuesto()

<?= $this->endSection() ?>