kreta/Kreta.BusinessLogic/Helpers/Nyomtatvanyok/Excel/OsztalyokTantargyiStatisztika.cs
2024-03-13 00:33:46 +01:00

289 lines
14 KiB
C#

using System.Collections.Generic;
using System.Data;
using System.IO;
using Kreta.Core.ConnectionType;
using Kreta.Enums;
using Kreta.Web.Helpers.Extension;
using OfficeOpenXml;
namespace Kreta.BusinessLogic.Helpers.Nyomtatvanyok.Excel
{
public class OsztalyokTantargyiStatisztika : BaseNyomtatvanyExcel
{
private bool IsMagatartasSzorgalomNemLatszik { get; } = false;
public OsztalyokTantargyiStatisztika(IConnectionType connectionType, bool isMultisheetExcel = false, string templateFileName = null, bool isMagatartasSzorgalomNemLatszik = false) : base(connectionType, isMultisheetExcel)
{
StoredProcedure = "sp_Nyomtatvany_Excel_IdoszakiOsztalyokTantargyiStatisztika";
IsMagatartasSzorgalomNemLatszik = isMagatartasSzorgalomNemLatszik;
FileInfo fileInfo = null;
if (templateFileName != null)
{
fileInfo = new FileInfo(templateFileName);
}
ExcelPackage = fileInfo == null ? new ExcelPackage() : new ExcelPackage(fileInfo);
//Munkalap tulajdonságok beállítása
SetWorkbookProperties();
}
public override void CreateSheet(Dictionary<string, string> dbParameters, int sheetIndex = 1)
{
DbParameters = dbParameters;
dbParameters.TryGetValue("pErtekelestipusaId", out string ertekelesTipusaId);
if (string.IsNullOrWhiteSpace(ertekelesTipusaId))
{
ertekelesTipusaId = ErtekelesTipusEnum.evvegi_jegy_ertekeles.ToString();
}
// Adatforrás összeállítása
SetExcelDataSet();
DataTable osztalyDataTable = DataSet.Tables[0];
DataTable tantargyDataTable = DataSet.Tables[1];
DataTable atlagDataTable = DataSet.Tables[2];
DataTable mulasztasDataTable = DataSet.Tables[3];
DataTable iktatasAdatokTable = DataSet.Tables[DataSet.Tables.Count - 1]; // utolsó tábla az iktatás adatok
iktatasAdatokTable.TableName = "IktatasAdatok";
DataAccessManual.Util.DataAccessBase.SetBoolFields(iktatasAdatokTable, "OJCSJKeresztfeleves,OJTechnikaiOsztaly,OJNemzetisegi,OJKettannyelvu,OJNyelviElokeszito,OJIsGyogypedagogiaiLogopediai,OJSportOsztaly,OJAranyJanosProgram");
//Munkalap összeállítása
ExcelWorksheet worksheet = CreateSheet(Resources.ExcelNyomtatvanyResource.ResourceManager.GetString("OsztalyokTantargyiStatisztikaMunkalapnev_" + ertekelesTipusaId), sheetIndex, eOrientation.Landscape, true, 2);
worksheet.Row(1).Height = 120;
worksheet.Column(1).Width = 30;
worksheet.Column(2).Width = 3;
worksheet.View.FreezePanes(2, 3);
bool isGyakorlati = dbParameters["pElmeletgyakorlat"] == "1";
if (IsMagatartasSzorgalomNemLatszik)
{
tantargyDataTable.RemoveDataRowIfAnyColumnValueMatch("TantargyId", new List<int>() { -1, -2 });
}
CreateHeaderColumns(worksheet, tantargyDataTable);
CreateHeaderRows(worksheet, osztalyDataTable);
CreateMulasztasHeaders(worksheet, tantargyDataTable.Rows.Count, isGyakorlati);
FillMainData(worksheet, osztalyDataTable, tantargyDataTable, atlagDataTable);
FillMulasztasData(worksheet, osztalyDataTable, mulasztasDataTable, tantargyDataTable.Rows.Count, isGyakorlati);
FillAggregate(worksheet, osztalyDataTable.Rows.Count, tantargyDataTable.Rows.Count);
}
private void CreateHeaderColumns(ExcelWorksheet worksheet, DataTable tantargyDataTable)
{
worksheet.Cells[1, 1].Value = "Osztályok";
worksheet.Cells[1, 1].StyleName = HeaderStyleBottomBordered.Name;
worksheet.Cells[1, 2].Value = "Tanulók Száma";
worksheet.Cells[1, 2].StyleName = HeaderStyle90BottomBordered.Name;
if (tantargyDataTable.Rows.Count <= 0)
{
return;
}
var columnIndex = 3;
foreach (DataRow dataRow in tantargyDataTable.Rows)
{
worksheet.Column(columnIndex).Width = 7;
worksheet.Cells[1, columnIndex].Value = dataRow["TantargyNev"];
worksheet.Cells[1, columnIndex].StyleName = HeaderStyle90BottomBordered.Name;
columnIndex++;
}
}
private void CreateHeaderRows(ExcelWorksheet worksheet, DataTable osztalyDataTable)
{
if (osztalyDataTable.Rows.Count <= 0)
{
return;
}
var rowIndex = 2;
foreach (DataRow dataRow in osztalyDataTable.Rows)
{
worksheet.Cells[rowIndex, 1].Value = dataRow["OsztalyNev"];
worksheet.Cells[rowIndex, 1].StyleName = HeaderStyleBottomBordered.Name;
worksheet.Cells[rowIndex, 2].Value = dataRow["Letszam"];
worksheet.Cells[rowIndex, 2].StyleName = NormalStyleBottomBordered.Name;
rowIndex++;
}
}
private void CreateMulasztasHeaders(ExcelWorksheet worksheet, int colNumber, bool isGyakorlati)
{
if (isGyakorlati)
{
worksheet.Cells[1, colNumber + 3].Value = "Igazolt hiányzás (elméleti)";
worksheet.Cells[1, colNumber + 3].StyleName = HeaderStyle90BottomBorderedBGGray.Name;
worksheet.Cells[1, colNumber + 4].Value = "Igazolt késés (elméleti, óra)";
worksheet.Cells[1, colNumber + 4].StyleName = HeaderStyle90BottomBorderedBGGray.Name;
worksheet.Cells[1, colNumber + 5].Value = "Igazolatlan hiányzás (elméleti)";
worksheet.Cells[1, colNumber + 5].StyleName = HeaderStyle90BottomBorderedBGGray.Name;
worksheet.Cells[1, colNumber + 6].Value = "Igazolatlan késés (elméleti, óra)";
worksheet.Cells[1, colNumber + 6].StyleName = HeaderStyle90BottomBorderedBGGray.Name;
worksheet.Cells[1, colNumber + 7].Value = "Igazolt hiányzás (gyakorlati)";
worksheet.Cells[1, colNumber + 7].StyleName = HeaderStyle90BottomBorderedBGGray.Name;
worksheet.Cells[1, colNumber + 8].Value = "Igazolt késés (gyakorlati, óra)";
worksheet.Cells[1, colNumber + 8].StyleName = HeaderStyle90BottomBorderedBGGray.Name;
worksheet.Cells[1, colNumber + 9].Value = "Igazolatlanhiányzás (gyakorlati) ";
worksheet.Cells[1, colNumber + 9].StyleName = HeaderStyle90BottomBorderedBGGray.Name;
worksheet.Cells[1, colNumber + 10].Value = "Igazolatlankésés (gyakorlati, óra)";
worksheet.Cells[1, colNumber + 10].StyleName = HeaderStyle90BottomBorderedBGGray.Name;
}
else
{
worksheet.Cells[1, colNumber + 3].Value = "Igazolt hiányzás";
worksheet.Cells[1, colNumber + 3].StyleName = HeaderStyle90BottomBorderedBGGray.Name;
worksheet.Cells[1, colNumber + 4].Value = "Igazolt késés (óra)";
worksheet.Cells[1, colNumber + 4].StyleName = HeaderStyle90BottomBorderedBGGray.Name;
worksheet.Cells[1, colNumber + 5].Value = "Igazolatlan hiányzás";
worksheet.Cells[1, colNumber + 5].StyleName = HeaderStyle90BottomBorderedBGGray.Name;
worksheet.Cells[1, colNumber + 6].Value = "Igazolatlan késés (óra)";
worksheet.Cells[1, colNumber + 6].StyleName = HeaderStyle90BottomBorderedBGGray.Name;
}
}
private void FillMainData(ExcelWorksheet worksheet, DataTable osztalyDataTable, DataTable tantargyDataTable, DataTable atlagDataTable)
{
var rowIndex = 2;
foreach (DataRow osztalyDataRow in osztalyDataTable.Rows)
{
var columnIndex = 3;
foreach (DataRow tantargyDataRow in tantargyDataTable.Rows)
{
string rowFilter = $"OsztalyId = {osztalyDataRow["OsztalyId"]} AND TantargyId = {tantargyDataRow["TantargyId"]}";
var ert = atlagDataTable.Select(rowFilter);
worksheet.Cells[rowIndex, columnIndex].StyleName = Numeric2StyleBottomBordered.Name;
if (ert.Length != 0)
{
worksheet.Cells[rowIndex, columnIndex].Value = ert[0].ItemArray[4];
}
columnIndex++;
}
rowIndex++;
}
}
private void FillMulasztasData(ExcelWorksheet worksheet, DataTable osztalyDataTable, DataTable mulasztasDataTable, int colNumber, bool isGyakorlati)
{
if (osztalyDataTable.Rows.Count <= 0)
{
return;
}
string gyakorlatiFilter = "AND Gyakorlati = 'T'";
string nemGyakorlatiFilter = " AND Gyakorlati = 'F'";
int gyakorlatiIndex = isGyakorlati ? 1 : 0;
var rowIndex = 2;
foreach (DataRow dataRow in osztalyDataTable.Rows)
{
string igazoltHianyzasRowfilter = $"Tipus = {1500} AND Igazolt = 'T' AND OsztalyId = {dataRow["OsztalyId"]}";
string igazoltKesesRowfilter = $"Tipus = {1499} AND Igazolt = 'T' AND OsztalyId = {dataRow["OsztalyId"]}";
string igazolatlanHianyzasRowfilter = $"Tipus = {1500} AND Igazolt = 'F' AND OsztalyId = {dataRow["OsztalyId"]}";
string igazolatlanKesesRowfilter = $"Tipus = {1499} AND Igazolt = 'F' AND OsztalyId = {dataRow["OsztalyId"]}";
string igazoltGyakHianyzasRowfilter = $"{igazoltHianyzasRowfilter} {gyakorlatiFilter}";
string igazoltGyakKesesRowfilter = $"{igazolatlanKesesRowfilter} {gyakorlatiFilter}";
string igazolatlanGyakHianyzasRowfilter = $"{igazolatlanHianyzasRowfilter} {gyakorlatiFilter}";
string igazolatlanGyakKesesRowfilter = $"{igazolatlanKesesRowfilter} {gyakorlatiFilter}";
if (isGyakorlati)
{
igazoltHianyzasRowfilter += nemGyakorlatiFilter;
igazolatlanKesesRowfilter += nemGyakorlatiFilter;
igazolatlanHianyzasRowfilter += nemGyakorlatiFilter;
igazolatlanKesesRowfilter += nemGyakorlatiFilter;
}
var igazoltHianyzas = mulasztasDataTable.Select(igazoltHianyzasRowfilter);
var igazoltKeses = mulasztasDataTable.Select(igazoltKesesRowfilter);
var igazolatlanHianyzas = mulasztasDataTable.Select(igazolatlanHianyzasRowfilter);
var igazolatlanKeses = mulasztasDataTable.Select(igazolatlanKesesRowfilter);
DataRow[] igazoltGyakHianyzas;
DataRow[] igazoltGyakKeses;
DataRow[] igazolatlanGyakHianyzas;
DataRow[] igazolatlanGyakKeses;
if (isGyakorlati)
{
igazoltGyakHianyzas = mulasztasDataTable.Select(igazoltGyakHianyzasRowfilter);
igazoltGyakKeses = mulasztasDataTable.Select(igazoltGyakKesesRowfilter);
igazolatlanGyakHianyzas = mulasztasDataTable.Select(igazolatlanGyakHianyzasRowfilter);
igazolatlanGyakKeses = mulasztasDataTable.Select(igazolatlanGyakKesesRowfilter);
worksheet.Cells[rowIndex, colNumber + 7].StyleName = IntegerStyleBottomBordered.Name;
worksheet.Cells[rowIndex, colNumber + 8].StyleName = IntegerStyleBottomBordered.Name;
worksheet.Cells[rowIndex, colNumber + 9].StyleName = IntegerStyleBottomBordered.Name;
worksheet.Cells[rowIndex, colNumber + 10].StyleName = IntegerStyleBottomBordered.Name;
if (igazoltGyakHianyzas.Length != 0)
{
worksheet.Cells[rowIndex, colNumber + 7].Value = igazoltGyakHianyzas[0].ItemArray[5];
}
if (igazoltGyakKeses.Length != 0)
{
worksheet.Cells[rowIndex, colNumber + 8].Value = igazoltGyakKeses[0].ItemArray[4];
}
if (igazolatlanGyakHianyzas.Length != 0)
{
worksheet.Cells[rowIndex, colNumber + 9].Value = igazolatlanGyakHianyzas[0].ItemArray[5];
}
if (igazolatlanGyakKeses.Length != 0)
{
worksheet.Cells[rowIndex, colNumber + 10].Value = igazolatlanGyakKeses[0].ItemArray[4];
}
}
worksheet.Cells[rowIndex, colNumber + 3].StyleName = IntegerStyleBottomBordered.Name;
worksheet.Cells[rowIndex, colNumber + 4].StyleName = IntegerStyleBottomBordered.Name;
worksheet.Cells[rowIndex, colNumber + 5].StyleName = IntegerStyleBottomBordered.Name;
worksheet.Cells[rowIndex, colNumber + 6].StyleName = IntegerStyleBottomBordered.Name;
if (igazoltHianyzas.Length != 0)
{
worksheet.Cells[rowIndex, colNumber + 3].Value = igazoltHianyzas[0].ItemArray[4 + gyakorlatiIndex];
}
if (igazoltKeses.Length != 0)
{
worksheet.Cells[rowIndex, colNumber + 4].Value = igazoltKeses[0].ItemArray[3 + gyakorlatiIndex];
}
if (igazolatlanHianyzas.Length != 0)
{
worksheet.Cells[rowIndex, colNumber + 5].Value = igazolatlanHianyzas[0].ItemArray[4 + gyakorlatiIndex];
}
if (igazolatlanKeses.Length != 0)
{
worksheet.Cells[rowIndex, colNumber + 6].Value = igazolatlanKeses[0].ItemArray[3 + gyakorlatiIndex];
}
rowIndex++;
}
}
private void FillAggregate(ExcelWorksheet worksheet, int rowNumber, int colNumber)
{
worksheet.Cells[rowNumber + 2, 1].Value = "Tantárgyi átlagok";
worksheet.Cells[rowNumber + 2, 1].StyleName = HeaderStyle.Name;
string aggrfunctionname = "AVERAGE";
for (int columnIndex = 0; columnIndex < colNumber; columnIndex++)
{
string formula = $"{aggrfunctionname}({ColumnLabel(columnIndex + 3)}{2}:{ColumnLabel(columnIndex + 3)}{rowNumber + 1})";
formula = $"IF(ISERROR({formula}),\"\",{formula})";
AddFormulaCell(worksheet, rowNumber + 2, columnIndex + 3, "=" + formula, Numeric2Style);
}
}
}
}