1048 lines
30 KiB
C#
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
|
|
}
|
|
}
|