diff --git a/library/src/main/java/org/mustangproject/Allowance.java b/library/src/main/java/org/mustangproject/Allowance.java new file mode 100644 index 00000000..5a6cf680 --- /dev/null +++ b/library/src/main/java/org/mustangproject/Allowance.java @@ -0,0 +1,12 @@ +package org.mustangproject; + +import org.mustangproject.ZUGFeRD.IZUGFeRDAllowanceCharge; + +import java.math.BigDecimal; + +public class Allowance extends Charge { + + public Allowance(BigDecimal totalAmount, BigDecimal taxPercent, String categoryCode, String reason) { + super(totalAmount, taxPercent, categoryCode, reason); + } +} diff --git a/library/src/main/java/org/mustangproject/Charge.java b/library/src/main/java/org/mustangproject/Charge.java new file mode 100644 index 00000000..e14efd67 --- /dev/null +++ b/library/src/main/java/org/mustangproject/Charge.java @@ -0,0 +1,60 @@ +package org.mustangproject; + +import org.mustangproject.ZUGFeRD.IZUGFeRDAllowanceCharge; +import org.mustangproject.ZUGFeRD.IZUGFeRDExportableContact; + +import java.math.BigDecimal; + +public class Charge implements IZUGFeRDAllowanceCharge { + protected String reason; + protected BigDecimal totalAmount; + protected BigDecimal taxPercent; + protected String categoryCode; + + public Charge(BigDecimal totalAmount, BigDecimal taxPercent, String categoryCode, String reason) { + this.totalAmount=totalAmount; + this.taxPercent=taxPercent; + this.categoryCode=categoryCode; + this.reason=reason; + } + + @Override + public String getReason() { + return reason; + } + + public Charge setReason(String reason) { + this.reason = reason; + return this; + } + + @Override + public BigDecimal getTotalAmount() { + return totalAmount; + } + + public Charge setTotalAmount(BigDecimal totalAmount) { + this.totalAmount = totalAmount; + return this; + } + + @Override + public BigDecimal getTaxPercent() { + return taxPercent; + } + + public Charge setTaxPercent(BigDecimal taxPercent) { + this.taxPercent = taxPercent; + return this; + } + + @Override + public String getCategoryCode() { + return categoryCode; + } + + public Charge setCategoryCode(String categoryCode) { + this.categoryCode = categoryCode; + return this; + } +} diff --git a/library/src/main/java/org/mustangproject/Invoice.java b/library/src/main/java/org/mustangproject/Invoice.java index dd9ae8e5..583c406a 100644 --- a/library/src/main/java/org/mustangproject/Invoice.java +++ b/library/src/main/java/org/mustangproject/Invoice.java @@ -34,7 +34,8 @@ public class Invoice implements IExportableTransaction { protected IZUGFeRDExportableContact ownContact = null, recipient = null, deliveryAddress = null; protected ArrayList ZFItems = null; - protected IZUGFeRDAllowanceCharge[] ZFAllowances = null, ZFCharges = null, ZFLogisticsServiceCharges = null; + protected ArrayList Allowances = new ArrayList(), + Charges = new ArrayList(), LogisticsServiceCharges = new ArrayList(); protected IZUGFeRDTradeSettlement[] getTradeSettlement = null; protected IZUGFeRDPaymentTerms paymentTerms = null; @@ -334,33 +335,30 @@ public class Invoice implements IExportableTransaction { @Override public IZUGFeRDAllowanceCharge[] getZFAllowances() { - return ZFAllowances; + if (Allowances.isEmpty()) { + return null; + } else + return Allowances.toArray(new IZUGFeRDAllowanceCharge[0]); } - public Invoice setZFAllowances(IZUGFeRDAllowanceCharge[] ZFAllowances) { - this.ZFAllowances = ZFAllowances; - return this; - } @Override public IZUGFeRDAllowanceCharge[] getZFCharges() { - return ZFCharges; + if (Charges.isEmpty()) { + return null; + } else + return Charges.toArray(new IZUGFeRDAllowanceCharge[0]); } - public Invoice setZFCharges(IZUGFeRDAllowanceCharge[] ZFCharges) { - this.ZFCharges = ZFCharges; - return this; - } @Override public IZUGFeRDAllowanceCharge[] getZFLogisticsServiceCharges() { - return ZFLogisticsServiceCharges; + if (LogisticsServiceCharges.isEmpty()) { + return null; + } else + return LogisticsServiceCharges.toArray(new IZUGFeRDAllowanceCharge[0]); } - public Invoice setZFLogisticsServiceCharges(IZUGFeRDAllowanceCharge[] ZFLogisticsServiceCharges) { - this.ZFLogisticsServiceCharges = ZFLogisticsServiceCharges; - return this; - } public IZUGFeRDTradeSettlement[] getGetTradeSettlement() { return getTradeSettlement; @@ -413,4 +411,12 @@ public class Invoice implements IExportableTransaction { // this.country = country; } + public Invoice addCharge(IZUGFeRDAllowanceCharge izac) { + Charges.add(izac); + return this; + } + public Invoice addAllowance(IZUGFeRDAllowanceCharge izac) { + Allowances.add(izac); + return this; + } } diff --git a/library/src/main/java/org/mustangproject/Item.java b/library/src/main/java/org/mustangproject/Item.java index ba3a784e..e14c8d78 100644 --- a/library/src/main/java/org/mustangproject/Item.java +++ b/library/src/main/java/org/mustangproject/Item.java @@ -4,11 +4,14 @@ import org.mustangproject.ZUGFeRD.IZUGFeRDAllowanceCharge; import org.mustangproject.ZUGFeRD.IZUGFeRDExportableItem; import java.math.BigDecimal; +import java.util.ArrayList; public class Item implements IZUGFeRDExportableItem { protected BigDecimal price, quantity, tax, grossPrice, lineTotalAmount; protected String id; protected Product product; + protected ArrayList Allowances = new ArrayList(), + Charges = new ArrayList(); public Item(Product product, BigDecimal price, BigDecimal quantity) { this.price = price; @@ -81,16 +84,32 @@ public class Item implements IZUGFeRDExportableItem { @Override public IZUGFeRDAllowanceCharge[] getItemAllowances() { - return null; + if (Allowances.isEmpty()) { + return null; + } else + return Allowances.toArray(new IZUGFeRDAllowanceCharge[0]); } @Override public IZUGFeRDAllowanceCharge[] getItemCharges() { - return null; + if (Charges.isEmpty()) { + return null; + } else + return Charges.toArray(new IZUGFeRDAllowanceCharge[0]); } public Item setProduct(Product product) { this.product = product; return this; } + + + public Item addCharge(IZUGFeRDAllowanceCharge izac) { + Charges.add(izac); + return this; + } + public Item addAllowance(IZUGFeRDAllowanceCharge izac) { + Allowances.add(izac); + return this; + } } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java index bb48a4db..82bb2382 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java @@ -208,6 +208,9 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte ensurePDFisUpgraded = false; } + public void attachFile(String filename, byte[] data, String mimetype, String relation) { + //throw new RuntimeException("Not implemented"); + } /*** * Perform the final export to a now ZUGFeRD-enriched PDF file diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java index 02e9be52..e4ad96a6 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java @@ -24,10 +24,7 @@ import java.io.InputStream; import java.math.BigDecimal; import java.util.Date; -import org.mustangproject.Contact; -import org.mustangproject.Invoice; -import org.mustangproject.Item; -import org.mustangproject.Product; +import org.mustangproject.*; import org.junit.FixMethodOrder; import org.junit.runners.MethodSorters; @@ -78,7 +75,7 @@ public class ZF2PushTest extends TestCase { } } -/* + public void testAttachmentsExport() { String orgname = "Test company"; @@ -93,10 +90,11 @@ public class ZF2PushTest extends TestCase { .load(SOURCE_PDF)) { ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setOwnOrganisationName(orgname).setOwnStreet("teststr").setOwnZIP("55232").setOwnLocation("teststadt").setOwnCountry("DE").setOwnTaxID("4711").setOwnVATID("0815").setRecipient(new Contact("Franz Müller", "0177123456", "fmueller@test.com", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number).addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(0)), amount, new BigDecimal(1.0))) - .set + ); - ze.attachFile("one.pdf"); - ze.attachFile("two.pdf"); + byte[] b={12,13}; + ze.attachFile("one.pdf", b, "Application/PDF", "Alternative"); + ze.attachFile("two.pdf", b, "Application/PDF", "Alternative"); String theXML = new String(ze.getProvider().getXML()); assertTrue(theXML.contains("