From caac71a48df13821f0614d0c4db2e61014be8ca0 Mon Sep 17 00:00:00 2001 From: amazuecos Date: Mon, 5 May 2025 20:59:57 +0200 Subject: [PATCH] zip pdf download --- ci4/app/Config/Routes.php | 1 + .../Controllers/Produccion/Ordentrabajo.php | 47 +- ci4/app/Language/es/Produccion.php | 1 + ci4/app/Services/ProductionService.php | 4 + .../vuexy/components/tables/ot_table.php | 3 +- .../form/produccion/viewOrdenTrabajoList.php | 36 +- .../themes/vuexy/pdfs/orden_trabajo_view.php | 407 ++++++++++++++++++ .../components/datatables/otDatatable.js | 118 +++-- .../js/safekat/pages/produccion/index.js | 58 ++- httpdocs/themes/vuexy/css/pdf.ot.css | 7 +- 10 files changed, 605 insertions(+), 77 deletions(-) create mode 100755 ci4/app/Views/themes/vuexy/pdfs/orden_trabajo_view.php diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 5814ccb4..dfdda020 100755 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -804,6 +804,7 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func * PDF *========================**/ $routes->get('pdf/(:num)', 'Ordentrabajo::get_pdf/$1'); + $routes->get('pdf/content/(:num)', 'Ordentrabajo::get_ot_pdf_content/$1'); $routes->get('pdf/ferro/(:num)', 'Ordentrabajo::get_ferro_pdf/$1'); $routes->get('pdf/prototipo/(:num)', 'Ordentrabajo::get_prototipo_pdf/$1'); $routes->get('portada/(:num)', 'Ordentrabajo::get_portada_img/$1'); diff --git a/ci4/app/Controllers/Produccion/Ordentrabajo.php b/ci4/app/Controllers/Produccion/Ordentrabajo.php index 6bb737f7..804fa8ec 100755 --- a/ci4/app/Controllers/Produccion/Ordentrabajo.php +++ b/ci4/app/Controllers/Produccion/Ordentrabajo.php @@ -243,6 +243,7 @@ class Ordentrabajo extends BaseController fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d H:i:s", $q->fecha_encuadernado_at)->format("d/m/Y") : "" ) ->add("action", fn($q) => $q->id) + ->add("pdf_check", fn($q) => $q->id) ->toJson(true); } public function datatable_pendientes() @@ -258,6 +259,7 @@ class Ordentrabajo extends BaseController fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d H:i:s", $q->fecha_encuadernado_at)->format("d/m/Y") : "" ) ->add("action", fn($q) => $q->id) + ->add("pdf_check", fn($q) => $q->id) ->toJson(true); } public function datatable_ferro_pendiente() @@ -273,6 +275,7 @@ class Ordentrabajo extends BaseController fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d H:i:s", $q->fecha_encuadernado_at)->format("d/m/Y") : "" ) ->add("action", fn($q) => $q->id) + ->add("pdf_check", fn($q) => $q->id) ->toJson(true); } public function datatable_ferro_ok() @@ -288,6 +291,7 @@ class Ordentrabajo extends BaseController fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d H:i:s", $q->fecha_encuadernado_at)->format("d/m/Y") : "" ) ->add("action", fn($q) => $q->id) + ->add("pdf_check", fn($q) => $q->id) ->toJson(true); } public function datatable_news() @@ -302,6 +306,7 @@ class Ordentrabajo extends BaseController fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d H:i:s", $q->fecha_encuadernado_at)->format("d/m/Y") : "" ) ->add("action", fn($q) => $q->id) + ->add("pdf_check", fn($q) => $q->id) ->toJson(true); } public function datatable_prod() @@ -316,6 +321,7 @@ class Ordentrabajo extends BaseController fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d H:i:s", $q->fecha_encuadernado_at)->format("d/m/Y") : "" ) ->add("action", fn($q) => $q->id) + ->add("pdf_check", fn($q) => $q->id) ->toJson(true); } public function datatable_waiting() @@ -330,6 +336,7 @@ class Ordentrabajo extends BaseController fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d H:i:s", $q->fecha_encuadernado_at)->format("d/m/Y") : "" ) ->add("action", fn($q) => $q->id) + ->add("pdf_check", fn($q) => $q->id) ->toJson(true); } public function datatable_revision_com() @@ -344,6 +351,7 @@ class Ordentrabajo extends BaseController fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d H:i:s", $q->fecha_encuadernado_at)->format("d/m/Y") : "" ) ->add("action", fn($q) => $q->id) + ->add("pdf_check", fn($q) => $q->id) ->toJson(true); } public function papel_gramaje_datatable() @@ -641,7 +649,7 @@ class Ordentrabajo extends BaseController $this->viewData['ot_tarea'] = $otTareaEntity; $this->viewData['ot'] = $otTareaEntity->orden_trabajo(); $this->viewData['presupuesto'] = $this->viewData['ot']->presupuesto(); - + $this->viewData['impresoras'] = $impresoras; $this->viewData['breadcrumb'] = [ ['title' => lang("Produccion.maquinista.maquinas"), 'route' => route_to("viewProduccionMaquinistaMaquinas"), 'active' => false], @@ -784,8 +792,8 @@ class Ordentrabajo extends BaseController ); $tareaEntity = $this->otTarea->find($tareaId); $tiempo_trabajado = $tareaEntity->tiempo_trabajado(); - $responseData['tiempo_total_estimado']+=$tareaEntity->tiempo_estimado; - $responseData['tiempo_total_real']+=$tiempo_trabajado; + $responseData['tiempo_total_estimado'] += $tareaEntity->tiempo_estimado; + $responseData['tiempo_total_real'] += $tiempo_trabajado; $responseData["estado"] = $validatedData["estado"]; $tareaEntity->tiempo_real = $tiempo_trabajado / count($validatedData['tareas']); $tareaEntity->click_init = $validatedData['click_init'] / count($validatedData['tareas']); @@ -823,7 +831,7 @@ class Ordentrabajo extends BaseController $validatedData = $this->validation->getValidated(); foreach ($validatedData['ordenes_trabajo'] as $key => $orden_trabajo_id) { - $maquinaOtTarea = $this->maquinaOtTareaModel->where('orden_trabajo_id', $orden_trabajo_id)->where('maquina_id', $validatedData['maquina_id'])->where('deleted_at',null)->countAllResults(); + $maquinaOtTarea = $this->maquinaOtTareaModel->where('orden_trabajo_id', $orden_trabajo_id)->where('maquina_id', $validatedData['maquina_id'])->where('deleted_at', null)->countAllResults(); if ($maquinaOtTarea) { continue; } @@ -855,17 +863,15 @@ class Ordentrabajo extends BaseController $tarea->click_init = $bodyData['click_init']; $tarea->click_end = $bodyData['click_end']; $totalTareas[] = $tarea; - } - } foreach ($totalTareas as $key => $tarea) { - $tiempo_trabajado = $tarea->tiempo_trabajado(); - $tarea->tiempo_real = $tiempo_trabajado / count($totalTareas); - $tarea->click_init = $tarea->click_init / count($totalTareas); - $tarea->click_end = $tarea->click_end / count($totalTareas); + $tiempo_trabajado = $tarea->tiempo_trabajado(); + $tarea->tiempo_real = $tiempo_trabajado / count($totalTareas); + $tarea->click_init = $tarea->click_init / count($totalTareas); + $tarea->click_end = $tarea->click_end / count($totalTareas); - $this->otTarea->save($tarea); + $this->otTarea->save($tarea); } if ($estado == "F") { $this->maquinaOtTareaModel->where('maquina_id', $maquina_id)->delete(); @@ -875,7 +881,7 @@ class Ordentrabajo extends BaseController } public function delete_maquina_orden_trabajo_tarea($maquina_orden_trabajo_tarea_id) { - + $status = $this->maquinaOtTareaModel->delete($maquina_orden_trabajo_tarea_id); return $this->response->setJSON(["message" => lang("App.user_alert_delete"), "status" => $status]); } @@ -889,7 +895,7 @@ class Ordentrabajo extends BaseController $this->produccionService->deleteOrdenTrabajoTareaProgressDates($tarea->id); } } - $status = $this->maquinaOtTareaModel->where('maquina_id',$maquina_id)->delete(); + $status = $this->maquinaOtTareaModel->where('maquina_id', $maquina_id)->delete(); return $this->response->setJSON(["message" => lang("App.user_alert_delete"), "status" => $status]); } @@ -916,23 +922,22 @@ class Ordentrabajo extends BaseController $tareas = $this->produccionService->init($maquina_ot->orden_trabajo_id) ->getTareasWithMaquina($maquina_id, ['P', 'I', 'S', 'D']); foreach ($tareas as $key => $tarea) { - $responseData['tiempo_total_estimado']+= $tarea->tiempo_estimado; - $responseData['tiempo_total_real']+= $tarea->tiempo_real; + $responseData['tiempo_total_estimado'] += $tarea->tiempo_estimado; + $responseData['tiempo_total_real'] += $tarea->tiempo_real; $responseData["estado"] = $tarea->lastState()->estado; - if($tarea->presupuesto_linea_id){ + if ($tarea->presupuesto_linea_id) { $responseData["clicks_total"] += $tarea->presupuesto_linea()->rotativa_clicks_total; $responseData["tirada_total"] += $tarea->orden_trabajo()->presupuesto()->tirada; - } } } $responseData['tiempo_total_estimado'] = float_seconds_to_hhmmss_string($responseData['tiempo_total_estimado']); $responseData['tiempo_total_real'] = float_seconds_to_hhmmss_string($responseData['tiempo_total_real']); return $this->response->setJSON($responseData); - } - public function printPackagingLabels(){ + public function printPackagingLabels() + { $ot_id = $this->request->getPost('ot_id') ?? null; $unidades_caja = $this->request->getPost('unidades_caja') ?? null; @@ -963,4 +968,8 @@ class Ordentrabajo extends BaseController return $this->response->setJSON($result); } + public function get_ot_pdf_content($orden_trabajo_id) + { + return $this->produccionService->init($orden_trabajo_id)->getPdfContent(); + } } diff --git a/ci4/app/Language/es/Produccion.php b/ci4/app/Language/es/Produccion.php index c9c7ddce..90aeda9d 100755 --- a/ci4/app/Language/es/Produccion.php +++ b/ci4/app/Language/es/Produccion.php @@ -1,6 +1,7 @@ "Descargar", "navs" => [ 'finalizadas' => 'Finalizadas', 'pendientes' => 'Pendientes', diff --git a/ci4/app/Services/ProductionService.php b/ci4/app/Services/ProductionService.php index 6091fab0..25679b40 100755 --- a/ci4/app/Services/ProductionService.php +++ b/ci4/app/Services/ProductionService.php @@ -621,6 +621,10 @@ class ProductionService extends BaseService { return view("themes/vuexy/pdfs/orden_trabajo", $this->getDataPdf()); } + public function getPdfContent() + { + return view("themes/vuexy/pdfs/orden_trabajo_view", $this->getDataPdf()); + } public function getFerroPdf() { return view("themes/vuexy/pdfs/ferro", $this->getDataPdf()); diff --git a/ci4/app/Views/themes/vuexy/components/tables/ot_table.php b/ci4/app/Views/themes/vuexy/components/tables/ot_table.php index cc43a4f9..ad280f80 100755 --- a/ci4/app/Views/themes/vuexy/components/tables/ot_table.php +++ b/ci4/app/Views/themes/vuexy/components/tables/ot_table.php @@ -3,7 +3,8 @@ - + + diff --git a/ci4/app/Views/themes/vuexy/form/produccion/viewOrdenTrabajoList.php b/ci4/app/Views/themes/vuexy/form/produccion/viewOrdenTrabajoList.php index d401c3d5..3292a21b 100755 --- a/ci4/app/Views/themes/vuexy/form/produccion/viewOrdenTrabajoList.php +++ b/ci4/app/Views/themes/vuexy/form/produccion/viewOrdenTrabajoList.php @@ -6,41 +6,46 @@ section('content'); ?> -
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + +
IN
PORT.
ACABAD.
ENCUAD.
MANIPUL.
+ + + +
+
+
;color:;"> + +
+
+
+
;color:;"> + papel_impresion()->papel_code_ot ?> +
+
"> + +
+
;color:;"> + papel_impresion()->papel_code_ot ?> +
+
;color:;"> + tarifa()->code : "" ?> +
+ $acabado): ?> + tarifa()->isUVI()): ?> +
;color:white;"> + + tarifa()->code ?> +
+ + +
+
+
"> +
+
+ ;">id ?> +
+
+ barcode +
+ +
+
+ + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
IDSK + +
CLIENTE + alias ?> +
TITULO + titulo ?> +
ISBNisbn ?>
PEDIDO CLIENTEid ?>
+
+
+
+ + + imposicion_esquema()): ?> + imposicion_esquema()->svg_schema ?> + + + +
+
+
+ + + + + +
Imposicionfull_name ?? "" ?>
+
+
+
+
+
+
IMP. INTERIOR
+
+
+ + + + + + + + + + + +
ancho ?>xalto ?> tirada ?> + merma ?> tipo_presupuesto()?->codigo ?? "" ?> lomo_cubierta, 2, ',', '.') ?>
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
PáginasEjemplaresTintasFormasMáquinaClicsTiempo
paginas ?> tirada ?> tinta() ?>formas)->formas ?>maquina()->nombre ?>rotativa_clicks_total ?>horas_maquina * 3600) ?>
papel_impresion ?>papel_impresion()->gramaje . " " . "gr" ?> + isRotativa()): ?> + rotativa_metros_total, 2, ',', '.') ?> metros + +
+
+
+
+
+

+ comment_interior ?> +

+
+
+
+
+ +
+
IMP. CUBIERTA
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
TintasEjemplaresMaquinaMarcapaginasTiempo
tinta() ?>tirada ?>maquina()->nombre ?>marcapaginas ? "SI" : "NO" ?>horas_maquina * 3600) ?>
formas)->maquina_ancho ?>xformas)->maquina_alto ?>ancho ?>xalto ?>papel_impresion ?>papel_impresion()->gramaje . " " . "gr" ?>
+
+
+ +
+

+ comment_cubierta ?> +

+
+
+
+ +
+ +
+
ACABADOS/ENCUADERNACIÓN
+
+
;color:;"> + +
+ + $acabado): ?> + + + + + + + + + + + + + + + + + +
Plastificadotarifa()->nombre ?>UVI EXTERNO:proveedor() ? $acabado->proveedor()->nombre : "" ?>
info_solapa_guillotina?>CORTE PIE:
+ + $encuadernacion) { + $encuadernacion_code = $encuadernacion->tarifa()->code; + try { + if ($encuadernacion_code) { + echo view("/themes/vuexy/pdfs/encuadernados/$encuadernacion_code.php", ["encuadernacion" => $encuadernacion]); + } else { + echo view("/themes/vuexy/pdfs/encuadernados/default.php", ["encuadernacion" => $encuadernacion]); + } + } catch (\Throwable $th) { + $error_message = $th->getMessage(); + echo "No se ha podido renderizar la tabla de encuadernación"; + // echo "
$error_message"; + } + } + ?> + 0): ?> + +
+
+
+

+ comment_encuadernacion ?> +

+
+
+ + +
+ +
+
+
LOGISTICA
+
+ + + + + + + + + + + + + +
Peso UnidadPeso PedidoCajasCorte Pie
gr 1000 ? number_format($peso_pedido / 1000, 2, ',', '.') . " kg" : number_format($peso_pedido, 2, ',', '.') . " gr" ?> --
+
+
+ +
+

+ comment_logistica ?> +

+
+
+
+
+ + + + + + + + + + + + \ No newline at end of file diff --git a/httpdocs/assets/js/safekat/components/datatables/otDatatable.js b/httpdocs/assets/js/safekat/components/datatables/otDatatable.js index bd736040..d1e1f0b8 100644 --- a/httpdocs/assets/js/safekat/components/datatables/otDatatable.js +++ b/httpdocs/assets/js/safekat/components/datatables/otDatatable.js @@ -12,10 +12,11 @@ class OrdenTrabajoDatatable { this.datatableRevisionComerical = this.item.find("#ot-datatable-revision-com") - + this.columnIdIndex = 1; this.datatableColumns = [ - { data: 'id', searchable: false, sortable: false }, + { data: 'pdf_check', searchable: false, sortable: false, render: d => `` }, + { data: 'id', searchable: false, sortable: true }, { data: 'pedido_id', searchable: false, sortable: false }, { data: 'fecha_encuadernado_at', searchable: false, sortable: false }, { data: 'cliente_nombre', searchable: false, sortable: false }, @@ -51,8 +52,27 @@ class OrdenTrabajoDatatable { } ] } + actualDatatable(event) { + let order = $(event.currentTarget).data('order') + console.log(order) + this.focusDatatable = this.datatableOrder[order] + } + events(){ + this.datatableOrder = [ + this.datatableN, + this.datatableP, + this.datatableW, + this.datatableFP, + this.datatableFO, + this.datatableRC, + this.datatableProduccion, + this.datatable + ] + this.focusDatatable = this.datatableN + $('.nav-link').on('click', this.actualDatatable.bind(this)) + } init() { - this.datatableItem.DataTable({ + this.datatable = this.datatableItem.DataTable({ processing: true, layout: { topStart: 'pageLength', @@ -60,9 +80,10 @@ class OrdenTrabajoDatatable { bottomStart: 'info', bottomEnd: 'paging' }, + order: [[this.columnIdIndex, 'desc']], columnDefs: [ { className: 'dt-center', targets: '_all' }, - + ], serverSide: true, pageLength: 25, @@ -71,14 +92,14 @@ class OrdenTrabajoDatatable { }, columns: this.datatableColumns, ajax: '/produccion/ordentrabajo/datatable', - createdRow: (row,data,dataIndex) => { - $(row).css("border-left",`10px solid ${data.logo.color}`) - $(row).css("border-right",`10px solid ${data.logo.color}`) + createdRow: (row, data, dataIndex) => { + $(row).css("border-left", `10px solid ${data.logo.color}`) + $(row).css("border-right", `10px solid ${data.logo.color}`) } }); } initPendientes() { - this.datatablePendientesItem.DataTable({ + this.datatableP = this.datatablePendientesItem.DataTable({ processing: true, layout: { topStart: 'pageLength', @@ -86,6 +107,7 @@ class OrdenTrabajoDatatable { bottomStart: 'info', bottomEnd: 'paging' }, + order: [[this.columnIdIndex, 'desc']], columnDefs: [ { className: 'dt-center', targets: '_all' }, @@ -97,15 +119,15 @@ class OrdenTrabajoDatatable { }, columns: this.datatableColumns, ajax: '/produccion/ordentrabajo/datatable_pendientes', - createdRow: (row,data,dataIndex) => { - $(row).css("border-left",`20px solid ${data.logo.color}`) - $(row).css("border-right",`20px solid ${data.logo.color}`) + createdRow: (row, data, dataIndex) => { + $(row).css("border-left", `20px solid ${data.logo.color}`) + $(row).css("border-right", `20px solid ${data.logo.color}`) } }); } initFerroPendiente() { - this.datatableFerroPendienteItem.DataTable({ + this.datatableFP = this.datatableFerroPendienteItem.DataTable({ processing: true, layout: { topStart: 'pageLength', @@ -115,23 +137,24 @@ class OrdenTrabajoDatatable { }, serverSide: true, pageLength: 25, + order: [[this.columnIdIndex, 'desc']], columnDefs: [ { className: 'dt-center', targets: '_all' }, - + ], language: { url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" }, columns: this.datatableColumns, ajax: '/produccion/ordentrabajo/datatable_ferro_pendiente', - createdRow: (row,data,dataIndex) => { - $(row).css("border-left",`20px solid ${data.logo.color}`) - $(row).css("border-right",`20px solid ${data.logo.color}`) + createdRow: (row, data, dataIndex) => { + $(row).css("border-left", `20px solid ${data.logo.color}`) + $(row).css("border-right", `20px solid ${data.logo.color}`) } }); } initFerroOk() { - this.datatableFerroOkItem.DataTable({ + this.datatableFO = this.datatableFerroOkItem.DataTable({ processing: true, layout: { topStart: 'pageLength', @@ -140,9 +163,10 @@ class OrdenTrabajoDatatable { bottomEnd: 'paging' }, serverSide: true, + order: [[this.columnIdIndex, 'desc']], columnDefs: [ { className: 'dt-center', targets: '_all' }, - + ], pageLength: 25, language: { @@ -150,14 +174,14 @@ class OrdenTrabajoDatatable { }, columns: this.datatableColumns, ajax: '/produccion/ordentrabajo/datatable_ferro_ok', - createdRow: (row,data,dataIndex) => { - $(row).css("border-left",`20px solid ${data.logo.color}`) - $(row).css("border-right",`20px solid ${data.logo.color}`) + createdRow: (row, data, dataIndex) => { + $(row).css("border-left", `20px solid ${data.logo.color}`) + $(row).css("border-right", `20px solid ${data.logo.color}`) } }); } initNews() { - this.datatableNews.DataTable({ + this.datatableN = this.datatableNews.DataTable({ processing: true, layout: { topStart: 'pageLength', @@ -166,9 +190,10 @@ class OrdenTrabajoDatatable { bottomEnd: 'paging' }, serverSide: true, + order: [[this.columnIdIndex, 'desc']], columnDefs: [ { className: 'dt-center', targets: '_all' }, - + ], pageLength: 25, language: { @@ -176,14 +201,16 @@ class OrdenTrabajoDatatable { }, columns: this.datatableColumns, ajax: '/produccion/ordentrabajo/datatable_news', - createdRow: (row,data,dataIndex) => { - $(row).css("border-left",`20px solid ${data.logo.color}`) - $(row).css("border-right",`20px solid ${data.logo.color}`) + createdRow: (row, data, dataIndex) => { + $(row).css("border-left", `20px solid ${data.logo.color}`) + $(row).css("border-right", `20px solid ${data.logo.color}`) } }); + this.focusDatatable = this.datatableN + } initWaiting() { - this.datatableWaiting.DataTable({ + this.datatableW = this.datatableWaiting.DataTable({ processing: true, layout: { topStart: 'pageLength', @@ -192,9 +219,10 @@ class OrdenTrabajoDatatable { bottomEnd: 'paging' }, serverSide: true, + order: [[this.columnIdIndex, 'desc']], columnDefs: [ { className: 'dt-center', targets: '_all' }, - + ], pageLength: 25, language: { @@ -202,14 +230,14 @@ class OrdenTrabajoDatatable { }, columns: this.datatableColumns, ajax: '/produccion/ordentrabajo/datatable_waiting', - createdRow: (row,data,dataIndex) => { - $(row).css("border-left",`20px solid ${data.logo.color}`) - $(row).css("border-right",`20px solid ${data.logo.color}`) + createdRow: (row, data, dataIndex) => { + $(row).css("border-left", `20px solid ${data.logo.color}`) + $(row).css("border-right", `20px solid ${data.logo.color}`) } }); } initProd() { - this.datatableProd.DataTable({ + this.datatableProduccion = this.datatableProd.DataTable({ processing: true, layout: { topStart: 'pageLength', @@ -218,9 +246,10 @@ class OrdenTrabajoDatatable { bottomEnd: 'paging' }, serverSide: true, + order: [[this.columnIdIndex, 'desc']], columnDefs: [ { className: 'dt-center', targets: '_all' }, - + ], pageLength: 25, language: { @@ -228,14 +257,14 @@ class OrdenTrabajoDatatable { }, columns: this.datatableColumns, ajax: '/produccion/ordentrabajo/datatable_prod', - createdRow: (row,data,dataIndex) => { - $(row).css("border-left",`20px solid ${data.logo.color}`) - $(row).css("border-right",`20px solid ${data.logo.color}`) + createdRow: (row, data, dataIndex) => { + $(row).css("border-left", `20px solid ${data.logo.color}`) + $(row).css("border-right", `20px solid ${data.logo.color}`) } }); } initRevisionComercial() { - this.datatableRevisionComerical.DataTable({ + this.datatableRC = this.datatableRevisionComerical.DataTable({ processing: true, layout: { topStart: 'pageLength', @@ -244,9 +273,10 @@ class OrdenTrabajoDatatable { bottomEnd: 'paging' }, serverSide: true, + order: [[this.columnIdIndex, 'desc']], columnDefs: [ { className: 'dt-center', targets: '_all' }, - + ], pageLength: 25, language: { @@ -254,12 +284,18 @@ class OrdenTrabajoDatatable { }, columns: this.datatableColumns, ajax: '/produccion/ordentrabajo/datatable_revision_com', - createdRow: (row,data,dataIndex) => { - $(row).css("border-left",`20px solid ${data.logo.color}`) - $(row).css("border-right",`20px solid ${data.logo.color}`) + createdRow: (row, data, dataIndex) => { + $(row).css("border-left", `20px solid ${data.logo.color}`) + $(row).css("border-right", `20px solid ${data.logo.color}`) } }); } + getSelectIDs() { + return this.focusDatatable.rows((idx, data, node) => { + return $(node).find('input[type="checkbox"]').prop('checked'); + }).data().toArray().map((e) => parseInt(e.id)) + + } } diff --git a/httpdocs/assets/js/safekat/pages/produccion/index.js b/httpdocs/assets/js/safekat/pages/produccion/index.js index e2e0aa59..96c7b795 100644 --- a/httpdocs/assets/js/safekat/pages/produccion/index.js +++ b/httpdocs/assets/js/safekat/pages/produccion/index.js @@ -1,4 +1,6 @@ import OrdenTrabajoDatatable from '../../components/datatables/otDatatable.js' +import Ajax from '../../components/ajax.js' +import { alertError, alertSuccessMessage } from '../../components/alerts/sweetAlert.js' $(function () { const otDatatable = new OrdenTrabajoDatatable($("#ots-datatables-container")) @@ -9,5 +11,59 @@ $(function () { otDatatable.initNews() otDatatable.initProd() otDatatable.initWaiting() + otDatatable.events() // otDatatable.initRevisionComercial() -}) \ No newline at end of file + $("#btn-download-pdf-zip").on('click', async () => { + let zip = new JSZip() + let ordenesTrabajo = otDatatable.getSelectIDs() + for (let element of ordenesTrabajo) { + try { + + // Create hidden iframe + Notiflix.Block.circle('.section-block',{opacity : 1}); + const response = await getPdf(element); + var opt = { + margin: 2, + filename: $(response).find(".pdf-wrapper").data("id") + ".pdf", + image: { type: 'jpeg', quality: 1 }, + html2canvas: { scale: 4, logging: false }, + jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' } + }; + let pdf = await html2pdf().set(opt).from(response).outputPdf('blob'); + zip.file(opt.filename, pdf); + } catch (error) { + } + }; + if (ordenesTrabajo.length > 0) { + + Notiflix.Block.remove('.section-block'); + zip.generateAsync({ type: "blob" }).then(function (blob) { + const now = new Date(); + const pad = (n) => String(n).padStart(2, '0'); + const timestamp = `${now.getFullYear()}_${pad(now.getMonth() + 1)}_${pad(now.getDate())}_${pad(now.getHours())}${pad(now.getMinutes())}${pad(now.getSeconds())}`; + const filename = `ordenes_trabajo_${timestamp}.zip`; + + const link = document.createElement("a"); + link.href = URL.createObjectURL(blob); + link.download = filename; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + }); + }else{ + alertError('Seleccione una OT para descargar').fire() + } + + + + + + }) +}) + + +const getPdf = (otId) => { + return new Promise((resolve, reject) => { + new Ajax('/produccion/ordentrabajo/pdf/content/' + otId, null, null, resolve, reject).get() + }) +} diff --git a/httpdocs/themes/vuexy/css/pdf.ot.css b/httpdocs/themes/vuexy/css/pdf.ot.css index 1a4dd39a..3058c604 100644 --- a/httpdocs/themes/vuexy/css/pdf.ot.css +++ b/httpdocs/themes/vuexy/css/pdf.ot.css @@ -3,8 +3,8 @@ margin: 0; } @media print { - body, - html { + .page, + { width: 210mm; height: 297mm; max-width: 210mm; @@ -22,7 +22,8 @@ html { max-height: 297mm; background-color: white; } -body { + +.page { border: 0px solid; padding: 10px; margin : 10px;