diff --git a/ci4/app/Config/OrdenTrabajo.php b/ci4/app/Config/OrdenTrabajo.php new file mode 100644 index 00000000..1d91e1d2 --- /dev/null +++ b/ci4/app/Config/OrdenTrabajo.php @@ -0,0 +1,49 @@ + "interior_bn_user_id", + "interior_color_at" => "interior_color_user_id", + "cubierta_at" => "cubierta_user_id", + //ACABADO + "plastificado_at" => "plastificado_user_id", + "encuadernacion_at" => "encuadernacion_user_id", + "corte_at" => "corte_user_id", + "preparacion_interiores_at" => "preparacion_interior_user_id", + "entrada_manipulado_at" => "entrada_manipulado_user_id", + //FERRO + "pendiente_ferro_at" => "pendiente_ferro_user_id", + "ferro_en_cliente_at" => "ferro_en_cliente_user_id", + "ferro_ok_at" => "ferro_ok_user_id", + //ENVIO + "embalaje_at" => "embalaje_user_id", + "envio_at" => "envio_user_id", + //PREIMPRESION + "pre_formato_at" => "pre_formato_user_id", + "pre_lomo_at" => "pre_lomo_user_id", + "pre_solapa_at" => "pre_solapa_user_id", + "pre_codbarras_at" => "pre_codbarras_user_id", + "pre_imposicion_at" => "pre_imposicion_user_id", + + ]; + public array $DATE_USER_MAPPING_PEDIDO = [ + "inaplazable" => "inaplazable_change_user_id", + "fecha_entrega_real" => "fecha_entrega_real_change_user_id", + "fecha_impresion" => "fecha_impresion_change_user_id", + "fecha_encuadernado" => "fecha_encuadernado_change_user_id", + "fecha_entrega_externo" => "fecha_entrega_externo_change_user_id", + ]; + + public function __construct() + { + parent::__construct(); + } + +} diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 6adc2c7b..1e606ede 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -153,6 +153,8 @@ $routes->group('imposiciones', ['namespace' => 'App\Controllers\Configuracion'], $routes->post('datatable', 'Imposiciones::datatable', ['as' => 'dataTableOfImposiciones']); $routes->post('allmenuitems', 'Imposiciones::allItemsSelect', ['as' => 'select2ItemsOfImposiciones']); $routes->post('menuitems', 'Imposiciones::menuItems', ['as' => 'menuItemsOfImposiciones']); + $routes->get('select', 'Imposiciones::selectImposicion', ['as' => 'selectImposicion']); + }); $routes->resource('imposiciones', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Imposiciones', 'except' => 'show,new,create,update']); @@ -733,6 +735,8 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func *========================**/ $routes->post("update/tarea", 'Ordentrabajo::update_orden_trabajo_tarea'); $routes->post("update/date", 'Ordentrabajo::update_orden_trabajo_date'); + $routes->post("update/pedido/date", 'Ordentrabajo::update_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'); diff --git a/ci4/app/Controllers/Configuracion/Imposiciones.php b/ci4/app/Controllers/Configuracion/Imposiciones.php index 9fabc2c1..58986982 100755 --- a/ci4/app/Controllers/Configuracion/Imposiciones.php +++ b/ci4/app/Controllers/Configuracion/Imposiciones.php @@ -1,4 +1,6 @@ -request->getPost()) : @@ -130,7 +132,7 @@ class Imposiciones extends \App\Controllers\BaseResourceController return $this->redirect2listView('sweet-error', $message); endif; - + if ($this->request->getPost()) : @@ -279,6 +281,9 @@ class Imposiciones extends \App\Controllers\BaseResourceController ]; return $orientacionOptions; } - - + public function selectImposicion() + { + $data = $this->model->querySelect($this->request->getGet('q')); + return $this->response->setJSON($data); + } } diff --git a/ci4/app/Controllers/Produccion/Ordentrabajo.php b/ci4/app/Controllers/Produccion/Ordentrabajo.php index 103befb3..5bbff500 100755 --- a/ci4/app/Controllers/Produccion/Ordentrabajo.php +++ b/ci4/app/Controllers/Produccion/Ordentrabajo.php @@ -118,7 +118,26 @@ class Ordentrabajo extends BaseController return $this->response->setJSON(["errors" => $this->validation->getErrors()])->setStatusCode(400); } } - + public function update_orden_trabajo_pedido_date() + { + try { + $bodyData = $this->request->getPost(); + $r = $this->produccionService->init($bodyData["orden_trabajo_id"])->updateOrdenTrabajoPedidoDate($bodyData); + return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => $r["status"], "user" => $r["user"], "data" => $bodyData]); + } catch (\Throwable $th) { + return $this->response->setJSON(["errors" => $th->getMessage(), "status" => false])->setStatusCode(500); + } + } + public function update_orden_trabajo_pedido() + { + try { + $bodyData = $this->request->getPost(); + $r = $this->produccionService->init($bodyData["orden_trabajo_id"])->updateOrdenTrabajoPedido($bodyData); + return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => $r,"data" => $bodyData]); + } catch (\Throwable $th) { + return $this->response->setJSON(["errors" => $th->getMessage(), "status" => false])->setStatusCode(500); + } + } public function edit($orden_trabajo_id) { // Breadcrumbs @@ -131,6 +150,9 @@ class Ordentrabajo extends BaseController $this->viewData["presupuesto"] = $this->produccionService->getPresupuesto(); $this->viewData["cliente"] = $this->produccionService->getCliente(); $this->viewData["ot"] = $this->produccionService->getOrdenTrabajo(); + $this->viewData["user_dates"] = $this->produccionService->userDates(); + $this->viewData["pedido_user_dates"] = $this->produccionService->pedidoUserDates(); + return view(static::$viewPath . $this->editRoute, $this->viewData); } @@ -141,7 +163,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) => site_url($logo->get_logo_path($q->presupuesto_linea_tipo))) + ->add("logo", fn($q) => ["logo" => site_url($logo->get_logo_path($q->presupuesto_linea_tipo)), "imposicion" => $q->imposicion_name]) ->edit( "fecha_encuadernado_at", fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d", $q->fecha_encuadernado_at)->format("d/m/Y") : "" @@ -156,7 +178,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) => site_url($logo->get_logo_path($q->presupuesto_linea_tipo))) + ->add("logo", fn($q) => ["logo" => site_url($logo->get_logo_path($q->presupuesto_linea_tipo)), "imposicion" => $q->imposicion_name]) ->edit( "fecha_encuadernado_at", fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d", $q->fecha_encuadernado_at)->format("d/m/Y") : "" @@ -171,7 +193,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) => site_url($logo->get_logo_path($q->presupuesto_linea_tipo))) + ->add("logo", fn($q) => ["logo" => site_url($logo->get_logo_path($q->presupuesto_linea_tipo)), "imposicion" => $q->imposicion_name]) ->edit( "fecha_encuadernado_at", fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d", $q->fecha_encuadernado_at)->format("d/m/Y") : "" @@ -186,7 +208,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) => site_url($logo->get_logo_path($q->presupuesto_linea_tipo))) + ->add("logo", fn($q) => ["logo" => site_url($logo->get_logo_path($q->presupuesto_linea_tipo)), "imposicion" => $q->imposicion_name]) ->edit( "fecha_encuadernado_at", fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d", $q->fecha_encuadernado_at)->format("d/m/Y") : "" @@ -232,6 +254,7 @@ class Ordentrabajo extends BaseController ->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("maquina_tarea", fn($q) => ["id" => $q->id, "maquina_id" => $q->maquina_tarea, "maquina_name" => $q->maquina_nombre]) + ->add("imposicion", fn($q) => ["id" => $q->id, "imposicion_id" => $q->imposicion_id, "name" => $q->imposicion_name, "is_presupuesto_linea" => $q->presupuesto_linea_id ? true : false]) ->toJson(true); } public function get_pdf($orden_trabajo_id) @@ -241,7 +264,6 @@ class Ordentrabajo extends BaseController public function upload_orden_trabajo_portada() { try { - //code... $file = $this->request->getFile("portada_file"); $bodyData = $this->request->getPost(); $id = $bodyData["orden_trabajo_id"]; @@ -249,6 +271,12 @@ class Ordentrabajo extends BaseController $fullpath = null; if ($file->isValid() && !$file->hasMoved()) { $fullpath = $file->store('ordenes_trabajo_portadas'); + $otEntity = $this->otModel->find($id); + if ($otEntity->portada_path) { + if (file_exists($otEntity->full_path)) { + unlink($otEntity->full_path); + } + } $r = $this->otModel->update($id, ["portada_path" => $fullpath]); } return $this->response->setJSON(["message" => "Portada subida", "data" => $r]); @@ -256,7 +284,7 @@ class Ordentrabajo extends BaseController if ($fullpath) { delete_files($fullpath); } - return $this->response->setJSON(["message" => "Portada error", "error" => $th->getMessage()])->setStatusCode($th->getCode()); + return $this->response->setJSON(["message" => "Portada error", "error" => $th->getMessage()])->setStatusCode(500); } } public function delete_orden_trabajo_portada($orden_trabajo_id) @@ -280,7 +308,7 @@ class Ordentrabajo extends BaseController try { $ot = $this->otModel->find($orden_trabajo_id); if ($ot->portada_path) { - $filePath = WRITEPATH . 'uploads/' . $ot->portada_path; + $filePath = $ot->full_path; if (file_exists($filePath)) { $mimeType = mime_content_type($filePath); @@ -296,7 +324,6 @@ class Ordentrabajo extends BaseController } } catch (\Throwable $th) { return $this->response->setJSON(["message" => "Portada error", "error" => $th->getMessage()])->setStatusCode(500); - } } public function planning_rotativa_datatable() diff --git a/ci4/app/Entities/Configuracion/Imposicion.php b/ci4/app/Entities/Configuracion/Imposicion.php index 0acdc41c..fcb0ddaa 100755 --- a/ci4/app/Entities/Configuracion/Imposicion.php +++ b/ci4/app/Entities/Configuracion/Imposicion.php @@ -19,4 +19,13 @@ class Imposicion extends \CodeIgniter\Entity\Entity "alto" => "int", "unidades" => "?int", ]; + + public function getFullName() : string + { + $ancho_x_alto = $this->attributes["ancho"] ."x". $this->attributes["alto"]; + $unidades = $this->attributes["unidades"] ?? ""; + $orientacion = $this->attributes["orientacion"] ?? ""; + return implode("_",[$ancho_x_alto,$unidades,$orientacion]); + + } } diff --git a/ci4/app/Entities/Configuracion/PapelImpresion.php b/ci4/app/Entities/Configuracion/PapelImpresion.php index d977764c..617a3ec7 100755 --- a/ci4/app/Entities/Configuracion/PapelImpresion.php +++ b/ci4/app/Entities/Configuracion/PapelImpresion.php @@ -2,9 +2,11 @@ namespace App\Entities\Configuracion; use App\Models\Configuracion\MaquinasPapelesImpresionModel; +use App\Models\Configuracion\PapelGenericoModel; use App\Models\Configuracion\PapelImpresionMargenModel; use App\Models\Configuracion\PapelImpresionTipologiaModel; use CodeIgniter\Entity; +use CodeIgniter\Model; class PapelImpresion extends \CodeIgniter\Entity\Entity { @@ -68,4 +70,15 @@ class PapelImpresion extends \CodeIgniter\Entity\Entity $m = model(PapelImpresionMargenModel::class); return $m->asArray()->where('papel_impresion_id',$this->attributes["id"])->findAll(); } + public function papel_generico() : ?PapelGenerico + { + $m = model(PapelGenericoModel::class); + return $m->find($this->attributes["papel_generico_id"]); + } + public function getPapelCodeOt() : ?string + { + $code_ot = $this->papel_generico()->code_ot; + $gramaje = $this->attributes["gramaje"]; + return implode(" ",[$code_ot,$gramaje]); + } } diff --git a/ci4/app/Entities/Pedidos/PedidoEntity.php b/ci4/app/Entities/Pedidos/PedidoEntity.php index 61c40e25..18c55903 100644 --- a/ci4/app/Entities/Pedidos/PedidoEntity.php +++ b/ci4/app/Entities/Pedidos/PedidoEntity.php @@ -6,9 +6,11 @@ use App\Entities\Produccion\OrdenTrabajoEntity; use App\Models\OrdenTrabajo\OrdenTrabajoModel; use App\Entities\Clientes\ClienteEntity; use App\Entities\Configuracion\UbicacionesEntity; +use App\Entities\Usuarios\UserEntity; use App\Models\Clientes\ClienteModel; use App\Models\Pedidos\PedidoLineaModel; use App\Models\Presupuestos\PresupuestoModel; +use App\Models\Usuarios\UserModel; use CodeIgniter\Entity; class PedidoEntity extends \CodeIgniter\Entity\Entity @@ -40,6 +42,12 @@ class PedidoEntity extends \CodeIgniter\Entity\Entity protected $casts = [ "total_precio" => "float", "total_tirada" => "float", + "inaplazable" => "bool", + "fecha_entrega_real_change_user_id" => "?integer", + "fecha_impresion_change_user_id" => "?integer", + "fecha_encuadernado_change_user_id" => "?integer", + "fecha_entrega_change_externo_user_id" => "?integer", + "inaplazable_change_user_id" => "?integer", ]; /** * Devuelve la entidad `PedidoEntity` con sus relaciones @@ -91,4 +99,16 @@ class PedidoEntity extends \CodeIgniter\Entity\Entity $pre = $pm->find($pedido_linea->presupuesto_id); return $m->find($pre->cliente_id); } + public function userBy(string $key): ?UserEntity + { + $user = null; + if (isset($this->attributes[$key])) { + + if ($this->attributes[$key]) { + $m = model(UserModel::class); + $user = $m->find($this->attributes[$key]); + } + } + return $user; + } } diff --git a/ci4/app/Entities/Presupuestos/PresupuestoLineaEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoLineaEntity.php index 247a12ec..3fa722b7 100755 --- a/ci4/app/Entities/Presupuestos/PresupuestoLineaEntity.php +++ b/ci4/app/Entities/Presupuestos/PresupuestoLineaEntity.php @@ -225,4 +225,8 @@ class PresupuestoLineaEntity extends \CodeIgniter\Entity\Entity { return in_array($this->attributes['tipo'],['lp_rot_color','lp_rot_bn']); } + public function isColor():bool { + return in_array($this->attributes['tipo'],['lp_color','lp_colorhq','lp_rot_color']); + + } } diff --git a/ci4/app/Entities/Produccion/OrdenTrabajoDateEntity.php b/ci4/app/Entities/Produccion/OrdenTrabajoDateEntity.php index f6b5e79c..352e3ac8 100644 --- a/ci4/app/Entities/Produccion/OrdenTrabajoDateEntity.php +++ b/ci4/app/Entities/Produccion/OrdenTrabajoDateEntity.php @@ -2,34 +2,38 @@ namespace App\Entities\Produccion; +use App\Models\Usuarios\UserModel; use CodeIgniter\Entity\Entity; +use Exception; class OrdenTrabajoDateEntity extends Entity { protected $attributes = [ "orden_trabajo_id" => null, "fecha_entrada_at" => null, - "fecha_entrega_change_at" => null, - "fecha_entrega_real_at" => null, - "fecha_entrega_real_warning" => null, - "fecha_impresion_at" => null, - "fecha_encuadernado_at" => null, - "fecha_externo_at" => null, - "fecha_entrega_warning" => null, - "fecha_entrega_warning_revised" => null, - "pendiente_ferro_at" => null, - "ferro_en_cliente_at" => null, - "ferro_ok_at" => null, + //IMPRESION "interior_bn_at" => null, "interior_color_at" => null, - "preparacion_interiores_at" => null, "cubierta_at" => null, + //ACABADO "plastificado_at" => null, "encuadernacion_at" => null, "corte_at" => null, + "preparacion_interiores_at" => null, + "entrada_manipulado_at" => null, + //FERRO + "pendiente_ferro_at" => null, + "ferro_en_cliente_at" => null, + "ferro_ok_at" => null, + //ENVIO "embalaje_at" => null, "envio_at" => null, - "entrada_manipulado_at" => null + //PREIMPRESION + "pre_formato_at" => null, + "pre_lomo_at" => null, + "pre_solapa_at" => null, + "pre_codbarras_at" => null, + "pre_imposicion_at" => null, ]; protected $datamap = []; @@ -37,51 +41,11 @@ class OrdenTrabajoDateEntity extends Entity 'created_at', 'updated_at', 'deleted_at', - // 'fecha_entrega_at', - // 'fecha_entrega_change_at', - // 'fecha_entrega_real_at', - // 'fecha_entrega_real_warning', - // 'fecha_impresion_at', - // 'fecha_encuadernado_at', - // 'fecha_externo_at', - // 'fecha_entrega_warning', - // 'fecha_entrega_warning_revised', - // 'pendiente_ferro_at', - // 'ferro_en_cliente_at', - // 'ferro_ok_at', - // 'interior_bn_at', - // 'interior_color_at', - // 'preparacion_interiores_at', - // 'cubierta_at', - // 'plastificado_at', - // 'encuadernacion_at', - // 'corte_at', - // 'embalaje_at', - // 'envio_at', - // 'entrada_manipulado_at' + ]; protected $casts = [ - // "fecha_entrada_at" => "?datetime", - // "fecha_entrega_change_at" => "?datetime", - // "fecha_entrega_real_at" => "?datetime", - // "fecha_entrega_real_warning" => "?bool", - // "fecha_impresion_at" => "?datetime", - // "fecha_encuadernado_at" => "?datetime", - // "fecha_externo_at" => "?datetime", - // "fecha_entrega_warning" => "?bool", - // "fecha_entrega_warning_revised" => "?bool", - // "pendiente_ferro_at" => "?datetime", - // "ferro_en_cliente_at" => "?datetime", - // "ferro_ok_at" => "?datetime", - // "interior_bn_at" => "?datetime", - // "interior_color_at" => "?datetime", - // "preparacion_interiores_at" => "?datetime", - // "cubierta_at" => "?datetime", - // "plastificado_at" => "?datetime", - // "encuadernacion_at" => "?datetime", - // "corte_at" => "?datetime", - // "embalaje_at" => "?datetime", - // "envio_at" => "?datetime", - // "entrada_manipulado_at" => "?datetime" ]; + + + } diff --git a/ci4/app/Entities/Produccion/OrdenTrabajoEntity.php b/ci4/app/Entities/Produccion/OrdenTrabajoEntity.php index 67861987..0728d4b9 100644 --- a/ci4/app/Entities/Produccion/OrdenTrabajoEntity.php +++ b/ci4/app/Entities/Produccion/OrdenTrabajoEntity.php @@ -134,4 +134,18 @@ class OrdenTrabajoEntity extends Entity { return $this->pedidoEsperaBy(); } + public function getFullPath(): ?string + { + helper('filesystem'); + $path = WRITEPATH . 'uploads/' . $this->attributes["portada_path"]; + $portada_path = null; + if($path){ + if(file_exists($path)){ + $portada_path = $path; + }else{ + $portada_path = null; + } + } + return $portada_path; + } } diff --git a/ci4/app/Entities/Produccion/OrdenTrabajoTareaEntity.php b/ci4/app/Entities/Produccion/OrdenTrabajoTareaEntity.php index b11c9812..883f76ad 100644 --- a/ci4/app/Entities/Produccion/OrdenTrabajoTareaEntity.php +++ b/ci4/app/Entities/Produccion/OrdenTrabajoTareaEntity.php @@ -2,10 +2,12 @@ namespace App\Entities\Produccion; +use App\Entities\Configuracion\Imposicion; use App\Entities\Configuracion\Maquina; use App\Entities\Presupuestos\PresupuestoAcabadosEntity; use App\Entities\Presupuestos\PresupuestoLineaEntity; use App\Entities\Presupuestos\PresupuestoManipuladosEntity; +use App\Models\Configuracion\ImposicionModel; use App\Models\Configuracion\MaquinaModel; use App\Models\OrdenTrabajo\OrdenTrabajoModel; use App\Models\Presupuestos\PresupuestoAcabadosModel; @@ -105,5 +107,14 @@ class OrdenTrabajoTareaEntity extends Entity $m = model(PresupuestoAcabadosModel::class); return $m->find($this->attributes["presupuesto_linea_id"]); } + public function imposicion() : ?Imposicion + { + $m = model(ImposicionModel::class); + $imposicion = null; + if($this->attributes["imposicion_id"]){ + $imposicion = $m->find($this->attributes["imposicion_id"]); + } + return $imposicion; + } } diff --git a/ci4/app/Entities/Produccion/OrdenTrabajoUserEntity.php b/ci4/app/Entities/Produccion/OrdenTrabajoUserEntity.php index c03df33a..4f516ecd 100644 --- a/ci4/app/Entities/Produccion/OrdenTrabajoUserEntity.php +++ b/ci4/app/Entities/Produccion/OrdenTrabajoUserEntity.php @@ -15,28 +15,35 @@ class OrdenTrabajoUserEntity extends Entity "orden_trabajo_id" => null, "user_created_id" => null, "user_update_id" => null, - "inaplazable_revised_change_user_id" => null, - "ferro_disponible_hecho_user_id" => null, - "ferro_disponible_ok_user_id" => null, - "ferro_entregado_user_id" => null, - "pendiente_ferro_user_id" => null, - "ferro_en_cliente_user_id" => null, - "ferro_ok_user_id" => null, + //IMPRESION "interior_bn_user_id" => null, "interior_color_user_id" => null, - "preparacion_interior_user_id" => null, "cubierta_user_id" => null, + //ACABADO "plastificado_user_id" => null, "encuadernacion_user_id" => null, "corte_user_id" => null, - "embalaje_user_id" => null, + "preparacion_interior_user_id" => null, "entrada_manipulado_user_id" => null, + //FERRO + "pendiente_ferro_user_id" => null, + "ferro_en_cliente_user_id" => null, + "ferro_ok_user_id" => null, + //ENVIO + "embalaje_user_id" => null, + "envio_user_id" => null, + //PREIMPRESION "pre_formato_user_id" => null, "pre_lomo_user_id" => null, "pre_solapa_user_id" => null, "pre_codbarras_user_id" => null, "pre_imposicion_user_id" => null, - "pre_imprimir_user_id" => null + //UNUSED + "inaplazable_revised_change_user_id" => null,//!DELETE + "ferro_disponible_hecho_user_id" => null,//!DELETE + "ferro_entregado_user_id" => null,//!DELETE + "pre_imprimir_user_id" => null, //!DELETE + "ferro_disponible_ok_user_id" => null, //!DELETE ]; // protected array $casts = [ // "orden_trabajo_id" => "integer", @@ -66,7 +73,7 @@ class OrdenTrabajoUserEntity extends Entity // "pre_imprimir_user_id" => "?integer" // ]; - protected function userBy(string $key): ?UserEntity + public function userBy(string $key): ?UserEntity { $user = null; if (isset($this->attributes[$key])) { diff --git a/ci4/app/Entities/Tarifas/TarifaEncuadernacionEntity.php b/ci4/app/Entities/Tarifas/TarifaEncuadernacionEntity.php index b8d01575..608ebf37 100755 --- a/ci4/app/Entities/Tarifas/TarifaEncuadernacionEntity.php +++ b/ci4/app/Entities/Tarifas/TarifaEncuadernacionEntity.php @@ -33,6 +33,14 @@ class TarifaEncuadernacionEntity extends \CodeIgniter\Entity\Entity "user_updated_id" => "int", "is_deleted" => "int", ]; + + public function getNameInitials(): string + { + $words = explode(" ",$this->attributes["nombre"]); + $words_initial = array_map(fn($w) => substr(strtoupper($w),0,1),$words); + return implode("",$words_initial); + } + } diff --git a/ci4/app/Language/es/Produccion.php b/ci4/app/Language/es/Produccion.php index 98e81d76..c8cb238b 100644 --- a/ci4/app/Language/es/Produccion.php +++ b/ci4/app/Language/es/Produccion.php @@ -39,7 +39,8 @@ return [ "maquina_presupuesto" => "Máquina presupuesto", "maquina_actual" => "Máquina actual", "tiempo_estimado" => "Tiempo estimado", - "tiempo" => "Tiempo" + "tiempo" => "Tiempo", + "imposicion" => "Imposición" ], "finalizadas" => "Finalizadas", "pendiente_ferro" => "Ferro pendiente", @@ -56,7 +57,7 @@ return [ "fecha_entrega_estimada" => "Fecha entrega estimada", "formato" => "Formato", "paginas" => "Páginas", - "guillotina" => "Guillotina", + "guillotina" => "Guillotina/Corte", "tirada" => "Tirada", "merma" => "Merma", "pendiente_ferro" => "Pendiente ferro", @@ -79,6 +80,30 @@ return [ "solapa" => "Solapa", "papel_gramajes" => "Papel y gramajes", "estado" => "Estado", - "pedido_espera" => "Pedido en espera" + "pedido_espera" => "Pedido en espera", + "imposicion_no_label" => "Sin etiqueta", + "pliegos_de" => "pliegos de", + "size" => "Tamaño", + "ejemplares" => "Ejemplares", + "tipo" => "Tipo", + "lomo" => "Lomo", + //IMPRESION + "impresion_bn" => "Impresión BN", + "cubierta" => "Cubierta/Portada", + //PREIMPRESION + "pre_formato" => "Revisión formato", + "pre_lomo" => "Revisión lomo", + "pre_solapa" => "Revisión solapa", + "pre_codbarras" => "Revisión código barras", + "pre_imposicion" => "Revisión imposición", + + + "errors" => [ + "date_not_exist" => "Esta fecha no existe en el modelo", + "attr_not_exist" => "El atributo {0,string} no pertenece al modelo Pedido" + + ] + + ]; \ No newline at end of file diff --git a/ci4/app/Models/Configuracion/ImposicionModel.php b/ci4/app/Models/Configuracion/ImposicionModel.php index e9473566..b21def73 100755 --- a/ci4/app/Models/Configuracion/ImposicionModel.php +++ b/ci4/app/Models/Configuracion/ImposicionModel.php @@ -1,4 +1,5 @@ groupStart() - ->like("t1.id", $search) - ->orlike("t1.ancho", $search) - ->orLike("t1.alto", $search) - ->orLike("t1.unidades", $search) - ->orLike("t1.orientacion", $search) - ->orLike("t1.maquina", $search) - ->orLike("t1.etiqueta", $search) - ->orlike("t1.id", $search) - ->orLike("t1.ancho", $search) - ->orLike("t1.alto", $search) - ->orLike("t1.unidades", $search) - ->orLike("t1.orientacion", $search) - ->orLike("t1.maquina", $search) - ->orLike("t1.etiqueta", $search) - ->groupEnd(); + ->groupStart() + ->like("t1.id", $search) + ->orlike("t1.ancho", $search) + ->orLike("t1.alto", $search) + ->orLike("t1.unidades", $search) + ->orLike("t1.orientacion", $search) + ->orLike("t1.maquina", $search) + ->orLike("t1.etiqueta", $search) + ->orlike("t1.id", $search) + ->orLike("t1.ancho", $search) + ->orLike("t1.alto", $search) + ->orLike("t1.unidades", $search) + ->orLike("t1.orientacion", $search) + ->orLike("t1.maquina", $search) + ->orLike("t1.etiqueta", $search) + ->groupEnd(); + } + + public function querySelect(?string $q) + { + $query = $this->builder()->select([ + "id", + "CONCAT(lg_imposiciones.ancho,'x',lg_imposiciones.alto,'_',COALESCE(lg_imposiciones.unidades,'NULL'),'_',COALESCE(lg_imposiciones.orientacion,'NULL')) as name", + "COALESCE(lg_imposiciones.etiqueta,'" . lang("Produccion.imposicion_no_label") . "') as description" + ]); + if ($q) { + $query->orLike("CONCAT(lg_imposiciones.ancho,'x',lg_imposiciones.alto)", $q); + $query->orLike("lg_imposiciones.etiqueta", $q); + } + return $query + ->orderBy('id', 'ASC') + ->get()->getResultArray(); } } diff --git a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoDate.php b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoDate.php index d6a7d7c1..83f62c54 100644 --- a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoDate.php +++ b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoDate.php @@ -5,6 +5,7 @@ namespace App\Models\OrdenTrabajo; use App\Entities\Produccion\OrdenTrabajoDateEntity; use CodeIgniter\Database\MySQLi\Builder; use CodeIgniter\Model; +use Config\OrdenTrabajo; class OrdenTrabajoDate extends Model { @@ -17,25 +18,29 @@ class OrdenTrabajoDate extends Model protected $allowedFields = [ "orden_trabajo_id", "fecha_entrada_at", - "fecha_entrega_at", - "fecha_entrega_real_at", - "fecha_entrega_change_at", - "fecha_impresion_at", - "fecha_encuadernado_at", - "fecha_externo_at", - "pendiente_ferro_at", - "ferro_en_cliente_at", - "ferro_ok_at", + //IMPRESION "interior_bn_at", "interior_color_at", - "preparacion_interiores_at", "cubierta_at", + //ACABADO "plastificado_at", "encuadernacion_at", "corte_at", + "preparacion_interiores_at", + "entrada_manipulado_at", + //FERRO + "pendiente_ferro_at", + "ferro_en_cliente_at", + "ferro_ok_at", + //ENVIO "embalaje_at", "envio_at", - "entrada_manipulado_at" + //PREIMPRESION + "pre_formato_at", + "pre_lomo_at", + "pre_solapa_at", + "pre_codbarras_at", + "pre_imposicion_at" ]; protected bool $allowEmptyInserts = false; @@ -103,22 +108,8 @@ class OrdenTrabajoDate extends Model return $data; } public function updateUserDateMap($orden_trabajo_id,$data){ - $mapping = [ - "fecha_encuadernado_at" => "encuadernacion_user_id", - // "fecha_externo_at" => "null", - "fecha_impresion_at" => null, - "pendiente_ferro_at" => "pendiente_ferro_user_id", - "ferro_en_cliente_at" => "ferro_en_cliente_user_id", - "ferro_ok_at" => "ferro_ok_user_id", - "interior_bn_at" => "interior_bn_user_id", - "interior_color_at" => "interior_color_user_id", - "preparacion_interiores_at" => "preparacion_interior_user_id", - "cubierta_at" => "cubierta_user_id", - "plastificado_at" => "plastificado_user_id", - "corte_at" => "corte_user_id", - "embalaje_at" => "embalaje_user_id", - "entrada_manipulado_at" => "entrada_manipulado_user_id" - ]; + $ordenTrabajoConfig = new OrdenTrabajo(); + $mapping = $ordenTrabajoConfig->DATE_USER_MAPPING; $otUser = model(OrdenTrabajoUser::class); $auth_user_id = auth()->user()->id; foreach ($data as $key => $value) { diff --git a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoModel.php b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoModel.php index 713a925f..2554d37f 100644 --- a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoModel.php +++ b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoModel.php @@ -82,7 +82,9 @@ class OrdenTrabajoModel extends Model "tipos_presupuestos.codigo as tipo_presupuesto_impresion", "ordenes_trabajo.progreso", "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" + ]) ->join("orden_trabajo_dates","orden_trabajo_dates.orden_trabajo_id = ordenes_trabajo.id","left") ->join("pedidos","pedidos.id = ordenes_trabajo.pedido_id","left") @@ -92,6 +94,9 @@ class OrdenTrabajoModel extends Model ->join("clientes","clientes.id = presupuestos.cliente_id","left") ->join("tipos_presupuestos","presupuestos.tipo_impresion_id = tipos_presupuestos.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("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"]) ->where("ordenes_trabajo.deleted_at",null) ->groupBy("ordenes_trabajo.id"); diff --git a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoUser.php b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoUser.php index c1a232f5..3bc18711 100644 --- a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoUser.php +++ b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoUser.php @@ -3,6 +3,7 @@ namespace App\Models\OrdenTrabajo; use App\Entities\Produccion\OrdenTrabajoUserEntity; +use App\Models\Usuarios\UserModel; use CodeIgniter\Database\MySQLi\Builder; use CodeIgniter\Model; @@ -18,28 +19,35 @@ class OrdenTrabajoUser extends Model "orden_trabajo_id", "user_created_id", "user_update_id", - "inaplazable_revised_change_user_id", - "ferro_disponible_hecho_user_id", - "ferro_disponible_ok_user_id", - "ferro_entregado_user_id", - "pendiente_ferro_user_id", - "ferro_en_cliente_user_id", - "ferro_ok_user_id", + //IMPRESION "interior_bn_user_id", "interior_color_user_id", - "preparacion_interior_user_id", "cubierta_user_id", + //ACABADO "plastificado_user_id", "encuadernacion_user_id", "corte_user_id", - "embalaje_user_id", + "preparacion_interior_user_id", "entrada_manipulado_user_id", + //FERRO + "pendiente_ferro_user_id", + "ferro_en_cliente_user_id", + "ferro_ok_user_id", + //ENVIO + "embalaje_user_id", + "envio_user_id", + //PREIMPRESION "pre_formato_user_id", "pre_lomo_user_id", "pre_solapa_user_id", "pre_codbarras_user_id", "pre_imposicion_user_id", - "pre_imprimir_user_id" + //UNUSED + "inaplazable_revised_change_user_id",//!DELETE + "ferro_disponible_hecho_user_id",//!DELETE + "ferro_entregado_user_id",//!DELETE + "pre_imprimir_user_id", //!DELETE + "ferro_disponible_ok_user_id", //!DELETE ]; protected bool $allowEmptyInserts = false; @@ -72,6 +80,5 @@ class OrdenTrabajoUser extends Model protected $beforeDelete = []; protected $afterDelete = []; - } diff --git a/ci4/app/Services/ProductionService.php b/ci4/app/Services/ProductionService.php index 8c9286cd..ade89a42 100644 --- a/ci4/app/Services/ProductionService.php +++ b/ci4/app/Services/ProductionService.php @@ -3,6 +3,7 @@ namespace App\Services; use App\Entities\Clientes\ClienteEntity; +use App\Entities\Configuracion\Imposicion; use App\Entities\Pedidos\PedidoEntity; use App\Entities\Presupuestos\PresupuestoEntity; use App\Entities\Presupuestos\PresupuestoLineaEntity; @@ -18,12 +19,14 @@ use App\Entities\Produccion\OrdenTrabajoTareaEntity; use App\Models\Configuracion\ConfigVariableModel; use App\Models\Configuracion\MaquinaModel; use App\Models\OrdenTrabajo\OrdenTrabajoFileModel; +use App\Models\Pedidos\PedidoModel; use App\Models\Usuarios\UserModel; use CodeIgniter\Database\BaseBuilder; use CodeIgniter\Database\BaseResult; use CodeIgniter\Database\Exceptions\DatabaseException; use CodeIgniter\HTTP\Files\UploadedFile; use CodeIgniter\I18n\Time; +use Config\OrdenTrabajo; use Exception; /** @@ -41,26 +44,12 @@ class ProductionService extends BaseService protected OrdenTrabajoUser $otUser; protected OrdenTrabajoEntity $ot; protected OrdenTrabajoFileModel $otFileModel; + protected PedidoModel $pedidoModel; protected UserModel $userModel; protected string $defaultMaquinaCorteName = 'HT-1000'; protected MaquinaEntity $defaultMaquinaCorte; protected MaquinaModel $maquinaModel; - protected array $MAPPING_DATE_USER = [ - "fecha_encuadernado_at" => "encuadernacion_user_id", - // "fecha_externo_at" => "null", - "fecha_impresion_at" => null, - "pendiente_ferro_at" => "pendiente_ferro_user_id", - "ferro_en_cliente_at" => "ferro_en_cliente_user_id", - "ferro_ok_at" => "ferro_ok_user_id", - "interior_bn_at" => "interior_bn_user_id", - "interior_color_at" => "interior_color_user_id", - "preparacion_interiores_at" => "preparacion_interior_user_id", - "cubierta_at" => "cubierta_user_id", - "plastificado_at" => "plastificado_user_id", - "corte_at" => "corte_user_id", - "embalaje_at" => "embalaje_user_id", - "entrada_manipulado_at" => "entrada_manipulado_user_id" - ]; + protected OrdenTrabajo $ordenTrabajoConfig; /** * Pedido Entity @@ -83,6 +72,8 @@ class ProductionService extends BaseService $this->otUser = model(OrdenTrabajoUser::class); $this->userModel = model(UserModel::class); $this->otFileModel = model(OrdenTrabajoFileModel::class); + $this->pedidoModel = model(PedidoModel::class); + $this->ordenTrabajoConfig = config('OrdenTrabajo'); } public function init(int $orden_trabajo_id): self { @@ -414,9 +405,12 @@ class ProductionService extends BaseService "orden_trabajo_tareas.maquina_id as maquina_tarea", "lg_maquinas.nombre as maquina_nombre", "lg_imposiciones.id as imposicion_id", + "CONCAT(lg_imposiciones.ancho,'x',lg_imposiciones.alto,'_',COALESCE(lg_imposiciones.unidades,'NULL'),'_',COALESCE(lg_imposiciones.orientacion,'NULL'),'_',COALESCE(lg_imposiciones.etiqueta,'')) as imposicion_name", "orden_trabajo_tareas.tiempo_estimado", "orden_trabajo_tareas.tiempo_real", "orden_trabajo_tareas.comment", + "orden_trabajo_tareas.presupuesto_linea_id", + "presupuesto_linea.tipo", ]) ->join("orden_trabajo_tareas", "orden_trabajo_tareas.orden_trabajo_id = ordenes_trabajo.id", "left") @@ -623,6 +617,7 @@ class ProductionService extends BaseService "pedido" => $this->pedido, "presupuesto" => $this->presupuesto, "dates" => $this->ot->dates(), + "user_dates" => $this->userDates(), "tasks" => $this->ot->tareas(), "acabados" => $this->presupuesto->acabados(), "preimpresiones" => $this->presupuesto->preimpresiones(), @@ -635,6 +630,7 @@ class ProductionService extends BaseService "tareas_encuadernacion" => $this->tareas_encuadernacion(), "tareas_preimpresion" => $this->tareas_preimpresion(), "tareas_impresion" => $this->tareas_impresion(), + "tiempo_procesamiento" => $this->getTiempoProcesamientoHHMM(), ]; return $summary; } @@ -657,39 +653,55 @@ class ProductionService extends BaseService "linea_impresion" => $this->presupuesto->presupuestoLineaImpresion(), "linea_cubierta" => $this->presupuesto->presupuestoLineaCubierta(), "peso_unidad" => $logistica_data["peso_unidad"], - "peso_pedido" => $logistica_data["peso_pedido"] + "peso_pedido" => $logistica_data["peso_pedido"], + "imposicion" => $this->getImposicionTareaImpresion(), + "tiempo_procesamiento" => $this->getTiempoProcesamientoHHMM(), + ]; } - public function getTareaImpresionSobreCubierta(): array + public function getImposicionTareaImpresion(): ?Imposicion + { + $imposicion = null; + $impresionInteriorBnImposicion = $this->getTareaImpresionInteriorBn()?->imposicion(); + $impresionInteriorColorImposicion = $this->getTareaImpresionInteriorColor()?->imposicion(); + if ($impresionInteriorBnImposicion) { + $imposicion = $impresionInteriorBnImposicion; + } + if ($impresionInteriorColorImposicion) { + $imposicion = $impresionInteriorColorImposicion; + } + return $imposicion; + } + public function getTareaImpresionSobreCubierta(): ?OrdenTrabajoTareaEntity { $q = $this->otTarea->select('orden_trabajo_tareas.*') ->join("presupuesto_linea", "presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id", "left") ->where("orden_trabajo_tareas.orden_trabajo_id", $this->ot->id) - ->whereIn("presupuesto_linea.tipo", ["lp_sobrecubierta"])->findAll(); + ->whereIn("presupuesto_linea.tipo", ["lp_sobrecubierta"])->first(); return $q; } - public function getTareaImpresionCubierta(): array + public function getTareaImpresionCubierta(): ?OrdenTrabajoTareaEntity { $q = $this->otTarea->select('orden_trabajo_tareas.*') ->join("presupuesto_linea", "presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id", "left") ->where("orden_trabajo_tareas.orden_trabajo_id", $this->ot->id) - ->whereIn("presupuesto_linea.tipo", ["lp_cubierta"])->findAll(); + ->whereIn("presupuesto_linea.tipo", ["lp_cubierta"])->first(); return $q; } - public function getTareaImpresionInteriorBn(): array + public function getTareaImpresionInteriorBn(): ?OrdenTrabajoTareaEntity { $q = $this->otTarea->select('orden_trabajo_tareas.*') ->join("presupuesto_linea", "presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id", "left") ->where("orden_trabajo_tareas.orden_trabajo_id", $this->ot->id) - ->whereIn("presupuesto_linea.tipo", ["lp_rot_bn", "lp_bn", "lp_bnhq"])->findAll(); + ->whereIn("presupuesto_linea.tipo", ["lp_rot_bn", "lp_bn", "lp_bnhq"])->first(); return $q; } - public function getTareaImpresionInteriorColor(): array + public function getTareaImpresionInteriorColor(): ?OrdenTrabajoTareaEntity { $q = $this->otTarea->select('orden_trabajo_tareas.*') ->join("presupuesto_linea", "presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id", "left") ->where("orden_trabajo_tareas.orden_trabajo_id", $this->ot->id) - ->whereIn("presupuesto_linea.tipo", ["lp_rot_color", "lp_color", "lp_colorhq"])->findAll(); + ->whereIn("presupuesto_linea.tipo", ["lp_rot_color", "lp_color", "lp_colorhq"])->first(); return $q; } public function getPresupuestoLineaImpresion() {} @@ -739,8 +751,8 @@ class ProductionService extends BaseService ->update($data); $this->otDate->updateUserDateMap($this->ot->id, $data); $ot_users = $this->ot->users(); - if (isset($this->MAPPING_DATE_USER[$data["name"]])) { - $user_id = $ot_users->{$this->MAPPING_DATE_USER[$data["name"]]}; + if (isset($this->ordenTrabajoConfig->DATE_USER_MAPPING[$data["name"]])) { + $user_id = $ot_users->{$this->ordenTrabajoConfig->DATE_USER_MAPPING[$data["name"]]}; $user = $this->userModel->find($user_id); if ($user_id) { $result = ["user" => null, "status" => false]; @@ -749,16 +761,45 @@ class ProductionService extends BaseService } else { $result = ["user" => null, "status" => false]; } + $this->updateProgress(); return $result; } + public function updateOrdenTrabajoPedidoDate($data): array + { + $status = false; + $user = auth()->user(); + $row = []; + $pedidoDatesUser = $this->ordenTrabajoConfig->DATE_USER_MAPPING_PEDIDO; + $attrPedido = $data["name"]; + if (isset($pedidoDatesUser[$attrPedido])) { + $row[$attrPedido] = Time::createFromFormat("Y-m-d", $data[$attrPedido])->format('Y-m-d 00:00:00'); + $attrUserPedido = $pedidoDatesUser[$attrPedido]; + $row[$attrUserPedido] = $user->id; + $status = $this->pedidoModel->update($this->pedido->id, $row); + $this->updateProgress(); + } else { + throw new Exception(lang('Produccion.errors.attr_not_exist', [$attrPedido])); + } + return [ + "user" => $user, + "status" => $status + ]; + } public function updateOrdenTrabajo($data): bool { - if(isset($data["is_pedido_espera"])){ + if (isset($data["is_pedido_espera"])) { $data["pedido_espera_by"] = auth()->user()->id; } return $this->otModel->update($this->ot->id, $data); } + public function updateOrdenTrabajoPedido($data) + { + if (isset($data["inaplazable"])) { + $data[$this->ordenTrabajoConfig->DATE_USER_MAPPING_PEDIDO["inaplazable"]] = auth()->user()->id; + } + return $this->pedidoModel->update($this->pedido->id, $data); + } /**======================================================================== * RELATION METHODS *========================================================================**/ @@ -1016,4 +1057,60 @@ class ProductionService extends BaseService } return $status; } + public function userDates(): array + { + $userDates = []; + foreach ($this->ordenTrabajoConfig->DATE_USER_MAPPING as $key => $value) { + $otUserEntity = $this->otUser->where("orden_trabajo_id", $this->ot->id)->first(); + $userEntity = $otUserEntity->userBy($value); + if ($userEntity) { + $userDates[$key] = $userEntity->full_name; + } else { + $userDates[$key] = null; + } + } + return $userDates; + } + public function pedidoUserDates(): array + { + $pedidoUserDates = []; + foreach ($this->ordenTrabajoConfig->DATE_USER_MAPPING_PEDIDO as $key => $value) { + $userEntity = $this->pedido->userBy($value); + if ($userEntity) { + $pedidoUserDates[$key] = $userEntity->full_name; + } else { + $pedidoUserDates[$key] = null; + } + } + return $pedidoUserDates; + } + public function getTiempoProcesamientoHHMM(): string + { + $time_tareas_seconds = array_map(fn($q) => $q->tiempo_estimado ?? 0, $this->ot->tareas()); + $seconds = array_sum($time_tareas_seconds); + return float_seconds_to_hhmm_string($seconds); + } + public function updateProgress(): bool + { + $userDates = $this->ordenTrabajoConfig->DATE_USER_MAPPING; + $pedidoUserDates = $this->ordenTrabajoConfig->DATE_USER_MAPPING_PEDIDO; + + $fill_dates = 0; + $status = false; + $total = count($userDates) + count($pedidoUserDates); + if ($this->ot->estado != "F") { + foreach ($userDates as $key => $value) { + if ($this->ot->dates()->{$key} != null) $fill_dates++; + } + foreach ($pedidoUserDates as $key => $value) { + if ($this->pedido->{$key} != null) $fill_dates++; + } + + $progreso = (float) $fill_dates / $total * 100; + $status = $this->otModel->update($this->ot->id, ["progreso" => round($progreso,2)]); + }else{ + $status = $this->otModel->update($this->ot->id, ["progreso" => 100]); + } + return $status; + } } diff --git a/ci4/app/Views/themes/vuexy/components/tables/ot_task_table.php b/ci4/app/Views/themes/vuexy/components/tables/ot_task_table.php index cc9e048c..60dc55d3 100644 --- a/ci4/app/Views/themes/vuexy/components/tables/ot_task_table.php +++ b/ci4/app/Views/themes/vuexy/components/tables/ot_task_table.php @@ -7,7 +7,7 @@ - + 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 d569c1ec..c45bb0c8 100644 --- a/ci4/app/Views/themes/vuexy/form/produccion/ot/otDates.php +++ b/ci4/app/Views/themes/vuexy/form/produccion/ot/otDates.php @@ -15,27 +15,33 @@
- +
- + +
+
- + +
+
- + +
+
@@ -43,12 +49,13 @@
- + +
+