using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using gehGassi.Domain.Localization; using gehGassi.Web.Helper; using Microsoft.Extensions.Localization; namespace gehGassi.Web.Models { /// /// Viewmodel für ein Produkt /// public class ProductVm { /// /// Eindeutige Id /// [Required(ErrorMessage = "Err_Required")] public int Id { get; set; } /// /// Produkttyp /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Product_ProductType", Description = "Product_ProductType_Desc")] public ProductTypeVm ProductType { get; set; } /// /// Um welche Art von Listung handelt es sich, wenn das Produkt für Listungen ist /// [Display(Name = "Common_ListingType", Description = "Common_ListingType_Desc")] public ListingTypeVm ListingType { get; set; } /// /// Id der Rubrik - notwendig wenn Typ Listung! /// [Display(Name = "Product_AdvertisementCategoryId")] public string AdvertisementCategoryId { get; set; } /// /// Id der Produktkategorie /// [Display(Name = "Product_ProductCategoryId")] public int? ProductCategoryId { get; set; } /// /// Id der Branche - notwendig wenn Typ Listung! /// [Display(Name = "Product_BranchId")] public string BranchId { get; set; } /// /// Einstellung wer das Produkt sehen darf /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Product_Visibility", Description = "Product_Visibility_Desc")] public ShopVisibilityVm Visibility { get; set; } /// /// Art des Preises für die Kalkulation /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Product_PriceType", Description = "Product_PriceType_Desc")] public PriceTypeVm PriceType { get; set; } /// /// Aliquot Berechnung? /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Product_PriceAliquotType", Description = "Product_PriceAliquotType_Desc")] public PriceAliquotTypeVm PriceAliquotType { get; set; } /// /// Starttyp bei Zeitbezogenen Produkten /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Product_ProductStartType", Description = "Product_ProductStartType_Desc")] public ProductStartTypeVm ProductStartType { get; set; } /// /// Wenn Banner, wo plaziert /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Product_BannerLocation", Description = "Product_BannerLocation_Desc")] public BannerLocationVm BannerLocation { get; set; } /// /// Wenn Banner wie groß? /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Product_BannerSize", Description = "Product_BannerSize_Desc")] public BannerSizeVm BannerSize { get; set; } /// /// Pin: Radius in KM der bei einem Pin inkludiert ist /// [Required(ErrorMessage = "Err_Required")] [Range(0.0, 500.0, ErrorMessage = "Err_Range")] [Display(Name = "Product_PinRadius", Description = "Product_PinRadius_Desc")] public double PinRadius { get; set; } /// /// Pin: Prozent des Preises je zusätzlichen KM als Aufschlag /// [Required(ErrorMessage = "Err_Required")] [Range(0.0, 100.0, ErrorMessage = "Err_Range")] [Display(Name = "Product_PinPercentPerKm", Description = "Product_PinPercentPerKm_Desc")] public decimal PinPercentPerKm { get; set; } /// /// Bild für das Produkt - Allgemein /// [MaxLength(500, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Product_Image", Description = "Product_Image_Desc")] public string Image { get; set; } /// /// Interne Anmerkungen /// [Display(Name = "Common_Comment")] public string Comment { get; set; } /// /// Artikelnummer /// [Required(ErrorMessage = "Err_Required")] [MaxLength(100, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Product_Sku", Description = "Product_Sku_Desc")] public string Sku { get; set; } /// /// Nummer laut Hersteller /// [MaxLength(100, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Product_ManufacturerPartNumber", Description = "Product_ManufacturerPartNumber_Desc")] public string ManufacturerPartNumber { get; set; } /// /// Id des Downloads, wenn das Produkt ein Download ist /// [Display(Name = "Product_DownloadId", Description = "Product_DownloadId_Desc")] public int? DownloadId { get; set; } /// /// Gibt an ob das Produkt versendet werden kann /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Product_IsShipEnabled", Description = "Product_IsShipEnabled_Desc")] public bool IsShipEnabled { get; set; } /// /// Gibt an ob das Produkt Versandkostenbefreit ist /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Product_IsFreeShipping", Description = "Product_IsFreeShipping_Desc")] public bool IsFreeShipping { get; set; } /// /// Zusatzversandkosten netto /// [Required(ErrorMessage = "Err_Required")] [Range(0.0, 100000, ErrorMessage = "Err_Range")] [Display(Name = "Product_AdditionalShippingCharge", Description = "Product_AdditionalShippingCharge_Desc")] public decimal AdditionalShippingCharge { get; set; } /// /// Gibt an ob das Produkt von der Steuer ausgenommen ist /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Product_IsTaxExempt", Description = "Product_IsTaxExempt_Desc")] public bool IsTaxExempt { get; set; } /// /// Id der Zugeordneten Steuer /// [Required(ErrorMessage = "Err_Required")] [Range(1, int.MaxValue, ErrorMessage = "Err_Required")] [Display(Name = "Product_TaxRateId", Description = "Product_TaxRateId_Desc")] public int TaxRateId { get; set; } /// /// Anzahl der Produkte auf Lager /// [Required(ErrorMessage = "Err_Required")] [Range(0, 100000000, ErrorMessage = "Err_Range")] [Display(Name = "Product_StockQuantity", Description = "Product_StockQuantity_Desc")] public int StockQuantity { get; set; } /// /// Soll die Lagerverfügbarkeit angezeigt werden? /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Product_DisplayStockAvailability", Description = "Product_DisplayStockAvailability_Desc")] public bool DisplayStockAvailability { get; set; } /// /// Soll die Anzahl der Produkte auf Lager angezeigt werden? /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Product_DisplayStockQuantity", Description = "Product_DisplayStockQuantity_Desc")] public bool DisplayStockQuantity { get; set; } /// /// Ab wie vielen Produkten eine Warnung an den Admin senden? /// [Required(ErrorMessage = "Err_Required")] [Range(0, 100000000, ErrorMessage = "Err_Range")] [Display(Name = "Product_NotifyAdminForQuantityBelow", Description = "Product_NotifyAdminForQuantityBelow_Desc")] public int NotifyAdminForQuantityBelow { get; set; } /// /// Wie viele Produkte müssen mindestens bestellt werden? /// [Required(ErrorMessage = "Err_Required")] [Range(0, 100000000, ErrorMessage = "Err_Range")] [Display(Name = "Product_OrderMinimumQuantity", Description = "Product_OrderMinimumQuantity_Desc")] public int OrderMinimumQuantity { get; set; } /// /// Wie viele Produkte dürfen maximal bestellt werden? /// [Required(ErrorMessage = "Err_Required")] [Range(0, 100000000, ErrorMessage = "Err_Range")] [Display(Name = "Product_OrderMaximumQuantity", Description = "Product_OrderMaximumQuantity_Desc")] public int OrderMaximumQuantity { get; set; } /// /// Preis des Produktes netto /// [Required(ErrorMessage = "Err_Required")] [Range(0.0, 100000000, ErrorMessage = "Err_Range")] [Display(Name = "Product_Price", Description = "Product_Price_Desc")] public decimal Price { get; set; } /// /// Alter Preis wenn man eine Aktion setzen möchte /// [Required(ErrorMessage = "Err_Required")] [Range(0.0, 100000000, ErrorMessage = "Err_Range")] [Display(Name = "Product_OldPrice", Description = "Product_OldPrice_Desc")] public decimal OldPrice { get; set; } /// /// Preis des Produktes netto für Produkte die 2 Preise benötigen /// [Required(ErrorMessage = "Err_Required")] [Range(0.0, 100000000, ErrorMessage = "Err_Range")] [Display(Name = "Product_Price2", Description = "Product_Price2_Desc")] public decimal Price2 { get; set; } /// /// Alter Preis wenn man eine Aktion setzen möchte für Produkte die 2 Preise benötigen /// [Required(ErrorMessage = "Err_Required")] [Range(0.0, 100000000, ErrorMessage = "Err_Range")] [Display(Name = "Product_OldPrice2", Description = "Product_OldPrice2_Desc")] public decimal OldPrice2 { get; set; } /// /// Gets or sets the weight /// [Required(ErrorMessage = "Err_Required")] [Range(0.0, 100000, ErrorMessage = "Err_Range")] [Display(Name = "Product_Weight", Description = "Product_Weight_Desc")] public decimal Weight { get; set; } /// /// Gets or sets the length /// [Required(ErrorMessage = "Err_Required")] [Range(0.0, 100000000, ErrorMessage = "Err_Range")] [Display(Name = "Product_Length", Description = "Product_Length_Desc")] public decimal Length { get; set; } /// /// Gets or sets the width /// [Required(ErrorMessage = "Err_Required")] [Range(0.0, 100000000, ErrorMessage = "Err_Range")] [Display(Name = "Product_Width", Description = "Product_Width_Desc")] public decimal Width { get; set; } /// /// Gets or sets the height /// [Required(ErrorMessage = "Err_Required")] [Range(0.0, 100000000, ErrorMessage = "Err_Range")] [Display(Name = "Product_Height", Description = "Product_Height_Desc")] public decimal Height { get; set; } /// /// Reihenfolge der Darstellung, danach nach Name /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Common_DisplayOrder", Description = "Common_DisplayOrder_Desc")] public int DisplayOrder { get; set; } /// /// Wurde das Produkt gelöscht /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Common_Deleted")] public bool Deleted { get; set; } /// /// Datum der Erstellung /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Common_Created")] public DateTimeOffset Created { get; set; } /// /// Texte mehrsprachig /// public List TextVms { get; set; } } /// /// Viewmodel für das Anlegen und Bearbeiten von Produkten /// public class ProductCrudVm : ProductVm, IValidatableObject { /// /// Name der Produktkategorie /// public string ProductCategoryName { get; set; } /// /// Name der Steuerstufe /// public string TaxRateName { get; set; } /// /// Name der Branche /// public string BranchName { get; set; } /// /// Name der Rubrik /// public string AdvertisementCategoryName { get; set; } public IEnumerable Validate(ValidationContext validationContext) { if (ProductType == ProductTypeVm.Advertisement) { if (string.IsNullOrEmpty(AdvertisementCategoryId)) { var stringLocalizer = validationContext.GetService(typeof(IStringLocalizer)) as IStringLocalizer; yield return new ValidationResult(stringLocalizer["Err_AdvertisementCategory_Missing"], new List { "AdvertisementCategoryId" }); } } if (ProductType == ProductTypeVm.Listing) { if (string.IsNullOrEmpty(BranchId)) { var stringLocalizer = validationContext.GetService(typeof(IStringLocalizer)) as IStringLocalizer; yield return new ValidationResult(stringLocalizer["Err_Branch_Missing"], new List { "BranchId" }); } } if (OrderMaximumQuantity < OrderMinimumQuantity) { var stringLocalizer = validationContext.GetService(typeof(IStringLocalizer)) as IStringLocalizer; yield return new ValidationResult(stringLocalizer["Err_OrderMaximumQuantity"], new List { "OrderMaximumQuantity" }); } } } /// /// Hilfsklasse für das Erfassen Mehrsprachiger Texte für Produkte. /// Wird so gelöst, damit beliebig viele Sprachen verwendet werden können /// public class ProductTextVm { /// /// Id /// [Required(ErrorMessage = "Err_Required")] public int Id { get; set; } /// /// Srache /// [Required(ErrorMessage = "Err_Required")] public string Language { get; set; } /// /// Name /// //[Required(ErrorMessage = "Err_Required")] [RequiredIfDefaultLanguage("Language", ErrorMessage = "Err_Required")] [MaxLength(100, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Product_Name", Description = "Product_Name_Desc")] public string Name { get; set; } /// /// Beschreibung /// [Display(Name = "Product_ShortDescription", Description = "Product_ShortDescription_Desc")] [MaxLength(500, ErrorMessage = "Err_StringLength_Max")] public string ShortDescription { get; set; } /// /// Beschreibung /// [Display(Name = "Product_Description", Description = "Product_Description_Desc")] public string Description { get; set; } /// /// Bild für die jeweilige Sprache /// [Display(Name = "Product_ImageLanguage", Description = "Product_ImageLanguage_Desc")] public string ImageLanguage { get; set; } } /// /// Viewmodel für ein Produkt Listendarstellung /// public class ProductListVm : LocalizableBase { /// /// Eindeutige Id /// public int Id { get; set; } /// /// Produkttyp /// public ProductTypeVm ProductType { get; set; } /// /// Produkttyp als Text /// public string ProductTypeText { get; set; } /// /// Um welche Art von Listung handelt es sich, wenn das Produkt für Listungen ist /// public ListingTypeVm ListingType { get; set; } /// /// Id der Rubrik - notwendig wenn Typ Listung! /// public string AdvertisementCategoryId { get; set; } /// /// Name der Rubrik wenn Listing /// public string AdvertisementCategoryName { get; set; } /// /// Id der Produktkategorie /// public int? ProductCategoryId { get; set; } /// /// Name der Produktkategorie /// public string ProductCategoryName { get; set; } /// /// Id der Branche - notwendig wenn Typ Listung! /// public string BranchId { get; set; } /// /// Name der Branche /// public string BranchName { get; set; } /// /// Einstellung wer das Produkt sehen darf /// public ShopVisibilityVm Visibility { get; set; } /// /// Einstellung wer das Produkt sehen darf als Text /// public string VisibilityText { get; set; } /// /// Art des Preises für die Kalkulation /// public PriceTypeVm PriceType { get; set; } /// /// Art des Preises für die Kalkulation /// public string PriceTypeText { get; set; } /// /// Aliquot Berechnung? /// public PriceAliquotTypeVm PriceAliquotType { get; set; } /// /// Aliquot Berechnung? /// public string PriceAliquotTypeText { get; set; } /// /// Starttyp bei Zeitbezogenen Produkten /// public ProductStartTypeVm ProductStartType { get; set; } /// /// Starttyp bei Zeitbezogenen Produkten /// public string ProductStartTypeText { get; set; } /// /// Wenn Banner, wo plaziert /// public BannerLocationVm BannerLocation { get; set; } /// /// Text für Bannerplatzierung /// public string BannerLocationText { get; set; } /// /// Wenn Banner wie groß? /// public BannerSizeVm BannerSize { get; set; } /// /// Text für Bannergröße /// public string BannerSizeText { get; set; } /// /// Pin: Radius in KM der bei einem Pin inkludiert ist /// public double PinRadius { get; set; } /// /// Pin: Prozent des Preises je zusätzlichen KM als Aufschlag /// public decimal PinPercentPerKm { get; set; } /// /// Name des Produktes /// public string Name { get => Get("Name", GetLanguage()); set => Set("Name", GetLanguage(), value); } /// /// Name Übersetzungen /// public string NameLocalized { get; set; } /// /// Kurzbeschreibung des Produktes /// public string ShortDescription { get => Get("ShortDescription", GetLanguage()); set => Set("ShortDescription", GetLanguage(), value); } /// /// Kurzbeschreibung Übersetzungen /// public string ShortDescriptionLocalized { get; set; } /// /// Bild für das Produkt - Allgemein /// public string Image { get; set; } /// /// Bild für das Produkt - für die gewählte Sprache /// public string ImageLanguage { get; set; } /// /// Artikelnummer /// public string Sku { get; set; } /// /// Gibt an ob das Produkt versendet werden kann /// public bool IsShipEnabled { get; set; } /// /// Gibt an ob das Produkt Versandkostenbefreit ist /// public bool IsFreeShipping { get; set; } /// /// Zusatzversandkosten netto /// public decimal AdditionalShippingCharge { get; set; } /// /// Gibt an ob das Produkt von der Steuer ausgenommen ist /// public bool IsTaxExempt { get; set; } /// /// Id der Zugeordneten Steuer /// public int TaxRateId { get; set; } /// /// Name der Steuerstufe /// public string TaxRateName { get; set; } /// /// Anzahl der Produkte auf Lager /// public int StockQuantity { get; set; } /// /// Wie viele Produkte müssen mindestens bestellt werden? /// public int OrderMinimumQuantity { get; set; } /// /// Wie viele Produkte dürfen maximal bestellt werden? /// public int OrderMaximumQuantity { get; set; } /// /// Preis des Produktes netto /// public decimal Price { get; set; } /// /// Alter Preis wenn man eine Aktion setzen möchte /// public decimal OldPrice { get; set; } /// /// Preis des Produktes netto für Produkte die 2 Preise benötigen /// public decimal Price2 { get; set; } /// /// Alter Preis wenn man eine Aktion setzen möchte für Produkte die 2 Preise benötigen /// public decimal OldPrice2 { get; set; } /// /// Reihenfolge der Darstellung, danach nach Name /// public int DisplayOrder { get; set; } /// /// Anzahl der Ländereinstellungen für dieses Produkt /// public int CountrySettingsCount { get; set; } /// /// Wurde das Produkt gelöscht /// public bool Deleted { get; set; } /// /// Datum der Erstellung /// public DateTimeOffset Created { get; set; } } /// /// Viewmodel für ein Produkt Listendarstellung um Ländersettings erweitert /// public class ProductListCountryVm : ProductListVm { /// /// ISO2 Land für die Einstellungen /// public string CountryIso { get; set; } /// /// Preis des Produktes netto /// public decimal PriceCountry { get; set; } /// /// Alter Preis wenn man eine Aktion setzen möchte /// public decimal OldPriceCountry { get; set; } /// /// Preis des Produktes netto für Produkte die 2 Preise benötigen /// public decimal Price2Country { get; set; } /// /// Alter Preis wenn man eine Aktion setzen möchte für Produkte die 2 Preise benötigen /// public decimal OldPrice2Country { get; set; } /// /// Einstellung ob das Produkt in einem Land nicht verfügbar ist /// public bool NotAvailable { get; set; } } /// /// Einstellungen eines Produktes in Bezug auf ein Land /// public class ProductCountryVm { /// /// Eindeutige Id /// [Required(ErrorMessage = "Err_Required")] public int Id { get; set; } /// /// Id des Produktes /// [Required(ErrorMessage = "Err_Required")] public int ProductId { get; set; } /// /// ISO2 Land für die Einstellungen /// [Required(ErrorMessage = "Err_Required")] [MaxLength(100, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Common_Country")] public string CountryIso { get; set; } /// /// Preis des Produktes netto /// [Required(ErrorMessage = "Err_Required")] [Range(0.0, 100000000, ErrorMessage = "Err_Range")] [Display(Name = "Product_Price", Description = "Product_Price_Desc")] public decimal Price { get; set; } /// /// Alter Preis wenn man eine Aktion setzen möchte /// [Required(ErrorMessage = "Err_Required")] [Range(0.0, 100000000, ErrorMessage = "Err_Range")] [Display(Name = "Product_OldPrice", Description = "Product_OldPrice_Desc")] public decimal OldPrice { get; set; } /// /// Preis des Produktes netto für Produkte die 2 Preise benötigen /// [Required(ErrorMessage = "Err_Required")] [Range(0.0, 100000000, ErrorMessage = "Err_Range")] [Display(Name = "Product_Price2", Description = "Product_Price2_Desc")] public decimal Price2 { get; set; } /// /// Alter Preis wenn man eine Aktion setzen möchte für Produkte die 2 Preise benötigen /// [Required(ErrorMessage = "Err_Required")] [Range(0.0, 100000000, ErrorMessage = "Err_Range")] [Display(Name = "Product_OldPrice2", Description = "Product_OldPrice2_Desc")] public decimal OldPrice2 { get; set; } /// /// Einstellung ob das Produkt in einem Land nicht verfügbar ist /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Product_NotAvailable", Description = "Product_NotAvailable_Desc")] public bool NotAvailable { get; set; } } /// /// Viewmodel für das Anlegen und Bearbeiten einer Produkteinstellung für ein Land /// public class ProductCountryCrudVm : ProductCountryVm { /// /// Name des Landes /// public string CountryName { get; set; } } public class ProductShopVm : LocalizableBase { /// /// Eindeutige Id /// public int Id { get; set; } /// /// Produkttyp /// public ProductTypeVm ProductType { get; set; } /// /// Produkttyp als Text /// public string ProductTypeText { get; set; } /// /// Um welche Art von Listung handelt es sich, wenn das Produkt für Listungen ist /// public ListingTypeVm ListingType { get; set; } /// /// Id der Rubrik - notwendig wenn Typ Listung! /// public string AdvertisementCategoryId { get; set; } /// /// Name der Rubrik wenn Listing /// public string AdvertisementCategoryName { get; set; } /// /// Id der Produktkategorie /// public int? ProductCategoryId { get; set; } /// /// Name der Produktkategorie /// public string ProductCategoryName { get; set; } /// /// Id der Branche - notwendig wenn Typ Listung! /// public string BranchId { get; set; } /// /// Name der Branche /// public string BranchName { get; set; } /// /// Art des Preises für die Kalkulation /// public PriceTypeVm PriceType { get; set; } /// /// Art des Preises für die Kalkulation /// public string PriceTypeText { get; set; } /// /// Aliquot Berechnung? /// public PriceAliquotTypeVm PriceAliquotType { get; set; } /// /// Aliquot Berechnung? /// public string PriceAliquotTypeText { get; set; } /// /// Starttyp bei Zeitbezogenen Produkten /// public ProductStartTypeVm ProductStartType { get; set; } /// /// Starttyp bei Zeitbezogenen Produkten /// public string ProductStartTypeText { get; set; } /// /// Wenn Banner, wo plaziert /// public BannerLocationVm BannerLocation { get; set; } /// /// Text für Bannerplatzierung /// public string BannerLocationText { get; set; } /// /// Wenn Banner wie groß? /// public BannerSizeVm BannerSize { get; set; } /// /// Text für Bannergröße /// public string BannerSizeText { get; set; } /// /// Pin: Radius in KM der bei einem Pin inkludiert ist /// public double PinRadius { get; set; } /// /// Pin: Prozent des Preises je zusätzlichen KM als Aufschlag /// public decimal PinPercentPerKm { get; set; } /// /// Name des Produktes /// public string Name { get => Get("Name", GetLanguage()); set => Set("Name", GetLanguage(), value); } /// /// Name Übersetzungen /// public string NameLocalized { get; set; } /// /// Kurzbeschreibung des Produktes /// public string ShortDescription { get => Get("ShortDescription", GetLanguage()); set => Set("ShortDescription", GetLanguage(), value); } /// /// Kurzbeschreibung Übersetzungen /// public string ShortDescriptionLocalized { get; set; } /// /// Beschreibung des Produktes in HTML /// public string Description { get => Get("Description", GetLanguage()); set => Set("Description", GetLanguage(), value); } /// /// Beschreibung des Produktes in HTML Übersetzung /// public string DescriptionLocalized { get; set; } /// /// Bild für das Produkt - Allgemein /// public string Image { get; set; } /// /// Bild für das Produkt - für die gewählte Sprache /// public string ImageLanguage { get; set; } /// /// Artikelnummer /// public string Sku { get; set; } /// /// Gibt an ob das Produkt versendet werden kann /// public bool IsShipEnabled { get; set; } /// /// Gibt an ob das Produkt Versandkostenbefreit ist /// public bool IsFreeShipping { get; set; } /// /// Zusatzversandkosten netto /// public decimal AdditionalShippingCharge { get; set; } /// /// Gibt an ob das Produkt von der Steuer ausgenommen ist /// public bool IsTaxExempt { get; set; } /// /// Id der Zugeordneten Steuer /// public int TaxRateId { get; set; } /// /// Name der Steuerstufe /// public string TaxRateName { get; set; } /// /// Anzahl der Produkte auf Lager /// public int StockQuantity { get; set; } /// /// Wie viele Produkte müssen mindestens bestellt werden? /// public int OrderMinimumQuantity { get; set; } /// /// Wie viele Produkte dürfen maximal bestellt werden? /// public int OrderMaximumQuantity { get; set; } /// /// Preis des Produktes netto /// public decimal Price { get; set; } /// /// Alter Preis wenn man eine Aktion setzen möchte /// public decimal OldPrice { get; set; } /// /// Preis des Produktes brutto /// public decimal PriceGross { get; set; } /// /// Alter Preis wenn man eine Aktion setzen möchte brutto /// public decimal OldPriceGross { get; set; } /// /// Preis des Produktes netto für Produkte die 2 Preise benötigen /// public decimal Price2 { get; set; } /// /// Alter Preis wenn man eine Aktion setzen möchte für Produkte die 2 Preise benötigen /// public decimal OldPrice2 { get; set; } /// /// Preis des Produktes netto für Produkte die 2 Preise benötigen brutto /// public decimal Price2Gross { get; set; } /// /// Alter Preis wenn man eine Aktion setzen möchte für Produkte die 2 Preise benötigen brutto /// public decimal OldPrice2Gross { get; set; } /// /// Angewandte Steuer /// public decimal Tax { get; set; } /// /// Reihenfolge der Darstellung, danach nach Name /// public int DisplayOrder { get; set; } } }