using System; using System.Resources; using Kreta.Enums.ManualEnums; namespace Kreta.Core.CustomAttributes { /// /// Model, Co vagy egyéb objektumok property-jéhez használható attribute, ami egy excel export egy oszlopát definiálja. /// [AttributeUsage(AttributeTargets.Property, AllowMultiple = true)] public class SimpleExportColumnAttribute : Attribute { #region Fields private string _columnHeaderName; private string _dropDownColumnSourceSheetGroupName; #endregion Fields #region Properties /// /// Az attribute egyedi "azonosítója". /// Ez azért kell, hogyha egy property-t, akár több export-hoz használunk, akkor egyértelműen be tudjuk azonosítani. /// Javaslat, hogy erre legyen egy kivezett konstans, aminek nameof()-al adunk értéket, hogy ha át akaruk nevezni, akkor ne egy string-et kelljen. /// Pl.: public const string ExportPropertyId = nameof(ExportPropertyId); /// Használat: ExportPropertyId /// public string AttributeId { get; } /// /// Az oszlop indexe az excelben, ahová export-áljuk. /// 0-tól indexelünk! /// Használat: 00 vagy 12 vagy stb... /// public int Index { get; } /// /// Az oszlop header-jének a neve, azaz ami az első sorba fog kerülni export-áláskor a tényleges adatok felett. /// Használat: nameof(ImportExportEszkozResource.ImportHeaderNameMennyiseg) /// public string HeaderName { get => new ResourceManager(HeaderNameResourceType).GetString(_columnHeaderName); set => _columnHeaderName = value; } /// /// Az oszlop header-jének a Resource típusa, hogy honnan szedjük elő a header-nek a nevét. /// Használat: typeof(ImportExportEszkozResource) /// public Type HeaderNameResourceType { get; } /// /// Ha megadjuk, akkor az oszlophoz tartozó lenyíló lista adatforrásának sheet neve lesz. /// Ezt akkor kell használni, ha több lenyíló listának kell használni egy sheet-et adatforrásként. Pl.: Állampolgárság/Állampolgárság2 /// FONTOS: Ha ennek értéket adtunk, akkor kötelező a DropDownColumnSourceSheetGroupNameResourceType-nak is értéket adni! /// Használat: nameof(ImportExportEszkozResource.ImportHeaderNameMennyiseg) /// public string DropDownColumnSourceSheetGroupName { get => !string.IsNullOrWhiteSpace(_dropDownColumnSourceSheetGroupName) ? new ResourceManager(DropDownColumnSourceSheetGroupNameResourceType).GetString(_dropDownColumnSourceSheetGroupName) : null; set => _dropDownColumnSourceSheetGroupName = value; } /// /// Ha megadjuk, akkor az oszlop header-jének a Resource típusa, hogy honnan szedjük elő az oszlophoz tartozó lenyíló lista adatforrásának sheet nevét. /// FONTOS: Ha ennek értéket adtunk, akkor kötelező a DropDownColumnSourceSheetGroupName-nak is értéket adni! /// Használat: typeof(ImportExportEszkozResource) /// public Type DropDownColumnSourceSheetGroupNameResourceType { get; } /// /// Ha megadjuk, akkor az oszlophoz generál egy aggregált értéket az oszlop értékeiből az utolsó sor után. /// FONTOS: AGGREGATE function is designed vertical ranges, not horizontal ranges. /// https://support.microsoft.com/en-us/office/aggregate-function-43b9278e-6aa7-4f17-92b6-e19993fa26df /// Default értéke: ExcelAggregateFunctionEnum.NONE és így nem lesz figyelembe véve. /// Használat: AggregateFunction = ExcelAggregateFunctionEnum.SUM /// public ExcelAggregateFunctionEnum AggregateFunction { get; set; } = ExcelAggregateFunctionEnum.NONE; /// /// Ha az oszlop bool típusú, akkor annak a megjelenítéséhez használható paraméter. /// Default értéke: BooleanDisplayFormatEnum.Teljes(azaz Igen/Nem fog megjelenni) /// Használat: BooleanDisplayFormat = BooleanDisplayFormatEnum.IN /// public BooleanDisplayFormatEnum BooleanDisplayFormat { get; set; } = BooleanDisplayFormatEnum.Teljes; /// /// Ha az oszlop DateTime típusú, akkor annak a formázáshoz használható paraméter. /// Default értéke: Kreta.Core.Constants.ToStringPattern.HungarianDate /// Használat: DateTimeToStringPattern = Constants.ToStringPattern.HungarianDateTimeWithoutSeconds /// public string DateTimeToStringPattern { get; set; } = Constants.ToStringPattern.HungarianDate; /// /// Ha az oszlop decimal/decimal?/double/double? típusú, akkor az excel-ben megjelenő tizedesjegyek számának meghatározásához használható paraméter. /// Default értéke: 2 /// Használat: DecimalDigitCount = 0 /// public int DecimalDigitCount { get; set; } = 2; /// /// Force-olhatunk egy oszlopot, hogy az excel-ben milyen típusént viselkedjen, az eredeti típusához képest. /// Erre példa, hogyha egy van egy string mezőnk, de mi szeretnénk, hogy bool-ként viselkedjen és az oszlophoz tartozzon egy bool lenyíló lista. /// Ezzel óvatosan kell bánni, mert ha nagyon eltér az excel-ben a mező értéke és a típusa az hibát okozhat vagy rosszul jelenhet meg. /// Pl.: DateTime int-ként nem dátum formátumú lesz, hanem a az adot dátum-ból csinál egy int-et az excel(2020.08.01. -> 44044). /// Használat: ForcedType = typeof(int) /// public Type ForcedType { get; set; } = null; /// /// Ez alapján dől el, hogy a szöveget a cellában HTML-ként, vagy sima szövegként fogja megjeleníteni. /// Default értéke: false /// Használat: AsHtml = true /// public bool AsHtml { get; set; } = false; #endregion Properties #region Constructors /// /// Model, Co vagy egyéb objektumok property-jéhez használható attribute, ami egy excel export egy oszlopát definiálja. /// /// Az attribute egyedi "azonosítója". /// Az oszlop indexe az excelben, ahová export-áljuk. /// Az oszlop header-jének a neve, azaz ami az első sorba fog kerülni export-áláskor a tényleges adatok felett. /// Az oszlop header-jének a Resource típusa, hogy honnan szedjük elő a header-nek a nevét. /// Ha megadjuk, akkor az oszlophoz tartozó lenyíló lista adatforrásának sheet neve lesz. /// Ha megadjuk, akkor az oszlop header-jének a Resource típusa, hogy honnan szedjük elő az oszlophoz tartozó lenyíló lista adatforrásának sheet nevét. public SimpleExportColumnAttribute( string attributeId, int index, string headerName, Type headerNameResourceType, string dropDownColumnSourceSheetGroupName = null, Type dropDownColumnSourceSheetGroupNameResourceType = null) { if (string.IsNullOrWhiteSpace(dropDownColumnSourceSheetGroupName) && dropDownColumnSourceSheetGroupNameResourceType != null || !string.IsNullOrWhiteSpace(dropDownColumnSourceSheetGroupName) && dropDownColumnSourceSheetGroupNameResourceType == null) { throw new ArgumentException($"Ha bármelyiknek a kettőből érték lett adva, akkor kötelező a másiknak is: {nameof(dropDownColumnSourceSheetGroupName)}, {nameof(dropDownColumnSourceSheetGroupNameResourceType)}"); } AttributeId = attributeId; Index = index; HeaderName = headerName; HeaderNameResourceType = headerNameResourceType; DropDownColumnSourceSheetGroupName = dropDownColumnSourceSheetGroupName; DropDownColumnSourceSheetGroupNameResourceType = dropDownColumnSourceSheetGroupNameResourceType; } #endregion Constructors } }