import ClassSelect from '../../../components/select2.js';
import { getToken } from '../../../common/common.js';
import Ajax from '../../../components/ajax.js';



class LineasPresupuesto {

    constructor(domItem, functions = {}) {
        this.domItem = domItem;
        this.getDimensionLibro = functions.getDimensionLibro;
        this.calcular_mermas = functions.calcular_mermas;

        this.table = null;

        this.csrf_token = getToken();
        this.csrf_hash = $('#mainContainer').find('input[name="' + this.csrf_token + '"]').val();

        this.addLineaManual = this.domItem.find("#btn_addLinea");
    }


    init() {
        const self = this;

        this.#initTable();

        this.addLineaManual.on('click', this.#insertLineaManual.bind(this));

        // Botones de borrar de las lineas de presupuesto
        $(document).on('click', '.btn-delete-lp', function (e) {

            const row = $(this).closest('tr');
            const data = self.table.row(row).data()
            self.table.row(row)
                .remove()
                .draw();

            $(document).trigger('update-presupuesto', {
                update_lineas: false,
                update_servicios: false,
                update_envios: true,
                update_resumen: true,
                update_tiradas_alternativas: true
            });
            // TO-DO
            /*
            if (data.row_id == 'lp_guardas')
                servicioGuardas(false)
            */

            // Si existe cubierta, hay que actualizar con el valor del lomo
            if (self.table.row('#lp_cubierta').length > 0) {
                self.obtenerLinea('lp_cubierta', false, false);
            }
        });

        // Evento para recalcular las lineas de presupuesto
        $(document).on('update-lineas-presupuesto', async function () {

            await self.updateLineasPresupuesto();

            $(document).trigger('update-lineas-presupuesto-completed');
        });

        $('.insertarLinea').on("click", this.#insertarLineaComparador.bind(this));
        $('.paginas-lp').on('change', this.checkPaginasLineasPresupuesto.bind(this));
    }


    #initTable() {

        const self = this;

        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>
                `;
        };

        this.table = new DataTable('#tableLineasPresupuesto', {
            scrollX: true,
            searching: false,
            paging: false,
            info: false,
            ordering: true,
            responsive: true,
            select: false,
            rowId: 'row_id',
            language: {
                url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.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,
                },
                {
                    targets: [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
                    orderable: false,
                },
                {
                    targets: [10],
                    orderable: true,
                    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: 'position',
                    type: "num",
                    render: function (data, type, row, meta) {
                        if (row.row_id.includes('_bn')) {
                            return 0;
                        }
                        else if (row.row_id.includes('_color')) {
                            return 1;
                        }
                        else if (row.row_id.includes('_cubierta')) {
                            return 2;
                        }
                        else if (row.row_id.includes('_sobrecubierta')) {
                            return 3;
                        }
                        else if (row.row_id.includes('_guardas')) {
                            return 4;
                        }
                        else if (row.row_id.includes('_faja')) {
                            return 5;
                        }
                    }
                },
                {
                    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" && row.row_id != "lp_guardas" && row.row_id != "lp_faja")
                            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") {
                            let select = '<select id="lp_cubierta_paginas" name="comp_paginas_cubierta" class="form-control form-select-sm lp-cell lp-select" style="min-width:50px;">'
                            if (data == 2) {
                                select += '<option value="2" selected >'
                            }
                            else {
                                select += '<option value="2">'
                            }
                            select += '<p>' + window.language.Presupuestos.unaCara + '</p>'
                            select += '</option>'
                            if (data == 4) {
                                select += '<option value="4" selected >'
                            }
                            else {
                                select += '<option value="4">'
                            }
                            select += '<p>' + window.language.Presupuestos.dosCaras + '</p>'
                            select += '</option>'
                            select += '</select>'

                            return select;
                        }
                        else if (row.row_id == "lp_guardas") {
                            let select = '<select id="lp_guardas_paginas" name="comp_paginas_guardas" class="form-control form-select-sm lp-cell lp-select" style="min-width:50px;">'
                            if (row.paginas_impresion == 0) {
                                select += '<option value="0" selected >'
                            }
                            else {
                                select += '<option value="0">'
                            }
                            select += '<p>' + window.language.Presupuestos.sinImpresion + '</p>'
                            select += '</option>'
                            if (row.paginas_impresion == 4) {
                                select += '<option value="4" selected >'
                            }
                            else {
                                select += '<option value="4">'
                            }
                            select += '<p>' + window.language.Presupuestos.unaCara + '</p>'
                            select += '</option>'
                            if (row.paginas_impresion == 8) {
                                select += '<option value="8" selected >'
                            }
                            else {
                                select += '<option value="8">'
                            }
                            select += '<p>' + window.language.Presupuestos.dosCaras + '</p>'
                            select += '</option>'
                            select += '</select>'

                            return select;

                        }
                        else {
                            return '';
                        }
                    }
                },
                {
                    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')

                        let tipo = 'negro';
                        switch (row.row_id) {
                            case 'lp_bnhq':
                                tipo = 'negrohq';
                                break;
                            case 'lp_rot_color':
                            case 'lp_color':
                                tipo = 'color';
                                break;
                            case 'lp_colorhq':
                            case 'lp_guardas':
                            case 'lp_cubierta':
                            case 'lp_sobrecubierta':
                                tipo = 'colorhq';
                                break
                            default:
                                break;
                        }

                        if (data) {
                            var option = '<option value="' + data + '" selected>' + row.papel_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')

                        if (data) {
                            var option = '<option value="' + parseInt(data) + '" selected>' + parseInt(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')

                        if (data) {
                            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')

                        if (data) {
                            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'
                }
            ],
            "order": [10, 'asc'],
        });

        this.table.on('click', 'td.dt-control', function (e) {
            let tr = e.target.closest('tr');
            let row = self.table.row(tr);

            if (row.child.isShown()) {
                // This row is already open - close it
                row.child.hide();
            }
            else {
                // Open this row
                row.child(self.formatRow(row.data())).show();
            }
        });

        this.table.on('draw', function () {

            $("#lomo_cubierta").val(self.getLomoInterior());
            $("#lomo_sobrecubierta").val(parseFloat(self.getLomoInterior()) + parseFloat(self.getLomoCubierta()));
            self.checkPaginasLineasPresupuesto();
            self.mostrarTabsPreview();
        });
    }


    async updateLineasPresupuesto() {

        $('#tableLineasPresupuesto tbody tr:visible ').each(function () {

            $('#' + this.id + '_maquina').trigger('change');
        })
    }

    cargarDatos(data) {

        const self = this;

        data[1].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']

            let dateObj = new Date(lp['tiempo_maquina'] * 1000);
            const hours = dateObj.getUTCHours();
            const minutes = dateObj.getUTCMinutes();
            const 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,
                    cg: lp.rotativa_cg,
                    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['num_gotas_cg'] = lp['rotativa_num_gotas_cg']

                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['peso_gotas_cg'] = lp['rotativa_peso_gotas_cg']
                lp['clicks_pedido'] = lp['rotativa_clicks_total']
                lp['precio_click_pedido'] = lp['precio_click_pedido']
                lp['margen_click_pedido'] = lp['margen_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']
                lp['peso_gotas_cg_pedido'] = lp['rotativa_peso_gotas_cg_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']


            let rowData = self.#processRowData(lp, lp.tipo, lp.tipo.replace(/_/g, '-'));

            let row = self.table.row("#" + lp.tipo);

            self.table.row.add(rowData).draw()
            row = self.table.row("#" + lp.tipo);

            row.child(self.formatRow(row.data())).show();

            self.#addEventosLineas(lp.tipo, lp.maquina_tipo == 'inkjet' ? true : false);
            if (lp.tipo == 'lp_guardas')
                lp['paginas_impresion'] = lp.paginas_impresion;

        });
    }

    async guardarLineasPresupuesto() {

        let data = [];
        const presupuesto_id = window.location.href.split('/').pop();

        this.table.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]);

            let linea_data = {
                presupuesto_id: presupuesto_id,
                tipo: rowData.row_id,
                paginas: (rowData.row_id == 'lp_guardas') ? (($('#tipo_impresion_id').val() == 1 || $('#tipo_impresion_id').val() == 3) ? 8 : 4) : 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,
                margen_click_pedido: rowData.margenClicks,
                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,
            }

            if (rowData.row_id == 'lp_guardas')
                linea_data.paginas_impresion = rowData.paginas_impresion

            // 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_cg = rowData.cobCG
                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_num_gotas_cg = rowData.gotasCG

                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_peso_gotas_cg = rowData.gTintaCG
                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
                linea_data.rotativa_peso_gotas_cg_pedido = rowData.gTintaCGPed

            }
            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
                linea_data.rotativa_a_favor_fibra = rowData.aFavorFibra == true ? 1 : 0
            }

            data.push(linea_data)
        });


        var datos = {
            tipo: 'lineasPresupuesto',
            datos: data,
            presupuesto_id: presupuesto_id,
        }

        await $.ajax({
            type: 'post',
            url: '/presupuestoadmin/datatable_2',
            data: datos,
            dataType: 'json',
            success: function (response) {

            }
        }).fail(function (jqXHR, textStatus, error) {
            // Handle error here
            console.log(jqXHR)
        });
    }


    mostrarTabsPreview() {

        const table = $('#tableLineasPresupuesto').DataTable();

        // Clear all existing tabs
        $('*[id*=tab-pv-]').hide().find('.active').removeClass('active');
        $('*[id*=pv_]').removeClass('active show');

        // Enable active tabs
        table.rows().every(function () {
            const lpName = this.data().row_id.replace('lp_', '');
            const tabName = lpName.replace('_', '-');

            if (['bn', 'bnhq', 'color', 'colorhq', 'rot_bn', 'rot_color', 'guardas', 'cubierta', 'sobrecubierta', 'faja'].includes(lpName)) {
                $(`#tab-pv-${tabName}`).show();
                if (lpName === 'cubierta') {
                    $(`#tab-pv-${tabName}`).show();
                    $(`#tab-pv-esquema-${tabName}`).show();
                }
            }
        });
    }

    checkPaginasLineasPresupuesto() {

        let cantidad_total = 0

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

    #insertLineaManual() {

        let dataRows = this.table.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':
                var hayLinea = false
                for (let number = 0; number < dataRows.length; number++) {
                    if (dataRows[number].row_id == 'lp_bn' ||
                        dataRows[number].row_id == 'lp_bnhq' ||
                        dataRows[number].row_id == 'lp_rot_bn') {
                        hayLinea = true;
                        continue;
                    }
                }

                if (hayLinea) {
                    popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto');
                    break;
                }

                var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_bn', 'lp-bn');
                this.table.row.add(data).draw();
                this.#addEventosLineas('lp_bn', false);
                break;

            case 'lp_bnhq':
                var hayLinea = false
                for (let number = 0; number < dataRows.length; number++) {
                    if (dataRows[number].row_id == 'lp_bn' ||
                        dataRows[number].row_id == 'lp_bnhq' ||
                        dataRows[number].row_id == 'lp_rot_bn') {
                        hayLinea = true
                        continue
                    }
                }

                if (hayLinea) {
                    popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto');
                    break
                }

                var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_bnhq', 'lp-bnhq');
                this.table.row.add(data).draw()
                this.#addEventosLineas('lp_bnhq', false);
                break

            case 'lp_color':
                var hayLinea = false
                for (let number = 0; number < dataRows.length; number++) {
                    if (dataRows[number].row_id == 'lp_color' ||
                        dataRows[number].row_id == 'lp_colorhq' ||
                        dataRows[number].row_id == 'lp_rot_color') {
                        hayLinea = true;
                        continue;
                    }
                }

                if (hayLinea) {
                    popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto');
                    break;
                }

                var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_color', 'lp-color');
                this.table.row.add(data).draw();
                this.#addEventosLineas('lp_color', false);
                break

            case 'lp_colorhq':
                var hayLinea = false
                for (let number = 0; number < dataRows.length; number++) {
                    if (dataRows[number].row_id == 'lp_color' ||
                        dataRows[number].row_id == 'lp_colorhq' ||
                        dataRows[number].row_id == 'lp_rot_color') {
                        hayLinea = true
                        continue
                    }
                }

                if (hayLinea) {
                    popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto');
                    break;
                }

                var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_colorhq', 'lp-colorhq');
                this.table.row.add(data).draw();
                this.#addEventosLineas('lp_colorhq', false);
                break;

            case 'lp_rot_bn':
                var hayLinea = false
                for (let number = 0; number < dataRows.length; number++) {
                    if (dataRows[number].row_id == 'lp_bn' ||
                        dataRows[number].row_id == 'lp_bnhq' ||
                        dataRows[number].row_id == 'lp_rot_bn') {
                        hayLinea = true;
                        continue;
                    }
                }

                if (hayLinea) {
                    popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto');
                    break;
                }

                var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_rot_bn', 'lp-rot-bn');
                this.table.row.add(data).draw();
                this.#addEventosLineas('lp_rot_bn', false);
                break

            case 'lp_rot_color':
                var hayLinea = false
                for (let number = 0; number < dataRows.length; number++) {
                    if (dataRows[number].row_id == 'lp_color' ||
                        dataRows[number].row_id == 'lp_colorhq' ||
                        dataRows[number].row_id == 'lp_rot_color') {
                        hayLinea = true;
                        continue;
                    }
                }

                if (hayLinea) {
                    popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto');
                    break;
                }

                var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_rot_color', 'lp-rot-color');
                this.table.row.add(data).draw()
                this.#addEventosLineas('lp_rot_color', false);
                break;

            case 'lp_cubierta':
                var hayLinea = false
                for (let number = 0; number < dataRows.length; number++) {
                    if (dataRows[number].row_id == 'lp_cubierta') {
                        hayLinea = true;
                        continue;
                    }
                }

                if (hayLinea) {
                    popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto');
                    break;
                }

                var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_cubierta', 'lp-cubierta');
                this.table.row.add(data).draw();
                this.#addEventosLineas('lp_cubierta', false);
                break

            case 'lp_sobrecubierta':
                var hayLinea = false
                for (let number = 0; number < dataRows.length; number++) {
                    if (dataRows[number].row_id == 'lp_sobrecubierta') {
                        hayLinea = true;
                        continue;
                    }
                }

                if (hayLinea) {
                    popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto');
                    break;
                }

                var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_sobrecubierta', 'lp-sobrecubierta');
                this.table.row.add(data).draw();
                this.#addEventosLineas('lp_sobrecubierta', false);
                break

            case 'lp_faja':
                var hayLinea = false
                for (let number = 0; number < dataRows.length; number++) {
                    if (dataRows[number].row_id == 'lp_faja') {
                        hayLinea = true;
                        continue;
                    }
                }

                if (hayLinea) {
                    popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto');
                    break;
                }

                var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_faja', 'lp-faja');
                this.table.row.add(data).draw();
                this.#addEventosLineas('lp_faja', false);
                break

            case 'lp_guardas':
                var hayLinea = false
                for (let number = 0; number < dataRows.length; number++) {
                    if (dataRows[number].row_id == 'lp_guardas') {
                        hayLinea = true;
                        continue;
                    }
                }

                if (hayLinea) {
                    popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto');
                    break;
                }

                var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_guardas', 'lp-guardas');
                this.table.row.add(data).draw()
                this.#addEventosLineas('lp_guardas', false);
                servicioGuardas(true);
                break
            default:
                break
        }
        this.table.columns.adjust();
    }

    #processRowData(row, rowId, rowClass) {

        var icon = ""
        if (rowId == 'lp_bn') {
            if (row.tipo_maquina == 'toner')
                icon = '/themes/vuexy/img/safekat/presupuestos/icon_bn.png'
            else
                icon = '/themes/vuexy/img/safekat/presupuestos/icon_inkjet_bn.png';
        }

        else if (rowId == 'lp_bnhq') {
            if (row.tipo_maquina == 'toner')
                icon = '/themes/vuexy/img/safekat/presupuestos/icon_bnhq.png';
            else
                icon = '/themes/vuexy/img/safekat/presupuestos/icon_inkjet_bn.png';
        }
        else if (rowId == 'lp_color') {
            if (row.tipo_maquina == 'toner')
                icon = '/themes/vuexy/img/safekat/presupuestos/icon_color.png';
            else
                icon = '/themes/vuexy/img/safekat/presupuestos/icon_inkjet_color.png';
        }
        else if (rowId == 'lp_colorhq') {
            if (row.tipo_maquina == 'toner')
                icon = '/themes/vuexy/img/safekat/presupuestos/icon_colorhq.png';
            else
                icon = '/themes/vuexy/img/safekat/presupuestos/icon_inkjet_color.png';
        }

        else if (rowId == 'lp_cubierta')
            icon = '/themes/vuexy/img/safekat/presupuestos/icon_cubierta.png';
        else if (rowId == 'lp_sobrecubierta')
            icon = '/themes/vuexy/img/safekat/presupuestos/icon_sobrecubierta.png';
        else if (rowId == 'lp_faja')
            icon = '/themes/vuexy/img/safekat/presupuestos/icon_faja.png';
        else if (rowId == 'lp_guardas')
            icon = '/themes/vuexy/img/safekat/presupuestos/icon_guardas.png';
        else if (rowId == 'lp_rot_bn')
            icon = '/themes/vuexy/img/safekat/presupuestos/icon_rotativa_bn.png';
        else if (rowId == 'lp_rot_color')
            icon = '/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_verticales)) ? 0 : parseInt(row.num_formas.num_formas_verticales),
            'formas_h': blank_line ? 0 : isNaN(parseInt(row.num_formas.num_formas_horizontales)) ? 0 : parseInt(row.num_formas.num_formas_horizontales),
            'formas_orientacion': blank_line ? 0 : row.num_formas.posicion_formas,

            'icon': icon,
            'paginas': blank_line ? 0 : row.paginas,
            'paginas_impresion': rowId == 'lp_guardas' ? row.paginas_impresion : 0,
            'papel': blank_line ? "" : row.papel_generico_id,
            'papel_nombre': blank_line ? "" : row.papel_generico,
            '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(0),
            '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),
            'margenClicks': isNaN(parseFloat(row.margen_click_pedido)) ? "" : parseFloat(row.margen_click_pedido).toFixed(2),
            'horasMaquina': isNaN(parseFloat(row.horas_maquina)) ? "" : parseFloat(row.horas_maquina).toFixed(4),
            '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,
            'check_papel_total': row.check_papel_total,
            'check_impresion_total': row.check_impresion_total,
        }

        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(2)
            data.cobCyan = isNaN(parseFloat(row.datosTipologias.cyan)) ? "" : parseFloat(row.datosTipologias.cyan).toFixed(2)
            data.cobMagenta = isNaN(parseFloat(row.datosTipologias.magenta)) ? "" : parseFloat(row.datosTipologias.magenta).toFixed(2)
            data.cobAmarillo = isNaN(parseFloat(row.datosTipologias.amarillo)) ? "" : parseFloat(row.datosTipologias.amarillo).toFixed(2)
            data.gotaNegro = isNaN(parseFloat(row.datosTipologias.gota_negro)) ? "" : parseFloat(row.datosTipologias.gota_negro).toFixed(2)
            data.gotaColor = isNaN(parseFloat(row.datosTipologias.gota_color)) ? "" : parseFloat(row.datosTipologias.gota_color).toFixed(2)

            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) + parseFloat(row.precio_tinta) + parseFloat(row.total_corte)) ? "" : (parseFloat(row.precio_click_pedido) + parseFloat(row.precio_tinta) + parseFloat(row.total_corte)).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)

            if (!rowId.includes('rot')) {
                data.cobCG = isNaN(parseFloat(row.datosTipologias.cg)) ? "" : parseFloat(row.datosTipologias.cg).toFixed(2)
                data.gotasCG = isNaN(parseFloat(row.num_gotas_cg)) ? "" : parseFloat(row.num_gotas_cg).toFixed(2)
                data.gTintaCG = isNaN(parseFloat(row.peso_gotas_cg)) ? "" : parseFloat(row.peso_gotas_cg).toFixed(2)
                data.gTintaCGPed = isNaN(parseFloat(row.peso_gotas_cg_pedido)) ? "" : parseFloat(row.peso_gotas_cg_pedido).toFixed(2)
            }


            data.alto_click = row.alto_click
        }

        if (rowId == 'lp_faja'){
            data.alto_faja = row.alto_faja;
        }

        return data
    }

    formatRow(d) {

        var value = '<tr>' +
            '<td></td>' +
            '<td></td>' +
            '<td colspan="10">' +
            '<div class="row flex-grow-1 d-flex align-items-end">' +
            '<div class="col-md-12 col-lg-1">' +
            window.language.Presupuestos.numeroPliegos +
            '<input readonly 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">' +
            window.language.Presupuestos.pliegosPedido +
            '<input readonly 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">' +
            window.language.Presupuestos.precioPliego +
            '<input readonly 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">' +
            window.language.Presupuestos.libro +
            '<input readonly 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">' +
            window.language.Presupuestos.totalPapelPedido +
            '<input readonly 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" ' + (d.check_papel_total == true ? 'checked' : '') + '>' +
            '</div>' +
            '<div class="col-md-1 col-lg-1">' +
            window.language.Presupuestos.click +
            '<input readonly 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">' +
            window.language.Presupuestos.totalClicks +
            '<input readonly 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">' +
            window.language.Presupuestos.horas +
            '<input readonly 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">' +
            window.language.Presupuestos.precioHora +
            '<input readonly 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">' +
            window.language.Presupuestos.precioImpresion +
            '<input readonly 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" ' + (d.check_impresion_total == true ? '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;">' +
            '<input id="' + d.row_id + '_margenClicks" name="' + d.row_id + '_margenClicks" readonly class="lp-input lp-cell lp-cell-disabled ' + d.row_class + '-input" type="text" value="' + d.margenClicks + '" style="display: none;">' +
            '</div>' +
            '</td>'

        value += '</tr>'

        if (d.row_id == "lp_faja") {
            value += '<tr>' +
                '<td></td>' +
                '<td></td>' +
                '<td colspan="10">' +
                '<div class="row flex-grow-1 d-flex align-items-end">' +
                '<div class="col-md-12 col-lg-1">' +
                window.language.Presupuestos.papelFormatoAlto + ' ' + window.language.Presupuestos.faja +
                '<input id="' + d.row_id + '_altoFaja" name="' + d.row_id + '_altoFaja" class="lp-input lp-cell ' + d.row_class + '-input" type="text" value="' + d.alto_faja + '">' +
                '</div>' +
                '</td>' +
                '</tr>'
        }

        if (d.maquinaTipo == 'inkjet') {
            value +=
                '<tr>' +
                '<td></td>' +
                '<td></td>' +
                '<td colspan="10">' +
                '<div class="row flex-grow-1 d-flex 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">' + window.language.Presupuestos.porDefecto + '</button>' +
                '</div>' +
                '<div class="col-md-12 col-lg-1">' +
                window.language.Presupuestos.numPagColor +
                '<input type="number" id="' + d.row_id + '_numPagColor" name="' + d.row_id + '_numPagColor" class="lp-cell lp-input no-spinner' + (d.row_id.includes('color') ? '" ' : ' lp-cell-disabled" readonly ') + ' value="' + d.numPagColor + '">' +
                '</div>' +
                ((d.row_id.includes('rot')) ? '<div class="col-md-12 col-lg-1">' +
                    window.language.Presupuestos.saturacion +
                    '<input readonly 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">' +
                window.language.Presupuestos.cobNegro +
                '<input type="number" id="' + d.row_id + '_cobNegro" name="' + d.row_id + '_cobNegro" class="lp-cell lp-input no-spinner ' + d.row_class + '-input ' + d.row_class + '-tipologia" value="' + d.cobNegro + '">' +
                '</div>' +
                '<div class="col-md-12 col-lg-1">' +
                window.language.Presupuestos.cobCyan +
                '<input type="number" id="' + d.row_id + '_cobCyan" name="' + d.row_id + '_cobCyan" class="lp-cell lp-input no-spinner ' + d.row_class + '-input ' + d.row_class + '-tipologia" value="' + d.cobCyan + '">' +
                '</div>' +
                '<div class="col-md-12 col-lg-1">' +
                window.language.Presupuestos.cobMagenta +
                '<input type="number" id="' + d.row_id + '_cobMagenta" name="' + d.row_id + '_cobMagenta" class="lp-cell lp-input no-spinner ' + d.row_class + '-input ' + d.row_class + '-tipologia" value="' + d.cobMagenta + '">' +
                '</div>' +
                '<div class="col-md-12 col-lg-1">' +
                window.language.Presupuestos.cobAmarillo +
                '<input type="number" id="' + d.row_id + '_cobAmarillo" name="' + d.row_id + '_cobAmarillo" class="lp-cell lp-input no-spinner ' + d.row_class + '-input ' + d.row_class + '-tipologia" value="' + d.cobAmarillo + '">' +
                '</div>' +
                ((!d.row_id.includes('rot')) ?
                    '<div class="col-md-12 col-lg-1">' +
                    window.language.Presupuestos.cobCG +
                    '<input type="number" id="' + d.row_id + '_cobCG" name="' + d.row_id + '_cobCG" class="lp-cell lp-input no-spinner ' + d.row_class + '-input ' + d.row_class + '-tipologia" value="' + d.cobCG + '">' +
                    '</div>' : '') +
                '<div class="col-md-12 col-lg-1">' +
                window.language.Presupuestos.gotaNegro +
                '<input type="number" id="' + d.row_id + '_gotaNegro" name="' + d.row_id + '_gotaNegro" class="lp-cell lp-input no-spinner ' + d.row_class + '-input ' + d.row_class + '-tipologia" value="' + d.gotaNegro + '">' +
                '</div>' +
                '<div class="col-md-12 col-lg-1 ">' +
                window.language.Presupuestos.gotaColor +
                '<input type="number" id="' + d.row_id + '_gotaColor" name="' + d.row_id + '_gotaColor" class="lp-cell lp-input no-spinner ' + d.row_class + '-input ' + d.row_class + '-tipologia" value="' + d.gotaColor + '">' +
                '</div>' +
                '<div class="col-md-12 col-lg-1" style="display: grid;" >' +
                window.language.Presupuestos.aFavorFibra +
                '<input type="checkbox" id="' + d.row_id + '_aFavorFibra" name="' + d.row_id + '_aFavorFibra" ' + ((d.aFavorFibra == true || 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">' + window.language.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 align-items-end">' +
                ((!d.row_id.includes('rot')) ?
                    '<div class="col-md-12 col-lg-1">' +
                    window.language.Presupuestos.factorAltura +
                    '<input readonly 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">' +
                    window.language.Presupuestos.factorAnchura +
                    '<input readonly 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>' : '') +
                (d.row_id.includes('rot') ? '<div class="col-md-12 col-lg-1">' : '<div class="col-md-12 col-lg-1" style="display:none;">') +
                window.language.Presupuestos.clicksMinuto +
                '<input readonly 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>' +

                (d.row_id.includes('rot') ? '<div class="col-md-12 col-lg-1">' +
                    window.language.Presupuestos.resolucion +
                    '<input readonly 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>' : '') +
                (d.row_id.includes('rot') ? '<div class="col-md-12 col-lg-1">' +
                    window.language.Presupuestos.areaPaginas +
                    '<input readonly 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">' +
                window.language.Presupuestos.gotasNegro +
                '<input readonly 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">' +
                window.language.Presupuestos.gotasCyan +
                '<input readonly 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">' +
                window.language.Presupuestos.gotasMagenta +
                '<input readonly 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">' +
                window.language.Presupuestos.gotasAmarillo +
                '<input readonly 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>' +
                (!(d.row_id.includes('rot')) ? '<div class="col-md-12 col-lg-1">' +
                    window.language.Presupuestos.gotasCG +
                    '<input readonly type="text" id="' + d.row_id + '_gotasCG" name="' + d.row_id + '_gotasCG" class="lp-cell lp-cell-disabled lp-input ' + d.row_class + '-input" readonly value="' + d.gotasCG + '">' +
                    '</div>' : '') +
                '<div class="col-md-12 col-lg-1">' +
                window.language.Presupuestos.precioPagNegro +
                '<input readonly 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">' +
                window.language.Presupuestos.precioPagColor +
                '<input readonly 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>' +
                (d.row_id.includes('rot') ?
                    '<div class="col-md-12 col-lg-1">' +
                    window.language.Presupuestos.factorAltura +
                    '<input readonly 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">' +
                    window.language.Presupuestos.factorAnchura +
                    '<input readonly 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>' : '') +
                (d.row_id.includes('rot') ? '<div class="col-md-12 col-lg-1">' +
                    window.language.Presupuestos.paginasPliego +
                    '<input readonly 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 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;">') +
                window.language.Presupuestos.metrosPapelLibro +
                '<input readonly 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;">') +
                window.language.Presupuestos.metrosPapelTotal +
                '<input readonly 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>' +
                (d.row_id.includes('rot') ? '<div class="col-md-12 col-lg-1">' +
                    window.language.Presupuestos.clicksLibro +
                    '<input readonly 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>' : '') +
                ((!d.row_id.includes('rot')) ? '<div class="col-md-12 col-lg-1">' +
                    window.language.Presupuestos.saturacion +
                    '<input readonly type="text" id="' + d.row_id + '_saturacion" name="' + d.row_id + '_saturacion" class="lp-cell lp-input lp-cell-disabled" readonly value="100">' +
                    '</div>' : '') +
                ((!d.row_id.includes('rot')) ? '<div class="col-md-12 col-lg-1">' +
                    window.language.Presupuestos.paginasPliego +
                    '<input readonly 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 class="col-md-12 col-lg-1">' +
                window.language.Presupuestos.gTintaNegro +
                '<input readonly 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">' +
                window.language.Presupuestos.gTintaCyan +
                '<input readonly 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">' +
                window.language.Presupuestos.gTintaMagenta +
                '<input readonly 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">' +
                window.language.Presupuestos.gTintaAmarillo +
                '<input readonly 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>' +
                (!(d.row_id.includes('rot')) ? '<div class="col-md-12 col-lg-1">' +
                    window.language.Presupuestos.gTintaCG +
                    '<input readonly type="text" id="' + d.row_id + '_gTintaCG" name="' + d.row_id + '_gTintaCG" class="lp-cell lp-cell-disabled lp-input ' + d.row_class + '-input" readonly value="' + d.gTintaCG + '">' +
                    '</div>' : '') +
                ((!d.row_id.includes('rot')) ? '<div class="col-md-12 col-lg-1">' +
                    window.language.Presupuestos.clicksLibro +
                    '<input readonly 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">' +
                window.language.Presupuestos.clicksPedido +
                '<input readonly 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">' +
                window.language.Presupuestos.totalClicks +
                '<input readonly 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">' +
                window.language.Presupuestos.totalTinta +
                '<input readonly 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;">') +
                window.language.Presupuestos.totalCorte +
                '<input readonly 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">' +
                window.language.Presupuestos.totalImpresion +
                '<input readonly 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 align-items-end" >' +
                ((!d.row_id.includes('rot')) ? '<div class="col-md-12 col-lg-1">' +
                    window.language.Presupuestos.resolucion +
                    '<input readonly 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>' : '') +
                ((!d.row_id.includes('rot')) ? '<div class="col-md-12 col-lg-1">' +
                    window.language.Presupuestos.areaPaginas +
                    '<input readonly 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>' : '') +
                (d.row_id.includes('rot') ? '<div class="col-md-12 col-lg-1">' : '<div class="col-md-12 col-lg-1" style="display:none;">') +
                window.language.Presupuestos.velocidadCorte +
                '<input readonly 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;">') +
                window.language.Presupuestos.precioHoraCorte +
                '<input readonly 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;">') +
                window.language.Presupuestos.tiempoCorte +
                '<input readonly 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">' +
                window.language.Presupuestos.gTintaNegroPed +
                '<input readonly 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">' +
                window.language.Presupuestos.gTintaCyanPed +
                '<input readonly 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">' +
                window.language.Presupuestos.gTintaMagentaPed +
                '<input readonly 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">' +
                window.language.Presupuestos.gTintaAmarilloPed +
                '<input readonly 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>' +
                (!(d.row_id.includes('rot')) ? '<div class="col-md-12 col-lg-1">' +
                    window.language.Presupuestos.gTintaCGPed +
                    '<input readonly type="text" id="' + d.row_id + '_gTintaCGPed" name="' + d.row_id + '_gTintaCGPed" class="lp-cell lp-cell-disabled lp-input ' + d.row_class + '-input" readonly value="' + d.gTintaCGPed + '">' +
                    '</div>' : '') +
                '</div>' +
                '</td>' +
                '</tr>'
        }

        return $(value).toArray();
    }


    getLomoInterior() {
        let lomo = 0;
        $('#tableLineasPresupuesto').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
            var rowData = this.data();
            if (rowData.row_id != 'lp_cubierta' && rowData.tipo != 'lp_sobrecubierta')
                lomo += parseFloat(rowData.lomo);
        }
        );
        return lomo;
    }


    getLomoCubierta() {
        let lomo = 0;
        $('#tableLineasPresupuesto').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
            var rowData = this.data();
            if (rowData.row_id == 'lp_cubierta')
                lomo += parseFloat(rowData.lomo);
        }
        );
        return lomo;
    }


    obtenerLinea(linea = 'lp_bn', fromComparador = false, updatedTipologias = false, input_data = {}) {

        const self = this;
        const dimension = this.getDimensionLibro();

        if (linea == 'lp_faja') {
            if (Object.keys(input_data).length == 0) {
                let altoSelected = parseInt($('#' + linea + '_altoFaja').val());
                if (altoSelected == 0 || isNaN(altoSelected) || altoSelected == '' || altoSelected < 50) {
                    altoSelected = 50;
                }
                else if (altoSelected > dimension.alto) {
                    altoSelected = dimension.alto;
                }
                dimension.alto = altoSelected;
            }
            else {
                dimension.alto = parseInt($('#faja_alto').val());
            }
        }

        const dataFromComparador = fromComparador;

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

            input_data = {
                papel_generico_id: $('#' + linea + '_papel option:selected').val(),
                papel_generico: $('#' + linea + '_papel option:selected').text().trim(),
                gramaje: $('#' + linea + '_gramaje option:selected').text().trim(),
                maquina_id: $('#' + linea + '_maquina option:selected').val(),
                papel_impresion_id: $('#' + linea + '_papelImpresion option:selected').val()
            }
            if (linea.includes('rot')) {
                input_data.fibra = fromComparador == false ? ($('#lp_rot_color_aFavorFibra').prop('checked') ? 1 : 0) : 1;
            }
            if (linea == 'lp_cubierta') {
                input_data.paginas = parseInt($('#lp_cubierta_paginas option:selected').val());
            }
            else if (linea == 'lp_sobrecubierta' || linea == 'lp_faja') {
                input_data.paginas = 4;
            }
            else if (linea == 'lp_guardas') {
                input_data.paginas = (parseInt($('#tipo_impresion_id').val()) == 1 || parseInt($('#tipo_impresion_id').val()) == 3) ? 8 : 4;
                input_data.paginas_impresion = parseInt($('#lp_guardas_paginas').val());
            }
            else {
                input_data.paginas = parseInt($('#' + linea + '_paginas').val());
            }
        }


        if (input_data.maquina_id == undefined || input_data.maquina_id == '') {
            return;
        }
        if (linea != 'lp_guardas' && linea != 'lp_sobrecubierta' && linea != 'lp_faja') {
            if (input_data.paginas == 0)
                return;
        }

        let uso = 'interior';
        switch (linea) {
            case 'lp_cubierta':
                uso = 'cubierta';
                break;
            case 'lp_sobrecubierta':
                uso = 'sobrecubierta';
                break;
            case 'lp_faja':
                uso = 'faja';
                break;
            case 'lp_guardas':
                uso = 'guardas';
                break;
            case 'lp_rot_bn':
            case 'lp_rot_color':
                uso = 'interior_rot';
                break;
        }

        let color = 1;
        if (linea == 'lp_bn' || linea == 'lp_bnhq' || linea == 'lp_rot_bn') {
            color = 0;
        }
        else if(linea == 'lp_guardas'){
            if(fromComparador){
                color = $('#tipoImpresion').val().includes('color') ? 1 : 0;
            }
            else{
                for (let i = 0; i < this.table.rows().data().length; i++) {
                    let row = this.table.row(i).data();
                    if (row.row_id == 'lp_color' || row.row_id == 'lp_colorhq' || row.row_id == 'lp_rot_color') {
                        color = 1;
                        break;
                    }
                }
                color = 0;
            }
        }
        let hq = 1;
        if (linea == 'lp_bn' || linea == 'lp_color' || linea == 'lp_rot_bn' || linea == 'lp_rot_color') {
            hq = 0;
        }

        var datos = {
            tipo_impresion_id: $('#tipo_impresion_id').val(),
            type: uso,
            color: color,
            hq: hq,
            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(),
        };

        if (datos.ancho == 0 || datos.alto == 0 || datos.ancho == '' || datos.alto == '' || isNaN(datos.ancho) || isNaN(datos.alto)) {
            return;
        }

        if (linea.includes('rot')) {
            if (fromComparador) {
                datos.paginas_negro = parseInt($('#compPaginasNegro').val())
                datos.paginas_color = parseInt($('#compPaginasColor').val())
            }
            else {
                let paginas_color = isNaN(parseInt($('#lp_rot_color_numPagColor').val())) ? 0 : parseInt($('#lp_rot_color_numPagColor').val())
                datos.paginas_negro = input_data.paginas - paginas_color;
                datos.paginas_color = paginas_color;
            }
            datos.a_favor_fibra = fromComparador == false ? ($('#lp_rot_color_aFavorFibra').prop('checked') ? 1 : 0) : 1;
        }
        else if (linea == 'lp_cubierta') {
            datos.solapas = $('#solapas').is(':checked') ? 1 : 0;
            datos.solapas_ancho = $('#solapas').is(':checked') ? parseInt($('#solapas_ancho').val()) : 0;
            datos.lomo = $('#lomo_cubierta').val();
        }
        else if (linea == 'lp_sobrecubierta') {
            datos.solapas = $('#solapas_sobrecubierta').is(':checked') ? 1 : 0;
            datos.solapas_ancho = $('#solapas_sobrecubierta').is(':checked') ? parseInt($('#solapas_ancho_sobrecubierta').val()) : 0;
            datos.lomo = $('#lomo_sobrecubierta').val();
        }
        else if (linea == 'lp_faja') {
            datos.solapas = 1;
            datos.solapas_ancho = parseInt($('#faja_solapas_ancho').val());
            datos.lomo = $('#lomo_sobrecubierta').val();
        }
        else if (linea == 'lp_guardas') {
            datos.paginas_impresion = input_data.paginas_impresion;
        }
        datos = Object.assign(datos, window.token_ajax);

        // Si es inkjet, existe este check
        if ($('#' + linea + '_aFavorFibra').length) {
            datos.a_favor_fibra = $('#' + linea + '_aFavorFibra').prop('checked') ? 1 : 0;
        }

        if (updatedTipologias && $('#' + linea + '_gotaNegro').length) {
            datos.gota_negro = $('#' + linea + '_gotaNegro').val()
            datos.gota_color = $('#' + linea + '_gotaColor').val()
            datos.negro = $('#' + linea + '_cobNegro').val()
            datos.cyan = $('#' + linea + '_cobCyan').val()
            datos.magenta = $('#' + linea + '_cobMagenta').val()
            datos.amarillo = $('#' + linea + '_cobAmarillo').val()
            if ($('#' + linea + '_cobCG').length) {
                datos.cg = $('#' + linea + '_cobCG').val()
            }
        }

        new Ajax('/presupuestoadmin/getlinea',
            datos,
            {},
            (response) => {
                if (response.lineas.length > 0) {

                    let borrar_linea = true;
                    // Si viene del comparador
                    if (dataFromComparador) {
                        borrar_linea = false;
                    }

                    for (let $i = 0; $i < response.lineas.length; $i++) {

                        // Se cogen los valores de la linea con los datos correspondientes
                        if (response.lineas[$i].fields.maquina_id === input_data.maquina_id &&
                            response.lineas[$i].fields.papel_generico_id === input_data.papel_generico_id &&
                            response.lineas[$i].fields.papel_impresion_id === input_data.papel_impresion_id) {

                            borrar_linea = false;

                            // Si viene del comparador
                            if (Object.keys(input_data).length == 0) {
                                response.lineas[$i].fields.check_papel_total = $('#' + linea + '_checkPapel').is(":checked") ? 1 : 0
                                response.lineas[$i].fields.check_impresion_total = $('#' + linea + '_checkClicks').is(":checked") ? 1 : 0

                            }
                            else {
                                response.lineas[$i].fields.check_papel_total = 1;
                                response.lineas[$i].fields.check_impresion_total = 1;
                            }
                            if (linea == 'lp_faja') {
                                response.lineas[$i].fields.alto_faja = dimension.alto;
                            }
                            self.rellenarDatosLinea(linea, response.lineas[$i].fields);

                            return true;
                        }
                    }
                    if (borrar_linea) {
                        self.table.row('#' + linea).remove().draw();
                    }
                }
                else {
                    let pags = $("#" + linea + "_paginas").val()
                    $("." + linea + "-input").val("0")
                    $("#" + linea + "_paginas").val(pags)

                }
            },
            (error) => {
                console.error(error);
            }
        ).post();

    }

    rellenarDatosLinea(linea, row, fromComparator = false) {

        if (fromComparator) {

            let input_data = {
                paginas: row.paginas,
                papel_generico_id: row.papelGenericoId,
                gramaje: row.gramaje,
                papel_impresion_id: row.papelImpresionId,
                maquina_id: row.maquinaId,
            }
            if (linea.includes('guardas')) {
                input_data.paginas_impresion = parseInt($('#compCarasGuardas').select2('data')[0].id);
            }
            this.obtenerLinea(linea, fromComparator, false, input_data)
        }
        else {
            // Se guarda el estado de "ver calculos"
            const mostrar_calculos = ($(".calculos_" + linea).css('display') == 'table-row')

            // Si viene de hacerlo a mano...
            let data = this.#processRowData(row, linea, linea.replace('_', '-'));

            let currentRow = this.table.row('#' + linea);
            if (currentRow.length > 0)
                this.table.row('#' + linea).data(data).draw()
            else {
                this.table.row.add(data).draw()
                currentRow = this.table.row('#' + linea);
            }

            let datosLinea = currentRow.data();
            if (linea == 'lp_faja') {
                datosLinea.alto_faja = row.alto_faja;
            }

            currentRow.child(this.formatRow(datosLinea)).show();

            this.#addEventosLineas(linea, data.maquinaTipo == 'inkjet' ? true : false);


            $('#' + linea + '_checkPapel').trigger('change');


            this.calcular_mermas()
            

            $(document).trigger('update-presupuesto', {
                update_lineas: false,
                update_servicios: false,
                update_envios: true,
                update_resumen: true,
                update_tiradas_alternativas: true
            });


            // Si existe cubierta, hay que actualizar con el valor del lomo
            if (linea != 'lp_cubierta' && linea != 'lp_sobrecubierta' && linea != 'lp_faja' && this.table.row('#lp_cubierta').length > 0) {
                this.obtenerLinea('lp_cubierta', false, false);
            }
            if (mostrar_calculos) {
                $(".calculos_" + linea).css('display', 'table-row')
            }
        }

        this.table.columns.adjust();

    }


    #addEventosLineas(tipoLinea, isInkjet = false) {

        const self = this;

        let tipo = 'negro';
        let uso = 'interior';
        switch (tipoLinea) {
            case 'lp_bnhq':
                tipo = 'negrohq';
                break;
            case 'lp_rot_color':
            case 'lp_color':
                tipo = 'color';
                break;
            case 'lp_colorhq':
            case 'lp_cubierta':
            case 'lp_sobrecubierta':
            case 'lp_faja':
                tipo = 'colorhq';
                break
            case 'lp_guardas':
                tipo = 'negrohq';
                for (let i = 0; i < this.table.rows().data().length; i++) {
                    let row = this.table.row(i).data();
                    if (row.row_id == 'lp_color' || row.row_id == 'lp_colorhq' || row.row_id == 'lp_rot_color') {
                        tipo = 'colorhq';
                        break;
                    }
                }
                break;
            default:
                break;
        }

        switch (tipoLinea) {
            case 'lp_cubierta':
                uso = 'cubierta';
                break;
            case 'lp_sobrecubierta':
            case 'lp_faja':
                uso = 'sobrecubierta';
                break;
            case 'lp_guardas':
                uso = 'guardas';
                break;
            case 'lp_rot_bn':
            case 'lp_rot_color':
                uso = 'rotativa';
                break;
            default:
                break;
        }

        let select_papel = new ClassSelect($('#' + tipoLinea + '_papel'),
            '/presupuestoadmin/papelgenerico', 'Seleccione papel', false,
            {
                [this.csrf_token]: this.csrf_hash,
                tipo_impresion: () => $("#tipo_impresion_id").val(),
                tirada: () => $('#tirada').val(),
                tipo: tipo,
                uso: uso,
            }, $('body'));
        select_papel.init();


        let select_gramaje = new ClassSelect($('#' + tipoLinea + '_gramaje'),
            '/presupuestoadmin/papelgramaje', 'Seleccione gramaje', false,
            {
                [this.csrf_token]: this.csrf_hash,
                papel_generico: () => select_papel.getVal(),
                tipo_impresion: () => $("#tipo_impresion_id").val(),
                tirada: () => $('#tirada').val(),
                tipo: tipo,
                uso: uso,
            }, $('body'));
        select_gramaje.init();

        let papel_impresion = new ClassSelect($('#' + tipoLinea + '_papelImpresion'),
            '/presupuestoadmin/papelimpresion', 'Seleccione papel', false,
            {
                [this.csrf_token]: this.csrf_hash,
                papel_generico: () => select_papel.getVal(),
                gramaje: () => select_gramaje.getVal(),
                tipo_impresion: () => $("#tipo_impresion_id").val(),
                tipo: tipo,
                uso: uso,
            }, $('body'));
        papel_impresion.init();

        let merma = uso == 'interior' ? $('#merma').val() : $('#mermacubierta').val();
        uso = ((uso == 'guardas') ? 'interior' : uso);

        let maquinas = new ClassSelect($('#' + tipoLinea + '_maquina'),
            '/presupuestoadmin/maquinas', 'Seleccione maquina', false,
            {
                [this.csrf_token]: this.csrf_hash,
                ancho: () => this.getDimensionLibro().ancho,
                alto: () => {return tipoLinea == 'lp_faja' ? $('faja_alto').val() : this.getDimensionLibro().alto},
                solapas: () => uso == 'cubierta' ? $('#solapas').prop('checked') : $('#solapas_sobrecubierta').prop('checked'),
                solapas_ancho: () => uso == 'cubierta' ? $('#solapas_ancho').val() : $('#solapas_ancho_sobrecubierta').val(),
                tirada: () => $('#tirada').val(),
                merma: merma,
                papel_impresion: () => papel_impresion.getVal(),
                tipo_impresion: () => $("#tipo_impresion_id").val(),
                tarifa_tipo: tipo,
                uso_tarifa: uso == 'rotativa' ? 'interior' : uso,
                is_rotativa: () => tipoLinea.includes('rot') ? 1 : 0,
                lomo_redondo: () => (this.tipo_impresion_id == 1 || this.tipo_impresion_id == 3) ? $('#compLomoRedondo').val() : 0,
                lomo: () => uso == 'sobrecubierta' ? this.getLomoCubierta() + this.getLomoInterior() : this.getLomoInterior(),
            }, $('body'));
        maquinas.init();


        $('#' + tipoLinea + '_papel').on("change", () => {
            select_gramaje.reset();
            papel_impresion.reset();
            maquinas.reset();
        });
        $('#' + tipoLinea + '_gramaje').on('change', () => {
            papel_impresion.reset();
            maquinas.reset();
        });
        $('#' + tipoLinea + '_papelImpresion').on("change", () => { maquinas.reset(); });

        $('#' + tipoLinea + '_maquina').on("change", function (event) {
            self.obtenerLinea(tipoLinea, false, false, {}, event); // Pasamos explícitamente 'tipoLinea'
        }.bind(this));
        $('#' + tipoLinea + '_paginas').on("change", function (event) {
            if (tipoLinea != 'lp_sobrecubierta') {
                self.obtenerLinea(tipoLinea, false, false, {}, event); // Pasamos explícitamente 'tipoLinea'
            }
        }.bind(this));
        $('#' + tipoLinea + '_vercalculos').on("click", () => self.verCalculosInkjet(tipoLinea));

        if (isInkjet) {
            $('.' + tipoLinea.replace('_', '-') + '-tipologia').on("change", () => { this.change_tipologia(tipoLinea); });
            $('#' + tipoLinea + '_defecto').on("click", () => { this.lp_por_defecto(tipoLinea); });
            $('#' + tipoLinea + '_aFavorFibra').on("change", () => { this.change_aFavorFibra(tipoLinea); });
        }

        if (tipoLinea == 'lp_faja') {
            $('#' + tipoLinea + '_altoFaja').on("change", function (event) {
                self.obtenerLinea(tipoLinea, false, false, {}, event); // Pasamos explícitamente 'tipoLinea'
            }.bind(this));
        }
    }


    verCalculosInkjet(linea) {
        if ($(".calculos_" + linea).css('display') == 'none')
            $(".calculos_" + linea).css('display', 'table-row')
        else {
            $(".calculos_" + linea).css('display', 'none')
        }
    }

    change_aFavorFibra(linea) {

        let paginas_ok = true;

        if (linea.includes('lp_bn') || linea.includes('lp_color') || linea.includes('lp_rot')) {
            paginas_ok = parseInt($('#' + linea + '_paginas').val()) > 0;
        }

        if (paginas_ok &&
            parseInt($('#' + linea + '_papel option:selected').val()) > 0 &&
            $('#' + linea + '_gramaje option:selected').text().length > 0 &&
            parseInt($('#' + linea + '_papelImpresion option:selected').val()) > 0
        ) {
            var rowData = this.table.row('#' + linea).data()
            rowData.aFavorFibra = $('#' + linea + '_aFavorFibra').prop('checked')
            this.table.row('#' + linea).data(rowData).draw(false)

            this.obtenerLinea(linea, false, true);
        }
    }

    change_tipologia(linea) {

        let paginas_ok = true;

        if (linea.includes('lp_bn') || linea.includes('lp_color') || linea.includes('lp_rot')) {
            paginas_ok = parseInt($('#' + linea + '_paginas').val()) > 0;
        }

        if (paginas_ok &&
            parseInt($('#' + linea + '_papel option:selected').val()) > 0 &&
            $('#' + linea + '_gramaje option:selected').text().length > 0 &&
            parseInt($('#' + linea + '_papelImpresion option:selected').val()) > 0
        ) {

            this.obtenerLinea(linea, false, true, {});
        }
    }


    lp_por_defecto(linea) {

        let paginas_ok = true;

        if (linea.includes('lp_bn') || linea.includes('lp_color') || linea.includes('lp_rot')) {
            paginas_ok = parseInt($('#' + linea + '_paginas').val()) > 0;
        }

        if (paginas_ok &&
            parseInt($('#' + linea + '_papel option:selected').val()) > 0 &&
            $('#' + linea + '_gramaje option:selected').text().length > 0 &&
            parseInt($('#' + linea + '_papelImpresion option:selected').val()) > 0
        ) {

            this.obtenerLinea(linea);
        }
    }

    #insertarLineaComparador(e) {

        const self = this;

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

            for (let i = self.table.rows().data().length - 1; i >= 0; i--) {
                let row = self.table.row(i).data();

                if (row.row_id.includes('lp_bn') || row.row_id.includes('lp_color') || row.row_id.includes('lp_rot')) {
                    self.table.row(i).remove();
                }
            }
            self.table.draw();


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

                var rows = $("#tableCompIntPlana").DataTable().rows('.selected').data().toArray();

                for (const row of rows) {
                    if (row['tipo'] == 'bn') {
                        this.rellenarDatosLinea('lp_bn', row, true);
                    }
                    else if (row['tipo'] == 'bnhq') {
                        this.rellenarDatosLinea('lp_bnhq', row, true);
                    }
                    else if (row['tipo'] == 'color') {
                        this.rellenarDatosLinea('lp_color', row, true);
                    }
                    else if (row['tipo'] == 'colorhq') {
                        this.rellenarDatosLinea('lp_colorhq', row, true);
                    }
                }
            }
            if (e.target.id.includes("Rotativa")) {

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

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

            for (let i = self.table.rows().data().length - 1; i >= 0; i--) {
                let row = self.table.row(i).data(); // Obtener datos de la fila actual

                if (row.row_id.includes('lp_cubierta') || row.row_id.includes('lp_sobrecubierta')) {
                    self.table.row(i).remove(); // Eliminar fila
                }
            }
            self.table.draw();


            var rows = $("#tableCompCubierta").DataTable().rows('.selected').data().toArray();
            for (const row of rows) {
                if (row.tipo == 'cubierta') {
                    this.rellenarDatosLinea('lp_cubierta', row, true);

                    if ($('#acabado_cubierta_id').val() > 0)
                        $(document).trigger('add-servicio-lineas', 'acabadoCubierta');

                }
                if (row.tipo == 'sobrecubierta') {
                    this.rellenarDatosLinea('lp_sobrecubierta', row, true);
                    if ($('#acabado_sobrecubierta_id').val() > 0)
                        $(document).trigger('add-servicio-lineas', 'acabadoSobrecubierta');
                }
            }
        }

        else if (e.target.id.includes("Guardas")) {

            for (let i = self.table.rows().data().length - 1; i >= 0; i--) {
                let row = self.table.row(i).data(); // Obtener datos de la fila actual

                if (row.row_id.includes('lp_guardas')) {
                    self.table.row(i).remove(); // Eliminar fila
                }
            }
            self.table.draw();

            var rows = $("#tableCompGuardas").DataTable().rows('.selected').data().toArray();
            for (const row of rows) {
                this.rellenarDatosLinea('lp_guardas', row, true);
            }
        }

        else if (e.target.id.includes("Faja")) {

            for (let i = self.table.rows().data().length - 1; i >= 0; i--) {
                let row = self.table.row(i).data(); // Obtener datos de la fila actual

                if (row.row_id.includes('lp_faja')) {
                    self.table.row(i).remove(); // Eliminar fila
                }
            }
            self.table.draw();

            var rows = $("#tableCompFaja").DataTable().rows('.selected').data().toArray();
            for (const row of rows) {
                this.rellenarDatosLinea('lp_faja', row, true);
            }
            if ($('#acabado_faja_id').val() > 0)
                $(document).trigger('add-servicio-lineas', 'acabadoFaja');
        }


        $(document).trigger('update-presupuesto', {
            update_lineas: false,
            update_servicios: false,
            update_envios: true,
            update_resumen: true,
            update_tiradas_alternativas: true
        });

        showBreadCrumbSaveButton(true);
    }
}

export default LineasPresupuesto;