/**
 * @(#)file    TermsAgreeBiz.java
 * @(#)author  이성민
 * @(#)version 1.0
 *
 */
package kr.co.udapsoft.ebid.supplier.portal.result.biz;



import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Calendar;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.springframework.web.servlet.ModelAndView;

import kr.co.hsnc.common.base.WAFLogger;
import kr.co.hsnc.common.sql.Row;
import kr.co.hsnc.common.sql.RowSet;
import kr.co.hsnc.common.sql.RowSetImpl;
import kr.co.hsnc.common.sql.WAFSQLException;
import kr.co.hsnc.common.sql.persistent.Persistent;
import kr.co.hsnc.common.sql.persistent.PersistentImpl;
import kr.co.hsnc.common.sql.search.Search;
import kr.co.hsnc.common.sql.search.SearchImpl;
import kr.co.hsnc.common.sql.util.RowSetUtility;
import kr.co.hsnc.common.util.ValueObject;
import kr.co.udapsoft.ebid.buyer.common.file.FileManager;

import com.udapsoft.modular.web.ibsheet7.IBSheet7Factory;
import com.udapsoft.modular.web.ibsheet7.util.IBSheet7Utils;
import com.udapsoft.waf.system.Biz;
import com.udapsoft.waf.system.HandlerStorage;






public class PurResultDetail02Biz extends Biz {

	public PurResultDetail02Biz(HandlerStorage storage) 
	{
		super(storage);
	}

	/* (non-Javadoc)
	 * @see kr.co.hwenc.system.Biz#doBiz()
	 */
	public void doBiz() throws Exception 
	{
		//System.out.println(":::::::::::::::::::::::::::::::::::::::::::::::::::::::ResultDetail02Biz::::::::::::::::::::::::::::::::::::::::::::::::::::::::");
	    
	    ValueObject ResultDetail02BizVo = new ValueObject();
	    
	    if(storage.compareEvent("GET_DETAIL_02"))
        {
            
            if(params.get("p_page_gubun").equals("info"))
            {
                ResultDetail02BizVo = getResultDetail02_info(params);
            }
            else
            {
                ResultDetail02BizVo = getResultDetail02(params);
            }
            
            RowSet fileRowSet = FileManager.getFileList("RESULT_PDF", params.get("p_pur_cont_mod_id") + ResultDetail02BizVo.get("soc_cd")+params.get("p_acmp_yyyy"));
            
            storage.addValueObject("ResultDetail02BizVo", ResultDetail02BizVo);
            storage.addRowSet("RESULT_PDF", fileRowSet);
        }
	}
    
	
	public ValueObject getResultDetail02(ValueObject params){
        Search search = new SearchImpl();
        ValueObject vo = null;
        RowSet rowSet = new RowSetImpl();
        
        StringBuffer sqlStr = new StringBuffer();
        
        
        try{
            
        	sqlStr.append("            SELECT PUR_CONT_MOD_ID -- 구매계약변경ID                                                \n")
            .append("                         ,ACMP_YYYY -- 기성년도                                                \n")
            .append("                         ,DEPT_CD -- 현장코드                                                \n")
            .append("                         ,DEPT_NAME -- 현장명                                                \n")
            .append("                         ,CORP_ID                                                \n")
            .append("                        ,ISU_VENDCD -- 신청인발급요청자) 사업자번호                                                 \n")
            .append("                        ,ISU_VENDNM -- 신청인(발급요청자) 상호                                                \n")
            .append("                        ,ISU_PRES_NM -- 신청인(발급요청자) 대표자명                                                \n")
            .append("                        ,ISU_ADDR -- 신청인(발급요청자) 주소                                                \n")
            .append("                        ,ISU_PHONE -- 신청인(발급요청자) 전화번호                                                \n")
            .append("                        ,DEPT_NAME || ' ' || CONT_NM CONT_NM -- 공종(계약)명                                                \n")
            .append("                        ,WORK_PLACE -- 현장소재지 (공사현장)                                                \n")
            .append("                        ,CON_AMT -- 공종(계약)금액                                                \n")
            .append("                        ,TO_CHAR(TO_DATE(CONT_CDATE, 'YYYY-MM-DD') , 'YYYY-MM-DD') CONT_CDATE -- 계약년월일 (YYYYMMDD)                                               \n")
            .append("                        ,TO_CHAR(TO_DATE(CONT_SDATE, 'YYYY-MM-DD') , 'YYYY-MM-DD') CONT_SDATE         -- 착공년월일 (YYYYMMDD)                                                \n")
            .append("                        ,TO_CHAR(TO_DATE(CONT_EDATE, 'YYYY-MM-DD') , 'YYYY-MM-DD') CONT_EDATE         -- 준공년월일 (YYYYMMDD)                                                \n")
            .append("                        ,CONT_TAMT --  총계약금액 (총공사금액)                                                \n")
            .append("                        ,CUR_PAY_AMT -- 당년도 기성액                                                \n")
            .append("                        ,CUR_PAY_AMT AS CUR_PAY_SAMT  -- 당년도 기성지급액                                                \n")
            .append("                        ,ORD_NM -- 발주자                                                \n")
            .append("                        ,CUR_CONT_AMT -- 당년도 계약액 (이월액)                                                \n")
            .append("                        ,CUR_PAY_NAMT -- 당년도 미기성액                                                \n")
            .append("                        ,CASE WHEN NVL(PRV_CONT_AMT,0) > 0 THEN floor(CON_AMT/1000) - (NVL(PRV_CONT_AMT,0)) ELSE 0 END CUR_CONT_AAMT -- 당년도추가(변경)계약액                                                \n")
            .append("                        ,PRV_FUND_AMT PRV_PAY_AMT    -- 전년도까지 누계기성액                                                \n")
            .append("                        ,PRV_FUND_AMT PRV_PAY_SAMT -- 전년도까지 누계지급액                                                \n")
            .append("                        ,CASE WHEN SUBSTR(CONT_SDATE,0,4) < ? THEN NVL(PRV_CONT_AMT,0) - PRV_FUND_AMT ELSE 0 END PRV_PAY_NAMT -- 전년도까지 미기성액                                                \n")
            .append("                        ,NVL(PRV_CONT_AMT,0) - PRV_FUND_AMT PRV_TRANS_AMT -- 전년도이월액 or 전년도이월공사액                                                \n")
            .append("                        ,(SELECT CORP_KOR FROM HEAD_OFFICE_INFO WHERE CORP_REG_NO = ?) REG_VENDNM -- 발급자 상호                                                \n")
            .append("                        ,(SELECT REP_NAME FROM HEAD_OFFICE_INFO WHERE CORP_REG_NO = ?) REG_PRES_NM -- 발급자 대표자명                                                \n")
            .append("                        ,(SELECT ADDRESS FROM HEAD_OFFICE_INFO WHERE CORP_REG_NO = ?) REG_ADDR -- 발급자 주소                                                \n")
            .append("                        ,(SELECT CORP_TEL FROM HEAD_OFFICE_INFO WHERE CORP_REG_NO = ?) REG_PHONE -- 발급자 전화번호                                                \n")
            .append("                        ,'00' PROG_STAT_CD  -- 진행상태 코드                                                \n")
            //20116.4.6
            .append("                        ,CONT_TAMT    CONT_TAMT_O    --  총계약금액 (총공사금액)                                                \n")
            .append("                        ,PRV_FUND_AMT PRV_PAY_AMT_O  -- 전년도까지 누계기성액                                                \n")
            .append("                        ,CUR_PAY_AMT  CUR_PAY_AMT_O  -- 당년도 기성액                                                \n")
            .append("                        ,CUR_PAY_NAMT CUR_PAY_NAMT_O -- 당년도 미기성액                                                \n")
            .append("             FROM(                                                                                                          \n")
            .append("             SELECT A.PUR_CONT_MOD_ID -- 구매계약변경ID                                                \n")
            .append("                         ,? ACMP_YYYY --D.ACMP_YYYY -- 기성년도                                                \n")
            .append("                         ,A.DEPT_CD -- 현장코드                                                \n")
            .append("                         ,A.dept_name -- 현장명                                                \n")
            .append("                         ,C.CORP_ID                                                \n")
            .append("                        ,C.VENDCD ISU_VENDCD -- 신청인발급요청자) 사업자번호                                                \n") 
            .append("                        ,C.MEMBER_NAME ISU_VENDNM -- 신청인(발급요청자) 상호                                                \n")
            .append("                        ,C.BOSS_NAME ISU_PRES_NM -- 신청인(발급요청자) 대표자명                                                \n")
            .append("                        ,C.ADDRESS ISU_ADDR -- 신청인(발급요청자) 주소                                                \n")
            .append("                        ,C.TEL_NUM ISU_PHONE -- 신청인(발급요청자) 전화번호                                                \n")
            .append("                        ,a.CST_DOC_NAME CONT_NM -- 공종(계약)명                                                \n")
            .append("                        ,A.LEAD_PLACE WORK_PLACE-- 현장소재지 (공사현장)                                                \n")
            .append("                        ,a.ORD_AMT CON_AMT -- 공종(계약)명                                                \n")
            .append("                        ,TO_CHAR(F.ORD_CON_DATE,'YYYYMMDD') CONT_CDATE -- 계약년월일 (YYYYMMDD)                                                \n")
            .append("                        ,TO_CHAR(A.ORD_START_DATE,'YYYYMMDD') CONT_SDATE -- 착공년월일 (YYYYMMDD)                                                \n")
            .append("                        ,TO_CHAR(A.ord_end_date,'YYYYMMDD') CONT_EDATE-- 준공년월일 (YYYYMMDD)                                                \n")
            .append("                        ,FLOOR(A.ORD_AMT / 1000)  CONT_TAMT --  총계약금액 (총공사금액)                                                \n")
            .append("                        ,FLOOR((NVL(D.FUND_AMT,0)+NVL(G.THIS_PRE_AMT,0))/1000) CUR_PAY_AMT -- 당년도 기성액                                                \n") //2016.1.19
            .append("                        ,A.DEALER_NM ORD_NM -- 발주자                                                \n")
            .append("                        ,FLOOR((A.ORD_AMT - NVL(E.FUND_AMT,0)-NVL(G.LAST_PRE_AMT,0)) / 1000) CUR_CONT_AMT -- 당년도 계약액 (이월액)              \n")//2016.1.19 
            .append("                        ,FLOOR((A.ORD_AMT - (NVL(D.FUND_AMT,0) + NVL(E.FUND_AMT,0) + NVL(G.THIS_PRE_AMT,0) + NVL(G.LAST_PRE_AMT,0))) / 1000) CUR_PAY_NAMT -- 당년도 미기성액                      \n")//2016.1.19 
            .append("                        ,(SELECT FLOOR(ORD_AMT/1000) FROM PUR2000T WHERE PUR_CONT_MOD_ID = (SELECT MAX(PUR_CONT_MOD_ID) FROM PUR2000T WHERE TO_CHAR(ORD_CON_DATE,'YYYY') <= ?-1 and pur_cont_id = a.pur_cont_id)) PRV_CONT_AMT                                                \n")
            .append("                        ,FLOOR((NVL(E.FUND_AMT,0)+NVL(G.LAST_PRE_AMT,0)) / 1000) PRV_FUND_AMT-- 전년도까지 누계기성액                                                \n")
            .append("                        ,(SELECT COUNT(*) FROM PUR_RESULT_PLOOF_INFO WHERE PUR_CONT_MOD_ID = A.PUR_CONT_MOD_ID AND ACMP_YYYY = ?) PLOOF_INFO_CNT                                                \n")
            .append("             FROM PUR2000T A                                                \n")
            .append("                      ,(SELECT MAX(PUR_CONT_MOD_ID) PUR_CONT_MOD_ID                                                \n")
            .append("             FROM PUR2000T                                                \n")
            .append("             WHERE CON_CLS_YN = '9'                                                \n")
            .append("                and  to_char(ord_end_date,'yyyymm') >= ?                                                \n")
            .append("             GROUP BY PUR_CONT_ID) B                                                \n")
            .append("             ,CONT_PUR_SUPP C                                                \n")
            .append("             ,(SELECT PUR_CONT_ID,TO_CHAR(REQ_DATE,'YYYY') ACMP_YYYY, FLOOR(SUM(CUR_REQ_APPLYAMT)) FUND_AMT                                                \n")
            .append("             FROM PUR1100T                                                \n")
            .append("             WHERE TO_CHAR(REQ_DATE,'YYYY') = ?                                                \n")
            .append("             GROUP BY PUR_CONT_ID, TO_CHAR(REQ_DATE,'YYYY')) D                                                \n")
            .append("             ,(SELECT PUR_CONT_ID, FLOOR(SUM(CUR_REQ_APPLYAMT)) FUND_AMT                                                \n")
            .append("             FROM PUR1100T                                                \n")
            .append("             WHERE TO_CHAR(REQ_DATE,'YYYY') < ?                                                \n")
            .append("             GROUP BY PUR_CONT_ID) E                                                \n")
            .append("             , PUR2000T F                                              \n")
            .append("             ,(SELECT PUR_CONT_ID                    \n")
            .append("                     ,DECODE(SUBSTR(TAX_DY, 0, 4), ?,SUM(NVL(REQ_PREPAY_AMT,0)), 0)  THIS_PRE_AMT                   \n")
            .append("                     ,DECODE(SUBSTR(TAX_DY, 0, 4), ?,0, SUM(NVL(REQ_PREPAY_AMT,0)))   LAST_PRE_AMT                     \n")
            .append("                 FROM PUR1030T                     \n")
            .append("                GROUP BY PUR_CONT_ID, SUBSTR(TAX_DY, 0,4) ) G                                             \n")
            .append("             WHERE A.PUR_CONT_MOD_ID = B.PUR_CONT_MOD_ID                                                \n")
            .append("             AND A.PUR_CONT_MOD_ID = C.PUR_CONT_MOD_ID                                                \n")
            .append("             AND A.PUR_CONT_ID = D.PUR_CONT_ID(+)                                                \n")
            .append("             AND A.PUR_CONT_ID = E.PUR_CONT_ID(+)                                                \n")
            .append("             AND A.PUR_CONT_ID = F.PUR_CONT_ID                                                \n")
            .append("             AND A.PUR_CONT_ID = G.PUR_CONT_ID(+)                                                \n")
            .append("             AND F.MOD_NO = 0                                                \n")
            .append("             AND C.SIGN_SEQ = 2                                                \n")
            .append("             )                                                \n")
            .append("             WHERE CORP_ID  = ?                                                \n")
            .append("             AND PUR_CONT_MOD_ID  = ?                                                \n")
            .append("             AND ACMP_YYYY  = ?                                                \n");
    		
     
             search.setStatement(sqlStr.toString());
             search.addParameter(params.get("p_acmp_yyyy"));
             search.addParameter(storage.getUser().get("CORP_REG_NO"));
             search.addParameter(storage.getUser().get("CORP_REG_NO"));
             search.addParameter(storage.getUser().get("CORP_REG_NO"));
             search.addParameter(storage.getUser().get("CORP_REG_NO"));
             search.addParameter(params.get("p_acmp_yyyy"));
             search.addParameter(params.get("p_acmp_yyyy"));
             search.addParameter(params.get("p_acmp_yyyy"));
             search.addParameter(params.get("p_acmp_yyyy"));
             search.addParameter(params.get("p_acmp_yyyy"));
             search.addParameter(params.get("p_acmp_yyyy"));
             search.addParameter(params.get("p_acmp_yyyy"));//G 2016.1.19
             search.addParameter(params.get("p_acmp_yyyy"));//G 2016.1.19
             search.addParameter(params.get("p_corp_id"));
             search.addParameter(params.get("p_pur_cont_mod_id"));
             search.addParameter(params.get("p_acmp_yyyy"));       
             
            rowSet = search.execute();
            
            
          System.out.println(sqlStr.toString());
          System.out.println(search.getParameters());
            
            if(rowSet.size()>0){
                vo = RowSetUtility.getValueObject(rowSet.getRow(0));
            }
            
        }catch(Exception e){
            e.printStackTrace();
            throw e;
        }finally{
            if( vo == null) vo = new ValueObject();
            return vo;
        }
    } 
    
    
    public ValueObject getResultDetail02_info(ValueObject params){
        Search search = new SearchImpl();
        ValueObject vo = null;
        RowSet rowSet = new RowSetImpl();
        
        StringBuffer sqlStr = new StringBuffer();
        
        
        try{
            
            sqlStr.append("            SELECT PUR_CONT_MOD_ID -- 구매계약변경ID                                                \n")
            .append("                         ,ACMP_YYYY -- 기성년도                                                \n")
            .append("                         ,DEPT_CD -- 현장코드                                                \n")
            .append("                         ,GET_DEPT_NM(DEPT_CD) DEPT_NAME -- 현장명                                                \n")
            .append("                         ,CORP_ID                                                \n")
            .append("                         ,ISSUE_NO --발급번호                                                \n")
            .append("                        ,ISU_VENDCD -- 신청인발급요청자) 사업자번호                                                 \n")
            .append("                        ,ISU_VENDNM -- 신청인(발급요청자) 상호                                                \n")
            .append("                        ,ISU_PRES_NM -- 신청인(발급요청자) 대표자명                                                \n")
            .append("                        ,ISU_ADDR -- 신청인(발급요청자) 주소                                                \n")
            .append("                        ,ISU_PHONE -- 신청인(발급요청자) 전화번호                                                \n")
            .append("                        ,CONT_NM -- 공종(계약)명                                                \n")
            .append("                        ,WORK_PLACE -- 현장소재지 (공사현장)                                                \n")
            .append("                        ,CON_AMT -- 공종(계약)금액                                                \n")
            .append("                        ,TO_CHAR(TO_DATE(CONT_CDATE, 'YYYY-MM-DD'), 'YYYY-MM-DD') CONT_CDATE -- 계약년월일 (YYYYMMDD)                                                \n")
            .append("                        ,TO_CHAR(TO_DATE(CONT_SDATE, 'YYYY-MM-DD'), 'YYYY-MM-DD') CONT_SDATE -- 착공년월일 (YYYYMMDD)                                                \n")
            .append("                        ,TO_CHAR(TO_DATE(CONT_EDATE, 'YYYY-MM-DD'), 'YYYY-MM-DD') CONT_EDATE-- 준공년월일 (YYYYMMDD)                                                \n")
            .append("                        ,CONT_TAMT --  총계약금액 (총공사금액)                                                \n")
            .append("                        ,CUR_PAY_AMT -- 당년도 기성액                                                \n")
            .append("                        ,CUR_PAY_SAMT  -- 당년도 기성지급액                                                \n")
            .append("                        ,ORD_NM -- 발주자                                                \n")
            .append("                        ,CUR_CONT_AMT -- 당년도 계약액 (이월액)                                                \n")
            .append("                        ,CUR_PAY_NAMT -- 당년도 미기성액                                                \n")
            .append("                        ,CUR_CONT_AAMT -- 당년도추가(변경)계약액                                                \n")
            .append("                        ,PRV_PAY_AMT-- 전년도까지 누계기성액                                                \n")
            .append("                        ,PRV_PAY_SAMT-- 전년도까지 누계지급액                                                \n")
            .append("                        ,PRV_PAY_NAMT -- 전년도까지 미기성액                                                \n")
            .append("                        ,PRV_TRANS_AMT -- 전년도이월액 or 전년도이월공사액                                                \n")
            .append("                        ,REG_VENDNM -- 발급자 상호                                                \n")
            .append("                        ,REG_PRES_NM -- 발급자 대표자명                                                \n")
            .append("                        ,REG_ADDR -- 발급자 주소                                                \n")
            .append("                        ,REG_PHONE -- 발급자 전화번호                                                \n")
            .append("                        ,PROG_STAT_CD  -- 진행상태 코드                                                \n")
            .append("                        ,SOC_CD  -- 제출협회 코드                                                \n")
            .append("                        ,DECODE(SOC_CD, '01', '대한전문건설협회', '02', '대한기계설비공사협회', '03', '한국소방시설협회', '04', '한국정보통신공사협회', '한국전기공사협회') SOC_NM                         \n")
            .append("                        ,DECODE(PROG_STAT_CD, '10', '작성중', '20', '발급요청', '30', '발급완료', '91', '반려', '작성대상') PROG_STAT_NM                                                \n")
            .append("                        ,LIC_NM --업종                                                \n")
            .append("                        ,LIC_ORG --인허가기관                                                \n")
            .append("                        ,REG_NO --등록번호                                                \n")
            .append("                        ,ETC --기타                                                \n")
            .append("                        ,TO_CHAR(TO_DATE(LIC_DATE, 'YYYY-MM-DD'), 'YYYY-MM-DD')  LIC_DATE --인허가연월일                                                \n")
            .append("                        ,ISU_CHARGE_NM -- 담당자명                                                \n")
            .append("                        ,ISU_REQ_HP1 --휴대전화                                                \n")
            .append("                        ,ISU_REQ_HP2 --휴대전화                                                \n")
            .append("                        ,ISU_REQ_HP3 --휴대전화                                                \n")
            .append("                        ,WORK_KIND --공사종류 (공종, 공사업종)                                                \n")
            .append("                        ,RETURN_RESON           --반려사유                                             \n")
            .append("                        ,COMPOSIT_YN                                                        \n")
            .append("                        ,CONT_TAMT_O, PRV_PAY_AMT_O, CUR_PAY_AMT_O, CUR_PAY_NAMT_O             \n")
            .append("                        ,ADD_01                                                        \n")
            .append("                        ,ADD_02                                                        \n")
            .append("             FROM PUR_RESULT_PLOOF_INFO          \n")
            .append("             WHERE CORP_ID  = ?                                                \n")
            .append("             AND PUR_CONT_MOD_ID  = ?                                                \n")
            .append("             AND ACMP_YYYY  = ?                                                \n")
    		.append("             AND SOC_CD  = '02'                                                \n");

     
             search.setStatement(sqlStr.toString());

             search.addParameter(params.get("p_corp_id"));
             search.addParameter(params.get("p_pur_cont_mod_id"));
             search.addParameter(params.get("p_acmp_yyyy"));
             
             
            rowSet = search.execute();
            
            
          //System.out.println(sqlStr.toString());
          //System.out.println(search.getParameters());
            
            if(rowSet.size()>0){
                vo = RowSetUtility.getValueObject(rowSet.getRow(0));
            }
            
        }catch(Exception e){
            e.printStackTrace();
            throw e;
        }finally{
            if( vo == null) vo = new ValueObject();
            return vo;
        }
    }
    
	
}