using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Web.Http; using System.Web.Mvc; using FastReport; using FastReport.Export.Pdf; using FastReport.Export.RichText; using FastReport.Utils; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.Helpers; using Kreta.BusinessLogic.Helpers.SystemSettings; using Kreta.BusinessLogic.Security; using Kreta.Core; using Kreta.Enums; using Kreta.Enums.ManualEnums; using Kreta.Resources; using Kreta.Web.Areas.Nyomtatvanyok.Logic; using Kreta.Web.Areas.Tanar.Models; using Kreta.Web.Helpers; using Kreta.Web.Models.EditorTemplates; using Kreta.Web.Security; namespace Kreta.Web.Areas.Tanar.Controllers { [MvcRoleClaimsAuthorize(true)] [MvcRolePackageDenyAuthorize(KretaClaimPackages.IsOnlyAlkalmozott.ClaimValue, KretaClaimPackages.IsSzirIntezmeny.ClaimValue, KretaClaimPackages.IsDualisKepzohelyiOktato.ClaimValue)] public class FogadooraController : Controller { public object Datetime { get; private set; } [MvcRolePackageAuthorize(KretaClaimPackages.Tanar.ClaimValue)] public ActionResult Index() { if (!new SystemSettingsHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetSystemSettingValue(RendszerBeallitasTipusEnum.Fogadoorak_megjelenitese)) { return Redirect(Url.Content(CommonExtensions.GetDefaultPage())); } var model = new FogadooraSearchModel(); return View("Index", model); } [MvcRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)] public ActionResult FogadooraKereso() { if (!new SystemSettingsHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetSystemSettingValue(RendszerBeallitasTipusEnum.Fogadoorak_megjelenitese)) { return Redirect(Url.Content(CommonExtensions.GetDefaultPage())); } var model = new FogadooraSearchModel() { FeladatEllatasiHelyId = ClaimData.FelhelySzuro }; return View("FogadooraKereso", model); } public ActionResult OpenFogadooraJelentkezettGondviselokPopupp(int fogadooraId, string handler = "FogadooraGridHelper") { var helper = new FogadooraHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); var fogadooraCo = helper.GetFogadooraById(fogadooraId); var popUpModel = new PopUpModel(new FogadooraJelentkezesInfoModel { Id = fogadooraCo.Id, TeremNev = fogadooraCo.TeremNev, IsNemKotottMunkaido = fogadooraCo.IsNemKotottMunkaido, FogadoOraKezdete = fogadooraCo.FogadoOraKezdete.ToShortTimeString(), FogadoOraVege = fogadooraCo.FogadoOraVege.ToShortTimeString(), JelentkezesekKezelese = fogadooraCo.JelentkezesekKezelese, FogadoOraDatuma = fogadooraCo.FogadoOraDatuma.ToShortDateString() }, "Fogadoora_Info"); popUpModel = popUpModel.AddCancelBtn(popUpModel, handler + ".detailJelentkezettGondviselokCancel"); return PartialView(Constants.General.PopupView, popUpModel); } public ActionResult FogadooraLetoltesPdf([FromBody] int fogadooraId) => FogadooraLetoltes(fogadooraId, NyomtatvanyFormatumEnum.PDF); public ActionResult FogadooraLetoltesWord([FromBody] int fogadooraId) => FogadooraLetoltes(fogadooraId, NyomtatvanyFormatumEnum.Word); private ActionResult FogadooraLetoltes(int fogadooraId, NyomtatvanyFormatumEnum fileTipus) { try { var outPut = new MemoryStream(); ActionResult fogadooraDokumentum = new FileStreamResult(outPut, "application/octet-stream"); var fogadooraHelper = new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var ds = fogadooraHelper.GetFogadooraDokumentumAdatok(fogadooraId); var parameters = new Dictionary(); var frxNev = NyomtatvanyEnum.FogadooraDokumentum.ToString(); var row = ds.Tables[0].Rows[0]; parameters.Add("FogadooraDatuma", SDAConvert.ToDateTime(row["FogadooraDatuma"])?.ToString("yyyy.MM.dd.")); parameters.Add("TeremNev", SDAConvert.ToString(row["TeremNev"]).ReplaceMultipleSpacesAndTrim()); parameters.Add("FogadooraKezdete", SDAConvert.ToDateTime(row["FogadooraKezdete"])?.ToString("HH:mm")); parameters.Add("FogadooraVege", SDAConvert.ToDateTime(row["FogadooraVege"])?.ToString("HH:mm")); parameters.Add("IdosavokMerteke", SDAConvert.ToString(row["IdosavokMerteke"]).ReplaceMultipleSpacesAndTrim()); parameters.Add("FogadooratKiiro", SDAConvert.ToString(row["FogadooratKiiro"]).ReplaceMultipleSpacesAndTrim()); var jelentkezesHatarido = GetJelentkezesHatarido(row); parameters.Add("Hatarido", jelentkezesHatarido); var fogadooraCo = fogadooraHelper.GetFogadooraById(fogadooraId); var osztalyHelper = new OsztalyCsoportHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var osztalyokNeveiList = fogadooraCo.SelectedOsztalyCsoportIdList.Select(x => osztalyHelper.GetOsztalyCsoportNevById(x)).ToList(); parameters.Add("FogadooOsztalyaiCsoportjai", string.Join(",", osztalyokNeveiList)); parameters.Add("KellSorokKiegeszitese", fogadooraCo.FogadooraTipusEnumId != (int)FogadooraTipusEnum.JelentkezhetoDarabolt); switch (fileTipus) { case NyomtatvanyFormatumEnum.PDF: fogadooraDokumentum = PDFGeneralas(ds, frxNev, FogadooraResource.FogadooraDokumentumNev, parameters); break; case NyomtatvanyFormatumEnum.Word: fogadooraDokumentum = WordGeneralas(ds, frxNev, FogadooraResource.FogadooraDokumentumNev, parameters); break; default: break; } outPut.Position = 0; return fogadooraDokumentum; } catch (Exception ex) { throw NyomtatvanyokLogic.NyomtatvanyError(ex); } } private string GetJelentkezesHatarido(DataRow row) { var fogadooraKezdete = SDAConvert.ToDateTime(row["FogadooraKezdeteTeljes"]); var jelentkezesHatarido = SDAConvert.ToDateTime(row["JelentkezesHatarido"]); var hatarido = jelentkezesHatarido.HasValue ? (int?)(fogadooraKezdete.Value - jelentkezesHatarido.Value).TotalHours : null; if (hatarido == null || hatarido == 0) { return FogadooraResource.Nincs; } return string.Format(FogadooraResource.ora, hatarido.Value); } private ActionResult PDFGeneralas(DataSet ds, string frxNeve, string dokumentumNeve, Dictionary parameterek = null) { Config.WebMode = true; const string _fileTemplate = "{0}/{1}.frx"; var report = new Report(); var mapPath = string.Format(_fileTemplate, ApplicationData.NyomtatasiSablonokKonyvtar, frxNeve); report.Load(System.Web.Hosting.HostingEnvironment.MapPath(mapPath)); foreach (DataTable dt in ds.Tables) { report.RegisterData(dt, dt.TableName); } if (parameterek != null) { foreach (var parameter in parameterek) { report.SetParameterValue(parameter.Key, parameter.Value); } } string script = report.ReportResourceString; if (report.Report.Prepare()) { PDFExport pdfExport = new PDFExport { ShowProgress = false, Subject = "Subject", Title = dokumentumNeve, Compressed = true, AllowPrint = true, EmbeddingFonts = true, Creator = Constants.ImportExport.Creator }; var stream = new MemoryStream(); report.Report.Export(pdfExport, stream); report.Dispose(); pdfExport.Dispose(); stream.Position = 0; byte[] base64; using (CryptoStream cryptoStream = new CryptoStream(stream, new ToBase64Transform(), CryptoStreamMode.Write)) using (StreamWriter streamWriter = new StreamWriter(cryptoStream)) { streamWriter.Flush(); base64 = stream.ToArray(); } var fileContents = Convert.ToBase64String(base64); var dokumentumContent = new ContentResult() { Content = fileContents, ContentType = "application/pdf" }; return dokumentumContent; } return null; } private ActionResult WordGeneralas(DataSet ds, string frxNeve, string dokumentumNeve, Dictionary parameterek = null) { Config.WebMode = true; const string _fileTemplate = "{0}/{1}.frx"; var report = new Report(); var mapPath = string.Format(_fileTemplate, ApplicationData.NyomtatasiSablonokKonyvtar, frxNeve); report.Load(System.Web.Hosting.HostingEnvironment.MapPath(mapPath)); foreach (DataTable dt in ds.Tables) { report.RegisterData(dt, dt.TableName); } if (parameterek != null) { foreach (var parameter in parameterek) { report.SetParameterValue(parameter.Key, parameter.Value); } } string script = report.ReportResourceString; if (report.Report.Prepare()) { RTFExport textExport = new RTFExport { ShowProgress = false, Creator = Constants.ImportExport.Creator }; var stream = new MemoryStream(); report.Report.Export(textExport, stream); report.Dispose(); textExport.Dispose(); stream.Position = 0; byte[] base64; using (CryptoStream cryptoStream = new CryptoStream(stream, new ToBase64Transform(), CryptoStreamMode.Write)) using (StreamWriter streamWriter = new StreamWriter(cryptoStream)) { streamWriter.Flush(); base64 = stream.ToArray(); } var fileContents = Convert.ToBase64String(base64); var dokumentumContent = new ContentResult() { Content = fileContents, ContentType = "application/doc" }; return dokumentumContent; } return null; } } }