El contador es una tabla aparte que se implementó solo en la tabla Siembras, pero si se quiere hacer genérico, se debe hacer un manejo de errores adicionales, puesto que siempre que se elimina una siembra, ese código deja de ser utilizable, ya que el contador o la sentencia que se encarga de asignar el código no se devuelve, impide que código que fueron eliminados, vuelva a usarse. Entonces, yo pensé que si hay un par de líneas más, no solo se arreglaría ese problema sino que también, el contador podría dejar de ser manual, de manera que puede llegar a implementarse en el resto de las operaciones crud de las otras tablas.
el método:
public static int ValidarCodigoSiembras()
{
string[] codigo;
int bandera = 0;
int[] array = new int[ObtieneListaInfoSiembras().Count];
string[] validacion = ObtieneListaInfoSiembras().ToArray<string>();
for (int i = 0; i < validacion.Length; i++)
{
codigo = validacion[i].ToString().Split('-');
array[bandera] = int.Parse(codigo[0]);
bandera++;
}
Array.Sort(array);
int bandera_2 = 1;
for (int i =0; i< array.Length; i++)
{
if (array[i] == bandera_2) bandera_2++; else return bandera_2;
} return array.Length+1;
}
y modificar el método ObtieneSiguienteValorContador
private static int ObtieneSiguienteValorContador(string nombreContador)
{
int siguienteValor=0;
string cadenaConexion = ObtieneCadenaConexion(idStringConexion);
var clienteDB = new MongoClient(cadenaConexion);
var miDB = clienteDB.GetDatabase(nombreDB);
switch (nombreContador)
{
case "Siembras":
siguienteValor = ValidarCodigoSiembras();
break;
/*case "Arboles":
siguienteValor = ValidarCodigoSiembras();
break;
case "Contratistas":
siguienteValor = ValidarCodigoContratistas();
break;
case "Veredas":
siguienteValor = ValidarCodigoVeredas();
break;
case "Municipios":
siguienteValor = ValidarCodigoMunicipioss();
break;*/
}
//Obtenemos el valor actual del contador
var miColeccion = miDB.GetCollection<Contador>("Contadores");
var filtroContador = new BsonDocument { { "nombre", nombreContador } };
var elContador = miColeccion.Find(filtroContador).FirstOrDefault();
//Actualizamos el contador con ese valor
miColeccion.ReplaceOne(unContador => unContador.Nombre == elContador.Nombre, elContador);
return siguienteValor;
}
Ahora se puede observar cómo los códigos van cambiando bien:
El contador es una tabla aparte que se implementó solo en la tabla Siembras, pero si se quiere hacer genérico, se debe hacer un manejo de errores adicionales, puesto que siempre que se elimina una siembra, ese código deja de ser utilizable, ya que el contador o la sentencia que se encarga de asignar el código no se devuelve, impide que código que fueron eliminados, vuelva a usarse. Entonces, yo pensé que si hay un par de líneas más, no solo se arreglaría ese problema sino que también, el contador podría dejar de ser manual, de manera que puede llegar a implementarse en el resto de las operaciones crud de las otras tablas.
el método:
y modificar el método ObtieneSiguienteValorContador
Ahora se puede observar cómo los códigos van cambiando bien: