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 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() { -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); } } } }