Example #1
0
            public void WhenGoodBranchAndGoodInvoiceYieldGoodOrderWithItemInCatalog_ResultingDetailIsExpected()
            {
                // arrange
                MockDependents mockDependents = new MockDependents();
                IReportLogic   testunit       = MakeTestsLogic(false, ref mockDependents);

                mockDependents.ICatalogLogic.Setup(m => m.GetProductsByIds("FUT", new List <string> {
                    "111111"
                }))
                .Returns(new ProductsReturn {
                    Products = new List <Product> {
                        new Product {
                            ItemNumber = "111111",
                            Name       = "Fake Name",
                            BrandExtendedDescription = "Fake Brand",
                            ItemClass = "Fake Class",
                            Size      = "Fake Size",
                            Pack      = "2"
                        }
                    }
                });

                ItemUsageReportQueryModel testQuery = MakeQuery();
                string expected = "Fake Name / 111111 / Fake Brand / Fake Class / 2 / Fake Size";

                // act
                List <ItemUsageReportItemModel> result = testunit.GetItemUsage(testQuery);

                // assert
                result.First()
                .Detail
                .Should()
                .Be(expected);
            }
Example #2
0
        public HttpResponseMessage ExportItemUsage([FromUri] ItemUsageReportQueryModel usageQuery, ExportRequestModel exportRequest)
        {
            HttpResponseMessage retVal;

            try
            {
                if (usageQuery != null && usageQuery.fromDate.HasValue && usageQuery.toDate.HasValue)
                {
                    usageQuery.UserSelectedContext = this.SelectedUserContext;
                    var ret = _reportLogic.GetItemUsage(usageQuery);
                    ContractInformationHelper.GetContractCategoriesFromLists(SelectedUserContext, ret, _listService);
                    ItemOrderHistoryHelper.GetItemOrderHistories(_catalogLogic, SelectedUserContext, ret);

                    if (exportRequest.Fields != null)
                    {
                        _exportLogic.SaveUserExportSettings(this.AuthenticatedUser.UserId, Core.Models.Configuration.EF.ExportType.ItemUsage, Core.Enumerations.List.ListType.Custom, exportRequest.Fields, exportRequest.SelectedType);
                    }

                    retVal = ExportModel <ItemUsageReportItemModel>(ret.ToList(), exportRequest, SelectedUserContext);
                }
                else
                {
                    retVal = new HttpResponseMessage()
                    {
                        StatusCode = HttpStatusCode.NoContent
                    }
                };
            }
            catch (Exception ex)
            {
                _log.WriteErrorLog("ExportItemUsage", ex);
                retVal = new HttpResponseMessage()
                {
                    StatusCode = HttpStatusCode.InternalServerError
                };
            }
            return(retVal);
        }
Example #3
0
            public void WhenGoodBranchAndGoodInvoiceYieldGoodOrderWithItemInCatalog_ResultingDetailIsNull()
            {
                // arrange
                MockDependents mockDependents = new MockDependents();
                IReportLogic   testunit       = MakeTestsLogic(false, ref mockDependents);

                mockDependents.ICatalogLogic.Setup(m => m.GetProductsByIds("FUT", new List <string> {
                    "111111"
                }))
                .Returns(new ProductsReturn {
                    Products = new List <Product>()
                });

                ItemUsageReportQueryModel testQuery = MakeQuery();

                // act
                List <ItemUsageReportItemModel> result = testunit.GetItemUsage(testQuery);

                // assert
                result.First()
                .Detail
                .Should()
                .BeNull();
            }
Example #4
0
        public Models.OperationReturnModel <IEnumerable <ItemUsageReportItemModel> > ReadItemUsage([FromUri] ItemUsageReportQueryModel usageQuery)
        {
            Models.OperationReturnModel <IEnumerable <ItemUsageReportItemModel> > retVal = new Models.OperationReturnModel <IEnumerable <ItemUsageReportItemModel> >();
            try
            {
                if (usageQuery != null && usageQuery.fromDate.HasValue && usageQuery.toDate.HasValue)
                {
                    usageQuery.UserSelectedContext = this.SelectedUserContext;
                    var ret = _reportLogic.GetItemUsage(usageQuery);
                    retVal.SuccessResponse = ret;
                    retVal.IsSuccess       = true;
                }
                else
                {
                    retVal.IsSuccess    = false;
                    retVal.ErrorMessage = "A valid FROM and TO date are required";
                }
            }
            catch (Exception ex)
            {
                _log.WriteErrorLog("ReadItemUsage", ex);
                retVal.ErrorMessage = ex.Message;
                retVal.IsSuccess    = false;
            }

            return(retVal);
        }
Example #5
0
        public List <Core.Models.Reports.ItemUsageReportItemModel> GetItemUsage(ItemUsageReportQueryModel usageQuery)
        {
            var orderLines = _reportRepository.GetOrderLinesForItemUsageReport(usageQuery.UserSelectedContext.BranchId,
                                                                               usageQuery.UserSelectedContext.CustomerId,
                                                                               usageQuery.fromDate.Value,
                                                                               usageQuery.toDate.Value.AddDays(1),
                                                                               usageQuery.sortDir,
                                                                               usageQuery.sortField).ToList();

            LookupProductInfo(orderLines, usageQuery.UserSelectedContext.BranchId);

            var reportItems = orderLines.GroupBy(x => new { x.ItemNumber, x.Each }).Select(g => new ItemUsageReportItemModel()
            {
                ItemNumber           = g.Key.ItemNumber,
                TotalQuantityOrdered = g.Sum(a => a.QuantityOrdered),
                TotalQuantityShipped = g.Sum(a => a.QantityShipped),
                AveragePrice         = (decimal)Math.Round(g.Average(a => a.Price), 2),
                TotalCost            = (decimal)Math.Round(g.Sum(a => a.LineTotal), 2),
                Name             = g.Select(a => a.Name).FirstOrDefault(),
                Each             = g.Key.Each ? "Y" : "N",
                Class            = g.Select(a => a.ItemClass).FirstOrDefault(),
                CategoryCode     = g.Select(a => a.CategoryCode).FirstOrDefault(),
                SubCategoryCode  = g.Select(a => a.SubCategoryCode).FirstOrDefault(),
                CategoryName     = g.Select(a => a.CategoryName).FirstOrDefault(),
                PackSize         = g.Select(a => a.PackSize).FirstOrDefault(),
                Brand            = g.Select(a => a.Brand).FirstOrDefault(),
                ManufacturerName = g.Select(a => a.ManufacturerName).FirstOrDefault(),
                UPC = g.Select(a => a.UPC).FirstOrDefault(),
                VendorItemNumber = g.Select(a => a.VendorItemNumber).FirstOrDefault()
            }).ToList();

            foreach (var item in reportItems)
            {
                item.Pack = item.PackSize.Substring(0, item.PackSize.IndexOf('/'));
                item.Size = item.PackSize.Substring(item.PackSize.IndexOf('/') + 1);
                if (item.Name != null)
                {
                    item.Detail = string.Format("{0} / {1} / {2} / {3} / {4}",
                                                item.Name,
                                                item.ItemNumber,
                                                item.Brand,
                                                item.Class,
                                                item.PackSize);
                }
            }

            var sortInfo = new SortInfo()
            {
                Field = "ItemNumber"
            };

            if (!string.IsNullOrEmpty(usageQuery.sortField))
            {
                sortInfo.Field = usageQuery.sortField;
                sortInfo.Order = usageQuery.sortDir;
            }

            return(reportItems.AsQueryable().Sort(new List <SortInfo>()
            {
                sortInfo
            }).ToList());

            //List<ItemUsageReportItemModel> itemUsageReports =
            //	reportRepository.GetItemUsageForCustomer(
            //		usageQuery.UserSelectedContext.BranchId,
            //		usageQuery.UserSelectedContext.CustomerId,
            //		usageQuery.fromDate.Value,
            //		usageQuery.toDate.Value.AddDays(1),
            //		usageQuery.sortDir,
            //		usageQuery.sortField) // add 1 day so it is inclusing of the end date selected
            //		.ToList();

            //ProductsReturn ret = catalogRepository.GetProductsByIds(
            //	usageQuery.UserSelectedContext.BranchId,
            //	itemUsageReports.Select(i => i.ItemNumber).ToList());

            //Parallel.ForEach(itemUsageReports, item =>
            //	{
            //		FillProductInfo(item, ret.Products, usageQuery.UserSelectedContext.CustomerId);
            //	});

            //// handle name sort in code...
            //if (usageQuery.sortField != null && usageQuery.sortField.Equals("name", StringComparison.InvariantCultureIgnoreCase))
            //{
            //	if (usageQuery.sortDir.Equals("asc", StringComparison.InvariantCultureIgnoreCase))
            //		itemUsageReports.Sort((i1, i2) => i1.Name.CompareTo(i2.Name));
            //	else
            //		itemUsageReports.Sort((i1, i2) => i2.Name.CompareTo(i1.Name));
            //}
            //return itemUsageReports;
        }