diff --git a/ci4/app/Config/RBAC/permissionMatrix.php b/ci4/app/Config/RBAC/permissionMatrix.php index c1c73039..42082e74 100644 --- a/ci4/app/Config/RBAC/permissionMatrix.php +++ b/ci4/app/Config/RBAC/permissionMatrix.php @@ -74,7 +74,7 @@ const SK_PERMISSION_MATRIX = [ "roles-permisos.delete", "roles-permisos.menu", ], - "cliente-admin" => [ + "cliente" => [ "clientes.create", "clientes.edit", "clientes.delete", @@ -84,52 +84,6 @@ const SK_PERMISSION_MATRIX = [ "presupuesto.delete", "presupuesto.menu", ], - "cliente-editor" => [ - "clientes.create", - "clientes.edit", - "clientes.delete", - "clientes.menu", - "plantilla-tarifa.create", - "plantilla-tarifa.edit", - "plantilla-tarifa.delete", - "plantilla-tarifa.menu", - "presupuesto.create", - "presupuesto.edit", - "presupuesto.delete", - "presupuesto.menu", - "tarifa-preimpresion.create", - "tarifa-preimpresion.edit", - "tarifa-preimpresion.delete", - "tarifa-preimpresion.menu", - "tarifa-manipulado.create", - "tarifa-manipulado.edit", - "tarifa-manipulado.delete", - "tarifa-manipulado.menu", - "tarifa-acabado.create", - "tarifa-acabado.edit", - "tarifa-acabado.delete", - "tarifa-acabado.menu", - "tarifa-encuadernacion.create", - "tarifa-encuadernacion.edit", - "tarifa-encuadernacion.delete", - "tarifa-encuadernacion.menu", - "tarifa-envio.create", - "tarifa-envio.edit", - "tarifa-envio.delete", - "tarifa-envio.menu", - "proveedores.create", - "proveedores.edit", - "proveedores.delete", - "proveedores.menu", - "ajustes.create", - "ajustes.edit", - "ajustes.delete", - "ajustes.menu", - "actividad.create", - "actividad.edit", - "actividad.delete", - "actividad.menu", - ], "comercial" => [ "token.token", "token.menu", @@ -205,5 +159,33 @@ const SK_PERMISSION_MATRIX = [ "actividad.edit", "actividad.delete", "actividad.menu", + "paises.create", + "paises.edit", + "paises.delete", + "paises.menu", + "maquinas.create", + "maquinas.edit", + "maquinas.delete", + "maquinas.menu", + "maquinas-defecto.create", + "maquinas-defecto.edit", + "maquinas-defecto.delete", + "maquinas-defecto.menu", + "papel-generico.create", + "papel-generico.edit", + "papel-generico.delete", + "papel-generico.menu", + "papel-impresion.create", + "papel-impresion.edit", + "papel-impresion.delete", + "papel-impresion.menu", + "usuarios.create", + "usuarios.edit", + "usuarios.delete", + "usuarios.menu", + "roles-permisos.create", + "roles-permisos.edit", + "roles-permisos.delete", + "roles-permisos.menu", ], ]; diff --git a/ci4/app/Config/RBAC/roles.php b/ci4/app/Config/RBAC/roles.php index 217aaf1f..b7fc3af9 100644 --- a/ci4/app/Config/RBAC/roles.php +++ b/ci4/app/Config/RBAC/roles.php @@ -5,13 +5,9 @@ const SK_ROLES = [ 'title' => 'Administrador', 'description' => '', ], - 'cliente-admin' => [ - 'title' => 'Cliente administrador', - 'description' => 'Rol de cliente con permisos de administración', - ], - 'cliente-editor' => [ - 'title' => 'Cliente editor', - 'description' => 'Rol de cliente con permisos de edición', + 'cliente' => [ + 'title' => 'Cliente', + 'description' => 'Rol de cliente', ], 'comercial' => [ 'title' => 'Comercial', diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 529ce510..24000dc9 100755 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -545,6 +545,7 @@ $routes->group('presupuestocliente', ['namespace' => 'App\Controllers\Presupuest $routes->post('getDatosDireccion', 'Presupuestocliente::getDatosDireccion', ['as' => 'getDatosDireccion']); $routes->post('getNuevaDireccion', 'Presupuestocliente::getNuevaDireccion', ['as' => 'nuevaDireccion']); $routes->post('guardarPresupuesto', 'Presupuestocliente::guardarPresupuesto', ['as' => 'guardarPresupuesto']); + $routes->post('duplicarPresupuesto', 'Presupuestocliente::duplicarPresupuesto', ['as' => 'duplicarPresupuesto']); }); $routes->resource('presupuestocliente', ['namespace' => 'App\Controllers\Presupuestos', 'controller' => 'Presupuestocliente', 'except' => 'show,new,create,update']); diff --git a/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php b/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php index be81053d..33dfeaaf 100755 --- a/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php +++ b/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php @@ -861,6 +861,7 @@ class Cosidotapablanda extends \App\Controllers\BaseResourceController $presupuesto = $this->model->find($id); $presupuesto->titulo = $presupuesto->titulo .' - ' . lang('Presupuestos.duplicado'); $presupuesto->is_duplicado = 1; + $presupuesto->estado_id = 1; $new_id = $this->model->insert($presupuesto); $presupuestoAcabadosModel = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php index 7346983f..ee5cc90b 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php @@ -158,22 +158,32 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $datosPresupuesto->acabadosSobrecubierta = $this->getAcabadosSobrecubierta(); $datosPresupuesto->tipo_libro = $this->getTipoLibro($presupuestoEntity->tipo_impresion_id ?? null); - [$datosPresupuesto->color_impresion, $datosPresupuesto->calidad_impresion] = + [$datosPresupuesto->color_impresion, $datosPresupuesto->calidad_impresion] = $this->getTipoInterior($presupuestoEntity->id ?? null); $datosPresupuesto->tapa = $this->getTapa($presupuestoEntity->tipo_impresion_id ?? null); $datosPresupuesto->clienteList = $this->getClienteListItems($presupuestoEntity->cliente_id ?? null); + $this->obtenerTiradas($presupuestoEntity); + $this->obtenerDatosPapel($presupuestoEntity); + $this->obtenerPaginasColor($presupuestoEntity); + $this->obtenerDireccionesEnvio($presupuestoEntity); + + // Si el presupuesto está confirmado, se generan los datos del resumen + if($presupuestoEntity->estado_id == 2){ + $this->generarResumen($presupuestoEntity); + } + $this->viewData['formAction'] = route_to('updateCosidotapablanda', $id); $this->viewData['paisList'] = $this->getPaisListItems(); $this->viewData['presupuestoEntity'] = $presupuestoEntity; $this->viewData['datosPresupuesto'] = $datosPresupuesto; - + // 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){ + if ($presupuestoEntity->is_duplicado) { $this->model->removeIsDuplicado($presupuestoEntity->id); } @@ -217,33 +227,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } - // Se borran las lineas de presupuesto - $model = new PresupuestoLineaModel(); - $model->where("presupuesto_id", $id)->delete(); - - // Se borran las direcciones de presupuesto - $model = new PresupuestoDireccionesModel(); - $model->where("presupuesto_id", $id)->delete(); - - // Se borran los servicios de acabado - $model = new PresupuestoAcabadosModel(); - $model->where("presupuesto_id", $id)->delete(); - - // Se borran los servicios de preimpresion - $model = new PresupuestoPreimpresionesModel(); - $model->where("presupuesto_id", $id)->delete(); - - // Se borran los servicios de encuadernacion - $model = new PresupuestoEncuadernacionesModel(); - $model->where("presupuesto_id", $id)->delete(); - - // Se borran los servicios de manipulado - $model = new PresupuestoManipuladosModel(); - $model->where("presupuesto_id", $id)->delete(); - - // Se borran los servicios extra - $model = new PresupuestoServiciosExtraModel(); - $model->where("presupuesto_id", $id)->delete(); + $this->borrarRelacionesPresupuesto($id); // $message = lang('Basic.global.deleteSuccess', [$objName]); IMN commented $message = lang('Basic.global.deleteSuccess', [lang('Basic.global.record')]); @@ -251,6 +235,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController return $response; } + public function getGramaje() { if ($this->request->isAJAX()) { @@ -369,7 +354,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $sobreCubierta = $reqData["sobrecubierta"] ?? null; // Guardas - $datos_guardas = $reqData['guardas'] ?? 0; + $datos_guardas = $reqData['guardas'] ?? []; $servicios = $reqData['servicios'] ?? []; @@ -493,6 +478,91 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } + public function duplicarPresupuesto(){ + if ($this->request->isAJAX()) { + + $reqData = $this->request->getPost(); + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + + $id = $reqData['id'] ?? 0; + + if($id > 0){ + try{ + + $presupuesto = $this->model->find($id); + $presupuesto->titulo = $presupuesto->titulo .' - ' . lang('Presupuestos.duplicado'); + $presupuesto->is_duplicado = 1; + $presupuesto->estado_id = 1; + $new_id = $this->model->insert($presupuesto); + + $presupuestoAcabadosModel = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); + foreach ($presupuestoAcabadosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $acabado) { + $acabado->presupuesto_id = $new_id; + $presupuestoAcabadosModel->insert($acabado); + } + + $presupuestoEncuadernacionesModel = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel'); + foreach ($presupuestoEncuadernacionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $encuadernacion) { + $encuadernacion->presupuesto_id = $new_id; + $presupuestoEncuadernacionesModel->insert($encuadernacion); + } + + $presupuestoManipuladosModel = model('App\Models\Presupuestos\PresupuestoManipuladosModel'); + foreach ($presupuestoManipuladosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $manipulado) { + $manipulado->presupuesto_id = $new_id; + $presupuestoManipuladosModel->insert($manipulado); + } + + $presupuestoPreimpresionesModel = model('App\Models\Presupuestos\PresupuestoPreimpresionesModel'); + foreach ($presupuestoPreimpresionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $preimpresion) { + $preimpresion->presupuesto_id = $new_id; + $presupuestoPreimpresionesModel->insert($preimpresion); + } + + $presupuestoServiciosExtraModel = model('App\Models\Presupuestos\PresupuestoServiciosExtraModel'); + foreach ($presupuestoServiciosExtraModel->where('presupuesto_id', $presupuesto->id)->findAll() as $servicioExtra) { + $servicioExtra->presupuesto_id = $new_id; + $presupuestoServiciosExtraModel->insert($preimpresion); + } + + $presupuestoDireccionesModel = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); + foreach ($presupuestoDireccionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $direccion) { + $direccion->presupuesto_id = $new_id; + $presupuestoDireccionesModel->insert($direccion); + } + + $presupuestoLineaModel = model('App\Models\Presupuestos\PresupuestoLineaModel'); + $presupuestoLineaModel->duplicateLineasPresupuesto($presupuesto->id, $new_id); + + return $this->respond([ + 'success' => true, + 'id' => $new_id, + $csrfTokenName => $newTokenHash + ]); + + }catch(\Exception $e){ + return $this->respond([ + 'success' => false, + 'message' => $e->getMessage(), + $csrfTokenName => $newTokenHash + ]); + } + } + + return $this->respond([ + 'success' => false, + 'message' => "No existe el presupuesto", + $csrfTokenName => $newTokenHash + + ]); + + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + public function guardarPresupuesto() { if ($this->request->isAJAX()) { @@ -504,6 +574,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $confirmar = $reqData['confirmar'] ?? 0; + $id = $reqData['id'] ?? 0; + $id = intval($id); + $datosCabecera = $reqData['datos_cabecera'] ?? []; $tirada = $reqData['datos_libro']['tirada'] ?? 0; @@ -600,12 +673,22 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $proporcion = intval($direccion['unidades']) / $selected_tirada * 100.0; $unidades_calculo = floor($tirada[$i] * $proporcion / 100.0); - $coste_envio = $this->calcular_coste_envio( - $direccion['id'], - $peso_libro, - $unidades_calculo, - $direccion['tipo'] == 'cajas' ? 0 : 1 - ); + try{ + $coste_envio = $this->calcular_coste_envio( + $direccion['id'], + $peso_libro, + $unidades_calculo, + $direccion['tipo'] == 'cajas' ? 0 : 1 + ); + } + catch(Exception $e){ + return $this->respond([ + 'status' => -1, + 'message' => "Error al calcular el coste de envío (¿las direcciones están guardadas?)", + $csrfTokenName => $newTokenHash + ]); + } + if (count($coste_envio) > 0) { $coste = floatval($coste_envio[0]->coste); $margen = ($coste * floatval($coste_envio[0]->margen)) / 100.0; @@ -644,17 +727,28 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } + $borrar_antes = false; + if ($id != 0) { + $borrar_antes = true; + } + $id = $model_presupuesto->insertarPresupuestoCliente( + $id, $selected_tirada, $datos_presupuesto, $datosCabecera, $resultado_presupuesto['info'], $resumen_totales, $iva_reducido, + $excluirRotativa, $tiradas_alternativas ); // Lineas Presupuesto + if ($borrar_antes && $id > 0) { + $this->borrarRelacionesPresupuesto($id); + } + foreach ($resultado_presupuesto['info']['interior'] as $linea) { if (count($linea) > 0) @@ -688,7 +782,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $this->guardarLineaEnvio($id, $direccion, $peso_libro); } - if($confirmar == 1){ + if ($confirmar) { $model_presupuesto->confirmarPresupuesto($id); } @@ -709,6 +803,37 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController * Funciones auxiliares * **********************/ + protected function borrarRelacionesPresupuesto($id) + { + // Se borran las lineas de presupuesto + $model = new PresupuestoLineaModel(); + $model->where("presupuesto_id", $id)->delete(); + + // Se borran las direcciones de presupuesto + $model = new PresupuestoDireccionesModel(); + $model->where("presupuesto_id", $id)->delete(); + + // Se borran los servicios de acabado + $model = new PresupuestoAcabadosModel(); + $model->where("presupuesto_id", $id)->delete(); + + // Se borran los servicios de preimpresion + $model = new PresupuestoPreimpresionesModel(); + $model->where("presupuesto_id", $id)->delete(); + + // Se borran los servicios de encuadernacion + $model = new PresupuestoEncuadernacionesModel(); + $model->where("presupuesto_id", $id)->delete(); + + // Se borran los servicios de manipulado + $model = new PresupuestoManipuladosModel(); + $model->where("presupuesto_id", $id)->delete(); + + // Se borran los servicios extra + $model = new PresupuestoServiciosExtraModel(); + $model->where("presupuesto_id", $id)->delete(); + } + protected function guardarLineaPresupuesto($presupuestoId, $linea) { @@ -880,7 +1005,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $sobreCubierta = $datos_entrada["sobrecubierta"] ?? null; // Guardas - $datos_guardas = $datos_entrada['guardas'] ?? []; + $datos_guardas = $datos_entrada['datos_guardas'] ?? []; // Servicios $servicios = $datos_entrada['servicios'] ?? []; @@ -929,6 +1054,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController 'ancho' => intval($tamanio['ancho']) ?? 100000, 'alto' => intval($tamanio['alto']) ?? 100000, 'isCosido' => $is_cosido, + 'a_favor_fibra' => 1, ); if ($extra_info) { $info['merma'] = $datosPedido->merma; @@ -1046,7 +1172,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController if ($extra_info) { $this->calcular_coste_linea( - $linea, + $cubierta, $totalPapel, $margenPapel, $sumForFactor, @@ -1080,11 +1206,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $lomo_sobrecubierta = 0.0; if (!is_null($sobreCubierta)) { - $papel_generico = [ + $papel_generico_sobrecubierta = [ 'id' => $sobreCubierta['papel'] ?? 0, 'nombre' => $sobreCubierta['papel_nombre'] ?? "", ]; - $input_data['papel_generico'] = $papel_generico; + $input_data['papel_generico'] = $papel_generico_sobrecubierta; $input_data['gramaje'] = $sobreCubierta['gramaje'] ?? 0; $input_data['datosPedido']->paginas = 4; $input_data['paginas_color'] = 4; @@ -1103,7 +1229,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController if ($extra_info) { $this->calcular_coste_linea( - $linea, + $linea_sobrecubierta, $totalPapel, $margenPapel, $sumForFactor, @@ -1136,57 +1262,57 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $guardas = []; $peso_guardas = 0.0; $coste_guardas = 0.0; + if($datos_guardas != 0){ + if (count($datos_guardas) != 0) { - if (count($datos_guardas) != 0) { + $guardas = $datos_guardas; + $papel_generico_guardas = [ + 'id' => $datos_guardas['papel'] ?? 0, + 'nombre' => $datos_guardas['nombre'] ?? "", + ]; + $input_data['papel_generico'] = $papel_generico_guardas; + $input_data['gramaje'] = $datos_guardas['gramaje'] ?? 0; + $input_data['datosPedido']->paginas = 8; + $input_data['paginas_color'] = 8; + $input_data['datosPedido']->paginas_impresion = $datos_guardas['caras'] ?? 0; + $input_data['datosPedido']->solapas_ancho = 0; + $input_data['datosPedido']->solapas = 0; + $input_data['isColor'] = 1; + $input_data['isHq'] = 1; + $input_data['uso'] = 'guardas'; - $guardas = $datos_guardas; - $papel_generico = [ - 'id' => $datos_guardas['papel'] ?? 0, - 'nombre' => $datos_guardas['nombre'] ?? "", - ]; - $input_data['papel_generico'] = $papel_generico; - $input_data['gramaje'] = $datos_guardas['gramaje'] ?? 0; - $input_data['datosPedido']->paginas = 8; - $input_data['paginas_color'] = 8; - $input_data['datosPedido']->paginas_impresion = $datos_guardas['caras'] ?? 0; - $input_data['datosPedido']->solapas_ancho = 0; - $input_data['datosPedido']->solapas = 0; - $input_data['isColor'] = 1; - $input_data['isHq'] = 1; - $input_data['uso'] = 'guardas'; - - // Para el caso de Fresado y Cosido tapa dura, las guardas son un diptico - // y hay que imprimirlas como "cosido" (dos hojas pegadas). En el caso de espiral - // o wire-o tapa dura, las guardas se imprimen como hojas sueltas - if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3) { - $input_data['datosPedido']->isCosido = true; - } else if ($tipo_impresion_id == 5 || $tipo_impresion_id == 7) { - $input_data['datosPedido']->isCosido = false; - } - - $guardas = PresupuestoClienteService::obtenerGuardas($input_data); - - if (count($guardas) > 0) { - $coste_guardas += floatval($guardas['total_impresion']); - $peso_guardas += floatval($guardas['peso']); - if ($extra_info) { - - $this->calcular_coste_linea( - $linea, - $totalPapel, - $margenPapel, - $sumForFactor, - $totalImpresion, - $margenImpresion - ); + // Para el caso de Fresado y Cosido tapa dura, las guardas son un diptico + // y hay que imprimirlas como "cosido" (dos hojas pegadas). En el caso de espiral + // o wire-o tapa dura, las guardas se imprimen como hojas sueltas + if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3) { + $input_data['datosPedido']->isCosido = true; + } else if ($tipo_impresion_id == 5 || $tipo_impresion_id == 7) { + $input_data['datosPedido']->isCosido = false; } - } - if ($coste_guardas <= 0) - $error->guardas = lang('Presupuestos.errores.noGuardas'); - else - $error->guardas = ""; - } + $guardas = PresupuestoClienteService::obtenerGuardas($input_data); + + if (count($guardas) > 0) { + $coste_guardas += floatval($guardas['total_impresion']); + $peso_guardas += floatval($guardas['peso']); + if ($extra_info) { + + $this->calcular_coste_linea( + $guardas, + $totalPapel, + $margenPapel, + $sumForFactor, + $totalImpresion, + $margenImpresion + ); + } + } + if ($coste_guardas <= 0) + $error->guardas = lang('Presupuestos.errores.noGuardas'); + else + $error->guardas = ""; + } + } if ($extra_info) { $totalPapel -= $margenPapel; $totalImpresion -= $margenImpresion; @@ -1263,8 +1389,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $coste_servicios += floatval($resultado[0]->precio); if ($extra_info) { - $totalServicios += floatval($resultado[0]->total); - $margenServicios += floatval($resultado[0]->total) * floatval($resultado[0]->margen) / 100.0; + $totalServicios += floatval($resultado[0]->precio); + $margenServicios += floatval($resultado[0]->precio) * floatval($resultado[0]->margen) / 100.0; } } else if (intval($servicio) == 62) { // Servicios manipulado @@ -1317,7 +1443,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController )); } - if ($extra_info && $tirada[$t] == $selected_tirada) { + if ($extra_info) { // && $tirada[$t] == $selected_tirada) { $info['lomo_cubierta'] = $lomo; $info['lomo_sobrecubierta'] = $lomo_sobrecubierta; @@ -1369,8 +1495,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController if ($linea['tipo_maquina'] == 'inkjet') { $totalImpresion += $linea['precio_tinta']; - $totalImpresion += $linea['total_corte']; - $sumForFactor += $linea['total_corte']; + if (array_key_exists('total_corte', $linea)) { + $totalImpresion += $linea['total_corte']; + $sumForFactor += $linea['total_corte']; + } } $margenImpresion += $linea['margen_impresion_horas']; $margenImpresion += $linea['margen_click_pedido']; @@ -1495,54 +1623,239 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController return $data; } - - protected function getTipoLibro($tipo_impresion_id){ - if($tipo_impresion_id == 1 || $tipo_impresion_id == 2){ + + protected function getTipoLibro($tipo_impresion_id) + { + if ($tipo_impresion_id == 1 || $tipo_impresion_id == 2) { return 'fresado'; - } - else if ($tipo_impresion_id == 3 || $tipo_impresion_id == 4){ + } else if ($tipo_impresion_id == 3 || $tipo_impresion_id == 4) { return 'cosido'; - } - else if ($tipo_impresion_id == 5 || $tipo_impresion_id == 6){ + } else if ($tipo_impresion_id == 5 || $tipo_impresion_id == 6) { return 'espiral'; - } - else if ($tipo_impresion_id == 7 || $tipo_impresion_id == 8){ + } else if ($tipo_impresion_id == 7 || $tipo_impresion_id == 8) { return 'wireo'; - } - else if ($tipo_impresion_id == 21){ + } else if ($tipo_impresion_id == 21) { return 'grapado'; - } - else + } else return ''; } - protected function getTipoInterior($presupuestoId){ + protected function getTipoInterior($presupuestoId) + { $calidad = 'estandar'; $color = 'negro'; $model = model('App\Models\Presupuestos\PresupuestoLineaModel'); - $data = $model->where('presupuestoId', $presupuestoId)->findAll();; - foreach($data as $linea){ + $data = $model->where('presupuesto_id', $presupuestoId)->findAll();; + foreach ($data as $linea) { if (strpos($linea->tipo, "hq") !== false) { // $linea->tipo contains the substring "hq" - $calidad='premium'; + $calidad = 'premium'; } - if (strpos($linea->tipo, "hq") !== false) { // $linea->tipo contains the substring "hq" - $color='color'; + if (strpos($linea->tipo, "color") !== false) { // $linea->tipo contains the substring "color" + $color = 'color'; } } return [$color, $calidad]; - } - - protected function getTapa($tipo_impresion_id ){ - + + protected function getTapa($tipo_impresion_id) + { + $tapa = 'blanda'; - if($tipo_impresion_id == 1 || $tipo_impresion_id == 3 || - $tipo_impresion_id == 5 || $tipo_impresion_id == 7) + if ( + $tipo_impresion_id == 1 || $tipo_impresion_id == 3 || + $tipo_impresion_id == 5 || $tipo_impresion_id == 7 + ) $tapa = 'dura'; - + return $tapa; } + + protected function obtenerPaginasColor($presupuestoEntity) + { + $comparador_data = json_decode($presupuestoEntity->comparador_json_data); + if (property_exists($comparador_data, 'color')) { + $presupuestoEntity->paginasColor = $comparador_data->color->paginas; + } + if (property_exists($comparador_data, 'colorhq')) { + $presupuestoEntity->paginasColor = $comparador_data->colorhq->paginas; + } else { + $presupuestoEntity->paginasColor = 0; + } + } + + protected function obtenerTiradas($presupuestoEntity) + { + + $tiradas_alternativas = json_decode($presupuestoEntity->tirada_alternativa_json_data, true); + $tiradas = array(); + array_push($tiradas, $presupuestoEntity->tirada); + if (!is_null($tiradas_alternativas)) { + if (count($tiradas_alternativas) > 0) { + foreach ($tiradas_alternativas as $tirada) { + array_push($tiradas, intval($tirada['tirada'])); + } + } + } + sort($tiradas); + $presupuestoEntity->selected_tirada = $presupuestoEntity->tirada; + for ($i = 0; $i < count($tiradas); $i++) { + $key = 'tirada' . ($i == 0 ? '' : strval($i + 1)); + $presupuestoEntity->$key = $tiradas[$i]; + } + } + + protected function obtenerDireccionesEnvio($presupuestoEntity) + { + $model = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); + $model_direcciones = model('App\Models\Clientes\ClienteDireccionesModel'); + $model_pais = model('App\Models\Configuracion\PaisModel'); + $direcciones = $model->where('presupuesto_id', $presupuestoEntity->id)->findAll(); + + $result = []; + $temp = []; + for ($i=0; $igetIdForPresupuestoCliente( + $presupuestoEntity->cliente_id, + $direcciones[$i]->att, + $direcciones[$i]->email, + $direcciones[$i]->direccion, + $direcciones[$i]->cp, + $direcciones[$i]->pais_id, + $direcciones[$i]->telefono); + if(count($direccion_id) > 0) { + $temp = $direcciones[$i]->toArray(); + $temp['pais'] = $model_pais->where('id', $direcciones[$i]->pais_id)->first()->nombre; + $temp['direccion_id'] = $direccion_id[0]->id; + array_push($result, $temp); + } + } + if(count($result) > 0) + $presupuestoEntity->direcciones_envio = $result; + } + + protected function obtenerDatosPapel($presupuestoEntity) + { + + $id = $presupuestoEntity->id; + + $model = model('App\Models\Presupuestos\PresupuestoLineaModel'); + $data = $model->where('presupuesto_id', $id)->findAll(); + if (count($data) > 0) { + foreach ($data as $linea) { + // Se coje el primer papel que se encuentre para el interior + // para presupuestos del cliente sólo se escoje un papel para el interior + if (strpos($linea->tipo, "bn") !== false || strpos($linea->tipo, "color") !== false) { + $presupuestoEntity->papel_interior = $linea->papel_id; + $presupuestoEntity->gramaje_interior = $linea->gramaje; + } + // Si es cubierta + else if (strpos($linea->tipo, "cubierta") !== false && strpos($linea->tipo, "sobrecubierta") === false) { + $presupuestoEntity->papel_cubierta = $linea->papel_id; + $presupuestoEntity->gramaje_cubierta = $linea->gramaje; + $presupuestoEntity->paginas_cubierta = $linea->paginas; + } + // Si es sobrecubierta + else if (strpos($linea->tipo, "sobrecubierta") !== false) { + $presupuestoEntity->papel_sobrecubierta = $linea->papel_id; + $presupuestoEntity->gramaje_sobrecubierta = $linea->gramaje; + $presupuestoEntity->paginas_sobrecubierta = $linea->paginas; + } + // Si es guardas + else if (strpos($linea->tipo, "guardas") !== false) { + $presupuestoEntity->papel_guardas = $linea->papel_id; + $presupuestoEntity->paginas_guardas = $linea->paginas; + } + } + } + } + + protected function generarResumen($presupuestoEntity){ + + $presupuestoEntity->resumen = (object)[ + 'titulo' => $this->generarTitulo($presupuestoEntity), + 'tamanio' => $this->obtenerTamanio($presupuestoEntity), + 'tipo_impresion' => $this->obtenerTipoImpresion($presupuestoEntity) + ]; + + $model_papelGenerico = model('App\Models\Configuracion\PapelGenericoModel'); + if(!is_null($presupuestoEntity->papel_interior)){ + $nombre = $model_papelGenerico->where('id', $presupuestoEntity->papel_interior)->first()->nombre; + if($nombre != null) + $presupuestoEntity->papel_interior_nombre = $nombre; + } + if(!is_null($presupuestoEntity->papel_cubierta)){ + $nombre = $model_papelGenerico->where('id', $presupuestoEntity->papel_interior)->first()->nombre; + if($nombre != null) + $presupuestoEntity->papel_cubierta_nombre = $nombre; + } + if(!is_null($presupuestoEntity->papel_sobrecubierta)){ + $nombre = $model_papelGenerico->where('id', $presupuestoEntity->papel_sobrecubierta)->first()->nombre; + if($nombre != null) + $presupuestoEntity->papel_sobrecubierta_nombre = $nombre; + } + if(!is_null($presupuestoEntity->papel_guardas)){ + $nombre = $model_papelGenerico->where('id', $presupuestoEntity->papel_guardas)->first()->nombre; + if($nombre != null) + $presupuestoEntity->papel_guardas_nombre = $nombre; + } + } + + protected function generarTitulo($presupuestoEntity){ + + $model = model('App\Models\Configuracion\TipoPresupuestoModel'); + $codigo = $model->where('id', $presupuestoEntity->tipo_impresion_id)->first()->codigo; + $titulo = lang('Presupuestos.titulos.'.$codigo); + return $titulo; + } + + protected function obtenerTamanio($presupuestoEntity){ + + $ancho = 0; + $alto = 0; + + $model = model('App\Models\Presupuestos\PresupuestoModel'); + $data = $model->where('id', $presupuestoEntity->id)->first(); + + if($data != null){ + if($data->papel_formato_personalizado == 0){ + + $model_papel_formato = model('App\Models\Configuracion\PapelFormatoModel'); + $data_papel_formato = $model_papel_formato->where('id', $data->papel_formato_id)->first(); + $ancho = $data_papel_formato->ancho; + $alto = $data_papel_formato->alto; + } + else{ + $ancho = $data->papel_formato_ancho; + $alto = $data->papel_formato_alto; + } + } + + return $ancho . "x" . $alto; + } + + protected function obtenerTipoImpresion($presupuestoEntity){ + + $id = $presupuestoEntity->id; + + $isColor = false; + $isHq = false; + + $model = model('App\Models\Presupuestos\PresupuestoLineaModel'); + $data = $model->where('presupuesto_id', $id)->findAll(); + if (count($data) > 0) { + foreach ($data as $linea) { + if (strpos($linea->tipo, "hq") !== false) { + $isHq = true; + } + if (strpos($linea->tipo, "color") !== false) { + $isColor = true; + } + } + } + $tipo = "" . ($isColor ? "Color" : "Negro") . " " . ($isHq ? "premium" : "estándar"); + return $tipo; + } } diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php index 96b1646b..efd583a9 100755 --- a/ci4/app/Language/es/Presupuestos.php +++ b/ci4/app/Language/es/Presupuestos.php @@ -276,6 +276,17 @@ return [ 'actualizacionSolapasCubierta' => 'El tamaño de las solapas de la cubierta se ha actualizado debido a que supera el máximo permitido (este valor depende del ancho del libro y del número de páginas).', 'actualizacionSolapasSobrecubierta' => 'El tamaño de las solapas de la sobrecubierta se ha actualizado debido a que supera el máximo permitido (este valor depende del ancho del libro y del número de páginas).', + 'titulos' => [ + 'libroFresadoTapaDura' => 'Rústica Fresado tapa dura', + 'libroFresadoTapaBlanda' => 'Rústica Fresado tapa blanda', + 'libroCosidoTapaDura' => 'Rústica Cosido tapa dura', + 'libroCosidoTapaBlanda' => 'Rústica Cosido tapa blanda', + 'libroEspiralTapaDura' => 'Espiral tapa dura', + 'libroEspiralTapaBlanda' => 'Espiral tapa blanda', + 'libroWireoTapaDura' => 'Wire-o tapa dura', + 'libroWireoTapaBlanda' => 'Wire-o tapa blanda', + 'libroGrapado' => 'Grapado', + ], 'validation' => [ 'decimal' => 'El campo {field} debe contener un número decimal.', diff --git a/ci4/app/Models/Clientes/ClienteDireccionesModel.php b/ci4/app/Models/Clientes/ClienteDireccionesModel.php index 09d8f385..5ea8db63 100755 --- a/ci4/app/Models/Clientes/ClienteDireccionesModel.php +++ b/ci4/app/Models/Clientes/ClienteDireccionesModel.php @@ -141,6 +141,25 @@ class ClienteDireccionesModel extends \App\Models\BaseModel return $builder->get()->getResultObject(); } + + public function getIdForPresupuestoCliente($cliente_id = -1, $att = "", $email = "", $direccion = "", $cp = "", $pais_id = -1, $telefono = "") + { + $builder = $this->db + ->table($this->table . " t1") + ->select("t1.id AS id") + ->where("t1.cliente_id", $cliente_id) + ->where("t1.att", $att) + ->where("t1.email", $email) + ->where("t1.direccion", $direccion) + ->where("t1.cp", $cp) + ->where("t1.pais_id", $pais_id) + ->where("t1.telefono", $telefono) + ->limit(1); + + + return $builder->get()->getResultObject(); + } + public function getMenuDirecciones($cliente_id=-1){ diff --git a/ci4/app/Models/Presupuestos/PresupuestoLineaModel.php b/ci4/app/Models/Presupuestos/PresupuestoLineaModel.php index 50aa87b6..6a34a602 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoLineaModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoLineaModel.php @@ -504,12 +504,12 @@ class PresupuestoLineaModel extends \App\Models\BaseModel 'rotativa_clicks_libro' => $new_linea['clicks_libro'], 'rotativa_clicks_total' => $new_linea['clicks_pedido'], 'rotativa_precio_tinta' => $new_linea['precio_tinta'], + 'rotativa_mxm' => $new_linea['maquina_velocidad'], ]; } if (strpos($new_linea['tipo_linea'], 'rot') !== false) { $data += [ - 'rotativa_mxm' => $new_linea['maquina_velocidad'], 'rotativa_metros_libro' => $new_linea['metros_papel_libro'], 'rotativa_metros_total' => $new_linea['metros_papel_total'], 'rotativa_velocidad_corte' => $new_linea['velocidad_corte'], @@ -521,7 +521,7 @@ class PresupuestoLineaModel extends \App\Models\BaseModel } if($new_linea['tipo_linea'] =='lp_guardas') - array_push($data, ['paginas_impresion' => $new_linea['paginas_impresion']]); + $data = array_merge($data, ['paginas_impresion' => $new_linea['paginas_impresion']]); return $this->db ->table($this->table . " t1") diff --git a/ci4/app/Models/Presupuestos/PresupuestoModel.php b/ci4/app/Models/Presupuestos/PresupuestoModel.php index 0cc6e398..4a2ee863 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoModel.php @@ -372,11 +372,11 @@ class PresupuestoModel extends \App\Models\BaseModel $this->db ->table($this->table . " t1") ->where('t1.id', $presupuesto_id) - ->set('t1.estado', 2) + ->set('t1.estado_id', 2) ->update(); } - function insertarPresupuestoCliente($tirada, $data, $data_cabecera, $extra_info, $resumen_totales, $iva_reducido, $tiradas_alternativas) + function insertarPresupuestoCliente($id, $tirada, $data, $data_cabecera, $extra_info, $resumen_totales, $iva_reducido, $excluir_rotativa, $tiradas_alternativas) { helper('date'); @@ -459,11 +459,22 @@ class PresupuestoModel extends \App\Models\BaseModel 'total_factor_ponderado' => round(($totalCostes + $totalMargenes-$resumen_totales['coste_envio']-$resumen_totales['margen_envio'])/$resumen_totales['sumForFactorPonderado'], 2), 'iva_reducido' => $iva_reducido, + 'excluir_rotativa' => $excluir_rotativa, ]; + if($id != 0){ + $fields['id'] = $id; + $fields['updated_at'] = date('Y-m-d H:i:s', now()); + } - $this->db->table($this->table)->insert($fields); - return $this->db->insertID(); + if($id != 0){ + $this->db->table($this->table)->where('id', $id)->update($fields); + return $id; + } + else{ + $this->db->table($this->table)->insert($fields); + return $this->db->insertID(); + } } private function generateJson($data) diff --git a/ci4/app/Services/PresupuestoClienteService.php b/ci4/app/Services/PresupuestoClienteService.php index abd5b778..83c76725 100644 --- a/ci4/app/Services/PresupuestoClienteService.php +++ b/ci4/app/Services/PresupuestoClienteService.php @@ -243,7 +243,6 @@ class PresupuestoClienteService extends BaseService $paginas_negro = $datosPedido->paginas - $paginas_color; - $linea_negro_plana = []; $linea_color_plana = []; @@ -290,6 +289,7 @@ class PresupuestoClienteService extends BaseService // Color if ($paginas_color > 0) { + $datosPedido->paginas = $paginas_color; for ($i = 0; $i < 2; $i++) { $lineas = PresupuestoService::obtenerComparadorPlana([ @@ -322,7 +322,7 @@ class PresupuestoClienteService extends BaseService } ); $linea_color_plana = $linea_color_plana[0]['fields']; - $linea_negro_plana['tipo_linea'] = $isHq ? 'lp_colorhq' : 'lp_color'; + $linea_color_plana['tipo_linea'] = $isHq ? 'lp_colorhq' : 'lp_color'; } } return [$linea_negro_plana, $linea_color_plana]; diff --git a/ci4/app/Services/PresupuestoService.php b/ci4/app/Services/PresupuestoService.php index 12b0785e..ced9f6a7 100755 --- a/ci4/app/Services/PresupuestoService.php +++ b/ci4/app/Services/PresupuestoService.php @@ -807,8 +807,8 @@ class PresupuestoService extends BaseService { try { - if ($precioClick > 0 && $velocidadMaquina > 0) - $minutos = (1.0 * $totalClicks / $precioClick) / $velocidadMaquina; + if (floatval($precioClick) > 0 && floatval($velocidadMaquina) > 0) + $minutos = (1.0 * floatval($totalClicks) / floatval($precioClick)) / floatval($velocidadMaquina); else $minutos = 0; @@ -822,8 +822,8 @@ class PresupuestoService extends BaseService { try { - if ($precioClick > 0 && $velocidadMaquina > 0) - $horas = (1.0 * $totalClicks / $precioClick) / $velocidadMaquina / 60.0; + if (floatval($precioClick) > 0 && floatval($velocidadMaquina) > 0) + $horas = (1.0 * floatval($totalClicks) / floatval($precioClick)) / floatval($velocidadMaquina) / 60.0; else $horas = 0; @@ -1767,6 +1767,20 @@ class PresupuestoService extends BaseService if(empty($linea)) continue; + if(!array_key_exists('tipo_linea', $linea['fields'])){ + if($isColor){ + if($isHq) + $linea['fields']['tipo_linea'] = 'lp_colorhq'; + else + $linea['fields']['tipo_linea'] = 'lp_color'; + } + else{ + if($isHq) + $linea['fields']['tipo_linea'] = 'lp_bnhq'; + else + $linea['fields']['tipo_linea'] = 'lp_bn'; + } + } array_push($lineas, $linea); } } diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_direccionesItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_direccionesItems.php index 149ff801..eb4fe1d7 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_direccionesItems.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_direccionesItems.php @@ -32,13 +32,14 @@
- - +
section("additionalInlineJs") ?> +window.direcciones = direcciones_envio) ?>; +window.direcciones_sel_tirada = selected_tirada) ?>; window.routes_direcciones = { direcciones: "", getDatos: "", diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_disenioLibroItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_disenioLibroItems.php index 3cd9e9a9..b54582ff 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_disenioLibroItems.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_disenioLibroItems.php @@ -210,7 +210,7 @@ - + @@ -311,10 +311,10 @@
@@ -329,14 +329,14 @@
- + solapas == true ? 'checked' : ''; ?>>
- @@ -373,13 +373,23 @@
- + papel_sobrecubierta) && $presupuestoEntity->papel_sobrecubierta>0) : + echo 'checked'; + endif; ?> + >
- +
papel_sobrecubierta) && $presupuestoEntity->papel_sobrecubierta>0) : + echo ''; + else: + echo 'style="display: none;"'; + endif; ?> + > Papel
@@ -403,18 +413,36 @@
- +
papel_sobrecubierta) && $presupuestoEntity->papel_sobrecubierta>0) : + echo ''; + else: + echo 'style="display: none;"'; + endif; ?> + > Opciones extra
-