/**
 *
 * @(#)author  [ok]
 * @(#)version 1.0
 * @(#)date    2014. 06. 25
 * @(#)since   JDK 1.7.2
 *
 * Copyright (c) www.udapsoft.co.kr, Inc.
 * All rights reserved.
 * This software is the proprietary information of udapsoft, Inc.
 */
package kr.co.udapsoft.ebid.supplier.portal.payment.biz;


import kr.co.hsnc.common.base.WAFMessages;
import kr.co.hsnc.common.sql.persistent.Persistent;
import kr.co.hsnc.common.sql.persistent.PersistentImpl;
import kr.co.hsnc.common.util.ValueObject;
import kr.co.udapsoft.common.sender.MessageSend;

import com.udapsoft.waf.common.util.ClobUtils;
import com.udapsoft.waf.system.Biz;
import com.udapsoft.waf.system.HandlerStorage;

public class AdvencePayRequestSaveBiz extends Biz {
	
	public AdvencePayRequestSaveBiz(HandlerStorage storage) {
		super(storage);
	}

	public void doBiz() throws Exception {

		boolean success = false;
		if(storage.compareEvent("SAVE_DATA")){	//데이터 저장
			success = saveData(params);
		}else if(storage.compareEvent("DELETE_DATA")){	//데이터 삭제
			success = deleteData(params);
		}else if(storage.compareEvent("REQ_DATA")){		//기성신청 요청
			
			success = reqData(params);
						
			String resUserName = params.get("resUserName");			//계약 담당자명
			String resHp = params.get("resHp").replaceAll("-", "");	//계약 담당자 핸드폰번호
			String resEmail = params.get("resEmail");				//계약 담당자 이메일

			String hp = params.get("hp").replaceAll("-", "");	//업체 담당자 핸드폰번호
			String eMail = params.get("eMail");					//업체 담당자 이메일
        	String memberName = params.get("memberName");		//업체명
        	String userName = params.get("userName");			//업체 담당자명
        	String deptName = params.get("deptName");			//현장명
        	String conDocNo = params.get("conDocNo");			//계약번호
        	String buildName = params.get("buildName");			//계약명

			//SMS
	      	MessageSend messageSend = new MessageSend(storage);
	      	String recvAddress = hp;
	      	
	      	if(params.get("perpayReqDiv").equals("1")){ // 선급금 신청
	      		String smsContent = WAFMessages.getMessage("Prepayments.Approved.Request");
	      		//System.out.println(smsContent);
	      		messageSend.sendSMS(resHp, "024899000", "", smsContent);  //2015.9.21  당사담당자 수신SMS 대표번호로 변경. 
	      		
	      		//E-Mail
	      		MessageSend mailSend = new MessageSend(storage);
	      		StringBuffer mailContent = new StringBuffer();
	      		mailContent.append(memberName+ "님이 선급금을 신청하였습니다. </BR>");
	      		mailContent.append("전자조달시스템에서 신청한 선급금정보 확인후 그룹웨어 결재 하시기 바랍니다.</BR>");
	      		mailContent.append("<font style='width:auto; font-size:12px; line-height:18px; padding:5px; text-align:left;'>");
	      		mailContent.append("</BR>");
	      		mailContent.append("1.프로젝트: "+deptName+"</BR>");
	      		mailContent.append("2.계약번호: "+conDocNo+"</BR>");
	      		mailContent.append("3.계약명: " +buildName+"</BR>");
	      		mailContent.append("4.협력사 담당자:"+userName+"(연락처 :"+hp+")</BR>");
	      		mailContent.append("</font>");
	      		messageSend.sendEmail(resEmail, eMail, "선급금 결재요청 메일입니다.", "선급금 결재요청 메일입니다.", mailContent, "Y");
	      		
	      	}else if(params.get("perpayReqDiv").equals("2")){  // 선급금 부분 신청
	      		String smsContent = "선급금(일부) 결재요청이 있습니다.'||CHR(13)||CHR(10)||'전자조달시스템에 접속/확인바랍니다.'||CHR(13)||CHR(10)||'SGC이앤씨(주)";
	      		//System.out.println(smsContent);
	      		messageSend.sendSMS(resHp, "024899000", "", smsContent);  //2015.9.21  당사담당자 수신SMS 대표번호로 변경. 
	      		
	      		//E-Mail
	      		MessageSend mailSend = new MessageSend(storage);
	      		StringBuffer mailContent = new StringBuffer();
	      		mailContent.append(memberName+ "에서 선급금을 일부 신청하였습니다. </BR>");
	      		mailContent.append("전자조달시스템에서 신청한 선급금액 및 선급금 일부포기각서 확인 후 그룹웨어 결재 하시기 바랍니다.</BR>");
	      		mailContent.append("<font style='width:auto; font-size:12px; line-height:18px; padding:5px; text-align:left;'>");
	      		mailContent.append("</BR>");
	      		mailContent.append("1.프로젝트: "+deptName+"</BR>");
	      		mailContent.append("2.계약번호: "+conDocNo+"</BR>");
	      		mailContent.append("3.계약명: " +buildName+"</BR>");
	      		mailContent.append("4.협력사 담당자:"+userName+"(연락처 :"+hp+")</BR>");
	      		mailContent.append("</font>");
	      		messageSend.sendEmail(resEmail, eMail, "선급금(일부) 결재요청 메일입니다.", "선급금(일부) 결재요청 메일입니다.", mailContent, "Y");
	      		
	      	}else if(params.get("perpayReqDiv").equals("3")){ // 선급금 포기
	      		String smsContent = "선급금 포기 신청이 있습니다.'||CHR(13)||CHR(10)||'전자조달시스템에 접속/확인바랍니다.'||CHR(13)||CHR(10)||'SGC이앤씨(주)";
	      		//System.out.println(smsContent);
	      		messageSend.sendSMS(resHp, "024899000", "", smsContent);  //2015.9.21  당사담당자 수신SMS 대표번호로 변경. 
	      		
	      		//E-Mail
	      		MessageSend mailSend = new MessageSend(storage);
	      		StringBuffer mailContent = new StringBuffer();
	      		mailContent.append(memberName+ "에서 선급금을 포기하였습니다. </BR>");
	      		mailContent.append("전자조달 시스템에서 선급금 포기각서 확인 후 처리바랍니다.</BR>");
	      		mailContent.append("<font style='width:auto; font-size:12px; line-height:18px; padding:5px; text-align:left;'>");
	      		mailContent.append("</BR>");
	      		mailContent.append("1.프로젝트: "+deptName+"</BR>");
	      		mailContent.append("2.계약번호: "+conDocNo+"</BR>");
	      		mailContent.append("3.계약명: " +buildName+"</BR>");
	      		mailContent.append("4.협력사 담당자:"+userName+"(연락처 :"+hp+")</BR>");
	      		mailContent.append("</font>");
	      		messageSend.sendEmail(resEmail, eMail, "선급금 포기 신청 메일입니다.", "선급금 포기 신청 메일입니다.", mailContent, "Y");
	      		
	      	}
			
		}
		storage.setSuccess(success);
		
	}

	/**
	 * Persistent 를 이용한 Save 처리
	 * @param params
	 * @return
	 * * 입력받은 선급금 상세 정보를 등록합니다.
     * @param connection
     * @param pgmName
     * @param screenName
     * @param systemCode
     * @throws Exception
	 */
	private boolean saveData(ValueObject params) {
		
		
		Persistent persistent_i = null;
		Persistent persistent_u = null;
		String sqlstr_i = "";
		String sqlstr_u = "";

		try {
		
			
			//선급금 신청 상제 정보
			String prepayId					= params.get("prepayId");				//선급ID
			String subContId				= params.get("subContId");				//외주계약ID
			String prepaySeq				= "1";									//선급금지급차수
			String corpId					= params.get("corpId");					//협력업체ID
			String prepayDate				= "";									//선급일자
			String perpayAmt				= params.get("perpayAmt");				//계약_선급금
			String perpaySupplyAmt			= "";									//계약_선급금공급가
			String subPrepaySupplyTamt		= params.get("subPrepaySupplyTamt");	//계약_선급금공급가_과세
			String subPrepaySupplyNamt		= params.get("subPrepaySupplyNamt");	//계약_선급금공급가_면세
			String subPrepaySurtaxAmt		= params.get("subPrepaySurtaxAmt");		//계약_선급금부가세
			String reqPrepayAmt				= params.get("reqPrepayAmt");			//신청_선급금합계
			String reqPrepaySupplyAmt		= String.valueOf((Double.valueOf(params.get("reqPrepaySupplyTamt").replaceAll(",", "")) + Double.valueOf(params.get("reqPrepaySupplyNamt").replaceAll(",", ""))));	//신청_선급금_공급가
			String reqPrepaySupplyTamt		= params.get("reqPrepaySupplyTamt");	//신청_선급금공급가_과세
			String reqPrepaySupplyNamt		= params.get("reqPrepaySupplyNamt");	//신청_선급금공급가_면세
			String reqPrepaySurtaxAmt		= params.get("reqPrepaySurtaxAmt");		//신청_선급금부가세
			String prepayDesc				= "";									//적요
			String conCurCd					= params.get("conCurCd");				//계약통화
			String taxMethodCd				= params.get("chk_info");				//세금계산서발행방법
			String taxDy					= params.get("date1");					//작성일자(증빙일자)
			String taxChargNm				= params.get("userName");				//담당자명
			String taxChargHp				= params.get("hp");						//담당자 핸드폰번호
			String taxChargEmail			= params.get("eMail");					//담당자 이메일
			String perpayReqDiv				= params.get("perpayReqDiv");			//신청부분
			String statusCd					= "01";									//상태(01:작성중, 02:선급신청요청, 03:선금신청, 04:부분신청, 10:선금완료, 11:선금포기, 00:신청대상, 91:반려)

			conn.begin();
			
			persistent_u = new PersistentImpl(super.conn.getConnection());
		  
			  sqlstr_u = " UPDATE SUB1030T      														\n"
		              + " SET    TAX_METHOD_CD    			= ?       , 					            \n"
		              + "        TAX_DY 					= ?       , 					            \n"
		              + "        TAX_CHARG_NM				= ?       , 					            \n"
		              + "        TAX_CHARG_HP				= ?       , 					            \n"
		              + "        TAX_CHARG_EMAIL			= ?       , 					            \n"
		              + "        REQ_DIV_CD					= ?       , 					            \n"
		              + "        REQ_PREPAY_AMT				= ?       , 					            \n"
		              + "        REQ_PREPAY_SUPPLY_AMT		= ?       , 					            \n"
		              + "        REQ_PREPAY_SUPPLY_TAMT		= ?       , 					            \n"
		              + "        REQ_PREPAY_SUPPLY_NAMT		= ?       , 					            \n"
		              + "        REQ_PREPAY_SURTAX_AMT		= ?       , 					            \n"
		              + "        STATUS_CD					= ?		  , 					            \n"
		              + "        PREPAY_DATE				= TO_DATE(?, 'YYYY-MM-DD')		            \n"
		              + " WHERE  PREPAY_ID      			= ?        									\n" ;
			  
			persistent_u.setStatement(sqlstr_u);
			
			persistent_u.addParameter(taxMethodCd);
			persistent_u.addParameter(taxDy.replaceAll("-", ""));
			persistent_u.addParameter(taxChargNm);
			persistent_u.addParameter(taxChargHp);
			persistent_u.addParameter(taxChargEmail);
			persistent_u.addParameter(perpayReqDiv);
			persistent_u.addParameter(reqPrepayAmt.replaceAll(",", ""));
			persistent_u.addParameter(reqPrepaySupplyAmt);
			persistent_u.addParameter(reqPrepaySupplyTamt.replaceAll(",", ""));
			persistent_u.addParameter(reqPrepaySupplyNamt.replaceAll(",", ""));
			persistent_u.addParameter(reqPrepaySurtaxAmt.replaceAll(",", ""));
			persistent_u.addParameter(statusCd);
			persistent_u.addParameter(taxDy);
			persistent_u.addParameter(prepayId);
			
			persistent_u.execute();
			persistent_u.clearParameters();

			return true;
        }
        catch(Exception e) {
            super.doException(e);
            super.storage.setMessage(e.getMessage());
            super.storage.setDetailMessage(e);
            super.conn.setRollback();
            return false;
        }
        finally {
        	super.conn.end();
        }
	}
	
	/**
	 * Persistent 를 이용한 Delete 처리
	 * @param params
	 * @return
	 * * 입력받은 선급금 상세 정보를 삭제합니다.
     * @param connection
     * @param pgmName
     * @param screenName
     * @param systemCode
     * @throws Exception
	 */
	private boolean deleteData(ValueObject params) {
		
		
		Persistent persistent_d = null;
		String sqlstr_d = "";

		try {
		
			//선급금 신청 상제 정보
			String prepayId					= params.get("prepayId");				//선급ID
			String subContModId				= params.get("subContModId");			//외주계약변경ID

			conn.begin();
			
			persistent_d = new PersistentImpl(super.conn.getConnection());
			
			  sqlstr_d = 	" DELETE                   		\n"
		                  + " FROM   PREPAY_OUT 			\n"
		                  + " WHERE  PREPAY_ID = ?        	\n";
		        
			persistent_d.setStatement(sqlstr_d);
			persistent_d.addParameter(prepayId);
			
			persistent_d.execute();
			persistent_d.clearParameters();

			return true;
        }
        catch(Exception e) {
            super.doException(e);
            super.storage.setMessage(e.getMessage());
            super.storage.setDetailMessage(e);
            super.conn.setRollback();
            return false;
        }
        finally {
        	super.conn.end();
        }
	}
	
	/**
	 * Persistent 를 이용한 Save 처리
	 * @param params
	 * @return
	 * * 기성신청을 처리한다.
     * @param connection
     * @param pgmName
     * @param screenName
     * @param systemCode
     * @throws Exception
	 */
	private boolean reqData(ValueObject params) {
		
		Persistent persistent_u = null;
		String sqlstr_u = "";

		try {
		
			//선급금 신청 상제 정보
			String prepayId					= params.get("prepayId");			//선급ID
			String statusCd					= params.get("selectStatusCd");		//상태(01:작성중, 02:선급신청요청, 21:선급포기요청, 03:선금신청, 04:결재중, 10:선금완료, 11:포기완료, 00:신청대상, 91:반려)
			String signeddata				= params.get("signeddata");			//서명데이터
			
			conn.begin();
			
			persistent_u = new PersistentImpl(super.conn.getConnection());

			sqlstr_u = " UPDATE SUB1030T      										\n"
			          + " SET    STATUS_CD    				= ?       ,				\n"
			          + "        SIGN_DT	  				= sysdate ,									\n"
			          + "        RTN_REASON    				= ''					\n"
			          + " WHERE  PREPAY_ID      			= ?        				\n"
			          ;
			  
			persistent_u.setStatement(sqlstr_u);
			
			persistent_u.addParameter(statusCd);
			persistent_u.addParameter(prepayId);
			
			persistent_u.execute();
			persistent_u.clearParameters();

			ClobUtils.setClob( conn.getConnection(), "SUB1030T", "SIGN_DATA", " WHERE PREPAY_ID = '"+prepayId+"'", signeddata);
			
			return true;
        }
        catch(Exception e) {
            super.doException(e);
            super.storage.setMessage(e.getMessage());
            super.storage.setDetailMessage(e);
            super.conn.setRollback();
            return false;
        }
        finally {
        	super.conn.end();
        }	
	}
}
