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); }
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); }
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(); }
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); }
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; }