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 * AJAX
*========================**/ *========================**/
$routes->get('clientlist', 'CatalogoLibros::getClientList', ['as' => 'catalogoLibrosClientList']); $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\Entities\Catalogo\CatalogoLibroEntity;
use App\Models\Catalogo\CatalogoLibroModel; use App\Models\Catalogo\CatalogoLibroModel;
use App\Models\Clientes\ClienteModel; use App\Models\Clientes\ClienteModel;
use App\Models\Presupuestos\ImportadorModel;
use Hermawan\DataTables\DataTable; use Hermawan\DataTables\DataTable;
class CatalogoLibros extends BaseResourceController class CatalogoLibros extends BaseResourceController
@ -224,7 +225,6 @@ class CatalogoLibros extends BaseResourceController
} }
/* IMN */ /* IMN */
public function getClientList() 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 $primaryKey = 'id';
protected $DBGroup = 'old_erp'; protected $DBGroup = 'old_erp';
public function getClientList(){ public function getClientList()
{
$db = \Config\Database::connect($this->DBGroup); // Conectar a olderp $db = \Config\Database::connect($this->DBGroup); // Conectar a olderp
$builder = $db->table('customers'); $builder = $db->table('customers');
@ -19,7 +20,8 @@ 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 $db = \Config\Database::connect($this->DBGroup); // Conectar a olderp
$builder = $db->table('pedido_libro'); $builder = $db->table('pedido_libro');
@ -37,7 +39,8 @@ class ImportadorModel extends \App\Models\BaseModel
groupEnd()->get()->getResultObject(); groupEnd()->get()->getResultObject();
} }
public function getPresupuestoForImport($id){ public function getPresupuestoForImport($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') $builder = $db->table('pedido_libro t1')
@ -50,7 +53,7 @@ class ImportadorModel extends \App\Models\BaseModel
->where('t1.id', $id) ->where('t1.id', $id)
->where('t1.deleted_at', NULL); ->where('t1.deleted_at', NULL);
$query = $builder->get(); $query = $builder->get();
$datosGenerales = $query->getRow(); $datosGenerales = $query->getRow();
$builder = $db->table('pedido_libro_manipulado') $builder = $db->table('pedido_libro_manipulado')
->select('nombre') ->select('nombre')
@ -69,10 +72,9 @@ class ImportadorModel extends \App\Models\BaseModel
->where('pedido_libro_id', $id) ->where('pedido_libro_id', $id)
->where('nombre', 'Prototipo'); ->where('nombre', 'Prototipo');
$query = $builder->countAllResults(); $query = $builder->countAllResults();
if($query > 0){ if ($query > 0) {
$datosGenerales->prototipo = 1; $datosGenerales->prototipo = 1;
} } else {
else{
$datosGenerales->prototipo = 0; $datosGenerales->prototipo = 0;
} }
@ -95,7 +97,8 @@ 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
$db = \Config\Database::connect($this->DBGroup); // Conectar a olderp $db = \Config\Database::connect($this->DBGroup); // Conectar a olderp
@ -107,11 +110,12 @@ class ImportadorModel extends \App\Models\BaseModel
->where('t1.id', $id) ->where('t1.id', $id)
->where('t1.deleted_at', NULL); ->where('t1.deleted_at', NULL);
$query = $builder->get(); $query = $builder->get();
$datosGenerales = $query->getRow(); $datosGenerales = $query->getRow();
return $query->getRow(); return $query->getRow();
} }
public function getDirecciones($id){ public function getDirecciones($id)
{
$db = \Config\Database::connect($this->DBGroup); // Conectar a olderp $db = \Config\Database::connect($this->DBGroup); // Conectar a olderp
$builder = $db->table('pedido_libro_envios t1') $builder = $db->table('pedido_libro_envios t1')
@ -123,6 +127,20 @@ class ImportadorModel extends \App\Models\BaseModel
return $query->getResultObject(); 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/select2bs5") ?>
<?= $this->include("themes/_commonPartialsBs/sweetalert") ?> <?= $this->include("themes/_commonPartialsBs/sweetalert") ?>
<?= $this->extend('themes/vuexy/main/defaultlayout') ?> <?= $this->extend('themes/vuexy/main/defaultlayout') ?>
@ -19,6 +20,7 @@
<?= view("themes/vuexy/form/catalogo/_datosGeneralesFormItems") ?> <?= view("themes/vuexy/form/catalogo/_datosGeneralesFormItems") ?>
<?= view("themes/vuexy/form/catalogo/_otrosDatosFormItems") ?> <?= view("themes/vuexy/form/catalogo/_otrosDatosFormItems") ?>
<?= view("themes/vuexy/form/catalogo/_configuracionLibroFormItems") ?> <?= view("themes/vuexy/form/catalogo/_configuracionLibroFormItems") ?>
<?= view("themes/vuexy/form/catalogo/_historicoPedidos") ?>
<?= view("themes/vuexy/form/catalogo/_trackingFormItems") ?> <?= view("themes/vuexy/form/catalogo/_trackingFormItems") ?>
</div> </div>
<!-- /.card-body --> <!-- /.card-body -->
@ -39,10 +41,21 @@
<?= $this->section('css') ?> <?= $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->endSection() ?>
<?= $this->section("additionalExternalJs") ?> <?= $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() ?> <?= $this->endSection() ?>

View File

@ -295,6 +295,7 @@ class Catalogo {
this.selectGramajeSobrecubiertaPod.init(); this.selectGramajeSobrecubiertaPod.init();
this.acabadosSobrecubierta.init(); this.acabadosSobrecubierta.init();
this.initPedidosTable();
// Al cargar la página // Al cargar la página
this.toggleSobrecubiertaFields(); 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() { actualizarDesdeColor() {
const total = parseInt(this.total.val(), 10) || 0; const total = parseInt(this.total.val(), 10) || 0;
const color = parseInt(this.color.val(), 10) || 0; const color = parseInt(this.color.val(), 10) || 0;