289 lines
14 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|