use of un.unece.uncefact.data.standard.unqualifieddatatype._100.AmountType in project UVMS-ActivityModule-APP by UnionVMS.
the class MapperUtil method getAmountType.
private static AmountType getAmountType(int value, String listId, String currencyId) {
AmountType amountType = new AmountType();
amountType.setValue(new BigDecimal(value));
amountType.setCurrencyCodeListVersionID(listId);
amountType.setCurrencyID(currencyId);
return amountType;
}
use of un.unece.uncefact.data.standard.unqualifieddatatype._100.AmountType 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.unqualifieddatatype._100.AmountType 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.unqualifieddatatype._100.AmountType 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.unqualifieddatatype._100.AmountType in project en16931-cii2ubl by phax.
the class CIIToUBL22Converter method convertToCreditNote.
@Nullable
public CreditNoteType convertToCreditNote(@Nonnull final CrossIndustryInvoiceType aCIICreditNote, @Nonnull final ErrorList aErrorList) {
ValueEnforcer.notNull(aCIICreditNote, "CIICreditNote");
ValueEnforcer.notNull(aErrorList, "ErrorList");
final ExchangedDocumentType aED = aCIICreditNote.getExchangedDocument();
final SupplyChainTradeTransactionType aSCTT = aCIICreditNote.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 CreditNoteType aUBLCreditNote = new CreditNoteType();
if (false)
aUBLCreditNote.setUBLVersionID(UBL_VERSION);
if (StringHelper.hasText(getCustomizationID()))
aUBLCreditNote.setCustomizationID(getCustomizationID());
if (StringHelper.hasText(getProfileID()))
aUBLCreditNote.setProfileID(getProfileID());
if (aED != null)
aUBLCreditNote.setID(aED.getIDValue());
// Mandatory supplier
final SupplierPartyType aUBLSupplier = new SupplierPartyType();
aUBLCreditNote.setAccountingSupplierParty(aUBLSupplier);
// Mandatory customer
final CustomerPartyType aUBLCustomer = new CustomerPartyType();
aUBLCreditNote.setAccountingCustomerParty(aUBLCustomer);
// IssueDate
{
LocalDate aIssueDate = null;
if (aED != null && aED.getIssueDateTime() != null)
aIssueDate = _parseDate(aED.getIssueDateTime().getDateTimeString(), aErrorList);
if (aIssueDate != null)
aUBLCreditNote.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)
aUBLCreditNote.setDueDate(aDueDate);
}
// CreditNoteTypeCode
if (aED != null)
aUBLCreditNote.setCreditNoteTypeCode(aED.getTypeCodeValue());
// Note
if (aED != null)
for (final un.unece.uncefact.data.standard.reusableaggregatebusinessinformationentity._100.NoteType aEDNote : aED.getIncludedNote()) ifNotNull(aUBLCreditNote::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
aUBLCreditNote.setTaxPointDate(aTaxPointDate);
break;
}
}
}
// DocumentCurrencyCode
final String sDefaultCurrencyCode = aHeaderSettlement.getInvoiceCurrencyCodeValue();
aUBLCreditNote.setDocumentCurrencyCode(sDefaultCurrencyCode);
// TaxCurrencyCode
if (aHeaderSettlement.getTaxCurrencyCodeValue() != null) {
aUBLCreditNote.setTaxCurrencyCode(aHeaderSettlement.getTaxCurrencyCodeValue());
}
// AccountingCost
for (final TradeAccountingAccountType aAccount : aHeaderSettlement.getReceivableSpecifiedTradeAccountingAccount()) {
final String sID = aAccount.getIDValue();
if (StringHelper.hasText(sID)) {
// Use the first ID
aUBLCreditNote.setAccountingCost(sID);
break;
}
}
// BuyerReferences
if (aHeaderAgreement.getBuyerReferenceValue() != null) {
aUBLCreditNote.setBuyerReference(aHeaderAgreement.getBuyerReferenceValue());
}
// CreditNotePeriod
{
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));
aUBLCreditNote.addInvoicePeriod(aUBLPeriod);
}
}
}
// OrderReference
{
final OrderReferenceType aUBLOrderRef = _createUBLOrderRef(aHeaderAgreement.getBuyerOrderReferencedDocument(), aHeaderAgreement.getSellerOrderReferencedDocument());
aUBLCreditNote.setOrderReference(aUBLOrderRef);
}
// BillingReference
{
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aHeaderSettlement.getInvoiceReferencedDocument(), aErrorList);
if (aUBLDocRef != null) {
final BillingReferenceType aUBLBillingRef = new BillingReferenceType();
aUBLBillingRef.setCreditNoteDocumentReference(aUBLDocRef);
aUBLCreditNote.addBillingReference(aUBLBillingRef);
}
}
// DespatchDocumentReference
{
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aHeaderDelivery.getDespatchAdviceReferencedDocument(), aErrorList);
if (aUBLDocRef != null)
aUBLCreditNote.addDespatchDocumentReference(aUBLDocRef);
}
// ReceiptDocumentReference
{
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aHeaderDelivery.getReceivingAdviceReferencedDocument(), aErrorList);
if (aUBLDocRef != null)
aUBLCreditNote.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)
aUBLCreditNote.addOriginatorDocumentReference(aUBLDocRef);
}
}
}
// ContractDocumentReference
{
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aHeaderAgreement.getContractReferencedDocument(), aErrorList);
if (aUBLDocRef != null)
aUBLCreditNote.addContractDocumentReference(aUBLDocRef);
}
// AdditionalDocumentReference
{
for (final ReferencedDocumentType aRD : aHeaderAgreement.getAdditionalReferencedDocument()) {
// Except OriginatorDocumentReference
if (!isOriginatorDocumentReferenceTypeCode(aRD.getTypeCodeValue())) {
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aRD, aErrorList);
if (aUBLDocRef != null)
aUBLCreditNote.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);
aUBLCreditNote.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);
aUBLCreditNote.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);
aUBLCreditNote.setTaxRepresentativeParty(aUBLParty);
}
}
// Delivery
{
final TradePartyType aShipToParty = aHeaderDelivery.getShipToTradeParty();
if (aShipToParty != null) {
final DeliveryType aUBLDelivery = new DeliveryType();
final SupplyChainEventType aSCE = aHeaderDelivery.getActualDeliverySupplyChainEvent();
if (aSCE != null) {
final DateTimeType aODT = aSCE.getOccurrenceDateTime();
if (aODT != null)
aUBLDelivery.setActualDeliveryDate(_parseDate(aODT.getDateTimeString(), aErrorList));
}
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);
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);
}
aUBLCreditNote.addDelivery(aUBLDelivery);
}
}
// Payment means
{
for (final TradeSettlementPaymentMeansType aPaymentMeans : aHeaderSettlement.getSpecifiedTradeSettlementPaymentMeans()) {
_convertPaymentMeans(aHeaderSettlement, aPaymentMeans, x -> _addPartyID(x, aUBLCreditNote.getAccountingSupplierParty().getParty()), aUBLCreditNote::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())
aUBLCreditNote.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[] { "CrossIndustryCreditNote", "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);
aUBLCreditNote.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));
aUBLCreditNote.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);
aUBLCreditNote.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));
}
aUBLCreditNote.setLegalMonetaryTotal(aUBLMonetaryTotal);
}
// All invoice lines
for (final SupplyChainTradeLineItemType aLineItem : aSCTT.getIncludedSupplyChainTradeLineItem()) {
final CreditNoteLineType aUBLCreditNoteLine = new CreditNoteLineType();
final DocumentLineDocumentType aDLD = aLineItem.getAssociatedDocumentLineDocument();
aUBLCreditNoteLine.setID(_copyID(aDLD.getLineID()));
// Note
for (final un.unece.uncefact.data.standard.reusableaggregatebusinessinformationentity._100.NoteType aLineNote : aDLD.getIncludedNote()) ifNotNull(aUBLCreditNoteLine::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()) {
aUBLCreditNoteLine.setLineExtensionAmount(_copyAmount(aSTSLMS.getLineTotalAmountAtIndex(0), new LineExtensionAmountType(), sDefaultCurrencyCode));
if (isLT0Strict(aUBLCreditNoteLine.getLineExtensionAmountValue()))
bLineExtensionAmountIsNegative = true;
}
}
// CreditNoted quantity
final LineTradeDeliveryType aLineDelivery = aLineItem.getSpecifiedLineTradeDelivery();
if (aLineDelivery != null) {
final QuantityType aBilledQuantity = aLineDelivery.getBilledQuantity();
if (aBilledQuantity != null) {
aUBLCreditNoteLine.setCreditedQuantity(_copyQuantity(aBilledQuantity, new CreditedQuantityType()));
}
}
// Accounting cost
if (aLineSettlement.hasReceivableSpecifiedTradeAccountingAccountEntries()) {
final TradeAccountingAccountType aLineAA = aLineSettlement.getReceivableSpecifiedTradeAccountingAccountAtIndex(0);
aUBLCreditNoteLine.setAccountingCost(aLineAA.getIDValue());
}
// CreditNote 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));
aUBLCreditNoteLine.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()));
aUBLCreditNoteLine.addOrderLineReference(aUBLOrderLineReference);
}
}
// Document reference
for (final ReferencedDocumentType aLineReferencedDocument : aLineSettlement.getAdditionalReferencedDocument()) {
final DocumentReferenceType aUBLDocRef = _convertDocumentReference(aLineReferencedDocument, aErrorList);
if (aUBLDocRef != null)
aUBLCreditNoteLine.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[] { "CrossIndustryCreditNote", "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);
aUBLCreditNoteLine.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, aUBLCreditNoteLine.getCreditedQuantityValue(), aUBLCreditNoteLine::setCreditedQuantity, 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[] { "CrossIndustryCreditNote", "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)
aUBLCreditNoteLine.setPrice(aUBLPrice);
aUBLCreditNoteLine.setItem(aUBLItem);
aUBLCreditNote.addCreditNoteLine(aUBLCreditNoteLine);
}
return aUBLCreditNote;
}
Aggregations