using BuddyFinance.MEF.Concepts; using BuddyFinance.MEF.Contracts; using BuddyFinance.MEF.Enums; using System; using System.Collections.Generic; using System.ComponentModel.Composition; using System.Linq; using System.Text; using System.Threading.Tasks; using BuddyFinance.Integration.Transunion.Mappers; using BuddyFinance.Model; using BuddyFinance.Integration.Models.Enums; using System.IO; using System.Xml; using System.Xml.Serialization; namespace BuddyFinance.Integration.Transunion { [Export(typeof(ICreditBureauIntegrator))] public class Integrator: ICreditBureauIntegrator { public CreditBureauEnum CreditBureau => CreditBureauEnum.TransUnion; public GetCustomerCreditProfileResult GetCustomerCreditProfile(GetCustomerCreditProfileRequest request) { using(var db = new BuddyFinanceDBEntities()) using (var client = new TransUnionService.ConsumerSoapClient()) { var profile = db.Profiles.FirstOrDefault(i => i.IdentificationNumber == request.IdentityNumber); var buddyFinance = db.Profiles.FirstOrDefault(i => i.Lender == null && i.Borrower != null); if (profile == null) return new GetCustomerCreditProfileResult { ErrorCode = 1, Message = "Customer profile not found in Buddy Finance." }; var enquiry = profile.ToBureauEnquiry01(buddyFinance, db.GlobalSetups.FirstOrDefault()); var r = new RequestLog { Id = 0, ResponseMessage = "", ResponseCode = "", ResponseXML = "", RequestXML = GetXMLFromObject(enquiry), RequestType = RequestTypeEnum.CreditBureau.ToString(), Timestamp = DateTime.Now }; db.RequestLogs.Add(r); db.SaveChanges(); try { var response = client.ProcessRequestTrans01(enquiry); r.ResponseXML = GetXMLFromObject(response); r.ResponseCode = response.ErrorCode; r.ResponseMessage = response.ErrorMessage; db.Entry(r).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); return response.ToCustomerCreditProfile(); } catch(Exception ex) { r.ResponseXML = GetXMLFromObject(ex); r.ResponseCode = "EXCEPTION"; r.ResponseMessage = ex.Message; db.Entry(r).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); throw ex; } } } public string GetXMLFromObject(object o) { StringWriter sw = new StringWriter(); XmlTextWriter tw = null; try { XmlSerializer serializer = new XmlSerializer(o.GetType()); tw = new XmlTextWriter(sw); serializer.Serialize(tw, o); } catch (Exception ex) { //Handle Exception Code } finally { sw.Close(); if (tw != null) { tw.Close(); } } return sw.ToString(); } public UpdateCustomerCreditProfileResult UpdateCustomerCreditProfile(UpdateCustomerCreditProfileRequest request) { return new UpdateCustomerCreditProfileResult(); } } }