Beispiel #1
0
        } // !_saveAndLoadZUGFeRDInvoice()

        private void _saveAndLoadZUGFeRDInvoiceViaStream()
        {
            InvoiceDescriptor desc = _createInvoice();

            string     path       = "output_stream.xml";
            FileStream saveStream = new FileStream(path, FileMode.Create);

            desc.Save(saveStream);
            saveStream.Close();

            FileStream        loadStream = new FileStream(path, FileMode.Open);
            InvoiceDescriptor desc2      = InvoiceDescriptor.Load(loadStream);

            loadStream.Close();

            Assert.AreEqual(desc2.Profile, Profile.Comfort);
            Assert.AreEqual(desc2.Type, InvoiceType.Invoice);


            // try again with a memory stream
            MemoryStream ms = new MemoryStream();

            desc.Save(ms);

            byte[] data = ms.ToArray();
            string s    = System.Text.Encoding.Default.GetString(data);
        } // !_saveAndLoadZUGFeRDInvoiceViaStream()
Beispiel #2
0
        public void TestWriteTradeLineNetUnitPrice()
        {
            // Read XRechnung
            var path = @"..\..\..\demodata\xRechnung\xrechnung with trade line settlement empty.xml";

            var fileStream = File.Open(path, FileMode.Open);
            var originalInvoiceDescriptor = InvoiceDescriptor.Load(fileStream);

            fileStream.Close();

            // Modifiy trade line settlement data
            originalInvoiceDescriptor.TradeLineItems.Add(new TradeLineItem()
            {
                NetUnitPrice = 25
            });

            originalInvoiceDescriptor.IsTest = false;

            using (var memoryStream = new MemoryStream())
            {
                originalInvoiceDescriptor.Save(memoryStream, ZUGFeRDVersion.Version21, Profile.Basic);
                originalInvoiceDescriptor.Save(@"xrechnung with trade line settlement filled.xml", ZUGFeRDVersion.Version21);

                // Load Invoice and compare to expected
                var invoiceDescriptor = InvoiceDescriptor.Load(memoryStream);
                Assert.AreEqual(25, invoiceDescriptor.TradeLineItems[0].NetUnitPrice);
            }
        }
        public void TestReferenceExtendedInvoice()
        {
            string path = @"..\..\..\demodata\zugferd21\zugferd_2p1_EXTENDED_Warenrechnung-factur-x.xml";

            Stream            s    = File.Open(path, FileMode.Open);
            InvoiceDescriptor desc = InvoiceDescriptor.Load(s);

            s.Close();

            Assert.AreEqual(desc.Profile, Profile.Extended);
            Assert.AreEqual(desc.Type, InvoiceType.Invoice);
            Assert.AreEqual(desc.InvoiceNo, "R87654321012345");
            Assert.AreEqual(desc.TradeLineItems.Count, 6);
            Assert.AreEqual(desc.LineTotalAmount, 457.20m);

            foreach (TradeAllowanceCharge charge in desc.TradeAllowanceCharges)
            {
                Assert.AreEqual(charge.Tax.TypeCode, TaxTypes.VAT);
                Assert.AreEqual(charge.Tax.CategoryCode, TaxCategoryCodes.S);
            }

            Assert.AreEqual(desc.TradeAllowanceCharges.Count, 4);
            Assert.AreEqual(desc.TradeAllowanceCharges[0].Tax.Percent, 19m);
            Assert.AreEqual(desc.TradeAllowanceCharges[1].Tax.Percent, 7m);
            Assert.AreEqual(desc.TradeAllowanceCharges[2].Tax.Percent, 19m);
            Assert.AreEqual(desc.TradeAllowanceCharges[3].Tax.Percent, 7m);

            Assert.AreEqual(desc.ServiceCharges.Count, 1);
            Assert.AreEqual(desc.ServiceCharges[0].Tax.TypeCode, TaxTypes.VAT);
            Assert.AreEqual(desc.ServiceCharges[0].Tax.CategoryCode, TaxCategoryCodes.S);
            Assert.AreEqual(desc.ServiceCharges[0].Tax.Percent, 19m);
        } // !TestReferenceExtendedInvoice()
Beispiel #4
0
        public void TestWriteTradeLineLineID()
        {
            // Read XRechnung
            var path = @"..\..\..\demodata\xRechnung\xrechnung with trade line settlement empty.xml";

            var fileStream = File.Open(path, FileMode.Open);
            var originalInvoiceDescriptor = InvoiceDescriptor.Load(fileStream);

            fileStream.Close();

            // Modifiy trade line settlement data
            originalInvoiceDescriptor.TradeLineItems.RemoveAll(_ => true);

            originalInvoiceDescriptor.AddTradeLineCommentItem("2", "Comment_2");
            originalInvoiceDescriptor.AddTradeLineCommentItem("3", "Comment_3");
            originalInvoiceDescriptor.IsTest = false;

            using (var memoryStream = new MemoryStream())
            {
                originalInvoiceDescriptor.Save(memoryStream, ZUGFeRDVersion.Version21, Profile.Basic);
                originalInvoiceDescriptor.Save(@"xrechnung with trade line settlement filled.xml", ZUGFeRDVersion.Version21);

                // Load Invoice and compare to expected
                var invoiceDescriptor = InvoiceDescriptor.Load(@"xrechnung with trade line settlement filled.xml");

                var firstTradeLineItem = invoiceDescriptor.TradeLineItems[0];
                Assert.AreEqual("2", firstTradeLineItem.LineID);

                var secondTradeLineItem = invoiceDescriptor.TradeLineItems[1];
                Assert.AreEqual("3", secondTradeLineItem.LineID);
            }
        }
Beispiel #5
0
        public void TestStoringInvoiceViaStreams()
        {
            InvoiceDescriptor desc = this.InvoiceProvider.CreateInvoice();

            string     path       = "output_stream.xml";
            FileStream saveStream = new FileStream(path, FileMode.Create);

            desc.Save(saveStream, ZUGFeRDVersion.Version1, Profile.Comfort);
            saveStream.Close();

            FileStream        loadStream = new FileStream(path, FileMode.Open);
            InvoiceDescriptor desc2      = InvoiceDescriptor.Load(loadStream);

            loadStream.Close();

            Assert.AreEqual(desc2.Profile, Profile.Comfort);
            Assert.AreEqual(desc2.Type, InvoiceType.Invoice);


            // try again with a memory stream
            MemoryStream ms = new MemoryStream();

            desc.Save(ms, ZUGFeRDVersion.Version1, Profile.Comfort);

            byte[] data = ms.ToArray();
            string s    = System.Text.Encoding.Default.GetString(data);
            // TODO: Add more asserts
        } // !TestStoringInvoiceViaStream()
        public void TestInvoiceWithAttachment()
        {
            InvoiceDescriptor desc     = this.InvoiceProvider.CreateInvoice();
            string            filename = "myrandomdata.bin";

            byte[] data = new byte[32768];
            new Random().NextBytes(data);

            desc.AddAdditionalReferencedDocument(
                issuerAssignedID: "My-File",
                typeCode: AdditionalReferencedDocumentTypeCode.ReferenceDocument,
                name: "Ausführbare Datei",
                attachmentBinaryObject: data,
                filename: filename);

            MemoryStream ms = new MemoryStream();

            desc.Save(ms, ZUGFeRDVersion.Version21, Profile.XRechnung);
            ms.Seek(0, SeekOrigin.Begin);

            InvoiceDescriptor loadedInvoice = InvoiceDescriptor.Load(ms);

            foreach (AdditionalReferencedDocument document in loadedInvoice.AdditionalReferencedDocuments)
            {
                if (document.IssuerAssignedID == "My-File")
                {
                    CollectionAssert.AreEqual(document.AttachmentBinaryObject, data);
                    Assert.AreEqual(document.Filename, filename);
                    break;
                }
            }
        } // !TestInvoiceWithAttachment()
Beispiel #7
0
        public void TestMissingPropertiesAreEmpty()
        {
            var path = @"..\..\..\demodata\zugferd21\zugferd_2p1_BASIC_Einfach-factur-x.xml";
            var invoiceDescriptor = InvoiceDescriptor.Load(path);

            Assert.IsTrue(invoiceDescriptor.TradeLineItems.TrueForAll(x => x.ApplicableProductCharacteristics.Count == 0));
        }
        public void TestContractReferencedDocumentWithExtended()
        {
            string   uuid          = System.Guid.NewGuid().ToString();
            DateTime issueDateTime = DateTime.Today;

            InvoiceDescriptor desc = this.InvoiceProvider.CreateInvoice();

            desc.ContractReferencedDocument = new ContractReferencedDocument()
            {
                ID            = uuid,
                IssueDateTime = issueDateTime
            };


            MemoryStream ms = new MemoryStream();

            desc.Save(ms, ZUGFeRDVersion.Version21, Profile.Extended);
            ms.Seek(0, SeekOrigin.Begin);
            Assert.AreEqual(desc.Profile, Profile.Extended);

            InvoiceDescriptor loadedInvoice = InvoiceDescriptor.Load(ms);

            Assert.AreEqual(loadedInvoice.ContractReferencedDocument.ID, uuid);
            Assert.AreEqual(loadedInvoice.ContractReferencedDocument.IssueDateTime, issueDateTime); // explicitly not to be set in XRechnung
        } // !TestContractReferencedDocumentWithExtended()
        public void TestTotalRounding()
        {
            var uuid          = Guid.NewGuid().ToString();
            var issueDateTime = DateTime.Today;

            var desc = InvoiceProvider.CreateInvoice();

            desc.ContractReferencedDocument = new ContractReferencedDocument
            {
                ID            = uuid,
                IssueDateTime = issueDateTime
            };
            desc.SetTotals(1.99m, 0m, 0m, 0m, 0m, 2m, 0m, 2m, 0.01m);

            var msExtended = new MemoryStream();

            desc.Save(msExtended, ZUGFeRDVersion.Version21, Profile.Extended);
            msExtended.Seek(0, SeekOrigin.Begin);

            var loadedInvoice = InvoiceDescriptor.Load(msExtended);

            Assert.AreEqual(loadedInvoice.RoundingAmount, 0.01m);

            var msBasic = new MemoryStream();

            desc.Save(msBasic, ZUGFeRDVersion.Version21);
            msBasic.Seek(0, SeekOrigin.Begin);

            loadedInvoice = InvoiceDescriptor.Load(msBasic);
            Assert.AreEqual(loadedInvoice.RoundingAmount, 0m);
        } // !TestTotalRounding()
        public void TestStoringReferenceBasicFacturXInvoice()
        {
            string path = @"..\..\..\demodata\zugferd21\zugferd_2p1_BASIC_Einfach-factur-x.xml";

            Stream            s            = File.Open(path, FileMode.Open);
            InvoiceDescriptor originalDesc = InvoiceDescriptor.Load(s);

            s.Close();

            Assert.AreEqual(originalDesc.Profile, Profile.Basic);
            Assert.AreEqual(originalDesc.Type, InvoiceType.Invoice);
            Assert.AreEqual(originalDesc.InvoiceNo, "471102");
            Assert.AreEqual(originalDesc.TradeLineItems.Count, 1);
            Assert.AreEqual(originalDesc.LineTotalAmount, 198.0m);
            Assert.AreEqual(originalDesc.Taxes[0].TaxAmount, 37.62m);
            Assert.AreEqual(originalDesc.Taxes[0].Percent, 19.0m);
            originalDesc.IsTest = false;

            Stream ms = new MemoryStream();

            originalDesc.Save(ms, ZUGFeRDVersion.Version21, Profile.Basic);
            originalDesc.Save(@"zugferd_2p1_BASIC_Einfach-factur-x_Result.xml", ZUGFeRDVersion.Version21);

            InvoiceDescriptor desc = InvoiceDescriptor.Load(ms);

            Assert.AreEqual(desc.Profile, Profile.Basic);
            Assert.AreEqual(desc.Type, InvoiceType.Invoice);
            Assert.AreEqual(desc.InvoiceNo, "471102");
            Assert.AreEqual(desc.TradeLineItems.Count, 1);
            Assert.AreEqual(desc.LineTotalAmount, 198.0m);
            Assert.AreEqual(desc.Taxes[0].TaxAmount, 37.62m);
            Assert.AreEqual(desc.Taxes[0].Percent, 19.0m);
        } // !TestStoringReferenceBasicFacturXInvoice()
Beispiel #11
0
        public void TestZugFeRdV2()
        {
            string path = Path.GetTempPath() + Guid.NewGuid() + ".xml";

            File.WriteAllText(path, Properties.Resources.zugferd20);
            InvoiceDescriptor descriptor = InvoiceDescriptor.Load(path);

            Assert.IsNotNull(descriptor);

            Assert.AreEqual(new DateTime(2020, 01, 06), descriptor.ActualDeliveryDate);
            Assert.AreEqual(CurrencyCodes.EUR, descriptor.Currency);
            Assert.AreEqual("2001101", descriptor.InvoiceNo);
            Assert.AreEqual(new DateTime(2020, 01, 06), descriptor.InvoiceDate);
            Assert.AreEqual(new decimal(99.67), descriptor.GrandTotalAmount);
            Assert.AreEqual(Profile.Basic, descriptor.Profile);
            Assert.AreEqual(new decimal(83.76), descriptor.TaxBasisAmount);
            Assert.AreEqual(InvoiceType.Invoice, descriptor.Type);

            Assert.AreEqual(new decimal(19), descriptor.Taxes[0].Percent);
            Assert.AreEqual(new decimal(83.76), descriptor.Taxes[0].BasisAmount);
            Assert.AreEqual(new decimal(15.9144), descriptor.Taxes[0].TaxAmount);

            Assert.AreEqual("234567", descriptor.SellerTaxRegistration[0].No);
            Assert.AreEqual(TaxRegistrationSchemeID.FC, descriptor.SellerTaxRegistration[0].SchemeID);

            try
            {
                File.Delete(path);
            }
            catch (Exception)
            {
                //Ignore
            }
        }
Beispiel #12
0
        public void TestMissingPropertListsEmpty()
        {
            string path = @"..\..\..\demodata\zugferd20\zugferd_2p0_BASIC_Einfach.xml";
            var    invoiceDescriptor = InvoiceDescriptor.Load(path);

            Assert.IsTrue(invoiceDescriptor.TradeLineItems.TrueForAll(x => x.ApplicableProductCharacteristics.Count == 0));
        } // !TestMissingPropertListsEmpty()
Beispiel #13
0
        } // !run()

        private void _loadZUGFeRDEinfachOriginalInvoice()
        {
            string            path = @"..\..\..\demodata\ZUGFeRD_1p0_COMFORT_Einfach_Original.xml";
            InvoiceDescriptor desc = InvoiceDescriptor.Load(path);

            Assert.AreEqual(desc.Profile, Profile.Comfort);
            Assert.AreEqual(desc.Type, InvoiceType.Invoice);
        } // !_loadZUGFeRDEinfachOriginalInvoice()
Beispiel #14
0
        public void TestReadTradeLineLineID()
        {
            var path = @"..\..\..\demodata\xRechnung\xrechnung with trade line settlement data.xml";
            var invoiceDescriptor = InvoiceDescriptor.Load(path);
            var tradeLineItem     = invoiceDescriptor.TradeLineItems.Single();

            Assert.AreEqual("2", tradeLineItem.LineID);
        }
        } // !render()

        public static void render(InvoiceDescriptor desc, string filename)
        {
            string       output = render(desc);
            StreamWriter writer = File.CreateText(filename);

            writer.WriteLine(output);
            writer.Close();
        } // !render()
Beispiel #16
0
        public void generate()
        {
            string filename = "ZUGFeRD_1p0_BASIC.xml";

            InvoiceDescriptor desc = _generateDescriptor();

            desc.Save(filename);
        } // !generate()
Beispiel #17
0
        public void TestReferenceComfortInvoice()
        {
            string            path = @"..\..\..\demodata\zugferd10\ZUGFeRD_1p0_COMFORT_Einfach.xml";
            InvoiceDescriptor desc = InvoiceDescriptor.Load(path);

            Assert.AreEqual(desc.Profile, Profile.Comfort);
            Assert.AreEqual(desc.Type, InvoiceType.Invoice);
        } // !TestReferenceComfortInvoice()
Beispiel #18
0
        public void generate()
        {
            string filename = "ZUGFeRD_1p0_COMFORT_Einfach.xml";

            InvoiceDescriptor desc = _generateDescriptor();

            desc.Save(filename, ZUGFeRDVersion.Version1, Profile.Comfort);
        } // !generate()
Beispiel #19
0
        public void TestMissingPropertiesAreNull()
        {
            string path = @"..\..\..\demodata\zugferd20\zugferd_2p0_BASIC_Einfach.xml";
            var    invoiceDescriptor = InvoiceDescriptor.Load(path);

            Assert.IsTrue(invoiceDescriptor.TradeLineItems.TrueForAll(x => x.BillingPeriodStart == null));
            Assert.IsTrue(invoiceDescriptor.TradeLineItems.TrueForAll(x => x.BillingPeriodEnd == null));
        } // !TestMissingPropertiesAreNull()
Beispiel #20
0
        } // !_loadZUGFeRDComfortRabatteInvoice()

        private void _saveAndLoadZUGFeRD1Invoice()
        {
            string            path = "output.xml";
            InvoiceDescriptor desc = _createInvoice();

            desc.Save(path, ZUGFeRDVersion.Version1, Profile.Comfort);

            InvoiceDescriptor desc2 = InvoiceDescriptor.Load(path);
        } // !_saveAndLoadZUGFeRD1Invoice()
Beispiel #21
0
        } // !_loadZUGFeRDComfortRabatteInvoice()

        private void _saveAndLoadZUGFeRDInvoice()
        {
            string            path = "output.xml";
            InvoiceDescriptor desc = _createInvoice();

            desc.Save(path);

            InvoiceDescriptor desc2 = InvoiceDescriptor.Load(path);
        } // !_saveAndLoadZUGFeRDInvoice()
Beispiel #22
0
        } // !_loadZUGFeRDEinfachOriginalInvoice()

        private void _loadZUGFeRDComfortRabatteInvoice()
        {
            string            path = @"..\..\..\demodata\ZUGFeRD_1p0_COMFORT_Rabatte.xml";
            InvoiceDescriptor desc = InvoiceDescriptor.Load(path);

            desc.Save("test.xml");

            Assert.AreEqual(desc.Profile, Profile.Comfort);
            Assert.AreEqual(desc.Type, InvoiceType.Invoice);
        } // !_loadZUGFeRDComfortRabatteInvoice()
Beispiel #23
0
        public void TestReadTradeLineBillingPeriod()
        {
            var path = @"..\..\..\demodata\xRechnung\xrechnung with trade line settlement data.xml";
            var invoiceDescriptor = InvoiceDescriptor.Load(path);

            var tradeLineItem = invoiceDescriptor.TradeLineItems.Single();

            Assert.AreEqual(new DateTime(2021, 01, 01), tradeLineItem.BillingPeriodStart);
            Assert.AreEqual(new DateTime(2021, 01, 31), tradeLineItem.BillingPeriodEnd);
        }
Beispiel #24
0
        public void TestStoringInvoiceViaFile()
        {
            string            path = "output.xml";
            InvoiceDescriptor desc = this.InvoiceProvider.CreateInvoice();

            desc.Save(path, ZUGFeRDVersion.Version1, Profile.Comfort);

            InvoiceDescriptor desc2 = InvoiceDescriptor.Load(path);
            // TODO: Add more asserts
        } // !TestStoringInvoiceViaFile()
Beispiel #25
0
        } // !_loadZUGFeRD1EinfachOriginalInvoice()

        private void _loadZUGFeRD1ComfortRabatteInvoice()
        {
            string            path = @"..\..\..\demodata\zugferd10\ZUGFeRD_1p0_COMFORT_Rabatte.xml";
            InvoiceDescriptor desc = InvoiceDescriptor.Load(path);

            desc.Save("test.xml");

            Assert.AreEqual(desc.Profile, Profile.Comfort);
            Assert.AreEqual(desc.Type, InvoiceType.Invoice);
            Assert.AreEqual(desc.CreditorBankAccounts[0].BankName, "Hausbank München");
        } // !_loadZUGFeRDComfortRabatteInvoice()
Beispiel #26
0
        } // !_generateDescriptor()

        public void read()
        {
            InvoiceDescriptor tempDesc = _generateDescriptor();
            MemoryStream      ms       = new MemoryStream();

            tempDesc.Save(ms, ZUGFeRDVersion.Version1, Profile.Extended);
            string            s    = Encoding.ASCII.GetString(ms.ToArray());
            InvoiceDescriptor desc = InvoiceDescriptor.Load(ms);

            bool equals = tempDesc.Equals(desc);
        } // !read()
Beispiel #27
0
        void TestManualLineIds()
        {
            InvoiceDescriptor desc = this.InvoiceProvider.CreateInvoice();

            desc.TradeLineItems.Clear();
            desc.AddTradeLineItem(lineID: "item-01", "Item1");
            desc.AddTradeLineItem(lineID: "item-02", "Item2");

            Assert.AreEqual(desc.TradeLineItems[0].AssociatedDocument.LineID, "item-01");
            Assert.AreEqual(desc.TradeLineItems[1].AssociatedDocument.LineID, "item-02");
        } // !TestManualLineIds()
Beispiel #28
0
        } // !_loadZUGFeRD21MinimumInvoice()

        private void _loadXRechnungCII()
        {
            string            path = @"..\..\..\demodata\xRechnung\xRechnung CII.xml";
            InvoiceDescriptor desc = InvoiceDescriptor.Load(path);

            Assert.AreEqual(desc.Profile, Profile.XRechnung);
            Assert.AreEqual(desc.Type, InvoiceType.Invoice);
            Assert.AreEqual(desc.InvoiceNo, "0815-99-1-a");
            Assert.AreEqual(desc.TradeLineItems.Count, 2);
            Assert.AreEqual(desc.LineTotalAmount, 1445.98m);
        } // !_loadZUGFeRD1EinfachOriginalInvoice()
        public void TestReferenceXRechnung1CII()
        {
            string            path = @"..\..\..\demodata\xRechnung\xRechnung CII.xml";
            InvoiceDescriptor desc = InvoiceDescriptor.Load(path);

            Assert.AreEqual(desc.Profile, Profile.XRechnung1);
            Assert.AreEqual(desc.Type, InvoiceType.Invoice);
            Assert.AreEqual(desc.InvoiceNo, "0815-99-1-a");
            Assert.AreEqual(desc.TradeLineItems.Count, 2);
            Assert.AreEqual(desc.LineTotalAmount, 1445.98m);
        } // !TestReferenceXRechnung1CII()
Beispiel #30
0
        public void TestReferenceComfortInvoiceRabattiert()
        {
            string            path = @"..\..\..\demodata\zugferd10\ZUGFeRD_1p0_COMFORT_Rabatte.xml";
            InvoiceDescriptor desc = InvoiceDescriptor.Load(path);

            desc.Save("test.xml", ZUGFeRDVersion.Version1, Profile.Comfort);

            Assert.AreEqual(desc.Profile, Profile.Comfort);
            Assert.AreEqual(desc.Type, InvoiceType.Invoice);
            Assert.AreEqual(desc.CreditorBankAccounts[0].BankName, "Hausbank München");
        } // !TestReferenceComfortInvoiceRabattiert()