use of un.unece.uncefact.data.standard.reusableaggregatebusinessinformationentity._100.HeaderTradeSettlementType in project en16931-cii2ubl by phax.
the class CIIToUBL22Converter method convertToInvoice.
@Nullable
public InvoiceType convertToInvoice(@Nonnull final CrossIndustryInvoiceType aCIIInvoice, @Nonnull final ErrorList aErrorList) {
ValueEnforcer.notNull(aCIIInvoice, "CIIInvoice");
ValueEnforcer.notNull(aErrorList, "ErrorList");
final ExchangedDocumentType aED = aCIIInvoice.getExchangedDocument();
final SupplyChainTradeTransactionType aSCTT = aCIIInvoice.getSupplyChainTradeTransaction();
if (aSCTT == null) {
// Mandatory element
return null;
}
final HeaderTradeAgreementType aHeaderAgreement = aSCTT.getApplicableHeaderTradeAgreement();
final HeaderTradeDeliveryType aHeaderDelivery = aSCTT.getApplicableHeaderTradeDelivery();
final HeaderTradeSettlementType aHeaderSettlement = aSCTT.getApplicableHeaderTradeSettlement();
if (aHeaderAgreement == null || aHeaderDelivery == null || aHeaderSettlement == null) {
// All mandatory elements
return null;
}
final InvoiceType aUBLInvoice = new InvoiceType();
if (false)
aUBLInvoice.setUBLVersionID(UBL_VERSION);
if (StringHelper.hasText(getCustomizationID()))
aUBLInvoice.setCustomizationID(getCustomizationID());
if (StringHelper.hasText(getProfileID()))
aUBLInvoice.setProfileID(getProfileID());
if (aED != null)
aUBLInvoice.setID(aED.getIDValue());
// Mandatory supplier
final SupplierPartyType aUBLSupplier = new SupplierPartyType();
aUBLInvoice.setAccountingSupplierParty(aUBLSupplier);
// Mandatory customer
final CustomerPartyType aUBLCustomer = new CustomerPartyType();
aUBLInvoice.setAccountingCustomerParty(aUBLCustomer);
// IssueDate
{
LocalDate aIssueDate = null;
if (aED != null && aED.getIssueDateTime() != null)
aIssueDate = _parseDate(aED.getIssueDateTime().getDateTimeString(), aErrorList);
if (aIssueDate != null)
aUBLInvoice.setIssueDate(aIssueDate);
}
// DueDate
{
LocalDate aDueDate = null;
for (final TradePaymentTermsType aPaymentTerms : aHeaderSettlement.getSpecifiedTradePaymentTerms()) if (aPaymentTerms.getDueDateDateTime() != null) {
aDueDate = _parseDate(aPaymentTerms.getDueDateDateTime().getDateTimeString(), aErrorList);
if (aDueDate != null)
break;
}
if (aDueDate != null)
aUBLInvoice.setDueDate(aDueDate);
}
// InvoiceTypeCode
if (aED != null)
aUBLInvoice.setInvoiceTypeCode(aED.getTypeCodeValue());
// Note
if (aED != null)
for (final un.unece.uncefact.data.standard.reusableaggregatebusinessinformationentity._100.NoteType aEDNote : aED.getIncludedNote()) ifNotNull(aUBLInvoice::addNote, _copyNote(aEDNote));
// TaxPointDate
for (final TradeTaxType aTradeTax : aHeaderSettlement.getApplicableTradeTax()) {
if (aTradeTax.getTaxPointDate() != null) {
final LocalDate aTaxPointDate = _parseDate(aTradeTax.getTaxPointDate().getDateString(), aErrorList);
if (aTaxPointDate != null) {
// Use the first tax point date only
aUBLInvoice.setTaxPointDate(aTaxPointDate);
break;
}
}
}
// DocumentCurrencyCode
final String sDefaultCurrencyCode = aHeaderSettlement.getInvoiceCurrencyCodeValue();
aUBLInvoice.setDocumentCurrencyCode(sDefaultCurrencyCode);
// TaxCurrencyCode
if (aHeaderSettlement.getTaxCurrencyCodeValue() != null) {
aUBLInvoice.setTaxCurrencyCode(aHeaderSettlement.getTaxCurrencyCodeValue());
}
// AccountingCost
for (final TradeAccountingAccountType aAccount : aHeaderSettlement.getReceivableSpecifiedTradeAccountingAccount()) {
final String sID = aAccount.getIDValue();
if (StringHelper.hasText(sID)) {
// Use the first ID
aUBLInvoice.setAccountingCost(sID);
break;
}
}
// BuyerReferences
if (aHeaderAgreement.getBuyerReferenceValue() != null) {
aUBLInvoice.setBuyerReference(aHeaderAgreement.getBuyerReferenceValue());
}
// InvoicePeriod
{
final SpecifiedPeriodType aSPT = aHeaderSettlement.getBillingSpecifiedPeriod();
if (aSPT != null) {
final DateTimeType aStartDT = aSPT.getStartDateTime();
final DateTimeType aEndDT = aSPT.getEndDateTime();
if (aStartDT != null && aEndDT != null) {
final PeriodType aUBLPeriod = new PeriodType();
aUBLPeriod.setStartDate(_parseDate(aStartDT.getDateTimeString(), aErrorList));
aUBLPeriod.setEndDate(_parseDate(aEndDT.getDateTimeString(), aErrorList));
aUBLInvoice.addInvoicePeriod(aUBLPeriod);
}
}
}
// OrderReference
{
final OrderReferenceType aUBLOrderRef = _createUBLOrderRef(aHeaderAgreement.getBuyerOrderReferencedDocument(), aHeaderAgreement.getSellerOrderReferencedDocument());
aUBLInvoice.setOrderReference(aUBLOrderRef);
}
// BillingReference
{
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aHeaderSettlement.getInvoiceReferencedDocument(), aErrorList);
if (aUBLDocRef != null) {
final BillingReferenceType aUBLBillingRef = new BillingReferenceType();
aUBLBillingRef.setInvoiceDocumentReference(aUBLDocRef);
aUBLInvoice.addBillingReference(aUBLBillingRef);
}
}
// DespatchDocumentReference
{
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aHeaderDelivery.getDespatchAdviceReferencedDocument(), aErrorList);
if (aUBLDocRef != null)
aUBLInvoice.addDespatchDocumentReference(aUBLDocRef);
}
// ReceiptDocumentReference
{
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aHeaderDelivery.getReceivingAdviceReferencedDocument(), aErrorList);
if (aUBLDocRef != null)
aUBLInvoice.addReceiptDocumentReference(aUBLDocRef);
}
// OriginatorDocumentReference
{
for (final ReferencedDocumentType aRD : aHeaderAgreement.getAdditionalReferencedDocument()) {
// Use for "Tender or lot reference" with TypeCode "50"
if (isOriginatorDocumentReferenceTypeCode(aRD.getTypeCodeValue())) {
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aRD, aErrorList);
if (aUBLDocRef != null)
aUBLInvoice.addOriginatorDocumentReference(aUBLDocRef);
}
}
}
// ContractDocumentReference
{
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aHeaderAgreement.getContractReferencedDocument(), aErrorList);
if (aUBLDocRef != null)
aUBLInvoice.addContractDocumentReference(aUBLDocRef);
}
// AdditionalDocumentReference
{
for (final ReferencedDocumentType aRD : aHeaderAgreement.getAdditionalReferencedDocument()) {
// Except OriginatorDocumentReference
if (!isOriginatorDocumentReferenceTypeCode(aRD.getTypeCodeValue())) {
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aRD, aErrorList);
if (aUBLDocRef != null)
aUBLInvoice.addAdditionalDocumentReference(aUBLDocRef);
}
}
}
// ProjectReference
{
final ProcuringProjectType aSpecifiedProcuring = aHeaderAgreement.getSpecifiedProcuringProject();
if (aSpecifiedProcuring != null) {
final String sID = aSpecifiedProcuring.getIDValue();
if (StringHelper.hasText(sID)) {
final ProjectReferenceType aUBLProjectRef = new ProjectReferenceType();
aUBLProjectRef.setID(sID);
aUBLInvoice.addProjectReference(aUBLProjectRef);
}
}
}
// Supplier Party
{
final TradePartyType aSellerParty = aHeaderAgreement.getSellerTradeParty();
if (aSellerParty != null) {
final PartyType aUBLParty = _convertParty(aSellerParty, true);
for (final TaxRegistrationType aTaxRegistration : aSellerParty.getSpecifiedTaxRegistration()) {
final PartyTaxSchemeType aUBLPartyTaxScheme = _convertPartyTaxScheme(aTaxRegistration);
if (aUBLPartyTaxScheme != null)
aUBLParty.addPartyTaxScheme(aUBLPartyTaxScheme);
}
final PartyLegalEntityType aUBLPartyLegalEntity = _convertPartyLegalEntity(aSellerParty);
if (aUBLPartyLegalEntity != null)
aUBLParty.addPartyLegalEntity(aUBLPartyLegalEntity);
final ContactType aUBLContact = _convertContact(aSellerParty);
if (aUBLContact != null)
aUBLParty.setContact(aUBLContact);
aUBLSupplier.setParty(aUBLParty);
}
}
// Customer Party
{
final TradePartyType aBuyerParty = aHeaderAgreement.getBuyerTradeParty();
if (aBuyerParty != null) {
final PartyType aUBLParty = _convertParty(aBuyerParty, false);
for (final TaxRegistrationType aTaxRegistration : aBuyerParty.getSpecifiedTaxRegistration()) {
final PartyTaxSchemeType aUBLPartyTaxScheme = _convertPartyTaxScheme(aTaxRegistration);
if (aUBLPartyTaxScheme != null)
aUBLParty.addPartyTaxScheme(aUBLPartyTaxScheme);
}
final PartyLegalEntityType aUBLPartyLegalEntity = _convertPartyLegalEntity(aBuyerParty);
if (aUBLPartyLegalEntity != null)
aUBLParty.addPartyLegalEntity(aUBLPartyLegalEntity);
final ContactType aUBLContact = _convertContact(aBuyerParty);
if (aUBLContact != null)
aUBLParty.setContact(aUBLContact);
aUBLCustomer.setParty(aUBLParty);
}
}
// Payee Party
{
final TradePartyType aPayeeParty = aHeaderSettlement.getPayeeTradeParty();
if (aPayeeParty != null) {
final PartyType aUBLParty = _convertParty(aPayeeParty, false);
for (final TaxRegistrationType aTaxRegistration : aPayeeParty.getSpecifiedTaxRegistration()) {
final PartyTaxSchemeType aUBLPartyTaxScheme = _convertPartyTaxScheme(aTaxRegistration);
if (aUBLPartyTaxScheme != null)
aUBLParty.addPartyTaxScheme(aUBLPartyTaxScheme);
}
// validation rules warning
if (false) {
final PartyLegalEntityType aUBLPartyLegalEntity = _convertPartyLegalEntity(aPayeeParty);
if (aUBLPartyLegalEntity != null)
aUBLParty.addPartyLegalEntity(aUBLPartyLegalEntity);
}
final ContactType aUBLContact = _convertContact(aPayeeParty);
if (aUBLContact != null)
aUBLParty.setContact(aUBLContact);
aUBLInvoice.setPayeeParty(aUBLParty);
}
}
// Tax Representative Party
{
final TradePartyType aTaxRepresentativeParty = aHeaderAgreement.getSellerTaxRepresentativeTradeParty();
if (aTaxRepresentativeParty != null) {
final PartyType aUBLParty = _convertParty(aTaxRepresentativeParty, false);
for (final TaxRegistrationType aTaxRegistration : aTaxRepresentativeParty.getSpecifiedTaxRegistration()) {
final PartyTaxSchemeType aUBLPartyTaxScheme = _convertPartyTaxScheme(aTaxRegistration);
if (aUBLPartyTaxScheme != null)
aUBLParty.addPartyTaxScheme(aUBLPartyTaxScheme);
}
// validation rules warning
if (false) {
final PartyLegalEntityType aUBLPartyLegalEntity = _convertPartyLegalEntity(aTaxRepresentativeParty);
if (aUBLPartyLegalEntity != null)
aUBLParty.addPartyLegalEntity(aUBLPartyLegalEntity);
}
final ContactType aUBLContact = _convertContact(aTaxRepresentativeParty);
if (aUBLContact != null)
aUBLParty.setContact(aUBLContact);
aUBLInvoice.setTaxRepresentativeParty(aUBLParty);
}
}
// Delivery
{
final DeliveryType aUBLDelivery = new DeliveryType();
boolean bUseDelivery = false;
final SupplyChainEventType aSCE = aHeaderDelivery.getActualDeliverySupplyChainEvent();
if (aSCE != null) {
final DateTimeType aODT = aSCE.getOccurrenceDateTime();
if (aODT != null) {
aUBLDelivery.setActualDeliveryDate(_parseDate(aODT.getDateTimeString(), aErrorList));
bUseDelivery = true;
}
}
final TradePartyType aShipToParty = aHeaderDelivery.getShipToTradeParty();
if (aShipToParty != null) {
final oasis.names.specification.ubl.schema.xsd.commonaggregatecomponents_22.LocationType aUBLDeliveryLocation = new oasis.names.specification.ubl.schema.xsd.commonaggregatecomponents_22.LocationType();
boolean bUseLocation = false;
final oasis.names.specification.ubl.schema.xsd.commonbasiccomponents_22.IDType aUBLID = _extractFirstPartyID(aShipToParty);
if (aUBLID != null) {
aUBLDeliveryLocation.setID(aUBLID);
bUseLocation = true;
}
final TradeAddressType aPostalAddress = aShipToParty.getPostalTradeAddress();
if (aPostalAddress != null) {
aUBLDeliveryLocation.setAddress(_convertPostalAddress(aPostalAddress));
bUseLocation = true;
}
if (bUseLocation) {
aUBLDelivery.setDeliveryLocation(aUBLDeliveryLocation);
bUseDelivery = true;
}
final TextType aName = aShipToParty.getName();
if (aName != null) {
final PartyType aUBLDeliveryParty = new PartyType();
final PartyNameType aUBLPartyName = new PartyNameType();
aUBLPartyName.setName(_copyName(aName, new NameType()));
aUBLDeliveryParty.addPartyName(aUBLPartyName);
aUBLDelivery.setDeliveryParty(aUBLDeliveryParty);
bUseDelivery = true;
}
}
if (bUseDelivery)
aUBLInvoice.addDelivery(aUBLDelivery);
}
// Payment means
{
for (final TradeSettlementPaymentMeansType aPaymentMeans : aHeaderSettlement.getSpecifiedTradeSettlementPaymentMeans()) {
_convertPaymentMeans(aHeaderSettlement, aPaymentMeans, x -> _addPartyID(x, aUBLInvoice.getAccountingSupplierParty().getParty()), aUBLInvoice::addPaymentMeans, aErrorList);
// Allowed again in 1.2.1: exactly 2
if (false)
// Since v1.2.0 only one is allowed
if (true)
break;
}
}
// Payment Terms
{
for (final TradePaymentTermsType aPaymentTerms : aHeaderSettlement.getSpecifiedTradePaymentTerms()) {
final PaymentTermsType aUBLPaymenTerms = new PaymentTermsType();
for (final TextType aDesc : aPaymentTerms.getDescription()) ifNotNull(aUBLPaymenTerms::addNote, _copyNote(aDesc));
if (aUBLPaymenTerms.hasNoteEntries())
aUBLInvoice.addPaymentTerms(aUBLPaymenTerms);
}
}
// Allowance Charge
{
for (final TradeAllowanceChargeType aAllowanceCharge : aHeaderSettlement.getSpecifiedTradeAllowanceCharge()) {
ETriState eIsCharge = ETriState.UNDEFINED;
if (aAllowanceCharge.getChargeIndicator() != null)
eIsCharge = _parseIndicator(aAllowanceCharge.getChargeIndicator(), aErrorList);
else
aErrorList.add(_buildError(new String[] { "CrossIndustryInvoice", "SupplyChainTradeTransaction", "ApplicableHeaderTradeSettlement", "SpecifiedTradeAllowanceCharge" }, "Failed to determine if SpecifiedTradeAllowanceCharge is an Allowance or a Charge"));
if (eIsCharge.isDefined()) {
final AllowanceChargeType aUBLAllowanceCharge = new AllowanceChargeType();
aUBLAllowanceCharge.setChargeIndicator(eIsCharge.getAsBooleanValue());
_copyAllowanceCharge(aAllowanceCharge, aUBLAllowanceCharge, sDefaultCurrencyCode);
aUBLInvoice.addAllowanceCharge(aUBLAllowanceCharge);
}
}
}
final TradeSettlementHeaderMonetarySummationType aSTSHMS = aHeaderSettlement.getSpecifiedTradeSettlementHeaderMonetarySummation();
// TaxTotal
{
TaxTotalType aUBLTaxTotal = null;
if (aSTSHMS != null && aSTSHMS.hasTaxTotalAmountEntries()) {
// For all currencies
for (final AmountType aTaxTotalAmount : aSTSHMS.getTaxTotalAmount()) {
final TaxTotalType aUBLCurTaxTotal = new TaxTotalType();
aUBLCurTaxTotal.setTaxAmount(_copyAmount(aTaxTotalAmount, new TaxAmountType(), sDefaultCurrencyCode));
aUBLInvoice.addTaxTotal(aUBLCurTaxTotal);
if (aUBLTaxTotal == null) {
// Use the first one
aUBLTaxTotal = aUBLCurTaxTotal;
}
}
} else {
// Mandatory in UBL
final TaxAmountType aUBLTaxAmount = new TaxAmountType();
aUBLTaxAmount.setValue(BigDecimal.ZERO);
aUBLTaxAmount.setCurrencyID(sDefaultCurrencyCode);
aUBLTaxTotal = new TaxTotalType();
aUBLTaxTotal.setTaxAmount(aUBLTaxAmount);
aUBLInvoice.addTaxTotal(aUBLTaxTotal);
}
for (final TradeTaxType aTradeTax : aHeaderSettlement.getApplicableTradeTax()) {
final TaxSubtotalType aUBLTaxSubtotal = new TaxSubtotalType();
if (aTradeTax.hasBasisAmountEntries()) {
aUBLTaxSubtotal.setTaxableAmount(_copyAmount(aTradeTax.getBasisAmountAtIndex(0), new TaxableAmountType(), sDefaultCurrencyCode));
}
if (aTradeTax.hasCalculatedAmountEntries()) {
aUBLTaxSubtotal.setTaxAmount(_copyAmount(aTradeTax.getCalculatedAmountAtIndex(0), new TaxAmountType(), sDefaultCurrencyCode));
}
final TaxCategoryType aUBLTaxCategory = new TaxCategoryType();
aUBLTaxCategory.setID(aTradeTax.getCategoryCodeValue());
if (aTradeTax.getRateApplicablePercentValue() != null)
aUBLTaxCategory.setPercent(MathHelper.getWithoutTrailingZeroes(aTradeTax.getRateApplicablePercentValue()));
if (StringHelper.hasText(aTradeTax.getExemptionReasonCodeValue()))
aUBLTaxCategory.setTaxExemptionReasonCode(aTradeTax.getExemptionReasonCodeValue());
if (aTradeTax.getExemptionReason() != null) {
final TaxExemptionReasonType aUBLTaxExemptionReason = new TaxExemptionReasonType();
aUBLTaxExemptionReason.setValue(aTradeTax.getExemptionReason().getValue());
aUBLTaxExemptionReason.setLanguageID(aTradeTax.getExemptionReason().getLanguageID());
aUBLTaxExemptionReason.setLanguageLocaleID(aTradeTax.getExemptionReason().getLanguageLocaleID());
aUBLTaxCategory.addTaxExemptionReason(aUBLTaxExemptionReason);
}
final TaxSchemeType aUBLTaxScheme = new TaxSchemeType();
aUBLTaxScheme.setID(getVATScheme());
aUBLTaxCategory.setTaxScheme(aUBLTaxScheme);
aUBLTaxSubtotal.setTaxCategory(aUBLTaxCategory);
aUBLTaxTotal.addTaxSubtotal(aUBLTaxSubtotal);
}
}
// LegalMonetaryTotal
{
final MonetaryTotalType aUBLMonetaryTotal = new MonetaryTotalType();
if (aSTSHMS != null) {
if (aSTSHMS.hasLineTotalAmountEntries())
aUBLMonetaryTotal.setLineExtensionAmount(_copyAmount(aSTSHMS.getLineTotalAmountAtIndex(0), new LineExtensionAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasTaxBasisTotalAmountEntries())
aUBLMonetaryTotal.setTaxExclusiveAmount(_copyAmount(aSTSHMS.getTaxBasisTotalAmountAtIndex(0), new TaxExclusiveAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasGrandTotalAmountEntries())
aUBLMonetaryTotal.setTaxInclusiveAmount(_copyAmount(aSTSHMS.getGrandTotalAmountAtIndex(0), new TaxInclusiveAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasAllowanceTotalAmountEntries())
aUBLMonetaryTotal.setAllowanceTotalAmount(_copyAmount(aSTSHMS.getAllowanceTotalAmountAtIndex(0), new AllowanceTotalAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasChargeTotalAmountEntries())
aUBLMonetaryTotal.setChargeTotalAmount(_copyAmount(aSTSHMS.getChargeTotalAmountAtIndex(0), new ChargeTotalAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasTotalPrepaidAmountEntries())
aUBLMonetaryTotal.setPrepaidAmount(_copyAmount(aSTSHMS.getTotalPrepaidAmountAtIndex(0), new PrepaidAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasRoundingAmountEntries()) {
// compatibility
if (MathHelper.isNE0(aSTSHMS.getRoundingAmountAtIndex(0).getValue()))
aUBLMonetaryTotal.setPayableRoundingAmount(_copyAmount(aSTSHMS.getRoundingAmountAtIndex(0), new PayableRoundingAmountType(), sDefaultCurrencyCode));
}
if (aSTSHMS.hasDuePayableAmountEntries())
aUBLMonetaryTotal.setPayableAmount(_copyAmount(aSTSHMS.getDuePayableAmountAtIndex(0), new PayableAmountType(), sDefaultCurrencyCode));
}
aUBLInvoice.setLegalMonetaryTotal(aUBLMonetaryTotal);
}
// All invoice lines
for (final SupplyChainTradeLineItemType aLineItem : aSCTT.getIncludedSupplyChainTradeLineItem()) {
final InvoiceLineType aUBLInvoiceLine = new InvoiceLineType();
final DocumentLineDocumentType aDLD = aLineItem.getAssociatedDocumentLineDocument();
aUBLInvoiceLine.setID(_copyID(aDLD.getLineID()));
// Note
for (final un.unece.uncefact.data.standard.reusableaggregatebusinessinformationentity._100.NoteType aLineNote : aDLD.getIncludedNote()) ifNotNull(aUBLInvoiceLine::addNote, _copyNote(aLineNote));
// Line extension amount
boolean bLineExtensionAmountIsNegative = false;
final LineTradeSettlementType aLineSettlement = aLineItem.getSpecifiedLineTradeSettlement();
final TradeSettlementLineMonetarySummationType aSTSLMS = aLineSettlement.getSpecifiedTradeSettlementLineMonetarySummation();
if (aSTSLMS != null) {
if (aSTSLMS.hasLineTotalAmountEntries()) {
aUBLInvoiceLine.setLineExtensionAmount(_copyAmount(aSTSLMS.getLineTotalAmountAtIndex(0), new LineExtensionAmountType(), sDefaultCurrencyCode));
if (isLT0Strict(aUBLInvoiceLine.getLineExtensionAmountValue()))
bLineExtensionAmountIsNegative = true;
}
}
// Invoiced quantity
final LineTradeDeliveryType aLineDelivery = aLineItem.getSpecifiedLineTradeDelivery();
if (aLineDelivery != null) {
final QuantityType aBilledQuantity = aLineDelivery.getBilledQuantity();
if (aBilledQuantity != null) {
aUBLInvoiceLine.setInvoicedQuantity(_copyQuantity(aBilledQuantity, new InvoicedQuantityType()));
}
}
// Accounting cost
if (aLineSettlement.hasReceivableSpecifiedTradeAccountingAccountEntries()) {
final TradeAccountingAccountType aLineAA = aLineSettlement.getReceivableSpecifiedTradeAccountingAccountAtIndex(0);
aUBLInvoiceLine.setAccountingCost(aLineAA.getIDValue());
}
// Invoice period
final SpecifiedPeriodType aLineBillingPeriod = aLineSettlement.getBillingSpecifiedPeriod();
if (aLineBillingPeriod != null) {
final PeriodType aUBLLinePeriod = new PeriodType();
if (aLineBillingPeriod.getStartDateTime() != null)
aUBLLinePeriod.setStartDate(_parseDate(aLineBillingPeriod.getStartDateTime().getDateTimeString(), aErrorList));
if (aLineBillingPeriod.getEndDateTime() != null)
aUBLLinePeriod.setEndDate(_parseDate(aLineBillingPeriod.getEndDateTime().getDateTimeString(), aErrorList));
aUBLInvoiceLine.addInvoicePeriod(aUBLLinePeriod);
}
// Order line reference
final LineTradeAgreementType aLineAgreement = aLineItem.getSpecifiedLineTradeAgreement();
if (aLineAgreement != null) {
final ReferencedDocumentType aBuyerOrderReference = aLineAgreement.getBuyerOrderReferencedDocument();
if (aBuyerOrderReference != null && StringHelper.hasText(aBuyerOrderReference.getLineIDValue())) {
final OrderLineReferenceType aUBLOrderLineReference = new OrderLineReferenceType();
aUBLOrderLineReference.setLineID(_copyID(aBuyerOrderReference.getLineID(), new LineIDType()));
aUBLInvoiceLine.addOrderLineReference(aUBLOrderLineReference);
}
}
// Document reference
for (final ReferencedDocumentType aLineReferencedDocument : aLineSettlement.getAdditionalReferencedDocument()) {
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aLineReferencedDocument, aErrorList);
if (aUBLDocRef != null)
aUBLInvoiceLine.addDocumentReference(aUBLDocRef);
}
// Allowance charge
for (final TradeAllowanceChargeType aLineAllowanceCharge : aLineSettlement.getSpecifiedTradeAllowanceCharge()) {
ETriState eIsCharge = ETriState.UNDEFINED;
if (aLineAllowanceCharge.getChargeIndicator() != null)
eIsCharge = _parseIndicator(aLineAllowanceCharge.getChargeIndicator(), aErrorList);
else
aErrorList.add(_buildError(new String[] { "CrossIndustryInvoice", "SupplyChainTradeTransaction", "IncludedSupplyChainTradeLineItem", "SpecifiedLineTradeSettlement", "SpecifiedTradeAllowanceCharge" }, "Failed to determine if SpecifiedTradeAllowanceCharge is an Allowance or a Charge"));
if (eIsCharge.isDefined()) {
final AllowanceChargeType aUBLLineAllowanceCharge = new AllowanceChargeType();
aUBLLineAllowanceCharge.setChargeIndicator(eIsCharge.getAsBooleanValue());
_copyAllowanceCharge(aLineAllowanceCharge, aUBLLineAllowanceCharge, sDefaultCurrencyCode);
aUBLInvoiceLine.addAllowanceCharge(aUBLLineAllowanceCharge);
}
}
// Item
final ItemType aUBLItem = new ItemType();
final TradeProductType aLineProduct = aLineItem.getSpecifiedTradeProduct();
if (aLineProduct != null) {
final TextType aDescription = aLineProduct.getDescription();
if (aDescription != null)
ifNotNull(aUBLItem::addDescription, _copyName(aDescription, new DescriptionType()));
if (aLineProduct.hasNameEntries())
aUBLItem.setName(_copyName(aLineProduct.getNameAtIndex(0), new NameType()));
final IDType aBuyerAssignedID = aLineProduct.getBuyerAssignedID();
if (aBuyerAssignedID != null) {
final ItemIdentificationType aUBLID = new ItemIdentificationType();
aUBLID.setID(_copyID(aBuyerAssignedID));
if (StringHelper.hasText(aUBLID.getIDValue()))
aUBLItem.setBuyersItemIdentification(aUBLID);
}
final IDType aSellerAssignedID = aLineProduct.getSellerAssignedID();
if (aSellerAssignedID != null) {
final ItemIdentificationType aUBLID = new ItemIdentificationType();
aUBLID.setID(_copyID(aSellerAssignedID));
if (StringHelper.hasText(aUBLID.getIDValue()))
aUBLItem.setSellersItemIdentification(aUBLID);
}
final IDType aGlobalID = aLineProduct.getGlobalID();
if (aGlobalID != null) {
final ItemIdentificationType aUBLID = new ItemIdentificationType();
aUBLID.setID(_copyID(aGlobalID));
if (StringHelper.hasText(aUBLID.getIDValue()))
aUBLItem.setStandardItemIdentification(aUBLID);
}
final TradeCountryType aOriginCountry = aLineProduct.getOriginTradeCountry();
if (aOriginCountry != null) {
final CountryType aUBLCountry = new CountryType();
aUBLCountry.setIdentificationCode(aOriginCountry.getIDValue());
if (aOriginCountry.hasNameEntries())
aUBLCountry.setName(_copyName(aOriginCountry.getNameAtIndex(0), new NameType()));
aUBLItem.setOriginCountry(aUBLCountry);
}
// Commodity Classification
for (final ProductClassificationType aLineProductClassification : aLineProduct.getDesignatedProductClassification()) {
final CodeType aClassCode = aLineProductClassification.getClassCode();
if (aClassCode != null) {
final CommodityClassificationType aUBLCommodityClassification = new CommodityClassificationType();
aUBLCommodityClassification.setItemClassificationCode(_copyCode(aClassCode, new ItemClassificationCodeType()));
if (aUBLCommodityClassification.getItemClassificationCode() != null)
aUBLItem.addCommodityClassification(aUBLCommodityClassification);
}
}
}
for (final TradeTaxType aTradeTax : aLineSettlement.getApplicableTradeTax()) {
final TaxCategoryType aUBLTaxCategory = new TaxCategoryType();
aUBLTaxCategory.setID(aTradeTax.getCategoryCodeValue());
if (aTradeTax.getRateApplicablePercentValue() != null)
aUBLTaxCategory.setPercent(MathHelper.getWithoutTrailingZeroes(aTradeTax.getRateApplicablePercentValue()));
final TaxSchemeType aUBLTaxScheme = new TaxSchemeType();
aUBLTaxScheme.setID(getVATScheme());
aUBLTaxCategory.setTaxScheme(aUBLTaxScheme);
aUBLItem.addClassifiedTaxCategory(aUBLTaxCategory);
}
if (aLineProduct != null) {
for (final ProductCharacteristicType aAPC : aLineProduct.getApplicableProductCharacteristic()) if (aAPC.hasDescriptionEntries()) {
final ItemPropertyType aUBLAdditionalItem = new ItemPropertyType();
aUBLAdditionalItem.setName(_copyName(aAPC.getDescriptionAtIndex(0), new NameType()));
if (aAPC.hasValueEntries())
aUBLAdditionalItem.setValue(aAPC.getValueAtIndex(0).getValue());
if (aUBLAdditionalItem.getName() != null)
aUBLItem.addAdditionalItemProperty(aUBLAdditionalItem);
}
}
final PriceType aUBLPrice = new PriceType();
boolean bUsePrice = false;
if (aLineAgreement != null) {
final TradePriceType aNPPTP = aLineAgreement.getNetPriceProductTradePrice();
if (aNPPTP != null) {
if (aNPPTP.hasChargeAmountEntries()) {
aUBLPrice.setPriceAmount(_copyAmount(aNPPTP.getChargeAmountAtIndex(0), new PriceAmountType(), sDefaultCurrencyCode));
bUsePrice = true;
}
if (aNPPTP.getBasisQuantity() != null) {
aUBLPrice.setBaseQuantity(_copyQuantity(aNPPTP.getBasisQuantity(), new BaseQuantityType()));
bUsePrice = true;
}
}
}
swapQuantityAndPriceIfNeeded(bLineExtensionAmountIsNegative, aUBLInvoiceLine.getInvoicedQuantityValue(), aUBLInvoiceLine::setInvoicedQuantity, bUsePrice ? aUBLPrice.getPriceAmountValue() : null, bUsePrice ? aUBLPrice::setPriceAmount : null);
// Allowance charge
final TradePriceType aTradePrice = aLineAgreement.getNetPriceProductTradePrice();
if (aTradePrice != null)
for (final TradeAllowanceChargeType aPriceAllowanceCharge : aTradePrice.getAppliedTradeAllowanceCharge()) {
ETriState eIsCharge = ETriState.UNDEFINED;
if (aPriceAllowanceCharge.getChargeIndicator() != null)
eIsCharge = _parseIndicator(aPriceAllowanceCharge.getChargeIndicator(), aErrorList);
else
aErrorList.add(_buildError(new String[] { "CrossIndustryInvoice", "SupplyChainTradeTransaction", "IncludedSupplyChainTradeLineItem", "SpecifiedLineTradeAgreement", "NetPriceProductTradePrice", "AppliedTradeAllowanceCharge" }, "Failed to determine if AppliedTradeAllowanceCharge is an Allowance or a Charge"));
if (eIsCharge.isDefined()) {
final AllowanceChargeType aUBLLineAllowanceCharge = new AllowanceChargeType();
aUBLLineAllowanceCharge.setChargeIndicator(eIsCharge.getAsBooleanValue());
_copyAllowanceCharge(aPriceAllowanceCharge, aUBLLineAllowanceCharge, sDefaultCurrencyCode);
aUBLPrice.addAllowanceCharge(aUBLLineAllowanceCharge);
}
}
if (bUsePrice)
aUBLInvoiceLine.setPrice(aUBLPrice);
aUBLInvoiceLine.setItem(aUBLItem);
aUBLInvoice.addInvoiceLine(aUBLInvoiceLine);
}
return aUBLInvoice;
}
use of un.unece.uncefact.data.standard.reusableaggregatebusinessinformationentity._100.HeaderTradeSettlementType in project en16931-cii2ubl by phax.
the class CIIToUBL22Converter method _convertPaymentMeans.
private void _convertPaymentMeans(@Nonnull final HeaderTradeSettlementType aHeaderSettlement, @Nonnull final TradeSettlementPaymentMeansType aPaymentMeans, @Nonnull final Consumer<oasis.names.specification.ubl.schema.xsd.commonbasiccomponents_22.IDType> aSellerIDHandler, @Nonnull final Consumer<PaymentMeansType> aPaymentMeansHandler, @Nonnull final ErrorList aErrorList) {
final String sTypeCode = aPaymentMeans.getTypeCodeValue();
final PaymentMeansType aUBLPaymentMeans = new PaymentMeansType();
final PaymentMeansCodeType aUBLPaymentMeansCode = new PaymentMeansCodeType();
// BG-16 PAYMENT INSTRUCTIONS
// BT-81 TypeCode is mandatory
aUBLPaymentMeansCode.setValue(sTypeCode);
// BT-82
if (aPaymentMeans.hasInformationEntries())
aUBLPaymentMeansCode.setName(aPaymentMeans.getInformationAtIndex(0).getValue());
// BT-83
aUBLPaymentMeans.setPaymentMeansCode(aUBLPaymentMeansCode);
for (final TextType aPaymentRef : aHeaderSettlement.getPaymentReference()) {
final PaymentIDType aUBLPaymentID = new PaymentIDType();
aUBLPaymentID.setValue(aPaymentRef.getValue());
aUBLPaymentMeans.addPaymentID(aUBLPaymentID);
}
// BG-17 CREDIT TRANSFER
final boolean bIsBG17 = isPaymentMeansCodeCreditTransfer(sTypeCode);
if (bIsBG17) {
final CreditorFinancialAccountType aAccount = aPaymentMeans.getPayeePartyCreditorFinancialAccount();
if (aAccount == null)
aErrorList.add(_buildError(null, "The element 'PayeePartyCreditorFinancialAccount' is missing for Credit Transfer"));
else {
final FinancialAccountType aUBLFinancialAccount = new FinancialAccountType();
// BT-84 mandatory
// ID/@scheme ID must be empty for the EN16931 Schematrons
aUBLFinancialAccount.setID(_copyID(aAccount.getIBANID()));
if (aUBLFinancialAccount.getID() == null)
aUBLFinancialAccount.setID(_copyID(aAccount.getProprietaryID()));
// BT-85
aUBLFinancialAccount.setName(_copyName(aAccount.getAccountName(), new NameType()));
// BT-86
final CreditorFinancialInstitutionType aInstitution = aPaymentMeans.getPayeeSpecifiedCreditorFinancialInstitution();
if (aInstitution != null) {
final BranchType aUBLBranch = new BranchType();
aUBLBranch.setID(_copyID(aInstitution.getBICID()));
if (aUBLBranch.getID() != null)
aUBLFinancialAccount.setFinancialInstitutionBranch(aUBLBranch);
}
aUBLPaymentMeans.setPayeeFinancialAccount(aUBLFinancialAccount);
}
}
// BG-18 PAYMENT CARD INFORMATION
final boolean bIsBG18 = isPaymentMeansCodePaymentCard(sTypeCode);
if (bIsBG18) {
final TradeSettlementFinancialCardType aCard = aPaymentMeans.getApplicableTradeSettlementFinancialCard();
if (aCard == null)
aErrorList.add(_buildError(null, "The element 'ApplicableTradeSettlementFinancialCard' is missing for Payment Card Information"));
else {
final CardAccountType aUBLCardAccount = new CardAccountType();
// BT-87 mandatory
aUBLCardAccount.setPrimaryAccountNumberID(_copyID(aCard.getID(), new PrimaryAccountNumberIDType()));
// No CII field present
if (StringHelper.hasText(getCardAccountNetworkID()))
aUBLCardAccount.setNetworkID(getCardAccountNetworkID());
// BT-88
if (StringHelper.hasText(aCard.getCardholderNameValue()))
aUBLCardAccount.setHolderName(aCard.getCardholderNameValue());
if (StringHelper.hasNoText(aUBLCardAccount.getPrimaryAccountNumberIDValue()))
aErrorList.add(_buildError(null, "The Payment card primary account number is missing"));
else if (StringHelper.hasNoText(aUBLCardAccount.getNetworkIDValue()))
aErrorList.add(_buildError(null, "The Payment card network ID is missing"));
else
aUBLPaymentMeans.setCardAccount(aUBLCardAccount);
}
}
// BG-19 DIRECT DEBIT
final boolean bIsBG19 = isPaymentMeansCodeDirectDebit(sTypeCode);
if (bIsBG19) {
final PaymentMandateType aUBLPaymentMandate = new PaymentMandateType();
// BT-89
for (final TradePaymentTermsType aPaymentTerms : aHeaderSettlement.getSpecifiedTradePaymentTerms()) if (aPaymentTerms.hasDirectDebitMandateIDEntries()) {
aUBLPaymentMandate.setID(_copyID(aPaymentTerms.getDirectDebitMandateIDAtIndex(0)));
if (aUBLPaymentMandate.getID() != null)
break;
}
// BT-90
// how to determine if it is the Seller or the Payee?
// For direct debit it's always assumed to be the seller
final IDType aCreditorRefID = aHeaderSettlement.getCreditorReferenceID();
if (aCreditorRefID != null) {
final oasis.names.specification.ubl.schema.xsd.commonbasiccomponents_22.IDType aSellerID = _copyID(aCreditorRefID);
aSellerID.setSchemeID("SEPA");
aSellerIDHandler.accept(aSellerID);
}
// BT-91
final DebtorFinancialAccountType aAccount = aPaymentMeans.getPayerPartyDebtorFinancialAccount();
if (aAccount != null) {
final FinancialAccountType aUBLFinancialAccount = new FinancialAccountType();
aUBLFinancialAccount.setID(_copyID(aAccount.getIBANID()));
// Name is not mapped
if (false)
aUBLFinancialAccount.setName(_copyName(aAccount.getAccountName(), new NameType()));
if (aUBLFinancialAccount.getID() != null)
aUBLPaymentMandate.setPayerFinancialAccount(aUBLFinancialAccount);
}
aUBLPaymentMeans.setPaymentMandate(aUBLPaymentMandate);
}
if (bIsBG17 || bIsBG18 || bIsBG19 || isPaymentMeansCodeOtherKnown(sTypeCode))
aPaymentMeansHandler.accept(aUBLPaymentMeans);
else
aErrorList.add(_buildError(null, "Failed to determine a supported Payment Means Type from code '" + sTypeCode + "'"));
}
use of un.unece.uncefact.data.standard.reusableaggregatebusinessinformationentity._100.HeaderTradeSettlementType in project en16931-cii2ubl by phax.
the class CIIToUBL23Converter method convertToInvoice.
@Nullable
public InvoiceType convertToInvoice(@Nonnull final CrossIndustryInvoiceType aCIIInvoice, @Nonnull final ErrorList aErrorList) {
ValueEnforcer.notNull(aCIIInvoice, "CIIInvoice");
ValueEnforcer.notNull(aErrorList, "ErrorList");
final ExchangedDocumentType aED = aCIIInvoice.getExchangedDocument();
final SupplyChainTradeTransactionType aSCTT = aCIIInvoice.getSupplyChainTradeTransaction();
if (aSCTT == null) {
// Mandatory element
return null;
}
final HeaderTradeAgreementType aHeaderAgreement = aSCTT.getApplicableHeaderTradeAgreement();
final HeaderTradeDeliveryType aHeaderDelivery = aSCTT.getApplicableHeaderTradeDelivery();
final HeaderTradeSettlementType aHeaderSettlement = aSCTT.getApplicableHeaderTradeSettlement();
if (aHeaderAgreement == null || aHeaderDelivery == null || aHeaderSettlement == null) {
// All mandatory elements
return null;
}
final InvoiceType aUBLInvoice = new InvoiceType();
if (false)
aUBLInvoice.setUBLVersionID(UBL_VERSION);
if (StringHelper.hasText(getCustomizationID()))
aUBLInvoice.setCustomizationID(getCustomizationID());
if (StringHelper.hasText(getProfileID()))
aUBLInvoice.setProfileID(getProfileID());
if (aED != null)
aUBLInvoice.setID(aED.getIDValue());
// Mandatory supplier
final SupplierPartyType aUBLSupplier = new SupplierPartyType();
aUBLInvoice.setAccountingSupplierParty(aUBLSupplier);
// Mandatory customer
final CustomerPartyType aUBLCustomer = new CustomerPartyType();
aUBLInvoice.setAccountingCustomerParty(aUBLCustomer);
// IssueDate
{
LocalDate aIssueDate = null;
if (aED != null && aED.getIssueDateTime() != null)
aIssueDate = _parseDate(aED.getIssueDateTime().getDateTimeString(), aErrorList);
if (aIssueDate != null)
aUBLInvoice.setIssueDate(aIssueDate);
}
// DueDate
{
LocalDate aDueDate = null;
for (final TradePaymentTermsType aPaymentTerms : aHeaderSettlement.getSpecifiedTradePaymentTerms()) if (aPaymentTerms.getDueDateDateTime() != null) {
aDueDate = _parseDate(aPaymentTerms.getDueDateDateTime().getDateTimeString(), aErrorList);
if (aDueDate != null)
break;
}
if (aDueDate != null)
aUBLInvoice.setDueDate(aDueDate);
}
// InvoiceTypeCode
if (aED != null)
aUBLInvoice.setInvoiceTypeCode(aED.getTypeCodeValue());
// Note
if (aED != null)
for (final un.unece.uncefact.data.standard.reusableaggregatebusinessinformationentity._100.NoteType aEDNote : aED.getIncludedNote()) ifNotNull(aUBLInvoice::addNote, _copyNote(aEDNote));
// TaxPointDate
for (final TradeTaxType aTradeTax : aHeaderSettlement.getApplicableTradeTax()) {
if (aTradeTax.getTaxPointDate() != null) {
final LocalDate aTaxPointDate = _parseDate(aTradeTax.getTaxPointDate().getDateString(), aErrorList);
if (aTaxPointDate != null) {
// Use the first tax point date only
aUBLInvoice.setTaxPointDate(aTaxPointDate);
break;
}
}
}
// DocumentCurrencyCode
final String sDefaultCurrencyCode = aHeaderSettlement.getInvoiceCurrencyCodeValue();
aUBLInvoice.setDocumentCurrencyCode(sDefaultCurrencyCode);
// TaxCurrencyCode
if (aHeaderSettlement.getTaxCurrencyCodeValue() != null) {
aUBLInvoice.setTaxCurrencyCode(aHeaderSettlement.getTaxCurrencyCodeValue());
}
// AccountingCost
for (final TradeAccountingAccountType aAccount : aHeaderSettlement.getReceivableSpecifiedTradeAccountingAccount()) {
final String sID = aAccount.getIDValue();
if (StringHelper.hasText(sID)) {
// Use the first ID
aUBLInvoice.setAccountingCost(sID);
break;
}
}
// BuyerReferences
if (aHeaderAgreement.getBuyerReferenceValue() != null) {
aUBLInvoice.setBuyerReference(aHeaderAgreement.getBuyerReferenceValue());
}
// InvoicePeriod
{
final SpecifiedPeriodType aSPT = aHeaderSettlement.getBillingSpecifiedPeriod();
if (aSPT != null) {
final DateTimeType aStartDT = aSPT.getStartDateTime();
final DateTimeType aEndDT = aSPT.getEndDateTime();
if (aStartDT != null && aEndDT != null) {
final PeriodType aUBLPeriod = new PeriodType();
aUBLPeriod.setStartDate(_parseDate(aStartDT.getDateTimeString(), aErrorList));
aUBLPeriod.setEndDate(_parseDate(aEndDT.getDateTimeString(), aErrorList));
aUBLInvoice.addInvoicePeriod(aUBLPeriod);
}
}
}
// OrderReference
{
final OrderReferenceType aUBLOrderRef = _createUBLOrderRef(aHeaderAgreement.getBuyerOrderReferencedDocument(), aHeaderAgreement.getSellerOrderReferencedDocument());
aUBLInvoice.setOrderReference(aUBLOrderRef);
}
// BillingReference
{
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aHeaderSettlement.getInvoiceReferencedDocument(), aErrorList);
if (aUBLDocRef != null) {
final BillingReferenceType aUBLBillingRef = new BillingReferenceType();
aUBLBillingRef.setInvoiceDocumentReference(aUBLDocRef);
aUBLInvoice.addBillingReference(aUBLBillingRef);
}
}
// DespatchDocumentReference
{
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aHeaderDelivery.getDespatchAdviceReferencedDocument(), aErrorList);
if (aUBLDocRef != null)
aUBLInvoice.addDespatchDocumentReference(aUBLDocRef);
}
// ReceiptDocumentReference
{
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aHeaderDelivery.getReceivingAdviceReferencedDocument(), aErrorList);
if (aUBLDocRef != null)
aUBLInvoice.addReceiptDocumentReference(aUBLDocRef);
}
// OriginatorDocumentReference
{
for (final ReferencedDocumentType aRD : aHeaderAgreement.getAdditionalReferencedDocument()) {
// Use for "Tender or lot reference" with TypeCode "50"
if (isOriginatorDocumentReferenceTypeCode(aRD.getTypeCodeValue())) {
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aRD, aErrorList);
if (aUBLDocRef != null)
aUBLInvoice.addOriginatorDocumentReference(aUBLDocRef);
}
}
}
// ContractDocumentReference
{
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aHeaderAgreement.getContractReferencedDocument(), aErrorList);
if (aUBLDocRef != null)
aUBLInvoice.addContractDocumentReference(aUBLDocRef);
}
// AdditionalDocumentReference
{
for (final ReferencedDocumentType aRD : aHeaderAgreement.getAdditionalReferencedDocument()) {
// Except OriginatorDocumentReference
if (!isOriginatorDocumentReferenceTypeCode(aRD.getTypeCodeValue())) {
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aRD, aErrorList);
if (aUBLDocRef != null)
aUBLInvoice.addAdditionalDocumentReference(aUBLDocRef);
}
}
}
// ProjectReference
{
final ProcuringProjectType aSpecifiedProcuring = aHeaderAgreement.getSpecifiedProcuringProject();
if (aSpecifiedProcuring != null) {
final String sID = aSpecifiedProcuring.getIDValue();
if (StringHelper.hasText(sID)) {
final ProjectReferenceType aUBLProjectRef = new ProjectReferenceType();
aUBLProjectRef.setID(sID);
aUBLInvoice.addProjectReference(aUBLProjectRef);
}
}
}
// Supplier Party
{
final TradePartyType aSellerParty = aHeaderAgreement.getSellerTradeParty();
if (aSellerParty != null) {
final PartyType aUBLParty = _convertParty(aSellerParty, true);
for (final TaxRegistrationType aTaxRegistration : aSellerParty.getSpecifiedTaxRegistration()) {
final PartyTaxSchemeType aUBLPartyTaxScheme = _convertPartyTaxScheme(aTaxRegistration);
if (aUBLPartyTaxScheme != null)
aUBLParty.addPartyTaxScheme(aUBLPartyTaxScheme);
}
final PartyLegalEntityType aUBLPartyLegalEntity = _convertPartyLegalEntity(aSellerParty);
if (aUBLPartyLegalEntity != null)
aUBLParty.addPartyLegalEntity(aUBLPartyLegalEntity);
final ContactType aUBLContact = _convertContact(aSellerParty);
if (aUBLContact != null)
aUBLParty.setContact(aUBLContact);
aUBLSupplier.setParty(aUBLParty);
}
}
// Customer Party
{
final TradePartyType aBuyerParty = aHeaderAgreement.getBuyerTradeParty();
if (aBuyerParty != null) {
final PartyType aUBLParty = _convertParty(aBuyerParty, false);
for (final TaxRegistrationType aTaxRegistration : aBuyerParty.getSpecifiedTaxRegistration()) {
final PartyTaxSchemeType aUBLPartyTaxScheme = _convertPartyTaxScheme(aTaxRegistration);
if (aUBLPartyTaxScheme != null)
aUBLParty.addPartyTaxScheme(aUBLPartyTaxScheme);
}
final PartyLegalEntityType aUBLPartyLegalEntity = _convertPartyLegalEntity(aBuyerParty);
if (aUBLPartyLegalEntity != null)
aUBLParty.addPartyLegalEntity(aUBLPartyLegalEntity);
final ContactType aUBLContact = _convertContact(aBuyerParty);
if (aUBLContact != null)
aUBLParty.setContact(aUBLContact);
aUBLCustomer.setParty(aUBLParty);
}
}
// Payee Party
{
final TradePartyType aPayeeParty = aHeaderSettlement.getPayeeTradeParty();
if (aPayeeParty != null) {
final PartyType aUBLParty = _convertParty(aPayeeParty, false);
for (final TaxRegistrationType aTaxRegistration : aPayeeParty.getSpecifiedTaxRegistration()) {
final PartyTaxSchemeType aUBLPartyTaxScheme = _convertPartyTaxScheme(aTaxRegistration);
if (aUBLPartyTaxScheme != null)
aUBLParty.addPartyTaxScheme(aUBLPartyTaxScheme);
}
// validation rules warning
if (false) {
final PartyLegalEntityType aUBLPartyLegalEntity = _convertPartyLegalEntity(aPayeeParty);
if (aUBLPartyLegalEntity != null)
aUBLParty.addPartyLegalEntity(aUBLPartyLegalEntity);
}
final ContactType aUBLContact = _convertContact(aPayeeParty);
if (aUBLContact != null)
aUBLParty.setContact(aUBLContact);
aUBLInvoice.setPayeeParty(aUBLParty);
}
}
// Tax Representative Party
{
final TradePartyType aTaxRepresentativeParty = aHeaderAgreement.getSellerTaxRepresentativeTradeParty();
if (aTaxRepresentativeParty != null) {
final PartyType aUBLParty = _convertParty(aTaxRepresentativeParty, false);
for (final TaxRegistrationType aTaxRegistration : aTaxRepresentativeParty.getSpecifiedTaxRegistration()) {
final PartyTaxSchemeType aUBLPartyTaxScheme = _convertPartyTaxScheme(aTaxRegistration);
if (aUBLPartyTaxScheme != null)
aUBLParty.addPartyTaxScheme(aUBLPartyTaxScheme);
}
// validation rules warning
if (false) {
final PartyLegalEntityType aUBLPartyLegalEntity = _convertPartyLegalEntity(aTaxRepresentativeParty);
if (aUBLPartyLegalEntity != null)
aUBLParty.addPartyLegalEntity(aUBLPartyLegalEntity);
}
final ContactType aUBLContact = _convertContact(aTaxRepresentativeParty);
if (aUBLContact != null)
aUBLParty.setContact(aUBLContact);
aUBLInvoice.setTaxRepresentativeParty(aUBLParty);
}
}
// Delivery
{
final DeliveryType aUBLDelivery = new DeliveryType();
boolean bUseDelivery = false;
final SupplyChainEventType aSCE = aHeaderDelivery.getActualDeliverySupplyChainEvent();
if (aSCE != null) {
final DateTimeType aODT = aSCE.getOccurrenceDateTime();
if (aODT != null) {
aUBLDelivery.setActualDeliveryDate(_parseDate(aODT.getDateTimeString(), aErrorList));
bUseDelivery = true;
}
}
final TradePartyType aShipToParty = aHeaderDelivery.getShipToTradeParty();
if (aShipToParty != null) {
final oasis.names.specification.ubl.schema.xsd.commonaggregatecomponents_23.LocationType aUBLDeliveryLocation = new oasis.names.specification.ubl.schema.xsd.commonaggregatecomponents_23.LocationType();
boolean bUseLocation = false;
final oasis.names.specification.ubl.schema.xsd.commonbasiccomponents_23.IDType aUBLID = _extractFirstPartyID(aShipToParty);
if (aUBLID != null) {
aUBLDeliveryLocation.setID(aUBLID);
bUseLocation = true;
}
final TradeAddressType aPostalAddress = aShipToParty.getPostalTradeAddress();
if (aPostalAddress != null) {
aUBLDeliveryLocation.setAddress(_convertPostalAddress(aPostalAddress));
bUseLocation = true;
}
if (bUseLocation) {
aUBLDelivery.setDeliveryLocation(aUBLDeliveryLocation);
bUseDelivery = true;
}
final TextType aName = aShipToParty.getName();
if (aName != null) {
final PartyType aUBLDeliveryParty = new PartyType();
final PartyNameType aUBLPartyName = new PartyNameType();
aUBLPartyName.setName(_copyName(aName, new NameType()));
aUBLDeliveryParty.addPartyName(aUBLPartyName);
aUBLDelivery.setDeliveryParty(aUBLDeliveryParty);
bUseDelivery = true;
}
}
if (bUseDelivery)
aUBLInvoice.addDelivery(aUBLDelivery);
}
// Payment means
{
for (final TradeSettlementPaymentMeansType aPaymentMeans : aHeaderSettlement.getSpecifiedTradeSettlementPaymentMeans()) {
_convertPaymentMeans(aHeaderSettlement, aPaymentMeans, x -> _addPartyID(x, aUBLInvoice.getAccountingSupplierParty().getParty()), aUBLInvoice::addPaymentMeans, aErrorList);
// Allowed again in 1.2.1: exactly 2
if (false)
// Since v1.2.0 only one is allowed
if (true)
break;
}
}
// Payment Terms
{
for (final TradePaymentTermsType aPaymentTerms : aHeaderSettlement.getSpecifiedTradePaymentTerms()) {
final PaymentTermsType aUBLPaymenTerms = new PaymentTermsType();
for (final TextType aDesc : aPaymentTerms.getDescription()) ifNotNull(aUBLPaymenTerms::addNote, _copyNote(aDesc));
if (aUBLPaymenTerms.hasNoteEntries())
aUBLInvoice.addPaymentTerms(aUBLPaymenTerms);
}
}
// Allowance Charge
{
for (final TradeAllowanceChargeType aAllowanceCharge : aHeaderSettlement.getSpecifiedTradeAllowanceCharge()) {
ETriState eIsCharge = ETriState.UNDEFINED;
if (aAllowanceCharge.getChargeIndicator() != null)
eIsCharge = _parseIndicator(aAllowanceCharge.getChargeIndicator(), aErrorList);
else
aErrorList.add(_buildError(new String[] { "CrossIndustryInvoice", "SupplyChainTradeTransaction", "ApplicableHeaderTradeSettlement", "SpecifiedTradeAllowanceCharge" }, "Failed to determine if SpecifiedTradeAllowanceCharge is an Allowance or a Charge"));
if (eIsCharge.isDefined()) {
final AllowanceChargeType aUBLAllowanceCharge = new AllowanceChargeType();
aUBLAllowanceCharge.setChargeIndicator(eIsCharge.getAsBooleanValue());
_copyAllowanceCharge(aAllowanceCharge, aUBLAllowanceCharge, sDefaultCurrencyCode);
aUBLInvoice.addAllowanceCharge(aUBLAllowanceCharge);
}
}
}
final TradeSettlementHeaderMonetarySummationType aSTSHMS = aHeaderSettlement.getSpecifiedTradeSettlementHeaderMonetarySummation();
// TaxTotal
{
TaxTotalType aUBLTaxTotal = null;
if (aSTSHMS != null && aSTSHMS.hasTaxTotalAmountEntries()) {
// For all currencies
for (final AmountType aTaxTotalAmount : aSTSHMS.getTaxTotalAmount()) {
final TaxTotalType aUBLCurTaxTotal = new TaxTotalType();
aUBLCurTaxTotal.setTaxAmount(_copyAmount(aTaxTotalAmount, new TaxAmountType(), sDefaultCurrencyCode));
aUBLInvoice.addTaxTotal(aUBLCurTaxTotal);
if (aUBLTaxTotal == null) {
// Use the first one
aUBLTaxTotal = aUBLCurTaxTotal;
}
}
} else {
// Mandatory in UBL
final TaxAmountType aUBLTaxAmount = new TaxAmountType();
aUBLTaxAmount.setValue(BigDecimal.ZERO);
aUBLTaxAmount.setCurrencyID(sDefaultCurrencyCode);
aUBLTaxTotal = new TaxTotalType();
aUBLTaxTotal.setTaxAmount(aUBLTaxAmount);
aUBLInvoice.addTaxTotal(aUBLTaxTotal);
}
for (final TradeTaxType aTradeTax : aHeaderSettlement.getApplicableTradeTax()) {
final TaxSubtotalType aUBLTaxSubtotal = new TaxSubtotalType();
if (aTradeTax.hasBasisAmountEntries()) {
aUBLTaxSubtotal.setTaxableAmount(_copyAmount(aTradeTax.getBasisAmountAtIndex(0), new TaxableAmountType(), sDefaultCurrencyCode));
}
if (aTradeTax.hasCalculatedAmountEntries()) {
aUBLTaxSubtotal.setTaxAmount(_copyAmount(aTradeTax.getCalculatedAmountAtIndex(0), new TaxAmountType(), sDefaultCurrencyCode));
}
final TaxCategoryType aUBLTaxCategory = new TaxCategoryType();
aUBLTaxCategory.setID(aTradeTax.getCategoryCodeValue());
if (aTradeTax.getRateApplicablePercentValue() != null)
aUBLTaxCategory.setPercent(MathHelper.getWithoutTrailingZeroes(aTradeTax.getRateApplicablePercentValue()));
if (StringHelper.hasText(aTradeTax.getExemptionReasonCodeValue()))
aUBLTaxCategory.setTaxExemptionReasonCode(aTradeTax.getExemptionReasonCodeValue());
if (aTradeTax.getExemptionReason() != null) {
final TaxExemptionReasonType aUBLTaxExemptionReason = new TaxExemptionReasonType();
aUBLTaxExemptionReason.setValue(aTradeTax.getExemptionReason().getValue());
aUBLTaxExemptionReason.setLanguageID(aTradeTax.getExemptionReason().getLanguageID());
aUBLTaxExemptionReason.setLanguageLocaleID(aTradeTax.getExemptionReason().getLanguageLocaleID());
aUBLTaxCategory.addTaxExemptionReason(aUBLTaxExemptionReason);
}
final TaxSchemeType aUBLTaxScheme = new TaxSchemeType();
aUBLTaxScheme.setID(getVATScheme());
aUBLTaxCategory.setTaxScheme(aUBLTaxScheme);
aUBLTaxSubtotal.setTaxCategory(aUBLTaxCategory);
aUBLTaxTotal.addTaxSubtotal(aUBLTaxSubtotal);
}
}
// LegalMonetaryTotal
{
final MonetaryTotalType aUBLMonetaryTotal = new MonetaryTotalType();
if (aSTSHMS != null) {
if (aSTSHMS.hasLineTotalAmountEntries())
aUBLMonetaryTotal.setLineExtensionAmount(_copyAmount(aSTSHMS.getLineTotalAmountAtIndex(0), new LineExtensionAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasTaxBasisTotalAmountEntries())
aUBLMonetaryTotal.setTaxExclusiveAmount(_copyAmount(aSTSHMS.getTaxBasisTotalAmountAtIndex(0), new TaxExclusiveAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasGrandTotalAmountEntries())
aUBLMonetaryTotal.setTaxInclusiveAmount(_copyAmount(aSTSHMS.getGrandTotalAmountAtIndex(0), new TaxInclusiveAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasAllowanceTotalAmountEntries())
aUBLMonetaryTotal.setAllowanceTotalAmount(_copyAmount(aSTSHMS.getAllowanceTotalAmountAtIndex(0), new AllowanceTotalAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasChargeTotalAmountEntries())
aUBLMonetaryTotal.setChargeTotalAmount(_copyAmount(aSTSHMS.getChargeTotalAmountAtIndex(0), new ChargeTotalAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasTotalPrepaidAmountEntries())
aUBLMonetaryTotal.setPrepaidAmount(_copyAmount(aSTSHMS.getTotalPrepaidAmountAtIndex(0), new PrepaidAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasRoundingAmountEntries()) {
// compatibility
if (MathHelper.isNE0(aSTSHMS.getRoundingAmountAtIndex(0).getValue()))
aUBLMonetaryTotal.setPayableRoundingAmount(_copyAmount(aSTSHMS.getRoundingAmountAtIndex(0), new PayableRoundingAmountType(), sDefaultCurrencyCode));
}
if (aSTSHMS.hasDuePayableAmountEntries())
aUBLMonetaryTotal.setPayableAmount(_copyAmount(aSTSHMS.getDuePayableAmountAtIndex(0), new PayableAmountType(), sDefaultCurrencyCode));
}
aUBLInvoice.setLegalMonetaryTotal(aUBLMonetaryTotal);
}
// All invoice lines
for (final SupplyChainTradeLineItemType aLineItem : aSCTT.getIncludedSupplyChainTradeLineItem()) {
final InvoiceLineType aUBLInvoiceLine = new InvoiceLineType();
final DocumentLineDocumentType aDLD = aLineItem.getAssociatedDocumentLineDocument();
aUBLInvoiceLine.setID(_copyID(aDLD.getLineID()));
// Note
for (final un.unece.uncefact.data.standard.reusableaggregatebusinessinformationentity._100.NoteType aLineNote : aDLD.getIncludedNote()) ifNotNull(aUBLInvoiceLine::addNote, _copyNote(aLineNote));
// Line extension amount
boolean bLineExtensionAmountIsNegative = false;
final LineTradeSettlementType aLineSettlement = aLineItem.getSpecifiedLineTradeSettlement();
final TradeSettlementLineMonetarySummationType aSTSLMS = aLineSettlement.getSpecifiedTradeSettlementLineMonetarySummation();
if (aSTSLMS != null) {
if (aSTSLMS.hasLineTotalAmountEntries()) {
aUBLInvoiceLine.setLineExtensionAmount(_copyAmount(aSTSLMS.getLineTotalAmountAtIndex(0), new LineExtensionAmountType(), sDefaultCurrencyCode));
if (isLT0Strict(aUBLInvoiceLine.getLineExtensionAmountValue()))
bLineExtensionAmountIsNegative = true;
}
}
// Invoiced quantity
final LineTradeDeliveryType aLineDelivery = aLineItem.getSpecifiedLineTradeDelivery();
if (aLineDelivery != null) {
final QuantityType aBilledQuantity = aLineDelivery.getBilledQuantity();
if (aBilledQuantity != null) {
aUBLInvoiceLine.setInvoicedQuantity(_copyQuantity(aBilledQuantity, new InvoicedQuantityType()));
}
}
// Accounting cost
if (aLineSettlement.hasReceivableSpecifiedTradeAccountingAccountEntries()) {
final TradeAccountingAccountType aLineAA = aLineSettlement.getReceivableSpecifiedTradeAccountingAccountAtIndex(0);
aUBLInvoiceLine.setAccountingCost(aLineAA.getIDValue());
}
// Invoice period
final SpecifiedPeriodType aLineBillingPeriod = aLineSettlement.getBillingSpecifiedPeriod();
if (aLineBillingPeriod != null) {
final PeriodType aUBLLinePeriod = new PeriodType();
if (aLineBillingPeriod.getStartDateTime() != null)
aUBLLinePeriod.setStartDate(_parseDate(aLineBillingPeriod.getStartDateTime().getDateTimeString(), aErrorList));
if (aLineBillingPeriod.getEndDateTime() != null)
aUBLLinePeriod.setEndDate(_parseDate(aLineBillingPeriod.getEndDateTime().getDateTimeString(), aErrorList));
aUBLInvoiceLine.addInvoicePeriod(aUBLLinePeriod);
}
// Order line reference
final LineTradeAgreementType aLineAgreement = aLineItem.getSpecifiedLineTradeAgreement();
if (aLineAgreement != null) {
final ReferencedDocumentType aBuyerOrderReference = aLineAgreement.getBuyerOrderReferencedDocument();
if (aBuyerOrderReference != null && StringHelper.hasText(aBuyerOrderReference.getLineIDValue())) {
final OrderLineReferenceType aUBLOrderLineReference = new OrderLineReferenceType();
aUBLOrderLineReference.setLineID(_copyID(aBuyerOrderReference.getLineID(), new LineIDType()));
aUBLInvoiceLine.addOrderLineReference(aUBLOrderLineReference);
}
}
// Document reference
for (final ReferencedDocumentType aLineReferencedDocument : aLineSettlement.getAdditionalReferencedDocument()) {
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aLineReferencedDocument, aErrorList);
if (aUBLDocRef != null)
aUBLInvoiceLine.addDocumentReference(aUBLDocRef);
}
// Allowance charge
for (final TradeAllowanceChargeType aLineAllowanceCharge : aLineSettlement.getSpecifiedTradeAllowanceCharge()) {
ETriState eIsCharge = ETriState.UNDEFINED;
if (aLineAllowanceCharge.getChargeIndicator() != null)
eIsCharge = _parseIndicator(aLineAllowanceCharge.getChargeIndicator(), aErrorList);
else
aErrorList.add(_buildError(new String[] { "CrossIndustryInvoice", "SupplyChainTradeTransaction", "IncludedSupplyChainTradeLineItem", "SpecifiedLineTradeSettlement", "SpecifiedTradeAllowanceCharge" }, "Failed to determine if SpecifiedTradeAllowanceCharge is an Allowance or a Charge"));
if (eIsCharge.isDefined()) {
final AllowanceChargeType aUBLLineAllowanceCharge = new AllowanceChargeType();
aUBLLineAllowanceCharge.setChargeIndicator(eIsCharge.getAsBooleanValue());
_copyAllowanceCharge(aLineAllowanceCharge, aUBLLineAllowanceCharge, sDefaultCurrencyCode);
aUBLInvoiceLine.addAllowanceCharge(aUBLLineAllowanceCharge);
}
}
// Item
final ItemType aUBLItem = new ItemType();
final TradeProductType aLineProduct = aLineItem.getSpecifiedTradeProduct();
if (aLineProduct != null) {
final TextType aDescription = aLineProduct.getDescription();
if (aDescription != null)
ifNotNull(aUBLItem::addDescription, _copyName(aDescription, new DescriptionType()));
if (aLineProduct.hasNameEntries())
aUBLItem.setName(_copyName(aLineProduct.getNameAtIndex(0), new NameType()));
final IDType aBuyerAssignedID = aLineProduct.getBuyerAssignedID();
if (aBuyerAssignedID != null) {
final ItemIdentificationType aUBLID = new ItemIdentificationType();
aUBLID.setID(_copyID(aBuyerAssignedID));
if (StringHelper.hasText(aUBLID.getIDValue()))
aUBLItem.setBuyersItemIdentification(aUBLID);
}
final IDType aSellerAssignedID = aLineProduct.getSellerAssignedID();
if (aSellerAssignedID != null) {
final ItemIdentificationType aUBLID = new ItemIdentificationType();
aUBLID.setID(_copyID(aSellerAssignedID));
if (StringHelper.hasText(aUBLID.getIDValue()))
aUBLItem.setSellersItemIdentification(aUBLID);
}
final IDType aGlobalID = aLineProduct.getGlobalID();
if (aGlobalID != null) {
final ItemIdentificationType aUBLID = new ItemIdentificationType();
aUBLID.setID(_copyID(aGlobalID));
if (StringHelper.hasText(aUBLID.getIDValue()))
aUBLItem.setStandardItemIdentification(aUBLID);
}
final TradeCountryType aOriginCountry = aLineProduct.getOriginTradeCountry();
if (aOriginCountry != null) {
final CountryType aUBLCountry = new CountryType();
aUBLCountry.setIdentificationCode(aOriginCountry.getIDValue());
if (aOriginCountry.hasNameEntries())
aUBLCountry.setName(_copyName(aOriginCountry.getNameAtIndex(0), new NameType()));
aUBLItem.setOriginCountry(aUBLCountry);
}
// Commodity Classification
for (final ProductClassificationType aLineProductClassification : aLineProduct.getDesignatedProductClassification()) {
final CodeType aClassCode = aLineProductClassification.getClassCode();
if (aClassCode != null) {
final CommodityClassificationType aUBLCommodityClassification = new CommodityClassificationType();
aUBLCommodityClassification.setItemClassificationCode(_copyCode(aClassCode, new ItemClassificationCodeType()));
if (aUBLCommodityClassification.getItemClassificationCode() != null)
aUBLItem.addCommodityClassification(aUBLCommodityClassification);
}
}
}
for (final TradeTaxType aTradeTax : aLineSettlement.getApplicableTradeTax()) {
final TaxCategoryType aUBLTaxCategory = new TaxCategoryType();
aUBLTaxCategory.setID(aTradeTax.getCategoryCodeValue());
if (aTradeTax.getRateApplicablePercentValue() != null)
aUBLTaxCategory.setPercent(MathHelper.getWithoutTrailingZeroes(aTradeTax.getRateApplicablePercentValue()));
final TaxSchemeType aUBLTaxScheme = new TaxSchemeType();
aUBLTaxScheme.setID(getVATScheme());
aUBLTaxCategory.setTaxScheme(aUBLTaxScheme);
aUBLItem.addClassifiedTaxCategory(aUBLTaxCategory);
}
if (aLineProduct != null) {
for (final ProductCharacteristicType aAPC : aLineProduct.getApplicableProductCharacteristic()) if (aAPC.hasDescriptionEntries()) {
final ItemPropertyType aUBLAdditionalItem = new ItemPropertyType();
aUBLAdditionalItem.setName(_copyName(aAPC.getDescriptionAtIndex(0), new NameType()));
if (aAPC.hasValueEntries())
aUBLAdditionalItem.setValue(aAPC.getValueAtIndex(0).getValue());
if (aUBLAdditionalItem.getName() != null)
aUBLItem.addAdditionalItemProperty(aUBLAdditionalItem);
}
}
final PriceType aUBLPrice = new PriceType();
boolean bUsePrice = false;
if (aLineAgreement != null) {
final TradePriceType aNPPTP = aLineAgreement.getNetPriceProductTradePrice();
if (aNPPTP != null) {
if (aNPPTP.hasChargeAmountEntries()) {
aUBLPrice.setPriceAmount(_copyAmount(aNPPTP.getChargeAmountAtIndex(0), new PriceAmountType(), sDefaultCurrencyCode));
bUsePrice = true;
}
if (aNPPTP.getBasisQuantity() != null) {
aUBLPrice.setBaseQuantity(_copyQuantity(aNPPTP.getBasisQuantity(), new BaseQuantityType()));
bUsePrice = true;
}
}
}
swapQuantityAndPriceIfNeeded(bLineExtensionAmountIsNegative, aUBLInvoiceLine.getInvoicedQuantityValue(), aUBLInvoiceLine::setInvoicedQuantity, bUsePrice ? aUBLPrice.getPriceAmountValue() : null, bUsePrice ? aUBLPrice::setPriceAmount : null);
// Allowance charge
final TradePriceType aTradePrice = aLineAgreement.getNetPriceProductTradePrice();
if (aTradePrice != null)
for (final TradeAllowanceChargeType aPriceAllowanceCharge : aTradePrice.getAppliedTradeAllowanceCharge()) {
ETriState eIsCharge = ETriState.UNDEFINED;
if (aPriceAllowanceCharge.getChargeIndicator() != null)
eIsCharge = _parseIndicator(aPriceAllowanceCharge.getChargeIndicator(), aErrorList);
else
aErrorList.add(_buildError(new String[] { "CrossIndustryInvoice", "SupplyChainTradeTransaction", "IncludedSupplyChainTradeLineItem", "SpecifiedLineTradeAgreement", "NetPriceProductTradePrice", "AppliedTradeAllowanceCharge" }, "Failed to determine if AppliedTradeAllowanceCharge is an Allowance or a Charge"));
if (eIsCharge.isDefined()) {
final AllowanceChargeType aUBLLineAllowanceCharge = new AllowanceChargeType();
aUBLLineAllowanceCharge.setChargeIndicator(eIsCharge.getAsBooleanValue());
_copyAllowanceCharge(aPriceAllowanceCharge, aUBLLineAllowanceCharge, sDefaultCurrencyCode);
aUBLPrice.addAllowanceCharge(aUBLLineAllowanceCharge);
}
}
if (bUsePrice)
aUBLInvoiceLine.setPrice(aUBLPrice);
aUBLInvoiceLine.setItem(aUBLItem);
aUBLInvoice.addInvoiceLine(aUBLInvoiceLine);
}
return aUBLInvoice;
}
use of un.unece.uncefact.data.standard.reusableaggregatebusinessinformationentity._100.HeaderTradeSettlementType in project en16931-cii2ubl by phax.
the class CIIToUBL21Converter method convertToInvoice.
@Nullable
public InvoiceType convertToInvoice(@Nonnull final CrossIndustryInvoiceType aCIIInvoice, @Nonnull final ErrorList aErrorList) {
ValueEnforcer.notNull(aCIIInvoice, "CIIInvoice");
ValueEnforcer.notNull(aErrorList, "ErrorList");
final ExchangedDocumentType aED = aCIIInvoice.getExchangedDocument();
final SupplyChainTradeTransactionType aSCTT = aCIIInvoice.getSupplyChainTradeTransaction();
if (aSCTT == null) {
// Mandatory element
return null;
}
final HeaderTradeAgreementType aHeaderAgreement = aSCTT.getApplicableHeaderTradeAgreement();
final HeaderTradeDeliveryType aHeaderDelivery = aSCTT.getApplicableHeaderTradeDelivery();
final HeaderTradeSettlementType aHeaderSettlement = aSCTT.getApplicableHeaderTradeSettlement();
if (aHeaderAgreement == null || aHeaderDelivery == null || aHeaderSettlement == null) {
// All mandatory elements
return null;
}
final InvoiceType aUBLInvoice = new InvoiceType();
if (false)
aUBLInvoice.setUBLVersionID(UBL_VERSION);
if (StringHelper.hasText(getCustomizationID()))
aUBLInvoice.setCustomizationID(getCustomizationID());
if (StringHelper.hasText(getProfileID()))
aUBLInvoice.setProfileID(getProfileID());
if (aED != null)
aUBLInvoice.setID(aED.getIDValue());
// Mandatory supplier
final SupplierPartyType aUBLSupplier = new SupplierPartyType();
aUBLInvoice.setAccountingSupplierParty(aUBLSupplier);
// Mandatory customer
final CustomerPartyType aUBLCustomer = new CustomerPartyType();
aUBLInvoice.setAccountingCustomerParty(aUBLCustomer);
// IssueDate
{
LocalDate aIssueDate = null;
if (aED != null && aED.getIssueDateTime() != null)
aIssueDate = _parseDate(aED.getIssueDateTime().getDateTimeString(), aErrorList);
if (aIssueDate != null)
aUBLInvoice.setIssueDate(aIssueDate);
}
// DueDate
{
LocalDate aDueDate = null;
for (final TradePaymentTermsType aPaymentTerms : aHeaderSettlement.getSpecifiedTradePaymentTerms()) if (aPaymentTerms.getDueDateDateTime() != null) {
aDueDate = _parseDate(aPaymentTerms.getDueDateDateTime().getDateTimeString(), aErrorList);
if (aDueDate != null)
break;
}
if (aDueDate != null)
aUBLInvoice.setDueDate(aDueDate);
}
// InvoiceTypeCode
if (aED != null)
aUBLInvoice.setInvoiceTypeCode(aED.getTypeCodeValue());
// Note
if (aED != null)
for (final un.unece.uncefact.data.standard.reusableaggregatebusinessinformationentity._100.NoteType aEDNote : aED.getIncludedNote()) ifNotNull(aUBLInvoice::addNote, _copyNote(aEDNote));
// TaxPointDate
for (final TradeTaxType aTradeTax : aHeaderSettlement.getApplicableTradeTax()) {
if (aTradeTax.getTaxPointDate() != null) {
final LocalDate aTaxPointDate = _parseDate(aTradeTax.getTaxPointDate().getDateString(), aErrorList);
if (aTaxPointDate != null) {
// Use the first tax point date only
aUBLInvoice.setTaxPointDate(aTaxPointDate);
break;
}
}
}
// DocumentCurrencyCode
final String sDefaultCurrencyCode = aHeaderSettlement.getInvoiceCurrencyCodeValue();
aUBLInvoice.setDocumentCurrencyCode(sDefaultCurrencyCode);
// TaxCurrencyCode
if (aHeaderSettlement.getTaxCurrencyCodeValue() != null) {
aUBLInvoice.setTaxCurrencyCode(aHeaderSettlement.getTaxCurrencyCodeValue());
}
// AccountingCost
for (final TradeAccountingAccountType aAccount : aHeaderSettlement.getReceivableSpecifiedTradeAccountingAccount()) {
final String sID = aAccount.getIDValue();
if (StringHelper.hasText(sID)) {
// Use the first ID
aUBLInvoice.setAccountingCost(sID);
break;
}
}
// BuyerReferences
if (aHeaderAgreement.getBuyerReferenceValue() != null) {
aUBLInvoice.setBuyerReference(aHeaderAgreement.getBuyerReferenceValue());
}
// InvoicePeriod
{
final SpecifiedPeriodType aSPT = aHeaderSettlement.getBillingSpecifiedPeriod();
if (aSPT != null) {
final DateTimeType aStartDT = aSPT.getStartDateTime();
final DateTimeType aEndDT = aSPT.getEndDateTime();
if (aStartDT != null && aEndDT != null) {
final PeriodType aUBLPeriod = new PeriodType();
aUBLPeriod.setStartDate(_parseDate(aStartDT.getDateTimeString(), aErrorList));
aUBLPeriod.setEndDate(_parseDate(aEndDT.getDateTimeString(), aErrorList));
aUBLInvoice.addInvoicePeriod(aUBLPeriod);
}
}
}
// OrderReference
{
final OrderReferenceType aUBLOrderRef = _createUBLOrderRef(aHeaderAgreement.getBuyerOrderReferencedDocument(), aHeaderAgreement.getSellerOrderReferencedDocument());
aUBLInvoice.setOrderReference(aUBLOrderRef);
}
// BillingReference
{
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aHeaderSettlement.getInvoiceReferencedDocument(), aErrorList);
if (aUBLDocRef != null) {
final BillingReferenceType aUBLBillingRef = new BillingReferenceType();
aUBLBillingRef.setInvoiceDocumentReference(aUBLDocRef);
aUBLInvoice.addBillingReference(aUBLBillingRef);
}
}
// DespatchDocumentReference
{
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aHeaderDelivery.getDespatchAdviceReferencedDocument(), aErrorList);
if (aUBLDocRef != null)
aUBLInvoice.addDespatchDocumentReference(aUBLDocRef);
}
// ReceiptDocumentReference
{
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aHeaderDelivery.getReceivingAdviceReferencedDocument(), aErrorList);
if (aUBLDocRef != null)
aUBLInvoice.addReceiptDocumentReference(aUBLDocRef);
}
// OriginatorDocumentReference
{
for (final ReferencedDocumentType aRD : aHeaderAgreement.getAdditionalReferencedDocument()) {
// Use for "Tender or lot reference" with TypeCode "50"
if (isOriginatorDocumentReferenceTypeCode(aRD.getTypeCodeValue())) {
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aRD, aErrorList);
if (aUBLDocRef != null)
aUBLInvoice.addOriginatorDocumentReference(aUBLDocRef);
}
}
}
// ContractDocumentReference
{
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aHeaderAgreement.getContractReferencedDocument(), aErrorList);
if (aUBLDocRef != null)
aUBLInvoice.addContractDocumentReference(aUBLDocRef);
}
// AdditionalDocumentReference
{
for (final ReferencedDocumentType aRD : aHeaderAgreement.getAdditionalReferencedDocument()) {
// Except OriginatorDocumentReference
if (!isOriginatorDocumentReferenceTypeCode(aRD.getTypeCodeValue())) {
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aRD, aErrorList);
if (aUBLDocRef != null)
aUBLInvoice.addAdditionalDocumentReference(aUBLDocRef);
}
}
}
// ProjectReference
{
final ProcuringProjectType aSpecifiedProcuring = aHeaderAgreement.getSpecifiedProcuringProject();
if (aSpecifiedProcuring != null) {
final String sID = aSpecifiedProcuring.getIDValue();
if (StringHelper.hasText(sID)) {
final ProjectReferenceType aUBLProjectRef = new ProjectReferenceType();
aUBLProjectRef.setID(sID);
aUBLInvoice.addProjectReference(aUBLProjectRef);
}
}
}
// Supplier Party
{
final TradePartyType aSellerParty = aHeaderAgreement.getSellerTradeParty();
if (aSellerParty != null) {
final PartyType aUBLParty = _convertParty(aSellerParty, true);
for (final TaxRegistrationType aTaxRegistration : aSellerParty.getSpecifiedTaxRegistration()) {
final PartyTaxSchemeType aUBLPartyTaxScheme = _convertPartyTaxScheme(aTaxRegistration);
if (aUBLPartyTaxScheme != null)
aUBLParty.addPartyTaxScheme(aUBLPartyTaxScheme);
}
final PartyLegalEntityType aUBLPartyLegalEntity = _convertPartyLegalEntity(aSellerParty);
if (aUBLPartyLegalEntity != null)
aUBLParty.addPartyLegalEntity(aUBLPartyLegalEntity);
final ContactType aUBLContact = _convertContact(aSellerParty);
if (aUBLContact != null)
aUBLParty.setContact(aUBLContact);
aUBLSupplier.setParty(aUBLParty);
}
}
// Customer Party
{
final TradePartyType aBuyerParty = aHeaderAgreement.getBuyerTradeParty();
if (aBuyerParty != null) {
final PartyType aUBLParty = _convertParty(aBuyerParty, false);
for (final TaxRegistrationType aTaxRegistration : aBuyerParty.getSpecifiedTaxRegistration()) {
final PartyTaxSchemeType aUBLPartyTaxScheme = _convertPartyTaxScheme(aTaxRegistration);
if (aUBLPartyTaxScheme != null)
aUBLParty.addPartyTaxScheme(aUBLPartyTaxScheme);
}
final PartyLegalEntityType aUBLPartyLegalEntity = _convertPartyLegalEntity(aBuyerParty);
if (aUBLPartyLegalEntity != null)
aUBLParty.addPartyLegalEntity(aUBLPartyLegalEntity);
final ContactType aUBLContact = _convertContact(aBuyerParty);
if (aUBLContact != null)
aUBLParty.setContact(aUBLContact);
aUBLCustomer.setParty(aUBLParty);
}
}
// Payee Party
{
final TradePartyType aPayeeParty = aHeaderSettlement.getPayeeTradeParty();
if (aPayeeParty != null) {
final PartyType aUBLParty = _convertParty(aPayeeParty, false);
for (final TaxRegistrationType aTaxRegistration : aPayeeParty.getSpecifiedTaxRegistration()) {
final PartyTaxSchemeType aUBLPartyTaxScheme = _convertPartyTaxScheme(aTaxRegistration);
if (aUBLPartyTaxScheme != null)
aUBLParty.addPartyTaxScheme(aUBLPartyTaxScheme);
}
// validation rules warning
if (false) {
final PartyLegalEntityType aUBLPartyLegalEntity = _convertPartyLegalEntity(aPayeeParty);
if (aUBLPartyLegalEntity != null)
aUBLParty.addPartyLegalEntity(aUBLPartyLegalEntity);
}
final ContactType aUBLContact = _convertContact(aPayeeParty);
if (aUBLContact != null)
aUBLParty.setContact(aUBLContact);
aUBLInvoice.setPayeeParty(aUBLParty);
}
}
// Tax Representative Party
{
final TradePartyType aTaxRepresentativeParty = aHeaderAgreement.getSellerTaxRepresentativeTradeParty();
if (aTaxRepresentativeParty != null) {
final PartyType aUBLParty = _convertParty(aTaxRepresentativeParty, false);
for (final TaxRegistrationType aTaxRegistration : aTaxRepresentativeParty.getSpecifiedTaxRegistration()) {
final PartyTaxSchemeType aUBLPartyTaxScheme = _convertPartyTaxScheme(aTaxRegistration);
if (aUBLPartyTaxScheme != null)
aUBLParty.addPartyTaxScheme(aUBLPartyTaxScheme);
}
// validation rules warning
if (false) {
final PartyLegalEntityType aUBLPartyLegalEntity = _convertPartyLegalEntity(aTaxRepresentativeParty);
if (aUBLPartyLegalEntity != null)
aUBLParty.addPartyLegalEntity(aUBLPartyLegalEntity);
}
final ContactType aUBLContact = _convertContact(aTaxRepresentativeParty);
if (aUBLContact != null)
aUBLParty.setContact(aUBLContact);
aUBLInvoice.setTaxRepresentativeParty(aUBLParty);
}
}
// Delivery
{
final DeliveryType aUBLDelivery = new DeliveryType();
boolean bUseDelivery = false;
final SupplyChainEventType aSCE = aHeaderDelivery.getActualDeliverySupplyChainEvent();
if (aSCE != null) {
final DateTimeType aODT = aSCE.getOccurrenceDateTime();
if (aODT != null) {
aUBLDelivery.setActualDeliveryDate(_parseDate(aODT.getDateTimeString(), aErrorList));
bUseDelivery = true;
}
}
final TradePartyType aShipToParty = aHeaderDelivery.getShipToTradeParty();
if (aShipToParty != null) {
final oasis.names.specification.ubl.schema.xsd.commonaggregatecomponents_21.LocationType aUBLDeliveryLocation = new oasis.names.specification.ubl.schema.xsd.commonaggregatecomponents_21.LocationType();
boolean bUseLocation = false;
final oasis.names.specification.ubl.schema.xsd.commonbasiccomponents_21.IDType aUBLID = _extractFirstPartyID(aShipToParty);
if (aUBLID != null) {
aUBLDeliveryLocation.setID(aUBLID);
bUseLocation = true;
}
final TradeAddressType aPostalAddress = aShipToParty.getPostalTradeAddress();
if (aPostalAddress != null) {
aUBLDeliveryLocation.setAddress(_convertPostalAddress(aPostalAddress));
bUseLocation = true;
}
if (bUseLocation) {
aUBLDelivery.setDeliveryLocation(aUBLDeliveryLocation);
bUseDelivery = true;
}
final TextType aName = aShipToParty.getName();
if (aName != null) {
final PartyType aUBLDeliveryParty = new PartyType();
final PartyNameType aUBLPartyName = new PartyNameType();
aUBLPartyName.setName(_copyName(aName, new NameType()));
aUBLDeliveryParty.addPartyName(aUBLPartyName);
aUBLDelivery.setDeliveryParty(aUBLDeliveryParty);
bUseDelivery = true;
}
}
if (bUseDelivery)
aUBLInvoice.addDelivery(aUBLDelivery);
}
// Payment means
{
for (final TradeSettlementPaymentMeansType aPaymentMeans : aHeaderSettlement.getSpecifiedTradeSettlementPaymentMeans()) {
_convertPaymentMeans(aHeaderSettlement, aPaymentMeans, x -> _addPartyID(x, aUBLInvoice.getAccountingSupplierParty().getParty()), aUBLInvoice::addPaymentMeans, aErrorList);
// Allowed again in 1.2.1: exactly 2
if (false)
// Since v1.2.0 only one is allowed
if (true)
break;
}
}
// Payment Terms
{
for (final TradePaymentTermsType aPaymentTerms : aHeaderSettlement.getSpecifiedTradePaymentTerms()) {
final PaymentTermsType aUBLPaymenTerms = new PaymentTermsType();
for (final TextType aDesc : aPaymentTerms.getDescription()) ifNotNull(aUBLPaymenTerms::addNote, _copyNote(aDesc));
if (aUBLPaymenTerms.hasNoteEntries())
aUBLInvoice.addPaymentTerms(aUBLPaymenTerms);
}
}
// Allowance Charge
{
for (final TradeAllowanceChargeType aAllowanceCharge : aHeaderSettlement.getSpecifiedTradeAllowanceCharge()) {
ETriState eIsCharge = ETriState.UNDEFINED;
if (aAllowanceCharge.getChargeIndicator() != null)
eIsCharge = _parseIndicator(aAllowanceCharge.getChargeIndicator(), aErrorList);
else
aErrorList.add(_buildError(new String[] { "CrossIndustryInvoice", "SupplyChainTradeTransaction", "ApplicableHeaderTradeSettlement", "SpecifiedTradeAllowanceCharge" }, "Failed to determine if SpecifiedTradeAllowanceCharge is an Allowance or a Charge"));
if (eIsCharge.isDefined()) {
final AllowanceChargeType aUBLAllowanceCharge = new AllowanceChargeType();
aUBLAllowanceCharge.setChargeIndicator(eIsCharge.getAsBooleanValue());
_copyAllowanceCharge(aAllowanceCharge, aUBLAllowanceCharge, sDefaultCurrencyCode);
aUBLInvoice.addAllowanceCharge(aUBLAllowanceCharge);
}
}
}
final TradeSettlementHeaderMonetarySummationType aSTSHMS = aHeaderSettlement.getSpecifiedTradeSettlementHeaderMonetarySummation();
// TaxTotal
{
TaxTotalType aUBLTaxTotal = null;
if (aSTSHMS != null && aSTSHMS.hasTaxTotalAmountEntries()) {
// For all currencies
for (final AmountType aTaxTotalAmount : aSTSHMS.getTaxTotalAmount()) {
final TaxTotalType aUBLCurTaxTotal = new TaxTotalType();
aUBLCurTaxTotal.setTaxAmount(_copyAmount(aTaxTotalAmount, new TaxAmountType(), sDefaultCurrencyCode));
aUBLInvoice.addTaxTotal(aUBLCurTaxTotal);
if (aUBLTaxTotal == null) {
// Use the first one
aUBLTaxTotal = aUBLCurTaxTotal;
}
}
} else {
// Mandatory in UBL
final TaxAmountType aUBLTaxAmount = new TaxAmountType();
aUBLTaxAmount.setValue(BigDecimal.ZERO);
aUBLTaxAmount.setCurrencyID(sDefaultCurrencyCode);
aUBLTaxTotal = new TaxTotalType();
aUBLTaxTotal.setTaxAmount(aUBLTaxAmount);
aUBLInvoice.addTaxTotal(aUBLTaxTotal);
}
for (final TradeTaxType aTradeTax : aHeaderSettlement.getApplicableTradeTax()) {
final TaxSubtotalType aUBLTaxSubtotal = new TaxSubtotalType();
if (aTradeTax.hasBasisAmountEntries()) {
aUBLTaxSubtotal.setTaxableAmount(_copyAmount(aTradeTax.getBasisAmountAtIndex(0), new TaxableAmountType(), sDefaultCurrencyCode));
}
if (aTradeTax.hasCalculatedAmountEntries()) {
aUBLTaxSubtotal.setTaxAmount(_copyAmount(aTradeTax.getCalculatedAmountAtIndex(0), new TaxAmountType(), sDefaultCurrencyCode));
}
final TaxCategoryType aUBLTaxCategory = new TaxCategoryType();
aUBLTaxCategory.setID(aTradeTax.getCategoryCodeValue());
if (aTradeTax.getRateApplicablePercentValue() != null)
aUBLTaxCategory.setPercent(MathHelper.getWithoutTrailingZeroes(aTradeTax.getRateApplicablePercentValue()));
if (StringHelper.hasText(aTradeTax.getExemptionReasonCodeValue()))
aUBLTaxCategory.setTaxExemptionReasonCode(aTradeTax.getExemptionReasonCodeValue());
if (aTradeTax.getExemptionReason() != null) {
final TaxExemptionReasonType aUBLTaxExemptionReason = new TaxExemptionReasonType();
aUBLTaxExemptionReason.setValue(aTradeTax.getExemptionReason().getValue());
aUBLTaxExemptionReason.setLanguageID(aTradeTax.getExemptionReason().getLanguageID());
aUBLTaxExemptionReason.setLanguageLocaleID(aTradeTax.getExemptionReason().getLanguageLocaleID());
aUBLTaxCategory.addTaxExemptionReason(aUBLTaxExemptionReason);
}
final TaxSchemeType aUBLTaxScheme = new TaxSchemeType();
aUBLTaxScheme.setID(getVATScheme());
aUBLTaxCategory.setTaxScheme(aUBLTaxScheme);
aUBLTaxSubtotal.setTaxCategory(aUBLTaxCategory);
aUBLTaxTotal.addTaxSubtotal(aUBLTaxSubtotal);
}
}
// LegalMonetaryTotal
{
final MonetaryTotalType aUBLMonetaryTotal = new MonetaryTotalType();
if (aSTSHMS != null) {
if (aSTSHMS.hasLineTotalAmountEntries())
aUBLMonetaryTotal.setLineExtensionAmount(_copyAmount(aSTSHMS.getLineTotalAmountAtIndex(0), new LineExtensionAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasTaxBasisTotalAmountEntries())
aUBLMonetaryTotal.setTaxExclusiveAmount(_copyAmount(aSTSHMS.getTaxBasisTotalAmountAtIndex(0), new TaxExclusiveAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasGrandTotalAmountEntries())
aUBLMonetaryTotal.setTaxInclusiveAmount(_copyAmount(aSTSHMS.getGrandTotalAmountAtIndex(0), new TaxInclusiveAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasAllowanceTotalAmountEntries())
aUBLMonetaryTotal.setAllowanceTotalAmount(_copyAmount(aSTSHMS.getAllowanceTotalAmountAtIndex(0), new AllowanceTotalAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasChargeTotalAmountEntries())
aUBLMonetaryTotal.setChargeTotalAmount(_copyAmount(aSTSHMS.getChargeTotalAmountAtIndex(0), new ChargeTotalAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasTotalPrepaidAmountEntries())
aUBLMonetaryTotal.setPrepaidAmount(_copyAmount(aSTSHMS.getTotalPrepaidAmountAtIndex(0), new PrepaidAmountType(), sDefaultCurrencyCode));
if (aSTSHMS.hasRoundingAmountEntries()) {
// compatibility
if (MathHelper.isNE0(aSTSHMS.getRoundingAmountAtIndex(0).getValue()))
aUBLMonetaryTotal.setPayableRoundingAmount(_copyAmount(aSTSHMS.getRoundingAmountAtIndex(0), new PayableRoundingAmountType(), sDefaultCurrencyCode));
}
if (aSTSHMS.hasDuePayableAmountEntries())
aUBLMonetaryTotal.setPayableAmount(_copyAmount(aSTSHMS.getDuePayableAmountAtIndex(0), new PayableAmountType(), sDefaultCurrencyCode));
}
aUBLInvoice.setLegalMonetaryTotal(aUBLMonetaryTotal);
}
// All invoice lines
for (final SupplyChainTradeLineItemType aLineItem : aSCTT.getIncludedSupplyChainTradeLineItem()) {
final InvoiceLineType aUBLInvoiceLine = new InvoiceLineType();
final DocumentLineDocumentType aDLD = aLineItem.getAssociatedDocumentLineDocument();
aUBLInvoiceLine.setID(_copyID(aDLD.getLineID()));
// Note
for (final un.unece.uncefact.data.standard.reusableaggregatebusinessinformationentity._100.NoteType aLineNote : aDLD.getIncludedNote()) ifNotNull(aUBLInvoiceLine::addNote, _copyNote(aLineNote));
// Line extension amount
boolean bLineExtensionAmountIsNegative = false;
final LineTradeSettlementType aLineSettlement = aLineItem.getSpecifiedLineTradeSettlement();
final TradeSettlementLineMonetarySummationType aSTSLMS = aLineSettlement.getSpecifiedTradeSettlementLineMonetarySummation();
if (aSTSLMS != null) {
if (aSTSLMS.hasLineTotalAmountEntries()) {
aUBLInvoiceLine.setLineExtensionAmount(_copyAmount(aSTSLMS.getLineTotalAmountAtIndex(0), new LineExtensionAmountType(), sDefaultCurrencyCode));
if (isLT0Strict(aUBLInvoiceLine.getLineExtensionAmountValue()))
bLineExtensionAmountIsNegative = true;
}
}
// Invoiced quantity
final LineTradeDeliveryType aLineDelivery = aLineItem.getSpecifiedLineTradeDelivery();
if (aLineDelivery != null) {
final QuantityType aBilledQuantity = aLineDelivery.getBilledQuantity();
if (aBilledQuantity != null) {
aUBLInvoiceLine.setInvoicedQuantity(_copyQuantity(aBilledQuantity, new InvoicedQuantityType()));
}
}
// Accounting cost
if (aLineSettlement.hasReceivableSpecifiedTradeAccountingAccountEntries()) {
final TradeAccountingAccountType aLineAA = aLineSettlement.getReceivableSpecifiedTradeAccountingAccountAtIndex(0);
aUBLInvoiceLine.setAccountingCost(aLineAA.getIDValue());
}
// Invoice period
final SpecifiedPeriodType aLineBillingPeriod = aLineSettlement.getBillingSpecifiedPeriod();
if (aLineBillingPeriod != null) {
final PeriodType aUBLLinePeriod = new PeriodType();
if (aLineBillingPeriod.getStartDateTime() != null)
aUBLLinePeriod.setStartDate(_parseDate(aLineBillingPeriod.getStartDateTime().getDateTimeString(), aErrorList));
if (aLineBillingPeriod.getEndDateTime() != null)
aUBLLinePeriod.setEndDate(_parseDate(aLineBillingPeriod.getEndDateTime().getDateTimeString(), aErrorList));
aUBLInvoiceLine.addInvoicePeriod(aUBLLinePeriod);
}
// Order line reference
final LineTradeAgreementType aLineAgreement = aLineItem.getSpecifiedLineTradeAgreement();
if (aLineAgreement != null) {
final ReferencedDocumentType aBuyerOrderReference = aLineAgreement.getBuyerOrderReferencedDocument();
if (aBuyerOrderReference != null && StringHelper.hasText(aBuyerOrderReference.getLineIDValue())) {
final OrderLineReferenceType aUBLOrderLineReference = new OrderLineReferenceType();
aUBLOrderLineReference.setLineID(_copyID(aBuyerOrderReference.getLineID(), new LineIDType()));
aUBLInvoiceLine.addOrderLineReference(aUBLOrderLineReference);
}
}
// Document reference
for (final ReferencedDocumentType aLineReferencedDocument : aLineSettlement.getAdditionalReferencedDocument()) {
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aLineReferencedDocument, aErrorList);
if (aUBLDocRef != null)
aUBLInvoiceLine.addDocumentReference(aUBLDocRef);
}
// Allowance charge
for (final TradeAllowanceChargeType aLineAllowanceCharge : aLineSettlement.getSpecifiedTradeAllowanceCharge()) {
ETriState eIsCharge = ETriState.UNDEFINED;
if (aLineAllowanceCharge.getChargeIndicator() != null)
eIsCharge = _parseIndicator(aLineAllowanceCharge.getChargeIndicator(), aErrorList);
else
aErrorList.add(_buildError(new String[] { "CrossIndustryInvoice", "SupplyChainTradeTransaction", "IncludedSupplyChainTradeLineItem", "SpecifiedLineTradeSettlement", "SpecifiedTradeAllowanceCharge" }, "Failed to determine if SpecifiedTradeAllowanceCharge is an Allowance or a Charge"));
if (eIsCharge.isDefined()) {
final AllowanceChargeType aUBLLineAllowanceCharge = new AllowanceChargeType();
aUBLLineAllowanceCharge.setChargeIndicator(eIsCharge.getAsBooleanValue());
_copyAllowanceCharge(aLineAllowanceCharge, aUBLLineAllowanceCharge, sDefaultCurrencyCode);
aUBLInvoiceLine.addAllowanceCharge(aUBLLineAllowanceCharge);
}
}
// Item
final ItemType aUBLItem = new ItemType();
final TradeProductType aLineProduct = aLineItem.getSpecifiedTradeProduct();
if (aLineProduct != null) {
final TextType aDescription = aLineProduct.getDescription();
if (aDescription != null)
ifNotNull(aUBLItem::addDescription, _copyName(aDescription, new DescriptionType()));
if (aLineProduct.hasNameEntries())
aUBLItem.setName(_copyName(aLineProduct.getNameAtIndex(0), new NameType()));
final IDType aBuyerAssignedID = aLineProduct.getBuyerAssignedID();
if (aBuyerAssignedID != null) {
final ItemIdentificationType aUBLID = new ItemIdentificationType();
aUBLID.setID(_copyID(aBuyerAssignedID));
if (StringHelper.hasText(aUBLID.getIDValue()))
aUBLItem.setBuyersItemIdentification(aUBLID);
}
final IDType aSellerAssignedID = aLineProduct.getSellerAssignedID();
if (aSellerAssignedID != null) {
final ItemIdentificationType aUBLID = new ItemIdentificationType();
aUBLID.setID(_copyID(aSellerAssignedID));
if (StringHelper.hasText(aUBLID.getIDValue()))
aUBLItem.setSellersItemIdentification(aUBLID);
}
final IDType aGlobalID = aLineProduct.getGlobalID();
if (aGlobalID != null) {
final ItemIdentificationType aUBLID = new ItemIdentificationType();
aUBLID.setID(_copyID(aGlobalID));
if (StringHelper.hasText(aUBLID.getIDValue()))
aUBLItem.setStandardItemIdentification(aUBLID);
}
final TradeCountryType aOriginCountry = aLineProduct.getOriginTradeCountry();
if (aOriginCountry != null) {
final CountryType aUBLCountry = new CountryType();
aUBLCountry.setIdentificationCode(aOriginCountry.getIDValue());
if (aOriginCountry.hasNameEntries())
aUBLCountry.setName(_copyName(aOriginCountry.getNameAtIndex(0), new NameType()));
aUBLItem.setOriginCountry(aUBLCountry);
}
// Commodity Classification
for (final ProductClassificationType aLineProductClassification : aLineProduct.getDesignatedProductClassification()) {
final CodeType aClassCode = aLineProductClassification.getClassCode();
if (aClassCode != null) {
final CommodityClassificationType aUBLCommodityClassification = new CommodityClassificationType();
aUBLCommodityClassification.setItemClassificationCode(_copyCode(aClassCode, new ItemClassificationCodeType()));
if (aUBLCommodityClassification.getItemClassificationCode() != null)
aUBLItem.addCommodityClassification(aUBLCommodityClassification);
}
}
}
for (final TradeTaxType aTradeTax : aLineSettlement.getApplicableTradeTax()) {
final TaxCategoryType aUBLTaxCategory = new TaxCategoryType();
aUBLTaxCategory.setID(aTradeTax.getCategoryCodeValue());
if (aTradeTax.getRateApplicablePercentValue() != null)
aUBLTaxCategory.setPercent(MathHelper.getWithoutTrailingZeroes(aTradeTax.getRateApplicablePercentValue()));
final TaxSchemeType aUBLTaxScheme = new TaxSchemeType();
aUBLTaxScheme.setID(getVATScheme());
aUBLTaxCategory.setTaxScheme(aUBLTaxScheme);
aUBLItem.addClassifiedTaxCategory(aUBLTaxCategory);
}
if (aLineProduct != null) {
for (final ProductCharacteristicType aAPC : aLineProduct.getApplicableProductCharacteristic()) if (aAPC.hasDescriptionEntries()) {
final ItemPropertyType aUBLAdditionalItem = new ItemPropertyType();
aUBLAdditionalItem.setName(_copyName(aAPC.getDescriptionAtIndex(0), new NameType()));
if (aAPC.hasValueEntries())
aUBLAdditionalItem.setValue(aAPC.getValueAtIndex(0).getValue());
if (aUBLAdditionalItem.getName() != null)
aUBLItem.addAdditionalItemProperty(aUBLAdditionalItem);
}
}
final PriceType aUBLPrice = new PriceType();
boolean bUsePrice = false;
if (aLineAgreement != null) {
final TradePriceType aNPPTP = aLineAgreement.getNetPriceProductTradePrice();
if (aNPPTP != null) {
if (aNPPTP.hasChargeAmountEntries()) {
aUBLPrice.setPriceAmount(_copyAmount(aNPPTP.getChargeAmountAtIndex(0), new PriceAmountType(), sDefaultCurrencyCode));
bUsePrice = true;
}
if (aNPPTP.getBasisQuantity() != null) {
aUBLPrice.setBaseQuantity(_copyQuantity(aNPPTP.getBasisQuantity(), new BaseQuantityType()));
bUsePrice = true;
}
}
}
swapQuantityAndPriceIfNeeded(bLineExtensionAmountIsNegative, aUBLInvoiceLine.getInvoicedQuantityValue(), aUBLInvoiceLine::setInvoicedQuantity, bUsePrice ? aUBLPrice.getPriceAmountValue() : null, bUsePrice ? aUBLPrice::setPriceAmount : null);
// Allowance charge
final TradePriceType aTradePrice = aLineAgreement.getNetPriceProductTradePrice();
if (aTradePrice != null)
for (final TradeAllowanceChargeType aPriceAllowanceCharge : aTradePrice.getAppliedTradeAllowanceCharge()) {
ETriState eIsCharge = ETriState.UNDEFINED;
if (aPriceAllowanceCharge.getChargeIndicator() != null)
eIsCharge = _parseIndicator(aPriceAllowanceCharge.getChargeIndicator(), aErrorList);
else
aErrorList.add(_buildError(new String[] { "CrossIndustryInvoice", "SupplyChainTradeTransaction", "IncludedSupplyChainTradeLineItem", "SpecifiedLineTradeAgreement", "NetPriceProductTradePrice", "AppliedTradeAllowanceCharge" }, "Failed to determine if AppliedTradeAllowanceCharge is an Allowance or a Charge"));
if (eIsCharge.isDefined()) {
final AllowanceChargeType aUBLLineAllowanceCharge = new AllowanceChargeType();
aUBLLineAllowanceCharge.setChargeIndicator(eIsCharge.getAsBooleanValue());
_copyAllowanceCharge(aPriceAllowanceCharge, aUBLLineAllowanceCharge, sDefaultCurrencyCode);
aUBLPrice.addAllowanceCharge(aUBLLineAllowanceCharge);
}
}
if (bUsePrice)
aUBLInvoiceLine.setPrice(aUBLPrice);
aUBLInvoiceLine.setItem(aUBLItem);
aUBLInvoice.addInvoiceLine(aUBLInvoiceLine);
}
return aUBLInvoice;
}
use of un.unece.uncefact.data.standard.reusableaggregatebusinessinformationentity._100.HeaderTradeSettlementType in project en16931-cii2ubl by phax.
the class CIIToUBL21ConverterTest method testConvertCreepy.
@Test
public void testConvertCreepy() {
final CrossIndustryInvoiceType aInvoice = new CrossIndustryInvoiceType();
assertNull(_convert(aInvoice));
final SupplyChainTradeTransactionType aSCTTT = new SupplyChainTradeTransactionType();
aInvoice.setSupplyChainTradeTransaction(aSCTTT);
assertNull(_convert(aInvoice));
final HeaderTradeAgreementType aHeaderAgreement = new HeaderTradeAgreementType();
aSCTTT.setApplicableHeaderTradeAgreement(aHeaderAgreement);
assertNull(_convert(aInvoice));
final HeaderTradeDeliveryType aHeaderDelivery = new HeaderTradeDeliveryType();
aSCTTT.setApplicableHeaderTradeDelivery(aHeaderDelivery);
assertNull(_convert(aInvoice));
final HeaderTradeSettlementType aHeaderSettlement = new HeaderTradeSettlementType();
aSCTTT.setApplicableHeaderTradeSettlement(aHeaderSettlement);
// First version working
assertNotNull(_convert(aInvoice));
}
Aggregations