OrderFieldCopyHelper.java

package com.tradecloud.domain.model.ordermanagement;

import com.tradecloud.common.base.HibernateUtils;
import com.tradecloud.domain.configuration.ItemsAndOrdersClientConfig;
import com.tradecloud.domain.supplier.OrganisationalUnitSupplier;
import org.apache.commons.lang3.ObjectUtils;

/**
 * @author jon
 */
public class OrderFieldCopyHelper {

    public static void copyFromClientConfig(Order order, ItemsAndOrdersClientConfig config) {
        // only initialise values not overwrite them
        if (order.getShippingInformation().getIncoterm() == null) {
            order.getShippingInformation().setIncoterm(config.getIncoterm());
        }
        if (order.getUnitPricePerItem() == null) {
            order.setUnitPricePerItem(config.getUnitPricePerItem());
        }
        if (order.getCurrency() == null) {
            order.setCurrency(config.getPurchaseCurrency());
        }
        if (order.getShippingInformation().getShippingMode() == null) {
            order.getShippingInformation().setShippingMode(config.getShippingMode());
        }
        if (order.getShippingInformation().getNamedPlace() == null) {
            order.getShippingInformation().setNamedPlace(config.getNamedPlace());
        }
        if (order.getShippingInformation().getPlaceOfLoading() == null) {
            order.getShippingInformation().setPlaceOfLoading(config.getPlaceOfLoading());
        }
        if (order.getShippingInformation().getPlaceOfDischarge() == null) {
            order.getShippingInformation().setPlaceOfDischarge(config.getPlaceOfDischarge());
        }
        if (order.getShippingInformation().getFreightForwarder() == null) {
            order.getShippingInformation().setFreightForwarder(config.getLsp());
        }
        if (order.getShippingInformation().getClearingAgent() == null) {
            order.getShippingInformation().setClearingAgent(config.getClearingAgent());
        }
        if (order.getShippingInformation().getTransporter() == null) {
            order.getShippingInformation().setTransporter(config.getTransporter());
        }
        if (order.getPaymentTerm() == null) {
            order.setPaymentTerm(config.getPaymentTerm());
        }
        if (order.getLcToleranceAbove() == null) {
            order.setLcToleranceAbove(config.getLcToleranceAbove());
        }
        if (order.getLcToleranceBelow() == null) {
            order.setLcToleranceBelow(config.getLcToleranceBelow());
        }
        if (order.isPurchaseOrder()) {
            copyFromClientConfigPurchaseOrder((PurchaseOrder) HibernateUtils.getNonProxyObject(order), config);
        }
    }

    public static void copyFromSupplier(PurchaseOrder purchaseOrder, OrganisationalUnitSupplier supplier, ItemsAndOrdersClientConfig config) {
        purchaseOrder.getShippingInformation().setIncoterm(supplier.getIncoterm());
        purchaseOrder.setPaymentMethod(supplier.getPaymentMethod());
        purchaseOrder.setCurrency(supplier.getCurrency());
        purchaseOrder.setUnitPricePerItem(supplier.getUnitPricePerItem());
        purchaseOrder.getShippingInformation().setFreightForwarder(supplier.getFreightForwarder());
        purchaseOrder.getShippingInformation().setClearingAgent(supplier.getClearingAgent());
        purchaseOrder.getShippingInformation().setTransporter(supplier.getTransporter());

        purchaseOrder.getShippingInformation().setPartShipment(supplier.getAllowPartShipment());
        purchaseOrder.getShippingInformation().setTransShipment(supplier.getAllowTransShipment());

        purchaseOrder.setLcToleranceAbove(ObjectUtils.firstNonNull(supplier.getLcToleranceAbove(), config.getLcToleranceAbove()));
        purchaseOrder.setLcToleranceBelow(ObjectUtils.firstNonNull(supplier.getLcToleranceBelow(), config.getLcToleranceBelow()));

        purchaseOrder.setPaymentTerm(ObjectUtils.firstNonNull(supplier.getPaymentTerm(), config.getPaymentTerm()));
        purchaseOrder.getShippingInformation().setNamedPlace(supplier.getNamedPlace());
    }

    public static void copyFromSupplierForIntegration(PurchaseOrder purchaseOrder,
                                                      OrganisationalUnitSupplier supplier, ItemsAndOrdersClientConfig config, boolean update) {
        if ((!update && purchaseOrder.getShippingInformation().getIncoterm() == null)
                || (update && config.getOrderIntegrationConfig().getPurchaseOrderIntegrationProperties().isIncoterm())) {
            purchaseOrder.getShippingInformation().setIncoterm(supplier.getIncoterm());
        }
        if ((!update && purchaseOrder.getPaymentMethod() == null)
                || (update && config.getOrderIntegrationConfig().getPurchaseOrderIntegrationProperties().isPaymentMethod())) {
            purchaseOrder.setPaymentMethod(supplier.getPaymentMethod());
        }
        if ((!update && purchaseOrder.getCurrency() == null)
                || (update && config.getOrderIntegrationConfig().getPurchaseOrderIntegrationProperties().isCurrency())) {
            purchaseOrder.setCurrency(supplier.getCurrency());
        }
        if ((!update && purchaseOrder.getUnitPricePerItem() == null)
                || (update && config.getOrderIntegrationConfig().getPurchaseOrderIntegrationProperties().isUnitPricePerItem())) {
            purchaseOrder.setUnitPricePerItem(supplier.getUnitPricePerItem());
        }
        if ((!update && purchaseOrder.getShippingInformation().getFreightForwarder() == null)
                || (update && config.getOrderIntegrationConfig().getPurchaseOrderIntegrationProperties().isFreightForwarder())) {
            purchaseOrder.getShippingInformation().setFreightForwarder(supplier.getFreightForwarder());
        }
        if ((!update && purchaseOrder.getShippingInformation().getClearingAgent() == null)
                || (update && config.getOrderIntegrationConfig().getPurchaseOrderIntegrationProperties().isClearingAgent())) {
            purchaseOrder.getShippingInformation().setClearingAgent(supplier.getClearingAgent());
        }
        if ((!update && purchaseOrder.getShippingInformation().getTransporter() == null)
                || (update && config.getOrderIntegrationConfig().getPurchaseOrderIntegrationProperties().isTransporter())) {
            purchaseOrder.getShippingInformation().setTransporter(supplier.getTransporter());
        }
        if (update && config.getOrderIntegrationConfig().getPurchaseOrderIntegrationProperties().isAllowPartShipment()) {
            purchaseOrder.getShippingInformation().setPartShipment(supplier.getAllowPartShipment());
        }
        if (update && config.getOrderIntegrationConfig().getPurchaseOrderIntegrationProperties().isAllowTransShipment()) {
            purchaseOrder.getShippingInformation().setTransShipment(supplier.getAllowTransShipment());
        }

        if ((!update && purchaseOrder.getLcToleranceAbove() == null)
                || (update && config.getOrderIntegrationConfig().getPurchaseOrderIntegrationProperties().isLcToleranceAbove())) {
            if (supplier.getLcToleranceAbove() == null) {
                purchaseOrder.setLcToleranceAbove(config.getLcToleranceAbove());
            } else {
                purchaseOrder.setLcToleranceAbove(supplier.getLcToleranceAbove());
            }
        }
        if ((!update && purchaseOrder.getLcToleranceBelow() == null)
                || (update && config.getOrderIntegrationConfig().getPurchaseOrderIntegrationProperties().isLcToleranceBelow())) {
            if (supplier.getLcToleranceBelow() == null) {
                purchaseOrder.setLcToleranceBelow(config.getLcToleranceBelow());
            } else {
                purchaseOrder.setLcToleranceBelow(supplier.getLcToleranceBelow());
            }
        }
        if ((!update && purchaseOrder.getPaymentTerm() == null)
                || (update && config.getOrderIntegrationConfig().getPurchaseOrderIntegrationProperties().isPaymentTerm())) {
            if (supplier.getPaymentTerm() == null) {
                purchaseOrder.setPaymentTerm(config.getPaymentTerm());
            } else {
                purchaseOrder.setPaymentTerm(supplier.getPaymentTerm());
            }
        }
    }

    public static void copyFromClientConfigPurchaseOrder(PurchaseOrder order, ItemsAndOrdersClientConfig itemsAndOrdersClientConfig) {
        if (order.getLocalCustomsAuthority() == null) {
            order.setLocalCustomsAuthority(itemsAndOrdersClientConfig.getLocalCustomsAuthority());
        }
        if (order.getLocalPortAuthority() == null) {
            order.setLocalPortAuthority(itemsAndOrdersClientConfig.getLocalPortAuthority());
        }
    }
}