public void SaveSale(SaleModel saleInfo, string cashierId) { List <SaleDetailDbModel> details = new List <SaleDetailDbModel>(); var taxRate = ConfigHelper.GetTaxRate() / 100; foreach (var item in saleInfo.SaleDetails) { var detail = new SaleDetailDbModel { ProductId = item.ProductId, Quantity = item.Quantity }; var productInfo = _productData.GetProductById(item.ProductId); if (productInfo == null) { throw new System.Exception($"El producto con Id {item.ProductId} no se encuentra en la base de datos."); } detail.PurchasePrice = productInfo.RetailPrice * detail.Quantity; if (productInfo.IsTaxable) { detail.Tax = detail.PurchasePrice * taxRate; } details.Add(detail); } SaleDbModel sale = new SaleDbModel { Subtotal = details.Sum(d => d.PurchasePrice), Tax = details.Sum(d => d.Tax), CashierId = cashierId }; sale.Total = sale.Subtotal + sale.Tax; try { _sql.StartTransaction("VPMData"); _sql.SaveDataInTransaction("dbo.spSale_Insert", sale); var p = new { sale.CashierId, sale.SaleDate }; sale.Id = _sql.LoadDataInTransaction <int, dynamic>("dbo.spSale_Lookup", p).FirstOrDefault(); foreach (var item in details) { item.SaleId = sale.Id; _sql.SaveDataInTransaction("dbo.spSaleDetail_Insert", item); } _sql.CommitTransaction(); } catch { _sql.RollbackTransaction(); throw; } }
public void SaveSale(SaleModel saleInfo, string cashierId) { //TODO: Make this SOLID/DRY/Better // Start filling in the models we will save to the database List <SaleDetailDBModel> details = new List <SaleDetailDBModel>(); var taxRate = ConfigHelper.GetTaxRate() / 100; foreach (var item in saleInfo.SaleDetails) { var detail = new SaleDetailDBModel { ProductId = item.ProductId, Quantity = item.Quantity }; // Get the information about this product var productInfo = _productData.GetProductById(detail.ProductId); if (productInfo == null) { throw new Exception($"The product Id of { detail.ProductId } could not be found in the database."); } detail.PurchasePrice = (productInfo.RetailPrice * detail.Quantity); if (productInfo.IsTaxable) { detail.Tax = (detail.PurchasePrice * taxRate); } details.Add(detail); } //create the sale model SaleDBModel sale = new SaleDBModel { SubTotal = details.Sum(x => x.PurchasePrice), Tax = details.Sum(x => x.Tax), CashierId = cashierId }; sale.Total = sale.SubTotal + sale.Tax; try { _sql.StartTransaction("ASDatabase"); // Save the sale model _sql.SaveDataInTransaction("dbo.spSale_Insert", sale); // Get the ID from the sale model sale.Id = _sql.LoadDataInTransaction <int, dynamic>("spSale_Lookup", new { sale.CashierId, sale.SaleDate }).FirstOrDefault(); // Finish filling in the sale detail models foreach (var item in details) { item.SaleId = sale.Id; // Save the sale detail models _sql.SaveDataInTransaction("dbo.spSaleDetail_Insert", item); } _sql.CommitTransaction(); } catch { _sql.RollbackTransaction(); throw; } }