1230 lines
38 KiB
C#
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; }
|
|
}
|
|
}
|