243 lines
6.9 KiB
C#
243 lines
6.9 KiB
C#
using System;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using System.ComponentModel.DataAnnotations.Schema;
|
|
using gehGassi.Domain.Base;
|
|
using gehGassi.Domain.Common;
|
|
using gehGassi.Domain.Localization;
|
|
|
|
namespace gehGassi.Domain.Subscriptions
|
|
{
|
|
/// <summary>
|
|
/// Repräsentiert ein Abonnement
|
|
/// </summary>
|
|
public class Subscription : SyncEntityLocalizable, IAuditable
|
|
{
|
|
/// <summary>
|
|
/// Subscription Code - Produkt ID für Stores
|
|
/// </summary>
|
|
[Required]
|
|
[MaxLength(128)]
|
|
public string Code { get; set; }
|
|
|
|
/// <summary>
|
|
/// Dauer des Abonnements
|
|
/// </summary>
|
|
[Required]
|
|
public SubscriptionLength Length { get; set; }
|
|
|
|
/// <summary>
|
|
/// Preis des Abonnements in Euro
|
|
/// </summary>
|
|
[Required]
|
|
public decimal Price { get; set; }
|
|
|
|
/// <summary>
|
|
/// Art des Abonnements - für welchen Benutzer-Typ?
|
|
/// </summary>
|
|
[Required]
|
|
public AppMode AppMode { get; set; }
|
|
|
|
/// <summary>
|
|
/// Name des Abonnements
|
|
/// </summary>
|
|
[Localized]
|
|
[NotMapped]
|
|
public string Name
|
|
{
|
|
get => Get("Name", GetLanguage());
|
|
set => Set("Name", GetLanguage(), value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Name - Inhalt
|
|
/// </summary>
|
|
[Column]
|
|
public string NameLocalized { get; set; }
|
|
|
|
/// <summary>
|
|
/// Beschreibung des Abonnements
|
|
/// </summary>
|
|
[Localized]
|
|
[NotMapped]
|
|
public string Description
|
|
{
|
|
get => Get("Description", GetLanguage());
|
|
set => Set("Description", GetLanguage(), value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Beschreibung - Inhalt
|
|
/// </summary>
|
|
[Column]
|
|
public string DescriptionLocalized { get; set; }
|
|
|
|
/// <summary>
|
|
/// Ist das Abonnement aktiv?
|
|
/// </summary>
|
|
[Required]
|
|
public bool Enabled { get; set; }
|
|
|
|
/// <summary>
|
|
/// Zeit in Tagen die als Toleranz bei Ablauf akzeptiert wird
|
|
/// </summary>
|
|
[Required]
|
|
public int GracePeriodInDays { get; set; }
|
|
|
|
/// <summary>
|
|
/// Ist das Abonnement ausgeblendet?
|
|
/// </summary>
|
|
[Required]
|
|
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>
|
|
/// Hilfsmethode die die Ablaufzeit des Abonnements berechnet
|
|
/// </summary>
|
|
/// <returns>Ablaufdatum</returns>
|
|
public DateTimeOffset GetExpiration(DateTimeOffset date)
|
|
{
|
|
switch (Length)
|
|
{
|
|
case SubscriptionLength.OneWeek:
|
|
return date.AddDays(7);
|
|
case SubscriptionLength.OneMonth:
|
|
return date.AddMonths(1);
|
|
case SubscriptionLength.ThreeMonths:
|
|
return date.AddMonths(3);
|
|
case SubscriptionLength.SixMonths:
|
|
return date.AddMonths(6);
|
|
case SubscriptionLength.OneYear:
|
|
return date.AddYears(1);
|
|
default:
|
|
return date;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Hilfsmethode die die Ablaufzeit des Abonnements berechnet und die Tolranzzeit hinzufügt
|
|
/// </summary>
|
|
/// <param name="date">Datum</param>
|
|
/// <returns>Ablaufdatum mit toleranz</returns>
|
|
public DateTimeOffset GetExpirationWithGrace(DateTimeOffset date)
|
|
{
|
|
var expirationDate = GetExpiration(date);
|
|
return expirationDate.AddDays(GracePeriodInDays);
|
|
}
|
|
|
|
#region IAuditable
|
|
|
|
/// <summary>
|
|
/// Gibt den eindeutigen Key für die Entität zurück;
|
|
/// Hier als String gelöst, weil damit auch kombinierte Schlüssel möglich sind.
|
|
/// </summary>
|
|
/// <returns>Eindeutiger Key</returns>
|
|
public string AuditKey()
|
|
{
|
|
return Id.ToString();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt den Objektnamen bzw. die Tabelle der Entität zurück
|
|
/// </summary>
|
|
/// <returns>Objektnamen</returns>
|
|
public string AuditTable()
|
|
{
|
|
return "Subscriptions";
|
|
}
|
|
|
|
public AuditableOptions Options()
|
|
{
|
|
return AuditableOptions.Create | AuditableOptions.Edit | AuditableOptions.Delete;
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
|
|
/// <summary>
|
|
/// Repräsentiert ein Abonnement mit Namen aufgleöst
|
|
/// </summary>
|
|
public class SubscriptionWithNames : SyncEntityLocalizableVw
|
|
{
|
|
/// <summary>
|
|
/// Subscription Code - Produkt ID für Stores
|
|
/// </summary>
|
|
public string Code { get; set; }
|
|
|
|
/// <summary>
|
|
/// Dauer des Abonnements
|
|
/// </summary>
|
|
public SubscriptionLength Length { 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 AppMode AppMode { get; set; }
|
|
|
|
/// <summary>
|
|
/// Name des Abonnements
|
|
/// </summary>
|
|
public string Name { get; set; }
|
|
|
|
/// <summary>
|
|
/// Name - Inhalt
|
|
/// </summary>
|
|
[Column]
|
|
public string NameLocalized { get; set; }
|
|
|
|
/// <summary>
|
|
/// Beschreibung des Abonnements
|
|
/// </summary>
|
|
public string Description { get; set; }
|
|
|
|
/// <summary>
|
|
/// Beschreibung - Inhalt
|
|
/// </summary>
|
|
[Column]
|
|
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; }
|
|
}
|
|
}
|