kreta/Kreta.BusinessLogic/Helpers/KirExportHelper.cs
2024-03-13 00:33:46 +01:00

195 lines
9 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.BusinessLogic.Utils;
using Kreta.Client.Kir;
using Kreta.Client.Kir.Interfaces;
using Kreta.Client.Kir.KirModels;
using Kreta.Client.Kir.Models;
using Kreta.Client.Kir2Service;
using Kreta.Core.ConnectionType;
using Kreta.DataAccess.Interfaces;
using Kreta.DataAccessManual;
using Kreta.DataAccessManual.Interfaces;
namespace Kreta.BusinessLogic.Helpers
{
public class KirExportHelper : LogicBase
{
private IKirClient _kirClient;
public KirExportHelper(IConnectionType connectionType) : base(connectionType) { }
public void KirLogin(KirLoginCo loginCo, string felhasznaloNevCacheKey, string jelszoCacheKey, string kirTokenCacheKey)
{
IKirAuthentication kirAuthentication = new KirAuthentication(KirLoginCo.ConvertCoToKirModel(loginCo), felhasznaloNevCacheKey, jelszoCacheKey);
_kirClient = new KirClient(kirAuthentication, kirTokenCacheKey);
}
public void KirSzinkronForTanulo(KirLoginCo loginCo, List<KirNebuloCo> kirNebuloList, string felhasznaloNevCacheKey, string jelszoCacheKey, string kirTokenCacheKey, string iarAzonosito)
{
if (_kirClient == null)
{
KirLogin(loginCo, felhasznaloNevCacheKey, jelszoCacheKey, kirTokenCacheKey);
}
string kontenerId;
var statuszRequestModel = new KirKerelemModel.StatuszLekerdezesRequestModel
{
IARAzonosito = iarAzonosito,
};
Dal.CustomConnection.Run(ConnectionType, h =>
{
if (kirNebuloList.Count > 0)
{
kontenerId = Guid.NewGuid().ToString("N").Remove(25);
var kerelemXml = new KerelemXMLType
{
Item = new KIR2SznyTanuloJogviszonyBejelentesKerelemType
{
KerelemFej = new KerelemFejType
{
RogzitoKliens = new Client.Kir.KirModels.stringWithStringId { id = "Kreta", Value = "String" },
RogzitoNeve = new stringWithId { id = 0, Value = loginCo.FelhasznaloNev },
RogzitesDatuma = DateTime.Now,
KliensId = FelhasznaloId.ToString()
},
TanuloJogviszonyBejelentesek = new TanuloJogviszonyBejelentesekType
{
TanuloJogviszonyBejelentes = KirNebuloCo.ConvertNebuloToKirNebulo(h, kirNebuloList, IntezmenyId, TanevId),
}
}
};
string kirXmlString = CommonUtils.SerializeXmlFromClass(kerelemXml);
byte[] plainTextBytes = Encoding.UTF8.GetBytes(kirXmlString);
string base64EncodedXml = Convert.ToBase64String(plainTextBytes);
var kerelemBekuldesRequestModel = new KirKerelemModel.BekuldesRequestModel()
{
KontenerId = kontenerId,
IARAzonosito = iarAzonosito,
CelSzolgaltatasType = Client.Kir2Service.CelSzolgaltatasType.KIR2SZNYTJVB,
Idopont = DateTime.Now,
KerelemXml = base64EncodedXml
};
KirKerelemModel.BekuldesResponseModel responseModel = _kirClient.KerelemBekuldese(kerelemBekuldesRequestModel);
InsertKirKontener(kerelemBekuldesRequestModel, responseModel.Valaszkod, h);
InsertKirKontenerElem(kirNebuloList.Select(x => x.Id).ToList(), kontenerId, h);
}
GetFelhasznaloAktivKontenerId(h).ForEach(aktivKontenerId =>
{
statuszRequestModel.KontenerId = aktivKontenerId;
KirKerelemModel.StatuszLekerdezesResponseModel responseModel = _kirClient.KerelemStatuszLekerdezes(statuszRequestModel);
InsertKirKontenerStatusz(aktivKontenerId, responseModel, h);
SetNebuloKirStatusz(responseModel, GetNebuloFromKontener(aktivKontenerId, h), IntezmenyId, h);
});
});
}
private void SetNebuloKirStatusz(KirKerelemModel.StatuszLekerdezesResponseModel responseModel, List<int> kirNebuloList, int intezmenyId, IDalHandler h)
{
Client.Kir2Service.KontenerStatuszType kontenerResponse = responseModel.KontenerStatusz;
var nebuloStatuszList = new List<(int NebuloId, int? KontenerStatuszKod, string KontenerElemStatuszKod)>();
kirNebuloList.ForEach(nebuloId =>
{
if (responseModel.KontenerStatusz.KontenerElemStatuszok == null)
{
nebuloStatuszList.Add((nebuloId, kontenerResponse.KontenerStatuszKod, (string)null));
}
else
{
List<Client.Kir2Service.KontenerElemStatuszType> kontenerElemStatuszokList = responseModel.KontenerStatusz.KontenerElemStatuszok.ToList();
List<Client.Kir2Service.KontenerElemStatuszType> hibasKontenerElemStatuszokList = kontenerElemStatuszokList.Where(y => y.StatuszInfo.StatuszKod.Contains("ERR")).ToList();
List<Client.Kir2Service.KontenerElemStatuszType> hibatlanKontenerElemStatuszokList = kontenerElemStatuszokList.Where(y => y.StatuszInfo.StatuszKod == "KEZ").ToList();
hibasKontenerElemStatuszokList.ForEach(x =>
hibatlanKontenerElemStatuszokList.RemoveAll(y => y.KontenerElemID == x.KontenerElemID)
);
hibatlanKontenerElemStatuszokList.ForEach(x =>
nebuloStatuszList.Add((Convert.ToInt32(x.KontenerElemID), (int?)null, x.StatuszInfo.StatuszKod))
);
hibasKontenerElemStatuszokList.ForEach(x =>
nebuloStatuszList.Add((Convert.ToInt32(x.KontenerElemID), (int?)null, x.StatuszInfo.StatuszKod.Remove(0, 3)))
);
}
});
nebuloStatuszList.ForEach(nebuloStatusz =>
{
h.Nebulo().SetNebuloKirStatusz(nebuloStatusz.NebuloId, nebuloStatusz.KontenerStatuszKod != null ? nebuloStatusz.KontenerStatuszKod.ToString() : nebuloStatusz.KontenerElemStatuszKod, intezmenyId, TanevId);
});
}
private List<int> GetNebuloFromKontener(string kontenerId, IDalHandler h)
{
return h.Nebulo().GetNebuloFromKontener(kontenerId);
}
private void InsertKirKontener(KirKerelemModel.BekuldesRequestModel kirKontener, string kontenerValaszkod, IDalHandler h)
{
IKirKontenerDAL dal = h.KirKontenerDAL();
IKIRKontener entity = dal.Get();
entity.CelSzolgaltatas = kirKontener.CelSzolgaltatasType.ToString();
entity.IARAzonosito = kirKontener.IARAzonosito;
entity.KontenerId = kirKontener.KontenerId;
entity.IntezmenyAzonosito = IntezmenyAzonosito;
entity.ValaszKod = kontenerValaszkod;
entity.FelhasznaloId = FelhasznaloId;
dal.Insert(entity);
}
private List<string> GetFelhasznaloAktivKontenerId(IDalHandler h)
{
return h.KirKontenerDAL().GetFelhasznaloAktivKontenerId(FelhasznaloId, IntezmenyId, TanevId);
}
private void InsertKirKontenerStatusz(string kontenerId, KirKerelemModel.StatuszLekerdezesResponseModel statuszResponseModel, IDalHandler h)
{
IKirKontenerDAL kirKontenerDal = h.KirKontenerDAL();
IKirKontenerStatuszDAL kirKontenerStatusz = h.KirKontenerStatuszDAL();
IKirKontenerElemStatuszDAL kirKontenerElemStatusz = h.KirKontenerElemStatuszDAL();
IKIRKontener kirKontener = kirKontenerDal.GetByFelhasznalo(FelhasznaloId, IntezmenyAzonosito, kontenerId);
kirKontenerStatusz.InsertByKirKontener(kirKontener, statuszResponseModel);
if (statuszResponseModel.KontenerStatusz.KontenerElemStatuszok != null)
{
kirKontenerElemStatusz.InsertManyByKirKontener(kirKontener, statuszResponseModel);
}
}
private void InsertKirKontenerElem(List<int> nebuloIdList, string kontenerId, IDalHandler h)
{
IKirKontenerDAL kirKontenerDal = h.KirKontenerDAL();
nebuloIdList.ForEach(nebuloId =>
{
IKirKontenerElemDAL dal = h.KirKontenerElemDAL();
IKIRKontenerElem entity = dal.Get();
entity.KIRKontenerId = kirKontenerDal.GetByFelhasznalo(FelhasznaloId, IntezmenyAzonosito, kontenerId).ID;
entity.KontenerElemId = nebuloId;
entity.NebuloId = nebuloId;
dal.Insert(entity);
});
}
}
}