From 60706ecfc2dff8cba1a0843160b0a2fef37c5527 Mon Sep 17 00:00:00 2001 From: amazuecos Date: Tue, 24 Dec 2024 12:51:44 +0100 Subject: [PATCH] add maquinas tareas --- ci4/app/Config/Routes.php | 1 + .../Controllers/Produccion/Ordentrabajo.php | 5 + ci4/app/Database/Seeds/MaquinaTareaSeeder.php | 7 +- .../PresupuestoAcabadosEntity.php | 7 + .../PresupuestoEncuadernacionesEntity.php | 7 + .../Presupuestos/PresupuestoEntity.php | 7 +- .../PresupuestoManipuladosEntity.php | 6 + .../PresupuestoPreimpresionesEntity.php | 6 + .../PresupuestoServiciosExtraEntity.php | 7 + .../Models/OrdenTrabajo/OrdenTrabajoTarea.php | 5 + .../TarifaEncuadernacionMaquinaModel.php | 7 +- .../Maquinas/TarifaExtraMaquinaModel.php | 5 +- .../Maquinas/TarifaManipuladoMaquinaModel.php | 4 +- .../TarifaPreimpresionMaquinaModel.php | 3 +- ci4/app/Services/ProductionService.php | 235 +++++++++++++++--- 15 files changed, 266 insertions(+), 46 deletions(-) diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 3e4948e8..07768449 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -882,6 +882,7 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func $routes->group('ordentrabajo', ['namespace' => 'App\Controllers\Produccion'], function ($routes) { $routes->get('', 'Ordentrabajo::index', ['as' => 'viewOrdenTrabajoIndex']); $routes->get('edit/(:num)', 'Ordentrabajo::edit/$1', ['as' => 'viewOrdenTrabajoEdit']); + $routes->delete('reset/tareas/(:num)', 'Ordentrabajo::reset_tareas/$1'); $routes->get('summary/(:num)', 'Ordentrabajo::get_orden_trabajo_summary/$1', ['as' => 'getOrdenTrabajoSumary']); $routes->get('datatable', 'Ordentrabajo::datatable', ['as' => 'datatableOrdenTrabajo']); }); diff --git a/ci4/app/Controllers/Produccion/Ordentrabajo.php b/ci4/app/Controllers/Produccion/Ordentrabajo.php index 29b3f5cb..a278ca37 100755 --- a/ci4/app/Controllers/Produccion/Ordentrabajo.php +++ b/ci4/app/Controllers/Produccion/Ordentrabajo.php @@ -74,6 +74,11 @@ class Ordentrabajo extends BaseController ->add("action" ,fn($q) => $q->id) ->toJson(true); } + public function reset_tareas(int $orden_trabajo_id) + { + $r = $this->produccionService->init($orden_trabajo_id)->resetAllTareas(); + return $this->response->setJSON(["message" => "Tareas reseteadas" ,"status" => $r]); + } } \ No newline at end of file diff --git a/ci4/app/Database/Seeds/MaquinaTareaSeeder.php b/ci4/app/Database/Seeds/MaquinaTareaSeeder.php index b103a55c..2accb9ec 100644 --- a/ci4/app/Database/Seeds/MaquinaTareaSeeder.php +++ b/ci4/app/Database/Seeds/MaquinaTareaSeeder.php @@ -9,7 +9,7 @@ class MaquinaTareaSeeder extends Seeder { public function run() { - + $m = model(MaquinaTareaModel::class); $data = [ [ "name" => "Grapar", @@ -39,8 +39,11 @@ class MaquinaTareaSeeder extends Seeder "name" => "Corte", "description" => "Manipulado" ], + [ + "name" => "Marcapáginas", + "description" => "Acabado" + ], ]; - $m = model(MaquinaTareaModel::class); $m->insertBatch($data); } } diff --git a/ci4/app/Entities/Presupuestos/PresupuestoAcabadosEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoAcabadosEntity.php index 02af9b3a..c7583a17 100755 --- a/ci4/app/Entities/Presupuestos/PresupuestoAcabadosEntity.php +++ b/ci4/app/Entities/Presupuestos/PresupuestoAcabadosEntity.php @@ -1,6 +1,7 @@ "int", "sobrecubierta" => "int", ]; + + public function maquinas() : array + { + $m = model(TarifaAcabadoMaquinaModel::class); + return $m->where("tarifa_acabado_id",$this->attributes["tarifa_acabado_id"])->findAll(); + } } diff --git a/ci4/app/Entities/Presupuestos/PresupuestoEncuadernacionesEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoEncuadernacionesEntity.php index 560fa668..03f95924 100755 --- a/ci4/app/Entities/Presupuestos/PresupuestoEncuadernacionesEntity.php +++ b/ci4/app/Entities/Presupuestos/PresupuestoEncuadernacionesEntity.php @@ -1,6 +1,8 @@ "float", "margen" => "float", ]; + public function maquinas() : array + { + $m = model(TarifaEncuadernacionMaquinaModel::class); + return $m->where("tarifa_encuadernacion_id",$this->attributes["tarifa_encuadernado_id"])->findAll(); + } } diff --git a/ci4/app/Entities/Presupuestos/PresupuestoEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoEntity.php index df20aed4..6fb49024 100755 --- a/ci4/app/Entities/Presupuestos/PresupuestoEntity.php +++ b/ci4/app/Entities/Presupuestos/PresupuestoEntity.php @@ -10,6 +10,7 @@ use App\Models\Presupuestos\PresupuestoLineaModel; use App\Models\Presupuestos\PresupuestoManipuladosModel; use App\Models\Presupuestos\PresupuestoModel; use App\Models\Presupuestos\PresupuestoPreimpresionesModel; +use App\Models\Presupuestos\PresupuestoServiciosExtraModel; use CodeIgniter\Entity; class PresupuestoEntity extends \CodeIgniter\Entity\Entity @@ -222,5 +223,9 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity $m = model(PresupuestoManipuladosModel::class); return $m->where("presupuesto_id",$this->attributes["id"])->findAll(); } - + public function extras(): array + { + $m = model(PresupuestoServiciosExtraModel::class); + return $m->where("presupuesto_id",$this->attributes["id"])->findAll(); + } } diff --git a/ci4/app/Entities/Presupuestos/PresupuestoManipuladosEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoManipuladosEntity.php index d7b3d752..e596dbd2 100644 --- a/ci4/app/Entities/Presupuestos/PresupuestoManipuladosEntity.php +++ b/ci4/app/Entities/Presupuestos/PresupuestoManipuladosEntity.php @@ -1,6 +1,7 @@ "float", "margen" => "float", ]; + public function maquinas() : array + { + $m = model(TarifaManipuladoMaquinaModel::class); + return $m->where("tarifa_manipulado_id",$this->attributes["tarifa_manipulado_id"])->findAll(); + } } diff --git a/ci4/app/Entities/Presupuestos/PresupuestoPreimpresionesEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoPreimpresionesEntity.php index 7fa9cdb4..79cfbcdb 100755 --- a/ci4/app/Entities/Presupuestos/PresupuestoPreimpresionesEntity.php +++ b/ci4/app/Entities/Presupuestos/PresupuestoPreimpresionesEntity.php @@ -1,6 +1,7 @@ "float", "margen" => "float", ]; + public function maquinas() : array + { + $m = model(TarifaPreimpresionMaquinaModel::class); + return $m->where("tarifa_preimpresion_id",$this->attributes["tarifa_preimpresion_id"])->findAll(); + } } diff --git a/ci4/app/Entities/Presupuestos/PresupuestoServiciosExtraEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoServiciosExtraEntity.php index 68b12931..77f7db92 100755 --- a/ci4/app/Entities/Presupuestos/PresupuestoServiciosExtraEntity.php +++ b/ci4/app/Entities/Presupuestos/PresupuestoServiciosExtraEntity.php @@ -1,6 +1,7 @@ "float", "margen" => "float", ]; + + public function maquinas() : array + { + $m = model(TarifaExtraMaquinaModel::class); + return $m->where("tarifa_extra_id",$this->attributes["tarifa_extra_id"])->findAll(); + } } diff --git a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoTarea.php b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoTarea.php index a6fe7f89..8f82da59 100644 --- a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoTarea.php +++ b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoTarea.php @@ -17,6 +17,11 @@ class OrdenTrabajoTarea extends Model protected $allowedFields = [ "orden_trabajo_id", "presupuesto_linea_id", + "presupuesto_acabado_id", + "presupuesto_preimpresion_id", + "presupuesto_encuadernado_id", + "presupuesto_extra_id", + "presupuesto_manipulado_id", "nombre", "orden", "maquina_id", diff --git a/ci4/app/Models/Tarifas/Maquinas/TarifaEncuadernacionMaquinaModel.php b/ci4/app/Models/Tarifas/Maquinas/TarifaEncuadernacionMaquinaModel.php index f69beabd..6673625f 100644 --- a/ci4/app/Models/Tarifas/Maquinas/TarifaEncuadernacionMaquinaModel.php +++ b/ci4/app/Models/Tarifas/Maquinas/TarifaEncuadernacionMaquinaModel.php @@ -64,12 +64,11 @@ class TarifaEncuadernacionMaquinaModel extends Model "lg_maquinas.nombre as maquinaNombre", "maquina_tareas.name as tareaNombre" ] - )->join("lg_maquinas", "lg_maquinas.id = tarifa_encuadernacion_maquinas.maquina_id", "left") - ->join("maquina_tareas", "maquina_tareas.id = tarifa_encuadernacion_maquinas.maquina_tarea_id", "left") + )->join("lg_maquinas","lg_maquinas.id = tarifa_encuadernacion_maquinas.maquina_id","left") + ->join("maquina_tareas","maquina_tareas.id = tarifa_encuadernacion_maquinas.maquina_tarea_id","left") ->where("tarifa_encuadernacion_maquinas.deleted_at",null); - if ($tarifa_encuadernacion_id) - $query->where("tarifa_encuadernacion_maquinas.id", $tarifa_encuadernacion_id); + $query->where("tarifa_encuadernacion_maquinas.tarifa_encuadernacion_id", $tarifa_encuadernacion_id); return $query; } } diff --git a/ci4/app/Models/Tarifas/Maquinas/TarifaExtraMaquinaModel.php b/ci4/app/Models/Tarifas/Maquinas/TarifaExtraMaquinaModel.php index 9cbe193f..1ee4be1e 100644 --- a/ci4/app/Models/Tarifas/Maquinas/TarifaExtraMaquinaModel.php +++ b/ci4/app/Models/Tarifas/Maquinas/TarifaExtraMaquinaModel.php @@ -67,10 +67,9 @@ class TarifaExtraMaquinaModel extends Model ] )->join("lg_maquinas", "lg_maquinas.id = tarifa_extra_maquinas.maquina_id", "left") ->join("maquina_tareas", "maquina_tareas.id = tarifa_extra_maquinas.maquina_tarea_id", "left") - ->where("tarifa_extra_maquinas.deleted_at",null); - + ->where("tarifa_extra_maquinas.deleted_at", null); if ($tarifa_extra_id) - $query->where("tarifa_extra_maquinas.id", $tarifa_extra_id); + $query->where("tarifa_extra_maquinas.tarifa_extra_id", $tarifa_extra_id); return $query; } } diff --git a/ci4/app/Models/Tarifas/Maquinas/TarifaManipuladoMaquinaModel.php b/ci4/app/Models/Tarifas/Maquinas/TarifaManipuladoMaquinaModel.php index 05aad897..4dc7430d 100644 --- a/ci4/app/Models/Tarifas/Maquinas/TarifaManipuladoMaquinaModel.php +++ b/ci4/app/Models/Tarifas/Maquinas/TarifaManipuladoMaquinaModel.php @@ -67,9 +67,9 @@ class TarifaManipuladoMaquinaModel extends Model ] )->join("lg_maquinas", "lg_maquinas.id = tarifa_manipulado_maquinas.maquina_id", "left") ->join("maquina_tareas", "maquina_tareas.id = tarifa_manipulado_maquinas.maquina_tarea_id", "left") - ->where("tarifa_manipulado_maquinas.deleted_at",null); + ->where("tarifa_manipulado_maquinas.deleted_at", null); if ($tarifa_manipulado_id) - $query->where("tarifa_manipulado_maquinas.id", $tarifa_manipulado_id); + $query->where("tarifa_manipulado_maquinas.tarifa_manipulado_id", $tarifa_manipulado_id); return $query; } } diff --git a/ci4/app/Models/Tarifas/Maquinas/TarifaPreimpresionMaquinaModel.php b/ci4/app/Models/Tarifas/Maquinas/TarifaPreimpresionMaquinaModel.php index d6d69837..582e5bc3 100644 --- a/ci4/app/Models/Tarifas/Maquinas/TarifaPreimpresionMaquinaModel.php +++ b/ci4/app/Models/Tarifas/Maquinas/TarifaPreimpresionMaquinaModel.php @@ -68,9 +68,8 @@ class TarifaPreimpresionMaquinaModel extends Model )->join("lg_maquinas", "lg_maquinas.id = tarifa_preimpresion_maquinas.maquina_id", "left") ->join("maquina_tareas", "maquina_tareas.id = tarifa_preimpresion_maquinas.maquina_tarea_id", "left") ->where("tarifa_preimpresion_maquinas.deleted_at", null); - if ($tarifa_preimpresion_id) - $query->where("tarifa_preimpresion_maquinas.id", $tarifa_preimpresion_id); + $query->where("tarifa_preimpresion_maquinas.tarifa_preimpresion_id", $tarifa_preimpresion_id); return $query; } } diff --git a/ci4/app/Services/ProductionService.php b/ci4/app/Services/ProductionService.php index 320255bb..ab71148b 100644 --- a/ci4/app/Services/ProductionService.php +++ b/ci4/app/Services/ProductionService.php @@ -14,6 +14,7 @@ use App\Models\OrdenTrabajo\OrdenTrabajoModel; use App\Models\OrdenTrabajo\OrdenTrabajoTarea; use CodeIgniter\Config\BaseService; use CodeIgniter\Database\BaseBuilder; +use CodeIgniter\Database\BaseResult; use CodeIgniter\Database\Exceptions\DatabaseException; /** @@ -62,28 +63,16 @@ class ProductionService extends BaseService $this->otTarea = model(OrdenTrabajoTarea::class); return $this; } - /** - * Obtiene el pedido asociado a esta clase + * Devuelve la orden de trabajo. * - * @return PedidoEntity + * @return OrdenTrabajoEntity */ - public function getPedido(): PedidoEntity - { - return $this->pedido; - } - public function getPresupuesto(): PresupuestoEntity - { - return $this->presupuesto; - } - public function getCliente(): ClienteEntity - { - return $this->presupuesto->cliente(); - } public function getOrdenTrabajo(): OrdenTrabajoEntity { return $this->ot; } + /** * Crea una instancia de la orden de trabajo * @@ -110,7 +99,8 @@ class ProductionService extends BaseService $ot_id = $this->otModel->getInsertID(); $ot->id = $ot_id; $this->storeOrdenTrabajoDates($ot); - $this->storeOrdenTrabajoTareas($ot); + $this->storeAllTareas(); + $this->init($ot_id); return $ot; } @@ -130,15 +120,29 @@ class ProductionService extends BaseService "fecha_entrega_externo" => $this->pedido->fecha_entrega_externo, ]); } + protected function storeAllTareas() + { + $this->storeOrdenTrabajoTareas(); + $this->storeOrdenTrabajoAcabadoTareas(); + $this->storeOrdenTrabajoManipuladoTareas(); + $this->storeOrdenTrabajoPreimpresionTareas(); + $this->storeOrdenTrabajoEncuadernacionTareas(); + $this->storeOrdenTrabajoExtraTareas(); + } + public function resetAllTareas() : BaseResult|bool + { + $r = $this->otTarea->where("orden_trabajo_id",$this->ot->id)->delete(purge:true); + $this->storeAllTareas(); + return $r; + } /** * Inserta las tareas de la orden de trabajo. * Acepta como argumento una entidad de la orden de trabajo OrdenTrabajoEntity * * - * @param OrdenTrabajoEntity $ot * @return integer|boolean Numero de registro insertados o `FALSE` si error */ - protected function storeOrdenTrabajoTareas(OrdenTrabajoEntity $ot): int|bool + protected function storeOrdenTrabajoTareas(): int|bool { $p_lineas = $this->presupuesto->presupuestoLineas(); @@ -146,7 +150,7 @@ class ProductionService extends BaseService foreach ($p_lineas as $key => $p_linea) { $p_linea_maquina = $p_linea->maquina(); - $ot_tareas["orden_trabajo_id"] = $ot->id; + $ot_tareas["orden_trabajo_id"] = $this->ot->id; $ot_tareas["presupuesto_linea_id"] = $p_linea->id; //TODO : Por ahora nombre maquina, asignar nombre tarea en //TODO : base a la tarifa asociada a la linea de presupuesto @@ -161,19 +165,132 @@ class ProductionService extends BaseService } return $insert_query_result; } - /** - * Devuelve las lineas de presupuesto con la máquina asociada a cada una - * - * @return array - */ - protected function getPresupuestoLineasWithMaquina(): array + protected function storeOrdenTrabajoAcabadoTareas(): bool { - $presupuesto_lineas = $this->presupuesto->presupuestoLineas(); - foreach ($presupuesto_lineas as $key => $linea) { - $linea->maquina = $linea->maquina(); + $p_lineas = $this->presupuesto_lineas_acabado(); + foreach ($p_lineas as $key => $p_linea) { + $p_linea_maquinas = $p_linea->maquinas(); + $ot_tareas = []; + if (count($p_linea_maquinas) > 0) { + foreach ($p_linea_maquinas as $key => $linea) { + $ot_tareas["orden_trabajo_id"] = $this->ot->id; + $ot_tareas["presupuesto_acabado_id"] = $p_linea->id; + $ot_tareas["nombre"] = $linea->nombre; + $ot_tareas["orden"] = $linea->orden_planning; + $ot_tareas["maquina_id"] = $linea->id; + $ot_tareas["imposicion_id"] = null; + $this->otTarea->insert($ot_tareas); + $ot_tareas = []; + } + } else { + $ot_tareas["orden_trabajo_id"] = $this->ot->id; + $ot_tareas["presupuesto_acabado_id"] = $p_linea->id; + $this->otTarea->insert($ot_tareas); + } } - return $presupuesto_lineas; + return true; } + protected function storeOrdenTrabajoManipuladoTareas(): bool + { + $p_lineas = $this->presupuesto_lineas_manipulado(); + foreach ($p_lineas as $key => $p_linea) { + $p_linea_maquinas = $p_linea->maquinas(); + $ot_tareas = []; + if (count($p_linea_maquinas) > 0) { + foreach ($p_linea_maquinas as $key => $linea) { + $ot_tareas["orden_trabajo_id"] = $this->ot->id; + $ot_tareas["presupuesto_manipulado_id"] = $p_linea->id; + $ot_tareas["nombre"] = $linea->nombre; + $ot_tareas["orden"] = $linea->orden_planning; + $ot_tareas["maquina_id"] = $linea->id; + $ot_tareas["imposicion_id"] = null; + $this->otTarea->insert($ot_tareas); + $ot_tareas = []; + } + } else { + $ot_tareas["orden_trabajo_id"] = $this->ot->id; + $ot_tareas["presupuesto_manipulado_id"] = $p_linea->id; + $this->otTarea->insert($ot_tareas); + } + } + return true; + } + protected function storeOrdenTrabajoPreimpresionTareas(): bool + { + $p_lineas = $this->presupuesto_lineas_preimpresion(); + foreach ($p_lineas as $key => $p_linea) { + $p_linea_maquinas = $p_linea->maquinas(); + $ot_tareas = []; + if (count($p_linea_maquinas) > 0) { + foreach ($p_linea_maquinas as $key => $linea) { + $ot_tareas["orden_trabajo_id"] = $this->ot->id; + $ot_tareas["presupuesto_preimpresion_id"] = $p_linea->id; + $ot_tareas["nombre"] = $linea->nombre; + $ot_tareas["orden"] = $linea->orden_planning; + $ot_tareas["maquina_id"] = $linea->id; + $ot_tareas["imposicion_id"] = null; + $this->otTarea->insert($ot_tareas); + $ot_tareas = []; + } + } else { + $ot_tareas["orden_trabajo_id"] = $this->ot->id; + $ot_tareas["presupuesto_preimpresion_id"] = $p_linea->id; + $this->otTarea->insert($ot_tareas); + } + } + return true; + } + protected function storeOrdenTrabajoEncuadernacionTareas(): bool + { + $p_lineas = $this->presupuesto_lineas_encuadernaciones(); + foreach ($p_lineas as $key => $p_linea) { + $p_linea_maquinas = $p_linea->maquinas(); + $ot_tareas = []; + if (count($p_linea_maquinas) > 0) { + foreach ($p_linea_maquinas as $key => $linea) { + $ot_tareas["orden_trabajo_id"] = $this->ot->id; + $ot_tareas["presupuesto_encuadernacion_id"] = $p_linea->id; + $ot_tareas["nombre"] = $linea->nombre; + $ot_tareas["orden"] = $linea->orden_planning; + $ot_tareas["maquina_id"] = $linea->id; + $ot_tareas["imposicion_id"] = null; + $this->otTarea->insert($ot_tareas); + $ot_tareas = []; + } + } else { + $ot_tareas["orden_trabajo_id"] = $this->ot->id; + $ot_tareas["presupuesto_encuadernacion_id"] = $p_linea->id; + $this->otTarea->insert($ot_tareas); + } + } + return true; + } + protected function storeOrdenTrabajoExtraTareas(): bool + { + $p_lineas = $this->presupuesto_lineas_extras(); + foreach ($p_lineas as $key => $p_linea) { + $p_linea_maquinas = $p_linea->maquinas(); + $ot_tareas = []; + if (count($p_linea_maquinas) > 0) { + foreach ($p_linea_maquinas as $key => $linea) { + $ot_tareas["orden_trabajo_id"] = $this->ot->id; + $ot_tareas["presupuesto_extra_id"] = $p_linea->id; + $ot_tareas["nombre"] = $linea->nombre; + $ot_tareas["orden"] = $linea->orden_planning; + $ot_tareas["maquina_id"] = $linea->id; + $ot_tareas["imposicion_id"] = null; + $this->otTarea->insert($ot_tareas); + $ot_tareas = []; + } + } else { + $ot_tareas["orden_trabajo_id"] = $this->ot->id; + $ot_tareas["presupuesto_extra_id"] = $p_linea->id; + $this->otTarea->insert($ot_tareas); + } + } + return true; + } + public function getTareas(): array @@ -221,9 +338,6 @@ class ProductionService extends BaseService /** * Get a summary from ot with the following structure * - - * - * * @return array * ```php * [ @@ -248,4 +362,61 @@ class ProductionService extends BaseService ]; return $summary; } + + /**======================================================================== + * RELATION METHODS + *========================================================================**/ + /** + * Obtiene el pedido asociado a esta clase + * + * @return PedidoEntity + */ + public function getPedido(): PedidoEntity + { + return $this->pedido; + } + + public function getCliente(): ClienteEntity + { + return $this->presupuesto->cliente(); + } + + + public function getPresupuesto(): PresupuestoEntity + { + return $this->presupuesto; + } + /** + * Devuelve las lineas de presupuesto con la máquina asociada a cada una + * + * @return array + */ + protected function getPresupuestoLineasWithMaquina(): array + { + $presupuesto_lineas = $this->presupuesto->presupuestoLineas(); + foreach ($presupuesto_lineas as $key => $linea) { + $linea->maquina = $linea->maquina(); + } + return $presupuesto_lineas; + } + protected function presupuesto_lineas_acabado(): array + { + return $this->presupuesto->acabados(); + } + protected function presupuesto_lineas_manipulado(): array + { + return $this->presupuesto->manipulados(); + } + protected function presupuesto_lineas_preimpresion(): array + { + return $this->presupuesto->preimpresiones(); + } + protected function presupuesto_lineas_encuadernaciones(): array + { + return $this->presupuesto->encuadernaciones(); + } + protected function presupuesto_lineas_extras(): array + { + return $this->presupuesto->extras(); + } }