mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
revisando cubierta (solapas)
This commit is contained in:
@ -18,7 +18,7 @@ use App\Models\Presupuestos\PresupuestoManipuladosModel;
|
||||
use App\Models\Presupuestos\PresupuestoPreimpresionesModel;
|
||||
use App\Models\Presupuestos\PresupuestoServiciosExtraModel;
|
||||
|
||||
use App\Services\PresupuestoService;
|
||||
use App\Services\PresupuestoClienteService;
|
||||
use App\Models\Configuracion\PapelGenericoModel;
|
||||
use App\Models\Configuracion\PapelImpresionModel;
|
||||
use App\Models\Configuracion\MaquinaModel;
|
||||
@ -26,7 +26,7 @@ use App\Models\Configuracion\MaquinaModel;
|
||||
use Exception;
|
||||
|
||||
class Presupuestocliente extends \App\Controllers\GoBaseResourceController
|
||||
{
|
||||
{
|
||||
protected $modelName = "PresupuestoModel";
|
||||
protected $format = 'json';
|
||||
|
||||
@ -146,7 +146,7 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
|
||||
|
||||
// Se obtiene el cliente ID a partir del usuario de la sesion
|
||||
$clienteId = 999; // Fijo hasta desarollar clientes usuarios
|
||||
|
||||
|
||||
|
||||
$presupuestoEntity = isset($sanitizedData) ? new PresupuestoEntity($sanitizedData) : new PresupuestoEntity();
|
||||
$presupuestoEntity->clienteId = $clienteId;
|
||||
@ -155,12 +155,12 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
|
||||
$datosPresupuesto->POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
|
||||
$datosPresupuesto->paisList = model('App\Models\Configuracion\PaisModel')->getAllForMenu('id, nombre', 'nombre', true);
|
||||
$datosPresupuesto->papelFormatoList = $this->getPapelFormatoListItems($presupuestoEntity->papel_formato_id ?? null);
|
||||
|
||||
|
||||
$datosPresupuesto->papelInteriorNegro = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('negro', false, false, false, false, true);
|
||||
$datosPresupuesto->papelInteriorNegroHq = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('negrohq', false, false, false, false, true);
|
||||
$datosPresupuesto->papelInteriorColor = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('color', false, false, false, false, true);
|
||||
$datosPresupuesto->papelInteriorColorHq = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', false, false, false, false, true);
|
||||
|
||||
|
||||
$datosPresupuesto->papelCubierta = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', true, false, false, false, true);
|
||||
$datosPresupuesto->papelSobrecubierta = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', false, true, false, false, true);
|
||||
$datosPresupuesto->papelGuardas = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', false, false, false, true, false);
|
||||
@ -169,7 +169,7 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
|
||||
$datosPresupuesto->acabadosSobrecubierta = $this->getAcabadosSobrecubierta();
|
||||
|
||||
$datosPresupuesto->clienteList = $this->getClienteListItems($presupuestoEntity->cliente_id ?? null);
|
||||
|
||||
|
||||
$this->viewData['formAction'] = route_to('crearPresupuestoCliente');
|
||||
|
||||
$this->viewData['presupuestoEntity'] = $presupuestoEntity;
|
||||
@ -425,27 +425,27 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
|
||||
public function delete($id = null)
|
||||
{
|
||||
if (!empty(static::$pluralObjectNameCc) && !empty(static::$singularObjectNameCc)) {
|
||||
$objName = mb_strtolower(lang(ucfirst(static::$pluralObjectNameCc).'.'.static::$singularObjectNameCc));
|
||||
$objName = mb_strtolower(lang(ucfirst(static::$pluralObjectNameCc) . '.' . static::$singularObjectNameCc));
|
||||
} else {
|
||||
$objName = lang('Basic.global.record');
|
||||
}
|
||||
|
||||
if (!$this->soft_delete){
|
||||
|
||||
if (!$this->soft_delete) {
|
||||
|
||||
if (!$this->model->delete($id)) {
|
||||
return $this->failNotFound(lang('Basic.global.deleteError', [$objName]));
|
||||
}
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
$datetime = (new \CodeIgniter\I18n\Time("now"));
|
||||
$rawResult = $this->model->where('id',$id)
|
||||
->set(['deleted_at' => $datetime->format('Y-m-d H:i:s'),
|
||||
'is_deleted' => $this->delete_flag])
|
||||
$rawResult = $this->model->where('id', $id)
|
||||
->set([
|
||||
'deleted_at' => $datetime->format('Y-m-d H:i:s'),
|
||||
'is_deleted' => $this->delete_flag
|
||||
])
|
||||
->update();
|
||||
if (!$rawResult) {
|
||||
return $this->failNotFound(lang('Basic.global.deleteError', [$objName]));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Se borran las lineas de presupuesto
|
||||
@ -482,9 +482,10 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
|
||||
return $response;
|
||||
}
|
||||
|
||||
public function getGramaje(){
|
||||
public function getGramaje()
|
||||
{
|
||||
if ($this->request->isAJAX()) {
|
||||
|
||||
|
||||
$reqData = $this->request->getPost();
|
||||
|
||||
try {
|
||||
@ -547,52 +548,52 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
|
||||
// por defecto, se deja cosido tapa blanda por ahora JJO
|
||||
$tipo_impresion_id = $reqData['tipo_impresion_id'] ?? 4;
|
||||
|
||||
|
||||
|
||||
$searchValues = get_filter_datatables_columns($reqData);
|
||||
|
||||
$resourceData = $this->model->getResource($searchValues, $tipo_impresion_id)->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);
|
||||
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_cliente) && strlen($item->comentarios_cliente) > 100) :
|
||||
$item->comentarios_cliente = character_limiter($item->comentarios_cliente, 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->comentarios_produccion) && strlen($item->comentarios_produccion) > 100) :
|
||||
$item->comentarios_produccion = character_limiter($item->comentarios_produccion, 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;
|
||||
$searchValues = get_filter_datatables_columns($reqData);
|
||||
|
||||
$resourceData = $this->model->getResource($searchValues, $tipo_impresion_id)->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);
|
||||
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_cliente) && strlen($item->comentarios_cliente) > 100) :
|
||||
$item->comentarios_cliente = character_limiter($item->comentarios_cliente, 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->comentarios_produccion) && strlen($item->comentarios_produccion) > 100) :
|
||||
$item->comentarios_produccion = character_limiter($item->comentarios_produccion, 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;
|
||||
|
||||
|
||||
|
||||
|
||||
return $this->respond(Collection::datatable(
|
||||
$resourceData,
|
||||
@ -607,52 +608,18 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
|
||||
|
||||
public function presupuesto()
|
||||
{
|
||||
$POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
|
||||
|
||||
|
||||
if ($this->request->isAJAX()) {
|
||||
$reqData = $this->request->getPost();
|
||||
|
||||
$tirada = $reqData['tirada'] ?? 0;
|
||||
$tamanio = $reqData['tamanio'];
|
||||
$tipo_impresion_id = $this->getTipoImpresion($reqData['tipo'], $reqData['tapa']);
|
||||
$paginas_color= intval($reqData['paginasColor']) ?? 0;
|
||||
$resultado_lineas = $this->getLineasPresupuesto($reqData);
|
||||
|
||||
$datosPedido = (object)array(
|
||||
'paginas' => intval($reqData['paginas']) ?? 0,
|
||||
'tirada' => $tirada[0],
|
||||
'merma' => $tirada[0]>$POD ? $this->calcular_merma($tirada[0], $POD) : 0,
|
||||
'ancho' => intval($tamanio['ancho']) ?? 100000,
|
||||
'alto' => intval($tamanio['alto']) ?? 100000,
|
||||
#'a_favor_fibra' => $reqData['a_favor_fibra'] ?? 1,
|
||||
'isCosido' => (new TipoPresupuestoModel())->get_isCosido($tipo_impresion_id), // JJO esto es custom por cada tipo de presupuesto
|
||||
);
|
||||
|
||||
$papel_generico = [
|
||||
'id' => $reqData['papelInterior'] ?? 0,
|
||||
'nombre' => $reqData['papelInteriorNombre'] ?? "",
|
||||
];
|
||||
$gramaje = $reqData['gramajeInterior'] ?? 0;
|
||||
$cliente_id = $reqData['clienteId'] ?? -1;
|
||||
|
||||
$input_data = array(
|
||||
'uso' => 'interior',
|
||||
'tipo_impresion_id' => $tipo_impresion_id,
|
||||
'datosPedido' => $datosPedido,
|
||||
'papel_generico' => $papel_generico,
|
||||
'gramaje' => $gramaje,
|
||||
'isColor' => intval($reqData['isColor']) ?? 0,
|
||||
'isHq' => intval($reqData['isHq']) ?? 0,
|
||||
'cliente_id' => $cliente_id,
|
||||
'paginas_color' => $paginas_color,
|
||||
);
|
||||
|
||||
$interiorPlana = PresupuestoService::obtenerPresupuestoClienteInterior($input_data);
|
||||
return $this->respond($interiorPlana);
|
||||
}
|
||||
else{
|
||||
return $this->respond($resultado_lineas);
|
||||
} else {
|
||||
return $this->failUnauthorized('Invalid request', 403);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -661,62 +628,178 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
|
||||
* Funciones auxiliares
|
||||
*
|
||||
**********************/
|
||||
protected function getTipoImpresion($tipo, $tapa){
|
||||
|
||||
protected function getLineasPresupuesto($reqData)
|
||||
{
|
||||
$POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
|
||||
|
||||
$tirada = $reqData['tirada'] ?? 0;
|
||||
$tamanio = $reqData['tamanio'];
|
||||
$tipo_impresion_id = $this->getTipoImpresion($reqData['tipo'], $reqData['tapa']);
|
||||
$paginas_color = intval($reqData['paginasColor']) ?? 0;
|
||||
$is_cosido = (new TipoPresupuestoModel())->get_isCosido($tipo_impresion_id);
|
||||
|
||||
$datosPedido = (object)array(
|
||||
'paginas' => intval($reqData['paginas']) ?? 0,
|
||||
'tirada' => $tirada[0],
|
||||
'merma' => $tirada[0] > $POD ? $this->calcular_merma($tirada[0], $POD) : 0,
|
||||
'ancho' => intval($tamanio['ancho']) ?? 100000,
|
||||
'alto' => intval($tamanio['alto']) ?? 100000,
|
||||
'isCosido' => $is_cosido,
|
||||
);
|
||||
|
||||
$papel_generico = [
|
||||
'id' => $reqData['papelInterior'] ?? 0,
|
||||
'nombre' => $reqData['papelInteriorNombre'] ?? "",
|
||||
];
|
||||
$gramaje = $reqData['gramajeInterior'] ?? 0;
|
||||
$cliente_id = $reqData['clienteId'] ?? -1;
|
||||
$excluirRotativa = $reqData['excluirRotativa'] ?? 0;
|
||||
|
||||
$input_data = array(
|
||||
'uso' => 'interior',
|
||||
'tipo_impresion_id' => $tipo_impresion_id,
|
||||
'datosPedido' => $datosPedido,
|
||||
'papel_generico' => $papel_generico,
|
||||
'gramaje' => $gramaje,
|
||||
'isColor' => intval($reqData['isColor']) ?? 0,
|
||||
'isHq' => intval($reqData['isHq']) ?? 0,
|
||||
'cliente_id' => $cliente_id,
|
||||
'paginas_color' => $paginas_color,
|
||||
'excluirRotativa' => $excluirRotativa,
|
||||
);
|
||||
|
||||
$interior = PresupuestoClienteService::obtenerInterior($input_data);
|
||||
|
||||
$costeInterior = 0.0;
|
||||
foreach ($interior as $linea) {
|
||||
if (count($linea) > 0) {
|
||||
$costeInterior += floatval($linea['total_impresion']);
|
||||
}
|
||||
}
|
||||
|
||||
if ($costeInterior <= 0) {
|
||||
return [
|
||||
'error' => lang('Presupuestos.errores.noInterior'),
|
||||
'precio_u' => 0,
|
||||
];
|
||||
}
|
||||
|
||||
// Si es POD hay que volver a calcular para incluir la merma correcta
|
||||
if ($tirada[0] <= $POD) {
|
||||
$num_formas = [];
|
||||
foreach ($interior as $linea) {
|
||||
if (count($linea) > 0) {
|
||||
$formas_linea = $is_cosido ? intval($linea['num_formas']['value']) / 2 : intval($linea['num_formas']['value']);
|
||||
array_push($num_formas, $formas_linea);
|
||||
}
|
||||
}
|
||||
$input_data['datosPedido']['merma'] = $this->calcular_merma($tirada[0], $POD, $num_formas);
|
||||
|
||||
$interior = PresupuestoClienteService::obtenerInterior($input_data);
|
||||
}
|
||||
|
||||
$costeInterior = 0.0;
|
||||
foreach ($interior as $linea) {
|
||||
if (count($linea) > 0) {
|
||||
$costeInterior += floatval($linea['total_impresion']);
|
||||
}
|
||||
}
|
||||
|
||||
if ($costeInterior <= 0) {
|
||||
return [
|
||||
'error' => lang('Presupuestos.errores.noInterior'),
|
||||
'precio_u' => 0,
|
||||
];
|
||||
}
|
||||
|
||||
// Cubierta
|
||||
$papel_generico = [
|
||||
'id' => $reqData['papelCubierta'] ?? 0,
|
||||
'nombre' => $reqData['papelCubiertaNombre'] ?? "",
|
||||
];
|
||||
$input_data['papel_generico'] = $papel_generico;
|
||||
$input_data['gramaje'] = $reqData['gramajeCubierta'] ?? 0;
|
||||
$input_data['datosPedido']->paginas = intval($reqData['carasCubierta'] ?? 0);
|
||||
$input_data['paginas_color'] = intval($reqData['carasCubierta'] ?? 0);
|
||||
$input_data['datosPedido']->solapas_ancho = intval($reqData['solapasCubierta'] ?? 0);
|
||||
$input_data['datosPedido']->solapas = $input_data['datosPedido']->solapas_ancho>0 ? 1 : 0;
|
||||
$input_data['datosPedido']->lomo = $this->calcular_lomo($interior, 0);
|
||||
$input_data['isColor'] = 1;
|
||||
$input_data['isHq'] = 1;
|
||||
$input_data['uso'] = 'cubierta';
|
||||
|
||||
$cubierta = PresupuestoClienteService::obtenerCubierta($input_data);
|
||||
|
||||
return [
|
||||
'interior' => $interior,
|
||||
'cubierta' => $cubierta,
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
protected function calcular_lomo($lineas, $lomo_inicial){
|
||||
$lomo = $lomo_inicial;
|
||||
foreach ($lineas as $linea) {
|
||||
if (count($linea) > 0) {
|
||||
$lomo += floatval($linea['mano']);
|
||||
}
|
||||
}
|
||||
return floatval($lomo);
|
||||
}
|
||||
|
||||
protected function getTipoImpresion($tipo, $tapa)
|
||||
{
|
||||
|
||||
$tipo_impresion_id = 0;
|
||||
|
||||
if($tipo == 'fresado'){
|
||||
|
||||
if($tapa == 'blanda')
|
||||
$tipo_impresion_id = 2;
|
||||
if ($tipo == 'fresado') {
|
||||
|
||||
if ($tapa == 'blanda')
|
||||
$tipo_impresion_id = 2;
|
||||
else
|
||||
$tipo_impresion_id = 1;
|
||||
}
|
||||
else if($tipo == 'cosido'){
|
||||
} else if ($tipo == 'cosido') {
|
||||
|
||||
if($tapa == 'blanda')
|
||||
$tipo_impresion_id = 4;
|
||||
if ($tapa == 'blanda')
|
||||
$tipo_impresion_id = 4;
|
||||
else
|
||||
$tipo_impresion_id = 3;
|
||||
}
|
||||
else if($tipo == 'espiral'){
|
||||
$tipo_impresion_id = 3;
|
||||
} else if ($tipo == 'espiral') {
|
||||
|
||||
if($tapa == 'blanda')
|
||||
$tipo_impresion_id = 6;
|
||||
if ($tapa == 'blanda')
|
||||
$tipo_impresion_id = 6;
|
||||
else
|
||||
$tipo_impresion_id = 5;
|
||||
}
|
||||
else if($tipo == 'wireo'){
|
||||
$tipo_impresion_id = 5;
|
||||
} else if ($tipo == 'wireo') {
|
||||
|
||||
if($tapa == 'blanda')
|
||||
$tipo_impresion_id = 8;
|
||||
if ($tapa == 'blanda')
|
||||
$tipo_impresion_id = 8;
|
||||
else
|
||||
$tipo_impresion_id = 7;
|
||||
}
|
||||
else if($tipo == 'grapado'){
|
||||
$tipo_impresion_id = 7;
|
||||
} else if ($tipo == 'grapado') {
|
||||
$tipo_impresion_id = 21;
|
||||
}
|
||||
|
||||
|
||||
return $tipo_impresion_id;
|
||||
}
|
||||
|
||||
|
||||
protected function calcular_merma($tirada, $POD, $formas_lineas_interior = []){
|
||||
|
||||
protected function calcular_merma($tirada, $POD, $formas_lineas_interior = [])
|
||||
{
|
||||
|
||||
$merma = 0;
|
||||
|
||||
if($tirada>$POD){
|
||||
$merma = $tirada*0.1<=30 ? $tirada*0.1 : 30;
|
||||
}
|
||||
else{
|
||||
if ($tirada > $POD) {
|
||||
$merma = $tirada * 0.1 <= 30 ? $tirada * 0.1 : 30;
|
||||
} else {
|
||||
$merma_lineas = [];
|
||||
foreach($formas_lineas_interior as $formas_linea){
|
||||
if($formas_linea > $tirada)
|
||||
array_push($merma_lineas, $formas_linea-$tirada);
|
||||
foreach ($formas_lineas_interior as $formas_linea) {
|
||||
if ($formas_linea > $tirada)
|
||||
array_push($merma_lineas, $formas_linea - $tirada);
|
||||
else
|
||||
array_push($merma_lineas, $tirada%$formas_linea);
|
||||
array_push($merma_lineas, $tirada % $formas_linea);
|
||||
}
|
||||
if(count($merma_lineas)>0)
|
||||
if (count($merma_lineas) > 0)
|
||||
$merma = max($merma_lineas);
|
||||
}
|
||||
|
||||
@ -763,4 +846,3 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
@ -298,6 +298,7 @@ return [
|
||||
'formato_papel' => 'Debe seleccionar un formato de papel',
|
||||
'tirada_alt_duplicada' => 'Ya existe una tirada alternativa para ese valor',
|
||||
'tirada_alt_tipo' => 'No se puede calcular una tirada alternativa POD para una presupuesto no POD o viceversa',
|
||||
'noInterior' => 'No se hay resultados para el interior',
|
||||
],
|
||||
];
|
||||
|
||||
|
||||
287
ci4/app/Services/PresupuestoClienteService.php
Normal file
287
ci4/app/Services/PresupuestoClienteService.php
Normal file
@ -0,0 +1,287 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
|
||||
use CodeIgniter\Config\BaseService;
|
||||
|
||||
use App\Services\PresupuestoService;
|
||||
|
||||
class PresupuestoClienteService extends BaseService
|
||||
{
|
||||
public static function obtenerInterior($data)
|
||||
{
|
||||
|
||||
$rotativa = [];
|
||||
$plana = PresupuestoClienteService::obtenerPresupuestoClienteInterior($data);
|
||||
if (!$data['excluirRotativa'] && !$data['isHq'])
|
||||
$rotativa = PresupuestoClienteService::obtenerPresupuestoClienteInteriorRotativa($data);
|
||||
|
||||
$total_plana = -1;
|
||||
if (count($plana[0]) > 0 || count($plana[1]) > 0) {
|
||||
$total_plana = 0.0;
|
||||
foreach ($plana as $linea) {
|
||||
if (count($linea) > 0)
|
||||
$total_plana += floatval($linea['total_impresion']);
|
||||
}
|
||||
}
|
||||
|
||||
$total_rotativa = -1;
|
||||
if (!$data['excluirRotativa'] && count($rotativa) > 0) {
|
||||
$total_rotativa = floatval($rotativa['total_impresion']);
|
||||
}
|
||||
if ($total_plana < 0 && $total_rotativa < 0)
|
||||
return [];
|
||||
else {
|
||||
if ($total_plana > $total_rotativa)
|
||||
return $plana;
|
||||
else
|
||||
return [$rotativa];
|
||||
}
|
||||
}
|
||||
|
||||
public static function obtenerCubierta($data)
|
||||
{
|
||||
|
||||
$uso = $data['uso'];
|
||||
$tipo_impresion_id = $data['tipo_impresion_id'];
|
||||
$datosPedido = $data['datosPedido'];
|
||||
$papel_generico = $data['papel_generico'];
|
||||
$gramaje = $data['gramaje'];
|
||||
$isColor = $data['isColor'];
|
||||
$isHq = $data['isHq'];
|
||||
$cliente_id = $data['cliente_id'];
|
||||
$paginas_color = $data['paginas_color'];
|
||||
|
||||
$lineas_cubierta = [];
|
||||
|
||||
for ($i = 0; $i < 2; $i++) {
|
||||
|
||||
$lineas = PresupuestoService::obtenerComparadorPlana([
|
||||
'uso' => $uso,
|
||||
'tipo_impresion_id' => $tipo_impresion_id,
|
||||
'datosPedido' => $datosPedido,
|
||||
'papel_generico' => $papel_generico,
|
||||
'gramaje' => $gramaje,
|
||||
'isColor' => $isColor,
|
||||
'isHq' => $isHq,
|
||||
'cliente_id' => $cliente_id,
|
||||
'a_favor_fibra' => $i
|
||||
]);
|
||||
|
||||
if (count($lineas) > 0) {
|
||||
$lineas_cubierta = array_merge($lineas_cubierta, $lineas);
|
||||
}
|
||||
}
|
||||
if (count($lineas_cubierta) > 0) {
|
||||
|
||||
usort(
|
||||
$lineas_cubierta,
|
||||
function ($a, $b) {
|
||||
$result = 0;
|
||||
if (floatval($a['fields']['total_impresion']) > floatval($b['fields']['total_impresion']))
|
||||
$result = 1;
|
||||
else if (floatval($a['fields']['total_impresion']) < floatval($b['fields']['total_impresion']))
|
||||
$result = -1;
|
||||
return $result;
|
||||
}
|
||||
);
|
||||
$lineas_cubierta = $lineas_cubierta[0]['fields'];
|
||||
$lineas_cubierta['tipo_linea'] = 'lp_cubierta';
|
||||
}
|
||||
return $lineas_cubierta;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Obtiene las lineas de plana en el presupuesto de cliente
|
||||
* Selecciona entre las más económicas
|
||||
* Parámetros:
|
||||
* - uso: en este caso esta variable está fija a 'interior'
|
||||
* - tipo: tipo de impresión
|
||||
* - datosPedido: datos del pedido
|
||||
* * paginas: número de páginas
|
||||
* * tirada: número de ejemplares
|
||||
* * merma: merma
|
||||
* * ancho: ancho del libro
|
||||
* * alto: alto del libro
|
||||
* * isCosido: si está cosido
|
||||
* - cliente_id: id del cliente
|
||||
* - papel_generico: papel genérico (array con id y nombre)
|
||||
* - isColor: si es a color
|
||||
* - isHq: si es alta calidad
|
||||
* - paginas_color: número de páginas a color
|
||||
*/
|
||||
private static function obtenerPresupuestoClienteInterior($data)
|
||||
{
|
||||
|
||||
$uso = $data['uso'];
|
||||
$tipo_impresion_id = $data['tipo_impresion_id'];
|
||||
$datosPedido = $data['datosPedido'];
|
||||
$papel_generico = $data['papel_generico'];
|
||||
$gramaje = $data['gramaje'];
|
||||
$isColor = $data['isColor'];
|
||||
$isHq = $data['isHq'];
|
||||
$cliente_id = $data['cliente_id'];
|
||||
$paginas_color = $data['paginas_color'];
|
||||
|
||||
$paginas_negro = $datosPedido->paginas - $paginas_color;
|
||||
|
||||
|
||||
$linea_negro_plana = [];
|
||||
$linea_color_plana = [];
|
||||
|
||||
// Negro
|
||||
if ($datosPedido->paginas > $paginas_color) {
|
||||
|
||||
$datosPedido->paginas = $paginas_negro;
|
||||
for ($i = 0; $i < 2; $i++) {
|
||||
|
||||
$lineas = PresupuestoService::obtenerComparadorPlana([
|
||||
'uso' => $uso,
|
||||
'tipo_impresion_id' => $tipo_impresion_id,
|
||||
'datosPedido' => $datosPedido,
|
||||
'papel_generico' => $papel_generico,
|
||||
'gramaje' => $gramaje,
|
||||
'isColor' => false,
|
||||
'isHq' => $isHq,
|
||||
'cliente_id' => $cliente_id,
|
||||
'a_favor_fibra' => $i
|
||||
]);
|
||||
|
||||
if (count($lineas) > 0) {
|
||||
$linea_negro_plana = array_merge($linea_color_plana, $lineas);
|
||||
}
|
||||
}
|
||||
if (count($linea_negro_plana) > 0) {
|
||||
|
||||
usort(
|
||||
$linea_negro_plana,
|
||||
function ($a, $b) {
|
||||
$result = 0;
|
||||
if (floatval($a['fields']['total_impresion']) > floatval($b['fields']['total_impresion']))
|
||||
$result = 1;
|
||||
else if (floatval($a['fields']['total_impresion']) < floatval($b['fields']['total_impresion']))
|
||||
$result = -1;
|
||||
return $result;
|
||||
}
|
||||
);
|
||||
$linea_negro_plana = $linea_negro_plana[0]['fields'];
|
||||
$linea_negro_plana['tipo_linea'] = $isHq ? 'lp_bnhq' : 'lp_bn';
|
||||
}
|
||||
}
|
||||
|
||||
// Color
|
||||
if ($paginas_color > 0) {
|
||||
|
||||
for ($i = 0; $i < 2; $i++) {
|
||||
|
||||
$lineas = PresupuestoService::obtenerComparadorPlana([
|
||||
'uso' => $uso,
|
||||
'tipo_impresion_id' => $tipo_impresion_id,
|
||||
'datosPedido' => $datosPedido,
|
||||
'papel_generico' => $papel_generico,
|
||||
'gramaje' => $gramaje,
|
||||
'isColor' => true,
|
||||
'isHq' => $isHq,
|
||||
'cliente_id' => $cliente_id,
|
||||
'a_favor_fibra' => $i
|
||||
]);
|
||||
|
||||
if (count($lineas) > 0) {
|
||||
$linea_color_plana = array_merge($linea_color_plana, $lineas);
|
||||
}
|
||||
}
|
||||
if (count($linea_color_plana) > 0) {
|
||||
|
||||
usort(
|
||||
$linea_color_plana,
|
||||
function ($a, $b) {
|
||||
$result = 0;
|
||||
if (floatval($a['fields']['total_impresion']) > floatval($b['fields']['total_impresion']))
|
||||
$result = 1;
|
||||
else if (floatval($a['fields']['total_impresion']) < floatval($b['fields']['total_impresion']))
|
||||
$result = -1;
|
||||
return $result;
|
||||
}
|
||||
);
|
||||
$linea_color_plana = $linea_color_plana[0]['fields'];
|
||||
$linea_negro_plana['tipo_linea'] = $isHq ? 'lp_colorhq' : 'lp_color';
|
||||
}
|
||||
}
|
||||
return [$linea_negro_plana, $linea_color_plana];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Obtiene las lineas de rotativa en el presupuesto de cliente
|
||||
* Selecciona entre las más económicas
|
||||
* Parámetros:
|
||||
* - uso: en este caso esta variable está fija a 'interior'
|
||||
* - tipo: tipo de impresión
|
||||
* - datosPedido: datos del pedido
|
||||
* * paginas: número de páginas
|
||||
* * tirada: número de ejemplares
|
||||
* * merma: merma
|
||||
* * ancho: ancho del libro
|
||||
* * alto: alto del libro
|
||||
* * isCosido: si está cosido
|
||||
* - cliente_id: id del cliente
|
||||
* - papel_generico: papel genérico (array con id y nombre)
|
||||
* - isColor: si es a color
|
||||
* - isHq: si es alta calidad
|
||||
* - paginas_color: número de páginas a color
|
||||
*/
|
||||
private static function obtenerPresupuestoClienteInteriorRotativa($data)
|
||||
{
|
||||
$datosPedido = $data['datosPedido'];
|
||||
$papel_generico = $data['papel_generico'];
|
||||
$gramaje = $data['gramaje'];
|
||||
$cliente_id = $data['cliente_id'];
|
||||
$paginas_color = $data['paginas_color'];
|
||||
|
||||
$paginas = (object) array(
|
||||
'negro' => $datosPedido->paginas - $paginas_color,
|
||||
'color' => $paginas_color
|
||||
);
|
||||
|
||||
$linea_rotativa = [];
|
||||
|
||||
for ($i = 0; $i < 2; $i++) {
|
||||
|
||||
$datosPedido->a_favor_fibra = $i;
|
||||
|
||||
$lineas = PresupuestoService::obtenerComparadorRotativa([
|
||||
'paginas' => $paginas,
|
||||
'datosPedido' => $datosPedido,
|
||||
'papel_generico' => $papel_generico,
|
||||
'gramaje' => $gramaje,
|
||||
'cliente_id' => $cliente_id,
|
||||
'datosTipolog' => null
|
||||
]);
|
||||
|
||||
if (count($lineas) > 0) {
|
||||
$linea_rotativa = array_merge($linea_rotativa, $lineas);
|
||||
}
|
||||
}
|
||||
if (count($linea_rotativa) > 0) {
|
||||
|
||||
usort(
|
||||
$linea_rotativa,
|
||||
function ($a, $b) {
|
||||
$result = 0;
|
||||
if (floatval($a['fields']['total_impresion']) > floatval($b['fields']['total_impresion']))
|
||||
$result = 1;
|
||||
else if (floatval($a['fields']['total_impresion']) < floatval($b['fields']['total_impresion']))
|
||||
$result = -1;
|
||||
return $result;
|
||||
}
|
||||
);
|
||||
$linea_rotativa = $linea_rotativa[0]['fields'];
|
||||
$linea_rotativa['tipo_linea'] = $paginas_color > 0 ? 'lp_rot_color' : 'lp_rot_bn';
|
||||
}
|
||||
|
||||
return $linea_rotativa;
|
||||
}
|
||||
}
|
||||
@ -33,116 +33,7 @@ class PresupuestoService extends BaseService
|
||||
const SANGRE_FORMAS = 5.0;
|
||||
const SANGRE_FORMAS_CUBIERTA = 20.0;
|
||||
|
||||
public static function obtenerPresupuestoClienteInterior($data){
|
||||
|
||||
$uso = $data['uso'];
|
||||
$tipo_impresion_id = $data['tipo_impresion_id'];
|
||||
$datosPedido = $data['datosPedido'];
|
||||
$papel_generico = $data['papel_generico'];
|
||||
$gramaje = $data['gramaje'];
|
||||
$isColor = $data['isColor'];
|
||||
$isHq = $data['isHq'];
|
||||
$cliente_id = $data['cliente_id'];
|
||||
$paginas_color = $data['paginas_color'];
|
||||
|
||||
$paginas_negro = $datosPedido->paginas-$paginas_color;
|
||||
|
||||
|
||||
$linea_negro_plana = [];
|
||||
$linea_color_plana = [];
|
||||
|
||||
// Negro
|
||||
if($datosPedido->paginas > $paginas_color){
|
||||
|
||||
$datosPedido->paginas = $paginas_negro;
|
||||
for ($i=0; $i<2; $i++){
|
||||
|
||||
$lineas = PresupuestoService::obtenerComparadorPlana([
|
||||
'uso' => $uso,
|
||||
'tipo_impresion_id' => $tipo_impresion_id,
|
||||
'datosPedido' => $datosPedido,
|
||||
'papel_generico' => $papel_generico,
|
||||
'gramaje' => $gramaje,
|
||||
'isColor' => false,
|
||||
'isHq' => $isHq,
|
||||
'cliente_id' => $cliente_id,
|
||||
'a_favor_fibra' => $i
|
||||
]);
|
||||
|
||||
if (count($lineas) > 0) {
|
||||
usort($lineas,
|
||||
function($a, $b)
|
||||
{
|
||||
$result = 0;
|
||||
if(floatval($a['fields']['total_impresion']) > floatval($b['fields']['total_impresion']))
|
||||
$result = 1;
|
||||
else if(floatval($a['fields']['total_impresion']) < floatval($b['fields']['total_impresion']))
|
||||
$result = -1;
|
||||
return $result;
|
||||
}
|
||||
);
|
||||
$linea_negro_plana = $lineas[0]['fields'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Color
|
||||
if($isColor){
|
||||
|
||||
$datosPedido->paginas = $paginas_color;
|
||||
for ($i=0; $i<2; $i++){
|
||||
|
||||
$lineas = PresupuestoService::obtenerComparadorPlana([
|
||||
'uso' => $uso,
|
||||
'tipo_impresion_id' => $tipo_impresion_id,
|
||||
'datosPedido' => $datosPedido,
|
||||
'papel_generico' => $papel_generico,
|
||||
'gramaje' => $gramaje,
|
||||
'isColor' => true,
|
||||
'isHq' => $isHq,
|
||||
'cliente_id' => $cliente_id,
|
||||
'a_favor_fibra' => $i
|
||||
]);
|
||||
|
||||
if (count($lineas) > 0) {
|
||||
usort($lineas,
|
||||
function($a, $b)
|
||||
{
|
||||
$result = 0;
|
||||
if(floatval($a['fields']['total_impresion']) > floatval($b['fields']['total_impresion']))
|
||||
$result = 1;
|
||||
else if(floatval($a['fields']['total_impresion']) < floatval($b['fields']['total_impresion']))
|
||||
$result = -1;
|
||||
return $result;
|
||||
}
|
||||
);
|
||||
$linea_color_plana = $lineas[0]['fields'];
|
||||
}
|
||||
}
|
||||
for ($i=0; $i<2; $i++){
|
||||
|
||||
$lineas = PresupuestoService::obtenerComparadorPlana([
|
||||
'uso' => $uso,
|
||||
'tipo_impresion_id' => $tipo_impresion_id,
|
||||
'datosPedido' => $datosPedido,
|
||||
'papel_generico' => $papel_generico,
|
||||
'gramaje' => $gramaje,
|
||||
'isColor' => true,
|
||||
'isHq' => $isHq,
|
||||
'cliente_id' => $cliente_id,
|
||||
'a_favor_fibra' => $i
|
||||
]);
|
||||
|
||||
if (count($lineas) > 0) {
|
||||
$linea_negro_plana = array_merge($linea_negro_plana, $lineas);
|
||||
}
|
||||
}
|
||||
}
|
||||
return [$linea_negro_plana, $linea_color_plana];
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static function getLineaPresupuestoPlana($data)
|
||||
{
|
||||
|
||||
|
||||
@ -252,6 +252,8 @@ $('#papelInterior').on('change', function () {
|
||||
|
||||
if (valInterior != undefined)
|
||||
$('#gramajeInterior option[value=' + valInterior + ']').prop('selected', true).trigger('change');
|
||||
else
|
||||
$('#gramajeInterior').val('').trigger('change');
|
||||
|
||||
}
|
||||
});
|
||||
@ -289,6 +291,8 @@ $('#papelCubierta').on('change', function () {
|
||||
|
||||
if (valCubierta != undefined)
|
||||
$('#gramajeCubierta option[value=' + valCubierta + ']').prop('selected', true).trigger('change');
|
||||
else
|
||||
$('#gramajeCubierta').val('').trigger('change');
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -325,6 +329,8 @@ $('#papelSobrecubierta').on('change', function () {
|
||||
|
||||
if (valSobrecubierta != undefined)
|
||||
$('#gramajeSobrecubierta option[value=' + valCubierta + ']').prop('selected', true).trigger('change');
|
||||
else
|
||||
$('#gramajeSobrecubierta').val('').trigger('change');
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -359,7 +365,11 @@ function checkValues() {
|
||||
const gramajeCubierta = $('#gramajeCubierta option:selected').text();
|
||||
const papelFormatoAlto = $('#altoLibro').val();
|
||||
const papelFormatoAncho = $('#anchoLibro').val();
|
||||
const clienteId = $('#clienteId').val();
|
||||
|
||||
if(clienteId == '' || isNaN(clienteId) || parseInt(clienteId) <= 0){
|
||||
return false;
|
||||
}
|
||||
|
||||
if (tirada == '' || isNaN(tirada) || parseInt(tirada) <= 0) {
|
||||
return false;
|
||||
@ -576,7 +586,7 @@ async function calcularPresupuesto() {
|
||||
papelInterior: $('#papelInterior option:selected').val(),
|
||||
papelInteriorNombre: $('#papelInterior option:selected').text(),
|
||||
gramajeInterior: $('#gramajeInterior option:selected').text(),
|
||||
excluirRotativa: $('#excluirRotativa').is(':checked'),
|
||||
excluirRotativa: $('#excluirRotativa').is(':checked')? 1 : 0,
|
||||
papelCubierta: $('#papelCubierta option:selected').val(),
|
||||
papelCubiertaNombre: $('#papelCubierta option:selected').text(),
|
||||
gramajeCubierta: $('#gramajeCubierta option:selected').text(),
|
||||
@ -611,12 +621,19 @@ async function calcularPresupuesto() {
|
||||
|
||||
datos = Object.assign(datos, window.token_ajax)
|
||||
|
||||
|
||||
$('#loader').show();
|
||||
|
||||
$.ajax({
|
||||
url: window.routes_disenio_libro.presupuestoCliente,
|
||||
type: 'POST',
|
||||
data: datos,
|
||||
success: function (response) {
|
||||
console.log(response);
|
||||
$('#loader').hide();
|
||||
},
|
||||
error: function (error) {
|
||||
$('#loader').hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -0,0 +1,5 @@
|
||||
<div id="loader" style="display: none; position: fixed; left: 0; top: 0; width: 100%; height: 100%; z-index: 9999;">
|
||||
<div style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);">
|
||||
<img src="<?= site_url("assets/img/loader.gif") ?>" alt="Loading..."/>
|
||||
</div>
|
||||
</div>
|
||||
@ -11,8 +11,10 @@
|
||||
<h3 class="card-title"><?= $boxTitle ?? $pageTitle ?></h3>
|
||||
<?= csrf_field() ?>
|
||||
<?= view("themes/_commonPartialsBs/_alertBoxes") ?>
|
||||
<?= view("themes/backend/vuexy/form/presupuestos/cliente/loader") ?>
|
||||
<?= !empty($validation->getErrors()) ? $validation->listErrors("bootstrap_style") : "" ?>
|
||||
|
||||
|
||||
<!-- Create Deal Wizard -->
|
||||
<div id="wizard-presupuesto-cliente" class="bs-stepper vertical mt-2 linear">
|
||||
<div class="bs-stepper-header">
|
||||
|
||||
BIN
httpdocs/assets/img/loader.gif
Normal file
BIN
httpdocs/assets/img/loader.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
18693
xdebug.log
18693
xdebug.log
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user