kreta/Kreta.BusinessLogic/HelperClasses/SimpleExportColumnCo.cs
2024-03-13 00:33:46 +01:00

134 lines
6.7 KiB
C#

using System;
using System.Collections.Generic;
using Kreta.Core;
using Kreta.Enums.ManualEnums;
using Kreta.Resources;
namespace Kreta.BusinessLogic.HelperClasses
{
/// <summary>
/// Ez a Co írja le az egyszerű export-ok egy oszlopának tulajdonságát/viselkedését.
/// </summary>
public class SimpleExportColumnCo
{
/// <summary>
/// Az oszlop indexe az excelben, ahová export-áljuk.
/// 0-tól indexelünk!
/// </summary>
public int Index { get; set; }
/// <summary>
/// Az oszlop header-jének a neve, azaz ami az első sorba fog kerülni export-áláskor a tényleges adatok felett.
/// </summary>
public string HeaderName { get; set; }
/// <summary>
/// Az oszlop típusa.
/// Ez alapján állítjuk be az excel-ben az adat formátmát. (https://docs.aspose.com/display/cellsnet/Data+Formatting)
/// </summary>
public Type Type { get; set; }
/// <summary>
/// Ha megadjuk, akkor az oszlophoz tartozó lenyíló lista adatforrását egy külön sheet-be generálunk.
/// </summary>
public IList<string> DropDownColumnSource { get; set; }
/// <summary>
/// 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.
/// </summary>
public string DropDownColumnSourceSheetGroupName { get; set; }
/// <summary>
/// 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.
/// </summary>
public ExcelAggregateFunctionEnum AggregateFunction { get; set; }
/// <summary>
/// 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)
/// </summary>
public BooleanDisplayFormatEnum BooleanDisplayFormat { get; set; }
/// <summary>
/// Ha az oszlop DateTime típusú, akkor annak a formázáshoz használható paraméter.
/// Default értéke: Kreta.Core.Constants.ToStringPattern.HungarianDate
/// </summary>
public string DateTimeToStringPattern { get; set; }
/// <summary>
/// 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
/// </summary>
public int DecimalDigitCount { get; set; }
/// <summary>
/// A property neve, amiből előszedjük az oszlophoz az adatokat.
/// Reflection-höz kell.
/// </summary>
public string PropertyName { get; set; }
/// <summary>
/// Ez alapján döntjük el, hogy lenyílólistás lesz-e az oszlop.
/// Ha van megadva DropDownColumnSource vagy bool a ColumnType, akkor lenyílólistás lesz.
/// </summary>
public bool IsDropDownColumn { get; }
/// <summary>
/// Ez alapján dől el, hogy a szöveget a cellában HTML-ként, vagy sima szövegként fogja megjeleníteni.
/// </summary>
public bool AsHtml { get; }
/// <summary>
/// Ebben az esetben használjuk a SimpleExportColumnAttribute-ot Co-n vagy model-en.
/// </summary>
/// <param name="index">Az oszlop indexe az excelben, ahová export-áljuk.</param>
/// <param name="headerName">Az oszlop header-jének a neve, azaz ami az első sorba fog kerülni export-áláskor a tényleges adatok felett.</param>
/// <param name="type">Az oszlop típusa.</param>
/// <param name="dropDownColumnSource">Ha megadjuk, akkor az oszlophoz tartozó lenyíló lista adatforrását egy külön sheet-be generálunk.</param>
/// <param name="dropDownColumnSourceSheetGroupName">Ha megadjuk, akkor az oszlophoz tartozó lenyíló lista adatforrásának sheet neve lesz.</param>
/// <param name="aggregateFunction">Ha megadjuk, akkor az oszlophoz generál egy aggregált értéket az oszlop értékeiből az utolsó sor után.</param>
/// <param name="booleanDisplayFormat">Ha az oszlop bool típusú, akkor annak a megjelenítéséhez használható paraméter.</param>
/// <param name="dateTimeToStringPattern">Ha a oszlop DateTime típusú, akkor annak a formázáshoz használható paraméter.</param>
/// <param name="decimalDigitCount">Ha a oszlop decimal/decimal?/double/double? típusú, akkor az excel-ben megjelenő tizedesjegyek számának meghatározásához használható paraméter.</param>
/// <param name="asHtml">Ha az oszlop string típusú, akkor ezzel adhatjuk meg, hogy HTML vagy egyszerű szövegként jelenjen meg.</param>
/// <param name="propertyName">A property neve, amiből előszedjük az oszlophoz az adatokat.</param>
public SimpleExportColumnCo(
int index,
string headerName,
Type type,
IList<string> dropDownColumnSource,
string dropDownColumnSourceSheetGroupName,
ExcelAggregateFunctionEnum aggregateFunction = ExcelAggregateFunctionEnum.NONE,
BooleanDisplayFormatEnum booleanDisplayFormat = BooleanDisplayFormatEnum.Teljes,
string dateTimeToStringPattern = Constants.ToStringPattern.HungarianDate,
int decimalDigitCount = 2,
bool asHtml = false,
string propertyName = null)
{
Index = index;
HeaderName = headerName;
Type = type;
DropDownColumnSource = dropDownColumnSource;
DropDownColumnSourceSheetGroupName = Type == typeof(bool) ? CommonResource.Logikai : dropDownColumnSourceSheetGroupName;
AggregateFunction = aggregateFunction;
BooleanDisplayFormat = booleanDisplayFormat;
DateTimeToStringPattern = dateTimeToStringPattern;
if (decimalDigitCount < 0)
{
throw new ArgumentOutOfRangeException();
}
DecimalDigitCount = decimalDigitCount;
AsHtml = asHtml;
PropertyName = propertyName;
if (DropDownColumnSource != null && DropDownColumnSource.Count > 0 || Type == typeof(bool))
{
IsDropDownColumn = true;
}
}
}
}