Merge branch 'feat/colors-plannings' into 'main'

add colors plannings

See merge request jjimenez/safekat!703
This commit is contained in:
Alvaro
2025-04-15 07:55:36 +00:00
7 changed files with 98 additions and 33 deletions

View File

@ -746,6 +746,7 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func
$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');
$routes->get("color/(:num)", 'Ordentrabajo::get_orden_trabajo_color_status/$1');
/**======================
* FILES

View File

@ -328,26 +328,26 @@ class Ordentrabajo extends BaseController
}
public function planning_rotativa_datatable()
{
$q = $this->produccionService->planningRotativaQueryDatatable();
return DataTable::of($q)
$query = $this->produccionService->planningRotativaQueryDatatable();
return DataTable::of($query)
->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) => ["otId" => $q->otId, "tipo_corte" => $this->produccionService->ordenTrabajoTareaCorte($q->otId)])
->add("action", fn($q) => $q)
->add("action", fn($q) => ["data" => $q])
->toJson(true);
}
public function planning_plana_datatable()
{
$q = $this->produccionService->planningPlanaQueryDatatable();
$query = $this->produccionService->planningPlanaQueryDatatable();
$padreId = $this->request->getGet('padre_id');
if ($padreId) {
$q->where('lg_maquinas.padre_id', $padreId);
$query->where('lg_maquinas.padre_id', $padreId);
}
return DataTable::of($q)
return DataTable::of($query)
->edit("tiempo_real_sum", fn($q) => $q->tiempo_real_sum)
->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("pliegos_check", fn($q) => $q->otId)
->add("action", fn($q) => $q)
->add("action", fn($q) => ["data" => $q ])
->toJson(true);
}
public function select_maquina_planning_rot()
@ -431,4 +431,9 @@ class Ordentrabajo extends BaseController
);
}
}
public function get_orden_trabajo_color_status(int $orden_trabajo_id)
{
$color = $this->produccionService->init($orden_trabajo_id)->getOtColorStatus();
return $this->response->setJSON(["color" => $color]);
}
}

View File

@ -87,12 +87,12 @@ class OrdenTrabajoEntity extends Entity
public function dates(): ?OrdenTrabajoDateEntity
{
$m = model(OrdenTrabajoDate::class);
return $m->where('orden_trabajo_id',$this->attributes["id"])->first();
return $m->where('orden_trabajo_id', $this->attributes["id"])->first();
}
public function users(): ?OrdenTrabajoUserEntity
{
$m = model(OrdenTrabajoUser::class);
return $m->where('orden_trabajo_id',$this->attributes["id"])->first();
return $m->where('orden_trabajo_id', $this->attributes["id"])->first();
}
/**
@ -109,24 +109,24 @@ class OrdenTrabajoEntity extends Entity
$this->attributes["dates"] = $ot_dates->fill($data);
return $this;
}
public function getBarCode() : string
public function getBarCode(): string
{
$barcode = new TypeCode128();
$renderer = new PngRenderer();
$barcodeData = $barcode->getBarcode($this->pedido()->presupuesto()->id);
return base64_encode($renderer->render($barcodeData,200, 50));
return base64_encode($renderer->render($barcodeData, 200, 50));
}
public function files() : array
public function files(): array
{
$m = model(OrdenTrabajoFileModel::class);
return $m->where('orden_trabajo_id',$this->attributes['id'])->findAll() ?? [];
return $m->where('orden_trabajo_id', $this->attributes['id'])->findAll() ?? [];
}
public function pedidoEsperaBy() : ?UserEntity
public function pedidoEsperaBy(): ?UserEntity
{
$m = model(UserModel::class);
if($this->attributes['pedido_espera_by']){
if ($this->attributes['pedido_espera_by']) {
return $m->findById($this->attributes['pedido_espera_by']);
}else{
} else {
return null;
}
}
@ -139,10 +139,10 @@ class OrdenTrabajoEntity extends Entity
helper('filesystem');
$path = WRITEPATH . 'uploads/' . $this->attributes["portada_path"];
$portada_path = null;
if($path){
if(file_exists($path)){
if ($path) {
if (file_exists($path)) {
$portada_path = $path;
}else{
} else {
$portada_path = null;
}
}

View File

@ -79,6 +79,8 @@ class ProductionService extends BaseService
}
public function init(int $orden_trabajo_id): self
{
try {
//code...
$this->maquinaModel = model(MaquinaModel::class);
$this->otModel = model(OrdenTrabajoModel::class);
$this->ot = $this->otModel->find($orden_trabajo_id);
@ -87,6 +89,10 @@ class ProductionService extends BaseService
$this->defaultMaquinaCorte = $this->maquinaModel->where('nombre', $this->defaultMaquinaCorteName)->first();
$this->statusColor = $this->ordenTrabajoConfig->OT_COLORS["sin_imprimir"];
return $this;
} catch (\Throwable $th) {
dd($orden_trabajo_id);
throw $th;
}
}
/**
* Establece el pedido sobre el que se va a trabajar

View File

@ -0,0 +1,36 @@
<!-- Modal -->
<div class="modal fade" id="modalNewTask" tabindex="-1" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel1"><?= lang('Produccion.task') ?></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form id="formNewOtTask" method="POST">
<div class="form-group">
<div class="row">
<div class="col-12 mb-0">
<label for="ot-task-nombre" class="form-label"><?= lang('Produccion.nombre') ?></label>
<input type="input" rows="4" cols="10" id="ot-task-nombre" placeholder="Escriba un título" name="nombre" class="form-control" />
</div>
<div class="col-12 mb-0">
<label for="ot-task-nombre" class="form-label"><?= lang('Produccion.tiempo_estimado') ?></label>
<input type="input" rows="4" cols="10" id="ot-task-tiempo-estimado" name="tiempo_estimado" class="form-control" />
</div>
<div class="col-12 mb-0">
<label for="ot-task-nombre" class="form-label"><?= lang('Produccion.tiempo_estimado') ?></label>
<select type="input" rows="4" cols="10" id="ot-task-tiempo-estimado" name="tiempo_estimado" class="form-control"></select>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-label-secondary" data-bs-dismiss="modal"><?= lang('App.global_come_back') ?></button>
<button type="button" id="submit_new_hebra" class="btn btn-primary d-none"><?= lang('Chat.modal.btn_send') ?></button>
<button type="button" id="submit_update_hebra" class="btn btn-primary d-none"><?= lang('Chat.modal.btn_send_update') ?></button>
</div>
</div>
</div>
</div>

View File

@ -41,9 +41,13 @@
</div>
</div>
<div class="row text-end mt-2">
<div class="col-md-12">
<button type="button" class="btn btn-danger btn-md" id="btn-reset-tareas"><i class="ti ti-trash ti-xs"></i> Reiniciar tareas</button>
<div class="row d-flex flex-row justify-content-between align-items-center mt-2 gap-2">
<div class="col-md-3 text-start">
<!-- <button type="button" class="btn btn-primary btn-md align-items-center" id="btn-add-tarea"><span class="ti ti-plus ti-sm me-1"></span> Insertar tarea</button> -->
</div>
<div class="col-md-3 gap-2 text-end">
<!-- <button type="button" class="btn btn-warning btn-md" id="btn-reset-tareas-time"><span class="ti ti-clock ti-sm me-1"></span> Actualizar tiempo</button> -->
<button type="button" class="btn btn-danger btn-md" id="btn-reset-tareas"><span class="ti ti-trash ti-sm me-1"></span> Reiniciar tareas</button>
</div>
</div>
</div>

View File

@ -151,6 +151,9 @@ class PlanningRotativa {
language: {
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
},
createdRow: (row,data,dataIndex) => {
this.getColorOtStatus(row,data)
},
columns: this.datatableColumns,
ajax: '/produccion/ordentrabajo/planning/rotativa/datatable'
});
@ -165,7 +168,9 @@ class PlanningRotativa {
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
},
columns: this.datatablePlanaColumns,
createdRow: (row,data,dataIndex) => {
this.getColorOtStatus(row,data)
},
ajax: {
url : '/produccion/ordentrabajo/planning/plana/datatable',
data : d => {
@ -245,7 +250,7 @@ class PlanningRotativa {
this.tablePlanningPlana.on('change', ".pliegos-check", this.calcPliegosCheck.bind(this))
}
_renderBtnAction(d) {
return `<a href="/produccion/ordentrabajo/edit/${d.otId}" class="ot-tarea-comment" data-id="${d.otId}"><i class="ti ti-eye"></i></a>`
return `<a href="/produccion/ordentrabajo/edit/${d.data.otId}" class="ot-tarea-comment" data-id="${d.data.otId}"><i class="ti ti-eye"></i></a>`
}
_columnFiltering() {
this.api().columns()
@ -362,7 +367,15 @@ class PlanningRotativa {
}
toggleCorteError(){
}
getColorOtStatus(row,data){
let ajax = new Ajax("/produccion/ordentrabajo/color/"+data.otId,null,null,
(response) => {
$(row).css("border-left",`10px solid ${response.color}`)
$(row).css("border-right",`10px solid ${response.color}`)
},null
)
ajax.get()
}
}