diff --git a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php index 11a5668f..22b29d04 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php @@ -448,7 +448,9 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController 'retractilado' => model('App\Models\Configuracion\ConfigVariableModel')->getVariable('id_servicio_retractilado')->value, 'retractilado5' => model('App\Models\Configuracion\ConfigVariableModel')->getVariable('id_servicio_retractilado5')->value, 'ferro' => model('App\Models\Configuracion\ConfigVariableModel')->getVariable('id_servicio_ferro')->value, + 'ferro_2' => model('App\Models\Configuracion\ConfigVariableModel')->getVariable('id_servicio_ferro_2')->value, 'prototipo' => model('App\Models\Configuracion\ConfigVariableModel')->getVariable('id_servicio_prototipo')->value, + 'prototipo_2' => model('App\Models\Configuracion\ConfigVariableModel')->getVariable('id_servicio_prototipo_2')->value, 'solapas_grandes_cubierta' => model('App\Models\Configuracion\ConfigVariableModel')->getVariable('id_servicio_plegado_exceso_solapas_cubierta')->value, 'solapas_grandes_sobrecubierta' => model('App\Models\Configuracion\ConfigVariableModel')->getVariable('id_servicio_plegado_exceso_solapas_sobrecubierta')->value, 'solapas_grandes_faja' => model('App\Models\Configuracion\ConfigVariableModel')->getVariable('id_servicio_plegado_exceso_solapas_faja')->value, @@ -565,7 +567,6 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $modelCliente = new ClienteModel(); $modelPapelGenerico = new PapelGenericoModel(); - $presupuesto = $this->model->find($id); $data = []; if ($presupuesto) { @@ -630,7 +631,9 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $data['datosLibro']['acabadoFaja']['text'] = $modelAcabado->find($presupuesto->acabado_faja_id)->nombre; } $data['datosLibro']['prototipo'] = $presupuesto->prototipo; + $data['datosLibro']['prototipo2'] = $this->hasPrototipo2($id); $data['datosLibro']['ferro'] = $presupuesto->ferro; + $data['datosLibro']['ferro2'] = $this->hasFerro2($id); $data['datosLibro']['ferroDigital'] = $presupuesto->ferro_digital; $data['datosLibro']['marcapaginas'] = $presupuesto->marcapaginas; $data['datosLibro']['retractilado'] = $presupuesto->retractilado; @@ -659,6 +662,21 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $data['direcciones'] = $this->obtenerDireccionesEnvio($id, $presupuesto->cliente_id); } + $data['direccionesFP'] = []; + $direccionFP1 = $this->obtenerDireccionesEnvio($id, $presupuesto->cliente_id, true, 1); + if(count($direccionFP1) > 0){ + $data['direccionesFP']['fp1'] = $direccionFP1; + } else { + $data['direccionesFP']['fp1'] = []; + } + $direccionFP2 = $this->obtenerDireccionesEnvio($id, $presupuesto->cliente_id, true, 2); + if(count($direccionFP2) > 0){ + $data['direccionesFP']['fp2'] = $direccionFP2; + } else { + $data['direccionesFP']['fp2'] = []; + } + $data['direccionesFP']['checkboxes'] = json_decode($presupuesto->getDireccionFPChecks()); + $data['comentarios_cliente'] = $presupuesto->comentarios_cliente; $data['comentarios_safekat'] = $presupuesto->comentarios_safekat; $data['comentarios_pdf'] = $presupuesto->comentarios_pdf; @@ -1951,7 +1969,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController return PresupuestoService::checkLineasEnvios($direccionesEnvio); } - protected function obtenerDireccionesEnvio($id, $cliente_id) + protected function obtenerDireccionesEnvio($id, $cliente_id, $is_fp = false, $num_fp = 0) { $model = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); $model_direcciones = model('App\Models\Clientes\ClienteDireccionesModel'); @@ -1959,10 +1977,38 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController ->join('lg_proveedores', 'presupuesto_direcciones.proveedor_id = lg_proveedores.id') ->join('lg_paises', 'presupuesto_direcciones.pais_id = lg_paises.id') ->select('presupuesto_direcciones.*, lg_proveedores.nombre AS proveedor, lg_paises.nombre AS pais') - ->where('presupuesto_id', $id)->findAll(); + ->where('presupuesto_id', $id) + ->where('is_ferro_prototipo', $is_fp); + if ($is_fp) { + $direcciones = $direcciones + ->where('num_ferro_prototipo', $num_fp); + } - return $direcciones; + + return $direcciones->findAll(); } + protected function hasPrototipo2($presupuestoId){ + $servicios = (new PresupuestoServiciosExtraModel())->getResource($presupuestoId)->get()->getResultObject(); + $id_servicio = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('id_servicio_prototipo_2')->value; + foreach ($servicios as $servicio) { + if ($servicio->tarifa_extra_id == $id_servicio) { + return true; + } + } + return false; + } + + protected function hasFerro2($presupuestoId) + { + $servicios = (new PresupuestoServiciosExtraModel())->getResource($presupuestoId)->get()->getResultObject(); + $id_servicio = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('id_servicio_ferro_2')->value; + foreach ($servicios as $servicio) { + if ($servicio->tarifa_extra_id == $id_servicio) { + return true; + } + } + return false; + } } diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php index 60c3c251..32403241 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php @@ -412,6 +412,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } } + $lomo = round($lomo, 2); $errors = [ 'status' => 0, @@ -719,7 +720,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } - + // Se suma el coste de envío a cada precio unidad + for ($i = 0; $i < count($tirada); $i++) { + if($return_data['coste_envio'] && isset($return_data['coste_envio'][$i]) && $return_data['coste_envio'][$i] > 0) + $return_data['precio_u'][$i] = round(floatval($return_data['precio_u'][$i]) + $return_data['coste_envio'][$i]/$tirada[$i], 4); + } if ($this->request) { if ($this->request->isAJAX()) @@ -1381,6 +1386,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $datos_presupuesto['faja'] = $faja; + $reqData['datosCabecera'] ?? []; + $datos_presupuesto['direcciones_fp_checks'] = $reqData['direcciones_fp_checks'] ?? (object)[ + 'addFP1isAddMain' => "false", + 'addFP2isAddMain' => "false", + 'addFP2isaddFP1' => "false" + ]; + $id = $model_presupuesto->insertarPresupuestoCliente( $id, $selected_tirada, @@ -1561,11 +1573,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } if (count($direccionesFP1) > 0) { - $this->guardarLineaEnvio($id, $direccionesFP1, $peso_libro, true); + $this->guardarLineaEnvio($id, $direccionesFP1, $peso_libro, true, true, 1); } if (count($direccionesFP2) > 0) { - $this->guardarLineaEnvio($id, $direccionesFP2, $peso_libro, true); + $this->guardarLineaEnvio($id, $direccionesFP2, $peso_libro, true, true, 2); } if ($confirmar) { @@ -1708,6 +1720,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $data['direcciones'] = $this->obtenerDireccionesEnvio($id); } + $direccionesFerroPrototipo = $this->obtenerDireccionesEnvioFerro($id); + if($direccionesFerroPrototipo && count($direccionesFerroPrototipo) > 0) { + $data['direccionesFerroPrototipo'] = $direccionesFerroPrototipo; + } + + $data['direccionesFPChecks'] = $presupuesto->getDireccionFPChecks(); + if (intval($presupuesto->estado_id) == 2) { $data['resumen']['base'] = $presupuesto->total_antes_descuento; $data['resumen']['total_envio'] = round( @@ -1871,7 +1890,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } - protected function guardarLineaEnvio($presupuestoId, $direccion, $peso_libro, $coste_cero = false) + protected function guardarLineaEnvio($presupuestoId, $direccion, $peso_libro, $coste_cero = false, $is_ferro_prototipo = false, $num_ferro_prototipo = 0) { $unidades = intval($direccion['unidades']); @@ -1893,6 +1912,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController unset($data->id); if($coste_cero) { $data->coste = 0; + if($is_ferro_prototipo){ + $data->is_ferro_prototipo = 1; + $data->num_ferro_prototipo = $num_ferro_prototipo; + } } else { $data->precio = $data->coste; } @@ -3426,7 +3449,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController { $model = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); $direcciones = $model->where('presupuesto_id', $id) - ->where('is_ferro_prototipo', 0)->asArray()->findAll(); + ->where('is_ferro_prototipo', 1)->get()->getResultArray(); return $direcciones; } diff --git a/ci4/app/Controllers/Presupuestos/Presupuestodirecciones.php b/ci4/app/Controllers/Presupuestos/Presupuestodirecciones.php index 93f9b848..fb348542 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestodirecciones.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestodirecciones.php @@ -55,6 +55,7 @@ class Presupuestodirecciones extends \App\Controllers\BaseResourceController $proveedor_id = $reqData['proveedor_id'] ?? ""; $entregaPieCalle = $reqData['entregaPieCalle'] ?? 0; $is_ferro_prototipo = $reqData['is_ferro_prototipo'] ?? 0; + $num_ferro_prototipo = $reqData['num_ferro_prototipo'] ?? 0; $data = [ "presupuesto_id" => $presupuesto_id, @@ -74,7 +75,8 @@ class Presupuestodirecciones extends \App\Controllers\BaseResourceController "proveedor" => $proveedor, "proveedor_id" => $proveedor_id, "entregaPieCalle" => $entregaPieCalle, - "is_ferro_prototipo" => $is_ferro_prototipo + "is_ferro_prototipo" => $is_ferro_prototipo, + "num_ferro_prototipo" => $num_ferro_prototipo ]; $response = $this->model->insert($data); diff --git a/ci4/app/Database/Migrations/2025-06-28-194500_ConfigDireccionesFerroPrototipo.php b/ci4/app/Database/Migrations/2025-06-28-194500_ConfigDireccionesFerroPrototipo.php new file mode 100644 index 00000000..e0727199 --- /dev/null +++ b/ci4/app/Database/Migrations/2025-06-28-194500_ConfigDireccionesFerroPrototipo.php @@ -0,0 +1,24 @@ +forge->addColumn('presupuestos', [ + 'direcciones_fp_checks' => [ + 'type' => 'JSON', + 'null' => false, + 'default' => '{"addFP1isAddMain": "0", "addFP2isAddMain": "0", "addFP2isaddFP1": "0"}', + 'comment' => 'valores de los checks de las direcciones ferro/prototipo', + ], + ]); + } + + public function down() + { + $this->forge->dropColumn('presupuestos', 'direcciones_fp_checks'); + } +} diff --git a/ci4/app/Database/Migrations/2025-07-02-141500_AumentoLomoFijo.php b/ci4/app/Database/Migrations/2025-07-02-141500_AumentoLomoFijo.php new file mode 100644 index 00000000..4c5d7e80 --- /dev/null +++ b/ci4/app/Database/Migrations/2025-07-02-141500_AumentoLomoFijo.php @@ -0,0 +1,25 @@ +db->table('config_variables_app')->insert([ + 'name' => 'aumento_fijo_lomo_interior', + 'value' => '1.3', + 'description' => 'Aumento fijo del lomo interior por cola (se añade en el interior)', + 'created_at' => date('Y-m-d H:i:s') + ]); + } + + public function down() + { + // Borrar los nuevos campos + $this->db->table('config_variables_app')->whereIn('name', [ + 'aumento_fijo_lomo_interior' + ])->delete(); + } +} diff --git a/ci4/app/Database/Migrations/2025-07-04-090000_FerroPrototipo2.php b/ci4/app/Database/Migrations/2025-07-04-090000_FerroPrototipo2.php new file mode 100644 index 00000000..ee46d797 --- /dev/null +++ b/ci4/app/Database/Migrations/2025-07-04-090000_FerroPrototipo2.php @@ -0,0 +1,33 @@ +db->table('config_variables_app')->insert([ + 'name' => 'id_servicio_ferro_2', + 'value' => '31', + 'description' => 'D del servicio extra "ferro (2 unidades)" que aparece en los presupuestos', + 'created_at' => date('Y-m-d H:i:s') + ]); + + $this->db->table('config_variables_app')->insert([ + 'name' => 'id_servicio_prototipo_2', + 'value' => '28', + 'description' => 'D del servicio extra "Prototipo (2 unidades)" que aparece en los presupuestos', + 'created_at' => date('Y-m-d H:i:s') + ]); + } + + public function down() + { + // Borrar los nuevos campos + $this->db->table('config_variables_app')->whereIn('name', [ + 'id_servicio_ferro_2', + 'id_servicio_prototipo_2' + ])->delete(); + } +} diff --git a/ci4/app/Entities/Presupuestos/PresupuestoEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoEntity.php index 4828eef5..00fd262e 100755 --- a/ci4/app/Entities/Presupuestos/PresupuestoEntity.php +++ b/ci4/app/Entities/Presupuestos/PresupuestoEntity.php @@ -117,6 +117,12 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity 'lomo_redondo' => null, 'cabezada' => null, 'envio_base' => null, + 'direcciones_fp_checks' => [ + 'addFP1isAddMain' => "false", + 'addFP2isAddMain' => "false", + 'addFP2isaddFP1' => "false" + ], + ]; protected $casts = [ "cliente_id" => "int", @@ -190,6 +196,7 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity 'papel_interior_diferente' => "boolean", 'paginasCuadernillo' => "int", 'lomo_redondo' => "boolean", + 'direcciones_fp_checks' => 'json', ]; /** * Devuelve la entity con un campo `presupuesto_lineas` con las lineas de presupuesto asociadas @@ -326,4 +333,15 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity } return $tipo_presupuesto; } + + public function getDireccionFPChecks() + { + return $this->attributes['direcciones_fp_checks'] ?? []; + } + + public function setDireccionFPChecks($value) + { + $this->attributes['direcciones_fp_checks'] = is_array($value) ? json_encode($value) : $value; + return $this; + } } diff --git a/ci4/app/Language/es/App.php b/ci4/app/Language/es/App.php index 568cd01f..e501c8e6 100755 --- a/ci4/app/Language/es/App.php +++ b/ci4/app/Language/es/App.php @@ -757,7 +757,7 @@ return [ "menu_tarifaextra" => "Serv. Extra", "menu_tarifamanipulado" => "Manipulado", "menu_tarifaencuadernacion" => "Encuadernación", - "menu_tarifapapelcompra" => "Papel compra", + "menu_tarifapapelcompra" => "Papel impresión", "menu_servicioAcabado" => "Servicios acabado", "menu_tarifaacabado" => "Acabado", "menu_tarifapapeldefecto" => "Papel defecto", diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php index 6e294c6b..90c4d4b1 100755 --- a/ci4/app/Language/es/Presupuestos.php +++ b/ci4/app/Language/es/Presupuestos.php @@ -80,8 +80,10 @@ return [ 'acabadoFaja' => 'Acabado Faja', 'cosido' => 'Cosido', 'ferro' => 'Ferro', + 'ferro_2' => 'Ferro (2 uds.)', 'ferroDigital' => 'Ferro Digital', 'prototipo' => 'Prototipo', + 'prototipo_2' => 'Prototipo (2 uds.)', 'imagenesBnInterior' => 'Imágenes B/N interior', 'recogerEnTaller' => 'Recoger en taller', 'marcapaginas' => 'Marcapáginas', @@ -305,7 +307,7 @@ return [ 'previewSobrecubierta' => 'Configuración del papel: Sobrecubierta', 'previewFaja' => 'Configuración del papel: Faja', 'previewPapelGenerico' => 'Papel Genérico', - 'previewPapelCompra' => 'Papel de Compra', + 'previewPapelCompra' => 'Papel Impresión', 'previewAreaImpresion' => 'Área de Impresión', 'previewPosicionFormas' => 'Posición de Formas', 'previewDetalles' => 'Detalles del trabajo', @@ -436,6 +438,9 @@ return [ 'paginas_multiplo_4' => 'El número total de páginas para cosido y grapado debe ser múltiplo de 4', 'paginas_pares' => 'El número de páginas debe ser par', 'extras_cubierta' => 'Rellene todos los campos', + + 'error_sameAddPrincipal_FP' => 'Debe añadir al menos una dirección en el envío para usarla', + 'error_sameAddFP1' => 'Debe añadir al menos una dirección en el envío del primer ferro para usarla.' ], 'errores' => [ @@ -463,6 +468,7 @@ return [ Por favor, disminuya el número de páginas o el gramaje del papel para que sea encuadernable.", 'error_lomo_minimo' => "No se pueden encuadernar libros {0} con un lomo interior inferior a {1} mm. El lomo actual es de {2} mm.
Por favor, aumente el número de páginas o el gramaje del papel para que sea encuadernable.", + 'error_direccion_principal_no_encontrada' => 'No se ha encontrado la dirección en las direcciones del cliente. Por favor, añádala antes de marcar esta opción.', ], 'resize_preview' => 'Refrescar vista esquema' diff --git a/ci4/app/Models/Presupuestos/PresupuestoModel.php b/ci4/app/Models/Presupuestos/PresupuestoModel.php index c2bc84fa..5a90c01b 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoModel.php @@ -139,6 +139,7 @@ class PresupuestoModel extends \App\Models\BaseModel 'lomo_redondo', 'cabezada', 'envio_base', + 'direcciones_fp_checks', ]; protected $returnType = "App\Entities\Presupuestos\PresupuestoEntity"; @@ -535,6 +536,8 @@ class PresupuestoModel extends \App\Models\BaseModel 'iva_reducido' => $iva_reducido, 'excluir_rotativa' => $excluir_rotativa, + 'direcciones_fp_checks' => $data['direcciones_fp_checks'] ? json_encode($data['direcciones_fp_checks']) : null, + ]; /* Actualizacion */ if ($id != 0) { diff --git a/ci4/app/Services/PresupuestoService.php b/ci4/app/Services/PresupuestoService.php index 999d787c..54cd2aa5 100755 --- a/ci4/app/Services/PresupuestoService.php +++ b/ci4/app/Services/PresupuestoService.php @@ -386,6 +386,7 @@ class PresupuestoService extends BaseService $precio_pedido = $precio_libro * ($datosPedido->tirada + $datosPedido->merma); $mano = PresupuestoService::computeLomoInterior($datosPedido->paginas, $papel_impresion->espesor); + $mano += floatval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('aumento_fijo_lomo_interior')->value); // peso $peso = PresupuestoService::computePeso( @@ -515,6 +516,7 @@ class PresupuestoService extends BaseService $data['total_corte'] = round(($data['tiempo_corte'] / 60.0) * $maquina->precio_hora_corte, 2); $data['mano'] = PresupuestoService::computeLomoInterior($datosPedido->paginas, $papel_impresion->espesor); + $data['mano'] += floatval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('aumento_fijo_lomo_interior')->value); // ($paginas / 2.0) * (($gramaje / 1000.0) * $papel_compra->mano); // peso diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosEnvios.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosEnvios.php index 891f10aa..1529f8fb 100755 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosEnvios.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosEnvios.php @@ -1,69 +1,207 @@

-

-
+
-
- -
-
- - +
+
+ +
+
+ + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
TARIFA IDpais_idProveedor_idPallets? + +
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
TARIFA IDpais_idProveedor_idPallets?Ferro o Prototipo?
-
- -
-
- recoger_en_taller == true ? 'checked' : ''; ?> > - +
+
+ recoger_en_taller == true ? 'checked' : ''; ?>> + +
-
-
-
- +
+
+ +
-
+ +
+ +
+
+
+
+ Dirección de envío ferro/prototipo +
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
TARIFA IDpais_idProveedor_idPallets? + +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+ +
+ +
+
+
+
+ Dirección de envío ferro/prototipo 2 +
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
TARIFA IDpais_idProveedor_idPallets? + +
+
+ +
+
+ + +
+
+ + +
+
+ +
+
+ +
+
+ +
-
- +
\ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosLibroItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosLibroItems.php index e481ca95..76c7a106 100755 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosLibroItems.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosLibroItems.php @@ -303,11 +303,20 @@
-
- -
+
+
+
+ +
+
+
@@ -326,6 +335,18 @@ +
+
+
+ +
+
+
+
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_presupuestoDireccionesForm.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_presupuestoDireccionesForm.php index c87a07a5..2a688713 100755 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_presupuestoDireccionesForm.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_presupuestoDireccionesForm.php @@ -1,4 +1,4 @@ -