updated some javadoc

This commit is contained in:
jstaerk
2020-11-12 08:06:53 +01:00
parent bb42381c67
commit b6aad03da2
9 changed files with 333 additions and 72 deletions

View File

@@ -2,6 +2,9 @@ package org.mustangproject;
import org.mustangproject.ZUGFeRD.IZUGFeRDTradeSettlementPayment; import org.mustangproject.ZUGFeRD.IZUGFeRDTradeSettlementPayment;
/**
* provides e.g. the IBAN to transfer money to :-)
*/
public class BankDetails implements IZUGFeRDTradeSettlementPayment { public class BankDetails implements IZUGFeRDTradeSettlementPayment {
protected String IBAN, BIC; protected String IBAN, BIC;
@@ -14,6 +17,14 @@ public class BankDetails implements IZUGFeRDTradeSettlementPayment {
return IBAN; return IBAN;
} }
/**
* Sets the IBAN "ID", which means that it only needs to be a way to uniquely
* identify the IBAN. Of course you will specify your own IBAN in full length but
* if you deduct from a customer's account you may e.g. leave out the first or last
* digits so that nobody spying on the invoice gets to know the complete number
* @param IBAN
* @return
*/
public BankDetails setIBAN(String IBAN) { public BankDetails setIBAN(String IBAN) {
this.IBAN = IBAN; this.IBAN = IBAN;
return this; return this;
@@ -28,12 +39,17 @@ public class BankDetails implements IZUGFeRDTradeSettlementPayment {
return this; return this;
} }
/***
* getOwn... methods will be removed in the future in favor of Tradeparty (e.g. Sender) class
* */
@Override @Override
@Deprecated
public String getOwnBIC() { public String getOwnBIC() {
return getBIC(); return getBIC();
} }
@Override @Override
@Deprecated
public String getOwnIBAN() { public String getOwnIBAN() {
return getIBAN(); return getIBAN();
} }

View File

@@ -2,17 +2,39 @@ package org.mustangproject;
import org.mustangproject.ZUGFeRD.IZUGFeRDExportableContact; import org.mustangproject.ZUGFeRD.IZUGFeRDExportableContact;
/***
* a named contact person in an organisation
* for the organisation/company itsel please
* @see TradeParty
*/
public class Contact implements IZUGFeRDExportableContact { public class Contact implements IZUGFeRDExportableContact {
protected String name,phone,email,zip,street,location,country; protected String name,phone,email,zip,street,location,country;
protected String fax=null; protected String fax=null;
/***
* default constructor.
* Name, phone and email of sender contact person are e.g. required by XRechnung
* @param name
* @param phone
* @param email
*/
public Contact(String name, String phone, String email) { public Contact(String name, String phone, String email) {
this.name = name; this.name = name;
this.phone = phone; this.phone = phone;
this.email = email; this.email = email;
} }
/***
* complete specification of a named contact with a different address
* @param name
* @param phone
* @param email
* @param street
* @param zip
* @param location
* @param country
*/
public Contact(String name, String phone, String email, String street, String zip, String location, String country) { public Contact(String name, String phone, String email, String street, String zip, String location, String country) {
this.name = name; this.name = name;
this.phone = phone; this.phone = phone;
@@ -29,6 +51,11 @@ public class Contact implements IZUGFeRDExportableContact {
return name; return name;
} }
/**
* the first and last name of the contact
* @param name
* @return
*/
public Contact setName(String name) { public Contact setName(String name) {
this.name = name; this.name = name;
return this; return this;
@@ -39,6 +66,11 @@ public class Contact implements IZUGFeRDExportableContact {
return phone; return phone;
} }
/***
* complete phone number of the contact
* @param phone
* @return
*/
public Contact setPhone(String phone) { public Contact setPhone(String phone) {
this.phone = phone; this.phone = phone;
return this; return this;
@@ -49,6 +81,11 @@ public class Contact implements IZUGFeRDExportableContact {
return fax; return fax;
} }
/***
* (optional) complete fax number
* @param fax
* @return
*/
public Contact setFax(String fax) { public Contact setFax(String fax) {
this.fax = fax; this.fax = fax;
return this; return this;
@@ -58,6 +95,11 @@ public class Contact implements IZUGFeRDExportableContact {
return email; return email;
} }
/***
* personal email address of the contact person
* @param email
* @return
*/
public Contact setEMail(String email) { public Contact setEMail(String email) {
this.email = email; this.email = email;
return this; return this;
@@ -67,6 +109,11 @@ public class Contact implements IZUGFeRDExportableContact {
return zip; return zip;
} }
/***
* the postcode, if the address is different to the organisation
* @param zip
* @return
*/
public Contact setZIP(String zip) { public Contact setZIP(String zip) {
this.zip = zip; this.zip = zip;
return this; return this;
@@ -77,6 +124,11 @@ public class Contact implements IZUGFeRDExportableContact {
return street; return street;
} }
/**
* street and number, if the address is different to the organisation
* @param street
* @return
*/
public Contact setStreet(String street) { public Contact setStreet(String street) {
this.street = street; this.street = street;
return this; return this;
@@ -87,6 +139,11 @@ public class Contact implements IZUGFeRDExportableContact {
return location; return location;
} }
/***
* city of the contact person, if different from organisation
* @param location
* @return
*/
public Contact setLocation(String location) { public Contact setLocation(String location) {
this.location = location; this.location = location;
return this; return this;
@@ -97,6 +154,11 @@ public class Contact implements IZUGFeRDExportableContact {
return country; return country;
} }
/***
* two-letter ISO country code of the contact, if different from organisation
* @param country
* @return
*/
public Contact setCountry(String country) { public Contact setCountry(String country) {
this.country = country; this.country = country;
return this; return this;

View File

@@ -36,13 +36,13 @@ public class Invoice implements IExportableTransaction {
protected String documentName = null, documentCode = null, number = null, ownOrganisationFullPlaintextInfo = null, referenceNumber = null, shipToOrganisationID = null, shipToOrganisationName = null, shipToStreet = null, shipToZIP = null, shipToLocation = null, shipToCountry = null, buyerOrderReferencedDocumentID = null, buyerOrderReferencedDocumentIssueDateTime = null, ownForeignOrganisationID = null, ownOrganisationName = null, currency = null, paymentTermDescription = null; protected String documentName = null, documentCode = null, number = null, ownOrganisationFullPlaintextInfo = null, referenceNumber = null, shipToOrganisationID = null, shipToOrganisationName = null, shipToStreet = null, shipToZIP = null, shipToLocation = null, shipToCountry = null, buyerOrderReferencedDocumentID = null, buyerOrderReferencedDocumentIssueDateTime = null, ownForeignOrganisationID = null, ownOrganisationName = null, currency = null, paymentTermDescription = null;
protected Date issueDate = null, dueDate = null, deliveryDate = null; protected Date issueDate = null, dueDate = null, deliveryDate = null;
protected BigDecimal totalPrepaidAmount = null; protected BigDecimal totalPrepaidAmount = null;
protected TradeParty sender=null, recipient = null, deliveryAddress = null; protected TradeParty sender = null, recipient = null, deliveryAddress = null;
protected ArrayList<IZUGFeRDExportableItem> ZFItems = null; protected ArrayList<IZUGFeRDExportableItem> ZFItems = null;
protected ArrayList<String> notes = null; protected ArrayList<String> notes = null;
protected String contractReferencedDocument = null; protected String contractReferencedDocument = null;
protected Date occurrenceDateFrom = null; protected Date detailedDeliveryDateStart = null;
protected Date occurrenceDateTo = null; protected Date detailedDeliveryPeriodEnd = null;
protected ArrayList<IZUGFeRDAllowanceCharge> Allowances = new ArrayList<IZUGFeRDAllowanceCharge>(), protected ArrayList<IZUGFeRDAllowanceCharge> Allowances = new ArrayList<IZUGFeRDAllowanceCharge>(),
Charges = new ArrayList<IZUGFeRDAllowanceCharge>(), LogisticsServiceCharges = new ArrayList<IZUGFeRDAllowanceCharge>(); Charges = new ArrayList<IZUGFeRDAllowanceCharge>(), LogisticsServiceCharges = new ArrayList<IZUGFeRDAllowanceCharge>();
@@ -59,7 +59,9 @@ public class Invoice implements IExportableTransaction {
return documentName; return documentName;
} }
public String getContractReferencedDocument() { return contractReferencedDocument; } public String getContractReferencedDocument() {
return contractReferencedDocument;
}
public Invoice setDocumentName(String documentName) { public Invoice setDocumentName(String documentName) {
this.documentName = documentName; this.documentName = documentName;
@@ -94,7 +96,7 @@ public class Invoice implements IExportableTransaction {
*/ */
public Invoice setCorrection(String number) { public Invoice setCorrection(String number) {
setBuyerOrderReferencedDocumentID(number); setBuyerOrderReferencedDocumentID(number);
documentCode= DocumentCodeTypeConstants.CORRECTEDINVOICE; documentCode = DocumentCodeTypeConstants.CORRECTEDINVOICE;
return this; return this;
} }
@@ -144,7 +146,6 @@ public class Invoice implements IExportableTransaction {
} }
public Invoice setShipToStreet(String shipToStreet) { public Invoice setShipToStreet(String shipToStreet) {
this.shipToStreet = shipToStreet; this.shipToStreet = shipToStreet;
return this; return this;
@@ -209,6 +210,7 @@ public class Invoice implements IExportableTransaction {
@Deprecated @Deprecated
/*** /***
* @deprecated use TradeParty::addTaxID instead * @deprecated use TradeParty::addTaxID instead
* @see TradeParty
*/ */
public Invoice setOwnTaxID(String ownTaxID) { public Invoice setOwnTaxID(String ownTaxID) {
sender.addTaxID(ownTaxID); sender.addTaxID(ownTaxID);
@@ -223,6 +225,7 @@ public class Invoice implements IExportableTransaction {
@Deprecated @Deprecated
/*** /***
* @deprecated use TradeParty::addVATID instead * @deprecated use TradeParty::addVATID instead
* @see TradeParty
*/ */
public Invoice setOwnVATID(String ownVATID) { public Invoice setOwnVATID(String ownVATID) {
sender.addVATID(ownVATID); sender.addVATID(ownVATID);
@@ -234,6 +237,12 @@ public class Invoice implements IExportableTransaction {
return ownForeignOrganisationID; return ownForeignOrganisationID;
} }
@Deprecated
/***
* @deprecated use TradeParty instead
* @see TradeParty
*/
public Invoice setOwnForeignOrganisationID(String ownForeignOrganisationID) { public Invoice setOwnForeignOrganisationID(String ownForeignOrganisationID) {
this.ownForeignOrganisationID = ownForeignOrganisationID; this.ownForeignOrganisationID = ownForeignOrganisationID;
return this; return this;
@@ -244,6 +253,12 @@ public class Invoice implements IExportableTransaction {
return ownOrganisationName; return ownOrganisationName;
} }
@Deprecated
/***
* @deprecated use senders' TradeParty's name instead
* @see TradeParty
*/
public Invoice setOwnOrganisationName(String ownOrganisationName) { public Invoice setOwnOrganisationName(String ownOrganisationName) {
this.ownOrganisationName = ownOrganisationName; this.ownOrganisationName = ownOrganisationName;
return this; return this;
@@ -273,7 +288,7 @@ public class Invoice implements IExportableTransaction {
@Override @Override
public String[] getNotes() { public String[] getNotes() {
if (notes==null) { if (notes == null) {
return null; return null;
} }
return notes.toArray(new String[0]); return notes.toArray(new String[0]);
@@ -344,6 +359,11 @@ public class Invoice implements IExportableTransaction {
return sender; return sender;
} }
/***
* sets a named sender contact
* @param ownContact
* @return
*/
public Invoice setOwnContact(Contact ownContact) { public Invoice setOwnContact(Contact ownContact) {
this.sender.setContact(ownContact); this.sender.setContact(ownContact);
return this; return this;
@@ -353,14 +373,26 @@ public class Invoice implements IExportableTransaction {
return recipient; return recipient;
} }
/**
* required.
* sets the invoice receiving institution = invoicee
* @param recipient
* @return
*/
public Invoice setRecipient(TradeParty recipient) { public Invoice setRecipient(TradeParty recipient) {
this.recipient = recipient; this.recipient = recipient;
return this; return this;
} }
/**
* required.
* sets the invoicing institution = invoicer
* @param sender
* @return
*/
public Invoice setSender(TradeParty sender) { public Invoice setSender(TradeParty sender) {
this.sender = sender; this.sender = sender;
if ((sender.getBankDetails()!=null)&&(sender.getBankDetails().size()>0)) { if ((sender.getBankDetails() != null) && (sender.getBankDetails().size() > 0)) {
// convert bankdetails // convert bankdetails
} }
@@ -372,7 +404,7 @@ public class Invoice implements IExportableTransaction {
if (Allowances.isEmpty()) { if (Allowances.isEmpty()) {
return null; return null;
} else } else
return Allowances.toArray(new IZUGFeRDAllowanceCharge[0]); return Allowances.toArray(new IZUGFeRDAllowanceCharge[0]);
} }
@@ -397,11 +429,11 @@ public class Invoice implements IExportableTransaction {
@Override @Override
public IZUGFeRDTradeSettlement[] getTradeSettlement() { public IZUGFeRDTradeSettlement[] getTradeSettlement() {
if (getSender()==null) { if (getSender() == null) {
return null; return null;
} }
return ((TradeParty)getSender()).getAsTradeSettlement(); return ((TradeParty) getSender()).getAsTradeSettlement();
} }
@@ -421,6 +453,11 @@ public class Invoice implements IExportableTransaction {
return deliveryAddress; return deliveryAddress;
} }
/***
* if the delivery address is not the recipient address, it can be specified here
* @param deliveryAddress
* @return
*/
public Invoice setDeliveryAddress(TradeParty deliveryAddress) { public Invoice setDeliveryAddress(TradeParty deliveryAddress) {
this.deliveryAddress = deliveryAddress; this.deliveryAddress = deliveryAddress;
return this; return this;
@@ -431,14 +468,18 @@ public class Invoice implements IExportableTransaction {
return ZFItems.toArray(new IZUGFeRDExportableItem[0]); return ZFItems.toArray(new IZUGFeRDExportableItem[0]);
} }
/**
* required
* adds invoice "lines" :-)
* @param item
* @return
*/
public Invoice addItem(IZUGFeRDExportableItem item) { public Invoice addItem(IZUGFeRDExportableItem item) {
ZFItems.add(item); ZFItems.add(item);
return this; return this;
} }
/*** /***
* checks if all required items are set in order to be able to export it * checks if all required items are set in order to be able to export it
* @return true if all required items are set * @return true if all required items are set
@@ -454,61 +495,72 @@ public class Invoice implements IExportableTransaction {
// this.country = country; // this.country = country;
} }
/***
* adds a document level addition to the price
* @param izac
* @return
*/
public Invoice addCharge(IZUGFeRDAllowanceCharge izac) { public Invoice addCharge(IZUGFeRDAllowanceCharge izac) {
Charges.add(izac); Charges.add(izac);
return this; return this;
} }
/***
* adds a document level rebate
* @param izac
* @return
*/
public Invoice addAllowance(IZUGFeRDAllowanceCharge izac) { public Invoice addAllowance(IZUGFeRDAllowanceCharge izac) {
Allowances.add(izac); Allowances.add(izac);
return this; return this;
} }
/***
* adds the ID of a contract referenced in the invoice
* @param s
* @return
*/
public Invoice setContractReferencedDocument(String s) { public Invoice setContractReferencedDocument(String s) {
contractReferencedDocument=s; contractReferencedDocument = s;
return this; return this;
} }
public Invoice setOccurrenceDate(Date occur) {
occurrenceDateFrom=occur; /***
occurrenceDateTo=null; * sets a document level delivery period,
* which is optional additional to the mandatory deliverydate
* and which will become a BillingSpecifiedPeriod-Element
* @param start
* @param end
* @return fluent setter
*/
public Invoice setDetailedDeliveryPeriod(Date start, Date end) {
detailedDeliveryDateStart = start;
detailedDeliveryPeriodEnd = end;
return this; return this;
} }
public Invoice setOccurrencePeriod(Date start, Date end) {
occurrenceDateFrom=start;
occurrenceDateTo=end;
return this; @Override
public Date getDetailedDeliveryPeriodFrom() {
return detailedDeliveryDateStart;
} }
@Override @Override
public Date getOccurrenceDate() { public Date getDetailedDeliveryPeriodTo() {
return detailedDeliveryPeriodEnd;
return occurrenceDateFrom;
}
@Override
public Date getOccurrencePeriodFrom() {
if (occurrenceDateTo!=null) {
return occurrenceDateFrom;
} else {
return null;
}
}
@Override
public Date getOccurrencePeriodTo() {
if (occurrenceDateTo!=null) {
return occurrenceDateTo;
} else {
return null;
}
} }
/***
* adds a free text paragraph, which will become a includedNote element
* @param text
* @return fluent setter
*/
public Invoice addNote(String text) { public Invoice addNote(String text) {
if (notes==null) { if (notes == null) {
notes=new ArrayList<String>(); notes = new ArrayList<String>();
} }
notes.add(text); notes.add(text);
return this; return this;

View File

@@ -6,6 +6,9 @@ import org.mustangproject.ZUGFeRD.IZUGFeRDExportableItem;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
/***
* describes any invoice line
*/
public class Item implements IZUGFeRDExportableItem { public class Item implements IZUGFeRDExportableItem {
protected BigDecimal price, quantity, tax, grossPrice, lineTotalAmount; protected BigDecimal price, quantity, tax, grossPrice, lineTotalAmount;
protected String id; protected String id;
@@ -14,6 +17,12 @@ public class Item implements IZUGFeRDExportableItem {
protected ArrayList<IZUGFeRDAllowanceCharge> Allowances = new ArrayList<IZUGFeRDAllowanceCharge>(), protected ArrayList<IZUGFeRDAllowanceCharge> Allowances = new ArrayList<IZUGFeRDAllowanceCharge>(),
Charges = new ArrayList<IZUGFeRDAllowanceCharge>(); Charges = new ArrayList<IZUGFeRDAllowanceCharge>();
/***
* default constructor
* @param product contains the products name, tax rate, and unit
* @param price the base price of one item the product
* @param quantity the number, dimensions or the weight of the delivered product or good in this context
*/
public Item(Product product, BigDecimal price, BigDecimal quantity) { public Item(Product product, BigDecimal price, BigDecimal quantity) {
this.price = price; this.price = price;
this.quantity = quantity; this.quantity = quantity;
@@ -24,6 +33,11 @@ public class Item implements IZUGFeRDExportableItem {
return lineTotalAmount; return lineTotalAmount;
} }
/**
* should only be set by calculator classes or maybe when reading from XML
* @param lineTotalAmount
* @return
*/
public Item setLineTotalAmount(BigDecimal lineTotalAmount) { public Item setLineTotalAmount(BigDecimal lineTotalAmount) {
this.lineTotalAmount = lineTotalAmount; this.lineTotalAmount = lineTotalAmount;
return this; return this;
@@ -33,6 +47,11 @@ public class Item implements IZUGFeRDExportableItem {
return grossPrice; return grossPrice;
} }
/***
* the list price without VAT (sic!), refer to EN16931-1 for definition
* @return
*/
public Item setGrossPrice(BigDecimal grossPrice) { public Item setGrossPrice(BigDecimal grossPrice) {
this.grossPrice = grossPrice; this.grossPrice = grossPrice;
return this; return this;
@@ -125,6 +144,11 @@ public class Item implements IZUGFeRDExportableItem {
return this; return this;
} }
/***
* adds item level freetext fields (includednote)
* @param text
* @return
*/
public Item addNote(String text) { public Item addNote(String text) {
if (notes==null) { if (notes==null) {
notes=new ArrayList<String>(); notes=new ArrayList<String>();

View File

@@ -4,10 +4,20 @@ import org.mustangproject.ZUGFeRD.IZUGFeRDExportableProduct;
import java.math.BigDecimal; import java.math.BigDecimal;
/***
* describes a product, good or service used in an invoice item line
*/
public class Product implements IZUGFeRDExportableProduct { public class Product implements IZUGFeRDExportableProduct {
protected String unit, name, description, sellerAssignedID, buyerAssignedID; protected String unit, name, description, sellerAssignedID, buyerAssignedID;
protected BigDecimal VATPercent; protected BigDecimal VATPercent;
/***
* default constructor
* @param name
* @param description
* @param unit a two/three letter UN/ECE rec 20 unit code, e.g. "C62" for piece
* @param VATPercent
*/
public Product(String name, String description, String unit, BigDecimal VATPercent) { public Product(String name, String description, String unit, BigDecimal VATPercent) {
this.unit = unit; this.unit = unit;
this.name = name; this.name = name;
@@ -20,6 +30,11 @@ public class Product implements IZUGFeRDExportableProduct {
return sellerAssignedID; return sellerAssignedID;
} }
/***
* how the seller identifies this type of product
* @param sellerAssignedID
* @return
*/
public Product setSellerAssignedID(String sellerAssignedID) { public Product setSellerAssignedID(String sellerAssignedID) {
this.sellerAssignedID = sellerAssignedID; this.sellerAssignedID = sellerAssignedID;
return this; return this;
@@ -29,6 +44,11 @@ public class Product implements IZUGFeRDExportableProduct {
return buyerAssignedID; return buyerAssignedID;
} }
/***
* if the buyer provided an ID how he refers to this product
* @param buyerAssignedID
* @return
*/
public Product setBuyerAssignedID(String buyerAssignedID) { public Product setBuyerAssignedID(String buyerAssignedID) {
this.buyerAssignedID = buyerAssignedID; this.buyerAssignedID = buyerAssignedID;
return this; return this;
@@ -39,6 +59,11 @@ public class Product implements IZUGFeRDExportableProduct {
return unit; return unit;
} }
/***
* sets a UN/ECE rec 20 or 21 code which unit the product ships in, e.g. C62=piece
* @param unit
* @return
*/
public Product setUnit(String unit) { public Product setUnit(String unit) {
this.unit = unit; this.unit = unit;
return this; return this;
@@ -49,6 +74,11 @@ public class Product implements IZUGFeRDExportableProduct {
return name; return name;
} }
/**
* name of the product
* @param name
* @return
*/
public Product setName(String name) { public Product setName(String name) {
this.name = name; this.name = name;
return this; return this;
@@ -59,6 +89,11 @@ public class Product implements IZUGFeRDExportableProduct {
return description; return description;
} }
/**
* description of the product (required)
* @param description
* @return
*/
public Product setDescription(String description) { public Product setDescription(String description) {
this.description = description; this.description = description;
return this; return this;
@@ -69,6 +104,11 @@ public class Product implements IZUGFeRDExportableProduct {
return VATPercent; return VATPercent;
} }
/****
* VAT rate of the product
* @param VATPercent
* @return
*/
public Product setVATPercent(BigDecimal VATPercent) { public Product setVATPercent(BigDecimal VATPercent) {
this.VATPercent = VATPercent; this.VATPercent = VATPercent;
return this; return this;

View File

@@ -6,6 +6,9 @@ import org.w3c.dom.NodeList;
import java.util.ArrayList; import java.util.ArrayList;
/***
* A organisation, i.e. usually a company
*/
public class TradeParty implements IZUGFeRDExportableTradeParty { public class TradeParty implements IZUGFeRDExportableTradeParty {
protected String name, zip, street, location, country; protected String name, zip, street, location, country;
@@ -15,6 +18,14 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
protected ArrayList<BankDetails> bankDetails = new ArrayList<BankDetails>(); protected ArrayList<BankDetails> bankDetails = new ArrayList<BankDetails>();
protected Contact contact = null; protected Contact contact = null;
/***
*
* @param name of the company
* @param street street and number (use setAdditionalAddress for more parts)
* @param zip postcode of the company
* @param location city of the company
* @param country two letter ISO code
*/
public TradeParty(String name, String street, String zip, String location, String country) { public TradeParty(String name, String street, String zip, String location, String country) {
this.name = name; this.name = name;
this.street = street; this.street = street;
@@ -24,6 +35,10 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
} }
/***
* XML parsing constructor
* @param nodes
*/
public TradeParty(NodeList nodes) { public TradeParty(NodeList nodes) {
/** /**
* <ram:SellerTradeParty> * <ram:SellerTradeParty>
@@ -92,16 +107,31 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
return ID; return ID;
} }
/**
* if it's a customer, this can e.g. be the customer ID
* @param ID
* @return
*/
public TradeParty setID(String ID) { public TradeParty setID(String ID) {
this.ID = ID; this.ID = ID;
return this; return this;
} }
/***
* (optional) a named contact person
* @param c
* @return
*/
public TradeParty setContact(Contact c) { public TradeParty setContact(Contact c) {
this.contact = c; this.contact = c;
return this; return this;
} }
/***
* required (for senders, if payment is not debit): the BIC and IBAN
* @param s
* @return
*/
public TradeParty addBankDetails(BankDetails s) { public TradeParty addBankDetails(BankDetails s) {
bankDetails.add(s); bankDetails.add(s);
return this; return this;
@@ -111,11 +141,21 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
return bankDetails; return bankDetails;
} }
/***
* a general tax ID
* @param taxID
* @return
*/
public TradeParty addTaxID(String taxID) { public TradeParty addTaxID(String taxID) {
this.taxID = taxID; this.taxID = taxID;
return this; return this;
} }
/***
* the USt-ID
* @param vatID
* @return
*/
public TradeParty addVATID(String vatID) { public TradeParty addVATID(String vatID) {
this.vatID = vatID; this.vatID = vatID;
return this; return this;
@@ -135,6 +175,11 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
return name; return name;
} }
/***
* required, usually done in the constructor: the complete name of the organisation
* @return
*/
public TradeParty setName(String name) { public TradeParty setName(String name) {
this.name = name; this.name = name;
return this; return this;
@@ -145,6 +190,11 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
return zip; return zip;
} }
/***
* usually set in the constructor, required for recipients in german invoices: postcode
* @param zip
* @return
*/
public TradeParty setZIP(String zip) { public TradeParty setZIP(String zip) {
this.zip = zip; this.zip = zip;
return this; return this;
@@ -155,6 +205,11 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
return street; return street;
} }
/***
* usually set in constructor, required in germany, street and house number
* @param street
* @return
*/
public TradeParty setStreet(String street) { public TradeParty setStreet(String street) {
this.street = street; this.street = street;
return this; return this;
@@ -165,6 +220,11 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
return location; return location;
} }
/***
* usually set in constructor, usually required in germany, the city of the organisation
* @param location
* @return
*/
public TradeParty setLocation(String location) { public TradeParty setLocation(String location) {
this.location = location; this.location = location;
return this; return this;
@@ -175,6 +235,11 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
return country; return country;
} }
/***
* two-letter ISO code of the country
* @param country
* @return
*/
public TradeParty setCountry(String country) { public TradeParty setCountry(String country) {
this.country = country; this.country = country;
return this; return this;
@@ -206,6 +271,13 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
return additionalAddress; return additionalAddress;
} }
/***
* additional parts of the address, e.g. which floor.
* Street address will become "lineOne", this will become "lineTwo"
* @param additionalAddress
* @return
*/
public TradeParty setAdditionalAddress(String additionalAddress) { public TradeParty setAdditionalAddress(String additionalAddress) {
this.additionalAddress = additionalAddress; this.additionalAddress = additionalAddress;
return this; return this;

View File

@@ -21,8 +21,8 @@ package org.mustangproject.ZUGFeRD;
* Mustangproject's ZUGFeRD implementation * Mustangproject's ZUGFeRD implementation
* Neccessary interface for ZUGFeRD exporter * Neccessary interface for ZUGFeRD exporter
* Licensed under the APLv2 * Licensed under the APLv2
* @date 2014-05-10 to 2014-06-25 * @date 2014-05-10 to 2020-11-12
* @version 1.2.0 * @version 2.0.0
* @author jstaerk * @author jstaerk
* */ * */
@@ -36,7 +36,7 @@ import org.mustangproject.ZUGFeRD.model.DocumentCodeTypeConstants;
/*** /***
* the interface of an transaction, e.g. an invoice, you want to create xml (potentially to be added to a PDF) * the interface of an transaction, e.g. an invoice, you want to create xml (potentially to be added to a PDF)
* for * for
* @see Invoice if you want to use an object rather than an interface * @see org.mustangproject.Invoice
*/ */
public interface IExportableTransaction { public interface IExportableTransaction {
@@ -431,33 +431,26 @@ public interface IExportableTransaction {
return null; return null;
} }
/***
* specify delivery date
* @return the delivery date
*/
default Date getOccurrenceDate() {
return null;
}
/*** /***
* specify delivery period * specifies the document level delivery period, will be included in a BillingSpecifiedPeriod element
* @return the beginning of the delivery period * @return the beginning of the delivery period
*/ */
default Date getOccurrencePeriodFrom() { default Date getDetailedDeliveryPeriodFrom() {
return null; return null;
} }
/*** /***
* specify delivery period * specifies the document level delivery period, will be included in a BillingSpecifiedPeriod element
* @return the end of the delivery period * @return the end of the delivery period
*/ */
default Date getOccurrencePeriodTo() { default Date getDetailedDeliveryPeriodTo() {
return null; return null;
} }
/** /**
* get additional referenced documents acccording to BG-24 XRechnung (Rechnungsbegruendende Unterlagen), * get additional referenced documents acccording to BG-24 XRechnung (Rechnungsbegruendende Unterlagen),
* i.e. <ram:AdditionalReferencedDocument> in <ram:ApplicableHeaderTradeAgreement> (only supported for zf2) * i.e. ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument
* *
* @return a array of objects from class FileAttachment * @return a array of objects from class FileAttachment
*/ */

View File

@@ -496,13 +496,13 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
} }
} }
if ((trans.getOccurrencePeriodFrom() != null) || (trans.getOccurrencePeriodTo() != null)) { if ((trans.getDetailedDeliveryPeriodFrom() != null) || (trans.getDetailedDeliveryPeriodTo() != null)) {
xml = xml + "<ram:BillingSpecifiedPeriod>"; xml = xml + "<ram:BillingSpecifiedPeriod>";
if (trans.getOccurrencePeriodFrom() != null) { if (trans.getDetailedDeliveryPeriodFrom() != null) {
xml = xml + "<ram:StartDateTime><udt:DateTimeString format='102'>" + zugferdDateFormat.format(trans.getOccurrencePeriodFrom()) + "</udt:DateTimeString></ram:StartDateTime>"; xml = xml + "<ram:StartDateTime><udt:DateTimeString format='102'>" + zugferdDateFormat.format(trans.getDetailedDeliveryPeriodFrom()) + "</udt:DateTimeString></ram:StartDateTime>";
} }
if (trans.getOccurrencePeriodTo() != null) { if (trans.getDetailedDeliveryPeriodTo() != null) {
xml = xml + "<ram:EndDateTime><udt:DateTimeString format='102'>" + zugferdDateFormat.format(trans.getOccurrencePeriodTo()) + "</udt:DateTimeString></ram:EndDateTime>"; xml = xml + "<ram:EndDateTime><udt:DateTimeString format='102'>" + zugferdDateFormat.format(trans.getDetailedDeliveryPeriodTo()) + "</udt:DateTimeString></ram:EndDateTime>";
} }
xml = xml + "</ram:BillingSpecifiedPeriod>"; xml = xml + "</ram:BillingSpecifiedPeriod>";

View File

@@ -65,7 +65,7 @@ public class ZF2PushTest extends TestCase {
.load(SOURCE_PDF)) { .load(SOURCE_PDF)) {
try { try {
ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setContractReferencedDocument(contractID).setOccurrencePeriod(new SimpleDateFormat("yyyyMMdd").parse(occurenceFrom), new SimpleDateFormat("yyyyMMdd").parse(occurenceTo)).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addBankDetails(new BankDetails("777666555", "DE4321"))).setOwnTaxID("4711").setOwnVATID("DE19990815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").setAdditionalAddress("Hinterhaus 3").setContact(new Contact("nameRep", "phoneRep", "emailRep@test.com"))).setNumber(number).addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0)))); ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setContractReferencedDocument(contractID).setDetailedDeliveryPeriod(new SimpleDateFormat("yyyyMMdd").parse(occurenceFrom), new SimpleDateFormat("yyyyMMdd").parse(occurenceTo)).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addBankDetails(new BankDetails("777666555", "DE4321"))).setOwnTaxID("4711").setOwnVATID("DE19990815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").setAdditionalAddress("Hinterhaus 3").setContact(new Contact("nameRep", "phoneRep", "emailRep@test.com"))).setNumber(number).addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0))));
} catch (ParseException ex) { } catch (ParseException ex) {
throw new RuntimeException("Parse exception"); throw new RuntimeException("Parse exception");
} }
@@ -209,7 +209,7 @@ public class ZF2PushTest extends TestCase {
.setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).setProfile(Profiles.getByName("en16931")).ignorePDFAErrors() .setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).setProfile(Profiles.getByName("en16931")).ignorePDFAErrors()
.load(SOURCE_PDF)) { .load(SOURCE_PDF)) {
ze.setTransaction(new Invoice().setCurrency("CHF").setDueDate(new Date()).setOccurrenceDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE")).setOwnTaxID("4711").setOwnVATID("DE0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number) ze.setTransaction(new Invoice().setCurrency("CHF").setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE")).setOwnTaxID("4711").setOwnVATID("DE0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number)
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0)))
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0)))
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0)))
@@ -258,12 +258,14 @@ public class ZF2PushTest extends TestCase {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try { try {
ze.setTransaction(new Invoice().setCurrency("CHF").addNote("document level 1/2").addNote("document level 2/2").setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID(taxID)).setOwnVATID("DE0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addVATID("DE4711").setContact(new Contact("Franz Müller", "01779999999", "franz@mueller.de", "teststr. 12", "55232", "Entenhausen", "DE"))).setNumber(number) ze.setTransaction(new Invoice().setCurrency("CHF").addNote("document level 1/2").addNote("document level 2/2").setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date())
.setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID(taxID).setID("0009845"))
.setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").setID("0008734").addVATID("DE4711").setContact(new Contact("Franz Müller", "01779999999", "franz@mueller.de", "teststr. 12", "55232", "Entenhausen", "DE")))
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(16)), price, new BigDecimal(1.0)).addNote("item level 1/1").addAllowance(new Allowance(new BigDecimal(0.02)).setReason("item discount").setTaxPercent(new BigDecimal(16)))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(16)), price, new BigDecimal(1.0)).addNote("item level 1/1").addAllowance(new Allowance(new BigDecimal(0.02)).setReason("item discount").setTaxPercent(new BigDecimal(16))))
.addCharge(new Charge(new BigDecimal(0.5)).setReason("quick delivery charge").setTaxPercent(new BigDecimal(16))) .addCharge(new Charge(new BigDecimal(0.5)).setReason("quick delivery charge").setTaxPercent(new BigDecimal(16)))
.addAllowance(new Allowance(new BigDecimal(0.2)).setReason("discount").setTaxPercent(new BigDecimal(16))) .addAllowance(new Allowance(new BigDecimal(0.2)).setReason("discount").setTaxPercent(new BigDecimal(16)))
.setOccurrenceDate(sdf.parse("2020-01-01")) .setDetailedDeliveryPeriod(sdf.parse("2020-01-01"),sdf.parse("2020-01-31"))
.setDeliveryDate(sdf.parse("2020-02-02")) .setDeliveryDate(sdf.parse("2020-02-02")).setOwnVATID("DE0815").setNumber(number)
); );
} catch (ParseException e) { } catch (ParseException e) {
e.printStackTrace(); e.printStackTrace();
@@ -298,7 +300,7 @@ public class ZF2PushTest extends TestCase {
.setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).setProfile(Profiles.getByName("en16931")).ignorePDFAErrors() .setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).setProfile(Profiles.getByName("en16931")).ignorePDFAErrors()
.load(SOURCE_PDF)) { .load(SOURCE_PDF)) {
ze.setTransaction(new Invoice().setDueDate(new Date()).setOccurrenceDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE")).setOwnTaxID("4711").setOwnVATID("DE0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number) ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE")).setOwnTaxID("4711").setOwnVATID("DE0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number)
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), new BigDecimal(500.0), qty).addAllowance(new Allowance(new BigDecimal(300)).setTaxPercent(new BigDecimal(19)))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), new BigDecimal(500.0), qty).addAllowance(new Allowance(new BigDecimal(300)).setTaxPercent(new BigDecimal(19))))
.addAllowance(new Allowance(new BigDecimal(600)).setTaxPercent(new BigDecimal(19))) .addAllowance(new Allowance(new BigDecimal(600)).setTaxPercent(new BigDecimal(19)))
@@ -341,7 +343,7 @@ public class ZF2PushTest extends TestCase {
.setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).setProfile(Profiles.getByName("extended")).ignorePDFAErrors() .setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).setProfile(Profiles.getByName("extended")).ignorePDFAErrors()
.load(SOURCE_PDF)) { .load(SOURCE_PDF)) {
ze.setTransaction(new Invoice().setCurrency("CHF").setDueDate(new Date()).setOccurrenceDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE")).setOwnTaxID("4711").setOwnVATID("DE0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number) ze.setTransaction(new Invoice().setCurrency("CHF").setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE")).setOwnTaxID("4711").setOwnVATID("DE0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number)
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0)))
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0)))
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0)).addCharge(new Charge().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19)))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0)).addCharge(new Charge().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19))))
@@ -388,7 +390,7 @@ public class ZF2PushTest extends TestCase {
.setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).ignorePDFAErrors() .setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).ignorePDFAErrors()
.load(SOURCE_PDF)) { .load(SOURCE_PDF)) {
Invoice i = new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setOccurrencePeriod(new Date(), new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID("4711").addVATID("DE0815")).setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addVATID("DE0815")).setNumber(number) Invoice i = new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDetailedDeliveryPeriod(new Date(), new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID("4711").addVATID("DE0815")).setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addVATID("DE0815")).setNumber(number)
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, qty)) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, qty))
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, qty)) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, qty))
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, qty)).setCorrection("0815"); .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, qty)).setCorrection("0815");