mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
modificado presupuesto comercial
This commit is contained in:
@ -590,6 +590,7 @@ $routes->resource('presupuestocliente', ['namespace' => 'App\Controllers\Presupu
|
||||
|
||||
$routes->group('serviciosacabados', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) {
|
||||
$routes->post('datatable', 'Presupuestoacabados::datatable', ['as' => 'dataTableOfPresupuestoAcabados']);
|
||||
$routes->post('menuitems', 'Presupuestoacabados::menuItems', ['as' => 'menuItemsOfPresupuestoAcabados']);
|
||||
$routes->post('edit/(:num)', 'Presupuestoacabados::edit/$1', ['as' => 'updatePresupuestoacabados']);
|
||||
});
|
||||
|
||||
|
||||
@ -99,12 +99,13 @@ class Presupuestoacabados extends \App\Controllers\BaseResourceController
|
||||
|
||||
$tarifa_acabado_id = $reqData['tarifa_acabado_id'] ?? 0;
|
||||
$tirada = $reqData['tirada'] ?? 0;
|
||||
$proveedor_id = $reqData['proveedor_id'] ?? -1;
|
||||
$POD = $reqData['POD'] ?? 0;
|
||||
|
||||
$newTokenHash = csrf_hash();
|
||||
$csrfTokenName = csrf_token();
|
||||
|
||||
$values = $this->model->getPrecioTarifa($tarifa_acabado_id, $tirada, $POD);
|
||||
$values = $this->model->getPrecioTarifa($tarifa_acabado_id, $tirada, $proveedor_id, $POD);
|
||||
|
||||
$data = [
|
||||
'values' => $values,
|
||||
@ -119,4 +120,39 @@ class Presupuestoacabados extends \App\Controllers\BaseResourceController
|
||||
}
|
||||
|
||||
|
||||
public function menuItems()
|
||||
{
|
||||
if ($this->request->isAJAX()) {
|
||||
|
||||
$reqData = $this->request->getPost();
|
||||
try{
|
||||
|
||||
$tarifa_id = $reqData['tarifa_id'] ?? -1;
|
||||
$tirada = $reqData['tirada'] ?? 0;
|
||||
|
||||
$newTokenHash = csrf_hash();
|
||||
$csrfTokenName = csrf_token();
|
||||
|
||||
$menu = $this->model->getProveedoresForSelector($tarifa_id, $tirada);
|
||||
|
||||
$data = [
|
||||
'menu' => $menu,
|
||||
$csrfTokenName => $newTokenHash
|
||||
];
|
||||
|
||||
}
|
||||
catch(Exception $e){
|
||||
$data = [
|
||||
'error' => $e,
|
||||
$csrfTokenName => $newTokenHash
|
||||
];
|
||||
}
|
||||
finally{
|
||||
return $this->respond($data);
|
||||
}
|
||||
|
||||
} else {
|
||||
return $this->failUnauthorized('Invalid request', 403);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -216,7 +216,7 @@ class TarifaAcabadosLineas extends \App\Controllers\BaseResourceController
|
||||
$searchValues = get_filter_datatables_columns($reqData);
|
||||
|
||||
$resourceData = $this->model->getResource($searchValues, $id_TA)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
|
||||
$query = $this->model->db->getLastQuery();
|
||||
|
||||
return $this->respond(Collection::datatable(
|
||||
$resourceData,
|
||||
$this->model->getResource()->countAllResults(),
|
||||
|
||||
@ -9,6 +9,7 @@ class PresupuestoAcabadosEntity extends \CodeIgniter\Entity\Entity
|
||||
"id" => null,
|
||||
"presupuesto_id" => null,
|
||||
"tarifa_acabado_id" => null,
|
||||
"proveedor_id" => null,
|
||||
"precio_unidad" => null,
|
||||
"precio_total" => null,
|
||||
"margen" => null,
|
||||
@ -20,6 +21,7 @@ class PresupuestoAcabadosEntity extends \CodeIgniter\Entity\Entity
|
||||
protected $casts = [
|
||||
"presupuesto_id" => "int",
|
||||
"tarifa_acabado_id" => "int",
|
||||
"proveedor_id" => "int",
|
||||
"precio_unidad" => "float",
|
||||
"precio_total" => "float",
|
||||
"margen" => "float",
|
||||
|
||||
@ -17,11 +17,12 @@ class PresupuestoAcabadosModel extends \App\Models\BaseModel
|
||||
|
||||
const SORTABLE = [
|
||||
0 => "t2.nombre",
|
||||
1 => "t1.precio_unidad",
|
||||
2 => "t1.precio_total"
|
||||
1 => "t1.proveedor_id",
|
||||
2 => "t1.precio_unidad",
|
||||
3 => "t1.precio_total"
|
||||
];
|
||||
|
||||
protected $allowedFields = ["presupuesto_id", "tarifa_acabado_id", "nombre", "precio_total", "precio_unidad", "margen", "cubierta", "sobrecubierta"];
|
||||
protected $allowedFields = ["presupuesto_id", "tarifa_acabado_id", "proveedor_id", "nombre", "precio_total", "precio_unidad", "margen", "cubierta", "sobrecubierta"];
|
||||
protected $returnType = "App\Entities\Presupuestos\PresupuestoAcabadosEntity";
|
||||
|
||||
protected $useTimestamps = true;
|
||||
@ -46,10 +47,29 @@ class PresupuestoAcabadosModel extends \App\Models\BaseModel
|
||||
],
|
||||
];
|
||||
|
||||
public function getPrecioTarifa($tarifa_acabado_id, $tirada, $POD){
|
||||
|
||||
public function getProveedoresForSelector($tarifa_acabado_id, $tirada){
|
||||
|
||||
$proveedores = [];
|
||||
$modelTarifa = model('App\Models\Tarifas\Acabados\TarifaAcabadoModel');
|
||||
|
||||
$tarifa_value = $modelTarifa->getTarifaPresupuestoAcabado($tarifa_acabado_id, $tirada);
|
||||
|
||||
if (count($tarifa_value)>0) {
|
||||
foreach($tarifa_value as $tarifa)
|
||||
array_push($proveedores,
|
||||
(object)[
|
||||
'id'=> $tarifa->proveedor_id,
|
||||
'text'=> $tarifa->proveedor_nombre,
|
||||
]);
|
||||
}
|
||||
return $proveedores;
|
||||
}
|
||||
|
||||
public function getPrecioTarifa($tarifa_acabado_id, $tirada, $proveedor_id, $POD){
|
||||
|
||||
$modelTarifa = model('App\Models\Tarifas\Acabados\TarifaAcabadoModel');
|
||||
$tarifa_value = $modelTarifa->getTarifaPresupuestoAcabado($tarifa_acabado_id, $tirada);
|
||||
$tarifa_value = $modelTarifa->getTarifaPresupuestoAcabado($tarifa_acabado_id, $tirada, $proveedor_id);
|
||||
if (count($tarifa_value)>0) {
|
||||
|
||||
$result_data = $this->calcularTarifa($tarifa_value[0], $tirada, $POD<$tirada?false:true);
|
||||
@ -59,6 +79,8 @@ class PresupuestoAcabadosModel extends \App\Models\BaseModel
|
||||
'precio_unidad'=> $result_data[0],
|
||||
'total'=> $result_data[1],
|
||||
'margen'=> $result_data[2],
|
||||
'proveedor' => $tarifa_value[0]->proveedor_nombre,
|
||||
'proveedor_id' => $tarifa_value[0]->proveedor_id,
|
||||
];
|
||||
return $ret_array;
|
||||
}
|
||||
@ -119,6 +141,8 @@ class PresupuestoAcabadosModel extends \App\Models\BaseModel
|
||||
|
||||
foreach($tarifas as $tarifa){
|
||||
|
||||
$proveedor = $tarifa->proveedor_id=='undefined'?'NULL':$tarifa->proveedor_id;
|
||||
|
||||
$builder = $this->db
|
||||
->table($this->table . " t1");
|
||||
$builder->select("id");
|
||||
@ -132,6 +156,7 @@ class PresupuestoAcabadosModel extends \App\Models\BaseModel
|
||||
->table($this->table . " t1")
|
||||
->where('presupuesto_id', $presupuesto_id)
|
||||
->where('tarifa_acabado_id', $tarifa->tarifa_id)
|
||||
->set('proveedor_id', $proveedor)
|
||||
->set('precio_unidad', $tarifa->precio_unidad)
|
||||
->set('precio_total', $tarifa->precio_total)
|
||||
->set('margen', $tarifa->margen)
|
||||
@ -146,6 +171,7 @@ class PresupuestoAcabadosModel extends \App\Models\BaseModel
|
||||
->table($this->table . " t1")
|
||||
->set('presupuesto_id', $presupuesto_id)
|
||||
->set('tarifa_acabado_id', $tarifa->tarifa_id)
|
||||
->set('proveedor_id', $proveedor, false)
|
||||
->set('precio_unidad', $tarifa->precio_unidad)
|
||||
->set('precio_total', $tarifa->precio_total)
|
||||
->set('margen', $tarifa->margen)
|
||||
@ -169,11 +195,13 @@ class PresupuestoAcabadosModel extends \App\Models\BaseModel
|
||||
->table($this->table . " t1")
|
||||
->select(
|
||||
"t1.id AS id, t1.tarifa_acabado_id AS tarifa_acabado_id, t1.precio_unidad AS precio_unidad,
|
||||
t1.precio_total AS precio_total, t1.margen AS margen, t2.nombre AS nombre, t1.cubierta AS cubierta, t1.sobrecubierta AS sobrecubierta"
|
||||
t1.precio_total AS precio_total, t1.margen AS margen, t2.nombre AS nombre, t1.cubierta AS cubierta, t1.sobrecubierta AS sobrecubierta,
|
||||
t1.proveedor_id AS proveedor_id, t3.nombre AS proveedor,"
|
||||
);
|
||||
|
||||
$builder->where('t1.presupuesto_id', $presupuesto_id);
|
||||
$builder->join("lg_tarifa_acabado t2", "t1.tarifa_acabado_id = t2.id", "left");
|
||||
$builder->join("lg_proveedores t3", "t1.proveedor_id = t3.id", "left");
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
@ -114,16 +114,17 @@ class TarifaAcabadoModel extends \App\Models\BaseModel
|
||||
return $builder->orderBy("t1.nombre", "asc")->get()->getResultObject();
|
||||
}
|
||||
|
||||
public function getTarifaPresupuestoAcabado($tarifa_id, $tirada){
|
||||
public function getTarifaPresupuestoAcabado($tarifa_id, $tirada, $proveedor_id = -1){
|
||||
|
||||
$builder = $this->db
|
||||
->table($this->table . " t1")
|
||||
->select(
|
||||
"t1.id AS tarifa_acabado_id, t1.nombre AS tarifa_acabado_nombre, t1.precio_min AS tarifa_precio_min, t1.importe_fijo AS tarifa_importe_fijo,
|
||||
t1.acabado_cubierta AS acabado_cubierta, t1.acabado_sobrecubierta AS acabado_sobrecubierta, t2.id AS tarifa_linea_id, t2.tirada_min AS tirada_min, t2.tirada_max AS tirada_max,
|
||||
t2.precio_min AS precio_min, t2.precio_max AS precio_max, t2.margen AS margen"
|
||||
t2.precio_min AS precio_min, t2.precio_max AS precio_max, t2.margen AS margen, t2.proveedor_id AS proveedor_id, t3.nombre AS proveedor_nombre"
|
||||
)
|
||||
->join("tarifa_acabado_lineas t2", "t1.id = t2.tarifa_acabado_id", "left")
|
||||
->join("lg_proveedores t3", "t2.proveedor_id = t3.id", "left")
|
||||
->where("t1.is_deleted", 0)
|
||||
//->where("t1.mostrar_en_presupuesto", 1)
|
||||
->where("t2.is_deleted", 0);
|
||||
@ -132,6 +133,9 @@ class TarifaAcabadoModel extends \App\Models\BaseModel
|
||||
$builder->where('t2.tirada_min <=', $tirada);
|
||||
$builder->where('t2.tirada_max >=', $tirada);
|
||||
|
||||
if($proveedor_id != -1){
|
||||
$builder->where('t2.proveedor_id', $proveedor_id);
|
||||
}
|
||||
return $builder->get()->getResultObject();
|
||||
}
|
||||
|
||||
|
||||
@ -1353,7 +1353,14 @@ class PresupuestoService extends BaseService
|
||||
$model = new PresupuestoAcabadosModel();
|
||||
foreach ($servicios as $servicio) {
|
||||
|
||||
$nueva_tarifa = $model->getPrecioTarifa($servicio->tarifa_acabado_id, $input_data['tirada'], $input_data['POD']);
|
||||
// Si es un presupuesto duplicado hay que buscar el proveedor más barato
|
||||
if($input_data['is_duplicado']){
|
||||
$nueva_tarifa = $model->getPrecioTarifa($servicio->tarifa_acabado_id, $input_data['tirada'], -1, $input_data['POD']);
|
||||
}
|
||||
else{
|
||||
$nueva_tarifa = $model->getPrecioTarifa($servicio->tarifa_acabado_id, $input_data['tirada'], $servicio->proveedor_id, $input_data['POD']);
|
||||
}
|
||||
|
||||
if($nueva_tarifa && count($nueva_tarifa)>0){
|
||||
if(round($nueva_tarifa[0]->precio_unidad, 2) != round($servicio->precio_unidad,2) ||
|
||||
$nueva_tarifa[0]->margen != $servicio->margen){
|
||||
|
||||
@ -207,9 +207,9 @@ function init_servicio_acabado(){
|
||||
tableServiciosAcabado.row.add([
|
||||
element.tarifa_acabado_id,
|
||||
nombre_completo,
|
||||
'<select id="proveedor_enc_' + element.tarifa_acabado_id + '" class="proveedor_enc select2bs2" style="width: 100%;">' +
|
||||
'<select id="proveedor_acabado_' + element.tarifa_acabado_id + '" class="proveedor_acabado select2bs2" style="width: 100%;">' +
|
||||
'<option value="' + element.proveedor_id + '" selected >' +
|
||||
proveedor_nombre +
|
||||
element.proveedor +
|
||||
'</option>' +
|
||||
'</select>',
|
||||
'<span id="precio_unidad_acabado_' + element.tarifa_acabado_id + '">' + parseFloat(element.precio_unidad).toFixed(2) + '</span>',
|
||||
@ -218,6 +218,44 @@ function init_servicio_acabado(){
|
||||
'<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete-serv mx-2" data-id="' + element.tarifa_acabado_id +'" data-text="' + nombre_completo + '"></i></a>'
|
||||
]).draw(false)
|
||||
|
||||
$('#proveedor_acabado_' + element.tarifa_acabado_id).select2({
|
||||
allowClear: false,
|
||||
minimumResultsForSearch: -1,
|
||||
ajax: {
|
||||
url: window.routes_servicios.menuItemsOfPresupuestoAcabados,
|
||||
type: 'post',
|
||||
dataType: 'json',
|
||||
|
||||
data: function (params) {
|
||||
|
||||
if(parseInt($('#tirada').val())>0){
|
||||
var tirada = parseInt($('#tirada').val())
|
||||
}
|
||||
else{
|
||||
var tirada = 0
|
||||
}
|
||||
|
||||
var return_data = {
|
||||
tarifa_id: element.tarifa_acabado_id,
|
||||
tirada: tirada,
|
||||
};
|
||||
return_data = Object.assign(return_data, window.token_ajax);
|
||||
|
||||
return return_data;
|
||||
},
|
||||
delay: 60,
|
||||
processResults: function (response) {
|
||||
yeniden(response[window.csrf_token]);
|
||||
return {
|
||||
results: response.menu
|
||||
};
|
||||
},
|
||||
cache: true
|
||||
}
|
||||
});
|
||||
$('#proveedor_acabado_' + element.tarifa_acabado_id).on('change', select_acabado_event)
|
||||
|
||||
|
||||
$('#precio_total_acabado_' + element.tarifa_acabado_id).on('change', function(){
|
||||
updatePresupuesto({
|
||||
update_lineas: false,
|
||||
@ -228,9 +266,55 @@ function init_servicio_acabado(){
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
check_serv_acabado_error()
|
||||
}
|
||||
|
||||
function select_acabado_event(){
|
||||
|
||||
if(parseInt($('#tirada').val())>0){
|
||||
var tirada = parseInt($('#tirada').val()) + parseInt($('#merma').val())
|
||||
}
|
||||
else{
|
||||
var tirada = 0
|
||||
}
|
||||
|
||||
var tarifa_id = null;
|
||||
if(this.id.includes('proveedor_acabado')){
|
||||
tarifa_id = this.id.split('_')[2];
|
||||
}
|
||||
else{
|
||||
tarifa_id = this.id.split('_')[1];
|
||||
}
|
||||
|
||||
var datos = {
|
||||
tarifa_acabado_id: tarifa_id,
|
||||
tirada: tirada,
|
||||
proveedor_id: parseInt($('#proveedor_acabado_' + tarifa_id).select2('data')[0].id),
|
||||
POD: parseInt($('#POD').val())
|
||||
};
|
||||
datos = Object.assign(datos, window.token_ajax);
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: window.routes_servicios.dataTableOfPresupuestoAcabados,
|
||||
data: datos,
|
||||
success: function (data) {
|
||||
|
||||
$('#precio_unidad_acabado_' + datos.tarifa_acabado_id).text(parseFloat(data.values[0].precio_unidad).toFixed(2))
|
||||
$('#precio_total_acabado_' + datos.tarifa_acabado_id).val(parseFloat(data.values[0].total).toFixed(2))
|
||||
$('#acabado_margen_' + datos.tarifa_acabado_id).val(parseFloat(data.values[0].margen).toFixed(2))
|
||||
|
||||
yeniden(data[window.csrf_token]);
|
||||
return true;
|
||||
},
|
||||
error: function(e){
|
||||
return false;
|
||||
}
|
||||
})
|
||||
return false;
|
||||
}
|
||||
|
||||
function check_serv_acabado_error(){
|
||||
|
||||
var htmlString = '';
|
||||
@ -285,6 +369,11 @@ function get_tarifas_acabado(tarifa_id = -1, uso=null){
|
||||
tableServiciosAcabado.row.add([
|
||||
row.tarifa_id,
|
||||
nombre,
|
||||
'<select id="proveedor_acabado_' + row.tarifa_id + '" class="proveedor_acabado select2bs2" style="width: 100%;">' +
|
||||
'<option value="' + row.proveedor_id + '" selected >' +
|
||||
row.proveedor +
|
||||
'</option>' +
|
||||
'</select>',
|
||||
'<span id="precio_unidad_acabado_' + row.tarifa_id + '">' + parseFloat(row.precio_unidad).toFixed(2) + '</span>',
|
||||
'<input class="update-totales-servicios" id="precio_total_acabado_' + row.tarifa_id +'" value="' + parseFloat(row.total).toFixed(2) + '"></input>',
|
||||
'<span style="display: none;" class="update-totales" id="acabado_margen_' + row.tarifa_id + '">' + parseFloat(row.margen).toFixed(2) + '</span>',
|
||||
@ -300,6 +389,44 @@ function get_tarifas_acabado(tarifa_id = -1, uso=null){
|
||||
update_tiradas_alternativas: true})
|
||||
})
|
||||
|
||||
|
||||
|
||||
$('#proveedor_acabado_' + row.tarifa_id).select2({
|
||||
allowClear: false,
|
||||
minimumResultsForSearch: -1,
|
||||
ajax: {
|
||||
url: window.routes_servicios.menuItemsOfPresupuestoAcabados,
|
||||
type: 'post',
|
||||
dataType: 'json',
|
||||
|
||||
data: function (params) {
|
||||
|
||||
if(parseInt($('#tirada').val())>0){
|
||||
var tirada = parseInt($('#tirada').val())
|
||||
}
|
||||
else{
|
||||
var tirada = 0
|
||||
}
|
||||
|
||||
var return_data = {
|
||||
tarifa_id: row.tarifa_id,
|
||||
tirada: tirada,
|
||||
};
|
||||
return_data = Object.assign(return_data, window.token_ajax);
|
||||
|
||||
return return_data;
|
||||
},
|
||||
delay: 60,
|
||||
processResults: function (response) {
|
||||
yeniden(response[window.csrf_token]);
|
||||
return {
|
||||
results: response.menu
|
||||
};
|
||||
},
|
||||
cache: true
|
||||
}
|
||||
});
|
||||
$('#proveedor_acabado_' + row.tarifa_id).on('change', select_acabado_event)
|
||||
});
|
||||
|
||||
check_serv_acabado_error()
|
||||
@ -420,12 +547,15 @@ function get_datos_acabado(){
|
||||
values['sobrecubierta'] = 0
|
||||
break
|
||||
case 2:
|
||||
values['precio_unidad'] = $(this).text()
|
||||
values['proveedor_id'] = $(this).children(":first").select2('data')[0].id
|
||||
break
|
||||
case 3:
|
||||
values['precio_total'] = $(this).children(":first").val()
|
||||
values['precio_unidad'] = $(this).text()
|
||||
break
|
||||
case 4:
|
||||
values['precio_total'] = $(this).children(":first").val()
|
||||
break
|
||||
case 5:
|
||||
values['margen'] = $(this).text()
|
||||
break
|
||||
}
|
||||
@ -736,11 +866,7 @@ async function get_tarifas_enc(tipo=null, tarifa_id = -1){
|
||||
|
||||
var datos = {
|
||||
tarifa_encuadernacion_id : tarifa_id,
|
||||
solapas: $('#solapas').is(':checked')?1:0,
|
||||
paginas: parseInt($('#paginas').val())>0?parseInt($('#paginas').val()):0,
|
||||
tirada: tirada,
|
||||
ancho: dimension.ancho,
|
||||
alto: dimension.alto,
|
||||
POD: parseInt($('#POD').val())
|
||||
};
|
||||
datos = Object.assign(datos, window.token_ajax)
|
||||
@ -1743,9 +1869,19 @@ async function actualizar_servicios(update_preimpresion=false){
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
data.lines.forEach((line) => {
|
||||
$('#proveedor_acabado_' + line[0].tarifa_id).off('change')
|
||||
if(line[0].hasOwnProperty('proveedor_id')){
|
||||
$('#proveedor_acabado_' + line[0].tarifa_id)
|
||||
.append('<option selected="selected" value="' + line[0].proveedor_id + '">' + line[0].proveedor + '</option>')
|
||||
}
|
||||
else{
|
||||
$('#proveedor_acabado_' + line[0].tarifa_id).empty()
|
||||
.append('<option selected="selected" value="' + line[0].proveedor_id + '">' + window.Presupuestos.no_disponible + '</option>')
|
||||
}
|
||||
$('#precio_unidad_acabado_' + line[0].tarifa_id).text(parseFloat(line[0].precio_unidad).toFixed(2))
|
||||
$('#precio_total_acabado_' + line[0].tarifa_id).val(parseFloat(line[0].total).toFixed(2))
|
||||
$('#acabado_margen_' + line[0].tarifa_id).text(parseFloat(line[0].margen).toFixed(2))
|
||||
$('#proveedor_acabado_' + line[0].tarifa_id).on('change', select_enc_event)
|
||||
});
|
||||
check_serv_acabado_error()
|
||||
yeniden(data[window.csrf_token]);
|
||||
|
||||
@ -90,6 +90,7 @@
|
||||
<tr>
|
||||
<th><?= lang('Presupuestos.id') ?></th>
|
||||
<th><?= lang('Tarifaacabado.tarifaacabado') ?></th>
|
||||
<th><?= lang('Proveedores.proveedor') ?></th>
|
||||
<th><?= lang('Presupuestos.precioUnidad') ?></th>
|
||||
<th><?= lang('Presupuestos.precioTotal') ?></th>
|
||||
<th></th>
|
||||
@ -297,6 +298,7 @@
|
||||
|
||||
window.routes_servicios = {
|
||||
dataTableOfPresupuestoAcabados: "<?=route_to('dataTableOfPresupuestoAcabados') ?>",
|
||||
menuItemsOfPresupuestoAcabados: '<?= route_to("menuItemsOfPresupuestoAcabados") ?>',
|
||||
dataTableOfPresupuestoPreimpresion: "<?=route_to('dataTableOfPresupuestoPreimpresiones') ?>",
|
||||
dataTableOfPresupuestoEncuadernaciones: "<?=route_to('dataTableOfPresupuestoEncuadernaciones') ?>",
|
||||
dataTableOfPresupuestoManipulados: "<?=route_to('dataTableOfPresupuestoManipulados') ?>",
|
||||
|
||||
Reference in New Issue
Block a user