db5e820841
transactinos that were explicitly closed, were throwing an exception, because it would be closing transaction twice
86 lines
2.6 KiB
C#
86 lines
2.6 KiB
C#
using RMDataManagerLibrary.Internal.DataAccess;
|
|
using RMDataManagerLibrary.Models;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace RMDataManagerLibrary.DataAcccess
|
|
{
|
|
public class SaleData
|
|
{
|
|
//TODO: Make this SOLID/DRY/BETTER
|
|
public void SaveSale(SaleModel saleInfo, string cashierId)
|
|
{
|
|
List<SaleDetailDBModel> details = new List<SaleDetailDBModel>();
|
|
ProductData products = new ProductData();
|
|
decimal 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 = products.GetProductById(item.ProductId);
|
|
|
|
if (productInfo == null)
|
|
{
|
|
throw new Exception($"Product with Id {item.ProductId} could not be found in DB");
|
|
}
|
|
|
|
detail.PurchasePrice = productInfo.RetailPrice * detail.Quantity;
|
|
|
|
if (productInfo.IsTaxable)
|
|
{
|
|
detail.Tax = detail.PurchasePrice * taxRate;
|
|
}
|
|
|
|
details.Add(detail);
|
|
}
|
|
|
|
SaleDBModel sale = new SaleDBModel
|
|
{
|
|
SubTotal = details.Sum(x => x.PurchasePrice),
|
|
Tax = details.Sum(x => x.Tax),
|
|
CashierId = cashierId
|
|
};
|
|
|
|
sale.Total = sale.SubTotal + sale.Tax;
|
|
|
|
//save
|
|
using (SqlDataAccess sql = new SqlDataAccess())
|
|
{
|
|
try
|
|
{
|
|
sql.StartTransaction("RMData");
|
|
|
|
sql.SaveDataInTransaction("spSaleInsert", sale);
|
|
|
|
sale.Id = sql.LoadDataInTransaction<int, dynamic>("spSaleLookUp", new { sale.CashierId, sale.SaleDate }).FirstOrDefault();
|
|
|
|
// finish filling up sale details
|
|
foreach (var item in details)
|
|
{
|
|
item.SaleId = sale.Id;
|
|
|
|
sql.SaveDataInTransaction("dbo.spSaleDetailInsert", item);
|
|
}
|
|
|
|
sql.CommitTransaction();
|
|
}
|
|
catch
|
|
{
|
|
sql.RollBackTransaction();
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|