f0bea75284
All the changes necessary to save shopping cart to DB
77 lines
2.3 KiB
C#
77 lines
2.3 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
|
|
SqlDataAccess sql = new SqlDataAccess();
|
|
sql.SaveData("dbo.spSaleInsert", sale, "RMData");
|
|
|
|
// get id from saleModel
|
|
|
|
sale.Id = sql.LoadData<int, dynamic>("spSaleLookUp",new { sale.CashierId, sale.SaleDate }, "RMData").FirstOrDefault();
|
|
|
|
// finish filling up sale details
|
|
foreach (var item in details)
|
|
{
|
|
item.SaleId = sale.Id;
|
|
|
|
// Save Details
|
|
|
|
sql.SaveData("dbo.spSaleDetailInsert", item, "RMData");
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
}
|