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);
            }
        }
Beispiel #2
0
        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");
                }
            }
        }