Ejemplo n.º 1
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));
        }
Ejemplo n.º 2
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));
        }