using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Xml.Linq; namespace Neo.LegitimateLicences.Common { public class OlasXmlHelper { #region GetActiveLicence public static OlasData GetActiveLicence(string sourceXml) { var list = GetLicences(sourceXml, true); return (list.Count() == 1) ? list.First() : null; } #endregion #region GetLicences public static List GetLicences(string sourceXml, bool activeOnly = false) { var sourceXML = new XDocument(); var list = new List(); #region read XML from precheckDetail into sourceXML using (var stream = new MemoryStream()) { using (var writer = new StreamWriter(stream)) { writer.Write(sourceXml); writer.Flush(); stream.Position = 0; if (stream.Length > 0) { sourceXML = XDocument.Load(stream); } } } #endregion if (sourceXML != null) { var applications = sourceXML.Descendants("application"); var applicant = new XElement("applicant"); var vehicle = new XElement("vehicle"); var relatedPermitNumber = ""; var foundApplication = false; var issue = 1; foreach (var application in applications) { foreach (var licence in application.Descendants("licence")) { var isActive = (licence.Element("active") != null) ? ((bool)licence.Element("active")) : false; var licenceStatus = (licence.Element("licencestatus") != null) ? ((string)licence.Element("licencestatus")) : ""; var isUplifted = (licenceStatus.ToLower() == "uplifted"); applicant = application.Element("applicant"); vehicle = licence.Element("vehicle"); var olasData = new OlasData() { ApplicantIdNumber = (applicant != null && applicant.Element("idnumber") != null) ? (string)applicant.Element("idnumber") : "", ApplicantName = (applicant != null && applicant.Element("firstname") != null && applicant.Element("lastname") != null) ? (string)applicant.Element("firstname") + " " + (string)applicant.Element("lastname") : "", ApplicationDate = (applicant != null && application.Element("applicationdate") != null) ? (DateTime)application.Element("applicationdate") : new DateTime(1900, 1, 1), ApplicationNumber = (applicant != null && application.Element("applicationnumber") != null) ? (string)application.Element("applicationnumber") : "", LicenceActive = (licence != null && licence.Element("active") != null) ? (bool)licence.Element("active") : false, LicenceCertificateNumber = (licence != null && licence.Element("certificatenumber") != null) ? (string)licence.Element("certificatenumber") : "", LicenceDate = (licence != null && licence.Element("licencedate") != null) ? (DateTime)licence.Element("licencedate") : new DateTime(2020, 1, 1), LicenceEndDate = (licence != null && licence.Element("enddate") != null) ? (DateTime)licence.Element("enddate") : new DateTime(2020, 1, 1), LicenceStartDate = (licence != null && licence.Element("startdate") != null) ? (DateTime)licence.Element("startdate") : new DateTime(2020, 1, 1), LicenceNumber = (licence != null && licence.Element("licencenumber") != null) ? (string)licence.Element("licencenumber") : "", LicenceStatus = (licence != null && licence.Element("licencestatus") != null) ? (string)licence.Element("licencestatus") : "", RelatedPermitNumber = (licence != null && licence.Element("relatedPermitNumber") != null && ((string)licence.Element("relatedPermitNumber")) != "") ? (string)licence.Element("relatedPermitNumber") : relatedPermitNumber, VehicleChassisNumber = (vehicle != null && vehicle.Element("chassisnumber") != null) ? (string)vehicle.Element("chassisnumber") : "", VehicleEngineNumber = (vehicle != null && vehicle.Element("enginenumber") != null) ? (string)vehicle.Element("enginenumber") : "", VehicleMake = (vehicle != null && vehicle.Element("vehiclemake") != null) ? (string)vehicle.Element("vehiclemake") : "", VehicleRegistrationNumber = (vehicle != null && vehicle.Element("registrationnumber") != null) ? (string)vehicle.Element("registrationnumber") : "" }; olasData.LicenceIssueNumber = issue; issue++; if (licence.Element("relatedPermitNumber") != null) { relatedPermitNumber = (string)licence.Element("relatedPermitNumber"); } if (activeOnly) { if (isActive && isUplifted) { list.Add(olasData); foundApplication = true; break; } } else { list.Add(olasData); } } if (foundApplication && activeOnly) { break; } } } return list.OrderBy(a => a.ApplicationDate).ToList(); } #endregion } #region OlasData Class public class OlasData { public string ApplicationNumber { get; set; } public DateTime ApplicationDate { get; set; } public string ApplicantIdNumber { get; set; } public string ApplicantName { get; set; } public string LicenceNumber { get; set; } public string LicenceStatus { get; set; } public DateTime LicenceDate { get; set; } public DateTime LicenceStartDate { get; set; } public DateTime LicenceEndDate { get; set; } public int LicenceIssueNumber { get; set; } public string LicenceCertificateNumber { get; set; } public bool LicenceActive { get; set; } public string RelatedPermitNumber { get; set; } public string VehicleMake { get; set; } public string VehicleRegistrationNumber { get; set; } public string VehicleChassisNumber { get; set; } public string VehicleEngineNumber { get; set; } } #endregion }