private void UpsertDailyProductReport( string productDetailId, ReportParameterBase reportParameterBase, List <IGrouping <string, SaleDetail> > saleDetailsGrouped, List <IGrouping <string, PurchaseDetail> > purchaseDetailsGrouped, List <ProductDetail> productDetails, List <ProductCategory> categories) { ProductReportParameter parameter = new ProductReportParameter( reportParameterBase.Date, reportParameterBase.Value, reportParameterBase.ReportShopId); parameter.StartingQuantity = this.GetPrevious(parameter); var sold = saleDetailsGrouped.Exists(x => x.Key == productDetailId) ? saleDetailsGrouped.First(x => x.Key == productDetailId).ToList() : new List <SaleDetail>(); var purchased = purchaseDetailsGrouped.Exists(x => x.Key == productDetailId) ? purchaseDetailsGrouped.First(x => x.Key == productDetailId).ToList() : new List <PurchaseDetail>(); T productDetail = productDetails.First(x => x.Id == productDetailId); var category = categories.First(x => x.Id == productDetail.ProductCategoryId); var productReport = this.CreateModel(parameter, category, productDetail, purchased, sold); Console.WriteLine( $"Model saving - {productReport.Date} and product {productReport.ProductDetailName} and SaleQuantity {productReport.QuantitySaleToday}"); this.SaveReport(productReport); }
private M CreateModel(ProductReportParameter parameter, ProductCategory category, T productDetail, List <PurchaseDetail> purchaseDetails, List <SaleDetail> saleDetails) { double purchaseTotal = purchaseDetails.Sum(x => x.CostTotal); double purchaseQuantity = purchaseDetails.Sum(x => x.Quantity); var saleCostTotal = saleDetails.Sum(x => x.CostTotal); double saleQuantity = saleDetails.Sum(x => x.Quantity); double salePriceTotal = saleDetails.Sum(x => x.PriceTotal); double startingQuantity = parameter.StartingQuantity; M productReport = new M(); productReport.Id = Guid.NewGuid().ToString(); productReport.CreatedFrom = "BizBook"; productReport.CreatedBy = "Automatic"; productReport.ModifiedBy = "Automatic"; productReport.Created = DateTime.Today.Date; productReport.Modified = DateTime.Today.Date; productReport.ShopId = parameter.ReportShopId; // productReport.ReportTimeType = ReportTimeType.Daily; productReport.Date = parameter.Date.Date; productReport.Value = parameter.Date.Date.ToString("dd-MMMM-yyyy"); productReport.RowsCount = 0; // productReport.ProductReportType = ProductReportType.ProductDetailByAmount; productReport.ProductDetailId = productDetail.Id; productReport.ProductCategoryId = category.Id; productReport.ProductGroupId = category.ProductGroupId; productReport.ProductDetailName = productDetail.Name; productReport.ProductCategoryName = category.Name; productReport.ProductGroupName = category.ProductGroup.Name; //productReport.PurchaseTotal = purchaseTotal; //productReport.PurchaseQuantity = purchaseQuantity; //productReport.PurchasePricePerUnitAverage = purchaseQuantity == 0 ? 0 : purchaseTotal / purchaseQuantity; //productReport.SaleTotal = saleDetails.Sum(x => x.Total); //productReport.SaleCostTotal = saleCostTotal; //productReport.SalePriceTotal = salePriceTotal; //productReport.SaleDiscountTotal = saleDetails.Sum(x => x.DiscountTotal); //productReport.SaleQuantity = saleQuantity; //productReport.SaleCostPricePerUnitAverage = saleQuantity == 0 ? 0 : saleCostTotal / saleQuantity; //productReport.SalePricePerUnitAverage = saleQuantity == 0 ? 0 : salePriceTotal / saleQuantity; //productReport.StartingQuantity = startingQuantity; //productReport.EndingQuantity = startingQuantity + purchaseQuantity - saleQuantity; return(productReport); }