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



import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

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 ResultIngListBiz extends Biz {

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

	/* (non-Javadoc)
	 * @see kr.co.hwenc.system.Biz#doBiz()
	 */
	public void doBiz() throws Exception 
	{
		WAFLogger.debug(":::::::::::::::::::::::::::::::::::::::::::::::::::::::ResultIngListBiz::::::::::::::::::::::::::::::::::::::::::::::::::::::::" + storage.getEvent());
		WAFLogger.debug(storage.getUser());
	    
	    if(storage.compareEvent("GET_LIST"))
        {
	        
	        System.out.println(params.get("p_yyyy"));
	        if(params.get("p_yyyy").equals(""))
	        {
	        	System.out.println("111");
	            Calendar cal = Calendar.getInstance();
	            cal.add(cal.YEAR,-1);
	            
	            String yyyy = (new java.text.SimpleDateFormat ("yyyy")).format (cal.getTime());
	            params.set("p_yyyy", yyyy);
	            System.out.println(yyyy);
	        }
	        
	        
            params.set("sheet1", getResultIngList(params));
            storage.addObject("ibsheet7Data", IBSheet7Factory.createIBSheet7(params, storage.request));
        }
	    else if(storage.compareEvent("GET_DIFF"))
        {
	    	if(params.get("acmp_yyyy").equals(""))
	        {
	            Calendar cal = Calendar.getInstance();
	            cal.add(cal.YEAR,-1);
	            
	            String yyyy = (new java.text.SimpleDateFormat ("yyyy")).format (cal.getTime());
	            params.set("p_yyyy", yyyy);
	        }
            params.set("sheet1", getResultIngDiff(params));
            storage.addObject("ibsheet7Data", IBSheet7Factory.createIBSheet7(params, storage.request));
        }
	    
	}
	
	
	private RowSet getResultIngList(ValueObject Params) {
        Search search = new SearchImpl();
        RowSet rowSet = new RowSetImpl();
        StringBuffer sqlStr = new StringBuffer();
        
        try {
            sqlStr.append("            SELECT SUB_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("                        ,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("                        ,CONT_CDATE -- 계약년월일 (YYYYMMDD)                                                \n")
                   .append("                        ,CONT_SDATE -- 착공년월일 (YYYYMMDD)                                                \n")
                   .append("                        ,CONT_EDATE-- 준공년월일 (YYYYMMDD)                                                \n")
                   .append("                        ,CONT_TAMT --  총계약금액 (총공사금액)                                                \n")
                   .append("                        ,CUR_PAY_AMT -- 당년도 기성액                                                \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_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("                        ,CONT_TAMT_O --  총계약금액 (총공사금액)                                                \n")
                   .append("                        ,CUR_PAY_AMT_O -- 당년도 기성액                                                \n")
                   .append("             FROM RESULT_PLOOF_INFO                                                                                                                                                                      \n")
                   .append("             WHERE PROG_STAT_CD like ? || '%'                                                                                                                                                                 \n");
           
           
           
           
                   if(!params.get("p_yyyy").trim().equals(""))
                   {
                       sqlStr.append("              AND ACMP_YYYY = ?             \n");
                   }
                   if(!params.get("p_supp_nm").trim().equals(""))
                   {
                       sqlStr.append("              AND ISU_VENDNM LIKE '%' || ? || '%'             \n");
                   }
                 
            
            search.setStatement(sqlStr.toString());
            
            search.addParameter(params.get("P_STATUS").trim());
            if(!params.get("p_yyyy").trim().equals(""))
            {
                search.addParameter(params.get("p_yyyy").trim());
            }
            if(!params.get("p_supp_nm").trim().equals(""))
            {
                search.addParameter(params.get("p_supp_nm").trim());
            }
                      
            WAFLogger.debug(sqlStr.toString());
            WAFLogger.debug(search.getParameters());
            rowSet = search.execute();
        }
        catch (WAFSQLException se) {
        	WAFLogger.error("getResultIngList=========>" + se);
            super.doException(se);
            this.storage.setSuccess(false);
            this.storage.setMessage(se.getMessage());
            storage.setDetailMessage(se);
            se.printStackTrace();
        }
        finally {    
            if(rowSet == null) rowSet = new RowSetImpl();
            return rowSet;
        }
    }
	
	
	private RowSet getResultIngDiff(ValueObject Params) {
        Search search = new SearchImpl();
        RowSet rowSet = new RowSetImpl();
        StringBuffer sqlStr = new StringBuffer();
        
        try {
            sqlStr.append(" SELECT A.ACMP_YYYY  \n")    
                   .append(", A.ISU_VENDNM  \n")    
                   .append(", DECODE(A.SOC_CD, '01', '대한전문건설협회', '02', '대한기계설비공사협회', '03', '한국소방시설협회', '04', '한국정보통신공사협회', '한국전기공사협회') SOC_NM   \n")    
                   .append(", A.CONT_NM  CONT_NM \n")    
                   .append(", B.CONT_NM  CONT_NM1                                                                                          \n")                                                    
                   .append(", NVL(A.CONT_TAMT,0) - NVL(B.CONT_TAMT,0) CONT_TAMT  --총계약금액                                                                                \n")
                   .append(", NVL(A.CUR_CONT_AMT,0) - NVL(B.CUR_CONT_AMT,0) CUR_CONT_AMT --당년도 계약액                                                                \n")                                     
                   .append(", NVL(A.CUR_PAY_AMT,0) - NVL(B.CUR_PAY_AMT,0) CUR_PAY_AMT --당년도 기성액                                                                     \n")
                   .append(", NVL(A.CUR_PAY_SAMT,0) - NVL(B.CUR_PAY_SAMT,0) CUR_PAY_SAMT --당년도 기성지급액               \n")   
                   .append(", NVL(A.CUR_PAY_NAMT,0) -  NVL(B.CUR_PAY_NAMT,0) CUR_PAY_NAMT --당년도 미기성액                                                            \n")                                   
                   .append(", NVL(A.CUR_CONT_AAMT,0) - NVL(B.CUR_CONT_AAMT,0) CUR_CONT_AAMT --당년도 추가(변경)계약액                                                   \n")   
                   .append(", NVL(A.PRV_PAY_AMT,0) - NVL(B.PRV_PAY_AMT,0) PRV_PAY_AMT --전년도까지 누계기성액                                                       \n")    
                   .append(", NVL(A.PRV_PAY_SAMT,0) - NVL(B.PRV_PAY_SAMT,0) PRV_PAY_SAMT  --전년도까지 누계지급액                                                     \n")  
                   .append("           , NVL(A.PRV_PAY_NAMT,0) - NVL(B.PRV_PAY_NAMT,0) PRV_PAY_NAMT  --전년도까지 미기성액                           \n")  
                   .append("           , NVL(A.PRV_TRANS_AMT,0) - NVL(B.PRV_TRANS_AMT,0) PRV_TRANS_AMT  --전년도 이월공사액                            \n")  
                   .append("           , NVL(A.SUB_AMT,0) SUB_AMT --하도급 금액                           \n")  
                   .append("           , NVL(A.GOV_MA_AMT,0) GOV_MA_AMT --관급자재액                            \n")  
                   .append("           , NVL(A.CON_AMT,0)- NVL(B.CON_AMT,0) CON_AMT  --계약금액                            \n")  
                   .append("   FROM                            \n")  
                   .append("          (   SELECT *                            \n")  
                   .append("                FROM  RESULT_PLOOF_INFO                           \n")  
                   .append("              WHERE ACMP_YYYY = ?  ) A,                           \n")  
                   .append("         (    SELECT SUB_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("                     ,DEPT_NAME || ' ' || CONT_NM CONT_NM -- 공종(계약)명                                                                           \n")  
                   .append("                     ,WORK_PLACE -- 현장소재지 (공사현장)                                                                           \n")  
                   .append("                     ,CON_AMT -- 공종(계약)금액                                                                           \n")  
                   .append("                     ,CONT_TAMT --  총계약금액 (총공사금액)                                                             \n")                
                   .append("                     ,CUR_PAY_AMT -- 당년도 기성액                                                                           \n")  
                   .append("                     ,CUR_PAY_AMT AS CUR_PAY_SAMT  -- 당년도 기성지급액                                                                         \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("            FROM(                                                                                                                     \n")                  
                   .append("          SELECT A.SUB_CONT_MOD_ID -- 외주계약변경ID                                                                           \n")  
                   .append("                      ,? 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.BUILD_NAME CONT_NM -- 공종(계약)명                                                                           \n")  
                   .append("                    ,A.WORK_PLACE -- 현장소재지 (공사현장)                                                                        \n")     
                   .append("                    ,a.CON_AMT -- 공종(계약)명                                  \n")  
                   .append("                    ,TO_CHAR(A.START_WORK_DATE,'YYYYMMDD') CONT_SDATE -- 착공년월일 (YYYYMMDD)                                                                  \n")  
                   .append("                    ,FLOOR(A.CON_AMT / 1000)  CONT_TAMT --  총계약금액 (총공사금액)                                                                           \n")  
                   .append("                    ,FLOOR((NVL(D.FUND_AMT,0)+NVL(G.THIS_PRE_AMT,0))/1000) CUR_PAY_AMT -- 당년도 기성액                                                 --2016.1.19                           \n")  
                   .append("                    ,FLOOR((A.CON_AMT - NVL(E.FUND_AMT,0)-NVL(G.LAST_PRE_AMT,0)) / 1000) CUR_CONT_AMT -- 당년도 계약액 (이월액)              --2016.1.19                            \n")  
                   .append("                    ,FLOOR((A.CON_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")  
                   .append("                    ,(SELECT FLOOR(CON_AMT/1000) FROM SUB2000T WHERE SUB_CONT_MOD_ID = (SELECT MAX(SUB_CONT_MOD_ID) FROM SUB2000T WHERE TO_CHAR(CON_DATE,'YYYY') <= ?-1 and sub_cont_id = a.sub_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("         FROM SUB2000T A                                                                         \n")    
                   .append("                  ,(SELECT MAX(SUB_CONT_MOD_ID) SUB_CONT_MOD_ID                                   \n")                                          
                   .append("         FROM SUB2000T                                                                \n")             
                   .append("         WHERE CON_CLS_YN = '9'                                                  \n")                           
                   .append("            and  to_char(end_work_date,'yyyymm') >= ?                             \n")                                               
                   .append("         GROUP BY SUB_CONT_ID) B                                                       \n")                      
                   .append("         ,CONT_OUT_SUPP C                                               \n")                              
                   .append("         ,(SELECT SUB_CONT_ID, SUBSTR(ACMP_YYYYMM,0,4) ACMP_YYYY, FLOOR(SUM(REQU_AMT)) FUND_AMT                               \n")                                              
                   .append("         FROM SUB1040T                                                                           \n")  
                   .append("        WHERE SUBSTR(ACMP_YYYYMM,0,4) = ?                                       \n")                                    
                   .append("        GROUP BY SUB_CONT_ID, SUBSTR(ACMP_YYYYMM,0,4)) D                                   \n")                                         
                   .append("         ,(SELECT SUB_CONT_ID, FLOOR(SUM(REQU_AMT) ) FUND_AMT                                \n")                                             
                   .append("         FROM SUB1040T                               \n")                                              
                   .append("         WHERE SUBSTR(ACMP_YYYYMM,0,4) < ?                             \n")                                               
                   .append("         GROUP BY SUB_CONT_ID) E                                    \n")                                         
                   .append("         , SUB2000T F                                   \n")                                        
                   .append("         ,(SELECT SUB_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 SUB1030T                                \n")                  
                   .append("            GROUP BY SUB_CONT_ID, SUBSTR(TAX_DY, 0,4) ) G                                   \n")                                       
                   .append("         WHERE A.SUB_CONT_MOD_ID = B.SUB_CONT_MOD_ID                                    \n")                                         
                   .append("         AND A.SUB_CONT_MOD_ID = C.SUB_CONT_MOD_ID                                     \n")                                        
                   .append("         AND A.SUB_CONT_ID = D.SUB_CONT_ID(+)                                    \n")                                         
                   .append("         AND A.SUB_CONT_ID = E.SUB_CONT_ID(+)                                                                     \n")        
                   .append("         AND A.SUB_CONT_ID = F.SUB_CONT_ID                                                                           \n")  
                   .append("         AND A.SUB_CONT_ID = G.SUB_CONT_ID(+)                                                                           \n")  
                   .append("         AND F.MOD_NO = 0                                                                           \n")  
                   .append("         AND C.SIGN_SEQ = 2                                                                           \n")
                   .append("         AND MEMBER_NAME like '%' || ? || '%'                                  \n")
                   .append("         )                                                                           \n")  
                   .append("         WHERE CORP_ID   IN  (SELECT CORP_ID FROM RESULT_PLOOF_INFO where ACMP_YYYY = ? GROUP BY CORP_ID )                                  \n")   
                   .append("         AND ACMP_YYYY  = ?    ) B                           \n")  
                   .append("            WHERE A.SUB_CONT_MOD_ID = B.SUB_CONT_MOD_ID                           \n")  
                   .append("            AND A.CORP_ID = B.CORP_ID                            \n")  
                   .append("            ORDER BY  B.ISU_VENDNM,  SOC_CD                           \n")  ;
                                 
            search.setStatement(sqlStr.toString());
            search.addParameter(params.get("p_yyyy").trim());
            search.addParameter(params.get("p_yyyy").trim());
            search.addParameter(params.get("p_yyyy").trim());
            search.addParameter(params.get("p_yyyy").trim());
            search.addParameter(params.get("p_yyyy").trim());
            search.addParameter(params.get("p_yyyy").trim());
            search.addParameter(params.get("p_yyyy").trim());
            search.addParameter(params.get("p_yyyy").trim());
            search.addParameter(params.get("p_yyyy").trim());
            search.addParameter(params.get("p_supp_nm").trim());
            search.addParameter(params.get("p_yyyy").trim());
            search.addParameter(params.get("p_yyyy").trim());
            WAFLogger.debug(sqlStr.toString());
            WAFLogger.debug(search.getParameters());
            rowSet = search.execute();
        }
        catch (WAFSQLException se) {
        	WAFLogger.error("getResultIngList=========>" + se);
            super.doException(se);
            this.storage.setSuccess(false);
            this.storage.setMessage(se.getMessage());
            storage.setDetailMessage(se);
            se.printStackTrace();
        }
        finally {    
            if(rowSet == null) rowSet = new RowSetImpl();
            return rowSet;
        }
    }
    
	
}