terminada modificacion

This commit is contained in:
2023-12-08 07:30:58 +01:00
parent 71d56defac
commit 7b69b5c499
8 changed files with 194 additions and 64 deletions

View File

@ -22,8 +22,8 @@ CI_ENVIRONMENT = development
# APP
#--------------------------------------------------------------------
#app.baseURL = 'https://sk-jjo.imnavajas.es'
app.baseURL = 'https://sk-imn.imnavajas.es'
app.baseURL = 'https://sk-jjo.imnavajas.es'
#app.baseURL = 'https://sk-imn.imnavajas.es'
# app.baseURL = "http://safekat.test/"
# app.forceGlobalSecureRequests = false
@ -118,7 +118,7 @@ database.default.dump =
security.headerName = 'X-CSRF-TOKEN'
security.cookieName = 'safekat_cookie'
security.expires = 7200
security.regenerate = true
security.regenerate = false
security.redirect = true
security.samesite = 'Lax'

View File

@ -321,14 +321,23 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 5;
$requestedOrder = $reqData['order']['0']['column'] ?? 0;
$order = PresupuestoModel::SORTABLE[$requestedOrder >= 0 ? $requestedOrder : 0];
$dir = $reqData['order']['0']['dir'] ?? 'asc';
$requestedOrder1 = $reqData['order']['0']['column'] ?? 0;
$order1 = PresupuestoModel::SORTABLE[$requestedOrder1 >= 0 ? $requestedOrder1 : 0];
$dir1 = $reqData['order']['0']['dir'] ?? 'asc';
$requestedOrder2 = $reqData['order']['1']['column'] ?? 0;
$order2 = PresupuestoModel::SORTABLE[$requestedOrder2 >= 0 ? $requestedOrder1 : 0];
$dir2 = $reqData['order']['0']['dir'] ?? 'asc';
$requestedOrder3 = $reqData['order']['2']['column'] ?? 0;
$order3 = PresupuestoModel::SORTABLE[$requestedOrder3 >= 0 ? $requestedOrder1 : 0];
$dir3 = $reqData['order']['0']['dir'] ?? 'asc';
if (is_null($type)) {
$resourceData = $this->model->getResource($search)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
$searchValues = get_filter_datatables_columns($reqData);
$resourceData = $this->model->getResource($searchValues)->orderBy($order1, $dir1)->orderBy($order2, $dir2)
->orderBy($order3, $dir3)->limit($length, $start)->get()->getResultObject();
foreach ($resourceData as $item) :
if (isset($item->comentarios_pdf) && strlen($item->comentarios_pdf) > 100) :
$item->comentarios_pdf = character_limiter($item->comentarios_pdf, 100);

View File

@ -641,6 +641,25 @@ function templateSelect($templates=[],$name='',$type='') {
return null;
}
function get_filter_datatables_columns($request){
$columnSearch = array();
if ( isset( $request['columns'] ) ) {
for ( $i=0, $ien=count($request['columns']) ; $i<$ien ; $i++ ) {
$requestColumn = $request['columns'][$i];
$str = $requestColumn['search']['value'];
if ( $requestColumn['searchable'] == 'true' &&
$str != '' ) {
array_push($columnSearch, [$i, $requestColumn['data'], $str]);
}
}
}
return $columnSearch;
}
// Devuelve true si los intervalos (a1,a2) (b1,b2) se solapan
// https://stackoverflow.com/questions/3269434/whats-the-most-efficient-way-to-test-if-two-ranges-overlap
function check_overlap($a1, $a2, $b1, $b2){

View File

@ -0,0 +1,15 @@
<?php
return [
'hoy' => 'Today',
'ayer' => 'Yesterday',
'ultimos7' => 'Last 7 Days',
'ultimos30' => 'Last 30 Days',
'esteMes' => 'This Month',
'ultimoMes' => 'Last Month',
'personalizar' => 'Custom',
'aplicar' => 'Apply',
'limpiar' => 'Clear',
];

View File

@ -0,0 +1,15 @@
<?php
return [
'hoy' => 'Hoy',
'ayer' => 'Ayer',
'ultimos7' => 'Últimos 7 días',
'ultimos30' => 'Últimos 30 días',
'esteMes' => 'Este mes',
'ultimoMes' => 'Último mes',
'personalizar' => 'Personalizado',
'aplicar' => 'Aplicar',
'limpiar' => 'Limpiar',
];

View File

@ -18,13 +18,12 @@ class PresupuestoModel extends \App\Models\GoBaseModel
2 => "t2.nombre",
3 => "t3.first_name",
4 => "t1.titulo",
5 => "t4.nombre",
6 => "t5.nombre",
7 => "t1.inc_rei",
8 => "t1.paginas",
9 => "t1.tirada",
10 => "t1.total_pedido",
11 => "t6.estado",
5 => "t5.nombre",
6 => "t1.inc_rei",
7 => "t1.paginas",
8 => "t1.tirada",
9 => "t1.total_pedido",
10 => "t6.estado",
];
protected $allowedFields = [
@ -307,7 +306,7 @@ class PresupuestoModel extends \App\Models\GoBaseModel
*
* @return \CodeIgniter\Database\BaseBuilder
*/
public function getResource(string $search = "")
public function getResource($search = [])
{
$builder = $this->db
->table($this->table . " t1")
@ -324,36 +323,22 @@ class PresupuestoModel extends \App\Models\GoBaseModel
$builder->where("t1.is_deleted", 0);
return empty($search)
? $builder
: $builder
->groupStart()
->like("t1.id", $search)
->orLike("t1.created_at", $search)
->orLike("t2.nombre", $search)
->orLike("t3.first_name", $search)
->orLike("t3.last_name", $search)
->orLike("t1.titulo", $search)
->orLike("t4.nombre", $search)
->orLike("t5.nombre", $search)
->orLike("t1.inc_rei", $search)
->orLike("t1.paginas", $search)
->orLike("t1.tirada", $search)
->orLike("t1.total_pedido ", $search)
->orLike("t6.estado", $search)
->orLike("t1.id", $search)
->orLike("t1.created_at", $search)
->orLike("t2.nombre", $search)
->orLike("t3.first_name", $search)
->orLike("t3.last_name", $search)
->orLike("t1.titulo", $search)
->orLike("t4.nombre", $search)
->orLike("t5.nombre", $search)
->orLike("t1.inc_rei", $search)
->orLike("t1.paginas", $search)
->orLike("t1.tirada", $search)
->orLike("t1.total_pedido ", $search)
->orLike("t6.estado", $search)
->groupEnd();
if(empty($search))
return $builder;
else{
$builder->groupStart();
foreach($search as $col_search){
if($col_search[0] != 1)
$builder->like(self::SORTABLE[$col_search[0]], $col_search[2]);
else{
$dates = explode(" ", $col_search[2]);
$builder->where(self::SORTABLE[$col_search[0]] . ">=", $dates[0]);
$builder->where(self::SORTABLE[$col_search[0]] . "<=", $dates[1]);
}
}
$builder->groupEnd();
return $builder;
}
}
}

View File

@ -25,11 +25,11 @@
<th><?= lang('Presupuestos.titulo') ?></th>
<th><?= lang('Paises.pais') ?></th>
<th><?= lang('Presupuestos.incRei') ?></th>
<th><?= lang('Presupuestos.paginas') ?></th>
<th><?= lang('Presupuestos.tirada') ?></th>
<th><?= lang('Presupuestos.totalPresupuesto') ?></th>
<th class='noFilter'><?= lang('Presupuestos.paginas') ?></th>
<th class='noFilter'><?= lang('Presupuestos.tirada') ?></th>
<th class='noFilter'><?= lang('Presupuestos.totalPresupuesto') ?></th>
<th><?= lang('Presupuestos.presupuestoEstado') ?></th>
<th class="text-nowrap"><?= lang('Basic.global.Action') ?></th>
<th class="noFilter text-nowrap"><?= lang('Basic.global.Action') ?></th>
</tr>
</thead>
<tbody>
@ -48,18 +48,93 @@
<?=$this->section('additionalInlineJs') ?>
const lastColNr = $('#tableOfPresupuestos').find("tr:first th").length - 1;
const actionBtns = function(data) {
return `
<td class="text-right py-0 align-middle">
<div class="btn-group btn-group-sm">
<a href="javascript:void(0);"><i class="ti ti-pencil ti-sm btn-edit mx-2" data-id="${data.id}"></i></a>
<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete mx-2" data-id="${data.id}" data-bs-toggle="modal" data-bs-target="#confirm2delete"></i></a>
</div>
</td>`;
};
theTable = $('#tableOfPresupuestos').DataTable({
const lastColNr = $('#tableOfPresupuestos').find("tr:first th").length - 1;
const actionBtns = function(data) {
return `
<td class="text-right py-0 align-middle">
<div class="btn-group btn-group-sm">
<a href="javascript:void(0);"><i class="ti ti-pencil ti-sm btn-edit mx-2" data-id="${data.id}"></i></a>
<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete mx-2" data-id="${data.id}" data-bs-toggle="modal" data-bs-target="#confirm2delete"></i></a>
</div>
</td>`;
};
// Setup - add a text input to each footer cell
$('#tableOfPresupuestos thead tr').clone(true).appendTo('#tableOfPresupuestos thead');
$('#tableOfPresupuestos thead tr:eq(1) th').each(function (i) {
if (!$(this).hasClass("noFilter")) {
var title = $(this).text();
if(i==1){
$(this).html('<input id="bs-rangepicker-range" type="text" class="form-control " style="min-width:100px;max-width:120px;font-size:0.8rem !important;" />');
var bsRangePickerRange = $('#bs-rangepicker-range')
bsRangePickerRange.daterangepicker({
ranges: {
'<?= lang('datePicker.hoy') ?>': [moment(), moment()],
'<?= lang('datePicker.ayer') ?>': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'<?= lang('datePicker.ultimos7') ?>': [moment().subtract(6, 'days'), moment()],
'<?= lang('datePicker.ultimos30') ?>': [moment().subtract(29, 'days'), moment()],
'<?= lang('datePicker.esteMes') ?>': [moment().startOf('month'), moment().endOf('month')],
'<?= lang('datePicker.ultimoMes') ?>': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
},
opens: 'right',
language: '<?= config('Basics')->i18n ?>',
"locale": {
"customRangeLabel": "<?= lang('datePicker.personalizar') ?>",
"format": "YYYY-MM-DD",
"separator": " ",
"applyLabel": "<?= lang('datePicker.aplicar') ?>",
"cancelLabel": "<?= lang('datePicker.limpiar') ?>",
},
"alwaysShowCalendars": true,
autoUpdateInput: false,
});
bsRangePickerRange.on('apply.daterangepicker', function(ev, picker) {
$(this).val(picker.startDate.format('YYYY-MM-DD') + ' ' + picker.endDate.format('YYYY-MM-DD'));
theTable
.column(i)
.search(this.value)
.draw();
});
bsRangePickerRange.on('cancel.daterangepicker', function(ev, picker) {
$(this).val('');
theTable
.column(i)
.search(this.value)
.draw();
});
}
else{
$(this).html('<input type="text" class="form-control " style="min-width:100px;max-width:120px;font-size:0.8rem !important;" />');
$('input', this).on('change clear', function () {
if (theTable.column(i).search() !== this.value) {
theTable
.column(i)
.search(this.value)
.draw();
}
});
}
}
else {
$(this).html('<span></span>');
}
});
theTable = $('#tableOfPresupuestos').DataTable({
orderCellsTop: true,
fixedHeader: true,
processing: true,
serverSide: true,
autoWidth: true,
@ -68,7 +143,7 @@
lengthMenu: [ 5, 10, 25, 50, 75, 100, 250, 500, 1000, 2500 ],
pageLength: 50,
lengthChange: true,
"dom": 'lfBrtip',
"dom": 'lBrtip',
"buttons": [
'colvis', 'copy', 'csv', 'excel', 'print', {
extend: 'pdfHtml5',
@ -76,7 +151,7 @@
pageSize: 'A4'
}
],
stateSave: true,
stateSave: false,
order: [[1, 'asc']],
language: {
url: "//cdn.datatables.net/plug-ins/1.13.4/i18n/<?= config('Basics')->i18n ?>.json"
@ -182,6 +257,8 @@ $(document).on('click', '.btn-remove', function(e) {
<?=$this->section('css') ?>
<link rel="stylesheet" href="https://cdn.datatables.net/buttons/2.2.3/css/buttons.<?=config('Basics')->theme['name'] == 'Bootstrap5' ? 'bootstrap5' : 'bootstrap4' ?>.min.css">
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/fixedheader/3.1.7/css/fixedHeader.dataTables.min.css">
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/bootstrap-daterangepicker/bootstrap-daterangepicker.css') ?>" />
<?=$this->endSection() ?>
@ -191,8 +268,12 @@ $(document).on('click', '.btn-remove', function(e) {
<script src="https://cdn.datatables.net/buttons/2.2.3/js/buttons.html5.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.2.3/js/buttons.print.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.2.3/js/buttons.colVis.min.js"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/moment/moment.js') ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/bootstrap-daterangepicker/bootstrap-daterangepicker.js') ?>"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.0/jszip.min.js" integrity="sha512-xcHCGC5tQ0SHlRX8Anbz6oy/OullASJkEhb4gjkneVpGE3/QGYejf14CUO5n5q5paiHfRFTa9HKgByxzidw2Bw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.5/pdfmake.min.js" integrity="sha512-rDbVu5s98lzXZsmJoMa0DjHNE+RwPJACogUCLyq3Xxm2kJO6qsQwjbE5NDk2DqmlKcxDirCnU1wAzVLe12IM3w==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

View File

@ -102,3 +102,9 @@ div.draw-shapes {
overflow-y: hidden;
white-space: nowrap;
}
.column-input-search {
min-width: 100px;
max-width: 120px;
font-size: 0.8rem !important;
}