Esempio n. 1
0
        public List <CategoriaMaterial> GrupoMateriales(string vkorg, string spart, string kunnr, string soc_id, string usuario_id)
        {
            if (kunnr == null)
            {
                kunnr = "";
            }

            Cadena cad = new Cadena();

            kunnr = cad.completaCliente(kunnr);

            List <DOCUMENTOM_MOD> jd = new List <DOCUMENTOM_MOD>();


            //Validar si hay materiales
            if (db.MATERIALs.Any(x => x.MATERIALGP_ID != null && x.ACTIVO.Value))
            {
                List <CLIENTE> clil = new List <CLIENTE>();
                try
                {
                    CLIENTE cli = db.CLIENTEs.Where(c => c.KUNNR == kunnr && c.VKORG == vkorg && c.SPART == spart).FirstOrDefault();

                    //Saber si el cliente es sold to, payer o un grupo
                    if (cli != null && cli.KUNNR != cli.PAYER && cli.KUNNR != cli.BANNER)
                    {
                        clil.Add(cli);
                    }
                }
                catch (Exception e)
                {
                    Log.ErrorLogApp(e, "Listas", "grupoMateriales");
                }
                var cie = clil;
                //Obtener el numero de periodos para obtener el historial
                int?mesesVenta = (db.CONFDIST_CAT.Any(x => x.SOCIEDAD_ID == soc_id) ? db.CONFDIST_CAT.First(x => x.SOCIEDAD_ID == soc_id).PERIODOS : null);
                int nummonths  = (mesesVenta != null ? mesesVenta.Value : DateTime.Now.Month);
                int imonths    = nummonths * -1;
                //Obtener el rango de los periodos incluyendo el año
                DateTime ff = DateTime.Today;
                DateTime fi = ff.AddMonths(imonths);

                string mi = fi.Month.ToString();
                string ai = fi.Year.ToString();

                string mf = ff.Month.ToString();
                string af = ff.Year.ToString();

                int aii = 0;
                int mii = 0;
                int aff = 0;
                int mff = 0;
                try
                {
                    aii = Convert.ToInt32(ai);
                    mii = Convert.ToInt32(mi);
                    aff = Convert.ToInt32(af);
                    mff = Convert.ToInt32(mf);
                }
                catch (Exception e)
                {
                    Log.ErrorLogApp(e, "Listas", "grupoMateriales-mesesVenta");
                }


                if (cie != null)
                {
                    jd = ListaMaterialGroupsMateriales(vkorg, spart, kunnr, soc_id, aii, mii, aff, mff, usuario_id);
                }
            }

            //Obtener las categorías
            var categorias = jd.GroupBy(c => c.ID_CAT, c => new { ID = c.ID_CAT.ToString(), DESC = c.DESC }).ToList();

            List <CategoriaMaterial> lcatmat = new List <CategoriaMaterial>();

            foreach (var item in categorias)
            {
                CategoriaMaterial cm = new CategoriaMaterial();
                cm.ID      = item.Key;
                cm.EXCLUIR = jd.FirstOrDefault(x => x.ID_CAT.Equals(item.Key)).EXCLUIR; //RSG 09.07.2018 ID167

                //Obtener los materiales de la categoría
                List <DOCUMENTOM_MOD> dl;
                List <DOCUMENTOM_MOD> dm = new List <DOCUMENTOM_MOD>();
                dl = jd.Where(c => c.ID_CAT == item.Key).Select(c => new DOCUMENTOM_MOD {
                    ID_CAT = c.ID_CAT, MATNR = c.MATNR, VAL = c.VAL, DESC = c.DESC
                }).ToList();                                                                                                                                         //Falta obtener el groupby

                //Obtener la descripción de los materiales
                foreach (DOCUMENTOM_MOD d in dl)
                {
                    DOCUMENTOM_MOD dcl;
                    dcl = dm.Where(z => z.MATNR == d.MATNR).Select(c => new DOCUMENTOM_MOD {
                        ID_CAT = c.ID_CAT, MATNR = c.MATNR, VAL = c.VAL, DESC = c.DESC
                    }).FirstOrDefault();

                    if (dcl == null)
                    {
                        DOCUMENTOM_MOD dcll = new DOCUMENTOM_MOD();
                        //No se ha agregado
                        decimal val = dl.Where(y => y.MATNR == d.MATNR).Sum(x => x.VAL);
                        dcll.ID_CAT = item.Key;
                        dcll.MATNR  = d.MATNR;

                        dcll.DESC    = d.DESC;
                        dcll.VAL     = val;
                        cm.TOTALCAT += val;//ADD RSG 22.11.2018

                        dm.Add(dcll);
                    }
                }

                cm.MATERIALES = dm;
                //LEJ 18.07.2018-----------------------------------------------------------
                MATERIALGP vv = FnCommon.ObtenerMaterialGroup(db, cm.ID);
                cm.UNICA       = vv.UNICA;
                cm.DESCRIPCION = vv.DESCRIPCION;
                lcatmat.Add(cm);
            }

            if (lcatmat.Count > 0)
            {
                CategoriaMaterial nnn = new CategoriaMaterial();
                nnn.ID          = "000";
                nnn.DESCRIPCION = FnCommon.ObtenerTotalProducts(db).TXT50;
                nnn.MATERIALES  = new List <DOCUMENTOM_MOD>();
                nnn.TOTALCAT    = 0;//ADD RSG 22.11.2018
                //foreach (var item in lcatmat)//RSG 09.07.2018 ID167
                foreach (var item in lcatmat.Where(x => !x.EXCLUIR).ToList())
                {
                    foreach (var ii in item.MATERIALES)
                    {
                        DOCUMENTOM_MOD dm = new DOCUMENTOM_MOD();
                        dm.ID_CAT     = "000";
                        dm.DESC       = ii.DESC;
                        dm.MATNR      = ii.MATNR;
                        dm.POR        = ii.POR;
                        dm.VAL        = ii.VAL;
                        nnn.TOTALCAT += ii.VAL;
                        nnn.MATERIALES.Add(dm);
                    }
                }
                //LEJ 18.07.2018-----------------------------------------------------------
                nnn.UNICA = FnCommon.ObtenerMaterialGroup(db, nnn.ID).UNICA;
                lcatmat.Add(nnn);
            }


            return(lcatmat);
        }