diff --git a/mustang/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDAllowanceCharge.java b/mustang/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDAllowanceCharge.java new file mode 100644 index 00000000..040cda54 --- /dev/null +++ b/mustang/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDAllowanceCharge.java @@ -0,0 +1,31 @@ +/* + * Copyright 2015 AlexanderSchmidt. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.mustangproject.ZUGFeRD; + +import java.math.BigDecimal; + +/** + * + * @author AlexanderSchmidt + */ +public interface IZUGFeRDAllowanceCharge { + BigDecimal getAmount(); + + String getReason(); + + BigDecimal getTaxPercent(); + +} diff --git a/mustang/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTransaction.java b/mustang/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTransaction.java index 00545145..09ab90d6 100644 --- a/mustang/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTransaction.java +++ b/mustang/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTransaction.java @@ -45,6 +45,10 @@ public interface IZUGFeRDExportableTransaction { * @return */ Date getDueDate(); + + IZUGFeRDAllowanceCharge[] getZFAllowances(); + IZUGFeRDAllowanceCharge[] getZFCharges(); + IZUGFeRDAllowanceCharge[] getZFLogisticsServiceCharges(); IZUGFeRDExportableItem[] getZFItems(); diff --git a/mustang/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporter.java b/mustang/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporter.java index 8b400e88..ca01a1bb 100644 --- a/mustang/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporter.java +++ b/mustang/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporter.java @@ -476,6 +476,7 @@ public class ZUGFeRDExporter { tradeSettlement.getSpecifiedTradeSettlementPaymentMeans().add(this.getPaymentData()); tradeSettlement.getApplicableTradeTax().addAll(this.getTradeTax()); tradeSettlement.getSpecifiedTradePaymentTerms().addAll(this.getPaymentTerms()); + tradeSettlement.getSpecifiedTradeAllowanceCharge().addAll(this.getHeaderAllowances()); tradeSettlement.setSpecifiedTradeSettlementMonetarySummation(this.getMonetarySummation()); return tradeSettlement; @@ -545,6 +546,43 @@ public class ZUGFeRDExporter { return tradeTaxTypes; } + private Collection getHeaderAllowances() { + List headerAllowances = new ArrayList(); + + for (IZUGFeRDAllowanceCharge iAllowance : trans.getZFAllowances()) { + + TradeAllowanceChargeType allowance = xmlFactory.createTradeAllowanceChargeType(); + + IndicatorType chargeIndicator = xmlFactory.createIndicatorType(); + chargeIndicator.setIndicator(false); + allowance.setChargeIndicator(chargeIndicator); + + TextType reason = xmlFactory.createTextType(); + reason.setValue(iAllowance.getReason()); + allowance.setReason(reason); + + TradeTaxType tradeTax = xmlFactory.createTradeTaxType(); + + PercentType vatPercent = xmlFactory.createPercentType(); + vatPercent.setValue(iAllowance.getTaxPercent()); + tradeTax.setApplicablePercent(vatPercent); + + TaxCategoryCodeType taxType = xmlFactory.createTaxCategoryCodeType(); + taxType.setValue(TaxCategoryCodeType.STANDARDRATE); + tradeTax.setCategoryCode(taxType); + + TaxTypeCodeType taxCode = xmlFactory.createTaxTypeCodeType(); + taxCode.setValue(TaxTypeCodeType.SALESTAX); + tradeTax.setTypeCode(taxCode); + + allowance.getCategoryTradeTax().add(tradeTax); + headerAllowances.add(allowance); + + } + + return headerAllowances; + } + private Collection getPaymentTerms() { List paymentTerms = new ArrayList(); @@ -564,7 +602,7 @@ public class ZUGFeRDExporter { paymentTerms.add(paymentTerm); return paymentTerms; - } + } private TradeSettlementMonetarySummationType getMonetarySummation() { TradeSettlementMonetarySummationType monetarySummation = xmlFactory.createTradeSettlementMonetarySummationType();