Example #1
0
        public CustomizeReportViewModel(CustomizeReportOptions cro,
                                        bool showCategoryTab, bool showTagsTab)
        {
            this.cro = cro;

            Initialize();

            this.FromDate = cro.FromDate;
            this.ToDate   = cro.ToDate;

            this.ShowCategoryTab = showCategoryTab;
            this.ShowTagsTab     = showTagsTab;
        }
Example #2
0
        public void SyncCustomizeOptions(CustomizeReportOptions cro)
        {
            cro.FromDate = FromDate;
            cro.ToDate   = ToDate;

            bool shiftsAllGood       = cro.ShiftsAllGood = allShifts.FirstOrDefault(x => !x.IsChecked) == null;
            bool salesPersonsAllGood = cro.SalesPersonsAllGood = allSalesPersons.FirstOrDefault(x => !x.IsChecked) == null;
            bool categoriesAllGood   = cro.CategoriesAllGood = allCategories.FirstOrDefault(x => !x.IsChecked) == null;
            bool tagsAllGood         = cro.TagsAllGood = allTags.FirstOrDefault(x => !x.IsChecked) == null;

            cro.AllGood = shiftsAllGood && salesPersonsAllGood && categoriesAllGood && tagsAllGood;

            //admits no
            cro.AdmitsNoShift       = allShifts[0].IsChecked;
            cro.AdmitsNoSalesPerson = allSalesPersons[0].IsChecked;
            cro.AdmitsNoCategory    = allCategories[0].IsChecked;
            cro.AdmitsNoTag         = allTags[0].IsChecked;

            using (var unitOfWork = base.GetNewUnitOfWork())
            {
                //COPY SHIFT SELECTION
                cro.SelectedShifts.Clear();
                foreach (var item in Shifts)
                {
                    if (item.IsChecked)
                    {
                        if (item.Id == 0)
                        {
                            cro.AdmitsNoShift = true;
                        }
                        else
                        {
                            cro.SelectedShifts.Add(unitOfWork.ShiftRepository.GetById(item.Id));
                        }
                    }
                }
                //COPY SALESPERSON SELECTION
                cro.SelectedSalesPersons.Clear();
                foreach (var item in SalesPersons)
                {
                    if (item.IsChecked)
                    {
                        if (item.Id == 0)
                        {
                            cro.AdmitsNoSalesPerson = true;
                        }
                        else
                        {
                            cro.SelectedSalesPersons.Add(unitOfWork.EmployeeRepository.GetById(item.Id));
                        }
                    }
                }

                //COPY CATEGORY SELECTION
                cro.SelectedCategories.Clear();
                foreach (var item in Categories)
                {
                    if (item.IsChecked)
                    {
                        if (item.Id == 0)
                        {
                            cro.AdmitsNoCategory = true;
                        }
                        else
                        {
                            cro.SelectedCategories.Add(unitOfWork.CategoryRepository.GetById(item.Id));
                        }
                    }
                }

                //COPY TAG SELECTION
                cro.SelectedTags.Clear();
                foreach (var item in Tags)
                {
                    if (item.IsChecked)
                    {
                        if (item.Id == 0)
                        {
                            cro.AdmitsNoTag = true;
                        }
                        else
                        {
                            cro.SelectedTags.Add(unitOfWork.TagRepository.GetById(item.Id));
                        }
                    }
                }
            }
        }
Example #3
0
        protected override List <ReportLineViewModel> Transform(List <ReportLineViewModel> filtered, CustomizeReportOptions cro)
        {
            List <ReportLineViewModel> result = new List <ReportLineViewModel>();

            var query = from item in filtered
                        //orderby item.DayOfWeek == DayOfWeek.Sunday ? 7 : (int)item.DayOfWeek
                        group item by item.DayOfWeek;

            foreach (var dowGroup in query)
            {
                ReportLineViewModel lic = new ReportLineViewModel();

                lic.DayOfWeek = dowGroup.Key;

                //MakeSum(dowGroup, lic);

                int days = dowGroup.GroupBy(x => x.Date).Count();

                lic.Amount  = dowGroup.Sum(x => x.Amount) / days;
                lic.Clients = dowGroup.Sum(x => x.Clients) / days;

                result.Add(lic);
            }

            return(result);
        }
Example #4
0
 protected override List <ReportLineViewModel> Transform(List <ReportLineViewModel> filtered, CustomizeReportOptions cro)
 {
     return(filtered);
 }
        protected override List <ReportLineViewModel> Transform(List <ReportLineViewModel> filtered, CustomizeReportOptions cro)
        {
            var groupsByProduct = from item in filtered
                                  group item by item.Product;

            List <ReportLineViewModel> transformed = new List <ReportLineViewModel>();

            double totalQtty = filtered.Sum(x => x.Quantity);

            foreach (var group in groupsByProduct)
            {
                ReportLineViewModel lic = new ReportLineViewModel();

                lic.Product = group.Key;

                lic.Preference = group.Sum(x => x.Quantity) / totalQtty;

                MakeSum(group, lic);

                transformed.Add(lic);
                //salesByItemLines.Add(sbiLine);
            }

            double avePref = 0; decimal aveProfitMargin = 0;

            if (transformed.Count() == 0)
            {
                avePref = 0; aveProfitMargin = 0;
            }
            else
            {
                avePref         = transformed.Average(x => x.Preference);
                aveProfitMargin = transformed.Average(x => x.ProfitMargin);
            }

            foreach (var item in transformed)
            {
                if (item.Preference >= avePref && item.ProfitMargin >= aveProfitMargin)
                {
                    item.ProductClass = ProductClass.A;
                }
                else if (item.Preference >= avePref && item.ProfitMargin < aveProfitMargin)
                {
                    item.ProductClass = ProductClass.B;
                }
                else if (item.Preference < avePref && item.ProfitMargin >= aveProfitMargin)
                {
                    item.ProductClass = ProductClass.C;
                }
                else //if (item.Preference < avePref && item.ProfitMargin < aveProfitMargin)
                {
                    item.ProductClass = ProductClass.D;
                }
            }

            return(transformed);
        }
Example #6
0
        protected override List <ReportLineViewModel> Transform(List <ReportLineViewModel> filtered, CustomizeReportOptions cro)
        {
            int daysCount  = filtered.GroupBy(x => x.Date.Date).Count();
            int monthCount = filtered.GroupBy(x => x.Date.Month).Count();

            List <ReportLineViewModel> result = new List <ReportLineViewModel>();

            //group by month
            if (monthCount >= 3)
            {
                //months data
                var queryNestedGroups = from item in filtered
                                        group item by item.Date.Year into yearGroup
                                        from monthGroup in
                                        (from item in yearGroup
                                         orderby item.Date.Year, item.Date.Month
                                         group item by item.Date.Month)
                                        group monthGroup by yearGroup.Key;

                foreach (var yearGroup in queryNestedGroups)
                {
                    foreach (var monthGroup in yearGroup)
                    {
                        ReportLineViewModel rLine = new ReportLineViewModel();
                        rLine.DateSpanString = monthGroup.First().Date.ToString("MMM/yyy");

                        MakeSum(monthGroup, rLine);

                        result.Add(rLine);
                    }
                }
            }
            //group by week
            else if (daysCount >= 21)
            {
                var query = from item in filtered
                            group item by item.MondayDate;

                foreach (var weekGroup in query)
                {
                    ReportLineViewModel rLine = new ReportLineViewModel();
                    rLine.DateSpanString = weekGroup.First().WeekString;

                    MakeSum(weekGroup, rLine);

                    result.Add(rLine);
                }
            }
            //group by date
            else
            {
                var query = from item in filtered
                            group item by item.Date;

                foreach (var dateGroup in query)
                {
                    ReportLineViewModel rLine = new ReportLineViewModel();
                    rLine.DateSpanString = dateGroup.Key.ToString("d/MMM");

                    MakeSum(dateGroup, rLine);

                    result.Add(rLine);
                }
            }

            return(result);
        }
Example #7
0
        protected override List <ReportLineViewModel> Transform(List <ReportLineViewModel> filtered, CustomizeReportOptions cro)
        {
            double projPct = cro.ProjectionPercent;

            List <ReportLineViewModel> transformed = new List <ReportLineViewModel>();

            var queryProductGroups = from opi in filtered
                                     group opi by opi.Product;

            foreach (var productGroup in queryProductGroups)
            {
                var queryDowGroups = from line in productGroup
                                     group line by line.DayOfWeek;

                foreach (var dowGroup in queryDowGroups)
                {
                    //create a line for each day of week
                    ReportLineViewModel rivm = new ReportLineViewModel();

                    rivm.Product = productGroup.Key;

                    //set date
                    DayOfWeek dow = dowGroup.Key;

                    int finalIndex = GetFinalIndex(dow);
                    rivm.Date = DateTime.Today.AddDays(finalIndex);

                    //group by date
                    var queryDateGroups = from line in dowGroup
                                          group line by line.Date.Date;

                    double min = double.MaxValue;
                    double max = 0;

                    double        dowTotal   = 0;
                    List <double> dateTotals = new List <double>();

                    foreach (var dateGroup in queryDateGroups)
                    {
                        double dateTotal = dateGroup.Sum(x => x.Quantity * x.UnitMeasure.ToBaseConversion);

                        if (dateTotal < min)
                        {
                            min = dateTotal;
                        }
                        if (dateTotal > max)
                        {
                            max = dateTotal;
                        }

                        dateTotals.Add(dateTotal);
                        dowTotal += dateTotal;
                    }

                    //MIN
                    rivm.MinimumQuantity = min;
                    //rivm.MinQuantities[finalIndex] = min;
                    //MAX
                    rivm.MaximumQuantity = max;
                    //rivm.MaxQuantities[finalIndex] = max;

                    //AVERAGE
                    //int numberofDays = innerGroup.Distinct(new SameDateComparer()).Count();
                    double averageInBase = dowTotal / queryDateGroups.Count();
                    rivm.AverageQuantity = averageInBase;
                    //rivm.AveQuantities[finalIndex] = averageInBase;//Math.Round(tempQuantity, isQtty ? 0 : 1);

                    //PROJECTED
                    //rivm.ProjectedQuantity = averageInBase * (1 + projPct / 100);
                    //rivm.ProjQuantities[finalIndex] = averageInBase * (1 + projPct / 100);

                    if (rivm.Product.Name.Contains("Cerv.Cristal"))
                    {
                        Console.WriteLine();
                    }
                    //CHANGE %
                    rivm.ChangePercent = CalculateChangePercent(dateTotals);

                    //add line
                    transformed.Add(rivm);
                }
            }//outer foreach

            MakePretty(transformed);

            return(transformed.OrderBy(x => x.Product.Name).ToList());
        }
        protected override List <ReportLineViewModel> Transform(List <ReportLineViewModel> filtered, CustomizeReportOptions cro)
        {
            var groupsByCategory = from item in filtered
                                   orderby item.CategoryName
                                   group item by item.Category;

            List <ReportLineViewModel> result = new List <ReportLineViewModel>();

            foreach (var group in groupsByCategory)
            {
                ReportLineViewModel line = new ReportLineViewModel();

                MakeSum(group, line);

                if (group.Key == null)
                {
                    //UNCATEGORIZED
                    line.CategoryName = "Sin Categoría";
                    //noCategoryLine.IsRootCategory = true;

                    line.ChildrenProductsTotalSale = line.Amount;

                    result.Add(line);
                }
                else
                {
                    AddToCategoryBranch(line, group.Key, result, false);

                    //lineitems_showing.Add(lic);
                }
            }

            return(result);
        }
Example #9
0
        private List <ReportLineViewModel> Filter(List <ReportLineViewModel> unfiltered, CustomizeReportOptions cro)
        {
            //filter data
            List <ReportLineViewModel> lines_filtered = new List <ReportLineViewModel>();

            foreach (var item in unfiltered)
            {
                if (!OfflineFilter(item))
                {
                    continue;
                }
                if (!cro.AllGood && !CheckCustomizeReportOptions(item, cro))
                {
                    continue;
                }

                lines_filtered.Add(item);
            }

            return(lines_filtered);
        }
Example #10
0
        private bool CheckCustomizeReportOptions(ReportLineViewModel li, CustomizeReportOptions cro)
        {
            //PRODUCT TYPES
            //if (rType == ReportType.CostByItem || rType == ReportType.CostProjectionsByItem)
            //{
            //    if (li.ProductType != ProductType.RawMaterials && li.ProductType != ProductType.CompraVenta) return false;
            //}
            //else if (rType == ReportType.SalesProjectionsByItem)
            //{
            //    if (li.ProductType != ProductType.FinishedGoods && li.ProductType != ProductType.CompraVenta) return false;
            //}
            //else if (rType == ReportType.WIPByItem || rType == ReportType.WIPProjectionsByItem)
            //{
            //    if (li.ProductType != ProductType.WorkInProcess) return false;
            //}

            //CUSTOMIZE REPORT OPTIONS
            //SHIFTS
            if (!cro.ShiftsAllGood)
            {
                if (li.ShiftId == 0)
                {
                    if (!cro.AdmitsNoShift)
                    {
                        return(false);
                    }
                }
                else
                {
                    if (cro.SelectedShifts.FirstOrDefault(x => x.Id == li.ShiftId) == null)
                    {
                        return(false);
                    }
                }
            }

            //SALESPERSON
            if (!cro.SalesPersonsAllGood)
            {
                if (li.SalesPerson == null)
                {
                    if (!cro.AdmitsNoSalesPerson)
                    {
                        return(false);
                    }
                }
                else
                {
                    if (cro.SelectedSalesPersons.FirstOrDefault(x => x.Id == li.SalesPerson.Id) == null)
                    {
                        return(false);
                    }
                }
            }

            //CATEGORIES
            if (!IgnoreCategories && !cro.CategoriesAllGood)
            {
                if (li.Category == null)
                {
                    if (!cro.AdmitsNoCategory)
                    {
                        return(false);
                    }
                }
                else
                {
                    if (cro.SelectedCategories.FirstOrDefault(x => x.Id == li.Category.Id) == null)
                    {
                        return(false);
                    }
                }
            }

            //TAGS
            if (!IgnoreTags && !cro.TagsAllGood)
            {
                if (li.TagIds.Count == 0)
                {
                    if (!cro.AdmitsNoTag)
                    {
                        return(false);
                    }
                }
                else
                {
                    if (cro.SelectedTags.Select(x => x.Id).Intersect(li.TagIds).Count() == 0)
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
Example #11
0
 protected abstract List <ReportLineViewModel> Extract(IUnitOfWork unitOfWork, CustomizeReportOptions cro);
Example #12
0
 public List <ReportLineViewModel> GenerateReportData(IUnitOfWork unitOfWork, CustomizeReportOptions cro)
 {
     //Filter and Transform
     return(Load(Transform(Filter(Extract(unitOfWork, cro), cro), cro)));
 }
Example #13
0
 protected abstract List <ReportLineViewModel> Transform(List <ReportLineViewModel> filtered, CustomizeReportOptions cro);
Example #14
0
        protected override List <ReportLineViewModel> Extract(IUnitOfWork unitOfWork, CustomizeReportOptions cro)
        {
            var queryService = ServiceContainer.GetService <IQueryService>();

            return(queryService.GetSalesByItemData(unitOfWork, cro.FromDate, cro.ToDate, false));
        }
Example #15
0
 protected override List <ReportLineViewModel> Extract(IUnitOfWork unitOfWork, CustomizeReportOptions cro)
 {
     throw new NotImplementedException();
 }
Example #16
0
        protected override List <ReportLineViewModel> Transform(List <ReportLineViewModel> filtered, CustomizeReportOptions cro)
        {
            var groupsByProduct = from item in filtered
                                  group item by item.Product;

            List <ReportLineViewModel> transformed = new List <ReportLineViewModel>();

            foreach (var group in groupsByProduct)
            {
                ReportLineViewModel lic = new ReportLineViewModel();

                lic.Product   = group.Key;
                lic.ProductId = group.Key.Id;

                MakeSum(group, lic);

                transformed.Add(lic);
            }

            return(transformed);
        }
Example #17
0
        protected override List <ReportLineViewModel> Transform(List <ReportLineViewModel> filtered, CustomizeReportOptions cro)
        {
            List <ReportLineViewModel> result = new List <ReportLineViewModel>();

            var query = from sale in filtered
                        group sale by sale.SalesPerson;

            foreach (var salesPersonGroup in query)
            {
                ReportLineViewModel line = new ReportLineViewModel();

                if (salesPersonGroup.Key == null)
                {
                    //NO  SALESPERSON
                    line.SalesPersonName = "Sin Dependiente";
                }
                else
                {
                    line.SalesPerson     = salesPersonGroup.Key;
                    line.SalesPersonName = salesPersonGroup.Key.Name;
                }

                MakeSum(salesPersonGroup, line);

                result.Add(line);
            }

            return(result);
        }