LetterOfCreditFieldCopyHelper.java
package com.tradecloud.domain.letterofcredit;
import com.tradecloud.domain.configuration.LetterOfCreditClientConfig;
import com.tradecloud.domain.model.ordermanagement.PurchaseOrder;
import com.tradecloud.domain.shipment.ShippingInformation;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.List;
/**
* @author jon
*/
public class LetterOfCreditFieldCopyHelper {
public static void copyFromTemplate(LetterOfCredit letterOfCredit, LetterOfCreditTemplate letterOfCreditTemplate,
List<PurchaseOrder> purchaseOrders) {
letterOfCredit.setIssuingBank(letterOfCreditTemplate.getOwningEntity());
letterOfCredit.setTransferable(letterOfCreditTemplate.isTransferable());
letterOfCredit.setConfirm(letterOfCreditTemplate.isConfirm());
letterOfCredit.setIrrevocable(letterOfCreditTemplate.isIrrevocable());
letterOfCredit.setBankChargesDescription(letterOfCreditTemplate.getCharges());
letterOfCredit.setNotifyBy(letterOfCreditTemplate.getNotifyBy());
letterOfCredit.getTenor().setDraftsRequired(letterOfCreditTemplate.isDraftsRequired());
letterOfCredit.getTenor().setDrawnOn(letterOfCreditTemplate.getDrawnOn());
if (letterOfCreditTemplate.getBankCharges() != null) {
letterOfCredit.setBankCharges(letterOfCreditTemplate.getBankCharges());
}
if (letterOfCreditTemplate.getDocuments() != null) {
letterOfCredit.setDocuments(letterOfCreditTemplate.getDocuments());
}
if (letterOfCreditTemplate.getConditions() != null) {
letterOfCredit.setConditions(letterOfCreditTemplate.getConditions());
}
if (letterOfCredit.getPurchaseOrders() != null && purchaseOrders.size() > 0) {
substituteConditionsMetaTag(letterOfCreditTemplate, letterOfCredit, purchaseOrders);
substituteDocumentMetaTags(letterOfCreditTemplate, letterOfCredit, purchaseOrders);
}
}
public static void copyFromOrder(LetterOfCredit letterOfCredit, PurchaseOrder purchaseOrder) {
letterOfCredit.setBeneficiary(purchaseOrder.getSupplier());
LetterOfCreditShippingInfo lcShippingInfo = letterOfCredit.getShippingInfo();
ShippingInformation poShippingInfo = purchaseOrder.getShippingInformation();
lcShippingInfo.setIncoterm(poShippingInfo.getIncoterm());
lcShippingInfo.setFreightForwarder(poShippingInfo.getFreightForwarder());
lcShippingInfo.setNamedPlace(poShippingInfo.getNamedPlace());
lcShippingInfo.setPlaceOfDischarge(poShippingInfo.getPlaceOfDischarge());
lcShippingInfo.setPlaceOfLoading(poShippingInfo.getPlaceOfLoading());
lcShippingInfo.setAllowPartShipment(purchaseOrder.getAllowPartShipment());
lcShippingInfo.setAllowTransShipment(purchaseOrder.getAllowTransShipment());
LetterOfCreditTenor tenor = letterOfCredit.getTenor();
tenor.setDays(purchaseOrder.getPaymentTerm());
tenor.setTenor(purchaseOrder.getPaymentMethod());
tenor.setToleranceAbove(purchaseOrder.getLcToleranceAbove());
tenor.setToleranceBelow(purchaseOrder.getLcToleranceBelow());
// TODO. Remove this once the rules about if the tolerances on order can be null, or what.
if (tenor.getToleranceAbove() == null) {
tenor.setToleranceAbove(BigDecimal.ZERO);
}
if (tenor.getToleranceBelow() == null) {
tenor.setToleranceBelow(BigDecimal.ZERO);
}
}
public static void copyFromOrders(LetterOfCredit letterOfCredit, Collection<PurchaseOrder> purchaseOrders) {
letterOfCredit.getTenor().setAmount(LetterOfCreditUtils.calculateAmount(purchaseOrders));
LetterOfCreditShippingInfo lcShippingInfo = letterOfCredit.getShippingInfo();
lcShippingInfo.setEarliestShipmentDate(LetterOfCreditUtils.calculateEarliestShipmentDate(purchaseOrders));
lcShippingInfo.setLatestShipmentDate(LetterOfCreditUtils.calculateLatestShipmentDate(purchaseOrders));
}
/**
* Do initialisation related to client config settings.
*
* @param lc The letter of credit
* @param purchaseOrders The purchase orders. They are separate because they might not have been added to the lc yet
* @param lcClientConfig The client config.
*/
public static void initFromClientConfig(LetterOfCredit lc, Collection<PurchaseOrder> purchaseOrders, LetterOfCreditClientConfig lcClientConfig) {
lc.setShippingMark(LetterOfCreditUtils.generateShippingMarks(purchaseOrders, lcClientConfig.getShippingMarksDescription()));
//lc.setGoodsDescription(LetterOfCreditUtils.generateGoodsDescription(purchaseOrders, lcClientConfig.getGoodsDescription()));
lc.setPresentationPeriod(LetterOfCreditUtils.generatePresentationPeriod(
lc, lcClientConfig.getDefaultPresentationPeriod()));
lc.setExpiryDate(LetterOfCreditUtils.calculateExpiryDate(
lc.getShippingInfo().getLatestShipmentDate(), lc.getPresentationPeriod()));
lc.setValidityPeriod(LetterOfCreditUtils.generateValidityPeriod(lc));
}
private static void substituteDocumentMetaTags(LetterOfCreditTemplate letterOfCreditTemplate, LetterOfCredit letterOfCredit,
List<PurchaseOrder> purchaseOrders) {
//PurchaseOrder purchaseOrder = letterOfCredit.getPurchaseOrders().get(0);
PurchaseOrder purchaseOrder = purchaseOrders.get(0);
String document = letterOfCreditTemplate.getDocuments();
if (document != null && purchaseOrder != null) {
String earliestShipDate = substituteEarliestShipmentDate(document, purchaseOrder);
String lsp = substituteLogisticsServiceProvider(earliestShipDate, purchaseOrder);
String proforma = substituteProformaInvoice(lsp, purchaseOrder);
String shippingMark = substituteShippingMark(proforma, purchaseOrder);
letterOfCredit.setDocuments(shippingMark);
} else {
letterOfCredit.setDocuments(null);
}
}
private static void substituteConditionsMetaTag(LetterOfCreditTemplate letterOfCreditTemplate, LetterOfCredit letterOfCredit,
List<PurchaseOrder> purchaseOrders) {
//PurchaseOrder purchaseOrder = letterOfCredit.getPurchaseOrders().get(0);
PurchaseOrder purchaseOrder = purchaseOrders.get(0);
String condition = letterOfCreditTemplate.getConditions();
if (condition != null && purchaseOrder != null) {
String earliestShipDate = substituteEarliestShipmentDate(condition, purchaseOrder);
String proforma = substituteProformaInvoice(earliestShipDate, purchaseOrder);
// substituteSpecialCondition(condition, purchaseOrder);
String shippingMark = substituteShippingMark(proforma, purchaseOrder);
letterOfCredit.setConditions(shippingMark);
} else {
letterOfCredit.setConditions(null);
}
}
private static String substituteEarliestShipmentDate(String string, PurchaseOrder purchaseOrder) {
if (purchaseOrder.getOrderDates() != null && purchaseOrder.getOrderDates().getEarliestShipmentDate() != null) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return string.replace(ConditionsMetaTag.EARLIEST_SHIPMENT_DATE.toString(), sdf.format
(purchaseOrder.getOrderDates().getEarliestShipmentDate()));
}
return " [ESD not specified on order] ";
}
private static String substituteProformaInvoice(String string, PurchaseOrder purchaseOrder) {
if (purchaseOrder.getProFormaReference() != null) {
return string.replace(ConditionsMetaTag.PROFORMA_INVOICE.toString(), purchaseOrder.getProFormaReference());
}
return " [ProForma not specified on order] ";
}
private static void substituteSpecialCondition(String string, PurchaseOrder purchaseOrder) {
string.replace(ConditionsMetaTag.SPECIAL_CONDITION.toString(), "Special condition");
}
private static String substituteShippingMark(String string, PurchaseOrder purchaseOrder) {
if (purchaseOrder.getShippingInformation() != null) {
return string.replace(ConditionsMetaTag.SHIPPING_MARK.toString(), purchaseOrder.getShippingInformation().getShippingReference());
}
return " [ShippingMark not specified on order] ";
}
private static String substituteLogisticsServiceProvider(String string, PurchaseOrder purchaseOrder) {
if (purchaseOrder.getShippingInformation() != null && purchaseOrder.getShippingInformation().getFreightForwarder() != null) {
return string.replace(DocumentsMetaTag.LOGISTICS_SERVICE_PROVIDER.toString(), purchaseOrder.
getShippingInformation().getFreightForwarder().getName());
}
return " [LSP not specified on order] ";
}
}