1230 lines
38 KiB
C#

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