-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Expand file tree
/
Copy pathProductPricingService.cs
More file actions
55 lines (46 loc) · 2.06 KB
/
ProductPricingService.cs
File metadata and controls
55 lines (46 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System;
using SimplCommerce.Module.Catalog.Areas.Catalog.ViewModels;
using SimplCommerce.Module.Catalog.Models;
using SimplCommerce.Module.Core.Services;
namespace SimplCommerce.Module.Catalog.Services
{
public class ProductPricingService : IProductPricingService
{
private ICurrencyService _currencyService;
public ProductPricingService(ICurrencyService currencyService)
{
_currencyService = currencyService;
}
public CalculatedProductPrice CalculateProductPrice(ProductThumbnail productThumbnail)
{
return CalculateProductPrice(productThumbnail.Price, productThumbnail.OldPrice, productThumbnail.SpecialPrice, productThumbnail.SpecialPriceStart, productThumbnail.SpecialPriceEnd);
}
public CalculatedProductPrice CalculateProductPrice(Product product)
{
return CalculateProductPrice(product.Price, product.OldPrice, product.SpecialPrice, product.SpecialPriceStart, product.SpecialPriceEnd);
}
public CalculatedProductPrice CalculateProductPrice(decimal price, decimal? oldPrice, decimal? specialPrice, DateTimeOffset? specialPriceStart, DateTimeOffset? specialPriceEnd)
{
var percentOfSaving = 0;
var calculatedPrice = price;
if (specialPrice.HasValue && specialPriceStart < DateTimeOffset.UtcNow && DateTimeOffset.UtcNow < specialPriceEnd)
{
calculatedPrice = specialPrice.Value;
if (!oldPrice.HasValue || oldPrice < price)
{
oldPrice = price;
}
}
if (oldPrice.HasValue && oldPrice.Value > 0 && oldPrice > calculatedPrice)
{
percentOfSaving = (int)(100 - Math.Ceiling((calculatedPrice / oldPrice.Value) * 100));
}
return new CalculatedProductPrice(_currencyService)
{
Price = calculatedPrice,
OldPrice = oldPrice,
PercentOfSaving = percentOfSaving
};
}
}
}