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

229 lines
11 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.HelperClasses;
using Kreta.BusinessLogic.Helpers;
using Kreta.Core;
using Kreta.Enums;
using Kreta.Enums.ManualEnums;
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
{
public ActionResult TermekOrarendje([ModelBinder(typeof(Helpers.NyomtatvanyModelBinderWithPoszeidonIktatasDefiniciok))]
NyomtatvanyModel model)
{
return Orarendek(model, NyomtatvanyEnum.TeremOrarend, Enums.DokumentumTipusEnum.TermekOrarendje);
}
public ActionResult OsztalyokOrarendje([ModelBinder(typeof(Helpers.NyomtatvanyModelBinderWithPoszeidonIktatasDefiniciok))]
NyomtatvanyModel model)
{
return Orarendek(model, NyomtatvanyEnum.OsztalyOrarendOsszes, Enums.DokumentumTipusEnum.OsztalyokOrarendje);
}
public ActionResult PedagogusokOrarendje([ModelBinder(typeof(Helpers.NyomtatvanyModelBinderWithPoszeidonIktatasDefiniciok))]
NyomtatvanyModel model)
{
return Orarendek(model, NyomtatvanyEnum.PedagogusOrarendOsszes, Enums.DokumentumTipusEnum.PedagogusOrarendje);
}
private ActionResult Orarendek(NyomtatvanyModel model, NyomtatvanyEnum orarendTipus, Enums.DokumentumTipusEnum dokumentumTipus)
{
try
{
var OutPut = new MemoryStream();
var ZipOutPut = new ZipOutputStream(OutPut);
DataSet mergedDs = new DataSet();
var needMergedData = false;
var atLeastOneData = false;
var foszamKulcsSzavak = (kulcsSzavak: (NameValueCollection)null, foszamDefinicio: (BusinessLogic.Helpers.Nyomtatvanyok.Iktatas.FoszamDefinicioValueModel)null);
DokumentumElemiSzintEnum? elemiSzint;
var parameters = new Dictionary<string, object>
{
{"Kelt", DateTime.Now.ToString(Core.Constants.ToStringPattern.HungarianDateWithSuffix)}
};
string nyomtatvanyNeve = "OrarendOsszes";
var nevmodel = new NyomtatvanyNevGeneralasModel() { TanevID = ClaimData.SelectedTanevID.Value };
DataSet hetSorszamaDs;
var naptariHetHelper = new NaptariHetHelper(ConnectionTypeExtensions.GetSessionConnectionType());
hetSorszamaDs = naptariHetHelper.GetNaptariHetList();
var het = hetSorszamaDs.Tables[0].AsEnumerable().Where(x => x.Field<int>("HetSorszama") == model.HetSorszama).Select(dataRow => new
{
Kezdete = Convert.ToDateTime(dataRow.Field<DateTime>("HetKezdoNapja")),
Vege = Convert.ToDateTime(dataRow.Field<DateTime>("HetUtolsoNapja"))
}).FirstOrDefault();
DateTime hetKezdete = het.Kezdete;
DateTime hetVege = het.Vege;
List<int> idList;
bool teremId = false;
bool osztalyId = false;
bool pedagogusId = false;
OktNevelesiKategoriaEnum? oktNevKategoria = (model.OktNevelesiKategoriaId.IsEntityId()) ? (OktNevelesiKategoriaEnum?)model.OktNevelesiKategoriaId : null;
switch (orarendTipus)
{
case NyomtatvanyEnum.OsztalyOrarendOsszes:
idList = GetOsztalyIdList(model.OsztalyIdList, oktNevKategoria, forOrarend: true);
osztalyId = true;
elemiSzint = DokumentumElemiSzintEnum.Osztaly;
break;
case NyomtatvanyEnum.PedagogusOrarendOsszes:
idList = GetPedagogusIdList(model.PedagogusIdList);
pedagogusId = true;
elemiSzint = DokumentumElemiSzintEnum.Tanulo;
break;
case NyomtatvanyEnum.TeremOrarend:
idList = GetTeremIdList(model.TeremIdList);
teremId = true;
elemiSzint = DokumentumElemiSzintEnum.Terem;
break;
default:
idList = GetOsztalyIdList(model.OsztalyIdList, oktNevKategoria, forOrarend: true);
osztalyId = true;
elemiSzint = DokumentumElemiSzintEnum.Osztaly;
break;
}
if (idList.Count == 0)
{
throw new ApplicationException(NyomtatvanyokResource.UresDokumentum);
}
foreach (var id in idList)
{
if (osztalyId)
{
nevmodel.OsztalyID = id;
}
if (teremId)
{
nevmodel.TeremID = id;
}
if (pedagogusId)
{
nevmodel.TanarID = id;
}
var helper = new NyomtatvanyokHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var ds = helper.GetOrarendOsszes((pedagogusId) ? id : (int?)null, (teremId) ? id : (int?)null, (osztalyId) ? id : (int?)null, model.OrarendTipusaId, hetKezdete, hetVege, model.KapcsolodoCsoportokMegjelenitese, model.OsztalyBontasokMegjelenitese, oktNevKategoria);
if (ds.Tables[0].Rows.Count == 0)
{
if (idList.Count > 1)
{
continue;
}
else
{
throw new ApplicationException(NyomtatvanyokResource.UresDokumentum);
}
}
var orarendUtolsoNapja = helper.GetOrarendUtolsoNapja(ds.Tables["Orarend"], true);
parameters.Add(nameof(orarendUtolsoNapja) + "_" + id, orarendUtolsoNapja);
if (idList.Count > 1)
{
if (!model.AlapszintuNyomtatvanyokKulonDokumentumba)
{
TobbNyomtatvanyEgyDataSetbe(ref mergedDs, ds);
needMergedData = true;
}
else
{
if (!model.Iktatas)
{
AddNyomtatvanyMintZipEntry(ZipOutPut, ds, nyomtatvanyNeve, parameters, CommonExtensions.NevGeneralas(orarendTipus.ToString(), nevmodel), formatumId: model.FormatumId, dokumentumTipus: dokumentumTipus);
}
else
{
foszamKulcsSzavak = KulcsszavakEsFoszamGeneralas(model, dokumentumTipus, ds, elemiSzint.Value);
Nyomtatas(ds, nyomtatvanyNeve, parameters, CommonExtensions.NevGeneralas(orarendTipus.ToString(), nevmodel), model.Iktatas, CommonExtensions.NevGeneralas(orarendTipus.ToString(), nevmodel, true), formatumId: model.FormatumId, osztalyId: (osztalyId) ? id : 0, dokumentumKategoria: DokumentumKategoriaEnum.Orarendek, dokumentumTipus: dokumentumTipus, kulcsSzavak: foszamKulcsSzavak.kulcsSzavak, foszamDefinicio: foszamKulcsSzavak.foszamDefinicio);
}
atLeastOneData = true;
}
}
else
{
if (model.Iktatas)
{
foszamKulcsSzavak = KulcsszavakEsFoszamGeneralas(model, dokumentumTipus, ds, elemiSzint.Value);
}
var customMessage = hetKezdete.Date.ToShortDateString() + "-" + hetVege.Date.ToShortDateString();
var notAppendDateTimeNow = true;
return Nyomtatas(ds, nyomtatvanyNeve, parameters, CommonExtensions.NevGeneralas(orarendTipus.ToString(), nevmodel, notAppendDateTimeNow: notAppendDateTimeNow, customMessage: customMessage), model.Iktatas, CommonExtensions.NevGeneralas(orarendTipus.ToString(), nevmodel, true, notAppendDateTimeNow: notAppendDateTimeNow, customMessage: customMessage), formatumId: model.FormatumId, osztalyId: (osztalyId) ? id : 0, dokumentumKategoria: DokumentumKategoriaEnum.Orarendek, dokumentumTipus: dokumentumTipus, kulcsSzavak: foszamKulcsSzavak.kulcsSzavak, foszamDefinicio: foszamKulcsSzavak.foszamDefinicio);
}
}
if (!model.AlapszintuNyomtatvanyokKulonDokumentumba)
{
if (!needMergedData)
{
throw new ApplicationException(NyomtatvanyokResource.UresDokumentum);
}
if (model.Iktatas)
{
foszamKulcsSzavak = KulcsszavakEsFoszamGeneralas(model, dokumentumTipus, mergedDs, DokumentumElemiSzintEnum.Intezmeny);
}
nevmodel.OsztalyID = null;
nevmodel.TeremID = null;
nevmodel.TanarID = null;
return Nyomtatas(mergedDs, nyomtatvanyNeve, parameters, CommonExtensions.NevGeneralas("Tobb" + orarendTipus.ToString(), nevmodel), model.Iktatas, CommonExtensions.NevGeneralas("Tobb" + orarendTipus.ToString(), nevmodel, true), formatumId: model.FormatumId, osztalyId: 0, dokumentumKategoria: DokumentumKategoriaEnum.Orarendek, dokumentumTipus: dokumentumTipus, kulcsSzavak: foszamKulcsSzavak.kulcsSzavak, foszamDefinicio: foszamKulcsSzavak.foszamDefinicio);
}
else
{
if (!atLeastOneData)
{
throw new ApplicationException(NyomtatvanyokResource.UresDokumentum);
}
if (!model.Iktatas)
{
ZipOutPut.Finish();
OutPut.Position = 0;
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);
}
}
}
}