fichaje automatico y escaneo

This commit is contained in:
amazuecos
2025-05-05 00:47:00 +02:00
parent fb7f2a28d9
commit 305eea00e6
19 changed files with 821 additions and 25 deletions

View File

@ -5,6 +5,7 @@ namespace App\Controllers\Produccion;
use App\Controllers\BaseController;
use App\Models\Compras\ProveedorModel;
use App\Models\Configuracion\MaquinaModel;
use App\Models\Configuracion\MaquinaOtTareaModel;
use App\Models\OrdenTrabajo\OrdenTrabajoModel;
use App\Models\OrdenTrabajo\OrdenTrabajoTarea;
use App\Models\OrdenTrabajo\OrdenTrabajoUser;
@ -31,6 +32,7 @@ class Ordentrabajo extends BaseController
protected OrdenTrabajoTarea $otTarea;
protected ProveedorModel $proveedorModel;
protected MaquinaModel $maquinaModel;
protected MaquinaOtTareaModel $maquinaOtTareaModel;
protected UserModel $userModel;
protected Validation $validation;
protected static $viewPath = 'themes/vuexy/form/produccion/';
@ -47,6 +49,7 @@ class Ordentrabajo extends BaseController
$this->produccionService = new ProductionService();
$this->otTarea = model(OrdenTrabajoTarea::class);
$this->maquinaModel = model(MaquinaModel::class);
$this->maquinaOtTareaModel = model(MaquinaOtTareaModel::class);
$this->proveedorModel = model(ProveedorModel::class);
$this->validation = service("validation");
helper("time");
@ -375,8 +378,8 @@ class Ordentrabajo extends BaseController
->add("action", fn($q) => $q)
->edit("orden", fn($q) => ["id" => $q->id, "orden" => $q->orden])
->add("tarea_estado", fn($q) => $this->produccionService->getTitleTareaEstado($q->id))
->edit("tiempo_estimado", fn($q) => float_seconds_to_hhmm_string($q->tiempo_estimado))
->edit("tiempo_real", fn($q) => float_seconds_to_hhmm_string($q->tiempo_real))
->edit("tiempo_estimado", fn($q) => float_seconds_to_hhmmss_string($q->tiempo_estimado))
->edit("tiempo_real", fn($q) => float_seconds_to_hhmmss_string($q->tiempo_real))
->add("proveedor", fn($q) => $this->produccionService->getProveedorTarea($q->id))
->edit("maquina_tarea", fn($q) => ["id" => $q->id, "maquina_id" => $q->maquina_tarea, "maquina_name" => $q->maquina_nombre])
->add("imposicion", fn($q) => ["id" => $q->id, "imposicion_id" => $q->imposicion_id, "name" => $q->imposicion_name, "is_presupuesto_linea" => $q->presupuesto_linea_id ? true : false])
@ -601,7 +604,12 @@ class Ordentrabajo extends BaseController
['title' => $maquina->nombre, 'route' => route_to("viewProduccionMaquinistaMaquina", $maquina_id), 'active' => true],
];
$this->viewData["maquinaEntity"] = $maquina;
return view(static::$viewPath . '/maquinista/viewMaquinistaMaquinaTareas', $this->viewData);
$tareasRunning = $this->maquinaOtTareaModel->queryDatatableJoinOrdenTrabajo($maquina->id)->countAllResults();
if ($tareasRunning) {
return view(static::$viewPath . '/maquinista/viewProduccionMaquinistaOtTareasView', $this->viewData);
} else {
return view(static::$viewPath . '/maquinista/viewMaquinistaMaquinaTareas', $this->viewData);
}
}
public function maquinista_maquina_tareas_fichaje_automatico(int $maquina_id)
{
@ -628,9 +636,19 @@ class Ordentrabajo extends BaseController
['title' => $otTareaEntity->nombre, 'route' => route_to("viewProduccionMaquinistaTareaView", $otTareaEntity->id), 'active' => true]
];
return view(static::$viewPath . '/maquinista/viewMaquinistaMaquinaTarea', $this->viewData);
}
public function maquinista_maquina_ot_tareas_view(int $maquina_id)
{
$maquinaEntity = $this->maquinaModel->find($maquina_id);
$this->viewData['maquinaEntity'] = $maquinaEntity;
$tareasRunning = $this->maquinaOtTareaModel->queryDatatableJoinOrdenTrabajo($maquina_id)->countAllResults();
if ($tareasRunning) {
return view(static::$viewPath . '/maquinista/viewProduccionMaquinistaOtTareasView', $this->viewData);
} else {
return view(static::$viewPath . '/maquinista/viewMaquinistaMaquinaTareas', $this->viewData);
}
}
public function maquinista_colas_view()
{
return view(static::$viewPath . '/maquinista/viewMaquinistaPlanningList', $this->viewData);
@ -722,14 +740,14 @@ class Ordentrabajo extends BaseController
return $this->response->setJSON(["message" => lang("App.global_alert_fetch_success"), "data" => $data]);
} else {
$tareasWithMaquina = $this->produccionService->init($orden_trabajo_id)->getTareasWithMaquina($maquina_id, ['F']);
if($tareasWithMaquina){
if ($tareasWithMaquina) {
return $this->response->setJSON(["message" => lang("Produccion.errors.tareas_finalizadas"), "data" => $tareasWithMaquina])->setStatusCode(400);
}else{
} else {
return $this->response->setJSON(["message" => lang("Produccion.errors.maquina_not_in_ot"), "data" => null])->setStatusCode(400);
}
}
}
public function update_orden_trabajo_fa_tareas()
{
$bodyData = $this->request->getPost();
@ -757,4 +775,120 @@ class Ordentrabajo extends BaseController
return $this->response->setJSON(["errors" => $this->validation->getErrors()])->setStatusCode(400);
}
}
public function store_maquina_ordenes_trabajo()
{
$bodyData = $this->request->getPost();
$validated = $this->validation->run($bodyData, "maquina_ordenes_trabajo");
if ($validated) {
$validatedData = $this->validation->getValidated();
foreach ($validatedData['ordenes_trabajo'] as $key => $orden_trabajo_id) {
$maquinaOtTarea = $this->maquinaOtTareaModel->where('orden_trabajo_id', $orden_trabajo_id)->where('maquina_id', $validatedData['maquina_id'])->where('deleted_at',null)->countAllResults();
if ($maquinaOtTarea) {
continue;
}
$this->maquinaOtTareaModel->insert(['maquina_id' => $validatedData['maquina_id'], 'orden_trabajo_id' => $orden_trabajo_id]);
}
return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => true, "data" => $validatedData]);
} else {
return $this->response->setJSON(["errors" => $this->validation->getErrors()])->setStatusCode(400);
}
}
public function update_maquina_ordenes_trabajo_estado()
{
$bodyData = $this->request->getPost();
$maquina_id = $bodyData['maquina_id'];
$estado = $bodyData['estado'];
$maquina_ots = $this->maquinaOtTareaModel->where('maquina_id', $maquina_id)->findAll();
$totalTareas = [];
foreach ($maquina_ots as $key => $maquina_ot) {
$tareas = $this->produccionService->init($maquina_ot->orden_trabajo_id)
->getTareasWithMaquina($maquina_id, ['P', 'I', 'S', 'D']);
foreach ($tareas as $key => $tarea) {
$this->produccionService->storeOrdenTrabajoTareaProgressDate(
[
'estado' => $estado,
'ot_tarea_id' => $tarea->id
]
);
$tarea->click_init = $bodyData['click_init'];
$tarea->click_end = $bodyData['click_end'];
$totalTareas[] = $tarea;
}
}
foreach ($totalTareas as $key => $tarea) {
$tiempo_trabajado = $tarea->tiempo_trabajado();
$tarea->tiempo_real = $tiempo_trabajado / count($totalTareas);
$tarea->click_init = $tarea->click_init / count($totalTareas);
$tarea->click_end = $tarea->click_end / count($totalTareas);
$this->otTarea->save($tarea);
}
if ($estado == "F") {
$this->maquinaOtTareaModel->where('maquina_id', $maquina_id)->delete();
}
return $this->response->setJSON(["message" => lang("Produccion.responses.update_maquina_ordenes_trabajo_estado")]);
}
public function delete_maquina_orden_trabajo_tarea($maquina_orden_trabajo_tarea_id)
{
$status = $this->maquinaOtTareaModel->delete($maquina_orden_trabajo_tarea_id);
return $this->response->setJSON(["message" => lang("App.user_alert_delete"), "status" => $status]);
}
public function delete_maquina_orden_trabajo_all($maquina_id)
{
$maquina_ots = $this->maquinaOtTareaModel->where('maquina_id', $maquina_id)->findAll();
foreach ($maquina_ots as $key => $maquina_ot) {
$tareas = $this->produccionService->init($maquina_ot->orden_trabajo_id)
->getTareasWithMaquina($maquina_id, ['P', 'I', 'S', 'D']);
foreach ($tareas as $key => $tarea) {
$this->produccionService->deleteOrdenTrabajoTareaProgressDates($tarea->id);
}
}
$status = $this->maquinaOtTareaModel->where('maquina_id',$maquina_id)->delete();
return $this->response->setJSON(["message" => lang("App.user_alert_delete"), "status" => $status]);
}
public function datatable_maquina_ordenes_trabajo($maquina_id)
{
$query = $this->maquinaOtTareaModel->queryDatatableJoinOrdenTrabajo($maquina_id);
return DataTable::of($query)
->add('action', fn($q) => $q->otId)
->add('titulo', fn($q) => $this->otModel->find($q->otId)->presupuesto()->titulo)
->add('barcode', fn($q) => $this->otModel->find($q->otId)->getBarCode())
->toJson(true);
}
public function get_maquina_ots($maquina_id)
{
$responseData = [
"tiempo_total_estimado" => 0,
"tiempo_total_real" => 0,
"clicks_total" => 0,
"tirada_total" => 0,
"estado" => "P",
];
$maquina_ots = $this->maquinaOtTareaModel->where('maquina_id', $maquina_id)->findAll();
foreach ($maquina_ots as $key => $maquina_ot) {
$tareas = $this->produccionService->init($maquina_ot->orden_trabajo_id)
->getTareasWithMaquina($maquina_id, ['P', 'I', 'S', 'D']);
foreach ($tareas as $key => $tarea) {
$responseData['tiempo_total_estimado']+= $tarea->tiempo_estimado;
$responseData['tiempo_total_real']+= $tarea->tiempo_real;
$responseData["estado"] = $tarea->lastState()->estado;
if($tarea->presupuesto_linea_id){
$responseData["clicks_total"] += $tarea->presupuesto_linea()->rotativa_clicks_total;
$responseData["tirada_total"] += $tarea->orden_trabajo()->presupuesto()->tirada;
}
}
}
$responseData['tiempo_total_estimado'] = float_seconds_to_hhmmss_string($responseData['tiempo_total_estimado']);
$responseData['tiempo_total_real'] = float_seconds_to_hhmmss_string($responseData['tiempo_total_real']);
return $this->response->setJSON($responseData);
}
}