using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using gehGassi.Domain.Common; namespace gehGassi.Core.Interfaces { /// /// Schnittestellenbeschreibung für einen Service der die Preise eines Produktes berechnet /// public interface IShopCalculationService { /// /// Berechnet den Preis einer Produktes für einen Kunden. /// Berücksichtigt die Länder- und Kundeneinstellungen /// /// Id des Produktes /// Id des Kunden /// Anzahl - Stück /// Preis-Kalkulation Task CalculatePriceAsync(int productId, long customerId, int quantity); /// /// Berechnet den Preis einer Produktes für einen Kunden. /// Berücksichtigt die Länder- und Kundeneinstellungen /// /// Id des Produktes /// Id des Kunden /// Iso2 Land für die Rechnung /// Anzahl - Stück /// Preis-Kalkulation Task CalculatePriceAsync(int productId, long customerId, string billingCountry, int quantity); /// /// Berechnet den Preis einer Produktes für einen Kunden. /// Berücksichtigt die Länder- und Kundeneinstellungen /// /// Id des Produktes /// Id des Kunden /// Iso2 Land für die Rechnung /// Anzahl - Stück /// Budget für Banner /// Preis-Kalkulation Task CalculatePriceBannerAsync(int productId, long customerId, string billingCountry, int quantity, decimal budget); /// /// Berechnet den Preis einer Produktes für einen Kunden. /// Berücksichtigt die Länder- und Kundeneinstellungen /// /// Id des Produktes /// Id des Kunden /// Preistype /// Typ der aliquoten Berechnung /// Startdatum /// Enddatum /// Anzahl - Stück /// Preis-Kalkulation Task CalculatePriceAsync(int productId, long customerId, PriceType priceType, PriceAliquotType priceAliquotType, DateTimeOffset startDate, DateTimeOffset endDate, int quantity); /// /// Berechnet den Preis einer Produktes für einen Kunden. /// Berücksichtigt die Länder- und Kundeneinstellungen /// /// Id des Produktes /// Id des Kunden /// Preistype /// Typ der aliquoten Berechnung /// Startdatum /// Enddatum /// Iso2 Land für die Rechnung /// Anzahl - Stück /// Preis-Kalkulation Task CalculatePriceAsync(int productId, long customerId, PriceType priceType, PriceAliquotType priceAliquotType, DateTimeOffset startDate, DateTimeOffset endDate, string billingCountry, int quantity); /// /// Aufschlagen von X Prozent auf eine Preis-Kalkulation /// /// Preis-Kalkulation /// Aufschlag in Prozent /// Id des Produktes /// Iso2 Land für die Rechnung /// Preis-Kalkulation Task AddMarkupAsync(PriceCalculation priceCalculation, decimal markup, int productId, string billingCountry); } /// /// Ergebnis einer Preis-Kalkulation /// public class PriceCalculation { /// /// Preis netto /// public decimal Price { get; set; } /// /// Preis brutto /// public decimal PriceGross { get; set; } /// /// Vorheriger Preis netto /// public decimal OldPrice{ get; set; } /// /// Vorheriger Preis brutto /// public decimal OldPriceGross { get; set; } /// /// Preis2 netto /// public decimal Price2 { get; set; } /// /// Preis2 brutto /// public decimal Price2Gross { get; set; } /// /// Vorheriger Preis2 netto /// public decimal OldPrice2 { get; set; } /// /// Vorheriger Preis2 brutto /// public decimal OldPrice2Gross { get; set; } /// /// Angewandte Steuer - z.B. 10%, 20% /// public decimal TaxRate { get; set; } /// /// Kalkulierte Steuer /// public decimal TaxValue { get; set; } /// /// Gesamtwert Netto (Preis + Preis2) /// public decimal Total { get; set; } /// /// Gesamtwert Brutto (Preis + Preis2) /// public decimal TotalGross { get; set; } /// /// Gesamtwert Vorherig Netto (Preis + Preis2) /// public decimal TotalOld { get; set; } /// /// Gesamtwert vorherig Brutto (Preis + Preis2) /// public decimal TotalOldGross { get; set; } /// /// Stückzahl /// public int Quantity { get; set; } } }