/**
 * Copyright (c) 2003-2004 System Integrator Corporation.
 *                 All Rights Reserved.
 */
package jp.co.sint.servlet.front;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;

import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import jp.co.sint.basic.SICust;
import jp.co.sint.basic.SILogin;
import jp.co.sint.basic.SIMallShop;
import jp.co.sint.basic.SIOrder;
import jp.co.sint.basic.SIOrderDelivery;
import jp.co.sint.basic.SIPDFUtil;
import jp.co.sint.basic.SIPayMethod;
import jp.co.sint.basic.SIPayeeInfo;
import jp.co.sint.basic.SIPointMan;
import jp.co.sint.basic.SITax;
import jp.co.sint.basic.SIUserInfo;
import jp.co.sint.beans.front.UIOrderHistory;
import jp.co.sint.beans.mallmgr.UICustPointListCond;
import jp.co.sint.beans.mallmgr.UIRegOrder;
import jp.co.sint.beans.mallmgr.UIRegOrderDelivery;
import jp.co.sint.beans.mallmgr.UIRegOrderDetail;
import jp.co.sint.beans.mallmgr.UIShippmentListCond;
import jp.co.sint.bscvsmdk.SIBSCVSMDKUtil;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIFlagConf;
import jp.co.sint.config.SIPDFConf;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.database.SIDatabaseConnection;
import jp.co.sint.database.SIDuplicateKeyException;
import jp.co.sint.database.SIInsertRec;
import jp.co.sint.database.SIModifyRec;
import jp.co.sint.mail.SISendMail;
import jp.co.sint.mdk.SIMDKAction;
//import jp.co.sint.mdk.SIMDKAction3G;
import jp.co.sint.servlet.SIServlet;
import jp.co.sint.servlet.mallmgr.SIRegRfmOrderLogSrv;
import jp.co.sint.tools.SIBGUtil;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIDateTime;
import jp.co.sint.tools.SIErrorException;
import jp.co.sint.tools.SIFatalException;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIURLMap;
import jp.co.sint.tools.SIURLParameter;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;

import com.lowagie.text.Cell;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.HeaderFooter;
import com.lowagie.text.Image;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.Rectangle;
import com.lowagie.text.Table;
import com.lowagie.text.pdf.PdfWriter;

/**
 * @version $Id: SICustomerSrv.java,v 1.0 2003/10/24 Exp $
 * @author asakura <br>
 * Description:購入履歴
 * <p>
 * History
 * </p>
 * <p>
 * Author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reason
 * </p>
 * ============&nbsp;&nbsp;&nbsp;==========&nbsp;&nbsp;===========================<br>
 * asakura 2003/10/24 15:00:05 Original
 */
public class SIOrderHistorySrv extends SIServlet {
  private boolean pdfTitlePrintFlg = true;
  
  private String formerOrderCode = "";
  
  // ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  /**
   * <b>doUpdate</b> HTTP リクエストの処理
   * 
   * @param request リクエスト
   * @param response
   * @return なし
   * @throws ServletException
   * @throws IOException
   */
  public void doUpdate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    SIUserInfo lUserInfo = SIHTMLUtil.getUserInfo(request);// ログイン情報の取得
    
    HttpSession session = request.getSession(true);// セッションの取得
    SIDatabaseConnection databaseConnection = new SIDatabaseConnection();// DBへのコネクションの作成
    SIURLParameter urlParam = new SIURLParameter(request);// 7.1.1 ST0236 追加
    try {
      Connection lConnection = databaseConnection.getConnection();
      String actionName = this.getActionName(urlParam);// 画面からのアクション //7.1.1 ST0236 修正
      String editMode = this.getEditMode(urlParam);// DBへの編集モード //7.1.1 ST0236 修正
      
      if (this.getServletPath(request).equals("/orderhistory")) {// 購入履歴一覧
        if (SIUtil.isNull(actionName) || SIConfig.SIACTION_BACK.equals(actionName)) {// 購入履歴一覧表示
          UIOrderHistory orderHistory = null;
          if (SIUtil.isNull(actionName)) {
            orderHistory = new UIOrderHistory();
            orderHistory.init(request, urlParam);// 7.1.1 ST0236 修正
            session.setAttribute(SIConfig.SISESSION_ORDER_HISTORY_NAME, orderHistory);
          } else if (SIConfig.SIACTION_BACK.equals(actionName)) {
            orderHistory = (UIOrderHistory) session.getAttribute(SIConfig.SISESSION_ORDER_HISTORY_NAME);
          }
          
          if (lUserInfo.isNotLogin(request)) {
            String lUrl = "";
            // 7.1.1 ST0207 修正 ここから
            String lCtc = "ctc=" + SIHTMLUtil.URLEncode(orderHistory.getCtgryCodeTxt());
            if (SIUtil.isNull(orderHistory.getShopCode())) {
              lUrl = SIURLMap.getUrl("webshop.servlet.front.user.login") + "?" + lCtc + "&nid=" + SIURLMap.getUrl("webshop.servlet.front.orderhistory") + "?" + lCtc;
            } else {
              lUrl = SIURLMap.getUrl("webshop.servlet.front.user.login") + "?" + lCtc + "&nid=" + SIURLMap.getUrl("webshop.servlet.front.orderhistory") + "?shc="
                  + orderHistory.getShopCode() + "&" + lCtc;
            }
            // 7.1.1 ST0207 修正 ここまで
            redirectHttps(request, response, lUrl);
          } else {
            forwardKey(request, response, "webshop.jsp.front.buy.history");
          }
        } else if (SIConfig.SIACTION_DELETE.equals(actionName)) {// キャンセル
          if (lUserInfo.isNotLogin(request)) {
            forwardKey(request, response, "webshop.servlet.front.main");// 7.1.1 ST0237 修正
            return;
          }
          
          UIOrderHistory orderHistory = new UIOrderHistory();
          // 出荷日を設定するPKを設定
          orderHistory.initCancel(request, urlParam);// 7.1.1 ST0236 修正
          // キャンセルするレコードの
          if (orderHistory.validateCancel(request, lConnection)) {// 問題がなければ
            try {
              orderCancel(lConnection, orderHistory.getCancelOrderCodeHid());
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, "キャンセルしました。");
              try {
                lConnection.commit();
              } catch (SQLException sqle) {}
            } catch (SIDBAccessException sqle) {
              try {
                lConnection.rollback();
              } catch (SQLException ee) {}
              sqle.printStackTrace();
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.execute.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            } catch (SIErrorException erre) {
              try {
                lConnection.rollback();
              } catch (SQLException ee) {}
              erre.printStackTrace();
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("manager.message.failure.cancel"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            }
          }
          forwardKey(request, response, "webshop.jsp.front.buy.history");
        } else if (SIConfig.SIACTION_LIST.equals(actionName)) {
          UIOrderHistory orderHistory = new UIOrderHistory();
          orderHistory.init(request, urlParam);// 7.1.1 ST0236 修正
          session.setAttribute(SIConfig.SISESSION_ORDER_HISTORY_NAME, orderHistory);
          forwardKey(request, response, "webshop.jsp.front.buy.history");
        }
      } else if (this.getServletPath(request).equals("/orderhistorydetail")) {// 購入履歴詳細
        if (lUserInfo.isNotLogin(request)) {// ユーザーログインかどうかのチェック
          forwardKey(request, response, "webshop.servlet.front.main");// 7.1.1 ST0237 修正
          return;
        }
        if (SIUtil.isNull(actionName)) {
          if (refreshOrder(request, lConnection, urlParam)) {// セキュリティのチェック //7.1.1 ST0236 修正
            forwardKey(request, response, "webshop.jsp.front.buy.detail");
          } else {
            forwardKey(request, response, "webshop.servlet.front.main");// 7.1.1 ST0237 修正
          }
        } else {
          String orderCode = (String) urlParam.getParam("detailOrderCodeHid");
          try{
            producePDFFileForOrder(request,response,lConnection,orderCode);
            try {databaseConnection.getConnection().commit();} catch (SQLException sqle) {}
            if(!response.isCommitted()) {
              forwardKey(request, response, "webshop.jsp.front.buy.history");
            }
          }catch(Exception e){
            try {databaseConnection.getConnection().rollback();} catch (SQLException ee) {}
            e.printStackTrace();
            forwardKey(request, response, "webshop.jsp.front.buy.history");
          }
        }
      } else if (this.getServletPath(request).equals("/orderreceipt")) {//領収書発行
        if (lUserInfo.isNotLogin(request)) {// ユーザーログインかどうかのチェック
          forwardKey(request, response, "webshop.servlet.front.main");
          return;
        }
        if (SIConfig.SIACTION_CONFIRM.equals(actionName)) {
          setPaymentCustName(request,urlParam);
          forwardKey(request, response, "webshop.jsp.front.receipt2");
        }else if (SIConfig.SIACTION_REGIST.equals(actionName)) {
          insertPaymentCustName(request,lConnection);
          try{lConnection.commit();}catch(Exception e){}
          forwardKey(request, response, "webshop.jsp.front.receipt3");
        } else {
          if (refreshOrder(request, lConnection, urlParam)) {// セキュリティのチェック
            forwardKey(request, response, "webshop.jsp.front.receipt1");
          } else {
            forwardKey(request, response, "webshop.servlet.front.main");
          }
        }
      }
    } catch (SQLException e) {
      e.printStackTrace();
      throw new ServletException();
    } catch (NamingException e) {
      e.printStackTrace();
      throw new ServletException();
    } finally {
      databaseConnection.close();
    }
  }
  
  /**
   * <b>orderCancel</b> 受注伝票をキャンセルします。
   * 
   * @param lConnection DBへのコネクション
   * @param lOrderCode 対象の受注コード
   * @return なし
   * @throws SIDBAccessException
   */
  public boolean orderCancel(Connection lConnection, String lOrderCode) throws SIDBAccessException, SIErrorException {
    return orderCancel(lConnection, lOrderCode, true, "");
  }
  
  public boolean orderCancel(Connection lConnection, String lOrderCode, boolean sendflg, String fromMail) throws SIDBAccessException, SIErrorException {
    boolean lRes = true;
    Statement lStatement = null;
    ResultSet lResultSet = null;
    SIDateTime lDateTime = new SIDateTime();
    
    try {
      SIModifyRec lRec = new SIModifyRec(SIConfig.SITABLE_ORDER_NAME);// 7.2.0 ST1030 修正
      
      if (SIUtil.isNotNull(lOrderCode)) {
        
        // 0.取り置き解除メールの送信
        SIBGUtil.sendOrderDeleteMail(lConnection, lOrderCode, fromMail);
        
        // 1.カード決済を取り消す
        SIOrder lOrder = new SIOrder(lOrderCode);
        lOrder.reset(lConnection);
        if (lOrder.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CARD)) {
          SIMDKAction lMDKAction = new SIMDKAction();
          //SIMDKAction3G lMDKAction = new SIMDKAction3G();
          lMDKAction.setOrderCode(lOrder.getOrderCode());
          lMDKAction.setPrice(lOrder.getPaymentTotal());
          if (!lMDKAction.cancelCaptureAction()) throw new SIErrorException("受注番号「" + lOrderCode + "」に対するキャンセルが失敗しました。");
          //if (!lMDKAction.cancelAction()) throw new SIErrorException("受注番号「" + lOrderCode + "」に対するキャンセルが失敗しました。");
        }
        // paymentflgが9の場合、カード決済取り消し処理を行わない（強制キャンセル）
        if (lOrder.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CARD) || lOrder.getPaymentFlg().equals("9")) {
          // 入金情報にマイナス金額をいれる
          SIInsertRec lCardPayRec = new SIInsertRec("paymenttbl");
          lCardPayRec.add("OrderCode", lOrder.getOrderCode());
          lCardPayRec.add("PaymentNumber", lOrder.getPaymentNumber(lConnection));
          lCardPayRec.add("PaymentPrice", SIUtil.setNegative(lOrder.getPaymentTotal()));
          lCardPayRec.add("PaymentFee", "0");
          lCardPayRec.add("PaymentType", SIConfig.PAYMETHOD_CARD);
          lCardPayRec.add("ExpectedPaymentDate", lDateTime.getFullDate());
          lCardPayRec.add("PaymentDate", lDateTime.getFullDate());
          lCardPayRec.add("Status", "0");
          lCardPayRec.execute(lConnection);
          
          lRec.add("PaymentFlg", SIFlagConf.SIFLAG_PAYMENTFLG_CARD);// 区分をカード決済に戻す
        }
        
        // 2.ポイントを無効にする(獲得、使用)
        SIPointMan.pointInvalid(lConnection, lOrderCode);
        
        // 3.RFM分析テーブルを削除する。
        (new SIRegRfmOrderLogSrv()).deleteTableData(lConnection, lOrderCode);
        
        // 4.受注のヘッダの修正、ステータスをキャンセル状態("0")にする
        lRec.addCondition("OrderCode", lOrderCode);// 受注番号
        lRec.add("Status", "0");
        lRec.add("updatedatetime", lDateTime.getFullDateTime());// PI-BTG0601
        lRec.execute(lConnection);
        // 暫定でショップコードを０に設定
        SIBGUtil.deleteOrderAllocation(lConnection, "0", lOrderCode);
        /*
         * //5.受注数量を戻す //7.2.0 ST1030 修正 ここから StringBuffer lSqlBuf = new StringBuffer("SELECT * FROM ").append(SIConfig.SIVIEW_ORDER_DETAIL_LATEST_NAME).append(" WHERE
         * OrderCode="); //StringBuffer lSqlBuf=new StringBuffer("SELECT * FROM OrderDetailTbl WHERE OrderCode="); //7.2.0 ST1030 修正 ここまで
         * lSqlBuf.append(SIDBUtil.SQL2Str(lOrderCode)); //Statement の作成 lStatement = lConnection.createStatement (); //Resultset の作成 lResultSet =
         * lStatement.executeQuery(lSqlBuf.toString()); while (lResultSet.next()){ lSpcType = new SISpcType("Amount+"+lResultSet.getString("Amount")); StringBuffer lCmdtySqlBuf=new
         * StringBuffer("SELECT AmountFlg FROM CmdtyMTbl WHERE ShopCode="); lCmdtySqlBuf.append(SIDBUtil.SQL2Str(lResultSet.getString("ShopCode"))); lCmdtySqlBuf.append(" AND
         * CmdtyCode=").append(SIDBUtil.SQL2Str(lResultSet.getString("CmdtyCode"))); lAmountFlg=SIDBUtil.getFirstData(lConnection, lCmdtySqlBuf.toString());
         * log.debug("lCmdtySqlBuf="+lCmdtySqlBuf.toString()+",lAmountFlg="+lAmountFlg); if (lAmountFlg.equals("0"))continue; if
         * (SIUtil.isNull(lResultSet.getString("StndrdCode1"))&&SIUtil.isNull(lResultSet.getString("StndrdCode2"))){ lRec=new SIModifyRec("CmdtyMTbl");
         * lRec.addCondition("ShopCode",lResultSet.getString("ShopCode")); lRec.addCondition("CmdtyCode",lResultSet.getString("CmdtyCode")); }else if
         * (SIUtil.isNotNull(lResultSet.getString("StndrdCode1"))&&SIUtil.isNotNull(lResultSet.getString("StndrdCode2"))){ lRec=new SIModifyRec("CmdtyStndrdMTbl");
         * lRec.addCondition("ShopCode",lResultSet.getString("ShopCode")); lRec.addCondition("CmdtyCode",lResultSet.getString("CmdtyCode"));
         * lRec.addCondition("StndrdCode1",lResultSet.getString("StndrdCode1")); lRec.addCondition("ElementCode1",lResultSet.getString("ElementCode1"));
         * lRec.addCondition("StndrdCode2",lResultSet.getString("StndrdCode2")); lRec.addCondition("ElementCode2",lResultSet.getString("ElementCode2")); }else if
         * (SIUtil.isNotNull(lResultSet.getString("StndrdCode1"))){ lRec=new SIModifyRec("CmdtyStndrdMTbl"); lRec.addCondition("ShopCode",lResultSet.getString("ShopCode"));
         * lRec.addCondition("CmdtyCode",lResultSet.getString("CmdtyCode")); lRec.addCondition("StndrdCode1",lResultSet.getString("StndrdCode1"));
         * lRec.addCondition("ElementCode1",lResultSet.getString("ElementCode1")); }else if (SIUtil.isNotNull(lResultSet.getString("StndrdCode2"))){ lRec=new
         * SIModifyRec("CmdtyStndrdMTbl"); lRec.addCondition("ShopCode",lResultSet.getString("ShopCode")); lRec.addCondition("CmdtyCode",lResultSet.getString("CmdtyCode"));
         * lRec.addCondition("StndrdCode2",lResultSet.getString("StndrdCode2")); lRec.addCondition("ElementCode2",lResultSet.getString("ElementCode2")); }
         * lRec.add("Amount",lSpcType); log.debug("lRec.getSQL()=="+lRec.getSQL()); lRec.execute(lConnection); }
         */
        // 6.キャンセルメール送信用
        if (sendflg) lRes = this.sendCancelMail(lConnection, lOrderCode, SIConfig.SIMAIL_TEMPLATE_ORDER_CANCEL) && lRes;
      }
    } catch (SIDuplicateKeyException e) {
      throw new SIDBAccessException(e);
    } catch (SIDBAccessException e) {
      throw new SIDBAccessException(e);
    } catch (SQLException e) {
      throw new SIDBAccessException(e);
    } finally {
      SIDBUtil.close(lStatement, lResultSet);
    }
    return lRes;
  }
  
  /**
   * <b>sendCancelMail</b> キャンセルメールを送信します。
   * 
   * @param lConnection DBへのコネクション
   * @param lListCond 更新するデータ
   * @return なし
   * @throws
   */
  public boolean sendCancelMail(Connection lConnection, String lOrderCode, String mailType) {
    StringBuffer lMailBuf = new StringBuffer();
    SISendMail lSendMail = new SISendMail();
    
    UIRegOrder lRegOrder = new UIRegOrder();
    UIRegOrderDelivery lOrderDelivery = new UIRegOrderDelivery();
    UIRegOrderDetail lRegOrderDetail = new UIRegOrderDetail();
    
    Collection lOrderDeliveryColl = new ArrayList();
    Collection lOrderDetailColl = new ArrayList();
    
    Iterator lOrderDeliveryIta;
    Iterator lOrderDetailIta;
    
    String sumOfA = "0";// 商品の購入価格の合計
    String sumOfB = "0";// 送料合計
    String sumOfC = "0";// 手数料合計
    String sumOfD = "0";// 小計
    String sumOfE = "0";// ポイント使用値
    String sumOfF = "0";// 支払額
    String sumOfG = "0";// 値引き額
    // EDBTG003-00 elecs-matsushima mod start
    //String sumOfH = "0";// ポイント付加
    String sumOfH = "0"; // セット値引き
    // EDBTG003-00 elecs-matsushima mod end
    String taxFlgOfA = "0";
    String taxFlgOfB = "0";
    String taxFlgOfC = "0";
    String taxFlgOfD = "0";
    String taxFlgOfE = "0";
    String taxFlgOfF = "0";
    String taxFlgOfG = "0";
    //String taxFlgOfH = "0";     // EDBTG003-00 elecs-matsushima del
    
    lMailBuf = new StringBuffer();
    lSendMail = new SISendMail();
    boolean lRes = true;
    
    // 1.受注情報取得
    lRegOrder = new UIRegOrder();
    lRegOrder.setOrderCode(lOrderCode);
    lRegOrder.reset(lConnection);
    
    lRegOrder.setMaxPoint(SIPointMan.getMaxPoint(lConnection, lRegOrder.getCustCode(), SIConfig.SIMALL.getMallShopCode()));
    
    lOrderDeliveryColl = lRegOrder.getCollection(lConnection);// 配送先リスト
    lOrderDeliveryIta = lOrderDeliveryColl.iterator();
    
    int lDeliveryInx = 0;
    sumOfC = SIUtil.add(lRegOrder.getFeeIncTax(), lRegOrder.getDiscountFee());
    sumOfE = lRegOrder.getSumByPoint();
    sumOfG = lRegOrder.getSumOfDiscount();
    sumOfH = lRegOrder.getSumOfSetDiscount(); // EDBTG003-00 elecs-matsushima add
    
    try {
      lSendMail.setMailTemp(lConnection, (new SIOrder()).getMailShopCode(lConnection, lRegOrder.getOrderCode()), mailType);
    } catch (SIFatalException e2) {
      e2.printStackTrace();
    }
    
    // 2.メールの本文の作成(メールテンプレートの内容1)
    lMailBuf.append("\n");
    lSendMail.appendContent1(lMailBuf.toString());
    lMailBuf = new StringBuffer();
    
    lMailBuf.append("\n==============");
    
    // 2.メールの本文の作成(お客様情報)
    lMailBuf.append("\n受注番号: ").append(lRegOrder.getOrderCode());
    
    lMailBuf.append("\n\nお客さま情報");
    lMailBuf.append("\n氏名:").append(lRegOrder.getCustName()).append(" 様");
    lMailBuf.append("\nE-Mail:").append(lRegOrder.getEmail());
    lMailBuf.append("\n連絡先TEL1:").append(lRegOrder.getStoreTel());// 7.3.0 PI-NES0501 追加
    lMailBuf.append("\n連絡先TEL2:").append(lRegOrder.getTel());
    lMailBuf.append("\n住所:〒").append(lRegOrder.getPostCode()).append(" ");
    lMailBuf.append(lRegOrder.getAddress());
    lMailBuf.append("\n支払方法:").append(lRegOrder.getPayMethodName());
    // 7.2.0 ST0300 追加 ここから
    // コンビニ決済使用時
    if (SIUtil.isNotNull(lRegOrder.getCvsTypeCode())) {
      lMailBuf.append("(").append(SIBSCVSMDKUtil.getCvsName(lRegOrder.getCvsTypeCode())).append(")");// コンビニ名称
    }
    // 7.2.0 ST0300 追加 ここまで
    // lMailBuf.append("/手数料:").append(NumberFormat.getNumberInstance().format(new Long(sumOfC))).append("円").append(lRegOrder.getFeeTaxName());//税込み//7.3.0 PI-NES0501 削除
    
    taxFlgOfC = lRegOrder.getFeeTaxFlg();// 手数料の税区分
    // 7.4.0 ST2057 追加 ここから
    if (SIUtil.isNotNull(lRegOrder.getCvsTypeCode())) {
      lMailBuf.append("\n受付番号:").append(lRegOrder.getCvsReceiptNo());
    }
    // 7.4.0 ST2057 追加 ここまで
    lMailBuf.append("\n受注日時:").append(lRegOrder.getInitDateTime());
    
    while (lOrderDeliveryIta.hasNext()) {
      lDeliveryInx++;
      lOrderDelivery = (UIRegOrderDelivery) lOrderDeliveryIta.next();
      // sumOfB=SIUtil.add(sumOfB,lOrderDelivery.getDeliveryFeeIncTax());//送料の合計
      
      // 5.メールの本文の作成(配送先の内容)
      if (lDeliveryInx == 1) { // 7.3.0 PI-NES0501 追加
        lMailBuf.append("\n\n--------------");
        lMailBuf.append("\n配送先");
        lMailBuf.append("\n宛名:").append(lOrderDelivery.getDeliveryAddressee()).append(" 様");
        lMailBuf.append("\n住所:〒").append(lOrderDelivery.getPostCode()).append(" ");
        lMailBuf.append(lOrderDelivery.getAddress());
        // 7.3.0 PI-NES0501 削除 ここから
        /*
         * lMailBuf.append("\n送料:").append(NumberFormat.getNumberInstance().format(new
         * Long(lOrderDelivery.getDeliveryFeeIncTax()))).append("円").append(lOrderDelivery.getDeliveryTaxName()); if
         * (taxFlgOfB.equals("0")&&!lOrderDelivery.getDeliveryTaxFlg().equals("0"))taxFlgOfB="2";//送料の税区分 lMailBuf.append("\n配送方法:").append(lOrderDelivery.getDeliveryTypeName());
         * if(SIUtil.isNotNull(lOrderDelivery.getDeliveryDate())){ lMailBuf.append("\n配送希望日時:").append(lOrderDelivery.getDeliveryDate());//7.2.0 ST1077 修正 }
         * if(SIUtil.isNotNull(lRegOrderDetail.getDeliveryTimeTxt())) {lMailBuf.append("\n希望時間帯:").append(lRegOrderDetail.getDeliveryTimeTxt());}
         */
        // 7.3.0 PI-NES0501 削除 ここまで
        lMailBuf.append("\nTEL:").append(lOrderDelivery.getTel());
      } // 7.3.0 PI-NES0501 追加
      
      lOrderDetailColl = lOrderDelivery.getDetailCollection(lConnection);
      lOrderDetailIta = lOrderDetailColl.iterator();
      
      // 7.3.0 PI-NES0501 追加 ここから
      lMailBuf.append("\n");
      lMailBuf.append("\n「").append(lOrderDelivery.getDeliveryTypeName()).append("送料」対象商品");
      // 7.3.0 PI-NES0501 追加 ここまで
      
      while (lOrderDetailIta.hasNext()) {
        lRegOrderDetail = (UIRegOrderDetail) lOrderDetailIta.next();
        sumOfA = SIUtil.add(sumOfA, lRegOrderDetail.getPriceIncGift());
        sumOfB = SIUtil.add(sumOfB, lRegOrderDetail.getDeliveryFee());// 送料の合計//7.3.0 PI-NES0501 追加
        
        // 6.メールの本文の作成(受注明細の内容)
        lMailBuf.append("\n=============");
        // EDBTG003-00 elecs-matsushima add start
        if (!lRegOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_NORMAL)) {
          lMailBuf.append("\nセットコード:").append(lRegOrderDetail.getSetIndividualCode());
        }
        // EDBTG003-00 elecs-matsushima add end
        lMailBuf.append("\n商品コード:").append(lRegOrderDetail.getIndividualCode());
        lMailBuf.append("\n商品名:").append(lRegOrderDetail.getCartCmdtyName());// 7.2.0 ST0334 修正
        lMailBuf.append("\n数量:").append(NumberFormat.getNumberInstance().format(new Long(lRegOrderDetail.getAmount())));
        lMailBuf.append("\n単価:").append(NumberFormat.getNumberInstance().format(new Long(lRegOrderDetail.getPriceIncTax()))).append("円").append(
            "(" + lRegOrderDetail.getCmdtyTaxName() + ")");
        
        if (taxFlgOfA.equals("0") && (!lRegOrderDetail.getTaxFlg().equals("0") || !lRegOrderDetail.getWrappingTaxFlg().equals("0"))) {
          taxFlgOfA = "2";
        }
        
        lMailBuf.append("\n商品合計額:").append(NumberFormat.getNumberInstance().format(new Long(lRegOrderDetail.getPriceOfCmdty()))).append("円");
        //lMailBuf.append("\n送料合計額:").append(NumberFormat.getNumberInstance().format(new Long(lRegOrderDetail.getDeliveryFee()))).append("円");
        lMailBuf.append("\n配送希望日:").append(lRegOrderDetail.getDeliveryDate());
        if(SIUtil.isNotNull(lRegOrderDetail.getDeliveryTimeTxt())) {
          lMailBuf.append("\n希望時間帯:").append(lRegOrderDetail.getDeliveryTimeTxt());
        }
        // 7.3.0 PI-NES0501 削除 ここから
        /*
         * if (SIUtil.isNull(lRegOrderDetail.getWrappingName()))lMailBuf.append("\nギフト包装:なし"); else lMailBuf.append("\nギフト包装:").append(lRegOrderDetail.getWrappingName());
         * lMailBuf.append("\n包装代:").append(NumberFormat.getNumberInstance().format(new Long(lRegOrderDetail.getWrappingPriceOfTotal()))).append("円");
         * lMailBuf.append(SITax.getFullTaxFlgName2(lRegOrderDetail.getWrappingTaxFlg(),lRegOrderDetail.getWrappingPriceOfTotal()));
         */
        // 7.3.0 PI-NES0501 削除 ここまで
        // 7.1.1 ST0208 削除 if (SIUtil.isNotNull(lRegOrderDetail.getWrappingName()))lMailBuf.append("("+lRegOrderDetail.getWrappingTaxName()+")");
        //lMailBuf.append("\n総合計金額:").append(NumberFormat.getNumberInstance().format(new Long(SIUtil.add_LL(lRegOrderDetail.getPriceIncGift(), lRegOrderDetail.getDeliveryFee())))).append("円");
        
        if (!lRegOrderDetail.getTaxFlg().equals("0") || !lRegOrderDetail.getWrappingTaxFlg().equals("0")) {
          lMailBuf.append(SITax.getFullTaxFlgName2("2", lRegOrderDetail.getPriceIncGift()));
        } else {
          lMailBuf.append(SITax.getFullTaxFlgName2("0", lRegOrderDetail.getPriceIncGift()));
        }
      }
      lMailBuf.append("\n=============");
    }
    
    sumOfB = SIUtil.add(sumOfB, lRegOrder.getDiscountDeliveryFee());// 送料調整額計算
    sumOfD = SIUtil.add(sumOfA, sumOfB, sumOfC);
    if (!taxFlgOfA.equals("0") || !taxFlgOfB.equals("0") || !taxFlgOfC.equals("0")) taxFlgOfD = "2";// 小計の税区分
    
    // 7.メールの本文の作成(合計)
    lMailBuf.append("\n--------------");
    lMailBuf.append("\n合計\n商品合計(A):").append(NumberFormat.getNumberInstance().format(new Long(sumOfA))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfA, sumOfA));
    lMailBuf.append("\n送料合計(B):").append(NumberFormat.getNumberInstance().format(new Long(sumOfB))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfB, sumOfB));
    lMailBuf.append("\n手数料合計(C):").append(NumberFormat.getNumberInstance().format(new Long(sumOfC))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfC, sumOfC));// 7.3.0
    // PI-NES0501
    // 削除
    if (SIUtil.isNotNull(sumOfE) && Long.parseLong(sumOfE) > 0) {
      sumOfF = SIUtil.sub_LL(SIUtil.sub_LL(sumOfD, sumOfG), sumOfE);
      if (!taxFlgOfD.equals("0") || !taxFlgOfG.equals("0") || !taxFlgOfE.equals("0")) taxFlgOfF = "2";// お支払い合計額の税区分
      
      lMailBuf.append("\n小計(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Long(sumOfD))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfD, sumOfD)).append("※お支払い額ではありません");
      // 修正
      // 使用ポイントはすでに無効になっているのでポイント残高から使用ポイント数をマイナスして表示する。
      lMailBuf.append("\nポイント使用額（ポイント残高 ").append(NumberFormat.getNumberInstance().format(new Long(SIUtil.sub_LL(lRegOrder.getMaxPoint(), lRegOrder.getSumByPoint())))).append(
          "ポイント）(E):");// 7.3.0 PI-NES0501 修正
      lMailBuf.append(NumberFormat.getNumberInstance().format(new Long(sumOfE))).append("円");
      // EDBTG003-00 elecs-matsushima mod start
//      if (SIUtil.isNotNull(sumOfG) && Long.parseLong(sumOfG) > 0) {
//        lMailBuf.append("\n値引金額(G)：").append(NumberFormat.getNumberInstance().format(new Long(sumOfG))).append("円");
//        lMailBuf.append("\nお支払い合計額(F=D-G-E):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
//      } else {
//        lMailBuf.append("\nお支払い合計額(F=D-E):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
//      }
      if (SIUtil.isNotNull(sumOfH) && Long.parseLong(sumOfH) > 0){
        if (SIUtil.isNotNull(sumOfG) && Long.parseLong(sumOfG) > 0) {
          lMailBuf.append("\n値引金額(G)：").append(NumberFormat.getNumberInstance().format(new Long(sumOfG))).append("円");
          lMailBuf.append("\nセット値引金額(H)：").append(NumberFormat.getNumberInstance().format(new Long(sumOfH))).append("円");
          sumOfF = SIUtil.sub_LL(sumOfF, sumOfH);
          lMailBuf.append("\nお支払い合計額(F=D-G-E-H):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
        } else {
          lMailBuf.append("\nセット値引金額(H)：").append(NumberFormat.getNumberInstance().format(new Long(sumOfH))).append("円");
          sumOfF = SIUtil.sub_LL(sumOfF, sumOfH);
          lMailBuf.append("\nお支払い合計額(F=D-E-H):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
        }
      } else {
        if (SIUtil.isNotNull(sumOfG) && Long.parseLong(sumOfG) > 0) {
          lMailBuf.append("\n値引金額(G)：").append(NumberFormat.getNumberInstance().format(new Long(sumOfG))).append("円");
          lMailBuf.append("\nお支払い合計額(F=D-G-E):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
        } else {
          lMailBuf.append("\nお支払い合計額(F=D-E):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
        }
      }
      // EDBTG003-00 elecs-matsushima mod end
    } else {
      sumOfF = SIUtil.sub_LL(sumOfD, sumOfG);
      if (!taxFlgOfD.equals("0") || !taxFlgOfG.equals("0")) taxFlgOfF = "2";// お支払い合計額の税区分
      // EDBTG003-00 elecs-matsushima mod start
//      if (SIUtil.isNotNull(sumOfG) && Long.parseLong(sumOfG) > 0) {
//        lMailBuf.append("\n小計(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Long(sumOfD))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfD, sumOfD));
//        lMailBuf.append("\n値引金額(E)：").append(NumberFormat.getNumberInstance().format(new Long(sumOfG))).append("円");
//        lMailBuf.append("\nお支払い合計額(F=D-E):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
//      } else {
//        lMailBuf.append("\nお支払い合計額(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
//      }
      if (SIUtil.isNotNull(sumOfH) && Long.parseLong(sumOfH) > 0){
        if (SIUtil.isNotNull(sumOfG) && Long.parseLong(sumOfG) > 0) {
          lMailBuf.append("\n小計(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Long(sumOfD))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfD, sumOfD));
          lMailBuf.append("\n値引金額(E)：").append(NumberFormat.getNumberInstance().format(new Long(sumOfG))).append("円");
          lMailBuf.append("\nセット値引金額(H)：").append(NumberFormat.getNumberInstance().format(new Long(sumOfH))).append("円");
          sumOfF = SIUtil.sub_LL(sumOfF, sumOfH);
          lMailBuf.append("\nお支払い合計額(F=D-E-H):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
        } else {
          lMailBuf.append("\nセット値引金額(H)：").append(NumberFormat.getNumberInstance().format(new Long(sumOfH))).append("円");
          sumOfF = SIUtil.sub_LL(sumOfF, sumOfH);
          lMailBuf.append("\nお支払い合計額(D=A+B+C-H):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
        }
      } else {
        if (SIUtil.isNotNull(sumOfG) && Long.parseLong(sumOfG) > 0) {
          lMailBuf.append("\n小計(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Long(sumOfD))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfD, sumOfD));
          lMailBuf.append("\n値引金額(E)：").append(NumberFormat.getNumberInstance().format(new Long(sumOfG))).append("円");
          lMailBuf.append("\nお支払い合計額(F=D-E):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
        } else {
          lMailBuf.append("\nお支払い合計額(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
        }
      }
      // EDBTG003-00 elecs-matsushima mod end
    }
    
    lMailBuf.append("\n\n==============");
    if (SIUtil.isNotNull(lRegOrder.getSumByPoint()) && (!lRegOrder.getSumByPoint().equals("0"))) {
      lMailBuf.append("\n*今回使用されたポイント数（").append(NumberFormat.getNumberInstance().format(new Long(sumOfE)));
      lMailBuf.append("ポイント)はポイント残高に戻されます。");
    }
    lMailBuf.append("\n\n ");
    
    // 8メールの本文の作成(メールテンプレートの内容3)
    lSendMail.appendContent1(lMailBuf.toString());
    
    // 9.送信開始
    try {
      lSendMail.setToMailAddress(lRegOrder.getCurrentEmail());// 7.2.0 ST1018 修正
      lRes = lSendMail.execute() && lRes;
    } catch (SIFatalException e) {
      lRes = false;
      e.printStackTrace();
    }
    
    return lRes;
  }
  
  private boolean refreshOrder(HttpServletRequest lRequest, Connection lConnection, SIURLParameter lUrlParam) {// 7.1.1 ST0236 修正
    SIUserInfo lUserInfo = SIHTMLUtil.getUserInfo(lRequest);// ログイン情報の取得
    HttpSession session = lRequest.getSession(true);// セッションの取得
    
    // 再リセット
    UIRegOrder refreshRegOrder = new UIRegOrder();
    refreshRegOrder.setOrderCode((String) lUrlParam.getParam("detailOrderCodeHid"));// 7.1.1 ST0236 修正
    refreshRegOrder.reset(lRequest, lConnection);
    if (SIConfig.NO_DISCOUNT_DISP_USERS!=null&&SIConfig.NO_DISCOUNT_DISP_USERS.length>0) {
      for (int i=0;i<SIConfig.NO_DISCOUNT_DISP_USERS.length;i++) {
        if (refreshRegOrder.getCustCode().equals(SIConfig.NO_DISCOUNT_DISP_USERS[i])) {
          refreshRegOrder.setSumOfDiscount("0");
          break;
        }
      }
    }
    
    if (refreshRegOrder.getCustCode().equals(lUserInfo.getCustCode())) {
      session.setAttribute(SIConfig.SISESSION_ORDER_DETAIL_NAME, refreshRegOrder);
      return true;
    } else {
      session.removeAttribute(SIConfig.SISESSION_ORDER_DETAIL_NAME);
      return false;
    }
  }
  private void setPaymentCustName(HttpServletRequest lRequest,SIURLParameter urlParam){
    HttpSession session = lRequest.getSession(true);// セッションの取得
    UIRegOrder regOrderID=(UIRegOrder)session.getAttribute(SIConfig.SISESSION_ORDER_DETAIL_NAME);
    if (regOrderID==null)regOrderID=new UIRegOrder();
    regOrderID.setCustName((String)urlParam.getParam("paymentCustName"));
    session.setAttribute(SIConfig.SISESSION_ORDER_DETAIL_NAME,regOrderID);
  }
  
  private void insertPaymentCustName(HttpServletRequest lRequest,Connection lConnection){
    HttpSession session = lRequest.getSession(true);// セッションの取得
    UIRegOrder regOrderID=(UIRegOrder)session.getAttribute(SIConfig.SISESSION_ORDER_DETAIL_NAME);
    if (regOrderID==null) return;
    try{
      String totalPayment = SIDBUtil.getFirstData(lConnection,"SELECT sum(paymentprice) FROM paymenttbl WHERE paymentdate<=current_date AND status=0 AND ordercode="+SIDBUtil.SQL2Str(regOrderID.getOrderCode()));
      if ("1".equals(regOrderID.getStatus())&&regOrderID.getPaymentTotal().equals(totalPayment)) {
        SIInsertRec lRec = new SIInsertRec("receiptinfotbl");
        lRec.add("ordercode", regOrderID.getOrderCode());
        lRec.add("paymentcustname", regOrderID.getCustName());
        lRec.execute(lConnection);
      }else{
        return;
      }
    }catch(Exception e){
      e.printStackTrace();
    }
  }
  
  private void producePDFFileForOrder(HttpServletRequest lRequest, HttpServletResponse response, Connection lConnection,String lOrderCode) throws SIDuplicateKeyException, SIDBAccessException, SQLException {
    File lOrderTempDir = (File) this.getServletContext().getAttribute("javax.servlet.context.tempdir");
    File lOrderTempFile = new File("");
    try {
      lOrderTempFile = File.createTempFile("order_", ".pdf", lOrderTempDir);
    } catch (IOException e1) {
      e1.printStackTrace();
    }
    String lFileName = lOrderTempFile.getAbsolutePath();
    
    Document document = new Document();
    
    try {
      PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(lFileName));
      
      HeaderFooter footer = new HeaderFooter(new Phrase("- "), new Phrase(" -"));
      footer.setAlignment(Element.ALIGN_RIGHT);
      footer.setBorder(Rectangle.NO_BORDER);
      document.setFooter(footer);
      document.open();
      producePDFFileForOrder(lConnection, SIHTMLUtil.getLogin(lRequest), document, lOrderCode);
      log.debug(document.getPageNumber()+"");
      document.close();
      String lOutputFileName = SIPDFConf.SIPDF_PREFIX_ORDER_FILE_NAME + (new SIDateTime().getDateTimeString()) + "." + SIPDFConf.SIPDF_EXTENSION_NAME;
      SIPDFUtil lPdfUtil = new SIPDFUtil();
      lPdfUtil.execute(response, lFileName, lOutputFileName);
      writer.close();
    } catch (NumberFormatException e) {
      e.printStackTrace();
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (DocumentException e) {
      e.printStackTrace();
    } finally {
      // 臨時ファイルの削除
      lOrderTempFile.delete();
    }
  }
  
  private void producePDFFileForOrder(Connection lConnection, SILogin lLogin, Document document, String lOrderCode) {
    UIRegOrder lRegOrder = new UIRegOrder(lOrderCode);
    UICustPointListCond lcustPoint = new UICustPointListCond();
    boolean eyelashgarageFlg = false;
    boolean towatechFlg = false;
    boolean priceFlg = false;
    if (!lRegOrder.reset(lConnection)) {
      log.debug("not find order record for ordercode " + lOrderCode);
      return;
    }
    String totalOfEffective = new String("0");
    SICust customer = new SICust(lRegOrder.getCustCode());
    try {
      customer.reset(lConnection);
      totalOfEffective = lcustPoint.getCustPoint(lConnection, lLogin, lRegOrder.getCustCode());
    } catch (SIDBAccessException e1) {
      e1.printStackTrace();
    }
    eyelashgarageFlg = lRegOrder.getCompanyCode().equals("17");
    towatechFlg = customer.getDeliveryDocument().equals("10");
    priceFlg = customer.getDeliveryDocument().equals("1");
    SIDateTime lDateTime = new SIDateTime();
    
    String priceOfCmdty = "0";// 商品自身の価格
    String totalPrice = "0";// 総合計
    boolean nextpage1 = false;// 改ページフラグ
    boolean nextpage2 = false;
    
    Cell lCell;
    try {
      Collection lOrderDetailColl = new ArrayList();
      UIRegOrderDetail lRegOrderDetail[] = new UIRegOrderDetail[0];
      UIRegOrderDelivery lOrderDelivery = new UIRegOrderDelivery();
      UIRegOrderDetail lOrderDetail = new UIRegOrderDetail();
      Collection lOrderDeliveryColl = new ArrayList();
      
      String lDeliveryCode = "1";
      
      lOrderDelivery = new UIRegOrderDelivery(lOrderCode, lDeliveryCode);
      lOrderDelivery.reset(lConnection);
      lOrderDeliveryColl.add(lOrderDelivery);
      // 1.発行日など
      Table lPdfTbl = new Table(1);
      lPdfTbl.setAlignment(Element.ALIGN_RIGHT);
      lPdfTbl.setWidth(SIPDFConf.SIORDER_TABLE_WIDTH_HEADER);
      lPdfTbl.setPadding(1);
      lPdfTbl.setBorder(Rectangle.NO_BORDER);
      
      String pdfFile = (String) getServletContext().getRealPath("image/logo/BG_Logo_Big.gif");
      if (towatechFlg) pdfFile = (String) getServletContext().getRealPath("image/logo/Towatech_Logo.gif");
      else if (eyelashgarageFlg) pdfFile = (String) getServletContext().getRealPath("image/logo/EG_Logo_Big.gif");
      Image logo = Image.getInstance(pdfFile);
      logo.scaleAbsolute(144, 48);
      logo.setAbsolutePosition(30, 760);
      document.add(logo);
      
      lCell = new Cell(new Paragraph("発行日:" + lDateTime.getFullDate(), SIPDFConf.SIFONT_GOTHIC7N));
      lCell.setBorder(Rectangle.BOTTOM);
      lPdfTbl.addCell(lCell);
      lCell = new Cell(new Paragraph("注文日:" + lRegOrder.getInitDateTime(), SIPDFConf.SIFONT_GOTHIC7N));
      lCell.setBorder(Rectangle.BOTTOM);
      lPdfTbl.addCell(lCell);
      lCell = new Cell(new Paragraph("ご注文No:" + lOrderCode, SIPDFConf.SIFONT_GOTHIC7N));
      lCell.setBorder(Rectangle.BOTTOM);
      lPdfTbl.addCell(lCell);
      /*
      lCell = new Cell(new Paragraph("出荷日:" + lOrderDelivery.getShippmentDate(), SIPDFConf.SIFONT_GOTHIC7N));
      lCell.setBorder(Rectangle.BOTTOM);
      lPdfTbl.addCell(lCell);
      */
      document.add(lPdfTbl);
      
      if (towatechFlg) {
        lPdfTbl = new Table(1);
        lPdfTbl.setWidth(SIPDFConf.SIORDER_TABLE_WIDTH_NOR);
        lPdfTbl.setAlignment(Element.ALIGN_LEFT);
        lPdfTbl.setDefaultHorizontalAlignment(Element.ALIGN_CENTER);
        lPdfTbl.setDefaultVerticalAlignment(Element.ALIGN_MIDDLE);
        lPdfTbl.setPadding(3);
        lPdfTbl.setOffset(8);
        lPdfTbl.setBorder(Rectangle.NO_BORDER);
      }else{
        lPdfTbl = new Table(3);
        lPdfTbl.setWidth(SIPDFConf.SIORDER_TABLE_WIDTH_NOR);
        float title[] = { 1, 98, 1 };
        lPdfTbl.setWidths(title);
        lPdfTbl.setDefaultHorizontalAlignment(Element.ALIGN_RIGHT);
        lPdfTbl.setDefaultVerticalAlignment(Element.ALIGN_BOTTOM);
        lPdfTbl.setAlignment(Element.ALIGN_CENTER);
        lPdfTbl.setPadding(0);
        lPdfTbl.setOffset(0);
        lPdfTbl.setBorder(Rectangle.NO_BORDER);
      }
      
      lCell = new Cell(new Paragraph(" ", SIPDFConf.SIFONT_GOTHIC20B));
      lCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
      lCell.setBorder(Rectangle.NO_BORDER);
      lPdfTbl.addCell(lCell);
      
      lCell = new Cell(new Paragraph("納品書", SIPDFConf.SIFONT_GOTHIC20B));
      lCell.setHorizontalAlignment(Element.ALIGN_CENTER);
      lCell.setBorder(Rectangle.NO_BORDER);
      if (!towatechFlg) lPdfTbl.addCell(lCell);
      
      lCell = new Cell(new Paragraph(" ", SIPDFConf.SIFONT_GOTHIC20B));
      lCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
      lCell.setHorizontalAlignment(Element.ALIGN_LEFT);
      lCell.setBorder(Rectangle.NO_BORDER);
      if (!towatechFlg) lPdfTbl.addCell(lCell);
      
      document.add(lPdfTbl);
      
      // 3.注文主氏名
      lPdfTbl = new Table(3);
      lPdfTbl.setWidth(SIPDFConf.SIORDER_TABLE_WIDTH_NOR);
      lPdfTbl.setAlignment(Element.ALIGN_LEFT);
      lPdfTbl.setDefaultHorizontalAlignment(Element.ALIGN_LEFT);
      lPdfTbl.setDefaultVerticalAlignment(Element.ALIGN_MIDDLE);
      lPdfTbl.setPadding(3);
      lPdfTbl.setOffset(8);
      
      lCell = new Cell(new Paragraph("ご注文主: " + lRegOrder.getCustName() + "  " + SIPDFConf.SICUST_TITLE_NAME[0],SIPDFConf.SIFONT_GOTHIC9N));
      lCell.setColspan(3);
      lPdfTbl.addCell(lCell);
      
      lCell = new Cell(new Paragraph("住所: 〒" + lRegOrder.getPostCode(), SIPDFConf.SIFONT_GOTHIC9N));
      lCell.add(new Paragraph(lRegOrder.getAddress(), SIPDFConf.SIFONT_GOTHIC9N));
      lCell.setColspan(3);
      lPdfTbl.addCell(lCell);
      document.add(lPdfTbl);
      
      UIRegOrderDelivery[] lRegOrderDelivery = (UIRegOrderDelivery[]) lOrderDeliveryColl.toArray(new UIRegOrderDelivery[0]);
      for (int ii = 0; ii < lRegOrderDelivery.length; ii++) {
        // 6.宛先氏名
        lPdfTbl = new Table(4);
        lPdfTbl.setTableFitsPage(true);
        lPdfTbl.setWidth(SIPDFConf.SIORDER_TABLE_WIDTH_NOR);
        lPdfTbl.setWidths(SIPDFConf.SIORDER_TABLE_WIDTHS_ADDRESSEE);
        lPdfTbl.setAlignment(Element.ALIGN_RIGHT);
        lPdfTbl.setDefaultHorizontalAlignment(Element.ALIGN_LEFT);
        lPdfTbl.setDefaultVerticalAlignment(Element.ALIGN_MIDDLE);
        lPdfTbl.setBorderWidth(1);
        lPdfTbl.setPadding(4);
        lPdfTbl.setOffset(8);
        lPdfTbl.setTableFitsPage(true);
        
        lOrderDelivery = lRegOrderDelivery[ii];
        lCell = new Cell(new Phrase("納品先宛名: ", SIPDFConf.SIFONT_GOTHIC9N));// 配送先用
        lCell.add(new Paragraph(lOrderDelivery.getDeliveryAddressee() + "  " + SIPDFConf.SICUST_TITLE_NAME[0],SIPDFConf.SIFONT_GOTHIC9N));
        lCell.add(new Paragraph("納品先サロン名: " + lOrderDelivery.getCompanyName(), SIPDFConf.SIFONT_GOTHIC9N));
        lCell.setColspan(4);
        lPdfTbl.addCell(lCell);
        
        lCell = new Cell(new Paragraph("納品先御住所: 〒" + lOrderDelivery.getPostCode(), SIPDFConf.SIFONT_GOTHIC9N));
        lCell.add(new Paragraph(lOrderDelivery.getAddress(), SIPDFConf.SIFONT_GOTHIC9N));
        lCell.setColspan(4);
        lPdfTbl.addCell(lCell);
        
        document.add(lPdfTbl);
        
        // 6.5 中見出し2
        lPdfTbl = new Table(1);
        lPdfTbl.setWidth(SIPDFConf.SIORDER_TABLE_WIDTH_NOR);
        lPdfTbl.setAlignment(Element.ALIGN_LEFT);
        lPdfTbl.setDefaultHorizontalAlignment(Element.ALIGN_CENTER);
        lPdfTbl.setDefaultVerticalAlignment(Element.ALIGN_MIDDLE);
        lPdfTbl.setPadding(3);
        lPdfTbl.setOffset(8);
        lPdfTbl.setBorder(Rectangle.NO_BORDER);
        
        lCell = new Cell(new Paragraph(SIPDFConf.SIORDER_MIDDLE_TITLE_NAME2[0], SIPDFConf.SIFONT_GOTHIC10B));
        lCell.setBorder(Rectangle.NO_BORDER);
        lPdfTbl.addCell(lCell);
        
        document.add(lPdfTbl);
        
        lOrderDetailColl = lOrderDelivery.getOrderCollectionFront(lConnection);
        lRegOrderDetail = (UIRegOrderDetail[]) lOrderDetailColl.toArray(new UIRegOrderDetail[0]);
        float[] detailWidths = {9,68,4,8,3,8};
        String[] detailTitle = {"　在庫コード","商品名　(色・状態)","数量","保証期間"," ","出荷日"};
        if (priceFlg) {
          detailWidths = new float[]{9,63,4,8,8,8};
          detailTitle =  new String[]{"　在庫コード","商品名　(色・状態)","数量","単価","合計","保証期間　"};
        }
        
        lPdfTbl = new Table(detailWidths.length);
        lPdfTbl.setTableFitsPage(true);
        lPdfTbl.setWidth(SIPDFConf.SIORDER_TABLE_WIDTH_NOR);
        lPdfTbl.setDefaultHorizontalAlignment(Element.ALIGN_RIGHT);
        lPdfTbl.setDefaultVerticalAlignment(Element.ALIGN_MIDDLE);
        
        lPdfTbl.setWidths(detailWidths);
        lPdfTbl.setBorderWidth(1);
        lPdfTbl.setPadding(0);
        lPdfTbl.setOffset(4);
        log.debug("SIPDFConf.SIORDER_DETAIL_TITLE_COUNT[0]=" + SIPDFConf.SIORDER_DETAIL_TITLE_COUNT[0]);
        
        // 7.商品明細
        for (int jj = 0; jj < detailTitle.length; jj++) {
          lCell = new Cell(new Paragraph(detailTitle[jj], SIPDFConf.SIFONT_GOTHIC7B));
          lCell.setHeader(true);
          lCell.setBorderWidth(0.5f);
          lCell.setBorder(Rectangle.NO_BORDER);
          if (detailTitle[jj].equals("出荷日")) lCell.setHorizontalAlignment(Element.ALIGN_LEFT);
          else if (jj >= 2) lCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
          else lCell.setHorizontalAlignment(Element.ALIGN_LEFT);
          lPdfTbl.addCell(lCell);
        }
        lCell = new Cell(new Paragraph("　", new Font(SIPDFConf.getGothic(), 3)));
        lCell.setBorder(Rectangle.BOTTOM);
        lCell.setColspan(detailTitle.length);
        lPdfTbl.addCell(lCell);
        
        String guaranteedTerm = "";
        int count = 0;
        for (int k = 0; k < lRegOrderDetail.length; k++) {
          lOrderDetail = lRegOrderDetail[k];
          
          lCell = new Cell(new Paragraph("　" +lOrderDetail.getIndividualCode(), SIPDFConf.SIFONT_GOTHIC7N));
          lCell.setBorder(Rectangle.NO_BORDER);
          lCell.setHorizontalAlignment(Element.ALIGN_LEFT);
          lCell.setVerticalAlignment(Element.ALIGN_TOP);
          lPdfTbl.addCell(lCell);
          
          // 添付品なら頭に添付品の文言を付ける
          String cmdtyName = SIBGUtil.getCmdtyFullName(lConnection, lOrderDetail.getCmdtyCode(), lOrderDetail.getIndividualCode());
          if (lOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_APPENDED) ) {
            cmdtyName = SIConfig.SET_APPEND_NAME_PDF + cmdtyName;
          }
          lCell = new Cell(new Paragraph(cmdtyName, SIPDFConf.SIFONT_GOTHIC7N));
          lCell.setBorder(Rectangle.NO_BORDER);
          lCell.setHorizontalAlignment(Element.ALIGN_LEFT);
          lCell.setVerticalAlignment(Element.ALIGN_TOP);
          lPdfTbl.addCell(lCell);
          
          lCell = new Cell(new Paragraph(lOrderDetail.getAmount(), SIPDFConf.SIFONT_GOTHIC7N));
          lCell.setBorder(Rectangle.NO_BORDER);
          lCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
          lCell.setVerticalAlignment(Element.ALIGN_TOP);
          lPdfTbl.addCell(lCell);
          
          if (priceFlg) {
            priceOfCmdty = SIUtil.multi_LL(lOrderDetail.getAmount(), lOrderDetail.getPriceIncTax());
            totalPrice = SIUtil.add_LL(totalPrice, priceOfCmdty);
            
            lCell = new Cell(new Paragraph(NumberFormat.getNumberInstance().format(new Long(lOrderDetail.getPriceIncTax())) + "円",SIPDFConf.SIFONT_GOTHIC7N));
            lCell.setBorder(Rectangle.NO_BORDER);
            lCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
            lPdfTbl.addCell(lCell);
            
            lCell = new Cell(new Paragraph(NumberFormat.getNumberInstance().format(new Long(priceOfCmdty)) + "円", SIPDFConf.SIFONT_GOTHIC7N));
            lCell.setBorder(Rectangle.NO_BORDER);
            lCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
            lPdfTbl.addCell(lCell);
            
            guaranteedTerm = SIDBUtil.getFirstData(lConnection, "SELECT guaranteedTerm FROM individualtbl WHERE cmdtycode='" + lOrderDetail.getCmdtyCode() + "' AND individualcode='" + lOrderDetail.getIndividualCode() + "'");
            
            if (SIUtil.isNull(guaranteedTerm)||"0".equals(guaranteedTerm)) guaranteedTerm = "−";
            else guaranteedTerm = SIDateTime.getMonthToYear(Integer.parseInt(guaranteedTerm));
            
            lCell = new Cell(new Paragraph(guaranteedTerm + "　", SIPDFConf.SIFONT_GOTHIC7N));
            lCell.setBorder(Rectangle.NO_BORDER);
            lCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
            lPdfTbl.addCell(lCell);
          } else {
            guaranteedTerm = SIDBUtil.getFirstData(lConnection, "SELECT guaranteedTerm FROM individualtbl WHERE cmdtycode='" + lOrderDetail.getCmdtyCode() + "' AND individualcode='" + lOrderDetail.getIndividualCode() + "'");
            
            if (SIUtil.isNull(guaranteedTerm)||"0".equals(guaranteedTerm)) guaranteedTerm = "−";
            else guaranteedTerm = SIDateTime.getMonthToYear(Integer.parseInt(guaranteedTerm));
            
            lCell = new Cell(new Paragraph(guaranteedTerm, SIPDFConf.SIFONT_GOTHIC7N));
            lCell.setBorder(Rectangle.NO_BORDER);
            lCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
            lPdfTbl.addCell(lCell);
            
            lCell = new Cell(new Paragraph(" ", SIPDFConf.SIFONT_GOTHIC7N));
            lCell.setBorder(Rectangle.NO_BORDER);
            lCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
            lPdfTbl.addCell(lCell);
            
            lCell = new Cell(new Paragraph(lOrderDetail.getShippmentDate(), SIPDFConf.SIFONT_GOTHIC7N));
            lCell.setBorder(Rectangle.NO_BORDER);
            lCell.setHorizontalAlignment(Element.ALIGN_LEFT);
            lPdfTbl.addCell(lCell);
          }
          
          if (count == 13) {
            nextpage2 = true;
          }
          if (count == 31) {
            nextpage2 = false;
            nextpage1 = true;
          }
          count++;
        }
        lCell = new Cell(new Paragraph("　", new Font(SIPDFConf.getGothic(), 3)));
        lCell.setBorder(Rectangle.NO_BORDER);
        lCell.setHorizontalAlignment(Element.ALIGN_LEFT);
        lCell.setVerticalAlignment(Element.ALIGN_TOP);
        lCell.setColspan(4);
        lPdfTbl.addCell(lCell);
      }
      document.add(lPdfTbl);
      if (nextpage1) document.newPage();
      
      if (towatechFlg) {
        document.newPage();
        return;
      }
      // 8.連絡事項
      /*
      lPdfTbl = new Table(3);
      lPdfTbl.setWidth(SIPDFConf.SIORDER_TABLE_WIDTH_NOR);
      lPdfTbl.setWidths(SIPDFConf.SISTOCK_TABLE_WIDTHS_TOTAL);
      lPdfTbl.setAlignment(Element.ALIGN_LEFT);
      lPdfTbl.setDefaultHorizontalAlignment(Element.ALIGN_LEFT);
      lPdfTbl.setDefaultVerticalAlignment(Element.ALIGN_MIDDLE);
      lPdfTbl.setPadding(2);
      lPdfTbl.setTableFitsPage(true);
      lPdfTbl.setOffset(12);
      
      lCell = new Cell(new Paragraph("ご連絡事項: ", SIPDFConf.SIFONT_GOTHIC9N));
      lCell.add(new Paragraph(lRegOrder.getContactMsg(), SIPDFConf.SIFONT_GOTHIC9N));
      lPdfTbl.addCell(lCell);
      
      if (!customer.getNoPointFlg().equals("1")) {
        lCell = new Cell(new Paragraph("ポイント累積: ", SIPDFConf.SIFONT_GOTHIC9B));
        lCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
        lCell.setBorder(Rectangle.NO_BORDER);
        lPdfTbl.addCell(lCell);
        
        lCell = new Cell(new Paragraph(NumberFormat.getNumberInstance().format(new Long(totalOfEffective)) + "p", SIPDFConf.SIFONT_GOTHIC9B));
        lCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
        lCell.setBorder(Rectangle.NO_BORDER);
        lPdfTbl.addCell(lCell);
      }
      document.add(lPdfTbl);
      
      lPdfTbl = new Table(1);
      lPdfTbl.setAlignment(Element.ALIGN_RIGHT);
      lPdfTbl.setDefaultHorizontalAlignment(Element.ALIGN_RIGHT);
      lPdfTbl.setBorder(Rectangle.NO_BORDER);
      String pointNotice = "※ポイントの有効期限は最終購入日より1年間です。";
      if (customer.getNoPointFlg().equals("1")) pointNotice = "　";
      lCell = new Cell(new Paragraph(pointNotice, SIPDFConf.SIFONT_GOTHIC7B));
      lCell.add(new Paragraph("　", new Font(SIPDFConf.getGothic(), 2)));
      lCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
      lCell.setBorder(Rectangle.NO_BORDER);
      lPdfTbl.addCell(lCell);
      document.add(lPdfTbl);
      */
      lPdfTbl = new Table(1);
      lPdfTbl.setBorder(Rectangle.NO_BORDER);
      lCell = new Cell(new Paragraph("　", SIPDFConf.SIFONT_GOTHIC7B));
      lCell.setBorder(Rectangle.NO_BORDER);
      lPdfTbl.addCell(lCell);
      document.add(lPdfTbl);
      
      // 9.フリースペース
      lPdfTbl = new Table(5);
      lPdfTbl.setWidth(SIPDFConf.SIORDER_TABLE_WIDTH_NOR);
      lPdfTbl.setWidths(new float[] {5,30,35,15,10});
      lPdfTbl.setAlignment(Element.ALIGN_LEFT);
      lPdfTbl.setDefaultHorizontalAlignment(Element.ALIGN_LEFT);
      lPdfTbl.setDefaultVerticalAlignment(Element.ALIGN_MIDDLE);
      lPdfTbl.setPadding(3);
      
      lCell = new Cell(new Paragraph(SIPDFConf.SIORDER_COMMENT2[0], SIPDFConf.SIFONT_GOTHIC9N));
      lCell.setColspan(5);
      lPdfTbl.addCell(lCell);
      
      SIMallShop mallshop = new SIMallShop("0");
      mallshop.reset(lConnection);
      
      String shopName = "株式会社ビューティガレージ";
      String telNumber = "0120 - 974 - 554";
      if (eyelashgarageFlg) {
        shopName = "株式会社アイラッシュガレージ";
        telNumber = "03 - 5752 - 4231";
      }
      lCell = new Cell(new Paragraph("連絡先: " + shopName, SIPDFConf.SIFONT_GOTHIC9N));
      lCell.add(new Paragraph("電話番号: " + telNumber, SIPDFConf.SIFONT_GOTHIC9N));
      if (customer.getNoPointFlg().equals("1")) {
        lCell.setColspan(5);
      } else {
        lCell.setRowspan(2);
        lCell.setColspan(3);
      }
      lPdfTbl.addCell(lCell);
      
      if (customer.getNoPointFlg().equals("0")) {
        lCell = new Cell(new Paragraph("ポイント累積:", SIPDFConf.SIFONT_GOTHIC7B));
        lCell.setHorizontalAlignment(Element.ALIGN_LEFT);
        lCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
        lCell.setBorder(Rectangle.NO_BORDER);
        lPdfTbl.addCell(lCell);
        
        lCell = new Cell(new Paragraph(NumberFormat.getNumberInstance().format(new Long(totalOfEffective)) + "p ", SIPDFConf.SIFONT_GOTHIC7B));
        lCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
        lCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
        lCell.setBorder(Rectangle.NO_BORDER);
        lPdfTbl.addCell(lCell);
        
        lCell = new Cell(new Paragraph("＊ポイントの有効期限は最終購入日より1年間です。", SIPDFConf.SIFONT_GOTHIC5B));
        lCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
        lCell.setVerticalAlignment(Element.ALIGN_BOTTOM);
        lCell.setBorder(Rectangle.NO_BORDER);
        lCell.setColspan(2);
        lPdfTbl.addCell(lCell);
      }
      document.add(lPdfTbl);
      if (nextpage2) document.newPage();
      
      // 保証
      lPdfTbl = new Table(3);
      lPdfTbl.setWidth(SIPDFConf.SIORDER_TABLE_WIDTH_NOR);
      float widths[] = { 98, 1,1 };
      lPdfTbl.setWidths(widths);
      lPdfTbl.setAlignment(Element.ALIGN_LEFT);
      lPdfTbl.setDefaultHorizontalAlignment(Element.ALIGN_LEFT);
      lPdfTbl.setDefaultVerticalAlignment(Element.ALIGN_TOP);
      lPdfTbl.setPadding(2);
      lPdfTbl.setBorder(Rectangle.NO_BORDER);
      lPdfTbl.setOffset(5);
      
      // 左側セル
      lCell = new Cell(new Paragraph("<商品到着時のお願い>", SIPDFConf.SIFONT_GOTHIC7B));
      lCell.add(new Paragraph("商品到着後、ただちに商品内容や状態、動作等をご確認下さい。梱包方法には万全を期しておりますが、運送中の事故などにより万が一商品到着時に破損・故障がある場合は、修理または同一程度商品による交換、場合によっては全額返金という形で対応させていただきます。", SIPDFConf.SIFONT_GOTHIC6N));
      lCell.add(new Paragraph("※ 商品到着後、7日間を経過した場合は保証できかねますので、予めご了承下さい。", SIPDFConf.SIFONT_GOTHIC6N));
      lCell.add(new Paragraph("　", SIPDFConf.SIFONT_GOTHIC5N));
      lCell.add(new Paragraph("＜お客様都合による返品について＞", SIPDFConf.SIFONT_GOTHIC7B));
      lCell.add(new Paragraph("商品到着後、7日間以内であれば、お客様のご都合による返品であっても承ります。ただし、その場合は下記の条件に則り対応させていただきます。", SIPDFConf.SIFONT_GOTHIC6N));
      lCell.add(new Paragraph("以下に該当する場合は、ご返品をお受けできかねます。予めご了承下さい。", SIPDFConf.SIFONT_GOTHIC6N));
      lCell.add(new Paragraph("1. 化粧品・消耗品類・ジャンク品・受注発注の商品の場合、2. 納品後1週間が経過した場合、3. パッケージを開いた場合や、既にご使用になられた場合", SIPDFConf.SIFONT_GOTHIC6N));
      lCell.add(new Paragraph("※ご返品時の注意事項", SIPDFConf.SIFONT_GOTHIC6U));
      lCell.add(new Paragraph("1. 返品商品の返送にかかる費用につきましては、お客様のご負担とさせていただいております。", SIPDFConf.SIFONT_GOTHIC6N));
      lCell.add(new Paragraph("2. 代金を返金させていただくこととなった場合は、商品代金から手数料5％を差し引き、銀行振込にて返金させていただきます。", SIPDFConf.SIFONT_GOTHIC6N));
      lCell.add(new Paragraph("なお、商品発送時にかかった送料については、お戻しできません。手数料は、梱包や出荷関連の諸費用や返金時の入金手数料等のことです。", SIPDFConf.SIFONT_GOTHIC6N));
      lCell.setBorder(Rectangle.NO_BORDER);
      lPdfTbl.addCell(lCell);
      // 中央セル
      lCell = new Cell(new Paragraph(" ", SIPDFConf.SIFONT_GOTHIC5N));
      lCell.setBorder(Rectangle.NO_BORDER);
      lPdfTbl.addCell(lCell);
      
      // 右側セル
      lCell = new Cell(new Paragraph(" ", SIPDFConf.SIFONT_GOTHIC5N));
      lCell.setHorizontalAlignment(Element.ALIGN_LEFT);
      lCell.setBorder(Rectangle.NO_BORDER);
      lPdfTbl.addCell(lCell);
      document.add(lPdfTbl);
      
      document.resetPageCount();
      document.newPage();
    } catch (Exception e) {
      System.err.println(e.getMessage());
    }
  }
}