195 lines
5.9 KiB
C#

using System.Collections.Generic;
using gehGassi.Domain.Common;
using gehGassi.Web.Helper;
using System.ComponentModel.DataAnnotations;
using System;
namespace gehGassi.Web.Models
{
/// <summary>
/// Viewmodel für die Erfassung und Bearbeitung von Abonnements
/// </summary>
public class SubscriptionVm : SyncEntityVm
{
/// <summary>
/// Subscription Code - Produkt ID für Stores
/// </summary>
[Required(ErrorMessage = "Err_Required")]
[MaxLength(128, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "Subscription_Code")]
public string Code { get; set; }
/// <summary>
/// Dauer des Abonnements
/// </summary>
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Subscription_Length")]
public SubscriptionLength Length { get; set; }
/// <summary>
/// Preis des Abonnements in Euro
/// </summary>
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Subscription_Price")]
public decimal Price { get; set; }
/// <summary>
/// Art des Abonnements - für welchen Benutzer-Typ?
/// </summary>
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Subscription_AppMode")]
public AppMode AppMode { get; set; }
/// <summary>
/// Ist das Abonnement aktiv?
/// </summary>
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Subscription_Enabled")]
public bool Enabled { get; set; }
/// <summary>
/// Toleranz in Tagen bei Ablauf
/// </summary>
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Subscription_GracePeriodInDays")]
public int GracePeriodInDays { get; set; }
/// <summary>
/// Ist das Abonnement ausgeblendet?
/// </summary>
[Required(ErrorMessage = "Err_Required")]
[Display(Name = "Subscription_Hidden")]
public bool Hidden { get; set; }
/// <summary>
/// Optional: the Max registered date of the app user to see this subscription
/// </summary>
[Display(Name = "Subscription_MaxRegisteredDate")]
public DateTimeOffset? MaxRegisteredDate { get; set; }
/// <summary>
/// Texte mehrsprachig
/// </summary>
public List<SubscriptionTextVm> TextVms { get; set; }
}
/// <summary>
/// Hilfsklasse für das Erfassen Mehrsprachiger Texte.
/// Wird so gelöst, damit beliebig viele Sprachen verwendet werden können
/// </summary>
public class SubscriptionTextVm
{
/// <summary>
/// Id
/// </summary>
[Required(ErrorMessage = "Err_Required")]
public string Id { get; set; }
/// <summary>
/// Srache
/// </summary>
[Required(ErrorMessage = "Err_Required")]
public string Language { get; set; }
/// <summary>
/// Name
/// </summary>
[RequiredIfDefaultLanguage("Language", ErrorMessage = "Err_Required")]
[MaxLength(100, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "Subscription_Name", Description = "Subscription_Name_Desc")]
public string Name { get; set; }
/// <summary>
/// Beschreibung
/// </summary>
[MaxLength(500, ErrorMessage = "Err_StringLength_Max")]
[Display(Name = "Subscription_Description", Description = "Subscription_Description_Desc")]
public string Description { get; set; }
}
/// <summary>
/// Viewmodel für die Listenansicht von Abonnements
/// </summary>
public class SubscriptionListVm : SyncEntityLocalizableListVm
{
/// <summary>
/// Subscription Code - Produkt ID für Stores
/// </summary>
public string Code { get; set; }
/// <summary>
/// Dauer des Abonnements
/// </summary>
public SubscriptionLengthVm Length { get; set; }
public string LengthText { get; set; }
/// <summary>
/// Preis des Abonnements in Euro
/// </summary>
public decimal Price { get; set; }
/// <summary>
/// Art des Abonnements - für welchen Benutzer-Typ?
/// </summary>
public AppModeVm AppMode { get; set; }
public string AppModeText { get; set; }
/// <summary>
/// Name des Abonnements
/// </summary>
public string Name { get; set; }
/// <summary>
/// Name - Inhalt
/// </summary>
public string NameLocalized { get; set; }
/// <summary>
/// Beschreibung des Abonnements
/// </summary>
public string Description { get; set; }
/// <summary>
/// Beschreibung - Inhalt
/// </summary>
public string DescriptionLocalized { get; set; }
/// <summary>
/// Ist das Abonnement aktiv?
/// </summary>
public bool Enabled { get; set; }
/// <summary>
/// Zeit in Tagen die als Toleranz bei Ablauf akzeptiert wird
/// </summary>
public int GracePeriodInDays { get; set; }
/// <summary>
/// Ist das Abonnement ausgeblendet?
/// </summary>
public bool Hidden { get; set; }
/// <summary>
/// Optional: the Max registered date of the app user to see this subscription
/// </summary>
public DateTimeOffset? MaxRegisteredDate { get; set; }
/// <summary>
/// Anzahl der Abonnements insgesamt
/// </summary>
public int SubscriptionCountTotal { get; set; }
/// <summary>
/// Anzahl der aktiven Abonnements
/// </summary>
public int SubscriptionCountActive { get; set; }
/// <summary>
/// Anzahl der inaktiven Abonnements
/// </summary>
public int SubscriptionCountInactive { get; set; }
}
}