com.gp.cong.logisoft.lcl.report.FreightInvoiceLclPdfCreator.java Source code

Java tutorial

Introduction

Here is the source code for com.gp.cong.logisoft.lcl.report.FreightInvoiceLclPdfCreator.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.gp.cong.logisoft.lcl.report;

import com.gp.cong.common.CommonUtils;
import com.gp.cong.common.DateUtils;
import com.gp.cong.lcl.common.constant.LclUtils;
import com.gp.cong.logisoft.bc.fcl.FclBlBC;
import com.gp.cong.logisoft.bc.tradingpartner.TradingPartnerBC;
import com.gp.cong.logisoft.beans.BookingChargesBean;
import com.gp.cong.logisoft.domain.CustomerAccounting;
import com.gp.cong.logisoft.domain.RefTerminal;
import com.gp.cong.logisoft.domain.TradingPartner;
import com.gp.cong.logisoft.domain.User;
import com.gp.cong.logisoft.domain.lcl.LclBooking;
import com.gp.cong.logisoft.domain.lcl.LclBookingPiece;
import com.gp.cong.logisoft.domain.lcl.LclFileNumber;
import com.gp.cong.logisoft.hibernate.dao.CustomerAccountingDAO;
import com.gp.cong.logisoft.hibernate.dao.GenericCodeDAO;
import com.gp.cong.logisoft.hibernate.dao.ImportPortConfigurationDAO;
import com.gp.cong.logisoft.hibernate.dao.TerminalDAO;
import com.gp.cong.logisoft.hibernate.dao.lcl.LCLBookingDAO;
import com.gp.cong.logisoft.hibernate.dao.lcl.Lcl3pRefNoDAO;
import com.gp.cong.logisoft.hibernate.dao.lcl.LclBookingImportAmsDAO;
import com.gp.cong.logisoft.hibernate.dao.lcl.LclBookingPieceDAO;
import com.gp.cong.logisoft.hibernate.dao.lcl.LclBookingSegregationDao;
import com.gp.cong.logisoft.hibernate.dao.lcl.LclCostChargeDAO;
import com.gp.cong.logisoft.hibernate.dao.lcl.LclFileNumberDAO;
import com.gp.cong.logisoft.hibernate.dao.lcl.LclRemarksDAO;
import com.gp.cong.logisoft.hibernate.dao.lcl.LclUnitSsDAO;
import com.gp.cong.logisoft.hibernate.dao.lcl.LclUnitSsDispoDAO;
import com.gp.cong.logisoft.reports.ReportFormatMethods;
import com.gp.cong.logisoft.util.CommonFunctions;
import com.gp.cong.struts.LoadLogisoftProperties;
import com.gp.cvst.logisoft.domain.CustAddress;
import com.gp.cvst.logisoft.hibernate.dao.CustAddressDAO;
import com.gp.cvst.logisoft.hibernate.dao.SystemRulesDAO;
import com.logiware.accounting.model.CompanyModel;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.ExceptionConverter;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.HeaderFooter;
import com.lowagie.text.Image;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfTemplate;
import com.lowagie.text.pdf.PdfWriter;
import java.awt.Color;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.apache.log4j.Logger;

/**
 *
 * @author NambuRajasekar
 */
public class FreightInvoiceLclPdfCreator extends ReportFormatMethods {

    private static final Logger log = Logger.getLogger(FreightInvoiceLclPdfCreator.class);
    private String unitSsId;
    private String realPath;
    protected BaseFont helv;
    Document document = null;
    PdfWriter pdfWriter = null;
    protected PdfTemplate total;
    private LclUtils lclUtils = new LclUtils();
    private CompanyModel company;
    private String companyName = "";
    private String webSite = "";
    private String fileNumberId;

    public String getUnitSsId() {
        return unitSsId;
    }

    public void setUnitSsId(String unitSsId) {
        this.unitSsId = unitSsId;
    }

    public String getRealPath() {
        return realPath;
    }

    public void setRealPath(String realPath) {
        this.realPath = realPath;
    }

    public FreightInvoiceLclPdfCreator() {
    }

    public FreightInvoiceLclPdfCreator(String realPath, String fileId) {
        this.realPath = realPath;
        this.fileNumberId = fileId;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public CompanyModel getCompany() {
        return company;
    }

    public void setCompany(CompanyModel company) {
        this.company = company;
    }

    public String getWebSite() {
        return webSite;
    }

    public void setWebSite(String webSite) {
        this.webSite = webSite;
    }

    public String getFileNumberId() {
        return fileNumberId;
    }

    public void setFileNumberId(String fileNumberId) {
        this.fileNumberId = fileNumberId;
    }

    public void createPdf(String realPath, String unitSsId, String fileId, String fileNumber, String outputFileName,
            String documentName, String voyNotiemailId, User loginUser) throws Exception {
        init(outputFileName, fileId);
        createImportFreightPdf(realPath, unitSsId, fileId, fileNumber, outputFileName, documentName, voyNotiemailId,
                loginUser);
        document.close();

    }

    public void init(String outputFileName, String fileId)
            throws FileNotFoundException, DocumentException, Exception {
        document = new Document(PageSize.A4);
        document.setMargins(10, 10, 10, 10);
        pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(outputFileName));
        pdfWriter.setPageEvent(new FreightInvoiceLclPdfCreator(realPath, fileId));
        company = new SystemRulesDAO().getCompanyDetails();
        this.setBrand(fileId);
        HeaderFooter footer = new HeaderFooter(
                new Phrase(companyName, new Font(Font.HELVETICA, 10, Font.ITALIC, Color.BLACK)), false);
        footer.setBorder(Rectangle.NO_BORDER);
        footer.setAlignment(Element.ALIGN_CENTER);
        document.setFooter(footer);
        document.open();
    }

    @Override
    public void onOpenDocument(PdfWriter writer, Document document) {
        total = writer.getDirectContent().createTemplate(100, 100);
        total.setBoundingBox(new Rectangle(-20, -20, 100, 100));
        try {
            helv = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);
        } catch (Exception e) {
            log.info("onOpenDocument failed on " + new Date(), e);
            throw new ExceptionConverter(e);
        }
    }

    @Override
    public void onCloseDocument(PdfWriter writer, Document document) {
        total.beginText();
        total.setFontAndSize(helv, 7);
        total.setTextMatrix(0, 0);
        total.showText(String.valueOf(writer.getPageNumber() - 1));
        total.endText();
    }

    @Override
    public void onStartPage(PdfWriter writer, Document document) {
        onStartArRedInvoicePage(writer, document);
    }

    public void onStartArRedInvoicePage(PdfWriter writer, Document document) {
        try {
            SystemRulesDAO systemRulesDAO = new SystemRulesDAO();
            String companyAddress = systemRulesDAO.getSystemRulesByCode("CompanyAddress");
            String companyPhone = systemRulesDAO.getSystemRulesByCode("CompanyPhone");
            String companyFax = systemRulesDAO.getSystemRulesByCode("CompanyFax");
            PdfPCell cell = new PdfPCell();
            PdfPTable headingMainTable = new PdfPTable(1);
            headingMainTable.setWidthPercentage(100);
            PdfPTable headingTable = new PdfPTable(1);
            headingTable.setWidths(new float[] { 100 });
            PdfPTable imgTable = new PdfPTable(1);
            imgTable.setWidthPercentage(100);
            Image img = null;
            String logoImage = "";
            String brand = this.setBrand(fileNumberId);
            if (CommonUtils.isNotEmpty(brand)) {
                if ("ECI".equalsIgnoreCase(brand)) {
                    logoImage = LoadLogisoftProperties.getProperty("application.image.econo.logo");
                    img = Image.getInstance(realPath + logoImage);
                    img.scalePercent(75);
                } else if ("OTI".equalsIgnoreCase(brand)) {
                    logoImage = LoadLogisoftProperties.getProperty("application.image.econo.logo");
                    img = Image.getInstance(realPath + logoImage);
                    img.scalePercent(45);
                } else {
                    logoImage = LoadLogisoftProperties.getProperty("application.image.logo");
                    img = Image.getInstance(realPath + logoImage);
                    img.scalePercent(45);
                }
            }
            img.scalePercent(75);
            PdfPCell logoCell = new PdfPCell(img);
            logoCell.setBorder(Rectangle.NO_BORDER);
            logoCell.setHorizontalAlignment(Element.ALIGN_LEFT);
            logoCell.setVerticalAlignment(Element.ALIGN_LEFT);
            logoCell.setPaddingLeft(+27);
            imgTable.addCell(logoCell);
            PdfPTable addrTable = new PdfPTable(1);
            addrTable.setWidthPercentage(100);
            PdfPTable invoiceFacturaTable = new PdfPTable(3);
            invoiceFacturaTable.setWidthPercentage(100);
            invoiceFacturaTable.setWidths(new float[] { 40, 20, 40 });
            StringBuilder stringBuilder = new StringBuilder();
            addrTable.addCell(makeCellCenterNoBorderFclBL("MAILING ADDRESS: "
                    + (CommonUtils.isNotEmpty(companyAddress) ? companyAddress.toUpperCase() : "")));
            stringBuilder.append("TEL: ");
            stringBuilder.append(CommonUtils.isNotEmpty(companyPhone) ? companyPhone : "").append(" / ");
            stringBuilder.append("FAX: ");
            stringBuilder.append(CommonUtils.isNotEmpty(companyFax) ? companyFax : "");
            addrTable.addCell(makeCellCenterNoBorderFclBL(stringBuilder.toString()));
            addrTable.addCell(makeCellLeftNoBorderFclBL(""));
            addrTable.addCell(makeCellLeftNoBorderFclBL(""));
            invoiceFacturaTable.addCell(makeCellLeftNoBorderFclBL(""));
            cell = makeCell("INVOICE", Element.ALIGN_CENTER, new Font(Font.HELVETICA, 12, Font.BOLD, Color.RED),
                    0.06f);
            invoiceFacturaTable.addCell(cell);
            invoiceFacturaTable.addCell(makeCellLeftNoBorderFclBL(""));
            cell = new PdfPCell();
            cell.addElement(invoiceFacturaTable);
            cell.setBorder(0);
            addrTable.addCell(cell);
            addrTable.addCell(makeCellLeftNoBorderFclBL(""));
            addrTable.addCell(makeCellLeftNoBorderFclBL(""));

            cell = new PdfPCell();
            cell.addElement(imgTable);
            cell.setBorder(0);
            cell.setPaddingLeft(+150);
            headingMainTable.addCell(cell);
            //            headingTable.addCell(cell);
            cell = new PdfPCell();
            cell.addElement(addrTable);
            cell.setBorder(0);
            headingTable.addCell(cell);
            cell = makeCellLeftNoBorderFclBL("");
            cell.setBorderWidthRight(0.06f);
            cell.setBorderWidthLeft(0.06f);
            cell.setBorderWidthTop(0.06f);
            cell.setBorderWidthBottom(0.0f);
            cell.addElement(headingTable);
            headingMainTable.addCell(cell);
            document.add(headingMainTable);
        } catch (Exception e) {
            throw new ExceptionConverter(e);
        }
    }

    public void createImportFreightPdf(String realPath, String unitSsId, String fileId, String fileNumber,
            String outputFileName, String documentName, String voyNotiemailId, User loginUser) throws Exception {
        ImportPortConfigurationDAO importPortConfigurationDAO = new ImportPortConfigurationDAO();
        LclUnitSsDispoDAO lclUnitSsDispoDAO = new LclUnitSsDispoDAO();
        LclUnitSsDAO lclUnitSsDAO = new LclUnitSsDAO();
        LclRemarksDAO lclRemarksDAO = new LclRemarksDAO();
        LclBookingPieceDAO lclBookingPieceDAO = new LclBookingPieceDAO();
        String trmname = "";
        String trmAddress = "";
        String trmZip = "";
        String customerPo = "";
        String unitNo = "";
        String masterBl = "";
        StringBuilder originValues = new StringBuilder();
        StringBuilder destinationValues = new StringBuilder();
        String subHouseBl = "";
        String amsHouseBl = "";
        String shipName = "";
        String consName = "";
        String notyName = "";
        String forwName = "";
        String billToParty = "";
        String billToPartyAc = "";
        Date pickUpDate = null;
        Date vesselEtd = null;
        String billToPartyAcctName = "";
        StringBuilder consAddress = new StringBuilder();

        LclBooking lclBooking = new LCLBookingDAO().findById(Long.valueOf(fileId));
        shipName = null != lclBooking.getShipAcct() ? lclBooking.getShipContact().getCompanyName() : "";
        consName = null != lclBooking.getConsAcct() ? lclBooking.getConsContact().getCompanyName() : "";
        notyName = null != lclBooking.getNotyAcct() ? lclBooking.getNotyContact().getCompanyName() : "";
        forwName = null != lclBooking.getFwdAcct() ? lclBooking.getFwdAcct().getAccountName() : "";

        billToParty = null != lclBooking.getBillToParty() ? lclBooking.getBillToParty() : "";
        if (billToParty.equalsIgnoreCase("C")) {
            billToPartyAc = null != lclBooking.getConsAcct() ? lclBooking.getConsAcct().getAccountno() : "";
            billToPartyAcctName = null != lclBooking.getConsAcct() ? lclBooking.getConsContact().getCompanyName()
                    : "";
        } else if (billToParty.equalsIgnoreCase("A")) {
            billToPartyAc = null != lclBooking.getSupAcct() ? lclBooking.getSupAcct().getAccountno() : "";
            billToPartyAcctName = null != lclBooking.getSupAcct() ? lclBooking.getSupAcct().getAccountName() : "";
        } else if (billToParty.equalsIgnoreCase("N")) {
            billToPartyAc = null != lclBooking.getNotyAcct() ? lclBooking.getNotyAcct().getAccountno() : "";
            billToPartyAcctName = null != lclBooking.getNotyAcct() ? lclBooking.getNotyContact().getCompanyName()
                    : "";
        } else if (billToParty.equalsIgnoreCase("T")) {
            billToPartyAc = null != lclBooking.getThirdPartyAcct() ? lclBooking.getThirdPartyAcct().getAccountno()
                    : "";
            billToPartyAcctName = null != lclBooking.getThirdPartyAcct()
                    ? lclBooking.getThirdPartyAcct().getAccountName()
                    : "";
        }

        originValues.append(lclUtils.getConcatenatedOriginByUnlocation(lclBooking.getPortOfLoading()));
        destinationValues.append(lclUtils.getConcatenatedOriginByUnlocation(lclBooking.getPortOfDestination()));
        if (lclBooking.getTerminal() != null) {
            RefTerminal terminal = new TerminalDAO()
                    .findByTerminalNo(String.valueOf(lclBooking.getTerminal().getTrmnum()));
            trmname = null != terminal ? terminal.getTerminalLocation() : "";
            if (trmname.equalsIgnoreCase("IMPRTS LOS ANGELES")) {
                trmname = "Los Angeles";
            }
            trmAddress = null != terminal ? terminal.getAddres1() : "";
            trmZip = null != terminal ? terminal.getZipcde() : "";
        }
        customerPo = new Lcl3pRefNoDAO().getCustomerPo(fileId);
        CustAddress custAddress = new CustAddressDAO().findByAccountNo(billToPartyAc);
        if (custAddress != null) {
            consAddress.append(billToPartyAcctName).append("\n");
            consAddress.append(custAddress.getAddress1()).append("\n");
            consAddress.append(custAddress.getCity1()).append(" ").append(custAddress.getState()).append(" ")
                    .append(custAddress.getZip());
        }
        List<LclBookingPiece> lclBookingPiece = lclBookingPieceDAO.findByProperty("lclFileNumber.id",
                Long.parseLong(fileId));
        LclFileNumber lclFileNumber = new LclFileNumberDAO().getByProperty("id", Long.parseLong(fileId));
        if (lclBookingPiece != null && !lclBookingPiece.isEmpty()
                && CommonUtils.isNotEmpty(lclBookingPiece.get(0).getLclBookingPieceUnitList())) {
            unitNo = lclBookingPiece.get(0).getLclBookingPieceUnitList().get(0).getLclUnitSs().getLclUnit()
                    .getUnitNo();
            masterBl = lclBookingPiece.get(0).getLclBookingPieceUnitList().get(0).getLclUnitSs().getLclUnit()
                    .getLclUnitSsManifestList().get(0).getMasterbl();
            vesselEtd = lclBookingPiece.get(0).getLclBookingPieceUnitList().get(0).getLclUnitSs().getLclSsHeader()
                    .getLclSsDetailList().get(0).getSta();
        }
        Boolean isSegregationFlag = new LclBookingSegregationDao().isCheckedSegregationDr(Long.parseLong(fileId));
        if (isSegregationFlag) {
            amsHouseBl = new LclBookingImportAmsDAO().getAmsNo(fileId);
        } else {
            amsHouseBl = new LclBookingImportAmsDAO().getAmsNoGroup(fileId);
        }
        if (lclFileNumber.getLclBookingImport() != null) {
            subHouseBl = lclFileNumber.getLclBookingImport().getSubHouseBl();
            pickUpDate = lclFileNumber.getLclBookingImport().getPickupDateTime();
        }
        PdfPCell cell = new PdfPCell();
        PdfPTable mainTable = makeTable(2);
        mainTable.setWidthPercentage(100f);
        PdfPTable clientPTable = new PdfPTable(5);
        clientPTable.setWidthPercentage(100f);
        clientPTable.setWidths(new float[] { 25, 25, 17, 11, 22 });
        clientPTable.setKeepTogether(true);
        cell = makeCell("BILL TO ACCOUNT NO.", Element.ALIGN_LEFT, headingFontSize8, 0, Color.decode("#c5d9f1"));
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthRight(0.06f);
        clientPTable.addCell(cell);
        cell = makeCell("" + billToPartyAc, Element.ALIGN_LEFT, blackFontForFclAr, 0);
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthRight(0.06f);
        clientPTable.addCell(cell);

        cell = makeCell("INVOICE NO.", Element.ALIGN_CENTER, headingFontSize8, 0, Color.decode("#c5d9f1"));
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthBottom(0.06f);
        clientPTable.addCell(cell);
        cell = makeCell("DATE", Element.ALIGN_CENTER, headingFontSize8, 0, Color.decode("#c5d9f1"));
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthLeft(0.06f);
        cell.setBorderWidthBottom(0.06f);
        clientPTable.addCell(cell);
        cell = makeCell("BILLING TM", Element.ALIGN_CENTER, headingFontSize8, 0, Color.decode("#c5d9f1"));
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthLeft(0.06f);
        cell.setBorderWidthRight(0.06f);
        cell.setBorderWidthBottom(0.06f);
        clientPTable.addCell(cell);

        cell = makeCell("" + consAddress.toString(), Element.ALIGN_LEFT, blackFontForFclAr, 0);
        cell.setColspan(2);
        cell.setMinimumHeight(20f);
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthRight(0.06f);
        clientPTable.addCell(cell);

        //INVOICE NO
        cell = makeCell(fileNumber, Element.ALIGN_CENTER, blackFontForFclBl, 0);
        clientPTable.addCell(cell);

        //DATE
        String acctNumber = checkPayment(billToPartyAc);
        if (!acctNumber.equals("noCredit")) {
            if (CommonFunctions.isNotNull(acctNumber) && !acctNumber.equals("") && pickUpDate != null) {
                cell = makeCell(DateUtils.formatStringDateToAppFormatMMM(pickUpDate), Element.ALIGN_CENTER,
                        blackFontForFclBl, 0);
            } else if (pickUpDate == null && vesselEtd != null) {
                cell = makeCell(DateUtils.formatStringDateToAppFormatMMM(vesselEtd), Element.ALIGN_CENTER,
                        blackFontForFclBl, 0);
            } else {
                cell = makeCell("", Element.ALIGN_CENTER, blackFontForFclBl, 0);
            }
        } else if (acctNumber.equals("noCredit") && vesselEtd != null) {
            cell = makeCell(DateUtils.formatStringDateToAppFormatMMM(vesselEtd), Element.ALIGN_CENTER,
                    blackFontForFclBl, 0);
        } else {
            cell = makeCell("", Element.ALIGN_CENTER, blackFontForFclBl, 0);
        }
        cell.setBorderWidthLeft(0.06f);
        clientPTable.addCell(cell);

        //BILLING TM
        cell = makeCell(trmname, Element.ALIGN_CENTER, blackFontForFclBl, 0);
        cell.setBorderWidthLeft(0.06f);
        clientPTable.addCell(cell);

        cell = makeCell("", Element.ALIGN_CENTER, blackBoldFontSize6, 0);
        cell.setColspan(2);
        clientPTable.addCell(cell);

        cell = makeCell("CUSTOMER REF NO.", Element.ALIGN_CENTER, headingFontSize8, 0, Color.decode("#c5d9f1"));
        cell.setColspan(3);
        cell.setBorderWidthLeft(0.06f);
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthBottom(0.06f);
        clientPTable.addCell(cell);

        cell = makeCell("", Element.ALIGN_CENTER, blackBoldFontSize6, 0);
        cell.setColspan(2);
        clientPTable.addCell(cell);
        //CUSTOMER REF NO.
        cell = makeCell(customerPo, Element.ALIGN_CENTER, blackFontForFclBl, 0);
        cell.setColspan(3);
        cell.setMinimumHeight(15f);
        cell.setBorderWidthLeft(0.06f);
        clientPTable.addCell(cell);

        cell = new PdfPCell();
        cell.addElement(clientPTable);
        cell.setColspan(5);
        cell.setBorder(0);
        cell.setPadding(0f);
        cell.setBorderWidthRight(0.06f);
        cell.setBorderWidthLeft(0.06f);
        mainTable.addCell(cell);

        PdfPTable othersTable = makeTable(4);
        othersTable.setWidthPercentage(100f);
        othersTable.setWidths(new float[] { 25, 25, 25, 25 });
        cell = makeCell("CONTAINER NO.", Element.ALIGN_CENTER, blackBoldFontSize6, 0, Color.decode("#c5d9f1"));
        cell.setBorderWidthBottom(0.06f);
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthRight(0.06f);
        othersTable.addCell(cell);
        cell = makeCell("ECI SHIPMENT FILE NO.", Element.ALIGN_CENTER, blackBoldFontSize6, 0,
                Color.decode("#c5d9f1"));
        cell.setBorderWidthBottom(0.06f);
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthRight(0.06f);
        othersTable.addCell(cell);
        cell = makeCell("ORIGIN", Element.ALIGN_CENTER, blackBoldFontSize6, 0, Color.decode("#c5d9f1"));
        cell.setBorderWidthBottom(0.06f);
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthRight(0.06f);
        othersTable.addCell(cell);
        cell = makeCell("DESTINATION", Element.ALIGN_CENTER, blackBoldFontSize6, 0, Color.decode("#c5d9f1"));
        cell.setBorderWidthBottom(0.06f);
        cell.setBorderWidthTop(0.06f);
        othersTable.addCell(cell);
        //CONTAINER NO
        cell = makeCell("" + unitNo, Element.ALIGN_CENTER, blackBoldFontSize6, 0);
        cell.setMinimumHeight(20f);
        cell.setBorderWidthRight(0.06f);
        othersTable.addCell(cell);
        //ECI SHIPMENT FILE NO
        cell = makeCell("IMP-" + fileNumber, Element.ALIGN_CENTER, blackBoldFontSize6, 0);
        cell.setMinimumHeight(20f);
        cell.setBorderWidthRight(0.06f);
        othersTable.addCell(cell);
        //ORIGIN
        cell = makeCell("" + originValues, Element.ALIGN_CENTER, blackBoldFontSize6, 0);
        cell.setMinimumHeight(20f);
        cell.setBorderWidthRight(0.06f);
        othersTable.addCell(cell);
        //DESTINATION
        cell = makeCell("" + destinationValues, Element.ALIGN_CENTER, blackBoldFontSize6, 0);
        cell.setMinimumHeight(20f);
        cell.setBorderWidthRight(0.06f);
        othersTable.addCell(cell);

        cell = makeCell("MBL / AWB NUMBER", Element.ALIGN_CENTER, blackBoldFontSize6, 0, Color.decode("#c5d9f1"));
        cell.setColspan(2);
        cell.setBorderWidthRight(0.06f);
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthBottom(0.06f);
        othersTable.addCell(cell);
        cell = makeCell("AMS HOUSE BL", Element.ALIGN_CENTER, blackBoldFontSize6, 0, Color.decode("#c5d9f1"));
        cell.setBorderWidthRight(0.06f);
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthBottom(0.06f);
        othersTable.addCell(cell);
        cell = makeCell("SUB HOUSE BL", Element.ALIGN_CENTER, blackBoldFontSize6, 0, Color.decode("#c5d9f1"));
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthBottom(0.06f);
        othersTable.addCell(cell);
        //MBL / AWB NUMBER
        cell = makeCell("" + masterBl, Element.ALIGN_CENTER, blackBoldFontSize6, 0);
        cell.setColspan(2);
        cell.setMinimumHeight(20f);
        cell.setBorderWidthRight(0.06f);
        othersTable.addCell(cell);
        //amsHouseBl
        cell = makeCell(amsHouseBl, Element.ALIGN_CENTER, blackBoldFontSize6, 0);
        cell.setMinimumHeight(20f);
        cell.setBorderWidthRight(0.06f);
        othersTable.addCell(cell);
        //subHouseBl
        cell = makeCell(subHouseBl, Element.ALIGN_CENTER, blackBoldFontSize6, 0);
        cell.setMinimumHeight(20f);
        cell.setBorderWidthRight(0.06f);
        othersTable.addCell(cell);

        cell = makeCell("SHIPPER", Element.ALIGN_CENTER, blackBoldFontSize6, 0, Color.decode("#c5d9f1"));
        cell.setColspan(2);
        cell.setBorderWidthRight(0.06f);
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthBottom(0.06f);
        othersTable.addCell(cell);
        cell = makeCell("FORWARDER", Element.ALIGN_CENTER, blackBoldFontSize6, 0, Color.decode("#c5d9f1"));
        cell.setColspan(2);
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthBottom(0.06f);
        othersTable.addCell(cell);
        //SHIPPER
        cell = makeCell(shipName, Element.ALIGN_CENTER, blackBoldFontSize6, 0);
        cell.setColspan(2);
        cell.setMinimumHeight(20f);
        cell.setBorderWidthRight(0.06f);
        othersTable.addCell(cell);
        //FORWARDER
        cell = makeCell(forwName, Element.ALIGN_CENTER, blackBoldFontSize6, 0);
        cell.setColspan(2);
        cell.setMinimumHeight(20f);
        cell.setBorderWidthRight(0.06f);
        othersTable.addCell(cell);

        cell = makeCell("CONSIGNEE", Element.ALIGN_CENTER, blackBoldFontSize6, 0, Color.decode("#c5d9f1"));
        cell.setColspan(2);
        cell.setBorderWidthRight(0.06f);
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthBottom(0.06f);
        othersTable.addCell(cell);

        cell = makeCell("NOTIFY PARTY", Element.ALIGN_CENTER, blackBoldFontSize6, 0, Color.decode("#c5d9f1"));
        cell.setColspan(2);
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthBottom(0.06f);
        othersTable.addCell(cell);
        //CONSIGNEE
        cell = makeCell(consName, Element.ALIGN_CENTER, blackBoldFontSize6, 0);
        cell.setColspan(2);
        cell.setMinimumHeight(20f);
        cell.setBorderWidthRight(0.06f);
        othersTable.addCell(cell);
        //NOTIFY PARTY
        cell = makeCell(notyName, Element.ALIGN_CENTER, blackBoldFontSize6, 0);
        cell.setColspan(2);
        cell.setMinimumHeight(20f);
        cell.setBorderWidthRight(0.06f);
        othersTable.addCell(cell);

        cell = new PdfPCell();
        cell.setColspan(2);
        cell.addElement(othersTable);
        cell.setBorder(0);
        cell.setPadding(0f);
        cell.setBorderWidthRight(0.06f);
        cell.setBorderWidthLeft(0.06f);
        mainTable.addCell(cell);

        Font boldHeadingFon = FontFactory.getFont("Arial", 7f, Font.BOLD);
        Paragraph p = null;

        PdfPTable othersTable1 = makeTable(5);
        othersTable1.setWidthPercentage(100f);
        othersTable1.setWidths(new float[] { 2f, 1f, 4f, 1.3f, 1.3f });
        //marks     
        cell = new PdfPCell();
        cell.setBorder(0);
        cell.setBorderWidthBottom(0.6F);
        p = new Paragraph(7f, "MARKS AND NUMBERS", boldHeadingFon);
        p.setAlignment(Element.ALIGN_CENTER);
        cell.setBackgroundColor(Color.decode("#c5d9f1"));
        cell.addElement(p);
        othersTable1.addCell(cell);
        //no of pkgs
        cell = new PdfPCell();
        cell.setBorder(0);
        cell.setBorderWidthBottom(0.6F);
        cell.setBorderWidthLeft(0.6f);
        p = new Paragraph(7f, "NO.OF.PKGS", boldHeadingFon);
        p.setAlignment(Element.ALIGN_CENTER);
        cell.setBackgroundColor(Color.decode("#c5d9f1"));
        cell.addElement(p);
        othersTable1.addCell(cell);
        //desc
        cell = new PdfPCell();
        cell.setBorder(0);
        cell.setBorderWidthBottom(0.6F);
        cell.setBorderWidthLeft(0.6f);
        p = new Paragraph(7f, "DESCRIPTION OF PACKAGES AND GOODS", boldHeadingFon);
        p.setAlignment(Element.ALIGN_CENTER);
        cell.setBackgroundColor(Color.decode("#c5d9f1"));
        cell.addElement(p);
        othersTable1.addCell(cell);
        //grossweight
        cell = new PdfPCell();
        cell.setBorder(0);
        cell.setBorderWidthBottom(0.6F);
        cell.setBorderWidthLeft(0.6f);
        p = new Paragraph(7f, "GROSS WEIGHT", boldHeadingFon);
        p.setAlignment(Element.ALIGN_CENTER);
        cell.setBackgroundColor(Color.decode("#c5d9f1"));
        cell.addElement(p);
        othersTable1.addCell(cell);
        //measure
        cell = new PdfPCell();
        cell.setBorder(0);
        cell.setBorderWidthBottom(0.6F);
        cell.setBorderWidthLeft(0.6f);
        p = new Paragraph(7f, "MEASURE", boldHeadingFon);
        p.setAlignment(Element.ALIGN_CENTER);
        cell.setBackgroundColor(Color.decode("#c5d9f1"));
        cell.addElement(p);
        othersTable1.addCell(cell);

        //        List<LclBookingPiece> lclBookingPiecesList = null;
        //        lclBookingPiecesList = lclBookingPieceDAO.findByProperty("lclFileNumber.id", Long.parseLong(fileId));
        if (lclBookingPiece != null && lclBookingPiece.size() > 0) {
            for (LclBookingPiece lclBookingPieces : lclBookingPiece) {
                //MARKS AND NUMBERS
                cell = new PdfPCell();
                cell.setBorder(0);
                if (lclBookingPieces != null && lclBookingPieces.getMarkNoDesc() != null
                        && !lclBookingPieces.getMarkNoDesc().equals("")) {
                    p = new Paragraph(7f, "" + lclBookingPieces.getMarkNoDesc().toUpperCase(),
                            blackNormalCourierFont8f);
                } else {
                    p = new Paragraph(7f, "", blackNormalCourierFont8f);
                }
                p.setAlignment(Element.ALIGN_CENTER);
                cell.addElement(p);
                othersTable1.addCell(cell);
                //NO.OF.PKGS
                cell = new PdfPCell();
                cell.setBorder(0);
                cell.setBorderWidthLeft(0.6f);
                if (lclBookingPieces != null && lclBookingPieces.getBookedPieceCount() != null
                        && lclBookingPieces.getPackageType().getAbbr01() != null) {
                    p = new Paragraph(7f, "" + lclBookingPieces.getBookedPieceCount() + " "
                            + lclBookingPieces.getPackageType().getAbbr01(), blackNormalCourierFont8f);
                } else {
                    p = new Paragraph(7f, "", blackNormalCourierFont8f);
                }
                p.setAlignment(Element.ALIGN_CENTER);
                cell.addElement(p);
                othersTable1.addCell(cell);
                //DESCRIPTION OF PACKAGES AND GOODS
                cell = new PdfPCell();
                cell.setBorder(0);
                cell.setBorderWidthLeft(0.6f);
                if (lclBookingPieces != null && lclBookingPieces.getPieceDesc() != null
                        && !lclBookingPieces.getPieceDesc().equals("")) {
                    p = new Paragraph(7f, "" + lclBookingPieces.getPieceDesc().toUpperCase(),
                            blackNormalCourierFont8f);
                } else {
                    p = new Paragraph(7f, "", blackNormalCourierFont8f);
                }
                p.setAlignment(Element.ALIGN_CENTER);
                cell.addElement(p);
                othersTable1.addCell(cell);

                //grossweight
                cell = new PdfPCell();

                cell.setBorder(0);
                cell.setBorderWidthLeft(0.6f);
                if (lclBookingPieces != null && lclBookingPieces.getBookedWeightMetric() != null) {
                    p = new Paragraph(7f, "" + lclBookingPieces.getBookedWeightMetric() + " KGS",
                            blackNormalCourierFont8f);
                } else {
                    p = new Paragraph(7f, "", blackNormalCourierFont8f);
                }
                p.setAlignment(Element.ALIGN_CENTER);
                cell.addElement(p);
                othersTable1.addCell(cell);
                //measure
                cell = new PdfPCell();
                cell.setBorder(0);
                cell.setBorderWidthLeft(0.6f);
                if (lclBookingPieces != null && lclBookingPieces.getBookedVolumeMetric() != null) {
                    p = new Paragraph(7f, "" + lclBookingPieces.getBookedVolumeMetric() + " CBM",
                            blackNormalCourierFont8f);
                } else {
                    p = new Paragraph(7f, "", blackNormalCourierFont8f);
                }
                p.setAlignment(Element.ALIGN_CENTER);
                cell.addElement(p);
                othersTable1.addCell(cell);
                //2nd cell
                cell = new PdfPCell();
                cell.setBorder(0);
                p = new Paragraph(7f, "", blackNormalCourierFont8f);
                p.setAlignment(Element.ALIGN_CENTER);
                cell.addElement(p);
                othersTable1.addCell(cell);

                cell = new PdfPCell();
                cell.setBorder(0);
                cell.setBorderWidthLeft(0.6f);
                p = new Paragraph(7f, "", blackNormalCourierFont8f);
                p.setAlignment(Element.ALIGN_CENTER);

                cell.addElement(p);
                othersTable1.addCell(cell);

                cell = new PdfPCell();
                cell.setBorder(0);
                cell.setBorderWidthLeft(0.6f);
                p = new Paragraph(7f, "", blackNormalCourierFont8f);
                p.setAlignment(Element.ALIGN_CENTER);
                cell.addElement(p);
                othersTable1.addCell(cell);

                cell = new PdfPCell();
                cell.setBorder(0);
                cell.setBorderWidthLeft(0.6f);
                p = new Paragraph(7f, "", blackNormalCourierFont8f);
                p.setAlignment(Element.ALIGN_CENTER);
                cell.addElement(p);
                othersTable1.addCell(cell);

                cell = new PdfPCell();
                cell.setBorder(0);
                cell.setBorderWidthLeft(0.6f);
                p = new Paragraph(7f, "", blackNormalCourierFont8f);
                p.setAlignment(Element.ALIGN_CENTER);
                cell.addElement(p);
                othersTable1.addCell(cell);

                //3rd cell
                cell = new PdfPCell();
                cell.setBorder(0);
                p = new Paragraph(7f, "", blackNormalCourierFont8f);
                p.setAlignment(Element.ALIGN_CENTER);
                cell.addElement(p);
                othersTable1.addCell(cell);

                cell = new PdfPCell();
                cell.setBorder(0);
                cell.setBorderWidthLeft(0.6f);
                p = new Paragraph(7f, "", blackNormalCourierFont8f);
                p.setAlignment(Element.ALIGN_CENTER);
                cell.addElement(p);
                othersTable1.addCell(cell);

                cell = new PdfPCell();
                cell.setBorder(0);
                cell.setBorderWidthLeft(0.6f);
                p = new Paragraph(7f, "", blackNormalCourierFont8f);
                p.setAlignment(Element.ALIGN_CENTER);
                cell.addElement(p);
                othersTable1.addCell(cell);

                cell = new PdfPCell();
                cell.setBorder(0);
                cell.setBorderWidthLeft(0.6f);
                if (lclBookingPieces != null && lclBookingPieces.getBookedWeightImperial() != null) {
                    p = new Paragraph(7f, "" + lclBookingPieces.getBookedWeightImperial() + " LBS",
                            blackNormalCourierFont8f);
                } else {
                    p = new Paragraph(7f, "", blackNormalCourierFont8f);
                }
                p.setAlignment(Element.ALIGN_CENTER);
                cell.addElement(p);
                othersTable1.addCell(cell);

                cell = new PdfPCell();
                cell.setBorder(0);
                cell.setBorderWidthLeft(0.6f);
                if (lclBookingPieces != null && lclBookingPieces.getBookedVolumeImperial() != null) {
                    p = new Paragraph(7f, "" + lclBookingPieces.getBookedVolumeImperial() + " CFT",
                            blackNormalCourierFont8f);
                } else {
                    p = new Paragraph(7f, "", blackNormalCourierFont8f);
                }
                p.setAlignment(Element.ALIGN_CENTER);
                cell.addElement(p);
                othersTable1.addCell(cell);
            }

        }

        cell = new PdfPCell();
        cell.setColspan(5);
        cell.addElement(othersTable1);
        cell.setBorder(0);
        cell.setPadding(0f);
        cell.setBorderWidthRight(0.06f);
        cell.setBorderWidthLeft(0.06f);
        cell.setBorderWidthTop(0.06f);
        mainTable.addCell(cell);

        PdfPTable chargesTable = makeTable(4);
        chargesTable.setWidthPercentage(100.5f);
        chargesTable.setWidths(new float[] { 45, 35, 5, 15 });
        cell = makeCell("DESCRIPTION", Element.ALIGN_CENTER, headingFont, 0, Color.decode("#c5d9f1"));
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthRight(0.06f);
        cell.setBorderWidthBottom(0.06f);
        cell.setColspan(2);
        chargesTable.addCell(cell);
        cell = makeCell("CHARGES", Element.ALIGN_CENTER, headingFont, 0, Color.decode("#c5d9f1"));
        cell.setColspan(2);
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthBottom(0.06f);
        chargesTable.addCell(cell);

        NumberFormat number = new DecimalFormat("###,###,##0.00");
        String code = "";
        //        double totalCharges = 0.00;
        double lateFee = 0.00;
        double payAmount = 0.00;
        int chargeCount = 0;
        double total = 0.00;
        String[] billToPartyA;
        billToPartyA = new String[] { "C", "N", "T" };
        List<String> billtoPartyList = Arrays.asList(billToPartyA);
        List<BookingChargesBean> lclBookingAcList = null;
        lclBookingAcList = new LclCostChargeDAO().findBybookingAcId(fileId, billtoPartyList);
        for (int j = 0; j < lclBookingAcList.size(); j++) {
            chargeCount++;
            BookingChargesBean lclBookingAc = (BookingChargesBean) lclBookingAcList.get(j);

            String codeDesc = "";

            code = CommonUtils.isNotEmpty(lclBookingAc.getChargeCode()) ? lclBookingAc.getChargeCode() : "";
            codeDesc = new GenericCodeDAO().getGenericCodeDesc(code);

            if (CommonUtils.isNotEmpty(lclBookingAc.getChargeCode())) {
                //                    String desc = lclBookingAc.getChargeCode().toUpperCase();

                cell = makeCell("", Element.ALIGN_CENTER, blackFontForFclBl);
                cell.setBorderWidthRight(0.0f);
            }

            if (chargeCount == 1) {
                cell.setBorderWidthTop(0.0f);
                cell.setBorderWidthRight(0.0f);
                cell.setBorderWidthLeft(0.0f);
                cell.setBorderWidthBottom(0.0f);
            } else {
                cell.setBorderWidthRight(0.0f);
                cell.setBorderWidthLeft(0.0f);
                cell.setBorderWidthBottom(0.0f);
            }
            chargesTable.addCell(cell);

            if (CommonUtils.isNotEmpty(codeDesc)) {
                cell = makeCell("" + codeDesc, Element.ALIGN_LEFT, blackFontForFclBl, 0.06f);
                cell.setBorderWidthLeft(0.0f);
            } else {
                cell = makeCell("" + code, Element.ALIGN_LEFT, blackFontForFclBl, 0.06f);
                cell.setBorderWidthLeft(0.0f);
            }
            if (chargeCount == 1) {
                cell.setBorderWidthTop(0.0f);
                cell.setBorderWidthRight(0.0f);
                cell.setBorderWidthBottom(0.0f);
            } else {
                cell.setBorderWidthRight(0.0f);
                cell.setBorderWidthBottom(0.0f);
            }

            chargesTable.addCell(cell);

            cell = makeCell("$", Element.ALIGN_CENTER, blackFontForFclBl, 0.06f);//3
            if (chargeCount == 1) {
                cell.setBorderWidthTop(0.0f);
                cell.setBorderWidthRight(0.0f);
                cell.setBorderWidthBottom(0.0f);
            } else {
                cell.setBorderWidthRight(0.0f);
                cell.setBorderWidthBottom(0.0f);
            }
            chargesTable.addCell(cell);
            cell = makeCell(number.format(lclBookingAc.getTotalAmt().doubleValue()), Element.ALIGN_RIGHT,
                    blackFontForFclBl, Rectangle.BOX);//4
            if (chargeCount == 1) {
                cell.setBorderWidth(0.0f);
            } else {
                cell.setBorderWidthLeft(0.0f);
                cell.setBorderWidthRight(0.0f);
                cell.setBorderWidthBottom(0.0f);
            }
            chargesTable.addCell(cell);
            total = total + lclBookingAc.getTotalAmt().doubleValue();

        }

        for (int i = 0; i < (14 - chargeCount); i++) {
            //            chargesTable.addCell(makeCellLeftNoBorderFclBL(""));
            //            chargesTable.addCell(makeCellRightNoBorderFclBL(""));
            cell = makeCell("", Element.ALIGN_LEFT, blackFontForFclBl, 0.06f);
            cell.setBorderWidthRight(0.0f);
            cell.setBorderWidthBottom(0.0f);
            cell.setBorderWidthLeft(0.0f);
            chargesTable.addCell(cell);

            cell = makeCell("", Element.ALIGN_CENTER, blackFontForFclBl, 0.06f);
            cell.setBorderWidthRight(0.0f);
            cell.setBorderWidthBottom(0.0f);
            cell.setBorderWidthLeft(0.0f);
            chargesTable.addCell(cell);
            cell = makeCell("", Element.ALIGN_CENTER, blackFontForFclBl, 0.06f);
            cell.setBorderWidthRight(0.0f);
            cell.setBorderWidthBottom(0.0f);
            chargesTable.addCell(cell);
            cell = makeCell("", Element.ALIGN_RIGHT, blackFontForFclBl, 0.06f);
            cell.setBorderWidthLeft(0.0f);
            cell.setBorderWidthRight(0.0f);
            cell.setBorderWidthBottom(0.0f);
            cell.setMinimumHeight(10f);
            chargesTable.addCell(cell);
        }
        cell = makeCell("", Element.ALIGN_LEFT, blackFontForFclBl, 0);
        cell.setBorderWidthTop(0.06f);
        chargesTable.addCell(cell);
        cell = makeCell("INVOICE TOTAL", Element.ALIGN_CENTER, blackFontForFclBl, 0);
        //        cell.setPaddingLeft(-15f);
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthBottom(0.06f);
        cell.setBorderWidthLeft(0.06f);
        cell.setBorderWidthRight(0.06f);
        chargesTable.addCell(cell);
        cell = makeCell("$", Element.ALIGN_CENTER, blackFontForFclBl, 0);
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthBottom(0.06f);
        chargesTable.addCell(cell);
        cell = makeCell(number.format(total), Element.ALIGN_RIGHT, blackFontForFclBl, 0);//4
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthBottom(0.06f);
        chargesTable.addCell(cell);
        cell = makeCell("", Element.ALIGN_CENTER, blackFontForFclBl, 0);
        cell.setColspan(4);
        chargesTable.addCell(cell);
        chargesTable.setKeepTogether(true);
        cell = new PdfPCell();
        cell.setColspan(2);
        cell.addElement(chargesTable);
        cell.setBorder(0);
        cell.setBorderWidthRight(0.06f);
        cell.setBorderWidthLeft(0.06f);
        mainTable.addCell(cell);
        //        
        payAmount = total;
        //        String acctNumber = checkPayment(billToPartyAc);
        boolean lateFeeFlag = false;
        TradingPartnerBC tradingPartnerBC = new TradingPartnerBC();
        TradingPartner tradingPartner = null;
        //        SimpleDateFormat simpDate = new SimpleDateFormat("dd-MMM-yyyy");
        PdfPTable paidTable = makeTable(6);
        paidTable.setWidthPercentage(100.5f);
        paidTable.setWidths(new float[] { 30, 15, 25, 10, 5, 15 });
        if (CommonFunctions.isNotNull(acctNumber) && !acctNumber.equals("") && !acctNumber.equals("noCredit")) {
            tradingPartner = tradingPartnerBC.findTradingPartnerById(acctNumber);
            if (CommonFunctions.isNotNullOrNotEmpty(tradingPartner.getAccounting())) {
                for (Iterator accountingList = tradingPartner.getAccounting().iterator(); accountingList
                        .hasNext();) {
                    CustomerAccounting customerAccounting = (CustomerAccounting) accountingList.next();
                    if (null != customerAccounting.getLclApplyLateFee()
                            && customerAccounting.getLclApplyLateFee().equals("on")) {
                        lateFeeFlag = true;
                    }
                    break;
                }
            }
        }

        cell = makeCell("ARRIVAL DATE", Element.ALIGN_CENTER, headingFontSize8, 0, Color.decode("#c5d9f1"));
        cell.setBorderWidthTop(0.06f);
        cell.setBorderWidthRight(0.06f);
        cell.setBorderWidthBottom(0.06f);
        paidTable.addCell(cell);

        SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
        String outDate = "";
        String crtDate = "";

        if (vesselEtd != null) { //vessel arrivalDate         
            outDate = sdf.format(vesselEtd);
        }
        cell = makeCell("", Element.ALIGN_LEFT, blackFontForFclBl, 0);
        paidTable.addCell(cell);
        CustomerAccounting customerAccounting = new CustomerAccountingDAO().findByProperty("accountNo",
                billToPartyAc);

        if (customerAccounting != null && (customerAccounting.getCreditRate() != null
                && (CommonUtils.isNotEmpty(outDate)) && !acctNumber.equals("noCredit"))) {
            Calendar c = Calendar.getInstance();
            //            c.setTime(new Date(outDate)); //  Removed Deprecated Warning
            c.setTime(sdf.parse(outDate)); //   Now use previous date.
            if ((customerAccounting.getCreditRate().getCodedesc()).equalsIgnoreCase("Net 7 Days")) {
                c.add(Calendar.DATE, 7);
                crtDate = sdf.format(c.getTime());// Adding 7 days
            } else if ((customerAccounting.getCreditRate().getCodedesc()).equalsIgnoreCase("Net 15 Days")) {
                c.add(Calendar.DATE, 15);
                crtDate = sdf.format(c.getTime());// Adding 15 days
            } else if ((customerAccounting.getCreditRate().getCodedesc()).equalsIgnoreCase("NET 21 DAYS")) {
                c.add(Calendar.DATE, 21);
                crtDate = sdf.format(c.getTime());// Adding 21 days
            } else if ((customerAccounting.getCreditRate().getCodedesc()).equalsIgnoreCase("Net 30 Days")) {
                c.add(Calendar.DATE, 30);
                crtDate = sdf.format(c.getTime());// Adding 30 days
            } else if ((customerAccounting.getCreditRate().getCodedesc()).equalsIgnoreCase("Net 45 Days")) {
                c.add(Calendar.DATE, 45);
                crtDate = sdf.format(c.getTime());// Adding 45 days
            } else if ((customerAccounting.getCreditRate().getCodedesc()).equalsIgnoreCase("Net 60 Days")) {
                c.add(Calendar.DATE, 60);
                crtDate = sdf.format(c.getTime());// Adding 60 days
            }
        }

        if (lateFeeFlag) {
            lateFee = total * 0.015; // 1.5percent calculate
            payAmount = total + lateFee;
            cell = makeCell("LATE FEE IF NOT PAID BY - " + crtDate, Element.ALIGN_LEFT, blackFontForFclBl, 0);
            cell.setColspan(2);
            cell.setBorderWidthTop(0.06f);
            cell.setBorderWidthLeft(0.06f);
            paidTable.addCell(cell);

            cell = makeCell("$", Element.ALIGN_CENTER, blackFontForFclBl, 0);
            cell.setBorderWidthTop(0.06f);
            cell.setBorderWidthLeft(0.06f);
            paidTable.addCell(cell);
            cell = makeCell(number.format(lateFee), Element.ALIGN_RIGHT, blackFontForFclBl, 0);
            cell.setBorderWidthTop(0.06f);
            paidTable.addCell(cell);

            cell = makeCell(outDate, Element.ALIGN_CENTER, blackFontForFclBl, 0);
            cell.setMinimumHeight(10f);
            cell.setBorderWidthBottom(0.06f);
            cell.setBorderWidthRight(0.06f);
            paidTable.addCell(cell);

            cell = makeCell("", Element.ALIGN_CENTER, blackFontForFclBl, 0);
            paidTable.addCell(cell);

            cell = makeCell("PAY THIS AMOUNT IF NOT PAID BY DUE DATE", Element.ALIGN_LEFT, blackFontForFclBl, 0);
            cell.setBorderWidthBottom(0.06f);
            cell.setBorderWidthLeft(0.06f);
            cell.setBorderWidthTop(0.06f);
            cell.setColspan(2);
            paidTable.addCell(cell);
            cell = makeCell("$", Element.ALIGN_CENTER, blackFontForFclBl, 0);
            cell.setBorderWidthBottom(0.06f);
            cell.setBorderWidthLeft(0.06f);
            cell.setBorderWidthTop(0.06f);
            paidTable.addCell(cell);
            cell = makeCell(number.format(payAmount), Element.ALIGN_RIGHT, blackFontForFclBl, 0);
            cell.setBorderWidthBottom(0.06f);
            cell.setBorderWidthTop(0.06f);
            paidTable.addCell(cell);
        } else {
            //            String dueDate = "";
            //            if(arRedInvoice.getDueDate() != null){
            //            SimpleDateFormat sdfa = new SimpleDateFormat("dd-MMM-yyyy");
            //            dueDate = sdfa.format(arRedInvoice.getDueDate());
            //        }

            //            cell = makeCell(!"".equals(dueDate) ? "PAY THIS AMOUNT IF NOT PAID BY - " + dueDate : "PLEASE PAY THIS AMOUNT",Element.ALIGN_LEFT, blackFontForFclBl, 0);
            cell = makeCell("", Element.ALIGN_CENTER, blackFontForFclBl, 0);
            cell.setColspan(4);
            paidTable.addCell(cell);

            cell = makeCell(outDate, Element.ALIGN_CENTER, blackFontForFclBl, 0);
            cell.setMinimumHeight(10f);
            cell.setBorderWidthBottom(0.06f);
            cell.setBorderWidthRight(0.06f);
            paidTable.addCell(cell);

            cell = makeCell("", Element.ALIGN_CENTER, blackFontForFclBl, 0);
            paidTable.addCell(cell);

            cell = makeCell("PLEASE PAY THIS AMOUNT - " + crtDate, Element.ALIGN_LEFT, blackFontForFclBl, 0);
            cell.setBorderWidthBottom(0.06f);
            cell.setBorderWidthLeft(0.06f);
            cell.setBorderWidthTop(0.06f);
            cell.setColspan(2);
            paidTable.addCell(cell);
            cell = makeCell("$", Element.ALIGN_CENTER, blackFontForFclBl, 0);
            cell.setBorderWidthBottom(0.06f);
            cell.setBorderWidthLeft(0.06f);
            cell.setBorderWidthTop(0.06f);
            paidTable.addCell(cell);
            cell = makeCell(number.format(total), Element.ALIGN_RIGHT, blackFontForFclBl, 0);
            cell.setBorderWidthBottom(0.06f);
            cell.setBorderWidthTop(0.06f);
            paidTable.addCell(cell);
        }
        cell = makeCell("", Element.ALIGN_CENTER, blackFontForFclBl, 0);
        cell.setColspan(5);
        paidTable.addCell(cell);

        //paidTable.setKeepTogether(true);
        cell = new PdfPCell();
        cell.setColspan(2);
        cell.addElement(paidTable);
        cell.setBorder(0);
        cell.setBorderWidthRight(0.06f);
        cell.setBorderWidthLeft(0.06f);
        mainTable.addCell(cell);

        ///end of description & charges
        //        String paymentStatment = "";
        //        paymentStatment = checkPayment(arRedInvoice);
        PdfPTable commandTable = new PdfPTable(1);
        commandTable.setWidthPercentage(100);
        cell = makeCell("", Element.ALIGN_CENTER, headingFont, Rectangle.NO_BORDER);
        commandTable.addCell(cell);
        cell = makeCell("", Element.ALIGN_CENTER, headingFont, Rectangle.NO_BORDER);
        commandTable.addCell(cell);

        if (customerAccounting != null
                && (customerAccounting.getCreditRate() != null && (CommonUtils.isNotEmpty(outDate)))) {
            if ((customerAccounting.getCreditRate().getCodedesc()).equalsIgnoreCase("Due Upon Receipt")) {
                cell = makeCell("INVOICE IS PAYABLE UPON RECEIPT", Element.ALIGN_CENTER, blackFontForFclBl, 0,
                        Color.decode("#FFFF00"));
                commandTable.addCell(cell);
            } else {
                cell = makeCell("INVOICE PAYABLE ON OR BEFORE  " + (crtDate), Element.ALIGN_CENTER,
                        new Font(Font.HELVETICA, 10, Font.BOLDITALIC, Color.BLACK), Rectangle.NO_BORDER);
                commandTable.addCell(cell);
            }
        } else {
            cell = makeCell("INVOICE IS PAYABLE UPON RECEIPT", Element.ALIGN_CENTER, blackFontForFclBl, 0,
                    Color.decode("#FFFF00"));
            commandTable.addCell(cell);
        }
        //        if (lateFeeFlag == false) {//if(paymentStatment.equals("noCredit") || lateFeeFlag == false){
        //            cell = makeCell("INVOICE IS PAYABLE UPON RECEIPT OR INVOICE PAYABLE WITHIN 30 DAYS FROM DEPARTURE/ARRIVAL DATE", Element.ALIGN_LEFT, blackFontForFclBl, 0, Color.decode("#FFFF00"));
        //            commandTable.addCell(cell);
        //        } else {
        //            cell = makeCell("", Element.ALIGN_CENTER, headingFont, Rectangle.NO_BORDER);
        //            commandTable.addCell(cell);
        //        }
        cell = makeCell("", Element.ALIGN_CENTER, headingFont, Rectangle.NO_BORDER);
        commandTable.addCell(cell);
        cell = makeCell("", Element.ALIGN_CENTER, headingFont, Rectangle.NO_BORDER);
        commandTable.addCell(cell);
        cell = makeCell("", Element.ALIGN_CENTER, headingFont, Rectangle.NO_BORDER);
        commandTable.addCell(cell);
        cell = makeCell("", Element.ALIGN_CENTER, headingFont, Rectangle.NO_BORDER);
        commandTable.addCell(cell);
        cell = new PdfPCell();
        cell.setColspan(2);
        cell.addElement(commandTable);
        cell.setBorder(0);
        cell.setBorderWidthRight(0.06f);
        cell.setBorderWidthLeft(0.06f);
        cell.setExtraParagraphSpace(10f);
        mainTable.addCell(cell);

        PdfPTable bankDetailsTable = makeTable(4);
        bankDetailsTable.setWidthPercentage(100f);
        bankDetailsTable.setWidths(new float[] { 3f, 1f, 4f, 2.6f });

        //
        //        SystemRulesDAO systemRulesDAO = new SystemRulesDAO();
        //        String eftBank = systemRulesDAO.getSystemRulesByCode("EFTBank");
        //        String eftBankAddress = systemRulesDAO.getSystemRulesByCode("EFTBankAddress");
        //        String eftABANo = systemRulesDAO.getSystemRulesByCode("EFTABANo");
        //        String eftAcctName = systemRulesDAO.getSystemRulesByCode("EFTAcctName");
        //        String eftAccountNo = systemRulesDAO.getSystemRulesByCode("EFTAccountNo");
        //        CompanyModel company = systemRulesDAO.getCompanyDetails();

        //PAYMENT METHODS
        cell = new PdfPCell();
        cell.setBorder(0);
        cell.setBorderWidthBottom(0.6F);
        cell.setBorderWidthRight(0.6f);
        cell.setBorderWidthTop(0.6f);
        p = new Paragraph(7f, "PAYMENT METHODS", boldHeadingFon);
        p.setAlignment(Element.ALIGN_CENTER);
        cell.setBackgroundColor(Color.decode("#c5d9f1"));
        cell.addElement(p);
        bankDetailsTable.addCell(cell);
        // Empty

        cell = makeCell("", Element.ALIGN_CENTER, blackBoldFontSize6, 0);
        cell.setColspan(3);
        cell.setBorderWidthBottom(0.06f);
        bankDetailsTable.addCell(cell);

        //Via Check
        cell = new PdfPCell();
        cell.setBorder(0);
        cell.setColspan(2);
        cell.setBorderWidthBottom(0.6F);
        cell.setBorderWidthLeft(0.6f);
        p = new Paragraph(7f, "Via Check", boldHeadingFon);
        p.setAlignment(Element.ALIGN_CENTER);
        cell.setBackgroundColor(Color.decode("#c5d9f1"));
        cell.addElement(p);
        bankDetailsTable.addCell(cell);
        //Via ACH or Wire Transfer
        cell = new PdfPCell();
        cell.setBorder(0);
        cell.setBorderWidthBottom(0.6F);
        cell.setBorderWidthLeft(0.6f);
        p = new Paragraph(7f, "Via ACH or Wire Transfer", boldHeadingFon);
        p.setAlignment(Element.ALIGN_CENTER);
        cell.setBackgroundColor(Color.decode("#c5d9f1"));
        cell.addElement(p);
        bankDetailsTable.addCell(cell);
        //Credit Card Payments
        cell = new PdfPCell();
        cell.setBorder(0);
        cell.setBorderWidthBottom(0.6F);
        cell.setBorderWidthLeft(0.6f);
        p = new Paragraph(7f, "Credit Card Payments", boldHeadingFon);
        p.setAlignment(Element.ALIGN_CENTER);
        cell.setBackgroundColor(Color.decode("#c5d9f1"));
        cell.addElement(p);
        bankDetailsTable.addCell(cell);

        // Via Check Details
        cell = new PdfPCell();
        cell.setBorder(0);
        cell.setBorderWidthRight(0.06f);
        cell.setBorderWidthBottom(0.06f);
        cell.setColspan(2);
        p = new Paragraph(10f, "PLEASE REMIT PAYMENT TO", boldHeadingFon);
        p.setAlignment(Element.ALIGN_LEFT);
        cell.addElement(p);

        p = new Paragraph(10f, companyName, boldHeadingFon);
        p.setAlignment(Element.ALIGN_LEFT);
        cell.addElement(p);
        String creditStatusDomain = "";
        if (null != customerAccounting && null != customerAccounting.getCreditStatus()) {//no credit
            creditStatusDomain = customerAccounting.getCreditStatus().getCodedesc();
            if (!("No Credit").equalsIgnoreCase(creditStatusDomain)) {
                p = new Paragraph(10f, "2401 N.W. 69TH STREET", boldHeadingFon);
                p.setAlignment(Element.ALIGN_LEFT);
                cell.addElement(p);
                p = new Paragraph(10f, "Miami, FL  33147", boldHeadingFon);
                p.setAlignment(Element.ALIGN_LEFT);
                cell.addElement(p);
                bankDetailsTable.addCell(cell);
            } else {
                p = new Paragraph(10f, "" + trmAddress, boldHeadingFon);
                p.setAlignment(Element.ALIGN_LEFT);
                cell.addElement(p);
                p = new Paragraph(10f, "" + trmname + " " + trmZip, boldHeadingFon);
                p.setAlignment(Element.ALIGN_LEFT);
                cell.addElement(p);
                bankDetailsTable.addCell(cell);
            }
        }

        //Via ACH or Wire Transfer Details

        cell = new PdfPCell();
        cell.setBorder(0);
        cell.setBorderWidthRight(0.06f);
        p = new Paragraph(10f, "Bank: " + company.getBankName(), boldHeadingFon);
        p.setAlignment(Element.ALIGN_LEFT);
        cell.addElement(p);
        p = new Paragraph(10f, company.getBankAddress(), boldHeadingFon);
        p.setAlignment(Element.ALIGN_LEFT);
        cell.addElement(p);
        p = new Paragraph(10f, "ABA: " + company.getBankAbaNumber(), boldHeadingFon);
        p.setAlignment(Element.ALIGN_LEFT);
        cell.addElement(p);
        p = new Paragraph(10f, "ACCT: " + companyName, boldHeadingFon);
        p.setAlignment(Element.ALIGN_LEFT);
        cell.addElement(p);
        p = new Paragraph(10f, "ACCOUNT NO: " + company.getBankAccountNumber(), boldHeadingFon);
        p.setAlignment(Element.ALIGN_LEFT);
        cell.addElement(p);
        bankDetailsTable.addCell(cell);

        //Credit Card Payments Details
        cell = new PdfPCell();
        cell.setBorder(0);
        cell.setBorderWidthRight(0.06f);
        p = new Paragraph(10f, "If paying via Credit card", boldHeadingFon);
        p.setAlignment(Element.ALIGN_LEFT);
        cell.addElement(p);
        p = new Paragraph(10f, " Please go to:", boldHeadingFon);
        p.setAlignment(Element.ALIGN_LEFT);
        cell.addElement(p);
        p = new Paragraph(10f, webSite, fileNoFont);
        p.setAlignment(Element.ALIGN_LEFT);
        cell.addElement(p);
        bankDetailsTable.addCell(cell);

        cell = new PdfPCell();
        cell.setColspan(4);
        cell.addElement(bankDetailsTable);
        cell.setBorder(0);
        cell.setPadding(0f);
        cell.setBorderWidthRight(0.06f);
        cell.setBorderWidthLeft(0.06f);
        cell.setBorderWidthBottom(0.06f);
        mainTable.addCell(cell);

        document.add(mainTable);

    }

    public String checkPayment(String billToPartyAc) throws Exception {
        String returnString = "noCredit";
        String crditWarning = "";
        FclBlBC blBC = new FclBlBC();
        String creditDetail = blBC.validateCustomer(billToPartyAc, "");
        if (creditDetail != null && !creditDetail.equals("")) {
            String[] chargecode = creditDetail.split("==");
            if (!chargecode[0].equals("")) {
                crditWarning = chargecode[0].substring(3, chargecode[0].indexOf("For the Party "));
            }
            if (crditWarning.equals("In Good Standing ") || crditWarning.equals("Credit Hold ")) {
                returnString = billToPartyAc;
            } else {
                returnString = "noCredit";
            }
        }
        return returnString;
    }

    public String setBrand(String fileId) throws Exception {
        String brand = new LclFileNumberDAO().getBusinessUnit(fileId);
        if ("ECI".equalsIgnoreCase(brand)) {
            webSite = LoadLogisoftProperties.getProperty("application.Econo.website");
            companyName = LoadLogisoftProperties.getProperty("application.Econo.companyname");
        } else if ("OTI".equalsIgnoreCase(brand)) {
            webSite = LoadLogisoftProperties.getProperty("application.OTI.website");
            companyName = LoadLogisoftProperties.getProperty("application.OTI.companyname");
        } else {
            webSite = LoadLogisoftProperties.getProperty("application.ECU.website");
            companyName = LoadLogisoftProperties.getProperty("application.ECU.companyname");
        }
        return brand;
    }

}