first step to support tax category codes

This commit is contained in:
Jochen Stärk
2019-10-13 18:16:54 +02:00
parent c906bf8f64
commit 293134af63
5 changed files with 305 additions and 256 deletions

View File

@@ -1,8 +1,9 @@
1. 1.7.5
===== =====
2019- 2019-10-
- support Sepa Direct Debit - support Sepa Direct Debit
- closes #134 ZUGFeRD2PullProvider uses NetPrice for GrossPrice
1.7.4 1.7.4
===== =====

View File

@@ -82,4 +82,9 @@ public interface IZUGFeRDExportableProduct {
*/ */
BigDecimal getVATPercent(); BigDecimal getVATPercent();
default String getTaxCategoryCode() {
return "S";
}
} }

View File

@@ -319,7 +319,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider, IProfileProvider {
+ " <ram:SpecifiedLineTradeSettlement>\n" //$NON-NLS-1$ + " <ram:SpecifiedLineTradeSettlement>\n" //$NON-NLS-1$
+ " <ram:ApplicableTradeTax>\n" //$NON-NLS-1$ + " <ram:ApplicableTradeTax>\n" //$NON-NLS-1$
+ " <ram:TypeCode>VAT</ram:TypeCode>\n" //$NON-NLS-1$ + " <ram:TypeCode>VAT</ram:TypeCode>\n" //$NON-NLS-1$
+ " <ram:CategoryCode>S</ram:CategoryCode>\n" //$NON-NLS-1$ + " <ram:CategoryCode>"+currentItem.getProduct().getTaxCategoryCode()+"</ram:CategoryCode>\n" //$NON-NLS-1$
+ " <ram:RateApplicablePercent>" //$NON-NLS-1$ + " <ram:RateApplicablePercent>" //$NON-NLS-1$
+ vatFormat(currentItem.getProduct().getVATPercent()) + "</ram:RateApplicablePercent>\n" //$NON-NLS-1$ + vatFormat(currentItem.getProduct().getVATPercent()) + "</ram:RateApplicablePercent>\n" //$NON-NLS-1$
+ " </ram:ApplicableTradeTax>\n" //$NON-NLS-1$ + " </ram:ApplicableTradeTax>\n" //$NON-NLS-1$

View File

@@ -125,7 +125,7 @@ public abstract class MustangReaderTestCase extends TestCase implements IZUGFeRD
protected class Item implements IZUGFeRDExportableItem { protected class Item implements IZUGFeRDExportableItem {
public Item(BigDecimal price, BigDecimal quantity, Product product) { public Item(BigDecimal price, BigDecimal quantity, IZUGFeRDExportableProduct product) {
super(); super();
this.price = price; this.price = price;
this.quantity = quantity; this.quantity = quantity;
@@ -133,7 +133,7 @@ public abstract class MustangReaderTestCase extends TestCase implements IZUGFeRD
} }
private BigDecimal price, quantity; private BigDecimal price, quantity;
private Product product; private IZUGFeRDExportableProduct product;
@Override @Override
public BigDecimal getPrice() { public BigDecimal getPrice() {
@@ -154,11 +154,11 @@ public abstract class MustangReaderTestCase extends TestCase implements IZUGFeRD
} }
@Override @Override
public Product getProduct() { public IZUGFeRDExportableProduct getProduct() {
return product; return product;
} }
public void setProduct(Product product) { public void setProduct(IZUGFeRDExportableProduct product) {
this.product = product; this.product = product;
} }

View File

@@ -34,19 +34,64 @@ import java.util.Date;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
@FixMethodOrder(MethodSorters.NAME_ASCENDING) @FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class ZF2EdgeTest extends MustangReaderTestCase { public class ZF2EdgeTest extends MustangReaderTestCase implements IZUGFeRDExportableTransaction {
final String TARGET_PDF = "./target/testout-ZF2newEdge.pdf"; final String TARGET_PDF = "./target/testout-ZF2newEdge.pdf";
protected class EdgeProduct implements IZUGFeRDExportableProduct {
private String description, name, unit;
public EdgeProduct(String description, String name, String unit) {
super();
this.description = description;
this.name = name;
this.unit = unit;
}
@Override
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
@Override
public BigDecimal getVATPercent() {
return BigDecimal.ZERO;
}
@Override
public String getTaxCategoryCode() {
return "K"; // simulate intra community supply
}
}
protected class DebitPayment implements IZUGFeRDTradeSettlementDebit { protected class DebitPayment implements IZUGFeRDTradeSettlementDebit {
@Override @Override
public String getIBAN() { public String getIBAN() {
return "DE540815"; return "DE540815";
} }
@Override @Override
public String getMandate() { public String getMandate() {
return "DE99XX12345"; return "DE99XX12345";
@@ -54,7 +99,6 @@ public class ZF2EdgeTest extends MustangReaderTestCase {
} }
@Override @Override
public IZUGFeRDTradeSettlementPayment[] getTradeSettlementPayment() { public IZUGFeRDTradeSettlementPayment[] getTradeSettlementPayment() {
return null; return null;
@@ -67,7 +111,6 @@ public class ZF2EdgeTest extends MustangReaderTestCase {
return payments; return payments;
} }
@Override @Override
public Date getDeliveryDate() { public Date getDeliveryDate() {
return new GregorianCalendar(2017, Calendar.MAY, 7).getTime(); return new GregorianCalendar(2017, Calendar.MAY, 7).getTime();
@@ -146,12 +189,12 @@ public class ZF2EdgeTest extends MustangReaderTestCase {
@Override @Override
public IZUGFeRDExportableItem[] getZFItems() { public IZUGFeRDExportableItem[] getZFItems() {
Item[] allItems = new Item[3]; Item[] allItems = new Item[2];
Product designProduct = new Product("", "Künstlerische Gestaltung (Stunde): Einer Beispielrechnung", "HUR", EdgeProduct designProduct = new EdgeProduct("", "Künstlerische Gestaltung (Stunde): Einer Beispielrechnung",
new BigDecimal("7.000000")); "HUR");
Product balloonProduct = new Product("", "Bestellerweiterung für E&F Umbau", "C62", EdgeProduct balloonProduct = new EdgeProduct("", "Bestellerweiterung für E&F Umbau", "C62");// test for issue
new BigDecimal("19.000000"));// test for issue 103 // 103
Product airProduct = new Product("", "Heiße Luft pro Liter", "LTR", new BigDecimal("19.000000")); EdgeProduct airProduct = new EdgeProduct("", "Heiße Luft pro Liter", "LTR");
allItems[0] = new Item(new BigDecimal("160"), new BigDecimal("1"), designProduct); allItems[0] = new Item(new BigDecimal("160"), new BigDecimal("1"), designProduct);
allItems[1] = new Item(new BigDecimal("0.79"), new BigDecimal("400"), balloonProduct); allItems[1] = new Item(new BigDecimal("0.79"), new BigDecimal("400"), balloonProduct);
@@ -237,7 +280,7 @@ public class ZF2EdgeTest extends MustangReaderTestCase {
assertFalse(zi.getUTF8().contains("<ram:DueDateDateTime>")); assertFalse(zi.getUTF8().contains("<ram:DueDateDateTime>"));
// Reading ZUGFeRD // Reading ZUGFeRD
assertEquals(zi.getAmount(), "571.04"); assertEquals("496.00", zi.getAmount());
assertEquals(zi.getHolder(), getOwnOrganisationName()); assertEquals(zi.getHolder(), getOwnOrganisationName());
assertEquals(zi.getForeignReference(), getNumber()); assertEquals(zi.getForeignReference(), getNumber());
try { try {