diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index d7a8d790..4015ad4c 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -577,7 +577,7 @@ $routes->group('presupuestocliente', ['namespace' => 'App\Controllers\Presupuest $routes->post('presupuesto', 'Presupuestocliente::presupuesto', ['as' => 'presupuestoCliente']); $routes->post('getDireccionesCliente', 'Presupuestocliente::getDireccionesCliente', ['as' => 'getDirecciones']); $routes->post('getNuevaDireccion', 'Presupuestocliente::getNuevaDireccion', ['as' => 'nuevaDireccion']); - $routes->post('guardarPresupuesto', 'Presupuestocliente::guardarPresupuesto', ['as' => 'guardarPresupuesto']); + $routes->post('guardar', 'Presupuestocliente::guardar', ['as' => 'guardar']); $routes->post('duplicarPresupuesto', 'Presupuestocliente::duplicarPresupuesto', ['as' => 'duplicarPresupuesto']); $routes->post('calcular', 'Presupuestocliente::calcular', ['as' => 'calcularPresupuesto']); }); diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php index 66a4c512..4d537282 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php @@ -89,47 +89,27 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController public function add() { + $this->viewData['breadcrumb'] = [ + ['title' => lang("App.menu_presupuestos"), 'route' => "javascript:void(0);", 'active' => false], + ['title' => "Listado", 'route' => site_url('presupuestocliente/list'), 'active' => true] + ]; + // Se obtiene el cliente ID a partir del usuario de la sesion $model_user = model('App\Models\Usuarios\UserModel'); $user = $model_user->find(auth()->user()->id); $clienteId = $user->cliente_id; - - $presupuestoEntity = isset($sanitizedData) ? new PresupuestoEntity($sanitizedData) : new PresupuestoEntity(); - $presupuestoEntity->clienteId = $clienteId; - - $datosPresupuesto = (object)array(); - $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); - - $datosPresupuesto->acabadosCubierta = $this->getAcabadosCubierta(); - $datosPresupuesto->acabadosSobrecubierta = $this->getAcabadosSobrecubierta(); - - $datosPresupuesto->tipo_libro = ""; - $datosPresupuesto->color_impresion = 'negro'; - $datosPresupuesto->tapa = 'blanda'; - - $datosPresupuesto->clienteList = $this->getClienteListItems($clienteId ?? null); - $datosPresupuesto->paginasCuadernillo = [32, 28, 24, 20, 16]; - $presupuestoEntity->estado_id = 1; - $presupuestoEntity->paginas_por_cuadernillo = 32; + $POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD(); + + $this->viewData['breadcrumb'] = [ + ['title' => lang("App.menu_presupuestos"), 'route' => site_url('presupuestocliente/list'), 'active' => false], + ['title' => "Añadir Presupuesto", 'route' => "javascript:void(0);", 'active' => true] + ]; $this->viewData['formAction'] = 'add'; - $this->viewData['paisList'] = $this->getPaisListItems(); - - $this->viewData['presupuestoEntity'] = $presupuestoEntity; - $this->viewData['datosPresupuesto'] = $datosPresupuesto; + $this->viewData['clienteId'] = $clienteId; + $this->viewData['POD'] = $POD; $this->viewData['boxTitle'] = lang('Basic.global.addNew') . ' ' . $this->viewData['pageTitle'] . ' ' . lang('Basic.global.addNewSuffix'); @@ -139,13 +119,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController public function edit($requestedId = null) { - if ($requestedId == null) : + if ($requestedId == null): return $this->redirect2listView(); endif; $id = filter_var($requestedId, FILTER_SANITIZE_URL); $presupuestoEntity = $this->model->find($id); - if ($presupuestoEntity == false) : + if ($presupuestoEntity == false): $message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Presupuestos.presupuesto')), $id]); return $this->redirect2listView('sweet-error', $message); endif; @@ -155,7 +135,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $user = $model_user->find(auth()->user()->id); $clienteId = $user->cliente_id; - $datosPresupuesto = (object)array(); + $datosPresupuesto = (object) array(); $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); @@ -198,8 +178,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $this->viewData['presupuestoEntity'] = $presupuestoEntity; $this->viewData['datosPresupuesto'] = $datosPresupuesto; - $this->viewData['clienteId'] = $presupuestoEntity->cliente_id; // En el caso del edit, se mantiene el clienteId del presupuesto - + + $this->viewData['clienteId'] = $clienteId; + $this->viewData['POD'] = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD(); // Si se ha llamado a esta funcion porque se ha duplicado el presupuesto // se actualiza la bbdd para que sólo ejecute algunas funciones una vez if ($presupuestoEntity->is_duplicado) { @@ -237,7 +218,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $datetime = (new \CodeIgniter\I18n\Time("now")); $rawResult = $this->model->where('id', $id) ->set([ - 'deleted_at' => $datetime->format('Y-m-d H:i:s'), + 'deleted_at' => $datetime->format('Y-m-d H:i:s'), 'is_deleted' => $this->delete_flag ]) ->update(); @@ -337,13 +318,12 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $tipo_impresion_id = $this->getTipoImpresion($tipo, $cubierta['tipoCubierta']); - if($papelInteriorDiferente){ + if ($papelInteriorDiferente) { $papel['negro'] = $modelPapelGenerico->getIdFromCode($interior['papelInterior']['negro']); $papel['color'] = $modelPapelGenerico->getIdFromCode($interior['papelInterior']['color']); $gramaje['negro'] = intval($interior['gramajeInterior']['negro']); $gramaje['color'] = intval($interior['gramajeInterior']['color']); - } - else{ + } else { $papel = $modelPapelGenerico->getIdFromCode($interior['papelInterior']); $gramaje = intval($interior['gramajeInterior']); } @@ -361,9 +341,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController // Cubierta $cubierta = [ 'papel_generico_cubierta' => $modelPapelGenerico->getIdFromCode($cubierta['papelCubierta']), - 'gramajeCubierta' => intval($cubierta['gramajeCubierta']), - 'carasCubierta' => intval($cubierta['carasImpresion'] ?? 0), - 'solapasCubierta' => intval($cubierta['solapas'] ?? 0), + 'gramajeCubierta' => intval($cubierta['gramajeCubierta']), + 'carasCubierta' => intval($cubierta['carasImpresion'] ?? 0), + 'solapasCubierta' => intval($cubierta['solapas'] ?? 0), 'acabadosCubierta' => $cubierta['acabados'] ?? 0, ]; @@ -371,8 +351,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController if ($sobrecubierta != "false" && $sobrecubierta != null) { $sobrecubierta = [ 'papel' => $modelPapelGenerico->getIdFromCode($sobrecubierta['papel']), - 'gramaje' => intval($sobrecubierta['gramaje']), - 'solapas' => intval($sobrecubierta['solapas'] ?? 0), + 'gramaje' => intval($sobrecubierta['gramaje']), + 'solapas' => intval($sobrecubierta['solapas'] ?? 0), 'acabados' => $sobrecubierta['plastificado'] ?? 0, ]; } else @@ -382,8 +362,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController if ($guardas != "false" && $guardas != null) { $datos_guardas = [ 'papel' => $modelPapelGenerico->getIdFromCode($guardas['papel']), - 'gramaje' => intval($guardas['gramaje']), - 'caras' => intval($guardas['guardasImpresas']), + 'gramaje' => intval($guardas['gramaje']), + 'caras' => intval($guardas['guardasImpresas']), ]; } else $datos_guardas = false; @@ -406,40 +386,42 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController ); $return_data = $this->calcular_presupuesto($datos_presupuesto, 0, false); //TRUE FOR DEBUG - if(array_key_exists('exception', $return_data)){ + if (array_key_exists('exception', $return_data)) { return $this->failServerError( $return_data['exception'] . ' - ' . - $return_data['file'] . ' - ' . $return_data['line']); + $return_data['file'] . ' - ' . $return_data['line'] + ); } - if(count($direcciones) > 1){ - for ($i=0; $i 1) { + + for ($i = 0; $i < count($tirada); $i++) { + $coste_envio = 0.0; - foreach($direcciones as $direccion){ + foreach ($direcciones as $direccion) { $coste_envio += $this->getCosteEnvio( - $direccion['id'], - $return_data['peso'][$i], + $direccion['id'], + $return_data['peso'][$i], $direccion['unidades'], - $direccion['enPallets'] == 'true'?1:0)[0]->coste; + $direccion['entregaPalets'] == 'true' ? 1 : 0 + )[0]->coste; } - $return_data['precio_u'][$i] = round(floatval($return_data['precio_u'][$i]) + $coste_envio, 4); + $return_data['precio_u'][$i] = round(floatval($return_data['precio_u'][$i]) + $coste_envio / $tirada[$i], 4); } - } - else{ - - for ($i=0; $igetCosteEnvio(null, $return_data['peso'][$i], $tirada[$i], false)[0]->coste; - $return_data['precio_u'][$i] = round(floatval($return_data['precio_u'][$i]) + $coste_envio, 4); + $return_data['precio_u'][$i] = round(floatval($return_data['precio_u'][$i]) + $coste_envio / $tirada[$i], 4); } - + } return $this->respond($return_data); } catch (Exception $e) { - return $this->failServerError($e->getMessage()); + return $this->failServerError($e->getMessage() ); } } else { return $this->failUnauthorized('Invalid request', 403); @@ -468,7 +450,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } - + public function getNuevaDireccion() { @@ -591,60 +573,97 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } - public function guardarPresupuesto() + public function guardar() { if ($this->request->isAJAX()) { + $modelPapelGenerico = new PapelGenericoModel(); + $reqData = $this->request->getPost(); - $newTokenHash = csrf_hash(); - $csrfTokenName = csrf_token(); - - $confirmar = $reqData['confirmar'] ?? 0; - $id = $reqData['id'] ?? 0; $id = intval($id); - $datosCabecera = $reqData['datos_cabecera'] ?? []; + $datosCabecera = $reqData['datosCabecera'] ?? []; - $tirada = $reqData['datos_libro']['tirada'] ?? 0; - $selected_tirada = $reqData['tirada'] ?? 0; - $peso_libro = $reqData['peso'] ?? 0; - $tamanio = $reqData['datos_libro']['tamanio']; - $tipo_impresion_id = $this->getTipoImpresion($reqData['datos_libro']['tipo'], $reqData['datos_libro']['tapa']); - $cliente_id = $reqData['datos_libro']['clienteId'] ?? -1; - $isColor = intval($reqData['datos_libro']['isColor']) ?? 0; - $isHq = intval($reqData['datos_libro']['isHq']) ?? 0; - $paginasCuadernillo = $reqData['datos_libro']['paginasCuadernillo'] ?? null; + $confirmar = $reqData['confirmar'] ?? 0; + $cliente_id = $reqData['clienteId'] ?? -1; + + $tirada = $reqData['tirada'] ?? 0; + $selected_tirada = $reqData['selectedTirada'] ?? 0; + $tamanio = $reqData['tamanio']; + $paginas = $reqData['paginas'] ?? 0; + $paginas_color = $reqData['paginasColor'] ?? 0; + $tipo = $reqData['tipo']; + + $paginasCuadernillo = $reqData['paginasCuadernillo'] ?? null; + $papelInteriorDiferente = intval($reqData['papelInteriorDiferente']) ?? null; + + $isColor = intval($reqData['isColor']) ?? 0; + $isHq = intval($reqData['isHq']) ?? 0; + + $interior = $reqData['interior'] ?? []; + $cubierta = $reqData['cubierta'] ?? []; + $sobrecubierta = $reqData['sobrecubierta'] ?? []; + $guardas = $reqData['guardas'] ?? []; + $faja = $reqData['faja'] ?? []; + $excluirRotativa = $reqData['excluirRotativa'] ?? 0; + $ivaReducido = intval($reqData['ivaReducido']) ?? 0; + + $direcciones = $reqData['direcciones'] ?? []; + + $tipo_impresion_id = $this->getTipoImpresion($tipo, $cubierta['tipoCubierta']); + + if ($papelInteriorDiferente) { + $papel['negro'] = $modelPapelGenerico->getIdFromCode($interior['papelInterior']['negro']); + $papel['color'] = $modelPapelGenerico->getIdFromCode($interior['papelInterior']['color']); + $gramaje['negro'] = intval($interior['gramajeInterior']['negro']); + $gramaje['color'] = intval($interior['gramajeInterior']['color']); + } else { + $papel = $modelPapelGenerico->getIdFromCode($interior['papelInterior']); + $gramaje = intval($interior['gramajeInterior']); + } // Interior - $papel_generico = [ - 'id' => $reqData['datos_libro']['papelInterior'] ?? 0, - 'nombre' => $reqData['datos_libro']['papelInteriorNombre'] ?? "", + $interior = [ + 'papel_generico' => $papel, + 'gramaje' => $gramaje, + 'excluirRotativa' => $excluirRotativa == "false" ? false : true, + 'paginas' => $paginas, + 'paginas_color' => $paginas_color, + 'papelInteriorDiferente' => $papelInteriorDiferente ]; - $gramaje = $reqData['datos_libro']['gramajeInterior'] ?? 0; - $excluirRotativa = $reqData['datos_libro']['excluirRotativa'] ?? 0; - $paginas = intval($reqData['datos_libro']['paginas']) ?? 0; - $paginas_color = intval($reqData['datos_libro']['paginasColor']) ?? 0; + // Cubierta - $papel_generico_cubierta = [ - 'id' => $reqData['datos_libro']['papelCubierta'] ?? 0, - 'nombre' => $reqData['datos_libro']['papelCubiertaNombre'] ?? "", + $cubierta = [ + 'papel_generico_cubierta' => $modelPapelGenerico->getIdFromCode($cubierta['papelCubierta']), + 'gramajeCubierta' => intval($cubierta['gramajeCubierta']), + 'carasCubierta' => intval($cubierta['carasImpresion'] ?? 0), + 'solapasCubierta' => intval($cubierta['solapas'] ?? 0), + 'acabadosCubierta' => $cubierta['acabados'] ?? 0, ]; - $gramajeCubierta = $reqData['datos_libro']['gramajeCubierta'] ?? 0; - $carasCubierta = intval($reqData['datos_libro']['carasCubierta'] ?? 0); - $solapasCubierta = intval($reqData['datos_libro']['solapasCubierta'] ?? 0); - $acabadoCubierta = $reqData['datos_libro']['acabadoCubierta'] ?? 0; // Sobrecubierta - $sobreCubierta = $reqData['datos_libro']["sobrecubierta"] ?? null; + if ($sobrecubierta != "false" && $sobrecubierta != null) { + $sobrecubierta = [ + 'papel' => $modelPapelGenerico->getIdFromCode($sobrecubierta['papel']), + 'gramaje' => intval($sobrecubierta['gramaje']), + 'solapas' => intval($sobrecubierta['solapas'] ?? 0), + 'acabados' => $sobrecubierta['plastificado'] ?? 0, + ]; + } else + $sobrecubierta = false; // Guardas - $datos_guardas = $reqData['datos_libro']['guardas'] ?? 0; - - $servicios = $reqData['datos_libro']['servicios'] ?? []; - $iva_reducido = $reqData['iva_reducido']; + if ($guardas != "false" && $guardas != null) { + $datos_guardas = [ + 'papel' => $modelPapelGenerico->getIdFromCode($guardas['papel']), + 'gramaje' => intval($guardas['gramaje']), + 'caras' => intval($guardas['guardasImpresas']), + ]; + } else + $datos_guardas = false; $datos_presupuesto = array( 'tirada' => $tirada, @@ -655,23 +674,12 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController 'isHq' => $isHq, 'paginasCuadernillo' => $paginasCuadernillo, - 'interior' => array( - 'papel_generico' => $papel_generico, - 'gramaje' => $gramaje, - 'excluirRotativa' => $excluirRotativa, - 'paginas' => $paginas, - 'paginas_color' => $paginas_color, - ), - 'cubierta' => array( - 'papel_generico_cubierta' => $papel_generico_cubierta, - 'gramajeCubierta' => $gramajeCubierta, - 'carasCubierta' => $carasCubierta, - 'solapasCubierta' => $solapasCubierta, - ), - 'acabadoCubierta' => $acabadoCubierta, - 'sobrecubierta' => $sobreCubierta, + 'interior' => $interior, + 'cubierta' => $cubierta, + 'sobrecubierta' => $sobrecubierta, 'datos_guardas' => $datos_guardas, - 'servicios' => $servicios, + + 'servicios' => $reqData['servicios'] ?? [], ); $resultado_presupuesto = $this->calcular_presupuesto($datos_presupuesto, $selected_tirada, true); @@ -682,56 +690,65 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController if (!empty($error)) { return $this->respond([ 'error' => $error, - $csrfTokenName => $newTokenHash ]); } } } else if (isset($resultado_presupuesto['exception'])) { return $this->respond([ 'error' => $resultado_presupuesto['exception'], - $csrfTokenName => $newTokenHash + 'file' => $resultado_presupuesto['file'], + 'line' => $resultado_presupuesto['line'], ]); } + // seleccionamos el peso de la tirada seleccionada + $peso_libro = $resultado_presupuesto['peso'][array_search($selected_tirada, $tirada)]; + + + if (count($direcciones) > 1) { - for ($i = 0; $i < count($tirada); $i++) { + for ($i = 0; $i < count($tirada); $i++) { - $resultado_presupuesto['info']['totales'][$i]['coste_envio'] = 0.0; - $resultado_presupuesto['info']['totales'][$i]['margen_envio'] = 0.0; + $resultado_presupuesto['info']['totales'][$i]['coste_envio'] = 0.0; + $resultado_presupuesto['info']['totales'][$i]['margen_envio'] = 0.0; - foreach ($reqData['direcciones'] as $direccion) { - - $proporcion = intval($direccion['unidades']) / $selected_tirada * 100.0; - $unidades_calculo = floor($tirada[$i] * $proporcion / 100.0); - try { - $coste_envio = $this->calcular_coste_envio( + $coste_envio = 0.0; + foreach ($direcciones as $direccion) { + $precio_envio = $this->getCosteEnvio( $direccion['id'], - $peso_libro, - $unidades_calculo, - $direccion['tipo'] == 'cajas' ? 0 : 1 - ); - - if (count($coste_envio) > 0) { - $coste = floatval($coste_envio[0]->coste); - $margen = ($coste * floatval($coste_envio[0]->margen)) / 100.0; - $coste -= $margen; - $resultado_presupuesto['info']['totales'][$i]['coste_envio'] += $coste; - $resultado_presupuesto['info']['totales'][$i]['margen_envio'] += $margen; - } - } catch (Exception $e) { - return $this->respond([ - 'status' => -1, - 'message' => "Error al calcular el coste de envío (¿las direcciones están guardadas?)", - $csrfTokenName => $newTokenHash - ]); + $resultado_presupuesto['peso'][$i], + $direccion['unidades'], + $direccion['entregaPalets'] == 'true' ? 1 : 0 + )[0]; + $coste_envio += $precio_envio->coste; + $margen_envio = $precio_envio->margen; + $resultado_presupuesto['info']['totales'][$i]['coste_envio'] += $coste_envio - $margen_envio; + $resultado_presupuesto['info']['totales'][$i]['margen_envio'] += $margen_envio; } + $resultado_presupuesto['precio_u'][$i] = round(floatval($resultado_presupuesto['precio_u'][$i]) + $coste_envio / $tirada[$i], 4); } + } else { + + for ($i = 0; $i < count($tirada); $i++) { + $coste_envio = 0.0; + $precio_envio = $this->getCosteEnvio(null, $resultado_presupuesto['peso'][$i], $tirada[$i], false)[0]; + $coste_envio += $precio_envio->coste; + $margen_envio = $precio_envio->margen; + $resultado_presupuesto['precio_u'][$i] = round(floatval($resultado_presupuesto['precio_u'][$i]) + $coste_envio / $tirada[$i], 4); + + $resultado_presupuesto['info']['totales'][$i]['coste_envio'] = $coste_envio - $margen_envio; + $resultado_presupuesto['info']['totales'][$i]['margen_envio'] = $margen_envio; + } + + } $model_presupuesto = new PresupuestoModel(); $tiradas_alternativas = []; $resumen_totales = []; + for ($i = 0; $i < count($tirada); $i++) { + if ($tirada[$i] != $selected_tirada) { $coste_total = $resultado_presupuesto['info']['totales'][$i]['totalImpresion'] + $resultado_presupuesto['info']['totales'][$i]['totalPapel'] + @@ -741,9 +758,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $resultado_presupuesto['info']['totales'][$i]['margenPapel'] + $resultado_presupuesto['info']['totales'][$i]['margen_envio']) / ($coste_total + $coste_envio) * 100.0, 2); $total_pedido = round(($coste_total + $resultado_presupuesto['info']['totales'][$i]['totalServicios'] + $resultado_presupuesto['info']['totales'][$i]['margenServicios'] + $coste_envio), 2); - $precio_u = round(($coste_total + $resultado_presupuesto['info']['totales'][$i]['totalServicios'] + $resultado_presupuesto['info']['totales'][$i]['margenServicios'] + $coste_envio) / $tirada[$i], 4); + $precio_u = round(($coste_total + $resultado_presupuesto['info']['totales'][$i]['totalServicios'] + $resultado_presupuesto['info']['totales'][$i]['margenServicios'] + $coste_envio) / $tirada[$i], 4); - array_push($tiradas_alternativas, (object)array( + array_push($tiradas_alternativas, (object) array( 'tirada' => $tirada[$i], 'coste_impresion' => round($coste_total, 2), 'coste_envio' => $coste_envio, @@ -761,6 +778,22 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $borrar_antes = true; } + if($datos_presupuesto['sobrecubierta']){ + $acabado_id = $this->obtenerTarifasAcabado(['plastificado' => $datos_presupuesto['sobrecubierta']['acabados']]); + if(count($acabado_id)>0){ + $datos_presupuesto['sobrecubierta']['acabados'] = $acabado_id[0]; + } + } + $acabado_id = $this->obtenerTarifasAcabado($datos_presupuesto['cubierta']['acabadosCubierta']); + if(count($acabado_id)>0){ + $datos_presupuesto['cubierta']['acabadosCubierta']['plastificado'] = $acabado_id[0]; + $datos_presupuesto['cubierta']['acabadosCubierta']['barniz'] = $acabado_id[1]; + $datos_presupuesto['cubierta']['acabadosCubierta']['estampado'] = $acabado_id[2]; + } + else{ + $datos_presupuesto['cubierta']['acabadosCubierta']['id'] = 0; + } + $id = $model_presupuesto->insertarPresupuestoCliente( $id, $selected_tirada, @@ -768,7 +801,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $datosCabecera, $resultado_presupuesto['info'], $resumen_totales, - $iva_reducido, + $ivaReducido, $excluirRotativa, $tiradas_alternativas ); @@ -823,7 +856,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController 'status' => $id, 'url' => site_url('presupuestos/presupuestocliente/edit'), 'message' => lang('Basic.global.saveSuccess', [lang('Basic.global.record')]), - $csrfTokenName => $newTokenHash ]); } else { return $this->failUnauthorized('Invalid request', 403); @@ -969,7 +1001,12 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $unidades = intval($direccion['unidades']); $peso_envio = $peso_libro * $unidades / 1000.0; - $data = $this->calcular_coste_envio($direccion['id'], $peso_libro, $direccion['unidades'], $direccion['tipo'] == 'cajas' ? 0 : 1); + $data = $this->getCosteEnvio( + $direccion['id'], + $peso_libro, + $direccion['unidades'], + $direccion['entregaPalets'] == 'false' ? 0 : 1); + if (count($data) > 0) { $data[0]->presupuesto_id = $presupuestoId; @@ -977,7 +1014,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController unset($data[0]->id); $data[0]->precio = $data[0]->coste; unset($data[0]->coste); - $data[0]->entregaPieCalle = $direccion['tipo'] == 'cajas' ? 0 : 1; + $data[0]->entregaPieCalle = $direccion['entregaPalets'] == 'false' ? 0 : 1; unset($data[0]->tipo); $data[0]->peso = $peso_envio; $data[0]->cantidad = $unidades; @@ -1016,8 +1053,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $data = [ 'presupuesto_id' => $presupuestoId, 'tarifa_extra_id' => $servicio->tarifa_id, - 'precio_total' => $servicio->total, - 'precio_unidad' => $servicio->precio_unidad, + 'precio' => $servicio->precio, 'margen' => $servicio->margen, ]; $model->insert($data); @@ -1050,18 +1086,17 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController protected function getCosteEnvio($direccionId = null, $peso, $unidades, $entregaPieCalle) { - if($direccionId != null){ + if ($direccionId != null) { $model = model('App\Models\Clientes\ClienteDireccionesModel'); $data = $model->getDireccion($direccionId); - } - else{ + } else { $data = []; - array_push($data, (object)[ + array_push($data, (object) [ 'pais_id' => 1, // españa 'cp' => 18000, // envio nacional ]); } - + $modelTarifaEnvio = model('App\Models\Tarifas\TarifaEnvioModel'); $coste = 0; @@ -1123,7 +1158,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $isColor = $datos_entrada['isColor']; $isHq = $datos_entrada['isHq']; $paginasCuadernillo = $datos_entrada['paginasCuadernillo'] ?? null; - + // Interior $papelInteriorDiferente = $datos_entrada['interior']['papelInteriorDiferente'] ?? false; @@ -1150,7 +1185,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController // Servicios $servicios = $datos_entrada['servicios'] ?? []; - $error = (object)[ + $error = (object) [ 'interior' => "", 'cubierta' => "", 'sobrecubierta' => "", @@ -1187,7 +1222,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $is_cosido = (new TipoPresupuestoModel())->get_isCosido($tipo_impresion_id); - $datosPedido = (object)array( + $datosPedido = (object) array( 'paginas' => $paginas, 'tirada' => $tirada[$t], 'merma' => $tirada[$t] > $POD ? $this->calcular_merma($tirada[$t], $POD) : 0, @@ -1332,6 +1367,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $acabadoCubierta = []; foreach ($tarifaAcabadoCubierta as $tarifa) { + if($tarifa == 0) + continue; $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); $acabadoCubierta = $model->getPrecioTarifa($tarifa, $datosPedido->tirada, -1, $POD); @@ -1591,7 +1628,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } - $return_data += [ + $return_data += [ 'errors' => $error, 'total_lp' => $costeInterior + $coste_cubierta + $coste_sobrecubierta, 'acabadoCubierta' => $acabadoCubierta, @@ -1730,7 +1767,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController { $model = model('App\Models\Tarifas\Acabados\TarifaAcabadoModel'); $data = $model->getServiciosAcabadoCubierta(); - array_unshift($data, (object)['id' => '', 'label' => lang('Basic.global.None')]); + array_unshift($data, (object) ['id' => '', 'label' => lang('Basic.global.None')]); return $data; } @@ -1738,18 +1775,18 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController { $model = model('App\Models\Tarifas\Acabados\TarifaAcabadoModel'); $data = $model->getServiciosAcabadoSobrecubierta(); - array_unshift($data, (object)['id' => '', 'label' => lang('Basic.global.None')]); + array_unshift($data, (object) ['id' => '', 'label' => lang('Basic.global.None')]); return $data; } protected function getClienteListItems($selId = null) { $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Clientes.cliente'))])]; - if (!empty($selId)) : + if (!empty($selId)): $clienteModel = model('App\Models\Clientes\ClienteModel'); $selOption = $clienteModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : + if (!empty($selOption)): $data[$selId] = $selOption[0]; endif; endif; @@ -1787,7 +1824,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $color = 'negro'; $model = model('App\Models\Presupuestos\PresupuestoLineaModel'); - $data = $model->where('presupuesto_id', $presupuestoId)->findAll();; + $data = $model->where('presupuesto_id', $presupuestoId)->findAll(); + ; foreach ($data as $linea) { if (strpos($linea->tipo, "hq") !== false) { // $linea->tipo contains the substring "hq" @@ -1930,7 +1968,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController protected function generarResumen($presupuestoEntity) { - $presupuestoEntity->resumen = (object)[ + $presupuestoEntity->resumen = (object) [ 'titulo' => $this->generarTitulo($presupuestoEntity), 'tamanio' => $this->obtenerTamanio($presupuestoEntity), 'tipo_impresion' => $this->obtenerTipoImpresion($presupuestoEntity) @@ -2035,64 +2073,21 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController { $tarifas = []; + $model = model('App\Models\Tarifas\Acabados\TarifaAcabadoModel'); + foreach ($acabados as $acabado => $value) { - if ($acabado == 'plastificado') { - - if ($value !== 'NONE') { - - switch ($value) { - case 'BRIL': - array_push($tarifas, 1); - break; - case 'MATE': - array_push($tarifas, 2); - break; - case 'ANTI': - array_push($tarifas, 28); - break; - case 'SAND': - array_push($tarifas, 94); - break; - default: - break; - } - } - } else if ($acabado == 'barniz') { - if ($value !== 'NONE') { - switch ($value) { - case 'R2D': - array_push($tarifas, 102); - break; - case 'R3D': - array_push($tarifas, 8); - break; - default: - break; - } - } - } else if ($acabado == 'estampado') { - if ($value !== 'NONE') { - switch ($value) { - case 'GOLD': - array_push($tarifas, 103); - break; - case 'SILV': - array_push($tarifas, 104); - break; - case 'COPP': - array_push($tarifas, 105); - break; - case 'BRON': - array_push($tarifas, 106); - break; - default: - break; - } - } + if ($value != 'NONE') { + $data = $model->where('code', $value)->first(); + $data = $data->id; + array_push($tarifas, $data); + } + else{ + array_push($tarifas, 0); } } + return $tarifas; } } diff --git a/ci4/app/Entities/Tarifas/Acabados/TarifaAcabadoEntity.php b/ci4/app/Entities/Tarifas/Acabados/TarifaAcabadoEntity.php index 0d5852a1..2368cb47 100644 --- a/ci4/app/Entities/Tarifas/Acabados/TarifaAcabadoEntity.php +++ b/ci4/app/Entities/Tarifas/Acabados/TarifaAcabadoEntity.php @@ -8,6 +8,7 @@ class TarifaAcabadoEntity extends \CodeIgniter\Entity\Entity protected $attributes = [ "id" => null, "nombre" => null, + "code" => null, "precio_min" => 0, "importe_fijo" => 0, "mostrar_en_presupuesto" => 1, diff --git a/ci4/app/Models/Presupuestos/PresupuestoModel.php b/ci4/app/Models/Presupuestos/PresupuestoModel.php index 0150f6af..bf03da21 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoModel.php @@ -121,6 +121,8 @@ class PresupuestoModel extends \App\Models\BaseModel 'iva_reducido', 'excluir_rotativa', "acabado_cubierta_id", + "barniz_cubierta_id", + "estampado_cubierta_id", "acabado_sobrecubierta_id", "is_duplicado" ]; @@ -395,7 +397,7 @@ class PresupuestoModel extends \App\Models\BaseModel 'cliente_id' => $data['clienteId'], 'tipo_impresion_id' => $data['tipo_impresion_id'], 'pais_id' => 1, - 'retractilado' => in_array(3, $data['servicios']) ? 1 : 0, + 'retractilado' => in_array("RETR", $data['cubierta']['acabadosCubierta']) ? 1 : 0, 'retractilado5' => in_array(5, $data['servicios']) ? 1 : 0, 'guardas' => in_array(62, $data['servicios']) ? 1 : 0, 'faja_color' => in_array(16, $data['servicios']) ? 1 : 0, @@ -409,21 +411,23 @@ class PresupuestoModel extends \App\Models\BaseModel 'referencia_cliente' => $data_cabecera['referenciaCliente'], 'paginas' => $data['interior']['paginas'], 'tirada' => $tirada, - 'solapas' => $data['cubierta']['solapasCubierta'] > 0 ? 1 : 0, - 'solapas_ancho' => $data['cubierta']['solapasCubierta'] > 0 ? $data['cubierta']['solapasCubierta'] : 0, - 'solapas_sobrecubierta' => is_null($data['sobrecubierta']) ? 0 : 1, - 'solapas_ancho_sobrecubierta' => is_null($data['sobrecubierta']) ? 0 : $data['sobrecubierta']['solapas'], + 'solapas' => $data['cubierta']['solapasCubierta'] == 0 ? 0 : 1, + 'solapas_ancho' => $data['cubierta']['solapasCubierta'] == 0? $data['cubierta']['solapasCubierta'] : 0, + 'solapas_sobrecubierta' => !$data['sobrecubierta'] ? 0 : 1, + 'solapas_ancho_sobrecubierta' => !$data['sobrecubierta'] ? 0 : $data['sobrecubierta']['solapas'], 'cosido' => $is_cosido, 'merma' => $extra_info['merma'], 'merma_cubierta' => $extra_info['merma'], - 'lomo_cubierta' => $extra_info['lomo_cubierta'], - 'lomo_sobrecubierta' => $extra_info['lomo_sobrecubierta'], + /*'lomo_cubierta' => $extra_info['lomo_cubierta'], + 'lomo_sobrecubierta' => $extra_info['lomo_sobrecubierta'],*/ 'comparador_json_data' => $this->generateJson($data), - 'acabado_cubierta_id' => $data['acabadoCubierta'], - 'acabado_sobrecubierta_id' => is_null($data['sobrecubierta']) ? 0 : $data['sobrecubierta']['acabado'], + 'acabado_cubierta_id' => $data['cubierta']['acabadosCubierta']['plastificado'], + 'barniz_cubierta_id' => $data['cubierta']['acabadosCubierta']['barniz'], + 'estampado_cubierta_id' => $data['cubierta']['acabadosCubierta']['estampado'], + 'acabado_sobrecubierta_id' => !$data['sobrecubierta'] ? 0 : $data['sobrecubierta']['acabados'], 'comp_tipo_impresion' => $data['isHq'] ? ($data['isColor'] ? 'colorhq' : 'negrohq') : ($data['isColor'] ? 'color' : 'negro'), @@ -516,7 +520,7 @@ class PresupuestoModel extends \App\Models\BaseModel ); // -- SOBRECUBIERTA -- - if (!is_null($data['sobrecubierta'])) { + if ($data['sobrecubierta']) { $values['sobrecubierta'] = array( 'papel_id' => intval($data['sobrecubierta']['papel']), 'gramaje' => intval($data['sobrecubierta']['gramaje']), diff --git a/ci4/app/Models/Presupuestos/PresupuestoServiciosExtraModel.php b/ci4/app/Models/Presupuestos/PresupuestoServiciosExtraModel.php index 60927b0e..75e9b1ef 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoServiciosExtraModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoServiciosExtraModel.php @@ -15,11 +15,10 @@ class PresupuestoServiciosExtraModel extends \App\Models\BaseModel const SORTABLE = [ 0 => "t2.nombre", - 1 => "t1.precio_unidad", - 2 => "t1.precio_total" + 1 => "t1.precio", ]; - protected $allowedFields = ["presupuesto_id", "tarifa_extra_id", "precio_total", "precio_unidad", "margen"]; + protected $allowedFields = ["presupuesto_id", "tarifa_extra_id", "precio", "margen"]; protected $returnType = "App\Entities\Presupuestos\PresupuestoServiciosExtraEntity"; protected $useTimestamps = true; diff --git a/ci4/app/Models/Tarifas/Acabados/TarifaAcabadoModel.php b/ci4/app/Models/Tarifas/Acabados/TarifaAcabadoModel.php index 4ae2b09f..eb1a2719 100644 --- a/ci4/app/Models/Tarifas/Acabados/TarifaAcabadoModel.php +++ b/ci4/app/Models/Tarifas/Acabados/TarifaAcabadoModel.php @@ -21,6 +21,7 @@ class TarifaAcabadoModel extends \App\Models\BaseModel protected $allowedFields = [ "nombre", + "code", "precio_min", "importe_fijo", "mostrar_en_presupuesto", diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_datosGenerales.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_datosGenerales.php index 2ad9ea33..871583be 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_datosGenerales.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_datosGenerales.php @@ -8,22 +8,58 @@ - - + + + +
+ + +
+ +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
-
- +
@@ -34,29 +70,33 @@ - - + +
- -
+ +
- -
+ +
- -
+ +
@@ -65,7 +105,8 @@ -
@@ -73,20 +114,24 @@
- -
+ +
- -
+ +
- - + +
@@ -100,7 +145,8 @@ - +
Siempre deben ser pares @@ -112,7 +158,8 @@ - +
Siempre deben ser pares @@ -124,7 +171,8 @@ - +
@@ -134,21 +182,24 @@ - - +
- - + +
@@ -176,25 +227,29 @@
- " alt="Fresado"> + " + alt="Fresado">
Fresado (a partir de 32 páginas)
- " alt="Grapado"> + " + alt="Grapado">
Grapado (entre 12 y 40 páginas)
- " alt="Espiral"> + " + alt="Espiral">
Espiral
- " alt="Cosido"> + " + alt="Cosido">
Cosido (a partir de 32 páginas)
@@ -207,7 +262,8 @@
- +
@@ -221,7 +277,8 @@
- @@ -231,7 +288,9 @@
-

Se verificará que el pedido cumpla con los requisitos establecidos en el Artículo 91 de la Ley 37/1992, sobre inserción de publicidad, antes de proceder con su producción, lo que garantiza la aplicación del IVA reducido del 4%.

+

Se verificará que el pedido cumpla con los requisitos establecidos en el Artículo 91 de la Ley + 37/1992, sobre inserción de publicidad, antes de proceder con su producción, lo que garantiza la aplicación + del IVA reducido del 4%.

\ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_disenioCubierta.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_disenioCubierta.php index 087f56fa..844d36f0 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_disenioCubierta.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_disenioCubierta.php @@ -50,11 +50,12 @@
- + - @@ -247,11 +248,11 @@
@@ -330,7 +331,8 @@ + class="calcular-presupuesto form-control text-center num-input" min="60" max="120" step="1" + value="60">
Entre 60 y 120 mm
@@ -358,10 +360,9 @@
- - + +
@@ -380,8 +381,7 @@ - @@ -392,7 +392,8 @@ + class="calcular-presupuesto form-control text-center num-input" min="60" max="120" step="1" + value="60">
Entre 60 y 120 mm
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_resumen.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_resumen.php index a434d5bf..db2ca608 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_resumen.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_resumen.php @@ -7,7 +7,7 @@
Precio unidad:

Total base:

Iva (%): € -

Total: € +

Total:

diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/loader.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/loader.php index 85f03b08..90780250 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/loader.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/loader.php @@ -1,5 +1,10 @@ -