예제 #1
0
        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);
        }
예제 #2
0
        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);
                    }
                }
            }
        }
예제 #3
0
        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));
        }
예제 #4
0
        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);
        }
예제 #5
0
        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));
        }