From 4991642d4808b895ad607faca48759643644fa2d Mon Sep 17 00:00:00 2001 From: amazuecos Date: Sun, 30 Mar 2025 19:30:30 +0200 Subject: [PATCH] feat delete portada and remove loader --- ci4/app/Config/Routes.php | 5 ++ .../Controllers/Produccion/Ordentrabajo.php | 37 +++++++++ ci4/app/Services/ProductionService.php | 76 ++++++++++++++++++ .../vuexy/form/produccion/ot/otHeader.php | 2 +- .../vuexy/form/produccion/ot/otPortada.php | 6 +- .../form/produccion/viewOrdenTrabajoEdit.php | 1 + httpdocs/assets/img/portada_not_found.png | Bin 0 -> 4260 bytes .../assets/js/safekat/pages/produccion/ot.js | 44 +++++++++- .../planning_rotativa/planning_rotativa.js | 8 +- 9 files changed, 169 insertions(+), 10 deletions(-) create mode 100644 httpdocs/assets/img/portada_not_found.png diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index e9590f5c..182565aa 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -992,6 +992,7 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func $routes->post("update/user", 'Ordentrabajo::update_orden_trabajo_user'); $routes->post("update", 'Ordentrabajo::update_orden_trabajo'); $routes->post("upload/portada", 'Ordentrabajo::upload_orden_trabajo_portada'); + $routes->delete("portada/(:num)", 'Ordentrabajo::delete_orden_trabajo_portada/$1'); /**====================== * PDF @@ -999,6 +1000,10 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func $routes->get('pdf/(:num)', 'Ordentrabajo::get_pdf/$1'); $routes->get('portada/(:num)', 'Ordentrabajo::get_portada_img/$1'); $routes->group('planning', ['namespace' => 'App\Controllers\Produccion'], function ($routes) { + $routes->get('select/maquina/rotativa','Ordentrabajo::select_maquina_planning_rot'); + $routes->get('select/papel/rotativa','Ordentrabajo::select_papel_planning_rot'); + $routes->get('select/maquina/plana','Ordentrabajo::select_maquina_planning_plana'); + $routes->get('select/papel/plana','Ordentrabajo::select_papel_planning_plana'); $routes->get('rotativa', 'Ordentrabajo::index_planning_rotativa'); $routes->get('papel/datatable', 'Ordentrabajo::papel_gramaje_datatable'); $routes->get('papel/plana/datatable', 'Ordentrabajo::papel_pliego_datatable'); diff --git a/ci4/app/Controllers/Produccion/Ordentrabajo.php b/ci4/app/Controllers/Produccion/Ordentrabajo.php index cfb354c7..1fe96731 100755 --- a/ci4/app/Controllers/Produccion/Ordentrabajo.php +++ b/ci4/app/Controllers/Produccion/Ordentrabajo.php @@ -253,6 +253,22 @@ class Ordentrabajo extends BaseController return $this->response->setJSON(["message" => "Portada error", "error" => $th->getMessage()])->setStatusCode($th->getCode()); } } + public function delete_orden_trabajo_portada($orden_trabajo_id) + { + try { + helper('filesystem'); + $otEntity = $this->otModel->find($orden_trabajo_id); + $pathActualFile = $otEntity->portada_path; + $fullPath = WRITEPATH . 'uploads/' . $pathActualFile; + if(file_exists($fullPath)){ + delete_files($fullPath); + } + $r = $this->otModel->update($otEntity->id, ["portada_path" => null]); + return $this->response->setJSON(["message" => "Portada eliminada", "data" => $r]); + } catch (\Throwable $th) { + return $this->response->setStatusCode(500)->setJSON(["message" => "Portada error", "error" => $th->getMessage()]); + } + } public function get_portada_img($orden_trabajo_id) { $ot = $this->otModel->find($orden_trabajo_id); @@ -287,4 +303,25 @@ class Ordentrabajo extends BaseController ->add("action", fn($q) => $q) ->toJson(true); } + public function select_maquina_planning_rot(){ + $q = $this->request->getGet('q'); + $result = $this->produccionService->querySelectMaquinaPlanningRotativa($q); + return $this->response->setJSON($result); + } + public function select_papel_planning_rot(){ + $q = $this->request->getGet('q'); + $result = $this->produccionService->querySelectPapelPlanningRot($q); + return $this->response->setJSON($result); + } + public function select_maquina_planning_plana(){ + $q = $this->request->getGet('q'); + $result = $this->produccionService->querySelectMaquinaPlanningPlana($q); + return $this->response->setJSON($result); + } + public function select_papel_planning_plana(){ + $q = $this->request->getGet('q'); + $result = $this->produccionService->querySelectPapelPlanningPlana($q); + return $this->response->setJSON($result); + } + } diff --git a/ci4/app/Services/ProductionService.php b/ci4/app/Services/ProductionService.php index 60de7e20..07d77075 100644 --- a/ci4/app/Services/ProductionService.php +++ b/ci4/app/Services/ProductionService.php @@ -812,4 +812,80 @@ class ProductionService extends BaseService { return ["title" => lang('ot.filter_by_task'), 'id' => $id]; } + + public function querySelectMaquinaPlanningRotativa($q){ + $query = $this->otModel->builder()->select([ + "orden_trabajo_tareas.maquina_id as id", + "lg_maquinas.nombre as name", + ]) + ->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_maquinas", "lg_maquinas.id = orden_trabajo_tareas.maquina_id", "left") + ->whereIn("presupuesto_linea.tipo", $this->TIPOS_ROTATIVA) + ->where('lg_maquinas.is_rotativa', true) + ->where("orden_trabajo_tareas.deleted_at", null) + ->orderBy("orden_trabajo_tareas.orden", "ASC"); + if($q){ + $query->like('lg_maquinas.nombre',$q); + } + return $query->get()->getResultArray(); + } + public function querySelectMaquinaPlanningPlana($q){ + $query = $this->otModel->builder()->select([ + "orden_trabajo_tareas.maquina_id as id", + "lg_maquinas.nombre as name", + ]) + ->join("orden_trabajo_tareas", "orden_trabajo_tareas.orden_trabajo_id = ordenes_trabajo.id", "left") + ->join("orden_trabajo_dates", "orden_trabajo_dates.orden_trabajo_id = ordenes_trabajo.id", "left") + ->join("presupuesto_linea", "presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id", "left") + ->join("lg_maquinas", "lg_maquinas.id = orden_trabajo_tareas.maquina_id", "left") + ->whereIn("presupuesto_linea.tipo", $this->TIPOS_PLANA) + ->where('lg_maquinas.is_rotativa', false) + ->where("orden_trabajo_tareas.deleted_at", null) + ->orderBy("orden_trabajo_tareas.orden", "ASC"); + if($q){ + $query->like('lg_maquinas.nombre',$q); + } + return $query->get()->getResultArray(); + } + public function querySelectPapelPlanningRot(string $q){ + $query = $this->otModel->builder()->select([ + "lg_papel_impresion.id", + "lg_papel_impresion.nombre as name", + ]) + ->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) + ->whereIn("presupuesto_linea.tipo", $this->TIPOS_ROTATIVA) + ->groupBy('lg_papel_impresion.id'); + if($q){ + $query->like('lg_papel_impresion.nombre',$q); + } + return $query->get()->getResultArray(); + } + public function querySelectPapelPlanningPlana($q){ + $query = $this->otModel->builder()->select([ + "lg_papel_impresion.id", + "lg_papel_impresion.nombre as name", + ]) + ->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) + ->whereIn("presupuesto_linea.tipo", $this->TIPOS_PLANA) + ->groupBy('lg_papel_impresion.id'); + if($q){ + $query->like('lg_papel_impresion.nombre',$q); + } + return $query->get()->getResultArray(); + } + + } diff --git a/ci4/app/Views/themes/vuexy/form/produccion/ot/otHeader.php b/ci4/app/Views/themes/vuexy/form/produccion/ot/otHeader.php index 08c29f9a..f5d2476f 100644 --- a/ci4/app/Views/themes/vuexy/form/produccion/ot/otHeader.php +++ b/ci4/app/Views/themes/vuexy/form/produccion/ot/otHeader.php @@ -10,7 +10,7 @@
- +
diff --git a/ci4/app/Views/themes/vuexy/form/produccion/ot/otPortada.php b/ci4/app/Views/themes/vuexy/form/produccion/ot/otPortada.php index 8e13bdc7..5de34a3f 100644 --- a/ci4/app/Views/themes/vuexy/form/produccion/ot/otPortada.php +++ b/ci4/app/Views/themes/vuexy/form/produccion/ot/otPortada.php @@ -16,7 +16,11 @@
- +
+ + + +
diff --git a/ci4/app/Views/themes/vuexy/form/produccion/viewOrdenTrabajoEdit.php b/ci4/app/Views/themes/vuexy/form/produccion/viewOrdenTrabajoEdit.php index 8f2c3648..f6b947fb 100644 --- a/ci4/app/Views/themes/vuexy/form/produccion/viewOrdenTrabajoEdit.php +++ b/ci4/app/Views/themes/vuexy/form/produccion/viewOrdenTrabajoEdit.php @@ -5,6 +5,7 @@ extend('themes/vuexy/main/defaultlayout') ?> section('content'); ?>
+
diff --git a/httpdocs/assets/img/portada_not_found.png b/httpdocs/assets/img/portada_not_found.png new file mode 100644 index 0000000000000000000000000000000000000000..356293fdd64e3bafd677a5ebb82a2d672a7914f0 GIT binary patch literal 4260 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 IZxH1F0E~#srvLx| literal 0 HcmV?d00001 diff --git a/httpdocs/assets/js/safekat/pages/produccion/ot.js b/httpdocs/assets/js/safekat/pages/produccion/ot.js index 0139cbe8..ad34faee 100644 --- a/httpdocs/assets/js/safekat/pages/produccion/ot.js +++ b/httpdocs/assets/js/safekat/pages/produccion/ot.js @@ -95,6 +95,7 @@ class OrdenTrabajo { this.tareasTableItem.on("draw.dt", this.createSelectMaquinaTarea.bind(this)) this.tareasTableItem.on("xhr.dt", this.unbindEventTareas.bind(this)) this.otForm.on("click", "#btn-upload-portada", this.handleUploadPortada.bind(this)) + this.otForm.on("click", "#btn-delete-portada", this.handleDeletePortada.bind(this)) this.otForm.on("click", "#btn-finalizar-orden-pedido", this.handleFinalizarPedido.bind(this)) this.tareasTableItem.on("click", ".ot-tarea-btn-delete", this.handleTareaDeleteConfirmation.bind(this)) this.item.on("click", "#btn-reset-tareas", this.handleResetTareasDeleteConfirmation.bind(this)) @@ -350,6 +351,7 @@ class OrdenTrabajo { } handlePreimpresionReviewChangeSuccess(response) { + alertSuccess(response.message).fire() } handlePreimpresionReviewChangeError(error) { @@ -373,9 +375,38 @@ class OrdenTrabajo { } handleUploadPortadaSuccess(response) { this.handleGetPortada() + popSuccessAlert(response.message) this.otForm.find("#portada-file-input").val(null) } - handleUploadPortadaError(errors) { } + handleUploadPortadaError(errors) { + popSuccessAlert(errors?.message) + } + handleDeletePortada(){ + this.item.find(".portada-loader").prop("hidden", true); + this.item.find("#portada-orden-trabajo").prop("hidden", false); + let ajax = new Ajax('/produccion/ordentrabajo/portada/' + this.modelId, + null, + null, + this.handleDeletePortadaSuccess.bind(this), + this.handleGetPortadaError.bind(this), + ) + alertConfirmationDelete("¿Estás seguro de realizar esta acción?") + .then(result => { + if (result.isConfirmed) { + ajax.delete(); + } + }) + } + handleDeletePortadaSuccess(response){ + $('#portada-orden-trabajo').attr('src', '/assets/img/portada_not_found.png'); + this.item.find(".portada-loader").prop("hidden", true); + this.item.find("#portada-orden-trabajo").prop("hidden", false); + popSuccessAlert(response.message) + } + handleDeletePortadaError(response){ + popErrorAlert(response.error) + } + handleGetPortada() { this.item.find(".portada-loader").prop("hidden", false); this.item.find("#portada-orden-trabajo").prop("hidden", true); @@ -385,7 +416,7 @@ class OrdenTrabajo { xhrFields: { responseType: 'blob' // Expect binary data }, - success: this.handleGetPortadaSuccess.bind(this), + success:this.handleGetPortadaSuccess.bind(this), error: this.handleGetPortadaError.bind(this) }); } @@ -395,7 +426,11 @@ class OrdenTrabajo { this.item.find(".portada-loader").prop("hidden", true); this.item.find("#portada-orden-trabajo").prop("hidden", false); } - handleGetPortadaError(errors) { } + handleGetPortadaError() { + this.item.find(".portada-loader").prop("hidden", true); + this.item.find("#portada-orden-trabajo").prop("hidden", false); + + } handleFinalizarPedido() { const ajax = new Ajax( "/produccion/ordentrabajo/update", @@ -409,7 +444,8 @@ class OrdenTrabajo { ); ajax.post() } - handleEstadoChangeSuccess() { + handleEstadoChangeSuccess(response) { + popSuccessAlert(response.message) this.alertOrdenTrabajo.removeClass("alert-info").addClass("alert-success") this.btnFinalizarPedido.prop("disabled", true); } 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 e590a591..e7a3f38d 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 @@ -78,14 +78,14 @@ class PlanningRotativa { ] this.maquinaSelectFilter = new ClassSelect( this.tablePlanningRot.find(".planning-maquina-select"), - `/maquinas/select`, + `/produccion/ordentrabajo/planning/select/maquina/rotativa`, "Seleccione una maquina", true, { dropdownCssClass: "h-2" }, $('body')); - this.papelImpresionFilter = new ClassSelect(this.tablePlanningRot.find(".planning-papel-select"), `/papelesimpresion/select`, "Seleccione un papel", true, {}, $('body')); - this.maquinaSelectFilterPlana = new ClassSelect(this.tablePlanningPlana.find(".planning-maquina-select"), `/maquinas/select`, "Seleccione una maquina", true, {}, $('body')); - this.papelImpresionFilterPlana = new ClassSelect(this.tablePlanningPlana.find(".planning-papel-select"), `/papelesimpresion/select`, "Seleccione un papel", true, {}, $('body')); + this.papelImpresionFilter = new ClassSelect(this.tablePlanningRot.find(".planning-papel-select"), `/produccion/ordentrabajo/planning/select/papel/rotativa`, "Seleccione un papel", true, {}, $('body')); + this.maquinaSelectFilterPlana = new ClassSelect(this.tablePlanningPlana.find(".planning-maquina-select"), `/produccion/ordentrabajo/planning/select/maquina/plana`, "Seleccione una maquina", true, {}, $('body')); + this.papelImpresionFilterPlana = new ClassSelect(this.tablePlanningPlana.find(".planning-papel-select"), `/produccion/ordentrabajo/planning/select/papel/plana`, "Seleccione un papel", true, {}, $('body')); this.maquinaSelectFilter.config.dropdownParent = this.item } init() {