[ Nexacro.Dataset -  개별 validation ]

 

 

/*==+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 * Group : 2. 각 개별적으로 호출되는 validation 검사
 **=++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

/******************************************************************************************
 * 기능 : 값이 NULL인지 검사
 * 인자 : val - 검사하고 싶은 값
 * 리턴 : true / false
 * 예문 :
 *****************************************************************************************/

function gfn_IsNull(val)

{

    var sVal = new String(val);

    

    if (sVal == null || sVal == "NaN" || sVal == "null" || sVal.trim().length <= 0 || escape(sVal) == "undefined"){

        return true;

    }else{

        return false;

    }

}

 

/******************************************************************************************
 * 기능 : 값이 존재하는지 체크
 * 인자 : val - 검사하고 싶은 값
 * 리턴 : true / false
 * 예문 :
 *****************************************************************************************/

 function gfn_IsExist(val)

{

    if (gfn_IsNull(val)){

        return false;

    }else{

        return true;

    }

}

 

/******************************************************************************************
 * 기능 : 값이 존재하는지 여부 체크 (zero도 null 로 판단)
 * 인자 : val : null 을 검증해야 될 값
 * 리턴 : true / false
 * 예문 :
 *****************************************************************************************/

function gfn_IsNullZero(val)

{

    var sVal = new String(val);

    sVal = sVal.trim();

    

    if(gfn_IsNull(val) == true || sVal == "0" || sVal == "0.0" || sVal == "0.00" || sVal == "0.000"){

        return true;

    }else{

        return false;

    }

}

 

/******************************************************************************************

 * 기능 : 그룹별 SUM 구하여 검사하고 싶은 MAX값보다 크면 해당 ROW를 RETURN

 * 인자 : objDs       - 검사할 dataset

 *         psGrpCol   - Group을 묶어서 검사할 컬럼 리스트

 *         psSumCol   - 합계용 컬럼

 *         pnMinValue  - 최소값

 *         pnMaxValue - 최대값

 * 리턴 : -1           : 정상

 *         0보다 크면 : 해당 오류 ROW임

 * 예문 : gfn_bpCheckGroupSum(dsExceptShop, "SHOP_CD,IMP_CD", "CLASS_RATT", 100, 100);

 *         "SHOP_CD,IMP_CD" 2개의 컬럼 그룹별로  SUM(CLASS_RATT:율) 합이 : 최소100, 최대100 이여야 함.

 *****************************************************************************************/

function gfn_CheckGroupSum(objDs, psGrpCol, psSumCol, pnMinValue, pnMaxValue){

    var arrGrpCol = psGrpCol.split(",");

    var sFindExpr, nFindRow, nSumValue;

    

    pnMinValue = toNumber(pnMinValue);

    pnMaxValue = toNumber(pnMaxValue);

    

    for(var nRow=0; nRow < objDs.getRowCount(); nRow++){

        

        sFindExpr = "";

        for(var ii=0; ii<arrGrpCol.length; ii++){

            if (ii==0)

                sFindExpr += arrGrpCol[ii] + "=='" + objDs.getColumn(nRow, arrGrpCol[ii]) + "'";

            else

                sFindExpr += " && " + arrGrpCol[ii] + "=='" + objDs.getColumn(nRow, arrGrpCol[ii]) + "'";

        }

 

        nSumValue = 0;

        nFindRow  = -1;

        do{

            nFindRow = objDs.findRowExpr(sFindExpr, nFindRow + 1);

            if (nFindRow < 0) break;

            

            nSumValue += toNumber(objDs.getColumn(nFindRow, psSumCol));

            

        }while(true);

        if (pnMinValue > nSumValue || nSumValue > pnMaxValue){

            return nRow;

        }

    }

    

    return -1;

}

 

/******************************************************************************************
 * 기능 : 여러개의 레코드에서 연속된 FROM~TO 일자가 존재 할 경우 검사
 * 인자 : objDs        - 검사할 dataset
 *         psGrpCol     - 그룹으로 묶을 컬럼목록
 *         psDtFormat   - 시작~종료가 년, 년월, 년월 구분값(YEAR, YM, YMD)
 *         psContYn     - 위라인 종료일자와 현재라인 시작일자간 계속연결여부
 *                        (Y - 날자가 계속 연결되어야 됨.      (위 라인.종료일자+1 = 현재라인.시작일자  이면 정상)
 *                         N - 날자가 계속 연결되지 않아다 됨. (위 라인.종료일자   < 현재라인.시작일자  이면 정상)
 * 리턴 : -1           : 정상
 *         0보다 크면 : 해당 오류 ROW임
 * 예문 :
 * 화면컬럼 : 부서, 매장, 판매방법, 시작일자 ,  종료일자
 *             A001 , 111  , 1        , 2013.01.01,  2013.06.01
 *             A001 , 111  , 1        , 2013.06.02,  2013.08.01
 *             A001 , 111  , 1        , 2013.08.01,  2014.01.15   <--이부분에서 오류 처리.  시작일자 2013.08.01은 위쪽 시작~종료일자에 포함 되므로.
 *             B001 , 111  , 1        , 2013.01.01,  2013.06.01
 *
 * 필수처리 : 시작~종료일자는 반드시 필수 이면서,  일자검사(년, 년월, 년월일,  최소값, 최대값)는 마친 후에 호출 해야 됨
 *****************************************************************************************/

function gfn_CheckGroupFromToDate(objDs, psGrpCol, psDateCol, psDtFormat, psContYn){

    var nRowCnt = objDs.rowcount;

    if (nRowCnt == 0) return -1;

 

    psDtFormat = psDtFormat.toUpperCase();

    var aGrpCol  = psGrpCol.split(',');

    var aDateCol = psDateCol.split(',');

    var sFromDt, sToDt, sNextDt;

    

    // 1. 컬럼 그룹별, 날짜별로 정렬

    var sKeyString = "S:";

    for(var ii=0; ii<aGrpCol.length; ii++){

        sKeyString = sKeyString + "+" + aGrpCol[ii];

    }

    for(var ii=0; ii<aDateCol.length; ii++){

        sKeyString = sKeyString + "+" + aDateCol[ii];

    }

    objDs.keystring = sKeyString;

    

    //------------------------------------------------------------------

    // 3. 이전ROW와 현재 ROW간에 일자 검사 (0 row는 skip)

    //------------------------------------------------------------------

    var bSame;

    for(var nRow=1; nRow<nRowCnt; nRow++){

        // a. 위쪽ROW와 현재ROW간에 그룹컬럼값들이 동일하지 검사

        //    --동일하면 : 위쪽ROW.종료일자 와 현재ROW.시작일자간 검사

        bSame = true;

        for(var ii=0; ii<aGrpCol.length; ii++){

            if (objDs.getColumn(nRow-1, aGrpCol[ii]) != objDs.getColumn(nRow, aGrpCol[ii])){

                bSame = false;

                break;

            }

        }

        if (bSame == false) continue;

 

        

        // b. 현재 ROW에 대한 시작일자 < 종료일자 검사

        sFromDt = objDs.getColumn(nRow, aDateCol[0]);

        sToDt   = objDs.getColumn(nRow, aDateCol[1]);

        if (sFromDt > sToDt){

            alert("시작일자가 종료일자보다 더 클 수 없습니다.");

            return nRow;

        }

        

        // c. 위쪽ROW와 현재ROW간에 그룹컬럼값들이 동일하므로 검사

        sToDt   = objDs.getColumn(nRow-1, aDateCol[1]);

        sFromDt = objDs.getColumn(nRow  , aDateCol[0]);

        

        if (psDtFormat == "YEAR"){

            sNextDt = (toNumber(sToDt) + 1).toString();

        }else if(psDtFormat == "YM"){

            sNextDt = gfn_AddMonth(sToDt, 1);

        }else if(psDtFormat == "YMD"){

            sNextDt = gfn_AddDate(sToDt, 1);

        }

        

        if (psContYn == 'Y'){

            if (sNextDt != sFromDt){

                alert("종료일자와 시작일자가 연속으로 입력되지 않았습니다.");

                return nRow;

            }

        }else{

            if (sNextDt > sFromDt){

                alert("종료일자와 시작일자가 연속으로 입력되지 않았습니다..");

                return nRow;

            }

        }

    }

    return -1;

}

 

☞  

 

☞  

 
 
 
 

  

'Nexacro-Function > Dataset' 카테고리의 다른 글

Nexacro.Dataset - ds validation2  (0) 2017.01.28
Nexacro.Dataset - ds validation1  (0) 2017.01.28
Nexacro.Dataset - 숫자 계산처리  (0) 2017.01.28
Nexacro.Dataset - 한줄 추가.삭제  (0) 2017.01.28
Nexacro.Dataset - 복사(copy)  (0) 2017.01.28
Posted by 농부지기
,