From 81573eede453e7742ea3e433b9a9dc8415501393 Mon Sep 17 00:00:00 2001 From: amazuecos Date: Wed, 26 Mar 2025 21:01:31 +0100 Subject: [PATCH 1/3] rotativa planning --- ci4/app/Config/Routes.php | 2 + .../Configuracion/Papelesimpresion.php | 6 +++ .../Controllers/Produccion/Ordentrabajo.php | 1 + ci4/app/Language/es/Produccion.php | 1 + .../Configuracion/PapelImpresionModel.php | 11 ++++ ci4/app/Services/ProductionService.php | 15 +++--- .../tables/planning_papel_gramaje_table.php | 2 + .../components/tables/planning_rot_table.php | 2 +- .../produccion/ot/viewPlanningRotativa.php | 51 ++++++++++++++++--- .../produccion/planning_rotativa/index.js | 1 - .../planning_rotativa/planning_rotativa.js | 27 +++++++++- 11 files changed, 101 insertions(+), 18 deletions(-) diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 3e1e9adb..7cdc04d9 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -293,6 +293,8 @@ $routes->group('papelesimpresion', ['namespace' => 'App\Controllers\Configuracio $routes->post('allmenuitems', 'Papelesimpresion::allItemsSelect', ['as' => 'select2ItemsOfPapelesImpresion']); $routes->post('menuitems', 'Papelesimpresion::menuItems', ['as' => 'menuItemsOfPapelesImpresion']); $routes->post('duplicate/(:num)', 'Papelesimpresion::duplicate/$1', ['as' => 'duplicatePapelImpresion']); + $routes->get('select', 'Papelesimpresion::papel_impresion_select', ['as' => 'papelImpresionSelect']); + }); $routes->resource('papelesimpresion', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Papelesimpresion', 'except' => 'show,new,create,update']); diff --git a/ci4/app/Controllers/Configuracion/Papelesimpresion.php b/ci4/app/Controllers/Configuracion/Papelesimpresion.php index e5beef97..253e2256 100755 --- a/ci4/app/Controllers/Configuracion/Papelesimpresion.php +++ b/ci4/app/Controllers/Configuracion/Papelesimpresion.php @@ -468,4 +468,10 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController } } + public function papel_impresion_select() + { + $q = $this->request->getGet('q'); + $data = $this->model->querySelect($q)->get()->getResultArray(); + return $this->response->setJSON($data); + } } diff --git a/ci4/app/Controllers/Produccion/Ordentrabajo.php b/ci4/app/Controllers/Produccion/Ordentrabajo.php index a6fe5e73..9a66de2c 100755 --- a/ci4/app/Controllers/Produccion/Ordentrabajo.php +++ b/ci4/app/Controllers/Produccion/Ordentrabajo.php @@ -194,6 +194,7 @@ class Ordentrabajo extends BaseController $q = $this->produccionService->papelGramajeDatatableQuery(); return DataTable::of($q) ->edit("tiempoReal", fn($q) => float_seconds_to_hhmm_string($q->tiempoReal * 3600)) + ->add("action" , fn($q) => ["title" => lang('Produccion.datatable.filter_by_task'),'data' => $q]) ->toJson(true); } public function reset_tareas(int $orden_trabajo_id) diff --git a/ci4/app/Language/es/Produccion.php b/ci4/app/Language/es/Produccion.php index eddedcd4..01772f79 100644 --- a/ci4/app/Language/es/Produccion.php +++ b/ci4/app/Language/es/Produccion.php @@ -23,6 +23,7 @@ return [ "tiempo" => "Tiempo", "progreso" => "Progreso", "logo" => "Logo impresion", + "filter_by_task" => "Filtrar por tarea" ], "task" => [ diff --git a/ci4/app/Models/Configuracion/PapelImpresionModel.php b/ci4/app/Models/Configuracion/PapelImpresionModel.php index 3625daa7..4a7979d1 100755 --- a/ci4/app/Models/Configuracion/PapelImpresionModel.php +++ b/ci4/app/Models/Configuracion/PapelImpresionModel.php @@ -369,5 +369,16 @@ class PapelImpresionModel extends \App\Models\BaseModel return ""; } + public function querySelect(?string $query) + { + $q = $this->builder()->select([ + "id", + "nombre as name", + ]); + if ($query) { + $q->like("name", $query); + } + return $q; + } } diff --git a/ci4/app/Services/ProductionService.php b/ci4/app/Services/ProductionService.php index ff2a28d7..3098d825 100644 --- a/ci4/app/Services/ProductionService.php +++ b/ci4/app/Services/ProductionService.php @@ -110,7 +110,6 @@ class ProductionService extends BaseService { $auth_user = auth()->user(); - $ot = new OrdenTrabajoEntity(); $ot_exists = $this->pedido->orden_trabajo(); if ($ot_exists) { return $ot_exists; @@ -122,13 +121,10 @@ class ProductionService extends BaseService "total_tirada" => $this->pedido->total_tirada, "total_precio" => $this->pedido->total_precio ]; - $ot->fill($data); - $this->otModel->save($ot); - $ot_id = $this->otModel->getInsertID(); - $ot->id = $ot_id; + $ot_id = $this->otModel->insert($data); $this->init($ot_id); - $this->storeOrdenTrabajoUsers(); - $this->storeOrdenTrabajoDates(); + // $this->storeOrdenTrabajoUsers(); + // $this->storeOrdenTrabajoDates(); $this->storeAllTareas(); return $this->ot; } @@ -467,6 +463,7 @@ class ProductionService extends BaseService public function papelGramajeDatatableQuery() : BaseBuilder { $q = $this->otModel->builder()->select([ + "lg_papel_impresion.id as papelImpresionId", "lg_papel_impresion.nombre as papelImpresionNombre", "lg_papel_impresion.gramaje as papelImpresionGramaje", "COUNT(orden_trabajo_tareas.id) as tareasCount", @@ -692,5 +689,9 @@ class ProductionService extends BaseService } + protected function actionButtonFilterTask(int $id) + { + return ["title" => lang('ot.filter_by_task'),'id' => $id]; + } } diff --git a/ci4/app/Views/themes/vuexy/components/tables/planning_papel_gramaje_table.php b/ci4/app/Views/themes/vuexy/components/tables/planning_papel_gramaje_table.php index b6f75226..a30ad7d1 100644 --- a/ci4/app/Views/themes/vuexy/components/tables/planning_papel_gramaje_table.php +++ b/ci4/app/Views/themes/vuexy/components/tables/planning_papel_gramaje_table.php @@ -8,6 +8,8 @@ (HH:MM) + + diff --git a/ci4/app/Views/themes/vuexy/components/tables/planning_rot_table.php b/ci4/app/Views/themes/vuexy/components/tables/planning_rot_table.php index 883d34f6..c9dfca15 100644 --- a/ci4/app/Views/themes/vuexy/components/tables/planning_rot_table.php +++ b/ci4/app/Views/themes/vuexy/components/tables/planning_rot_table.php @@ -25,7 +25,7 @@ - + diff --git a/ci4/app/Views/themes/vuexy/form/produccion/ot/viewPlanningRotativa.php b/ci4/app/Views/themes/vuexy/form/produccion/ot/viewPlanningRotativa.php index 44177691..1856fd08 100644 --- a/ci4/app/Views/themes/vuexy/form/produccion/ot/viewPlanningRotativa.php +++ b/ci4/app/Views/themes/vuexy/form/produccion/ot/viewPlanningRotativa.php @@ -14,22 +14,57 @@ -
- - +
- + + + + endSection() ?> diff --git a/httpdocs/assets/js/safekat/pages/produccion/planning_rotativa/index.js b/httpdocs/assets/js/safekat/pages/produccion/planning_rotativa/index.js index d16243f7..ee3b61eb 100644 --- a/httpdocs/assets/js/safekat/pages/produccion/planning_rotativa/index.js +++ b/httpdocs/assets/js/safekat/pages/produccion/planning_rotativa/index.js @@ -3,5 +3,4 @@ import PlanningRotativa from "./planning_rotativa.js"; $(function(){ const planningRotativa = new PlanningRotativa($("#planning-rotativa-page")); planningRotativa.init(); - console.log("PL") }) \ No newline at end of file diff --git a/httpdocs/assets/js/safekat/pages/produccion/planning_rotativa/planning_rotativa.js b/httpdocs/assets/js/safekat/pages/produccion/planning_rotativa/planning_rotativa.js index ac2a232f..199573d6 100644 --- a/httpdocs/assets/js/safekat/pages/produccion/planning_rotativa/planning_rotativa.js +++ b/httpdocs/assets/js/safekat/pages/produccion/planning_rotativa/planning_rotativa.js @@ -25,15 +25,26 @@ class PlanningRotativa { { data: 'tareasCount', searchable: true, sortable: true }, { data: 'totalTirada', searchable: false, sortable: false }, { data: 'tiempoReal', searchable: false, sortable: false }, + { + data: 'action', searchable: false, sortable: false, render: (d) => { + return `` + } + }, + ] this.maquinaSelectFilter = new ClassSelect($("#maquina-select-filter"), `/maquinas/select`, "Seleccione una maquina", true); + this.papelImpresionFilter = new ClassSelect($("#papel-impresion-select-filter"), `/papelesimpresion/select`, "Seleccione un papel", true); this.maquinaSelectFilter.config.dropdownParent = this.item } init() { this.maquinaSelectFilter.init() + this.papelImpresionFilter.init() + this.papelGramajeTablePlanning.on('click','.papel-gramaje-btn',this.filterPapelGramaje.bind(this)) + this.datatablePlanningRot = this.tablePlanningRot.DataTable({ processing: true, + orderCellsTop : true, layout: { topStart: 'pageLength', topEnd: 'search', @@ -52,6 +63,7 @@ class PlanningRotativa { }); this.papelGramajeDatatable = this.papelGramajeTablePlanning.DataTable({ processing: true, + orderCellsTop : true, layout: { topStart: 'pageLength', topEnd: 'search', @@ -77,14 +89,27 @@ class PlanningRotativa { let columnIndex = this.datatableColumns.findIndex((element) => element.data == $(event.currentTarget).attr("name")) this.datatablePlanningRot.column(columnIndex).search(this.maquinaSelectFilter.getText()).draw() }) + this.item.on("change", "#papel-impresion-select-filter", (event) => { + let columnIndex = this.datatableColumns.findIndex((element) => element.data == $(event.currentTarget).attr("name")) + this.datatablePlanningRot.column(columnIndex).search(this.papelImpresionFilter.getText()).draw() + }) } _renderBtnAction(d) { - return ` Ver orden` + return `` } _columnFiltering() { this.api().columns() console.log(this.api().columns()) } + filterPapelGramaje(event) + { + const papelImpresionId = $(event.currentTarget).data('id') + const papelImpresionName = $(event.currentTarget).data('name') + + + this.papelImpresionFilter.setOption(papelImpresionId,papelImpresionName) + + } } export default PlanningRotativa; \ No newline at end of file From e6ce82048017f9b48ad45aa437b902816ca248e3 Mon Sep 17 00:00:00 2001 From: amazuecos Date: Thu, 27 Mar 2025 01:21:52 +0100 Subject: [PATCH 2/3] papel rotativa --- ci4/app/Config/Routes.php | 2 + .../Configuracion/Papelesimpresion.php | 5 ++ .../Controllers/Produccion/Ordentrabajo.php | 35 ++++---- ci4/app/Language/es/Produccion.php | 6 +- .../Configuracion/PapelImpresionModel.php | 2 +- ci4/app/Services/ProductionService.php | 6 +- .../tables/planning_papel_gramaje_table.php | 10 +++ .../components/tables/planning_rot_table.php | 3 +- .../produccion/ot/viewPlanningRotativa.php | 1 + .../planning_rotativa/planning_rotativa.js | 86 ++++++++++++++----- 10 files changed, 112 insertions(+), 44 deletions(-) diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 7cdc04d9..a894926d 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -294,6 +294,8 @@ $routes->group('papelesimpresion', ['namespace' => 'App\Controllers\Configuracio $routes->post('menuitems', 'Papelesimpresion::menuItems', ['as' => 'menuItemsOfPapelesImpresion']); $routes->post('duplicate/(:num)', 'Papelesimpresion::duplicate/$1', ['as' => 'duplicatePapelImpresion']); $routes->get('select', 'Papelesimpresion::papel_impresion_select', ['as' => 'papelImpresionSelect']); + $routes->get('show/(:num)', 'Papelesimpresion::papel_impresion_find/$1', ['as' => 'showPapelImpresion']); + }); $routes->resource('papelesimpresion', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Papelesimpresion', 'except' => 'show,new,create,update']); diff --git a/ci4/app/Controllers/Configuracion/Papelesimpresion.php b/ci4/app/Controllers/Configuracion/Papelesimpresion.php index 253e2256..ad24dfd2 100755 --- a/ci4/app/Controllers/Configuracion/Papelesimpresion.php +++ b/ci4/app/Controllers/Configuracion/Papelesimpresion.php @@ -474,4 +474,9 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController $data = $this->model->querySelect($q)->get()->getResultArray(); return $this->response->setJSON($data); } + public function papel_impresion_find(int $papel_impresion_id) + { + $piEntity = $this->model->find($papel_impresion_id); + return $this->response->setJSON($piEntity); + } } diff --git a/ci4/app/Controllers/Produccion/Ordentrabajo.php b/ci4/app/Controllers/Produccion/Ordentrabajo.php index 9a66de2c..6ab94f39 100755 --- a/ci4/app/Controllers/Produccion/Ordentrabajo.php +++ b/ci4/app/Controllers/Produccion/Ordentrabajo.php @@ -132,14 +132,14 @@ class Ordentrabajo extends BaseController { $logo = config(LogoImpresion::class); - $q = $this->otModel->getDatatableQuery()->where("ordenes_trabajo.estado","F"); + $q = $this->otModel->getDatatableQuery()->where("ordenes_trabajo.estado", "F"); // return $this->response->setJSON($q->get()->getResultArray()); return DataTable::of($q) - ->add("logo",fn($q) => site_url($logo->get_logo_path($q->presupuesto_linea_tipo))) + ->add("logo", fn($q) => site_url($logo->get_logo_path($q->presupuesto_linea_tipo))) ->edit( "fecha_encuadernado_at", - fn($q) => Time::createFromFormat("Y-m-d",$q->fecha_encuadernado_at)->format("d/m/Y") - ) + fn($q) => Time::createFromFormat("Y-m-d", $q->fecha_encuadernado_at)->format("d/m/Y") + ) ->add("action", fn($q) => $q->id) ->toJson(true); } @@ -147,14 +147,14 @@ class Ordentrabajo extends BaseController { $logo = config(LogoImpresion::class); - $q = $this->otModel->getDatatableQuery()->whereIn("ordenes_trabajo.estado",["I","PM"]); + $q = $this->otModel->getDatatableQuery()->whereIn("ordenes_trabajo.estado", ["I", "PM"]); // return $this->response->setJSON($q->get()->getResultArray()); return DataTable::of($q) - ->add("logo",fn($q) => site_url($logo->get_logo_path($q->presupuesto_linea_tipo))) + ->add("logo", fn($q) => site_url($logo->get_logo_path($q->presupuesto_linea_tipo))) ->edit( "fecha_encuadernado_at", - fn($q) => Time::createFromFormat("Y-m-d",$q->fecha_encuadernado_at)->format("d/m/Y") - ) + fn($q) => Time::createFromFormat("Y-m-d", $q->fecha_encuadernado_at)->format("d/m/Y") + ) ->add("action", fn($q) => $q->id) ->toJson(true); } @@ -162,14 +162,14 @@ class Ordentrabajo extends BaseController { $logo = config(LogoImpresion::class); - $q = $this->otModel->getDatatableQuery()->where("ferro_ok_at",null); + $q = $this->otModel->getDatatableQuery()->where("ferro_ok_at", null); // return $this->response->setJSON($q->get()->getResultArray()); return DataTable::of($q) - ->add("logo",fn($q) => site_url($logo->get_logo_path($q->presupuesto_linea_tipo))) + ->add("logo", fn($q) => site_url($logo->get_logo_path($q->presupuesto_linea_tipo))) ->edit( "fecha_encuadernado_at", - fn($q) => Time::createFromFormat("Y-m-d",$q->fecha_encuadernado_at)->format("d/m/Y") - ) + fn($q) => Time::createFromFormat("Y-m-d", $q->fecha_encuadernado_at)->format("d/m/Y") + ) ->add("action", fn($q) => $q->id) ->toJson(true); } @@ -177,14 +177,14 @@ class Ordentrabajo extends BaseController { $logo = config(LogoImpresion::class); - $q = $this->otModel->getDatatableQuery()->where("ferro_ok_at is NOT NULL",NULL,FALSE); + $q = $this->otModel->getDatatableQuery()->where("ferro_ok_at is NOT NULL", NULL, FALSE); // return $this->response->setJSON($q->get()->getResultArray()); return DataTable::of($q) - ->add("logo",fn($q) => site_url($logo->get_logo_path($q->presupuesto_linea_tipo))) + ->add("logo", fn($q) => site_url($logo->get_logo_path($q->presupuesto_linea_tipo))) ->edit( "fecha_encuadernado_at", - fn($q) => Time::createFromFormat("Y-m-d",$q->fecha_encuadernado_at)->format("d/m/Y") - ) + fn($q) => Time::createFromFormat("Y-m-d", $q->fecha_encuadernado_at)->format("d/m/Y") + ) ->add("action", fn($q) => $q->id) ->toJson(true); } @@ -194,7 +194,8 @@ class Ordentrabajo extends BaseController $q = $this->produccionService->papelGramajeDatatableQuery(); return DataTable::of($q) ->edit("tiempoReal", fn($q) => float_seconds_to_hhmm_string($q->tiempoReal * 3600)) - ->add("action" , fn($q) => ["title" => lang('Produccion.datatable.filter_by_task'),'data' => $q]) + ->add("metros", fn($q) => $q->maquina_ancho*$q->totalTirada/1000) + ->add("action", fn($q) => ["title" => lang('Produccion.datatable.filter_by_task'), 'data' => $q]) ->toJson(true); } public function reset_tareas(int $orden_trabajo_id) diff --git a/ci4/app/Language/es/Produccion.php b/ci4/app/Language/es/Produccion.php index 01772f79..2e61fa7c 100644 --- a/ci4/app/Language/es/Produccion.php +++ b/ci4/app/Language/es/Produccion.php @@ -23,7 +23,9 @@ return [ "tiempo" => "Tiempo", "progreso" => "Progreso", "logo" => "Logo impresion", - "filter_by_task" => "Filtrar por tarea" + "filter_by_task" => "Filtrar por tarea", + "metros" => "Metros" + ], "task" => [ @@ -68,7 +70,7 @@ return [ "preview_pdf" => "Previsualizar PDF", "imprimir_codigo_safekat" => "Imprimir código SAFEKAT", "imprimir_ferro" => "Imprimir ferro", - "planning_rotativa" => "Planning rotativa", + "planning_rotativa" => "Tareas rotativa", "solapa" => "Solapa", "papel_gramajes" => "Papel y gramajes" diff --git a/ci4/app/Models/Configuracion/PapelImpresionModel.php b/ci4/app/Models/Configuracion/PapelImpresionModel.php index 4a7979d1..914a315e 100755 --- a/ci4/app/Models/Configuracion/PapelImpresionModel.php +++ b/ci4/app/Models/Configuracion/PapelImpresionModel.php @@ -376,7 +376,7 @@ class PapelImpresionModel extends \App\Models\BaseModel "nombre as name", ]); if ($query) { - $q->like("name", $query); + $q->orLike("nombre", $query); } return $q; } diff --git a/ci4/app/Services/ProductionService.php b/ci4/app/Services/ProductionService.php index 0e84042a..057d499e 100644 --- a/ci4/app/Services/ProductionService.php +++ b/ci4/app/Services/ProductionService.php @@ -440,6 +440,7 @@ class ProductionService extends BaseService "orden_trabajo_tareas.nombre", "lgmp.nombre as maquina_presupuesto_linea", "orden_trabajo_tareas.maquina_id as maquina_tarea", + "lg_maquinas.nombre as maquina_nombre", "lg_imposiciones.id as imposicion_id", "orden_trabajo_tareas.tiempo_estimado", @@ -467,6 +468,8 @@ class ProductionService extends BaseService "lg_papel_impresion.nombre as papelImpresionNombre", "lg_papel_impresion.gramaje as papelImpresionGramaje", "COUNT(orden_trabajo_tareas.id) as tareasCount", + "CAST(JSON_EXTRACT(presupuesto_linea.formas,'$.maquina_ancho') AS DOUBLE) as maquina_ancho", + "CAST(JSON_EXTRACT(presupuesto_linea.formas,'$.maquina_alto') AS DOUBLE) as maquina_alto", "SUM(ordenes_trabajo.total_tirada) as totalTirada", "SUM(orden_trabajo_tareas.tiempo_real) as tiempoReal" ]) @@ -474,7 +477,8 @@ class ProductionService extends BaseService ->join("presupuesto_linea", "presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id", "left") ->join("lg_papel_impresion","presupuesto_linea.papel_impresion_id = lg_papel_impresion.id","left") ->where("orden_trabajo_tareas.deleted_at", null) - ->where("orden_trabajo_tareas.presupuesto_linea_id IS NOT NULL", NULL,FALSE); + ->where("orden_trabajo_tareas.presupuesto_linea_id IS NOT NULL", NULL,FALSE) + ->groupBy('lg_papel_impresion.id'); diff --git a/ci4/app/Views/themes/vuexy/components/tables/planning_papel_gramaje_table.php b/ci4/app/Views/themes/vuexy/components/tables/planning_papel_gramaje_table.php index a30ad7d1..221a00e7 100644 --- a/ci4/app/Views/themes/vuexy/components/tables/planning_papel_gramaje_table.php +++ b/ci4/app/Views/themes/vuexy/components/tables/planning_papel_gramaje_table.php @@ -7,6 +7,7 @@ (gr) + (HH:MM) @@ -15,5 +16,14 @@ + + + Total: + + + + + + \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/components/tables/planning_rot_table.php b/ci4/app/Views/themes/vuexy/components/tables/planning_rot_table.php index c9dfca15..1e6cb53d 100644 --- a/ci4/app/Views/themes/vuexy/components/tables/planning_rot_table.php +++ b/ci4/app/Views/themes/vuexy/components/tables/planning_rot_table.php @@ -25,7 +25,7 @@ - + @@ -34,5 +34,6 @@ + \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/produccion/ot/viewPlanningRotativa.php b/ci4/app/Views/themes/vuexy/form/produccion/ot/viewPlanningRotativa.php index 1856fd08..48b56fb7 100644 --- a/ci4/app/Views/themes/vuexy/form/produccion/ot/viewPlanningRotativa.php +++ b/ci4/app/Views/themes/vuexy/form/produccion/ot/viewPlanningRotativa.php @@ -50,6 +50,7 @@
+
"planning-rotativa-datatable"]) ?>
diff --git a/httpdocs/assets/js/safekat/pages/produccion/planning_rotativa/planning_rotativa.js b/httpdocs/assets/js/safekat/pages/produccion/planning_rotativa/planning_rotativa.js index 199573d6..93f11f1d 100644 --- a/httpdocs/assets/js/safekat/pages/produccion/planning_rotativa/planning_rotativa.js +++ b/httpdocs/assets/js/safekat/pages/produccion/planning_rotativa/planning_rotativa.js @@ -1,19 +1,21 @@ import ClassSelect from "../../../components/select2.js"; +import Ajax from "../../../components/ajax.js"; + class PlanningRotativa { constructor(domItem) { this.item = domItem this.tablePlanningRot = this.item.find("#planning-rotativa-datatable") this.papelGramajeTablePlanning = this.item.find("#planning-papel-datatable") - + this.papelImpresionHeader = this.item.find('#papel-impresion-name-header') this.datatableColumns = [ { data: 'otId', searchable: false, sortable: false }, { data: 'fecha_entrega_real_at', searchable: true, sortable: false }, { data: 'presupuesto_titulo', searchable: true, sortable: false }, { data: 'maquina_planning_nombre', searchable: true, sortable: false }, { data: 'ot_tirada', searchable: false, sortable: false }, - { data: 'maquina_ancho', searchable: false, sortable: false }, - { data: 'maquina_alto', searchable: false, sortable: false }, + { data: 'maquina_ancho', searchable: false, sortable: false,render: d => `${d}` }, + { data: 'maquina_alto', searchable: false, sortable: false ,render: d => `${d}` }, { data: 'papel_impresion', searchable: false, sortable: false }, { data: 'papel_gramaje', searchable: false, sortable: false }, { data: 'action', searchable: false, sortable: false, render: this._renderBtnAction }, @@ -24,31 +26,35 @@ class PlanningRotativa { { data: 'papelImpresionGramaje', searchable: true, sortable: true }, { data: 'tareasCount', searchable: true, sortable: true }, { data: 'totalTirada', searchable: false, sortable: false }, + { data: 'metros', searchable: false, sortable: false }, { data: 'tiempoReal', searchable: false, sortable: false }, { data: 'action', searchable: false, sortable: false, render: (d) => { - return `` + return `` } }, ] - this.maquinaSelectFilter = new ClassSelect($("#maquina-select-filter"), `/maquinas/select`, "Seleccione una maquina", true); - this.papelImpresionFilter = new ClassSelect($("#papel-impresion-select-filter"), `/papelesimpresion/select`, "Seleccione un papel", true); + this.maquinaSelectFilter = new ClassSelect($("#maquina-select-filter"), `/maquinas/select`, "Seleccione una maquina", true, {}, $('body')); + this.papelImpresionFilter = new ClassSelect($("#papel-impresion-select-filter"), `/papelesimpresion/select`, "Seleccione un papel", true, {}, $('body')); this.maquinaSelectFilter.config.dropdownParent = this.item } init() { this.maquinaSelectFilter.init() this.papelImpresionFilter.init() - this.papelGramajeTablePlanning.on('click','.papel-gramaje-btn',this.filterPapelGramaje.bind(this)) - + this.papelGramajeTablePlanning.on('click', '.papel-gramaje-btn', this.filterPapelGramaje.bind(this)) + this.papelImpresionFilter.onChange(() => { + this.papelImpresionHeader.text(this.papelImpresionFilter.getText()) + }) + this.datatablePlanningRot = this.tablePlanningRot.DataTable({ processing: true, - orderCellsTop : true, + orderCellsTop: true, layout: { - topStart: 'pageLength', - topEnd: 'search', - bottomStart: 'info', + topStart: 'info', + topEnd: null, + bottomStart: 'pageLength', bottomEnd: 'paging' }, @@ -63,11 +69,12 @@ class PlanningRotativa { }); this.papelGramajeDatatable = this.papelGramajeTablePlanning.DataTable({ processing: true, - orderCellsTop : true, + orderCellsTop: true, + layout: { - topStart: 'pageLength', - topEnd: 'search', - bottomStart: 'info', + topStart: 'info', + topEnd: null, + bottomStart: 'pageLength', bottomEnd: 'paging' }, @@ -93,6 +100,7 @@ class PlanningRotativa { let columnIndex = this.datatableColumns.findIndex((element) => element.data == $(event.currentTarget).attr("name")) this.datatablePlanningRot.column(columnIndex).search(this.papelImpresionFilter.getText()).draw() }) + this.papelGramajeDatatable.on('draw', this.addTotalFooter.bind(this)) } _renderBtnAction(d) { return `` @@ -101,15 +109,49 @@ class PlanningRotativa { this.api().columns() console.log(this.api().columns()) } - filterPapelGramaje(event) - { + filterPapelGramaje(event) { const papelImpresionId = $(event.currentTarget).data('id') - const papelImpresionName = $(event.currentTarget).data('name') - - - this.papelImpresionFilter.setOption(papelImpresionId,papelImpresionName) + this.getPapelImpresion(papelImpresionId) + } + getPapelImpresion(papelImpresionId) { + let ajax = new Ajax('/papelesimpresion/show/' + papelImpresionId, + null, + null, + this.getPapelImpresionSuccess.bind(this), + this.getPapelImpresionError.bind(this) + ) + ajax.get() + } + getPapelImpresionSuccess(response) { + this.papelImpresionFilter.setOption(response.id, response.nombre) + this.papelImpresionHeader.text(response.nombre) + } + getPapelImpresionError(response) { } + formatSeconds(s){ + return [parseInt(s / 60 / 60), parseInt(s / 60 % 60)].join(':').replace(/\b(\d)\b/g, '0$1'); + } + addTotalFooter() { + const data = this.papelGramajeDatatable.column(5).data().reduce((a, b) => { + let sa = a.split(":") + let ha = parseInt(sa[0]) * 3600 + let ma = parseInt(sa[1]) * 60 + let sb = b.split(":") + let hb = parseInt(sb[0]) * 3600 + let mb = parseInt(sb[1]) * 60 + return hb + mb + ha + ma + }) + const metros = this.papelGramajeDatatable.column(4).data().reduce((a, b) => { + + return a + b + }) + $('#total-tiempo-papel').text(this.formatSeconds(data)) + $('#total-metros').text(metros) } } + + + + export default PlanningRotativa; \ No newline at end of file From 5a5e0be855a292d86b5eb22ce122e921e0e31c41 Mon Sep 17 00:00:00 2001 From: amazuecos Date: Thu, 27 Mar 2025 13:57:37 +0100 Subject: [PATCH 3/3] planning rot --- .../Controllers/Produccion/Ordentrabajo.php | 6 +- .../Produccion/OrdenTrabajoDateEntity.php | 44 +++--- .../Produccion/OrdenTrabajoEntity.php | 4 +- .../Produccion/OrdenTrabajoUserEntity.php | 55 ++++---- ci4/app/Language/es/Produccion.php | 3 +- .../Models/OrdenTrabajo/OrdenTrabajoDate.php | 6 +- .../Models/OrdenTrabajo/OrdenTrabajoUser.php | 2 - ci4/app/Services/ProductionService.php | 133 +++++++++--------- .../tables/planning_papel_gramaje_table.php | 2 +- .../components/tables/planning_rot_table.php | 22 ++- .../planning_rotativa/planning_rotativa.js | 35 ++++- 11 files changed, 179 insertions(+), 133 deletions(-) diff --git a/ci4/app/Controllers/Produccion/Ordentrabajo.php b/ci4/app/Controllers/Produccion/Ordentrabajo.php index 6ab94f39..6834ecf0 100755 --- a/ci4/app/Controllers/Produccion/Ordentrabajo.php +++ b/ci4/app/Controllers/Produccion/Ordentrabajo.php @@ -194,7 +194,7 @@ class Ordentrabajo extends BaseController $q = $this->produccionService->papelGramajeDatatableQuery(); return DataTable::of($q) ->edit("tiempoReal", fn($q) => float_seconds_to_hhmm_string($q->tiempoReal * 3600)) - ->add("metros", fn($q) => $q->maquina_ancho*$q->totalTirada/1000) + ->add("metros", fn($q) => $q->papel_ancho*$q->totalTirada/1000) ->add("action", fn($q) => ["title" => lang('Produccion.datatable.filter_by_task'), 'data' => $q]) ->toJson(true); } @@ -264,6 +264,10 @@ class Ordentrabajo extends BaseController $q = $this->produccionService->planningRotativaQueryDatatable(); return DataTable::of($q) ->edit("fecha_entrega_real_at", fn($q) => $q->fecha_entrega_real_at ? Time::createFromFormat("Y-m-d", $q->fecha_entrega_real_at)->format("d/m/Y") : "") + ->add("metros_check", fn($q) => $q->otId) + ->add("corte", fn($q) => $q->otId) + ->add("metros", fn($q) => $q->papel_ancho*$q->ot_tirada/1000) + ->add("action", fn($q) => $q) ->toJson(true); } diff --git a/ci4/app/Entities/Produccion/OrdenTrabajoDateEntity.php b/ci4/app/Entities/Produccion/OrdenTrabajoDateEntity.php index ab72cb56..f6b5e79c 100644 --- a/ci4/app/Entities/Produccion/OrdenTrabajoDateEntity.php +++ b/ci4/app/Entities/Produccion/OrdenTrabajoDateEntity.php @@ -37,28 +37,28 @@ class OrdenTrabajoDateEntity extends Entity 'created_at', 'updated_at', 'deleted_at', - 'fecha_entrega_at', - 'fecha_entrega_change_at', - 'fecha_entrega_real_at', - 'fecha_entrega_real_warning', - 'fecha_impresion_at', - 'fecha_encuadernado_at', - 'fecha_externo_at', - 'fecha_entrega_warning', - 'fecha_entrega_warning_revised', - 'pendiente_ferro_at', - 'ferro_en_cliente_at', - 'ferro_ok_at', - 'interior_bn_at', - 'interior_color_at', - 'preparacion_interiores_at', - 'cubierta_at', - 'plastificado_at', - 'encuadernacion_at', - 'corte_at', - 'embalaje_at', - 'envio_at', - 'entrada_manipulado_at' + // 'fecha_entrega_at', + // 'fecha_entrega_change_at', + // 'fecha_entrega_real_at', + // 'fecha_entrega_real_warning', + // 'fecha_impresion_at', + // 'fecha_encuadernado_at', + // 'fecha_externo_at', + // 'fecha_entrega_warning', + // 'fecha_entrega_warning_revised', + // 'pendiente_ferro_at', + // 'ferro_en_cliente_at', + // 'ferro_ok_at', + // 'interior_bn_at', + // 'interior_color_at', + // 'preparacion_interiores_at', + // 'cubierta_at', + // 'plastificado_at', + // 'encuadernacion_at', + // 'corte_at', + // 'embalaje_at', + // 'envio_at', + // 'entrada_manipulado_at' ]; protected $casts = [ // "fecha_entrada_at" => "?datetime", diff --git a/ci4/app/Entities/Produccion/OrdenTrabajoEntity.php b/ci4/app/Entities/Produccion/OrdenTrabajoEntity.php index 9ef6a01c..f59678fd 100644 --- a/ci4/app/Entities/Produccion/OrdenTrabajoEntity.php +++ b/ci4/app/Entities/Produccion/OrdenTrabajoEntity.php @@ -79,12 +79,12 @@ class OrdenTrabajoEntity extends Entity public function dates(): ?OrdenTrabajoDateEntity { $m = model(OrdenTrabajoDate::class); - return $m->find($this->attributes["id"]); + return $m->where('orden_trabajo_id',$this->attributes["id"])->first(); } public function users(): ?OrdenTrabajoUserEntity { $m = model(OrdenTrabajoUser::class); - return $m->find($this->attributes["id"]); + return $m->where('orden_trabajo_id',$this->attributes["id"])->first(); } /** diff --git a/ci4/app/Entities/Produccion/OrdenTrabajoUserEntity.php b/ci4/app/Entities/Produccion/OrdenTrabajoUserEntity.php index 5a8b8d4e..6eaf08c6 100644 --- a/ci4/app/Entities/Produccion/OrdenTrabajoUserEntity.php +++ b/ci4/app/Entities/Produccion/OrdenTrabajoUserEntity.php @@ -8,33 +8,7 @@ class OrdenTrabajoUserEntity extends Entity { protected $datamap = []; protected $dates = ['created_at', 'updated_at', 'deleted_at']; - protected array $casts = [ - "orden_trabajo_id" => "integer", - "user_created_id" => "?integer", - "user_update_id" => "?integer", - "inaplazable_revised_change_user_id" => "?integer", - "ferro_disponible_hecho_user_id" => "?integer", - "ferro_disponible_ok_user_id" => "?integer", - "ferro_entregado_user_id" => "?integer", - "pendiente_ferro_user_id" => "?integer", - "ferro_en_cliente_user_id" => "?integer", - "ferro_ok_user_id" => "?integer", - "interior_bn_user_id" => "?integer", - "interior_color_user_id" => "?integer", - "preparacion_interior_user_id" => "?integer", - "cubierta_user_id" => "?integer", - "plastificado_user_id" => "?integer", - "encuadernacion_user_id" => "?integer", - "corte_user_id" => "?integer", - "embalaje_user_id" => "?integer", - "entrada_manipulado_user_id" => "?integer", - "pre_formato_user_id" => "?integer", - "pre_lomo_user_id" => "?integer", - "pre_solapa_user_id" => "?integer", - "pre_codbarras_user_id" => "?integer", - "pre_imposicion_user_id" => "?integer", - "pre_imprimir_user_id" => "?integer" - ]; + protected $attributes = [ "orden_trabajo_id"=> null, "user_created_id"=> null, @@ -62,4 +36,31 @@ class OrdenTrabajoUserEntity extends Entity "pre_imposicion_user_id"=> null, "pre_imprimir_user_id" => null ]; + // protected array $casts = [ + // "orden_trabajo_id" => "integer", + // "user_created_id" => "?integer", + // "user_update_id" => "?integer", + // "inaplazable_revised_change_user_id" => "?integer", + // "ferro_disponible_hecho_user_id" => "?integer", + // "ferro_disponible_ok_user_id" => "?integer", + // "ferro_entregado_user_id" => "?integer", + // "pendiente_ferro_user_id" => "?integer", + // "ferro_en_cliente_user_id" => "?integer", + // "ferro_ok_user_id" => "?integer", + // "interior_bn_user_id" => "?integer", + // "interior_color_user_id" => "?integer", + // "preparacion_interior_user_id" => "?integer", + // "cubierta_user_id" => "?integer", + // "plastificado_user_id" => "?integer", + // "encuadernacion_user_id" => "?integer", + // "corte_user_id" => "?integer", + // "embalaje_user_id" => "?integer", + // "entrada_manipulado_user_id" => "?integer", + // "pre_formato_user_id" => "?integer", + // "pre_lomo_user_id" => "?integer", + // "pre_solapa_user_id" => "?integer", + // "pre_codbarras_user_id" => "?integer", + // "pre_imposicion_user_id" => "?integer", + // "pre_imprimir_user_id" => "?integer" + // ]; } diff --git a/ci4/app/Language/es/Produccion.php b/ci4/app/Language/es/Produccion.php index 2e61fa7c..fdceace1 100644 --- a/ci4/app/Language/es/Produccion.php +++ b/ci4/app/Language/es/Produccion.php @@ -24,7 +24,8 @@ return [ "progreso" => "Progreso", "logo" => "Logo impresion", "filter_by_task" => "Filtrar por tarea", - "metros" => "Metros" + "metros" => "Metros", + "corte" => "Corte" ], diff --git a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoDate.php b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoDate.php index e99bc959..bd7ff3a0 100644 --- a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoDate.php +++ b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoDate.php @@ -98,11 +98,11 @@ class OrdenTrabajoDate extends Model if(!isset($data["data"])){ return $data; }else{ - $this->updateUserDateMap($data["data"]); + $this->updateUserDateMap($data["id"],$data["data"]); } return $data; } - protected function updateUserDateMap($data){ + protected function updateUserDateMap($data,$values){ $mapping = [ "fecha_encuadernado_at" => "encuadernacion_user_id", // "fecha_externo_at" => "null", @@ -121,7 +121,7 @@ class OrdenTrabajoDate extends Model ]; $otUser = model(OrdenTrabajoUser::class); $auth_user_id = auth()->user()->id; - foreach ($data as $key => $value) { + foreach ($values as $key => $value) { if(isset($mapping[$key])){ if($value){ $otUser->where('orden_trabajo_id',$data['orden_trabajo_id']) diff --git a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoUser.php b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoUser.php index 1c4d239a..c1a232f5 100644 --- a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoUser.php +++ b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoUser.php @@ -45,9 +45,7 @@ class OrdenTrabajoUser extends Model protected bool $allowEmptyInserts = false; protected bool $updateOnlyChanged = true; - protected array $casts = [ - ]; protected array $castHandlers = []; // Dates diff --git a/ci4/app/Services/ProductionService.php b/ci4/app/Services/ProductionService.php index 057d499e..70b5b11f 100644 --- a/ci4/app/Services/ProductionService.php +++ b/ci4/app/Services/ProductionService.php @@ -33,7 +33,7 @@ class ProductionService extends BaseService protected array $MAPPING_DATE_USER = [ "fecha_encuadernado_at" => "encuadernacion_user_id", // "fecha_externo_at" => "null", - "fecha_impresion_at" => "null", + "fecha_impresion_at" => null, "pendiente_ferro_at" => "pendiente_ferro_user_id", "ferro_en_cliente_at" => "ferro_en_cliente_user_id", "ferro_ok_at" => "ferro_ok_user_id", @@ -44,7 +44,7 @@ class ProductionService extends BaseService "plastificado_at" => "plastificado_user_id", "corte_at" => "corte_user_id", "embalaje_at" => "embalaje_user_id", - "entrada_manipulado_at" => "entrada_manipulado_user_id" + "entrada_manipulado_at" => "entrada_manipulado_user_id" ]; /** @@ -60,13 +60,13 @@ class ProductionService extends BaseService */ protected PresupuestoEntity $presupuesto; - public function __construct() { + public function __construct() + { $this->otModel = model(OrdenTrabajoModel::class); $this->otDate = model(OrdenTrabajoDate::class); $this->otTarea = model(OrdenTrabajoTarea::class); $this->otUser = model(OrdenTrabajoUser::class); $this->userModel = model(UserModel::class); - } public function init(int $orden_trabajo_id): self { @@ -135,7 +135,7 @@ class ProductionService extends BaseService * @param OrdenTrabajoEntity $ot * @return integer|boolean|string ID */ - protected function storeOrdenTrabajoDates() : int|bool|string + protected function storeOrdenTrabajoDates(): int|bool|string { $fecha_encuadernado = Time::now()->addDays(2)->format("Y-m-d"); $fecha_entrega_real = Time::now()->addDays(5)->format("Y-m-d"); @@ -149,7 +149,7 @@ class ProductionService extends BaseService "fecha_entrega_externo" => $this->pedido->fecha_entrega_externo, ]); } - protected function storeOrdenTrabajoUsers() : int|bool|string + protected function storeOrdenTrabajoUsers(): int|bool|string { return $this->otUser->insert([ "orden_trabajo_id" => $this->ot->id, @@ -351,7 +351,7 @@ class ProductionService extends BaseService public function getPdf() { - return view("themes/vuexy/pdfs/orden_trabajo",$this->getDataPdf()); + return view("themes/vuexy/pdfs/orden_trabajo", $this->getDataPdf()); } /** * Query para mostrar en datatable @@ -388,7 +388,7 @@ class ProductionService extends BaseService ->orderBy("orden_trabajo_tareas.orden", "ASC"); return $q; } - /** + /** * Query para mostrar en datatable * * @return BaseBuilder @@ -402,8 +402,8 @@ class ProductionService extends BaseService "orden_trabajo_tareas.maquina_id", "lg_maquinas.nombre as maquina_planning_nombre", "ordenes_trabajo.total_tirada as ot_tirada", - "lg_papel_formato.ancho as maquina_ancho", - "lg_papel_formato.alto as maquina_alto", + "lg_papel_formato.ancho as papel_ancho", + "lg_papel_formato.alto as papel_alto", // "JSON_EXTRACT(presupuesto_linea.formas,'$.maquina_ancho') as maquina_ancho", // "JSON_EXTRACT(presupuesto_linea.formas,'$.maquina_alto') as maquina_alto", "lg_papel_impresion.nombre as papel_impresion", @@ -422,7 +422,7 @@ class ProductionService extends BaseService ->join("lg_maquinas as lgmp", "lgmp.id = presupuesto_linea.maquina_id", "left") ->join("lg_imposiciones", "lg_imposiciones.id = orden_trabajo_tareas.imposicion_id", "left") // ->where("orden_trabajo_tareas.orden_trabajo_id", $this->ot->id) - ->whereIn("presupuesto_linea.tipo", ["lp_rot_bn","lp_rot_color"]) + ->whereIn("presupuesto_linea.tipo", ["lp_rot_bn", "lp_rot_color"]) ->where("orden_trabajo_tareas.deleted_at", null) ->orderBy("orden_trabajo_tareas.orden", "ASC"); return $q; @@ -461,24 +461,28 @@ class ProductionService extends BaseService ->orderBy("orden_trabajo_tareas.orden", "ASC"); return $q; } - public function papelGramajeDatatableQuery() : BaseBuilder + public function papelGramajeDatatableQuery(): BaseBuilder { $q = $this->otModel->builder()->select([ "lg_papel_impresion.id as papelImpresionId", "lg_papel_impresion.nombre as papelImpresionNombre", "lg_papel_impresion.gramaje as papelImpresionGramaje", "COUNT(orden_trabajo_tareas.id) as tareasCount", - "CAST(JSON_EXTRACT(presupuesto_linea.formas,'$.maquina_ancho') AS DOUBLE) as maquina_ancho", - "CAST(JSON_EXTRACT(presupuesto_linea.formas,'$.maquina_alto') AS DOUBLE) as maquina_alto", + "lg_papel_formato.ancho as papel_ancho", + "lg_papel_formato.alto as papel_alto", + // "CAST(JSON_EXTRACT(presupuesto_linea.formas,'$.maquina_ancho') AS DOUBLE) as maquina_ancho", + // "CAST(JSON_EXTRACT(presupuesto_linea.formas,'$.maquina_alto') AS DOUBLE) as maquina_alto", "SUM(ordenes_trabajo.total_tirada) as totalTirada", "SUM(orden_trabajo_tareas.tiempo_real) as tiempoReal" ]) - ->join("orden_trabajo_tareas", "orden_trabajo_tareas.orden_trabajo_id = ordenes_trabajo.id", "left") - ->join("presupuesto_linea", "presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id", "left") - ->join("lg_papel_impresion","presupuesto_linea.papel_impresion_id = lg_papel_impresion.id","left") - ->where("orden_trabajo_tareas.deleted_at", null) - ->where("orden_trabajo_tareas.presupuesto_linea_id IS NOT NULL", NULL,FALSE) - ->groupBy('lg_papel_impresion.id'); + ->join("orden_trabajo_tareas", "orden_trabajo_tareas.orden_trabajo_id = ordenes_trabajo.id", "left") + ->join("presupuesto_linea", "presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id", "left") + ->join("presupuestos", "presupuestos.id = presupuesto_linea.presupuesto_id", "right") + ->join("lg_papel_impresion", "presupuesto_linea.papel_impresion_id = lg_papel_impresion.id", "left") + ->join("lg_papel_formato", "lg_papel_formato.id = presupuestos.papel_formato_id", "left") + ->where("orden_trabajo_tareas.deleted_at", null) + ->where("orden_trabajo_tareas.presupuesto_linea_id IS NOT NULL", NULL, FALSE) + ->groupBy('lg_papel_impresion.id'); @@ -519,7 +523,8 @@ class ProductionService extends BaseService ]; return $summary; } - public function getDataPdf(){ + public function getDataPdf() + { $logistica_data = $this->logistica_data(); return [ "ot" => $this->ot, @@ -540,88 +545,92 @@ class ProductionService extends BaseService "peso_pedido" => $logistica_data["peso_pedido"] ]; } - public function getTareaImpresionSobreCubierta() : array + public function getTareaImpresionSobreCubierta(): array { $q = $this->otTarea->select('orden_trabajo_tareas.*') - ->join("presupuesto_linea","presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id","left") - ->where("orden_trabajo_tareas.orden_trabajo_id",$this->ot->id) - ->whereIn("presupuesto_linea.tipo",["lp_sobrecubierta"])->findAll(); + ->join("presupuesto_linea", "presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id", "left") + ->where("orden_trabajo_tareas.orden_trabajo_id", $this->ot->id) + ->whereIn("presupuesto_linea.tipo", ["lp_sobrecubierta"])->findAll(); return $q; } - public function getTareaImpresionCubierta() : array + public function getTareaImpresionCubierta(): array { $q = $this->otTarea->select('orden_trabajo_tareas.*') - ->join("presupuesto_linea","presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id","left") - ->where("orden_trabajo_tareas.orden_trabajo_id",$this->ot->id) - ->whereIn("presupuesto_linea.tipo",["lp_cubierta"])->findAll(); + ->join("presupuesto_linea", "presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id", "left") + ->where("orden_trabajo_tareas.orden_trabajo_id", $this->ot->id) + ->whereIn("presupuesto_linea.tipo", ["lp_cubierta"])->findAll(); return $q; } - public function getTareaImpresionInteriorBn() : array + public function getTareaImpresionInteriorBn(): array { $q = $this->otTarea->select('orden_trabajo_tareas.*') - ->join("presupuesto_linea","presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id","left") - ->where("orden_trabajo_tareas.orden_trabajo_id",$this->ot->id) - ->whereIn("presupuesto_linea.tipo",["lp_rot_bn","lp_bn","lp_bnhq"])->findAll(); + ->join("presupuesto_linea", "presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id", "left") + ->where("orden_trabajo_tareas.orden_trabajo_id", $this->ot->id) + ->whereIn("presupuesto_linea.tipo", ["lp_rot_bn", "lp_bn", "lp_bnhq"])->findAll(); return $q; } - public function getTareaImpresionInteriorColor() : array + public function getTareaImpresionInteriorColor(): array { $q = $this->otTarea->select('orden_trabajo_tareas.*') - ->join("presupuesto_linea","presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id","left") - ->where("orden_trabajo_tareas.orden_trabajo_id",$this->ot->id) - ->whereIn("presupuesto_linea.tipo",["lp_rot_color","lp_color","lp_colorhq"])->findAll(); + ->join("presupuesto_linea", "presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id", "left") + ->where("orden_trabajo_tareas.orden_trabajo_id", $this->ot->id) + ->whereIn("presupuesto_linea.tipo", ["lp_rot_color", "lp_color", "lp_colorhq"])->findAll(); return $q; } - public function getPresupuestoLineaImpresion(){ - } + public function getPresupuestoLineaImpresion() {} public function tareas_acabado(): array { - $q = $this->otTarea->where("presupuesto_acabado_id IS NOT NULL",NULL,FALSE)->findAll(); + $q = $this->otTarea->where("presupuesto_acabado_id IS NOT NULL", NULL, FALSE)->findAll(); return $q; } public function tareas_impresion(): array { - $q = $this->otTarea->where("presupuesto_linea_id IS NOT NULL",NULL,FALSE)->findAll(); + $q = $this->otTarea->where("presupuesto_linea_id IS NOT NULL", NULL, FALSE)->findAll(); return $q; } public function tareas_encuadernacion(): array { - $q = $this->otTarea->where("presupuesto_encuadernado_id IS NOT NULL",NULL,FALSE)->findAll(); + $q = $this->otTarea->where("presupuesto_encuadernado_id IS NOT NULL", NULL, FALSE)->findAll(); return $q; } public function tareas_preimpresion(): array { - $q = $this->otTarea->where("presupuesto_preimpresion_id IS NOT NULL",NULL,FALSE)->findAll(); + $q = $this->otTarea->where("presupuesto_preimpresion_id IS NOT NULL", NULL, FALSE)->findAll(); return $q; } public function tareas_manipulado(): array { - $q = $this->otTarea->where("presupuesto_manipulado_id IS NOT NULL",NULL,FALSE)->findAll(); + $q = $this->otTarea->where("presupuesto_manipulado_id IS NOT NULL", NULL, FALSE)->findAll(); return $q; } /**======================================================================== * UPDATES *========================================================================**/ - public function updateOrdenTrabajoTarea($tarea_id,$data) : bool + public function updateOrdenTrabajoTarea($tarea_id, $data): bool { - return $this->otTarea->update($tarea_id,$data); + return $this->otTarea->update($tarea_id, $data); } - public function updateOrdenTrabajoDate($data) + public function updateOrdenTrabajoDate($data) { - // return $this->otDate->find($this->ot->id); - $r = $this->otDate->update($this->ot->id,$data); + // // return $this->otDate->find($this->ot->id); + $otDate = $this->otDate->where('orden_trabajo_id', $this->ot->id) + ->set([$data['name'] => $data[$data['name']]]) + ->update($data); $ot_users = $this->ot->users(); - $ot_users = $ot_users->toArray(); - $user_id = $ot_users[$this->MAPPING_DATE_USER[$data["name"]]]; - $user = $this->userModel->find($user_id); - return ["user" => $user,"status" => $r]; + if($this->MAPPING_DATE_USER[$data["name"]]){ + $user_id = $ot_users->{$this->MAPPING_DATE_USER[$data["name"]]}; + $user = $this->userModel->find($user_id); + return ["user" => $user, "status" => $otDate]; + }else{ + return ["user" => null, "status" => false]; + } } - public function updateOrdenTrabajo($data) : bool + public function updateOrdenTrabajo($data): bool { - return $this->otModel->update($this->ot->id,$data); + return $this->otModel->update($this->ot->id, $data); } /**======================================================================== * RELATION METHODS @@ -679,7 +688,7 @@ class ProductionService extends BaseService { return $this->presupuesto->extras(); } - protected function logistica_data() : array + protected function logistica_data(): array { $presupuesto_lineas = $this->presupuesto->presupuestoLineas(); $peso = 0; @@ -688,14 +697,12 @@ class ProductionService extends BaseService } return [ "peso_unidad" => $peso, - "peso_pedido" => $peso*$this->ot->total_tirada + "peso_pedido" => $peso * $this->ot->total_tirada ]; - - } - - protected function actionButtonFilterTask(int $id) - { - return ["title" => lang('ot.filter_by_task'),'id' => $id]; } + protected function actionButtonFilterTask(int $id) + { + return ["title" => lang('ot.filter_by_task'), 'id' => $id]; + } } diff --git a/ci4/app/Views/themes/vuexy/components/tables/planning_papel_gramaje_table.php b/ci4/app/Views/themes/vuexy/components/tables/planning_papel_gramaje_table.php index 221a00e7..cc71352d 100644 --- a/ci4/app/Views/themes/vuexy/components/tables/planning_papel_gramaje_table.php +++ b/ci4/app/Views/themes/vuexy/components/tables/planning_papel_gramaje_table.php @@ -19,7 +19,7 @@ Total: - + (m) diff --git a/ci4/app/Views/themes/vuexy/components/tables/planning_rot_table.php b/ci4/app/Views/themes/vuexy/components/tables/planning_rot_table.php index 1e6cb53d..7cb8e213 100644 --- a/ci4/app/Views/themes/vuexy/components/tables/planning_rot_table.php +++ b/ci4/app/Views/themes/vuexy/components/tables/planning_rot_table.php @@ -12,9 +12,9 @@ - + + + @@ -26,9 +26,23 @@ - + + + + + +
+ +
+ + + diff --git a/httpdocs/assets/js/safekat/pages/produccion/planning_rotativa/planning_rotativa.js b/httpdocs/assets/js/safekat/pages/produccion/planning_rotativa/planning_rotativa.js index 93f11f1d..8b3225fc 100644 --- a/httpdocs/assets/js/safekat/pages/produccion/planning_rotativa/planning_rotativa.js +++ b/httpdocs/assets/js/safekat/pages/produccion/planning_rotativa/planning_rotativa.js @@ -8,16 +8,20 @@ class PlanningRotativa { this.tablePlanningRot = this.item.find("#planning-rotativa-datatable") this.papelGramajeTablePlanning = this.item.find("#planning-papel-datatable") this.papelImpresionHeader = this.item.find('#papel-impresion-name-header') + this.checkAllMetros = this.item.find("#metros-check-all") this.datatableColumns = [ { data: 'otId', searchable: false, sortable: false }, { data: 'fecha_entrega_real_at', searchable: true, sortable: false }, { data: 'presupuesto_titulo', searchable: true, sortable: false }, { data: 'maquina_planning_nombre', searchable: true, sortable: false }, - { data: 'ot_tirada', searchable: false, sortable: false }, - { data: 'maquina_ancho', searchable: false, sortable: false,render: d => `${d}` }, - { data: 'maquina_alto', searchable: false, sortable: false ,render: d => `${d}` }, + { data: 'ot_tirada', searchable: false, sortable: false, }, + { data: 'papel_ancho', searchable: false, sortable: false, render: d => `${d}` }, + { data: 'papel_alto', searchable: false, sortable: false, render: d => `${d}` }, { data: 'papel_impresion', searchable: false, sortable: false }, - { data: 'papel_gramaje', searchable: false, sortable: false }, + { data: 'papel_gramaje', searchable: false, sortable: false, render: d => `${d}` }, + { data: 'corte', searchable: false, sortable: false, render: d => d }, + { data: 'metros_check', searchable: false, sortable: false, render: d => `` }, + { data: 'metros', searchable: false, sortable: false, render: d => `${d}` }, { data: 'action', searchable: false, sortable: false, render: this._renderBtnAction }, ] @@ -26,7 +30,7 @@ class PlanningRotativa { { data: 'papelImpresionGramaje', searchable: true, sortable: true }, { data: 'tareasCount', searchable: true, sortable: true }, { data: 'totalTirada', searchable: false, sortable: false }, - { data: 'metros', searchable: false, sortable: false }, + { data: 'metros', searchable: false, sortable: false, render: d => `${d}` }, { data: 'tiempoReal', searchable: false, sortable: false }, { data: 'action', searchable: false, sortable: false, render: (d) => { @@ -43,6 +47,10 @@ class PlanningRotativa { init() { this.maquinaSelectFilter.init() this.papelImpresionFilter.init() + this.checkAllMetros.on('change', () => { + let isChecked = this.checkAllMetros.prop('checked') + this.item.find(".metros-check").prop('checked', isChecked).trigger("change") + }) this.papelGramajeTablePlanning.on('click', '.papel-gramaje-btn', this.filterPapelGramaje.bind(this)) this.papelImpresionFilter.onChange(() => { this.papelImpresionHeader.text(this.papelImpresionFilter.getText()) @@ -101,6 +109,8 @@ class PlanningRotativa { this.datatablePlanningRot.column(columnIndex).search(this.papelImpresionFilter.getText()).draw() }) this.papelGramajeDatatable.on('draw', this.addTotalFooter.bind(this)) + this.tablePlanningRot.on('change', ".metros-check", this.calcMetrosCheck.bind(this)) + } _renderBtnAction(d) { return `` @@ -127,7 +137,7 @@ class PlanningRotativa { this.papelImpresionHeader.text(response.nombre) } getPapelImpresionError(response) { } - formatSeconds(s){ + formatSeconds(s) { return [parseInt(s / 60 / 60), parseInt(s / 60 % 60)].join(':').replace(/\b(\d)\b/g, '0$1'); } addTotalFooter() { @@ -141,13 +151,24 @@ class PlanningRotativa { return hb + mb + ha + ma }) const metros = this.papelGramajeDatatable.column(4).data().reduce((a, b) => { - + return a + b }) $('#total-tiempo-papel').text(this.formatSeconds(data)) $('#total-metros').text(metros) } + calcMetrosCheck() { + const metros_sel = this.datatablePlanningRot.rows((idx, data, node) => { + return $(node).find('input[type="checkbox"]').prop('checked'); + }).data().toArray().reduce((a, b) => { + a = a?.metros ?? 0 + b = b?.metros ?? 0 + return a + b + }, null) + this.item.find('#metros-sel-total').text(metros_sel) + + } }