init
This commit is contained in:
@@ -0,0 +1,843 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Mime;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
using Aspose.Cells;
|
||||
using FastReport;
|
||||
using FastReport.Utils;
|
||||
using Kreta.BusinessLogic.Classes;
|
||||
using Kreta.BusinessLogic.Classes.AsposeHelpers;
|
||||
using Kreta.BusinessLogic.HelperClasses;
|
||||
using Kreta.BusinessLogic.Helpers;
|
||||
using Kreta.BusinessLogic.Helpers.Nyomtatvanyok.Iktatas;
|
||||
using Kreta.BusinessLogic.Logic;
|
||||
using Kreta.Core;
|
||||
using Kreta.Enums;
|
||||
using Kreta.Enums.ManualEnums;
|
||||
using Kreta.Resources;
|
||||
using Kreta.Web.Areas.Nyomtatvanyok.Logic;
|
||||
using Kreta.Web.Classes;
|
||||
using Kreta.Web.Helpers;
|
||||
using Kreta.Web.Helpers.Error;
|
||||
using Kreta.Web.Security;
|
||||
|
||||
namespace Kreta.Web.Areas.Nyomtatvanyok.Controllers
|
||||
{
|
||||
public partial class NyomtatvanyokController : BaseNyomtatvanyokController
|
||||
{
|
||||
protected ActionResult StaticDocumentNyomtatas(string documentName, string nyomtatvanyNeve = "Alap", NyomtatvanyFormatumEnum formatum = NyomtatvanyFormatumEnum.PDF)
|
||||
{
|
||||
var h = new AsposeHelper();
|
||||
MemoryStream ms;
|
||||
if (!string.IsNullOrWhiteSpace(documentName))
|
||||
{
|
||||
var sablonPath = Url.Content("~/Resources/AsposeSablonok/" + documentName);
|
||||
sablonPath = System.Web.Hosting.HostingEnvironment.MapPath(sablonPath);
|
||||
using (var stream = System.IO.File.OpenRead(sablonPath))
|
||||
{
|
||||
ms = (MemoryStream)h.GetStaticDocument(stream, (int)formatum);
|
||||
}
|
||||
string extension;
|
||||
switch (formatum)
|
||||
{
|
||||
case NyomtatvanyFormatumEnum.Word:
|
||||
extension = Constants.ImportExport.FileFormatDocx;
|
||||
break;
|
||||
default:
|
||||
extension = Constants.ImportExport.FileFormatPdf;
|
||||
break;
|
||||
}
|
||||
|
||||
return new FileContentResult(ms.ToArray(), MediaTypeNames.Application.Octet)
|
||||
{
|
||||
FileDownloadName = HttpUtility.UrlEncode($"{nyomtatvanyNeve}.{extension}", Encoding.UTF8),
|
||||
};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected ActionResult Nyomtatas(DataSet ds, string frxNeve, Dictionary<string, object> parameterek = null, string nyomtatvanyNeve = "Alap", bool iktatas = false, string iktatasAzonosito = "Iktatas", string headerImage = null, string footerImage = null, int formatumId = (int)NyomtatvanyFormatumEnum.PDF, int? osztalyId = null, DokumentumKategoriaEnum? dokumentumKategoria = null, Enums.DokumentumTipusEnum? dokumentumTipus = null, NameValueCollection kulcsSzavak = null, FoszamDefinicioValueModel foszamDefinicio = null, bool egyediLablecKellOldalszam = true, bool IsAspose = false, System.Reflection.MethodInfo asposeMetodus = null, AsposeHelperOptions asposeHelperOptions = null, Bitmap qrCode = null)
|
||||
{
|
||||
if (ds.IsEmpty())
|
||||
{
|
||||
throw new StatusError(
|
||||
HttpStatusCode.InternalServerError,
|
||||
CommonResource.Ures);
|
||||
}
|
||||
|
||||
if (!IsAspose)
|
||||
{
|
||||
return formatumId == (int)NyomtatvanyFormatumEnum.PDF ? PDFNyomtatas(ds, frxNeve, parameterek, nyomtatvanyNeve, iktatas, iktatasAzonosito, headerImage, footerImage, osztalyId, kulcsSzavak, dokumentumKategoria, dokumentumTipus, foszamDefinicio, egyediLablecKellOldalszam, qrCode) : WordNyomtatas(ds, frxNeve, parameterek, nyomtatvanyNeve, iktatas, iktatasAzonosito, osztalyId: osztalyId, dokumentumKategoria: dokumentumKategoria, dokumentumTipus: dokumentumTipus, kulcsSzavak: kulcsSzavak, foszamDefinicio: foszamDefinicio, egyediLablecKellOldalszam: egyediLablecKellOldalszam, qrCode);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (asposeMetodus == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(asposeMetodus));
|
||||
}
|
||||
if (asposeHelperOptions == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(asposeHelperOptions));
|
||||
}
|
||||
var h = new AsposeHelper(ds, asposeHelperOptions);
|
||||
|
||||
MemoryStream ms;
|
||||
if (!string.IsNullOrWhiteSpace(frxNeve))
|
||||
{
|
||||
var sablonPath = Url.Content("~/Resources/AsposeSablonok/" + frxNeve);
|
||||
sablonPath = System.Web.Hosting.HostingEnvironment.MapPath(sablonPath);
|
||||
using (var stream = System.IO.File.OpenRead(sablonPath))
|
||||
{
|
||||
ms = (MemoryStream)asposeMetodus.Invoke(h, new object[] { stream, formatumId });
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ms = (MemoryStream)asposeMetodus.Invoke(h, new object[] { null, formatumId });
|
||||
}
|
||||
|
||||
ms.Position = 0;
|
||||
string extension;
|
||||
switch (formatumId)
|
||||
{
|
||||
case (int)NyomtatvanyFormatumEnum.Word:
|
||||
extension = Constants.ImportExport.FileFormatDocx;
|
||||
break;
|
||||
default:
|
||||
extension = Constants.ImportExport.FileFormatPdf;
|
||||
break;
|
||||
}
|
||||
|
||||
return new FileContentResult(ms.ToArray(), MediaTypeNames.Application.Octet)
|
||||
{
|
||||
FileDownloadName = HttpUtility.UrlEncode($"{nyomtatvanyNeve}.{extension}", Encoding.UTF8),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
protected MemoryStream GetMemoryStreamByName(DataSet ds, string frxNeve, Dictionary<string, object> parameterek = null, string nyomtatvanyNeve = "Alap", string headerImage = null, string footerImage = null, int formatumId = (int)NyomtatvanyFormatumEnum.PDF, bool egyediLablecKellOldalszam = true, Enums.DokumentumTipusEnum? dokumentumTipus = null, bool IsAspose = false, System.Reflection.MethodInfo asposeMetodus = null, AsposeHelperOptions asposeHelperOptions = null)
|
||||
{
|
||||
if (!IsAspose)
|
||||
{
|
||||
const string fileTemplate = "{0}/{1}.frx";
|
||||
var filePath = Server.MapPath(string.Format(fileTemplate, ApplicationData.NyomtatasiSablonokKonyvtar, frxNeve));
|
||||
var result = formatumId == (int)NyomtatvanyFormatumEnum.PDF ? GetPdfMemoryStream(ds, parameterek, nyomtatvanyNeve, filePath, egyediLablecKellOldalszam, dokumentumTipus) : GetWordMemoryStream(ds, parameterek, nyomtatvanyNeve, filePath, egyediLablecKellOldalszam, dokumentumTipus);
|
||||
return result;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (asposeMetodus == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(asposeMetodus));
|
||||
}
|
||||
if (asposeHelperOptions == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(asposeHelperOptions));
|
||||
}
|
||||
var h = new AsposeHelper(ds, asposeHelperOptions);
|
||||
if (!string.IsNullOrWhiteSpace(frxNeve))
|
||||
{
|
||||
var sablonPath = Url.Content("~/Resources/AsposeSablonok/" + frxNeve);
|
||||
sablonPath = System.Web.Hosting.HostingEnvironment.MapPath(sablonPath);
|
||||
|
||||
return (MemoryStream)asposeMetodus.Invoke(h, new object[] { System.IO.File.OpenRead(sablonPath), formatumId });
|
||||
}
|
||||
else
|
||||
{
|
||||
return (MemoryStream)asposeMetodus.Invoke(h, new object[] { null, formatumId });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region PDF generálás
|
||||
protected ActionResult PDFNyomtatas(DataSet ds, string frxNeve, Dictionary<string, object> parameterek = null, string nyomtatvanyNeve = "Alap", bool iktatas = false, string iktatasAzonosito = "Iktatas", string headerImage = null, string footerImage = null, int? osztalyId = null, NameValueCollection kulcsSzavak = null, DokumentumKategoriaEnum? dokumentumKategoria = null, Enums.DokumentumTipusEnum? dokumentumTipus = null, FoszamDefinicioValueModel foszamDefinicio = null, bool egyediLablecKellOldalszam = true, Bitmap qrCode = 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));
|
||||
|
||||
var (IsDokumentumFejlecMegjelenit, IsDokumentumLablecMegjelenit) = new NyomtatvanyokHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetActualIntezmenyAdatok();
|
||||
|
||||
var helper = new IntezmenyHelper(ConnectionTypeExtensions.GetSessionConnectionType());
|
||||
|
||||
if (!iktatas && !NyomtatvanyokLogic.IsEgyediFejlecLablecTiltott(dokumentumTipus))
|
||||
{
|
||||
if (IsDokumentumFejlecMegjelenit && IsDokumentumLablecMegjelenit)
|
||||
{
|
||||
Image fejlecImage = helper.GetIntezmenyFejlecDokumentum();
|
||||
Image lablecImage = helper.GetIntezmenyLablecDokumentum();
|
||||
|
||||
NyomtatvanyokLogic.EgyediFejlecLablec(report, fejlecImage, lablecImage, egyediLablecKellOldalszam);
|
||||
}
|
||||
|
||||
if (IsDokumentumFejlecMegjelenit && !IsDokumentumLablecMegjelenit)
|
||||
{
|
||||
Image fejlecImage = helper.GetIntezmenyFejlecDokumentum();
|
||||
|
||||
NyomtatvanyokLogic.EgyediFejlec(report, fejlecImage);
|
||||
}
|
||||
|
||||
if (IsDokumentumLablecMegjelenit && !IsDokumentumFejlecMegjelenit)
|
||||
{
|
||||
Image lablecImage = helper.GetIntezmenyLablecDokumentum();
|
||||
|
||||
NyomtatvanyokLogic.EgyediLablec(report, lablecImage, egyediLablecKellOldalszam);
|
||||
}
|
||||
}
|
||||
|
||||
if (qrCode != null)
|
||||
{
|
||||
NyomtatvanyokLogic.AddQrCode(report, qrCode);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
if (report.Report.Prepare())
|
||||
{
|
||||
FastReport.Export.Pdf.PDFExport pdfExport = new FastReport.Export.Pdf.PDFExport
|
||||
{
|
||||
ShowProgress = false,
|
||||
Subject = "Subject",
|
||||
Title = nyomtatvanyNeve,
|
||||
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;
|
||||
|
||||
if (dokumentumTipus == Enums.DokumentumTipusEnum.MunkaidoElszamololapHonap)
|
||||
{
|
||||
stream = OldalszamHelyettesitesPdf(stream);
|
||||
}
|
||||
|
||||
var result = File(stream, "application/pdf", $"{nyomtatvanyNeve}.{Constants.ImportExport.FileFormatPdf}");
|
||||
|
||||
if (iktatas)
|
||||
{
|
||||
if (!dokumentumKategoria.HasValue || !dokumentumTipus.HasValue)
|
||||
{
|
||||
throw new ApplicationException(ErrorResource.DokumentumIktatasKategoriaTipusSzukseges);
|
||||
}
|
||||
|
||||
PoszeidonIktatas(result.FileStream, iktatasAzonosito, ClaimData.FelhasznaloId, dokumentumKategoria.Value, dokumentumTipus.Value, osztalyId, kulcsSzavak, foszamDefinicio);
|
||||
|
||||
return RedirectToAction("Index", Constants.Controllers.IktatottDokumentumok, new { area = Constants.Areas.Nyomtatvanyok });
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
protected MemoryStream GetPdfMemoryStreamByPath(DataSet ds, string filePath, Dictionary<string, object> parameterek = null, string pdfNeve = "Alap", bool egyediLablecKellOldalszam = true, Enums.DokumentumTipusEnum? dokumentumTipus = null)
|
||||
{
|
||||
var result = GetPdfMemoryStream(ds, parameterek, pdfNeve, filePath, egyediLablecKellOldalszam, dokumentumTipus);
|
||||
return result;
|
||||
}
|
||||
|
||||
private MemoryStream GetPdfMemoryStream(DataSet ds, Dictionary<string, object> parameterek, string pdfNeve, string filePath, bool egyediLablecKellOldalszam, Enums.DokumentumTipusEnum? dokumentumTipus)
|
||||
{
|
||||
Config.WebMode = true;
|
||||
var report = new Report();
|
||||
report.Load(filePath);
|
||||
|
||||
var (IsDokumentumFejlecMegjelenit, IsDokumentumLablecMegjelenit) = new NyomtatvanyokHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetActualIntezmenyAdatok();
|
||||
|
||||
var helper = new IntezmenyHelper(ConnectionTypeExtensions.GetSessionConnectionType());
|
||||
|
||||
if (!NyomtatvanyokLogic.IsEgyediFejlecLablecTiltott(dokumentumTipus))
|
||||
{
|
||||
if (IsDokumentumFejlecMegjelenit && IsDokumentumLablecMegjelenit)
|
||||
{
|
||||
Image fejlecImage = helper.GetIntezmenyFejlecDokumentum();
|
||||
Image lablecImage = helper.GetIntezmenyLablecDokumentum();
|
||||
|
||||
NyomtatvanyokLogic.EgyediFejlecLablec(report, fejlecImage, lablecImage, egyediLablecKellOldalszam);
|
||||
}
|
||||
|
||||
if (IsDokumentumFejlecMegjelenit && !IsDokumentumLablecMegjelenit)
|
||||
{
|
||||
Image fejlecImage = helper.GetIntezmenyFejlecDokumentum();
|
||||
|
||||
NyomtatvanyokLogic.EgyediFejlec(report, fejlecImage);
|
||||
}
|
||||
|
||||
if (IsDokumentumLablecMegjelenit && !IsDokumentumFejlecMegjelenit)
|
||||
{
|
||||
Image lablecImage = helper.GetIntezmenyLablecDokumentum();
|
||||
|
||||
NyomtatvanyokLogic.EgyediLablec(report, lablecImage, egyediLablecKellOldalszam);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
if (report.Report.Prepare())
|
||||
{
|
||||
FastReport.Export.Pdf.PDFExport pdfExport = new FastReport.Export.Pdf.PDFExport
|
||||
{
|
||||
ShowProgress = false,
|
||||
Subject = "Subject",
|
||||
Title = pdfNeve,
|
||||
Compressed = true,
|
||||
AllowPrint = true,
|
||||
EmbeddingFonts = true
|
||||
};
|
||||
|
||||
var stream = new MemoryStream();
|
||||
report.Report.Export(pdfExport, stream);
|
||||
report.Dispose();
|
||||
pdfExport.Dispose();
|
||||
stream.Position = 0;
|
||||
|
||||
if (dokumentumTipus == Enums.DokumentumTipusEnum.MunkaidoElszamololapHonap)
|
||||
{
|
||||
stream = OldalszamHelyettesitesPdf(stream);
|
||||
}
|
||||
|
||||
return stream;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private MemoryStream OldalszamHelyettesitesPdf(Stream ms)
|
||||
{
|
||||
ms.Position = 0;
|
||||
var ret = new MemoryStream();
|
||||
Aspose.Pdf.Document doc = new Aspose.Pdf.Document(ms);
|
||||
var fragmentAbsober = new Aspose.Pdf.Text.TextFragmentAbsorber("{osszoldalszam\\d+}");
|
||||
fragmentAbsober.TextSearchOptions.IsRegularExpressionUsed = true;
|
||||
doc.Pages.Accept(fragmentAbsober);
|
||||
var fragmentCollection = fragmentAbsober.TextFragments;
|
||||
var sumCounts = fragmentCollection.GroupBy(x => x.Text).Select(group => new { group.Key, Count = group.Count() }).ToList();
|
||||
foreach (var text in fragmentCollection)
|
||||
{
|
||||
text.Text = sumCounts.Single(x => x.Key == text.Text).Count.ToString();
|
||||
}
|
||||
doc.Save(ret);
|
||||
ms.Dispose();
|
||||
ret.Position = 0;
|
||||
return ret;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Word generálás
|
||||
protected ActionResult WordNyomtatas(DataSet ds, string frxNeve, Dictionary<string, object> parameterek = null, string wordNeve = "Alap", bool iktatas = false, string iktatasAzonosito = "Iktatas", int? osztalyId = null, DokumentumKategoriaEnum? dokumentumKategoria = null, Enums.DokumentumTipusEnum? dokumentumTipus = null, NameValueCollection kulcsSzavak = null, FoszamDefinicioValueModel foszamDefinicio = null, bool egyediLablecKellOldalszam = true, Bitmap qrCode = null)
|
||||
{
|
||||
Config.WebMode = true;
|
||||
|
||||
const string _fileTemplate = "{0}/{1}.frx";
|
||||
|
||||
var report = new Report();
|
||||
|
||||
report.Load(Server.MapPath(string.Format(_fileTemplate, ApplicationData.NyomtatasiSablonokKonyvtar, frxNeve)));
|
||||
|
||||
var (IsDokumentumFejlecMegjelenit, IsDokumentumLablecMegjelenit) = new NyomtatvanyokHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetActualIntezmenyAdatok();
|
||||
|
||||
var helper = new IntezmenyHelper(ConnectionTypeExtensions.GetSessionConnectionType());
|
||||
if (!iktatas && !NyomtatvanyokLogic.IsEgyediFejlecLablecTiltott(dokumentumTipus))
|
||||
{
|
||||
if (IsDokumentumFejlecMegjelenit && IsDokumentumLablecMegjelenit)
|
||||
{
|
||||
Image fejlecImage = helper.GetIntezmenyFejlecDokumentum();
|
||||
Image lablecImage = helper.GetIntezmenyLablecDokumentum();
|
||||
|
||||
NyomtatvanyokLogic.EgyediFejlecLablec(report, fejlecImage, lablecImage, egyediLablecKellOldalszam);
|
||||
}
|
||||
|
||||
if (IsDokumentumFejlecMegjelenit && !IsDokumentumLablecMegjelenit)
|
||||
{
|
||||
Image fejlecImage = helper.GetIntezmenyFejlecDokumentum();
|
||||
|
||||
NyomtatvanyokLogic.EgyediFejlec(report, fejlecImage);
|
||||
}
|
||||
|
||||
if (IsDokumentumLablecMegjelenit && !IsDokumentumFejlecMegjelenit)
|
||||
{
|
||||
Image lablecImage = helper.GetIntezmenyLablecDokumentum();
|
||||
|
||||
NyomtatvanyokLogic.EgyediLablec(report, lablecImage, egyediLablecKellOldalszam);
|
||||
}
|
||||
}
|
||||
|
||||
if (qrCode != null)
|
||||
{
|
||||
NyomtatvanyokLogic.AddQrCode(report, qrCode);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
if (report.Report.Prepare())
|
||||
{
|
||||
FastReport.Export.RichText.RTFExport textExport = new FastReport.Export.RichText.RTFExport
|
||||
{
|
||||
ShowProgress = false,
|
||||
Creator = Constants.ImportExport.Creator
|
||||
};
|
||||
|
||||
var stream = new MemoryStream();
|
||||
report.Report.Export(textExport, stream);
|
||||
report.Dispose();
|
||||
textExport.Dispose();
|
||||
stream.Position = 0;
|
||||
|
||||
if (dokumentumTipus == Enums.DokumentumTipusEnum.MunkaidoElszamololapHonap)
|
||||
{
|
||||
stream = OldalszamHelyettesitesWord(stream);
|
||||
}
|
||||
|
||||
var result = File(stream, "application/doc", $"{wordNeve}.{Constants.ImportExport.FileFormatWord}");
|
||||
|
||||
if (iktatas)
|
||||
{
|
||||
if (!dokumentumKategoria.HasValue || !dokumentumTipus.HasValue)
|
||||
{
|
||||
throw new ApplicationException(ErrorResource.DokumentumIktatasKategoriaTipusSzukseges);
|
||||
}
|
||||
|
||||
PoszeidonIktatas(result.FileStream, iktatasAzonosito, ClaimData.FelhasznaloId, dokumentumKategoria: dokumentumKategoria.Value, dokumentumTipus: dokumentumTipus.Value, osztalyId: osztalyId, kulcsSzavak: kulcsSzavak, foszamDefinicio: foszamDefinicio, formatum: Kreta.Core.Constants.ContentTypes.Word);
|
||||
|
||||
return RedirectToAction("Index", Constants.Controllers.IktatottDokumentumok, new { area = Constants.Areas.Nyomtatvanyok });
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private MemoryStream GetWordMemoryStream(DataSet ds, Dictionary<string, object> parameterek, string wordNeve, string filePath, bool egyediLablecKellOldalszam, Enums.DokumentumTipusEnum? dokumentumTipus)
|
||||
{
|
||||
Config.WebMode = true;
|
||||
var report = new Report();
|
||||
report.Load(filePath);
|
||||
|
||||
var (IsDokumentumFejlecMegjelenit, IsDokumentumLablecMegjelenit) = new NyomtatvanyokHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetActualIntezmenyAdatok();
|
||||
|
||||
var helper = new IntezmenyHelper(ConnectionTypeExtensions.GetSessionConnectionType());
|
||||
|
||||
if (!NyomtatvanyokLogic.IsEgyediFejlecLablecTiltott(dokumentumTipus))
|
||||
{
|
||||
if (IsDokumentumFejlecMegjelenit && IsDokumentumLablecMegjelenit)
|
||||
{
|
||||
Image fejlecImage = helper.GetIntezmenyFejlecDokumentum();
|
||||
Image lablecImage = helper.GetIntezmenyLablecDokumentum();
|
||||
|
||||
NyomtatvanyokLogic.EgyediFejlecLablec(report, fejlecImage, lablecImage, egyediLablecKellOldalszam);
|
||||
}
|
||||
|
||||
if (IsDokumentumFejlecMegjelenit && !IsDokumentumLablecMegjelenit)
|
||||
{
|
||||
Image fejlecImage = helper.GetIntezmenyFejlecDokumentum();
|
||||
|
||||
NyomtatvanyokLogic.EgyediFejlec(report, fejlecImage);
|
||||
}
|
||||
|
||||
if (IsDokumentumLablecMegjelenit && !IsDokumentumFejlecMegjelenit)
|
||||
{
|
||||
Image lablecImage = helper.GetIntezmenyLablecDokumentum();
|
||||
|
||||
NyomtatvanyokLogic.EgyediLablec(report, lablecImage, egyediLablecKellOldalszam);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
if (report.Report.Prepare())
|
||||
{
|
||||
FastReport.Export.RichText.RTFExport textExport = new FastReport.Export.RichText.RTFExport
|
||||
{
|
||||
ShowProgress = false,
|
||||
Creator = Constants.ImportExport.Creator
|
||||
};
|
||||
|
||||
var stream = new MemoryStream();
|
||||
report.Report.Export(textExport, stream);
|
||||
report.Dispose();
|
||||
textExport.Dispose();
|
||||
stream.Position = 0;
|
||||
|
||||
if (dokumentumTipus == Enums.DokumentumTipusEnum.MunkaidoElszamololapHonap)
|
||||
{
|
||||
stream = OldalszamHelyettesitesWord(stream);
|
||||
}
|
||||
|
||||
return stream;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private MemoryStream OldalszamHelyettesitesWord(Stream ms)
|
||||
{
|
||||
ms.Position = 0;
|
||||
var ret = new MemoryStream();
|
||||
var loadOptions = new Aspose.Words.LoadOptions();
|
||||
loadOptions.LoadFormat = Aspose.Words.LoadFormat.Doc;
|
||||
Aspose.Words.Document doc = new Aspose.Words.Document(ms, loadOptions);
|
||||
var runs = doc.GetChildNodes(Aspose.Words.NodeType.Run, true).Where(x => Regex.IsMatch(((Aspose.Words.Run)x).Text, "{osszoldalszam\\d+}")).Cast<Aspose.Words.Run>();
|
||||
var toCount = runs.GroupBy(x => x.Text.Substring(x.Text.IndexOf("{osszoldalszam"), x.Text.IndexOf("}", x.Text.IndexOf("{osszoldalszam")) - x.Text.IndexOf("{osszoldalszam") + 1)).Select(group => new { group.Key, Count = group.Count() }).ToDictionary(group => group.Key, group => group.Count);
|
||||
foreach (var b in runs)
|
||||
{
|
||||
var key = toCount.Single(x => b.Text.Contains(x.Key)).Key;
|
||||
b.Text = b.Text.Replace(key, toCount[key].ToString());
|
||||
}
|
||||
|
||||
var saveFormat = Aspose.Words.SaveFormat.Doc;
|
||||
doc.Save(ret, saveFormat);
|
||||
ms.Dispose();
|
||||
ret.Position = 0;
|
||||
return ret;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Excel generálás
|
||||
protected ActionResult ExcelNyomtatas(DataSet dataSet,
|
||||
string excelNeve = "Excel",
|
||||
bool iktatas = false,
|
||||
string iktatasAzonosito = "Iktatas",
|
||||
DokumentumKategoriaEnum? dokumentumKategoria = null,
|
||||
Enums.DokumentumTipusEnum? dokumentumTipus = null,
|
||||
int? osztalyId = null,
|
||||
NameValueCollection kulcsSzavak = null,
|
||||
FoszamDefinicioValueModel foszamDefinicio = null,
|
||||
List<ExcelNumericTypeColumn> excelNumericTypeColumns = null,
|
||||
bool lastRowStyleLikeHeader = false,
|
||||
List<int> sheetsWithoutLastRowStyleLikeHeader = null)
|
||||
{
|
||||
var memoryStream = GetExcelMemoryStream(dataSet, excelNumericTypeColumns, lastRowStyleLikeHeader, sheetsWithoutLastRowStyleLikeHeader);
|
||||
|
||||
var result = File(memoryStream, Core.Constants.ContentTypes.Xlsx, $"{excelNeve}.xlsx");
|
||||
|
||||
if (iktatas)
|
||||
{
|
||||
if (!dokumentumKategoria.HasValue || !dokumentumTipus.HasValue)
|
||||
{
|
||||
throw new ApplicationException(ErrorResource.DokumentumIktatasKategoriaTipusSzukseges);
|
||||
}
|
||||
|
||||
PoszeidonIktatas(result.FileStream, iktatasAzonosito, ClaimData.FelhasznaloId, dokumentumKategoria.Value, dokumentumTipus.Value, osztalyId: osztalyId, kulcsSzavak: kulcsSzavak, foszamDefinicio: foszamDefinicio, formatum: Core.Constants.ContentTypes.Xlsx);
|
||||
|
||||
return RedirectToAction("Index", Constants.Controllers.IktatottDokumentumok, new { area = Constants.Areas.Nyomtatvanyok });
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public MemoryStream ExcelNyomtatasByMemoryStream(
|
||||
DataSet dataSet,
|
||||
bool iktatas,
|
||||
string iktatasAzonosito = null,
|
||||
DokumentumKategoriaEnum? dokumentumKategoria = null,
|
||||
Enums.DokumentumTipusEnum? dokumentumTipus = null,
|
||||
bool lastRowStyleLikeHeader = false,
|
||||
List<int> sheetsWithoutLastRowStyleLikeHeader = null)
|
||||
{
|
||||
var memoryStream = GetExcelMemoryStream(dataSet, lastRowStyleLikeHeader: lastRowStyleLikeHeader, sheetsWithoutLastRowStyleLikeHeader: sheetsWithoutLastRowStyleLikeHeader);
|
||||
|
||||
if (iktatas)
|
||||
{
|
||||
if (!dokumentumKategoria.HasValue || !dokumentumTipus.HasValue)
|
||||
{
|
||||
throw new ApplicationException(ErrorResource.DokumentumIktatasKategoriaTipusSzukseges);
|
||||
}
|
||||
|
||||
PoszeidonIktatas(memoryStream, iktatasAzonosito, ClaimData.FelhasznaloId, dokumentumKategoria.Value, dokumentumTipus.Value);
|
||||
}
|
||||
|
||||
return memoryStream;
|
||||
}
|
||||
|
||||
private static MemoryStream GetExcelMemoryStream(DataSet dataSet, List<ExcelNumericTypeColumn> excelNumericTypeColumns = null, bool lastRowStyleLikeHeader = false, List<int> sheetsWithoutLastRowStyleLikeHeader = null)
|
||||
{
|
||||
if (dataSet.IsEmpty())
|
||||
{
|
||||
throw new StatusError(
|
||||
HttpStatusCode.InternalServerError,
|
||||
CommonResource.Ures);
|
||||
}
|
||||
|
||||
MemoryStream memoryStream;
|
||||
using (var workbook = new Workbook())
|
||||
{
|
||||
var mappedSheetName = new Dictionary<int, string>();
|
||||
|
||||
for (int dataTableIndex = 0; dataTableIndex < dataSet.Tables.Count; dataTableIndex++)
|
||||
{
|
||||
DataTable dataTable = dataSet.Tables[dataTableIndex];
|
||||
//NOTE: Eltávolítjuk a nem meg felelő charaktereket a sheetName-ből
|
||||
// { '.', '?', '!', '*', '/', '[', ']', '\'', ':' };
|
||||
string sheetName = new Regex(@"[!*,./:?[\\\]]").Replace(dataTable.TableName, string.Empty);
|
||||
if (string.IsNullOrWhiteSpace(sheetName))
|
||||
{
|
||||
//NOTE: Ha nincs benne szöveg, akkor bele kell tenni, mert különben elszáll
|
||||
sheetName = "Kréta.NET export";
|
||||
}
|
||||
|
||||
//NOTE: Maximum 31 karakter hosszú lehet egy sheetName, ezért levágjuk, hogy max olyan hosszú legyen.
|
||||
sheetName = sheetName.Length > 31 ? sheetName.Substring(0, 31) : sheetName;
|
||||
|
||||
mappedSheetName.Add(dataTableIndex, sheetName);
|
||||
}
|
||||
|
||||
//NOTE: módosítjuk az egyező sheetName értékeket
|
||||
foreach (var item in mappedSheetName.GroupBy(x => x.Value).ToDictionary(t => t.Key, t => t.Select(r => r.Key)).Where(x => x.Value.Count() > 1).ToList())
|
||||
{
|
||||
var egyezoFulekSzama = item.Value.Count();
|
||||
for (int i = 1; i <= egyezoFulekSzama; i++)
|
||||
{
|
||||
var reNamedSheetName = $"{item.Key.Wrap(0, 31 - egyezoFulekSzama.ToString().Length - 1)}-{i}";
|
||||
|
||||
do
|
||||
{
|
||||
//NOTE: ellenőrizni kell a beállítandó sorszámot, hogy már létezik-e, mert csoportonként ismétlődhet a tartalom
|
||||
//és duplikáció miatt elhal a generálás
|
||||
int foundIndex = mappedSheetName.LastOrDefault(x => x.Value.Equals(reNamedSheetName)).Key;
|
||||
if (foundIndex != 0)
|
||||
{
|
||||
string actualIndex = reNamedSheetName.Remove(0, reNamedSheetName.LastIndexOf('-') + 1);
|
||||
int nextIndex = 0;
|
||||
Int32.TryParse(actualIndex, out nextIndex);
|
||||
nextIndex += 1;
|
||||
|
||||
reNamedSheetName = $"{item.Key.Wrap(0, 31 - nextIndex.ToString().Length - 1)}-{nextIndex}";
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
} while (true);
|
||||
|
||||
mappedSheetName[item.Value.ElementAt(i - 1)] = reNamedSheetName;
|
||||
}
|
||||
}
|
||||
|
||||
for (int dataTableIndex = 0; dataTableIndex < dataSet.Tables.Count; dataTableIndex++)
|
||||
{
|
||||
DataTable dataTable = dataSet.Tables[dataTableIndex];
|
||||
|
||||
var sheetName = mappedSheetName[dataTableIndex];
|
||||
|
||||
Dictionary<int, string> headerNameDictionary = new Dictionary<int, string>();
|
||||
int columnIndex = 0;
|
||||
foreach (DataColumn dataColumn in dataTable.Columns.Cast<DataColumn>())
|
||||
{
|
||||
headerNameDictionary.Add(columnIndex, dataColumn.ColumnName);
|
||||
columnIndex++;
|
||||
}
|
||||
List<SimpleExportColumnCo> simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos(headerNameDictionary);
|
||||
|
||||
Worksheet worksheet = SimpleExportLogic.GetWorksheet(workbook, sheetName, simpleExportColumnCos, dataTableIndex);
|
||||
|
||||
//NOTE: Van-e az adott táblán numerikus oszlop amit nem szövegként kell formázni.
|
||||
var numericTypeColumns = new List<int>();
|
||||
if (excelNumericTypeColumns.NotNullAndAny())
|
||||
{
|
||||
//NOTE: Adott táblára.
|
||||
var numericTypeColumnsByTable = excelNumericTypeColumns.Where(c => c.TableIndex == dataTableIndex);
|
||||
if (numericTypeColumnsByTable.Any())
|
||||
{
|
||||
numericTypeColumns.AddRange(numericTypeColumnsByTable.Select(c => c.ColumnIndex));
|
||||
}
|
||||
else
|
||||
{
|
||||
//NOTE: Egészre worksheetre.
|
||||
var numericTypeColumnForAll = excelNumericTypeColumns.Where(c => c.IsForAll);
|
||||
if (numericTypeColumnForAll.Any())
|
||||
{
|
||||
numericTypeColumns.AddRange(numericTypeColumnForAll.Select(c => c.ColumnIndex));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int rowNumber = 1;
|
||||
foreach (DataRow dataRow in dataTable.AsEnumerable())
|
||||
{
|
||||
for (int columnNumber = 0; columnNumber < headerNameDictionary.Count; columnNumber++)
|
||||
{
|
||||
//NOTE: Ahhoz, hogy az excel jól formázza a numerikus értékeket, olyan típussal kell átadni neki.
|
||||
var stringValue = SDAConvert.ToStringForExcelCell(dataRow[columnNumber]);
|
||||
if (numericTypeColumns.Contains(columnNumber))
|
||||
{
|
||||
if (int.TryParse(stringValue, out int intValue))
|
||||
{
|
||||
worksheet.Cells[rowNumber, columnNumber].Value = intValue;
|
||||
}
|
||||
else if (double.TryParse(stringValue, out double doubleValue))
|
||||
{
|
||||
worksheet.Cells[rowNumber, columnNumber].Value = doubleValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
worksheet.Cells[rowNumber, columnNumber].Value = stringValue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
worksheet.Cells[rowNumber, columnNumber].Value = stringValue;
|
||||
}
|
||||
}
|
||||
|
||||
if (lastRowStyleLikeHeader
|
||||
&& (sheetsWithoutLastRowStyleLikeHeader == null || !sheetsWithoutLastRowStyleLikeHeader.Contains(dataTableIndex))
|
||||
&& dataRow == dataTable.AsEnumerable().Last())
|
||||
{
|
||||
for (int columnNumber = 0; columnNumber < headerNameDictionary.Count; columnNumber++)
|
||||
{
|
||||
worksheet.Cells[rowNumber, columnNumber].SetStyle(worksheet.Cells[0, columnNumber].GetStyle());
|
||||
}
|
||||
}
|
||||
rowNumber++;
|
||||
}
|
||||
}
|
||||
|
||||
memoryStream = SimpleExportLogic.GetWorkbookMemoryStream(workbook);
|
||||
}
|
||||
|
||||
return memoryStream;
|
||||
}
|
||||
|
||||
private ActionResult ExcelNyomtatas(MemoryStream stream, string excelNeve, bool iktatas, string iktatasAzonosito, int? osztalyId = null, DokumentumKategoriaEnum? dokumentumKategoria = null, Enums.DokumentumTipusEnum? dokumentumTipus = null, NameValueCollection kulcsSzavak = null, FoszamDefinicioValueModel foszamDefinicio = null)
|
||||
{
|
||||
var result = File(stream, Core.Constants.ContentTypes.Xlsx, $"{excelNeve}.{GetNyomtatvanyFileFormat(NyomtatvanyFormatumEnum.Excel.AsInt())}");
|
||||
|
||||
if (iktatas)
|
||||
{
|
||||
if (!dokumentumKategoria.HasValue || !dokumentumTipus.HasValue)
|
||||
{
|
||||
throw new ApplicationException(ErrorResource.DokumentumIktatasKategoriaTipusSzukseges);
|
||||
}
|
||||
|
||||
PoszeidonIktatas(result.FileStream, iktatasAzonosito, ClaimData.FelhasznaloId, dokumentumKategoria.Value, dokumentumTipus.Value, osztalyId: osztalyId, kulcsSzavak: kulcsSzavak, foszamDefinicio: foszamDefinicio, formatum: Core.Constants.ContentTypes.Xlsx);
|
||||
|
||||
return RedirectToAction("Index", Constants.Controllers.IktatottDokumentumok, new { area = Constants.Areas.Nyomtatvanyok });
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Zip generálás
|
||||
|
||||
#endregion
|
||||
|
||||
#region Iktatás
|
||||
private (NameValueCollection kulcsSzavak, FoszamDefinicioValueModel foszamDefinicio) KulcsszavakEsFoszamGeneralas(NyomtatvanyModel model, Enums.DokumentumTipusEnum dokumentumTipus, DataSet ds, DokumentumElemiSzintEnum foszamDefinicioSzint)
|
||||
{
|
||||
if ((model.FoszamDefiniciok.Count < 1)
|
||||
|| ((model.Kulcsszodefiniciok.Count < 1) && !IsNincsKulcsszoDefinicio(dokumentumTipus)))
|
||||
{
|
||||
throw new ApplicationException(ErrorResource.DokumentumIktatasKulcsszoFoszamDefinicioSzukseges);
|
||||
}
|
||||
|
||||
KulcsszoHelper kulcsszoHelper = new KulcsszoHelper(ConnectionTypeExtensions.GetSessionConnectionType());
|
||||
var kulcsSzavak = kulcsszoHelper.GetKulcsszavak(dokumentumTipus, model.Kulcsszodefiniciok, ds);
|
||||
|
||||
var foszamDefinicio = model.FoszamDefiniciok.FirstOrDefault(x => x.Szint == foszamDefinicioSzint);
|
||||
var foszamDefinicioErtekek = kulcsszoHelper.FillFoszamDefinicioErtekek(kulcsSzavak, foszamDefinicio);
|
||||
|
||||
return (kulcsSzavak, foszamDefinicio: foszamDefinicioErtekek);
|
||||
}
|
||||
|
||||
private bool IsNincsKulcsszoDefinicio(Enums.DokumentumTipusEnum dokumentumTipus)
|
||||
{
|
||||
switch (dokumentumTipus)
|
||||
{
|
||||
case Enums.DokumentumTipusEnum.TantargyfelosztasFormazottExcel:
|
||||
case Enums.DokumentumTipusEnum.TantargyfelosztasFormazottPDF:
|
||||
case Enums.DokumentumTipusEnum.TantargyfelosztasKiegeszitettAdatok:
|
||||
case Enums.DokumentumTipusEnum.OsztalyokSzamaRiport:
|
||||
case Enums.DokumentumTipusEnum.CsoportokSzamaRiport:
|
||||
case Enums.DokumentumTipusEnum.FeladatellatasiHelyekRiport:
|
||||
case Enums.DokumentumTipusEnum.TanulokMegoszlasaEvfolyamokEsAgazatokSzerint:
|
||||
case Enums.DokumentumTipusEnum.ElfogadottTantargyfelosztasFormazottExcel:
|
||||
case Enums.DokumentumTipusEnum.ElfogadottTantargyfelosztasFormazottPDF:
|
||||
case Enums.DokumentumTipusEnum.ReszletesAlkalmazottAdatok:
|
||||
case Enums.DokumentumTipusEnum.ReszletesTanuloiAdatok:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private void PoszeidonIktatas(Stream stream, string dokumentumNeve, int iktatoID, DokumentumKategoriaEnum dokumentumKategoria, Enums.DokumentumTipusEnum dokumentumTipus, int? osztalyId = null, NameValueCollection kulcsSzavak = null, FoszamDefinicioValueModel foszamDefinicio = null, string formatum = Core.Constants.ContentTypes.Pdf)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(dokumentumNeve))
|
||||
{
|
||||
throw new BusinessLogic.Exceptions.PosszeidonIktatasException();
|
||||
}
|
||||
|
||||
var helper = new PoszeidonHelper(ConnectionTypeExtensions.GetSessionConnectionType(), IktatoRepositoryFactory, IktatoServiceConfiguration);
|
||||
|
||||
helper.Iktatas(stream, dokumentumNeve, iktatoID, dokumentumKategoria, dokumentumTipus, osztalyId, kulcsSzavak, foszamDefinicio, formatum);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user