<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="com.csc.library.utility.DHMConvert"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.Vector"%>
<%@page import="java.util.*"%>
<%@page import="com.csc.library.report.ReportUDF"%>
<%@page import="javax.servlet.jsp.jstl.sql.Result"%>
<%@page import="java.io.FileOutputStream"%>
<%@page import="com.csc.library.utilities.MyLog"%>
<%@page import="java.io.OutputStream"%>
<%@page import="java.io.ByteArrayOutputStream"%>
<%@page import="java.net.URLDecoder"%>
<%@page import="java.text.DecimalFormat"%>
<%@page import="java.net.URLEncoder"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.text.SimpleDateFormat" %>
<%@page import="java.util.Locale" %>
<%@page import="java.util.Date" %>
<%@page import="java.util.GregorianCalendar" %>
<%@page import="com.csc.library.database.DataSet"%>
<%@page import="com.csc.library.session.InitialInquiry"%>
<%@page import="com.csc.library.session.InitialRecord"%>
<%@page import="com.csc.library.utilities.UProfile"%>
<%@page import="com.csc.library.utilities.CscCalendar"%>
<%@page import="com.csc.library.session.DbInquiry"%>
<%@page import="com.csc.library.session.DbRecord"%>
<%@page import="com.csc.library.utilities.CheckNull"%>
<%@page import="com.csc.library.entry.HelpEntry"%>
<%@page import="com.itextpdf.text.*"%>
<%@page import="com.itextpdf.text.pdf.*"%>
<%@page import="java.io.ByteArrayOutputStream" %>
<%@page import="com.csc.library.session.InitialEnvironment" %>
<%@page import="com.csc.library.database.MyHashMap" %>
<jsp:useBean id="TRRE034_PDF" class="com.csc.library.system.Task" scope="page" />
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8"/>
        <title>Report</title>
    </head>
    <body>
        Not found data
        <%
        TRRE034_PDF.setChannel(request, response);
        HelpEntry screen = (HelpEntry) TRRE034_PDF.process("HelpEntry", "TRRE034_PDF");
        CheckNull chk = new CheckNull();
        DecimalFormat df = new DecimalFormat("#.00");
        MyHashMap myhash = new MyHashMap();
        String crsid = chk.chkNullString(request.getParameter("__crsid"));
        String listTraining = chk.chkNullString(request.getParameter("__trainingidList"));
        String trainList = "'" + listTraining.replaceAll(",","','") + "'";

        screen.setMaxLine(-1);
        screen.inq.setFilter("CRSID ='"+crsid+"'");
        screen.process();

        ByteArrayOutputStream baos = new ByteArrayOutputStream();//72
        Document document = new Document(PageSize.A4, 50, 30, 28, 36);
        float[] sizeColumn = new float[] {};

        PdfWriter.getInstance(document, baos);
        document.open();
        document.addTitle("Document Title");

        BaseFont bf = BaseFont.createFont(application.getRealPath("FONTS/THSarabun.ttf"), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        BaseFont bfHead = BaseFont.createFont(application.getRealPath("FONTS/THSarabun.ttf"), BaseFont.IDENTITY_H, BaseFont.EMBEDDED, true);
        Font font = new Font(bf, 14);
        Font fontbold = new Font(bf, 14, Font.BOLD);
        Font fonthead = new Font(bfHead, 16, Font.BOLD | Font.UNDERLINE);
        Font fontTitle = new Font(bfHead, 16, Font.BOLD);

        // set vlign middle
        Phrase content = new Phrase("Blah blah blah", font);
        Float fontSize = content.getFont().getSize();
        Float capHeight = content.getFont().getBaseFont().getFontDescriptor(BaseFont.CAPHEIGHT, fontSize);

        boolean hasData = false;
        if(screen.getInquiry().recCount() > 0) {
          hasData = true;
          screen.nextRec();
          screen.referLangOff();
					DbInquiry dbinq = null;
					DbInquiry dbtopic = null;
					int i = 0;
          int j = 0;
          try{
            CscCalendar calendar = new CscCalendar();
            SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a", Locale.ENGLISH);
            GregorianCalendar gc= new GregorianCalendar();
						dbinq = (DbInquiry) screen.getInquiry().getCurrentDbRecord().getChild("HTRAINING");
						dbtopic = (DbInquiry) screen.getInquiry().getCurrentDbRecord().getChild("MCOURSEDETAIL");
            dbinq.setFilter("trainingid in("+trainList+")");

            // --------------- Report Header -----------------
            sizeColumn = new float[] {60.0f,40.0f};
            PdfPTable detail = new PdfPTable(2);
            detail.setWidthPercentage(100);
            detail.setWidths(sizeColumn);
						setCellHeight(22f);
						PdfPCell cellDetail;
            PdfPCell cellDetail2;
            PdfPCell advanceCellDetail;
						InitialEnvironment inv = new InitialEnvironment("GLOBAL");
						Image img = null;
						Image img2 = null;
						img = Image.getInstance(inv.getValue("TRAINING_UPLOAD-dir")+"PICTURE/chkbox.png");
						img2 = Image.getInstance(inv.getValue("TRAINING_UPLOAD-dir")+"PICTURE/chkbox1.png");
						cellDetail = new PdfPCell(img, true);
						cellDetail2 = new PdfPCell(img2, true);
						cellDetail.setBorder(Rectangle.NO_BORDER);
						cellDetail.setVerticalAlignment(Element.ALIGN_MIDDLE);
						cellDetail2.setBorder(Rectangle.NO_BORDER);
						cellDetail2.setVerticalAlignment(Element.ALIGN_MIDDLE);

            setPadding(0.5f);
            setPaddingBottom(2f);

            detail.addCell( getCellData("แบบ ฝย/ฝป 2-1", fontTitle, true, "RIGHT", "MIDDLE", 2, 0));
            detail.addCell( getCellData("รายละเอียดเกี่ยวกับหลักสูตรและค่าใช้จ่ายในการฝึกอบรม", fontTitle, true, "CENTER", "MIDDLE", 2, 0));
            detail.addCell( getCellData("ฝึกยกระดับฝีมือแรงงานและฝึกเปลี่ยนสาขาอาชีพ ", fontTitle, true, "RIGHT", "MIDDLE", 1, 0));
            detail.addCell( getCellData(" กรณีเป็นผู้ดําเนินการฝึกเอง", fonthead, true, "LEFT", "MIDDLE", 1, 0));
            detail.addCell( getCellData(" ", fontTitle, true, "CENTER", "MIDDLE", 2, 0));
            document.add(detail);
            // --------------- ข้อ 1 -----------------
            sizeColumn = new float[] {4.5f,29.0f,3.0f,2.8f,1.2f};
            detail = new PdfPTable(5);
            detail.setWidthPercentage(100);
            detail.setWidths(sizeColumn);
            detail.addCell( getCellData("1. ชื่อหลักสูตร ", font, true, "LEFT", "MIDDLE", 1, 0) );
            setPaddingLeft(7.0f);
            detail.addCell( getCellData(screen.getDataLabel("MCOURSE","CRSDESC"), font, true, "LEFT", "MIDDLE", 1, 0, true) );
            setPaddingLeft(0.5f);
            detail.addCell( getCellData("จำนวน", font, true, "center", "MIDDLE", 1, 0) );
            detail.addCell( getCellData(String.valueOf(dbinq.recCount()), font, true, "CENTER", "MIDDLE", 1, 0, true) );
            detail.addCell( getCellData("รุ่น", font, true, "center", "MIDDLE", 1, 0) );
            detail.addCell( getCellData(" ", font, true, "LEFT", "MIDDLE", 5, 0) );
						document.add(detail);
            // --------------- ข้อ 2 -----------------
						sizeColumn = new float[] {1.0f,99.0f};
						detail = new PdfPTable(2);
						detail.setWidthPercentage(100);
						detail.setWidths(sizeColumn);
            detail.addCell( getCellData("2. วัตถุประสงค์ของหลักสูตร ", font, true, "LEFT", "MIDDLE", 2, 0) );
						// --------------- new line -----------------
						//setCellHeight(60f);
            String[] objarr = screen.getDataLabel("objective").split(",");

            for(int cc=0;cc < objarr.length;cc++){
  						detail.addCell( getCellData(" ", font, true, "LEFT", "TOP", 1, 0) );
              setPaddingLeft(7.0f);
              detail.addCell( getCellData(objarr[cc], font, true, "LEFT", "MIDDLE", 1, 0, true) );
            }
            setPaddingLeft(0.5f);
            detail.addCell( getCellData(" ", font, true, "LEFT", "MIDDLE", 2, 0) );
            document.add(detail);
            // --------------- ข้อ 3.1 -----------------
            sizeColumn = new float[] {7.2f,2.5f,24.8f};
            detail = new PdfPTable(3);
            detail.setWidthPercentage(100);
            detail.setWidths(sizeColumn);
						setCellHeight(22f);
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            detail.addCell( getCellData("3. ระยะเวลาในการฝึกอบรม", font, true, "LEFT", "MIDDLE", 1, 0) );
            detail.addCell( getCellData(screen.getDataLabel("MCOURSE","COURSE_HOURS"), font, true, "center", "MIDDLE", 1, 0, true) );
            setPaddingLeft(3.0f);
            detail.addCell( getCellData("ชั่วโมง (ฝึกยกระดับไม่น้อยกว่า 6 ช.ม. , ฝึกเปลี่ยนสาขาอาชีพไม่น้อยกว่า 18 ช.ม.)", font, true, "LEFT", "MIDDLE", 1, 0) );
            setPaddingLeft(0.5f);
            document.add(detail);
            // --------------- ข้อ 3.2 -----------------
            sizeColumn = new float[] {1.2f,1.0f,2.2f,0.5f,7.0f,1.4f,14.1f};
            detail = new PdfPTable(7);
            detail.setWidthPercentage(100);
            detail.setWidths(sizeColumn);
						setCellHeight(22f);
            i=0;
            while(dbinq.next()){
              i++;
							CscCalendar classdatefrm = new CscCalendar(dbinq.getString("classdatefrm"));
							CscCalendar classdateto = new CscCalendar(dbinq.getString("classdateto"));
              detail.addCell( getCellData("รุ่นที่", font, true, "right", "MIDDLE", 1, 0) );
              setPaddingLeft(2.0f);
              detail.addCell( getCellData(String.valueOf(i), font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
              detail.addCell( getCellData("ระหว่างวันที่", font, true, "left", "MIDDLE", 2, 0) );
              detail.addCell( getCellData(classdatefrm.getThaiFullDDMMYYYY(), font, true, "center", "MIDDLE", 1, 0, true) );
              detail.addCell( getCellData("ถึง", font, true, "center", "MIDDLE", 1, 0) );
              setPaddingLeft(7.0f);
              detail.addCell( getCellData(classdateto.getThaiFullDDMMYYYY(), font, true, "left", "MIDDLE", 1, 0, true) );
              setPaddingLeft(0.5f);
            }
            detail.addCell( getCellData(" ", font, true, "center", "MIDDLE", 7, 0) );
            // --------------- ข้อ 4 -----------------
						detail.addCell( getCellData("4. สถานที่ฝึกอบรม ", font, true, "LEFT", "MIDDLE", 8, 0) );
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              i++;
              detail.addCell( getCellData("รุ่นที่", font, true, "right", "MIDDLE", 1, 0) );
              setPaddingLeft(2.0f);
              detail.addCell( getCellData(String.valueOf(i), font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(7.0f);
              detail.addCell( getCellData(dbinq.getString("MTRROOM","roomdesc")+" "+dbinq.getString("MTRLOCATION","locdesc"), font, true, "left", "MIDDLE", 6, 0, true) );
              setPaddingLeft(0.5f);
            }
            detail.addCell( getCellData(" ", font, true, "center", "MIDDLE", 8, 0) );
            document.add(detail);
            // --------------- ข้อ 5 -----------------
            sizeColumn = new float[] {1.0f,0.6f,2.2f,2.0f,1.2f,1.2f,2.5f,1.2f,1.2f,2.5f,6.2f};
            detail = new PdfPTable(11);
            detail.setWidthPercentage(100);
            detail.setWidths(sizeColumn);
            detail.addCell( getCellData("5. จำนวนลูกจ้างที่เข้าอบรม (ไม่เกิน 50 คน ต่อรุ่น)", font, true, "LEFT", "MIDDLE", 13, 0) );
						// --------------- new line -----------------
						dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
							i++;
							detail.addCell( getCellData("รุ่นที่ ", font, true, "right", "MIDDLE", 1, 0) );
              setPaddingLeft(2.0f);
              detail.addCell( getCellData(String.valueOf(i), font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
              detail.addCell( getCellData("จำนวนรวม ", font, true, "center", "MIDDLE", 1, 0) );
							detail.addCell( getCellData(String.valueOf(chk.chkNullStringToInt(dbinq.getString("HTRAINING","TOTALMALE"))+chk.chkNullStringToInt(dbinq.getString("HTRAINING","TOTALFEMALE"))), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(5.0f);
              detail.addCell( getCellData("คน", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
              setPaddingRight(5.0f);
              detail.addCell( getCellData("ชาย", font, true, "right", "MIDDLE", 1, 0) );
              setPaddingRight(0.5f);
              detail.addCell( getCellData(chk.chkNullString(dbinq.getString("HTRAINING","TOTALMALE"),"0"), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(5.0f);
              detail.addCell( getCellData("คน", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
              setPaddingRight(5.0f);
              detail.addCell( getCellData("หญิง", font, true, "right", "MIDDLE", 1, 0) );
              setPaddingRight(0.5f);
              detail.addCell( getCellData(chk.chkNullString(dbinq.getString("HTRAINING","TOTALFEMALE"),"0"), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(5.0f);
              detail.addCell( getCellData("คน", font, true, "LEFT", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }
						detail.addCell( getCellData(" ", font, true, "LEFT", "MIDDLE", 11, 0) );
            document.add(detail);

						// --------------- ข้อ 6 -----------------
						sizeColumn = new float[] {1.2f,0.9f,22.7f};
            detail = new PdfPTable(3);
            detail.setWidthPercentage(100);
            detail.setWidths(sizeColumn);
            setPaddingTop(2f);
            setPaddingBottom(2f);
            detail.addCell( getCellData("6. คุณสมบัติของผู้เข้ารับการฝึกอบรม (ผู้ปฏิบัติ/ผู้บริหาร และคุณสมบัติที่สถานประกอบกิจการกำหนด) ", font, true, "LEFT", "MIDDLE", 3, 0) );
						// --------------- new line -----------------
						dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
							i++;
							detail.addCell( getCellData("รุ่นที่ ", font, true, "right", "MIDDLE", 1, 0) );
              setPaddingLeft(2.0f);
              detail.addCell( getCellData(String.valueOf(i), font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(7.0f);
              detail.addCell( getCellData(dbinq.getString("property"), font, true, "left", "MIDDLE", 1, 0, true) );
              setPaddingLeft(0.5f);
            }
						detail.addCell( getCellData(" ", font, true, "LEFT", "MIDDLE", 3, 0) );
						document.add(detail);

						// --------------- ข้อ 7 -----------------
						sizeColumn = new float[] {0.4f,0.5f,0.5f,2.0f,4.0f,0.6f,3.0f,2.1f,12.9f};
            detail = new PdfPTable(9);
            detail.setWidthPercentage(100);
            detail.setWidths(sizeColumn);
            detail.addCell( getCellData("7. วิทยากร ", font, true, "LEFT", "MIDDLE", 9, 0) );
            String trainnerList = "";
            int count_trainner = 0;
            String sql = "";
//          here
						DbInquiry dbtrainner0 = new InitialInquiry(screen.getUProfile()).getDbInquiry("MTRAINER");
            DataSet ds = new DataSet();
            // --------------- new line วิยากรภายใน-----------------
            sql = "select DISTINCT trainerid from htraintrner where trainingid in("+trainList+") and trainerid in (select trainerid from mtrainer where trtype ='I')";
            ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINTRNER");
            ds.initConnection(screen.getUProfile());
            while(ds.next()){
              count_trainner++;
              trainnerList += trainnerList.equals("")?"'"+ds.getString("trainerid")+"'":",'"+ds.getString("trainerid")+"'";
            }

            detail.addCell( getCellData(" ", font, true, "LEFT", "MIDDLE", 1, 0) );
						detail.addCell( cellDetail );
						detail.addCell( getCellData(" วิทยากรภายใน ", font, true, "LEFT", "TOP", 7, 0) );
            i=0;
            if(count_trainner > 0){
              dbtrainner0.setFilter("trainerid in ("+trainnerList+")");
							dbtrainner0.refresh();
							while(dbtrainner0.next()){
  							i++;
                setPaddingRight(2.0f);
  							detail.addCell( getCellData("("+i+")", font, true, "right", "MIDDLE", 3, 0) );
                setPaddingRight(0.5f);
                setPaddingLeft(7.0f);
  							detail.addCell( getCellData(" "+dbtrainner0.getString("fullname"), font, true, "left", "MIDDLE", 4, 0, true) );
                setPaddingLeft(0.5f);
  							detail.addCell( getCellData(" ตำแหน่ง ", font, true, "center", "MIDDLE", 1, 0) );
                setPaddingLeft(7.0f);
  							detail.addCell( getCellData(dbtrainner0.getString("trposition"), font, true, "left", "MIDDLE", 1, 0, true) );
                setPaddingLeft(0.1f);
              }
            }else{
              for(i=1;i<=2;i++){
                setPaddingRight(2.0f);
								detail.addCell( getCellData("("+i+")", font, true, "right", "MIDDLE", 3, 0) );
                setPaddingRight(0.5f);
                detail.addCell( getCellData(" ", font, true, "left", "MIDDLE", 4, 0, true) );
								detail.addCell( getCellData(" ตำแหน่ง ", font, true, "center", "MIDDLE", 1, 0) );
								detail.addCell( getCellData(" ", font, true, "left", "MIDDLE", 1, 0, true) );
							}
            }

            // --------------- new line วิยากรภายนอก-----------------
            sql = "select DISTINCT trainerid from htraintrner where trainingid in("+trainList+") and trainerid in (select trainerid from mtrainer where trtype ='E')";
            ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINTRNER");
            ds.initConnection(screen.getUProfile());
            count_trainner = 0;
            trainnerList = "";
            while(ds.next()){
              count_trainner++;
              trainnerList += trainnerList.equals("")?"'"+ds.getString("trainerid")+"'":",'"+ds.getString("trainerid")+"'";
            }

            detail.addCell( getCellData(" ", font, true, "LEFT", "MIDDLE", 1, 0) );
						detail.addCell( cellDetail );
						detail.addCell( getCellData(" วิทยากรภายนอก ", font, true, "LEFT", "TOP", 7, 0) );
            i=0;
            if(count_trainner > 0){
              dbtrainner0.setFilter("trainerid in ("+trainnerList+")");
							dbtrainner0.refresh();
							while(dbtrainner0.next()){
  							i++;
                setPaddingRight(2.0f);
  							detail.addCell( getCellData("("+i+")", font, true, "right", "MIDDLE", 3, 0) );
                setPaddingRight(0.5f);
                setPaddingLeft(7.0f);
  							detail.addCell( getCellData(" "+dbtrainner0.getString("fullname"), font, true, "left", "MIDDLE", 4, 0, true) );
                setPaddingLeft(0.5f);
  							detail.addCell( getCellData(" ตำแหน่ง ", font, true, "center", "MIDDLE", 1, 0) );
                setPaddingLeft(7.0f);
  							detail.addCell( getCellData(dbtrainner0.getString("trposition"), font, true, "left", "MIDDLE", 1, 0, true) );
                setPaddingLeft(0.5f);
              }
            }else{
              for(i=1;i<=2;i++){
                setPaddingRight(2.0f);
								detail.addCell( getCellData("("+i+")", font, true, "right", "MIDDLE", 3, 0) );
                setPaddingRight(0.5f);
                detail.addCell( getCellData(" ", font, true, "left", "MIDDLE", 4, 0, true) );
								detail.addCell( getCellData(" ตำแหน่ง ", font, true, "center", "MIDDLE", 1, 0) );
								detail.addCell( getCellData(" ", font, true, "left", "MIDDLE", 1, 0, true) );
							}
            }
						detail.addCell( getCellData(" ", font, true, "LEFT", "MIDDLE", 9, 0) );
            document.add(detail);

						// --------------- ข้อ 8 -----------------
            sizeColumn = new float[] {1.1f,11.0f,2.8f,18.0f};
            detail = new PdfPTable(4);
            detail.setWidthPercentage(100);
            detail.setWidths(sizeColumn);
            detail.addCell( getCellData("8. เจ้าหน้าที่ผู้จัดการฝึกอบรม ", font, true, "LEFT", "MIDDLE", 9, 0) );
						// --------------- new line -----------------
						DbInquiry dbtrainres = new InitialInquiry(screen.getUProfile()).getDbInquiry("HTRAINRESP");
						DbInquiry dbempres = new InitialInquiry(screen.getUProfile()).getDbInquiry("MEMPLOYEE");
						DbInquiry dbposition = new InitialInquiry(screen.getUProfile()).getDbInquiry("MPOSITION");
						dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
						i=0;
            while(dbinq.next()){
							dbtrainres.setFilter("trainingid = '"+dbinq.getString("trainingid")+"'");
							dbtrainres.refresh();
							while(dbtrainres.next()){
								dbempres.setFilter("employeeid = '"+dbtrainres.getString("respid")+"'");
								dbempres.refresh();
								dbempres.putChild(dbposition);
								dbempres.next();
								i++;
								detail.addCell( getCellData("("+i+")", font, true, "right", "MIDDLE", 1, 0) );
                setPaddingLeft(7.0f);
								detail.addCell( getCellData(" "+dbempres.getString("fullname"), font, true, "left", "MIDDLE", 1, 0, true) );
                setPaddingLeft(0.5f);
								detail.addCell( getCellData(" ตำแหน่ง ", font, true, "center", "MIDDLE", 1, 0) );
                setPaddingLeft(7.0f);
								detail.addCell( getCellData(dbempres.getString("mposition","tdesc"), font, true, "left", "MIDDLE", 1, 0, true) );
                setPaddingLeft(0.5f);
							}
						}
						if(dbtrainres.recCount() == 0){
							for(i=1;i<=2;i++){
								detail.addCell( getCellData("("+i+")", font, true, "right", "MIDDLE", 1, 0) );
								detail.addCell( getCellData(" ", font, true, "left", "MIDDLE", 1, 0) );
								detail.addCell( getCellData(" ตำแหน่ง ", font, true, "center", "MIDDLE", 1, 0) );
								detail.addCell( getCellData(" ", font, true, "left", "MIDDLE", 1, 0) );
							}
						}

						detail.addCell( getCellData("  ", font, true, "left", "MIDDLE", 4, 0) );
						document.add(detail);

						// --------------- ข้อ 9 -----------------
						sizeColumn = new float[] {0.3f,0.9f,6.0f,0.8f,0.7f,0.5f};
            detail = new PdfPTable(6);
            detail.setWidthPercentage(100);
            detail.setWidths(sizeColumn);
            detail.addCell( getCellData("9. หัวข้อและเนื้อหาวิชา ", font, true, "LEFT", "MIDDLE", 7, 0) );

						// --------------- new line -----------------
						dbtopic.refresh();
						i=0;
						while(dbtopic.next()){
							i++;
							detail.addCell( getCellData("("+i+")", font, true, "right", "MIDDLE", 1, 0) );
              setPaddingLeft(7.0f);
							detail.addCell( getCellData("หัวข้อวิชา", font, true, "left", "MIDDLE", 1, 0) );
							detail.addCell( getCellData(dbtopic.getString("TDESC"), font, true, "left", "MIDDLE", 1, 0, true) );
              setPaddingLeft(0.5f);
							detail.addCell( getCellData("ระยะเวลา", font, true, "center", "MIDDLE", 1, 0) );
              detail.addCell( getCellData(dbtopic.getString("HOUR"), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(2.0f);
							detail.addCell( getCellData("ชั่วโมง", font, true, "left", "MIDDLE", 1, 0)   );
							// --------------- new line -----------------
							detail.addCell( getCellData("", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(7.0f);
							detail.addCell( getCellData("เนื้อหาวิชา", font, true, "left", "MIDDLE", 1, 0) );
							detail.addCell( getCellData(dbtopic.getString("TDETAIL"), font, true, "left", "MIDDLE", 4, 0, true) );
              setPaddingLeft(0.5f);
						}
						if(dbtopic.recCount() == 0){
							for(i=1;i<=2;i++){
								detail.addCell( getCellData("("+i+")", font, true, "right", "MIDDLE", 1, 0) );
                setPaddingLeft(7.0f);
								detail.addCell( getCellData("หัวข้อวิชา", font, true, "left", "MIDDLE", 1, 0) );
								detail.addCell( getCellData(" ", font, true, "left", "MIDDLE", 1, 0, true) );
                setPaddingLeft(0.5f);
								detail.addCell( getCellData("ระยะเวลา", font, true, "center", "MIDDLE", 1, 0) );
                detail.addCell( getCellData(" ", font, true, "center", "MIDDLE", 1, 0, true) );
                setPaddingLeft(2.0f);
								detail.addCell( getCellData("ชั่วโมง", font, true, "left", "MIDDLE", 1, 0) );
								// --------------- new line -----------------
								detail.addCell( getCellData("", font, true, "left", "MIDDLE", 1, 0) );
                setPaddingLeft(7.0f);
								detail.addCell( getCellData("เนื้อหาวิชา", font, true, "left", "TOP", 1, 0) );
                setPaddingLeft(0.5f);
								detail.addCell( getCellData(" ", font, true, "left", "TOP", 4, 0, true) );
							}
						}
            detail.addCell( getCellData("", font, true, "left", "MIDDLE", 6, 0) );
						document.add(detail);

						// --------------- ข้อ 10 -----------------
						sizeColumn = new float[] {6.5f,6.5f,28.0f,59.0f};
            detail = new PdfPTable(4);
            detail.setWidthPercentage(100);
            detail.setWidths(sizeColumn);
						setCellHeight(22f);
            detail.addCell( getCellData("10. ค่าใช้จ่ายในการฝึกอบรม (กรณีค่าใช้จ่ายแต่ละรุ่นไม่เท่ากันให้แยกรายละเอียดค่าใช้จ่ายต่อรุ่น) ", font, true, "LEFT", "MIDDLE", 16, 0) );

						double expense = 0.00;
						double totalexp = 0.00;
						j=0;

            // --------------- new line 10.1-----------------
            setCellHeight(37f);
            setPaddingLeft(7.3f);
            detail.addCell( getCellData("10.1", font, true, "left", "TOP", 1, 0) );
            setPaddingLeft(0.5f);
            detail.addCell( getCellData("เงินค่าตอบแทนวิทยากรเท่าที่จ่ายจริง หรือ ตอบแทนเป็นของขวัญสำหรับวิทยากรมูลค่า ไม่เกินห้าพันบาท / คน / รุ่น อย่างใดอย่างหนึ่ง", font, true, "left", "TOP", 4, 0) );
            setCellHeight(22f);
            // --------------- new line -----------------
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              expense = 0.00;
              i++;
              sql = "select expgrpid,sum(used) expens from HTRAINEXP where trainingid = '"+dbinq.getString("trainingid")+"'"+
                    "and expid in (select expid from MEXPENSE where expgrpid in (select expgrpid from MEXPGRP where type='1'))"+
                    "group by expgrpid ";
              ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINEXP");
              ds.initConnection(screen.getUProfile());
              while(ds.next()){
                expense += chk.chkNullStringToDouble(ds.getString("expens")) ;
              }
              myhash.putToSum(dbinq.getString("trainingid"),expense);
              detail.addCell( getCellData("", font, true, "right", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(expense==0.00?" ":df.format(expense), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(4.0f);
              detail.addCell( getCellData("บาท", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }

            // --------------- new line 10.2-----------------
            setPaddingLeft(7.3f);
            setCellHeight(10f);
            detail.addCell( getCellData(" ", font, true, "left", "TOP", 5, 0) );
            setCellHeight(22f);
            detail.addCell( getCellData("10.2", font, true, "left", "TOP", 1, 0) );
            setPaddingLeft(0.5f);
            detail.addCell( getCellData("ค่าลิขสิทธิ์ของหลักสูตรที่ใช้ในการฝึกอบรม", font, true, "left", "TOP", 4, 0) );
            // --------------- new line -----------------
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              expense = 0.00;
              i++;
              sql = "select expgrpid,sum(used) expens from HTRAINEXP where trainingid = '"+dbinq.getString("trainingid")+"'"+
                    "and expid in (select expid from MEXPENSE where expgrpid in (select expgrpid from MEXPGRP where type='2'))"+
                    "group by expgrpid ";
              ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINEXP");
              ds.initConnection(screen.getUProfile());
              while(ds.next()){
                expense += chk.chkNullStringToDouble(ds.getString("expens")) ;
              }
              myhash.putToSum(dbinq.getString("trainingid"),expense);
              detail.addCell( getCellData("", font, true, "right", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(expense==0.00?" ":df.format(expense), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(4.0f);
              detail.addCell( getCellData("บาท", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }

            // --------------- new line 10.3-----------------
            setPaddingLeft(7.3f);
            setCellHeight(10f);
            detail.addCell( getCellData(" ", font, true, "left", "TOP", 5, 0) );
            setCellHeight(22f);
            detail.addCell( getCellData("10.3", font, true, "left", "TOP", 1, 0) );
            setPaddingLeft(0.5f);
            detail.addCell( getCellData("ค่าจ้างล่ามระหว่างการฝึกอบรม", font, true, "left", "TOP", 4, 0) );
            // --------------- new line -----------------
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              expense = 0.00;
              i++;
              sql = "select expgrpid,sum(used) expens from HTRAINEXP where trainingid = '"+dbinq.getString("trainingid")+"'"+
                    "and expid in (select expid from MEXPENSE where expgrpid in (select expgrpid from MEXPGRP where type='3'))"+
                    "group by expgrpid ";
              ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINEXP");
              ds.initConnection(screen.getUProfile());
              while(ds.next()){
                expense += chk.chkNullStringToDouble(ds.getString("expens")) ;
              }
              myhash.putToSum(dbinq.getString("trainingid"),expense);
              detail.addCell( getCellData("", font, true, "right", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(expense==0.00?" ":df.format(expense), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(4.0f);
              detail.addCell( getCellData("บาท", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }

            // --------------- new line 10.4-----------------
            setPaddingLeft(7.3f);
            setCellHeight(10f);
            detail.addCell( getCellData(" ", font, true, "left", "TOP", 5, 0) );
            setCellHeight(22f);
            detail.addCell( getCellData("10.4", font, true, "left", "TOP", 1, 0) );
            setPaddingLeft(0.5f);
            detail.addCell( getCellData("ค่าแปลเอกสารประกอบการฝึกอบรม หรือตำรา", font, true, "left", "TOP", 4, 0) );
            // --------------- new line -----------------
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              expense = 0.00;
              i++;
              sql = "select expgrpid,sum(used) expens from HTRAINEXP where trainingid = '"+dbinq.getString("trainingid")+"'"+
                    "and expid in (select expid from MEXPENSE where expgrpid in (select expgrpid from MEXPGRP where type='4'))"+
                    "group by expgrpid ";
              ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINEXP");
              ds.initConnection(screen.getUProfile());
              while(ds.next()){
                expense += chk.chkNullStringToDouble(ds.getString("expens")) ;
              }
              myhash.putToSum(dbinq.getString("trainingid"),expense);
              detail.addCell( getCellData("", font, true, "right", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(expense==0.00?" ":df.format(expense), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(4.0f);
              detail.addCell( getCellData("บาท", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }

            // --------------- new line 10.5-----------------
            setPaddingLeft(7.3f);
            setCellHeight(10f);
            detail.addCell( getCellData(" ", font, true, "left", "TOP", 5, 0) );
            setCellHeight(22f);
            detail.addCell( getCellData("10.5", font, true, "left", "TOP", 1, 0) );
            setPaddingLeft(0.5f);
            detail.addCell( getCellData("ค่าเอกสารประกอบการฝึกอบรม หรือตำรา เป็นค่าจ้างจัดทำหรือซื้อมาเป็นเล่ม", font, true, "left", "TOP", 4, 0) );
            // --------------- new line -----------------
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              expense = 0.00;
              i++;
              sql = "select expgrpid,sum(used) expens from HTRAINEXP where trainingid = '"+dbinq.getString("trainingid")+"'"+
                    "and expid in (select expid from MEXPENSE where expgrpid in (select expgrpid from MEXPGRP where type='5'))"+
                    "group by expgrpid ";
              ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINEXP");
              ds.initConnection(screen.getUProfile());
              while(ds.next()){
                expense += chk.chkNullStringToDouble(ds.getString("expens")) ;
              }
              myhash.putToSum(dbinq.getString("trainingid"),expense);
              detail.addCell( getCellData("", font, true, "right", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(expense==0.00?" ":df.format(expense), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(4.0f);
              detail.addCell( getCellData("บาท", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }

            // --------------- new line 10.6-----------------
            setPaddingLeft(7.3f);
            setCellHeight(10f);
            detail.addCell( getCellData(" ", font, true, "left", "TOP", 5, 0) );
            setCellHeight(22f);
            detail.addCell( getCellData("10.6", font, true, "left", "TOP", 1, 0) );
            setPaddingLeft(0.5f);
            detail.addCell( getCellData("ค่าจ้างถ่ายเอกสารประกอบการฝึกอบรม", font, true, "left", "TOP", 4, 0) );
            // --------------- new line -----------------
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              expense = 0.00;
              i++;
              sql = "select expgrpid,sum(used) expens from HTRAINEXP where trainingid = '"+dbinq.getString("trainingid")+"'"+
                    "and expid in (select expid from MEXPENSE where expgrpid in (select expgrpid from MEXPGRP where type='6'))"+
                    "group by expgrpid ";
              ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINEXP");
              ds.initConnection(screen.getUProfile());
              while(ds.next()){
                expense += chk.chkNullStringToDouble(ds.getString("expens")) ;
              }
              myhash.putToSum(dbinq.getString("trainingid"),expense);
              detail.addCell( getCellData("", font, true, "right", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(expense==0.00?" ":df.format(expense), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(4.0f);
              detail.addCell( getCellData("บาท", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }

            // --------------- new line 10.7-----------------
            setPaddingLeft(7.3f);
            setCellHeight(10f);
            detail.addCell( getCellData(" ", font, true, "left", "TOP", 5, 0) );
            setCellHeight(22f);
            detail.addCell( getCellData("10.7", font, true, "left", "TOP", 1, 0) );
            setPaddingLeft(0.5f);
            detail.addCell( getCellData("ค่าถ่าย ล้าง อัดและขยายรูปภาพ ค่าบันทึกภาพและเสียงที่เกี่ยวข้องกับการฝึกอบรม", font, true, "left", "TOP", 4, 0) );
            // --------------- new line -----------------
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              expense = 0.00;
              i++;
              sql = "select expgrpid,sum(used) expens from HTRAINEXP where trainingid = '"+dbinq.getString("trainingid")+"'"+
                    "and expid in (select expid from MEXPENSE where expgrpid in (select expgrpid from MEXPGRP where type='7'))"+
                    "group by expgrpid ";
              ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINEXP");
              ds.initConnection(screen.getUProfile());
              while(ds.next()){
                expense += chk.chkNullStringToDouble(ds.getString("expens")) ;
              }
              myhash.putToSum(dbinq.getString("trainingid"),expense);
              detail.addCell( getCellData("", font, true, "right", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(expense==0.00?" ":df.format(expense), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(4.0f);
              detail.addCell( getCellData("บาท", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }

            // --------------- new line 10.8-----------------
            setPaddingLeft(7.3f);
            setCellHeight(10f);
            detail.addCell( getCellData(" ", font, true, "left", "TOP", 5, 0) );
            setCellHeight(52f);
            detail.addCell( getCellData("10.8", font, true, "left", "TOP", 1, 0) );
            setPaddingLeft(0.5f);
            detail.addCell( getCellData("ค่าจัดทำหรือค่าเช่าสื่อการฝึกอบรม ได้แก่สื่อในลักษณะแผ่นโปร่งใส เทปเสียง เทปวีดีโอ ซีดี วีซีดี ดีวีดี ซีดี-รอม แผ่นภาพ สไลด์ และรวมถึงชุดทดลอง ชุดสาธิต หุ่นจำลองที่ไม่มีลักษณะคงสภาพเข้าข่ายเป็นการลงทุน ในกรณีเช่าสื่อการฝึกอบรม จะต้องมีระยะเวลาเช่าที่แน่นอนและสอดคล้องกับหลักสูตรที่จัดฝึกอบรม", font, true, "left", "TOP", 4, 0) );
            setCellHeight(22f);
            // --------------- new line -----------------
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              expense = 0.00;
              i++;
              sql = "select expgrpid,sum(used) expens from HTRAINEXP where trainingid = '"+dbinq.getString("trainingid")+"'"+
                    "and expid in (select expid from MEXPENSE where expgrpid in (select expgrpid from MEXPGRP where type='8'))"+
                    "group by expgrpid ";
              ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINEXP");
              ds.initConnection(screen.getUProfile());
              while(ds.next()){
                expense += chk.chkNullStringToDouble(ds.getString("expens")) ;
              }
              myhash.putToSum(dbinq.getString("trainingid"),expense);
              detail.addCell( getCellData("", font, true, "right", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(expense==0.00?" ":df.format(expense), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(4.0f);
              detail.addCell( getCellData("บาท", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }

            // --------------- new line 10.9-----------------
            setPaddingLeft(7.3f);
            setCellHeight(10f);
            detail.addCell( getCellData(" ", font, true, "left", "TOP", 5, 0) );
            setCellHeight(52f);
            detail.addCell( getCellData("10.9", font, true, "left", "TOP", 1, 0) );
            setPaddingLeft(0.5f);
            detail.addCell( getCellData("ค่าวัสดุ เครื่องมือต่างๆ ที่จะใช้ในการฝึกอบรมฝีมือแรงงานจะต้องมีลักษณะการใช้สอดคล้องกลับเนื้อหาวิชาในหลักสูตรนั้นๆ ทั้งนี้วัสดุ เครื่องมือ ดังกล่าวจะต้องไม่ปะปนกับที่ใช้ในการประกอบกิจการตามปกติของผู้ขอรับความเห็นชอบโดยจะต้องระบุรายการ จำนวนและราคาวัดสุ เครื่องมือนั้นให้ชัดเจน", font, true, "left", "TOP", 4, 0) );
            setCellHeight(22f);
            // --------------- new line -----------------
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              expense = 0.00;
              i++;
              sql = "select expgrpid,sum(used) expens from HTRAINEXP where trainingid = '"+dbinq.getString("trainingid")+"'"+
                    "and expid in (select expid from MEXPENSE where expgrpid in (select expgrpid from MEXPGRP where type='9'))"+
                    "group by expgrpid ";
              ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINEXP");
              ds.initConnection(screen.getUProfile());
              while(ds.next()){
                expense += chk.chkNullStringToDouble(ds.getString("expens")) ;
              }
              myhash.putToSum(dbinq.getString("trainingid"),expense);
              detail.addCell( getCellData("", font, true, "right", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(expense==0.00?" ":df.format(expense), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(4.0f);
              detail.addCell( getCellData("บาท", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }

            // --------------- new line 10.10-----------------
            setPaddingLeft(7.3f);
            setCellHeight(10f);
            detail.addCell( getCellData(" ", font, true, "left", "TOP", 5, 0) );
            setCellHeight(22f);
            detail.addCell( getCellData("10.10", font, true, "left", "TOP", 1, 0) );
            setPaddingLeft(0.5f);
            detail.addCell( getCellData("ค่าเช่าเครื่องมือ เครื่องจักรและอุปกรณ์ที่ใช้ในการฝึกอบรม ต้องมีระยะเวลาเช่าที่แน่นอนและสอดคล้องกับหลักสูตรที่จัดฝึกอบรม", font, true, "left", "TOP", 4, 0) );
            // --------------- new line -----------------
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              expense = 0.00;
              i++;
              sql = "select expgrpid,sum(used) expens from HTRAINEXP where trainingid = '"+dbinq.getString("trainingid")+"'"+
                    "and expid in (select expid from MEXPENSE where expgrpid in (select expgrpid from MEXPGRP where type='10'))"+
                    "group by expgrpid ";
              ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINEXP");
              ds.initConnection(screen.getUProfile());
              while(ds.next()){
                expense += chk.chkNullStringToDouble(ds.getString("expens")) ;
              }
              myhash.putToSum(dbinq.getString("trainingid"),expense);
              detail.addCell( getCellData("", font, true, "right", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(expense==0.00?" ":df.format(expense), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(4.0f);
              detail.addCell( getCellData("บาท", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }

            // --------------- new line 10.11-----------------
            setPaddingLeft(7.3f);
            setCellHeight(10f);
            detail.addCell( getCellData(" ", font, true, "left", "TOP", 5, 0) );
            setCellHeight(22f);
            detail.addCell( getCellData("10.11", font, true, "left", "TOP", 1, 0) );
            setPaddingLeft(0.5f);
            detail.addCell( getCellData("ค่าเช่าสถานที่จัดการฝึกอบรม", font, true, "left", "TOP", 4, 0) );
            // --------------- new line -----------------
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              expense = 0.00;
              i++;
              sql = "select expgrpid,sum(used) expens from HTRAINEXP where trainingid = '"+dbinq.getString("trainingid")+"'"+
                    "and expid in (select expid from MEXPENSE where expgrpid in (select expgrpid from MEXPGRP where type='11'))"+
                    "group by expgrpid ";
              ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINEXP");
              ds.initConnection(screen.getUProfile());
              while(ds.next()){
                expense += chk.chkNullStringToDouble(ds.getString("expens")) ;
              }
              myhash.putToSum(dbinq.getString("trainingid"),expense);
              detail.addCell( getCellData("", font, true, "right", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(expense==0.00?" ":df.format(expense), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(4.0f);
              detail.addCell( getCellData("บาท", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }

            // --------------- new line 10.12-----------------
            setPaddingLeft(7.3f);
            setCellHeight(5f);
            detail.addCell( getCellData(" ", font, true, "left", "TOP", 5, 0) );
            setCellHeight(22f);
            detail.addCell( getCellData("10.12", font, true, "left", "BOTTOM", 1, 0) );
            setPaddingLeft(0.5f);
            detail.addCell( getCellData("ค่าเช่าที่พัก ค่าอาหาร ค่าเครื่องดื่มและอาหารว่างสำหรับผู้รับการฝึกอบรม เจ้าหน้าที่ประสานการฝึกอบรมและวิทยากร", font, true, "left", "BOTTOM", 4, 0) );
            // --------------- new line -----------------
            setCellHeight(20f);
            detail.addCell( getCellData(" ", font, true, "left", "TOP", 1, 0) );
            detail.addCell( getCellData("และวิทยากรระหว่างฝึกอบรม ยกเว้นเครื่องดื่มที่มีแอลกอฮอล์", font, true, "left", "TOP", 4, 0) );
            //detail.addCell( getCellData("ยกเว้นเครื่องดื่มที่มีแอลกอฮอล์", fontbold, true, "left", "TOP", 2, 0) );
            setCellHeight(22f);
            // --------------- new line -----------------
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              expense = 0.00;
              i++;
              sql = "select expgrpid,sum(used) expens from HTRAINEXP where trainingid = '"+dbinq.getString("trainingid")+"'"+
                    "and expid in (select expid from MEXPENSE where expgrpid in (select expgrpid from MEXPGRP where type='12'))"+
                    "group by expgrpid ";
              ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINEXP");
              ds.initConnection(screen.getUProfile());
              while(ds.next()){
                expense += chk.chkNullStringToDouble(ds.getString("expens")) ;
              }
              myhash.putToSum(dbinq.getString("trainingid"),expense);
              detail.addCell( getCellData("", font, true, "right", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(expense==0.00?" ":df.format(expense), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(4.0f);
              detail.addCell( getCellData("บาท", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }

            // --------------- new line 10.13-----------------
            setPaddingLeft(7.3f);
            setCellHeight(10f);
            detail.addCell( getCellData(" ", font, true, "left", "TOP", 5, 0) );
            setCellHeight(22f);
            detail.addCell( getCellData("10.13", font, true, "left", "TOP", 1, 0) );
            setPaddingLeft(0.5f);
            detail.addCell( getCellData("ค่าพาหนะเดินทางข้ามจังหวัดไป-กลับ ภายในประเทศเพื่อเข้ารับการฝึกอบรมไม่เกินสองเที่ยว ยกเว้นค่าเครื่องบิน", font, true, "left", "TOP", 4, 0) );
            // --------------- new line -----------------
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              expense = 0.00;
              i++;
              sql = "select expgrpid,sum(used) expens from HTRAINEXP where trainingid = '"+dbinq.getString("trainingid")+"'"+
                    "and expid in (select expid from MEXPENSE where expgrpid in (select expgrpid from MEXPGRP where type='13'))"+
                    "group by expgrpid ";
              ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINEXP");
              ds.initConnection(screen.getUProfile());
              while(ds.next()){
                expense += chk.chkNullStringToDouble(ds.getString("expens")) ;
              }
              myhash.putToSum(dbinq.getString("trainingid"),expense);
              detail.addCell( getCellData("", font, true, "right", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(expense==0.00?" ":df.format(expense), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(4.0f);
              detail.addCell( getCellData("บาท", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }

            // --------------- new line 10.14-----------------
            setPaddingLeft(7.3f);
            setCellHeight(10f);
            detail.addCell( getCellData(" ", font, true, "left", "TOP", 5, 0) );
            setCellHeight(22f);
            detail.addCell( getCellData("10.14", font, true, "left", "TOP", 1, 0) );
            setPaddingLeft(0.5f);
            detail.addCell( getCellData("ค่าจ้างเหมาพาหนะ รับ-ส่ง ผู้รับการฝึกอบรม เจ้าหน้าที่ประสานการฝึกอบรม และวิทยากรระหว่างฝึกอบรม", font, true, "left", "TOP", 4, 0) );
            // --------------- new line -----------------
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              expense = 0.00;
              i++;
              sql = "select expgrpid,sum(used) expens from HTRAINEXP where trainingid = '"+dbinq.getString("trainingid")+"'"+
                    "and expid in (select expid from MEXPENSE where expgrpid in (select expgrpid from MEXPGRP where type='14'))"+
                    "group by expgrpid ";
              ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINEXP");
              ds.initConnection(screen.getUProfile());
              while(ds.next()){
                expense += chk.chkNullStringToDouble(ds.getString("expens")) ;
              }
              myhash.putToSum(dbinq.getString("trainingid"),expense);
              detail.addCell( getCellData("", font, true, "right", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(expense==0.00?" ":df.format(expense), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(4.0f);
              detail.addCell( getCellData("บาท", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }

            // --------------- new line 10.15-----------------
            setPaddingLeft(7.3f);
            setCellHeight(10f);
            detail.addCell( getCellData(" ", font, true, "left", "TOP", 5, 0) );
            setCellHeight(22f);
            detail.addCell( getCellData("10.15", font, true, "left", "TOP", 1, 0) );
            setPaddingLeft(0.5f);
            detail.addCell( getCellData("ค่าจ้างเหมาพาหนะไปดูงานที่กำหนดไว้ในหลักสูตรภายในประเทศ ยกเว้นค่าแท็กซี่และค่าเครื่องบิน", font, true, "left", "TOP", 4, 0) );
            // --------------- new line -----------------
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              expense = 0.00;
              i++;
              sql = "select expgrpid,sum(used) expens from HTRAINEXP where trainingid = '"+dbinq.getString("trainingid")+"'"+
                    "and expid in (select expid from MEXPENSE where expgrpid in (select expgrpid from MEXPGRP where type='15'))"+
                    "group by expgrpid ";
              ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINEXP");
              ds.initConnection(screen.getUProfile());
              while(ds.next()){
                expense += chk.chkNullStringToDouble(ds.getString("expens")) ;
              }
              myhash.putToSum(dbinq.getString("trainingid"),expense);
              detail.addCell( getCellData("", font, true, "right", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(expense==0.00?" ":df.format(expense), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(4.0f);
              detail.addCell( getCellData("บาท", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }

            // --------------- new line 10.16-----------------
            setPaddingLeft(7.3f);
            setCellHeight(10f);
            detail.addCell( getCellData(" ", font, true, "left", "TOP", 5, 0) );
            setCellHeight(22f);
            detail.addCell( getCellData("10.16", font, true, "left", "TOP", 1, 0) );
            setPaddingLeft(0.5f);
            detail.addCell( getCellData("ค่าพาหนะเดินทางภายในประเทศของวิทยากร", font, true, "left", "TOP", 4, 0) );
            // --------------- new line -----------------
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              expense = 0.00;
              i++;
              sql = "select expgrpid,sum(used) expens from HTRAINEXP where trainingid = '"+dbinq.getString("trainingid")+"'"+
                    "and expid in (select expid from MEXPENSE where expgrpid in (select expgrpid from MEXPGRP where type='16'))"+
                    "group by expgrpid ";
              ds.setInfo(sql,screen.getUProfile().get("dbname"),"HTRAINEXP");
              ds.initConnection(screen.getUProfile());
              while(ds.next()){
                expense += chk.chkNullStringToDouble(ds.getString("expens")) ;
              }
              myhash.putToSum(dbinq.getString("trainingid"),expense);
              detail.addCell( getCellData("", font, true, "right", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(expense==0.00?" ":df.format(expense), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(4.0f);
              detail.addCell( getCellData("บาท", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }
            document.add(detail);

            sizeColumn = new float[] {45.0f,17.0f,7.5f,20.5f,10.0f};
            detail = new PdfPTable(5);
            detail.setWidthPercentage(100);
            detail.setWidths(sizeColumn);
						// --------------- new line 10total -----------------
            dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
            i=0;
            while(dbinq.next()){
              i++;
              totalexp = chk.chkNullStringToDouble(myhash.getString(dbinq.getString("trainingid")));
  						detail.addCell( getCellData("", font, true, "right", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(i==1?"รวมค่าใช้จ่ายทั้งหมด":"", font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
  						detail.addCell( getCellData(totalexp==0.0?"":df.format(totalexp), font, true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(7.0f);
  						detail.addCell( getCellData("บาท", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
            }
            detail.addCell( getCellData("", font, true, "left", "MIDDLE", 5, 0) );
						document.add(detail);

						// --------------- ข้อ 11 -----------------
						sizeColumn = new float[] {17.0f,7.5f,20.5f,55.0f};
            detail = new PdfPTable(4);
            detail.setWidthPercentage(100);
            detail.setWidths(sizeColumn);
						// --------------- new line -----------------
						dbinq.setOrderBy("classdatefrm");
            dbinq.refresh();
						int totaltrainee = 0;
            i=0;
            while(dbinq.next()){
							i++;
							totalexp = chk.chkNullStringToDouble(myhash.getString(dbinq.getString("trainingid")));
							totaltrainee = chk.chkNullStringToInt(dbinq.getString("HTRAINING","TOTALMALE"))+chk.chkNullStringToInt(dbinq.getString("HTRAINING","TOTALFEMALE"));

							detail.addCell( getCellData(i==1?"11. ค่าใช้จ่ายคนละ ":"", font, true, "left", "MIDDLE", 1, 0) );
							detail.addCell( getCellData("รุ่นที่ "+i, font, true, "left", "MIDDLE", 1, 0) );
							detail.addCell( getCellData(String.valueOf(totaltrainee==0?"":df.format(totalexp/totaltrainee)), font,  true, "center", "MIDDLE", 1, 0, true) );
              setPaddingLeft(7.0f);
							detail.addCell( getCellData("บาท/รุ่น", font, true, "left", "MIDDLE", 1, 0) );
              setPaddingLeft(0.5f);
						}
						detail.addCell( getCellData(" ", font, true, "LEFT", "MIDDLE", 4, 0) );
						document.add(detail);

						// --------------- ข้อ 12 -----------------
						sizeColumn = new float[] {4.3f,0.4f,0.8f,0.4f,1.0f,10.0f};
            detail = new PdfPTable(6);
            detail.setWidthPercentage(100);
            detail.setWidths(sizeColumn);
            detail.addCell( getCellData("12. หนังสือรับรองวุฒิบัตร ", font, true, "LEFT", "TOP", 1, 0) );
						detail.addCell( cellDetail );
						detail.addCell( getCellData(" มี ", font, true, "center", "TOP", 1, 0) );
						detail.addCell( cellDetail );
						detail.addCell( getCellData(" ไม่มี ", font, true, "center", "TOP", 1, 0) );
						detail.addCell( getCellData(" ", font, true, "center", "TOP", 1, 0) );

						detail.addCell( getCellData(" ", font, true, "center", "TOP", 6, 0) );
						detail.addCell( getCellData(" ", font, true, "center", "TOP", 6, 0) );
						document.add(detail);

						// --------------- หมายเหตุ -----------------
						sizeColumn = new float[] {0.7f,0.3f,7.0f};
            detail = new PdfPTable(3);
            detail.setWidthPercentage(100);
						setCellHeight(52f);
            detail.setWidths(sizeColumn);
						detail.addCell(getCellData("หมายเหตุ", font, true, "CENTER", "TOP", 1, 0));
						detail.addCell(getCellData("1.", font, true, "CENTER", "TOP", 1, 0));
						detail.addCell(getCellData("กรณีหลักฐานค่าใช้จ่ายที่ออกโดยร้้านค้า หรือนิติบุคคล ได้แก่ใบเสร็จรับเงินหรือใบกำกับภาษีที่มีรายการถูกต้องสมบูรณ์ พร้อมระบุชื่อหลักสูตร / รุ่น / วันที่อบรม / จำนวนเงินให้ชัดเจน (กรณีใบเสร็จรับเงินของโรงแรมให้แนบใบแสดงรายละเอียด ค่าใช้จ่ายของค่าที่พักและอาหารประกอบด้วย)", font, true, "LEFT", "TOP", 1, 0));

						// --------------- New line -----------------
						setCellHeight(35f);
						detail.addCell(getCellData("", font, true, "CENTER", "TOP", 1, 0));
						detail.addCell(getCellData("2.", font, true, "CENTER", "TOP", 1, 0));
						detail.addCell(getCellData("กรณีใบสำคัญรับเงินที่ให้บุคคลเป็นผู้รับเงินในการจ้างทำของหรือเป็นค่าตอบแทน เช่น ค่าตอบแทนวิทยากร ค่าจ้างทำอาหาร พร้อมแนบสำเนาบัตรประจำตัวประชาชนของผู้รับเงิน", font, true, "LEFT", "TOP", 1, 0));

						// --------------- New line -----------------
						setCellHeight(22f);
						detail.addCell(getCellData("", font, true, "CENTER", "TOP", 1, 0));
						detail.addCell(getCellData("3.", font, true, "CENTER", "TOP", 1, 0));
						detail.addCell(getCellData("ค่าใช้จ่ายไม่รวมภาษีมูลค่าเพิ่ม โดยมีจำนวนเหมาะสมและจำเป็นกับการฝึกอบรม", font, true, "LEFT", "TOP", 1, 0));

						// --------------- New line -----------------
						setCellHeight(22f);
						detail.addCell(getCellData("", font, true, "CENTER", "TOP", 1, 0));
						detail.addCell(getCellData("4.", font, true, "CENTER", "TOP", 1, 0));
						detail.addCell(getCellData("ให้รับรองความถูกต้องของสำเนาเอกสารทุกฉบับโดยผู้มีอำนาจลงนามแทนบริษัท", font, true, "LEFT", "TOP", 1, 0));
						document.add(detail);

          } catch(Exception e) {
              e.printStackTrace();
          } finally {
              document.close();
          }
        }

        if(hasData){
            OutputStream os = response.getOutputStream();
            // Create a reader
            PdfReader reader = new PdfReader(baos.toByteArray());
            // Create a stamper
            PdfStamper stamper = new PdfStamper(reader,baos);
            // Loop over the pages and add a header to each page

            // Close the stamper
            stamper.close();
            reader.close();

            response.setHeader("Expires", "0");
            response.setHeader("Cache-Control","must-revalidate, post-check=0 , pre-check=0");
            response.setHeader("Pragma", "public");
            // setting the content type
            response.setContentType("application/pdf");
            // the contentlength
            response.setContentLength(baos.size());
            // write ByteArrayOutputStream to the ServletOutputStream

            baos.writeTo(os);

            os.flush();
            os.close();
        }

        %>

        <%!
        Float padding = 0.0f;
        Float paddingtop = 0.0f;
        Float paddingbottom = 0.0f;
        Float paddingleft = 0.0f;
        Float paddingright = 0.0f;
				Float cellheight = 0.0f;

        private PdfPCell getCellData(String text, Font font, boolean noborder, String horalign, String veralign, int colspan, int rowspan) {
          return  getCellData(text, font, noborder, horalign, veralign, colspan, rowspan, false);
        }

        private PdfPCell getCellData(String text, Font font, boolean noborder, String horalign, String veralign, int colspan, int rowspan, boolean isunderline) {
            PdfPCell cellDetail = new PdfPCell(new Phrase(text,font));

						cellDetail.setFixedHeight(cellheight);

            if(horalign.equalsIgnoreCase("LEFT")){
                cellDetail.setHorizontalAlignment(Element.ALIGN_LEFT);
            } else if(horalign.equalsIgnoreCase("CENTER")){
                cellDetail.setHorizontalAlignment(Element.ALIGN_CENTER);
            } else if(horalign.equalsIgnoreCase("RIGHT")){
                cellDetail.setHorizontalAlignment(Element.ALIGN_RIGHT);
            }

            if(veralign.equalsIgnoreCase("TOP")){
                cellDetail.setVerticalAlignment(Element.ALIGN_TOP);
            } else if(veralign.equalsIgnoreCase("MIDDLE")){
                cellDetail.setVerticalAlignment(Element.ALIGN_MIDDLE);
            } else if(veralign.equalsIgnoreCase("BOTTOM")){
                cellDetail.setVerticalAlignment(Element.ALIGN_BOTTOM);
            }

            if(padding > 0.0f){
                cellDetail.setPadding(padding);
            }
            if(paddingtop > 0.0f){
                cellDetail.setPaddingTop(paddingtop);
            }
            if(paddingbottom > 0.0f){
                cellDetail.setPaddingBottom(paddingbottom);
            }
            if(paddingleft > 0.0f){
                cellDetail.setPaddingLeft(paddingleft);
            }
            if(paddingright > 0.0f){
                cellDetail.setPaddingRight(paddingright);
            }
            if(colspan > 0){
                cellDetail.setColspan(colspan);
            }
            if(rowspan > 0){
                cellDetail.setRowspan(rowspan);
            }
            if(noborder){
                cellDetail.setBorder(Rectangle.NO_BORDER);
            }
            if(isunderline){
              cellDetail.setBorder(PdfPCell.NO_BORDER);
              cellDetail.setCellEvent(new DottedCell(PdfPCell.BOTTOM));
            }

            return cellDetail;
        }

        private void setPadding(Float padding) {
            this.padding = padding;
        }

        private void setPaddingTop(Float padding) {
            this.paddingtop = padding;
        }

        private void setPaddingBottom(Float padding) {
            this.paddingbottom = padding;
        }

        private void setPaddingLeft(Float padding) {
            this.paddingleft = padding;
        }

        private void setPaddingRight(Float padding) {
            this.paddingright = padding;
        }

				private void setCellHeight(Float height) {
            this.cellheight = height;
        }
        %>

        <%!
          class DottedCell implements PdfPCellEvent {
            private int border = 0;
            public DottedCell(int border) {
              this.border = border;
            }
            public void cellLayout(PdfPCell cell, Rectangle position,
              PdfContentByte[] canvases) {
              PdfContentByte canvas = canvases[PdfPTable.LINECANVAS];
              canvas.saveState();
              canvas.setLineDash(0, 4, 2);
              if ((border & PdfPCell.TOP) == PdfPCell.TOP) {
                canvas.moveTo(position.getRight(), position.getTop());
                canvas.lineTo(position.getLeft(), position.getTop());
              }
              if ((border & PdfPCell.BOTTOM) == PdfPCell.BOTTOM) {
                canvas.moveTo(position.getRight(), position.getBottom());
                canvas.lineTo(position.getLeft(), position.getBottom());
              }
              if ((border & PdfPCell.RIGHT) == PdfPCell.RIGHT) {
                canvas.moveTo(position.getRight(), position.getTop());
                canvas.lineTo(position.getRight(), position.getBottom());
              }
              if ((border & PdfPCell.LEFT) == PdfPCell.LEFT) {
                canvas.moveTo(position.getLeft(), position.getTop());
                canvas.lineTo(position.getLeft(), position.getBottom());
              }
              canvas.stroke();
              canvas.restoreState();
            }
          }
        %>

    </body>
</html>