feat delete portada and remove loader

This commit is contained in:
amazuecos
2025-03-30 19:30:30 +02:00
parent 053ce49279
commit 4991642d48
9 changed files with 169 additions and 10 deletions

View File

@ -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');

View File

@ -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);
}
}

View File

@ -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();
}
}

View File

@ -10,7 +10,7 @@
<div class="sk-wave-rect"></div>
<div class="sk-wave-rect"></div>
</div>
<img class="card-img card-img-left img-thumbnail" id="portada-orden-trabajo" src="" hidden>
<img class="card-img card-img-left img-thumbnail" id="portada-orden-trabajo" src="<?=site_url('assets/img/portada_not_found.png')?>" hidden>
</div>
<div class="col-md-8">
<div class="card-body">

View File

@ -16,7 +16,11 @@
<input class="form-control" type="file" id="portada-file-input">
</div>
<div class="mb-3">
<button type="button" class="btn btn-primary w-100" id="btn-upload-portada"><i class="ti ti-md ti-upload"></i>Subir portada </button>
<div class="d-flex flex-row align-items-center justify-content-start gap-2">
<button type="button" class="btn btn-primary" id="btn-upload-portada"><i class="ti ti-md ti-upload"></i>Subir portada </button>
<button type="button" class="btn btn-danger" id="btn-delete-portada"><i class="ti ti-md ti-trash"></i>Eliminar </button>
</div>
</div>
</div>
</div>

View File

@ -5,6 +5,7 @@
<?= $this->extend('themes/vuexy/main/defaultlayout') ?>
<?= $this->section('content'); ?>
<div id="ot-edit" data-id="<?= $modelId ?>">
<?= view('themes/_commonPartialsBs/_alertBoxes'); ?>
<?= view("themes/vuexy/form/produccion/ot/otHeader") ?>
<div class="row">

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -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);
}

View File

@ -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() {