generated from dcanoIESRafaelAlberti/PRO_2324_u4u5u6_libre
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Poliza.kt
187 lines (143 loc) · 6.12 KB
/
Poliza.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
package org.practicatrim2.Polizas
import org.practicatrim2.Clientes.GestionClientes
import org.practicatrim2.Consola
import java.io.BufferedWriter
import java.io.File
import java.io.FileWriter
abstract class Poliza(val gestor: GestionClientes) {
companion object {
//Resguardo de las pólizas. Cuando empiza el programa se cargan las pólizas del archivo a la lista para operar más fácilmente
val polizas = mutableListOf<MutableMap<String, List<Any>>>()
private val path = "src/main/kotlin/baseDatos/polizas.txt"
private val archivo = File(path)
}
val consola = Consola<String>()
val poliza = mutableMapOf<String, List<Any>>()
abstract fun grabarPoliza()
abstract fun datosEspecificos(): MutableList<Any>
/**
* Genera un ID único para una póliza.
* El ID se compone de dos números aleatorios de tres dígitos separados por un guion.
* Si el número aleatorio generado tiene menos de tres dígitos, se le añaden ceros por delante.
*
* @return El ID único generado.
*/
fun generarId(): String {
var id: String
do {
val numero1 = String.format("%03d", (1..999).random())
val numero2 = String.format("%03d", (1..999).random())
id = "$numero1-$numero2"
} while (poliza.containsKey(id))
return id
}
fun generarFechaAlta(): String {
//Genera una fecha aleatoria para los clientes ya guardados
val dia = String.format("%02d", (1..31).random())
val mes = String.format("%02d", (1..12).random())
val anio = (1980..2023).random().toString()
val fecha = "$dia/$mes/$anio"
return fecha
}
/**
* Busca una póliza por su ID en la lista de pólizas.
* @param id El ID de la póliza que se quiere buscar.
* @return El mapa que contiene la información de la póliza si se encuentra, o null si no se encuentra.
*/
fun buscarPoliza(dni: String): List<MutableMap<String, List<Any>>>? = polizas.filter { it.values.first().contains(dni) }
/**
* Muestra la información de una póliza identificada por su ID.
* @param id El ID de la póliza que se quiere mostrar.
*/
fun mostrarPoliza(dni: String) {
val polizas = buscarPoliza(dni)
if (polizas != null) {
for (poliza in polizas){
val id = poliza.keys.first()
consola.mostrarInfo("Datos póliza: ")
val datos = poliza.values.first()
when (datos[3]) {
"MOTO" -> consola.mostrarInfo("TipoPoliza: Moto")
"COCHE" -> consola.mostrarInfo("TipoPoliza: Coche")
"VIDA" -> consola.mostrarInfo("TipoPoliza: Vida")
"DECESO" -> consola.mostrarInfo("TipoPoliza: Deceso")
"Hogar" -> consola.mostrarInfo("TipoPoliza: Hogar")
}
consola.mostrarInfo("Id Póliza: $id")
consola.mostrarInfo("dni contratador: ${datos[0]}")
println(datos[1])
consola.mostrarInfo("Fecha alta: ${datos[2]}")
println()
consola.mostrarInfo("----------------------------------")
println()
}
} else {
consola.mostrarInfo("No se encontro la poliza con id: $dni")
}
}
/**
* Guarda una póliza en el archivo de registro.
*
* @param poliza El mapa de datos que representa la póliza a guardar. Debe contener la información de la póliza
* en el formato especificado.
*/
fun guardarPoliza(poliza: MutableMap<String, List<Any>>) {
try {
polizas.add(poliza)
val fileWriter = FileWriter(archivo, true)
val bufferedWriter = BufferedWriter(fileWriter)
bufferedWriter.write(poliza.toString())
bufferedWriter.newLine()
bufferedWriter.close()
consola.mostrarInfo("Polizas guardada correctamente")
} catch (e: Exception) {
consola.mostrarInfo("***Error***")
}
}
/**
* Guarda las pólizas del archivo de registro en la lista de pólizas.
*
* @return La lista de pólizas guardadas, representadas como mapas de datos en el formato especificado.
*/
fun guardarPolizasDelArchivo(): MutableList<MutableMap<String, List<Any>>> {
archivo.forEachLine { linea ->
val poliza = deStringAPoliza(linea)
if (poliza != null) {
polizas.add(poliza)
} else {
consola.mostrarInfo("Error en el formato de la línea: $linea")
}
}
return polizas
}
/**
* Analiza una cadena que representa una póliza y la convierte en un mapa con el ID de la póliza como clave y una lista de datos como valor.
* @param linea La cadena que representa la póliza.
* @return Un mapa que contiene el ID de la póliza como clave y una lista de datos como valor, o null si falla el análisis.
*/
private fun deStringAPoliza(linea: String): MutableMap<String, List<Any>>? {
val linea = linea.substring(1, linea.length - 1) // quita corchetes
val partes = linea.split("=", limit = 2)
val idPoliza = partes[0]
val datosStr = partes[1]
val datos = mutableListOf<Any>()
val partesDatos = datosStr.substring(1, datosStr.length - 1).split(", ")
if (partesDatos.size >= 5) {
val dni = partesDatos[2].substringAfter("dni=").trim()
val polizasStr =
partesDatos[4].substringAfter("polizas=").substringAfter("{").substringBefore("}").split("=")
val tipoPoliza = polizasStr[1]
val datosEspecificos = partesDatos.subList(5, partesDatos.size - 1)
val fecha = partesDatos.last()
datos.add(dni)
datos.add(datosEspecificos)
datos.add(fecha)
datos.add(tipoPoliza)
} else {
consola.mostrarInfo("*** Error al cargar archivos ***")
}
val poliza = mutableMapOf<String, List<Any>>()
poliza[idPoliza] = datos
return poliza
}
}