com.commander4j.messages.OutgoingDespatchConfirmation.java Source code

Java tutorial

Introduction

Here is the source code for com.commander4j.messages.OutgoingDespatchConfirmation.java

Source

package com.commander4j.messages;

/**
 * @author David Garratt
 * 
 * Project Name : Commander4j
 * 
 * Filename     : OutgoingDespatchConfirmation.java
 * 
 * Package Name : com.commander4j.messages
 * 
 * License      : GNU General Public License
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as
 * published by the Free Software Foundation, either version 3 of the 
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public 
 * License along with this program.  If not, see
 * http://www.commander4j.com/website/license.html.
 * 
 */

import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.text.NumberFormat;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;

import com.commander4j.db.JDBDespatch;
import com.commander4j.db.JDBInterface;
import com.commander4j.db.JDBInterfaceLog;
import com.commander4j.db.JDBInterfaceRequest;
import com.commander4j.db.JDBPalletHistory;
import com.commander4j.db.JDBControl;
import com.commander4j.db.JDBUom;
import com.commander4j.email.JeMailOutGoingMessage;
import com.commander4j.sys.Common;
import com.commander4j.util.JFileIO;
import com.commander4j.util.JUtility;
import com.commander4j.xml.JXMLDocument;

public class OutgoingDespatchConfirmation {
    private String hostID;
    private String sessionID;
    final Logger logger = Logger.getLogger(OutgoingDespatchConfirmation.class);
    private String errorMessage;
    private JFileIO fio = new JFileIO();
    private JeMailOutGoingMessage ogm;

    public String getErrorMessage() {
        return errorMessage;
    }

    private void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    public OutgoingDespatchConfirmation(String host, String session) {
        setHostID(host);
        setSessionID(session);
    }

    public Element addElement(Document doc, String name, String value) {
        Element temp = (Element) doc.createElement(name);
        Text temp_value = doc.createTextNode(value);
        temp.appendChild(temp_value);
        return temp;
    }

    public String getHostID() {
        return hostID;
    }

    public String getSessionID() {
        return sessionID;
    }

    public Boolean processMessage(Long transactionRef) {
        Boolean result = false;
        String path = "";
        String defaultBatchStatus = "";

        JDBInterfaceLog il = new JDBInterfaceLog(getHostID(), getSessionID());
        JDBControl ctrl = new JDBControl(getHostID(), getSessionID());
        GenericMessageHeader gmh = new GenericMessageHeader();
        JDBInterface inter = new JDBInterface(getHostID(), getSessionID());
        JDBUom uoml = new JDBUom(getHostID(), getSessionID());
        String batchDateMode = ctrl.getKeyValue("EXPIRY DATE MODE");

        inter.getInterfaceProperties("Despatch Confirmation", "Output");
        String device = inter.getDevice();

        JDBDespatch desp = new JDBDespatch(getHostID(), getSessionID());
        desp.setTransactionRef(transactionRef);
        desp.getDespatchPropertiesFromTransactionRef();

        String sourceGLN = JUtility.replaceNullStringwithBlank(desp.getLocationDBFrom().getGLN());
        String destinationGLN = JUtility.replaceNullStringwithBlank(desp.getLocationDBTo().getGLN());
        Boolean suppressMessage = false;

        gmh.setMessageRef(desp.getTransactionRef().toString());
        gmh.setInterfaceType(inter.getInterfaceType());
        gmh.setMessageInformation("Despatch=" + desp.getDespatchNo());
        gmh.setInterfaceDirection(inter.getInterfaceDirection());
        gmh.setMessageDate(JUtility.getISOTimeStampStringFormat(JUtility.getSQLDateTime()));

        String noJourneyPrefix = ctrl.getKeyValueWithDefault("NO JOURNEY PREFIX", "NJ_",
                "Prefix for No Journey Messages");

        if (desp.getDespatchPalletCount() == 0) {
            setErrorMessage("Message Suppressed - 0 pallets assigned to despatch");
            suppressMessage = true;
        }

        if (sourceGLN.length() == 0) {
            setErrorMessage("Message Suppressed - No GLN Source (From) GLN for Location ["
                    + desp.getLocationIDFrom() + "]");
            suppressMessage = true;
        }

        if (destinationGLN.length() == 0) {
            setErrorMessage("Message Suppressed - No GLN Destination (To) GLN for Location ["
                    + desp.getLocationIDTo() + "]");
            suppressMessage = true;
        }

        if (suppressMessage == true) {
            result = true;
            il.write(gmh, GenericMessageHeader.msgStatusWarning, getErrorMessage(), "File Write", "");

        } else {
            if (inter.getFormat().equals("EANCOM")) {

                if (sourceGLN.endsWith("")) {

                }

                int segments = 0;
                int optional = 0;
                String document = "";
                String despdateShort = new java.text.SimpleDateFormat("yyMMdd:HHmm").format(desp.getDespatchDate());
                String despdateLong = new java.text.SimpleDateFormat("yyyyMMddHHmm").format(desp.getDespatchDate());

                document = document + "UNA:+.? 'UNB+UNOA:3+" + desp.getLocationDBFrom().getGLN() + ":14+"
                        + desp.getLocationDBTo().getGLN() + ":14+";
                document = document + despdateShort + "+" + desp.getDespatchNo() + "'";
                document = document + "UNH+" + desp.getDespatchNo() + "+DESADV:D:96A:EN:EAN005'";
                document = document + "BGM+351+" + desp.getDespatchNo() + "+9'";
                document = document + "DTM+11:" + despdateLong + ":203'";
                document = document + "RFF+LO:" + desp.getDespatchNo() + "'";
                document = document + "RFF+ZCO:'";

                if (desp.getLocationDBTo().getMsgJourneyRef().equals("Y")) {
                    if (desp.getJourneyRef().equals("NO JOURNEY")) {
                        document = document + "RFF+SRN:" + noJourneyPrefix + desp.getDespatchNo() + "'";
                    } else {
                        document = document + "RFF+SRN:" + desp.getJourneyRef() + "'";
                    }
                    optional++;
                }

                document = document + "RFF+ZAF:'";
                document = document + "RFF+ZPI:1'";
                document = document + "RFF+ZCH:'";
                document = document + "NAD+SF+" + desp.getLocationDBFrom().getGLN() + "::9'";

                if (desp.getLocationDBFrom().getStorageLocation().equals("") == false) {
                    if (desp.getLocationDBTo().getStorageLocation().equals("") == false) {
                        document = document + "LOC+198+" + desp.getLocationDBFrom().getStorageLocation() + "::91'";
                        optional++;
                    }
                }

                document = document + "NAD+ST+" + desp.getLocationDBTo().getGLN() + "::9'";

                if (desp.getLocationDBFrom().getStorageLocation().equals("") == false) {
                    if (desp.getLocationDBTo().getStorageLocation().equals("") == false) {
                        document = document + "LOC+195+" + desp.getLocationDBTo().getStorageLocation() + "::91'";
                        optional++;
                    }
                }

                document = document + "TDT+20++30+31+::9:"
                        + JUtility.stripEANCOMSpecialCharacters(
                                JUtility.replaceNullStringwithBlank(desp.getHaulier()))
                        + "+++:::" + JUtility.stripEANCOMSpecialCharacters(
                                JUtility.replaceNullStringwithBlank(desp.getTrailer()))
                        + "'";

                if (desp.getLoadNo().equals("")) {
                    desp.setLoadNo("123");
                }

                document = document + "EQD+CN+"
                        + JUtility.replaceNullStringwithBlank(StringUtils.left(desp.getTrailer(), 10)) + "'";

                // NEXT 2 LINES COMMENTS NEED TO BE RESTORED FOR SAP EWM

                // Next line needs commenting pre SAP EWM
                document = document + "SEL+"
                        + JUtility.replaceNullStringwithBlank(StringUtils.left(desp.getLoadNo(), 10)) + "+CA'";
                document = document + "SEL+" + desp.getDespatchNo() + "+CU'";

                // Next line needs amending pre SAP EWM
                segments = 14 + optional;
                //segments = 13 + optional;

                JDBPalletHistory palhist = new JDBPalletHistory(getHostID(), getSessionID());
                ResultSet rs = palhist.getInterfacingData(transactionRef, "DESPATCH", "TO", Long.valueOf(0), "SSCC",
                        "asc");

                int x = 1;
                try {
                    rs.beforeFirst();
                    while (rs.next()) {
                        palhist.getPropertiesfromResultSet(rs);

                        document = document + "CPS+" + JUtility.padString(String.valueOf(x).trim(), false, 4, "0")
                                + "'";
                        document = document + "PAC+1++202'";
                        document = document + "PCI+33E'";
                        document = document + "GIN+BJ+" + palhist.getPallet().getSSCC() + "'";
                        document = document + "LIN+1++" + palhist.getPallet().getEAN() + ":EN'";
                        document = document + "PIA+1+" + palhist.getPallet().getVariant() + ":PV+"
                                + palhist.getPallet().getMaterial() + ":SA'";

                        NumberFormat formatter = new DecimalFormat("#.#");
                        String outqty = formatter.format(palhist.getPallet().getQuantity()); // -1234.567000

                        document = document + "QTY+12:" + outqty + ":" + palhist.getPallet().getUom() + "'";
                        document = document + "DLM+++0::9'";

                        //                  String batchExpiryLong = new java.text.SimpleDateFormat("yyyyMMdd").format(palhist.getPallet().getMaterialBatchExpiryDate());

                        String batchExpiryLong = "";
                        if (batchDateMode.equals("BATCH")) {
                            batchExpiryLong = new java.text.SimpleDateFormat("yyyyMMdd")
                                    .format(palhist.getPallet().getMaterialBatchExpiryDate());
                        }

                        if (batchDateMode.equals("SSCC")) {
                            batchExpiryLong = new java.text.SimpleDateFormat("yyyyMMdd")
                                    .format(palhist.getPallet().getBatchExpiry());
                        }

                        String dateOfManufactureLong = new java.text.SimpleDateFormat("yyyyMMdd")
                                .format(palhist.getPallet().getDateOfManufacture());

                        document = document + "DTM+361:" + batchExpiryLong + ":102'";
                        document = document + "DTM+94:" + dateOfManufactureLong + ":102'";
                        document = document + "RFF+AAJ:" + palhist.getPallet().getDespatchNo() + ":1'";

                        defaultBatchStatus = palhist.getPallet().getMaterialBatchStatus();

                        if (defaultBatchStatus.equals("Unrestricted")) {
                            document = document + "RFF+ZBR:'";
                        } else {
                            document = document + "RFF+ZBR:B'";
                        }

                        document = document + "RFF+ZRB:'";
                        document = document + "RFF+ZSR:'";
                        document = document + "RFF+ZRC:'";
                        document = document + "RFF+ZRT:'";
                        document = document + "PCI+36E'";
                        document = document + "GIN+BX+" + palhist.getPallet().getBatchNumber() + "'";

                        segments = segments + 18;

                        x++;
                    }
                    rs.close();

                    segments = segments + 1;

                    document = document + "UNT+" + String.valueOf(segments).trim() + "+" + desp.getDespatchNo()
                            + "'";
                    document = document + "UNZ+1+" + desp.getDespatchNo() + "'";

                    if (device.equals("Disk") | device.equals("Email")) {
                        path = inter.getRealPath();
                        if (fio.writeToDisk(path, document, transactionRef, "_"
                                + desp.getLocationIDTo().replace(" ", "_") + "_DespatchConfirmation.txt") == true) {
                            result = true;
                            il.write(gmh, GenericMessageHeader.msgStatusSuccess, "Processed OK", "File Write",
                                    fio.getFilename());
                            setErrorMessage("");
                            if (device.equals("Email")) {
                                ogm = new JeMailOutGoingMessage(inter, transactionRef, fio);
                                ogm.sendEmail();
                            }
                        } else {
                            result = false;
                            il.write(gmh, GenericMessageHeader.msgStatusError, fio.getErrorMessage(), "File Write",
                                    fio.getFilename());
                            setErrorMessage(fio.getErrorMessage());
                        }

                    }

                } catch (SQLException e) {

                }

            }

            if (inter.getFormat().equals("XML")) {

                try {
                    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder builder = factory.newDocumentBuilder();

                    Document document = builder.newDocument();

                    Element message = (Element) document.createElement("message");

                    Element hostUniqueID = addElement(document, "hostRef",
                            Common.hostList.getHost(getHostID()).getUniqueID());
                    message.appendChild(hostUniqueID);

                    Element messageRef = addElement(document, "messageRef", String.valueOf(transactionRef));
                    message.appendChild(messageRef);

                    Element messageType = addElement(document, "interfaceType", "Despatch Confirmation");
                    message.appendChild(messageType);

                    Element messageInformation = addElement(document, "messageInformation",
                            "Despatch=" + desp.getDespatchNo());
                    message.appendChild(messageInformation);

                    Element messageDirection = addElement(document, "interfaceDirection", "Output");
                    message.appendChild(messageDirection);

                    Element messageDate = addElement(document, "messageDate",
                            JUtility.getISOTimeStampStringFormat(JUtility.getSQLDateTime()));
                    message.appendChild(messageDate);

                    Element despatchConfirmation = (Element) document.createElement("despatchConfirmation");

                    Element noofpallets = addElement(document, "numberOfPallets",
                            String.valueOf(desp.getTotalPallets()));
                    despatchConfirmation.appendChild(noofpallets);

                    Element haulier = addElement(document, "haulier",
                            String.valueOf(JUtility.replaceNullStringwithBlank(desp.getHaulier())));
                    despatchConfirmation.appendChild(haulier);

                    Element trailer = addElement(document, "trailer",
                            String.valueOf(JUtility.replaceNullStringwithBlank(desp.getTrailer())));
                    despatchConfirmation.appendChild(trailer);

                    Element load = addElement(document, "loadNo",
                            String.valueOf(JUtility.replaceNullStringwithBlank(desp.getLoadNo())));
                    despatchConfirmation.appendChild(load);

                    Element journey = addElement(document, "journeyRef",
                            String.valueOf(JUtility.replaceNullStringwithBlank(desp.getJourneyRef())));
                    despatchConfirmation.appendChild(journey);

                    Element despatch = addElement(document, "despatchNo", desp.getDespatchNo());
                    despatchConfirmation.appendChild(despatch);

                    Element despatchDate = addElement(document, "despatchDate",
                            JUtility.getISOTimeStampStringFormat(desp.getDespatchDate()));
                    despatchConfirmation.appendChild(despatchDate);

                    Element locationFrom = addElement(document, "fromLocation", desp.getLocationIDFrom());
                    despatchConfirmation.appendChild(locationFrom);

                    Element locationFromPlant = addElement(document, "fromPlant",
                            desp.getLocationDBFrom().getPlant());
                    despatchConfirmation.appendChild(locationFromPlant);

                    Element locationFromWarehouse = addElement(document, "fromWarehouse",
                            desp.getLocationDBFrom().getWarehouse());
                    despatchConfirmation.appendChild(locationFromWarehouse);

                    Element locationFromStorageSection = addElement(document, "fromStorageSection",
                            desp.getLocationDBFrom().getStorageSection());
                    despatchConfirmation.appendChild(locationFromStorageSection);

                    Element locationFromStorageType = addElement(document, "fromStorageType",
                            desp.getLocationDBFrom().getStorageType());
                    despatchConfirmation.appendChild(locationFromStorageType);

                    Element locationFromStorageBin = addElement(document, "fromStorageBin",
                            desp.getLocationDBFrom().getStorageBin());
                    despatchConfirmation.appendChild(locationFromStorageBin);

                    Element locationFromGLN = addElement(document, "fromGLN", desp.getLocationDBFrom().getGLN());
                    despatchConfirmation.appendChild(locationFromGLN);

                    Element locationFromStorageLocation = addElement(document, "fromStorageLocation",
                            desp.getLocationDBFrom().getStorageLocation());
                    despatchConfirmation.appendChild(locationFromStorageLocation);

                    Element locationTo = addElement(document, "toLocation", desp.getLocationIDTo());
                    despatchConfirmation.appendChild(locationTo);

                    Element locationToPlant = addElement(document, "toPlant", desp.getLocationDBTo().getPlant());
                    despatchConfirmation.appendChild(locationToPlant);

                    Element locationToWarehouse = addElement(document, "toWarehouse",
                            desp.getLocationDBTo().getWarehouse());
                    despatchConfirmation.appendChild(locationToWarehouse);

                    Element locationToStorageSection = addElement(document, "toStorageSection",
                            desp.getLocationDBTo().getStorageSection());
                    despatchConfirmation.appendChild(locationToStorageSection);

                    Element locationToStorageType = addElement(document, "toStorageType",
                            desp.getLocationDBTo().getStorageType());
                    despatchConfirmation.appendChild(locationToStorageType);

                    Element locationToStorageBin = addElement(document, "toStorageBin",
                            desp.getLocationDBTo().getStorageBin());
                    despatchConfirmation.appendChild(locationToStorageBin);

                    Element locationToGLN = addElement(document, "toGLN", desp.getLocationDBTo().getGLN());
                    despatchConfirmation.appendChild(locationToGLN);

                    Element locationToStorageLocation = addElement(document, "toStorageLocation",
                            desp.getLocationDBTo().getStorageLocation());
                    despatchConfirmation.appendChild(locationToStorageLocation);

                    Element contents = (Element) document.createElement("contents");
                    despatchConfirmation.appendChild(contents);

                    JDBPalletHistory palhist = new JDBPalletHistory(getHostID(), getSessionID());
                    ResultSet rs = palhist.getInterfacingData(transactionRef, "DESPATCH", "TO", Long.valueOf(0),
                            "SSCC", "asc");

                    int x = 1;
                    try {
                        rs.beforeFirst();
                        while (rs.next()) {
                            palhist.getPropertiesfromResultSet(rs);
                            Element pallet = (Element) document.createElement("pallet");

                            Element item = addElement(document, "item", String.valueOf(x));
                            pallet.appendChild(item);
                            x++;

                            Element sscc = addElement(document, "SSCC", palhist.getPallet().getSSCC());
                            pallet.appendChild(sscc);

                            Element processOrder = addElement(document, "processOrder",
                                    palhist.getPallet().getProcessOrder());
                            pallet.appendChild(processOrder);

                            Element material = addElement(document, "material", palhist.getPallet().getMaterial());
                            pallet.appendChild(material);

                            Element materialDescription = addElement(document, "materialDescription",
                                    palhist.getPallet().getMaterialObj().getDescription());
                            pallet.appendChild(materialDescription);

                            Element ean = addElement(document, "ean", palhist.getPallet().getEAN());
                            pallet.appendChild(ean);

                            Element variant = addElement(document, "variant", palhist.getPallet().getVariant());
                            pallet.appendChild(variant);

                            Element qty = addElement(document, "quantity",
                                    palhist.getPallet().getQuantity().toString());
                            pallet.appendChild(qty);

                            String paluom = palhist.getPallet().getUom();
                            paluom = uoml.convertUom(inter.getUOMConversion(), paluom);

                            Element uom = addElement(document, "UOM", paluom);
                            pallet.appendChild(uom);

                            Element status = addElement(document, "status", palhist.getPallet().getStatus());
                            pallet.appendChild(status);

                            String expiryDateStr = "";
                            if (batchDateMode.equals("BATCH")) {
                                expiryDateStr = JUtility.getISOTimeStampStringFormat(
                                        palhist.getPallet().getMaterialBatchExpiryDate());
                            }

                            if (batchDateMode.equals("SSCC")) {
                                expiryDateStr = JUtility
                                        .getISOTimeStampStringFormat(palhist.getPallet().getBatchExpiry());
                            }

                            Element expiryDate = addElement(document, "bestBefore", expiryDateStr);
                            pallet.appendChild(expiryDate);

                            Element dom = addElement(document, "productionDate", JUtility
                                    .getISOTimeStampStringFormat(palhist.getPallet().getDateOfManufacture()));
                            pallet.appendChild(dom);

                            Element batch = addElement(document, "batch", palhist.getPallet().getBatchNumber());
                            pallet.appendChild(batch);

                            Element batchStatus = addElement(document, "batchStatus",
                                    palhist.getPallet().getMaterialBatchStatus());
                            pallet.appendChild(batchStatus);

                            contents.appendChild(pallet);

                        }
                        rs.close();
                    } catch (SQLException e) {

                    }

                    Element messageData = (Element) document.createElement("messageData");
                    messageData.appendChild(despatchConfirmation);

                    message.appendChild(messageData);

                    document.appendChild(message);

                    JXMLDocument xmld = new JXMLDocument();
                    xmld.setDocument(document);
                    gmh.decodeHeader(xmld);

                    if (device.equals("Disk") | device.equals("Email")) {
                        path = inter.getRealPath();
                        if (fio.writeToDisk(path, document, transactionRef, "_"
                                + desp.getLocationIDTo().replace(" ", "_") + "_DespatchConfirmation.xml") == true) {
                            result = true;
                            il.write(gmh, GenericMessageHeader.msgStatusSuccess, "Processed OK", "File Write",
                                    fio.getFilename());
                            setErrorMessage("");

                            if (device.equals("Email")) {
                                ogm = new JeMailOutGoingMessage(inter, transactionRef, fio);
                                ogm.sendEmail();
                            }
                        } else {
                            result = false;
                            il.write(gmh, GenericMessageHeader.msgStatusError, fio.getErrorMessage(), "File Write",
                                    fio.getFilename());
                            setErrorMessage(fio.getErrorMessage());
                        }

                    }

                }

                catch (Exception ex) {
                    logger.error("Error sending message. " + ex.getMessage());
                    result = false;
                }
            }
        }

        return result;
    }

    public void setHostID(String host) {
        hostID = host;
    }

    public void setSessionID(String session) {
        sessionID = session;
    }

    public void submit(long dbTransactionRef) {
        JDBInterface inter = new JDBInterface(getHostID(), getSessionID());
        inter.getInterfaceProperties("Despatch Confirmation", "Output");
        if (inter.isEnabled() == true) {
            JDBInterfaceRequest ir = new JDBInterfaceRequest(getHostID(), getSessionID());
            ir.write(dbTransactionRef, "Despatch Confirmation");
        } else {
            logger.debug("Interface Despatch Confirmation - Output is DISABLED");
        }
    }

}