private static void OnMessageReceived(IMessage msg) { var textMsg = (ITextMessage)msg; var taxRefNo = ""; var period = ""; var year = ""; try{ var message = textMsg.Text; var doc = new XmlDocument(); doc.LoadXml(message); var ns = new XmlNamespaceManager(doc.NameTable); ns.AddNamespace("soap12", "http://www.w3.org/2003/05/soap-envelope"); ns.AddNamespace("pnsb", "http://www.sars.gov.za/enterpriseMessagingModel/ThirdPartyData/ThirdPartyDataActivityManagement/xml/schemas/version/1.1"); var header = doc.SelectSingleNode("//soap12:Header", ns); var thirdPartyDataActivityManagementRequest = doc.SelectSingleNode("//pnsb:ThirdPartyDataActivityManagementRequest", ns); if (thirdPartyDataActivityManagementRequest != null && header != null) { var dataValidation = IsMneRequestValid(thirdPartyDataActivityManagementRequest.OuterXml); if (!dataValidation.IsValid) { var faultXml = FdrCommon.CreateFaultXml(header.OuterXml, dataValidation.ErrorXml); RespondToMneEnquire(faultXml, textMsg.JMSMessageID); return; } foreach (XmlNode childNode in thirdPartyDataActivityManagementRequest.ChildNodes) { if (childNode.Name.Equals("pnsb:TaxRefNo")) { taxRefNo = childNode.InnerText; continue; } if (childNode.Name.Equals("pnsb:Period")) { period = childNode.InnerText; continue; } if (childNode.Name.Equals("pnsb:Year")) { year = childNode.InnerText; } } } else { return; } var enquireResult = DbReader.Enquire(taxRefNo, year); var correctCbCDeclarationInd = DbReader.CanSubmitCbcDeclaration(taxRefNo, Convert.ToInt32(year)); //row["CorrectCbCDeclarationInd"].ToString(); var correctMasterAndLocalFileInd = DbReader.CanSubmitFileDeclaration(taxRefNo, Convert.ToInt32(year)); //row["CorrectMasterAndLocalFileInd"].ToString(); if (enquireResult.HasRows) { var row = enquireResult[0]; var submitCbCDeclarationInd = row["CbCReportRequiredInd"].ToString(); var submitMasterAndLocalFileInd = row["MasterLocalFileRequiredInd"].ToString(); var response = new ThirdPartyDataActivityManagementResponse { CBC = new ThirdPartyDataActivityManagementResponseCBC { CorrectCbCDeclarationInd = correctCbCDeclarationInd ? YesNoIndType.Y : YesNoIndType.N, CorrectMasterAndLocalFileInd = correctMasterAndLocalFileInd ? YesNoIndType.Y : YesNoIndType.N, SubmitCbCDeclarationInd = submitCbCDeclarationInd.Equals("Y") ? YesNoIndType.Y : YesNoIndType.N, SubmitMasterAndLocalFileInd = submitMasterAndLocalFileInd.Equals("Y") ? YesNoIndType.Y : YesNoIndType.N } }; var xml = Sars.Systems.Serialization.XmlObjectSerializer.GetXmlWithNoDeclaration(response); var messageToSend = CreateXml(header.OuterXml, xml); RespondToMneEnquire(messageToSend, textMsg.JMSMessageID); } else { var response = new ThirdPartyDataActivityManagementResponse { CBC = new ThirdPartyDataActivityManagementResponseCBC { CorrectCbCDeclarationInd = correctCbCDeclarationInd ? YesNoIndType.Y : YesNoIndType.N, CorrectMasterAndLocalFileInd = correctMasterAndLocalFileInd ? YesNoIndType.Y : YesNoIndType.N, SubmitCbCDeclarationInd = YesNoIndType.Y, SubmitMasterAndLocalFileInd = YesNoIndType.Y } }; var xml = Sars.Systems.Serialization.XmlObjectSerializer.GetXmlWithNoDeclaration(response); var messageToSend = CreateXml(header.OuterXml, xml); RespondToMneEnquire(messageToSend, textMsg.JMSMessageID); } try { var properXml = Sars.Systems.Serialization.XmlObjectSerializer.GetXmlWithNoDeclaration(textMsg.Text); DbWriter.SaveMneRequest(msg.JMSMessageID, properXml, taxRefNo, year); } catch (Exception exception) { FdrCommon.LogEvent(exception, EventLogEntryType.Error); } } catch (Exception exception) { FdrCommon.LogEvent(exception, EventLogEntryType.Error); } }
private static void SaveIncomingCbcDeclaration(string message) { var properXml = Sars.Systems.Serialization.XmlObjectSerializer.GetXmlWithNoDeclaration(message); using (var data = new RecordSet()){ data.ReadXml(new StringReader(properXml)); var messageIdentification = data.Tables["MessageIdentification"]; var messageSpec = data.Tables["MessageSpec"]; var contactDetails = data.Tables["ContactDetails"]; if (!data.Tables.Contains("MessageIdentification") || !data.Tables.Contains("MessageSpec") || !data.Tables.Contains("ContactDetails")) { FdrCommon.LogEvent("MessageIdentification OR FormInfo OR ContactDetails is not in this XML"); return; } if (messageIdentification.Rows.Count == 0) { FdrCommon.LogEvent("MessageIdentification has no data"); return; } if (messageSpec.Rows.Count == 0) { FdrCommon.LogEvent("FormInfo has no data"); return; } if (contactDetails.Rows.Count == 0) { FdrCommon.LogEvent("ContactDetails has no data"); return; } var reportingYear = messageSpec.Rows[0]["ReportingPeriod"].ToString().Trim(); var taxRefNo = messageIdentification.Rows[0]["externalReferenceID"].ToString().Trim(); var taxYear = Convert.ToInt32(reportingYear.Length > 4 ? reportingYear.Substring(0, 4) : reportingYear); var surname = contactDetails.Rows[0]["Surname"].ToString().Trim(); var firstNames = contactDetails.Rows[0]["FirstNames"].ToString().Trim(); var busTelNo1 = contactDetails.Rows[0]["BusTelNo1"].ToString().Trim(); var cellNo = contactDetails.Rows[0]["CellNo"].ToString().Trim(); var emailAddress = contactDetails.Rows[0]["EmailAddress"].ToString().Trim(); //string postalAddress = null; DbReader.SaveCBCRequest(properXml, taxRefNo, taxYear, surname, firstNames, busTelNo1, cellNo, emailAddress, null); var roles = DbReader.GetRolesToNotify(); if (roles.HasRows) { var x = (from s in roles.Tables[0].Rows.OfType <DataRow>() select s["EmailAddress"].ToString()).ToArray(); var messageBody = string.Format( File.ReadAllText("CBCArrivalNotification.htm") , taxRefNo , reportingYear , SARSDataSettings.Settings.ApplicationName); FdrCommon.SendEmail(x, messageBody, "CBC Declaration"); } } }