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 { {"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("HetSorszama") == model.HetSorszama).Select(dataRow => new { Kezdete = Convert.ToDateTime(dataRow.Field("HetKezdoNapja")), Vege = Convert.ToDateTime(dataRow.Field("HetUtolsoNapja")) }).FirstOrDefault(); DateTime hetKezdete = het.Kezdete; DateTime hetVege = het.Vege; List 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); } } } }