using System.ComponentModel.DataAnnotations.Schema; using System; using gehGassi.Web.Helper; using System.ComponentModel.DataAnnotations; using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; using CsvHelper.Configuration.Attributes; namespace gehGassi.Web.Models { /// /// Viewmodel für eine Gutschein-Kampagne /// public class VoucherCampaignVm : SyncEntityVm { /// /// Id des Kunden /// [Required(ErrorMessage = "Err_Required")] [Range(1, long.MaxValue, ErrorMessage = "Err_Required")] [Display(Name = "VoucherCampaign_CustomerId")] public long CustomerId { get; set; } /// /// Titel der Kampagne /// [Required(ErrorMessage = "Err_Required")] [MaxLength(255, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "VoucherCampaign_Title", Description = "VoucherCampaign_Title_Desc")] public string Title { get; set; } /// /// Präfix der Kampagne /// [Required(ErrorMessage = "Err_Required")] [StringLength(4, MinimumLength = 4, ErrorMessage = "Err_StringLength_MinMax")] [RegularExpression("^[A-Z0-9]*$", ErrorMessage = "Err_VoucherCampaign_Prefix")] [Remote("IsPrefixAvailable", "Voucher", AdditionalFields = "Id", ErrorMessage = "Err_VoucherCampaign_Prefix_InUse", HttpMethod = "POST")] [Display(Name = "VoucherCampaign_Prefix", Description = "VoucherCampaign_Prefix_Desc")] public string Prefix { get; set; } /// /// Startdatum der Kampagne /// [Display(Name = "VoucherCampaign_StartDate")] public DateTimeOffset? StartDate { get; set; } /// /// Enddatum der Kampagne /// [Display(Name = "VoucherCampaign_EndDate")] public DateTimeOffset? EndDate { get; set; } /// /// Typ der Kampagne /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "VoucherCampaign_CampaignType", Description = "VoucherCampaign_CampaignType_Desc")] public VoucherCampaignTypeVm CampaignType { get; set; } /// /// Status der Kampagne /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "VoucherCampaign_Status")] public VoucherCampaignStatusVm Status { get; set; } /// /// Anzahl der Gutscheine die erstellt werden sollen. /// 0 Wenn unbegrenzt /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "VoucherCampaign_NumberOfVouchers", Description = "VoucherCampaign_NumberOfVouchers_Desc")] public int NumberOfVouchers { get; set; } /// /// Wie viele Gutscheine wurden bereits verwendet /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "VoucherCampaign_VouchersUsed")] public int VouchersUsed { get; set; } /// /// Wie oft darf ein Gutschein pro User verwendet werden /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "VoucherCampaign_MaxUsagePerUser", Description = "VoucherCampaign_MaxUsagePerUser_Desc")] public int MaxUsagePerUser { get; set; } /// /// Gesamt verfügbares Budget /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "VoucherCampaign_Budget")] public decimal Budget { get; set; } /// /// Aktuell verbrauchtes Budget /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "VoucherCampaign_BudgetUsed")] public decimal BudgetUsed { get; set; } /// /// Wert für einen Gutschein /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "VoucherCampaign_VoucherAmmount", Description = "VoucherCampaign_VoucherAmmount_Desc")] public decimal VoucherAmmount { get; set; } /// /// Bild - für Kampagne /// [MaxLength(500, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "VoucherCampaign_Image")] public string Image { get; set; } /// /// Link für Kampagne /// [MaxLength(2083, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "VoucherCampaign_Url")] public string Url { get; set; } #region Payment /// /// Id der Bestellung /// [Display(Name = "Common_OrderId")] public long? OrderId { get; set; } /// /// Id des Artikels in der Bestellung /// [Display(Name = "Common_OrderItemId")] public long? OrderItemId { get; set; } /// /// Zahlungsart der Bestellung /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Common_PaymentType")] public PaymentTypeVm PaymentType { get; set; } /// /// Zahlungsstatus der Bestellung /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Common_PaymentStatus")] public PaymentStatusVm PaymentStatus { get; set; } /// /// Zahlungsdatum /// [Display(Name = "Common_PayedDate")] public DateTimeOffset? PayedDate { get; set; } #endregion #region Geo-Einschränkungen /// /// Art der Geo-Einschränkung /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Common_GeoMode", Description = "Common_GeoMode_Desc")] public GeoModeVm GeoMode { get; set; } /// /// Die Adresse die verwendet werden soll. /// Je nach Einstellung in GeoMode werden unterschiedliche Teile verwendet. /// None -> Wird ignoriert /// Country -> Das Land der Adresse wird verwendet /// CountryAndState -> Land und Bundeslande wirde verwendet, /// Location --> Lat Lng und Radius in Kombination mit Adresse wird verwendet /// [Display(Name = "Common_GeoMode_Address", Description = "Common_GeoMode_Address_Desc")] public AddressVm Address { get; set; } /// /// Breitengrad /// [Display(Name = "Common_Lat")] [Range(-90.0, 90.0, ErrorMessage = "Err_Range")] public double Lat { get; set; } /// /// Längengrad /// [Display(Name = "Common_Lng")] [Range(-180.0, 180.0, ErrorMessage = "Err_Range")] public double Lng { get; set; } /// /// Radius für eine Geolocation /// [Display(Name = "Common_Radius", Description = "Common_Radius_Desc")] [Range(0.0, 500.0, ErrorMessage = "Err_Range")] public double Radius { get; set; } #endregion /// /// Datum der Erstellung /// [Display(Name = "Common_Created")] public DateTimeOffset Created { get; set; } /// /// Texte mehrsprachig /// public List TextVms { get; set; } } /// /// Hilfsklasse für das Erfassen Mehrsprachiger Texte. /// Wird so gelöst, damit beliebig viele Sprachen verwendet werden können /// public class VoucherCampaignTextVm { /// /// Id /// [Required(ErrorMessage = "Err_Required")] public string Id { get; set; } /// /// Srache /// [Required(ErrorMessage = "Err_Required")] public string Language { get; set; } /// /// Name /// [RequiredIfDefaultLanguage("Language", ErrorMessage = "Err_Required")] [MaxLength(100, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "VoucherCampaign_Name", Description = "VoucherCampaign_Name_Desc")] public string Name { get; set; } /// /// Bild für die jeweilige Sprache /// [Display(Name = "VoucherCampaign_ImageLanguage")] public string ImageLanguage { get; set; } /// /// Url für die jeweilige Sprache /// [MaxLength(2083, ErrorMessage = "Err_StringLength_Max")] [Url(ErrorMessage = "Err_InvalidUrl")] [Display(Name = "VoucherCampaign_UrlLanguage")] public string UrlLanguage { get; set; } } /// /// Viewmodel für das Anlegen und Bearbeiten einer Gutschein-Kampagne /// public class VoucherCampaignCrudVm : VoucherCampaignVm { /// /// Name des Kunden /// public string CustomerName { get; set; } /// /// Land-Name /// public string CountryName { get; set; } /// /// Bundesland-Name /// public string StateName { get; set; } } /// /// Viewmodel für die Listenansicht von Gutschein-Kampagnen /// public class VoucherCampaignListVm : SyncEntityLocalizableListVm { /// /// Id des Kunden /// public long CustomerId { get; set; } /// /// Name des Kunden /// public string CustomerName { get; set; } /// /// Titel der Kampagne /// public string Title { get; set; } /// /// Präfix der Kampagne /// public string Prefix { get; set; } /// /// Startdatum der Kampagne /// public DateTimeOffset? StartDate { get; set; } /// /// Enddatum der Kampagne /// public DateTimeOffset? EndDate { get; set; } /// /// Typ der Kampagne /// public VoucherCampaignTypeVm CampaignType { get; set; } public string CampaignTypeText { get; set; } /// /// Status der Kampagne /// public VoucherCampaignStatusVm Status { get; set; } public string StatusText { get; set; } /// /// Anzahl der Gutscheine die erstellt werden sollen. /// 0 Wenn unbegrenzt /// public int NumberOfVouchers { get; set; } /// /// Wie viele Gutscheine wurden bereits verwendet /// public int VouchersUsed { get; set; } /// /// Wie oft darf ein Gutschein pro User verwendet werden /// public int MaxUsagePerUser { get; set; } /// /// Gesamt verfügbares Budget /// public decimal Budget { get; set; } /// /// Aktuell verbrauchtes Budget /// public decimal BudgetUsed { get; set; } /// /// Wert für einen Gutschein /// public decimal VoucherAmmount { get; set; } #region Payment /// /// Zahlungsart der Bestellung /// public PaymentTypeVm PaymentType { get; set; } /// /// Zahlungsart der Bestellung - Text /// public string PaymentTypeText { get; set; } /// /// Zahlungsstatus der Bestellung /// public PaymentStatusVm PaymentStatus { get; set; } /// /// Zahlungsstatus der Bestellung - Text /// public string PaymentStatusText { get; set; } /// /// Zahlungsdatum /// public DateTimeOffset? PayedDate { get; set; } #endregion #region Inhalt /// /// Bild für die Kampagne - Allgemein /// public string Image { get; set; } /// /// Link für die Kampagne - allgemein wenn nicht überschrieben /// public string Url { get; set; } /// /// Name der Kampagne /// public string Name { get => Get("Name", GetLanguage()); set => Set("Name", GetLanguage(), value); } /// /// Name - Inhalt /// [Column] public string NameLocalized { get; set; } #endregion #region Geo-Einschränkungen /// /// Art der Geo-Einschränkung /// public GeoModeVm GeoMode { get; set; } /// /// Art der Geo-Einschränkung - Text /// public string GeoModeText { get; set; } #endregion /// /// Datum der Erstellung /// public DateTimeOffset Created { get; set; } } /// /// Hilfsklasse für den Export von Gutscheinen /// public class VoucherExportDto { /// /// Code des Gutscheins der mauell eingegeben werden kann /// [Name("Code")] public string Code { get; set; } /// /// QR-Code des Gutscheins /// [Name("QrCode")] public string QrCode { get; set; } /// /// Wert für einen Gutschein /// [Name("VoucherAmmount")] public decimal VoucherAmmount { get; set; } } }