public XmlDocument CheckPassHolderData(string surname, string forename, string dateOfBirth, string postcode, string ISRN) { if (log.IsInfoEnabled) { log.Info("Received request to search for cardholder data. ISRN:" + ISRN); } logParams(surname, forename, dateOfBirth, postcode, ISRN); // Call old method for now... //CTSelf_WS self = new CTSelf_WS(); //return self.CheckPassHolderData(surname, forename, dateOfBirth, postcode, ISRN); // Redundant code here to be implemented with SmartCitizen switch. if (log.IsDebugEnabled) { log.Debug("Trimming spaces"); } surname = surname.Trim(); forename = forename.Trim(); dateOfBirth = dateOfBirth.Trim(); postcode = postcode.Trim(); ISRN = ISRN.Trim(); if (log.IsDebugEnabled) { log.Debug("Spaces Trimmed."); } XmlDocument responseDoc = new XmlDocument(); responseDoc.Load(appDataPath + "CTSelfPassSearchResponse.xml"); //Parse the DoB String DateTime parsedDob; if (log.IsDebugEnabled) { log.Debug("Parsing Date:" + dateOfBirth); } if (DateTime.TryParse(dateOfBirth, out parsedDob) == false) { throw new ArgumentException("Date: " + dateOfBirth + " is not a valid Date."); } //Validating a passholder on SC takes five steps if any of the first three fail, return a 'not found' response.: //1. Check Cardholder Exists try { if (log.IsDebugEnabled) { log.Debug("Checking Cardholder Exists"); } SmartCitizenConnector dataLayer = new SmartCitizenConnector(); CTPassHolder[] searchResults; searchResults = dataLayer.SearchPassHolders(surname, forename, dateOfBirth, postcode, ISRN); if (searchResults.Length == 0) { //Search for an initial, but all other values match... searchResults = dataLayer.SearchPassHolders(surname, forename[0].ToString(), dateOfBirth, postcode, ISRN); } //No match found for initial. Search for forename, without DoB if (searchResults.Length == 0) { searchResults = dataLayer.SearchPassHolders(surname, forename, String.Empty, postcode, ISRN); } // No match found for forename, no DoB. Search for initial without DoB if (searchResults.Length == 0) { searchResults = dataLayer.SearchPassHolders(surname, forename[0].ToString(), String.Empty, postcode, ISRN); } //If we still have no unique matches, return a not found response. if (searchResults.Length == 0) { return(responseDoc); } if (log.IsDebugEnabled) { if (log.IsDebugEnabled) { log.Debug(searchResults.Length + " results returned"); } if (log.IsDebugEnabled) { log.Debug("Output of results:"); } foreach (CTPassHolder searchResult in searchResults) { try { if (log.IsDebugEnabled) { log.Debug(SerializeObj(searchResult)); } } catch (Exception ex) { if (log.IsErrorEnabled) { log.Error("Could not serialize object:" + ex.Message); } } } } CTPassHolder passHolder = new CTPassHolder(); for (int i = 0; i < searchResults.Length; i++) { if (searchResults[i].CtPass.ISRN == ISRN) { passHolder = searchResults[i]; } break; } if (passHolder.RecordID > 0) { if (log.IsInfoEnabled) { log.Info("Result found for ISRN:" + ISRN); } if (log.IsDebugEnabled) { log.Debug("Passholder data and ISRN match. Returning Customer Data."); } if (log.IsDebugEnabled) { log.Debug("Passholder details:" + SerializeObj(passHolder)); } //4. Return pass holder data: responseDoc.SelectSingleNode("result/recordId").InnerText = passHolder.RecordID.ToString(); responseDoc.SelectSingleNode("result/title").InnerText = passHolder.Title; responseDoc.SelectSingleNode("result/foreName").InnerText = passHolder.FirstNameOrInitial; responseDoc.SelectSingleNode("result/resultsFound").InnerText = "1"; //Reformat Dob to Firmstep pattern if (passHolder.DateOfBirth != null) { responseDoc.SelectSingleNode("result/dob").InnerText = passHolder.DateOfBirth.Value.ToString("yyyy-MM-dd"); } switch (passHolder.CtPass.PassType) { case CTPassType.Age: responseDoc.SelectSingleNode("result/passType").InnerText = "Age"; break; case CTPassType.Disabled: responseDoc.SelectSingleNode("result/passType").InnerText = "Disabled"; responseDoc.SelectSingleNode("result/disabledPassType").InnerText = "Permanent"; break; case CTPassType.DisabledTemporary: responseDoc.SelectSingleNode("result/passType").InnerText = "Disabled"; responseDoc.SelectSingleNode("result/disabledPassType").InnerText = "Temporary"; break; } if (passHolder.DisabilityCategory != '\0') { responseDoc.SelectSingleNode("result/disabilityCategory").InnerText = passHolder.DisabilityCategory.ToString(); } responseDoc.SelectSingleNode("result/expiryDate").InnerText = passHolder.CtPass.ExpiryDate.ToString("yyyy-MM-dd"); responseDoc.SelectSingleNode("result/gender").InnerText = passHolder.Gender; if (passHolder.PhotoAssociated == 'Y') { responseDoc.SelectSingleNode("result/hasPhoto").InnerText = "true"; responseDoc.SelectSingleNode("result/passHolderPhotograph").InnerText = Convert.ToBase64String(passHolder.PhotographBytes); } else { responseDoc.SelectSingleNode("result/hasPhoto").InnerText = "false"; } if (passHolder.PostCode != String.Empty) { responseDoc.SelectSingleNode("result/SCpostcode").InnerText = passHolder.PostCode; } responseDoc.SelectSingleNode("result/searchISRN").InnerText = ISRN; responseDoc.SelectSingleNode("result/searchSurname").InnerText = surname; responseDoc.SelectSingleNode("result/searchPostcode").InnerText = postcode; } else { if (log.IsDebugEnabled) { log.Debug("Supplied pass number does not match passholder's latest pass number."); } if (log.IsInfoEnabled) { log.Info("No results found for ISRN:" + ISRN); } } } catch (Exception ex) { if (log.IsErrorEnabled) { log.Error(ex.Message); } return(responseDoc); } if (log.IsDebugEnabled) { log.Debug("Returning Pass Data:" + responseDoc.OuterXml); } if (log.IsDebugEnabled) { log.Debug("Exiting"); } return(responseDoc); }
public XmlDocument UpdateAndRenewPass(int RecordId, string Title, string ForeName, string Gender, string DateOfBirth, string DisabilityCategory, int caseNumber) { if (log.IsInfoEnabled) { log.Info("Request to renew pass received for RecordID [" + RecordId + "]*"); } logParams(RecordId, Title, ForeName, DateOfBirth, DisabilityCategory, caseNumber); if (log.IsDebugEnabled) { log.Debug("Gender:" + Gender); } if (log.IsDebugEnabled) { log.Debug("Initialising response document."); } XmlDocument response = new XmlDocument(); if (log.IsDebugEnabled) { log.Debug("Response document initialised."); } if (log.IsDebugEnabled) { log.Debug("Initialising connection to the data layer"); } CT_DataLayerSoapClient dataLayer = new CT_DataLayerSoapClient(); if (log.IsDebugEnabled) { log.Debug("Data Layer initialised."); } if (log.IsDebugEnabled) { log.Debug("Retrieving existing record By ID."); } CTPassHolder existingPassHolderRecord = dataLayer.RetrieveDataByID(RecordId); if (log.IsDebugEnabled) { log.Debug("Passholder retrieved. Updating record."); } try { if (existingPassHolderRecord.Title != Title) { existingPassHolderRecord.Title = Title; } if (existingPassHolderRecord.FirstNameOrInitial.Length <= 1) { existingPassHolderRecord.FirstNameOrInitial = ForeName; } if (log.IsDebugEnabled) { log.Debug("Passholder Gender before tampering:" + existingPassHolderRecord.Gender); } if (existingPassHolderRecord.Gender != Gender) { existingPassHolderRecord.Gender = Gender; } if (existingPassHolderRecord.DateOfBirth != DateTime.Parse(DateOfBirth)) { existingPassHolderRecord.DateOfBirth = DateTime.Parse(DateOfBirth); } if (DisabilityCategory != String.Empty) { existingPassHolderRecord.DisabilityCategory = DisabilityCategory[0]; } existingPassHolderRecord.CtPass.ExpiryDate = calculateNewExpiryDate(existingPassHolderRecord.CtPass.PassType, DateOfBirth, String.Empty); if (log.IsDebugEnabled) { log.Debug("Pass Holder Record updated. Saving to Data Layer."); } } catch (Exception ex) { if (log.IsErrorEnabled) { log.Error("Error updating existing pass record for recordID [" + RecordId + "]"); } if (log.IsErrorEnabled) { log.Error(ex.Message); } response.LoadXml("<result>Fail</result>"); return(response); } if (log.IsDebugEnabled) { log.Debug("Existing Gender:" + existingPassHolderRecord.Gender); } dataLayer.UpdateAndRenewPass(existingPassHolderRecord, caseNumber); if (log.IsInfoEnabled) { log.Info("Pass renew request processed. Returning response."); } response.LoadXml("<result>Success</result>"); return(response); }