using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using gehGassi.Domain.Common; using gehGassi.Domain.Localization; using gehGassi.Web.Helper; namespace gehGassi.Web.Models { /// /// Viewmodel für eine Produkt-Kategorie /// public class ProductCategoryVm { /// /// Eindeutige Id /// [Required(ErrorMessage = "Err_Required")] public int Id { get; set; } /// /// Id der Übergeordneten Kategorie /// [Display(Name = "ProductCategory_ParentId")] public int? ParentId { get; set; } /// /// Für wen sichtbar? /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Product_Visibility", Description = "Product_Visibility_Desc")] public ShopVisibilityVm Visibility { get; set; } /// /// Titel der Kategorie /// [Required(ErrorMessage = "Err_Required")] [MaxLength(100, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "ProductCategory_Title")] public string Title { get; set; } /// /// Anmerkungen intern /// [Display(Name = "Common_Comment")] public string Comment { get; set; } /// /// Reihenfolge der Darstellung, danach nach Name /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Common_DisplayOrder", Description = "Common_DisplayOrder_Desc")] public int DisplayOrder { get; set; } /// /// Bild für die Produktkategorie - Allgemein /// [Required(ErrorMessage = "Err_Required")] [MaxLength(500, ErrorMessage = "Err_StringLength_Max")] [Display(Name = "ProductCategory_Image")] public string Image { get; set; } /// /// Gelöscht /// [Required(ErrorMessage = "Err_Required")] [Display(Name = "Common_Deleted")] public bool Deleted { get; set; } /// /// Datum der Erstellung /// [Display(Name = "Common_Created")] public DateTimeOffset Created { get; set; } /// /// Texte mehrsprachig /// public List TextVms { get; set; } } /// /// Viewmodel für das Anlegen / Bearbeiten einer Produktkategorie /// public class ProductCategoryCrudVm : ProductCategoryVm { /// /// Titel der übergeordneten Produktkategorie /// [Display(Name = "ProductCategory_ParentId")] public string ParentTitle { get; set; } } /// /// Hilfsklasse für das Erfassen Mehrsprachiger Texte für Produktkategorien. /// Wird so gelöst, damit beliebig viele Sprachen verwendet werden können /// public class ProductCategoryTextVm { /// /// Id /// [Required(ErrorMessage = "Err_Required")] public int 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 = "ProductCategory_Name", Description = "ProductCategory_Name_Desc")] public string Name { get; set; } /// /// Beschreibung /// [Display(Name = "ProductCategory_Description", Description = "ProductCategoryDescription_Desc")] public string Description { get; set; } /// /// Bild für die jeweilige Sprache /// [Display(Name = "ProductCategory_ImageLanguage", Description = "ProductCategory_ImageLanguage_Desc")] public string ImageLanguage { get; set; } } /// /// Viewmodel für die Listendarstellung von Produkategorien /// public class ProductCategoryListVm : LocalizableBase { /// /// Eindeutige Id /// public int Id { get; set; } /// /// Id der Übergeordneten Kategorie /// public int? ParentId { get; set; } /// /// Für wen sichtbar? /// public ShopVisibilityVm Visibility { get; set; } /// /// Übersetzung der Shop-Visibility /// public string ShopVisibilityText { get; set; } /// /// Titel der Kategorie /// public string Title { get; set; } /// /// Reihenfolge der Darstellung, danach nach Name /// public int DisplayOrder { get; set; } /// /// Bild für die Produktkategorie - Allgemein /// public string Image { get; set; } /// /// Name der Rubrik /// public string Name { get => Get("Name", GetLanguage()); set => Set("Name", GetLanguage(), value); } /// /// Übersetzungen Name /// public string NameLocalized { get; set; } /// /// Gelöscht /// public bool Deleted { get; set; } /// /// Datum der Erstellung /// public DateTimeOffset Created { get; set; } /// /// Gibt an ob der Knoten Kinder hat /// public bool HasChildren { get; set; } } /// /// Viewmodel für die Baumdarstellung von Produkategorien /// public class ProductCategoryTreeVm : LocalizableBase { /// /// Eindeutige Id /// public int Id { get; set; } /// /// Id der Übergeordneten Kategorie /// public int? ParentId { get; set; } /// /// Für wen sichtbar? /// public ShopVisibilityVm Visibility { get; set; } /// /// Übersetzung der Shop-Visibility /// public string ShopVisibilityText { get; set; } /// /// Titel der Kategorie /// public string Title { get; set; } /// /// Reihenfolge der Darstellung, danach nach Name /// public int DisplayOrder { get; set; } /// /// Bild für die Produktkategorie - Allgemein /// public string Image { get; set; } /// /// Name der Kategorie /// public string Name { get => Get("Name", GetLanguage()); set => Set("Name", GetLanguage(), value); } /// /// Übersetzungen Name /// public string NameLocalized { get; set; } /// /// Gelöscht /// public bool Deleted { get; set; } /// /// Datum der Erstellung /// public DateTimeOffset Created { get; set; } /// /// Untergeordnete Kategorien /// public List Children { get; set; } /// /// Gibt an ob ein Element Kinder hat /// public bool HasChildren => Children.Count > 0; /// /// Erstellt eine Instanz /// public ProductCategoryTreeVm() { Children = new List(); } } }