//#20171227 인천공항 포스연동 start, phj
//#20171227 인천공항 포스연동 end, phj

using System;
using System.Collections;
using Cosmos.UserFrame;
using Cosmos.ServiceProvider;
using Cosmos.Common;
using Cosmos.CommonManager;
using System.Text;

using System.Runtime.InteropServices;
using System.IO;
using System.Data.OleDb;
using System.Data;
using System.Xml;
using ADODB;
using System.Reflection;
using PosDBApi;
using Cosmos.BaseFrame;


/*-----------------------------------------------------------------------------------------------*/
// 설      명 : 인천공항 데이터 연동 함수모음  
/*-----------------------------------------------------------------------------------------------*/
namespace Cosmos.Service
{
    class AirPortTran : PaymentBase, IAirPortTran
    //class AirPortTran : IAirPortTran
    {
        #region 생산자
        public static PosDBApiImp posapi = null;

        //private SManager sManager = new SManager();                                 // 이 객체를 통해 업무 Service 호출
        //private StateServer StateObject = (StateServer)StateServer.GetInstance();   // StateObject : StateServer Object (객체)
        //private PosStatus m_cPosStatus = new PosStatus();                           // 기본정보 참조
        //private TranStatus m_cTrnStatus = new TranStatus();                         // 거래정보 참조
        //private DeviceStatus m_cDevStatus = new DeviceStatus();                     // 디바이스 관리 
        //private IDataCommonUs m_cDataCommon = null;                                 // POS 공통함수 인터페이스
        //private IDataProcessUs m_cDataService = null;                               // 거래데이터 합계금액 계산 및 관리 
        //private ISaleCompleteUs m_cSaleComplete = null;         
        //private ISalePluItemUs m_cPluService = null;                                // 판매 등록 관리

        //#20180117 돈통오픈 start,phj
        private ICashdrawerUs m_cCashDrawer = null;
        //#20180117 돈통오픈 start,phj

        //#20180119 로직변경 start,phj
        private IPaymentUs m_cPaymentUs = null;                                       // 현금 결제 클레스
        //#20180119 로직변경 end,phj 

        /// <summary>
        /// 현재 등록중인 결제 정보
        /// </summary>
        public AirPortTran()
        {
            posapi = new PosDBApiImp();

            m_cPosStatus = (PosStatus)StateObject.POS;      // POS 기본정보
            m_cTrnStatus = (TranStatus)StateObject.TRAN;    // POS 거래정보
            //m_cDevStatus = (DeviceStatus)StateObject.TRAN;  // 디바이스 관리 
            //m_cDataService = (IDataProcessUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_SERVICE);
            //m_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON);
            //m_cSaleComplete = (ISaleCompleteUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.SALE_COMPLETE);
            //m_cPluService = (ISalePluItemUs)sManager.InitServiceInstance(ServiceLists.BSV_SALE.DLL, ServiceLists.BSV_SALE.SALE_PLU_ITEM);

            //#20180117 돈통오픈 start,phj
            m_cCashDrawer = (ICashdrawerUs)sManager.InitServiceInstance(ServiceLists.AGENT_OLEDEVICE.DLL, ServiceLists.AGENT_OLEDEVICE.DEVICE_CASHDRAWER);
            //#20180117 돈통오픈 start,phj

            //#20180119 로직변경 start,phj
            m_cPaymentUs = (IPaymentUs)sManager.InitServiceInstance(ServiceLists.BSV_PAYMENT.DLL, ServiceLists.BSV_PAYMENT.CASH);
            //#20180119 로직변경 end,phj

        }
        #endregion

        #region 인천공항 DLL 로딩
        private int i_AirPort_Pos_Create()
        {
            int iRet = -1;

            try
            {
                if (posapi != null)
                {
                    iRet = 1;
                }
                else
                {
                    posapi = new PosDBApiImp();
                }

                return iRet;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                            " ** IncheonAirport DLL Loading Error : (" + iRet + ") " + ex.Message);

                return iRet;
            }
        }
        #endregion

        #region 인천공항 POS DB Connect 
        private int i_Airport_Start()
        {
            int iRet = -1;

            string AirportIP = string.Empty;
            string AirPortUser = string.Empty;
            string AirportPass = string.Empty; 

            AirportIP = m_cPosStatus.IncheonAirport.AirportIP;
            AirPortUser = m_cPosStatus.IncheonAirport.AirportUser;
            AirportPass = m_cPosStatus.IncheonAirport.AirportPass;

            if (AirportIP == "" || AirPortUser == "" || AirportPass == "")
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     " ** IncheonAirport DB Connect - No Information ");

                WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0746);

                return iRet;
            }
            else
            {
                try
                {
                    // 인천공항 PosDBApi.dll 파일 존재 여부 검사
                    if (b_AirPort_Pos_FileExist() == false) return iRet;

                   
                    // PosDBConnect( int 리턴 )
                    // *************************************************
                    // 0. 통합POS DB접속 함수
                    // 1. 파라미터 - sPosIP : 통합 포스의 IP 정보
                    //             - sUser  : 통합 포스의 접속 계정
                    //             - sPass  : 통합 포스의 접속 계정 암호
                    // 2. 리턴     - 1 : 성공
                    //             - 0 : 실패
                    // *************************************************
                  
                    if (posapi != null)
                    {
                        iRet = posapi.PosDBConnect(AirportIP, AirPortUser, AirportPass);
                    }
                    else
                    {
                        // dll 로딩이 안된 경우를 대비해서 한번 더 체크
                        if (i_AirPort_Pos_Create() != 1)
                        {
                            if (posapi != null)
                            {
                                iRet = posapi.PosDBConnect(AirportIP, AirPortUser, AirportPass);
                            }
                        }
                    }

                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         " ** IncheonAirport DB Connect - " + iRet.ToString() + " (0 : FAIL, 1 : SUCCESS)");

                    if (iRet != 1) WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0747);

                    return iRet;
                }
                catch (Exception ex)
                {
                    WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                " ** IncheonAirport DB Connect Error - " + iRet.ToString() + " (0 : FAIL, 1 : SUCCESS) " + ex.Message);

                    return iRet;
                }
            }
        }
        #endregion

        #region 인천공항 POS  DB DisConnect 
        private int i_AirPort_End()
        {
            int iRet = -1;

            try
            {
                // 인천공항 PosDBApi.dll / PosDBApi.tlb 파일 존재 여부 검사
                if (b_AirPort_Pos_FileExist() == false) return iRet;

                // PosDBDisConnect( int 리턴 )
                // *************************************************
                // 0. 통합POS DB접속 해제 함수
                // 1. 파라미터없음
                // 2. 리턴     - 1 : 성공
                //             - 0 : 실패
                // *************************************************
                if (posapi != null)
                {
                    iRet = posapi.PosDBDisConnect();
                }

                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     " ** IncheonAirpot DB Disconnect Result : " + iRet + " (0 : FAIL, 1 : SUCCESS)");

                return iRet;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                            " ** IncheonAirpot DB Disconnect Error : (" + iRet + ") " + ex.Message);

                return iRet;
            }
        }
        #endregion

        #region 인천공항 통합POS에서 판매일자, 빌번호의 거래상태 조회
        private int i_AirPort_PosGetSalesTrStatus(string pSaleDt, string pBillNo)
        {
            int iRet = -1;

            try
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     " ** Bill state Search Start ! SaleData : " + pSaleDt + " , BillNo : " + pBillNo);

                // 인천공항 PosDBApi.dll / PosDBApi.tlb 파일 존재 여부 검사
                if (b_AirPort_Pos_FileExist() == false) return iRet;

                // 통합POS에서 판매일자, 빌번호의 거래상태 조회
                // PosGetSalesTrStatus( int 리턴 )
                // *************************************************
                // 0. 통합POS에서 해당빌 거래 상태 조회 함수
                // 1. 파라미터 - SALE_DT : 판매일자(8)
                //             - BILL_NO : 입주사영수증번호(30)
                // 2. 리턴     - 300  : 결제 가능
                //             - 301  : 결제 취소 된 항목으로 결제 할 수 있음
                //             - 302  : 통합 포스에서 결제하기 위해 준비 중
                //             - 303  : 통합 포스에서 이미 결제 된 항목
                //             - 304  : 해당 값이 없는 경우
                //             - 1000 : 기타 에러
                // *************************************************
                iRet = posapi.PosGetSalesTrStatus(pSaleDt, pBillNo);
               
                #region PosGetSalesTrStatus MSG 
                string sRet = string.Empty;
                switch (iRet)
                {
                    case 300:
                        {
                            sRet = "결제가능";
                            break;
                        }
                    case 301:
                        {
                            sRet = "결제취소 된 항목으로 결제 할 수 없음";
                            break;
                        }
                    case 302:
                        {
                            sRet = "통합포스에서 결제하기 위해 준비 중";
                            break;
                        }
                    case 303:
                        {
                            sRet = "통합포스에서 이미 결제 된 항목";
                            break;
                        }
                    case 304:
                        {
                            sRet = "해당 값이 없는 경우";
                            break;
                        }
                    case 1000:
                        {
                            sRet = "기타에러";
                            break;
                        }
                }
                #endregion

                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     " ** Bill state Search End ! result : " + iRet + " , result Msg : " + sRet);
                return iRet;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                            " ** Bill state Search Error ! " + ex.Message);

                return iRet;
            }
        }
        #endregion

        #region 인천공항 통합POS로 결제 리스트 전송
        private int i_AirPort_Pos_Sale_TRAN()
        {
            int iRet = 1;
            int iSeq = 0;
            string sPayCode = string.Empty;
            string sCashbill = string.Empty;

            try
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                    System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                    " ** Send Pay-List to IncheonAirport POS Start!");

                #region 결제 건 수 없을 때
                // 결제 리스트
                ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
                // 결제 건 수 없을 때
                if (alPayItem.Count == 0 || alPayItem == null)
                {
                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                        System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                        System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                        " ** Send Pay-List to IncheonAirport POS - no Pay-List");
                    return 1;
                }
                #endregion

                #region 인천공항 통합POS로 결제 리스트 전송
                for (int iRow = 0; iRow < alPayItem.Count; iRow++)
                {
                    Column.TR_PAYMENT.DATA cPayItem = (Column.TR_PAYMENT.DATA)alPayItem[iRow];

                    if ((cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.CREDITCARD_ITEM && cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.CREDITCARD.CREDIT_CARD) ||  //카드
                        ((cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.CASH_ITEM && cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.CASH.CASH_PAY) || //현금
                         (cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.FOREIGNEX_ITEM) ||//외화 
                         (cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.CHECK_ITEM))) //수표 
                        continue;
                    if (cPayItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL) continue; // 취소 건너뛰기 

                    //#20180130 BRK 경우, 이베이쿠폰이면 PAY_DTL_CD_03 체크안하도록 수정 start,PHJ 
                    //기존
                    //if (cPayItem.PAY_DTL_CD_03 == "1") continue; // 1: 할인상품에적용 0: 할인상품에적용안함 <-- 할인이지만 결제처리 되는 건만 전송하기 위해서 

                    //변경
                    if ((m_cTrnStatus.Head.CmpCd == "BRKR" && cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.MOBILECON_ITEM && cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.MOBILECON.E_BAYCON) == false)
                    {
                        if (cPayItem.PAY_DTL_CD_03 == "1") continue; // 1: 할인상품에적용 0: 할인상품에적용안함 <-- 할인이지만 결제처리 되는 건만 전송하기 위해서 
                    }
                    //#20180130 BRK 경우, 이베이쿠폰이면 PAY_DTL_CD_03 체크안하도록 수정 end,PHJ 

                    //if (cPayItem.PAY_DTL_CD_05 != "1") continue; //결제만 (1: 결제, 2:할인)

                    iSeq = iSeq + 1; // 시퀀스
                    sPayCode = cPayItem.PAY_WAY_CD + cPayItem.PAY_DTL_CD_01; // 결제코드는 결제코드 + 상세코드로 보낸다.
                    if (cPayItem.OCCUR_ENTRY_21 == "1") // 현금영수증 1: Y, 0: N
                    {
                        sCashbill = "Y";
                    }
                    else
                    {
                        sCashbill = "N";
                    }

                    //#20180119 로직변경 start,phj 
                    //기존
                    /*
                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                        System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                        System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                        " ** Send Pay-List to IncheonAirport POS - PosSetEtcPayD : (BillNo :" + m_cPosStatus.Base.TradeNo + ", Seq :" + cPayItem.SEQ.ToString() + ", PayCd :" + sPayCode + ", CashYN :" + sCashbill + " , PayAmt : " + cPayItem.AMT_ENTRY_01.ToString() + ")");

                    */
                    //변경
                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                        System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                        System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                        " ** Send Pay-List to IncheonAirport POS - PosSetEtcPayD : (BillNo :" + m_cPosStatus.Base.TradeNo + ", Seq :" + iSeq.ToString() + ", PayCd :" + sPayCode + ", CashYN :" + sCashbill + " , PayAmt : " + cPayItem.AMT_ENTRY_01.ToString() + ")");

                    //#20180119 로직변경 end,phj 


                    //*****************************************************************************************
                    //PosSetEtcPayD
                    //설명 : 본 함수는 입주사포스에서 기타결제 정보를 통합포스에 전달하기 위한 함수 이다
                    //       리턴 값이 0 or 1000 일 경우 PosGetLastErrorMsg 를 호출하여 메시지를 확인 한다
                    //리턴 : 1    - 성공 
                    //       1000 - 기타 예외 에러 (PosGetLastErrorMsg 호출해서 메세지를 확인한다.)
                    //파라미터 : 판매일자 / 입주사거래번호 / 순번 / 기타결제코드 / 현금승인구분(Y/N) / 결제금액
                    //*****************************************************************************************
                    iRet = -1;

                    //#20180119 로직변경 start,phj 
                    //기존
                    /*
                    iRet = posapi.PosSetEtcPayD(m_cTrnStatus.Head.SaleDate,                     //판매일자
                                                m_cPosStatus.Base.TradeNo,                      //영수증 번호
                                                //int.Parse(cPayItem.SEQ.ToString()),           //결제 시퀀스
                                                iSeq,                                           //결제 시퀀스
                                                sPayCode,                                       //결제코드+상세코드
                                                sCashbill,                                      //현금영수증대상유무(발생번호21)
                                                int.Parse(cPayItem.AMT_ENTRY_01.ToString()));   //결제금액(금액항목1)

                    */
                    //변경
                    iRet = posapi.PosSetEtcPayD(m_cTrnStatus.Head.SaleDate,                     //판매일자
                                                m_cPosStatus.Base.TradeNo,                      //영수증 번호
                                                //int.Parse(cPayItem.SEQ.ToString()),           //결제 시퀀스
                                                iSeq,                                           //결제 시퀀스
                                                sPayCode,                                       //결제코드+상세코드
                                                sCashbill,                                      //현금영수증대상유무(발생번호21)
                                                int.Parse(cPayItem.PAY_AMT.ToString()));        //결제금액(금액항목1)
                    //#20180119 로직변경 end,phj

                    if (iRet == 1)
                    {
                        // 결제 리스트 전송 성공
                        UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                            " ** Send Pay-List to IncheonAirport POS - PosSetEtcPayD Success! " + iRet.ToString());
                    }
                    else
                    {
                        // 결제 리스트 전송 실패
                        UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                            " ** Send Pay-List to IncheonAirport POS - PosSetEtcPayD Failure! " + iRet.ToString());
                    }

                    if (iRet != 1) { break; }
                }
                #endregion 

                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                    System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                    " ** Send Pay-List to IncheonAirport POS End!");

                return iRet;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                            " ** Send Pay-List to IncheonAirport POS - PosSetEtcPayD Error! [" + iRet.ToString() + "] " + ex.Message);


                return iRet;
            }
        }

        #endregion

        #region 인천공항 POS로 상품전송 후 컴플릿
        private int i_PosSalesItemComplete()
        {
            int iRet = -1;

            try
            {
                // 인천공항 pos에 판매 품목 등록 확정
                // PosSalesItemComplete( int 리턴 )
                // *************************************************
                // 0. 통합POS에 판매 품목 등록 완료 함수
                // 1. 파라미터 - SALE_DT    : 판매일자(8)
                //             - BILL_NO    : 입주사영수증번호(30)
                // 2. 리턴     - 1   : 판매 정보 등록 성공
                //             - 500 : 입력한 파라메터 중 길이제한 오류
                //             - 700 : 등록하려는 품목 정보가 없는 경우
                //             - 100 : 이미 결제가 진행 중이거나, 결제 완료 된 품목정보가 있는 경우
                //             - 0   : 품목 정보 등록 실패
                // *************************************************
                iRet = i_AirPort_Pos_SaleItemComp(m_cTrnStatus.Head.SaleDate, m_cPosStatus.Base.TradeNo);

                if (iRet == 1)
                {
                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         " ** IncheonAirport Tran ItemComplete. Success! [" + iRet.ToString() + "]");
                }
                else
                {
                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         " ** IncheonAirport Tran ItemComplete. Failure! [" + iRet.ToString() + "]");
                }

                return iRet;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                            " ** IncheonAirport Tran ItemComplete. Error! [" + iRet.ToString() + "] " + ex.Message);

                return iRet;
            }
        }
        #endregion


        #region 인천공항 POS로 상품전송, 컴플릿
        //private int i_AirPort_Pos_TRAN(string pAirPosCompCd, string pAirPosStorCd, string pAirPosPosNo)
        private int i_AirPort_Pos_TRAN()
        {
            int iRet = -1;

           
            int iSaleItemAddRslt = -1; // 인천공항포스에 상품등록한 결과 값. 
            int iSaleItemCnt = 0; // SPC포스에서 상품등록한 갯 수.
            int iSaleItemAddCnt = 0; // 인천공항포스에 상품등록 성공한 갯 수.             

            int iCompleteRslt = -1; // 제품 등록 후 컴플리트 RESULT 
            int iPaylistTran = -1;  // 결제 등록 후 컴플리트 RESULT 
            string sDcAmt = string.Empty; // 상품 할인 금액 

            #region 변수 초기화
            string pSALE_DT = string.Empty;
            string pBILL_NO = string.Empty;
            string pSEQ = string.Empty;
            string pITEM_CD = string.Empty;
            string pITEM_NM = string.Empty;
            string pQTY = string.Empty;
            string pSALE_PRICE = string.Empty;
            string pTOT_AMT = string.Empty;
            string pSALE_AMT = string.Empty;
            string pDC_AMT = string.Empty;
            string pCOMP_CD = string.Empty;
            string pSTOR_CD = string.Empty;
            string pPOS_NO = string.Empty;
            string pSTAY_DC_AMT = string.Empty;
            string pDC_TYPE = string.Empty;
            string pPROM_CD = string.Empty;
            string pPROM_NM = string.Empty;
            string pPROM_FR = string.Empty;
            string pPROM_TO = string.Empty;
            string pPROM_RATE_1 = string.Empty;
            string pPROM_RATE_2 = string.Empty;
            string pCounpNo = string.Empty;
            #endregion
             
            try
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     " ** Send ItemList, PayList To IncheonAirport POS. Start (trade_no : " + m_cPosStatus.Base.TradeNo + ")");


                #region SPCPOS 상품을 통합POS로 전송한다.
                Column.TR_PLU.DATA cPluItem = null;
                ArrayList alPluItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);

                //#20180119 로직변경 start,phj 
                //기존
                /*
                #region SPC포스에서 등록된 상품이 있는지 체크한다.
                if (alPluItem == null || alPluItem.Count <= 0)
                {
                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         " ** No products to send! trade_no : " + m_cPosStatus.Base.TradeNo);
                    return iRet;
                }
                #endregion
                */
                //#20180119 로직변경 end,phj 


                //#20180129 상품, 결제 전송 완료 후 컴플릿 하도록 수정 start,phj
                bool bDcType = false;
                //#20180129 상품, 결제 전송 완료 후 컴플릿 하도록 수정 end,phj

                for (int i = 0; i < alPluItem.Count; i++)
                {
                    cPluItem = (Column.TR_PLU.DATA)alPluItem[i];
                    
                    if (cPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue;      // 지정취소
                    //if (cPluItem.ITEM_DIV != ItemConst.PLU_ITEM_DIV.NORMAL && cPluItem.ITEM_DIV != ItemConst.PLU_ITEM_DIV.SET_MAIN) continue;     //                       
                    //if (cPluItem.BILLSPR_NO != m_cTrnStatus.Sale.BillSplitNo) continue;                                                           // 빌분리번호
                    //if (cPluItem.DC_PRMT_YN == "1") continue;

                    if (cPluItem.NONSALES_RSN_CD != "0")                                                                                            // 비매출구분
                    {
                        //SALE_QTY * SALE_PRC
                        double TempDcAmt = 0;
                        TempDcAmt = cPluItem.SALE_QTY * cPluItem.SALE_PRC;
                        sDcAmt = TempDcAmt.ToString();
                    }
                    else
                    {
                        // 할인금액 DC_RATE + DC_AMT
                        double TempDcAmt = 0;
                        /*
                        TempDcAmt =   cPluItem.ITEM_DC_AMT // POS 단품 할인 금액
                                    + cPluItem.SUM_DC_AMT // POS 소계 할인 금액
                                    + cPluItem.CPI_DC_AMT // 캠페인 할인 금액
                                    + cPluItem.COOP_CARD_DC_AMT // 제휴카드 할인 금액(SKT,LGT,KT 할인 금액)
                                    + cPluItem.POINT_DC_AMT // 포인트 할인 금액
                                    + cPluItem.CPN_DC_AMT // 쿠폰 할인 금액
                                    + cPluItem.ETC_DC_AMT // 직원 할인 금액
                                    + cPluItem.SET_DC_AMT // 세트 할인 금액
                                    + cPluItem.EXCEP_DC_AMT; // 예외할인금액
                         */

                        TempDcAmt = CmUtil.DoubleAdd(TempDcAmt, cPluItem.ITEM_DC_AMT);              // 단품 할인 금액
                        TempDcAmt = CmUtil.DoubleAdd(TempDcAmt, cPluItem.SUM_DC_AMT);               // 소계 할인 금액
                        TempDcAmt = CmUtil.DoubleAdd(TempDcAmt, cPluItem.CPI_DC_AMT);               // 행사 할인 금액
                        TempDcAmt = CmUtil.DoubleAdd(TempDcAmt, cPluItem.COOP_CARD_DC_AMT);         // 제휴카드 할인 금액
                        TempDcAmt = CmUtil.DoubleAdd(TempDcAmt, cPluItem.POINT_DC_AMT);             // 포인트 할인 금액
                        TempDcAmt = CmUtil.DoubleAdd(TempDcAmt, cPluItem.CPN_DC_AMT);               // 쿠폰 할인 금액
                        TempDcAmt = CmUtil.DoubleAdd(TempDcAmt, cPluItem.EMP_DC_AMT);               // 직원 할인 금액
                        TempDcAmt = CmUtil.DoubleAdd(TempDcAmt, cPluItem.SET_DC_AMT);               // 세트 할인 금액
                        TempDcAmt = CmUtil.DoubleAdd(TempDcAmt, cPluItem.ETC_DC_AMT);               // 기타 할인 금액
                        TempDcAmt = CmUtil.DoubleAdd(TempDcAmt, cPluItem.EXCEP_DC_AMT);             // 예외 할인 금액

                        sDcAmt = TempDcAmt.ToString();

                        //#20180129 상품, 결제 전송 완료 후 컴플릿 하도록 수정 start,phj

                        //#20180130 임의할인이고, 입점할인 경우만 할인유형 변경 start,phj 
                        //기존
                        //if (cPluItem.DC_DIV.Substring(0,2) == "17") 
                        //변경
                        if (cPluItem.DC_DIV.Substring(0, 4) == ItemConst.TR_ITEM_ID.USER_DC_ITEM + ItemConst.TR_ITEM_ID.USER_DC.IN_EMP_DC ||
                            cPluItem.DC_DIV.Substring(0, 4) == ItemConst.TR_ITEM_ID.USER_DC_ITEM + ItemConst.TR_ITEM_ID.USER_DC.IN_EMP_DC_5)
                        //#20180130 임의할인이고, 입점할인 경우만 할인유형 변경 end,phj 
                        {
                            bDcType = true;                            
                        }
                        else
                        {
                            bDcType = false;
                        }
                        //#20180129 상품, 결제 전송 완료 후 컴플릿 하도록 수정 end,phj
                        
                    }

                    iSaleItemCnt = iSaleItemCnt + 1;  

                    #region 전송할 제품 정보 셋팅
                    pSALE_DT = m_cTrnStatus.Head.SaleDate;                 //판매일자(8)           
                    pBILL_NO = m_cPosStatus.Base.TradeNo;                  //입주사거래번호(30)  
                    pSEQ = iSaleItemCnt.ToString();                        //순번(5) 
                    pITEM_CD = cPluItem.ITEM_PLU_CD;                       //품목코드(30) 
                    pITEM_NM = cPluItem.ITEM_NAME;                         //품목명(100) 
                    pQTY = cPluItem.SALE_QTY.ToString();                   //수량(5) 
                    pSALE_PRICE = cPluItem.SALE_PRC.ToString();            //판매단가(9) 
                    pTOT_AMT = cPluItem.SALE_AMT.ToString();               //총합계(9) 
                    pSALE_AMT = cPluItem.BILL_AMT.ToString();              //실판매(9) 

                    //#20180119 할인유형 원복 start
                    //기존
                    /*
                    //#20180117 할인유형 변경 start,phj 
                    //pDC_AMT = sDcAmt;                                      //할인(9) // 할인유형1 - SPC쪽 할인..
                    pDC_AMT = "0";                                      //할인(9) // 할인유형1 - SPC쪽 할인..
                    //#20180117 할인유형 변경 end,phj 
                    */
                    //변경
                    //pDC_AMT = sDcAmt;                                      //할인(9) // 할인유형1 - SPC쪽 할인..
                    //#20180119 할인유형 원복 end

                    pCOMP_CD = m_cPosStatus.IncheonAirport.AirportComp;    //입주사코드(10) 
                    pSTOR_CD = m_cPosStatus.IncheonAirport.AirportStore;   //매장코드(10) 
                    pPOS_NO = m_cPosStatus.IncheonAirport.AirportPosNo;    //POS번호(10) 

                    //#20180119 할인유형 원복 start
                    //기존
                    /*
                    //#20180117 할인유형 변경 start,phj 
                    //pSTAY_DC_AMT = "0"; // 할인유형2 
                    pSTAY_DC_AMT = sDcAmt; // 할인유형2 
                    //#20180117 할인유형 변경 start,phj 
                    */
                    //변경
                    //pSTAY_DC_AMT = "0"; // 할인유형2
                    //#20180119 할인유형 원복 end

                    //#20180119 할인유형 원복 start
                    //기존
                    /*
                    //#20180117 할인유형 변경 start,phj 
                    //pDC_TYPE = "1"; // 1: 할인유형1, 2:할인유형2
                    pDC_TYPE = "2"; // 1: 할인유형1, 2:할인유형2
                    //#20180117 할인유형 변경 end,phj
                    */
                    //변경
                    //pDC_TYPE = "1"; // 1: 할인유형1, 2:할인유형2
                    //#20180119 할인유형 원복 end

                    //#20180129 상품, 결제 전송 완료 후 컴플릿 하도록 수정 start,phj
                    if (bDcType == true)
                    {
                        pDC_TYPE = "2";
                        pSTAY_DC_AMT = sDcAmt;
                        pDC_AMT = "0";
                    }
                    else
                    {
                        pDC_TYPE = "1";
                        pSTAY_DC_AMT = "0";
                        pDC_AMT = sDcAmt;
                    }
                    //#20180129 상품, 결제 전송 완료 후 컴플릿 하도록 수정 end,phj

                    pPROM_CD = "";
                    pPROM_NM = "";
                    pPROM_FR = "";
                    pPROM_TO = "";
                    pPROM_RATE_1 = "0";
                    pPROM_RATE_2 = "0";
                    pCounpNo = "";
                    #endregion

                    #region 상품전송 (i_AirPort_Pos_SaleItemAdd)

                    iSaleItemAddRslt = i_AirPort_Pos_SaleItemAdd(pSALE_DT, pBILL_NO, pSEQ, pITEM_CD, pITEM_NM, pQTY,
                                                                 pSALE_PRICE, pTOT_AMT, pSALE_AMT, pDC_AMT, pCOMP_CD, pSTOR_CD,
                                                                 pPOS_NO, pSTAY_DC_AMT, pDC_TYPE, pPROM_CD, pPROM_NM, pPROM_FR,
                                                                 pPROM_TO, pPROM_RATE_1, pPROM_RATE_2, pCounpNo);

                    if (iSaleItemAddRslt == 1)
                    {
                        iSaleItemAddCnt = iSaleItemAddCnt + 1;// 상품 등록 성공한 횟수 
                    }
                    // 제품등록 실패하면 
                    else 
                    {
                        if (iSaleItemAddRslt == 600)
                        {
                            UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                                 System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                                 System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                                 " ** Send products-List of SPCPOS to Incheon Airport POS. failure! no products! Item : " + pITEM_NM + ", Result : " + iSaleItemAddRslt.ToString());
                        }
                        else
                        {
                            UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                                 System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                                 System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                                 " ** Send products-List of SPCPOS to Incheon Airport POS. failure! Item : " + pITEM_NM + ", Result : " + iSaleItemAddRslt.ToString());
                        }

                        break;
                    }
                    #endregion 
                }
                #endregion 
       
                #region 1. SPC포스에서 찍은 상품 갯수와 통합포스로 전송 성공한 갯수가 같은지 체크한다.               
                if (iSaleItemCnt == iSaleItemAddCnt)
                {

                    //#20180129 상품, 결제 전송 완료 후 컴플릿 하도록 수정 start,phj 
                    //기존
                    #region 주석처리
                    /*
                    #region 2. 통합포스로 상품 전송 완료 후 컴플릿 함수를 시도한다. 
                    iCompleteRslt = i_PosSalesItemComplete();

                    if (iCompleteRslt == 1)
                    {
                        //WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0748);

                        #region 2. SPC포스에서 통합POS로 결제 리스트를 전송한다. 
                        iPaylistTran = i_AirPort_Pos_Sale_TRAN();

                        if (iPaylistTran == 1)
                        {
                            //WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0750);
                            iRet = iPaylistTran;
                        }
                        else
                        {
                            WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0751);
                        }
                        #endregion
                    }
                    else
                    {
                        WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0749);
                    }
                    #endregion
                    */
                    #endregion
                    
                    //변경
                    //상품 전송 후 결제 리스트 전송.
                    //이후에 컴플릿!!! 
                    iPaylistTran = i_AirPort_Pos_Sale_TRAN();
                    if (iPaylistTran == 1)
                    {
                        //컴플릿!!!
                        iCompleteRslt = i_PosSalesItemComplete();   
                    }
                    iRet = iCompleteRslt;
                    if (iRet != 1)
                    {
                        //WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0749);
                        WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0751);
                    }
                    //#20180129 상품, 결제 전송 완료 후 컴플릿 하도록 수정 end,phj 
                }
                else
                {
                    //#20180129 상품, 결제 전송 완료 후 컴플릿 하도록 수정 start,phj 
                    //iCompleteRslt = i_PosSalesItemComplete();
                    //#20180129 상품, 결제 전송 완료 후 컴플릿 하도록 수정 end,phj 

                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         " ** Send products-List of SPCPOS to Incheon Airport POS. Failure! Number of items is different! [" + iCompleteRslt.ToString() + "]");

                    WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0752);
                }
                #endregion

                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     " ** Send ItemList of SPCPOS  to Incheon Airport POS. End!  (Local Item Count : " + iSaleItemCnt.ToString() + ", Item Tran Count :" + iSaleItemAddCnt.ToString());

                return iRet;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                            " ** Send ItemList of SPCPOS  to Incheon Airport POS. Error! (" + iRet.ToString() + ") " + ex.Message);

                return iRet;
            }
        }
        #endregion
         
        #region 인천공항 POS로 상품전송
        private int i_AirPort_Pos_SaleItemAdd(string pSaleDt, string pBillNo, string pSeq, string pItemCd, string pItemNm,
                                             string pQty, string pSalePrice, string pTotAmt, string pSaleAmt, string pDcAmt,
                                             string pCompCd, string pStorCd, string pPosNo,
                                             string pSTAY_DC_AMT, string pDC_TYPE, string pPROM_CD, string pPROM_NM, string pPROM_FR, string pPROM_TO, string pPROM_RATE_1, string pPROM_RATE_2, string pPROM_COUPON_NO)
        {
            int iRet = -1;
            try
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     " ** Incheon Airport PosSalesItemAdd. start! ");

                // 인천공항 PosDBApi.dll / PosDBApi.tlb 파일 존재 여부 검사
                if (b_AirPort_Pos_FileExist() == false) return iRet;


                // 인천공항 pos에 판매 품목 등록
                // PosSalesItemAdd( int 리턴 )
                // *************************************************
                // 0. 통합POS에 판매 품목 등록 함수
                // 1. 파라미터 - SALE_DT         : 판매일자(8)
                //             - BILL_NO         : 입주사영수증번호(30)
                //             - SEQ             : 순번(5)
                //             - ITEM_CD         : 품목코드(30)
                //             - ITEM_NM         : 품목명(100)
                //             - QTY             : 수량(5)
                //             - SALE_PRICE      : 판매가(9)
                //             - TOT_AMT         : 총합계(9)
                //             - SALE_AMT        : 실판매(9)
                //             - DC_AMT          : 할인(9)
                //             - COMP_CD         : 입주사코드(10)
                //             - STOR_CD         : 매장코드(10)
                //             - POS_NO          : POS번호(10)
                //             - pSTAY_DC_AMT    : 할인유형2 할인 - 공항직원할인(통행증) 공항POS에서도 할수 있음. 
                //             - pDC_TYPE        : 할인유형 구분 - 할인유형1(1), 할인유형2(2) -> 1: SPCPOS할인, 2: 공항POS할인 으로생각하고, 우리쪽에서 날리는거니 '1'으로 픽스.
                //             - pPROM_CD        : 프로모션 코드
                //             - pPROM_NM        : 프로모션명
                //             - pPROM_FR        : 프로모션 시작일
                //             - pPROM_TO        : 프로모션 종료일
                //             - pPROM_RATE_1    : 할인유형1 비율
                //             - pPROM_RATE_2    : 할인유형2 비율
                //             - pPROM_COUPON_NO : 쿠폰번호 
                // 2. 리턴     - 1   : 해당 품목의 판매 정보 등록 성공
                //             - 500 : 입력한 파라메터 중 길이제한 오류
                //             - 600 : 품목 마스터에 해당 품목 코드가 없는 경우
                //             - 0   : 해당 품목의 판매 정보 등록 실패
                // ************************************************* 
                iRet = posapi.PosSalesItemAdd(pSaleDt, pBillNo, int.Parse(pSeq,0) , pItemCd, pItemNm,
                                              int.Parse(pQty, 0), int.Parse(pSalePrice, 0), int.Parse(pTotAmt, 0), int.Parse(pSaleAmt, 0), int.Parse(pDcAmt, 0),
                                              pCompCd, pStorCd, pPosNo,
                                              int.Parse(pSTAY_DC_AMT),          //할인유형2 할인 - 공항직원할인(통행증) 공항POS에서도 할수 있음. 
                                              pDC_TYPE,                         //할인유형 구분 - 할인유형1(1), 할인유형2(2) -> 1: SPCPOS할인, 2: 공항POS할인 으로생각하고, 우리쪽에서 날리는거니 '1'으로 픽스.
                                              pPROM_CD,                         //프로모션 코드
                                              pPROM_NM,                         //프로모션명
                                              pPROM_FR,                         //프로모션 시작일
                                              pPROM_TO,                         //프로모션 종료일
                                              int.Parse(pPROM_RATE_1, 0),       //할인유형1 비율
                                              int.Parse(pPROM_RATE_2, 0),       //할인유형2 비율
                                              pPROM_COUPON_NO);                 //쿠폰번호                     

                if (iRet != 1) { string str = posapi.PosGetLastErrorMsg(); WinManager.ConfirmMessage(str); }

                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     " ** Incheon Airport PosSalesItemAdd. End! Result : " + iRet.ToString() + " (1: SUCCESS),  ItemCd :" + pItemCd);

                return iRet;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                            " ** Incheon Airport PosSalesItemAdd. Error! Result : " + iRet.ToString() + " (1: SUCCESS), pBillNo : " + pBillNo + ", ItemCd :" + pItemCd + ex.Message);

                return iRet;
            }
        }
        #endregion

        #region 인천공항 pos에 상품전송 컴플릿
        private int i_AirPort_Pos_SaleItemComp(string pSaleDt, string pBillNo)
        {
            int iRet = -1;
            try
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     " ** Item Registry Complete. start! ");

                // 인천공항 PosDBApi.dll / PosDBApi.tlb 파일 존재 여부 검사
                if (b_AirPort_Pos_FileExist() == false) return iRet;

                // 인천공항 pos에 판매 품목 등록 확정
                // PosSalesItemComplete( int 리턴 )
                // *************************************************
                // 0. 통합POS에 판매 품목 등록 완료 함수
                // 1. 파라미터 - SALE_DT    : 판매일자(8)
                //             - BILL_NO    : 입주사영수증번호(30)
                // 2. 리턴     - 1   : 판매 정보 등록 성공
                //             - 500 : 입력한 파라메터 중 길이제한 오류
                //             - 700 : 등록하려는 품목 정보가 없는 경우
                //             - 100 : 이미 결제가 진행 중이거나, 결제 완료 된 품목정보가 있는 경우
                //             - 0   : 품목 정보 등록 실패
                // *************************************************
                iRet = posapi.PosSalesItemComplete(pSaleDt, pBillNo);

                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     " ** Item Registry Complete. end! result :" + iRet.ToString() + " , pBillNo :" + pBillNo);

                return iRet;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                            " ** Item Registry Complete. Error! (" + iRet + ")" + ex.Message);

                return iRet;
            }
        }
        #endregion
        
        #region 인천공항 POS에서 결제내역 조회

        // 통합POS에서 결제내역 조회
        // PosGetSalesTr (String 리턴)
        // *************************************************
        // 0. 통합POS에서 결제된 내역 조회 함수
        // 1. 파라미터 - SALE_DT : 판매일자(8)
        //             - BILL_NO : 입주사영수증번호(30)
        //             - SALE_TY : 거래구분(0:정상, 1:반품)
        // 2. 리턴     - String : XML
        // *************************************************
        private int i_AirPort_PosGetSaleTr(string pSaleDt, string pBillNo, string pNBillNo, string pSaleTY, string pResultTY)
        {
            int iRet = -1;
            double iGrdTotAmt = 0; // 판매POS의 총 실판매금액
            double iAirPosPayTot = 0; // 통합POS의 총 실판매금액         
            string sRet = string.Empty;

            try
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     "Get IncheonAirport POS TR Data - Start! (SaleDt :" + pSaleDt + ", BillNo :" + pBillNo + ", NBillNo :" + pNBillNo + ", SaleTY :" + pSaleTY + ", ResultTY :" + pResultTY);

                #region 인천공항 DB 상태 체크
                int iDBStatus = posapi.PosDBConnectDBStatus();
                if (iDBStatus != 1)
                {
                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         "Get IncheonAirport POS TR Data - DB Connect Error ! (" + iDBStatus + ")");
                    return iRet;
                }
                #endregion

                #region 인천공항 PosDBApi.dll / PosDBApi.tlb 파일 존재 여부 검사
                if (b_AirPort_Pos_FileExist() == false) return iRet;
                #endregion

                // #20180119, 인천공항 포스연동 결제 마감 시 금액 비교 수정 Start                
                // 기존
                #region 판매POS의 총실판매 금액
                //iGrdTotAmt = m_cTrnStatus.Head.NetSaleAmt;
                //iGrdTotAmt = m_cTrnStatus.Head.NetSaleAmt + m_cPosStatus.Sale.ChangeCashAmt;
                #endregion

                // 변경
                #region 판매POS의 받을 금액
                iGrdTotAmt = m_cTrnStatus.Sale.RemainPayAmt;  // 순 매출금액에서 받은금액(pay_amt) 뺀 금액
                #endregion
                // #20180119, 인천공항 포스연동 결제 마감 시 금액 비교 수정 End
                 
                #region 통합POS 결제 데이터 로컬에 저장하기 
                if (pSaleTY == "0")
                {
                    /*
                    #region 로컬에 현금, 카드 결제 건 있는지 체크하기.
                    bool bPaycheck = false;
                    ArrayList alPays = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
                    for (int iRow = 0; iRow < alPays.Count; iRow++)
                    {
                        Column.TR_PAYMENT.DATA cPayItem = (Column.TR_PAYMENT.DATA)alPays[iRow];
                        if (cPayItem.CANCEL_DIV == "1") continue;

                        if ((cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.CREDITCARD_ITEM && cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.CREDITCARD.CREDIT_CARD) ||  //카드
                            ((cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.CASH_ITEM && cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.CASH.CASH_PAY) || //현금
                             (cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.FOREIGNEX_ITEM) ||//외화 
                             (cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.CHECK_ITEM)))//수표 
                        { 
                            UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                                 System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                                 System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                                 "Get Incheon Airport POS TR Data - Cash or Card Pay exist! exit! ");
                            bPaycheck = true;
                            break;
                        }
                    }
                    if (bPaycheck == true)
                    {
                        WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0753);
                        return iRet;
                    }
                    #endregion
                    */

                    // 인천공항 pos에서 결제내역 조회
                    // PosGetSalesTr (String 리턴)
                    // *************************************************
                    // 0. 통합POS에서 결제된 내역 조회 함수
                    // 1. 파라미터 - SALE_DT : 판매일자(8)
                    //             - BILL_NO : 입주사영수증번호(30)
                    //             - SALE_TY : 거래구분(0:정상, 1:반품)
                    // 2. 리턴     - String : XML
                    // ************************************************* 
                     
                    Recordset RS = posapi.PosGetSalesTrEx(pSaleDt, pBillNo, pSaleTY);

                    //#20180119 start,phj
                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         "PosGetSalesTrEx --> SaleDt : " + pSaleDt + " , BillNo :  " + pBillNo + " , SaleTY :  " + pSaleTY);
                    //#20180119 end,phj

                    if (RS != null && RS.RecordCount > 0) 
                    { 
                        ArrayList m_cAirPosPay = null;
                        m_cAirPosPay = (ArrayList)StateObject.GetItemObject(Column.AIRPOS_PAYMENT.ITEM);
                        m_cAirPosPay.Clear();

                        RS.MoveFirst();

                        #region 인천공항 POS의 결제내역 파싱 
                        string TempData = RS.GetString(StringFormatEnum.adClipString, -1, "|", "#~", "");
                        string[] aRowData = null;
                        string[] aColData = null;
                        aRowData = TempData.Split(new string[] { "#~" }, StringSplitOptions.None);

                        for (int i = 0; i < aRowData.Length - 1; i++)
                        {
                            aColData = aRowData[i].Split(new string[] { "|" }, StringSplitOptions.None);

                            Column.AIRPOS_PAYMENT.DATA m_cAirPosPayItem = new Column.AIRPOS_PAYMENT.DATA();

                            m_cAirPosPayItem.SALE_DT = aColData[0];
                            m_cAirPosPayItem.BILL_NO = aColData[1];
                            m_cAirPosPayItem.IF_BILL_NO = aColData[2];
                            m_cAirPosPayItem.SALE_TY = aColData[3];
                            m_cAirPosPayItem.PAY_TY = aColData[4];
                            m_cAirPosPayItem.PAY_NM = aColData[5];
                            m_cAirPosPayItem.PAY_AMT = int.Parse(aColData[6]); //0;
                            m_cAirPosPayItem.EXC_CD = aColData[7]; //"";
                            m_cAirPosPayItem.EXC_NM = aColData[8]; // "";

                            //#20180116 인천공항 포스연동 외화 결제데이터 관련 수정 Start
                            //m_cAirPosPayItem.EXC_BASE = int.Parse(aColData[9]); //0;
                            //m_cAirPosPayItem.EXC_COST = int.Parse(aColData[10]); //0;
                            //m_cAirPosPayItem.EXC_EAMT = int.Parse(aColData[11]); //0;
                            //m_cAirPosPayItem.EXC_IN_EAMT = int.Parse(aColData[12]); //0;
                            m_cAirPosPayItem.EXC_BASE = double.Parse(aColData[9]); //0;
                            m_cAirPosPayItem.EXC_COST = double.Parse(aColData[10]); //0;
                            m_cAirPosPayItem.EXC_EAMT = double.Parse(aColData[11]); //0;
                            m_cAirPosPayItem.EXC_IN_EAMT = double.Parse(aColData[12]); //0;
                            //#20180116 인천공항 포스연동 외화 결제데이터 관련 수정 End

                            m_cAirPosPayItem.EXC_IN_WAMT = int.Parse(aColData[13]); //0;
                            m_cAirPosPayItem.EXC_CHANGE = int.Parse(aColData[14]); //0;
                            m_cAirPosPayItem.CARD_ID = aColData[15]; // "";
                            m_cAirPosPayItem.CARD_INST = aColData[16]; //"";
                            m_cAirPosPayItem.CARD_CARD_CD = aColData[17]; //"";
                            m_cAirPosPayItem.CARD_CARD_NM = aColData[18]; //"";
                            m_cAirPosPayItem.CARD_PURC_CD = aColData[19]; //"";
                            m_cAirPosPayItem.CARD_PURC_NM = aColData[20]; //"";
                            m_cAirPosPayItem.CARD_AP_TY = aColData[21]; //"";
                            m_cAirPosPayItem.CARD_AP_NO = aColData[22]; //"";
                            m_cAirPosPayItem.CARD_MEM_NO = aColData[23]; //"";
                            m_cAirPosPayItem.CARD_AP_DT = aColData[24]; //"";
                            m_cAirPosPayItem.CARD_AP_TM = aColData[25]; //"";
                            m_cAirPosPayItem.CARD_AP_ORG_DT = aColData[26]; //"";
                            m_cAirPosPayItem.CARD_AP_ORG_NO = aColData[27]; //"";
                            m_cAirPosPayItem.CARD_AP_TERMID = aColData[28]; //"";
                            m_cAirPosPayItem.ETC_NAME = aColData[29]; //"";
                            m_cAirPosPayItem.CASH_AP_AMT = int.Parse(aColData[30]);
                            m_cAirPosPayItem.CASH_AP_TY = aColData[31]; //"";
                            m_cAirPosPayItem.CASH_AP_ID = aColData[32]; //"";
                            m_cAirPosPayItem.CASH_AP_NO = aColData[33]; //"";
                            m_cAirPosPayItem.CASH_AP_DT = aColData[34]; //"";
                            m_cAirPosPayItem.CASH_AP_TM = aColData[35]; //"";
                            m_cAirPosPayItem.CASH_AP_ORG_DT = aColData[36]; //"";
                            m_cAirPosPayItem.CASH_AP_ORG_NO = aColData[37]; //"";
                            m_cAirPosPayItem.CASH_AP_CAN_FG = aColData[38]; // "";

                            m_cAirPosPay.Add(m_cAirPosPayItem);
                        }

                        //#20180119 start,phj
                        UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                             System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                             "PosGetSalesTrEx --> Count : " + m_cAirPosPay.Count.ToString());
                        //#20180119 end,phj

                        #endregion

                        // #20180119, 인천공항 포스연동 결제 마감 시 금액 비교 수정 Start
                        #region 인천공항 POS의 총 실판매금액 구하기

                        /*
                        double sIncheonPayTot = 0;
                        foreach (Column.AIRPOS_PAYMENT.DATA m_cAirPosPayItem in m_cAirPosPay)
                        {
                            if (m_cAirPosPayItem.PAY_TY == "03") continue;
                            double sPayAmt = m_cAirPosPayItem.PAY_AMT;
                            sIncheonPayTot = sIncheonPayTot + Convert.ToDouble(sPayAmt); //결제금액 
                        }

                        double sPayTot = 0;
                        ArrayList alPaylist = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM); 
                        for (int iRow = 0; iRow < alPays.Count; iRow++)
                        {
                            Column.TR_PAYMENT.DATA cPayItem = (Column.TR_PAYMENT.DATA)alPays[iRow];
                            if (cPayItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL) continue;
                            //if (cPayItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cPayItem.canCANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue;      // 지정취소
                            double sPayAmt = cPayItem.PAY_AMT;
                            sPayTot = sPayTot + sPayAmt; //결제금액 
                        }

                        iAirPosPayTot = sIncheonPayTot + sPayTot;
                        */

                        // 기존                        
                        //foreach (Column.AIRPOS_PAYMENT.DATA m_cAirPosPayItem in m_cAirPosPay)
                        //{
                        //    string sPayAmt = CmUtil.IsNull(m_cAirPosPayItem.PAY_AMT.ToString(), "0");
                        //    iAirPosPayTot = iAirPosPayTot + Convert.ToDouble(sPayAmt); //결제금액   
                        //}

                        // 변경
                        // SPC포스 받을금액과 통합포스에서 결제한 금액(현금, 외화, 신용카드) 비교하는 것으로 수정
                        foreach (Column.AIRPOS_PAYMENT.DATA m_cAirPosPayItem in m_cAirPosPay)
                        {
                            if (m_cAirPosPayItem.PAY_TY == "01" || m_cAirPosPayItem.PAY_TY == "02")                          
                            {
                                string sPayAmt = CmUtil.IsNull(m_cAirPosPayItem.PAY_AMT.ToString(), "0");
                                iAirPosPayTot = iAirPosPayTot + Convert.ToDouble(sPayAmt); //결제금액
                            }
                        }
                        #endregion
                        // #20180119, 인천공항 포스연동 결제 마감 시 금액 비교 수정 End

                        // #20180119, 인천공항 포스연동 결제 마감 시 금액 비교 수정 Start
                        // 기존                   
                        //#region 판매POS의 실판매금액과 인천공항 POS의 실판매금액 비교하기                      
                        
                        // 변경
                        // 판매POS의 실판매금액과 통합POS의 실판매금액 비교하기 ->  판매POS의 받을금액과 통합POS에서 결제된 실판매금액 비교하기
                        #region 판매POS의 받을금액과 인천공항 POS의 실판매금액 비교하기
                        

                        // #20180119, 인천공항 포스연동 결제 마감 시 금액 비교 수정 Start
                        // 기존
                        // 금액이 다를 경우 팝업 띄워주기
                        //if (iGrdTotAmt != iAirPosPayTot)
                        
                        // 변경    
                        if (iGrdTotAmt > iAirPosPayTot)
                        // #20180119, 인천공항 포스연동 결제 마감 시 금액 비교 수정 End
                        {
                            
                            UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                                 System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                                 System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                                 "Get Incheon Airport POS TR Data - Amount difference! (Airport Amt : " + iAirPosPayTot.ToString() + ", SPCPOS Amt : " + iGrdTotAmt.ToString() + ")");

                            //WinManager.ConfirmMessage("판매포스의 판매금액과 통합포스의 결제금액이 같지 않습니다.");
                            WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0754);
                            return iRet;
                        }
                        #endregion                                               
                        // #20180119, 인천공항 포스연동 결제 마감 시 금액 비교 수정 End

                        #region 인천공항 POS의 결제 데이터를 SPCPOS 로컬에 저장하기 
                      
                        ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
                        ArrayList alEtcItem = (ArrayList)StateObject.GetItemObject(Column.TR_ETC.ITEM);

                        foreach (Column.AIRPOS_PAYMENT.DATA m_cAirPosPayItem in m_cAirPosPay)
                        {
                            //#20180119 start,phj
                            UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                                                 System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                                                 System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                                                 "PosGetSalesTrEx --> " +
                                                                 "  Sale_Dt :" + m_cAirPosPayItem.SALE_DT +
                                                                 ", SALE_TY :" + m_cAirPosPayItem.SALE_TY +
                                                                 ", BILL_NO :" + m_cAirPosPayItem.BILL_NO +
                                                                 ", IF_BILL_NO :" + m_cAirPosPayItem.IF_BILL_NO +
                                                                 ", PAY_TY :" + m_cAirPosPayItem.PAY_TY +
                                                                 ", PAY_NM : " + m_cAirPosPayItem.PAY_NM);
                            //#20180119 end,phj


                            if (m_cAirPosPayItem.PAY_TY == "01")
                            {
                                #region 01:현금
                                // 결과 저장 변수 생성
                                Column.TR_PAYMENT.DATA m_cPayItem = new Column.TR_PAYMENT.DATA();
                                if (m_cAirPosPayItem.EXC_CD == "")
                                {
                                    // 현금결제
                                    m_cPayItem.PAY_WAY_CD = ItemConst.TR_ITEM_ID.CASH_ITEM;           				//현금 결제 그룹 코드
                                    m_cPayItem.PAY_DTL_CD_01 = ItemConst.TR_ITEM_ID.CASH.CASH_PAY;    				//현금 결제 코드
                                    m_cPayItem.OCCUR_ENTRY_20 = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0059);     //결제 수단명  
                                }
                                else if (m_cAirPosPayItem.EXC_CD == "01")
                                {
                                    // 외화(USD) : EXC_CD(USD, EUR, JPY, CNY)로 구분
                                    m_cPayItem.PAY_WAY_CD = ItemConst.TR_ITEM_ID.FOREIGNEX_ITEM;           			//외화 결제 그룹 코드
                                    m_cPayItem.PAY_DTL_CD_01 = ItemConst.TR_ITEM_ID.FOREIGNEX.USD;    				//USD 결제 코드
                                    m_cPayItem.OCCUR_ENTRY_20 = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0059);     //결제 수단명   
                                }
                                else if (m_cAirPosPayItem.EXC_CD == "02")
                                {
                                    // 외화(EUR) : EXC_CD(USD, EUR, JPY, CNY)로 구분
                                    m_cPayItem.PAY_WAY_CD = ItemConst.TR_ITEM_ID.FOREIGNEX_ITEM;           			//외화 결제 그룹 코드
                                    m_cPayItem.PAY_DTL_CD_01 = ItemConst.TR_ITEM_ID.FOREIGNEX.EUR;    				//EUR 결제 코드
                                    m_cPayItem.OCCUR_ENTRY_20 = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0059);     //결제 수단명   
                                }
                                else if (m_cAirPosPayItem.EXC_CD == "03")
                                {
                                    // 외화(JPY) : EXC_CD(USD, EUR, JPY, CNY)로 구분
                                    m_cPayItem.PAY_WAY_CD = ItemConst.TR_ITEM_ID.FOREIGNEX_ITEM;           			//외화 결제 그룹 코드
                                    m_cPayItem.PAY_DTL_CD_01 = ItemConst.TR_ITEM_ID.FOREIGNEX.JPY;    				//JPY 결제 코드
                                    m_cPayItem.OCCUR_ENTRY_20 = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0059);     //결제 수단명     
                                }
                                else if (m_cAirPosPayItem.EXC_CD == "04")
                                {
                                    // 외화(CNY) : EXC_CD(USD, EUR, JPY, CNY)로 구분
                                    m_cPayItem.PAY_WAY_CD = ItemConst.TR_ITEM_ID.FOREIGNEX_ITEM;           			//외화 결제 그룹 코드
                                    m_cPayItem.PAY_DTL_CD_01 = ItemConst.TR_ITEM_ID.FOREIGNEX.CNY;    				//CNY 결제 코드
                                    m_cPayItem.OCCUR_ENTRY_20 = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0059);     //결제 수단명       
                                }

                                m_cPayItem.PAY_AMT = m_cAirPosPayItem.PAY_AMT; //결제 금액
                                m_cPayItem.PAY_DTL_CD_05 = PosConst.PAY_DC_TYPE.PAY; //결제/할인 구분(1:결제, 2:할인)
                                m_cPayItem.BILLSPR_NO = m_cTrnStatus.Sale.BillSplitNo; //빌분리 번호
                                m_cPayItem.OCCUR_ENTRY_21 = ItemConst.PAY_CASHBILL_DIV.YES; //현금영수증 발행 여부
                                //m_cPayItem.AMT_ENTRY_01 = m_cAirPosPayItem.EXC_IN_WAMT; //받은돈
                                m_cPayItem.AMT_ENTRY_01 = m_cAirPosPayItem.PAY_AMT; //받은돈
                                m_cPayItem.AMT_ENTRY_02 = m_cAirPosPayItem.EXC_CHANGE; //거스름
                                m_cPayItem.AMT_ENTRY_03 = m_cAirPosPayItem.EXC_IN_EAMT; //외화 받은돈
                                m_cPayItem.AMT_ENTRY_04 = m_cAirPosPayItem.EXC_COST; //환율

                                m_cPayItem.SEQ = alPayItem.Count + 1; //순번
                                m_cPayItem.CANCEL_DIV = PosConst.CANCEL_DIV.NORMAL; //취소여부(0:정상, 1:취소)
                                m_cPosStatus.Sale.ChangeCashAmt = m_cAirPosPayItem.EXC_CHANGE; //현금거스름

                                alPayItem.Add(m_cPayItem);
                                #endregion 


                                //#20180117 돈통오픈 start,phj
                                m_cCashDrawer.OpenCashDrawer(); // 돈통 OPEN 처리
                                //#20180117 돈통오픈 end,phj
                            }
                            else if (m_cAirPosPayItem.PAY_TY == "02")
                            {
                                #region 02:카드

                                // 결과 저장 변수 생성
                                Column.TR_PAYMENT.DATA m_cPayItem = new Column.TR_PAYMENT.DATA();
                                // 카드결제
                                m_cPayItem.PAY_WAY_CD = ItemConst.TR_ITEM_ID.CREDITCARD_ITEM;           	//현금 결제 그룹 코드
                                m_cPayItem.PAY_DTL_CD_01 = ItemConst.TR_ITEM_ID.CREDITCARD.CREDIT_CARD; 	//현금 결제 코드
                                m_cPayItem.PAY_AMT = m_cAirPosPayItem.PAY_AMT;                            	//결제 금액
                                m_cPayItem.PAY_DTL_CD_05 = PosConst.PAY_DC_TYPE.PAY;				        //결제/할인 구분(1:결제, 2:할인)	
                                m_cPayItem.BILLSPR_NO = m_cTrnStatus.Sale.BillSplitNo;              		//빌분리 번호

                                m_cPayItem.AMT_ENTRY_01 = m_cAirPosPayItem.PAY_AMT;						    //결제금액
                                m_cPayItem.AMT_ENTRY_02 = m_cAirPosPayItem.PAY_AMT;						    //공급가

                                m_cPayItem.OCCUR_ENTRY_01 = m_cAirPosPayItem.CARD_ID;   					//카드번호
                                m_cPayItem.OCCUR_ENTRY_02 = m_cAirPosPayItem.CARD_AP_NO;					//승인번호
                                //m_cPayItem.OCCUR_ENTRY_03 = m_cAirPosPayItem.CARD_AP_DT;					//승인일자
                                //m_cPayItem.OCCUR_ENTRY_04 = m_cAirPosPayItem.CARD_AP_TM;					//승인시간
                                m_cPayItem.OCCUR_ENTRY_03 = CmUtil.MidH(m_cAirPosPayItem.CARD_AP_DT, 2, m_cAirPosPayItem.CARD_AP_DT.Length - 2);//승인일자
                                m_cPayItem.OCCUR_ENTRY_04 = CmUtil.MidH(m_cAirPosPayItem.CARD_AP_TM, 0, 4);                                     //승인시간
                                m_cPayItem.OCCUR_ENTRY_05 = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_SWIP;   	//입력구분(S:Swip,K:Keyin,C:IC,R:RF,B:barcode)
                                m_cPayItem.OCCUR_ENTRY_06 = m_cAirPosPayItem.CARD_AP_ORG_NO;				//원승인번호
                                m_cPayItem.OCCUR_ENTRY_07 = m_cAirPosPayItem.CARD_AP_ORG_DT;				//원승인일자
                                
                                //m_cPayItem.OCCUR_ENTRY_08 = m_cAirPosPayItem.CARD_AP_TY;   				//승인구분(1:POS승인, 2:임의등록)
                                if (m_cAirPosPayItem.CARD_AP_TY == "1")  //승인구분(1:POS승인, 2:임의등록)
                                {
                                    m_cPayItem.OCCUR_ENTRY_08 = "0";
                                }
                                else if (m_cAirPosPayItem.CARD_AP_TY == "2")  //승인구분(1:POS승인, 2:임의등록)
                                {
                                    m_cPayItem.OCCUR_ENTRY_08 = "1";
                                }

                                // 발급사코드, 매입사코드는 SPC 발급사코드, 매입사코드로 변환되야 함.
                                m_cPayItem.OCCUR_ENTRY_09 = m_cAirPosPayItem.CARD_CARD_CD;					//발급사코드
                                m_cPayItem.OCCUR_ENTRY_10 = m_cAirPosPayItem.CARD_CARD_NM;					//발급사명
                                m_cPayItem.OCCUR_ENTRY_11 = m_cAirPosPayItem.CARD_PURC_CD;					//매입사코드
                                m_cPayItem.OCCUR_ENTRY_12 = m_cAirPosPayItem.CARD_PURC_NM;					//매입사명
                                m_cPayItem.OCCUR_ENTRY_14 = m_cAirPosPayItem.CARD_INST;    					//할부개월
                                m_cPayItem.OCCUR_ENTRY_15 = "0";//(0:일반,1:은련카드)

                                // 승인업체 코드는 새로 생성할지 결정해야 함. 기존 값(01)으로 넣으면 안될것 같음.
                                m_cPayItem.OCCUR_ENTRY_16 = GetPayDtlCdToVanCode(m_cPayItem.PAY_WAY_CD, m_cPayItem.PAY_DTL_CD_01);	//승인업체 코드 조회
                                //m_cPayItem.OCCUR_ENTRY_17 = GetSignFlag(m_cAirPosPayItem.CARD_PURC_CD.Trim().Length > 0 ? "1" : "0", m_cPayItem.PAY_AMT); //(0:미서명,1:서명)
                                //m_cPayItem.OCCUR_ENTRY_17 = "1"; //(0:미서명,1:서명)
                                m_cPayItem.OCCUR_ENTRY_17 = ""; //(0:미서명,1:서명)

                                m_cPayItem.OCCUR_ENTRY_18 = m_cAirPosPayItem.CARD_MEM_NO;//가맹점코드
                                m_cPayItem.OCCUR_ENTRY_20 = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0058);	//결제수단명
                                m_cPayItem.OCCUR_ENTRY_21 = ItemConst.PAY_CASHBILL_DIV.NO; //현금영수증발행여부 0:미발행,1:발행
                              
                                m_cPayItem.CANCEL_DIV = ItemConst.PAY_CANCEL_DIV.NORMAL;

                                m_cPayItem.SEQ = alPayItem.Count + 1;
                                alPayItem.Add(m_cPayItem);

                                #endregion
                            }
                            else if (m_cAirPosPayItem.PAY_TY == "03")
                            {
                                // 기타결제 
                            }
                            else if (m_cAirPosPayItem.PAY_TY == "04")
                            {
                                #region 04:현금영수증

                                // 결과 저장 변수 생성
                                Column.TR_ETC.DATA m_cEtcItem = new Column.TR_ETC.DATA();

                                m_cEtcItem.ETC_WAY_CD = ItemConst.TR_ITEM_ID.ETC_INFO_ITEM;
                                m_cEtcItem.ETC_DTL_CD_01 = ItemConst.TR_ITEM_ID.ETC_INFO.CASHBILL;

                                m_cEtcItem.ETC_AMT = m_cAirPosPayItem.CASH_AP_AMT;//결제 금액
                                m_cEtcItem.QTY_ENTRY_01 = 0;
                                m_cEtcItem.QTY_ENTRY_02 = 0;
                                m_cEtcItem.QTY_ENTRY_03 = 0;
                                m_cEtcItem.QTY_ENTRY_04 = 0;
                                m_cEtcItem.QTY_ENTRY_05 = 0;

                                m_cEtcItem.AMT_ENTRY_01 = m_cAirPosPayItem.CASH_AP_AMT;     //총금액
                                m_cEtcItem.AMT_ENTRY_02 = m_cAirPosPayItem.CASH_AP_AMT;     //공급가액
                                m_cEtcItem.AMT_ENTRY_03 = 0;    							//세금
                                m_cEtcItem.AMT_ENTRY_04 = 0;    							//봉사료
                                m_cEtcItem.AMT_ENTRY_05 = 0;
                                m_cEtcItem.AMT_ENTRY_06 = 0;
                                m_cEtcItem.AMT_ENTRY_07 = 0;
                                m_cEtcItem.AMT_ENTRY_08 = 0;
                                m_cEtcItem.AMT_ENTRY_09 = 0;
                                m_cEtcItem.AMT_ENTRY_10 = 0;

                                m_cEtcItem.OCCUR_ENTRY_01 = m_cAirPosPayItem.CASH_AP_ID;//인증번호
                                m_cEtcItem.OCCUR_ENTRY_02 = m_cAirPosPayItem.CASH_AP_NO;//승인번호
                                m_cEtcItem.OCCUR_ENTRY_03 = CmUtil.MidH(m_cAirPosPayItem.CASH_AP_DT, 2, m_cAirPosPayItem.CASH_AP_DT.Length -2); // m_cAirPosPayItem.CASH_AP_DT; //승인일자
                                m_cEtcItem.OCCUR_ENTRY_04 = CmUtil.MidH(m_cAirPosPayItem.CASH_AP_TM, 0, 4);                                     //m_cAirPosPayItem.CASH_AP_TM; //승인시간
                                m_cEtcItem.OCCUR_ENTRY_05 = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_SWIP;  		//입력구분(S:Swip,K:Keyin,C:IC,R:RF,B:barcode)
                                m_cEtcItem.OCCUR_ENTRY_06 = m_cAirPosPayItem.CASH_AP_ORG_NO;					//원승인번호 //CmUtil.MidH(m_cAirPosPayItem.CASH_AP_ORG_NO, 2, m_cAirPosPayItem.CASH_AP_ORG_NO.Length - 2);
                                m_cEtcItem.OCCUR_ENTRY_07 = m_cAirPosPayItem.CASH_AP_ORG_DT;					//원승인일자 //CmUtil.MidH(m_cAirPosPayItem.CASH_AP_ORG_DT, 0, 4); 
                                m_cEtcItem.OCCUR_ENTRY_08 = ItemConst.PAY_APP_DIV.NORMAL;	//승인구분(0:정상,1:임의등록)
                                m_cEtcItem.OCCUR_ENTRY_09 = "0";							//거래후 승인구분(0:일반,1:추후)
                                m_cEtcItem.OCCUR_ENTRY_10 = "0"; 							//자진발급구분(0:일반, 1:자진발급)
                                m_cEtcItem.OCCUR_ENTRY_11 = m_cAirPosPayItem.CASH_AP_TY; 					//승인구분(0:소득공제, 1:지출증빙)
                                m_cEtcItem.OCCUR_ENTRY_12 = "";
                                m_cEtcItem.OCCUR_ENTRY_13 = "";
                                m_cEtcItem.OCCUR_ENTRY_14 = "";
                                m_cEtcItem.OCCUR_ENTRY_15 = "";
                                                               
                                m_cEtcItem.OCCUR_ENTRY_16 = GetPayDtlCdToVanCode(m_cEtcItem.ETC_WAY_CD, m_cEtcItem.ETC_DTL_CD_01);	//승인업체 코드 조회

                                m_cEtcItem.OCCUR_ENTRY_17 = "";
                                m_cEtcItem.OCCUR_ENTRY_18 = "";
                                m_cEtcItem.OCCUR_ENTRY_19 = "";
                                m_cEtcItem.OCCUR_ENTRY_20 = GetPayDtlCdToPayDtlName(m_cEtcItem.ETC_WAY_CD, m_cEtcItem.ETC_DTL_CD_01); //결제 수단명
                                m_cEtcItem.OCCUR_ENTRY_21 = "";
                                m_cEtcItem.OCCUR_ENTRY_22 = "";
                                m_cEtcItem.OCCUR_ENTRY_23 = "";
                                m_cEtcItem.OCCUR_ENTRY_24 = "";
                                m_cEtcItem.OCCUR_ENTRY_25 = "";
                                m_cEtcItem.BILLSPR_NO = m_cTrnStatus.Sale.BillSplitNo;  //빌분리 번호
                                m_cEtcItem.CANCEL_DIV = ItemConst.PAY_CANCEL_DIV.NORMAL;

                                m_cEtcItem.SEQ = alEtcItem.Count + 1;
                                alEtcItem.Add(m_cEtcItem);

                                #endregion
                            }
                            else
                            {
                                //
                            }
                        }
                        #endregion
                       
                        iRet = 1;
                    }
                    else
                    {
                        UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                             System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                             "Get IncheonAirport POS TR Data - not exist! (" + pSaleTY + ")");
          
                        WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0755);
                    }
                }
                else
                {
                    Recordset RS = posapi.PosGetSalesTrEx(pSaleDt, pBillNo, pSaleTY);

                    //#20180119 start,phj
                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         "PosGetSalesTrEx[Return] --> SaleDt : " + pSaleDt + " , BillNo :  " + pBillNo + " , SaleTY :  " + pSaleTY);
                    //#20180119 end,phj
                   
                    if (RS != null && RS.RecordCount > 0) 
                    { 
                        ArrayList m_cAirPosPay = null;
                        m_cAirPosPay = (ArrayList)StateObject.GetItemObject(Column.AIRPOS_PAYMENT.ITEM);
                        m_cAirPosPay.Clear();

                        RS.MoveFirst();

                        #region 인천공항 통합POS의 반품내역 파싱
                        string TempData = RS.GetString(StringFormatEnum.adClipString, -1, "|", "#~", "");
                        string[] aRowData = null;
                        string[] aColData = null;
                        aRowData = TempData.Split(new string[] { "#~" }, StringSplitOptions.None);

                        for (int i = 0; i < aRowData.Length - 1; i++)
                        {
                            aColData = aRowData[i].Split(new string[] { "|" }, StringSplitOptions.None);

                            Column.AIRPOS_PAYMENT.DATA m_cAirPosPayItem = new Column.AIRPOS_PAYMENT.DATA();

                            m_cAirPosPayItem.SALE_DT = aColData[0];
                            m_cAirPosPayItem.BILL_NO = aColData[1];
                            m_cAirPosPayItem.IF_BILL_NO = aColData[2];
                            m_cAirPosPayItem.SALE_TY = aColData[3];
                            m_cAirPosPayItem.PAY_TY = aColData[4];
                            m_cAirPosPayItem.PAY_NM = aColData[5];
                            m_cAirPosPayItem.PAY_AMT = int.Parse(aColData[6]); //0;
                            m_cAirPosPayItem.EXC_CD = aColData[7]; //"";
                            m_cAirPosPayItem.EXC_NM = aColData[8]; // "";

                            //#20180116 인천공항 포스연동 외화 결제데이터 관련 수정 Start
                            //m_cAirPosPayItem.EXC_BASE = int.Parse(aColData[9]); //0;
                            //m_cAirPosPayItem.EXC_COST = int.Parse(aColData[10]); //0;
                            //m_cAirPosPayItem.EXC_EAMT = int.Parse(aColData[11]); //0;
                            //m_cAirPosPayItem.EXC_IN_EAMT = int.Parse(aColData[12]); //0;

                            m_cAirPosPayItem.EXC_BASE = double.Parse(aColData[9]); //0;
                            m_cAirPosPayItem.EXC_COST = double.Parse(aColData[10]); //0;
                            m_cAirPosPayItem.EXC_EAMT = double.Parse(aColData[11]); //0;
                            m_cAirPosPayItem.EXC_IN_EAMT = double.Parse(aColData[12]); //0;
                            //#20180116 인천공항 포스연동 외화 결제데이터 관련 수정 End

                            m_cAirPosPayItem.EXC_IN_WAMT = int.Parse(aColData[13]); //0;
                            m_cAirPosPayItem.EXC_CHANGE = int.Parse(aColData[14]); //0;
                            m_cAirPosPayItem.CARD_ID = aColData[15]; // "";
                            m_cAirPosPayItem.CARD_INST = aColData[16]; //"";
                            m_cAirPosPayItem.CARD_CARD_CD = aColData[17]; //"";
                            m_cAirPosPayItem.CARD_CARD_NM = aColData[18]; //"";
                            m_cAirPosPayItem.CARD_PURC_CD = aColData[19]; //"";
                            m_cAirPosPayItem.CARD_PURC_NM = aColData[20]; //"";
                            m_cAirPosPayItem.CARD_AP_TY = aColData[21]; //"";
                            m_cAirPosPayItem.CARD_AP_NO = aColData[22]; //"";
                            m_cAirPosPayItem.CARD_MEM_NO = aColData[23]; //"";
                            m_cAirPosPayItem.CARD_AP_DT = aColData[24]; //"";
                            m_cAirPosPayItem.CARD_AP_TM = aColData[25]; //"";
                            m_cAirPosPayItem.CARD_AP_ORG_DT = aColData[26]; //"";
                            m_cAirPosPayItem.CARD_AP_ORG_NO = aColData[27]; //"";
                            m_cAirPosPayItem.CARD_AP_TERMID = aColData[28]; //"";
                            m_cAirPosPayItem.ETC_NAME = aColData[29]; //"";
                            m_cAirPosPayItem.CASH_AP_AMT = int.Parse(aColData[30]);
                            m_cAirPosPayItem.CASH_AP_TY = aColData[31]; //"";
                            m_cAirPosPayItem.CASH_AP_ID = aColData[32]; //"";
                            m_cAirPosPayItem.CASH_AP_NO = aColData[33]; //"";
                            m_cAirPosPayItem.CASH_AP_DT = aColData[34]; //"";
                            m_cAirPosPayItem.CASH_AP_TM = aColData[35]; //"";
                            m_cAirPosPayItem.CASH_AP_ORG_DT = aColData[36]; //"";
                            m_cAirPosPayItem.CASH_AP_ORG_NO = aColData[37]; //"";
                            m_cAirPosPayItem.CASH_AP_CAN_FG = aColData[38]; // "";

                            m_cAirPosPay.Add(m_cAirPosPayItem);

                        }

                        //#20180119 start,phj
                        UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                             System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                             "PosGetSalesTrEx[Return] --> Count : " + m_cAirPosPay.Count.ToString());
                        //#20180119 end,phj
                        #endregion

                        #region 인천공항 통합POS의 총 실판매금액 구하기
                        foreach (Column.AIRPOS_PAYMENT.DATA m_cAirPosPayItem in m_cAirPosPay)
                        {
                            string sPayAmt = CmUtil.IsNull(m_cAirPosPayItem.PAY_AMT.ToString(), "0");
                            iAirPosPayTot = iAirPosPayTot + Convert.ToDouble(sPayAmt); //결제금액 
                        }

                        /*
                        double sIncheonPayTot = 0;
                        foreach (Column.AIRPOS_PAYMENT.DATA m_cAirPosPayItem in m_cAirPosPay)
                        {
                            if (m_cAirPosPayItem.PAY_TY == "03") continue;//기타금액
                            double sPayAmt = m_cAirPosPayItem.PAY_AMT;
                            sIncheonPayTot = sIncheonPayTot + Convert.ToDouble(sPayAmt); //결제금액 
                        }

                        double sPayTot = 0;
                        ArrayList alPaylist = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
                        for (int iRow = 0; iRow < alPaylist.Count; iRow++)
                        {
                            Column.TR_PAYMENT.DATA cPayItem = (Column.TR_PAYMENT.DATA)alPaylist[iRow];
                            if (cPayItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL) continue;
                            double sPayAmt = cPayItem.PAY_AMT;
                            sPayTot = sPayTot + sPayAmt; //결제금액 
                        }

                        iAirPosPayTot = sIncheonPayTot + sPayTot;
                        */
                        #endregion

                        #region SPCPOS의 실판매금액과 인천공항 통합POS의 실판매금액 비교하기
                        //반품 시 금액비교 안하는걸로.
                        /*
                        if ((iGrdTotAmt * -1) != iAirPosPayTot)
                        {

                            UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                                 System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                                 System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                                 "Get Incheon Airport POS TR Data - Amount difference! (Airport Amt : " + iAirPosPayTot.ToString() + ", SPCPOS Amt : " + (iGrdTotAmt * -1).ToString() + ")");

                            
                            WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0756);
                            return iRet;
                        }
                        */
                        #endregion

                        #region 카드, 현금, 현금영수증 반품처리
                        if (pResultTY == "Y")
                        {
                            ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM); 
                            ArrayList alEtcItem = (ArrayList)StateObject.GetItemObject(Column.TR_ETC.ITEM);

                            foreach (Column.AIRPOS_PAYMENT.DATA m_cAirPosPayItem in m_cAirPosPay)
                            {
                                //#20180119 start,phj
                                UserLog.WriteLogFile(UserCom.LOG_IOS,System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                                                     "PosGetSalesTrEx[Return] --> " +
                                                                     "  Sale_Dt :" + m_cAirPosPayItem.SALE_DT +
                                                                     ", SALE_TY :" + m_cAirPosPayItem.SALE_TY +
                                                                     ", BILL_NO :" + m_cAirPosPayItem.BILL_NO +
                                                                     ", IF_BILL_NO :" + m_cAirPosPayItem.IF_BILL_NO +
                                                                     ", PAY_TY :" + m_cAirPosPayItem.PAY_TY +
                                                                     ", PAY_NM : " + m_cAirPosPayItem.PAY_NM);
                                //#20180119 end,phj

                                if (m_cAirPosPayItem.PAY_TY == "02") 
                                    //&& m_cAirPosPayItem.PAY_TY == "1"     //1: pos승인, 2: 임의등록
                                {
                                    // 결과 저장 변수 생성
                                    Column.TR_PAYMENT.DATA m_cTempPayItem = new Column.TR_PAYMENT.DATA();

                                    #region 카드 반품 
                                    int rPayCancel = 0;
                                    for (int iRow = 0; iRow < alPayItem.Count; iRow++)
                                    {
                                        Column.TR_PAYMENT.DATA cPayItem = (Column.TR_PAYMENT.DATA)alPayItem[iRow];
                                        if (cPayItem.PAY_WAY_CD == "02" && cPayItem.PAY_DTL_CD_01 == "00")
                                        {
                                            double dPayAmt = 0;
                                            dPayAmt = m_cAirPosPayItem.PAY_AMT * -1;
                                            if (cPayItem.PAY_AMT != dPayAmt) continue; // 결제금액이 틀리면 다음
                                            if (pBillNo != m_cAirPosPayItem.BILL_NO) continue; // 영수증번호가 틀리면 다음
                                            //if (cPayItem.OCCUR_ENTRY_06 != m_cAirPosPayItem.CARD_AP_NO) continue; // 승인번호가 틀리면 다음

                                            cPayItem.OCCUR_ENTRY_06 = cPayItem.OCCUR_ENTRY_02;    //원승인번호
                                            cPayItem.OCCUR_ENTRY_07 = cPayItem.OCCUR_ENTRY_03;    //원승인일자
                                            cPayItem.OCCUR_ENTRY_02 = m_cAirPosPayItem.CARD_AP_NO;//승인번호
                                            //cPayItem.OCCUR_ENTRY_03 = m_cAirPosPayItem.CASH_AP_DT;//승인일자
                                            //cPayItem.OCCUR_ENTRY_04 = m_cAirPosPayItem.CASH_AP_TM;//승인시간 
                                            cPayItem.OCCUR_ENTRY_03 = CmUtil.MidH(m_cAirPosPayItem.CARD_AP_DT, 2, m_cAirPosPayItem.CARD_AP_DT.Length - 2);//승인일자
                                            cPayItem.OCCUR_ENTRY_04 = CmUtil.MidH(m_cAirPosPayItem.CARD_AP_TM, 0, 4);//승인시간 
                                            //cPayItem.OCCUR_ENTRY_17 = GetSignFlag(m_sSign.Length > 0 ? "1" : "0", cPayItem.PAY_AMT);   //사인유무
                                            rPayCancel = 1;
                                            break;
                                        }
                                    }
                                    // 카드 결제 매칭 데이터 유무 (0: 매칭 데이터 없음. 1: 매칭 데이터 있음.)
                                    if (rPayCancel != 1)
                                    {
                                        UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                                             System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                                             "Incheon Airport - No Card Maching Data (" + m_cAirPosPayItem.CARD_AP_NO + ")");
                                    }
                                    #endregion 
                                }
                                
                                //#20180117 돈통오픈 start,phj
                                else if (m_cAirPosPayItem.PAY_TY == "01")
                                {
                                    //반품 시 돈통 오픈 안되었을 것 같음!! 일단주석처리.
                                    //m_cCashDrawer.OpenCashDrawer(); // 돈통 OPEN 처리
                                }                                
                                //#20180117 돈통오픈 end,phj

                                else if (m_cAirPosPayItem.PAY_TY == "04")
                                {
                                    // 결과 저장 변수 생성
                                    Column.TR_ETC.DATA m_cTempEtcItem = new Column.TR_ETC.DATA();

                                    #region 현금영수증 반품
                                    int rPayCancel = 0;
                                    for (int iRow = 0; iRow < alEtcItem.Count; iRow++)
                                    {
                                        Column.TR_ETC.DATA cEtcItem = (Column.TR_ETC.DATA)alEtcItem[iRow];
                                        if (cEtcItem.ETC_WAY_CD == "80" && cEtcItem.ETC_DTL_CD_01 == "00")
                                        {
                                            double dPayAmt = 0;
                                            dPayAmt = m_cAirPosPayItem.CASH_AP_AMT * -1;
                                            if (cEtcItem.ETC_AMT != dPayAmt) continue; // 결제금액이 틀리면 다음
                                            if (pBillNo != m_cAirPosPayItem.BILL_NO) continue; // 영수증번호가 틀리면 다음

                                            cEtcItem.OCCUR_ENTRY_06 = cEtcItem.OCCUR_ENTRY_02;    //원승인번호
                                            cEtcItem.OCCUR_ENTRY_07 = cEtcItem.OCCUR_ENTRY_03;    //원승인일자 
                                            cEtcItem.OCCUR_ENTRY_02 = m_cAirPosPayItem.CASH_AP_NO;//승인번호
                                            
                                            //cEtcItem.OCCUR_ENTRY_03 = m_cAirPosPayItem.CASH_AP_DT;//승인일자
                                            //cEtcItem.OCCUR_ENTRY_04 = m_cAirPosPayItem.CASH_AP_TM;//승인시간 
                                            cEtcItem.OCCUR_ENTRY_03 = CmUtil.MidH(m_cAirPosPayItem.CASH_AP_DT, 2, m_cAirPosPayItem.CASH_AP_DT.Length - 2);//승인일자
                                            cEtcItem.OCCUR_ENTRY_04 = CmUtil.MidH(m_cAirPosPayItem.CASH_AP_TM, 0, 4);//승인시간 
                                            rPayCancel = 1;
                                        }
                                    }
                                    // 현금영수증 결제 매칭 데이터 유무 (0: 매칭 데이터 없음. 1: 매칭 데이터 있음.)
                                    if (rPayCancel != 1)
                                    {
                                        UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                                             System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                                             "Incheon Airport - No CashBill Maching Data (" + m_cAirPosPayItem.CARD_AP_NO + ")");
                                    }
                                    #endregion 

                                }
                            }
                        }
                        #endregion 

                        iRet = 1;
                    }
                    else
                    {
                        UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                             System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                             "Get Incheon Airport POS TR Data - not exist! (" + pSaleTY + ")");

                        WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0757);
                    }
                }
                #endregion

                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     "Get IncheonAirport POS TR Data - End! (" + iRet + ")");

                return iRet;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                            "Get Incheon Airport POS TR Data - Error! (" + iRet + ") " + ex.Message);

                return iRet;
            }
        }
        #endregion

        #region 인천공항 POS로 TRAN 전송
        //private bool b_AirPort_Pos(string pAirPosCompCd, string pAirPosStorCd, string pAirPosPosNo, string pTypeDiv)
        private bool b_AirPort_Pos(string pTypeDiv)
        {
            bool bRet = false;

            try
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     " ** IncheonAirport Tran Start! TypeDiv : " + pTypeDiv);

                #region 인천공항 DB 상태 체크
                int iRtn = posapi.PosDBConnectDBStatus();
                if (iRtn != 1)
                {
                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         " ** IncheonAirport Tran - DB Status Error : " + iRtn.ToString());
                    return bRet;
                }
                #endregion

                #region 결제, 상품 리스트 전송 시도
                if (pTypeDiv == "TRAN")
                {
                    // 상품 리스트 전송 
                    //if (i_AirPort_Pos_TRAN(pAirPosCompCd, pAirPosStorCd, pAirPosPosNo) == 1)
                    if (i_AirPort_Pos_TRAN() == 1)
                    {
                        bRet = true;
                    }
                }
                #endregion


                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     " ** IncheonAirport Tran End! result : " + bRet.ToString());

                return bRet;

            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                            " ** AirPort_Pos Result Error : " + bRet.ToString() + " " + ex.Message);

                return bRet;
            }
        }
        #endregion

        #region 인천공항 통합POS에서 개점일자 조회
        private int i_AirPort_Pos_GetOpenVWEx()
        {
            int iRet = -1;
            try
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     " ** IncheonAirport PosGetOpenVW. start! ");

                // 인천공항 PosDBApi.dll / PosDBApi.tlb 파일 존재 여부 검사
                if (b_AirPort_Pos_FileExist() == false) return iRet;

                // 인천공항 pos에서 통합POS에서 개점일자 조회
                // PosGetOpenVW ( String 리턴 )
                // *************************************************
                // 0. 통합POS에서 개점일자 조회
                // 1. 파라미터 없음
                // 2. 리턴     - 개점구분(Y:개점, N:마감)
                //             - 개점일자(YYYYMMDD)
                // ************************************************* 
                #region 통합POS에서 개점일자 조회 (PosGetOpenVWEx)
                ADODB.Recordset rs = new ADODB.Recordset();
                rs = posapi.PosGetOpenVWEx();

                if (rs != null || rs.RecordCount > 0)
                {
                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         " ** IncheonAirport PosGetOpenVW. count : " + rs.RecordCount.ToString());

                    string TempData = rs.GetString(StringFormatEnum.adClipString, -1, "|", "#~", "");

                    string[] aRowData = null;
                    aRowData = TempData.Split(new string[] { "#~" }, StringSplitOptions.None);
                    string[] aColData = null;
                    aColData = aRowData[0].Split(new string[] { "|" }, StringSplitOptions.None);

                    string sOpenTy = string.Empty;
                    sOpenTy = aColData[0];
                    string sOpenDt = string.Empty;
                    sOpenDt = aColData[1];

                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         " ** IncheonAirport PosGetOpenVW. Open Date : " + sOpenDt + ", Open Type : " + sOpenTy + "(Y:OPEN/N:CLOSE)");
                    // 마감 
                    if (sOpenTy == "N")
                    {
                        WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0758);
                        return iRet;
                    }

                    // SPCPOS - INCHEON AIRPORT POS 오픈일자 비교 
                    if (m_cTrnStatus.Head.SaleDate != sOpenDt)
                    {
                        WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0759);
                        return iRet;
                    }

                    iRet = 1;
                }
                else
                {
                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         " ** IncheonAirport PosGetOpenVW. Not bring IncheonAirport POS Open-Date! ");
                }
                #endregion

                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     " ** IncheonAirport PosGetOpenVW. end! ");

                return iRet;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                            " ** IncheonAirport PosGetOpenVW. Error! " + ex.Message);

                return iRet;
            }
        }


        #endregion 

        #region 인천공항 PosDBApi.dll / PosDBApi.tlb 파일 존재 여부 검사
        private bool b_AirPort_Pos_FileExist()
        {
            bool bRet = false;
            string sDirectory = BaseCom.NxBinPath;
            string sFileName1 = "PosDBApi.dll";
            //string sFileName2 = "PosDBApi.tlb";
            try
            {
                //if (CmUtil.Exists(sDirectory + sFileName1) == true && CmUtil.Exists(sDirectory + sFileName2) == true)
                if (CmUtil.Exists(sDirectory + sFileName1) == true)
                {
                    bRet = true;
                }
                else
                {
                    bRet = false;
                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         " ** " + sDirectory + " -> PosDBApi.dll file not Exist ");
                }
                return bRet;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                            " ** " + sDirectory + " -> PosDBApi.dll Exists Check Error " + ex.Message);

                return bRet;
            }
        }
        #endregion

        //**************************************************************************************************************
         
        #region 결제마감하기
        //sMenuKey 메뉴기능키, sCloseGb 인천공항 통합포스 버튼 선택한 경우 Y 
        public string IncheonAireportClose(string sMenuKey, string sCloseGb)
        {
            string sRet = UserCom.RST_ERR;
             
            try
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     "IncheonAirport Data transmission - Start! MenuKey : " + sMenuKey + " , BtnClickYN : " + sCloseGb);

                //#20171227 인천공항 포스연동 start, phj - #20180313
                
                bool bCashPayCheck = false;
                //#20171227 인천공항 포스연동 start, phj - #20180313
                bool bEtcPayCheck = false;
                //#20171227 인천공항 포스연동 end, phj - #20180313

                ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);                
                for (int iRow = 0; iRow < alPayItem.Count; iRow++)
                {
                    Column.TR_PAYMENT.DATA cPayItem = (Column.TR_PAYMENT.DATA)alPayItem[iRow];

                    if (cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.CASH_ITEM && cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.CASH.CASH_PAY)
                    {
                        //#20171227 인천공항 포스연동 start, phj - #20180313
                        if (cPayItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL) continue;                        
                        //#20171227 인천공항 포스연동 end, phj - #20180313
                        bCashPayCheck = true;

                        //#20171227 인천공항 포스연동 start, phj - #20180313
                        //break;
                        //#20171227 인천공항 포스연동 end, phj - #20180313
                        
                    }

                    //#20171227 인천공항 포스연동 start, phj - #20180313
                    else
                    {
                        // 현금결제 이 외의 다른 결제 수단 있는지 체크
                        if (cPayItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL) continue;
                        bEtcPayCheck = true;
                    }
                    //#20171227 인천공항 포스연동 end, phj - #20180313
                }

                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     "IncheonAirport Data transmission - Cash Pay Check! " + bCashPayCheck.ToString());

                //#20171227 인천공항 포스연동 start, phj - #20180313
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     "IncheonAirport Data transmission - Etc Pay Check! " + bEtcPayCheck.ToString());
                
                if (bCashPayCheck == true)
                {
                    sRet = UserCom.RST_OK;
                    return sRet;
                }
                //#20171227 인천공항 포스연동 end, phj - #20180313

                // DB Connect
                if (i_Airport_Start() != 1)
                {
                    return sRet;
                }

                // 통합POS에서 개점일자 체크 (마감되었거나, 개점일이 틀리면 -1)
                if (i_AirPort_Pos_GetOpenVWEx() != 1)
                {
                    return sRet;
                }


                //#20180213 인천공항 빌 번호 체크 start,phj
                if (IncheonAirportBillCheck() == false)
                {
                    WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0770);
                    return sRet;
                }
                //#20180213 인천공항 빌 번호 체크 end,phj

                // 해당 빌 상태 체크 
                int iAirPosTrStatus = 0;
                iAirPosTrStatus = i_AirPort_PosGetSalesTrStatus(m_cPosStatus.Base.SaleDate, m_cPosStatus.Base.TradeNo);
                
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     "IncheonAirport Data transmission - Bill Check : " + iAirPosTrStatus.ToString());

                //#20180119 로직변경 start,phj 
                //if (sCloseGb == "Y")
                //{
                //#20180119 로직변경 end,phj 

                    #region 인천공항 결제완료 버튼눌렀을때

                    bool bTran_Result = false;

                    if (iAirPosTrStatus == 302)
                    {
                        WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0760);
                        i_AirPort_End();// DB DisConnect
                        return sRet;
                    }
                    else if (iAirPosTrStatus == 303)
                    {
                        WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0761);
                        i_AirPort_End();// DB DisConnect
                        return sRet;
                    }

                    // SPCPOS의 상품 리스트, 결제 리스트를 인천공항 통합POS로 보내기.  
                    //bTran_Result = b_AirPort_Pos(m_cPosStatus.IncheonAirport.AirportComp, m_cPosStatus.IncheonAirport.AirportStore, m_cPosStatus.IncheonAirport.AirportPosNo, "TRAN");
                    bTran_Result = b_AirPort_Pos("TRAN");

                    // DB DisConnect
                    i_AirPort_End();


                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         "IncheonAirport Data transmission - ItemList , PayList Tran " + bTran_Result.ToString());


                    if (bTran_Result == true)
                    {
                        //#20171227 인천공항 포스연동 start, phj - #20180313

                        //기존
                        #region 주석처리
                       
                        ////#20180119 로직변경 start,phj 
                        ////기존
                        ////sRet = UserCom.RST_OK;
                        ////변경
                        ////if (m_cTrnStatus.Sale.RemainPayAmt > 0)
                        //if ((m_cTrnStatus.Sale.RemainPayAmt == 0) ||
                        //    ((m_cTrnStatus.Sale.RemainPayAmt > 0) && (m_cPosStatus.Base.CmpCd.Equals("PCUS") && m_cTrnStatus.Head.TradeKind == ItemConst.TRAN_KIND.UNDECIDED.RESERVATION_REG)))
                        //{
                        //    //#20180130 start,phj
                        //    //인천공항 결제화면 밖에서 전체할인 경우 결제완료 진행 안됨.
                        //    //그래서 결제화면에서 기능키 누르고 진행할 수 있도록 수정.
                        //    //기존
                        //    /*
                        //    if (sCloseGb == "N")
                        //    {
                        //        sRet = UserCom.RST_OK;
                        //    }
                        //    */

                        //    //변경
                        //    sRet = UserCom.RST_OK;
                        //    //#20180130 end,phj
                        //}
                        //else
                        //{
                        //    string sFirstValue = string.Empty;
                        //    sFirstValue = m_cPosStatus.Global.NumericTOCurrency(m_cTrnStatus.Sale.RemainPayAmt);

                        //    sRet = m_cPaymentUs.SetPayment(new string[] { m_cDataService.DoubleParse(sFirstValue).ToString(), PosKey.MENU_KEY.CASH, "", "", "", "", "", "" });
                        //    if (sRet != UserCom.RST_OK) //return false;
                        //    {
                        //        UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                        //                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                        //                             System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                        //                             "IncheonAirport Data transmission - Cash bill fail!!! ");
                        //    }

                        //    //#20180129 현금결제 존재 시 돈통오픈 start,phj
                        //    // 돈통오픈처리!!! 
                        //    m_cCashDrawer.OpenCashDrawer();
                        //    //#20180129 현금결제 존재 시 돈통오픈 end,phj
                        //}
                        ////#20180119 로직변경 end,phj
                        #endregion

                        //변경
                        //받을금액0원이고, 주문번호화면 닫았고 인천공항으로 데이터 재전송 할 경우 두번 현금 데이터 생성하지 않도록 리턴!
                        //주문화면 결과가 false 경우 PosConst.SALE_FLOW.PAY_DOING으로 모드변경됨!
                        //if (m_cTrnStatus.Sale.RemainPayAmt == 0 && m_cPosStatus.Sale.SaleFlow == PosConst.SALE_FLOW.PAY_DOING) 
                        //{
                        //    sRet = UserCom.RST_OK;
                        //    return sRet;
                        //}

                        //if ((m_cTrnStatus.Sale.RemainPayAmt == 0 && m_cPosStatus.Sale.SaleFlow == PosConst.SALE_FLOW.PAY_DOING) || //받을금액0원이고결제중모드이거나
                        //    m_cTrnStatus.Sale.RemainPayAmt != 0) //받을금액이0원이 아닐 때 
                        //{

                                            
                            if (m_cTrnStatus.Sale.RemainPayAmt == 0 && bEtcPayCheck == true)
                            {
                                sRet = UserCom.RST_OK;
                                return sRet;
                            }

                            string sRemainPayAmt = string.Empty;
                            sRemainPayAmt = m_cPosStatus.Global.NumericTOCurrency(m_cTrnStatus.Sale.RemainPayAmt);

                            // 0원 또는 받을금액 존재 시 현금 데이터 생성.
                            sRet = m_cPaymentUs.SetPayment(new string[] { m_cDataService.DoubleParse(sRemainPayAmt).ToString(), PosKey.MENU_KEY.CASH, "", "", "", "", "", "" });

                            UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                                 System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                                 System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                                 "IncheonAirport Data transmission - cash Bill " + sRet.ToString() + "! " + sRemainPayAmt);

                            if (sRet != UserCom.RST_OK)
                            {
                                sRet = UserCom.RST_ERR;
                                return sRet;
                            }

                            // 받을금액이 0원이 아닐 때 돈통오픈.
                            if (m_cTrnStatus.Sale.RemainPayAmt != 0)
                            {
                                m_cCashDrawer.OpenCashDrawer(); // 돈통오픈처리!!! 
                            }
                        //}
                        //#20171227 인천공항 포스연동 end, phj - #20180313

                        sRet = UserCom.RST_OK;
                    }
                    else
                    {
                        sRet = UserCom.RST_ERR;
                    }
                    #endregion

                //#20180119 로직변경 start,phj 
                /*
                }
                else if (sCloseGb == "N")
                {
                    #region 잔액0원으로바로마감루틴탈때

                    bool bTran_Result = false;

                    if (iAirPosTrStatus == 302)
                    {
                        WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0760);
                        i_AirPort_End();
                        return sRet;
                    }

                    // 301 : 공항POS쪽에 해당빌에 대한 데이터가 없으면 공항POS 팝업
                    // 304 : 공항POS쪽에 해당빌에 대한 취소된 상태면 공항POS 팝업
                    if (iAirPosTrStatus == 301 || iAirPosTrStatus == 304)
                    {
                        // SPCPOS의 상품 리스트, 결제 리스트를 인천공항 통합POS로 보내기.  
                        //bTran_Result = b_AirPort_Pos(m_cPosStatus.IncheonAirport.AirportComp, m_cPosStatus.IncheonAirport.AirportStore, m_cPosStatus.IncheonAirport.AirportPosNo, "TRAN");
                        bTran_Result = b_AirPort_Pos("TRAN");
                        
                        // DB DisConnect
                        i_AirPort_End();
                    }

                    if (bTran_Result == true)
                    {
                        UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                             System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                             "IncheonAirport Data transmission - ItemList , PayList Tran Success!!! ");

                        sRet = UserCom.RST_OK;
                    }
                    else
                    {
                        if (m_cTrnStatus.Sale.RemainPayAmt == 0 && iAirPosTrStatus == 303)
                        {
                            UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                                 System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                                 System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                                 "IncheonAirport Data transmission - ItemList , PayList Tran Auto Success!!! ");
                            //결제완료처리
                            sRet = UserCom.RST_IGNORE;
                        }
                        else
                        {
                            UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                                 System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                                 System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                                 "IncheonAirport Data transmission - ItemList , PayList Tran Failure!!! ");
                            //
                            sRet = UserCom.RST_ERR;
                        }
                    }
                    #endregion
                } 
                */
                //#20180119 로직변경 end,phj 



                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     "IncheonAirport Data transmission - End! MenuKey : " + sMenuKey + " , ClosegGB : " + sCloseGb);

                return sRet;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);

                i_AirPort_End(); // DB DisConnect

                return sRet;
            }
        }
        #endregion

        #region 인천공항 POS 반품 시
        public int i_return_Data(string pSaleDate, string pOld_bill, string pNew_BillNo, string pSaleTY, string pResultTY)
        {
            int iRet = -1;

            try
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     "IncheonAirpot Return Start ! (SaleDate :" + pSaleDate + ", Old_bill :" + pOld_bill + ", New_BillNo :" + pNew_BillNo + ", SaleTY :" + pSaleTY + ", ResultTY :" + pResultTY + ")");

                // DB Connect
                if (i_Airport_Start() != 1)
                { 
                    return iRet;
                }

                int iTran_Result = 0;
                iTran_Result = i_AirPort_PosGetSaleTr(pSaleDate, pOld_bill, pNew_BillNo, pSaleTY, pResultTY);

                i_AirPort_End();

                if (iTran_Result == 1)
                {
                    iRet = 1;
                }

                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                                     "IncheonAirpot Return end !");

                return iRet;

            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                            "IncheonAirport Return Error : " + iRet + ex.Message);

                i_AirPort_End();

                return iRet;
            }
        }
        #endregion

        //#20180123 인천공항 포스 경우 대기번호 입력창 닫을 때 인천공항 상태 체크하도록 수정 start,phj
        #region 대기번호 입력화면에서 인천공항 상태체크
        public string IncheonAirportCheck()
        {
            string sRet = UserCom.RST_ERR;
            try
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                  System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                  System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                  "IncheonAirport State Check - Start! ");

                // DB Connect
                if (i_Airport_Start() != 1)
                {
                    return sRet;
                }

                // 해당 빌 상태 체크 
                int iAirPosTrStatus = 0;
                iAirPosTrStatus = i_AirPort_PosGetSalesTrStatus(m_cTrnStatus.Head.SaleDate, m_cPosStatus.Base.TradeNo);
                if (iAirPosTrStatus != 303)
                {
                    WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0762);
                    i_AirPort_End(); // 통합POS로 DB 연결 해제 
                    return sRet;
                }

                sRet = UserCom.RST_OK;

                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                  System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                  System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                  "IncheonAirport State Check - End! (" + sRet + ")");

                return sRet;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                            "IncheonAirport State Check - Error! " + ex.Message);

                i_AirPort_End(); // 통합POS로 DB 연결 해제 
                return sRet;
            }
        }
        #endregion
        //#20180123 인천공항 포스 경우 대기번호 입력창 닫을 때 인천공항 상태 체크하도록 수정 end,phj


        #region 인천공항 통합POS 조회
        public string PaySearchClick()
        {
            string sRet = UserCom.RST_ERR;
            try
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                  System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                  System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                  "IncheonAirport Data Search - Start! ");

                // DB Connect
                if (i_Airport_Start() != 1)
                { 
                    return sRet;
                }

                // 해당 빌 상태 체크 
                int iAirPosTrStatus = 0;
                iAirPosTrStatus = i_AirPort_PosGetSalesTrStatus(m_cTrnStatus.Head.SaleDate, m_cPosStatus.Base.TradeNo);
                if (iAirPosTrStatus != 303)
                {
                    WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0762);
                    i_AirPort_End(); // 통합POS로 DB 연결 해제 
                    return sRet;
                }

                // 인천공항 통합POS의 결제 데이터 가져오기
                int iTran_Result = 0;
                iTran_Result = i_AirPort_PosGetSaleTr(m_cTrnStatus.Head.SaleDate, m_cPosStatus.Base.TradeNo, "", "0", "Y");
                i_AirPort_End(); // 통합POS로 DB 연결 해제 

                if (iTran_Result == 1) { sRet = UserCom.RST_OK; }

                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                  System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                  System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                  "IncheonAirport Data Search - End! (" + sRet + ")");

                return sRet;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                            "IncheonAirport Data Search - Error! " + ex.Message);

                i_AirPort_End(); // 통합POS로 DB 연결 해제 
                return sRet;
            }
        }
        #endregion

        #region 인천공항 통합POS 요청
        public string PayRequestClick()
        {
            string sRet = UserCom.RST_ERR;
            bool bAirPosTrGB = false;
            int iAirPosTrStatus = 0;

            try
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     "Incheon Airport Pay Request - Start! ");
                // DB Connect
                if (i_Airport_Start() != 1)
                { 
                    return sRet;
                }

                // 해당 빌 상태 체크  
                iAirPosTrStatus = i_AirPort_PosGetSalesTrStatus(m_cTrnStatus.Head.SaleDate, m_cPosStatus.Base.TradeNo);
                if (iAirPosTrStatus == 302)
                {
                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         "Incheon Airport Pay Request - PosGetSalesTrStatus : " + iAirPosTrStatus);

                    //WinManager.ConfirmMessage("통합POS에서 결제 대기 중 입니다.");
                    WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0760);
                    i_AirPort_End();// DB DisConnect                    
                    return sRet;
                }
                else if (iAirPosTrStatus == 303)
                {
                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         "Incheon Airport Pay Request - PosGetSalesTrStatus : " + iAirPosTrStatus);

                    WinManager.ConfirmMessage("통합POS에서 이미 결제 되었습니다.");
                    i_AirPort_End();// DB DisConnect
                    return sRet;
                }

                // 통합POS로 TRAN 전송  
                //bAirPosTrGB = b_AirPort_Pos(m_cPosStatus.IncheonAirport.AirportComp, m_cPosStatus.IncheonAirport.AirportStore, m_cPosStatus.IncheonAirport.AirportPosNo, "TRAN");
                bAirPosTrGB = b_AirPort_Pos("TRAN");

                // 통합POS로 DB 연결 해제 
                i_AirPort_End();

                sRet = UserCom.RST_OK;

                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     "Incheon Airport Pay Request - End! (" + sRet + ")");

                return sRet;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                            "Incheon Airport Pay Request - Error! " + ex.Message);

                i_AirPort_End();
                return sRet;
            }
        }
        #endregion

        #region 인천공항 통합POS 닫기
        public string CloseClick()
        {
            string sRet = UserCom.RST_ERR;
            try
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     "Incheon Airpot Form Close Start! ");

                // DB Connect
                if (i_Airport_Start() != 1)
                { 
                    return sRet;
                }

                // 해당 빌 상태 체크
                int iAirPosTrStatus = 0;
                iAirPosTrStatus = i_AirPort_PosGetSalesTrStatus(m_cTrnStatus.Head.SaleDate, m_cPosStatus.Base.TradeNo);

                // DB DisConnect
                i_AirPort_End();

                if (iAirPosTrStatus == 302)
                {
                    //WinManager.ConfirmMessage("통합POS에서 일괄취소가 되지 않았습니다.");
                    WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0763);
                    return sRet;
                }

                if (iAirPosTrStatus == 303)
                {
                    //WinManager.ConfirmMessage("통합POS에서 이미 결제완료 되었습니다.");
                    WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0761);
                    return sRet;
                }

                sRet = UserCom.RST_OK;

                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     "Incheon Airpot Form End! ");

                return sRet;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                            "Incheon Airpot Form Error! " + ex.Message);
                // DB DisConnect
                i_AirPort_End();
                return sRet;
            }
        }
        #endregion

        //#20180213 인천공항 빌 번호 체크 start,phj
        #region 인천공항 빌번호 가져오기         
        public bool IncheonAirportBillCheck()
        {
            try
            {
                // 인천공항 빌 번호 가져오기 
                string IncheonAirport_BillNo = string.Empty;
                string TempData = string.Empty;
                string[] aRowData = null;
                string[] aColData = null;

                // DB Connect
                if (i_Airport_Start() != 1) { return false; }

                // 인천공항 PosDBApi.dll / PosDBApi.tlb 파일 존재 여부 검사
                if (b_AirPort_Pos_FileExist() == false) return false;

                ADODB.Recordset rs_bill = new ADODB.Recordset();
                rs_bill = posapi.PosGetMaxBillVWEx(m_cPosStatus.Base.SaleDate);

                if (rs_bill == null || rs_bill.RecordCount <= 0)
                {
                    IncheonAirport_BillNo = "0";

                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         "IncheonAirportBillCheck --> IncheonAirport BillNo : null or Count <= 0 " + ", (Previous) SPC Pos BillNo :" + m_cPosStatus.Base.TradeNo);


                }
                else
                {
                    TempData = rs_bill.GetString(StringFormatEnum.adClipString, -1, "|", "#~", "");

                    aRowData = TempData.Split(new string[] { "#~" }, StringSplitOptions.None);
                    aColData = aRowData[0].Split(new string[] { "|" }, StringSplitOptions.None);

                    IncheonAirport_BillNo = aColData[0];

                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         "IncheonAirportBillCheck --> IncheonAirport BillNo :" + IncheonAirport_BillNo + ", (Previous) SPC Pos BillNo :" + m_cPosStatus.Base.TradeNo);
                }

                // 자사포스 빌번호보다 인천공항 빌번호가 크거나 같으면 자사포스 빌번호 1 증가
                if (CmUtil.IntParse(IncheonAirport_BillNo) >= CmUtil.IntParse(m_cPosStatus.Base.TradeNo))
                {
                    m_cPosStatus.Base.TradeNo = string.Format("{0:D05}", CmUtil.IntParse(IncheonAirport_BillNo) + 1);

                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                         "IncheonAirportBillCheck --> IncheonAirport BillNo :" + IncheonAirport_BillNo + ", (After) SPC Pos BillNo :" + m_cPosStatus.Base.TradeNo);
                }

                return true;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                            "IncheonAirportBillCheck --> IncheonAirport BIll No Check - Error! " + ex.Message);

                return false;
            }
        }
        
        #endregion
        //#20180213 인천공항 빌 번호 체크 end,phj
    }
}

