public static Mapping GetMappingForBlz(string blz, string routingTableFilePath, string taxonomyName, bool isTest = false) { DateTime date = DateTime.Now.Date; XmlNodeList blzNodes = GetBlzNode(blz, routingTableFilePath); Mapping blzMapping = null; foreach (XmlNode node in blzNodes) { IfpMapping mapping = BuildMapping(node.ParentNode); if (mapping.ValidFrom >= date && mapping.ValidTo <= date && mapping.Umgebung == UmgebungType.test == isTest) { blzMapping = mapping; break; } } if (blzMapping == null) { throw new NullReferenceException($"BLZ {blz} not found in mapping table."); } return(blzMapping); }
public static void Read(string relativePath) { string absolutePath = PathHelper.GetAbsolutePath(relativePath); Mappings = new List <IfpMapping>(); XmlDocument doc = new XmlDocument(); doc.Load(absolutePath); if (doc.DocumentElement != null) { foreach (XmlNode mappingNode in doc.DocumentElement.ChildNodes) { if (mappingNode.Name == "Mapping") { IfpMapping mapping = BuildMapping(mappingNode); Mappings.Add(mapping); } } } }
public RequestResult SendData(Software channelSoftware, bool isTest = false) { if (!IfpClientSettings.IsAutoDownloadRoutingTableFileDisabled) { var baseSettingsDirPath = new FileInfo(_ifpSettingsFilePath).DirectoryName; var downloadedRemoteFileLastWriteDate = IfpClientSettings.RemoteDownloadInstituteMappingTestFileLastWriteDate; if (!isTest) { downloadedRemoteFileLastWriteDate = IfpClientSettings.RemoteDownloadInstituteMappingProdFileLastWriteDate; } var mappingFilePath = RoutingTableReader.DownloadInstituteMappingFileFromSftpServerIfNewer( IfpClientSettings.SftpSchufaFilesUserName, IfpClientSettings.SftpSchufaFilesPassword, isTest, baseSettingsDirPath, downloadedRemoteFileLastWriteDate, out var remoteFileLastWriteDate, HttpProxySettings.HttpProxyAddresUri, HttpProxySettings.UserName, HttpProxySettings.Password ); if (remoteFileLastWriteDate.HasValue) { IfpClientSettings.RoutingTableFilePath = mappingFilePath; if (isTest) { IfpClientSettings.RemoteDownloadInstituteMappingTestFileLastWriteDate = remoteFileLastWriteDate; } else { IfpClientSettings.RemoteDownloadInstituteMappingProdFileLastWriteDate = remoteFileLastWriteDate; } IfpClientSettings.Save(); } } RoutingTableReader.Read(IfpClientSettings.RoutingTableFilePath); if (RoutingTableReader.Mappings == null) { throw new NullReferenceException("Die Routing-Tabelle konnte nicht ausgelesen werden. " + "Bitte überprüfen Sie in den allgemeinen Einstellungen, " + "ob der Pfad zur Mappingdatei korrekt gesetzt wurde."); } if (!ElbaInformation.BalanceInformation.Any() || ElbaInformation.BalanceInformation.First().GetFirstXmlDocument() == null) { throw new NullReferenceException("Keine XBRL-Datei zum Übermitteln gefunden. " + "Bitte geben Sie unter den Abschlussinformationen eine XBRL-Instanz an."); } ns2BilanzdatenTyp elbaData = ElbaInformation.ToElbaData(); if (!elbaData.Abschluss.Any()) { throw new ArgumentException("Es wurden keine Abschlüsse zum Übermiteln gefudnen. " + "Bitte geben Sie mindestens einen Abschluss an."); } if (IfpClientSettings.ValidateIfpData) { RequestValidator validator = new RequestValidator(elbaData); validator.Validate(); if (!validator.AnfrageBearbeitet) { return(new RequestResult(validator.CreateQuittung(), true)); } } if (IfpClientSettings.ValidateGcdData) { GcdDataValidator validator = new GcdDataValidator(); if (!validator.Validate(elbaData)) { return(new RequestResult(validator.ResultMessages, true)); } } IfpMapping recieverMapping = null; Version recieverVersion = null; DateTime date = DateTime.Now.Date; string taxonomyName = elbaData.Abschluss.First().Taxonomie; foreach (IfpMapping mapping in RoutingTableReader.Mappings) { if (mapping.BLZ == ElbaInformation.RecieverInformation.BankId.Value && mapping.ValidFrom <= date && mapping.ValidTo >= date && mapping.Umgebung == UmgebungType.test == isTest) { foreach (Version version in mapping.Version) { foreach (Taxonomie taxonomy in version.Taxonomie) { if (taxonomy.name == taxonomyName && (string.IsNullOrEmpty(taxonomy.Gueltig_ab) || DateTime.Parse(taxonomy.Gueltig_ab) <= date) && (string.IsNullOrEmpty(taxonomy.Gueltig_bis) || DateTime.Parse(taxonomy.Gueltig_bis) >= date)) { recieverMapping = mapping; recieverVersion = version; break; } } } } } if (recieverMapping == null) { throw new ArgumentException( "In der Routing-Tabelle konnte kein Mapping " + $"mit der Bank ID {ElbaInformation.RecieverInformation.BankId.Value} " + $"und der Taxonomie {taxonomyName} gefunden werden." + "Bitte überprüfen Sie, ob die angegebene Bank ID (BLZ) korrekt ist" + "und ob die XBRL-Instanz mit einer unterstützten Taxonomieversion generiert wurde."); } if (recieverVersion == null) { throw new NullReferenceException("In der Routing-Tabelle konnte kein Eintrag " + $"mit der Taxonomieversion '{Version}' gefunden werden. " + "Bitte überprüfen Sie, ob die XBRL-Instanz " + "mit einer unterstützen Taxonomieversion generiert wurde."); } elbaData.Abschluss.First().Software.Erstellung = new ns2SoftwareTyp { Name = channelSoftware.Name, Hersteller = channelSoftware.Manufacturer, Version = channelSoftware.Version, ID = channelSoftware.Id }; elbaData.Abschluss.First().Software.Versand = new ns2SoftwareTyp { Name = channelSoftware.Name, Hersteller = channelSoftware.Manufacturer, Version = channelSoftware.Version, ID = channelSoftware.Id }; ns3QuittungTyp quittung = Client.SendElbaData(channelSoftware.ToChannelData(), elbaData, HeaderIdentity.ToElbaData(), recieverMapping, recieverVersion, HttpProxySettings, IfpClientSettings.CertificateSettings); return(new RequestResult(quittung)); }
private static IfpMapping BuildMapping(XmlNode mappingNode) { IfpMapping mapping = new IfpMapping { date = GetDateAttribute(mappingNode), ValidTo = DateTime.MaxValue }; List <Version> mappingVersions = new List <Version>(); foreach (XmlNode mappingDetails in mappingNode) { if (mappingDetails.Name == "Umgebung") { mapping.Umgebung = GetEnvironment(mappingDetails); } else if (mappingDetails.Name == "Gueltig_ab") { mapping.Gueltig_ab = mappingDetails.InnerText; try { mapping.ValidFrom = XmlConvert.ToDateTime(mapping.Gueltig_ab, XmlDateTimeSerializationMode.Unspecified); } catch (Exception ex) { Debug.WriteLine($"Error while setting ValidFrom date: {ex.Message}{Environment.NewLine}{ex.StackTrace}."); } } else if (mappingDetails.Name == "Gueltig_bis") { mapping.Gueltig_bis = mappingDetails.InnerText; try { mapping.ValidTo = XmlConvert.ToDateTime(mapping.Gueltig_bis, XmlDateTimeSerializationMode.Unspecified); } catch (Exception ex) { Debug.WriteLine($"Error while setting ValidFrom date: {ex.Message}{Environment.NewLine}{ex.StackTrace}."); } } else if (mappingDetails.Name == "BLZ") { mapping.BLZ = mappingDetails.InnerText; } else if (mappingDetails.Name == "BIC") { mapping.BIC = mappingDetails.InnerText; } else if (mappingDetails.Name == "Kontakt") { mapping.Kontakt = new Kontakt(); foreach (XmlNode kontaktDetails in mappingDetails) { if (kontaktDetails.Name == "Mail") { mapping.Kontakt.Mail = kontaktDetails.InnerText; } else if (kontaktDetails.Name == "Telefon") { mapping.Kontakt.Telefon = kontaktDetails.InnerText; } } } else if (mappingDetails.Name == "IFP-ID") { mapping.IFPID = mappingDetails.InnerText; } else if (mappingDetails.Name == "Version") { Version version = new Version { name = GetNameAttribute(mappingDetails) }; List <Taxonomie> versionTaxonomies = new List <Taxonomie>(); foreach (XmlNode versionDetails in mappingDetails) { if (versionDetails.Name == "URL") { version.URL = versionDetails.InnerText; } else if (versionDetails.Name == "Taxonomie") { Taxonomie taxonomie = new Taxonomie { name = GetNameAttribute(versionDetails) }; foreach (XmlNode taxonomieDetails in versionDetails) { if (taxonomieDetails.Name == "Gueltig_ab") { taxonomie.Gueltig_ab = taxonomieDetails.InnerText; } else if (taxonomieDetails.Name == "Gueltig_bis") { taxonomie.Gueltig_bis = taxonomieDetails.InnerText; } } versionTaxonomies.Add(taxonomie); } else if (versionDetails.Name == "Verarbeitungsart") { version.Verarbeitungsart = versionDetails.InnerText; } } version.Taxonomie = versionTaxonomies.ToArray(); mappingVersions.Add(version); mapping.Version = mappingVersions.ToArray(); } } return(mapping); }
public RequestResult SendData(Software channelSoftware, bool isTest = false) { //if (RoutingTableReader.Mappings == null) RoutingTableReader.Read(IfpClientSettings.RoutingTableFilePath); if (RoutingTableReader.Mappings == null) { throw new NullReferenceException("Die Routing-Tabelle konnte nicht ausgelesen werden. " + "Bitte überprüfen Sie in den allgemeinen Einstellungen, " + "ob der Pfad zur Mappingdatei korrekt gesetzt wurde."); } if (!ElbaInformation.BalanceInformation.Any() || ElbaInformation.BalanceInformation.First().GetFirstXmlDocument() == null) { throw new NullReferenceException("Keine XBRL-Datei zum Übermitteln gefunden. " + "Bitte geben Sie unter den Abschlussinformationen eine XBRL-Instanz an."); } ns2BilanzdatenTyp elbaData = ElbaInformation.ToElbaData(); if (!elbaData.Abschluss.Any()) { throw new ArgumentException("Es wurden keine Abschlüsse zum Übermiteln gefudnen. " + "Bitte geben Sie mindestens einen Abschluss an."); } if (IfpClientSettings.ValidateIfpData) { RequestValidator validator = new RequestValidator(elbaData); validator.Validate(); if (!validator.AnfrageBearbeitet) { return(new RequestResult(validator.CreateQuittung(), true)); } } if (IfpClientSettings.ValidateGcdData) { GcdDataValidator validator = new GcdDataValidator(); if (!validator.Validate(elbaData)) { return(new RequestResult(validator.ResultMessages, true)); } } IfpMapping recieverMapping = null; Version recieverVersion = null; DateTime date = DateTime.Now.Date; string taxonomyName = elbaData.Abschluss.First().Taxonomie; foreach (IfpMapping mapping in RoutingTableReader.Mappings) { if (mapping.BLZ == ElbaInformation.RecieverInformation.BankId.Value && mapping.ValidFrom <= date && mapping.ValidTo >= date && mapping.Umgebung == UmgebungType.test == isTest) { foreach (Version version in mapping.Version) { foreach (Taxonomie taxonomy in version.Taxonomie) { if (taxonomy.name == taxonomyName && (string.IsNullOrEmpty(taxonomy.Gueltig_ab) || DateTime.Parse(taxonomy.Gueltig_ab) <= date) && (string.IsNullOrEmpty(taxonomy.Gueltig_bis) || DateTime.Parse(taxonomy.Gueltig_bis) >= date)) { recieverMapping = mapping; recieverVersion = version; break; } } } } } if (recieverMapping == null) { throw new ArgumentException( "In der Routing-Tabelle konnte kein Mapping " + $"mit der Bank ID {ElbaInformation.RecieverInformation.BankId.Value} " + $"und der Taxonomie {taxonomyName} gefunden werden." + "Bitte überprüfen Sie, ob die angegebene Bank ID (BLZ) korrekt ist" + "und ob die XBRL-Instanz mit einer unterstützten Taxonomieversion generiert wurde."); } if (recieverVersion == null) { throw new NullReferenceException("In der Routing-Tabelle konnte kein Eintrag " + $"mit der Taxonomieversion '{Version}' gefunden werden. " + "Bitte überprüfen Sie, ob die XBRL-Instanz " + "mit einer unterstützen Taxonomieversion generiert wurde."); } ns3QuittungTyp quittung = Client.SendElbaData(channelSoftware.ToChannelData(), elbaData, HeaderIdentity.ToElbaData(), recieverMapping, recieverVersion, HttpProxySettings, IfpClientSettings.CertificateSettings); return(new RequestResult(quittung)); }