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; }
}
}