Merge branch 'feat/catalogo_historico_pedidos' into 'main'

Feat/catalogo historico pedidos

See merge request jjimenez/safekat!844
This commit is contained in:
Ignacio Martinez Navajas
2025-06-04 13:22:38 +00:00
6 changed files with 208 additions and 25 deletions

View File

@ -23,6 +23,7 @@ $routes->group('catalogo', ['namespace' => 'App\Controllers\Catalogo'], function
* AJAX
*========================**/
$routes->get('clientlist', 'CatalogoLibros::getClientList', ['as' => 'catalogoLibrosClientList']);
$routes->get('pedidosAntiguos', 'CatalogoLibros::datatablePedidosAntiguos', ['as' => 'catalogoLibrosPedidosAntiguosDT']);
});

View File

@ -5,6 +5,7 @@ use App\Controllers\BaseResourceController;
use App\Entities\Catalogo\CatalogoLibroEntity;
use App\Models\Catalogo\CatalogoLibroModel;
use App\Models\Clientes\ClienteModel;
use App\Models\Presupuestos\ImportadorModel;
use Hermawan\DataTables\DataTable;
class CatalogoLibros extends BaseResourceController
@ -66,7 +67,7 @@ class CatalogoLibros extends BaseResourceController
$sanitizedData = $this->sanitized($postData, true);
$sanitizedData['user_created_id'] = auth()->user()->id;
unset($sanitizedData['iskn']);
unset($sanitizedData['iskn']);
$noException = true;
if ($successfulResult = $this->canValidate()):
@ -135,7 +136,7 @@ class CatalogoLibros extends BaseResourceController
$sanitizedData['user_update_id'] = auth()->user()->id;
$noException = true;
if ($successfulResult = $this->canValidate()): // if ($successfulResult = $this->validate($this->formValidationRules) ) :
@ -173,7 +174,7 @@ class CatalogoLibros extends BaseResourceController
endif; // $noException && $successfulResult
endif; // ($requestMethod === 'post')
$this->viewData['catalogoLibrosEntity'] = $catalogoLibrosEntity;
$this->viewData['formAction'] = route_to('catalogoLibrosEdit', $id);
$this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . lang('Catalogo.moduleTitle') . ' ' . lang('Basic.global.edit3');
@ -224,7 +225,6 @@ class CatalogoLibros extends BaseResourceController
}
/* IMN */
public function getClientList()
{
@ -234,5 +234,41 @@ class CatalogoLibros extends BaseResourceController
}
/* Historico de pedidos ERP antiguo */
public function datatablePedidosAntiguos()
{
$reqData = $this->request->getGet();
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 10;
$catalogoId = $reqData['catalogo_id'] ?? null;
// Instanciar el modelo directamente
$importadorModel = new ImportadorModel();
$q = $importadorModel->getHistoricoPedidosCatalogo($catalogoId);
return DataTable::of($q)
->setSearchableColumns([
't1.id',
't1.created_at',
't1.titulo',
't1.paginas',
't1.tirada',
't1.total',
't1.estado'
])
->edit('total', fn($row) => number_format((float) $row->total, 2, ',', '.') . ' €')
->edit('created_at', fn($row) => date('d/m/Y', strtotime($row->created_at)))
->add('actionBtns', function ($row) {
return '<div class="btn-group btn-group-sm">
<a href="https://gestion.safekat.es/pedido/detail/' . $row->id . '" class="btn btn-sm btn-info" target="_blank">
<i class="ti ti-eye"></i> Ver
</a>
</div>';
}, 'last')
->toJson(returnAsObject: true);
}
}

View File

@ -8,7 +8,8 @@ class ImportadorModel extends \App\Models\BaseModel
protected $primaryKey = 'id';
protected $DBGroup = 'old_erp';
public function getClientList(){
public function getClientList()
{
$db = \Config\Database::connect($this->DBGroup); // Conectar a olderp
$builder = $db->table('customers');
@ -19,8 +20,9 @@ class ImportadorModel extends \App\Models\BaseModel
}
public function getPresupuestosList($clienteId, $search = ""){
public function getPresupuestosList($clienteId, $search = "")
{
$db = \Config\Database::connect($this->DBGroup); // Conectar a olderp
$builder = $db->table('pedido_libro');
$builder->select('id as id, CONCAT(id, " - ", titulo) as name');
@ -28,17 +30,18 @@ class ImportadorModel extends \App\Models\BaseModel
$builder->whereIn('estado', ['finalizado', 'validado', 'presupuesto']);
$builder->where('deleted_at', NULL);
$builder->orderBy('updated_at', 'DESC');
return empty($search) ?
$builder->get()->getResultObject() :
return empty($search) ?
$builder->get()->getResultObject() :
$builder->groupStart()->
like('titulo', $search)->
orLike('id', $search)->
orLike('id', $search)->
groupEnd()->get()->getResultObject();
}
public function getPresupuestoForImport($id){
public function getPresupuestoForImport($id)
{
$db = \Config\Database::connect($this->DBGroup); // Conectar a olderp
$builder = $db->table('pedido_libro t1')
->select('t1.paginas, t1.tirada, t1.papel_formato_personalizado, t1.customer_id,
@ -50,7 +53,7 @@ class ImportadorModel extends \App\Models\BaseModel
->where('t1.id', $id)
->where('t1.deleted_at', NULL);
$query = $builder->get();
$datosGenerales = $query->getRow();
$datosGenerales = $query->getRow();
$builder = $db->table('pedido_libro_manipulado')
->select('nombre')
@ -69,10 +72,9 @@ class ImportadorModel extends \App\Models\BaseModel
->where('pedido_libro_id', $id)
->where('nombre', 'Prototipo');
$query = $builder->countAllResults();
if($query > 0){
if ($query > 0) {
$datosGenerales->prototipo = 1;
}
else{
} else {
$datosGenerales->prototipo = 0;
}
@ -85,7 +87,7 @@ class ImportadorModel extends \App\Models\BaseModel
$query = $builder->get();
$lineas = $query->getResultObject();
return [
'datosGenerales' => $datosGenerales,
'manipulados' => $manipulados,
@ -95,8 +97,9 @@ class ImportadorModel extends \App\Models\BaseModel
}
public function getDatosGuardar($id){
public function getDatosGuardar($id)
{
$db = \Config\Database::connect($this->DBGroup); // Conectar a olderp
$db = \Config\Database::connect($this->DBGroup); // Conectar a olderp
$builder = $db->table('pedido_libro t1')
@ -107,12 +110,13 @@ class ImportadorModel extends \App\Models\BaseModel
->where('t1.id', $id)
->where('t1.deleted_at', NULL);
$query = $builder->get();
$datosGenerales = $query->getRow();
$datosGenerales = $query->getRow();
return $query->getRow();
}
public function getDirecciones($id){
public function getDirecciones($id)
{
$db = \Config\Database::connect($this->DBGroup); // Conectar a olderp
$builder = $db->table('pedido_libro_envios t1')
->select('t1.ejemplares as unidades, t1.att, t1.email, t1.direccion, t1.pais,
@ -123,6 +127,20 @@ class ImportadorModel extends \App\Models\BaseModel
return $query->getResultObject();
}
public function getHistoricoPedidosCatalogo(?int $catalogoId = null)
{
$db = \Config\Database::connect($this->DBGroup);
$builder = $db->table('pedido_libro t1')
->select('t1.id, t1.created_at, t1.titulo, t1.paginas, t1.tirada, t1.total, t1.estado');
if ($catalogoId !== null) {
$builder->where('t1.catalogo_id', $catalogoId);
}
return $builder;
}
}

View File

@ -0,0 +1,58 @@
<div class="accordion accordion-bordered mt-3" id="accordionPedidos">
<div class="card accordion-item">
<h2 class="accordion-header" id="headingPedidos">
<button type="button" class="accordion-button collapsed" data-bs-toggle="collapse"
data-bs-target="#collapsePedidos" aria-expanded="false" aria-controls="collapsePedidos">
<h5 class="mb-0">Pedidos</h5>
</button>
</h2>
<div id="collapsePedidos" class="accordion-collapse collapse" data-bs-parent="#accordionPedidos">
<div class="accordion-body">
<!-- Campo oculto para JS -->
<input type="hidden" id="catalogo_id" value="<?= esc($catalogoLibrosEntity->id ?? '') ?>">
<!--
<div class="row">
<div class="col-12 mb-4">
<h5>Pedidos - ERP 2.0</h5>
<table id="tablaPedidosERP2" class="table table-striped" style="width:100%">
<thead>
<tr>
<th>ID</th>
<th>Fecha</th>
<th>Título</th>
<th> Páginas</th>
<th>Tirada</th>
<th>Total</th>
<th>Estado</th>
<th>Acciones</th>
</tr>
</thead>
</table>
</div>
-->
<div class="col-12 mb-4">
<h5>Pedidos - Antiguo ERP</h5>
<table id="tablaPedidosAntiguos" class="table table-striped table-hover" style="width:100%">
<thead>
<tr>
<th>ID</th>
<th>Fecha</th>
<th>Título</th>
<th> Páginas</th>
<th>Tirada</th>
<th>Total</th>
<th>Estado</th>
<th>Acciones</th>
</tr>
</thead>
</table>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@ -1,3 +1,4 @@
<?= $this->include('themes/_commonPartialsBs/datatables') ?>
<?= $this->include("themes/_commonPartialsBs/select2bs5") ?>
<?= $this->include("themes/_commonPartialsBs/sweetalert") ?>
<?= $this->extend('themes/vuexy/main/defaultlayout') ?>
@ -19,6 +20,7 @@
<?= view("themes/vuexy/form/catalogo/_datosGeneralesFormItems") ?>
<?= view("themes/vuexy/form/catalogo/_otrosDatosFormItems") ?>
<?= view("themes/vuexy/form/catalogo/_configuracionLibroFormItems") ?>
<?= view("themes/vuexy/form/catalogo/_historicoPedidos") ?>
<?= view("themes/vuexy/form/catalogo/_trackingFormItems") ?>
</div>
<!-- /.card-body -->
@ -39,10 +41,21 @@
<?= $this->section('css') ?>
<link rel="stylesheet" href="<?= site_url('themes/vuexy/css/safekat.css') ?>">
<link rel="stylesheet" href="<?= site_url('themes/vuexy/css/safekat.css') ?>">
<?= $this->endSection() ?>
<?= $this->section("additionalExternalJs") ?>
<script type="module" src="<?= site_url('assets/js/safekat/pages/catalogo/catalogo.js?' . 'token' . '=' . (csrf_token() ?? "token")) ?>"></script>
<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/catalogo/catalogo.js?' . 'token' . '=' . (csrf_token() ?? "token")) ?>"></script>
<?= $this->endSection() ?>

View File

@ -295,6 +295,7 @@ class Catalogo {
this.selectGramajeSobrecubiertaPod.init();
this.acabadosSobrecubierta.init();
this.initPedidosTable();
// Al cargar la página
this.toggleSobrecubiertaFields();
@ -327,6 +328,62 @@ class Catalogo {
});
}
initPedidosTable() {
const lastColPedidos = $('#tablaPedidosAntiguos').find("tr:first th").length - 1;
const catalogoId = $('#catalogo_id').val(); // Asegúrate que este valor exista
const tablaPedidosAntiguos = $('#tablaPedidosAntiguos').DataTable({
processing: true,
serverSide: true,
autoWidth: true,
orderCellsTop: true,
responsive: true,
scrollX: true,
lengthMenu: [5, 10, 25, 50, 75, 100],
pageLength: 10,
lengthChange: true,
dom: 'lfBrtip',
buttons: [
'copy', 'csv', 'excel', 'print', {
extend: 'pdfHtml5',
orientation: 'landscape',
pageSize: 'A4'
}
],
order: [[1, 'desc']],
language: {
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
},
ajax: {
url: '/catalogo/libros/pedidosAntiguos',
method: 'GET',
data: {
catalogo_id: catalogoId
}
},
columnDefs: [
{
orderable: false,
searchable: false,
targets: [lastColPedidos]
}
],
columns: [
{ data: 'id' },
{ data: 'created_at' },
{ data: 'titulo' },
{ data: 'paginas' },
{ data: 'tirada' },
{ data: 'total' },
{ data: 'estado' },
{ data: 'actionBtns' }
]
});
}
actualizarDesdeColor() {
const total = parseInt(this.total.val(), 10) || 0;
const color = parseInt(this.color.val(), 10) || 0;