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;
 }
Exemple #2
0
        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;

        }