using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using Newtonsoft.Json;
namespace gehGassi.Web.Models
{
///
/// Viewmodel für eine Bestellung
///
public class OrderVm
{
///
/// Id der Bestellung
///
[Required(ErrorMessage = "Err_Required")]
public long Id { get; set; }
///
/// Spezial-ID
///
[Display(Name = "Order_UniqueId")]
public Guid UniqueId { get; set; }
///
/// Welcher "Kunden-Typ" hat die Bestellung erstellt?
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Order_OrderSource")]
public OrderSourceVm OrderSource { get; set; }
#region App-User
///
/// Id des App-Users
///
[Display(Name = "Order_DogOwnerId")]
public string AppUserId { get; set; }
///
/// Name des App-Userss (Vor- und Nachname)
///
[MaxLength(250, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "Order_DogOwnerName")]
public string AppUserName { get; set; }
///
/// App-Users - Firma
///
[MaxLength(200, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "Order_DogOwnerCompany")]
public string AppUserCompany { get; set; }
#endregion
#region Kunde
///
/// Kunde
///
[Display(Name = "Order_CustomerId")]
public long? CustomerId { get; set; }
///
/// Name des Kunden / Vertriebspartners
///
[Required(ErrorMessage = "Err_Required")]
[MaxLength(200, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "Order_CustomerName")]
public string CustomerName { get; set; }
#endregion
///
/// Bestellnummer
///
[Required(ErrorMessage = "Err_Required")]
[MaxLength(100, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "Order_Number")]
public string Number { get; set; }
///
/// Zähler für Bestell-Nummer
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Order_Counter")]
public long Counter { get; set; }
///
/// Zwischensumme Netto
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Order_Subtotal")]
public decimal Subtotal { get; set; }
///
/// Zwischensumme Brutto
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Order_SubtotalGross")]
public decimal SubtotalGross { get; set; }
///
/// Gesamt-Preis Netto
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Order_Total")]
public decimal Total { get; set; }
///
/// Gesamt-Preis Brutto
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Order_TotalGross")]
public decimal TotalGross { get; set; }
///
/// Versandkosten Netto
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Order_Shipment")]
public decimal Shipment { get; set; }
///
/// Versandkosten Brutto
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Order_ShipmentGross")]
public decimal ShipmentGross { get; set; }
///
/// Status der Bestellung
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Order_OrderStatus")]
public OrderStatusVm OrderStatus { get; set; }
///
/// Zahlungsart
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Order_PaymentType")]
public PaymentTypeVm PaymentType { get; set; }
///
/// Zahlungsstatus
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Order_PaymentStatus")]
public PaymentStatusVm PaymentStatus { get; set; }
///
/// Versandart
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Order_ShipmentType")]
public ShipmentTypeVm ShipmentType { get; set; }
///
/// Versandstatus
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Order_ShipmentStatus")]
public ShipmentStatusVm ShipmentStatus { get; set; }
///
/// Versanddatum
///
[Display(Name = "Order_ShipmentDate")]
public DateTimeOffset? ShipmentDate { get; set; }
///
/// Lieferadresse
///
[Display(Name = "Order_DeliveryAddress")]
public OrderAddressVm DeliveryAddress { get; set; }
///
/// REchnungsadresse
///
[Display(Name = "Order_BillingAddress")]
public OrderAddressVm BillingAddress { get; set; }
///
/// Ist die Liefer-Adresse auch die Rechnungsadresse?
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Order_DeliveryAddressIsBilling")]
public bool DeliveryAddressIsBilling { get; set; }
///
/// Anmerkungen
///
[MaxLength(1000, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "Order_Comment")]
public string Comment { get; set; }
///
/// Steuerstufen mit Werten als Json
///
[Display(Name = "Order_TaxRatesJson")]
public string TaxRatesJson { get; set; }
///
/// Benutzer-Einstellungen
///
[Display(Name = "Order_TaxRates")]
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;
}
}
///
/// 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; }
///
/// Wann wurden die AGB akzeptiert
///
[Display(Name = "Order_AcceptTermsAndConditionsDate")]
public DateTimeOffset? AcceptTermsAndConditionsDate { get; set; }
///
/// Wann wurden die Datenschutzbestimmung akzeptiert
///
[Display(Name = "Order_AcceptGdprDate")]
public DateTimeOffset? AcceptGdprDate { get; set; }
///
/// Wurde die Bestellung gelöscht?
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Common_Deleted")]
public bool Deleted { get; set; }
#region PayPal & Klarna Info
///
/// Datum der Bezahlung via PayPal oder Klarna
///
[Display(Name = "Order_PaymentDate")]
public DateTimeOffset? PaymentDate { get; set; }
///
/// ID der PayPal-Order wenn Zahlung mittels PayPal
///
[MaxLength(200, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "Order_PayPalOrderId")]
public string PayPalOrderId { get; set; }
///
/// ID der Klarna-Order wenn Zahlung mittels Klarna
///
[MaxLength(200, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "Order_KlarnaOrderId")]
public string KlarnaOrderId { get; set; }
///
/// Datum wann die "Alles versendet" Info an Klarna übergeben wurde
///
[Display(Name = "Order_KlarnaShipmentSentDate")]
public DateTimeOffset? KlarnaShipmentSentDate { get; set; }
///
/// Gibt an ob beim Melden des Versands ein Problem aufgetreten ist und diese Bestellung ignoriert werden soll
///
[Display(Name = "Order_KlarnaShipmentError")]
public bool KlarnaShipmentError { get; set; }
///
/// Optional: Infos seitens des PaymentProviders
///
[Display(Name = "Order_PaymentInfo")]
public string PaymentInfo { get; set; }
#endregion
///
/// Liste der Artikel
///
public List Items { get; set; }
///
/// Erstellt eine Instanz
///
public OrderVm()
{
DeliveryAddress = new OrderAddressVm();
BillingAddress = new OrderAddressVm();
Items = new List();
}
}
///
/// Viewmodel für eine Adresse für eine Bestellung
///
public class OrderAddressVm
{
///
/// Titel
///
[MaxLength(100, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "OrderAddress_Title")]
public string Title { get; set; }
///
/// Vorname
///
[MaxLength(100, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "OrderAddress_FirstName")]
public string FirstName { get; set; }
///
/// Nachname
///
[MaxLength(100, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "OrderAddress_LastName")]
public string LastName { get; set; }
///
/// Company
///
[MaxLength(200, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "OrderAddress_Company")]
public string Company { get; set; }
///
/// UID Nummer
///
[MaxLength(50, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "OrderAddress_Vat")]
public string Vat { get; set; }
///
/// Optionale Adresszeile 1
///
[Required(ErrorMessage = "Err_Required")]
[MaxLength(100, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "OrderAddress_AddressLine1")]
public string AddressLine1 { get; set; }
///
/// Optionale Adresszeile 2
///
[MaxLength(100, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "OrderAddress_AddressLine2")]
public string AddressLine2 { get; set; }
///
/// Optional: Stadt / Ort
///
[Required(ErrorMessage = "Err_Required")]
[MaxLength(100, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "OrderAddress_City")]
public string City { get; set; }
///
/// Optinale PLZ
///
[Required(ErrorMessage = "Err_Required")]
[MaxLength(20, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "OrderAddress_Zip")]
public string Zip { get; set; }
///
/// Bundesland / Staat
///
[Required(ErrorMessage = "Err_Required")]
[MaxLength(25, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "OrderAddress_State")]
public string State { get; set; }
///
/// ISO2 Ländercode
///
[Required(ErrorMessage = "Err_Required")]
[MaxLength(2, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "OrderAddress_CountryCode")]
public string CountryCode { get; set; }
public string GetNameForPayPal()
{
if (!string.IsNullOrWhiteSpace(Company))
return Company;
return $"{FirstName} {LastName}";
}
}
///
/// Viewmodel für einen Artikel in einer Bestellung
///
public class OrderItemVm
{
///
/// Id des Bestell-Items
///
[Required(ErrorMessage = "Err_Required")]
public long Id { get; set; }
///
/// Id der Bestellung
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_OrderId")]
public long OrderId { get; set; }
///
/// Id des Artikels
///
[Display(Name = "OrderItem_ProductId")]
public int? ProductId { get; set; }
///
/// Id der Produktkategorie
///
[Display(Name = "OrderItem_ProductCategoryId")]
public int? ProductCategoryId { get; set; }
///
/// Name des Artikels
///
[Required(ErrorMessage = "Err_Required")]
[MaxLength(200, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "OrderItem_Name")]
public string Name { get; set; }
///
/// Name des Artikels in Standardsprache
///
[Required(ErrorMessage = "Err_Required")]
[MaxLength(200, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "OrderItem_NameDefault")]
public string NameDefault { get; set; }
///
/// Artikelnummer
///
[Required(ErrorMessage = "Err_Required")]
[MaxLength(100, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "OrderItem_Sku")]
public string Sku { get; set; }
///
/// Typ
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_ProductType")]
public ProductTypeVm ProductType { get; set; }
///
/// Id einer Listung, Werbung, Banner, Pin im Draft-Mode
///
[MaxLength(128, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "OrderItem_ItemId")]
public string ItemId { get; set; }
///
/// Id der Zugeordneten Steuer
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_TaxRateId")]
public int TaxRateId { get; set; }
///
/// Gibt an ob das Produkt von der Steuer ausgenommen ist
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_IsTaxExempt")]
public bool IsTaxExempt { get; set; }
///
/// Gibt an ob das Produkt versendet werden kann
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_IsShipEnabled")]
public bool IsShipEnabled { get; set; }
///
/// Gibt an ob das Produkt Versandkostenbefreit ist
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_IsFreeShipping")]
public bool IsFreeShipping { get; set; }
///
/// Zusatzversandkosten netto
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_AdditionalShippingCharge")]
public decimal AdditionalShippingCharge { get; set; }
///
/// Stückzahl
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_Quantity")]
public int Quantity { get; set; }
///
/// Einzel-Preis Netto
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_Price")]
public decimal Price { get; set; }
///
/// Einzel-Preis Brutto
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_PriceGross")]
public decimal PriceGross { get; set; }
///
/// Preis des Produktes netto für Produkte die 2 Preise benötigen
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_Price2")]
public decimal Price2 { get; set; }
///
/// Preis des Produktes brutto für Produkte die 2 Preise benötigen
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_Price2Gross")]
public decimal Price2Gross { get; set; }
///
/// Gesamt-Preis Netto
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_Total")]
public decimal Total { get; set; }
///
/// Gesamt-Preis Brutto
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_TotalGross")]
public decimal TotalGross { get; set; }
///
/// Gets or sets the weight
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_Weight")]
public decimal Weight { get; set; }
///
/// Gets or sets the length
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_Length")]
public decimal Length { get; set; }
///
/// Gets or sets the width
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_Width")]
public decimal Width { get; set; }
///
/// Gets or sets the height
///
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "OrderItem_Height")]
public decimal Height { 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; }
///
/// Zusatzinfos zum Produkt wenn Listung, Banner usw.
///
public string ProductSpecialInfo { get; set; }
}
///
/// Viewmodel für eine Bestellung Listendarstellung
///
public class OrderListVm
{
///
/// Id der Bestellung
///
public long Id { get; set; }
///
/// Spezial-ID
///
public Guid UniqueId { get; set; }
///
/// Welcher "Kunden-Typ" hat die Bestellung erstellt?
///
public OrderSourceVm OrderSource { get; set; }
///
/// Welcher "Kunden-Typ" hat die Bestellung erstellt?
///
public string OrderSourceText { get; set; }
///
/// Name des Bestellers in Abhängigkeit der Bestellquelle
///
public string OrderSourceName {
get
{
switch (OrderSource)
{
case OrderSourceVm.Customer:
return CustomerName;
case OrderSourceVm.AppUserDogOwner:
return AppUserName;
case OrderSourceVm.AppUserDogWalker:
return AppUserName;
case OrderSourceVm.AppUserBoth:
return AppUserName;
default:
throw new ArgumentOutOfRangeException();
}
}
}
#region Hundebesitzer
///
/// Id des App-Users
///
public string AppUserId { get; set; }
///
/// Name des App-Userss (Vor- und Nachname)
///
public string AppUserName { get; set; }
///
/// App-Users - Firma
///
public string AppUserCompany { get; set; }
#endregion
#region Kunde
///
/// Kunde
///
public long? CustomerId { get; set; }
///
/// Name des Kunden / Vertriebspartners
///
public string CustomerName { get; set; }
#endregion
///
/// Bestellnummer
///
public string Number { get; set; }
///
/// Zwischensumme Netto
///
public decimal Subtotal { get; set; }
///
/// Zwischensumme Brutto
///
public decimal SubtotalGross { get; set; }
///
/// Gesamt-Preis Netto
///
public decimal Total { get; set; }
///
/// Gesamt-Preis Brutto
///
public decimal TotalGross { get; set; }
///
/// Versandkosten Netto
///
public decimal Shipment { get; set; }
///
/// Versandkosten Brutto
///
public decimal ShipmentGross { get; set; }
///
/// Status der Bestellung
///
public OrderStatusVm OrderStatus { get; set; }
///
/// Status der Bestellung
///
public string OrderStatusText { get; set; }
///
/// Zahlungsart
///
public PaymentTypeVm PaymentType { get; set; }
///
/// Zahlungsart
///
public string PaymentTypeText { get; set; }
///
/// Zahlungsstatus
///
public PaymentStatusVm PaymentStatus { get; set; }
///
/// Zahlungsstatus
///
public string PaymentStatusText { get; set; }
///
/// Versandart
///
public ShipmentTypeVm ShipmentType { get; set; }
///
/// Versandart
///
public string ShipmentTypeText { get; set; }
///
/// Versandstatus
///
public ShipmentStatusVm ShipmentStatus { get; set; }
///
/// Versandstatus
///
public string ShipmentStatusText { get; set; }
///
/// Versanddatum
///
public DateTimeOffset? ShipmentDate { get; set; }
///
/// Datum der Erstellung
///
public DateTimeOffset Created { get; set; }
///
/// Datum der letzten Änderung
///
public DateTimeOffset? LastUpdate { get; set; }
///
/// Wurde die Bestellung gelöscht?
///
public bool Deleted { get; set; }
}
///
/// Hilfsklasse für das Aktualisieren eines der Status-Felder einer Bestellung
///
public class UpdateOrderStatusVm
{
///
/// Name des Feldes
///
[Required(ErrorMessage = "Err_Required")]
public string Name { get; set; }
///
/// Id der Bestellung - UniqueID!!!
///
[Required(ErrorMessage = "Err_Required")]
public string PrimaryKey { get; set; }
///
/// Wert der gesetzt werden soll. Enum, aber als ZAHL!
///
[Required(ErrorMessage = "Err_Required")]
public string Value { get; set; }
}
}