private List<TallaCantidad> getListaDesdeOrden(string codigoOrden) { var listaCorteDetalleOrdenadoPorCantidad = from q in _contexto.CorteDetalles where q.codigoCorte == codigoOrden orderby q.cantidad descending select q; var primeraListaTallaCantidad = new List<TallaCantidad>(); foreach (var corteDetalle in listaCorteDetalleOrdenadoPorCantidad) { var talla = new TallaCantidad(); talla.tallaCuello = corteDetalle.tallaCuello; talla.tallaManga = corteDetalle.tallaManga; talla.tallaLetra = corteDetalle.tallaLetra; talla.cantidad = (int)corteDetalle.cantidad; primeraListaTallaCantidad.Add(talla); } return primeraListaTallaCantidad; }
public List<TallaCantidad> agrupar(List<TallaCantidad> lista,int maximoSplitPorCapa) { var arrayAgrupadoPorCantidad = getListaAgrupaPorCantidad(lista); int contador = arrayAgrupadoPorCantidad.Count(); var listaYaEsta = new List<int>(); var listaEnQueSeAgrupanYDividenLasCantidadesDeLaTalla = new List<TallaCantidad>(); if (contieneAlgunaCantidadDivisible(arrayAgrupadoPorCantidad,maximoSplitPorCapa)) { #region Procedimiento Normal for (int i = 0; i < contador; i++) { #region Se Verifica que si la 'cantidadAVerificar'(arrayAgrupado) de una talla fue divisible en entre otra ambas tallas no se vuelven a evaluar var cantidadAVerificar = arrayAgrupadoPorCantidad[i].cantidad; if (!yaEsta((int)cantidadAVerificar, listaYaEsta)) { for (int j = 0; j < contador; j++) { #region Se Verifica que si la 'cantidadAVerificar'(arrayAgrupado) y la 'cantidadConLaQueSeVerifica'(arrayAgrupado) de una talla fue divisible en entre otra ambas tallas no se vuelven a evaluar var cantidaConLaQueSeVerifica = arrayAgrupadoPorCantidad[j].cantidad; if (!yaEsta((int)cantidadAVerificar, listaYaEsta) && (!yaEsta((int)cantidaConLaQueSeVerifica, listaYaEsta))) { #region Se Verifica que no se evalue la misma cantidad if (i != j) { if ((cantidadAVerificar % cantidaConLaQueSeVerifica) == 0 && (cantidadAVerificar >= maximoSplitPorCapa) && (cantidaConLaQueSeVerifica >= maximoSplitPorCapa)) //Cambio por rony mayores a eso { #region Agrega las tallas para que no se vuelvan a evaluar listaYaEsta.Add((int)cantidadAVerificar); listaYaEsta.Add((int)cantidaConLaQueSeVerifica); #endregion var cantidadDeVecesQueSeVaAPartir = cantidadAVerificar / cantidaConLaQueSeVerifica; var cantidadEnQueSePatio = cantidadAVerificar / cantidadDeVecesQueSeVaAPartir; foreach (var tallaCantidad in lista) { #region Parte las tallas cuya cantidad sean iguales a la cantidadAVerificar if (tallaCantidad.cantidad == cantidadAVerificar) { #region agrega a la listaTallasCantidad las tallas segun maximo de cuerpos o cantidadDeVecesQueSeVaAPartir for (int l = 0; l < cantidadDeVecesQueSeVaAPartir; l++) { TallaCantidad cantidaNuevaA = new TallaCantidad(); cantidaNuevaA.tallaCuello = tallaCantidad.tallaCuello; cantidaNuevaA.tallaManga = tallaCantidad.tallaManga; cantidaNuevaA.tallaLetra = tallaCantidad.tallaLetra; cantidaNuevaA.cantidad = Convert.ToInt32(cantidadEnQueSePatio); listaEnQueSeAgrupanYDividenLasCantidadesDeLaTalla.Add(cantidaNuevaA); } #endregion } if (tallaCantidad.cantidad == cantidadEnQueSePatio) { TallaCantidad cantidadNuevaB = new TallaCantidad(); cantidadNuevaB.tallaCuello = tallaCantidad.tallaCuello; cantidadNuevaB.tallaManga = tallaCantidad.tallaManga; cantidadNuevaB.tallaLetra = tallaCantidad.tallaLetra; cantidadNuevaB.cantidad = Convert.ToInt32(cantidadEnQueSePatio); listaEnQueSeAgrupanYDividenLasCantidadesDeLaTalla.Add(cantidadNuevaB); } } #endregion } } #endregion } #endregion } } #endregion } foreach (var tallaCantidad in lista) { if (yaEsta((int)tallaCantidad.cantidad, listaYaEsta)) { } else { var nuevaCantidad = new TallaCantidad(); nuevaCantidad.tallaCuello = tallaCantidad.tallaCuello; nuevaCantidad.tallaManga = tallaCantidad.tallaManga; nuevaCantidad.tallaLetra = tallaCantidad.tallaLetra; nuevaCantidad.cantidad = (int)tallaCantidad.cantidad; listaEnQueSeAgrupanYDividenLasCantidadesDeLaTalla.Add(nuevaCantidad); } } #endregion return agrupar(listaEnQueSeAgrupanYDividenLasCantidadesDeLaTalla); } else { return lista; } }
public List<TallaCantidad> redefinir(List<TallaCantidad> lista, int cantidadPorTalla) { var redefinicionDeLaListaEnQueSeAgrupanYDividenCantidadesDeLaTallas = new List<TallaCantidad>(); var listaOrdenada = Util.ordenarDescendente(lista); foreach (var tallaCantidad in listaOrdenada) { if (tallaCantidad.cantidad > cantidadPorTalla) { int repeticionesDeCuerpoExistente = Util.Redondeo(tallaCantidad.cantidad, cantidadPorTalla); int cantidadQueTraeTalla = tallaCantidad.cantidad; for (int i = 0; i < repeticionesDeCuerpoExistente; i++) { int cantidadAGuardar = 0; if (cantidadQueTraeTalla > cantidadPorTalla) { cantidadQueTraeTalla = cantidadQueTraeTalla - cantidadPorTalla; cantidadAGuardar = cantidadPorTalla; } else { cantidadAGuardar = cantidadQueTraeTalla; } TallaCantidad nuevaTallaCantiadd = new TallaCantidad(); nuevaTallaCantiadd.tallaCuello = tallaCantidad.tallaCuello; nuevaTallaCantiadd.tallaManga = tallaCantidad.tallaManga; nuevaTallaCantiadd.tallaLetra = tallaCantidad.tallaLetra; nuevaTallaCantiadd.cantidad = cantidadAGuardar; redefinicionDeLaListaEnQueSeAgrupanYDividenCantidadesDeLaTallas.Add(nuevaTallaCantiadd); } } else { redefinicionDeLaListaEnQueSeAgrupanYDividenCantidadesDeLaTallas.Add(tallaCantidad); } } return redefinicionDeLaListaEnQueSeAgrupanYDividenCantidadesDeLaTallas; }