public SalesCustomersCategoriesModel Report(DateTime start, DateTime end, int page = 0)
        {
            SalesCustomersCategoriesModel result = new SalesCustomersCategoriesModel(start, end);

            List <Customer> Customers = _unitOfWork.Customers.Get().ToList();

            List <InputCross> CustomersByCategories = _unitOfWork.Items.Get()
                                                      .Where(x => (x.Invoice.Date >= start && x.Invoice.Date <= end)).ToList()
                                                      .GroupBy(x => new
            {
                CustomerName = x.Invoice.Customer.Name,
                CategoryName = x.Product.Category.Name
            })
                                                      .Select(x => new InputCross {
                Row = x.Key.CustomerName, Column = x.Key.CategoryName, Value = x.Sum(y => y.SubTotal)
            })
                                                      .OrderByDescending(x => x.Value)
                                                      .ToList();

            result.Customers  = _factory.CreateCat(CustomersByCategories, Customers, _unitOfWork.Categories.Get().ToList());
            result.Categories = _factory.CreateReverseCat(CustomersByCategories, _unitOfWork.Categories.Get().ToList());
            result.GrandTotal = result.Customers.Sum(x => x.Turnover);

            return(result);
        }
        public void InitReport()
        {
            DateTime start = new DateTime(2016, 1, 1);
            DateTime end   = new DateTime(2016, 12, 31);

            result = report.Report(start, end);
        }