using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using gehGassi.Domain.Common; using gehGassi.Domain.Localization; using gehGassi.Web.Helper; namespace gehGassi.Web.Models { /// /// Viewmodel für eine Listung /// public class ListingVm : SyncEntityVm { /// /// Id des Kunden /// [Required(ErrorMessage = "Err_Required")] [Range(1,long.MaxValue, ErrorMessage = "Err_Required")] [Display(Name = "Listing_CustomerId")] public long CustomerId { get; set; } /// /// Id der Branche /// [Required(ErrorMessage = "Err_Required")] [MaxLength(128, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Listing_BranchId", Description = "Listing_BranchId_Desc")] public string BranchId { get; set; } /// /// Bild für die Listing /// [Required(ErrorMessage = "Err_Required")] [MaxLength(500, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Listing_Image", Description = "Listing_Image_Desc")] public string Image { get; set; } /// /// Bild für die Listing 8:9 /// [Required(ErrorMessage = "Err_Required")] [MaxLength(500, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Listing_Image2", Description = "Listing_Image2_Desc")] public string Image2 { get; set; } /// /// Url für die Listing /// [Required(ErrorMessage = "Err_Required")] [MaxLength(2083, ErrorMessage = "Err_StringLength_Max")] [Url(ErrorMessage = "Err_InvalidUrl")] [Display(Name = "Listing_Url", Description = "Listing_Url_Desc")] public string Url { get; set; } /// /// Typ der Listung - Basis, Silber, Gold, Plating /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Common_ListingType", Description = "Common_ListingType_Desc")] public ListingTypeVm ListingType { get; set; } /// /// Startdatum der Listung /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Listing_StartDate", Description = "Listing_StartDate_Desc")] public DateTimeOffset? StartDate { get; set; } /// /// Enddatum der Listung /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Listing_EndDate", Description = "Listing_EndDate_Desc")] public DateTimeOffset? EndDate { get; set; } /// /// Wie lange kann man diese Buchung reservieren bis sie bezahlt wird /// [Display(Name = "Listing_ReservedUntil", Description = "Listing_ReservedUntil_Desc")] public DateTimeOffset? ReservedUntil { get; set; } /// /// Status der Listung /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Listing_Status", Description = "Listing_Status_Desc")] public ListingStatusVm Status { get; set; } /// /// Adresse die für die Listung in der App angezeigt werden soll /// [Display(Name = "Listing_Address", Description = "Listing_Address_Desc")] public AddressRequiredVm ListingAddress { 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; } } /// /// Viewmodel für das Anlegen und Bearbeiten einer Listung /// public class ListingCrudVm : ListingVm { /// /// Name des Kunden /// public string CustomerName { get; set; } /// /// Name der Branche /// public string BranchName { get; set; } /// /// Land-Name /// public string CountryName { get; set; } /// /// Bundesland-Name /// public string StateName { get; set; } /// /// Land-Name für die Listing-Adresse /// public string ListingCountryName { get; set; } /// /// Bundesland-Name für die Listing-Adresse /// public string ListingStateName { get; set; } } /// /// Hilfsklasse für das Erfassen Mehrsprachiger Texte für Listungen. /// Wird so gelöst, damit beliebig viele Sprachen verwendet werden können /// public class ListingTextVm { /// /// Id /// [Required(ErrorMessage = "Err_Required")] public string Id { get; set; } /// /// Srache /// [Required(ErrorMessage = "Err_Required")] public string Language { get; set; } /// /// Name /// //[Required(ErrorMessage = "Err_Required")] [RequiredIfDefaultLanguage("Language", ErrorMessage = "Err_Required")] [MaxLength(100, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Listing_Name", Description = "Listing_Name_Desc")] public string Name { get; set; } /// /// Beschreibung /// [Display(Name = "Listing_Description", Description = "Listing_Description_Desc")] public string Description { get; set; } /// /// Bild für die jeweilige Sprache /// [Display(Name = "Listing_ImageLanguage", Description = "Listing_ImageLanguage_Desc")] public string ImageLanguage { get; set; } /// /// Bild für die jeweilige Sprache 8:9 /// [Display(Name = "Listing_Image2Language", Description = "Listing_Image2Language_Desc")] public string Image2Language { get; set; } /// /// Url für die jeweilige Sprache /// [MaxLength(2083, ErrorMessage = "Err_StringLength_Max")] [Url(ErrorMessage = "Err_InvalidUrl")] [Display(Name = "Listing_UrlLanguage", Description = "Listing_UrlLanguage_Desc")] public string UrlLanguage { get; set; } } /// /// Viewmodel für die Listendarstellung von Listungen /// public class ListingListVm : SyncEntityLocalizableListVm { /// /// 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; } /// /// Name der Listung /// public string Name { get => Get("Name", GetLanguage()); set => Set("Name", GetLanguage(), value); } /// /// Übersetzungen Name /// public string NameLocalized { get; set; } /// /// Bild für die Listiung /// public string Image { get; set; } /// /// Bild für die Listiung 8:9 /// public string Image2 { get; set; } /// /// Url für die Listing /// public string Url { get; set; } /// /// Typ der Listung - Basis, Silber, Gold, Plating /// public ListingTypeVm ListingType { get; set; } /// /// Typ der Listung - Text /// public string ListingTypeText { 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 ListingStatusVm Status { get; set; } /// /// Status der Listung - Text /// public string StatusText { get; set; } #region Payment /// /// Id der Bestellung /// public long? OrderId { get; set; } /// /// Id des Artikels in der Bestellung /// public long? OrderItemId { get; set; } /// /// 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 /// /// Art der Geo-Einschränkung /// public GeoModeVm GeoMode { get; set; } /// /// Art der Geo-Einschränkung - Text /// public string GeoModeText { get; set; } /// /// Datum der Erstellung /// public DateTimeOffset Created { get; set; } } /// /// Viewmodel für das Buchen einer Listung /// public class ListingBookVm : SyncEntityVm { /// /// Id des Kunden /// [Required(ErrorMessage = "Err_Required")] [Range(1, long.MaxValue, ErrorMessage = "Err_Required")] [Display(Name = "Listing_CustomerId")] public long CustomerId { get; set; } /// /// Id der Branche /// [Required(ErrorMessage = "Err_Required")] [MaxLength(128, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Listing_BranchId", Description = "Listing_BranchId_Desc")] public string BranchId { get; set; } /// /// Name der Branche /// public string BranchName { get; set; } /// /// Bild für die Listing /// [Required(ErrorMessage = "Err_Required")] [MaxLength(500, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Listing_Image", Description = "Listing_Image_Desc")] public string Image { get; set; } /// /// Bild für die Listing 8:9 /// [Required(ErrorMessage = "Err_Required")] [MaxLength(500, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "Listing_Image2", Description = "Listing_Image2_Desc")] public string Image2 { get; set; } /// /// Url für die Listing /// [Required(ErrorMessage = "Err_Required")] [MaxLength(2083, ErrorMessage = "Err_StringLength_Max")] [Url(ErrorMessage = "Err_InvalidUrl")] [Display(Name = "Listing_Url", Description = "Listing_Url_Desc")] public string Url { get; set; } /// /// Typ der Listung - Basis, Silber, Gold, Plating /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Common_ListingType", Description = "Common_ListingType_Desc")] public ListingTypeVm ListingType { get; set; } /// /// Startdatum der Listung /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Listing_StartDate", Description = "Listing_StartDate_Desc")] public DateTimeOffset? StartDate { get; set; } /// /// Enddatum der Listung /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Listing_EndDate", Description = "Listing_EndDate_Desc")] public DateTimeOffset? EndDate { get; set; } #region Geo-Einschränkungen /// /// 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; } /// /// Land-Name /// public string CountryName { get; set; } /// /// Bundesland-Name /// public string StateName { get; set; } #endregion /// /// Texte mehrsprachig /// public List TextVms { get; set; } } }