realizada la lista

This commit is contained in:
2025-02-24 20:59:21 +01:00
parent c1cae0fcf7
commit 4601b15abe
12 changed files with 226 additions and 27 deletions

View File

@ -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",
],

View File

@ -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',
];

View File

@ -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']);

View File

@ -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);
}
}

View File

@ -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,

View File

@ -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",

View File

@ -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',

View File

@ -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.',

View File

@ -1,17 +1,23 @@
<?php
namespace App\Models\Tarifas\Acabados;
use CodeIgniter\Database\BaseBuilder;
use CodeIgniter\Model;
class ServiciosAcabadoModel extends Model
class ServicioAcabadoModel extends Model
{
protected $table = 'servicios_acabado';
protected $table = 'servicios_acabado';
protected $primaryKey = 'id';
protected $useSoftDeletes = true;
protected $allowedFields = ['tarifa_id', 'nombre', 'comentarios', 'mostrar_en_cliente', 'user_updated_id', 'created_at', 'updated_at', 'deleted_at'];
protected $allowedFields = ['acabado_cubierta', 'acabado_sobrecubierta', 'nombre', 'comentarios', 'mostrar_en_presupuesto_cliente', 'user_updated_id', 'created_at', 'updated_at', 'deleted_at'];
protected $useTimestamps = true;
protected $dateFormat = 'datetime';
protected $createdField = 'created_at';
protected $updatedField = 'updated_at';
protected $deletedField = 'deleted_at';
protected $returnType = 'App\Entities\Tarifas\Acabados\ServicioAcabadoEntity';
protected $validationRules = [
@ -20,6 +26,24 @@ class ServiciosAcabadoModel extends Model
"rules" => "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;
}
}

View File

@ -0,0 +1,57 @@
<?= $this->include('themes/_commonPartialsBs/datatables') ?>
<?= $this->include('themes/_commonPartialsBs/_confirm2delete') ?>
<?= $this->extend('themes/vuexy/main/defaultlayout') ?>
<?= $this->section('content'); ?>
<div class="row">
<div class="col-md-12">
<div class="card card-info">
<div class="card-header">
<h3 class="card-title"><?= lang('ServicioAcabado.servicioscabadoList') ?></h3>
<?= anchor(route_to('newServicioAcabado'), lang('Basic.global.addNew') . ' ' . lang('ServicioAcabado.servicioacabado'), ['class' => 'btn btn-primary float-end']); ?>
</div><!--//.card-header -->
<div class="card-body">
<?= view('themes/_commonPartialsBs/_alertBoxes'); ?>
<table id="tableOfServiciosAcabado" class="table table-striped table-hover" style="width: 100%;">
<thead>
<tr>
<th><?= lang('ServicioAcabado.id') ?></th>
<th><?= lang('ServicioAcabado.nombre') ?></th>
<th><?= lang('ServicioAcabado.servicio_cubierta') ?></th>
<th><?= lang('ServicioAcabado.servicio_sobrecubierta') ?></th>
<th><?= lang('ServicioAcabado.mostrar_en_presupuesto_cliente') ?></th>
<th><?= lang('ServicioAcabado.userUpdateId') ?></th>
<th><?= lang('ServicioAcabado.updatedAt') ?></th>
<th class="text-nowrap"><?= lang('Basic.global.Action') ?></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div><!--//.card-body -->
<div class="card-footer">
</div><!--//.card-footer -->
</div><!--//.card -->
</div><!--//.col -->
</div><!--//.row -->
<?= $this->endSection() ?>
<?= $this->section('additionalExternalJs') ?>
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/dataTables.buttons.min.js") ?>"></script>
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.bootstrap5.min.js") ?>"></script>
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.html5.min.js") ?>"></script>
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.print.min.js") ?>"></script>
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/jszip/jszip.min.js") ?>"></script>
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/pdfmake/pdfmake.min.js") ?>" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/pdfmake/vfs_fonts.js") ?>"></script>
<script type="module" src="<?= site_url("/assets/js/safekat/pages/tarifas/serviciosAcabado/list.js") ?>"></script>
<?= $this->endSection() ?>

View File

@ -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 (
</a>
</li>
<?php } ?>
<?php if (auth()->user()->can('servicio-acabado.menu')) { ?>
<li class="menu-item">
<a href="<?= route_to('serviciosAcabadoList') ?>" class="menu-link">
<?= lang("App.menu_serviciosAcabado") ?>
</a>
</li>
<?php } ?>
<?php if (auth()->user()->can('tarifa-encuadernacion.menu')) { ?>
<li class="menu-item">
<a href="<?= site_url("tarifas/tarifasencuadernacion") ?>" class="menu-link">

View File

@ -0,0 +1,69 @@
class listServiciosAcabado{
constructor(){}
init(){
this.table = $('#tableOfServiciosAcabado');
this.datatableColumns = [
{ data: 'id', searchable: true, sortable: true, width: "10%" },
{ data: 'nombre', searchable: true, sortable: true, width: "40%" },
{ data: 'acabado_cubierta', sortable: true, width: "10%", render: this.#renderBoolCell.bind(this) },
{ data: 'acabado_sobrecubierta', sortable: false, width: "10%", render: this.#renderBoolCell.bind(this) },
{ data: 'mostrar_en_presupuesto_cliente', searchable: false, sortable: true, width: "10%", render: this.#renderBoolCell.bind(this) },
{ data: 'user_updated', searchable: true, sortable: true },
{ data: 'updated_at', searchable: false, sortable: true },
{
data: 'action', searchable: false, sortable: false, width: "10%", render: this.#renderActionCell.bind(this)
},
]
this.initDatatableTareas();
}
initDatatableTareas() {
this.datatableTareas = this.table.DataTable({
processing: true,
//paging: true,
layout: {
topStart: 'pageLength',
topEnd: 'search',
bottomStart: 'info',
bottomEnd: 'paging'
},
serverSide: true,
responsive : true,
pageLength: 25,
language: {
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
},
columns: this.datatableColumns,
ajax: '/serviciosacabado/datatable'
});
}
#renderActionCell(d, t) {
let cell = `<div class="d-flex justify-content-start align-items-center gap-1">
<span class="edit"><a href="javascript:void(0);"><i class="ti ti-pencil ti-sm btn-edit mx-2" data-id="${d.id}"></i></a></span>
<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete} mx-2" data-id="${d.id}"></i></a>
</div>`
return cell;
}
#renderBoolCell(d, t) {
let cell = d == 1 ? '<i class="ti ti-check"></i>' : '';
return cell;
}
}
$(function() {
new listServiciosAcabado().init();
})
export default listServiciosAcabado;