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); }
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); } }
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); } }
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); }