using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using gehGassi.Domain.Base; using gehGassi.Domain.Common; using gehGassi.Domain.Localization; using NetTopologySuite.Geometries; namespace gehGassi.Domain.Advertisements { /// /// Repräsentiert eine Listung eines Werbepartners in eine Rubrik /// public class Listing : SyncEntityLocalizable, IAuditable { /// /// Id des Kunden /// [Required] public long CustomerId { get; set; } /// /// Id der Branche /// [Required] [MaxLength(128)] public string BranchId { get; set; } /// /// Typ der Listung - Basis, Silber, Gold, Plating /// [Required] public ListingType ListingType { get; set; } /// /// Startdatum der Listung /// public DateTimeOffset? StartDate { get; set; } /// /// Enddatum der Listung /// public DateTimeOffset? EndDate { get; set; } /// /// Wie lange kann man diese Buchung reservieren bis sie bezahlt wird /// public DateTimeOffset? ReservedUntil { get; set; } /// /// Status der Listung /// [Required] public ListingStatus Status { get; set; } /// /// Adresse die für die Listung angezeigt werden soll /// public Address ListingAddress { get; set; } /// /// Geo-Koordinaten der Listungs-Adresse /// public Point ListingLocation { get; set; } #region Payment /// /// Id des Carts, wenn im Draft-Modus /// public long? CartId { get; set; } /// /// Id des Artikels im Cart, wenn im Draft-Modus /// public long? CartItemId { get; set; } /// /// Id der Bestellung /// public long? OrderId { get; set; } /// /// Id des Artikels in der Bestellung /// public long? OrderItemId { get; set; } /// /// Zahlungsart der Bestellung /// [Required] public PaymentType PaymentType { get; set; } /// /// Zahlungsstatus der Bestellung /// [Required] public PaymentStatus PaymentStatus { get; set; } /// /// Zahlungsdatum /// public DateTimeOffset? PayedDate { get; set; } #endregion #region Inhalt /// /// Bild für die Listung - Allgemein /// [MaxLength(500)] public string Image { get; set; } /// /// Bild für die Listung - Allgemein in rechteckiger form 8:9 /// [MaxLength(500)] public string Image2 { get; set; } /// /// Link für die Listung - allgemein wenn nicht überschrieben /// [MaxLength(2083)] public string Url { get; set; } /// /// Name der Listung /// [Localized] [NotMapped] public string Name { get => Get("Name", GetLanguage()); set => Set("Name", GetLanguage(), value); } /// /// Name - Inhalt /// [Column] public string NameLocalized { get; set; } /// /// Beschreibung der Listung /// [Localized] [NotMapped] public string Description { get => Get("Description", GetLanguage()); set => Set("Description", GetLanguage(), value); } /// /// Beschreibung der Listung /// [Column] public string DescriptionLocalized { get; set; } /// /// Bild der Listung für eine Sprache /// [Localized] [NotMapped] public string ImageLanguage { get => Get("ImageLanguage", GetLanguage()); set => Set("ImageLanguage", GetLanguage(), value); } /// /// Bild der Rubrik für eine Sprache - Dateiname /// [Column] public string ImageLanguageLocalized { get; set; } /// /// Bild der Listung für eine Sprache 8:9 /// [Localized] [NotMapped] public string Image2Language { get => Get("Image2Language", GetLanguage()); set => Set("Image2Language", GetLanguage(), value); } /// /// Bild der Rubrik für eine Sprache - Dateiname 8:9 /// [Column] public string Image2LanguageLocalized { get; set; } /// /// Link für die Listung für eine Sprache /// [Localized] [NotMapped] public string UrlLanguage { get => Get("UrlLanguage", GetLanguage()); set => Set("UrlLanguage", GetLanguage(), value); } /// /// Link für die Listung für eine Sprache /// [Column] public string UrlLanguageLocalized { get; set; } #endregion #region Geo-Einschränkungen /// /// Art der Geo-Einschränkung /// [Required] public GeoMode 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 /// public Address Address { get; set; } /// /// Geo-Koordinaten /// public Point Location { get; set; } /// /// Radius für eine Geolocation /// public double Radius { get; set; } #endregion /// /// Datum der Erstellung /// public DateTimeOffset Created { get; set; } #region IAuditable /// /// 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. /// /// Eindeutiger Key public string AuditKey() { return Id.ToString(); } /// /// Gibt den Objektnamen bzw. die Tabelle der Entität zurück /// /// Objektnamen public string AuditTable() { return "Listings"; } public AuditableOptions Options() { return AuditableOptions.Create | AuditableOptions.Edit | AuditableOptions.Delete; } #endregion } /// /// Repräsentiert eine Listung für Listen /// public class ListingWithNames : SyncEntityVw { /// /// Id des Kunden /// public long CustomerId { get; set; } /// /// Name des kunden /// public string CustomerName { get; set; } /// /// Id der Branche /// public string BranchId { get; set; } /// /// Name der Branche /// public string BranchName { get; set; } /// /// Online / Offline Status der Branche /// public OnlineStatus BranchOnlineStatus { get; set; } /// /// Typ der Listung - Basis, Silber, Gold, Plating /// public ListingType ListingType { get; set; } /// /// Startdatum der Listung /// public DateTimeOffset? StartDate { get; set; } /// /// Enddatum der Listung /// public DateTimeOffset? EndDate { get; set; } /// /// Wie lange kann man diese Buchung reservieren bis sie bezahlt wird /// public DateTimeOffset? ReservedUntil { get; set; } /// /// Status der Listung /// public ListingStatus Status { get; set; } /// /// Listingadresse - Adresszeile 1 /// public string ListingAddress_AddressLine1 { get; set; } /// /// Listingadresse - Adresszeile 2 /// public string ListingAddress_AddressLine2 { get; set; } /// /// Listingadresse - Stadt / Ort /// public string ListingAddress_City { get; set; } /// /// Listingadresse - PLZ /// public string ListingAddress_Zip { get; set; } /// /// Listingadresse - Bundesland / Staat /// public string ListingAddress_State { get; set; } /// /// Listingadresse - ISO2 Ländercode /// public string ListingAddress_CountryCode { get; set; } /// /// Geo-Koordinaten der Listungs-Adresse /// public Point ListingLocation { get; set; } #region Payment /// /// Zahlungsart der Bestellung /// public PaymentType PaymentType { get; set; } /// /// Zahlungsstatus der Bestellung /// public PaymentStatus PaymentStatus { get; set; } /// /// Zahlungsdatum /// public DateTimeOffset? PayedDate { get; set; } #endregion #region Inhalt /// /// Bild für die Listung - Allgemein /// public string Image { get; set; } /// /// Bild für die Listung - Allgemein 8:9 /// public string Image2 { get; set; } /// /// Link für die Listung - allgemein wenn nicht überschrieben /// public string Url { get; set; } /// /// Name der Listung /// public string Name { get; set; } /// /// Name - Inhalt /// [Column] public string NameLocalized { get; set; } /// /// Beschreibung der Listung /// public string Description { get; set; } /// /// Beschreibung der Listung /// [Column] public string DescriptionLocalized { get; set; } /// /// Bild der Listung für eine Sprache /// public string ImageLanguage { get; set; } /// /// Bild der Rubrik für eine Sprache - Dateiname /// [Column] public string ImageLanguageLocalized { get; set; } /// /// Bild der Listung für eine Sprache 8:9 /// public string Image2Language { get; set; } /// /// Bild der Rubrik für eine Sprache - Dateiname 8:9 /// [Column] public string Image2LanguageLocalized { get; set; } /// /// Link für die Listung für eine Sprache /// public string UrlLanguage { get; set; } /// /// Link für die Listung für eine Sprache /// [Column] public string UrlLanguageLocalized { get; set; } #endregion #region Geo-Einschränkungen /// /// Art der Geo-Einschränkung /// public GeoMode GeoMode { get; set; } /// /// Bundesland / Staat /// public string Address_State { get; set; } /// /// ISO2 Ländercode /// public string Address_CountryCode { get; set; } /// /// Geo-Koordinaten /// public Point Location { get; set; } /// /// Radius für eine Geolocation /// public double Radius { get; set; } #endregion /// /// Datum der Erstellung /// public DateTimeOffset Created { get; set; } } }