use of com.helger.commons.state.ETriState in project phive by phax.
the class PhiveJsonHelper method getAsValidationResultList.
/**
* Try to parse a JSON structure and convert it back to a
* {@link ValidationResultList}.
*
* @param aJson
* The JSON to be read. May be <code>null</code>.
* @param aValidationTypeResolver
* The validation type resolver to be used. May not be
* <code>null</code>.
* @return <code>null</code> in case reverse operation fails.
*/
@Nullable
public static ValidationResultList getAsValidationResultList(@Nullable final IJsonObject aJson, @Nonnull final Function<String, IValidationType> aValidationTypeResolver) {
ValueEnforcer.notNull(aValidationTypeResolver, "ValidationTypeResolver");
if (aJson == null)
return null;
final IJsonArray aResults = aJson.getAsArray(JSON_RESULTS);
if (aResults == null)
return null;
final ValidationResultList ret = new ValidationResultList();
for (final IJson aResult : aResults) {
final IJsonObject aResultObj = aResult.getAsObject();
if (aResultObj != null) {
final String sSuccess = aResultObj.getAsString(JSON_SUCCESS);
final ETriState eSuccess = getAsTriState(sSuccess);
if (eSuccess == null) {
if (LOGGER.isDebugEnabled())
LOGGER.debug("Failed to resolve TriState '" + sSuccess + "'");
continue;
}
final String sValidationType = aResultObj.getAsString(JSON_ARTIFACT_TYPE);
final IValidationType aValidationType = aValidationTypeResolver.apply(sValidationType);
if (aValidationType == null) {
if (LOGGER.isDebugEnabled())
LOGGER.debug("Failed to resolve ValidationType '" + sValidationType + "'");
continue;
}
final String sArtefactPathType = aResultObj.getAsString(JSON_ARTIFACT_PATH_TYPE);
final String sArtefactPath = aResultObj.getAsString(JSON_ARTIFACT_PATH);
final IReadableResource aRes = getAsValidationResource(sArtefactPathType, sArtefactPath);
if (aRes == null) {
if (LOGGER.isDebugEnabled())
LOGGER.debug("Failed to resolve ValidationArtefact '" + sArtefactPathType + "' with path '" + sArtefactPath + "'");
continue;
}
final ValidationArtefact aVA = new ValidationArtefact(aValidationType, aRes);
if (eSuccess.isUndefined()) {
// Ignored level
ret.add(ValidationResult.createIgnoredResult(aVA));
} else {
// We have results
final IJsonArray aItems = aResultObj.getAsArray(JSON_ITEMS);
final ErrorList aErrorList = new ErrorList();
for (final IJson aItem : aItems) {
final IJsonObject aItemObj = aItem.getAsObject();
if (aItemObj != null) {
final IError aError = getAsIError(aItemObj);
aErrorList.add(aError);
}
}
final ValidationResult aVR = new ValidationResult(aVA, aErrorList);
ret.add(aVR);
}
}
}
return ret;
}
use of com.helger.commons.state.ETriState 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 com.helger.commons.state.ETriState 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 com.helger.commons.state.ETriState 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 com.helger.commons.state.ETriState in project as2-lib by phax.
the class AS2MDNReceiverHandler method receiveMDN.
// Asynch MDN 2007-03-12
/**
* method for receiving and processing Async MDN sent from receiver.
*
* @param aMsg
* The MDN message
* @param aData
* The MDN content
* @param aResponseHandler
* The HTTP response handler for setting the correct HTTP response code
* @param aResHelper
* Resource helper
* @throws AS2Exception
* In case of error
* @throws IOException
* In case of IO error
*/
protected final void receiveMDN(@Nonnull final AS2Message aMsg, final byte[] aData, @Nonnull final IAS2HttpResponseHandler aResponseHandler, @Nonnull final AS2ResourceHelper aResHelper) throws AS2Exception, IOException {
try {
// Create a MessageMDN and copy HTTP headers
final IMessageMDN aMDN = new AS2MessageMDN(aMsg);
// copy headers from msg to MDN from msg
aMDN.headers().setAllHeaders(aMsg.headers());
final MimeBodyPart aPart = new MimeBodyPart(AS2HttpHelper.getAsInternetHeaders(aMDN.headers()), aData);
aMDN.setData(aPart);
// get the MDN partnership info
aMDN.partnership().setSenderAS2ID(aMDN.getHeader(CHttpHeader.AS2_FROM));
aMDN.partnership().setReceiverAS2ID(aMDN.getHeader(CHttpHeader.AS2_TO));
// Set the appropriate keystore aliases
aMDN.partnership().setSenderX509Alias(aMsg.partnership().getReceiverX509Alias());
aMDN.partnership().setReceiverX509Alias(aMsg.partnership().getSenderX509Alias());
// Update the partnership
getModule().getSession().getPartnershipFactory().updatePartnership(aMDN, false);
final ICertificateFactory aCertFactory = getModule().getSession().getCertificateFactory();
final X509Certificate aSenderCert = aCertFactory.getCertificate(aMDN, ECertificatePartnershipType.SENDER);
final boolean bUseCertificateInBodyPart;
final ETriState eUseCertificateInBodyPart = aMsg.partnership().getVerifyUseCertificateInBodyPart();
if (eUseCertificateInBodyPart.isDefined()) {
// Use per partnership
bUseCertificateInBodyPart = eUseCertificateInBodyPart.getAsBooleanValue();
} else {
// Use global value
bUseCertificateInBodyPart = getModule().getSession().isCryptoVerifyUseCertificateInBodyPart();
}
AS2Helper.parseMDN(aMsg, aSenderCert, bUseCertificateInBodyPart, getVerificationCertificateConsumer(), aResHelper);
// in order to name & save the mdn with the original AS2-From + AS2-To +
// Message id.,
// the 3 msg attributes have to be reset before calling MDNFileModule
aMsg.partnership().setSenderAS2ID(aMDN.getHeader(CHttpHeader.AS2_TO));
aMsg.partnership().setReceiverAS2ID(aMDN.getHeader(CHttpHeader.AS2_FROM));
getModule().getSession().getPartnershipFactory().updatePartnership(aMsg, false);
aMsg.setMessageID(aMDN.attrs().getAsString(AS2MessageMDN.MDNA_ORIG_MESSAGEID));
try {
getModule().getSession().getMessageProcessor().handle(IProcessorStorageModule.DO_STOREMDN, aMsg, null);
} catch (final AS2ComponentNotFoundException | AS2NoModuleException ex) {
// No message processor found
// Or no module found in message processor
}
// check if the mic (message integrity check) is correct
final boolean bMICMatch = checkAsyncMDN(aMsg);
HTTPHelper.sendSimpleHTTPResponse(aResponseHandler, bMICMatch ? CHttp.HTTP_OK : CHttp.HTTP_NOT_FOUND);
final String sDisposition = aMDN.attrs().getAsString(AS2MessageMDN.MDNA_DISPOSITION);
if (m_aIncomingMDNCallback != null)
m_aIncomingMDNCallback.onIncomingMDN(false, aMDN, aMDN.getHeader(CHttpHeader.AS2_FROM), aMDN.getHeader(CHttpHeader.AS2_TO), sDisposition, aMDN.attrs().getAsString(AS2MessageMDN.MDNA_MIC), aMDN.attrs().getAsString(AS2MessageMDN.MDNA_ORIG_MESSAGEID), aMDN.attrs().getAsBoolean(AS2Message.ATTRIBUTE_RECEIVED_SIGNED, false), bMICMatch);
DispositionType.createFromString(sDisposition).validate(aMsg, aMDN.getText());
} catch (final IOException ex) {
HTTPHelper.sendSimpleHTTPResponse(aResponseHandler, CHttp.HTTP_BAD_REQUEST);
throw ex;
} catch (final Exception ex) {
HTTPHelper.sendSimpleHTTPResponse(aResponseHandler, CHttp.HTTP_BAD_REQUEST);
throw WrappedAS2Exception.wrap(ex).setSourceMsg(aMsg);
}
}
Aggregations