using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Globalization; using gehGassi.Web.Helper; using Newtonsoft.Json; namespace gehGassi.Web.Models { /// /// Viewmodel für einen Warenkorb /// public class CartVm { /// /// Id des Warenkorbs /// [Required(ErrorMessage = "Err_Required")] public long Id { get; set; } /// /// Welcher "Kunden-Typ" hat die Bestellung erstellt? /// [Required(ErrorMessage = "Err_Required")] public OrderSourceVm OrderSource { get; set; } /// /// Id des Hundebesitzers /// public string DogOwnerId { get; set; } /// /// Id des Hundeausführers /// public string DogWalkerId { get; set; } /// /// Kunde /// public long? CustomerId { get; set; } /// /// Gesamt-Preis Netto /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Cart_Total")] public decimal Total { get; set; } /// /// Gesamt-Preis Brutto /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Cart_TotalGross")] public decimal TotalGross { get; set; } /// /// Versandkosten Netto /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Cart_Shipment")] public decimal Shipment { get; set; } /// /// Versandkosten Brutto /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Cart_ShipmentGross")] public decimal ShipmentGross { get; set; } /// /// Steuerstufen mit Werten als Json /// [Display(Name = "Cart_TaxRatesJson")] public string TaxRatesJson { get; set; } /// /// Steuer-Einstellungen /// public Dictionary TaxRates { get { if (string.IsNullOrWhiteSpace(TaxRatesJson)) return new Dictionary(); var taxRates = JsonConvert.DeserializeObject>(TaxRatesJson, new JsonSerializerSettings() { Culture = CultureInfo.CurrentCulture }); return taxRates; } set { var settings = JsonConvert.SerializeObject(value, new JsonSerializerSettings() { Culture = CultureInfo.InvariantCulture }); TaxRatesJson = settings; } } /// /// Rechnungsland ISO2 /// [Required(ErrorMessage = "Err_Required")] [MaxLength(2, ErrorMessage = "Err_StringLength_Max")] public string BillingCountryCode { get; set; } /// /// Lieferland ISO2 /// [Required(ErrorMessage = "Err_Required")] [MaxLength(2, ErrorMessage = "Err_StringLength_Max")] public string DeliveryCountryCode { get; set; } /// /// Datum der Erstellung /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Common_Created")] public DateTimeOffset Created { get; set; } /// /// Datum der letzten Änderung /// [Display(Name = "Common_LastUpdate")] public DateTimeOffset? LastUpdate { get; set; } } /// /// Viewmodel für einen Warenkorb mit Namen aufgelöst /// public class CartListVm { /// /// Id des Warenkorbs /// public long Id { get; set; } /// /// Welcher "Kunden-Typ" hat die Bestellung erstellt? /// public OrderSourceVm OrderSource { get; set; } /// /// Id des Hundebesitzers /// public string DogOwnerId { get; set; } /// /// Name des Hundebesitzers /// public string DogOwnerName { get; set; } /// /// Id des Hundeausführers /// public string DogWalkerId { get; set; } /// /// Name des Hundeausführers /// public string DogWalkerName { get; set; } /// /// Kunde /// public long? CustomerId { get; set; } /// /// Name des Kunden /// public string CustomerName { get; set; } /// /// Gesamt-Preis Netto /// public decimal Total { get; set; } /// /// Gesamt-Preis Brutto /// [Required] public decimal TotalGross { get; set; } /// /// Versandkosten Netto /// public decimal Shipment { get; set; } /// /// Versandkosten Brutto /// public decimal ShipmentGross { get; set; } /// /// Steuerstufen mit Werten als Json /// public string TaxRatesJson { get; set; } /// /// Steuer-Einstellungen /// public Dictionary TaxRates { get { if (string.IsNullOrWhiteSpace(TaxRatesJson)) return new Dictionary(); var taxRates = JsonConvert.DeserializeObject>(TaxRatesJson, new JsonSerializerSettings() { Culture = CultureInfo.CurrentCulture }); return taxRates; } set { var settings = JsonConvert.SerializeObject(value, new JsonSerializerSettings() { Culture = CultureInfo.InvariantCulture }); TaxRatesJson = settings; } } /// /// Rechnungsland ISO2 /// public string BillingCountryCode { get; set; } /// /// Name des Rechnungslandes /// public string BillingCountryName { get; set; } /// /// Lieferland ISO2 /// public string DeliveryCountryCode { get; set; } /// /// Name des Lieferlandes /// public string DeliveryCountryName { get; set; } /// /// Datum der Erstellung /// public DateTimeOffset Created { get; set; } /// /// Datum der letzten Änderung /// public DateTimeOffset? LastUpdate { get; set; } /// /// Anzahl der Artikel im Warenkorb. /// Achtung: Summe der Quantity aller Artikel! /// public int ItemCount { get; set; } /// /// Artikel im Warenkorb /// public List CartItems { get; set; } } /// /// Viewmodel für einen Artikel im Warenkorb /// public class CartItemVm { /// /// Id des Warenkorb-Items /// [Required(ErrorMessage = "Err_Required")] public long Id { get; set; } /// /// Id des Warenkorbs /// [Required(ErrorMessage = "Err_Required")] public long CartId { get; set; } /// /// Id des Artikels /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "CartItem_ProductId")] public int ProductId { get; set; } /// /// Typ /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "CartItem_ProductType")] public ProductTypeVm ProductType { get; set; } /// /// Id einer Listung, Werbung, Banner, Pin im Draft-Mode /// [MaxLength(128)] [Display(Name = "CartItem_ItemId")] public string ItemId { get; set; } /// /// Stückzahl /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "CartItem_Quantity")] public int Quantity { get; set; } /// /// Preis des Produktes netto /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "CartItem_Price")] public decimal Price { get; set; } /// /// Preis des Produktes brutto /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "CartItem_PriceGross")] public decimal PriceGross { get; set; } /// /// Preis des Produktes netto für Produkte die 2 Preise benötigen /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "CartItem_Price2")] public decimal Price2 { get; set; } /// /// Preis des Produktes brutto für Produkte die 2 Preise benötigen /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "CartItem_Price2Gross")] public decimal Price2Gross { get; set; } /// /// Gesamt-Preis Netto /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "CartItem_Total")] public decimal Total { get; set; } /// /// Gesamt-Preis Brutto /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "CartItem_TotalGross")] public decimal TotalGross { get; set; } /// /// Angewandte Steuer - also z.B. 10%, 20% /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "CartItem_TaxRate")] public decimal TaxRate { get; set; } /// /// Errechneter Steuerbetrag - mit Berücksichtigung der Stückzahl /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "CartItem_TaxRateValue")] public decimal TaxRateValue { get; set; } /// /// Datum der Erstellung /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Common_Created")] public DateTimeOffset Created { get; set; } /// /// Datum der letzten Änderung /// [Display(Name = "Common_LastUpdate")] public DateTimeOffset? LastUpdate { get; set; } } /// /// Viewmodel für Artikel in einen Warenkorb mit Namen aufgelöst /// public class CartItemListVm { /// /// Id des Warenkorb-Items /// public long Id { get; set; } /// /// Id des Warenkorbs /// public long CartId { get; set; } /// /// Id des Artikels /// public int ProductId { get; set; } /// /// Name des Produktes /// public string ProductName { get; set; } /// /// Artikelnummer des Produktes /// public string ProductSku { get; set; } /// /// Bild des Produktes - entweder basierend auf Sprache oder das allgemeine Bild /// public string ProductImage { get; set; } /// /// Zusätzliche Informationen zum Produkt basierend auf dem Produkttyp. /// Das kann z.B. bei einer Listung der Datumsbereich und das Land sein /// public string ProductSpecialInfo { get; set; } /// /// Typ /// public ProductTypeVm ProductType { get; set; } /// /// Stückzahl /// public int Quantity { get; set; } /// /// Preis des Produktes netto /// public decimal Price { get; set; } /// /// Preis des Produktes brutto /// public decimal PriceGross { get; set; } /// /// Preis des Produktes netto für Produkte die 2 Preise benötigen /// public decimal Price2 { get; set; } /// /// Preis des Produktes brutto für Produkte die 2 Preise benötigen /// public decimal Price2Gross { get; set; } /// /// Gesamt-Preis Netto /// public decimal Total { get; set; } /// /// Gesamt-Preis Brutto /// public decimal TotalGross { get; set; } /// /// Angewandte Steuer - also z.B. 10%, 20% /// public decimal TaxRate { get; set; } /// /// Errechneter Steuerbetrag - mit Berücksichtigung der Stückzahl /// public decimal TaxRateValue { 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; } /// /// Datum der Erstellung /// public DateTimeOffset Created { get; set; } /// /// Datum der letzten Änderung /// public DateTimeOffset? LastUpdate { get; set; } } /// /// Root-Viewmodel für Cart items /// public class CartItemCrudVm { /// /// Id des Warenkorb-Items /// [Required(ErrorMessage = "Err_Required")] public long CartItemId { get; set; } /// /// Id des Warenkorbs /// [Required(ErrorMessage = "Err_Required")] public long CartId { get; set; } /// /// Eindeutige Id des Produktes /// [Required(ErrorMessage = "Err_Required")] public int ProductId { get; set; } /// /// Eindeutige Id des Kunden /// [Required(ErrorMessage = "Err_Required")] public long CustomerId { get; set; } /// /// Name des Produktes /// public string ProductName { get; set; } } /// /// Viewmodel für das Hinzufügen einer Listung zum Warenkob /// public class ListingCartItemCrudVm : CartItemCrudVm { /// /// Um welche Art von Listung handelt es sich, wenn das Produkt für Listungen ist /// public ListingTypeVm ListingType { get; set; } /// /// Art des Preises für die Kalkulation /// public PriceTypeVm PriceType { get; set; } /// /// Typ der aliquoten Berechnung /// public PriceAliquotTypeVm PriceAliquotType { get; set; } /// /// Starttyp /// public ProductStartTypeVm ProductStartType { get; set; } /// /// Id der Branche - notwendig wenn Typ Listung! /// public string BranchId { get; set; } /// /// Name der Branche /// public string BranchName { get; set; } /// /// Bild für die Listing /// [Required(ErrorMessage = "Err_Required")] [MaxLength(500, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Listing_Image", Description = "Listing_Image_Desc")] public string Image { get; set; } /// /// Bild für die Listing 8:9 /// [Required(ErrorMessage = "Err_Required")] [MaxLength(500, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Listing_Image2", Description = "Listing_Image2_Desc")] public string Image2 { get; set; } /// /// Url für die Listing /// [Required(ErrorMessage = "Err_Required")] [MaxLength(2083, ErrorMessage = "Err_StringLength_Max")] [Url(ErrorMessage = "Err_InvalidUrl")] [Display(Name = "Listing_Url", Description = "Listing_Url_Desc")] public string Url { get; set; } /// /// Startdatum der Listung /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Listing_StartDate", Description = "Listing_StartDateCustomer_Desc")] public DateTimeOffset? StartDate { get; set; } /// /// Enddatum der Listung /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Listing_EndDate", Description = "Listing_EndDateCustomer_Desc")] public DateTimeOffset? EndDate { get; set; } /// /// Bundesland / Staat /// [MaxLength(100, ErrorMessage = "Err_StringLength_Max")] [Required(ErrorMessage = "Err_Required")] [Display(Name = "Address_State", Description = "Listing_State_Desc")] public string State { get; set; } /// /// Bundesland-Name /// public string StateName { get; set; } /// /// ISO2 Ländercode /// [Required(ErrorMessage = "Err_Required")] [MaxLength(2, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Address_CountryCode", Description = "Listing_CountryCode_Desc")] public string CountryCode { get; set; } /// /// Land-Name /// public string CountryName { get; set; } /// /// Adresse die für die Listung in der App angezeigt werden soll /// [Display(Name = "Listing_Address", Description = "Listing_Address_Desc")] public AddressRequiredVm ListingAddress { get; set; } /// /// Land-Name für die Listing-Adresse /// public string ListingCountryName { get; set; } /// /// Bundesland-Name für die Listing-Adresse /// public string ListingStateName { get; set; } /// /// Texte mehrsprachig /// public List TextVms { get; set; } } /// /// Viewmodel für das Hinzufügen einer Werbung zum Warenkob /// public class AdvertisementCartItemCrudVm : CartItemCrudVm { /// /// Art des Preises für die Kalkulation /// public PriceTypeVm PriceType { get; set; } /// /// Typ der aliquoten Berechnung /// public PriceAliquotTypeVm PriceAliquotType { get; set; } /// /// Starttyp /// public ProductStartTypeVm ProductStartType { get; set; } /// /// Id der Rubrik /// public string AdvertisementCategoryId { get; set; } /// /// Name der Rubrik /// public string AdvertisementCategoryName { get; set; } /// /// Rabatt in Prozent. /// Wenn 0, dann ignorieren /// [Required(ErrorMessage = "Err_Required")] [Range(0.0, 100.0, ErrorMessage = "Err_Range")] [Display(Name = "Advertisement_Discount", Description = "Advertisement_Discount_Desc")] public decimal Discount { get; set; } /// /// Bild für die Werbung /// [Required(ErrorMessage = "Err_Required")] [MaxLength(500, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Advertisement_Image", Description = "Advertisement_Image_Desc")] public string Image { get; set; } /// /// Bild für die Werbung /// [Required(ErrorMessage = "Err_Required")] [MaxLength(500, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Advertisement_Image2", Description = "Advertisement_Image2_Desc")] public string Image2 { get; set; } /// /// Url für die Werbung /// [Required(ErrorMessage = "Err_Required")] [MaxLength(2083, ErrorMessage = "Err_StringLength_Max")] [Url(ErrorMessage = "Err_InvalidUrl")] [Display(Name = "Advertisement_Url", Description = "Advertisement_Url_Desc")] public string Url { get; set; } /// /// Startdatum der Werbung /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Advertisement_StartDate", Description = "Advertisement_StartDate_Desc")] public DateTimeOffset? StartDate { get; set; } /// /// Enddatum der Werbung /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Advertisement_EndDate", Description = "Advertisement_EndDateCustomer_Desc")] public DateTimeOffset? EndDate { get; set; } /// /// Bundesland / Staat /// [MaxLength(100, ErrorMessage = "Err_StringLength_Max")] [Required(ErrorMessage = "Err_Required")] [Display(Name = "Address_State", Description = "Advertisement_State_Desc")] public string State { get; set; } /// /// Bundesland-Name /// public string StateName { get; set; } /// /// ISO2 Ländercode /// [Required(ErrorMessage = "Err_Required")] [MaxLength(2, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Address_CountryCode", Description = "Advertisement_CountryCode_Desc")] public string CountryCode { get; set; } /// /// Land-Name /// public string CountryName { get; set; } /// /// Texte mehrsprachig /// public List TextVms { get; set; } } /// /// Viewmodel für das Hinzufügen eines Banner zum Warenkob /// public class BannerCartItemCrudVm : CartItemCrudVm { /// /// Art des Preises für die Kalkulation /// public PriceTypeVm PriceType { get; set; } /// /// Typ der aliquoten Berechnung /// public PriceAliquotTypeVm PriceAliquotType { get; set; } /// /// Starttyp /// public ProductStartTypeVm ProductStartType { get; set; } /// /// Bannerplatzierung /// public BannerLocationVm BannerLocation { get; set; } /// /// Banner Größe /// public BannerSizeVm BannerSize { get; set; } /// /// Gesamt verfügbares Budget - netto /// [Required(ErrorMessage = "Err_Required")] [Range(1.0, 1000000.0, ErrorMessage = "Err_Range")] public decimal Budget { get; set; } /// /// Preis des Produktes netto /// public decimal Price { get; set; } /// /// Preis des Produktes brutto /// public decimal PriceGross { get; set; } /// /// Preis des Produktes netto für Produkte die 2 Preise benötigen /// public decimal Price2 { get; set; } /// /// Preis des Produktes brutto für Produkte die 2 Preise benötigen /// public decimal Price2Gross { get; set; } /// /// Angewandte Steuer /// public decimal Tax { get; set; } /// /// Bild für den Banner /// [Required(ErrorMessage = "Err_Required")] [MaxLength(500, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Banner_Image", Description = "Banner_Image_Desc")] public string Image { get; set; } /// /// Url für den Banner /// [Required(ErrorMessage = "Err_Required")] [MaxLength(2083, ErrorMessage = "Err_StringLength_Max")] [Url(ErrorMessage = "Err_InvalidUrl")] [Display(Name = "Banner_Url", Description = "Banner_Url_Desc")] public string Url { get; set; } /// /// Startdatum Banner /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Banner_StartDate", Description = "Banner_StartDate_Desc")] public DateTimeOffset? StartDate { get; set; } /// /// Bundesland / Staat /// [MaxLength(100, ErrorMessage = "Err_StringLength_Max")] [Required(ErrorMessage = "Err_Required")] [Display(Name = "Address_State", Description = "Banner_State_Desc")] public string State { get; set; } /// /// Bundesland-Name /// public string StateName { get; set; } /// /// ISO2 Ländercode /// [Required(ErrorMessage = "Err_Required")] [MaxLength(2, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Address_CountryCode", Description = "Banner_CountryCode_Desc")] public string CountryCode { get; set; } /// /// Land-Name /// public string CountryName { get; set; } /// /// Texte mehrsprachig /// public List TextVms { get; set; } } /// /// Viewmodel für das Hinzufügen eines Pins zum Warenkob /// public class PinCartItemCrudVm : CartItemCrudVm { /// /// Art des Preises für die Kalkulation /// public PriceTypeVm PriceType { get; set; } /// /// Typ der aliquoten Berechnung /// public PriceAliquotTypeVm PriceAliquotType { get; set; } /// /// Starttyp /// public ProductStartTypeVm ProductStartType { get; set; } /// /// Breitengrad /// [Required(ErrorMessage = "Err_Required")] [Range(-90.0, 90.0, ErrorMessage = "Err_Range")] [Display(Name = "Pin_Lat", Description = "Pin_Lat_Desc")] public double Lat { get; set; } /// /// Längengrad /// [Required(ErrorMessage = "Err_Required")] [Range(-180.0, 180.0, ErrorMessage = "Err_Range")] [Display(Name = "Pin_Lng", Description = "Pin_Lng_Desc")] public double Lng { get; set; } /// /// Effektiver Radius des Pins /// [Required(ErrorMessage = "Err_Required")] [Range(0.1, 500.0, ErrorMessage = "Err_Range")] [Display(Name = "Pin_Radius", Description = "Pin_Radius_Desc")] public double Radius { get; set; } /// /// Mindest-Radius nach Produkteinstellungen /// [Required(ErrorMessage = "Err_Required")] [Range(0.1, 500.0, ErrorMessage = "Err_Range")] 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 den Pin /// //[Required(ErrorMessage = "Err_Required")] [MaxLength(500, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Pin_Image", Description = "Pin_Image_Desc")] public string Image { get; set; } /// /// Url für den Pin /// //[Required(ErrorMessage = "Err_Required")] [MaxLength(2083, ErrorMessage = "Err_StringLength_Max")] [Url(ErrorMessage = "Err_InvalidUrl")] [Display(Name = "Pin_Url", Description = "Pin_Url_Desc")] public string Url { get; set; } /// /// Startdatum des Pins /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Pin_StartDate", Description = "Pin_StartDate_Desc")] public DateTimeOffset? StartDate { get; set; } /// /// Enddatum des Pins /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Pin_EndDate", Description = "Pin_EndDate_Desc")] public DateTimeOffset? EndDate { get; set; } /// /// Texte mehrsprachig /// public List TextVms { get; set; } } /// /// Viewmodel für die Abfrage eines Preises - bewi aliquoter Berechnung /// public class CalculatePriceVm { /// /// Id des Produktes /// public int ProductId { get; set; } /// /// Id des Kunden /// public long CustomerId { get; set; } /// /// Startdatum /// public DateTimeOffset StartDate { get; set; } /// /// Enddatum /// public DateTimeOffset EndDate { get; set; } /// /// Stückzahl /// public int Quantity { get; set; } } /// /// Viewmodel für den Checkout Header /// public class CheckoutHeaderVm { /// /// Aktueller Schritt /// public int Step { get; set; } } /// /// Viewmodel für den Checkout Adress-Eingabe /// public class CheckoutAddressVm { /// /// Soll das Formular angezeigt werden? /// public bool ShowForm { get; set; } /// /// Was für ein Benutzertyp bestellt? /// public OrderSourceVm OrderSource { get; set; } /// /// Titel /// [MaxLength(100, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "CheckoutAddress_Title")] public string Title { get; set; } /// /// Vorname /// [Required(ErrorMessage = "Err_Required")] [MaxLength(100, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "CheckoutAddress_FirstName")] public string FirstName { get; set; } /// /// Nachname /// [Required(ErrorMessage = "Err_Required")] [MaxLength(100, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "CheckoutAddress_LastName")] public string LastName { get; set; } /// /// Company /// [RequiredIf("OrderSource", OrderSourceVm.Customer, ErrorMessage = "Err_Required")] [MaxLength(200, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "CheckoutAddress_Company")] public string Company { get; set; } /// /// UID Nummer /// [MaxLength(50, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "CheckoutAddress_Vat")] public string Vat { get; set; } /// /// Rechnungsadresse /// public AddressVm BillingAddress { get; set; } /// /// Land-Name Rechnungsadresse /// public string BillingCountryName { get; set; } /// /// Bundesland-Name Rechnungsadresse /// public string BillingStateName { get; set; } /// /// Ist die Liefer-Adresse auch die Rechnungsadresse? /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Address_DeliveryAddressIsBilling", Description = "Address_DeliveryAddressIsBilling_Description")] public bool DeliveryAddressIsBilling { get; set; } /// /// Titel /// [MaxLength(100, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "CheckoutAddress_Title")] public string DeliveryTitle { get; set; } /// /// Vorname /// [RequiredIf("DeliveryAddressIsBilling", false, ErrorMessage = "Err_Required")] [MaxLength(100, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "CheckoutAddress_FirstName")] public string DeliveryFirstName { get; set; } /// /// Nachname /// [RequiredIf("DeliveryAddressIsBilling", false, ErrorMessage = "Err_Required")] [MaxLength(100, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "CheckoutAddress_LastName")] public string DeliveryLastName { get; set; } /// /// Company /// [MaxLength(200, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "CheckoutAddress_Company")] public string DeliveryCompany { get; set; } /// /// UID Nummer /// [MaxLength(50, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "CheckoutAddress_Vat")] public string DeliveryVat { get; set; } /// /// Lieferadresse /// public DeliveryAddressVm DeliveryAddress { get; set; } /// /// Land-Name Lieferadresse /// public string DeliveryCountryName { get; set; } /// /// bundesland-Name Lieferadresse /// public string DeliveryStateName { get; set; } /// /// Erstellt eine Instanz /// public CheckoutAddressVm() { BillingAddress = new AddressVm(); DeliveryAddress = new DeliveryAddressVm(); } } /// /// Viewmodel für den Checkout Zahlungsart /// public class CheckoutPaymentVm { //[Range(1, 4, ErrorMessage = "Err_Required")] [Display(Name = "CheckoutPayment_Type")] public PaymentTypeVm PaymentType { get; set; } /// /// Zahlen auf Rechnung allgemein möglich? /// public bool PaymentOnInvoice { get; set; } /// /// Zahlen mittels PayPal möglich? /// public bool PayPalEnabled { get; set; } /// /// Klarna Sofort-Zahlen aktiviert /// public bool KlarnaEnabled { get; set; } /// /// Erstellt eine Instanz /// public CheckoutPaymentVm() { PaymentType = PaymentTypeVm.None; PaymentOnInvoice = false; PayPalEnabled = false; KlarnaEnabled = false; } } /// /// Viewmodel für die eigentliche Bestellung. /// Forder Bestätigung der AGB und der GDPR /// public class CheckoutOrderVm { /// /// Id des Kunden /// public Guid? CustomerUniqueId { get; set; } /// /// AGB akzeptieren /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "CheckoutOrder_AcceptTermsAndConditions")] public bool AcceptTermsAndConditions { get; set; } /// /// Wann wurden die AGB akzeptiert /// public DateTime? AcceptTermsAndConditionsDate { get; set; } /// /// Datenschutz akzeptieren /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "CheckoutOrder_AcceptGdpr")] public bool AcceptGdpr { get; set; } /// /// Wann wurden die Datenschutzbestimmung akzeptiert /// public DateTime? AcceptGdprDate { get; set; } } /// /// Viewmodel für das Filtern des Shops /// public class ShopFilterVm { /// /// Gewählte Kategorien /// public List Categories { get; set; } /// /// Filter-Text /// public string Filter { get; set; } } }