using System; using System.Collections.Generic; using System.Data; using System.IO; using Kreta.Core.ConnectionType; using OfficeOpenXml; namespace Kreta.BusinessLogic.Helpers.Nyomtatvanyok.Excel { public class TanulokTantargyiStatisztika : BaseNyomtatvanyExcel { private List osztalyFilterIds { get; set; } private bool IsMagatartasSzorgalomNemLatszik { get; } = false; public TanulokTantargyiStatisztika(IConnectionType connectionType, List osztalyFilterIds, bool isMultisheetExcel = false, string templateFilename = null, bool isMagatartasSzorgalomNemLatszik = false) : base(connectionType, isMultisheetExcel) { this.osztalyFilterIds = osztalyFilterIds; StoredProcedure = "sp_Nyomtatvany_Excel_IdoszakiTanuloStatisztika"; IsMagatartasSzorgalomNemLatszik = isMagatartasSzorgalomNemLatszik; FileInfo exFile = null; if (templateFilename != null) { exFile = new FileInfo(templateFilename); } ExcelPackage = (exFile == null) ? new ExcelPackage() : new ExcelPackage(exFile); //Munkalap tulajdonságok beállítása SetWorkbookProperties(); } public override void CreateSheet(Dictionary dbParameters, int sheetIndex = 1) { DbParameters = dbParameters; dbParameters.TryGetValue("pElmeletgyakorlat", out string elmeletGyakorlat); if (string.IsNullOrWhiteSpace(elmeletGyakorlat)) elmeletGyakorlat = "0"; dbParameters.TryGetValue("pErtekelestipusaId", out string ertekelesTipusaId); if (string.IsNullOrWhiteSpace(ertekelesTipusaId)) ertekelesTipusaId = Convert.ToString(Enums.ErtekelesTipusEnum.evvegi_jegy_ertekeles); // Adatforrás összeállítása SetExcelDataSet(); DataTable tanuloDt = DataSet.Tables[0]; DataTable tantargyakDt = DataSet.Tables[1]; DataTable ertekelesDt = DataSet.Tables[2]; DataTable magszorgDt = DataSet.Tables[3]; DataTable mulasztasDt = DataSet.Tables[4]; DataTable mulasztasSumDt = DataSet.Tables[5]; DataTable szamossagDt = DataSet.Tables[6]; if (osztalyFilterIds.Count > 0) { DataView tanuloDV = new DataView(tanuloDt); tanuloDV.RowFilter = string.Format("OSZTALYID IN ({0})", string.Join(", ", osztalyFilterIds.ToArray())); tanuloDt = tanuloDV.ToTable(); var filteredTanuloIds = new List(); foreach (DataRow row in tanuloDt.Rows) { filteredTanuloIds.Add($"'{(string)row["TANULOID"]}'"); } var filteredIds = string.Join(", ", filteredTanuloIds.ToArray()); DataView ertekelesDV = new DataView(ertekelesDt); ertekelesDV.RowFilter = $"TANULOID IN ({filteredIds})"; ertekelesDt = ertekelesDV.ToTable(); DataView magszorgDV = new DataView(magszorgDt); magszorgDV.RowFilter = $"TANULOID IN ({filteredIds})"; magszorgDt = magszorgDV.ToTable(); DataView mulasztasDV = new DataView(mulasztasDt); mulasztasDV.RowFilter = $"TANULOID IN ({filteredIds})"; mulasztasDt = mulasztasDV.ToTable(); DataView mulasztasSumDV = new DataView(mulasztasSumDt); mulasztasSumDV.RowFilter = $"TANULOID IN ({filteredIds})"; mulasztasSumDt = mulasztasSumDV.ToTable(); DataView szamossagDV = new DataView(szamossagDt); szamossagDV.RowFilter = $"TANULOID IN ({filteredIds})"; szamossagDt = szamossagDV.ToTable(); } //Munkalap összeállítása ExcelWorksheet worksheet = CreateSheet(Resources.ExcelNyomtatvanyResource.TanulokStatisztikaMunkalapnev, sheetIndex, eOrientation.Landscape, true); worksheet.Row(1).Height = 120; worksheet.Column(1).Width = 30; worksheet.Column(2).Width = 13; worksheet.Column(3).Width = 10; worksheet.Column(4).Width = 24; worksheet.View.FreezePanes(2, 5); for (int targycol = 5; targycol < tantargyakDt.Rows.Count + 4 + 3 + (elmeletGyakorlat.Equals("0") ? 8 : 14); targycol++) worksheet.Column(targycol).Width = 6; AddLabelCell(worksheet, 1, 1, Resources.ExcelNyomtatvanyResource.TanulokStatisztikaTanulok, HeaderStyleBottomBordered); AddLabelCell(worksheet, 1, 2, Resources.ExcelNyomtatvanyResource.TanulokStatisztikaOktAzon, HeaderStyleBottomBordered); AddLabelCell(worksheet, 1, 3, Resources.ExcelNyomtatvanyResource.TanulokStatisztikaOsztalyok, HeaderStyleBottomBordered); AddLabelCell(worksheet, 1, 4, Resources.ExcelNyomtatvanyResource.TanulokStatisztikaBesorolas, HeaderStyleBottomBordered); //AddLabelRange(worksheet, 1, 3, 1, 2/*Magatartás szorgalom*/ + tantargyakDt.Rows.Count + 1 + (elmeletGyakorlat.Equals("0") ? 8 : 14), osztalyDt.Rows[0]["C_NEV"].ToString(), DocheaderStyle2); //Értékelés statisztika hozzáadása int colOffset = 1; int[] retDimErtekeles; string[] adatMezo; string[] megjegyzesMezo; if (IsMagatartasSzorgalomNemLatszik) { adatMezo = new string[] { "ERTEKELES" }; megjegyzesMezo = new string[] { "ERTEKELES_SZOVEG_MEGJEGYZES" }; retDimErtekeles = AddDataTablePivotTable(worksheet, 1, colOffset, tantargyakDt, "TANTARGYID", "TANTARGY_NEV", tanuloDt, "TANULOID", new[] { "TANULONEV", "OKTATASIAZONOSITO", "OSZTALYNEV", "BESOROLASA" }, ertekelesDt, IntegerStyleBottomBordered, HeaderStyle90BottomBordered, HeaderStyleBottomBordered, adatMezo, megjegyzesMezo, new[] { "AVERAGE", "IF,#3=0,#-1,1", null, null, "COUNTIF,1" }, new[] { Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaTanulmanyiAtlag, Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaTanulmanyiAtlag2, null, null, Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaBukasokSzama }, new[] { Numeric2BoldStyleBottomBordered, Numeric2BoldStyleBottomBordered, null, null, IntegerBoldStyleBottomBordered }, new[] { "AVERAGE", "COUNTIF,5", "COUNTIF,4", "COUNTIF,3", "COUNTIF,2", "COUNTIF,1" }, new[] { Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaTantargyiAtlag, "5", "4", "3", "2", "1" }, new[] { Numeric2BoldStyleBottomBordered, IntegerStyleBottomBordered, IntegerStyleBottomBordered, IntegerStyleBottomBordered, IntegerStyleBottomBordered, IntegerStyleBottomBordered }); } else { var magatartasHeaderDtCreatorArray = new List { new[] { "id", "name", "torolt" }, new[] { "1", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaMagatartas, "F" } }; int[] retDimMag = AddDataTablePivotTable(worksheet, 1, colOffset, CreateDataTable(magatartasHeaderDtCreatorArray), new[] { "TOROLT" }, "name", tanuloDt, new[] { "TANULOID" }, new[] { "TANULONEV", "OKTATASIAZONOSITO", "OSZTALYNEV", "BESOROLASA" }, magszorgDt, IntegerStyleBottomBordered, HeaderStyle90BottomBordered, HeaderStyleBottomBordered, new[] { "MagatartasOsztalyzat" }, null, null, null, null, new[] { "AVERAGE", "COUNTIF,5", "COUNTIF,4", "COUNTIF,3", "COUNTIF,2", "COUNTIF,1" }, new[] { Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaTantargyiAtlag, "5", "4", "3", "2", "1" }, new[] { Numeric2BoldStyleBottomBordered, IntegerStyleBottomBordered, IntegerStyleBottomBordered, IntegerStyleBottomBordered, IntegerStyleBottomBordered, IntegerStyleBottomBordered }); colOffset += retDimMag[1]; var szorgalomHeaderDtCreatorArray = new List { new[] { "id", "name", "torolt" }, new[] { "1", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaSzorgalom, "F" } }; int[] retDimSzorg = AddDataTablePivotTable(worksheet, 1, colOffset, CreateDataTable(szorgalomHeaderDtCreatorArray), new[] { "TOROLT" }, "name", tanuloDt, new[] { "TANULOID" }, null, magszorgDt, IntegerStyleBottomBordered, HeaderStyle90BottomBordered, HeaderStyleBottomBordered, new[] { "SzorgalomOsztalyzat" }, null, null, null, null, new[] { "AVERAGE", "COUNTIF,5", "COUNTIF,4", "COUNTIF,3", "COUNTIF,2", "COUNTIF,1" }, null, new[] { Numeric2BoldStyleBottomBordered, IntegerStyleBottomBordered, IntegerStyleBottomBordered, IntegerStyleBottomBordered, IntegerStyleBottomBordered, IntegerStyleBottomBordered }); colOffset += retDimSzorg[1]; adatMezo = new string[] { "ERTEKELES" }; megjegyzesMezo = new string[] { "ERTEKELES_SZOVEG_MEGJEGYZES" }; retDimErtekeles = AddDataTablePivotTable(worksheet, 1, colOffset, tantargyakDt, "TANTARGYID", "TANTARGY_NEV", tanuloDt, "TANULOID", null, ertekelesDt, IntegerStyleBottomBordered, HeaderStyle90BottomBordered, HeaderStyleBottomBordered, adatMezo, megjegyzesMezo, new[] { "AVERAGE", "IF,#3=0,#-1,1", null, null, "COUNTIF,1" }, new[] { Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaTanulmanyiAtlag, Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaTanulmanyiAtlag2, null, null, Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaBukasokSzama }, new[] { Numeric2BoldStyleBottomBordered, Numeric2BoldStyleBottomBordered, null, null, IntegerBoldStyleBottomBordered }, new[] { "AVERAGE", "COUNTIF,5", "COUNTIF,4", "COUNTIF,3", "COUNTIF,2", "COUNTIF,1" }, new[] { Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaTantargyiAtlag, "5", "4", "3", "2", "1" }, new[] { Numeric2BoldStyleBottomBordered, IntegerStyleBottomBordered, IntegerStyleBottomBordered, IntegerStyleBottomBordered, IntegerStyleBottomBordered, IntegerStyleBottomBordered }); } colOffset += retDimErtekeles[1]; //Átlagok átlaga AddAggregateFormulaCell(worksheet, retDimErtekeles[0] - 5, colOffset - 5, "AVERAGE", 2, colOffset - 5, 1 + retDimErtekeles[0] - 7, colOffset - 5, true, Numeric2BoldBigerStyleBottomBordered); //Átlagok 2 átlaga AddAggregateFormulaCell(worksheet, retDimErtekeles[0] - 5, colOffset - 4, "AVERAGE", 2, colOffset - 4, 1 + retDimErtekeles[0] - 7, colOffset - 4, true, Numeric2BoldBigerStyleBottomBordered); //Bukások száma AddAggregateFormulaCell(worksheet, retDimErtekeles[0] - 5, colOffset - 1, "SUM", 2, colOffset - 1, 1 + retDimErtekeles[0] - 7, colOffset - 1, true, IntegerBoldStyleBottomBordered); //Dicséret, Kitűnő számosságok List szamossagTipusok = new List { "Dicseret", "Kituno" }; List szamossagTipusokNev = new List { Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaDicseretekSzama, Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaKitunoErtekelesekSzama }; int szamossagPos = 0; foreach (var szamossagTipus in szamossagTipusok) { var szamossag1DtCreatorArray = new List { new[] { "id", "name", "TOROLT"}, new[] { "1", szamossagTipusokNev[szamossagPos], "F" } }; AddDataTablePivotTable(worksheet, 1, colOffset - 3 + szamossagPos, CreateDataTable(szamossag1DtCreatorArray), new string[0], "name", tanuloDt, new[] { "TANULOID" }, null, szamossagDt, IntegerBoldStyleBottomBordered, HeaderStyle90BottomBordered, HeaderStyleBottomBordered, new[] { szamossagTipus }, null, null, null, null, new[] { "SUM" }, null, new[] { IntegerBoldStyleBottomBordered }); szamossagPos++; } int[] retDimSzamossag = new[] { retDimErtekeles[0], 2 }; //Mulasztási statisztika hozzáadása List hianyzasHeaderDtCreatorArray = new List(); List kesespercHeaderDtCreatorArray = new List(); List keseshianyzasHeaderDtCreatorArray = new List(); List feldolgozandokHeaderDtCreatorArray = new List(); List hianyzaskesespercFilter = new List(new[] { "tipus_char", "c_igazolt" }); List keseshianyzasFilter = new List(new[] { "c_igazolt" }); if (elmeletGyakorlat.Equals("0")) { hianyzasHeaderDtCreatorArray.Add(new[] { "id", "mulasztas_name", "tipus_char", "c_igazolt" }); hianyzasHeaderDtCreatorArray.Add(new[] { "1", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaIgazoltHianyzas, "H", "T" }); hianyzasHeaderDtCreatorArray.Add(new[] { "2", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaIgazolatlanHianyzas, "H", "F" }); kesespercHeaderDtCreatorArray.Add(new[] { "id", "mulasztas_name", "tipus_char", "c_igazolt" }); kesespercHeaderDtCreatorArray.Add(new[] { "1", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaIgazoltKesesPerc, "K", "T" }); kesespercHeaderDtCreatorArray.Add(new[] { "2", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaIgazolatlanKesesPerc, "K", "F" }); keseshianyzasHeaderDtCreatorArray.Add(new[] { "id", "mulasztas_name", "c_igazolt" }); keseshianyzasHeaderDtCreatorArray.Add(new[] { "1", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaIgazoltKesesHianyzas, "T" }); keseshianyzasHeaderDtCreatorArray.Add(new[] { "2", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaIgazolatlanKesesHianyzas, "F" }); feldolgozandokHeaderDtCreatorArray.Add(new[] { "id", "mulasztas_name", "tipus_char", "c_igazolt" }); feldolgozandokHeaderDtCreatorArray.Add(new[] { "1", Resources.ExcelNyomtatvanyResource.FeldolgozatlanMulasztas, "H", "-" }); feldolgozandokHeaderDtCreatorArray.Add(new[] { "2", Resources.ExcelNyomtatvanyResource.FeldolgozatlanKesesPerc, "K", "-" }); } else if (elmeletGyakorlat.Equals("1")) { hianyzaskesespercFilter.Add("c_gyakorlati"); keseshianyzasFilter.Add("c_gyakorlati"); hianyzasHeaderDtCreatorArray.Add(new[] { "id", "mulasztas_name", "tipus_char", "c_igazolt", "c_gyakorlati" }); hianyzasHeaderDtCreatorArray.Add(new[] { "1", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaElmeletiIgazoltHianyzas, "H", "T", "F" }); hianyzasHeaderDtCreatorArray.Add(new[] { "2", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaGyakorlatiIgazoltHianyzas, "H", "T", "T" }); hianyzasHeaderDtCreatorArray.Add(new[] { "3", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaElmeletiIgazolatlanHianyzas, "H", "F", "F" }); hianyzasHeaderDtCreatorArray.Add(new[] { "4", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaGyakorlatiIgazolatlanHianyzas, "H", "F", "T" }); kesespercHeaderDtCreatorArray.Add(new[] { "id", "mulasztas_name", "tipus_char", "c_igazolt", "c_gyakorlati" }); kesespercHeaderDtCreatorArray.Add(new[] { "1", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaElmeletiIgazoltKesesPerc, "K", "T", "F" }); kesespercHeaderDtCreatorArray.Add(new[] { "2", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaGyakorlatiIgazoltKesesPerc, "K", "T", "T" }); kesespercHeaderDtCreatorArray.Add(new[] { "3", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaElmeletiIgazolatlanKesesPerc, "K", "F", "F" }); kesespercHeaderDtCreatorArray.Add(new[] { "4", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaGyakorlatiIgazolatlanKesesPerc, "K", "F", "T" }); keseshianyzasHeaderDtCreatorArray.Add(new[] { "id", "mulasztas_name", "c_igazolt", "c_gyakorlati" }); keseshianyzasHeaderDtCreatorArray.Add(new[] { "1", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaElmeletiIgazoltKesesHianyzas, "T", "F" }); keseshianyzasHeaderDtCreatorArray.Add(new[] { "2", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaGyakorlatiIgazoltKesesHianyzas, "T", "T" }); keseshianyzasHeaderDtCreatorArray.Add(new[] { "3", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaElmeletiIgazolatlanKesesHianyzas, "F", "F" }); keseshianyzasHeaderDtCreatorArray.Add(new[] { "4", Resources.ExcelNyomtatvanyResource.OsztalyStatisztikaGyakorlatiIgazolatlanKesesHianyzas, "F", "T" }); feldolgozandokHeaderDtCreatorArray.Add(new[] { "id", "mulasztas_name", "tipus_char", "c_igazolt", "c_gyakorlati" }); feldolgozandokHeaderDtCreatorArray.Add(new[] { "1", Resources.ExcelNyomtatvanyResource.FeldolgozatlanElmeletiMulasztas, "H", "-", "F" }); feldolgozandokHeaderDtCreatorArray.Add(new[] { "2", Resources.ExcelNyomtatvanyResource.FeldolgozatlanGyakorlatiMulasztas, "H", "-", "T" }); feldolgozandokHeaderDtCreatorArray.Add(new[] { "3", Resources.ExcelNyomtatvanyResource.FeldolgozatlanElmeletiKesesPerc, "K", "-", "F" }); feldolgozandokHeaderDtCreatorArray.Add(new[] { "4", Resources.ExcelNyomtatvanyResource.FeldolgozatlanGyakorlatiKesesPerc, "K", "-", "T" }); } adatMezo = new[] { "MULASZTASOK_SZAMA" }; int[] retDimHianyzas = AddDataTablePivotTable(worksheet, 1, colOffset, CreateDataTable(hianyzasHeaderDtCreatorArray), hianyzaskesespercFilter.ToArray(), "mulasztas_name", tanuloDt, new[] { "TANULOID" }, null, mulasztasDt, IntegerStyleBottomBordered, HeaderStyle90BottomBordered, HeaderStyleBottomBordered, adatMezo, null, null, null, null, new[] { "SUM" }, null, new[] { IntegerBoldStyleBottomBordered }); colOffset += retDimHianyzas[1]; adatMezo = new[] { "KESESPERC" }; int[] retDimKesesperc = AddDataTablePivotTable(worksheet, 1, colOffset, CreateDataTable(kesespercHeaderDtCreatorArray), hianyzaskesespercFilter.ToArray(), "mulasztas_name", tanuloDt, new[] { "TANULOID" }, null, mulasztasDt, IntegerStyleBottomBordered, HeaderStyle90BottomBordered, HeaderStyleBottomBordered, adatMezo, null, null, null, null, new[] { "SUM" }, null, new[] { IntegerBoldStyleBottomBordered }); colOffset += retDimKesesperc[1]; adatMezo = new[] { "MULASZTASOK_SZAMA" }; int[] retDimMulasztas = AddDataTablePivotTable(worksheet, 1, colOffset, CreateDataTable(keseshianyzasHeaderDtCreatorArray), keseshianyzasFilter.ToArray(), "mulasztas_name", tanuloDt, new[] { "TANULOID" }, null, mulasztasSumDt, IntegerStyleBottomBordered, HeaderStyle90BottomBordered, HeaderStyleBottomBordered, adatMezo, null, null, null, null, new[] { "SUM" }, null, new[] { IntegerBoldStyleBottomBordered }); colOffset += retDimMulasztas[1]; adatMezo = new[] { "FELDOLGOZATLANOK_SZAMA" }; AddDataTablePivotTable(worksheet, 1, colOffset, CreateDataTable(feldolgozandokHeaderDtCreatorArray), hianyzaskesespercFilter.ToArray(), "mulasztas_name", tanuloDt, new[] { "TANULOID" }, null, mulasztasDt, IntegerStyleBottomBordered, HeaderStyle90BottomBordered, HeaderStyleBottomBordered, adatMezo, null, null, null, null, new[] { "SUM" }, null, new[] { IntegerBoldStyleBottomBordered }); } } }