kreta/KretaWeb/Areas/Nyomtatvanyok/Controllers/NyomtatvanyokNaplokController.cs
2024-03-13 00:33:46 +01:00

371 lines
19 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Data;
using System.IO;
using System.Linq;
using System.Web.Mvc;
using ICSharpCode.SharpZipLib.Zip;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.BusinessLogic.Helpers;
using Kreta.Core;
using Kreta.Enums;
using Kreta.Enums.ManualEnums;
using Kreta.Framework;
using Kreta.Resources;
using Kreta.Web.Areas.Nyomtatvanyok.Logic;
using Kreta.Web.Helpers;
using Kreta.Web.Security;
namespace Kreta.Web.Areas.Nyomtatvanyok.Controllers
{
public partial class NyomtatvanyokController : BaseNyomtatvanyokController
{
private ActionResult Osztalynaplok([ModelBinder(typeof(NyomtatvanyModelBinderWithPoszeidonIktatasDefiniciok))]
NyomtatvanyModel model, NyomtatvanyEnum nyomtatvanyTipus = NyomtatvanyEnum.Naplo, Enums.DokumentumTipusEnum dokumentumTipus = Enums.DokumentumTipusEnum.Osztalynaplo)
{
var OutPut = new MemoryStream();
var ZipOutPut = new ZipOutputStream(OutPut);
try
{
var mentesNaplozarasba = nyomtatvanyTipus == NyomtatvanyEnum.Naplo;
var isIskolaerdekuSzamit = GetIsIskolaerdekuSzamit();
var minTanoraSzam = GetMinTanoraSzam();
var isSzovegesNaplo = model.HaladasiNaploFormatumId == 1 || nyomtatvanyTipus == NyomtatvanyEnum.OsztalyozoNaplo;
var isEllenorzo = nyomtatvanyTipus == NyomtatvanyEnum.Ellenorzo;
var buffer = new byte[Constants.General.BufferSize];
string nyomtatvanyNeve;
bool isHaladasiNaplo = false, isOsztalyozoNaplo = false;
if ((model.HaladasiNaploFormatumId == (int)HaladasiNaploFormatumEnum.A4) && (nyomtatvanyTipus != NyomtatvanyEnum.HaladasiNaplo))
{
nyomtatvanyTipus = NyomtatvanyEnum.Naplo_szoveges;
}
switch (nyomtatvanyTipus)
{
case NyomtatvanyEnum.Naplo_szoveges:
nyomtatvanyNeve = model.FuggolegesTantargyak ? NyomtatvanyEnum.Naplo_szoveges_fuggoleges.ToString() : NyomtatvanyEnum.Naplo_szoveges.ToString();
break;
case NyomtatvanyEnum.Naplo:
nyomtatvanyNeve = model.FuggolegesTantargyak ? NyomtatvanyEnum.Naplo_fuggoleges.ToString() : NyomtatvanyEnum.Naplo.ToString();
break;
case NyomtatvanyEnum.OsztalyozoNaplo:
nyomtatvanyNeve = model.FuggolegesTantargyak ? NyomtatvanyEnum.Naplo_fuggoleges.ToString() : NyomtatvanyEnum.Naplo.ToString();
isOsztalyozoNaplo = true;
break;
case NyomtatvanyEnum.HaladasiNaplo:
nyomtatvanyNeve = (model.HaladasiNaploFormatumId == (int)HaladasiNaploFormatumEnum.A4) ? NyomtatvanyEnum.Naplo_szoveges.ToString() : NyomtatvanyEnum.Naplo.ToString();
isHaladasiNaplo = true;
break;
case NyomtatvanyEnum.Ellenorzo:
nyomtatvanyNeve = NyomtatvanyEnum.Ellenorzo.ToString();
break;
default:
nyomtatvanyNeve = NyomtatvanyEnum.Naplo.ToString();
break;
}
var orarendErvenyessegiDatum = model.OrarendErvenyessegiDatum;
if (model.OrarendErvenyessegiDatum == DateTime.MinValue)
{
orarendErvenyessegiDatum = DateTime.Now;
}
OktNevelesiKategoriaEnum? oktNevKategoria = (model.OktNevelesiKategoriaId.IsEntityId()) ? (OktNevelesiKategoriaEnum?)model.OktNevelesiKategoriaId : null;
List<int> osztalyIdList = GetOsztalyIdList(model.OsztalyIdList, oktNevKategoria);
if (osztalyIdList.Count == 0)
{
throw new ApplicationException(NyomtatvanyokResource.UresDokumentum);
}
var nyomtatvanyokHelper = new NyomtatvanyokHelper(ConnectionTypeExtensions.GetSessionConnectionType());
foreach (var osztalyId in osztalyIdList)
{
var ds = nyomtatvanyokHelper.GetOsztalynaplo(osztalyId, ClaimData.AktivTanevID, isIskolaerdekuSzamit, model.FuggolegesTantargyak, model.ReszletesMulasztasok, model.EgyebFoglalkozasok, minTanoraSzam, orarendErvenyessegiDatum, isEllenorzo, isSzovegesNaplo, model.NaploZaras, osztalyTanuloOrarendbenNemLatszik: true, isMagatartasSzorgalomNemLatszik: !model.MagatartasSzorgalomMegjelenitese);
int orarendUtolsoNapja = nyomtatvanyokHelper.GetOrarendUtolsoNapja(ds.Tables["Orarend"]);
var parameters = new Dictionary<string, object>
{
{"pTargy", StringResourcesUtil.GetString(252)},
{"pJan", StringResourcesUtil.GetString(198)},
{"pFeb", StringResourcesUtil.GetString(199)},
{nameof(orarendUtolsoNapja), orarendUtolsoNapja}
};
string osztalyNev;
if (ds.Tables.Count > 0 && ds.Tables["Fejlec"] != null && ds.Tables["Fejlec"].Rows.Count > 0 && ds.Tables["Fejlec"].Columns.Contains("OsztalyNev"))
{
osztalyNev = ds.Tables["Fejlec"].Rows[0]["OsztalyNev"].ToString();
}
else
{
osztalyNev = StringResourcesUtil.GetString(435); /*Osztály név megadása kötelező!*/
}
parameters.Add("OsztalyNev", osztalyNev);
if (ds.Tables.Count > 0 && ds.Tables["Fejlec"] != null && ds.Tables["Fejlec"].Rows.Count > 0)
{
parameters.Add("MaxOraszam", ds.Tables["Fejlec"].Rows[0]["MaxOraszam"].ToString());
parameters.Add("MinOraszam", ds.Tables["Fejlec"].Rows[0]["MinOraszam"].ToString());
}
var oszlopok = new List<string>();
for (var i = 11; i < ds.Tables["NaploAdatok"].Columns.Count; i++)
{
oszlopok.Add(ds.Tables["NaploAdatok"].Columns[i].ColumnName);
}
parameters.Add("Oszlopok", oszlopok.ToArray());
var ertoszlopok = new List<string>();
for (var i = 0; i < ds.Tables["TanuloTantargyiErtekelesei"].Columns.Count; i++)
{
ertoszlopok.Add(ds.Tables["TanuloTantargyiErtekelesei"].Columns[i].ColumnName);
}
ertoszlopok.Remove("periodusId");
ertoszlopok.Remove("tanuloID");
ertoszlopok.Remove("TanuloCsoportId");
parameters.Add("ErtekelesOszlopok", ertoszlopok.ToArray());
parameters.Add("isLezartNaplo", model.NaploZaras);
parameters.Add("ElmeletGyakorlat", model.ElmeletGyakorlatKulon.ToString());
parameters.Add("FeljegyzesHaviBontas", model.FeljegyzesHaviBontas.ToString());
parameters.Add("FontSizeDifference", model.BetuMeret.AsInt());
var nevmodel = new NyomtatvanyNevGeneralasModel() { OsztalyCsoportId = osztalyId, TanevID = ClaimData.SelectedTanevID.Value };
parameters.Add(nameof(isOsztalyozoNaplo), isOsztalyozoNaplo);
parameters.Add(nameof(isHaladasiNaplo), isHaladasiNaplo);
parameters.Add("AlulirottMegnevezese", new AlkalmazottMunkaugyiAdatokHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetAlkalmazottByVezetoiOraszamOk(true).Where(x => x.Value == model.AlulirottMegnevezesId.ToString()).FirstOrDefault()?.Text);
parameters.Add(nameof(model.EvfolyamSzerepelteteseTanuloiAdatokKozott), model.EvfolyamSzerepelteteseTanuloiAdatokKozott);
parameters.Add(nameof(ClaimData.IsSelectedTanev20_21OrLater), ClaimData.IsSelectedTanev20_21OrLater);
parameters.Add(nameof(ClaimData.IsSelectedTanev21_22OrLater), ClaimData.IsSelectedTanev21_22OrLater);
parameters.Add("IsZaradekDatumVisible", model.ZaradekKeltMegjelenites);
var foszamKulcsSzavak = (kulcsSzavak: (NameValueCollection)null, foszamDefinicio: (BusinessLogic.Helpers.Nyomtatvanyok.Iktatas.FoszamDefinicioValueModel)null);
if (model.Iktatas)
{
foszamKulcsSzavak = KulcsszavakEsFoszamGeneralas(model, dokumentumTipus, ds, Enums.DokumentumElemiSzintEnum.Osztaly);
}
if ((osztalyIdList.Count > 1) && !model.Iktatas)
{
AddNyomtatvanyMintZipEntry(ZipOutPut, ds, nyomtatvanyNeve, parameters, CommonExtensions.NevGeneralas(nyomtatvanyTipus.ToString(), nevmodel), dokumentumTipus: dokumentumTipus);
if (model.NaploZaras && mentesNaplozarasba)
{
nyomtatvanyokHelper.MentesNaplozarasParameterRendszerbeallitasba(osztalyId);
}
}
else
{
var ret = Nyomtatas(ds, nyomtatvanyNeve, parameters, CommonExtensions.NevGeneralas(nyomtatvanyTipus.ToString(), nevmodel), model.Iktatas, CommonExtensions.NevGeneralas(nyomtatvanyTipus.ToString(), nevmodel, true), osztalyId: osztalyId, kulcsSzavak: foszamKulcsSzavak.kulcsSzavak, dokumentumKategoria: DokumentumKategoriaEnum.Naplok, dokumentumTipus: dokumentumTipus, foszamDefinicio: foszamKulcsSzavak.foszamDefinicio);
if (model.NaploZaras && mentesNaplozarasba)
{
nyomtatvanyokHelper.MentesNaplozarasParameterRendszerbeallitasba(osztalyId);
}
if (osztalyIdList.Count == 1)
{
return ret;
}
}
}
ZipOutPut.Finish();
OutPut.Position = 0;
if (!model.Iktatas)
{
var zipnevmodel = new NyomtatvanyNevGeneralasModel() { TanevID = ClaimData.SelectedTanevID.Value };
return new FileStreamResult(OutPut, Constants.ImportExport.ContentType)
{
FileDownloadName = $"{CommonExtensions.NevGeneralas(nyomtatvanyNeve, zipnevmodel)}.{Constants.ImportExport.FileFormatZip}"
};
}
else
{
return RedirectToAction("Index", Constants.Controllers.IktatottDokumentumok, new { area = Constants.Areas.Nyomtatvanyok });
}
}
catch (Exception ex)
{
throw NyomtatvanyokLogic.NyomtatvanyError(ex);
}
}
private ActionResult Csoportnaplok(NyomtatvanyModel model, NyomtatvanyEnum nye, Enums.DokumentumTipusEnum dokumentumTipus)
{
var OutPut = new MemoryStream();
var ZipOutPut = new ZipOutputStream(OutPut);
try
{
var isIskolaerdekuSzamit = GetIsIskolaerdekuSzamit();
var buffer = new byte[Constants.General.BufferSize];
OktNevelesiKategoriaEnum? oktNevKategoria = (model.OktNevelesiKategoriaId.IsEntityId()) ? (OktNevelesiKategoriaEnum?)model.OktNevelesiKategoriaId : (OktNevelesiKategoriaEnum?)null;
List<int> csoportIdList = GetCsoportIdList(model.CsoportIdList, oktNevKategoria);
if (csoportIdList.Count == 0)
{
throw new ApplicationException(NyomtatvanyokResource.UresDokumentum);
}
foreach (var csoportId in csoportIdList)
{
DataSet ds;
var helper = new NyomtatvanyokHelper(ConnectionTypeExtensions.GetSessionConnectionType());
switch (nye)
{
case NyomtatvanyEnum.CsoportNaplo:
(int, int)? jelenletAdatok = null;
if (model.JelenletAdatokMegjelenitese)
{
jelenletAdatok = ((int)model.JelenletAdatokOsszesitese, (int)model.JelenletTablazatElrendezese);
}
ds = helper.GetCsoportNaplo(csoportId, model.GyakorlatiOrakMegjelenites, model.ElmeletiOrakMegjelenites, isIskolaerdekuSzamit, model.CsoportnaploTanulokSorrendje, jelenletAdatok, isMagatartasSzorgalomNemLatszik: !model.MagatartasSzorgalomMegjelenitese);
break;
case NyomtatvanyEnum.NapkozisNaplo:
ds = helper.GetNapkozisNaplo(csoportId, isIskolaerdekuSzamit, model.CsoportnaploTanulokSorrendje);
break;
case NyomtatvanyEnum.SzakmaiGyNaplo:
ds = helper.GetSzakmaiGyNaplo(csoportId, isIskolaerdekuSzamit, model.CsoportnaploTanulokSorrendje);
break;
case NyomtatvanyEnum.EgyebFoglalkozasiNaplo:
ds = helper.GetEgyebFoglalkozasiNaplo(csoportId, isIskolaerdekuSzamit, model.CsoportnaploTanulokSorrendje);
break;
default:
ds = helper.GetCsoportNaplo(csoportId, model.GyakorlatiOrakMegjelenites, model.ElmeletiOrakMegjelenites, isIskolaerdekuSzamit, model.CsoportnaploTanulokSorrendje);
break;
}
var parameters = new Dictionary<string, object>
{
{"isLezartNaplo", model.NaploZaras},
{"AlulirottMegnevezese", new AlkalmazottMunkaugyiAdatokHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetAlkalmazottByVezetoiOraszamOk(true).Where(x => x.Value == model.AlulirottMegnevezesId.ToString()).FirstOrDefault()?.Text},
{"JelenletAdatokOsszesitese", (int)model.JelenletAdatokOsszesitese },
{"JelenletTablazatElrendezese", (int)model.JelenletTablazatElrendezese },
{ "FelevHetsorszam", ds.Tables["JelenletFelevEvvegeHetsorszam"] != null ? ds.Tables["JelenletFelevEvvegeHetsorszam"].Rows[0]["FelevHetsorszam"] : -1 },
{ "UtolsoTanitasiNapHetsorszam", ds.Tables["JelenletFelevEvvegeHetsorszam"] != null ? ds.Tables["JelenletFelevEvvegeHetsorszam"].Rows[0]["UtolsoTanitasiNapHetsorszam"] : -1 },
{ "isJelenletAdatokTablakkal", model.JelenletAdatokMegjelenitese },
{ "IsZaradekDatumVisible", model.ZaradekKeltMegjelenites }
};
var nevmodel = new NyomtatvanyNevGeneralasModel() { TanevID = ClaimData.SelectedTanevID.Value, OsztalyCsoportId = csoportId };
var foszamKulcsSzavak = (kulcsSzavak: (NameValueCollection)null, foszamDefinicio: (BusinessLogic.Helpers.Nyomtatvanyok.Iktatas.FoszamDefinicioValueModel)null);
if (model.Iktatas)
{
foszamKulcsSzavak = KulcsszavakEsFoszamGeneralas(model, dokumentumTipus, ds, Enums.DokumentumElemiSzintEnum.Csoport);
}
if ((csoportIdList.Count > 1) && !model.Iktatas)
{
AddNyomtatvanyMintZipEntry(ZipOutPut, ds, nye.ToString(), parameters, CommonExtensions.NevGeneralas(nye.ToString(), nevmodel), dokumentumTipus: dokumentumTipus);
}
else
{
var ret = Nyomtatas(ds, nye.ToString(), parameters, CommonExtensions.NevGeneralas(nye.ToString(), nevmodel), model.Iktatas, CommonExtensions.NevGeneralas(nye.ToString(), nevmodel, true), osztalyId: csoportId, kulcsSzavak: foszamKulcsSzavak.kulcsSzavak, dokumentumKategoria: DokumentumKategoriaEnum.Naplok, dokumentumTipus: dokumentumTipus, foszamDefinicio: foszamKulcsSzavak.foszamDefinicio);
if (csoportIdList.Count == 1)
{
return ret;
}
}
}
ZipOutPut.Finish();
OutPut.Position = 0;
if (!model.Iktatas)
{
var zipnevmodel = new NyomtatvanyNevGeneralasModel() { TanevID = ClaimData.SelectedTanevID.Value };
return new FileStreamResult(OutPut, Constants.ImportExport.ContentType)
{
FileDownloadName = $"{CommonExtensions.NevGeneralas(nye.ToString(), zipnevmodel)}.{Constants.ImportExport.FileFormatZip}"
};
}
else
{
return RedirectToAction("Index", Constants.Controllers.IktatottDokumentumok, new { area = Constants.Areas.Nyomtatvanyok });
}
}
catch (Exception ex)
{
throw NyomtatvanyokLogic.NyomtatvanyError(ex);
}
}
#region Osztály naplók
public ActionResult OsztalyNaplo([ModelBinder(typeof(NyomtatvanyModelBinderWithPoszeidonIktatasDefiniciok))]
NyomtatvanyModel model)
{
return Osztalynaplok(model, NyomtatvanyEnum.Naplo, Enums.DokumentumTipusEnum.Osztalynaplo);
}
public ActionResult HaladasiNaplo([ModelBinder(typeof(NyomtatvanyModelBinderWithPoszeidonIktatasDefiniciok))]
NyomtatvanyModel model)
{
return Osztalynaplok(model, NyomtatvanyEnum.HaladasiNaplo, Enums.DokumentumTipusEnum.HaladasiNaplo);
}
public ActionResult OsztalyozoNaplo([ModelBinder(typeof(NyomtatvanyModelBinderWithPoszeidonIktatasDefiniciok))]
NyomtatvanyModel model)
{
return Osztalynaplok(model, NyomtatvanyEnum.OsztalyozoNaplo, Enums.DokumentumTipusEnum.OsztalyozoNaplo);
}
#endregion
#region Csoport naplók
public ActionResult CsoportNaplo([ModelBinder(typeof(NyomtatvanyModelBinderWithPoszeidonIktatasDefiniciok))]
NyomtatvanyModel model)
{
return Csoportnaplok(model, NyomtatvanyEnum.CsoportNaplo, Enums.DokumentumTipusEnum.CsoportNaplo);
}
public ActionResult NapkozisNaplo([ModelBinder(typeof(NyomtatvanyModelBinderWithPoszeidonIktatasDefiniciok))]
NyomtatvanyModel model)
{
return Csoportnaplok(model, NyomtatvanyEnum.NapkozisNaplo, Enums.DokumentumTipusEnum.NapkozisCsoportNaploja);
}
public ActionResult SzakmaiGyNaplo([ModelBinder(typeof(NyomtatvanyModelBinderWithPoszeidonIktatasDefiniciok))]
NyomtatvanyModel model)
{
return Csoportnaplok(model, NyomtatvanyEnum.SzakmaiGyNaplo, Enums.DokumentumTipusEnum.GyakorlatiFoglalkozasrolVezetettNaplo);
}
public ActionResult EgyebFoglalkozasiNaplo([ModelBinder(typeof(NyomtatvanyModelBinderWithPoszeidonIktatasDefiniciok))]
NyomtatvanyModel model)
{
return Csoportnaplok(model, NyomtatvanyEnum.EgyebFoglalkozasiNaplo, Enums.DokumentumTipusEnum.EgyebFoglalkozasiNaplo);
}
#endregion
}
}