I have product with options and extras in cart that line cost is 200
Bass product cost -20 and option 1-50 and option2 -30 and extra1-30 and extra2 -70. I had applied 16 percentage discount for 200 pounds i.e 32 pounds
discount at the time linecost 168(200-32) and cart total 168(200-32).
Then finally i want to remove option or extras from cart one by one whatever
the want. For every option or extra remove cart recalculate line cost and
cart total but i got negative values in cart and please suggest whatver i had
done correct or not.
My linecost function and cart total function
public decimal CalculateLineCost(Product product, List<Option> options, List<Extra> extras, decimal? discount)
{
decimal Linesalesprice = 0.00M;
if (!HasOptions(product.Id) && !HasExtrs(product.Id))
{
if (product.DiscountType == 0)
{
product.SubTotal = Convert.ToDecimal((product.EatInSalesPrice - (discount ?? 0)) * product.Qty);
Linesalesprice = product.SubTotal;
}
else if(product.DiscountType > 0)
{
product.SubAmountAfterDiscount = Convert.ToDecimal(product.SubTotal - product.DiscountSubTotal);
Linesalesprice = Convert.ToDecimal(product.SubAmountAfterDiscount);
}
}
else
{
if (product.DiscountType == 0)
{
decimal lineSubTotal = Convert.ToDecimal(product.EatInSalesPrice + options.SelectMany(option => option.SubProductOptions).Sum(s => s.EatInSalesPrice) + extras.Sum(e => e.EatInSalesPrice));
product.SubTotal = Convert.ToDecimal((lineSubTotal - (discount ?? 0)) * product.Qty);
Linesalesprice = product.SubTotal;
}
else if (product.DiscountType > 0)
{
product.SubAmountAfterDiscount = Convert.ToDecimal(product.SubTotal - product.DiscountSubTotal);
Linesalesprice = Convert.ToDecimal(product.SubAmountAfterDiscount);
}
}
return Linesalesprice;
}
public decimal CalculateCartTotal(List<Product> products,List<Option> options, List<Extra> extras, decimal? discount)
{
decimal carttotal = 0.00M;
foreach (var item in products)
{
decimal linecost = CalculateLineCost(item,item.options, item.Extras,item.DiscountSubTotal);
carttotal += linecost;
}
shoppingmodel.Total = carttotal;
return shoppingmodel.Total;
}
I had used when remove option or extra from cart
product.SubAmountAfterDiscount = Convert.ToDecimal(product.SubTotal - product.DiscountSubTotal);
.
Please give this procedure is correct or not and i dont want negative values in cart
What I have tried:
I had used when remove option or extra from cart
product.SubAmountAfterDiscount = Convert.ToDecimal(product.SubTotal - product.DiscountSubTotal);
.
Please give this procedure is correct or not and i dont want negative values