jdrodas / SiembrasMiantioquia

Aplicación demostrativa usando herramientas MS .NET para demostrar conectividad a SQLite y MongoDB
1 stars 0 forks source link

Siempre que se use el Contador, se debe inicializar manualmente #23

Open LuhBello opened 1 year ago

LuhBello commented 1 year ago

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: image

LuhBello commented 1 year ago

Lo otro sería que para que se viera más bonito, se podrían ordenar según código de manera ascendente.