From 30c5b06d3d818b414f2ba4a4d278cf9e18b0ee35 Mon Sep 17 00:00:00 2001 From: amazuecos Date: Tue, 6 May 2025 08:30:01 +0200 Subject: [PATCH 1/3] update progress based on task time and task date --- ci4/app/Services/ProductionService.php | 65 ++++++++++++++++---------- 1 file changed, 41 insertions(+), 24 deletions(-) diff --git a/ci4/app/Services/ProductionService.php b/ci4/app/Services/ProductionService.php index 25679b40..db2463b8 100755 --- a/ci4/app/Services/ProductionService.php +++ b/ci4/app/Services/ProductionService.php @@ -228,8 +228,8 @@ class ProductionService extends BaseService $this->maquinaModel = model(MaquinaModel::class); $this->otModel = model(OrdenTrabajoModel::class); $ot = $this->otModel->find($orden_trabajo_id); - if($ot == null){ - throw new Exception(lang('Produccion.errors.ot_not_found',['ot_id' => $orden_trabajo_id])); + if ($ot == null) { + throw new Exception(lang('Produccion.errors.ot_not_found', ['ot_id' => $orden_trabajo_id])); } $this->ot = $ot; $pedido = $this->ot->pedido(); @@ -610,11 +610,11 @@ class ProductionService extends BaseService } return ["tareas" => $tareas]; } - public function getTareasWithMaquina(int $maquina_id,?array $tareaEstados = null) : ?array + public function getTareasWithMaquina(int $maquina_id, ?array $tareaEstados = null): ?array { return $this->otModel->queryMaquinaTareas($maquina_id, $tareaEstados) - ->where('ordenes_trabajo.id', $this->ot->id) - ->get()->getResult(OrdenTrabajoTareaEntity::class); + ->where('ordenes_trabajo.id', $this->ot->id) + ->get()->getResult(OrdenTrabajoTareaEntity::class); } public function getPdf() @@ -1439,6 +1439,16 @@ class ProductionService extends BaseService } return $pedidoUserDates; } + public function getTiempoEstimadoTotalTareasSeconds(): int + { + try { + $time_tareas_seconds = array_map(fn($q) => $q->tiempo_estimado ?? 0, $this->ot->tareas()); + $seconds = array_sum($time_tareas_seconds); + return $seconds; + } catch (\Throwable $th) { + return 0; + } + } public function getTiempoProcesamientoHHMMSS(): ?string { try { @@ -1490,33 +1500,31 @@ class ProductionService extends BaseService } return $uvi; } - //TODO ACTUALIZAR + public function updateProgress(): bool { - $userDates = $this->ordenTrabajoConfig->DATE_USER_MAPPING; - $pedidoUserDates = $this->ordenTrabajoConfig->DATE_USER_MAPPING_PEDIDO; - - $fill_dates = 0; - $status = false; - $total = count($userDates) + count($pedidoUserDates); + $progress = $this->getOtProgress(); if ($this->ot->estado != "F") { - if ($this->ot->dates()) { - - foreach ($userDates as $key => $value) { - if ($this->ot->dates()->{$key} != null) $fill_dates++; - } - foreach ($pedidoUserDates as $key => $value) { - if ($this->pedido->{$key} != null) $fill_dates++; - } - - $progreso = (float) $fill_dates / $total * 100; - $status = $this->otModel->update($this->ot->id, ["progreso" => round($progreso, 2)]); - } + $status = $this->otModel->update($this->ot->id, ["progreso" => round($progress, 2)]); } else { $status = $this->otModel->update($this->ot->id, ["progreso" => 100]); } return $status; } + public function getOtProgress() + { + $datesWithTime = $this->getOrdenTrabajoTareaDatesWithTiempoEstimado(); + $tiempo_estimado_total = $this->getTiempoEstimadoTotalTareasSeconds(); + $progress = 0; + $otDates = $this->ot->dates(); + foreach ($datesWithTime as $key => $dateWithTime) { + ["date" => $date, "tiempo_estimado" => $tiempo_estimado] = $dateWithTime; + if ($otDates->{$date}) { + $progress += $tiempo_estimado / $tiempo_estimado_total * 100; + } + } + return $progress; + } public function getOtColorStatus(): string { if ($this->ot->dates()) { @@ -2194,6 +2202,15 @@ class ProductionService extends BaseService } return $data; } + public function getOrdenTrabajoTareaDatesWithTiempoEstimado(): array + { + $dates = []; + foreach ($this->ot->tareas() as $key => $tarea) { + $dates[$tarea->id]["date"] = $this->getOrdenTrabajoTareaDate($tarea); + $dates[$tarea->id]["tiempo_estimado"] = $tarea->tiempo_estimado; + } + return $dates; + } public function getOrdenTrabajoTareaDates(): array { $dates = []; From ddd7c471a1b09cf205199a4c0f48aff5440a76cd Mon Sep 17 00:00:00 2001 From: amazuecos Date: Tue, 6 May 2025 08:40:07 +0200 Subject: [PATCH 2/3] progress ot --- ci4/app/Language/es/Produccion.php | 1 + ci4/app/Services/ProductionService.php | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ci4/app/Language/es/Produccion.php b/ci4/app/Language/es/Produccion.php index 90aeda9d..728920c0 100755 --- a/ci4/app/Language/es/Produccion.php +++ b/ci4/app/Language/es/Produccion.php @@ -119,6 +119,7 @@ return [ //IMPRESION "impresion_bn" => "Impresión BN", "cubierta" => "Cubierta/Portada", + "sobrecubierta" => "Sobrecubierta", "guarda" => "Guarda", "encuadernacion" => "Encuadernación", diff --git a/ci4/app/Services/ProductionService.php b/ci4/app/Services/ProductionService.php index db2463b8..0105df94 100755 --- a/ci4/app/Services/ProductionService.php +++ b/ci4/app/Services/ProductionService.php @@ -1519,8 +1519,13 @@ class ProductionService extends BaseService $otDates = $this->ot->dates(); foreach ($datesWithTime as $key => $dateWithTime) { ["date" => $date, "tiempo_estimado" => $tiempo_estimado] = $dateWithTime; - if ($otDates->{$date}) { - $progress += $tiempo_estimado / $tiempo_estimado_total * 100; + try { + if ($otDates->{$date}) { + $progress += $tiempo_estimado / $tiempo_estimado_total * 100; + } + } catch (\Throwable $th) { + //throw $th; + $progress += 0; } } return $progress; From f6b8d2ba85509a61f25052473da92a4ebb95d431 Mon Sep 17 00:00:00 2001 From: amazuecos Date: Tue, 6 May 2025 10:06:33 +0200 Subject: [PATCH 3/3] columns searching and ordering ots --- .../components/datatables/otDatatable.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/httpdocs/assets/js/safekat/components/datatables/otDatatable.js b/httpdocs/assets/js/safekat/components/datatables/otDatatable.js index d1e1f0b8..527f15f1 100644 --- a/httpdocs/assets/js/safekat/components/datatables/otDatatable.js +++ b/httpdocs/assets/js/safekat/components/datatables/otDatatable.js @@ -16,14 +16,14 @@ class OrdenTrabajoDatatable { this.datatableColumns = [ { 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 }, - { data: 'presupuesto_titulo', searchable: false, sortable: false }, - { data: 'ubicacion_nombre', searchable: false, sortable: false }, - { data: 'total_tirada', searchable: false, sortable: false, render: (d) => `${d}` }, - { data: 'tipo_presupuesto_impresion', searchable: false, sortable: false }, + { data: 'id', searchable: true, sortable: true }, + { data: 'pedido_id', searchable: true, sortable: true }, + { data: 'fecha_encuadernado_at',name:"pedidos.fecha_encuadernado", searchable: true, sortable: true }, + { data: 'cliente_nombre', name:"clientes.nombre", searchable: true, sortable: false }, + { data: 'presupuesto_titulo', name:"presupuestos.titulo", searchable: true, sortable: true }, + { data: 'ubicacion_nombre', name:"ubicaciones.nombre", searchable: true, sortable: true }, + { data: 'total_tirada', name:"pedidos.total_tirada",searchable: true, sortable: true, render: (d) => `${d}` }, + { data: 'tipo_presupuesto_impresion', name:"tipos_presupuestos.codigo", searchable: true, sortable: true }, { data: 'logo', searchable: false, sortable: false, render: (d, t) => { return `
@@ -33,7 +33,7 @@ class OrdenTrabajoDatatable { } }, { - data: 'progreso', searchable: false, sortable: false, render: (d, t) => { + data: 'progreso',name:"ordenes_trabajo.progreso", searchable: false, sortable: true, render: (d, t) => { return `
${d}%