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 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 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 kontenerElemStatuszokList = responseModel.KontenerStatusz.KontenerElemStatuszok.ToList(); List hibasKontenerElemStatuszokList = kontenerElemStatuszokList.Where(y => y.StatuszInfo.StatuszKod.Contains("ERR")).ToList(); List 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 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 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 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); }); } } }