public IActionResult ObtenerIngresosEgresos(OperacionesEntrada operacionesEntrada)
        {
            var res = _vinculador.vincular(operacionesEntrada);

            Console.WriteLine(JsonConvert.SerializeObject(res, Formatting.Indented));
            return(Ok(res));
        }
        public OperacionesEntrada filtrar(OperacionesEntrada operaciones)
        {
            operaciones.ingresos = operaciones.ingresos.FindAll(x => {
                DateTime date = x.fechaCreacion.AddDays(x.periodoAceptabilidad);

                return(DateTime.Now < date && DateTime.Now > x.fechaCreacion);
            });
            return(operaciones);
        }
Exemplo n.º 3
0
 public OperacionesEntrada ordenar(OperacionesEntrada operaciones)
 {
     if (_ordenamientoMayor)
     {
         operaciones.egresos  = operaciones.egresos.OrderByDescending(e => e.importe).ToList();
         operaciones.ingresos = operaciones.ingresos.OrderByDescending(i => i.importe).ToList();
         return(operaciones);
     }
     else
     {
         operaciones.egresos  = operaciones.egresos.OrderBy(e => e.importe).ToList();
         operaciones.ingresos = operaciones.ingresos.OrderBy(i => i.importe).ToList();
         return(operaciones);
     }
 }
Exemplo n.º 4
0
 public OperacionesEntrada ordenar(OperacionesEntrada operaciones)
 {
     filtros.ForEach(x => operaciones = x.filtrar(operaciones));
     if (_ordenamientoMayor)
     {
         operaciones.egresos  = operaciones.egresos.OrderByDescending(e => e.fechaCreacion).ToList();
         operaciones.ingresos = operaciones.ingresos.OrderByDescending(i => i.fechaCreacion).ToList();
         return(operaciones);
     }
     else
     {
         operaciones.egresos  = operaciones.egresos.OrderBy(e => e.fechaCreacion).ToList();
         operaciones.ingresos = operaciones.ingresos.OrderBy(i => i.fechaCreacion).ToList();
         return(operaciones);
     }
 }
Exemplo n.º 5
0
        public OperacionesSalida vincular(OperacionesEntrada operacionesEntrada)
        {
            bool ejecutar = true;
            OperacionesSalida operacionesSalida = new OperacionesSalida();

            operacionesSalida.egresos  = new List <EgresoSalida>();
            operacionesSalida.ingresos = new List <IngresoSalida>();
            List <CriterioOrdenamiento> criterioOrdenamientos = operacionesEntrada.criterios;
            int asignacionesEficaces  = 0;
            int asignacionesParciales = 0;

            if (operacionesEntrada.ingresos.Count > 0 && operacionesEntrada.egresos.Count > 0)
            {
                while (ejecutar)
                {
                    foreach (var criterio in criterioOrdenamientos)
                    {
                        if (!ejecutar)
                        {
                            break;
                        }
                        asignacionesEficaces = criterio.cantAsignacionesEficaces;
                        setStrategy(criterio);
                        _ordenador.ordenar(operacionesEntrada);
                        if (operacionesEntrada.ingresos.Count > 0 && operacionesEntrada.egresos.Count > 0)
                        {
                            while (asignacionesParciales < asignacionesEficaces && ejecutar)
                            {
                                ejecutar = _criterioVinculacion.asignar(operacionesEntrada, operacionesSalida);

                                asignacionesParciales++;
                            }
                            asignacionesParciales = 0;
                        }
                    }
                }
            }
            return(operacionesSalida);
        }
        public bool asignar(OperacionesEntrada operacionesEntrada, OperacionesSalida operacionesSalida)
        {
            double importesAsignados = 0;

            IngresoEntrada ingresoAnalizar = ListHelper.RemoveAndGetItem(operacionesEntrada.ingresos, 0); //puede romper
            IngresoSalida  ingresoSalida   = new IngresoSalida();

            ingresoSalida.egresos   = new List <int>();
            ingresoSalida.idIngreso = ingresoAnalizar.idIngreso;

            if (operacionesEntrada.ingresos.Count == 0) //si es el ultimo ingreso
            {
                double importeEgresosSum = operacionesEntrada.egresos.Sum(x => x.importe);
                if (importeEgresosSum >= ingresoAnalizar.importe)
                {
                    EgresoEntrada egresoEntrada = ListHelper.RemoveAndGetItem(operacionesEntrada.egresos, 0);
                    while (egresoEntrada.importe <= (ingresoAnalizar.importe - importesAsignados))
                    {
                        importesAsignados += egresoEntrada.importe;
                        ingresoSalida.egresos.Add(egresoEntrada.idEgreso);
                        egresoEntrada = ListHelper.RemoveAndGetItem(operacionesEntrada.egresos, 0);
                    }
                    operacionesSalida.ingresos.Add(ingresoSalida);
                }
                return(false);
            }
            else
            {
                if (operacionesEntrada.egresos.Count > 1)
                {
                    EgresoEntrada egresoEntrada = ListHelper.RemoveAndGetItem(operacionesEntrada.egresos, 0);
                    while (egresoEntrada.importe <= (ingresoAnalizar.importe - importesAsignados))
                    {
                        if (operacionesEntrada.egresos.Count == 0) //si es el ultimo ingreso
                        {
                            if (egresoEntrada.importe == ingresoAnalizar.importe)
                            {
                                ingresoSalida.egresos.Add(egresoEntrada.idEgreso);
                            }
                            return(false);
                        }
                        else
                        {
                            importesAsignados += egresoEntrada.importe;
                            ingresoSalida.egresos.Add(egresoEntrada.idEgreso);
                        }
                        egresoEntrada = ListHelper.RemoveAndGetItem(operacionesEntrada.egresos, 0);
                    }
                    operacionesSalida.ingresos.Add(ingresoSalida);
                }
                else
                {
                    if (operacionesEntrada.egresos.Count == 0) //si es el ultimo ingreso
                    {
                        return(false);
                    }
                    else
                    {
                        EgresoEntrada egresoEntrada = ListHelper.RemoveAndGetItem(operacionesEntrada.egresos, 0);
                        if (egresoEntrada.importe == ingresoAnalizar.importe)
                        {
                            ingresoSalida.egresos.Add(egresoEntrada.idEgreso);
                        }
                        return(false);
                    }
                }
            }
            return(true);
        }