public async Task <IActionResult> Create([Bind("IdVacuna,Nombre,Descripcion")] Vacuna vacuna)
        {
            if (ModelState.IsValid)
            {
                _context.Add(vacuna);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(vacuna));
        }
        public async Task <IActionResult> Create([Bind("IdEstancia,Nombre,Estado")] Estancia estancia)
        {
            if (ModelState.IsValid)
            {
                _context.Add(estancia);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(estancia));
        }
        public async Task <IActionResult> Create([Bind("IdPersona,Nombres,Apellidos,Ci,FechaNacimiento,Estado")] Persona persona)
        {
            if (ModelState.IsValid)
            {
                _context.Add(persona);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(persona));
        }
        public async Task <IActionResult> Create([Bind("IdRelacion,IdProgenitor,IdHijo,Estado")] Relacion relacion)
        {
            if (ModelState.IsValid)
            {
                _context.Add(relacion);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["IdHijo"]       = new SelectList(_context.Ganado, "IdGanado", "Tag", relacion.IdHijo);
            ViewData["IdProgenitor"] = new SelectList(_context.Ganado, "IdGanado", "Tag", relacion.IdProgenitor);
            return(View(relacion));
        }
        public async Task <IActionResult> Create([Bind("IdRazonCancelacion,IdOrden,IdCancelacion,Glosa,Estado")] Cancelacion cancelacion)
        {
            if (ModelState.IsValid)
            {
                var ordenCancelada = _context.Orden.Where(orden => orden.IdOrden == cancelacion.IdOrden).First();
                ordenCancelada.Estado = (int)Orden.Estados.Cancelado;
                _context.Update(ordenCancelada);

                _context.Add(cancelacion);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["IdCancelacion"] = new SelectList(_context.RazonCancelacion, "IdRazonCancelacion", "Nombre", cancelacion.IdCancelacion);
            ViewData["IdOrden"]       = new SelectList(_context.Orden, "IdOrden", "IdOrden", cancelacion.IdOrden);
            return(View(cancelacion));
        }
Exemple #6
0
        public async Task <IActionResult> Create([Bind("IdGanado,IdRaza,IdEstancia,IdEstanciaOrigen,IdGenero,Tag,FechaNacimiento,FechaIngreso,Estado")] Ganado ganado, [Bind("IdRazonMovimiento")] Movimiento movimiento, [Bind("IdPadre", "IdMadre")] Relacion relacion)
        {
            if (ModelState.IsValid)
            {
                // Validaciones
                if (ganado.FechaIngreso < ganado.FechaNacimiento)
                {
                    return(View("~/Views/Shared/Error.cshtml"));
                }

                using (var transaccion = _context.Database.BeginTransaction())
                {
                    try
                    {
                        // Se crea el builder basandose en el ganado obtenido por binding
                        GanadoBuilder builder = new GanadoBuilder(ganado);

                        // Se crea el movimiento
                        movimiento.IdGanado        = ganado.IdGanado;
                        movimiento.FechaMovimiento = ganado.FechaIngreso;

                        builder.AsignarMovimiento(movimiento);

                        // Se verifica si se va a registrar una relación
                        if (movimiento.IdRazonMovimiento == RazonMovimiento.Tipo.Nacimiento)
                        {
                            if (relacion.IdPadre == null && relacion.IdMadre == null)
                            {
                                transaccion.Rollback();
                                return(View("~/Views/Shared/Error.cshtml"));
                            }

                            Models.Relacion relPadre = null;
                            if (relacion.IdPadre != null)
                            {
                                relPadre = new Models.Relacion();
                                relPadre.IdProgenitor = (int)relacion.IdPadre;
                                relPadre.IdHijo       = ganado.IdGanado;
                            }
                            Models.Relacion relMadre = null;
                            if (relacion.IdMadre != null)
                            {
                                relMadre = new Models.Relacion();
                                relMadre.IdProgenitor = (int)relacion.IdMadre;
                                relMadre.IdHijo       = ganado.IdGanado;
                            }
                            builder.AsignarRelacion(relPadre, relMadre);
                        }

                        _context.Add(ganado);
                        await _context.SaveChangesAsync();

                        transaccion.Commit();
                    }
                    catch (Exception)
                    {
                        transaccion.Rollback();
                        return(View("~/Views/Shared/Error.cshtml"));
                    }
                    return(RedirectToAction(nameof(Index)));
                }
            }

            ViewData["IdEstancia"] = new SelectList(_context.Estancia, "IdEstancia", "Nombre", ganado.IdEstancia);
            ViewData["IdGenero"]   = new SelectList(_context.Genero, "IdGenero", "Nombre", ganado.IdGenero);
            ViewData["IdRaza"]     = new SelectList(_context.Raza, "IdRaza", "Nombre", ganado.IdRaza);
            return(View(ganado));
        }
        public async void Generar()
        {
            List <DateTime> fechas = new List <DateTime>();

            for (int i = 0; i < Cantidad; i++)
            {
                fechas.Add(FechaAleatoria(FechaInicio, DateTime.Now));
            }
            fechas.Sort((a, b) => a.CompareTo(b));

            for (int i = 0; i < Cantidad; i++)
            {
                using (SCGContext context = new SCGContext())
                {
                    using (var transaction = context.Database.BeginTransaction())
                    {
                        var lista = await context.Ganado.Where(x => x.Estado == 1).ToListAsync();

                        foreach (var val in lista)
                        {
                            if (_rand.NextDouble() < ProbabilidadSalida)
                            {
                                var prob = ((fechas[i] - val.FechaNacimiento).Value.TotalDays / 365) / 6;
                                if (_rand.NextDouble() < prob)
                                {
                                    val.Estado = Ganado.Estados.Baja;
                                    Movimiento salida = new Movimiento();
                                    salida.FechaMovimiento = fechas[i];
                                    salida.IdGanado        = val.IdGanado;
                                    if (_rand.NextDouble() < ProbabilidadMuerte)
                                    {
                                        salida.IdRazonMovimiento = Muertes[_rand.Next(0, Muertes.Count)];
                                    }
                                    else
                                    {
                                        salida.IdRazonMovimiento = 7;
                                    }
                                    context.Movimiento.Add(salida);
                                    await context.SaveChangesAsync();
                                }
                            }
                        }

                        Ganado animal = new Ganado();
                        // TAG
                        animal.Tag = (i + 100).ToString() + randomChar + randomChar + randomChar;
                        // Genero
                        if (_rand.NextDouble() < ProbabilidadMacho)
                        {
                            animal.IdGenero = Genero.Tipo.Macho;
                        }
                        else
                        {
                            animal.IdGenero = Genero.Tipo.Hembra;
                        }

                        if (_rand.NextDouble() < ProbabilidadNelore)
                        {
                            animal.IdRaza = 1;
                        }
                        else
                        {
                            animal.IdRaza = Razas[_rand.Next(0, Razas.Count)];
                        }

                        animal.IdEstancia = 1;

                        bool compra = _rand.NextDouble() > ProbabilidadNacimiento;
                        if (compra)
                        {
                            animal.IdEstanciaOrigen = Estancia[_rand.Next(0, Estancia.Count)];
                        }
                        else
                        {
                            animal.IdEstanciaOrigen = 1;
                        }

                        animal.FechaNacimiento = fechas[i];
                        animal.FechaIngreso    = fechas[i];

                        context.Ganado.Add(animal);
                        await context.SaveChangesAsync();

                        // Movimiento
                        Movimiento movimiento = new Movimiento();
                        movimiento.FechaMovimiento = fechas[i];

                        if (compra)
                        {
                            movimiento.IdRazonMovimiento = RazonMovimiento.Tipo.Compra;
                        }
                        else
                        {
                            movimiento.IdRazonMovimiento = RazonMovimiento.Tipo.Nacimiento;
                            // Madre y Padre(Probabilidad) de mas de 2 años random
                            Ganado padre = null, madre = null;
                            if (_rand.NextDouble() < ProbabilidadPadre)
                            {
                                var colPadre = await context.Ganado.Where(x => x.Estado == Ganado.Estados.Activo && x.IdGenero == Genero.Tipo.Macho && (DateTime.Now - x.FechaNacimiento) > TimeSpan.FromDays(365 * 2)).ToListAsync();

                                if (colPadre.Count != 0)
                                {
                                    padre = colPadre[_rand.Next(0, colPadre.Count)];
                                }

                                if (padre != null)
                                {
                                    Relacion relPadre = new Relacion();
                                    relPadre.IdHijo       = animal.IdGanado;
                                    relPadre.IdProgenitor = padre.IdGanado;
                                    context.Relacion.Add(relPadre);
                                    await context.SaveChangesAsync();
                                }
                            }
                            var colMadre = await context.Ganado.Where(x => x.Estado == Ganado.Estados.Activo && x.IdGenero == Genero.Tipo.Hembra && (DateTime.Now - x.FechaNacimiento) > TimeSpan.FromDays(365 * 2)).ToListAsync();

                            if (colMadre.Count != 0)
                            {
                                padre = colMadre[_rand.Next(0, colMadre.Count)];
                            }

                            if (madre != null)
                            {
                                Relacion relMadre = new Relacion();
                                relMadre.IdHijo       = animal.IdGanado;
                                relMadre.IdProgenitor = madre.IdGanado;
                                context.Relacion.Add(relMadre);
                                await context.SaveChangesAsync();
                            }

                            if (padre == null && madre == null)
                            {
                                movimiento.IdRazonMovimiento = RazonMovimiento.Tipo.Compra;
                            }
                        }
                        movimiento.IdGanado = animal.IdGanado;
                        context.Movimiento.Add(movimiento);
                        await context.SaveChangesAsync();

                        transaction.Commit();
                    }
                }
            }
        }
        public async Task <IActionResult> Create([Bind("IdOrden,FechaPlanificacion,Razon,Estado")] Orden orden)
        {
            var hayPesaje     = (Request.Form["hayPesaje"] == "on");
            var hayInspeccion = (Request.Form["hayInspeccion"] == "on");
            var hayVacunacion = (Request.Form["hayVacunacion"] == "on");


            Abstracciones.OrdenBuilder builder = new Abstracciones.OrdenBuilder(orden.FechaPlanificacion, orden.Razon);
            var seleccionados = (Request.Form["PlanificacionVacunacion"].ToList());

            //Pesaje
            if (hayPesaje)
            {
                builder.WithPesaje(true);
            }
            else
            {
                builder.WithPesaje(false);
            }

            //Inspeccion
            if (hayInspeccion)
            {
                builder.WithInspeccion(true);
            }
            else
            {
                builder.WithInspeccion(false);
            }

            //Vacunacion
            if (hayVacunacion)
            {
                builder.WithVacunacion(true, seleccionados);
            }
            else
            {
                builder.WithVacunacion(false, null);
            }

            orden = builder.GetOrden();
            if (ModelState.IsValid)
            {
                using (var transaccion = _context.Database.BeginTransaction())
                {
                    try
                    {
                        if (orden.FechaPlanificacion < DateTime.Now)
                        {
                            return(View("~/Views/Shared/Error.cshtml"));
                        }
                        _context.Add(orden);
                        await _context.SaveChangesAsync();



                        orden.Conteo.First().IdOrden = orden.IdOrden;
                        Conteo cont = orden.Conteo.First();
                        _context.Add(cont);

                        if (orden.Vacunacion != null)
                        {
                            orden.Vacunacion.First().IdOrden = orden.IdOrden;
                            _context.Add(orden.Vacunacion.First());
                            foreach (PlanificacionVacunacion plan in orden.Vacunacion.First().PlanificacionVacunacion)
                            {
                                plan.IdVacuna = orden.Vacunacion.First().IdVacunacion;
                                _context.Add(plan);
                            }
                        }
                        if (orden.Inspeccion != null)
                        {
                            orden.Inspeccion.First().IdOrden = orden.IdOrden;
                            _context.Add(orden.Inspeccion.First());
                        }
                        if (orden.Pesaje != null)
                        {
                            orden.Pesaje.First().IdOrden = orden.IdOrden;
                            _context.Add(orden.Pesaje.First());
                        }
                        transaccion.Commit();
                    }
                    catch
                    {
                        transaccion.Rollback();
                        return(View("~/Views/Shared/Error.cshtml"));

                        throw;
                    }
                    return(RedirectToAction(nameof(Index)));
                }
            }
            return(View(orden));
        }
        public async void Generar()
        {
            for (int i = 2006; i <= 2019; i++)
            {
                List <int> vacunaciones = new List <int>()
                {
                    _rand.Next(2, 4), _rand.Next(5, 7), _rand.Next(10, 13)
                };
                // Todos se dan entre el dia 05 - 25
                for (int j = 1; j <= 12; j++)
                {
                    var inicio = DateTime.Parse(string.Format("05/{0}/{1}", j, i));
                    var fin    = DateTime.Parse(string.Format("25/{0}/{1}", j, i));
                    var fecha  = FechaAleatoria(inicio, fin);

                    bool existeInspeccion = false;
                    bool existeVacunacion = false;
                    bool existePesaje     = false;
                    using (SCGContext context = new SCGContext())
                    {
                        using (var transaction = context.Database.BeginTransaction())
                        {
                            var ganado = await context.Ganado.Where(x => x.Estado == Ganado.Estados.Activo && x.FechaIngreso <= fecha).ToListAsync();

                            var orden = new Orden()
                            {
                                FechaPlanificacion = fecha,
                                Razon = string.Empty
                            };

                            context.Orden.Add(orden);
                            await context.SaveChangesAsync();

                            var conteo = new Conteo()
                            {
                                IdOrden = orden.IdOrden
                            };
                            context.Conteo.Add(conteo);
                            await context.SaveChangesAsync();

                            var inspeccion = new Inspeccion()
                            {
                                IdOrden = orden.IdOrden
                            };
                            if (_rand.NextDouble() < ProbabilidadInspeccion)
                            {
                                context.Inspeccion.Add(inspeccion);
                                await context.SaveChangesAsync();

                                existeInspeccion = true;
                            }

                            var pesaje = new Pesaje()
                            {
                                IdOrden = orden.IdOrden
                            };
                            if (_rand.NextDouble() < ProbabilidadPesaje)
                            {
                                context.Pesaje.Add(pesaje);
                                await context.SaveChangesAsync();

                                existePesaje = true;
                            }

                            // Mes de vacunacion
                            Vacunacion vacunacion = new Vacunacion()
                            {
                                IdOrden = orden.IdOrden
                            };
                            int vacunasMax   = _rand.Next(2, 5);
                            var listaVacunas = vacunasRandom(vacunasMax);
                            if (vacunaciones.Exists(x => x == j))
                            {
                                context.Vacunacion.Add(vacunacion);
                                await context.SaveChangesAsync();

                                for (int k = 0; k < listaVacunas.Count; k++)
                                {
                                    PlanificacionVacunacion pv = new PlanificacionVacunacion()
                                    {
                                        IdVacunacion = vacunacion.IdVacunacion
                                    };
                                    pv.IdVacuna = listaVacunas[k];
                                    context.PlanificacionVacunacion.Add(pv);
                                    await context.SaveChangesAsync();
                                }
                                existeVacunacion = true;
                            }


                            /// A PARTIR DE ACA SE COMPLETAN LAS ACTIVIDADES
                            foreach (var val in ganado)
                            {
                                ResultadoConteo rc = new ResultadoConteo()
                                {
                                    IdConteo = conteo.IdConteo, IdGanado = val.IdGanado, Asistencia = 0
                                };
                                if (_rand.NextDouble() < ProbabilidadAsistencia)
                                {
                                    rc.Asistencia = 1;
                                }
                                else
                                {
                                    rc.Asistencia = 0;
                                }

                                context.ResultadoConteo.Add(rc);
                                await context.SaveChangesAsync();

                                if (existeInspeccion)
                                {
                                    if (_rand.NextDouble() < ProbabilidadPadecimiento)
                                    {
                                        var ri = new ResultadoInspeccion()
                                        {
                                            IdInspeccion = inspeccion.IdInspeccion, IdGanado = val.IdGanado
                                        };
                                        context.ResultadoInspeccion.Add(ri);
                                        await context.SaveChangesAsync();

                                        InspeccionPadecimiento ip = new InspeccionPadecimiento()
                                        {
                                            IdResultadoInspeccion = ri.IdResultadoInspeccion
                                        };
                                        ip.IdPadecimiento = Padecimientos[_rand.Next(0, Padecimientos.Count)];
                                        context.InspeccionPadecimiento.Add(ip);
                                        await context.SaveChangesAsync();
                                    }
                                }

                                if (existePesaje)
                                {
                                    bool invierno = false;
                                    var  rp       = new ResultadoPesaje()
                                    {
                                        IdGanado = val.IdGanado, IdPesaje = pesaje.IdPesaje
                                    };
                                    int edad = (int)Math.Round((fecha - val.FechaNacimiento).Value.TotalDays / 365);
                                    if (fecha.Month > 4 && fecha.Month < 9)
                                    {
                                        invierno = true;
                                    }
                                    rp.Peso = calcularPeso(edad, invierno);

                                    context.ResultadoPesaje.Add(rp);
                                    await context.SaveChangesAsync();
                                }

                                if (existeVacunacion)
                                {
                                    var rv = new ResultadoVacunacion()
                                    {
                                        IdGanado = val.IdGanado, IdVacunacion = vacunacion.IdVacunacion
                                    };
                                    context.ResultadoVacunacion.Add(rv);
                                    await context.SaveChangesAsync();

                                    for (int k = 0; k < listaVacunas.Count; k++)
                                    {
                                        var va = new VacunaAplicada()
                                        {
                                            IdResultadoVacunacion = rv.IdResultadoVacunacion, IdVacuna = listaVacunas[k]
                                        };
                                        context.VacunaAplicada.Add(va);
                                        await context.SaveChangesAsync();
                                    }
                                }
                            }

                            transaction.Commit();
                        }
                    }
                }
            }
        }