using System;
using System.Collections.Generic;
using Kreta.Core;
using Kreta.Enums.ManualEnums;
using Kreta.Resources;
namespace Kreta.BusinessLogic.HelperClasses
{
///
/// Ez a Co írja le az egyszerű export-ok egy oszlopának tulajdonságát/viselkedését.
///
public class SimpleExportColumnCo
{
///
/// Az oszlop indexe az excelben, ahová export-áljuk.
/// 0-tól indexelünk!
///
public int Index { get; set; }
///
/// Az oszlop header-jének a neve, azaz ami az első sorba fog kerülni export-áláskor a tényleges adatok felett.
///
public string HeaderName { get; set; }
///
/// 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)
///
public Type Type { get; set; }
///
/// Ha megadjuk, akkor az oszlophoz tartozó lenyíló lista adatforrását egy külön sheet-be generálunk.
///
public IList DropDownColumnSource { get; set; }
///
/// 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.
///
public string DropDownColumnSourceSheetGroupName { get; set; }
///
/// 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.
///
public ExcelAggregateFunctionEnum AggregateFunction { get; set; }
///
/// 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)
///
public BooleanDisplayFormatEnum BooleanDisplayFormat { get; set; }
///
/// Ha az oszlop DateTime típusú, akkor annak a formázáshoz használható paraméter.
/// Default értéke: Kreta.Core.Constants.ToStringPattern.HungarianDate
///
public string DateTimeToStringPattern { get; set; }
///
/// 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
///
public int DecimalDigitCount { get; set; }
///
/// A property neve, amiből előszedjük az oszlophoz az adatokat.
/// Reflection-höz kell.
///
public string PropertyName { get; set; }
///
/// 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.
///
public bool IsDropDownColumn { get; }
///
/// Ez alapján dől el, hogy a szöveget a cellában HTML-ként, vagy sima szövegként fogja megjeleníteni.
///
public bool AsHtml { get; }
///
/// Ebben az esetben használjuk a SimpleExportColumnAttribute-ot Co-n vagy model-en.
///
/// 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 típusa.
/// Ha megadjuk, akkor az oszlophoz tartozó lenyíló lista adatforrását egy külön sheet-be generálunk.
/// Ha megadjuk, akkor az oszlophoz tartozó lenyíló lista adatforrásának sheet neve lesz.
/// Ha megadjuk, akkor az oszlophoz generál egy aggregált értéket az oszlop értékeiből az utolsó sor után.
/// Ha az oszlop bool típusú, akkor annak a megjelenítéséhez használható paraméter.
/// Ha a oszlop DateTime típusú, akkor annak a formázáshoz használható paraméter.
/// 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.
/// Ha az oszlop string típusú, akkor ezzel adhatjuk meg, hogy HTML vagy egyszerű szövegként jelenjen meg.
/// A property neve, amiből előszedjük az oszlophoz az adatokat.
public SimpleExportColumnCo(
int index,
string headerName,
Type type,
IList 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;
}
}
}
}