diff --git a/ci4/app/Controllers/Js_loader.php b/ci4/app/Controllers/Js_loader.php index 543ec711..094a7d40 100755 --- a/ci4/app/Controllers/Js_loader.php +++ b/ci4/app/Controllers/Js_loader.php @@ -27,6 +27,11 @@ class Js_loader extends BaseController return view('themes/backend/vuexy/form/presupuestos/cosidotapablanda/previews.js'); } + function tiradasAlternativas_js() + { + $this->response->setHeader('Content-Type', 'text/javascript'); + return view('themes/backend/vuexy/form/presupuestos/cosidotapablanda/_tiradasAlternativasItems.js'); + } } \ No newline at end of file diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php index 904b71d8..62f7d36a 100755 --- a/ci4/app/Language/es/Presupuestos.php +++ b/ci4/app/Language/es/Presupuestos.php @@ -226,7 +226,7 @@ return [ // Servicios 'precio' => 'Precio', - 'precioUnidad' => 'Precio unitario', + 'precioUnidad' => 'Precio unidad', 'precioTotal' => 'Precio total', 'serviciosDefault' => 'Servicios por defecto', 'tarifa' => 'Tarifa', @@ -239,6 +239,14 @@ return [ 'cantidad' => 'Cantidad', + + //Tiradas alternativas + 'tiradasAlternativas' => 'Tiradas alternativas', + 'tiradasInfoIVA' => 'Los precios mostrados no incluyen IVA', + 'tiradaMargen' => 'Margen', + 'tiradaEnvio' => 'Coste Envío', + 'tiradaImpresion' => 'Coste Impresión', + 'validation' => [ 'decimal' => 'El campo {field} debe contener un número decimal.', diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_resumenPresupuestoItems.php b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_resumenPresupuestoItems.php index a50443fc..4a1b1bde 100755 --- a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_resumenPresupuestoItems.php +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_resumenPresupuestoItems.php @@ -1,4 +1,4 @@ -
+

@@ -223,6 +222,9 @@ function updateTotales(updateLP=true, updateServicios=true, updateEnvio=true){ $('#totalCostes').text((totalCostes).toFixed(2) + '€') $('#totalMargenes').text((totalMargenes).toFixed(2) + '€') + if($('#total_descuentoPercent').val()<0){ + $('#total_descuentoPercent').val(0) + } var totalAntesDescuento = totalCostes + totalMargenes var totalDescuento = totalAntesDescuento * parseInt($('#total_descuentoPercent').val())/100 var totalPresupuesto = totalAntesDescuento - totalDescuento diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_tiradasAlternativasItems.js b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_tiradasAlternativasItems.js new file mode 100644 index 00000000..82d78679 --- /dev/null +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_tiradasAlternativasItems.js @@ -0,0 +1,158 @@ +// Selección de la última columna de la tabla de tiradas +const lastColNr_tiradasAlt = $('#tableTiradas').find("tr:first th").length - 1; + + +// Función para generar los botones de acción de la tabla de tiradas +const actionBtns_tiradasAlt = function (data) { + return ` + + `; +}; + + +// Inicializaciones de la tabla de tiradas +var tableTiradas; +var editor; + + +(async () => { + while (!window.hasOwnProperty("editor_url") && !window.hasOwnProperty("editor_headers")) + await new Promise(resolve => setTimeout(resolve, 200)); + initEditorTiradas() + + while (!window.hasOwnProperty("datatable_lang_url")) + await new Promise(resolve => setTimeout(resolve, 200)); + initTableTiradas(); + + // For debugging purposes + tableTiradas.row.add({ + tirada: 15, + coste_impresion: 0, + coste_envio: 0, + margen: 0, + total_pedido: 0, + precio_unidad: 0 + }).draw(false); +})(); + + +function initEditorTiradas() { + + editor = new $.fn.dataTable.Editor({ + ajax: { + url: window.editor_url, + headers: window.editor_headers, + + }, + table: "#tableTiradas", + idSrc: 'id', + fields: [ + { + name: "tirada", + }, { + name: "coste_impresion", + type: "hidden" + }, { + name: "coste_envio", + type: "hidden" + }, { + name: "margen", + type: "hidden" + }, { + name: "total_pedido", + type: "hidden" + }, { + name: "precio_unidad", + type: "hidden" + }, { + name: "json_tiradas", + type: "hidden" + }, + ] + }); +} + +function initTableTiradas() { + tableTiradas = $('#tableTiradas').DataTable({ + "language": { + "url": window.datatable_lang_url + }, + "paging": false, + "info": false, + "searching": false, + "ordering": false, + "autoWidth": false, + "responsive": true, + "dom": '<"mt-4"><"float-end"B><"float-start"l>', //"Blt", + "columnDefs": [ + { + orderable: false, + searchable: false, + targets: [lastColNr_tiradasAlt] + }, + ], + "columns": [ + { data: "tirada" }, + { data: 'coste_impresion' }, + { data: 'coste_envio' }, + { data: 'margen' }, + { data: 'total_pedido' }, + { data: 'precio_unidad' }, + { + data: actionBtns_tiradasAlt, + className: 'row-edit dt-center' + } + ], + "buttons": [{ + className: 'btn btn-primary float-end me-sm-3 me-1', + text: '', + extend: "createInline", + editor: editor, + formOptions: { + submitTrigger: -1, + submitHtml: '', + } + }] + }); +} + + +// Evento de borrado de una fila de la tabla de tiradas +$(document).on('click', '.btn-delete-tirada', function (e) { + + console.log(generate_json_tiradas()); + const row = $(this).closest('tr'); + tableTiradas.row(row) + .remove() + .draw(); +}) + + +// Función para generar el JSON de las lineas de presupuesto para calcular las tiradas +function generate_json_tiradas() { + const data = $('#tableLineasPresupuesto').DataTable().data().toArray(); + + return JSON.stringify(filterData(data, + ['paginas', + 'numPagColor', + 'paginas_impresion', + 'papel_impresion_id', + 'gramaje', + 'maquina_id', + 'maquinaTipo', + 'row_id'])); +} + + +// Función para filtrar las columnas de la tabla de tiradas +function filterData(data, keys) { + return data.map(obj => { + const newObj = {}; + keys.forEach(key => { + if (obj.hasOwnProperty(key)) { + newObj[key] = obj[key]; + } + }); + return newObj; + }); +} \ No newline at end of file diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_tiradasAlternativasItems.php b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_tiradasAlternativasItems.php new file mode 100644 index 00000000..313b7100 --- /dev/null +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_tiradasAlternativasItems.php @@ -0,0 +1,62 @@ +
+
+

+ +

+ +
+
+ +
+
+

+ + + + + + + + + + + + + + + + + +
+ + +
+
+ +
+
+
+
+ + + + +section("additionalInlineJs") ?> + window.datatable_lang_url = "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"; + window.editor_url = ""; + + window.editor_headers= {: v}; + +endSection() ?> + + + + + + + diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/viewCosidotapablandaForm.php b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/viewCosidotapablandaForm.php index 5d395b27..627d7dc0 100755 --- a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/viewCosidotapablandaForm.php +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/viewCosidotapablandaForm.php @@ -25,7 +25,8 @@ - + + @@ -249,6 +250,7 @@ const url_parts = url.split('/'); + endSection() ?>