1048 lines
30 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassi.Domain.Advertisements;
using gehGassi.Domain.Common;
using gehGassi.Domain.Localization;
namespace gehGassi.Domain.Shop
{
/// <summary>
/// Repräsentiert ein Produkt für den Shop.
/// Es gibt spezielle Produkte die für Buchungen notwendig sind
/// </summary>
public class Product : LocalizableBase, IAuditable
{
/// <summary>
/// Eindeutige Id
/// </summary>
[Key]
public int Id { get; set; }
/// <summary>
/// Produkttyp
/// </summary>
[Required]
public ProductType ProductType { get; set; }
/// <summary>
/// Um welche Art von Listung handelt es sich, wenn das Produkt für Listungen ist
/// </summary>
public ListingType ListingType { get; set; }
/// <summary>
/// Id der Rubrik - notwendig wenn Typ Werbung!
/// </summary>
[MaxLength(128)]
public string AdvertisementCategoryId { get; set; }
/// <summary>
/// Id der Produktkategorie
/// </summary>
public int? ProductCategoryId { get; set; }
/// <summary>
/// Id der Branche - notwendig wenn Typ Listung!
/// </summary>
[MaxLength(128)]
public string BranchId { get; set; }
/// <summary>
/// Einstellung wer das Produkt sehen darf
/// </summary>
[Required]
public ShopVisibility Visibility { get; set; }
/// <summary>
/// Art des Preises für die Kalkulation
/// </summary>
[Required]
public PriceType PriceType { get; set; }
/// <summary>
/// Aliquot Berechnung?
/// </summary>
[Required]
public PriceAliquotType PriceAliquotType { get; set; }
/// <summary>
/// Starttyp bei Zeitbezogenen Produkten
/// </summary>
[Required]
public ProductStartType ProductStartType { get; set; }
/// <summary>
/// Wenn Banner, wo plaziert
/// </summary>
[Required]
public BannerLocation BannerLocation { get; set; }
/// <summary>
/// Wenn Banner wie groß?
/// </summary>
[Required]
public BannerSize BannerSize { get; set; }
/// <summary>
/// Pin: Radius in KM der bei einem Pin inkludiert ist
/// </summary>
[Required]
public double PinRadius { get; set; }
/// <summary>
/// Pin: Prozent des Preises je zusätzlichen KM als Aufschlag
/// </summary>
[Required]
public decimal PinPercentPerKm { get; set; }
/// <summary>
/// Name des Produktes
/// </summary>
[Localized]
[NotMapped]
public string Name
{
get => Get("Name", GetLanguage());
set => Set("Name", GetLanguage(), value);
}
/// <summary>
/// Name - Inhalt
/// Max-Length / 100 im Viewmodel
/// </summary>
[Column]
public string NameLocalized { get; set; }
/// <summary>
/// Kurzbeschreibung
/// </summary>
[Localized]
[NotMapped]
public string ShortDescription
{
get => Get("ShortDescription", GetLanguage());
set => Set("ShortDescription", GetLanguage(), value);
}
/// <summary>
/// Kurzbeschreibung
/// </summary>
public string ShortDescriptionLocalized { get; set; }
/// <summary>
/// Beschreigun des Produktes HTML
/// </summary>
[Localized]
[NotMapped]
public string Description
{
get => Get("Description", GetLanguage());
set => Set("Description", GetLanguage(), value);
}
/// <summary>
/// Kurzbeschreibung
/// </summary>
public string DescriptionLocalized { get; set; }
/// <summary>
/// Bild des Produktes für eine Sprache
/// </summary>
[Localized]
[NotMapped]
public string ImageLanguage
{
get => Get("ImageLanguage", GetLanguage());
set => Set("ImageLanguage", GetLanguage(), value);
}
/// <summary>
/// Bild der Rubrik für eine Sprache - Dateiname
/// </summary>
[Column]
public string ImageLanguageLocalized { get; set; }
/// <summary>
/// Bild für das Produkt - Allgemein
/// </summary>
[MaxLength(500)]
public string Image { get; set; }
/// <summary>
/// Interne Anmerkungen
/// </summary>
public string Comment { get; set; }
/// <summary>
/// Artikelnummer
/// </summary>
[Required]
[MaxLength(100)]
public string Sku { get; set; }
/// <summary>
/// Nummer laut Hersteller
/// </summary>
[MaxLength(100)]
public string ManufacturerPartNumber { get; set; }
/// <summary>
/// Id des Downloads, wenn das Produkt ein Download ist
/// </summary>
public int? DownloadId { get; set; }
/// <summary>
/// Gibt an ob das Produkt versendet werden kann
/// </summary>
[Required]
public bool IsShipEnabled { get; set; }
/// <summary>
/// Gibt an ob das Produkt Versandkostenbefreit ist
/// </summary>
[Required]
public bool IsFreeShipping { get; set; }
/// <summary>
/// Zusatzversandkosten netto
/// </summary>
[Required]
public decimal AdditionalShippingCharge { get; set; }
/// <summary>
/// Gibt an ob das Produkt von der Steuer ausgenommen ist
/// </summary>
[Required]
public bool IsTaxExempt { get; set; }
/// <summary>
/// Id der Zugeordneten Steuer
/// </summary>
[Required]
public int TaxRateId { get; set; }
/// <summary>
/// Anzahl der Produkte auf Lager
/// </summary>
[Required]
public int StockQuantity { get; set; }
/// <summary>
/// Soll die Lagerverfügbarkeit angezeigt werden?
/// </summary>
[Required]
public bool DisplayStockAvailability { get; set; }
/// <summary>
/// Soll die Anzahl der Produkte auf Lager angezeigt werden?
/// </summary>
[Required]
public bool DisplayStockQuantity { get; set; }
/// <summary>
/// Ab wie vielen Produkten eine Warnung an den Admin senden?
/// </summary>
[Required]
public int NotifyAdminForQuantityBelow { get; set; }
/// <summary>
/// Wie viele Produkte müssen mindestens bestellt werden?
/// </summary>
[Required]
public int OrderMinimumQuantity { get; set; }
/// <summary>
/// Wie viele Produkte dürfen maximal bestellt werden?
/// </summary>
[Required]
public int OrderMaximumQuantity { get; set; }
/// <summary>
/// Preis des Produktes netto
/// </summary>
[Required]
public decimal Price { get; set; }
/// <summary>
/// Alter Preis wenn man eine Aktion setzen möchte
/// </summary>
[Required]
public decimal OldPrice { get; set; }
/// <summary>
/// Preis des Produktes netto für Produkte die 2 Preise benötigen
/// </summary>
[Required]
public decimal Price2 { get; set; }
/// <summary>
/// Alter Preis wenn man eine Aktion setzen möchte für Produkte die 2 Preise benötigen
/// </summary>
[Required]
public decimal OldPrice2 { get; set; }
/// <summary>
/// Gets or sets the weight
/// </summary>
[Required]
public decimal Weight { get; set; }
/// <summary>
/// Gets or sets the length
/// </summary>
[Required]
public decimal Length { get; set; }
/// <summary>
/// Gets or sets the width
/// </summary>
[Required]
public decimal Width { get; set; }
/// <summary>
/// Gets or sets the height
/// </summary>
[Required]
public decimal Height { get; set; }
/// <summary>
/// Reihenfolge der Darstellung, danach nach Name
/// </summary>
[Required]
public int DisplayOrder { get; set; }
/// <summary>
/// Wurde das Produkt gelöscht
/// </summary>
[Required]
public bool Deleted { get; set; }
/// <summary>
/// Datum der Erstellung
/// </summary>
[Required]
public DateTimeOffset Created { get; set; }
/// <summary>
/// Prüft ob ein Produkt für eine Bestellquelle - also einen Benutzertyp - verfügbar ist
/// </summary>
/// <param name="orderSource">Quelle der Bestellung</param>
/// <returns>true wenn verfügbar, false sonst</returns>
public bool AvailableFor(OrderSource orderSource)
{
if(Deleted || Visibility == ShopVisibility.None)
return false;
switch (Visibility)
{
case ShopVisibility.Customers when orderSource == OrderSource.Customer:
case ShopVisibility.AppUserDogOwner when orderSource is OrderSource.AppUserDogOwner or OrderSource.AppUserBoth:
case ShopVisibility.AppUserDogWalker when orderSource is OrderSource.AppUserDogWalker or OrderSource.AppUserBoth:
case ShopVisibility.All when orderSource is OrderSource.Customer or OrderSource.AppUserDogOwner or OrderSource.AppUserDogWalker or OrderSource.AppUserBoth:
return true;
case ShopVisibility.None:
default:
return false;
}
}
#region IAuditable
/// <summary>
/// Gibt den eindeutigen Key für die Entität zurück;
/// Hier als String gelöst, weil damit auch kombinierte Schlüssel möglich sind.
/// </summary>
/// <returns>Eindeutiger Key</returns>
public string AuditKey()
{
return Id.ToString();
}
/// <summary>
/// Gibt den Objektnamen bzw. die Tabelle der Entität zurück
/// </summary>
/// <returns>Objektnamen</returns>
public string AuditTable()
{
return "Products";
}
public AuditableOptions Options()
{
return AuditableOptions.Create | AuditableOptions.Edit | AuditableOptions.Delete;
}
#endregion
}
/// <summary>
/// Repräsentiert ein Produkt für den Shop - Listendarstellung.
/// Es gibt spezielle Produkte die für Buchungen notwendig sind
/// </summary>
public class ProductWithNames
{
/// <summary>
/// Eindeutige Id
/// </summary>
public int Id { get; set; }
/// <summary>
/// Produkttyp
/// </summary>
public ProductType ProductType { get; set; }
/// <summary>
/// Um welche Art von Listung handelt es sich, wenn das Produkt für Listungen ist
/// </summary>
public ListingType ListingType { get; set; }
/// <summary>
/// Id der Rubrik - notwendig wenn Typ Listung!
/// </summary>
public string AdvertisementCategoryId { get; set; }
/// <summary>
/// Rubrik Name - notwendig wenn Typ Listung!
/// </summary>
public string AdvertisementCategoryName { get; set; }
/// <summary>
/// Id der Produktkategorie
/// </summary>
public int? ProductCategoryId { get; set; }
/// <summary>
/// Name der Produktkategorie
/// </summary>
public string ProductCategoryName { get; set; }
/// <summary>
/// Id der Branche - notwendig wenn Typ Listung!
/// </summary>
[MaxLength(128)]
public string BranchId { get; set; }
/// <summary>
/// Name der Branche
/// </summary>
public string BranchName { get; set; }
/// <summary>
/// Einstellung wer das Produkt sehen darf
/// </summary>
public ShopVisibility Visibility { get; set; }
/// <summary>
/// Art des Preises für die Kalkulation
/// </summary>
public PriceType PriceType { get; set; }
/// <summary>
/// Aliquot Berechnung?
/// </summary>
public PriceAliquotType PriceAliquotType { get; set; }
/// <summary>
/// Starttyp bei Zeitbezogenen Produkten
/// </summary>
public ProductStartType ProductStartType { get; set; }
/// <summary>
/// Wenn Banner, wo plaziert
/// </summary>
public BannerLocation BannerLocation { get; set; }
/// <summary>
/// Wenn Banner wie groß?
/// </summary>
public BannerSize BannerSize { get; set; }
/// <summary>
/// Pin: Radius in KM der bei einem Pin inkludiert ist
/// </summary>
public double PinRadius { get; set; }
/// <summary>
/// Pin: Prozent des Preises je zusätzlichen KM als Aufschlag
/// </summary>
public decimal PinPercentPerKm { get; set; }
/// <summary>
/// Name des Produktes
/// </summary>
public string Name { get; set; }
/// <summary>
/// Name Übersetzungen
/// </summary>
public string NameLocalized { get; set; }
/// <summary>
/// Kurzbeschreibung
/// </summary>
public string ShortDescription { get; set; }
/// <summary>
/// Kurzbeschreibung Übersetzungen
/// </summary>
public string ShortDescriptionLocalized { get; set; }
/// <summary>
/// Beschreibung des Produktes HTML
/// </summary>
public string Description { get; set; }
/// <summary>
/// Beschreibung des Produktes HTML Übersetzungen
/// </summary>
public string DescriptionLocalized { get; set; }
/// <summary>
/// Bild des Produktes für eine Sprache
/// </summary>
public string ImageLanguage { get; set; }
/// <summary>
/// Bild des Produktes für eine Sprache Übersetzungen
/// </summary>
public string ImageLanguageLocalized { get; set; }
/// <summary>
/// Bild für das Produkt - Allgemein
/// </summary>
public string Image { get; set; }
/// <summary>
/// Interne Anmerkungen
/// </summary>
public string Comment { get; set; }
/// <summary>
/// Artikelnummer
/// </summary>
public string Sku { get; set; }
/// <summary>
/// Nummer laut Hersteller
/// </summary>
public string ManufacturerPartNumber { get; set; }
/// <summary>
/// Id des Downloads, wenn das Produkt ein Download ist
/// </summary>
public int? DownloadId { get; set; }
/// <summary>
/// Gibt an ob das Produkt versendet werden kann
/// </summary>
public bool IsShipEnabled { get; set; }
/// <summary>
/// Gibt an ob das Produkt Versandkostenbefreit ist
/// </summary>
public bool IsFreeShipping { get; set; }
/// <summary>
/// Zusatzversandkosten netto
/// </summary>
public decimal AdditionalShippingCharge { get; set; }
/// <summary>
/// Gibt an ob das Produkt von der Steuer ausgenommen ist
/// </summary>
public bool IsTaxExempt { get; set; }
/// <summary>
/// Id der Zugeordneten Steuer
/// </summary>
public int TaxRateId { get; set; }
/// <summary>
/// Name der Steuerstufe
/// </summary>
public string TaxRateName { get; set; }
/// <summary>
/// Anzahl der Produkte auf Lager
/// </summary>
public int StockQuantity { get; set; }
/// <summary>
/// Soll die Lagerverfügbarkeit angezeigt werden?
/// </summary>
public bool DisplayStockAvailability { get; set; }
/// <summary>
/// Soll die Anzahl der Produkte auf Lager angezeigt werden?
/// </summary>
public bool DisplayStockQuantity { get; set; }
/// <summary>
/// Ab wie vielen Produkten eine Warnung an den Admin senden?
/// </summary>
public int NotifyAdminForQuantityBelow { get; set; }
/// <summary>
/// Wie viele Produkte müssen mindestens bestellt werden?
/// </summary>
public int OrderMinimumQuantity { get; set; }
/// <summary>
/// Wie viele Produkte dürfen maximal bestellt werden?
/// </summary>
public int OrderMaximumQuantity { get; set; }
/// <summary>
/// Preis des Produktes netto
/// </summary>
public decimal Price { get; set; }
/// <summary>
/// Alter Preis wenn man eine Aktion setzen möchte
/// </summary>
public decimal OldPrice { get; set; }
/// <summary>
/// Preis des Produktes netto für Produkte die 2 Preise benötigen
/// </summary>
public decimal Price2 { get; set; }
/// <summary>
/// Alter Preis wenn man eine Aktion setzen möchte für Produkte die 2 Preise benötigen
/// </summary>
public decimal OldPrice2 { get; set; }
/// <summary>
/// Gets or sets the weight
/// </summary>
public decimal Weight { get; set; }
/// <summary>
/// Gets or sets the length
/// </summary>
public decimal Length { get; set; }
/// <summary>
/// Gets or sets the width
/// </summary>
public decimal Width { get; set; }
/// <summary>
/// Gets or sets the height
/// </summary>
public decimal Height { get; set; }
/// <summary>
/// Reihenfolge der Darstellung, danach nach Name
/// </summary>
public int DisplayOrder { get; set; }
/// <summary>
/// Wurde das Produkt gelöscht
/// </summary>
public bool Deleted { get; set; }
/// <summary>
/// Anzahl der Ländereinstellungen für dieses Produkt
/// </summary>
public int CountrySettingsCount { get; set; }
/// <summary>
/// Datum der Erstellung
/// </summary>
public DateTimeOffset Created { get; set; }
}
/// <summary>
/// Repräsentiert ein Produkt für den Shop - Listendarstellung mit Ländereinstellungen für ein Land
/// </summary>
public class ProductWithNamesCountry
{
/// <summary>
/// Eindeutige Id
/// </summary>
public int Id { get; set; }
/// <summary>
/// Produkttyp
/// </summary>
public ProductType ProductType { get; set; }
/// <summary>
/// Um welche Art von Listung handelt es sich, wenn das Produkt für Listungen ist
/// </summary>
public ListingType ListingType { get; set; }
/// <summary>
/// Id der Rubrik - notwendig wenn Typ Listung!
/// </summary>
public string AdvertisementCategoryId { get; set; }
/// <summary>
/// Rubrik Name - notwendig wenn Typ Listung!
/// </summary>
public string AdvertisementCategoryName { get; set; }
/// <summary>
/// Id der Produktkategorie
/// </summary>
public int? ProductCategoryId { get; set; }
/// <summary>
/// Name der Produktkategorie
/// </summary>
public string ProductCategoryName { get; set; }
/// <summary>
/// Id der Branche - notwendig wenn Typ Listung!
/// </summary>
[MaxLength(128)]
public string BranchId { get; set; }
/// <summary>
/// Name der Branche
/// </summary>
public string BranchName { get; set; }
/// <summary>
/// Einstellung wer das Produkt sehen darf
/// </summary>
public ShopVisibility Visibility { get; set; }
/// <summary>
/// Art des Preises für die Kalkulation
/// </summary>
public PriceType PriceType { get; set; }
/// <summary>
/// Aliquot Berechnung?
/// </summary>
public PriceAliquotType PriceAliquotType { get; set; }
/// <summary>
/// Starttyp bei Zeitbezogenen Produkten
/// </summary>
public ProductStartType ProductStartType { get; set; }
/// <summary>
/// Wenn Banner, wo plaziert
/// </summary>
public BannerLocation BannerLocation { get; set; }
/// <summary>
/// Wenn Banner wie groß?
/// </summary>
public BannerSize BannerSize { get; set; }
/// <summary>
/// Pin: Radius in KM der bei einem Pin inkludiert ist
/// </summary>
public double PinRadius { get; set; }
/// <summary>
/// Pin: Prozent des Preises je zusätzlichen KM als Aufschlag
/// </summary>
public decimal PinPercentPerKm { get; set; }
/// <summary>
/// Name des Produktes
/// </summary>
public string Name { get; set; }
/// <summary>
/// Name Übersetzungen
/// </summary>
public string NameLocalized { get; set; }
/// <summary>
/// Kurzbeschreibung
/// </summary>
public string ShortDescription { get; set; }
/// <summary>
/// Kurzbeschreibung Übersetzungen
/// </summary>
public string ShortDescriptionLocalized { get; set; }
/// <summary>
/// Beschreibung des Produktes HTML
/// </summary>
public string Description { get; set; }
/// <summary>
/// Beschreibung des Produktes HTML Übersetzungen
/// </summary>
public string DescriptionLocalized { get; set; }
/// <summary>
/// Bild des Produktes für eine Sprache
/// </summary>
public string ImageLanguage { get; set; }
/// <summary>
/// Bild des Produktes für eine Sprache Übersetzungen
/// </summary>
public string ImageLanguageLocalized { get; set; }
/// <summary>
/// Bild für das Produkt - Allgemein
/// </summary>
public string Image { get; set; }
/// <summary>
/// Interne Anmerkungen
/// </summary>
public string Comment { get; set; }
/// <summary>
/// Artikelnummer
/// </summary>
public string Sku { get; set; }
/// <summary>
/// Nummer laut Hersteller
/// </summary>
public string ManufacturerPartNumber { get; set; }
/// <summary>
/// Id des Downloads, wenn das Produkt ein Download ist
/// </summary>
public int? DownloadId { get; set; }
/// <summary>
/// Gibt an ob das Produkt versendet werden kann
/// </summary>
public bool IsShipEnabled { get; set; }
/// <summary>
/// Gibt an ob das Produkt Versandkostenbefreit ist
/// </summary>
public bool IsFreeShipping { get; set; }
/// <summary>
/// Zusatzversandkosten netto
/// </summary>
public decimal AdditionalShippingCharge { get; set; }
/// <summary>
/// Gibt an ob das Produkt von der Steuer ausgenommen ist
/// </summary>
public bool IsTaxExempt { get; set; }
/// <summary>
/// Id der Zugeordneten Steuer
/// </summary>
public int TaxRateId { get; set; }
/// <summary>
/// Name der Steuerstufe
/// </summary>
public string TaxRateName { get; set; }
/// <summary>
/// Anzahl der Produkte auf Lager
/// </summary>
public int StockQuantity { get; set; }
/// <summary>
/// Soll die Lagerverfügbarkeit angezeigt werden?
/// </summary>
public bool DisplayStockAvailability { get; set; }
/// <summary>
/// Soll die Anzahl der Produkte auf Lager angezeigt werden?
/// </summary>
public bool DisplayStockQuantity { get; set; }
/// <summary>
/// Ab wie vielen Produkten eine Warnung an den Admin senden?
/// </summary>
public int NotifyAdminForQuantityBelow { get; set; }
/// <summary>
/// Wie viele Produkte müssen mindestens bestellt werden?
/// </summary>
public int OrderMinimumQuantity { get; set; }
/// <summary>
/// Wie viele Produkte dürfen maximal bestellt werden?
/// </summary>
public int OrderMaximumQuantity { get; set; }
/// <summary>
/// Preis des Produktes netto
/// </summary>
public decimal Price { get; set; }
/// <summary>
/// Alter Preis wenn man eine Aktion setzen möchte
/// </summary>
public decimal OldPrice { get; set; }
/// <summary>
/// Preis des Produktes netto für Produkte die 2 Preise benötigen
/// </summary>
public decimal Price2 { get; set; }
/// <summary>
/// Alter Preis wenn man eine Aktion setzen möchte für Produkte die 2 Preise benötigen
/// </summary>
public decimal OldPrice2 { get; set; }
/// <summary>
/// Gets or sets the weight
/// </summary>
public decimal Weight { get; set; }
/// <summary>
/// Gets or sets the length
/// </summary>
public decimal Length { get; set; }
/// <summary>
/// Gets or sets the width
/// </summary>
public decimal Width { get; set; }
/// <summary>
/// Gets or sets the height
/// </summary>
public decimal Height { get; set; }
/// <summary>
/// Reihenfolge der Darstellung, danach nach Name
/// </summary>
public int DisplayOrder { get; set; }
/// <summary>
/// Wurde das Produkt gelöscht
/// </summary>
public bool Deleted { get; set; }
/// <summary>
/// Anzahl der Ländereinstellungen für dieses Produkt
/// </summary>
public int CountrySettingsCount { get; set; }
/// <summary>
/// Datum der Erstellung
/// </summary>
public DateTimeOffset Created { get; set; }
/// <summary>
/// ISO2 Land für die Einstellungen
/// </summary>
public string CountryIso { get; set; }
/// <summary>
/// Preis des Produktes netto
/// </summary>
public decimal PriceCountry { get; set; }
/// <summary>
/// Alter Preis wenn man eine Aktion setzen möchte
/// </summary>
public decimal OldPriceCountry { get; set; }
/// <summary>
/// Preis des Produktes netto für Produkte die 2 Preise benötigen
/// </summary>
public decimal Price2Country { get; set; }
/// <summary>
/// Alter Preis wenn man eine Aktion setzen möchte für Produkte die 2 Preise benötigen
/// </summary>
public decimal OldPrice2Country { get; set; }
/// <summary>
/// Einstellung ob das Produkt in einem Land nicht verfügbar ist
/// </summary>
public bool NotAvailable { get; set; }
}
/// <summary>
/// Einstellungen eines Produktes in Bezug auf ein Land
/// </summary>
public class ProductCountry : IAuditable
{
/// <summary>
/// Eindeutige Id
/// </summary>
[Key]
public int Id { get; set; }
/// <summary>
/// Id des Produktes
/// </summary>
[Required]
public int ProductId { get; set; }
/// <summary>
/// ISO2 Land für die Einstellungen
/// </summary>
[Required]
[MaxLength(2)]
public string CountryIso { get; set; }
/// <summary>
/// Preis des Produktes netto
/// </summary>
[Required]
public decimal Price { get; set; }
/// <summary>
/// Alter Preis wenn man eine Aktion setzen möchte
/// </summary>
[Required]
public decimal OldPrice { get; set; }
/// <summary>
/// Preis des Produktes netto für Produkte die 2 Preise benötigen
/// </summary>
[Required]
public decimal Price2 { get; set; }
/// <summary>
/// Alter Preis wenn man eine Aktion setzen möchte für Produkte die 2 Preise benötigen
/// </summary>
[Required]
public decimal OldPrice2 { get; set; }
/// <summary>
/// Einstellung ob das Produkt in einem Land nicht verfügbar ist
/// </summary>
[Required]
public bool NotAvailable { get; set; }
#region IAuditable
/// <summary>
/// Gibt den eindeutigen Key für die Entität zurück;
/// Hier als String gelöst, weil damit auch kombinierte Schlüssel möglich sind.
/// </summary>
/// <returns>Eindeutiger Key</returns>
public string AuditKey()
{
return Id.ToString();
}
/// <summary>
/// Gibt den Objektnamen bzw. die Tabelle der Entität zurück
/// </summary>
/// <returns>Objektnamen</returns>
public string AuditTable()
{
return "ProductCountries";
}
public AuditableOptions Options()
{
return AuditableOptions.Create | AuditableOptions.Edit | AuditableOptions.Delete;
}
#endregion
}
}