From c1cae0fcf7d7a1ea7d8bf452742749b025a7b758 Mon Sep 17 00:00:00 2001 From: Jaime Jimenez Date: Mon, 24 Feb 2025 09:59:35 +0100 Subject: [PATCH 1/8] =?UTF-8?q?a=C3=B1adida=20migracion=20y=20modelo,=20en?= =?UTF-8?q?tidad=20y=20controlador=20basicos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tarifas/Acabados/ServiciosAcabado.php | 68 +++++++++++ .../2025-02-24-093400_serviciosAcabado.php | 107 ++++++++++++++++++ .../Acabados/ServicioAcabadoEntity.php | 23 ++++ ci4/app/Language/es/ServicioAcabado.php | 28 +++++ .../Tarifas/Acabados/ServicioAcabadoModel.php | 25 ++++ 5 files changed, 251 insertions(+) create mode 100644 ci4/app/Controllers/Tarifas/Acabados/ServiciosAcabado.php create mode 100644 ci4/app/Database/Migrations/2025-02-24-093400_serviciosAcabado.php create mode 100644 ci4/app/Entities/Tarifas/Acabados/ServicioAcabadoEntity.php create mode 100755 ci4/app/Language/es/ServicioAcabado.php create mode 100644 ci4/app/Models/Tarifas/Acabados/ServicioAcabadoModel.php diff --git a/ci4/app/Controllers/Tarifas/Acabados/ServiciosAcabado.php b/ci4/app/Controllers/Tarifas/Acabados/ServiciosAcabado.php new file mode 100644 index 00000000..c350415a --- /dev/null +++ b/ci4/app/Controllers/Tarifas/Acabados/ServiciosAcabado.php @@ -0,0 +1,68 @@ +viewData['pageTitle'] = lang('Servicioacabado.moduleTitle'); + $this->viewData['usingSweetAlert'] = true; + + // Se indica que este controlador trabaja con soft_delete + $this->soft_delete = true; + // Se indica el flag para los ficheros borrados + $this->delete_flag = 1; + + $this->viewData = ['usingServerSideDataTable' => true]; + + // Breadcrumbs + $this->viewData['breadcrumb'] = [ + ['title' => lang("App.menu_tarifas"), 'route' => "javascript:void(0);", 'active' => false], + ['title' => lang("App.menu_Servicioacabado"), 'route' => site_url('tarifas/acabados'), 'active' => true] + ]; + + parent::initController($request, $response, $logger); + } + + + public function index() + { + + checkPermission('tarifa-acabado.menu'); + + $viewData = [ + 'currentModule' => static::$controllerSlug, + 'pageSubTitle' => lang('Basic.global.ManageAllRecords', [lang('Servicioacabado.serviciosacabado')]), + 'servicioacabadoEntity' => new ServicioAcabadoEntity(), + 'usingServerSideDataTable' => true, + ]; + + $viewData = array_merge($this->viewData, $viewData); // merge any possible values from the parent controller class + + return view(static::$viewPath . 'viewServicioAcabadoList', $viewData); + } + +} \ No newline at end of file diff --git a/ci4/app/Database/Migrations/2025-02-24-093400_serviciosAcabado.php b/ci4/app/Database/Migrations/2025-02-24-093400_serviciosAcabado.php new file mode 100644 index 00000000..796e7495 --- /dev/null +++ b/ci4/app/Database/Migrations/2025-02-24-093400_serviciosAcabado.php @@ -0,0 +1,107 @@ +forge->addField([ + 'id' => [ + 'type' => 'INT', + 'constraint' => 11, + 'unsigned' => true, + 'auto_increment' => true, + ], + 'tarifa_id' => [ + 'type' => 'INT', + 'constraint' => 11, + 'unsigned' => true, + ], + 'nombre' =>[ + 'type' => 'VARCHAR', + 'constraint' => 100, + 'unique' => true + ], + 'comentarios' => [ + 'type' => 'TEXT', + 'null' => true, + ], + 'user_updated_id' => [ + 'type' => 'INT', + 'constraint' => 11, + 'unsigned' => true, + ], + 'created_at' => [ + 'type' => 'DATETIME', + 'null' => true, + ], + 'updated_at' => [ + 'type' => 'DATETIME', + 'null' => true, + ], + 'deleted_at' => [ + 'type' => 'DATETIME', + 'null' => true, + ], + ]); + + $this->forge->addPrimaryKey('id'); + $this->forge->addForeignKey('user_updated_id', 'users', 'id', 'CASCADE', 'CASCADE'); + + $this->forge->createTable('servicios_acabado'); + + $this->forge->addField([ + 'id' => [ + 'type' => 'INT', + 'constraint' => 11, + 'unsigned' => true, + 'auto_increment' => true, + ], + 'tarifa_id' => [ + 'type' => 'INT', + 'constraint' => 11, + 'unsigned' => true, + ], + 'servicio_id' => [ + 'type' => 'INT', + 'constraint' => 11, + 'unsigned' => true, + ], + 'user_updated_id' => [ + 'type' => 'INT', + 'constraint' => 11, + 'unsigned' => true, + ], + 'created_at' => [ + 'type' => 'DATETIME', + 'null' => true, + ], + 'updated_at' => [ + 'type' => 'DATETIME', + 'null' => true, + ], + 'deleted_at' => [ + 'type' => 'DATETIME', + 'null' => true, + ], + ]); + + $this->forge->addPrimaryKey('id'); + $this->forge->addForeignKey('servicio_id', 'servicios_acabado', 'id', 'NO_ACTION', 'NO_ACTION'); + $this->forge->addForeignKey('tarifa_id', 'lg_tarifa_acabado', 'id', 'NO_ACTION', 'NO_ACTION'); + $this->forge->addForeignKey('user_updated_id', 'users', 'id', 'NO_ACTION', 'NO_ACTION'); + + $this->forge->createTable('tarifasAcabado_serviciosAcabado'); + } + + public function down() + { + $this->forge->dropTable('servicios_acabado'); + $this->forge->dropTable('tarifasAcabado_serviciosAcabado'); + } +} diff --git a/ci4/app/Entities/Tarifas/Acabados/ServicioAcabadoEntity.php b/ci4/app/Entities/Tarifas/Acabados/ServicioAcabadoEntity.php new file mode 100644 index 00000000..da0fb821 --- /dev/null +++ b/ci4/app/Entities/Tarifas/Acabados/ServicioAcabadoEntity.php @@ -0,0 +1,23 @@ + null, + "nombre" => null, + 'mostrar_en_cliente' => false, + "comentarios" => null, + "user_updated_id" => 0, + "created_at" => null, + "updated_at" => null, + "deleted_at" => null, + ]; + protected $casts = [ + "mostrar_en_cliente" => "boolean", + "comentarios" => "string", + "user_updated_id" => "int", + ]; +} \ No newline at end of file diff --git a/ci4/app/Language/es/ServicioAcabado.php b/ci4/app/Language/es/ServicioAcabado.php new file mode 100755 index 00000000..93a26322 --- /dev/null +++ b/ci4/app/Language/es/ServicioAcabado.php @@ -0,0 +1,28 @@ + 'ID', + 'moduleTitle' => 'Servicios Acabado', + 'nombre' => 'Nombre', + 'comentarios' => 'Comentarios', + 'mostrar_en_presupuesto_cliente' => 'Mostrar en presupuesto (cliente)', + 'serviciosacabado' => 'Servicios Acabado', + 'tarifasacabado' => 'Tarifas Acabado', + "servicio_cubierta" => "Acabado cubierta", + "servicio_sobrecubierta" => "Acabado sobrecubierta", + 'tarifaacabado' => 'Tarifa Acabado', + 'servicioscabadoList' => 'Lista Servicios Acabado', + 'updatedAt' => 'Actualizado en', + 'createdAt' => 'Creado en', + 'deletedAt' => 'Borrado en', + 'userUpdateId' => 'ID Usuario "Actualizado en"', + 'validation' => [ + 'nombre' => [ + 'max_length' => 'El campo {field} no puede exceder {param} caracteres en longitud.', + 'required' => 'El campo {field} es obligatorio.', + ], + ], +]; \ No newline at end of file diff --git a/ci4/app/Models/Tarifas/Acabados/ServicioAcabadoModel.php b/ci4/app/Models/Tarifas/Acabados/ServicioAcabadoModel.php new file mode 100644 index 00000000..d419a2f9 --- /dev/null +++ b/ci4/app/Models/Tarifas/Acabados/ServicioAcabadoModel.php @@ -0,0 +1,25 @@ + [ + "label" => "Servicioacabado.nombre", + "rules" => "trim|required|max_length[100]", + ], + ]; +} + + From 4601b15abea2645283995264f356114412f08372 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Jim=C3=A9nez?= Date: Mon, 24 Feb 2025 20:59:21 +0100 Subject: [PATCH 2/8] realizada la lista --- ci4/app/Config/RBAC/permissionMatrix.php | 15 ++-- ci4/app/Config/RBAC/permissions.php | 5 +- ci4/app/Config/Routes.php | 12 ++++ .../Tarifas/Acabados/ServiciosAcabado.php | 31 ++++++--- .../2025-02-24-093400_serviciosAcabado.php | 17 +++-- ci4/app/Language/es/App.php | 1 + ci4/app/Language/es/RolesPermisos.php | 1 + ci4/app/Language/es/ServicioAcabado.php | 7 +- .../Tarifas/Acabados/ServicioAcabadoModel.php | 30 +++++++- .../acabado/viewServiciosAcabadoList.php | 57 +++++++++++++++ .../themes/vuexy/main/menus/tarifas_menu.php | 8 +++ .../pages/tarifas/serviciosAcabado/list.js | 69 +++++++++++++++++++ 12 files changed, 226 insertions(+), 27 deletions(-) create mode 100644 ci4/app/Views/themes/vuexy/form/tarifas/acabado/viewServiciosAcabadoList.php create mode 100644 httpdocs/assets/js/safekat/pages/tarifas/serviciosAcabado/list.js diff --git a/ci4/app/Config/RBAC/permissionMatrix.php b/ci4/app/Config/RBAC/permissionMatrix.php index c9f0a2ee..19be9092 100644 --- a/ci4/app/Config/RBAC/permissionMatrix.php +++ b/ci4/app/Config/RBAC/permissionMatrix.php @@ -41,10 +41,18 @@ const SK_PERMISSION_MATRIX = [ "tarifa-acabado.edit", "tarifa-acabado.delete", "tarifa-acabado.menu", + "servicio-acabado.create", + "servicio-acabado.edit", + "servicio-acabado.delete", + "servicio-acabado.menu", "tarifa-encuadernacion.create", "tarifa-encuadernacion.edit", "tarifa-encuadernacion.delete", "tarifa-encuadernacion.menu", + "tarifa-extra.create", + "tarifa-extra.edit", + "tarifa-extra.delete", + "tarifa-extra.menu", "tarifa-envio.create", "tarifa-envio.edit", "tarifa-envio.delete", @@ -89,7 +97,6 @@ const SK_PERMISSION_MATRIX = [ "roles-permisos.edit", "roles-permisos.delete", "roles-permisos.menu", - "tickets.create", "tickets.edit", "tickets.menu", ], @@ -129,7 +136,6 @@ const SK_PERMISSION_MATRIX = [ "direcciones.menu", "presupuesto.create", "presupuesto.edit", - "presupuesto.delete", "presupuesto.menu", "presupuesto-cliente.create", "presupuesto-cliente.edit", @@ -221,10 +227,6 @@ const SK_PERMISSION_MATRIX = [ "tarifa-encuadernacion.edit", "tarifa-encuadernacion.delete", "tarifa-encuadernacion.menu", - "tarifa-extra.create", - "tarifa-extra.edit", - "tarifa-extra.delete", - "tarifa-extra.menu", "tarifa-envio.create", "tarifa-envio.edit", "tarifa-envio.delete", @@ -269,7 +271,6 @@ const SK_PERMISSION_MATRIX = [ "roles-permisos.edit", "roles-permisos.delete", "roles-permisos.menu", - "tickets.create", "tickets.edit", "tickets.menu", ], diff --git a/ci4/app/Config/RBAC/permissions.php b/ci4/app/Config/RBAC/permissions.php index 35e8235f..cb3aecac 100644 --- a/ci4/app/Config/RBAC/permissions.php +++ b/ci4/app/Config/RBAC/permissions.php @@ -41,6 +41,10 @@ const SK_PERMISSIONS = [ 'tarifa-acabado.edit' => 'Can edit', 'tarifa-acabado.delete' => 'Can delete', 'tarifa-acabado.menu' => 'Menu shall be visualize', + 'servicio-acabado.create' => 'Can create', + 'servicio-acabado.edit' => 'Can edit', + 'servicio-acabado.delete' => 'Can delete', + 'servicio-acabado.menu' => 'Menu shall be visualize', 'tarifa-encuadernacion.create' => 'Can create', 'tarifa-encuadernacion.edit' => 'Can edit', 'tarifa-encuadernacion.delete' => 'Can delete', @@ -93,7 +97,6 @@ const SK_PERMISSIONS = [ 'roles-permisos.edit' => 'Can edit', 'roles-permisos.delete' => 'Can delete', 'roles-permisos.menu' => 'Menu shall be visualize', - 'tickets.create' => 'Can create', 'tickets.edit' => 'Can edit', 'tickets.menu' => 'Menu shall be visualize', ]; diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 5a60b886..39e25423 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -209,6 +209,18 @@ $routes->group('tarifasmanipulado', ['namespace' => 'App\Controllers\Tarifas'], $routes->resource('tarifasmanipulado', ['namespace' => 'App\Controllers\Tarifas', 'controller' => 'Tarifasmanipulado', 'except' => 'show,new,create,update']); +$routes->group('serviciosacabado', ['namespace' => 'App\Controllers\Tarifas\Acabados'], function ($routes) { + $routes->get('', 'ServiciosAcabado::index', ['as' => 'serviciosAcabadoList']); + $routes->get('add', 'ServiciosAcabado::add', ['as' => 'newServicioAcabado']); + $routes->post('add', 'ServiciosAcabado::add', ['as' => 'createServicioAcabado']); + $routes->get('edit/(:num)', 'ServiciosAcabado::edit/$1', ['as' => 'editServicioAcabado']); + $routes->post('edit/(:num)', 'ServiciosAcabado::edit/$1', ['as' => 'updateServicioAcabado']); + $routes->post('edit/(:num)', 'ServiciosAcabado::edit/$1', ['as' => 'updateServicioAcabado']); + $routes->get('datatable', 'ServiciosAcabado::datatable'); +}); +$routes->resource('tarifasmanipulado', ['namespace' => 'App\Controllers\Tarifas\Acabados', 'controller' => 'ServiciosAcabado', 'except' => 'show,new,create,update']); + + $routes->group('tarifamanipuladolineas', ['namespace' => 'App\Controllers\Tarifas'], function ($routes) { $routes->get('', 'Tarifamanipuladolineas::index', ['as' => 'tarifaManipuladoLineaList']); $routes->get('add', 'Tarifamanipuladolineas::add', ['as' => 'newTarifaManipuladoLinea']); diff --git a/ci4/app/Controllers/Tarifas/Acabados/ServiciosAcabado.php b/ci4/app/Controllers/Tarifas/Acabados/ServiciosAcabado.php index c350415a..1aed73dc 100644 --- a/ci4/app/Controllers/Tarifas/Acabados/ServiciosAcabado.php +++ b/ci4/app/Controllers/Tarifas/Acabados/ServiciosAcabado.php @@ -4,14 +4,14 @@ namespace App\Controllers\Tarifas\Acabados; use App\Controllers\BaseResourceController; use App\Entities\Tarifas\Acabados\ServicioAcabadoEntity; -use App\Models\Collection; -use App\Models\Tarifas\Acabados\ServiciosAcabadoModel; +use App\Models\Tarifas\Acabados\ServicioAcabadoModel; +use CodeIgniter\I18n\Time; +use Hermawan\DataTables\DataTable; - -class TarifaAcabados extends BaseResourceController +class ServiciosAcabado extends BaseResourceController { - protected $modelName = ServicioAcabadoEntity::class; + protected $modelName = ServicioAcabadoModel::class; protected $format = 'json'; protected static $singularObjectName = 'Servicio Acabado'; @@ -23,7 +23,7 @@ class TarifaAcabados extends BaseResourceController protected static $viewPath = 'themes/vuexy/form/tarifas/acabado/'; - protected $indexRoute = 'servicioAcabadoList'; + protected $indexRoute = 'serviciosAcabadoList'; public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger) @@ -36,7 +36,7 @@ class TarifaAcabados extends BaseResourceController // Se indica el flag para los ficheros borrados $this->delete_flag = 1; - $this->viewData = ['usingServerSideDataTable' => true]; + //$this->viewData = ['usingServerSideDataTable' => true]; // Breadcrumbs $this->viewData['breadcrumb'] = [ @@ -44,6 +44,7 @@ class TarifaAcabados extends BaseResourceController ['title' => lang("App.menu_Servicioacabado"), 'route' => site_url('tarifas/acabados'), 'active' => true] ]; + helper("time"); parent::initController($request, $response, $logger); } @@ -62,7 +63,21 @@ class TarifaAcabados extends BaseResourceController $viewData = array_merge($this->viewData, $viewData); // merge any possible values from the parent controller class - return view(static::$viewPath . 'viewServicioAcabadoList', $viewData); + return view(static::$viewPath . 'viewServiciosAcabadoList', $viewData); + } + + public function datatable(){ + + $model = model(ServicioAcabadoModel::class); + $q = $model->getDatatableQuery(); + //return $this->response->setJSON($q->get()); + return DataTable::of($q) + ->add("action", fn($q) => $q->id) + ->edit( + "updated_at", + fn($q) => Time::createFromFormat("Y-m-d H:i:s",$q->updated_at)->format("d/m/Y") + ) + ->toJson(returnAsObject: true); } } \ No newline at end of file diff --git a/ci4/app/Database/Migrations/2025-02-24-093400_serviciosAcabado.php b/ci4/app/Database/Migrations/2025-02-24-093400_serviciosAcabado.php index 796e7495..a7f4c561 100644 --- a/ci4/app/Database/Migrations/2025-02-24-093400_serviciosAcabado.php +++ b/ci4/app/Database/Migrations/2025-02-24-093400_serviciosAcabado.php @@ -17,11 +17,6 @@ class CreateServiciosAcabadoTable extends Migration 'unsigned' => true, 'auto_increment' => true, ], - 'tarifa_id' => [ - 'type' => 'INT', - 'constraint' => 11, - 'unsigned' => true, - ], 'nombre' =>[ 'type' => 'VARCHAR', 'constraint' => 100, @@ -31,6 +26,18 @@ class CreateServiciosAcabadoTable extends Migration 'type' => 'TEXT', 'null' => true, ], + 'acabado_cubierta' => [ + 'type' => 'BOOLEAN', + 'default' => false, + ], + 'acabado_sobrecubierta' => [ + 'type' => 'BOOLEAN', + 'default' => false, + ], + 'mostrar_en_presupuesto_cliente' => [ + 'type' => 'BOOLEAN', + 'default' => true, + ], 'user_updated_id' => [ 'type' => 'INT', 'constraint' => 11, diff --git a/ci4/app/Language/es/App.php b/ci4/app/Language/es/App.php index a24597ea..bb2ea491 100755 --- a/ci4/app/Language/es/App.php +++ b/ci4/app/Language/es/App.php @@ -797,6 +797,7 @@ return [ "menu_tarifamanipulado" => "Manipulado", "menu_tarifaencuadernacion" => "Encuadernación", "menu_tarifapapelcompra" => "Papel compra", + "menu_serviciosAcabado" => "Servicios acabado", "menu_tarifaacabado" => "Acabado", "menu_tarifapapeldefecto" => "Papel defecto", "menu_tarifaenvio" => "Envío", diff --git a/ci4/app/Language/es/RolesPermisos.php b/ci4/app/Language/es/RolesPermisos.php index ccc4176a..9fbe24ba 100644 --- a/ci4/app/Language/es/RolesPermisos.php +++ b/ci4/app/Language/es/RolesPermisos.php @@ -38,6 +38,7 @@ return [ 'tarifaPreimpresionSection' => 'Tarifas de preimpresión', 'tarifaManipuladoSection' => 'Tarifas de manipulado', 'tarifaAcabadoSection' => 'Tarifas de acabado', + 'servicioAcabadoSection' => 'Servicios de acabado', 'tarifaEncuadernacionSection' => 'Tarifas de encuadernación', 'tarifaEnvioSection' => 'Tarifas de envio', 'tarifaExtraSection' => 'Tarifas extra', diff --git a/ci4/app/Language/es/ServicioAcabado.php b/ci4/app/Language/es/ServicioAcabado.php index 93a26322..02e86456 100755 --- a/ci4/app/Language/es/ServicioAcabado.php +++ b/ci4/app/Language/es/ServicioAcabado.php @@ -10,15 +10,16 @@ return [ 'comentarios' => 'Comentarios', 'mostrar_en_presupuesto_cliente' => 'Mostrar en presupuesto (cliente)', 'serviciosacabado' => 'Servicios Acabado', + 'servicioacabado' => 'Servicio Acabado', 'tarifasacabado' => 'Tarifas Acabado', - "servicio_cubierta" => "Acabado cubierta", - "servicio_sobrecubierta" => "Acabado sobrecubierta", + "servicio_cubierta" => "Servicio cubierta", + "servicio_sobrecubierta" => "Servicio sobrecubierta", 'tarifaacabado' => 'Tarifa Acabado', 'servicioscabadoList' => 'Lista Servicios Acabado', 'updatedAt' => 'Actualizado en', 'createdAt' => 'Creado en', 'deletedAt' => 'Borrado en', - 'userUpdateId' => 'ID Usuario "Actualizado en"', + 'userUpdateId' => 'Modificado por', 'validation' => [ 'nombre' => [ 'max_length' => 'El campo {field} no puede exceder {param} caracteres en longitud.', diff --git a/ci4/app/Models/Tarifas/Acabados/ServicioAcabadoModel.php b/ci4/app/Models/Tarifas/Acabados/ServicioAcabadoModel.php index d419a2f9..5468f0d7 100644 --- a/ci4/app/Models/Tarifas/Acabados/ServicioAcabadoModel.php +++ b/ci4/app/Models/Tarifas/Acabados/ServicioAcabadoModel.php @@ -1,17 +1,23 @@ "trim|required|max_length[100]", ], ]; + + public function getDatatableQuery(): BaseBuilder + { + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.id, + t1.nombre, + t1.acabado_cubierta, + t1.acabado_sobrecubierta, + t1.mostrar_en_presupuesto_cliente, + CONCAT(users.first_name, ' ', users.last_name) as user_updated, + t1.updated_at", + ) + ->join("users", "t1.user_updated_id = users.id", "left") + ->where("t1.deleted_at", null); + return $builder; + } } diff --git a/ci4/app/Views/themes/vuexy/form/tarifas/acabado/viewServiciosAcabadoList.php b/ci4/app/Views/themes/vuexy/form/tarifas/acabado/viewServiciosAcabadoList.php new file mode 100644 index 00000000..c3c82a3d --- /dev/null +++ b/ci4/app/Views/themes/vuexy/form/tarifas/acabado/viewServiciosAcabadoList.php @@ -0,0 +1,57 @@ +include('themes/_commonPartialsBs/datatables') ?> +include('themes/_commonPartialsBs/_confirm2delete') ?> +extend('themes/vuexy/main/defaultlayout') ?> +section('content'); ?> +
+
+ +
+
+

+ 'btn btn-primary float-end']); ?> +
+
+ + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + +endSection() ?> + + +section('additionalExternalJs') ?> + + + + + + + + + + +endSection() ?> + diff --git a/ci4/app/Views/themes/vuexy/main/menus/tarifas_menu.php b/ci4/app/Views/themes/vuexy/main/menus/tarifas_menu.php index 5705c3e4..f5a1d08a 100644 --- a/ci4/app/Views/themes/vuexy/main/menus/tarifas_menu.php +++ b/ci4/app/Views/themes/vuexy/main/menus/tarifas_menu.php @@ -5,6 +5,7 @@ if ( auth()->user()->can('tarifa-preimpresion.menu') || auth()->user()->can('tarifa-manipulado.menu') || + auth()->user()->can('servicio-acabado.menu') || auth()->user()->can('tarifa-acabado.menu') || auth()->user()->can('tarifa-encuadernacion.menu') || auth()->user()->can('tarifa-envio.menu') || @@ -39,6 +40,13 @@ if ( + user()->can('servicio-acabado.menu')) { ?> + + user()->can('tarifa-encuadernacion.menu')) { ?> diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminEdit.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminEdit.js index d32f4ae4..bbfedb9f 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminEdit.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminEdit.js @@ -219,6 +219,7 @@ class PresupuestoAdminEdit { datos.selectedTirada = this.datosLibro.tirada.val(); datos.acabado_cubierta_id = this.datosLibro.acabadoCubierta.getVal(); datos.acabado_sobrecubierta_id = this.datosLibro.acabadoSobrecubierta.getVal(); + datos.acabado_faja_id = this.datosLibro.acabadoFaja.getVal(); datos = { ...datos, ...{ diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/datosLibro.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/datosLibro.js index f6fdb1c6..bcccd551 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/datosLibro.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/datosLibro.js @@ -71,7 +71,6 @@ class DatosLibro { this.div_faja = this.domItem.find('.faja-div'); this.cargando = cargando; - } init() { @@ -85,8 +84,9 @@ class DatosLibro { this.acabadoCubierta.item.on('select2:select', function () { - if (this.cargando) + if (this.cargando){ return; + } if (self.acabadoCubierta.getVal() == 0) { $(document).trigger('remove-servicio-lineas', 'acabadoCubierta'); @@ -95,10 +95,12 @@ class DatosLibro { $(document).trigger('add-servicio-lineas', 'acabadoCubierta'); } }); + this.acabadoSobrecubierta.item.on('select2:select', function () { - if (this.cargando) + if (this.cargando){ return; + } if (self.acabadoCubierta.getVal() == 0) { $(document).trigger('remove-servicio-lineas', 'acabadoSobrecubierta'); @@ -107,6 +109,7 @@ class DatosLibro { $(document).trigger('add-servicio-lineas', 'acabadoSobrecubierta'); } }); + this.acabadoFaja.item.on('select2:select', function () { if (this.cargando) diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/servicios.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/servicios.js index b6e63cee..7ac54e12 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/servicios.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/servicios.js @@ -510,13 +510,12 @@ class ServiciosAcabado { updateAcabadosExteriores(cubierta, sobrecubierta, faja) { - this.table.rows().every(function () { - var data = this.data(); + for (let i = this.table.rows().count() - 1; i >= 0; i--) { + let data = this.table.row(i).data(); if (data && (data.cubierta == cubierta && data.sobrecubierta == sobrecubierta && data.faja == faja)) { - - this.remove().draw(); + this.table.row(i).remove().draw(); } - }); + } let tarifa_id = 0; let uso = 'cubierta'; @@ -531,9 +530,6 @@ class ServiciosAcabado { tarifa_id = $('#acabado_faja_id').val(); uso = 'faja'; } - - - this.getPresupuestoAcabado(tarifa_id, uso, null); } @@ -561,24 +557,25 @@ class ServiciosAcabado { new Ajax('/serviciosacabados/getvalues', datos, {}, function (response) { if (response.values) { - response.values[0].cubierta = 0; - response.values[0].sobrecubierta = 0; - response.values[0].faja = 0; - if (uso == 'cubierta') { - response.values[0].cubierta = 1; - } - else if (uso == 'sobrecubierta') { - response.values[0].sobrecubierta = 1; - } - else if (uso == 'faja') { - response.values[0].faja = 1; + for(let i=0; i Date: Wed, 26 Feb 2025 21:11:41 +0100 Subject: [PATCH 7/8] =?UTF-8?q?a=C3=B1adidos=20ficheros=20nuevos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TarifasAcabadosServicioAcabadoEntity.php | 22 +++++++++++ .../TarifasAcabadoServiciosAcabadoModel.php | 39 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 ci4/app/Entities/Tarifas/Acabados/TarifasAcabadosServicioAcabadoEntity.php create mode 100644 ci4/app/Models/Tarifas/Acabados/TarifasAcabadoServiciosAcabadoModel.php diff --git a/ci4/app/Entities/Tarifas/Acabados/TarifasAcabadosServicioAcabadoEntity.php b/ci4/app/Entities/Tarifas/Acabados/TarifasAcabadosServicioAcabadoEntity.php new file mode 100644 index 00000000..05239d9d --- /dev/null +++ b/ci4/app/Entities/Tarifas/Acabados/TarifasAcabadosServicioAcabadoEntity.php @@ -0,0 +1,22 @@ + null, + "tarifa_id" => null, + 'servicio_id' => false, + "user_updated_id" => 0, + "created_at" => null, + "updated_at" => null, + "deleted_at" => null, + ]; + protected $casts = [ + "tarifa_id" => "int", + "servicio_id" => "int", + "user_updated_id" => "int", + ]; +} \ No newline at end of file diff --git a/ci4/app/Models/Tarifas/Acabados/TarifasAcabadoServiciosAcabadoModel.php b/ci4/app/Models/Tarifas/Acabados/TarifasAcabadoServiciosAcabadoModel.php new file mode 100644 index 00000000..0f5643e9 --- /dev/null +++ b/ci4/app/Models/Tarifas/Acabados/TarifasAcabadoServiciosAcabadoModel.php @@ -0,0 +1,39 @@ +db + ->table($this->table . " t1") + ->select( + "t1.tarifa_id", + ) + ->where("t1.servicio_id", $servicioId) + ->where("t1.deleted_at", null); + $ids = $builder->get()->getResultArray(); + + return array_column($ids, 'tarifa_id'); + } + +} + + From 94c8076f3aa1a592384a8ce4ea1884b466fc5a4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Jim=C3=A9nez?= Date: Wed, 26 Feb 2025 21:31:42 +0100 Subject: [PATCH 8/8] modificado presupuesto cliente --- .../Presupuestos/Presupuestocliente.php | 180 +++++++++++------- 1 file changed, 106 insertions(+), 74 deletions(-) diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php index 8ffaac81..357dddb2 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php @@ -1290,37 +1290,55 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController // Servicios if ($sobrecubierta) { if (intval($sobrecubierta['acabado']) > 0) { - $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); - $servicio = $model->getPrecioTarifa(intval($sobrecubierta['acabado']), intval($selected_tirada), -1, $POD); - if (count($servicio) > 0) { - if ($servicio[0]->total > 0) { - $this->guardarServicio($id, $servicio[0], 'acabado', false, true); + $modelServicioAcabado = model('App\Models\Tarifas\Acabados\TarifasAcabadoServiciosAcabadoModel'); + $serviciosAcabado = $modelServicioAcabado->getTarifasForServicio($sobrecubierta['acabado']); + + foreach ($serviciosAcabado as $service) { + $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); + $servicio = $model->getPrecioTarifa(intval($service), intval($selected_tirada), -1, $POD); + + if (count($servicio) > 0) { + if ($servicio[0]->total > 0) { + $this->guardarServicio($id, $servicio[0], 'acabado', false, true); + } } } } } if (intval($cubierta['acabado']) > 0) { - $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); - $servicio = $model->getPrecioTarifa(intval($cubierta['acabado']), intval($selected_tirada), -1, $POD); - if (count($servicio) > 0) { - if ($servicio[0]->total > 0) { - $this->guardarServicio($id, $servicio[0], 'acabado', true, false); + $modelServicioAcabado = model('App\Models\Tarifas\Acabados\TarifasAcabadoServiciosAcabadoModel'); + $serviciosAcabado = $modelServicioAcabado->getTarifasForServicio($sobrecubierta['acabado']); + + foreach ($serviciosAcabado as $service) { + $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); + $servicio = $model->getPrecioTarifa(intval($service), intval($selected_tirada), -1, $POD); + + if (count($servicio) > 0) { + if ($servicio[0]->total > 0) { + $this->guardarServicio($id, $servicio[0], 'acabado', true, false); + } } } + } if (is_array($faja) && $faja !== [] && intval($faja['acabado']) > 0) { - $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); - $servicio = $model->getPrecioTarifa(intval($faja['acabado']), intval($selected_tirada), -1, $POD); - if (count($servicio) > 0) { - if ($servicio[0]->total > 0) { - $this->guardarServicio($id, $servicio[0], 'acabado', false, false, true); + $modelServicioAcabado = model('App\Models\Tarifas\Acabados\TarifasAcabadoServiciosAcabadoModel'); + $serviciosAcabado = $modelServicioAcabado->getTarifasForServicio($faja['acabado']); + + foreach ($serviciosAcabado as $service) { + $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); + $servicio = $model->getPrecioTarifa(intval($service), intval($selected_tirada), -1, $POD); + + if (count($servicio) > 0) { + if ($servicio[0]->total > 0) { + $this->guardarServicio($id, $servicio[0], 'acabado', false, false, true); + } } } - } foreach ($resultado_presupuesto['values']['serviciosDefecto']['encuadernacion'] as $servicio) { $this->guardarServicio($id, $servicio, 'encuadernacion'); @@ -1415,10 +1433,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController 'url' => site_url('presupuestos/presupuestocliente/edit'), 'message' => lang('Basic.global.saveSuccess', [lang('Basic.global.record')]), ]); - }else{ + } else { return [ 'sk_id' => $id, - 'sk_url' => site_url('presupuestos/presupuestocliente/edit/' . $id) + 'sk_url' => site_url('presupuestos/presupuestocliente/edit/' . $id) ]; } } @@ -1439,7 +1457,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $data['lsc'] = $presupuesto->lomo_sobrecubierta; $data['eb'] = $presupuesto->envio_base; $data['state'] = intval($presupuesto->estado_id); - if($presupuesto->estado_id == 2){ // confirmado + if ($presupuesto->estado_id == 2) { // confirmado $data['datosGenerales']['selectedTirada'] = $presupuesto->tirada; } $data['datosGenerales']['titulo'] = $presupuesto->titulo; @@ -1492,7 +1510,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $data['cubierta']['solapas'] = $presupuesto->solapas ? 1 : 0; $data['cubierta']['solapas_ancho'] = $presupuesto->solapas_ancho; $data['cubierta']['cabezada'] = $presupuesto->cabezada; - $modelAcabado = model("App\Models\Tarifas\Acabados\TarifaAcabadoModel"); + $modelAcabado = model("App\Models\Tarifas\Acabados\ServicioAcabadoModel"); $data['cubierta']['acabado']['id'] = $presupuesto->acabado_cubierta_id; if ($presupuesto->acabado_cubierta_id == 0) { $data['cubierta']['acabado']['text'] = "Ninguno"; @@ -2127,36 +2145,41 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController // Acabado Cubierta if (intval($datos_entrada['cubierta']['acabado']) != 0) { + $modelServicioAcabado = model('App\Models\Tarifas\Acabados\TarifasAcabadoServiciosAcabadoModel'); + $serviciosAcabado = $modelServicioAcabado->getTarifasForServicio(intval($datos_entrada['cubierta']['acabado'])); - $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); - $acabadoCubierta = $model->getPrecioTarifa(intval($datos_entrada['cubierta']['acabado']), $datosPedido->tirada, -1, $POD); + foreach ($serviciosAcabado as $servicio) { + $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); + $acabadoCubierta = $model->getPrecioTarifa(intval($servicio), $datosPedido->tirada, -1, $POD); - if (count($acabadoCubierta) > 0) { - if ($acabadoCubierta[0]->total <= 0) { + if (count($acabadoCubierta) > 0) { + if ($acabadoCubierta[0]->total <= 0) { - $input_data['tarifas_acabado_cubierta'] = intval($datos_entrada['cubierta']['acabado']); - $errorModel = new ErrorPresupuesto(); - $errorModel->insertError( - $datos_entrada['id'], - auth()->user()->id, - 'No se puede obtener acabados de cubierta', - $input_data - ); - $return_data = [ - 'errors' => (object) ([ - 'status' => 1 - ]), - ]; - return $return_data; - } - $coste_servicios += round(floatval($acabadoCubierta[0]->total), 2); - if ($extra_info) { - $totalServicios += round(floatval($acabadoCubierta[0]->total), 2); - $base = round(floatval($acabadoCubierta[0]->total / (1 + $acabadoCubierta[0]->margen / 100.0)), 2); - $base = round(floatval($base / $datosPedido->tirada), 2) * $datosPedido->tirada; - $margenServicios += round(floatval($acabadoCubierta[0]->total - $base), 2); + $input_data['tarifas_acabado_cubierta'] = intval($servicio); + $errorModel = new ErrorPresupuesto(); + $errorModel->insertError( + $datos_entrada['id'], + auth()->user()->id, + 'No se puede obtener acabados de cubierta', + $input_data + ); + $return_data = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $return_data; + } + $coste_servicios += round(floatval($acabadoCubierta[0]->total), 2); + if ($extra_info) { + $totalServicios += round(floatval($acabadoCubierta[0]->total), 2); + $base = round(floatval($acabadoCubierta[0]->total / (1 + $acabadoCubierta[0]->margen / 100.0)), 2); + $base = round(floatval($base / $datosPedido->tirada), 2) * $datosPedido->tirada; + $margenServicios += round(floatval($acabadoCubierta[0]->total - $base), 2); + } } } + } @@ -2217,35 +2240,40 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController // Acabado sobrecubierta if (intval($datos_entrada['sobrecubierta']['acabado']) != 0) { - $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); - $acabadoSobrecubierta = $model->getPrecioTarifa(intval($datos_entrada['sobrecubierta']['acabado']), $datosPedido->tirada, -1, $POD); + $modelServicioAcabado = model('App\Models\Tarifas\Acabados\TarifasAcabadoServiciosAcabadoModel'); + $serviciosAcabado = $modelServicioAcabado->getTarifasForServicio(intval($datos_entrada['sobrecubierta']['acabado'])); - if (count($acabadoSobrecubierta) > 0) { + foreach ($serviciosAcabado as $servicio) { + $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); + $acabadoSobrecubierta = $model->getPrecioTarifa(intval($servicio), $datosPedido->tirada, -1, $POD); - if ($acabadoSobrecubierta[0]->total <= 0) { + if (count($acabadoSobrecubierta) > 0) { - $input_data['tarifas_acabado_sobrecubierta'] = intval($datos_entrada['sobrecubierta']['acabado']); - $errorModel = new ErrorPresupuesto(); - $errorModel->insertError( - $datos_entrada['id'], - auth()->user()->id, - 'No se puede obtener acabados de sobrecubierta', - $input_data - ); - $return_data = [ - 'errors' => (object) ([ - 'status' => 1 - ]), - ]; - return $return_data; - } + if ($acabadoSobrecubierta[0]->total <= 0) { - $coste_servicios += round(floatval($acabadoSobrecubierta[0]->total), 2); - if ($extra_info) { - $totalServicios += round(floatval($acabadoSobrecubierta[0]->total), 2); - $base = round(floatval($acabadoSobrecubierta[0]->total / (1 + $acabadoSobrecubierta[0]->margen / 100.0)), 2); - $base = round(floatval($base / $datosPedido->tirada), 2) * $datosPedido->tirada; - $margenServicios += round(floatval($acabadoSobrecubierta[0]->total - $base), 2); + $input_data['tarifas_acabado_sobrecubierta'] = intval($servicio); + $errorModel = new ErrorPresupuesto(); + $errorModel->insertError( + $datos_entrada['id'], + auth()->user()->id, + 'No se puede obtener acabados de sobrecubierta', + $input_data + ); + $return_data = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $return_data; + } + + $coste_servicios += round(floatval($acabadoSobrecubierta[0]->total), 2); + if ($extra_info) { + $totalServicios += round(floatval($acabadoSobrecubierta[0]->total), 2); + $base = round(floatval($acabadoSobrecubierta[0]->total / (1 + $acabadoSobrecubierta[0]->margen / 100.0)), 2); + $base = round(floatval($base / $datosPedido->tirada), 2) * $datosPedido->tirada; + $margenServicios += round(floatval($acabadoSobrecubierta[0]->total - $base), 2); + } } } } @@ -2370,14 +2398,18 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController // Acabado faja if (intval($faja['acabado']) != 0) { - $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); - $acabadoFaja = $model->getPrecioTarifa(intval($faja['acabado']), $datosPedido->tirada, -1, $POD); + $modelServicioAcabado = model('App\Models\Tarifas\Acabados\TarifasAcabadoServiciosAcabadoModel'); + $serviciosAcabado = $modelServicioAcabado->getTarifasForServicio(intval($faja['acabado'])); + + foreach ($serviciosAcabado as $servicio) + $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); + $acabadoFaja = $model->getPrecioTarifa(intval($servicio), $datosPedido->tirada, -1, $POD); if (count($acabadoFaja) > 0) { if ($acabadoFaja[0]->total <= 0) { - $input_data['tarifas_acabado_faja'] = intval($faja['acabado']); + $input_data['tarifas_acabado_faja'] = intval($servicio); $errorModel = new ErrorPresupuesto(); $errorModel->insertError( $datos_entrada['id'], @@ -2902,7 +2934,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $margenImpresion += round($linea['precio_impresion_horas'], 2); // coste de maquina y magen son MARGEN, no COSTE $margenImpresion += round($linea['margen_impresion_horas'], 2); $margenImpresion += round($linea['margen_click_pedido'], 2); - + } protected function calcular_lomo($lineas, $lomo_inicial)