kreta/Kreta.Job.Tasks/IktatasJob.cs
2024-03-13 00:33:46 +01:00

419 lines
23 KiB
C#

using System;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Reflection;
using Kreta.Core.Iktato.Poszeidon.Factory.Interface;
using Kreta.Core.Iktato.Poszeidon.Infrastructure.Interface;
using Kreta.DataAccess.Interfaces;
using Kreta.DataAccessManual;
using Kreta.DataAccessManual.Interfaces;
using Kreta.Enums;
using Kreta.Framework;
using Kreta.Job.Tasks.Core;
using Kreta.Job.Tasks.Helpers;
using Kreta.Job.Tasks.Helpers.Iktatas;
namespace Kreta.Job.Tasks
{
public class IktatasJob : IktatasJobBase, IIktatasJob
{
public IktatasJob(IIktatoRepositoryFactory iktatoRepositoryFactory, IWcfServiceContext wcfServiceContext, Kreta.Core.IktatoServiceConfiguration iktatoServiceConfiguration) : base(iktatoRepositoryFactory, wcfServiceContext, iktatoServiceConfiguration)
{
}
[Hangfire.AutomaticRetry(Attempts = 2)]
[JobStateWatcher(typeof(IktatasJob), nameof(WriteFailedJobId))]
public void FoszamosIktatasDal(int iktatottDokumentumId, int iktatoId, int partnerId, string intezmenyAzonosito, int intezmenyId, int tanevId, Hangfire.Server.PerformContext context)
{
var jobId = context.BackgroundJob.Id;
Dal.OrganizationConnection.Run(intezmenyAzonosito, (h) =>
{
UserContext.Instance.SetIntezmenyEsTanev(intezmenyId, tanevId, tanevId);
var intezmenyDal = h.IntezmenyDal();
var intezmeny = intezmenyDal.Get(intezmenyId);
var tanevDal = h.TanevDal();
var tanev = tanevDal.Get(tanevId);
var iktatottDokumentumDal = h.IktatottDokumentumDal();
var iktatottDokumentum = iktatottDokumentumDal.Get(iktatottDokumentumId);
var iktato = iktatottDokumentum.IktatoSzemely;
var kulcsszavak = GetDokumentumKulcsszavak(h, iktatottDokumentumId, intezmenyId, tanevId, tanev.Nev, iktato.NyomtatasiNev);
string iratfajtaNev = GetIratfajtaNev(iktatottDokumentum);
var irattariTetelszam = h.AdatszotarDAL().GetAdatszotarById(iktatottDokumentum.DokumentumTipus, iktatottDokumentum.IntezmenyId, iktatottDokumentum.TanevId).Tables[0].Rows[0]["Code"].ToString();
var iratRequest = new Kreta.Core.Iktato.Poszeidon.Domain.Model.IratRequest()
{
Iratfajta = Constants.Iktatas.IrattargyfajtaNev,
Irattargyfajta = iratfajtaNev,
Targy = iktatottDokumentum.DokumentumNeve,
IrattariTetelszam = irattariTetelszam + "."
};
var elektronikusPeldanyRequest = new Kreta.Core.Iktato.Poszeidon.Domain.Model.ElektronikusPeldanyRequest()
{
BirtokloSzervezetKod = intezmeny.IktatoSzervezetAzonosito
};
Kreta.Core.Iktato.Poszeidon.Domain.Model.FoszamosIktatasRequest foszamosIktatasRequest = new Kreta.Core.Iktato.Poszeidon.Domain.Model.FoszamosIktatasRequest()
{
IktatoSzervezetKod = intezmeny.IktatoSzervezetAzonosito,
Kulcsszavak = kulcsszavak,
IratRequest = iratRequest,
ElektronikusPeldanyRequest = elektronikusPeldanyRequest
};
var iktatoRepositoryConfiguration = GetIktatoRepositoryConfiguration(intezmeny.IktatoSzervezetAzonosito, intezmeny.PoszeidonBejelentkezesiNev);
var iktatasResponse = IktatoRepositoryFactory.GetIktatoRepository(iktatoRepositoryConfiguration).FoszamosIktatas(foszamosIktatasRequest);
iktatottDokumentum.IsFoszamos = true;
iktatottDokumentum.DokumentumStatusz = (int)DokumentumStatuszEnum.IktatasraVar;
iktatottDokumentum.ElektronikusPeldanyId = Convert.ToInt32(iktatasResponse.ElektronikusPeldanyId);
iktatottDokumentum.IktatasDatuma = DateTime.Now;
iktatottDokumentum.Iktatoszam = iktatasResponse.Iktatoszam;
iktatottDokumentum.Vonalkod = iktatasResponse.Iktatoszam;
iktatottDokumentum.FailedJobId = null;
iktatottDokumentum.IratId = iktatasResponse.IratId;
iktatottDokumentum.UgyiratId = iktatottDokumentum.UgyiratId;
#region Iktatoszám és vonalkód kitöltése
//string formatum = iktatottDokumentum.DokumentumTartalomTipus;
IDokumentum generaltDokumentum = IktatoszamVonalkodKitoltes(h, Path.GetExtension(iktatottDokumentum.FajlNev), iktatottDokumentum.GeneraltDokumentumId.Value, iktatottDokumentum.Iktatoszam, iktatottDokumentum.DokumentumTipus);
#endregion
var nyomtatvanyokDal = h.NyomtatvanyokDal();
nyomtatvanyokDal.FullUpdate(generaltDokumentum);
nyomtatvanyokDal.FullUpdate(iktatottDokumentum);
string id = Hangfire.BackgroundJob.ContinueWith<FeltoltesJob>(jobId, (iktatas) => iktatas.FeltoltesUjVerzioDal(iktatottDokumentumId, intezmenyAzonosito, intezmenyId, tanevId));
});
}
[Hangfire.AutomaticRetry(Attempts = 2)]
[JobStateWatcher(typeof(IktatasJob), nameof(WriteFailedJobId))]
public void AlszamosIktatasDal(int iktatottDokumentumId, int parentDokumentumId, int iktatoId, int partnerId, string intezmenyAzonosito, int intezmenyId, int tanevId, Hangfire.Server.PerformContext context)
{
var jobId = context.BackgroundJob.Id;
Dal.OrganizationConnection.Run(intezmenyAzonosito, (h) =>
{
UserContext.Instance.SetIntezmenyEsTanev(intezmenyId, tanevId, tanevId);
var intezmenyDal = h.IntezmenyDal();
var intezmeny = intezmenyDal.Get(intezmenyId);
var tanevDal = h.TanevDal();
var tanev = tanevDal.Get(tanevId);
var iktatottDokumentumDal = h.IktatottDokumentumDal();
var iktatottDokumentum = iktatottDokumentumDal.Get(iktatottDokumentumId);
var parentIktatottDokumentum = iktatottDokumentumDal.Get(parentDokumentumId);
var iktato = iktatottDokumentum.IktatoSzemely;
var kulcsszavak = GetDokumentumKulcsszavak(h, iktatottDokumentumId, intezmenyId, tanevId, tanev.Nev, iktato.NyomtatasiNev);
var foszam = GetFoszam(parentIktatottDokumentum.Iktatoszam);
string iratfajtaNev = GetIratfajtaNev(iktatottDokumentum);
var irattariTetelszam = h.AdatszotarDAL().GetAdatszotarById(iktatottDokumentum.DokumentumTipus, iktatottDokumentum.IntezmenyId, iktatottDokumentum.TanevId).Tables[0].Rows[0]["Code"].ToString();
var iratRequest = new Kreta.Core.Iktato.Poszeidon.Domain.Model.IratRequest()
{
Iratfajta = Constants.Iktatas.IrattargyfajtaNev,
Irattargyfajta = iratfajtaNev,
Targy = iktatottDokumentum.DokumentumNeve,
IrattariTetelszam = irattariTetelszam + "."
};
var elektronikusPeldanyRequest = new Kreta.Core.Iktato.Poszeidon.Domain.Model.ElektronikusPeldanyRequest()
{
BirtokloSzervezetKod = intezmeny.IktatoSzervezetAzonosito
};
Kreta.Core.Iktato.Poszeidon.Domain.Model.AlszamosIktatasRequest alszamosIktatasRequest = new Kreta.Core.Iktato.Poszeidon.Domain.Model.AlszamosIktatasRequest()
{
IktatoSzervezetKod = intezmeny.IktatoSzervezetAzonosito,
Kulcsszavak = kulcsszavak,
Foszam = foszam,
SzovegesIktatoszam = parentIktatottDokumentum.Iktatoszam,
IratRequest = iratRequest,
ElektronikusPeldanyRequest = elektronikusPeldanyRequest
};
var iktatoRepositoryConfiguration = GetIktatoRepositoryConfiguration(intezmeny.IktatoSzervezetAzonosito, intezmeny.PoszeidonBejelentkezesiNev);
var iktatasResponse = IktatoRepositoryFactory.GetIktatoRepository(iktatoRepositoryConfiguration).AlszamosIktatas(alszamosIktatasRequest);
iktatottDokumentum.IsFoszamos = iktatasResponse.IsFoszamos;
iktatottDokumentum.DokumentumStatusz = (int)DokumentumStatuszEnum.IktatasraVar;
iktatottDokumentum.ElektronikusPeldanyId = Convert.ToInt32(iktatasResponse.ElektronikusPeldanyId);
iktatottDokumentum.IktatasDatuma = DateTime.Now;
iktatottDokumentum.Iktatoszam = iktatasResponse.Iktatoszam;
iktatottDokumentum.Vonalkod = iktatasResponse.Iktatoszam;
iktatottDokumentum.FailedJobId = null;
iktatottDokumentum.IratId = iktatasResponse.IratId;
iktatottDokumentum.UgyiratId = iktatottDokumentum.UgyiratId;
#region Iktatoszám és vonalkód kitöltése
IDokumentum generaltDokumentum = IktatoszamVonalkodKitoltes(h, Path.GetExtension(iktatottDokumentum.FajlNev), iktatottDokumentum.GeneraltDokumentumId.Value, iktatottDokumentum.Iktatoszam, iktatottDokumentum.DokumentumTipus);
#endregion
var nyomtatvanyokDal = h.NyomtatvanyokDal();
nyomtatvanyokDal.FullUpdate(generaltDokumentum);
nyomtatvanyokDal.FullUpdate(iktatottDokumentum);
string id = Hangfire.BackgroundJob.ContinueWith<FeltoltesJob>(jobId, (iktatas) => iktatas.FeltoltesUjVerzioDal(iktatottDokumentumId, intezmenyAzonosito, intezmenyId, tanevId));
});
}
private static string GetIratfajtaNev(IIktatottDokumentum iktatottDokumentum)
{
string iratfajtaNev;
switch (iktatottDokumentum.DokumentumKategoria)
{
case (int)DokumentumKategoriaEnum.Naplok:
switch (iktatottDokumentum.DokumentumTipus)
{
case (int)DokumentumTipusEnum.Osztalynaplo:
case (int)DokumentumTipusEnum.HaladasiNaplo:
case (int)DokumentumTipusEnum.OsztalyozoNaplo:
iratfajtaNev = GetDisplayName(Enums.ManualEnums.PoszeidonIratfajtakEnum.Osztalynaplo);
break;
default:
iratfajtaNev = GetDisplayName(Enums.ManualEnums.PoszeidonIratfajtakEnum.Csoportnaplo);
break;
}
break;
case (int)DokumentumKategoriaEnum.Orarendek:
iratfajtaNev = GetDisplayName(Enums.ManualEnums.PoszeidonIratfajtakEnum.Orarend);
break;
case (int)DokumentumKategoriaEnum.Tanulok:
iratfajtaNev = GetDisplayName(Enums.ManualEnums.PoszeidonIratfajtakEnum.Tanulokkal_kapcsolatos_dokumentum);
break;
case (int)DokumentumKategoriaEnum.Pedagogusok:
iratfajtaNev = GetDisplayName(Enums.ManualEnums.PoszeidonIratfajtakEnum.Pedagogusokkal_kapcsolatos_dokumentum);
break;
case (int)DokumentumKategoriaEnum.Statisztikak:
iratfajtaNev = GetDisplayName(Enums.ManualEnums.PoszeidonIratfajtakEnum.Statisztika);
break;
case (int)DokumentumKategoriaEnum.ErtesitokTorzslapBizonyitvany:
iratfajtaNev = GetDisplayName(Enums.ManualEnums.PoszeidonIratfajtakEnum.Ertesito_tozslap_bizonyitvany);
break;
case (int)DokumentumKategoriaEnum.IgazolasokMulasztasiErtesitok:
iratfajtaNev = GetDisplayName(Enums.ManualEnums.PoszeidonIratfajtakEnum.Igazolas_mulasztasi_ertesito);
break;
case (int)DokumentumKategoriaEnum.TanugyiEllenorzes:
iratfajtaNev = GetDisplayName(Enums.ManualEnums.PoszeidonIratfajtakEnum.Tanugyi_ellenorzessel_kapcsolatos_dokumentum);
break;
case (int)DokumentumKategoriaEnum.Alapdokumentumok:
iratfajtaNev = GetDisplayName(Enums.ManualEnums.PoszeidonIratfajtakEnum.Alapdokumentum);
break;
case (int)DokumentumKategoriaEnum.szemelyzeti_ugyek:
iratfajtaNev = GetDisplayName(Enums.ManualEnums.PoszeidonIratfajtakEnum.Szemelyzeti_Ugyek);
break;
default:
throw new ApplicationException(Resources.ErrorResource.HianyzoDokumentumKategoriaPoszeidonIratfajtaOsszerendeles);
}
return iratfajtaNev;
}
public int GetFoszam(string iktatoszam)
{
string[] parts = iktatoszam.Split("/".ToCharArray());
var foszamStr = parts[parts.Length - 2].Split("-".ToCharArray())[0];
if (!int.TryParse(foszamStr, out int foszam))
{
throw new FormatException(string.Format(Resources.ErrorResource.HibasformatumuFoszam, iktatoszam));
}
return foszam;
}
public static void WriteFailedJobId(string jobId)
{
var jobDetails = Hangfire.JobStorage.Current.GetMonitoringApi().JobDetails(jobId);
var offset = 0;
if (jobDetails.Job.Method.Name == nameof(AlszamosIktatasDal))
{
offset = 1;
}
var iktatottDokumentumId = (int)jobDetails.Job.Args[0];
var intezmenyAzonosito = (string)jobDetails.Job.Args[3 + offset];
var intezmenyId = (int)jobDetails.Job.Args[4 + offset];
var tanevId = (int)jobDetails.Job.Args[5 + offset];
Dal.OrganizationConnection.Run(intezmenyAzonosito, (h) =>
{
UserContext.Instance.SetIntezmenyEsTanev(intezmenyId, tanevId, tanevId);
var iktatottDokumentumDal = h.IktatottDokumentumDal();
var iktatottDokumentum = iktatottDokumentumDal.Get(iktatottDokumentumId);
iktatottDokumentum.FailedJobId = int.Parse(jobId);
iktatottDokumentum.DokumentumStatusz = (int)DokumentumStatuszEnum.Hibas;
iktatottDokumentum.ElektronikusPeldanyFeltoltesDatuma = DateTime.Now;
var nyomtatvanyokDal = h.NyomtatvanyokDal();
nyomtatvanyokDal.Update(iktatottDokumentum);
});
}
private static IDokumentum IktatoszamVonalkodKitoltes(IDalHandler handler, string kiterjesztes, int generaltDokumentumId, string iktatoszam, int dokumentumTipus)
{
bool isLablecben;
switch (dokumentumTipus)
{
case (int)DokumentumTipusEnum.AlapitoOkirat:
case (int)DokumentumTipusEnum.SzervezetiEsMukodesiSzabalyzat:
case (int)DokumentumTipusEnum.PedagogiaiProgram:
case (int)DokumentumTipusEnum.Hazirend:
case (int)DokumentumTipusEnum.Munkaterv:
case (int)DokumentumTipusEnum.tavollet:
case (int)DokumentumTipusEnum.mukodesi_engedely:
isLablecben = true;
break;
default:
isLablecben = false;
break;
}
switch (kiterjesztes)
{
case ".xls":
return IktatoszamVonalkodExcelKitoltes(handler, generaltDokumentumId, iktatoszam);
case ".doc":
return IktatoszamVonalkodDocKitoltes(handler, generaltDokumentumId, iktatoszam, isLablecben);
case ".docx":
return IktatoszamVonalkodDocxKitoltes(handler, generaltDokumentumId, iktatoszam, isLablecben);
case ".pdf":
return IktatoszamVonalkodPlaceholderKitoltes(handler, generaltDokumentumId, iktatoszam);
case ".xlsx":
return IktatoszamVonalkodExcelXKitoltes(handler, generaltDokumentumId, iktatoszam);
default:
return handler.DokumentumDal().Get(generaltDokumentumId);
}
}
private static IDokumentum IktatoszamVonalkodDocKitoltes(IDalHandler handler, int generaltDokumentumId, string iktatoszam, bool isLablecben)
{
return IktatoszamVonalkodWordKitoltes(handler, generaltDokumentumId, iktatoszam, isLablecben, true);
}
private static IDokumentum IktatoszamVonalkodDocxKitoltes(IDalHandler handler, int generaltDokumentumId, string iktatoszam, bool isLablecben)
{
return IktatoszamVonalkodWordKitoltes(handler, generaltDokumentumId, iktatoszam, isLablecben, false);
}
private static IDokumentum IktatoszamVonalkodWordKitoltes(IDalHandler handler, int generaltDokumentumId, string iktatoszam, bool isLablecben, bool isDoc)
{
IDokumentum generaltDokumentum = handler.DokumentumDal().Get(generaltDokumentumId);
using (var ret = new MemoryStream())
using (var ms = new MemoryStream(generaltDokumentum.Tartalom))
{
var loadOptions = new Aspose.Words.LoadOptions();
loadOptions.LoadFormat = (isDoc) ? Aspose.Words.LoadFormat.Doc : Aspose.Words.LoadFormat.Docx;
Aspose.Words.Document doc = new Aspose.Words.Document(ms, loadOptions);
Aspose.Words.Story footer = (isLablecben) ? doc.FirstSection.HeadersFooters[Aspose.Words.HeaderFooterType.FooterPrimary] : (Aspose.Words.Story)doc.FirstSection.Body;
Aspose.Words.Replacing.FindReplaceOptions options = new Aspose.Words.Replacing.FindReplaceOptions
{
MatchCase = true,
FindWholeWordsOnly = false,
ReplacingCallback = new WordIktatoszamVonalkodTextReplacer()
};
footer.Range.Replace(new System.Text.RegularExpressions.Regex("{iktatoSzam}|{vonalkod}"), iktatoszam, options);
var saveFormat = (isDoc) ? Aspose.Words.SaveFormat.Doc : Aspose.Words.SaveFormat.Docx;
doc.Save(ret, saveFormat);
ret.Position = 0;
generaltDokumentum.Tartalom = ret.ToArray();
}
return generaltDokumentum;
}
private static IDokumentum IktatoszamVonalkodExcelKitoltes(IDalHandler handler, int generaltDokumentumId, string iktatoszam)
{
IDokumentum generaltDokumentum = handler.DokumentumDal().Get(generaltDokumentumId);
using (var ms = new MemoryStream(generaltDokumentum.Tartalom))
{
Aspose.Cells.Workbook workbook = new Aspose.Cells.Workbook(ms);
foreach (var worksheet in workbook.Worksheets)
{
worksheet.PageSetup.SetFooter(0, string.Format("&16{0}", iktatoszam));
worksheet.PageSetup.SetFooter(2, string.Format("&\"Code 128\"&20{0}", iktatoszam));
}
var ret = workbook.SaveToStream();
generaltDokumentum.Tartalom = ret.GetBuffer();
}
return generaltDokumentum;
}
private static IDokumentum IktatoszamVonalkodExcelXKitoltes(IDalHandler handler, int generaltDokumentumId, string iktatoszam)
{
IDokumentum generaltDokumentum = handler.DokumentumDal().Get(generaltDokumentumId);
using (var ms = new MemoryStream(generaltDokumentum.Tartalom))
{
Aspose.Cells.Workbook workbook = new Aspose.Cells.Workbook(ms, new Aspose.Cells.LoadOptions(Aspose.Cells.LoadFormat.Xlsx));
foreach (var worksheet in workbook.Worksheets)
{
worksheet.PageSetup.SetFooter(0, string.Format("&16{0}", iktatoszam));
worksheet.PageSetup.SetFooter(2, string.Format("&\"Code 128\"&20{0}", iktatoszam));
}
var ret = new MemoryStream();
workbook.Save(ret, Aspose.Cells.SaveFormat.Xlsx);
ret.Seek(0, SeekOrigin.Begin);
generaltDokumentum.Tartalom = ret.ToArray();
}
return generaltDokumentum;
}
private static IDokumentum IktatoszamVonalkodPlaceholderKitoltes(IDalHandler handler, int generaltDokumentumId, string iktatoszam)
{
IDokumentum generaltDokumentum = handler.DokumentumDal().Get(generaltDokumentumId);
using (var ms = new MemoryStream(generaltDokumentum.Tartalom))
using (var ret = new MemoryStream())
{
Aspose.Pdf.Document doc = new Aspose.Pdf.Document(ms);
var fragmentAbsober = new Aspose.Pdf.Text.TextFragmentAbsorber("{iktatoSzam}");
doc.Pages.Accept(fragmentAbsober);
var fragmentCollection = fragmentAbsober.TextFragments;
foreach (var text in fragmentCollection)
{
text.Text = iktatoszam;
text.TextState.ForegroundColor = Aspose.Pdf.Color.Black;
}
fragmentAbsober.Phrase = "{vonalkod}";
doc.Pages.Accept(fragmentAbsober);
fragmentCollection = fragmentAbsober.TextFragments;
var code128Path = System.Web.Hosting.HostingEnvironment.MapPath("~/fonts/code128.ttf");
var font = Aspose.Pdf.Text.FontRepository.OpenFont(code128Path);
foreach (var text in fragmentCollection)
{
text.Text = iktatoszam;
text.TextState.Font = font;
text.TextState.ForegroundColor = Aspose.Pdf.Color.Black;
}
//foreach (var page in doc.Pages)
//{
// Aspose.Pdf.Text.TextBuilder textBuilder = new Aspose.Pdf.Text.TextBuilder(page);
// Aspose.Pdf.Text.TextFragment textFragment = new Aspose.Pdf.Text.TextFragment("Laci");
// if (page.Footer == null)
// {
// Aspose.Pdf.HeaderFooter footer = new Aspose.Pdf.HeaderFooter();
// page.Footer = footer;
// }
// page.Footer.Paragraphs.Add(textFragment);
//}
doc.Save(ret);
generaltDokumentum.Tartalom = ret.ToArray();
}
return generaltDokumentum;
}
private static string GetDisplayName<T>(T enumValue) where T : Enum
{
string result;
FieldInfo fieldInfo = enumValue.GetType().GetField(enumValue.ToString());
DisplayAttribute[] displayAttributeArray = (DisplayAttribute[])fieldInfo.GetCustomAttributes(typeof(DisplayAttribute), false);
if (displayAttributeArray.Length > 0)
{
result = displayAttributeArray[0].GetName();
return result;
}
result = enumValue.ToString();
return result;
}
}
}