public void CalculateFullStatistic(int week, int year, Period period)
        {
            IList <Product> lst = new ProductController(this.SessionFactoryConfigPath).GetProductList();
            List <ProductStatisticWeekly> lstStats = CalculateStatistic(week, year, period);

            foreach (Product p in lst)
            {
                ProductStatisticWeekly stat = lstStats.Find(delegate(ProductStatisticWeekly record)
                {
                    if (record.Product != p)
                    {
                        return(false);
                    }
                    else
                    {
                        return(true);
                    }
                });

                if (stat == null)
                {
                    stat          = new ProductStatisticWeekly();
                    stat.Product  = p;
                    stat.Sale     = 0;
                    stat.Purchase = 0;
                    stat.Period   = period;
                }
                else
                {
                    stat.Period = period;
                }

                NHibernateSession.Save(stat);
            }

            NHibernateSession.Flush();
        }
Пример #2
0
        public IList <Forecast> GetForecast(Product product, int week, int year)
        {
            //VARIABLES
            int cont        = 0;
            int cont2       = 0;
            int cont3       = 0;
            int todaysale   = 0;
            int processedOn = 0;

            //OBTENCION DE LISTA DE HISTORICOS Y CARGA DE ESTADISTICAS ACTUALES
            IList <TransactionHistoryWeekly> history    = ControllerManager.TransactionHistoryWeekly.GetInfo(product.Id, week, year, 10);
            ProductStatisticWeekly           statistics = ControllerManager.ProductStatisticWeekly.GetProductInfo(product.Id);

            //CREACION DE COLECCION DE OBJETOS
            IList <Forecast> lista = new List <Forecast>();

            //INICIO DE CARGA DE TRANSACCIONES PASADAS (10)
            for (cont3 = 9; cont3 > 0; cont3--)
            {
                Forecast past = new Forecast();
                past.Product = new Product(product.Id);
                if (week - cont3 > 0)
                {
                    past.Week = week - cont3;
                    past.Year = year;
                }
                else
                {
                    past.Week = 52 + (week - cont3);
                    past.Year = year - 1;
                }
                past.Stock             = 0;
                past.Purchase          = 0;
                past.Sale              = 0;
                past.FinalStock        = 0;
                past.Safety            = 0;
                past.SafetyCoEf        = 0;
                past.QuantitySuggested = 0;
                past.ProcessedOn       = 0;
                for (int i = 0; i < history.Count; i++)
                {
                    if (history[i].Year == past.Year)
                    {
                        if (history[i].Week == past.Week)
                        {
                            past.FinalStock = history[i].Stock;
                            past.Purchase   = history[i].Purchase;
                            past.Sale       = history[i].Sale;
                        }
                    }
                }
                past.Stock = past.FinalStock + past.Sale - past.Purchase;

                lista.Add(past);
            }

            //CALCULOS INICIALES PARA OBTENER DATOS DE SEMANA ACTUAL
            int stock    = history[0].Stock;
            int purchase = history[0].Purchase;

            todaysale = history[0].Sale;
            int finalStock        = stock + purchase - todaysale;
            int safety            = statistics.Sale * product.Safety;
            int quantitySuggested = 0;

            //CARGA DE DATOS CALCULADOS AL OBJETO DE LA SEMANA ACTUAL
            Forecast today = new Forecast();

            today.Product           = new Product(product.Id);
            today.Week              = week;
            today.Year              = year;
            today.Stock             = stock;
            today.Purchase          = purchase;
            today.Sale              = todaysale;
            today.FinalStock        = finalStock;
            today.Safety            = safety;
            today.SafetyCoEf        = product.Safety;
            today.QuantitySuggested = quantitySuggested;
            today.ProcessedOn       = processedOn;

            lista.Add(today);

            //OBTENCION DE DATOS FUTUROS PRECALCULADOS

            ICriteria crit = GetCriteria();

            crit.Add(new EqExpression("Product", product));
            crit.Add(new OrExpression(new AndExpression(new GtExpression("Week", week), new GeExpression("Year", year)), new GtExpression("Year", year)));
            //crit.Add(new GtExpression("Week", week));
            //crit.Add(new GeExpression("Year", year));

            IList <Forecast> lst = crit.List <Forecast>();

            foreach (Forecast forecast in lst)
            {
                lista.Add(forecast);
            }

            return(lista);
        }
Пример #3
0
        public void CalculateForecast(Product prod, int week, int year)
        {
            CleanTable(week, year, prod);

            //VARIABLES
            int cont        = 0;
            int cont2       = 0;
            int cont3       = 0;
            int todaysale   = 0;
            int processedOn = 0;

            //OBTENCION DE LISTA DE HISTORICOS Y CARGA DE ESTADISTICAS ACTUALES
            IList <TransactionHistoryWeekly> history    = ControllerManager.TransactionHistoryWeekly.GetInfo(prod.Id, week, year, 10);
            ProductStatisticWeekly           statistics = ControllerManager.ProductStatisticWeekly.GetProductInfo(prod.Id);

            //CREACION DE COLECCION DE OBJETOS
            IList <Forecast> lista = new List <Forecast>();

            //INICIO DE CARGA DE TRANSACCIONES PASADAS (10)
            for (cont3 = 9; cont3 > 0; cont3--)
            {
                Forecast past = new Forecast();
                past.Product = prod;
                if (week - cont3 > 0)
                {
                    past.Week = week - cont3;
                    past.Year = year;
                }
                else
                {
                    past.Week = 52 + (week - cont3);
                    past.Year = year - 1;
                }
                past.Stock             = 0;
                past.Purchase          = 0;
                past.Sale              = 0;
                past.FinalStock        = 0;
                past.Safety            = 0;
                past.SafetyCoEf        = 0;
                past.QuantitySuggested = 0;
                past.ProcessedOn       = 0;
                for (int i = 0; i < history.Count; i++)
                {
                    if (history[i].Year == past.Year)
                    {
                        if (history[i].Week == past.Week)
                        {
                            past.FinalStock = history[i].Stock;
                            past.Purchase   = history[i].Purchase;
                            past.Sale       = history[i].Sale;
                        }
                    }
                }
                past.Stock = past.FinalStock + past.Sale - past.Purchase;

                lista.Add(past);
            }

            //CALCULOS INICIALES PARA OBTENER DATOS DE SEMANA ACTUAL
            int stock    = history[0].Stock;
            int purchase = history[0].Purchase;

            todaysale = history[0].Sale;
            int finalStock        = stock + purchase - todaysale;
            int safety            = statistics.Sale * prod.Safety;
            int quantitySuggested = 0;

            //CARGA DE DATOS CALCULADOS AL OBJETO DE LA SEMANA ACTUAL
            Forecast today = new Forecast();

            today.Product    = prod;
            today.Week       = week;
            today.Year       = year;
            today.Stock      = stock;
            today.Purchase   = purchase;
            today.Sale       = todaysale;
            today.FinalStock = finalStock;
            //today.Safety = safety;
            //today.SafetyCoEf = prod.Safety;
            //today.QuantitySuggested = quantitySuggested;
            //today.ProcessedOn = processedOn;

            lista.Add(today);

            //PROCESO DE CALCULO DEL FUTURO (18)
            int saleaverage = statistics.Sale;

            for (cont = 1; cont < 18; cont++)
            {
                stock    = finalStock;
                purchase = 0;

                for (cont2 = 0; cont2 < history.Count; cont2++)
                {
                    if (history[cont2].Week + 10 == week + cont)
                    {
                        purchase = history[cont2].PurchaseOrders;
                    }
                }

                finalStock = stock + purchase - saleaverage;

                Forecast info = new Forecast();

                info.Product = prod;
                if (week + cont <= 52)
                {
                    info.Week = week + cont;
                    info.Year = year;
                }
                else
                {
                    info.Week = week + cont - 52;
                    info.Year = year + 1;
                }
                info.Stock             = stock;
                info.Purchase          = purchase;
                info.Sale              = saleaverage;
                info.FinalStock        = finalStock;
                info.Safety            = safety;
                info.SafetyCoEf        = prod.Safety;
                info.QuantitySuggested = quantitySuggested;
                info.ProcessedOn       = processedOn;

                lista.Add(info);
                this.Save(info);
                if (cont >= 11 && finalStock < safety)
                {
                    double modulequantity = (lista[cont + 9].Safety - lista[cont + 9].FinalStock + lista[cont + 9].Sale) / prod.RepositionPoint;
                    modulequantity = Convert.ToDouble(modulequantity.ToString() + "." + ((lista[cont + 9].Safety - lista[cont + 9].FinalStock + lista[cont + 9].Sale) % prod.RepositionPoint).ToString());
                    int purchasesuggested = Convert.ToInt32(Math.Ceiling(modulequantity));
                    lista[cont - 1].QuantitySuggested = purchasesuggested * prod.RepositionPoint;
                    lista[cont + 9].Purchase          = lista[cont - 1].QuantitySuggested;
                    lista[cont + 9].FinalStock        = lista[cont + 9].Stock + lista[cont + 9].Purchase - saleaverage;
                    finalStock = lista[cont + 9].FinalStock;
                }
            }
        }
Пример #4
0
        public void CalculateStatistic(Product productid, int week, int year, Period period)
        {
            int interval = 0;

            if (Convert.ToInt32(period) == 1)
            {
                interval = 4;
            }
            else if (Convert.ToInt32(period) == 2)
            {
                interval = 8;
            }
            else if (Convert.ToInt32(period) == 3)
            {
                interval = 13;
            }
            else if (Convert.ToInt32(period) == 4)
            {
                interval = 26;
            }
            else if (Convert.ToInt32(period) == 5)
            {
                interval = 52;
            }

            ICriteria crit = GetCriteria();

            crit.Add(Expression.Eq("ProductID", productid));

            int weekDif = (week - interval);

            if (weekDif <= 0)
            {
                Disjunction dis = new Disjunction();
                dis.Add(new AndExpression(new BetweenExpression("Week", 52 + weekDif, 52), new EqExpression("Year", year - 1)));
                dis.Add(new AndExpression(new BetweenExpression("Week", 1, week), new EqExpression("Year", year)));
                crit.Add(dis);
            }
            else
            {
                crit.Add(new AndExpression(new BetweenExpression("Week", week - interval, week), new EqExpression("Year", year)));
            }

            //crit.Add(new AndExpression(new OrExpression(new AndExpression(new EqExpression("Year", year), new GtExpression("Week", week)), new AndExpression(new GtExpression("Year", year), new LeExpression("Week", week))), new OrExpression(new AndExpression(new EqExpression("Year", year), new LeExpression("Week", week)), new AndExpression(new LtExpression("Year", year), new GeExpression("Week", week)))));
            crit.SetProjection(Projections.ProjectionList()
                               .Add(Projections.Avg("Purchase"))
                               .Add(Projections.Avg("Sale"))
                               .Add(Projections.GroupProperty("ProductID"))
                               );

            //IList lst = crit.List();

            crit.SetResultTransformer(new NHibernate.Transform.AliasToBeanConstructorResultTransformer(typeof(ProductStatisticWeekly).GetConstructors()[1]));
            ProductStatisticWeekly res = crit.UniqueResult <ProductStatisticWeekly>();

            if (res == null)
            {
                res          = new ProductStatisticWeekly();
                res.Product  = productid;
                res.Sale     = 0;
                res.Purchase = 0;
                res.Period   = period;
            }
            else
            {
                res.Period = period;
            }

            this.NHibernateSession.Save(res);
        }
Пример #5
0
        public void CalculateFullForecast(int week, int year, IList <Product> productlist, bool clean)
        {
            int prodcont = 0;

            if (productlist.Count < 1)
            {
                productlist = ControllerManager.Product.GetProductList();
            }

            List <TransactionHistoryWeekly> fullhistory    = ControllerManager.TransactionHistoryWeekly.GetInfo(week, year, 20);
            List <ProductStatisticWeekly>   fullstatistics = ControllerManager.ProductStatisticWeekly.GetStatistics();
            List <PurchaseOrderItem>        fullpoil       = Grundfos.ScalaConnector.ControllerManager.PurchaseOrderItem.GetFullArrivalPO(Config.CurrentDate);

            if (clean)
            {
                IQuery q = NHibernateSession.GetNamedQuery("sp_forecast_clean");
                q.SetInt32("Week", week);
                q.SetInt32("Year", year);
                q.UniqueResult();
            }
            foreach (Product p in productlist)
            {
                prodcont++;
                List <TransactionHistoryWeekly> history = fullhistory.FindAll(delegate(TransactionHistoryWeekly record)
                {
                    if (record.ProductID != p)
                    {
                        return(false);
                    }
                    return(true);
                });

                ProductStatisticWeekly statistics = fullstatistics.Find(delegate(ProductStatisticWeekly record)
                {
                    if (record.Product != p)
                    {
                        return(false);
                    }
                    return(true);
                });

                List <PurchaseOrderItem> poil = fullpoil.FindAll(delegate(PurchaseOrderItem record)
                {
                    if (record.Product.Id == p.ProductCode)
                    {
                        return(true);
                    }
                    return(false);
                });

                if (history.Count < 20)
                {
                    List <TransactionHistoryWeekly> temphistory = new List <TransactionHistoryWeekly>();

                    int initialweek = 0;
                    int initialyear = 0;
                    if (week < 20)
                    {
                        initialweek = week - 20 + 54;
                        initialyear = year - 1;
                    }
                    else
                    {
                        initialweek = week - 20;
                    }
                    for (int cont = 1; cont <= 20; cont++)
                    {
                        TransactionHistoryWeekly tempTHW = history.Find(delegate(TransactionHistoryWeekly record)
                        {
                            if ((record.Week == initialweek) &&
                                (record.Year == initialyear))
                            {
                                return(true);
                            }
                            return(false);
                        });
                        if (tempTHW == null)
                        {
                            tempTHW                = new TransactionHistoryWeekly(0, p);
                            tempTHW.Week           = initialweek;
                            tempTHW.Year           = initialyear;
                            tempTHW.Stock          = 0;
                            tempTHW.PurchaseOrders = 0;
                            tempTHW.Purchase       = 0;
                            tempTHW.Sale           = 0;
                        }


                        temphistory.Add(tempTHW);

                        if (initialweek < 53)
                        {
                            initialweek++;
                        }
                        else
                        {
                            initialweek = 1;
                            initialyear++;
                        }
                    }
                    CalculateForecast(p, week, year, temphistory, statistics, poil);
                }
                else
                {
                    CalculateForecast(p, week, year, history, statistics, poil);
                }

                if (Convert.ToDouble(prodcont) % 1000 == 0)
                {
                    NHibernateSession.Flush();
                    ControllerManager.Log.Add("Forecast Processor", ExecutionStatus.Running, "Forecast: " + prodcont + " productos procesados");
                }
            }

            NHibernateSession.Flush();
            ControllerManager.Log.Add("Forecast Processor", ExecutionStatus.Running, "Forecast: " + prodcont + " productos procesados");
        }
Пример #6
0
        public void CalculateForecast(Product prod, int week, int year, List <TransactionHistoryWeekly> history,
                                      ProductStatisticWeekly statistics, List <PurchaseOrderItem> poil)
        {
            //VARIABLES
            int cont        = 0;
            int cont2       = 0;
            int cont3       = 0;
            int todaysale   = 0;
            int processedOn = 0;

            //CREACION DE COLECCION DE OBJETOS
            IList <Forecast> lista = new List <Forecast>();

            //INICIO DE CARGA DE TRANSACCIONES PASADAS (10)
            for (cont3 = 19; cont3 >= 0; cont3--)
            {
                Forecast past = new Forecast();
                past.Product = prod;
                if (week - cont3 > 0)
                {
                    past.Week = week - cont3;
                    past.Year = year;
                }
                else
                {
                    past.Week = 53 + (week - cont3);
                    past.Year = year - 1;
                }
                past.Stock             = 0;
                past.Purchase          = 0;
                past.Sale              = 0;
                past.FinalStock        = 0;
                past.Safety            = 0;
                past.SafetyCoEf        = 0;
                past.QuantitySuggested = 0;
                past.ProcessedOn       = 0;

                TransactionHistoryWeekly THWpast = history.Find(delegate(TransactionHistoryWeekly record)
                {
                    if ((record.Year == past.Year) &&
                        (record.Week == past.Week))
                    {
                        return(true);
                    }
                    return(false);
                });
                if (THWpast != null)
                {
                    past.FinalStock = THWpast.Stock;
                    past.Purchase   = THWpast.Purchase;
                    past.Sale       = THWpast.Sale;
                }

                past.Stock = past.FinalStock + past.Sale - past.Purchase;

                lista.Add(past);
            }

            //PROCESO DE CALCULO DEL FUTURO (18)
            int saleaverage = statistics.Sale;
            int safety      = statistics.Sale * prod.Safety;

            for (cont = 1; cont <= 53; cont++)
            {
                int stock             = 0;
                int purchase          = 0;
                int finalStock        = 0;
                int quantitySuggested = 0;

                //if (cont <= prod.LeadTime)
                {
                    //int tempweek = week;
                    //int tempyear = year;
                    //if (53 - prod.LeadTime + cont + week < 54)
                    //{
                    //    tempweek = 53 - prod.LeadTime + cont + week;
                    //    tempyear = year - 1;
                    //}
                    //else if (prod.LeadTime - cont > 0)
                    //{
                    //    tempweek = prod.LeadTime - cont;
                    //}
                    //TransactionHistoryWeekly THWfut = history.Find(delegate(TransactionHistoryWeekly record)
                    //                                                   {
                    //                                                       if ((record.Week == tempweek) &&
                    //                                                           (record.Year == tempyear))
                    //                                                       {
                    //                                                           return true;
                    //                                                       }
                    //                                                       return false;
                    //                                                   });
                    int tempdays = 0;
                    if (cont == 1)
                    {
                        tempdays = 1;
                    }
                    else
                    {
                        tempdays = 1 + (7 * (cont - 1));
                    }
                    DateTime startDate = Config.CurrentDate.AddDays(tempdays);
                    DateTime endDate   = startDate.AddDays(7);

                    List <Grundfos.ScalaConnector.PurchaseOrderItem> poilist = poil.FindAll(delegate(Grundfos.ScalaConnector.PurchaseOrderItem record)
                    {
                        if ((record.ArrivalDate >= startDate) && (record.ArrivalDate <= endDate))
                        {
                            return(true);
                        }
                        return(false);
                    });
                    if (poilist.Count == 0)
                    {
                        purchase = 0;
                    }
                    else
                    {
                        foreach (PurchaseOrderItem item in poilist)
                        {
                            purchase = purchase + item.QuantityOrdered;
                        }
                    }
                }

                stock      = lista[18 + cont].FinalStock;
                finalStock = stock + purchase - saleaverage;

                Forecast info = new Forecast();

                info.Product = prod;
                if (week + cont <= 53)
                {
                    info.Week = week + cont;
                    info.Year = year;
                }
                else
                {
                    info.Week = week + cont - 53;
                    info.Year = year + 1;
                }

                if (cont > prod.LeadTime && finalStock < safety)
                {
                    double modulequantity    = 1;
                    int    purchasesuggested = 0;
                    if (prod.RepositionPoint > 0)
                    {
                        modulequantity    = (Convert.ToDouble(safety) - Convert.ToDouble(finalStock)) / Convert.ToDouble(prod.RepositionPoint);
                        purchasesuggested = Convert.ToInt32(Math.Ceiling(modulequantity));
                    }

                    if (prod.LeadTime > 0)
                    {
                        lista[cont - prod.LeadTime + 19].QuantitySuggested = purchasesuggested * prod.RepositionPoint;
                    }
                    else
                    {
                        lista[cont - prod.LeadTime + 18].QuantitySuggested = purchasesuggested * prod.RepositionPoint;
                    }
                    purchase   = purchasesuggested * prod.RepositionPoint + purchase;
                    finalStock = stock + purchase - saleaverage;
                }

                info.Stock             = stock;
                info.Purchase          = purchase;
                info.Sale              = saleaverage;
                info.FinalStock        = finalStock;
                info.Safety            = safety;
                info.SafetyCoEf        = prod.Safety;
                info.QuantitySuggested = quantitySuggested;
                info.ProcessedOn       = processedOn;

                lista.Add(info);
            }
            for (cont = 20; cont < 73; cont++)
            {
                Forecast forecast = lista[cont];
                Save(forecast);
            }
        }