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

263 lines
11 KiB
C#

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<bool>(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<bool>(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<string, object>();
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<string, object> 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<string, object> 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;
}
}
}