haciendo la conexion con el ajax del comparador negro

This commit is contained in:
Jaime Jiménez
2023-09-26 15:17:49 +02:00
parent 991a27286b
commit 693504f9d7
10 changed files with 298 additions and 64 deletions

View File

@ -0,0 +1,26 @@
<?php
namespace App\Controllers;
use App\Controllers\BaseController;
class Js_loader extends BaseController
{
function __construct()
{
}
function comparadorCosidoTapaBlanda_js()
{
$this->response->setHeader('Content-Type', 'text/javascript');
return view('themes/backend/vuexy/form/presupuestos/cosidotapablanda/comparador.js');
}
}

View File

@ -138,7 +138,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
$this->viewData['presupuestoEntity'] = isset($sanitizedData) ? new PresupuestoEntity($sanitizedData) : new PresupuestoEntity();
$this->viewData['clienteList'] = $this->getClienteListItems($presupuestoEntity->cliente_id ?? null);
$this->viewData['incReiList'] = array('incidencia'=>lang('Presupuestos.incidencia'), 'reimpresion'=>lang('Presupuestos.reimpresion'), 'sin_cargo'=>lang('Presupuestos.sinCargo'));
$this->viewData['incReiList'] = array('incidencia' => lang('Presupuestos.incidencia'), 'reimpresion' => lang('Presupuestos.reimpresion'), 'sin_cargo' => lang('Presupuestos.sinCargo'));
$this->viewData['paisList'] = $this->getPaisListItems();
$this->viewData['papelFormatoList'] = $this->getPapelFormatoListItems($presupuestoEntity->papel_formato_id ?? null);
$this->viewData['papelGenericoNegroList'] = $this->getPapelGenericoNegro();
@ -147,9 +147,9 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
$this->viewData['papelGenericoColorHQList'] = $this->getPapelGenericoColorHQ();
$this->viewData['papelGenericoCubiertaList'] = $this->getPapelGenericoCubierta();
$this->viewData['papelGenericoSobrecubiertaList'] = $this->getPapelGenericoSobreCubierta();
/*
$this->viewData['formaPagoList'] = $this->getFormaPagoListItems();
@ -375,7 +375,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
$this->viewData['papelGenericoColorHQList'] = $this->getPapelGenericoColorHQ();
$this->viewData['papelGenericoCubiertaList'] = $this->getPapelGenericoCubierta();
$this->viewData['papelGenericoSobrecubiertaList'] = $this->getPapelGenericoSobreCubierta();
$this->viewData['formAction'] = route_to('updatePresupuesto', $id);
@ -391,46 +391,102 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
{
if ($this->request->isAJAX()) {
$reqData = $this->request->getPost();
if (!isset($reqData['draw']) || !isset($reqData['columns'])) {
$errstr = 'No data available in response to this specific request.';
$response = $this->respond(Collection::datatable([], 0, 0, $errstr), 400, $errstr);
return $response;
$table_type = $reqData['table_type'] ?? null;
if (is_null($table_type)) {
if (!isset($reqData['draw']) || !isset($reqData['columns'])) {
$errstr = 'No data available in response to this specific request.';
$response = $this->respond(Collection::datatable([], 0, 0, $errstr), 400, $errstr);
return $response;
}
$search = $reqData['search']['value'];
}
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 5;
$search = $reqData['search']['value'];
$requestedOrder = $reqData['order']['0']['column'] ?? 0;
$order = PresupuestoModel::SORTABLE[$requestedOrder >= 0 ? $requestedOrder : 0];
$dir = $reqData['order']['0']['dir'] ?? 'asc';
$table_type = $reqData['table_type'] ?? null;
if (is_null($table_type)){
return $this->failNotFound('Table type not found', 404);
}
switch($table_type){
case 'comp_int_bn':
$datosPedido = (object)array(
'paginas' => $reqData['paginas'] ?? 0,
'tirada' => $reqData['tirada'] ?? 0,
'merma' => $reqData['merma'] ?? 0,
'ancho' => $reqData['alto'] ?? 100000,
'alto' => $reqData['ancho'] ?? 100000,
'isCosido' => true, // JJO esto es custom por cada tipo de presupuesto
);
$papel_generico_id = $reqData['papel_generico_id'] ?? 0;
$gramaje = $reqData['gramaje'] ?? 0;
$resourceData = $this->getCompBnData($datosPedido, $papel_generico_id, $gramaje);
break;
default:
break;
}
if (is_null($table_type)) {
$resourceData = $this->model->getResource($search)->orderBy($order, $dir)->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);
endif;
if (isset($item->causa_cancelacion) && strlen($item->causa_cancelacion) > 100) :
$item->causa_cancelacion = character_limiter($item->causa_cancelacion, 100);
endif;
if (isset($item->comentarios) && strlen($item->comentarios) > 100) :
$item->comentarios = character_limiter($item->comentarios, 100);
endif;
if (isset($item->comentarios_safekat) && strlen($item->comentarios_safekat) > 100) :
$item->comentarios_safekat = character_limiter($item->comentarios_safekat, 100);
endif;
if (isset($item->comentarios_tarifa) && strlen($item->comentarios_tarifa) > 100) :
$item->comentarios_tarifa = character_limiter($item->comentarios_tarifa, 100);
endif;
if (isset($item->tirada_alternativa_json_data) && strlen($item->tirada_alternativa_json_data) > 100) :
$item->tirada_alternativa_json_data = character_limiter($item->tirada_alternativa_json_data, 100);
endif;
if (isset($item->titulo) && strlen($item->titulo) > 100) :
$item->titulo = character_limiter($item->titulo, 100);
endif;
if (isset($item->paginas_color_posicion) && strlen($item->paginas_color_posicion) > 100) :
$item->paginas_color_posicion = character_limiter($item->paginas_color_posicion, 100);
endif;
if (isset($item->aprobado_json_data) && strlen($item->aprobado_json_data) > 100) :
$item->aprobado_json_data = character_limiter($item->aprobado_json_data, 100);
endif;
if (isset($item->comparador_json_data) && strlen($item->comparador_json_data) > 100) :
$item->comparador_json_data = character_limiter($item->comparador_json_data, 100);
endif;
if (isset($item->ws_externo_json_data) && strlen($item->ws_externo_json_data) > 100) :
$item->ws_externo_json_data = character_limiter($item->ws_externo_json_data, 100);
endif;
endforeach;
} else {
switch ($table_type) {
case 'comp_int_bn':
$datosPedido = (object)array(
'paginas' => intval($reqData['paginas']) ?? 0,
'tirada' => intval($reqData['tirada']) ?? 0,
'merma' => intval($reqData['merma']) ?? 0,
'ancho' => intval($reqData['alto']) ?? 100000,
'alto' => intval($reqData['ancho']) ?? 100000,
'isCosido' => true, // JJO esto es custom por cada tipo de presupuesto
);
$papel_generico = [
'id' => $reqData['papel_generico_id'] ?? 0,
'nombre' => $reqData['papel_generico'] ?? "",
];
$gramaje = $reqData['gramaje'] ?? 0;
$resourceData = $this->getCompBnData($datosPedido, $papel_generico, $gramaje);
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
'lineas' => $resourceData,
$csrfTokenName => $newTokenHash
];
//return json_encode(array("data"=>$resourceData));
return $this->respond($data);
break;
default:
break;
}
}
return $this->respond(Collection::datatable(
$resourceData,
$this->model->getResource()->countAllResults(),
@ -441,10 +497,11 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
}
}
private function getCompBnData($datosPedido, $papel_generico_id, $gramaje){
private function getCompBnData($datosPedido, $papel_generico, $gramaje)
{
$uso = 'interior';
$tipo = 'negro';
$opciones_papel = array(
'bn' => 1,
'cubierta' => 0,
@ -455,15 +512,13 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
// Se obtienen los papeles disponibles
$papelimpresionmodel = new PapelImpresionModel();
$papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto(
papel_generico_id: $papel_generico_id,
papel_generico_id: $papel_generico['id'],
gramaje: $gramaje,
options: $opciones_papel
);
$resultado = json_encode(
array('data' => array())
);
$lineas = array();
// Para cada papel, se obtienen las maquinas disponibles
foreach ($papeles as $papel) {
$maquinamodel = new MaquinaModel();
@ -476,14 +531,23 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
// Se recorren las máquinas y se calcula el coste de linea por cada una
foreach ($maquinas as $maquina) {
$tarifamodel = new MaquinasTarifasImpresionModel();
$tarifamodel = new MaquinasTarifasImpresionModel();
$tarifa = $tarifamodel->getTarifa($maquina->maquina_id, $uso, $tipo);
$linea = PresupuestoService::getCostesLinea($uso, $tipo, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa);
$linea = PresupuestoService::getCostesLinea($uso, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa);
$linea['fields']['maquina'] = $maquina->maquina;
$linea['fields']['maquina_id'] = $maquina->maquina_id;
$linea['fields']['papel_impresion'] = $papel->nombre;
$linea['fields']['papel_impresion_id'] = $papel->id;
$linea['fields']['paginas'] = $datosPedido->paginas;
$linea['fields']['gramaje'] = $gramaje;
$linea['fields']['papel_generico_id'] = $papel_generico['id'];
$linea['fields']['papel_generico_id'] = $papel_generico['nombre'];
array_push($lineas, $linea);
}
}
return $resultado;
return $lineas;
}
public function allItemsSelect()
@ -512,7 +576,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
public function menuItems()
{
if ($this->request->isAJAX()) {
$reqData = $this->request->getPost();
$tipo = $reqData['tipo'] ?? null;
@ -520,12 +584,12 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
$searchStr = goSanitize($this->request->getPost('searchTerm'))[0];
if ($tipo == 'gramaje'){
if ($tipo == 'gramaje') {
// En este caso contiene el nombre del papel generico
$model = new PapelGenericoModel();
$menu = $model->getGramajeComparador($datos, $searchStr);
}
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
@ -567,7 +631,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
{
$papelFormatoModel = model('App\Models\Configuracion\PapelFormatoModel');
$data = $papelFormatoModel->getElementsForMenu();
array_unshift($data, (object)['id'=>'', 'tamanio' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Presupuestos.papelFormatoId'))])]);
array_unshift($data, (object)['id' => '', 'tamanio' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Presupuestos.papelFormatoId'))])]);
return $data;
}

View File

@ -16,10 +16,9 @@ class Js_loader extends BaseController
function comparadorCosidoTapablanda_js()
{
$this->load->view('themes/backend/vuexy/form/presupuestos/cosidotapablanda/comparador.js', $data);
$this->load->view('themes/backend/vuexy/form/presupuestos/cosidotapablanda/comparador.js');
$this->output->set_content_type('text/javascript');
}
}

View File

@ -2,8 +2,7 @@
namespace App\Controllers;
use App\Models\Presupuestos\PresupuestoModel;
use App\Services\PresupuestoService;
use App\Controllers\BaseController;
class Test extends BaseController
{
@ -16,12 +15,21 @@ class Test extends BaseController
public function index()
{
PresupuestoService::test();
//PresupuestoService::test();
return view('themes/backend/vuexy/form/test_js/viewTest');
}
function test_js()
{
/*$this->response->setHeader('Content-Type', 'text/javascript');
return view('themes/backend/vuexy/form/test_js/test_js.js');*/
}
public function pruebaJJO()
{
PresupuestoService::test2();
//PresupuestoService::test2();
}
}

View File

@ -95,7 +95,7 @@ class PresupuestoService extends BaseService
*
* @return [type]
*/
public static function getCostesLinea($uso, $tipo, $datosPedido, $maquina, $papel_impresion, $opciones_papel, $tarifa)
public static function getCostesLinea($uso, $datosPedido, $maquina, $papel_impresion, $opciones_papel, $tarifa)
{
$response['fields'] = [];
@ -117,7 +117,7 @@ class PresupuestoService extends BaseService
if ($response['fields']['num_formas']['posicion_formas'] == 'n/a') {
$response['error']['value'] = true;
$response['error']['message'] = 'no_formas_disponibles';
return response;
return $response;
}
// precio del pliego de impresion

View File

@ -69,10 +69,10 @@
<p><?= lang('MaquinasTarifasImpresions.negro') ?></p>
</div>
<div class="col-md-12 col-lg-2 px-4">
<input type="number" id="compPaginasNegro" name="comp_paginas_negro" placeholder="0" maxLength="5" class="form-control" value="<?= isset($presupuestoEntity->comparador_json_data->negro) ? (old(0, $presupuestoEntity->comparador_json_data->negro->paginas)) : '0' ?>">
<input type="number" id="compPaginasNegro" name="comp_paginas_negro" placeholder="0" maxLength="5" class="form-control comp_negro_items" value="<?= isset($presupuestoEntity->comparador_json_data->negro) ? (old(0, $presupuestoEntity->comparador_json_data->negro->paginas)) : '0' ?>">
</div>
<div class="col-md-12 col-lg-6 px-4">
<select id="compPapelNegro" name="comp_papel_negro" class="form-control select2bs2" style="width: 100%;">
<select id="compPapelNegro" name="comp_papel_negro" class="form-control select2bs2 comp_negro_items" style="width: 100%;">
<?php if (isset($papelGenericoNegroList) && is_array($papelGenericoNegroList) && !empty($papelGenericoNegroList)) :
foreach ($papelGenericoNegroList as $k => $v) : ?>
<option value="<?= $k ?>" /*<?= $k == $presupuestoEntity->tipo_impresion_id ? ' selected' : '' ?>* />
@ -83,7 +83,7 @@
</select>
</div>
<div class="col-md-12 col-lg-2 px-4">
<select id="compGramajeNegro" name="comp_gramaje_negro" class="form-control select2bs2" disabled style="width: 100%;">
<select id="compGramajeNegro" name="comp_gramaje_negro" class="form-control select2bs2 comp_negro_items" disabled style="width: 100%;">
</select>
</div>
<div>

View File

@ -58,10 +58,21 @@ $('.accordion-button').on('click', function (e) {
/*******************************
* Metodos
*******************************/
function checkDatosPedidoForComp() {
if (parseInt(document.getElementById('paginas').value) > 0 &&
parseInt(document.getElementById('tirada').value) > 0 &&
($('#papelFormatoId').select2('data').length > 0 ||
(parseInt(document.getElementById('papelFormatoAncho').value) > 0 && parseInt(document.getElementById('papelFormatoAlto').value) > 0)))
return true;
return false;
}
function init_comparador() {
updatePapelesComparador();
const paginasColor = document.getElementById('compCalPaginasColor');

View File

@ -145,11 +145,14 @@
document.getElementById("papelFormatoAncho").style.display = "block";
document.getElementById("papelFormatoAlto").style.display = "block";
$('#papelFormatoId').next(".select2-container").hide();
$('#papelFormatoId').val('').change();
document.getElementById("label_papelFormatoId").innerHTML =
"<?=lang('Presupuestos.papelFormatoId') ?> (" +
"<?=lang('Presupuestos.papelFormatoAncho') ?> x <?=lang('Presupuestos.papelFormatoAncho') ?>)*";
}
else{
document.getElementById("papelFormatoAncho").value= "";
document.getElementById("papelFormatoAlto").value= "";
document.getElementById("papelFormatoAncho").style.display = "none";
document.getElementById("papelFormatoAlto").style.display = "none";
$('#papelFormatoId').next(".select2-container").show();
@ -172,6 +175,29 @@
language: {
url: "//cdn.datatables.net/plug-ins/1.13.4/i18n/<?= config('Basics')->i18n ?>.json"
},
columns: [
{ 'data': 'tipo' },
{ 'data': 'paginas' },
{ 'data': 'papel' },
{ 'data': 'gramaje' },
{ 'data': 'marca' },
{ 'data': 'maquina' },
{ 'data': 'numeroPliegos' },
{ 'data': 'pliegosPedido' },
{ 'data': 'precioPliego' },
{ 'data': 'libro' },
{ 'data': 'totalPapelPedido' },
{ 'data': 'lomo' },
{ 'data': 'peso' },
{ 'data': 'click' },
{ 'data': 'totalClicks' },
{ 'data': 'precioPagNegro' },
{ 'data': 'precioPagColor' },
{ 'data': 'totalTinta' },
{ 'data': 'totalCorte' },
{ 'data': 'total' },
]
});
@ -245,6 +271,53 @@
});
});
$('.comp_negro_items').on('change', function (e) {
checkComparadorNegro();
});
function checkComparadorNegro() {
if (document.getElementById('compPaginasNegro').value &&
$('#compPapelNegro').select2('data').length > 0 &&
$('#compGramajeNegro').select2('data').length > 0) {
if (parseInt(document.getElementById('compPaginasNegro').value) > 0 && checkDatosPedidoForComp()) {
if($('#papelFormatoId').select2('data').length > 0){
ancho = parseFloat($('#papelFormatoId').select2('data')[0].text.trim().split(" x ")[0]);
alto = parseFloat($('#papelFormatoId').select2('data')[0].text.trim().split(" x ")[1]);
}
else{
ancho = parseFloat(document.getElementById('papelFormatoAncho').value);
alto = parseFloat(document.getElementById('papelFormatoAlto').value);
}
let datos = {
table_type: 'comp_int_bn',
paginas: parseInt(document.getElementById('compPaginasNegro').value),
tirada: parseInt(document.getElementById('tirada').value),
merma: parseInt(document.getElementById('merma').value),
ancho: ancho,
alto: alto,
papel_generico_id: $('#compPapelNegro').select2('data')[0].id,
papel_generico: $('#compPapelNegro').select2('data')[0].text.trim(),
gramaje: $('#compGramajeNegro').select2('data')[0].text.trim() ,
<?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v
};
$.ajax({
type: "POST",
url: "/cosidotapablanda/datatable",
data: datos,
success: function (data) {
console.log(data)
yeniden(data.<?= csrf_token() ?>);
},
})
}
}
}
$('#compPapelNegrohq').on('select2:select', function (e){

View File

@ -0,0 +1,17 @@
/*
fetch("/presupuestos/cosidotapablanda/datatable", {
method: 'POST',
body: JSON.stringify(data),
headers: { 'X-Requested-With': 'XMLHttpRequest' },
})
.then(response => console.log(response))
//.then(json => console.log(json))
.catch(err => console.log(err));
*/

View File

@ -0,0 +1,36 @@
<?= $this->extend('themes/backend/vuexy/main/defaultlayout') ?>
<?= $this->section("additionalInlineJs") ?>
console.log("Hola")
let datos = {
table_type: 'comp_int_bn',
paginas: 200,
tirada: 100,
merma: 10,
ancho: 98 ,
alto: 148,
papel_generico_id: 4,
papel_generico: 'AHUESADO OFFSET',
gramaje: 80,
<?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v
}
$.ajax({
type:"POST",
url:"cosidotapablanda/datatable",
data:datos, // data recive un objeto con la informacion que se enviara al servidor
success:function(data){ //success es una funcion que se utiliza si el servidor retorna informacion
console.log(data)
yeniden(data.<?= csrf_token() ?>);
},
//dataType: dataType // El tipo de datos esperados del servidor. Valor predeterminado: Intelligent Guess (xml, json, script, text, html).
})
<?=$this->endSection() ?>