revision ot v2

This commit is contained in:
amazuecos
2025-05-04 17:25:53 +02:00
parent db70c57fb3
commit fb7f2a28d9
30 changed files with 897 additions and 169 deletions

View File

@ -122,7 +122,7 @@ class OrdenTrabajo extends BaseConfig
]; ];
public array $OT_TAREA_STATUS_COLOR = [ public array $OT_TAREA_STATUS_COLOR = [
"P" => '#FFD63A', "P" => '#FFB22C',
"F" => '#67AE6E', "F" => '#67AE6E',
"S" => '#EB5B00', "S" => '#EB5B00',
"I" => '#3A59D1', "I" => '#3A59D1',
@ -130,6 +130,7 @@ class OrdenTrabajo extends BaseConfig
"D" => '#FFA725', "D" => '#FFA725',
]; ];
public function __construct() public function __construct()
{ {
parent::__construct(); parent::__construct();

View File

@ -40,8 +40,8 @@ foreach (glob(APPPATH . 'Config/Routes/*Routes.php') as $routeFile) {
$routes->group('users', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) { $routes->group('users', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Users::index', ['as' => 'userList']); $routes->get('', 'Users::index', ['as' => 'userList']);
$routes->get('maquinista/change/user','Users::index_maquinista_change_user',['as' => 'maquinistaUserChangeList']); $routes->get('maquinista/change/user', 'Users::index_maquinista_change_user', ['as' => 'maquinistaUserChangeList']);
$routes->get('maquinista/change/session/(:num)','Users::change_user_session/$1',['as' => 'maquinistaChangeUserSession']); $routes->get('maquinista/change/session/(:num)', 'Users::change_user_session/$1', ['as' => 'maquinistaChangeUserSession']);
$routes->get('list', 'Users::index', ['as' => 'userList2']); $routes->get('list', 'Users::index', ['as' => 'userList2']);
$routes->get('add', 'Users::add', ['as' => 'newUser']); $routes->get('add', 'Users::add', ['as' => 'newUser']);
$routes->post('add', 'Users::add', ['as' => 'createUser']); $routes->post('add', 'Users::add', ['as' => 'createUser']);
@ -742,11 +742,17 @@ $routes->group('soporte', ['namespace' => 'App\Controllers\Soporte'], function (
$routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], function ($routes) { $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], function ($routes) {
$routes->group('ordentrabajo', ['namespace' => 'App\Controllers\Produccion'], function ($routes) { $routes->group('ordentrabajo', ['namespace' => 'App\Controllers\Produccion'], function ($routes) {
/** VIEWS */
$routes->get('', 'Ordentrabajo::index', ['as' => 'viewOrdenTrabajoIndex']); $routes->get('', 'Ordentrabajo::index', ['as' => 'viewOrdenTrabajoIndex']);
$routes->get('edit/(:num)', 'Ordentrabajo::edit/$1', ['as' => 'viewOrdenTrabajoEdit']); $routes->get('edit/(:num)', 'Ordentrabajo::edit/$1', ['as' => 'viewOrdenTrabajoEdit']);
$routes->delete('reset/tareas/(:num)', 'Ordentrabajo::reset_tareas/$1');
$routes->delete('tareas/(:num)', 'Ordentrabajo::delete_tarea/$1'); /** GET */
$routes->get('summary/(:num)', 'Ordentrabajo::get_orden_trabajo_summary/$1', ['as' => 'getOrdenTrabajoSumary']); $routes->get('summary/(:num)', 'Ordentrabajo::get_orden_trabajo_summary/$1', ['as' => 'getOrdenTrabajoSumary']);
$routes->get("tarea/progress/(:num)", "Ordentrabajo::get_orden_trabajo_progress_date/$1");
$routes->get('tarea/(:num)', 'Ordentrabajo::find_tarea/$1');
$routes->get('tarea/dates/(:num)', 'Ordentrabajo::get_orden_trabajo_tareas_dates/$1');
$routes->get('tareas/maquina/(:num)/(:num)','Ordentrabajo::get_tareas_ot_maquina/$1/$2');
/** DATATABLES */
$routes->get('datatable', 'Ordentrabajo::datatable'); $routes->get('datatable', 'Ordentrabajo::datatable');
$routes->get('datatable_pendientes', 'Ordentrabajo::datatable_pendientes'); $routes->get('datatable_pendientes', 'Ordentrabajo::datatable_pendientes');
$routes->get('datatable_ferro_pendiente', 'Ordentrabajo::datatable_ferro_pendiente'); $routes->get('datatable_ferro_pendiente', 'Ordentrabajo::datatable_ferro_pendiente');
@ -756,9 +762,6 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func
$routes->get('datatable_waiting', 'Ordentrabajo::datatable_waiting'); $routes->get('datatable_waiting', 'Ordentrabajo::datatable_waiting');
$routes->get('datatable_revision_com', 'Ordentrabajo::datatable_revision_com'); $routes->get('datatable_revision_com', 'Ordentrabajo::datatable_revision_com');
$routes->get('tareas/datatable/(:num)', 'Ordentrabajo::tareas_datatable/$1', ['as' => 'datatableTareasOrdenTrabajo']); $routes->get('tareas/datatable/(:num)', 'Ordentrabajo::tareas_datatable/$1', ['as' => 'datatableTareasOrdenTrabajo']);
$routes->get("tarea/progress/(:num)", "Ordentrabajo::get_orden_trabajo_progress_date/$1");
$routes->get('tarea/(:num)', 'Ordentrabajo::find_tarea/$1');
$routes->get('tarea/dates/(:num)','Ordentrabajo::get_orden_trabajo_tareas_dates/$1');
/**====================== /**======================
* UPDATES * UPDATES
*========================**/ *========================**/
@ -767,18 +770,22 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func
$routes->post("reset/date", 'Ordentrabajo::reset_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("update/pedido/date", 'Ordentrabajo::update_orden_trabajo_pedido_date');
$routes->post("reset/pedido/date", 'Ordentrabajo::reset_orden_trabajo_pedido_date'); $routes->post("reset/pedido/date", 'Ordentrabajo::reset_orden_trabajo_pedido_date');
$routes->post("update/pod/pedido/date/(:num)",'Ordentrabajo::update_pod_pedido_dates/$1'); $routes->post("update/pod/pedido/date/(:num)", 'Ordentrabajo::update_pod_pedido_dates/$1');
$routes->post("update/pedido", 'Ordentrabajo::update_orden_trabajo_pedido'); $routes->post("update/pedido", 'Ordentrabajo::update_orden_trabajo_pedido');
$routes->post("update/user", 'Ordentrabajo::update_orden_trabajo_user'); $routes->post("update/user", 'Ordentrabajo::update_orden_trabajo_user');
$routes->post("update", 'Ordentrabajo::update_orden_trabajo'); $routes->post("update", 'Ordentrabajo::update_orden_trabajo');
$routes->post("upload/portada", 'Ordentrabajo::upload_orden_trabajo_portada'); $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->get("color/(:num)", 'Ordentrabajo::get_orden_trabajo_color_status/$1');
$routes->post("update/tarea/progress", "Ordentrabajo::store_orden_trabajo_progress_date"); $routes->post("update/tarea/progress", "Ordentrabajo::store_orden_trabajo_progress_date");
$routes->post("update/tarea/pliegos", "Ordentrabajo::update_orden_trabajo_pliegos"); $routes->post("update/tarea/pliegos", "Ordentrabajo::update_orden_trabajo_pliegos");
$routes->post("update/tarea/proveedor", "Ordentrabajo::update_presupuesto_tarea_proveedor"); $routes->post("update/tarea/proveedor", "Ordentrabajo::update_presupuesto_tarea_proveedor");
$routes->delete("tarea/progress/(:num)", "Ordentrabajo::delete_orden_trabajo_progress_date/$1"); $routes->post("fa/tareas/finish", 'Ordentrabajo::update_orden_trabajo_fa_tareas');
/**DELETES */
$routes->delete("portada/(:num)", 'Ordentrabajo::delete_orden_trabajo_portada/$1');
$routes->delete("tarea/progress/(:num)", "Ordentrabajo::delete_orden_trabajo_progress_date/$1");
$routes->delete('reset/tareas/(:num)', 'Ordentrabajo::reset_tareas/$1');
$routes->delete('tareas/(:num)', 'Ordentrabajo::delete_tarea/$1');
/**====================== /**======================
* FILES * FILES
*========================**/ *========================**/
@ -792,6 +799,7 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func
$routes->get('pdf/ferro/(:num)', 'Ordentrabajo::get_ferro_pdf/$1'); $routes->get('pdf/ferro/(:num)', 'Ordentrabajo::get_ferro_pdf/$1');
$routes->get('pdf/prototipo/(:num)', 'Ordentrabajo::get_prototipo_pdf/$1'); $routes->get('pdf/prototipo/(:num)', 'Ordentrabajo::get_prototipo_pdf/$1');
$routes->get('portada/(:num)', 'Ordentrabajo::get_portada_img/$1'); $routes->get('portada/(:num)', 'Ordentrabajo::get_portada_img/$1');
/** PLANNING */
$routes->group('planning', ['namespace' => 'App\Controllers\Produccion'], function ($routes) { $routes->group('planning', ['namespace' => 'App\Controllers\Produccion'], function ($routes) {
$routes->get('select/maquina/rotativa', 'Ordentrabajo::select_maquina_planning_rot'); $routes->get('select/maquina/rotativa', 'Ordentrabajo::select_maquina_planning_rot');
$routes->get('select/papel/rotativa', 'Ordentrabajo::select_papel_planning_rot'); $routes->get('select/papel/rotativa', 'Ordentrabajo::select_papel_planning_rot');
@ -807,12 +815,19 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func
}); });
$routes->group('maquinista', ['namespace' => 'App\Controllers\Produccion'], function ($routes) { $routes->group('maquinista', ['namespace' => 'App\Controllers\Produccion'], function ($routes) {
/**
* VIEWS
*/
$routes->get('maquinas/view', 'Ordentrabajo::maquinista_maquinas_view', ['as' => 'viewProduccionMaquinistaMaquinas']); $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/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/auto/(:num)', 'Ordentrabajo::maquinista_maquina_tareas_fichaje_automatico/$1', ['as' => 'viewMaquinistaFichajeAutomatico']);
$routes->get('maquinas/view/scan/(:num)', 'Ordentrabajo::maquinista_maquina_tareas_scan/$1', ['as' => 'viewMaquinistaTareaScan']);
$routes->get('maquinas/view/tarea/(:num)', 'Ordentrabajo::maquinista_maquina_tarea_view/$1', ['as' => 'viewProduccionMaquinistaTareaView']); $routes->get('maquinas/view/tarea/(:num)', 'Ordentrabajo::maquinista_maquina_tarea_view/$1', ['as' => 'viewProduccionMaquinistaTareaView']);
$routes->get('colas/view', 'Ordentrabajo::maquinista_colas_view', ['as' => 'viewProduccionMaquinistaColas']); $routes->get('colas/view', 'Ordentrabajo::maquinista_colas_view', ['as' => 'viewProduccionMaquinistaColas']);
/** DATATABLE */
$routes->get('maquinas/tareas/datatable/(:alpha)/(:num)', 'Ordentrabajo::maquinista_maquina_tareas_datatable/$1/$2', ['as' => 'viewMaquinistaMaquinaTareaDatatable']);
$routes->get('maquinas/tareas/aplazadas/datatable/(:num)', 'Ordentrabajo::maquinista_maquina_tareas_aplazada_datatable/$1', ['as' => 'viewMaquinistaMaquinaTareaAplazadaDatatable']);
}); });
}); });
}); });
@ -842,7 +857,6 @@ $routes->group('logistica', ['namespace' => 'App\Controllers\Logistica'], functi
$routes->post('imprimirEtiquetas', 'LogisticaController::imprimirEtiquetas'); $routes->post('imprimirEtiquetas', 'LogisticaController::imprimirEtiquetas');
$routes->get('listAlbaranes', 'LogisticaController::listAlbaranes', ['as' => 'albaranesList']); $routes->get('listAlbaranes', 'LogisticaController::listAlbaranes', ['as' => 'albaranesList']);
}); });
/* /*

View File

@ -172,6 +172,29 @@ class Validation extends BaseConfig
"label" => "Orden trabajo" "label" => "Orden trabajo"
], ],
];
public array $orden_trabajo_fichaje_auto = [
"orden_trabajo_id" => [
"rules" => "required|integer",
"label" => "Orden trabajo"
],
"maquina_id" => [
"rules" => "required|integer",
"label" => "Máquina"
],
"tareas" => [
"rules" => "required",
"label" => "Tareas"
],
"click_init" => [
"rules" => "required|integer",
"label" => "Click init"
],
"click_end" => [
"rules" => "required|integer",
"label" => "Click end"
],
]; ];
public array $chat_department = public array $chat_department =
[ [

View File

@ -141,7 +141,8 @@ class Ordentrabajo extends BaseController
return $this->response->setJSON(["errors" => $this->validation->getErrors()])->setStatusCode(400); return $this->response->setJSON(["errors" => $this->validation->getErrors()])->setStatusCode(400);
} }
} }
public function update_presupuesto_tarea_proveedor(){ public function update_presupuesto_tarea_proveedor()
{
$bodyData = $this->request->getPost(); $bodyData = $this->request->getPost();
$validated = $this->validation->run($bodyData, "proveedor_tarea"); $validated = $this->validation->run($bodyData, "proveedor_tarea");
if ($validated) { if ($validated) {
@ -151,7 +152,6 @@ class Ordentrabajo extends BaseController
} else { } else {
return $this->response->setJSON(["errors" => $this->validation->getErrors()])->setStatusCode(400); return $this->response->setJSON(["errors" => $this->validation->getErrors()])->setStatusCode(400);
} }
} }
public function reset_orden_trabajo_date() public function reset_orden_trabajo_date()
{ {
@ -242,7 +242,7 @@ class Ordentrabajo extends BaseController
{ {
$logo = config(LogoImpresion::class); $logo = config(LogoImpresion::class);
$q = $this->otModel->getDatatableQuery()->whereIn("ordenes_trabajo.estado", ["I", "PM"]); $q = $this->otModel->getDatatableQuery()->whereIn("ordenes_trabajo.estado", ["I", "PM"])->where('ordenes_trabajo.preimpresion_revisada', true);
// return $this->response->setJSON($q->get()->getResultArray()); // return $this->response->setJSON($q->get()->getResultArray());
return DataTable::of($q) 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()])
@ -257,7 +257,7 @@ class Ordentrabajo extends BaseController
{ {
$logo = config(LogoImpresion::class); $logo = config(LogoImpresion::class);
$q = $this->otModel->getDatatableQuery()->where('presupuestos.ferro',1)->where("ferro_ok_at", null); $q = $this->otModel->getDatatableQuery()->where('presupuestos.ferro', 1)->where("ferro_ok_at", null);
// return $this->response->setJSON($q->get()->getResultArray()); // return $this->response->setJSON($q->get()->getResultArray());
return DataTable::of($q) 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()])
@ -272,7 +272,7 @@ class Ordentrabajo extends BaseController
{ {
$logo = config(LogoImpresion::class); $logo = config(LogoImpresion::class);
$q = $this->otModel->getDatatableQuery()->where('presupuestos.ferro',1)->where("ferro_ok_at is NOT NULL", NULL, FALSE); $q = $this->otModel->getDatatableQuery()->where('presupuestos.ferro', 1)->where("ferro_ok_at is NOT NULL", NULL, FALSE);
// return $this->response->setJSON($q->get()->getResultArray()); // return $this->response->setJSON($q->get()->getResultArray());
return DataTable::of($q) 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()])
@ -287,7 +287,7 @@ class Ordentrabajo extends BaseController
{ {
$logo = config(LogoImpresion::class); $logo = config(LogoImpresion::class);
$q = $this->otModel->getDatatableQuery()->where('ordenes_trabajo.preimpresion_revisada',false); $q = $this->otModel->getDatatableQuery()->where('ordenes_trabajo.preimpresion_revisada', false);
return DataTable::of($q) 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( ->edit(
@ -301,7 +301,7 @@ class Ordentrabajo extends BaseController
{ {
$logo = config(LogoImpresion::class); $logo = config(LogoImpresion::class);
$q = $this->otModel->getDatatableQuery()->where('presupuestos.ferro',1)->where("ferro_ok_at is NOT NULL", NULL, FALSE); $q = $this->otModel->getDatatableQuery()->where('ordenes_trabajo.preimpresion_revisada', true)->where('pedidos.estado', 'produccion');
return DataTable::of($q) 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( ->edit(
@ -315,7 +315,7 @@ class Ordentrabajo extends BaseController
{ {
$logo = config(LogoImpresion::class); $logo = config(LogoImpresion::class);
$q = $this->otModel->getDatatableQuery()->where('ordenes_trabajo.is_pedido_espera',1); $q = $this->otModel->getDatatableQuery()->where('ordenes_trabajo.is_pedido_espera', 1);
return DataTable::of($q) 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( ->edit(
@ -329,7 +329,7 @@ class Ordentrabajo extends BaseController
{ {
$logo = config(LogoImpresion::class); $logo = config(LogoImpresion::class);
$q = $this->otModel->getDatatableQuery()->where('presupuestos.ferro',1)->where("ferro_ok_at is NOT NULL", NULL, FALSE); $q = $this->otModel->getDatatableQuery()->where('presupuestos.ferro', 1)->where("ferro_ok_at is NOT NULL", NULL, FALSE);
return DataTable::of($q) 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( ->edit(
@ -374,6 +374,7 @@ class Ordentrabajo extends BaseController
return DataTable::of($q) return DataTable::of($q)
->add("action", fn($q) => $q) ->add("action", fn($q) => $q)
->edit("orden", fn($q) => ["id" => $q->id, "orden" => $q->orden]) ->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_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_real", fn($q) => float_seconds_to_hhmm_string($q->tiempo_real))
->add("proveedor", fn($q) => $this->produccionService->getProveedorTarea($q->id)) ->add("proveedor", fn($q) => $this->produccionService->getProveedorTarea($q->id))
@ -602,6 +603,19 @@ class Ordentrabajo extends BaseController
$this->viewData["maquinaEntity"] = $maquina; $this->viewData["maquinaEntity"] = $maquina;
return view(static::$viewPath . '/maquinista/viewMaquinistaMaquinaTareas', $this->viewData); return view(static::$viewPath . '/maquinista/viewMaquinistaMaquinaTareas', $this->viewData);
} }
public function maquinista_maquina_tareas_fichaje_automatico(int $maquina_id)
{
$maquina = $this->maquinaModel->find($maquina_id);
$this->viewData["maquinaEntity"] = $maquina;
return view(static::$viewPath . '/maquinista/viewMaquinistaFichajeAutomatico', $this->viewData);
}
public function maquinista_maquina_tareas_scan(int $maquina_id)
{
$maquina = $this->maquinaModel->find($maquina_id);
$this->viewData["maquinaEntity"] = $maquina;
return view(static::$viewPath . '/maquinista/viewMaquinistaTareaScan', $this->viewData);
}
public function maquinista_maquina_tarea_view(int $orden_trabajo_tarea_id) public function maquinista_maquina_tarea_view(int $orden_trabajo_tarea_id)
{ {
$otTareaEntity = $this->otTarea->find($orden_trabajo_tarea_id); $otTareaEntity = $this->otTarea->find($orden_trabajo_tarea_id);
@ -629,6 +643,16 @@ class Ordentrabajo extends BaseController
} }
return DataTable::of($pm) 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') : '') ->edit('fecha_impresion', fn($q) => $q->fecha_impresion ? Time::createFromFormat('Y-m-d H:i:s', $q->fecha_impresion)->format('d/m/Y') : '')
->add("tareaEstado", fn($q) => $this->produccionService->getTitleTareaEstado($q->ot_tarea_id))
->add('action', fn($q) => $this->produccionService->buttonActionDatatableTareaList($q->ot_tarea_id))
->toJson(true);
}
public function maquinista_maquina_tareas_aplazada_datatable(int $maquina_id)
{
$pm = $this->produccionService->getMaquinaImpresionTareasList($maquina_id)->where("tarea_progress.estado", '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("tareaEstado", fn($q) => $this->produccionService->getTitleTareaEstado($q->ot_tarea_id))
->add('action', fn($q) => $this->produccionService->buttonActionDatatableTareaList($q->ot_tarea_id)) ->add('action', fn($q) => $this->produccionService->buttonActionDatatableTareaList($q->ot_tarea_id))
->toJson(true); ->toJson(true);
} }
@ -639,13 +663,12 @@ class Ordentrabajo extends BaseController
try { try {
$bodyData = $this->request->getPost(); $bodyData = $this->request->getPost();
$validated = $this->validation->run($bodyData, "orden_trabajo_tarea_progress_date"); $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) { if ($validated) {
$validatedData = $this->validation->getValidated(); $validatedData = $this->validation->getValidated();
$r = $this->produccionService->storeOrdenTrabajoTareaProgressDate($validatedData); $r = $this->produccionService->storeOrdenTrabajoTareaProgressDate($validatedData);
$otTareaEntity = $this->otTarea->find($validatedData['ot_tarea_id']); $otTareaEntity = $this->otTarea->find($validatedData['ot_tarea_id']);
$data = [ $data = [
"tiempo_trabajado" => float_seconds_to_hhmm_string($otTareaEntity->tiempo_trabajado()), "tiempo_trabajado" => float_seconds_to_hhmm_string($otTareaEntity->tiempo_real),
"tarea" => $otTareaEntity, "tarea" => $otTareaEntity,
"estado" => $validatedData['estado'], "estado" => $validatedData['estado'],
]; ];
@ -673,20 +696,65 @@ class Ordentrabajo extends BaseController
} }
public function update_pod_pedido_dates($orden_trabajo_id) public function update_pod_pedido_dates($orden_trabajo_id)
{ {
$this->produccionService->init($orden_trabajo_id); $this->produccionService->init($orden_trabajo_id);
if($this->produccionService->isPOD){ if ($this->produccionService->isPOD) {
$status = $this->produccionService->updatePodDates(); $status = $this->produccionService->updatePodDates();
return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => $status, "data" => $this->produccionService->getPedido()]); return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => $status, "data" => $this->produccionService->getPedido()]);
}else{ } else {
return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => false, "data" => $this->produccionService->getPedido()]); return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => false, "data" => $this->produccionService->getPedido()]);
} }
} }
public function get_orden_trabajo_tareas_dates($orden_trabajo_id) public function get_orden_trabajo_tareas_dates($orden_trabajo_id)
{ {
$data = $this->produccionService->init($orden_trabajo_id)->getOrdenTrabajoTareaDates(); $data = $this->produccionService->init($orden_trabajo_id)->getOrdenTrabajoTareaDates();
return $this->response->setJSON(["data" => $data ]); return $this->response->setJSON(["data" => $data]);
}
public function get_tareas_ot_maquina(int $orden_trabajo_id, int $maquina_id)
{
$tareasWithMaquina = $this->produccionService->init($orden_trabajo_id)->getTareasWithMaquina($maquina_id, ['P', 'I', 'S', 'D']);
if ($tareasWithMaquina) {
$data = [
'tareas' => $tareasWithMaquina,
'ot' => $this->produccionService->getOrdenTrabajo(),
'presupuesto' => $this->produccionService->getPresupuesto()
];
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){
return $this->response->setJSON(["message" => lang("Produccion.errors.tareas_finalizadas"), "data" => $tareasWithMaquina])->setStatusCode(400);
}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();
$validated = $this->validation->run($bodyData, "orden_trabajo_fichaje_auto");
if ($validated) {
$validatedData = $this->validation->getValidated();
$this->produccionService->init($validatedData['orden_trabajo_id']);
foreach ($validatedData['tareas'] as $key => $tareaId) {
$this->produccionService->storeOrdenTrabajoTareaProgressDate(
[
'estado' => 'F',
'ot_tarea_id' => $tareaId
]
);
$tareaEntity = $this->otTarea->find($tareaId);
$tiempo_trabajado = $tareaEntity->tiempo_trabajado();
$tareaEntity->tiempo_real = $tiempo_trabajado / count($validatedData['tareas']);
$tareaEntity->click_init = $validatedData['click_init'] / count($validatedData['tareas']);
$tareaEntity->click_end = $validatedData['click_end'] / count($validatedData['tareas']);
$this->otTarea->save($tareaEntity);
}
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);
}
} }
} }

View File

@ -178,7 +178,7 @@ class OrdenTrabajoTareaEntity extends Entity
$m = model(OrdenTrabajoTareaProgressDate::class); $m = model(OrdenTrabajoTareaProgressDate::class);
return $m->where('ot_tarea_id', $this->attributes["id"])->findAll() ?? []; return $m->where('ot_tarea_id', $this->attributes["id"])->findAll() ?? [];
} }
public function lastState() : ?OrdenTrabajoTareaProgressDateEntity public function lastState(): ?OrdenTrabajoTareaProgressDateEntity
{ {
$m = model(OrdenTrabajoTareaProgressDate::class); $m = model(OrdenTrabajoTareaProgressDate::class);
$progressDates = $m->where('ot_tarea_id', $this->attributes["id"])->orderBy('action_at', 'DESC')->first(); $progressDates = $m->where('ot_tarea_id', $this->attributes["id"])->orderBy('action_at', 'DESC')->first();
@ -193,12 +193,12 @@ class OrdenTrabajoTareaEntity extends Entity
foreach ($dates as $key => $date) { foreach ($dates as $key => $date) {
if ($date->estado == "I") { if ($date->estado == "I") {
if ($date->action_at) { if ($date->action_at) {
$init = Time::createFromFormat('Y-m-d H:i:s', $date->action_at); $init = $date->action_at;
} }
} }
if ($date->estado == "S" || $date->estado == "F") { if ($date->estado == "S" || $date->estado == "F") {
if ($date->action_at && $init) { if ($date->action_at && $init) {
$end = Time::createFromFormat('Y-m-d H:i:s', $date->action_at); $end = $date->action_at;
$intervals[] = $init->difference($end)->getSeconds(); $intervals[] = $init->difference($end)->getSeconds();
} }
} }
@ -218,23 +218,23 @@ class OrdenTrabajoTareaEntity extends Entity
} }
return $isTareaCosido; return $isTareaCosido;
} }
public function isImpresion() : bool public function isImpresion(): bool
{ {
return $this->attributes['presupuesto_linea_id'] != null; return $this->attributes['presupuesto_linea_id'] != null;
} }
public function isAcabado() : bool public function isAcabado(): bool
{ {
return $this->attributes['presupuesto_acabado_id'] != null; return $this->attributes['presupuesto_acabado_id'] != null;
} }
public function isManipulado() : bool public function isManipulado(): bool
{ {
return $this->attributes['presupuesto_manipulado_id'] != null; return $this->attributes['presupuesto_manipulado_id'] != null;
} }
public function isEncuadernado() : bool public function isEncuadernado(): bool
{ {
return $this->attributes['presupuesto_encuadernado_id'] != null; return $this->attributes['presupuesto_encuadernado_id'] != null;
} }
public function isCorte() : bool public function isCorte(): bool
{ {
return $this->attributes['is_corte']; return $this->attributes['is_corte'];
} }

View File

@ -2,6 +2,7 @@
namespace App\Entities\Produccion; namespace App\Entities\Produccion;
use App\Entities\Usuarios\UserEntity;
use App\Models\OrdenTrabajo\OrdenTrabajoTarea; use App\Models\OrdenTrabajo\OrdenTrabajoTarea;
use CodeIgniter\Entity\Entity; use CodeIgniter\Entity\Entity;
@ -27,5 +28,14 @@ class OrdenTrabajoTareaProgressDateEntity extends Entity
$m = model(OrdenTrabajoTarea::class); $m = model(OrdenTrabajoTarea::class);
return $m->find($this->attributes["ot_tarea_id"]); return $m->find($this->attributes["ot_tarea_id"]);
} }
public function user() : ?UserEntity
{
$user = null;
if($this->attributes['action_user_id'])
{
$user = auth()->getProvider()->findById($this->attributes['action_user_id']);
}
return $user;
}
} }

View File

@ -12,6 +12,8 @@ return [
'prod' => 'Producción' 'prod' => 'Producción'
], ],
"datatable" => [ "datatable" => [
"ot_id" => "OT ID",
"barcode" => "Código",
"pedido_id" => "Pedido ID", "pedido_id" => "Pedido ID",
"fecha_encuadernacion" => "Fecha encuadernación", "fecha_encuadernacion" => "Fecha encuadernación",
"fecha_impresion" => "Fecha impresión", "fecha_impresion" => "Fecha impresión",
@ -154,6 +156,16 @@ return [
"play_stop" => "Aplazar", "play_stop" => "Aplazar",
"play_end" => "Finalizar", "play_end" => "Finalizar",
"cancel" => "Cancelar", "cancel" => "Cancelar",
"fichaje_auto" => "F.auto",
"scan" => "Escanear",
"tarea_list" => "Lista de tareas",
"fichaje_auto_alert_text" => "Cada vez que introduza un nº de pedido se iniciará la tarea y se finalizará la tarea actual (del pedido anterior)",
"next_ot" => "SIGUIENTE OT",
"placeholder_ot_id" => "Introduce el ID de la OT",
"fa_ot_input_form_text" => "Introduce una OT para terminar la actual e iniciar la siguiente.",
"scan_ot_input_form_text" => "Introduce una OT para añadirla al proceso",
"next_scan_ot" => "Comenzar"
], ],
'tarea_estados' => [ 'tarea_estados' => [
@ -176,4 +188,11 @@ return [
"comentariosEncuadernacion" => "Comentarios encuadernación", "comentariosEncuadernacion" => "Comentarios encuadernación",
"comentariosLogistica" => "Comentarios logística", "comentariosLogistica" => "Comentarios logística",
"info_solapa_guillotina" => "Datos solapa y preparación guillotina", "info_solapa_guillotina" => "Datos solapa y preparación guillotina",
"errors" => [
"maquina_not_in_ot" => "Esta OT no tiene ninguna tarea con esta máquina",
"tareas_finalizadas" => "Las tareas de esta OT y máquina están marcadas como finalizadas",
"ot_not_found" => "La orden de trabajo número {ot_id} no existe"
]
]; ];

View File

@ -5,6 +5,7 @@ namespace App\Models\OrdenTrabajo;
use App\Entities\Produccion\OrdenTrabajoEntity; use App\Entities\Produccion\OrdenTrabajoEntity;
use CodeIgniter\Database\BaseBuilder; use CodeIgniter\Database\BaseBuilder;
use CodeIgniter\Model; use CodeIgniter\Model;
class OrdenTrabajoModel extends Model class OrdenTrabajoModel extends Model
{ {
protected $table = 'ordenes_trabajo'; protected $table = 'ordenes_trabajo';
@ -75,41 +76,71 @@ class OrdenTrabajoModel extends Model
protected $beforeDelete = []; protected $beforeDelete = [];
protected $afterDelete = []; protected $afterDelete = [];
public function getDatatableQuery() : BaseBuilder public function getDatatableQuery(): BaseBuilder
{ {
$q = $this->builder() $q = $this->builder()
->select([ ->select([
"ordenes_trabajo.id", "ordenes_trabajo.id",
"ordenes_trabajo.pedido_id", "ordenes_trabajo.pedido_id",
"pedidos.fecha_encuadernado as fecha_encuadernado_at", "pedidos.fecha_encuadernado as fecha_encuadernado_at",
"clientes.nombre as cliente_nombre", "clientes.nombre as cliente_nombre",
"presupuestos.titulo as presupuesto_titulo", "presupuestos.titulo as presupuesto_titulo",
"ordenes_trabajo.estado", "ordenes_trabajo.estado",
"ubicaciones.nombre as ubicacion_nombre", "ubicaciones.nombre as ubicacion_nombre",
"pedidos.total_tirada", "pedidos.total_tirada",
"tipos_presupuestos.codigo as tipo_presupuesto_impresion", "tipos_presupuestos.codigo as tipo_presupuesto_impresion",
"ordenes_trabajo.progreso", "ordenes_trabajo.progreso",
"presupuesto_linea.tipo as presupuesto_linea_tipo", "presupuesto_linea.tipo as presupuesto_linea_tipo",
"orden_trabajo_dates.ferro_ok_at", "orden_trabajo_dates.ferro_ok_at",
"CONCAT(lg_imposiciones.ancho,'x',lg_imposiciones.alto,'_',COALESCE(lg_imposiciones.unidades,'NULL'),'_',COALESCE(lg_imposiciones.orientacion,'NULL')) as imposicion_name" "CONCAT(lg_imposiciones.ancho,'x',lg_imposiciones.alto,'_',COALESCE(lg_imposiciones.unidades,'NULL'),'_',COALESCE(lg_imposiciones.orientacion,'NULL')) as imposicion_name"
]) ])
->join("orden_trabajo_dates","orden_trabajo_dates.orden_trabajo_id = ordenes_trabajo.id","left") ->join("orden_trabajo_dates", "orden_trabajo_dates.orden_trabajo_id = ordenes_trabajo.id", "left")
->join("pedidos","pedidos.id = ordenes_trabajo.pedido_id","left") ->join("pedidos", "pedidos.id = ordenes_trabajo.pedido_id", "left")
->join("pedidos_linea","pedidos.id = pedidos_linea.pedido_id","left") ->join("pedidos_linea", "pedidos.id = pedidos_linea.pedido_id", "left")
->join("presupuestos","presupuestos.id = pedidos_linea.presupuesto_id","left") ->join("presupuestos", "presupuestos.id = pedidos_linea.presupuesto_id", "left")
->join("presupuesto_linea","presupuestos.id = presupuesto_linea.presupuesto_id","left") ->join("presupuesto_linea", "presupuestos.id = presupuesto_linea.presupuesto_id", "left")
->join("clientes","clientes.id = presupuestos.cliente_id","left") ->join("clientes", "clientes.id = presupuestos.cliente_id", "left")
->join("tipos_presupuestos","presupuestos.tipo_impresion_id = tipos_presupuestos.id","left") ->join("tipos_presupuestos", "presupuestos.tipo_impresion_id = tipos_presupuestos.id", "left")
->join("ubicaciones","ubicaciones.id = pedidos_linea.ubicacion_id","left") ->join("ubicaciones", "ubicaciones.id = pedidos_linea.ubicacion_id", "left")
->join("orden_trabajo_tareas","orden_trabajo_tareas.orden_trabajo_id = ordenes_trabajo.id","left") ->join("orden_trabajo_tareas", "orden_trabajo_tareas.orden_trabajo_id = ordenes_trabajo.id", "left")
->join("lg_imposiciones","lg_imposiciones.id = orden_trabajo_tareas.imposicion_id","left") ->join("lg_imposiciones", "lg_imposiciones.id = orden_trabajo_tareas.imposicion_id", "left")
->whereIn("presupuesto_linea.tipo",["lp_bn","lp_bnhq","lp_rot_bn","lp_color","lp_colorhq","lp_rot_color"]) ->whereIn("presupuesto_linea.tipo", ["lp_bn", "lp_bnhq", "lp_rot_bn", "lp_color", "lp_colorhq", "lp_rot_color"])
->where("ordenes_trabajo.deleted_at",null) ->where("ordenes_trabajo.deleted_at", null)
->groupBy("ordenes_trabajo.id"); ->groupBy("ordenes_trabajo.id");
return $q; return $q;
} }
public function queryMaquinaTareas(int $maquina_id, ?array $tareaEstados = null)
{
$query = $this->builder()->select([
'orden_trabajo_tareas.*',
'tarea_progress.estado'
])
->join('orden_trabajo_tareas', 'orden_trabajo_tareas.orden_trabajo_id = ordenes_trabajo.id', 'left')
->join('lg_maquinas', 'orden_trabajo_tareas.maquina_id = lg_maquinas.id', 'left');
//* Obtener el ultimo estado de la tarea
if ($tareaEstados) {
$query->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'
)
->groupStart()
->whereIn('tarea_progress.estado', $tareaEstados)
->orWhere('tarea_progress.estado',null)
->groupEnd();
}
$query->where('orden_trabajo_tareas.deleted_at', null)
->where('lg_maquinas.id', $maquina_id)
->groupBy('orden_trabajo_tareas.id');
return $query;
}
} }

View File

@ -3,6 +3,7 @@
namespace App\Models\OrdenTrabajo; namespace App\Models\OrdenTrabajo;
use App\Entities\Produccion\OrdenTrabajoTareaEntity; use App\Entities\Produccion\OrdenTrabajoTareaEntity;
use App\Entities\Produccion\OrdenTrabajoTareaProgressDateEntity;
use CodeIgniter\Database\MySQLi\Builder; use CodeIgniter\Database\MySQLi\Builder;
use CodeIgniter\Model; use CodeIgniter\Model;
@ -11,7 +12,7 @@ class OrdenTrabajoTareaProgressDate extends Model
protected $table = 'orden_trabajo_tarea_progress_dates'; protected $table = 'orden_trabajo_tarea_progress_dates';
protected $primaryKey = 'id'; protected $primaryKey = 'id';
protected $useAutoIncrement = true; protected $useAutoIncrement = true;
protected $returnType = OrdenTrabajoTareaEntity::class; protected $returnType = OrdenTrabajoTareaProgressDateEntity::class;
protected $useSoftDeletes = true; protected $useSoftDeletes = true;
protected $protectFields = true; protected $protectFields = true;
protected $allowedFields = [ protected $allowedFields = [

View File

@ -253,8 +253,7 @@ class PresupuestoService extends BaseService
$linea['fields']['precio_libro'] = $linea['fields']['pliegos_libro'] * $linea['fields']['precios_pliegos']; $linea['fields']['precio_libro'] = $linea['fields']['pliegos_libro'] * $linea['fields']['precios_pliegos'];
// Precio papel pedido // Precio papel pedido
$linea['fields']['precio_pedido'] = $linea['fields']['precio_libro'] * ($datosPedido->tirada + $datosPedido->merma); $linea['fields']['precio_pedido'] = $linea['fields']['precio_libro'] * ($datosPedido->tirada + $datosPedido->merma);
$linea['fields']['margen_papel_pedido'] = $linea['fields']['pliegos_libro'] * $margen_pliego_impresion * ($datosPedido->tirada + $datosPedido->merma); $linea['fields']['margen_papel_pedido'] = $linea['fields']['pliegos_libro'] * $margen_pliego_impresion * ($datosPedido->tirada + $datosPedido->merma);;
;
$linea['fields']['a_favor_fibra'] = $parametrosRotativa->a_favor_fibra; $linea['fields']['a_favor_fibra'] = $parametrosRotativa->a_favor_fibra;
$linea['fields']['maquina'] = $maquina->maquina; $linea['fields']['maquina'] = $maquina->maquina;
@ -615,9 +614,9 @@ class PresupuestoService extends BaseService
// precio tinta // precio tinta
$data['precio_tinta'] = round( $data['precio_tinta'] = round(
round(($data['peso_gotas_negro_pedido'] / 1000.0) * $maquina->precio_tinta_negro, 2) + round(($data['peso_gotas_negro_pedido'] / 1000.0) * $maquina->precio_tinta_negro, 2) +
round(($data['peso_gotas_cyan_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) + round(($data['peso_gotas_cyan_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) +
round(($data['peso_gotas_magenta_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) + round(($data['peso_gotas_magenta_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) +
round(($data['peso_gotas_amarillo_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2), round(($data['peso_gotas_amarillo_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2),
2 2
); );
@ -1907,8 +1906,8 @@ class PresupuestoService extends BaseService
$pedido = $modelPedido->find($pedido_id); $pedido = $modelPedido->find($pedido_id);
$serviceProduction->setPedido($pedido); $serviceProduction->setPedido($pedido);
if (!$pedido->orden_trabajo()) { if (!$pedido->orden_trabajo()) {
$r = $serviceProduction->createOrdenTrabajo(); $r = $serviceProduction->createOrdenTrabajo(true);
$modelPedido->set(['estado' => 'produccion'])->where('id', $pedido_id)->update(); $modelPedido->set(['estado' => 'produccion'])->where('id', $pedido_id)->update();
} }
} }
@ -1984,17 +1983,17 @@ class PresupuestoService extends BaseService
return $peso; return $peso;
} }
public static function ajustarPresupuesto($id, $precio_unidad = null, $unidades = null, $precio_total = null, $forzar_descuento = false){ public static function ajustarPresupuesto($id, $precio_unidad = null, $unidades = null, $precio_total = null, $forzar_descuento = false)
{
$precio_total_asignado = 0; $precio_total_asignado = 0;
$precio_unidad_asignado = $precio_unidad; $precio_unidad_asignado = $precio_unidad;
$warning = false; $warning = false;
$model = model('App\Models\Presupuestos\PresupuestoModel'); $model = model('App\Models\Presupuestos\PresupuestoModel');
if($precio_unidad != null && $unidades != null){ if ($precio_unidad != null && $unidades != null) {
$precio_total_asignado = round(floatval($precio_unidad) * intval($unidades), 2); $precio_total_asignado = round(floatval($precio_unidad) * intval($unidades), 2);
} } else {
else{
$precio_total_asignado = floatval($precio_total); $precio_total_asignado = floatval($precio_total);
} }
$presupuesto = $model->find($id); $presupuesto = $model->find($id);
@ -2003,13 +2002,12 @@ class PresupuestoService extends BaseService
$total_descuento = 0; $total_descuento = 0;
$total_descuentoPercent = 0; $total_descuentoPercent = 0;
if($costes + $envio_base > $precio_total_asignado){ if ($costes + $envio_base > $precio_total_asignado) {
if($forzar_descuento){ if ($forzar_descuento) {
$total_descuento = $costes + $envio_base - $precio_total_asignado; $total_descuento = $costes + $envio_base - $precio_total_asignado;
$total_descuentoPercent = round($total_descuento / ($costes + $envio_base) * 100, 2); $total_descuentoPercent = round($total_descuento / ($costes + $envio_base) * 100, 2);
} } else {
else{
$precio_total_asignado = round($costes + $envio_base, 2); $precio_total_asignado = round($costes + $envio_base, 2);
$precio_unidad_asignado = round($precio_total_asignado / intval($unidades), 4); $precio_unidad_asignado = round($precio_total_asignado / intval($unidades), 4);
} }
@ -2021,22 +2019,22 @@ class PresupuestoService extends BaseService
$sumForFactor = floatval($presupuesto->total_coste_papel) + floatval($presupuesto->total_coste_impresion); $sumForFactor = floatval($presupuesto->total_coste_papel) + floatval($presupuesto->total_coste_impresion);
$sumForFactorPonderado = $sumForFactor + floatval($presupuesto->total_coste_servicios); $sumForFactorPonderado = $sumForFactor + floatval($presupuesto->total_coste_servicios);
$factor = ($precio_total_asignado - floatval($presupuesto->envio_base) $factor = ($precio_total_asignado - floatval($presupuesto->envio_base)
- floatval($presupuesto->total_coste_envios) - floatval($presupuesto->total_margen_envios)) / $sumForFactor; - floatval($presupuesto->total_coste_envios) - floatval($presupuesto->total_margen_envios)) / $sumForFactor;
$factorPonderado = ($precio_total_asignado - floatval($presupuesto->envio_base) $factorPonderado = ($precio_total_asignado - floatval($presupuesto->envio_base)
- floatval($presupuesto->total_coste_envios) - floatval($presupuesto->total_margen_envios)) / $sumForFactorPonderado; - floatval($presupuesto->total_coste_envios) - floatval($presupuesto->total_margen_envios)) / $sumForFactorPonderado;
if ($presupuesto) { if ($presupuesto) {
$presupuesto->total_margenes = $total_margenes; $presupuesto->total_margenes = $total_margenes;
$presupuesto->total_aceptado = $precio_total_asignado; $presupuesto->total_aceptado = $precio_total_asignado;
$presupuesto->total_aceptado_revisado = $precio_total_asignado; $presupuesto->total_aceptado_revisado = $precio_total_asignado;
$presupuesto->total_presupuesto = $precio_total_asignado; $presupuesto->total_presupuesto = $precio_total_asignado;
$presupuesto->total_antes_descuento = $precio_total_asignado - $costes - $envio_base < 0 ? $presupuesto->total_antes_descuento = $precio_total_asignado - $costes - $envio_base < 0 ?
$costes + $envio_base : $costes + $envio_base :
$precio_total_asignado; $precio_total_asignado;
$presupuesto->total_precio_unidad = $precio_unidad_asignado; $presupuesto->total_precio_unidad = $precio_unidad_asignado;
$presupuesto->total_descuento = $total_descuento; $presupuesto->total_descuento = $total_descuento;
$presupuesto->total_descuentoPercent = $total_descuentoPercent; $presupuesto->total_descuentoPercent = $total_descuentoPercent;

View File

@ -52,6 +52,7 @@ class ProductionService extends BaseService
*/ */
public array $TIPOS_ROTATIVA = ['lp_rot_bn', 'lp_rot_color']; public array $TIPOS_ROTATIVA = ['lp_rot_bn', 'lp_rot_color'];
public array $OT_TAREA_STATUS_TITLE;
protected OrdenTrabajoModel $otModel; protected OrdenTrabajoModel $otModel;
protected OrdenTrabajoTarea $otTarea; protected OrdenTrabajoTarea $otTarea;
@ -211,6 +212,14 @@ class ProductionService extends BaseService
$this->statusColor = $this->ordenTrabajoConfig->OT_COLORS["sin_imprimir"]; $this->statusColor = $this->ordenTrabajoConfig->OT_COLORS["sin_imprimir"];
$this->configVariableModel = model(ConfigVariableModel::class); $this->configVariableModel = model(ConfigVariableModel::class);
$this->podValue = $this->configVariableModel->getVariable('POD')->value; $this->podValue = $this->configVariableModel->getVariable('POD')->value;
$this->OT_TAREA_STATUS_TITLE = [
"P" => lang('Produccion.tarea_estados.P'),
"F" => lang('Produccion.tarea_estados.F'),
"S" => lang('Produccion.tarea_estados.S'),
"I" => lang('Produccion.tarea_estados.I'),
"E" => lang('Produccion.tarea_estados.E'),
"D" => lang('Produccion.tarea_estados.D'),
];
} }
public function init(int $orden_trabajo_id): self public function init(int $orden_trabajo_id): self
@ -218,7 +227,11 @@ class ProductionService extends BaseService
try { try {
$this->maquinaModel = model(MaquinaModel::class); $this->maquinaModel = model(MaquinaModel::class);
$this->otModel = model(OrdenTrabajoModel::class); $this->otModel = model(OrdenTrabajoModel::class);
$this->ot = $this->otModel->find($orden_trabajo_id); $ot = $this->otModel->find($orden_trabajo_id);
if($ot == null){
throw new Exception(lang('Produccion.errors.ot_not_found',['ot_id' => $orden_trabajo_id]));
}
$this->ot = $ot;
$pedido = $this->ot->pedido(); $pedido = $this->ot->pedido();
$this->setPedido($pedido); $this->setPedido($pedido);
$this->defaultMaquinaCorte = $this->maquinaModel->where('nombre', $this->defaultMaquinaCorteName)->first(); $this->defaultMaquinaCorte = $this->maquinaModel->where('nombre', $this->defaultMaquinaCorteName)->first();
@ -597,6 +610,12 @@ class ProductionService extends BaseService
} }
return ["tareas" => $tareas]; return ["tareas" => $tareas];
} }
public function getTareasWithMaquina(int $maquina_id,?array $tareaEstados = null) : ?array
{
return $this->otModel->queryMaquinaTareas($maquina_id, $tareaEstados)
->where('ordenes_trabajo.id', $this->ot->id)
->get()->getResult(OrdenTrabajoTareaEntity::class);
}
public function getPdf() public function getPdf()
{ {
@ -994,9 +1013,9 @@ class ProductionService extends BaseService
$data["action_user_id"] = auth()->user()->id; $data["action_user_id"] = auth()->user()->id;
$lastDate = $this->otTareaProgressDate->where('ot_tarea_id', $data['ot_tarea_id'])->orderBy('action_at', 'DESC')->first(); $lastDate = $this->otTareaProgressDate->where('ot_tarea_id', $data['ot_tarea_id'])->orderBy('action_at', 'DESC')->first();
if ($lastDate) { if ($lastDate) {
if ($lastDate->estado == $data['estado']) { // if ($lastDate->estado == $data['estado']) {
throw new Exception(lang('Produccion.duplicate_estado_tarea_progress')); // throw new Exception(lang('Produccion.duplicate_estado_tarea_progress'));
} // }
if ($lastDate->estado == 'F') { if ($lastDate->estado == 'F') {
throw new Exception(lang('Produccion.task_already_finished')); throw new Exception(lang('Produccion.task_already_finished'));
} }
@ -1907,7 +1926,9 @@ class ProductionService extends BaseService
"pedidos.fecha_impresion", "pedidos.fecha_impresion",
"orden_trabajo_tareas.nombre as tareaName", "orden_trabajo_tareas.nombre as tareaName",
"orden_trabajo_tareas.maquina_id", "orden_trabajo_tareas.maquina_id",
"tarea_progress.estado as tareaEstado" "tarea_progress.estado as tareaEstado",
"tarea_progress.estado",
]) ])
->join("orden_trabajo_tareas", "orden_trabajo_tareas.orden_trabajo_id = ordenes_trabajo.id", "left") ->join("orden_trabajo_tareas", "orden_trabajo_tareas.orden_trabajo_id = ordenes_trabajo.id", "left")
//* Obtener el ultimo estado de la tarea //* Obtener el ultimo estado de la tarea
@ -1929,7 +1950,6 @@ class ProductionService extends BaseService
// ->where('pedidos.fecha_impresion IS NOT NULL', null, false) //! Dejar comentado por ahora // ->where('pedidos.fecha_impresion IS NOT NULL', null, false) //! Dejar comentado por ahora
->where('ordenes_trabajo.preimpresion_revisada', true) ->where('ordenes_trabajo.preimpresion_revisada', true)
->where("orden_trabajo_tareas.deleted_at", null) ->where("orden_trabajo_tareas.deleted_at", null)
->where("tarea_progress.estado", 'P')
->orderBy("pedidos.fecha_impresion", "ASC") ->orderBy("pedidos.fecha_impresion", "ASC")
->groupBy('orden_trabajo_tareas.id'); ->groupBy('orden_trabajo_tareas.id');
@ -2110,7 +2130,7 @@ class ProductionService extends BaseService
$data[$tareasAcabado->id] = 'plastificado_at'; $data[$tareasAcabado->id] = 'plastificado_at';
} }
if ($tarifaAcabado->rectractilado) { if ($tarifaAcabado->rectractilado) {
$data[$tareasAcabado->id] = 'rectractilado_at'; $data[$tareasAcabado->id] = 'retractilado_at';
} }
if ($tarifaAcabado->estampado) { if ($tarifaAcabado->estampado) {
$data[$tareasAcabado->id] = 'estampado_at'; $data[$tareasAcabado->id] = 'estampado_at';
@ -2132,7 +2152,7 @@ class ProductionService extends BaseService
$dateName = 'plastificado_at'; $dateName = 'plastificado_at';
} }
if ($tarifaAcabado->rectractilado) { if ($tarifaAcabado->rectractilado) {
$dateName = 'rectractilado_at'; $dateName = 'retractilado_at';
} }
if ($tarifaAcabado->plakene) { if ($tarifaAcabado->plakene) {
$dateName = 'plakene_at'; $dateName = 'plakene_at';
@ -2190,4 +2210,23 @@ class ProductionService extends BaseService
} }
return $dateName; return $dateName;
} }
public function getTitleTareaEstado($tarea_id): array
{
$estadoTitle = $this->OT_TAREA_STATUS_TITLE["P"];
$estadoColor = $this->ordenTrabajoConfig->OT_TAREA_STATUS_COLOR['P'];
$userName = null;
$progressDateEntity = $this->otTarea->find($tarea_id)->lastState();
if ($progressDateEntity) {
if (isset($this->OT_TAREA_STATUS_TITLE[$progressDateEntity->estado])) {
$estadoTitle = $this->OT_TAREA_STATUS_TITLE[$progressDateEntity->estado];
$estadoColor = $this->ordenTrabajoConfig->OT_TAREA_STATUS_COLOR[$progressDateEntity->estado];
$userName = $progressDateEntity->user()->fullName();
}
}
return [
"title" => $estadoTitle,
"color" => $estadoColor,
"userName" => $userName ?? "",
];
}
} }

View File

@ -0,0 +1,45 @@
<div class="card h-100">
<div class="card-body">
<div class="row h-100">
<div class="col-9">
<div class="d-flex flex-column justify-content-evenly gap-2 h-100">
<div class="row mb-2">
<div class="col-md-12">
<h4 class="alert-heading d-flex align-items-center gap-1">
<span id="ot-id-header" style="color:red"></span>
<span id="presupuesto-id" class="fs-bold"></span>
<span id="ot-title" class="fs-bold"></span></h4>
</div>
<div class="col-md-6">
<p class="mb-0">Tiempo estimado</p>
<h4 class="mb-0" id="tiempo-estimado-info">00:00:00</h4>
</div>
<div class="col-md-6">
<p class="mb-0">Tiempo real</p>
<h4 class="mb-0" id="tiempo-real-info">00:00:00</h4>
</div>
</div>
<div class="row">
<div class="col-md-12 form-group form-group-lg">
<label for="input-click-init" class="form-label"><?= lang('Produccion.click_init') ?></label>
<input class="form-control input-lg ot-tarea-click" min="0" name="click_init" id="input-click-init" placeholder="<?= lang('Produccion.click_init') ?>" value="0">
</div>
<div class="col-md-12 form-group form-group-lg">
<label for="input-click-init" class="form-label input-lg"><?= lang('Produccion.click_end') ?></label>
<input class="form-control ot-tarea-click" min="0" name="click_end" id="input-click-end" placeholder="<?= lang('Produccion.click_end') ?>" value="0">
</div>
</div>
</div>
</div>
<div class="col-3 h-100">
<div class="d-flex flex-column justify-content-evenly gap-2 h-100">
<button type="button" id="btn-cancel-tarea" class="maquina-btn btn btn-danger w-100 d-flex justify-content-evenly"><span class="ti ti-square-x ti-lg"></span><?= lang('Produccion.maquinista.cancel') ?></button>
<button type="button" id="btn-finish-tarea" class="maquina-btn btn btn-primary w-100 d-flex justify-content-evenly action-btn"><span class="ti ti-player-eject ti-lg"></span><?= lang('Produccion.maquinista.play_end') ?></button>
</div>
</div>
</div>
</div>
</div>

View File

@ -1,9 +1,9 @@
<div class="table-maquinista table-responsive"> <div class="table-maquinista table-responsive">
<table id="maquinista-tarea-table" class="table table-hover text-dark" style="width: 100%;"> <table id="<?= $id ?>" class="table table-hover text-dark" style="width: 100%;">
<thead> <thead>
<tr> <tr>
<th><?= lang('ID') ?></th> <th><?= lang('OT ID') ?></th>
<th><?= lang('Produccion.task.task') ?></th> <th><?= lang('Produccion.task.task') ?></th>
<th><?= lang('Produccion.task.estado') ?></th> <th><?= lang('Produccion.task.estado') ?></th>
<th><?= lang('Produccion.datatable.fecha_impresion') ?></th> <th><?= lang('Produccion.datatable.fecha_impresion') ?></th>

View File

@ -5,6 +5,7 @@
<tr> <tr>
<th><?= lang('Produccion.task.order') ?></th> <th><?= lang('Produccion.task.order') ?></th>
<th><?= lang('Produccion.task.task') ?></th> <th><?= lang('Produccion.task.task') ?></th>
<th><?= lang('Produccion.task.estado') ?></th>
<th><?= lang('Produccion.task.maquina_presupuesto') ?></th> <th><?= lang('Produccion.task.maquina_presupuesto') ?></th>
<th><?= lang('Produccion.task.maquina_actual') ?></th> <th><?= lang('Produccion.task.maquina_actual') ?></th>
<th><?= lang('Produccion.task.imposicion') ?></th> <th><?= lang('Produccion.task.imposicion') ?></th>

View File

@ -0,0 +1,63 @@
<?= $this->include('themes/_commonPartialsBs/select2bs5') ?>
<?= $this->include('themes/_commonPartialsBs/datatables') ?>
<?= $this->include('themes/_commonPartialsBs/sweetalert') ?>
<?= $this->include('themes/_commonPartialsBs/_confirm2delete') ?>
<?= $this->extend('themes/vuexy/main/defaultlayout') ?>
<?= $this->section('content'); ?>
<!--Content Body-->
<div class="row" id="viewMaquinistaFichajeAuto" data-id="<?= $maquinaEntity->id ?>">
<div class="col-md-12">
<div class="d-flex flex-row justify-content-end align-items-stretch mb-2 gap-2">
<a type="button" id="tarea-list-link" class="btn btn-primary" href="<?= route_to('viewProduccionMaquinaTareasList', $maquinaEntity->id) ?>"><span class="icon-base ti ti-list ti-xs me-1"></span> <?= lang('Produccion.maquinista.tarea_list') ?></a>
</div>
<div class="card">
<div class="card-body">
<div class="row mb-2">
<div class="col-md-8 mb-2">
<div class="alert alert-primary h-100 w-100" role="alert">
<h4 class="alert-heading d-flex align-items-center gap-1"><span style="color:red">AUTO: </span><span class="fs-bold"><?= $maquinaEntity->nombre ?></span></h4>
<hr>
<p class="mb-0">
<?= lang('Produccion.maquinista.fichaje_auto_alert_text') ?>
</p>
</div>
</div>
<div class="col-md-4 mb-2">
<label for="ot-id" class="form-label"><strong><?= lang('Produccion.maquinista.next_ot') ?></strong></label>
<input type="text" class="form-control h-50 fs-large" id="ot-id" name="orden_trabajo_id" placeholder="<?= lang('Produccion.maquinista.placeholder_ot_id') ?>">
<div class="fs-medium fs-bold mt-2"><?= lang('Produccion.maquinista.fa_ot_input_form_text') ?></div>
</div>
</div>
<div class="row">
<?= view('themes/_commonPartialsBs/_alertBoxes'); ?>
</div>
<div class="row mb-2 section-block d-none" id="ot-fa-card">
<div class="col-md-12">
<?= view('/themes/vuexy/components/cards/tarea_card_auto.php') ?>
</div>
</div>
</div>
</div>
</div>
</div>
<?= $this->endSection() ?>
<?= $this->section('css') ?>
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/formvalidation/dist/css/formValidation.min.css') ?>" />
<link rel="stylesheet" href="<?= site_url('themes/vuexy/css/maquinista.css') ?>" />
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/notiflix/notiflix.css') ?>" />
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/sweetalert2/sweetalert2.css') ?>" />
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/spinkit/spinkit.css') ?>" />
<?= $this->endSection() ?>
<?= $this->section("additionalExternalJs") ?>
<script src="<?= site_url("themes/vuexy/vendor/libs/notiflix/notiflix.js") ?>"></script>
<script src="<?= site_url("themes/vuexy/vendor/libs/formvalidation/dist/js/FormValidation.js") ?>"></script>
<script src="<?= site_url("themes/vuexy/vendor/libs/formvalidation/dist/js/plugins/Bootstrap5.min.js") ?>"></script>
<script src="<?= site_url("themes/vuexy/vendor/libs/formvalidation/dist/js/plugins/AutoFocus.min.js") ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/sweetalert2/sweetalert2.js') ?>"></script>
<script type="module" src="<?= site_url("/assets/js/safekat/pages/configuracion/maquinista/viewFichajeAuto.js") ?>"></script>
<?= $this->endSection() ?>

View File

@ -11,25 +11,27 @@ use CodeIgniter\I18n\Time;
?> ?>
<div class="row" id="viewMaquinistaMaquinaTareas" data-id="<?= $maquinaEntity->id ?>"> <div class="row" id="viewMaquinistaMaquinaTareas" data-id="<?= $maquinaEntity->id ?>">
<div class="col-md-12"> <div class="col-md-12">
<div class="d-flex flex-row justify-content-end align-items-stretch mb-2 gap-2">
<a type="button" href="<?= route_to('viewMaquinistaFichajeAutomatico', $maquinaEntity->id) ?>" id="btn-fichaje-automatico" class="btn btn-primary" aria-pressed="true"><span class="icon-base ti ti-wand ti-xs me-1"></span> <?= lang('Produccion.maquinista.fichaje_auto') ?></a>
<a type="button" href="<?= route_to('viewMaquinistaTareaScan', $maquinaEntity->id) ?>" id="btn-tarea-scan" class="btn btn-primary" aria-pressed="true"><span class="icon-base ti ti-scan ti-xs me-1"></span><?= lang('Produccion.maquinista.scan') ?></a>
</div>
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
<div id="tareas-aplazadas" class="d-none">
<?= view("/themes/vuexy/components/tables/maquinista_tarea_table.php", ["id" => "maquinista-tarea-aplazada-table"]) ?>
</div>
<div class="row mb-2 align-items-center"> <div class="row mb-2 align-items-center">
<div class="col-md-6 col-xs-12 justify-content-start "> <div class="col-md-6 col-xs-12 justify-content-start ">
<div class="d-flex flex-row justify-content-center align-items-stretch gap-2 h-100"> <div class="d-flex flex-row justify-content-start align-items-stretch gap-2 h-100">
<button type="button" id="btn-tareas-hoy" class="btn btn-primary h-100 active w-50" aria-pressed="true"><?= lang('Produccion.maquinista.tareas_hoy') ?></button> <button type="button" id="btn-tareas-hoy" class="btn btn-primary h-100 active" aria-pressed="true"><?= lang('Produccion.maquinista.tareas_hoy') ?></button>
<button type="button" id="btn-all-tareas" class="btn btn-primary h-100 w-50"><?= lang('Produccion.maquinista.tareas_all') ?></button> <button type="button" id="btn-all-tareas" class="btn btn-primary h-100"><?= lang('Produccion.maquinista.tareas_all') ?></button>
<button type="button" id="btn-delay-tasks" class="btn btn-warning h-100 w-50"><?= lang('Produccion.maquinista.tareas_delay') ?></button>
</div> </div>
</div> </div>
<div class="col-md-6 col-xs-12 justify-content-end d-flex"> <div class="col-md-6 col-xs-12 justify-content-end d-flex">
<span class="display-6" id="today-date"><?= Time::now()->format('d/m/Y') ?></span> <span class="display-6" id="today-date"><?= Time::now()->format('d/m/Y') ?></span>
</div> </div>
<!-- <div class="d-flex flex-row justify-content-end align-content-center gap-2">
<button type="button" class="btn btn-primary"><?= lang('Produccion.maquinista.maquinas') ?></button>
</div> -->
</div> </div>
<?= view("/themes/vuexy/components/tables/maquinista_tarea_table.php") ?> <?= view("/themes/vuexy/components/tables/maquinista_tarea_table.php", ["id" => "maquinista-tarea-table"]) ?>
</div> </div>
</div> </div>
</div> </div>

View File

@ -0,0 +1,71 @@
<?= $this->include('themes/_commonPartialsBs/select2bs5') ?>
<?= $this->include('themes/_commonPartialsBs/datatables') ?>
<?= $this->include('themes/_commonPartialsBs/sweetalert') ?>
<?= $this->include('themes/_commonPartialsBs/_confirm2delete') ?>
<?= $this->extend('themes/vuexy/main/defaultlayout') ?>
<?= $this->section('content'); ?>
<!--Content Body-->
<div class="row" id="viewMaquinistaTareaScan" data-id="<?= $maquinaEntity->id ?>">
<div class="col-md-12">
<div class="d-flex flex-row justify-content-end align-items-stretch mb-2 gap-2">
<a type="button" id="tarea-list-link" class="btn btn-primary" href="<?= route_to('viewProduccionMaquinaTareasList', $maquinaEntity->id) ?>"><span class="icon-base ti ti-list ti-xs me-1"></span> <?= lang('Produccion.maquinista.tarea_list') ?></a>
</div>
<div class="card">
<div class="card-body">
<h4 class="alert-heading d-flex align-items-center gap-1"><span style="color:red">ESCANEAR: </span><span class="fs-bold"><?= $maquinaEntity->nombre ?></span></h4>
<div class="row mb-2">
<?= view('themes/_commonPartialsBs/_alertBoxes'); ?>
<div class="col-md-8 mb-2">
<div class="table-responsive">
<table id="table-scanned-ots" class="table-maquinista table table-hover table-sm">
<thead>
<tr>
<th><?= lang('Produccion.datatable.ot_id') ?></th>
<th><?= lang('Produccion.datatable.titulo') ?></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
<div class="col-md-4">
<div class="col-md-12 mb-2">
<label for="ot-id" class="form-label"><strong><?= lang('Produccion.maquinista.next_ot') ?></strong></label>
<input type="text" class="form-control h-50 fs-large" id="ot-id" name="orden_trabajo_id" placeholder="<?= lang('Produccion.maquinista.placeholder_ot_id') ?>">
<div class="fs-medium fs-bold mt-2"><?= lang('Produccion.maquinista.scan_ot_input_form_text') ?></div>
</div>
<div class="col-md-12 mb-2">
<button type="button" class="maquina-btn btn btn-primary w-100">
<span class="icon-base ti ti-arrow-big-right me-1"></span>
<?= lang('Produccion.maquinista.next_scan_ot') ?>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<?= $this->endSection() ?>
<?= $this->section('css') ?>
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/formvalidation/dist/css/formValidation.min.css') ?>" />
<link rel="stylesheet" href="<?= site_url('themes/vuexy/css/maquinista.css') ?>" />
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/notiflix/notiflix.css') ?>" />
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/sweetalert2/sweetalert2.css') ?>" />
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/spinkit/spinkit.css') ?>" />
<?= $this->endSection() ?>
<?= $this->section("additionalExternalJs") ?>
<script src="<?= site_url("themes/vuexy/vendor/libs/notiflix/notiflix.js") ?>"></script>
<script src="<?= site_url("themes/vuexy/vendor/libs/formvalidation/dist/js/FormValidation.js") ?>"></script>
<script src="<?= site_url("themes/vuexy/vendor/libs/formvalidation/dist/js/plugins/Bootstrap5.min.js") ?>"></script>
<script src="<?= site_url("themes/vuexy/vendor/libs/formvalidation/dist/js/plugins/AutoFocus.min.js") ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/sweetalert2/sweetalert2.js') ?>"></script>
<script type="module" src="<?= site_url("/assets/js/safekat/pages/configuracion/maquinista/viewMaquinistaScan.js") ?>"></script>
<?= $this->endSection() ?>

View File

@ -22,7 +22,11 @@
<i class="ti ti-dimensions ti-lg"></i> <i class="ti ti-dimensions ti-lg"></i>
</div> </div>
<div class="card-info"> <div class="card-info">
<h5 class="mb-0" id="ot-formato"><?=$presupuesto->papel_formato()->ancho?>x<?=$presupuesto->papel_formato()->alto?></h5> <?php if ($presupuesto->papel_formato_personalizado): ?>
<h5 class="mb-0" id="ot-formato"><?= $presupuesto->papel_formato_ancho ?>x<?= $presupuesto->papel_formato_alto ?></h5>
<?php else: ?>
<h5 class="mb-0" id="ot-formato"><?= $presupuesto->papel_formato()->ancho ?>x<?= $presupuesto->papel_formato()->alto ?></h5>
<?php endif; ?>
<span class="fx-large"><?= @lang("Produccion.formato") ?></span> <span class="fx-large"><?= @lang("Produccion.formato") ?></span>
</div> </div>
</div> </div>
@ -33,30 +37,32 @@
<i class="ti ti-box-multiple ti-lg"></i> <i class="ti ti-box-multiple ti-lg"></i>
</div> </div>
<div class="card-info"> <div class="card-info">
<h5 class="mb-0" id="ot-paginas"><?=$presupuesto->paginas?></h5> <h5 class="mb-0" id="ot-paginas"><?= $presupuesto->paginas ?></h5>
<span class="fx-large"><?= @lang("Produccion.paginas") ?></span> <span class="fx-large"><?= @lang("Produccion.paginas") ?></span>
</div> </div>
</div> </div>
</div> </div>
<div class="col-md-2 col-6"> <?php if ($presupuesto->solapas): ?>
<div class="d-flex align-items-center"> <div class="col-md-2 col-6">
<div class="badge rounded-pill bg-label-danger me-3 p-2"> <div class="d-flex align-items-center">
<i class="ti ti-bookmark ti-lg"></i> <div class="badge rounded-pill bg-label-danger me-3 p-2">
</div> <i class="ti ti-bookmark ti-lg"></i>
<div class="card-info"> </div>
<h5 class="mb-0" id="ot-solapa"><?=$presupuesto->solapas > 0 ? $presupuesto->solapas : 0?></h5> <div class="card-info">
<h5 class="mb-0" id="ot-solapa"><?= number_format($presupuesto->solapas_ancho, 2, ',', '.') ?> mm</h5>
<span class="fx-large"><?= @lang("Produccion.solapa") ?></span> <span class="fx-large"><?= @lang("Produccion.solapa") ?></span>
</div>
</div> </div>
</div> </div>
</div> <?php endif; ?>
<div class="col-md-2 col-6"> <div class="col-md-2 col-6">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<div class="badge rounded-pill bg-label-success me-3 p-2"> <div class="badge rounded-pill bg-label-success me-3 p-2">
<i class="ti ti-books ti-lg"></i> <i class="ti ti-books ti-lg"></i>
</div> </div>
<div class="card-info"> <div class="card-info">
<h5 class="mb-0" id="ot-tirada"><?=$presupuesto->tirada?></h5> <h5 class="mb-0" id="ot-tirada"><?= $presupuesto->tirada ?></h5>
<span class="fx-large"><?= @lang("Produccion.tirada") ?></span> <span class="fx-large"><?= @lang("Produccion.tirada") ?></span>
</div> </div>
@ -68,7 +74,7 @@
<i class="ti ti-notebook ti-lg"></i> <i class="ti ti-notebook ti-lg"></i>
</div> </div>
<div class="card-info"> <div class="card-info">
<h5 class="mb-0" id="ot-merma"><?=$presupuesto->merma?></h5> <h5 class="mb-0" id="ot-merma"><?= $presupuesto->merma ?></h5>
<span class="fx-large"><?= @lang("Produccion.merma") ?></span> <span class="fx-large"><?= @lang("Produccion.merma") ?></span>
</div> </div>

View File

@ -1,5 +1,5 @@
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<?= view("themes/vuexy/components/dropzone",data: ['id' => 'dropzone-ot-files','modelId' => $modelId]) ?> <?= view("themes/vuexy/components/dropzone",data: ['id' => 'dropzone-ot-files','modelId' => $presupuesto->id]) ?>
</div><!--//.col --> </div><!--//.col -->
</div><!--//.row --> </div><!--//.row -->

View File

@ -22,11 +22,6 @@ if (auth()->user()->inGroup('maquina','admin')) {
<div><?= lang("App.menu_maquinista_colas") ?></div> <div><?= lang("App.menu_maquinista_colas") ?></div>
</a> </a>
</li> </li>
<li class="menu-item">
<a href="<?= route_to("viewProduccionMaquinistaMantenimiento") ?>" class="menu-link beta">
<div><?= lang("App.menu_maquinista_mantenimiento") ?></div>
</a>
</li>
</ul> </ul>
</li> </li>
<?php } ?> <?php } ?>

View File

@ -286,9 +286,7 @@ $settings = $session->get('settings');
</div> </div>
</div> </div>
</div> </div>
<div class="col-md-12 d-flex justify-content-center align-items-center">
<span class="footer">&copy; 2024 SAFEKAT. Todos los derechos reservados.</span>
</div>
<script src=<?= site_url("themes/vuexy/vendor/libs/html2pdf/html2pdf.bundle.min.js") ?>></script> <script src=<?= site_url("themes/vuexy/vendor/libs/html2pdf/html2pdf.bundle.min.js") ?>></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/jquery/jquery.js') ?>"></script> <script src="<?= site_url('themes/vuexy/vendor/libs/jquery/jquery.js') ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/popper/popper.js') ?>"></script> <script src="<?= site_url('themes/vuexy/vendor/libs/popper/popper.js') ?>"></script>

View File

@ -393,11 +393,6 @@ $settings = $session->get('settings');
</div> </div>
</div> </div>
</div> </div>
<div class="col-md-12 d-flex justify-content-center align-items-center">
<span class="footer">&copy; 2024 SAFEKAT. Todos los derechos reservados.</span>
</div>
</div> </div>
</body> </body>
<script src=<?= site_url("themes/vuexy/vendor/libs/html2pdf/html2pdf.bundle.min.js") ?>></script> <script src=<?= site_url("themes/vuexy/vendor/libs/html2pdf/html2pdf.bundle.min.js") ?>></script>

View File

@ -391,9 +391,7 @@ $settings = $session->get('settings');
</div> </div>
</div> </div>
</div> </div>
<div class="col-md-12 d-flex justify-content-center align-items-center">
<span class="footer">&copy; 2024 SAFEKAT. Todos los derechos reservados.</span>
</div>
<script src=<?= site_url("themes/vuexy/vendor/libs/html2pdf/html2pdf.bundle.min.js") ?>></script> <script src=<?= site_url("themes/vuexy/vendor/libs/html2pdf/html2pdf.bundle.min.js") ?>></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/jquery/jquery.js') ?>"></script> <script src="<?= site_url('themes/vuexy/vendor/libs/jquery/jquery.js') ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/popper/popper.js') ?>"></script> <script src="<?= site_url('themes/vuexy/vendor/libs/popper/popper.js') ?>"></script>

View File

@ -0,0 +1,175 @@
import Ajax from '../../../components/ajax.js'
import { alertConfirmAction, alertError, alertSuccess } from '../../../components/alerts/sweetAlert.js'
class MaquinistaFichajeAuto {
constructor(domItem) {
this.item = domItem
/** ELEMENT DOM VARIABLES */
this.otInputId = this.item.find('#ot-id')
this.wrapperCard = this.item.find('#ot-fa-card')
this.btnCancelTarea = this.item.find('#btn-cancel-tarea')
this.btnFinishTarea = this.item.find('#btn-finish-tarea')
this.inputClickInit = this.item.find("#input-click-init")
this.inputClickEnd = this.item.find("#input-click-end")
this.otId = null
this.lastOtId = null
this.maquinaId = this.item.data("id")
this.tareas = []
}
init() {
Notiflix.Block.circle('.section-block');
this.otInputId.trigger('focus')
this.otInputId.on('change', this._handleGetOt.bind(this))
this.btnFinishTarea.on('click', this._handleFinishTareasConfirm.bind(this))
}
hideCard() {
this.wrapperCard.addClass('d-none')
}
showCard() {
this.wrapperCard.removeClass('d-none')
}
actionLoader(status = true) {
if (status) {
Notiflix.Block.circle('.section-block');
} else {
Notiflix.Block.remove('.section-block');
}
}
getFormData() {
return {
maquina_id: this.maquinaId,
tareas: this.tareas,
click_init: this.inputClickInit.val() ?? 0,
click_end: this.inputClickEnd.val() ?? 0
}
}
fillData(data) {
this.lastOtId = data.ot.id
this.item.find('#ot-id-header').text(data.ot.id)
this.item.find('#presupuesto-id').text(data.presupuesto.id)
this.item.find('#ot-title').text(data.presupuesto.titulo)
if (data.tareas) {
this.tareas = data.tareas.map(tarea => tarea.id)
}
}
_handleGetOt() {
this.otId = this.otInputId.val();
this.otInputId.removeClass('is-valid')
this.otInputId.removeClass('is-invalid')
this.actionLoader(false)
let ajax = new Ajax(
`/produccion/ordentrabajo/tareas/maquina/${this.otId}/${this.maquinaId}`,
null,
null,
this._handleGetOtSuccess.bind(this),
this._handleGetOtError.bind(this)
)
if (this.otId) {
ajax.get();
}
}
_handleGetOtSuccess(response) {
this.showCard();
if (this.lastOtId) {
console.log("Siguiente OT insertada")
console.log("Iniciar ", this.otId)
if (this.lastOtId != this.otId) {
console.log("Finalizar", this.lastOtId)
this._handleFinishTareas(this.lastOtId)
}
} else {
console.log("Primera OT insertada")
}
this.otInputId.addClass('is-valid')
popSuccessAlert(response.message)
this.actionLoader(false)
if (response.data) {
this.fillData(response.data)
response.data.tareas.forEach(tarea => {
this._handleInitTareas(tarea.id, 'I')
});
}
}
_handleGetOtError(error) {
this.hideCard()
this.otInputId.addClass('is-invalid')
popErrorAlert(error.responseJSON.message)
}
_handleInitTareas(tareaId, estado = 'I') {
let ajax = new Ajax('/produccion/ordentrabajo/update/tarea/progress',
{
ot_tarea_id: tareaId,
estado: estado
}, null,
this._handleInitTareasSuccess.bind(this),
this._handleInitTareasError.bind(this)
);
if (tareaId) {
ajax.post();
}
}
_handleInitTareasSuccess() { }
_handleInitTareasError() { }
_handleFinishTareas(otId) {
let ajax = new Ajax('/produccion/ordentrabajo/fa/tareas/finish',
{
orden_trabajo_id: otId,
...this.getFormData()
}, null,
this._handleFinishTareasSucess.bind(this),
this._handleFinishTareasError.bind(this)
);
ajax.post()
}
_handleFinishTareasConfirm(event) {
let otId = this.otInputId.val()
console.log("Finalizar", otId);
let ajax = new Ajax('/produccion/ordentrabajo/fa/tareas/finish',
{
orden_trabajo_id: otId,
...this.getFormData()
}, null,
this._handleFinishTareasConfirmSucess.bind(this),
this._handleFinishTareasConfirmError.bind(this)
);
if (otId) {
alertConfirmAction('Se va finalizar la tarea actual y se cancelará el modo auto.')
.then((result) => {
if (result.isConfirmed) {
ajax.post();
}
})
}
}
_handleFinishTareasConfirmSucess(response) {
this.hideCard()
this.otInputId.val(null)
this.otId = null
this.lastOtId = null
this.tareas = []
popSuccessAlert(response.message)
}
_handleFinishTareasConfirmError() { }
_handleFinishTareasSucess() { }
_handleFinishTareasError() { }
}
export default MaquinistaFichajeAuto;

View File

@ -0,0 +1,109 @@
import Ajax from '../../../components/ajax.js'
import { alertConfirmAction, alertError, alertSuccess } from '../../../components/alerts/sweetAlert.js'
class MaquinistaScan {
constructor(domItem) {
this.item = domItem
/** ELEMENT DOM VARIABLES */
this.otInputId = this.item.find('#ot-id')
this.wrapperCard = this.item.find('#ot-fa-card')
this.otId = null
this.maquinaId = this.item.data("id")
this.ots = []
this.datatableItem = this.item.find('#table-scanned-ots')
this.datatableColumns = [
{ data: 'id', searchable: false, sortable: false },
{ data: 'title', searchable: false, sortable: false },
]
this.datatableData = [];
}
init() {
this.otInputId.trigger('focus')
this.otInputId.on('change', this.addOt.bind(this))
this.datatable = this.datatableItem.DataTable({
processing: true,
serverSide: false,
ordering: false,
dom: "",
language: {
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
},
columns: this.datatableColumns,
data: this.datatableData
});
}
hideCard() {
this.wrapperCard.addClass('d-none')
}
showCard() {
this.wrapperCard.removeClass('d-none')
}
actionLoader(status = true) {
if (status) {
Notiflix.Block.circle('.section-block');
} else {
Notiflix.Block.remove('.section-block');
}
}
reloadFocus(){
this.otInputId.val("")
this.otInputId.trigger('focus')
}
async addOt() {
try {
if (this.ots.includes(this.otInputId.val())) {
throw new Error("Esta OT ya ha sido introducida");
}
if (this.otInputId.val()) {
let response = await this.getOt(this.otInputId.val())
console.log(response)
const data = response.data
this.ots.push(data.ot.id)
this.datatable.rows.add([{
id: data.ot.id,
title: data.presupuesto.titulo
}])
this.datatable.draw()
this.reloadFocus()
}
} catch (error) {
console.log(error)
this.reloadFocus()
if (error?.responseJSON) {
popErrorAlert(error.responseJSON.message)
} else {
popErrorAlert(error)
}
}
}
getOt(otId) {
return new Promise((resolve, reject) => {
let ajax = new Ajax(
`/produccion/ordentrabajo/tareas/maquina/${otId}/${this.maquinaId}`,
null,
null,
(response) => {
resolve(response)
},
(error) => {
reject(error)
}
)
ajax.get();
})
}
}
export default MaquinistaScan;

View File

@ -4,13 +4,15 @@ class MaquinistaTareaList {
this.item = domItem this.item = domItem
this.maquinaId = this.item.data("id") this.maquinaId = this.item.data("id")
this.datatableItem = $("#maquinista-tarea-table") this.datatableItem = $("#maquinista-tarea-table")
this.datatableTareaAplazadaItem = this.item.find('#maquinista-tarea-aplazada-table')
this.wrapperDatatableTareaAplazada = this.item.find('#tareas-aplazadas')
this.btnTareasHoy = $("#btn-tareas-hoy") this.btnTareasHoy = $("#btn-tareas-hoy")
this.todayDate = $('#today-date') this.todayDate = $('#today-date')
this.btnAllTareas = $("#btn-all-tareas") this.btnAllTareas = $("#btn-all-tareas")
this.datatableColumns = [ this.datatableColumns = [
{ data: 'otId', searchable: false, sortable: false }, { data: 'otId', searchable: false, sortable: false },
{ data: 'tareaName', searchable: false, sortable: false }, { data: 'tareaName', searchable: false, sortable: false },
{ data: 'tareaEstado', searchable: false, sortable: false,render : this.renderStado.bind(this)}, { data: 'tareaEstado', searchable: false, sortable: false, render: this.renderStado.bind(this) },
// { data: 'presupuesto_titulo', searchable: false, sortable: false }, // { data: 'presupuesto_titulo', searchable: false, sortable: false },
// { data: 'papel_impresion', searchable: false, sortable: false }, // { data: 'papel_impresion', searchable: false, sortable: false },
// { data: 'papel_gramaje', searchable: false, sortable: false }, // { data: 'papel_gramaje', searchable: false, sortable: false },
@ -18,27 +20,28 @@ class MaquinistaTareaList {
{ data: 'action', searchable: false, sortable: false, width: "20rem" }, { data: 'action', searchable: false, sortable: false, width: "20rem" },
] ]
this.urlAll = '/produccion/ordentrabajo/maquinista/maquinas/tareas/datatable/all/' + this.maquinaId this.urlAll = '/produccion/ordentrabajo/maquinista/maquinas/tareas/datatable/all/' + this.maquinaId
this.urlAplazada = '/produccion/ordentrabajo/maquinista/maquinas/tareas/aplazadas/datatable/' + this.maquinaId
this.urlToday = '/produccion/ordentrabajo/maquinista/maquinas/tareas/datatable/today/' + this.maquinaId this.urlToday = '/produccion/ordentrabajo/maquinista/maquinas/tareas/datatable/today/' + this.maquinaId
this.initTable() this.initTable()
this.estadoClass = { this.estadoClass = {
I : 'primary', I: 'primary',
P : 'warning', P: 'warning',
S : 'warning', S: 'warning',
D : 'danger', D: 'danger',
F : 'success' F: 'success'
} }
this.estadoNames = { this.estadoNames = {
I : 'Iniciada', I: 'Iniciada',
P : 'Pendiente', P: 'Pendiente',
S : 'Pausada', S: 'Pausada',
D : 'Aplazada', D: 'Aplazada',
F : 'Finalizada' F: 'Finalizada'
} }
} }
init(){ init() {
this.btnTareasHoy.on('click',this.loadToday.bind(this)) this.btnTareasHoy.on('click', this.loadToday.bind(this))
this.btnAllTareas.on('click',this.loadAll.bind(this)) this.btnAllTareas.on('click', this.loadAll.bind(this))
} }
initTable() { initTable() {
@ -51,13 +54,28 @@ class MaquinistaTareaList {
bottomEnd: 'paging' bottomEnd: 'paging'
}, },
serverSide: true, serverSide: true,
pageLength: 25, pageLength: 100,
language: { language: {
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
}, },
columns: this.datatableColumns, columns: this.datatableColumns,
ajax: this.urlToday ajax: this.urlToday
}); });
this.datatableAplazada = this.datatableTareaAplazadaItem.DataTable({
processing: true,
layout: {
bottomStart: 'info',
bottomEnd: 'paging'
},
serverSide: true,
pageLength: 100,
language: {
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
},
columns: this.datatableColumns,
ajax: this.urlAplazada
});
this.datatableAplazada.on('draw.dt', this.handleShowTareasAplazadas.bind(this))
} }
loadToday() { loadToday() {
this.btnTareasHoy.removeClass('active') this.btnTareasHoy.removeClass('active')
@ -66,25 +84,34 @@ class MaquinistaTareaList {
this.btnAllTareas.removeAttr('aria-pressed') this.btnAllTareas.removeAttr('aria-pressed')
this.todayDate.removeClass('d-none') this.todayDate.removeClass('d-none')
this.btnTareasHoy.addClass('active') this.btnTareasHoy.addClass('active')
this.btnTareasHoy.attr('aria-pressed',true) this.btnTareasHoy.attr('aria-pressed', true)
this.datatable.ajax.url(this.urlToday) this.datatable.ajax.url(this.urlToday)
this.datatable.ajax.reload() this.datatable.ajax.reload()
} }
loadAll(){ loadAll() {
this.btnTareasHoy.removeClass('active') this.btnTareasHoy.removeClass('active')
this.btnTareasHoy.removeAttr('aria-pressed') this.btnTareasHoy.removeAttr('aria-pressed')
this.todayDate.addClass('d-none') this.todayDate.addClass('d-none')
this.btnAllTareas.addClass('active') this.btnAllTareas.addClass('active')
this.btnAllTareas.attr('aria-pressed',true) this.btnAllTareas.attr('aria-pressed', true)
this.datatable.ajax.url(this.urlAll) this.datatable.ajax.url(this.urlAll)
this.datatable.ajax.reload() this.datatable.ajax.reload()
} }
renderStado(d){ renderStado(d) {
return `<span class="badge text-bg-${this.estadoClass[d]}">${this.estadoNames[d]}</span>` return `<span class="badge" style="background-color:${d.color};color:white">${d.title}</span>`
}
handleShowTareasAplazadas() {
let totalTareasAplazadas = this.datatableAplazada.page.info().recordsTotal
console.log(totalTareasAplazadas)
if (totalTareasAplazadas > 0) {
this.wrapperDatatableTareaAplazada.removeClass('d-none')
} else {
this.wrapperDatatableTareaAplazada.addClass('d-none')
}
} }
} }

View File

@ -123,10 +123,12 @@ class MaquinistaTareaView {
} }
} }
handleGetTareaProgressSuccess(response) { handleGetTareaProgressSuccess(response) {
if (response.progress_dates) { if (response.progress_dates.length > 0) {
let lastStatus = response.progress_dates.findLast(e => e.estado != null).estado let lastStatus = response.progress_dates.findLast(e => e.estado != null).estado
console.log("Last status :", lastStatus) console.log("Last status :", lastStatus)
this.showBasedOnStatus(lastStatus) this.showBasedOnStatus(lastStatus)
}else{
this.showBasedOnStatus('P')
} }
this.item.find('#tiempo-real-info').html(response.tiempo_trabajado ?? "00:00") this.item.find('#tiempo-real-info').html(response.tiempo_trabajado ?? "00:00")
this.actionLoader(false) this.actionLoader(false)

View File

@ -0,0 +1,7 @@
import MaquinistaFichajeAuto from "./maquinistaFichajeAuto.js";
$(() => {
console.info("MAQUINISTA FA")
let maquinistaFA = new MaquinistaFichajeAuto($("#viewMaquinistaFichajeAuto"))
maquinistaFA.init();
})

View File

@ -0,0 +1,7 @@
import MaquinistaScan from "./maquinistaScan.js";
$(() => {
console.info("MAQUINISTA SCAN")
let maquinistaScan = new MaquinistaScan($("#viewMaquinistaTareaScan"))
maquinistaScan.init();
})

View File

@ -33,6 +33,7 @@ class OrdenTrabajo {
this.datatableColumns = [ this.datatableColumns = [
{ data: 'orden', searchable: true, sortable: true, render: this._renderOrdenTarea.bind(this) }, { data: 'orden', searchable: true, sortable: true, render: this._renderOrdenTarea.bind(this) },
{ data: 'nombre', searchable: true, sortable: true }, { data: 'nombre', searchable: true, sortable: true },
{ data: 'tarea_estado', searchable: false, sortable: false, render: this._renderTareaEstado.bind(this) },
{ {
data: 'maquina_presupuesto_linea', searchable: true, sortable: true, render: (d) => { data: 'maquina_presupuesto_linea', searchable: true, sortable: true, render: (d) => {
if (d) { if (d) {
@ -68,10 +69,9 @@ class OrdenTrabajo {
*/ */
this.configUploadDropzone = { this.configUploadDropzone = {
domElement: '#dropzone-ot-files', domElement: '#dropzone-ot-files',
nameId: "orden_trabajo_id", nameId: "presupuesto_id",
getUri: '/produccion/ordentrabajo/get_files', getUri: '/presupuestos/presupuestocliente/get_files',
postUri: '/produccion/ordentrabajo/upload_files', postUri: '/presupuestos/presupuestocliente/upload_files'
resourcePath: 'orden_trabajo/' + this.modelId
} }
if ($(this.configUploadDropzone.domElement).length > 0) { if ($(this.configUploadDropzone.domElement).length > 0) {
this.fileUploadDropzone = new FileUploadDropzone(this.configUploadDropzone) this.fileUploadDropzone = new FileUploadDropzone(this.configUploadDropzone)
@ -266,6 +266,22 @@ class OrdenTrabajo {
</div>` </div>`
return cell; return cell;
} }
_renderTareaEstado(d, t) {
let html = `
<div class="btn-group dropstart">
<button style="background-color:${d.color};color:white" class="btn btn-xs dropdown-toggle" type="button" data-bs-toggle="dropdown">
${d.title}
</button>
<ul class="dropdown-menu">
<li> <a class="dropdown-item" href="javascript:void(0);">${d.userName}</a> </li>
</ul>
</div>
`
if(d.userName == ""){
html = `<span style="background-color:${d.color};color:white" class="badge">${d.title}</span>`
}
return html
}
_renderOrdenTarea(d, t) { _renderOrdenTarea(d, t) {
return ` return `
@ -431,6 +447,13 @@ class OrdenTrabajo {
this.fillPreimpresionReview() this.fillPreimpresionReview()
this.fillPliegos() this.fillPliegos()
this.isOtFinalizada = this.summaryData.ot.estado == "F"; this.isOtFinalizada = this.summaryData.ot.estado == "F";
if (this.isOtFinalizada) {
this.btnEraseDate.addClass('d-none').attr('disabled', 'disabled')
this.btnErasePedidoDate.addClass('d-none').attr('disabled', 'disabled')
} else {
this.btnEraseDate.removeClass('d-none').removeAttr('disabled')
this.btnErasePedidoDate.removeClass('d-none').removeAttr('disabled')
}
this.datatableTareas.ajax.reload() this.datatableTareas.ajax.reload()
} catch (error) { } catch (error) {
console.error(error) console.error(error)