diff --git a/ci4/app/Config/OrdenTrabajo.php b/ci4/app/Config/OrdenTrabajo.php index 35f58438..72233900 100755 --- a/ci4/app/Config/OrdenTrabajo.php +++ b/ci4/app/Config/OrdenTrabajo.php @@ -116,6 +116,8 @@ class OrdenTrabajo extends BaseConfig "default" => ["bg" => "white", "color" => "black"], ]; + + public function __construct() { parent::__construct(); diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index d94ce4c8..ca0cd92a 100755 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -744,18 +744,24 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func $routes->get('datatable_ferro_pendiente', 'Ordentrabajo::datatable_ferro_pendiente'); $routes->get('datatable_ferro_ok', 'Ordentrabajo::datatable_ferro_ok'); $routes->get('tareas/datatable/(:num)', 'Ordentrabajo::tareas_datatable/$1', ['as' => 'datatableTareasOrdenTrabajo']); + $routes->get("tarea/progress/(:num)","Ordentrabajo::get_orden_trabajo_progress_date/$1"); + /**====================== * UPDATES *========================**/ $routes->post("update/tarea", 'Ordentrabajo::update_orden_trabajo_tarea'); $routes->post("update/date", 'Ordentrabajo::update_orden_trabajo_date'); + $routes->post("reset/date", 'Ordentrabajo::reset_orden_trabajo_date'); $routes->post("update/pedido/date", 'Ordentrabajo::update_orden_trabajo_pedido_date'); + $routes->post("reset/pedido/date", 'Ordentrabajo::reset_orden_trabajo_pedido_date'); $routes->post("update/pedido", 'Ordentrabajo::update_orden_trabajo_pedido'); $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'); $routes->get("color/(:num)", 'Ordentrabajo::get_orden_trabajo_color_status/$1'); + $routes->post("update/tarea/progress","Ordentrabajo::store_orden_trabajo_progress_date"); + $routes->delete("tarea/progress/(:num)","Ordentrabajo::delete_orden_trabajo_progress_date/$1"); /**====================== * FILES @@ -784,6 +790,10 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func $routes->group('maquinista', ['namespace' => 'App\Controllers\Produccion'], function ($routes) { $routes->get('maquinas/view', 'Ordentrabajo::maquinista_maquinas_view', ['as' => 'viewProduccionMaquinistaMaquinas']); + $routes->get('maquinas/view/(:num)', 'Ordentrabajo::maquinista_maquina_tareas_list/$1', ['as' => 'viewProduccionMaquinaTareasList']); + $routes->get('maquinas/tareas/datatable/(:alpha)/(:num)', 'Ordentrabajo::maquinista_maquina_tareas_datatable/$1/$2', ['as' => 'viewMaquinistaMaquinaTareaDatatable']); + + $routes->get('maquinas/view/tarea/(:num)', 'Ordentrabajo::maquinista_maquina_tarea_view/$1', ['as' => 'viewProduccionMaquinistaTareaView']); $routes->get('colas/view', 'Ordentrabajo::maquinista_colas_view', ['as' => 'viewProduccionMaquinistaColas']); }); }); diff --git a/ci4/app/Config/Validation.php b/ci4/app/Config/Validation.php index 982ce5c9..09717371 100755 --- a/ci4/app/Config/Validation.php +++ b/ci4/app/Config/Validation.php @@ -155,6 +155,17 @@ class Validation extends BaseConfig ], ]; + public array $orden_trabajo_tarea_progress_date = [ + + "ot_tarea_id" => [ + "rules" => "required|integer", + "label" => "tarea" + ], + "estado" => [ + "rules" => "required|in_list[P,I,S,D,F,E]", + "label" => "estado" + ] + ]; public array $orden_trabajo = [ "orden_trabajo_id" => [ "rules" => "required|integer", diff --git a/ci4/app/Controllers/Produccion/Ordentrabajo.php b/ci4/app/Controllers/Produccion/Ordentrabajo.php index 31ff93fc..bded7f1d 100755 --- a/ci4/app/Controllers/Produccion/Ordentrabajo.php +++ b/ci4/app/Controllers/Produccion/Ordentrabajo.php @@ -3,6 +3,7 @@ namespace App\Controllers\Produccion; use App\Controllers\BaseController; +use App\Models\Configuracion\MaquinaModel; use App\Models\OrdenTrabajo\OrdenTrabajoModel; use App\Models\OrdenTrabajo\OrdenTrabajoTarea; use App\Models\OrdenTrabajo\OrdenTrabajoUser; @@ -27,6 +28,7 @@ class Ordentrabajo extends BaseController protected OrdenTrabajoModel $otModel; protected OrdenTrabajoUser $otUserModel; protected OrdenTrabajoTarea $otTarea; + protected MaquinaModel $maquinaModel; protected UserModel $userModel; protected Validation $validation; protected static $viewPath = 'themes/vuexy/form/produccion/'; @@ -42,6 +44,7 @@ class Ordentrabajo extends BaseController $this->userModel = model(UserModel::class); $this->produccionService = new ProductionService(); $this->otTarea = model(OrdenTrabajoTarea::class); + $this->maquinaModel = model(MaquinaModel::class); $this->validation = service("validation"); helper("time"); parent::initController($request, $response, $logger); @@ -118,6 +121,19 @@ class Ordentrabajo extends BaseController return $this->response->setJSON(["errors" => $this->validation->getErrors()])->setStatusCode(400); } } + public function reset_orden_trabajo_date() + { + $bodyData = $this->request->getPost(); + // return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "data" => $bodyData]); + $validated = $this->validation->run($bodyData, "orden_trabajo_date"); + if ($validated) { + $validatedData = $bodyData; + $r = $this->produccionService->emptyOrdenTrabajoDate($validatedData['orden_trabajo_id'],$validatedData['name']); + return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => $r, "user" => auth()->user(), "data" => $bodyData]); + } else { + return $this->response->setJSON(["errors" => $this->validation->getErrors()])->setStatusCode(400); + } + } public function update_orden_trabajo_pedido_date() { try { @@ -128,6 +144,18 @@ class Ordentrabajo extends BaseController return $this->response->setJSON(["errors" => $th->getMessage(), "status" => false])->setStatusCode(500); } } + public function reset_orden_trabajo_pedido_date() + { + $bodyData = $this->request->getPost(); + $validated = $this->validation->run($bodyData, "orden_trabajo_date"); + if ($validated) { + $validatedData = $bodyData; + $r = $this->produccionService->init($bodyData['orden_trabajo_id'])->emptyOrdenTrabajoPedidoDate($validatedData['name']); + return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => $r, "user" => auth()->user(), "data" => $bodyData]); + } else { + return $this->response->setJSON(["errors" => $this->validation->getErrors()])->setStatusCode(400); + } + } public function update_orden_trabajo_pedido() { try { @@ -170,7 +198,7 @@ class Ordentrabajo extends BaseController $q = $this->otModel->getDatatableQuery()->where("ordenes_trabajo.estado", "F"); // return $this->response->setJSON($q->get()->getResultArray()); return DataTable::of($q) - ->add("logo", fn($q) => ["logo" => site_url($logo->get_logo_path($q->presupuesto_linea_tipo)), "imposicion" => $q->imposicion_name,"color" => $this->produccionService->init($q->id)->getOtColorStatus()]) + ->add("logo", fn($q) => ["logo" => site_url($logo->get_logo_path($q->presupuesto_linea_tipo)), "imposicion" => $q->imposicion_name, "color" => $this->produccionService->init($q->id)->getOtColorStatus()]) ->edit( "fecha_encuadernado_at", fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d H:i:s", $q->fecha_encuadernado_at)->format("d/m/Y") : "" @@ -185,7 +213,7 @@ class Ordentrabajo extends BaseController $q = $this->otModel->getDatatableQuery()->whereIn("ordenes_trabajo.estado", ["I", "PM"]); // return $this->response->setJSON($q->get()->getResultArray()); return DataTable::of($q) - ->add("logo", fn($q) => ["logo" => site_url($logo->get_logo_path($q->presupuesto_linea_tipo)), "imposicion" => $q->imposicion_name,"color" => $this->produccionService->init($q->id)->getOtColorStatus()]) + ->add("logo", fn($q) => ["logo" => site_url($logo->get_logo_path($q->presupuesto_linea_tipo)), "imposicion" => $q->imposicion_name, "color" => $this->produccionService->init($q->id)->getOtColorStatus()]) ->edit( "fecha_encuadernado_at", fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d H:i:s", $q->fecha_encuadernado_at)->format("d/m/Y") : "" @@ -200,7 +228,7 @@ class Ordentrabajo extends BaseController $q = $this->otModel->getDatatableQuery()->where("ferro_ok_at", null); // return $this->response->setJSON($q->get()->getResultArray()); return DataTable::of($q) - ->add("logo", fn($q) => ["logo" => site_url($logo->get_logo_path($q->presupuesto_linea_tipo)), "imposicion" => $q->imposicion_name,"color" => $this->produccionService->init($q->id)->getOtColorStatus()]) + ->add("logo", fn($q) => ["logo" => site_url($logo->get_logo_path($q->presupuesto_linea_tipo)), "imposicion" => $q->imposicion_name, "color" => $this->produccionService->init($q->id)->getOtColorStatus()]) ->edit( "fecha_encuadernado_at", fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d H:i:s", $q->fecha_encuadernado_at)->format("d/m/Y") : "" @@ -215,7 +243,7 @@ class Ordentrabajo extends BaseController $q = $this->otModel->getDatatableQuery()->where("ferro_ok_at is NOT NULL", NULL, FALSE); // return $this->response->setJSON($q->get()->getResultArray()); return DataTable::of($q) - ->add("logo", fn($q) => ["logo" => site_url($logo->get_logo_path($q->presupuesto_linea_tipo)), "imposicion" => $q->imposicion_name,"color" => $this->produccionService->init($q->id)->getOtColorStatus()]) + ->add("logo", fn($q) => ["logo" => site_url($logo->get_logo_path($q->presupuesto_linea_tipo)), "imposicion" => $q->imposicion_name, "color" => $this->produccionService->init($q->id)->getOtColorStatus()]) ->edit( "fecha_encuadernado_at", fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d H:i:s", $q->fecha_encuadernado_at)->format("d/m/Y") : "" @@ -354,7 +382,7 @@ class Ordentrabajo extends BaseController ->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) => ["data" => $q ]) + ->add("action", fn($q) => ["data" => $q]) ->toJson(true); } public function select_maquina_planning_rot() @@ -448,11 +476,96 @@ class Ordentrabajo extends BaseController helper('file'); $barcode = $this->produccionService->init($orden_trabajo_id)->getFileBarCode(); return $this->response - ->setHeader('Content-Type', 'image/png') - ->setHeader('Content-Disposition', "attachment; filename=CodigoBarrasOT_{$orden_trabajo_id}.png") - ->setBody($barcode); + ->setHeader('Content-Type', 'image/png') + ->setHeader('Content-Disposition', "attachment; filename=CodigoBarrasOT_{$orden_trabajo_id}.png") + ->setBody($barcode); } - public function maquinista_maquinas_view(){} - public function maquinista_colas_view(){} + public function maquinista_maquinas_view() + { + // Breadcrumbs + $this->viewData['breadcrumb'] = [ + ['title' => lang("Produccion.maquinista.maquinas"), 'route' => route_to("viewProduccionMaquinistaMaquinas"), 'active' => true], + ]; + $data = [ + "impresion" => $this->maquinaModel->queryViewMaquinistaMaquinas('impresion')->get()->getResultArray(), + "manipulado" => $this->maquinaModel->queryViewMaquinistaMaquinas('manipulado')->get()->getResultArray(), + "acabado" => $this->maquinaModel->queryViewMaquinistaMaquinas('acabado')->get()->getResultArray(), + ]; + $this->viewData["maquinas"] = $data; + return view(static::$viewPath . '/maquinista/viewMaquinistaMaquinaList', $this->viewData); + } + public function maquinista_maquina_tareas_list(int $maquina_id) + { + $maquina = $this->maquinaModel->find($maquina_id); + $this->viewData['breadcrumb'] = [ + ['title' => lang("Produccion.maquinista.maquinas"), 'route' => route_to("viewProduccionMaquinistaMaquinas"), 'active' => false], + ['title' => $maquina->nombre, 'route' => route_to("viewProduccionMaquinistaMaquina", $maquina_id), 'active' => true], + ]; + $this->viewData["maquinaEntity"] = $maquina; + return view(static::$viewPath . '/maquinista/viewMaquinistaMaquinaTareas', $this->viewData); + } + public function maquinista_maquina_tarea_view(int $orden_trabajo_tarea_id) + { + $otTareaEntity = $this->otTarea->find($orden_trabajo_tarea_id); + $this->viewData['ot_tarea'] = $otTareaEntity; + $this->viewData['ot'] = $otTareaEntity->orden_trabajo(); + $this->viewData['presupuesto'] = $this->viewData['ot']->presupuesto(); + $this->viewData['breadcrumb'] = [ + ['title' => lang("Produccion.maquinista.maquinas"), 'route' => route_to("viewProduccionMaquinistaMaquinas"), 'active' => false], + ['title' => $otTareaEntity->maquina_actual()->nombre, 'route' => route_to("viewProduccionMaquinaTareasList", $otTareaEntity?->maquina_actual()?->id), 'active' => true], + ['title' => $otTareaEntity->nombre, 'route' => route_to("viewProduccionMaquinistaTareaView", $otTareaEntity->id), 'active' => true] + + ]; + + return view(static::$viewPath . '/maquinista/viewMaquinistaMaquinaTarea', $this->viewData); + } + public function maquinista_colas_view() + { + return view(static::$viewPath . '/maquinista/viewMaquinistaPlanningList', $this->viewData); + } + public function maquinista_maquina_tareas_datatable(string $content , int $maquina_id) + { + $pm = $this->produccionService->getMaquinaImpresionTareasList($maquina_id); + if($content == 'today'){ + $pm->like('pedidos.fecha_impresion', Time::now()->format('Y-m-d')); + } + return DataTable::of($pm) + ->edit('fecha_impresion', fn($q) => $q->fecha_impresion ? Time::createFromFormat('Y-m-d H:i:s', $q->fecha_impresion)->format('d/m/Y') : '') + ->add('action', fn($q) => $this->produccionService->buttonActionDatatableTareaList($q->ot_tarea_id)) + ->toJson(true); + } + + + public function store_orden_trabajo_progress_date() + { + try { + $bodyData = $this->request->getPost(); + $validated = $this->validation->run($bodyData, "orden_trabajo_tarea_progress_date"); + // return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "data" => $this->validation->getValidated(),"errors" => $this->validation->getErrors()]); + if ($validated) { + $r = $this->produccionService->storeOrdenTrabajoTareaProgressDate($this->validation->getValidated()); + return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => $r, "data" => $bodyData]); + } else { + return $this->response->setJSON(["errors" => $this->validation->getErrors()])->setStatusCode(400); + } + } catch (\Throwable $th) { + return $this->response->setJSON(["status" => false, "error" => $th->getMessage()])->setStatusCode(500); + } + } + public function delete_orden_trabajo_progress_date(int $orden_trabajo_tarea_id) + { + + $status = $this->produccionService->deleteOrdenTrabajoTareaProgressDates($orden_trabajo_tarea_id); + return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => $status]); + } + public function get_orden_trabajo_progress_date(int $orden_trabajo_tarea_id) + { + $otTareaEntity = $this->otTarea->find($orden_trabajo_tarea_id); + $data = [ + "tiempo_trabajado" => float_seconds_to_hhmm_string($otTareaEntity->tiempo_trabajado()), + "progress_dates" => $otTareaEntity->progress_dates(), + ]; + return $this->response->setJSON($data); + } } diff --git a/ci4/app/Database/Migrations/2025-04-22-100000_AddTableOrdenTrabajoTareaProgressDates.php b/ci4/app/Database/Migrations/2025-04-22-100000_AddTableOrdenTrabajoTareaProgressDates.php new file mode 100644 index 00000000..8542ce00 --- /dev/null +++ b/ci4/app/Database/Migrations/2025-04-22-100000_AddTableOrdenTrabajoTareaProgressDates.php @@ -0,0 +1,82 @@ + [ + "type" => "INT", + "unsigned" => true, + "auto_increment" => true, + ], + "ot_tarea_id" => [ + "type" => "INT", + "unsigned" => true, + ], + "action_at" => [ + "type" => "DATETIME", + "comment" => "Datetime task init" + ], + "action_user_id" => [ + "type" => "INT", + "unsigned" => true, + "constraint" => 11, + "null" => true, + ], + "estado" => [ + "type" => "ENUM", + "constraint" => ["P", "I", "S", "D", "F", "E"], + "default" => "P", + "comment" => "(P)ENDING,(I)NIT,(S)TOPPED,(D)ELAY,(F)INISHED,(E)RROR" + ] + ]; + public function up() + { + $this->forge->addField($this->COLUMNS); + $currenttime = new RawSql('CURRENT_TIMESTAMP'); + $this->forge->addField([ + 'created_at' => [ + 'type' => 'TIMESTAMP', + 'default' => $currenttime, + ], + 'updated_at' => [ + 'type' => 'TIMESTAMP', + 'null' => true, + ], + 'deleted_at' => [ + 'type' => 'TIMESTAMP', + 'null' => true, + + ], + ]); + $this->forge->addPrimaryKey('id'); + $this->forge->addForeignKey('ot_tarea_id', 'orden_trabajo_tareas', 'id'); + $this->forge->createTable("orden_trabajo_tarea_progress_dates"); + + $m = model(OrdenTrabajoTarea::class); + $tareas = $m->findAll(); + try { + foreach ($tareas as $key => $tarea) { + $this->db->table('orden_trabajo_tarea_progress_dates')->insert([ + "ot_tarea_id" => $tarea->id, + "action_at" => $tarea->created_at->format('Y-m-d H:i:s'), + "action_user_id" => $tarea?->orden_trabajo()?->user_created_id ?? null, + ]); + } + } catch (\Throwable $th) { + echo $th->getMessage(); + } + } + + public function down() + { + $this->forge->dropTable("orden_trabajo_tarea_progress_dates"); + } +} diff --git a/ci4/app/Database/Migrations/2025-04-24-175400_AddClickColumnOrdenTrabajoTarea.php b/ci4/app/Database/Migrations/2025-04-24-175400_AddClickColumnOrdenTrabajoTarea.php new file mode 100644 index 00000000..a80e7131 --- /dev/null +++ b/ci4/app/Database/Migrations/2025-04-24-175400_AddClickColumnOrdenTrabajoTarea.php @@ -0,0 +1,36 @@ + [ + "type" => "INT", + "unsigned" => true, + "default" => 0, + "comment" => "Click iniciales de una tarea de impresion" + ], + "click_end" => [ + "type" => "INT", + "unsigned" => true, + "default" => 0, + "comment" => "Click finales de una tarea de impresion" + ], + ]; + public function up() + { + $this->forge->addColumn('orden_trabajo_tareas', $this->COLUMNS); + } + + public function down() + { + $this->forge->dropColumn('orden_trabajo_tareas', array_keys($this->COLUMNS)); + } +} diff --git a/ci4/app/Entities/Produccion/OrdenTrabajoEntity.php b/ci4/app/Entities/Produccion/OrdenTrabajoEntity.php index 55bcfc5b..5bc39032 100755 --- a/ci4/app/Entities/Produccion/OrdenTrabajoEntity.php +++ b/ci4/app/Entities/Produccion/OrdenTrabajoEntity.php @@ -3,6 +3,7 @@ namespace App\Entities\Produccion; use App\Entities\Pedidos\PedidoEntity; +use App\Entities\Presupuestos\PresupuestoEntity; use App\Entities\Usuarios\UserEntity; use App\Models\OrdenTrabajo\OrdenTrabajoDate; use App\Models\OrdenTrabajo\OrdenTrabajoFileModel; @@ -78,6 +79,15 @@ class OrdenTrabajoEntity extends Entity { $m = model(OrdenTrabajoTarea::class); return $m->where("orden_trabajo_id", $this->attributes["id"])->where("presupuesto_linea_id IS NOT NULL", NULL, FALSE)->findAll() ?? []; + } + /** + * Devuelve el presupuesto de la orden de trabajo + * + * @return PresupuestoEntity + */ + public function presupuesto(): ?PresupuestoEntity + { + return $this->pedido()->presupuesto(); } /** * Devuelve el pedido de la orden de trabajo diff --git a/ci4/app/Entities/Produccion/OrdenTrabajoTareaEntity.php b/ci4/app/Entities/Produccion/OrdenTrabajoTareaEntity.php index 883f76ad..b98f7640 100755 --- a/ci4/app/Entities/Produccion/OrdenTrabajoTareaEntity.php +++ b/ci4/app/Entities/Produccion/OrdenTrabajoTareaEntity.php @@ -10,10 +10,12 @@ use App\Entities\Presupuestos\PresupuestoManipuladosEntity; use App\Models\Configuracion\ImposicionModel; use App\Models\Configuracion\MaquinaModel; use App\Models\OrdenTrabajo\OrdenTrabajoModel; +use App\Models\OrdenTrabajo\OrdenTrabajoTareaProgressDate; use App\Models\Presupuestos\PresupuestoAcabadosModel; use App\Models\Presupuestos\PresupuestoLineaModel; use App\Models\Presupuestos\PresupuestoManipuladosModel; use CodeIgniter\Entity\Entity; +use CodeIgniter\I18n\Time; class OrdenTrabajoTareaEntity extends Entity { @@ -30,6 +32,8 @@ class OrdenTrabajoTareaEntity extends Entity "is_corte" => null, "tipo_corte" => null, "comment" => null, + "click_init" => null, + "click_end" => null, ]; protected $datamap = []; protected $dates = ['created_at', 'updated_at', 'deleted_at']; @@ -45,7 +49,9 @@ class OrdenTrabajoTareaEntity extends Entity "tiempo_real" => "?float", "is_corte" => "boolean", "tipo_corte" => "string", - "comment" => "?string" + "comment" => "?string", + "click_init" => "integer", + "click_end" => "integer", ]; /** @@ -53,7 +59,7 @@ class OrdenTrabajoTareaEntity extends Entity * * @return OrdenTrabajoEntity */ - public function orden_trabajo() : OrdenTrabajoEntity + public function orden_trabajo(): OrdenTrabajoEntity { $m = model(OrdenTrabajoModel::class); return $m->find($this->attributes["orden_trabajo_id"]); @@ -63,7 +69,7 @@ class OrdenTrabajoTareaEntity extends Entity * * @return self */ - public function withOrdenTrabajo() : self + public function withOrdenTrabajo(): self { $this->attributes["orden_trabajo"] = $this->orden_trabajo(); return $this; @@ -73,7 +79,7 @@ class OrdenTrabajoTareaEntity extends Entity * * @return Maquina */ - public function maquina_actual() : Maquina + public function maquina_actual(): Maquina { $m = model(MaquinaModel::class); return $m->find($this->attributes["maquina_id"]); @@ -83,7 +89,7 @@ class OrdenTrabajoTareaEntity extends Entity * * @return PresupuestoLineaEntity */ - public function presupuesto_linea() : PresupuestoLineaEntity + public function presupuesto_linea(): PresupuestoLineaEntity { $m = model(PresupuestoLineaModel::class); return $m->find($this->attributes["presupuesto_linea_id"]); @@ -93,28 +99,58 @@ class OrdenTrabajoTareaEntity extends Entity * * @return Maquina */ - public function maquina_presupuesto_linea() : Maquina + public function maquina_presupuesto_linea(): Maquina { return $this->presupuesto_linea()->maquina(); } - /** + /** * Devuelve el presupuesto acabado origen de esta tarea * * @return PresupuestoAcabadosEntity */ - public function presupuesto_acabado() : PresupuestoAcabadosEntity + public function presupuesto_acabado(): PresupuestoAcabadosEntity { $m = model(PresupuestoAcabadosModel::class); return $m->find($this->attributes["presupuesto_linea_id"]); } - public function imposicion() : ?Imposicion + public function imposicion(): ?Imposicion { $m = model(ImposicionModel::class); $imposicion = null; - if($this->attributes["imposicion_id"]){ + if ($this->attributes["imposicion_id"]) { $imposicion = $m->find($this->attributes["imposicion_id"]); } return $imposicion; } + public function progress_dates(): array + { + $m = model(OrdenTrabajoTareaProgressDate::class); + return $m->where('ot_tarea_id', $this->attributes["id"])->findAll() ?? []; + } + public function tiempo_trabajado() + { + $dates = $this->progress_dates(); + $intervals = []; + $init = []; + $end = []; + foreach ($dates as $key => $date) { + if ($date->estado == "I") { + if ($date->action_at) { + $init = Time::createFromFormat('Y-m-d H:i:s', $date->action_at); + } + } + if ($date->estado == "S" || $date->estado == "F") { + if ($date->action_at) { + $end = Time::createFromFormat('Y-m-d H:i:s', $date->action_at); + $intervals[] = $init->difference($end)->getSeconds(); + } + } + } + return array_sum($intervals); + } + public function getClickTarea(): int + { + return $this->attributes['click_end'] - $this->attributes['click_init']; + } } diff --git a/ci4/app/Entities/Produccion/OrdenTrabajoTareaProgressDateEntity.php b/ci4/app/Entities/Produccion/OrdenTrabajoTareaProgressDateEntity.php new file mode 100755 index 00000000..9523c8c3 --- /dev/null +++ b/ci4/app/Entities/Produccion/OrdenTrabajoTareaProgressDateEntity.php @@ -0,0 +1,31 @@ + null, + "action_at" => null, + "action_user_id" => null, + "estado" => null + ]; + protected $datamap = []; + protected $dates = ['created_at', 'updated_at', 'deleted_at','action_at']; + protected $casts = [ ]; + + /** + * Orden de trabajo de la tarea + * + * @return OrdenTrabajoEntity + */ + public function orden_trabajo_tarea() : OrdenTrabajoTareaEntity + { + $m = model(OrdenTrabajoTarea::class); + return $m->find($this->attributes["ot_tarea_id"]); + } + +} diff --git a/ci4/app/Language/es/Produccion.php b/ci4/app/Language/es/Produccion.php index cd8b95d3..002e918c 100755 --- a/ci4/app/Language/es/Produccion.php +++ b/ci4/app/Language/es/Produccion.php @@ -4,6 +4,7 @@ return [ "datatable" => [ "pedido_id"=> "Pedido ID", "fecha_encuadernacion"=> "Fecha encuadernación", + "fecha_impresion"=> "Fecha impresión", "cliente"=> "Cliente", "titulo"=> "Título", "ubicacion"=> "Ubicación", @@ -28,13 +29,15 @@ return [ "metros" => "Metros", "corte" => "Corte", "pliegos" => "Pliegos", - "pliegos_libro" => "Pliegos" + "pliegos_libro" => "Pliegos", + "fecha" => "fecha" ], "task" => [ "order" => "Orden", "task" => "Tarea", + "estado" => "Estado", "note" => "Nota", "maquina_presupuesto" => "Máquina presupuesto", "maquina_actual" => "Máquina actual", @@ -121,8 +124,24 @@ return [ "progress_preimpresion" => "Preimpresión", "progress_logistica" => "Ferro/Logística", "progress_impresion" => "Impresión", - "progress_manipulado" => "Manipulado/Acabado" + "progress_manipulado" => "Manipulado/Acabado", + "maquinista" => [ + "maquinas" => "Máquinas", + "tareas_hoy" => "Tareas para HOY", + "tareas_all" => "Todas", + "play_tarea" => "Continuar", + "play_pause" => "Pausar", + "play_stop" => "Aplazar", + "play_end" => "Finalizar", + "cancel" => "Cancelar", + + ], + 'duplicate_estado_tarea_progress' => "Último estado de la tarea repetido", + 'task_already_finished' => "La tarea se ha marcado como finalizada.", + 'print_label' => "Imprimir etiqueta", + 'click_init' => "Clicks al inicio", + 'click_end' => "Clicks al final", ]; \ No newline at end of file diff --git a/ci4/app/Models/Configuracion/MaquinaModel.php b/ci4/app/Models/Configuracion/MaquinaModel.php index 159d5e02..ff8f3dcd 100755 --- a/ci4/app/Models/Configuracion/MaquinaModel.php +++ b/ci4/app/Models/Configuracion/MaquinaModel.php @@ -20,7 +20,8 @@ class MaquinaModel extends \App\Models\BaseModel 3 => "t1.ancho_impresion", 4 => "t1.alto_impresion", 5 => "t1.min", - 6 => "t1.max", ]; + 6 => "t1.max", + ]; protected $allowedFields = [ "nombre", @@ -249,7 +250,7 @@ class MaquinaModel extends \App\Models\BaseModel return $result; } - public function getIdMaquinasForPapelImpresion($papel_impresion_id, $rotativa , $inkjet) + public function getIdMaquinasForPapelImpresion($papel_impresion_id, $rotativa, $inkjet) { $builder = $this->db ->table($this->table . " t1") @@ -262,7 +263,8 @@ class MaquinaModel extends \App\Models\BaseModel return $builder; } - public function getVelocidad($maquina_id){ + public function getVelocidad($maquina_id) + { $builder = $this->db ->table($this->table . " t1") ->select( @@ -272,9 +274,9 @@ class MaquinaModel extends \App\Models\BaseModel $resultObject = $builder->get()->getResultObject(); - if(count($resultObject)>0) + if (count($resultObject) > 0) return $resultObject[0]->velocidad; - else{ + else { return -1; } } @@ -318,7 +320,7 @@ class MaquinaModel extends \App\Models\BaseModel } } - public function getMaquinaImpresionForPresupuesto($is_rotativa, $tarifa_tipo, $uso_tarifa , $tirada, $papel_impresion_id = -1) + public function getMaquinaImpresionForPresupuesto($is_rotativa, $tarifa_tipo, $uso_tarifa, $tirada, $papel_impresion_id = -1) { /* 1.-> tarifa_Tipo impresion @@ -338,10 +340,10 @@ class MaquinaModel extends \App\Models\BaseModel t1.forzar_num_formas_horizontales_cubierta AS forzar_num_formas_horizontales_cubierta, t1.forzar_num_formas_verticales_cubierta AS forzar_num_formas_verticales_cubierta" ) - ->join("lg_maquinas_tarifas_impresion t2", "t1.id = t2.maquina_id", "left") + ->join("lg_maquinas_tarifas_impresion t2", "t1.id = t2.maquina_id", "left") ->join("lg_maquina_papel_impresion t3", "t1.id = t3.maquina_id", "left") - - + + ->where("t1.is_deleted", 0) ->where("t1.tipo", "impresion") ->where("t1.is_rotativa", $is_rotativa) @@ -351,28 +353,28 @@ class MaquinaModel extends \App\Models\BaseModel ->where("t1.min <=", $tirada) ->where("t1.max >=", $tirada); - if(is_array($tarifa_tipo)){ - foreach($tarifa_tipo as $tarifa){ - $builder->where("EXISTS (SELECT * FROM lg_maquinas_tarifas_impresion t2 WHERE t1.id=t2.maquina_id AND t2.tipo='{$tarifa}' AND t2.uso='{$uso_tarifa}' AND t2.is_deleted=0)"); - } - } - else{ - $builder->where("t2.tipo", $tarifa_tipo); - $builder->where("t2.uso", $uso_tarifa); + if (is_array($tarifa_tipo)) { + foreach ($tarifa_tipo as $tarifa) { + $builder->where("EXISTS (SELECT * FROM lg_maquinas_tarifas_impresion t2 WHERE t1.id=t2.maquina_id AND t2.tipo='{$tarifa}' AND t2.uso='{$uso_tarifa}' AND t2.is_deleted=0)"); } + } else { + $builder->where("t2.tipo", $tarifa_tipo); + $builder->where("t2.uso", $uso_tarifa); + } return $builder; - } - public function getNombre($id){ + public function getNombre($id) + { $builder = $this->db ->table($this->table . " t1") ->select( - "t1.nombre AS text"); - + "t1.nombre AS text" + ); + $builder->where("t1.id", $id); - + return $builder->orderBy("t1.id", "asc")->get()->getResultObject(); } @@ -383,16 +385,49 @@ class MaquinaModel extends \App\Models\BaseModel * @param string|null $type Tipo de maquina impresion,manipulado,acabado * @return array */ - public function getSelectQuery(?string $q = null, ?string $type = null) : array + public function getSelectQuery(?string $q = null, ?string $type = null): array { - $query = $this->builder()->select(["id","nombre","tipo as description"]) - ->where("deleted_at",null); - if($q){ - $query->like("nombre",$q); + $query = $this->builder()->select(["id", "nombre", "tipo as description"]) + ->where("deleted_at", null); + if ($q) { + $query->like("nombre", $q); } - if($type){ - $query->where("tipo",$type); + if ($type) { + $query->where("tipo", $type); } return $query->get()->getResultArray(); } + + public function queryViewMaquinistaMaquinas($maquina_tipo = "impresion") + { + $query = $this->builder() + ->select([ + 'lg_maquinas.id as maquinaId', + 'lg_maquinas.nombre', + 'COUNT(tarea_progress.ot_tarea_id) as countTareas' + ]) + ->join('orden_trabajo_tareas', 'orden_trabajo_tareas.maquina_id = lg_maquinas.id', 'left') + ->join( + "(SELECT ot_tarea_id, estado,deleted_at + FROM orden_trabajo_tarea_progress_dates + WHERE (ot_tarea_id, created_at) IN ( + SELECT ot_tarea_id, MAX(created_at) + FROM orden_trabajo_tarea_progress_dates + WHERE estado = 'P' + GROUP BY ot_tarea_id + ) + ) as tarea_progress", + 'tarea_progress.ot_tarea_id = orden_trabajo_tareas.id', + 'left' + ) + ->join('ordenes_trabajo', 'ordenes_trabajo.id = orden_trabajo_tareas.orden_trabajo_id', 'left') + ->join('pedidos', 'pedidos.id = ordenes_trabajo.pedido_id', 'left') + ->where('lg_maquinas.tipo', $maquina_tipo) + ->where('lg_maquinas.deleted_at', null) + ->where('tarea_progress.deleted_at', null) + ->groupBy('lg_maquinas.id') + ->orderBy('countTareas','DESC'); + + return $query; + } } diff --git a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoModel.php b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoModel.php index 440b4cad..d7a1f37a 100755 --- a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoModel.php +++ b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoModel.php @@ -103,8 +103,5 @@ class OrdenTrabajoModel extends Model return $q; } - public function updateMaquinas(OrdenTrabajoEntity $ot) - { - } } diff --git a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoTarea.php b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoTarea.php index 1b40b699..0fb495c6 100755 --- a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoTarea.php +++ b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoTarea.php @@ -30,7 +30,9 @@ class OrdenTrabajoTarea extends Model "tiempo_real", "is_corte", "tipo_corte", - "comment" + "comment", + "click_init", + "click_end" ]; protected bool $allowEmptyInserts = false; diff --git a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoTareaProgressDate.php b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoTareaProgressDate.php new file mode 100644 index 00000000..00b09b7a --- /dev/null +++ b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoTareaProgressDate.php @@ -0,0 +1,70 @@ +find($data['data']['ot_tarea_id']); + if($ot_tarea){ + $tiempo_real = $ot_tarea->tiempo_trabajado(); + $m->update($data['data']['ot_tarea_id'],['tiempo_real' => $tiempo_real]); + } + + return $data; + } + +} diff --git a/ci4/app/Services/ProductionService.php b/ci4/app/Services/ProductionService.php index 70e159b3..37f7503e 100755 --- a/ci4/app/Services/ProductionService.php +++ b/ci4/app/Services/ProductionService.php @@ -20,6 +20,7 @@ use App\Entities\Tarifas\Acabados\TarifaAcabadoEntity; use App\Models\Configuracion\ConfigVariableModel; use App\Models\Configuracion\MaquinaModel; use App\Models\OrdenTrabajo\OrdenTrabajoFileModel; +use App\Models\OrdenTrabajo\OrdenTrabajoTareaProgressDate; use App\Models\Pedidos\PedidoModel; use App\Models\Usuarios\UserModel; use CodeIgniter\Database\BaseBuilder; @@ -55,6 +56,7 @@ class ProductionService extends BaseService protected OrdenTrabajoUser $otUser; protected OrdenTrabajoEntity $ot; protected OrdenTrabajoFileModel $otFileModel; + protected OrdenTrabajoTareaProgressDate $otTareaProgressDate; protected PedidoModel $pedidoModel; protected UserModel $userModel; protected ConfigVariableModel $configVariableModel; @@ -172,6 +174,7 @@ class ProductionService extends BaseService $this->userModel = model(UserModel::class); $this->otFileModel = model(OrdenTrabajoFileModel::class); $this->pedidoModel = model(PedidoModel::class); + $this->otTareaProgressDate = model(OrdenTrabajoTareaProgressDate::class); $this->ordenTrabajoConfig = config('OrdenTrabajo'); $this->statusColor = $this->ordenTrabajoConfig->OT_COLORS["sin_imprimir"]; $this->configVariableModel = model(ConfigVariableModel::class); @@ -926,7 +929,38 @@ class ProductionService extends BaseService } return $this->otTarea->update($tarea_id, $data); } - + public function storeOrdenTrabajoTareaProgressDate($data): bool + { + $data["action_at"] = Time::now()->format('Y-m-d H:i:s'); + $data["action_user_id"] = auth()->user()->id; + $lastDate = $this->otTareaProgressDate->where('ot_tarea_id', $data['ot_tarea_id'])->orderBy('action_at', 'DESC')->first(); + if ($lastDate) { + if ($lastDate->estado == $data['estado']) { + throw new Exception(lang('Produccion.duplicate_estado_tarea_progress')); + } + if ($lastDate->estado == 'F') { + throw new Exception(lang('Produccion.task_already_finished')); + } + } + return $this->otTareaProgressDate->insert($data); + } + public function getTareaLastState($tarea_id) + { + $lastDate = $this->otTareaProgressDate->where('ot_tarea_id', $tarea_id)->orderBy('action_at', 'DESC')->first(); + return $lastDate->estado; + } + public function deleteOrdenTrabajoTareaProgressDates($orden_trabajo_tarea_id): bool + { + $response = false; + $data = ['ot_tarea_id' => $orden_trabajo_tarea_id, 'estado' => 'P']; + $data["action_at"] = Time::now()->format('Y-m-d H:i:s'); + $data["action_user_id"] = auth()->user()->id; + $status = $this->otTareaProgressDate->where('ot_tarea_id', $orden_trabajo_tarea_id)->delete(); + if ($status) { + $response = $this->storeOrdenTrabajoTareaProgressDate($data); + } + return $response; + } public function updateOrdenTrabajoDate($data) { $result = []; @@ -948,6 +982,18 @@ class ProductionService extends BaseService $this->updateProgress(); return $result; } + public function emptyOrdenTrabajoDate(int $orden_trabajo_id, string $dateName) + { + $status = $this->otDate->where('orden_trabajo_id', $orden_trabajo_id) + ->set($dateName, null) + ->update(); + if (isset($this->ordenTrabajoConfig->DATE_USER_MAPPING[$dateName])) { + $this->otUser->where('orden_trabajo_id', $orden_trabajo_id) + ->set($this->ordenTrabajoConfig->DATE_USER_MAPPING[$dateName], auth()->user()->id) + ->update(); + } + return $status; + } public function updateOrdenTrabajoPedidoDate($data): array { $status = false; @@ -970,6 +1016,25 @@ class ProductionService extends BaseService "status" => $status ]; } + public function emptyOrdenTrabajoPedidoDate(string $dateName) + { + $status = false; + $user = auth()->user(); + $row = []; + $pedidoDatesUser = $this->ordenTrabajoConfig->DATE_USER_MAPPING_PEDIDO; + if (isset($pedidoDatesUser[$dateName])) { + $attrUserPedido = $pedidoDatesUser[$dateName]; + $row[$attrUserPedido] = $user->id; + $row[$dateName] = null; + $status = $this->pedidoModel->update($this->pedido->id, $row); + $this->updateProgress(); + } else { + throw new Exception(lang('Produccion.errors.attr_not_exist', [$dateName])); + } + + + return $status; + } public function updateOrdenTrabajo($data): bool { if (isset($data["is_pedido_espera"])) { @@ -1620,4 +1685,56 @@ class ProductionService extends BaseService { return $this->ot->getBarCodeFile(); } + + public function getMaquinaImpresionTareasList(int $maquina_id) + { + + $q = $this->otModel->builder()->select([ + "ordenes_trabajo.id as otId", + "orden_trabajo_tareas.id as ot_tarea_id", + "pedidos.fecha_impresion", + "orden_trabajo_tareas.nombre as tareaName", + "presupuestos.titulo as presupuesto_titulo", + "orden_trabajo_tareas.maquina_id", + "lg_papel_impresion.nombre as papel_impresion", + "presupuesto_linea.gramaje as papel_gramaje", + "tarea_progress.estado as tareaEstado" + ]) + ->join("orden_trabajo_tareas", "orden_trabajo_tareas.orden_trabajo_id = ordenes_trabajo.id", "left") + // Obtener el ultimo estado de la tarea + ->join( + '(SELECT ot_tarea_id, estado + FROM orden_trabajo_tarea_progress_dates + WHERE (ot_tarea_id, created_at) IN ( + SELECT ot_tarea_id, MAX(created_at) + FROM orden_trabajo_tarea_progress_dates + GROUP BY ot_tarea_id + ) + ) as tarea_progress', + 'tarea_progress.ot_tarea_id = orden_trabajo_tareas.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("pedidos", "pedidos.id = ordenes_trabajo.pedido_id", "right") + ->join("lg_papel_formato", "lg_papel_formato.id = presupuestos.papel_formato_id", "left") + ->join("lg_maquinas", "lg_maquinas.id = orden_trabajo_tareas.maquina_id", "left") + ->join("lg_papel_impresion", "lg_papel_impresion.id = presupuesto_linea.papel_impresion_id", "left") + ->groupStart() + ->orWhere('orden_trabajo_tareas.maquina_id', $maquina_id) + ->orWhere('presupuesto_linea.maquina_id', $maquina_id) + ->groupEnd() + // ->where('pedidos.fecha_impresion IS NOT NULL', null, false) + ->where("orden_trabajo_tareas.deleted_at", null) + ->where("tarea_progress.estado", 'P') + ->orderBy("pedidos.fecha_impresion", "ASC") + ->groupBy('orden_trabajo_tareas.nombre'); + + return $q; + } + public function buttonActionDatatableTareaList($id) + { + $url = route_to("viewProduccionMaquinistaTareaView", $id); + return ""; + } } diff --git a/ci4/app/Views/themes/vuexy/components/cards/tarea_card.php b/ci4/app/Views/themes/vuexy/components/cards/tarea_card.php new file mode 100644 index 00000000..735f1d6f --- /dev/null +++ b/ci4/app/Views/themes/vuexy/components/cards/tarea_card.php @@ -0,0 +1,44 @@ +
+
+
+ Titulo +
titulo ?>
+
+
+
+
+ +
+
+

OT ID

+

id ?>

+
+
+

Clicks presupuesto

+

presupuestoLineaImpresion()->rotativa_clicks_total ?>

+
+ +
+
+
+
+ barcode +
+
+ +
+
+
+

Tarea

+

nombre ?>

+
+
+
+ +
+
\ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/components/cards/tarea_card_actions.php b/ci4/app/Views/themes/vuexy/components/cards/tarea_card_actions.php new file mode 100644 index 00000000..f29ca2f5 --- /dev/null +++ b/ci4/app/Views/themes/vuexy/components/cards/tarea_card_actions.php @@ -0,0 +1,55 @@ +
+
+
+
+
+ +
+ +
+

Tirada

+

total_tirada ?>

+
+
+

Clicks

+

click_tarea ?>

+
+
+ +
+
+

Tiempo estimado

+

tiempo_estimado) ?>

+
+
+

Tiempo real

+

+
+
+
+
+ + +
+
+ + +
+
+
+ +
+
+
+ + + + + + +
+
+
+ +
+
\ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/components/forms/maquinista_tarea_form.php b/ci4/app/Views/themes/vuexy/components/forms/maquinista_tarea_form.php new file mode 100644 index 00000000..e69de29b diff --git a/ci4/app/Views/themes/vuexy/components/tables/maquinista_tarea_list.php b/ci4/app/Views/themes/vuexy/components/tables/maquinista_tarea_list.php new file mode 100755 index 00000000..e69de29b diff --git a/ci4/app/Views/themes/vuexy/components/tables/maquinista_tarea_table.php b/ci4/app/Views/themes/vuexy/components/tables/maquinista_tarea_table.php new file mode 100755 index 00000000..cbf06dde --- /dev/null +++ b/ci4/app/Views/themes/vuexy/components/tables/maquinista_tarea_table.php @@ -0,0 +1,21 @@ +
+ + + + + + + + + + + + + + + + + +
+ +
\ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/produccion/maquinista/viewMaquinistaMaquinaList.php b/ci4/app/Views/themes/vuexy/form/produccion/maquinista/viewMaquinistaMaquinaList.php new file mode 100644 index 00000000..a395a376 --- /dev/null +++ b/ci4/app/Views/themes/vuexy/form/produccion/maquinista/viewMaquinistaMaquinaList.php @@ -0,0 +1,89 @@ +include('themes/_commonPartialsBs/select2bs5') ?> +include('themes/_commonPartialsBs/datatables') ?> +include('themes/_commonPartialsBs/sweetalert') ?> +include('themes/_commonPartialsBs/_confirm2delete') ?> +extend('themes/vuexy/main/defaultlayout') ?> +section('content'); ?> + +
+ +
+

Seleccione una máquina

+
+
+ +
+
+ +
+
+ +
+
+endSection() ?> + +section('css') ?> + + + +endSection() ?> + +section("additionalExternalJs") ?> + + + +endSection() ?> \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/produccion/maquinista/viewMaquinistaMaquinaTarea.php b/ci4/app/Views/themes/vuexy/form/produccion/maquinista/viewMaquinistaMaquinaTarea.php new file mode 100644 index 00000000..5df9ebbc --- /dev/null +++ b/ci4/app/Views/themes/vuexy/form/produccion/maquinista/viewMaquinistaMaquinaTarea.php @@ -0,0 +1,85 @@ +include('themes/_commonPartialsBs/select2bs5') ?> +include('themes/_commonPartialsBs/datatables') ?> +include('themes/_commonPartialsBs/sweetalert') ?> +include('themes/_commonPartialsBs/_confirm2delete') ?> +extend('themes/vuexy/main/defaultlayout') ?> +section('content'); ?> + +
+ +
+ +endSection() ?> + +section('css') ?> + + + + + + + +endSection() ?> + +section("additionalExternalJs") ?> + + + + + + + +endSection() ?> \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/produccion/maquinista/viewMaquinistaMaquinaTareas.php b/ci4/app/Views/themes/vuexy/form/produccion/maquinista/viewMaquinistaMaquinaTareas.php new file mode 100644 index 00000000..5645741a --- /dev/null +++ b/ci4/app/Views/themes/vuexy/form/produccion/maquinista/viewMaquinistaMaquinaTareas.php @@ -0,0 +1,49 @@ +include('themes/_commonPartialsBs/select2bs5') ?> +include('themes/_commonPartialsBs/datatables') ?> +include('themes/_commonPartialsBs/sweetalert') ?> +include('themes/_commonPartialsBs/_confirm2delete') ?> +extend('themes/vuexy/main/defaultlayout') ?> +section('content'); ?> + + +
+
+
+
+
+
+
+ + +
+
+
+ format('d/m/Y') ?> +
+ +
+ +
+
+
+
+endSection() ?> + +section('css') ?> + + + +endSection() ?> + +section("additionalExternalJs") ?> + + + + + +endSection() ?> \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/produccion/maquinista/viewMaquinistaPlanningList.php b/ci4/app/Views/themes/vuexy/form/produccion/maquinista/viewMaquinistaPlanningList.php new file mode 100644 index 00000000..f422d547 --- /dev/null +++ b/ci4/app/Views/themes/vuexy/form/produccion/maquinista/viewMaquinistaPlanningList.php @@ -0,0 +1,27 @@ +include('themes/_commonPartialsBs/select2bs5') ?> +include('themes/_commonPartialsBs/datatables') ?> +include('themes/_commonPartialsBs/sweetalert') ?> +include('themes/_commonPartialsBs/_confirm2delete') ?> +extend('themes/vuexy/main/defaultlayout') ?> + + + +section('content'); ?> + +
+ +
+endSection() ?> + +section('css') ?> + + + +endSection() ?> + +section("additionalExternalJs") ?> + + + + +endSection() ?> \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/produccion/ot/otDates.php b/ci4/app/Views/themes/vuexy/form/produccion/ot/otDates.php index 532f6237..5182f889 100755 --- a/ci4/app/Views/themes/vuexy/form/produccion/ot/otDates.php +++ b/ci4/app/Views/themes/vuexy/form/produccion/ot/otDates.php @@ -16,13 +16,19 @@
- +
+ + +
- > +
+ > + +
@@ -31,7 +37,10 @@
- /> +
+ /> + +
@@ -39,7 +48,10 @@
- /> +
+ /> + +
@@ -49,13 +61,17 @@
- /> + +
+ /> + +
diff --git a/ci4/app/Views/themes/vuexy/form/produccion/ot/otProgress.php b/ci4/app/Views/themes/vuexy/form/produccion/ot/otProgress.php index cf06595f..b1159005 100755 --- a/ci4/app/Views/themes/vuexy/form/produccion/ot/otProgress.php +++ b/ci4/app/Views/themes/vuexy/form/produccion/ot/otProgress.php @@ -25,33 +25,45 @@
-

-
+

+
"> - > +
+ > + +
" ?>
""> - - > + +
+ > + +
" ?>
"> - > -
"?>
+
+ > + +
+
" ?>
"> - > +
+ > + +
" ?>
@@ -59,63 +71,90 @@
-

-
+

+
"> - > +
+ > + +
" ?>
"> - > +
+ > + +
" ?>
"> - > +
+ > + +
" ?>
"> - > +
+ > + +
" ?>
"> - > +
+ > + +
" ?>
"> - > +
+ > + +
" ?>
"> - > +
+ > + +
" ?>
"> - > +
+ > + +
" ?>
"> - > +
+ > + +
" ?>
@@ -123,38 +162,53 @@
-

-
+

+
"> - > +
+ > + +
" ?>
"> - > +
+ > + +
" ?>
"> - > +
+ > + +
" ?>
- > +
+ > + +
" ?>
- > +
+ > + +
" ?>
@@ -163,39 +217,54 @@
-
-

-
+
+

+
"> - > +
+ > + +
" ?>
"> - > +
+ > + +
" ?>
"> - > +
+ > + +
" ?>
"> - > +
+ > + +
" ?>
"> - > +
+ > + +
" ?>
diff --git a/ci4/app/Views/themes/vuexy/form/produccion/viewOrdenTrabajoList.php b/ci4/app/Views/themes/vuexy/form/produccion/viewOrdenTrabajoList.php index 8321dcbc..620c8805 100755 --- a/ci4/app/Views/themes/vuexy/form/produccion/viewOrdenTrabajoList.php +++ b/ci4/app/Views/themes/vuexy/form/produccion/viewOrdenTrabajoList.php @@ -4,12 +4,6 @@ include('themes/_commonPartialsBs/_confirm2delete') ?> extend('themes/vuexy/main/defaultlayout') ?> -include('themes/_commonPartialsBs/select2bs5') ?> -include('themes/_commonPartialsBs/datatables') ?> -include('themes/_commonPartialsBs/_confirm2delete') ?> -extend('themes/vuexy/main/defaultlayout') ?> - - section('content'); ?>
diff --git a/ci4/app/Views/themes/vuexy/main/menus/maquinista_menu.php b/ci4/app/Views/themes/vuexy/main/menus/maquinista_menu.php index 8f637d30..dd307490 100755 --- a/ci4/app/Views/themes/vuexy/main/menus/maquinista_menu.php +++ b/ci4/app/Views/themes/vuexy/main/menus/maquinista_menu.php @@ -7,23 +7,23 @@ if (auth()->user()->inGroup('maquina')) { ?>