using System;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.Collections;

using Cosmos.Win;
using Cosmos.BaseFrame;
using Cosmos.UserFrame;
using Cosmos.ServiceProvider;
using Cosmos.Common;
using Cosmos.CommonManager;
using System.Data;

/*-----------------------------------------------------------------------------------------------*/
// 설      명 : 모바일쿠폰 - 해피콘
// 작  성  자 : 
// 변경  이력 : 
/*-----------------------------------------------------------------------------------------------*/
namespace Cosmos.Win
{
    public partial class frmMobileCouponHappyCon : Form
    {

        #region 변수 선언

        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 PosOLEDevice.DelegateOlePos delegatePos;

        private IDataProcessUs m_cDataService = null;
        private IPaymentUs m_cMobileCoupon = null;
        private IICReaderUs m_cDeviceICReader = null;
        private ISalePluItemUs m_cPluService = null;                                // 판매 등록 관리

        private bool bNotDoubleClik = false;                                        // 더블 클릭 방지용

        private IDataCommonUs m_cDataCommon = null;

        private string mPay_DC_Type = "";                                           // 결제 그룹 코드
        private string mPay_DC_CD = "";                                             // 결제 상세 코드

        private string m_sPosMenuKey;                                               // 입력값 할인
        /// <summary>
        /// 할인 구분
        /// </summary>
        public string SetPosMenuKey { set { this.m_sPosMenuKey = value; } }

        private string m_sCouponCD;                                              
        /// <summary>
        /// 외부 입력 쿠폰번호
        /// </summary>
        public string SetCouponCD { set { this.m_sCouponCD = value; } } 
        
        /// <summary>
        /// 입력구분
        /// </summary>
        private string m_sInPutType = "";    
        /// <summary>
        /// 입력데이터
        /// </summary>
        private string m_sInPutData = "";    
        /// <summary>
        /// 카드데이터
        /// </summary>
        private string m_sInEncData = "";
        /// <summary>
        /// 사용가능/불가 펼기기 상태
        /// </summary>
        private bool m_bUseViewMode = false;
        /// <summary>
        /// 결제금액 체크용
        /// </summary>
        private double m_nSaleAmount = 0;
        /// <summary>
        /// 상품정보 작업용
        /// </summary> 
        private ArrayList m_aSaleItem = null;

        private struct ITEM_PLU_CHECK
        {
            public string sCouponNo;        // 쿠폰코드  
            public string sVCouponNo;       // 가상 쿠폰코드
            public string sProductID;       // 프로덕트 코드
            public string iTemCD;           // 상품코드
            public double T_Qty;            // 구매해야될 건수
            public double S_Qty;            // 구매한 건수 
            public double SALE_PRC;         // 상품단가
            public double SaleAmt;          // 상품판매금액
            public double PayAmt;           // 상품결제금액
            public double DCAmt;            // 할인
        }

        private string[] m_aRecvdData = null;

        #endregion 변수 선언

        #region 생성자 & 소멸자 & 폼초기화
        public frmMobileCouponHappyCon()
        {
            InitializeComponent();

            base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw, true);
            //this.UpdateStyles();

            m_cPosStatus = (PosStatus)StateObject.POS;      // POS 기본정보
            m_cTrnStatus = (TranStatus)StateObject.TRAN;    // POS 거래정보 
            m_cDevStatus = (DeviceStatus)StateObject.DEVICE;

            m_cDataService = (IDataProcessUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_SERVICE);            
            m_cDeviceICReader = (IICReaderUs)sManager.InitServiceInstance(ServiceLists.AGENT_OLEDEVICE.DLL, ServiceLists.AGENT_OLEDEVICE.DEVICE_ICREADER);
            m_cPluService = (ISalePluItemUs)sManager.InitServiceInstance(ServiceLists.BSV_SALE.DLL, ServiceLists.BSV_SALE.SALE_PLU_ITEM);
            m_cMobileCoupon = (IPaymentUs)sManager.InitServiceInstance(ServiceLists.BSV_PAYMENT.DLL, ServiceLists.BSV_PAYMENT.MOBILECOUPON_HAPPYCON);
            m_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON);

            delegatePos = new PosOLEDevice.DelegateOlePos(OnDeviceEvent);
        }

        private void frmMobileCouponHappyCon_Load(object sender, EventArgs e)
        {
            UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "");
            InitControl();
        }

        private void frmMobileCouponHappyCon_Activated(object sender, EventArgs e)
        {
            PosOLEDevice.SetEventHandle(delegatePos);
        }

        private void frmMobileCouponHappyCon_Deactivate(object sender, EventArgs e)
        {
            PosOLEDevice.SetEventHandle(null);
        }

        private void frmMobileCouponHappyCon_FormClosing(object sender, FormClosingEventArgs e)
        {
            UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", lblTitle.Text);
        }

        /// <summary>
        /// 폼 컨트롤 초기화
        /// </summary>
        private void InitControl()
        {
            try
            {
                // 이미지 로딩 처리
                this.Size = new Size(800, 578);
                this.Location = new Point(1024 - 800 - 10, 768 - 600);
                picBack.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.POP_SIZE_800X578);
                picBack.Location = new Point(0, 0);

                btnExit.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.BTN_CLOSE);
                if (btnExit.Image != null) btnExit.Text = "";

                if (m_sPosMenuKey == PosKey.MENU_KEY.MOBILE_COUPON_HAPPYCON_SCH)
                {
                    FormManager.MovePopUpForm(this, false, m_cPosStatus.Sale.ScreenSizeUser);
                }

                FormManager.SetFormAllControlFont(this, m_cPosStatus.Base.FONT);
                FormManager.SetTextBoxGlobalInfo(this, m_cPosStatus.Global.m_stCultureMaster.nGroupingDigits, m_cPosStatus.Global.m_stCultureMaster.strGroupingSymbol
                    , m_cPosStatus.Global.m_stCultureMaster.nDecimalDigits, m_cPosStatus.Global.m_stCultureMaster.strDecimalSymbol);

                //테마색상 적용!
                btnEnter.BackColor = CmUtil.GetColorToString(m_cPosStatus.ScnMst.ThemeColor);
                padInPut.ThemeColor = m_cPosStatus.ScnMst.ThemeColor;
                padInPut.ClearBtnText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0817);
                padInPut.SearchBtnText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_1018);


                //버튼이미지 적용
                btnAllUp.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_14X9_UP2_BASIC);
                btnAllUp.ImageAlign = ContentAlignment.MiddleCenter;
                btnAllUp.BorderStyle = BorderStyle.None;
                btnAllDw.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_14X9_DOWN2_BASIC);
                btnAllDw.ImageAlign = ContentAlignment.MiddleCenter;
                btnAllDw.BorderStyle = BorderStyle.None;

                if (btnAllUp.Image != null) btnAllUp.Text = "";
                if (btnAllDw.Image != null) btnAllDw.Text = "";

                btnExit.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.BTN_CLOSE);
                if (btnExit.Image != null) btnExit.Text = "";

                // 모바일쿠폰
                if (m_sPosMenuKey == PosKey.MENU_KEY.MOBILE_COUPON_HAPPYCON) lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0616);
                else if (m_sPosMenuKey == PosKey.MENU_KEY.MOBILE_COUPON_HAPPYCON_SCH) lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0616);

                lblCardNo.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0139);

                btnSearch.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0004);
                btnEnter.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0629);
                btnDelete.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0021);

                lblTitle1.Font = new Font(m_cPosStatus.Base.FONT, 12);
                lblTitle1.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0404);

                txtPayAmt.Text = m_cPosStatus.Global.NumericTOCurrency(m_cTrnStatus.Sale.RemainPayAmt);             // 받을금액

                m_sInPutType = "";                      // 입력구분
                m_sInPutData = "";                      // 입력데이터
                m_sInEncData = "";                      // 카드데이터

                //#20171101 해피콘 조회 시 사용한 쿠폰 표시되도록 수정 start
                //m_bUseViewMode = false;
                m_bUseViewMode = true;
                //#20171101 해피콘 조회 시 사용한 쿠폰 표시되도록 수정 end
                
                bNotDoubleClik = false;
                m_nSaleAmount = 0;
                m_aRecvdData = null;

                mPay_DC_Type = "";                      // 결제 그룹 코드
                mPay_DC_CD = "";                        // 결제 상세 코드

                btnEnter.Visible = false;
                if (m_sPosMenuKey == PosKey.MENU_KEY.MOBILE_COUPON_HAPPYCON) btnEnter.Visible = true;


                // 상품정보
                ArrayList aSaleItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);
                m_aSaleItem = new ArrayList(); 
                for (int iRow = 0; iRow < aSaleItem.Count; iRow++)
                {
                    Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)aSaleItem[iRow];
                    m_aSaleItem.Add(cSaleItem.Clone());
                }

                string[] aRet = null;
                string aRet2 = null;
                string aRet3 = null;
                DataGridSetting(0, ref aRet, ref aRet2, ref aRet3);           // 초기화

                txtCardNo.Text = m_sCouponCD;

                if (m_sCouponCD.Trim() != "") btnProc_Click(btnSearch, null);

                txtCardNo.Select();
                txtCardNo.SelectText();
            }
            catch (Exception ex)
            {
               WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }
        #endregion

        #region 버튼 입력 처리
        /// <summary>
        /// 버튼 입력 처리
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnProc_Click(object sender, EventArgs e)
        {
            string[] aRet = null;
            string aRet2 = null;
            string aRet3 = null;

            try
            {
                if (bNotDoubleClik) return;
                bNotDoubleClik = true;

                if ((UI.CsmButton)sender == btnAllUp)                               // 상단 그리드 Up
                {
                    if (dgvData.Rows.Count == 0)
                    {
                        bNotDoubleClik = false;
                        return;
                    }
                    if (dgvData.CurrentRow.Index > 0)
                    {
                        for (int iLoop = dgvData.CurrentRow.Index - 1; iLoop >= 0; iLoop--)
                        {
                            if (dgvData.Rows[iLoop].Visible == false) continue;

                            dgvData.Rows[iLoop].Selected = true;
                            dgvData.Rows[iLoop].Cells[dgvData.CurrentCell.ColumnIndex].Selected = true;
                            break;
                        }
                    }
                }
                else if ((UI.CsmButton)sender == btnAllDw)                          // 상단 그리드 Down
                {
                    if (dgvData.Rows.Count == 0)
                    {
                        bNotDoubleClik = false;
                        return;
                    }
                    if (dgvData.CurrentRow.Index < dgvData.Rows.Count - 1)
                    {
                        for (int iLoop = dgvData.CurrentRow.Index + 1; iLoop <= dgvData.Rows.Count - 1; iLoop++)
                        {
                            if (dgvData.Rows[iLoop].Visible == false) continue;

                            dgvData.Rows[iLoop].Selected = true;
                            dgvData.Rows[iLoop].Cells[dgvData.CurrentCell.ColumnIndex].Selected = true;
                            break;
                        }
                    }
                }
                else if (((Cosmos.UI.CsmButton)sender) == btnSearch)        // 조회
                {
                    SearchTxtInPut(PosConst.POS_INQ_MODE.SEARCH, "", "");
                }
                else if (((Cosmos.UI.CsmButton)sender) == btnSearchDtl)    // 사용 이력 조회
                {
                    if (dgvData.Rows.Count > 0)
                    {
                        if (dgvData.CurrentRow.Index >= 0)
                        {
                            if (dgvData.Rows[dgvData.CurrentRow.Index].Cells[0].ReadOnly == true)
                            {
                                WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0412);
                                bNotDoubleClik = false;
                                return;
                            }

                            string sCouponNo = dgvData.Rows[dgvData.CurrentRow.Index].Cells[2].Value.ToString().Trim();
                            string sVirtualCouponNo = dgvData.Rows[dgvData.CurrentRow.Index].Cells[3].Value.ToString().Trim();

                            if (SearchTxtInPut(PosConst.POS_INQ_MODE.SEARCH_LOG, sCouponNo, sVirtualCouponNo) == UserCom.RST_OK )
                            {
                                // 로그조회 팝업
                                frmMobileCouponHappyConLog fForm = (frmMobileCouponHappyConLog)FormManager.GetForm(FormManager.FORM_PAY_MOBILE_COUPON_HAPPYCON_LOG);
                                if (fForm == null)
                                {
                                    fForm = new frmMobileCouponHappyConLog();
                                    FormManager.AddForm(FormManager.FORM_PAY_MOBILE_COUPON_HAPPYCON_LOG, fForm);
                                }
                                fForm.SetPosMenuKey = m_sPosMenuKey;
                                fForm.SetCouponCD = sCouponNo;
                                fForm.SetVCouponCD = sVirtualCouponNo;
                                fForm.SetCouponInfo = m_aRecvdData;
                                fForm.ShowDialog();
                            }
                        }
                    }
                }
                else if (((Cosmos.UI.CsmButton)sender) == btnEnter)         // 승인
                {
                    CompleteTxtInPut();
                }
                else if (((Cosmos.UI.CsmButton)sender) == btnDelete)        // 삭제
                {
                    DataGridSetting(2, ref aRet, ref aRet2, ref aRet3);
                }
                else if (((Cosmos.UI.CsmButton)sender) == btnDetail)        // 사용가능
                {
                    DataGridSetting(3, ref aRet, ref aRet2, ref aRet3);
                }
                padInPut.SetActiveFocus();
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
                bNotDoubleClik = false;
            }
            finally
            {
                bNotDoubleClik = false;
            }
        }

        /// <summary>
        /// 닫기
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnExit_Click(object sender, EventArgs e)
        {
            try
            {
                txtEditBox_EditBoxKeyDownEvent(null, PosKey.MENU_KEY.ESC_PREVIOUS);
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }
        #endregion

        #region 텍스트박스 키 입력 이벤트 처리
        /// <summary>
        /// 텍스트박스 키 입력 이벤트 처리
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="sFuncValue"></param>
        private void txtEditBox_EditBoxKeyDownEvent(object sender, string sFuncValue)
        {
            try
            {
                if (sFuncValue == PosKey.MENU_KEY.ENTER)
                {
                    if (((Cosmos.UI.CsmPosEditBox)sender) == txtCardNo)
                    {
                        btnProc_Click(btnSearch, null);
                        return;
                    }
                    //else if (((Cosmos.UI.CsmPosEditBox)sender) == txtCouponAmt)
                    //{
                    //    if (txtCardNo.Text == "")
                    //    {
                    //        SearchTxtInPut();
                    //        return;
                    //    }

                    //    if (txtCardNM.Text == "")
                    //    {
                    //        SearchTxtInPut();
                    //        return;
                    //    }

                    //    if (CheckTxtInPut(sender, false) == false) return;

                    //    if (m_cTrnStatus.Head.TradeDiv == ItemConst.TRAN_DIV.NORMAL)
                    //    {
                    //        CompleteTxtInPut();             // 할인 승인 처리
                    //    }
                    //}
                }
                else if (sFuncValue == PosKey.MENU_KEY.CLEAR)
                {
                    if (((Cosmos.UI.CsmPosEditBox)sender).ReadOnly == false) ((Cosmos.UI.CsmPosEditBox)sender).Text = "";
                    if (((Cosmos.UI.CsmPosEditBox)sender) == txtCardNo)
                    {
                        m_sInPutType = "";    
                        m_sInPutData = "";
                        m_sInEncData = "";    
                        txtCardNo.ReadOnly = false;
                    }
                }
                else if (sFuncValue == PosKey.MENU_KEY.ESC_PREVIOUS)
                {
                    this.DialogResult = DialogResult.Cancel;
                    this.Close();
                }
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }

        /// <summary>
        /// 텍스트박스 활성화 처리
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtEditBox_EnterEvent(object sender, EventArgs e)
        {
            try
            {
                padInPut.SetActiveControl = (Control)sender;
            }
            catch (Exception ex)
            {
               WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }

        /// <summary>
        /// 쿠폰 번호 변경시 기존 조회값 초기화
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtCardNo_EditBoxTextChangedEvnet(object sender, EventArgs e)
        {
            m_sInPutType = "";                                                                                  // 입력구분
            m_sInPutData = "";                                                                                  // 입력데이터
            m_sInEncData = "";                                                                                  // 카드데이터
        }
        #endregion        

        #region 텍스트박스 입력 유효성 체크
        /// <summary>
        /// 텍스트박스 입력 유효성 체크
        /// </summary>
        /// <param name="sender"></param>
        /// <returns></returns>
        private bool CheckTxtInPut(object sender, bool bSearchMode)
        {
            try
            {
                if (bSearchMode == false)
                {
                    if (dgvData.RowCount <= 0)
                    {
                        WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0043);
                        txtCardNo.Focus();
                        return false;
                    }

                    if (m_nSaleAmount > m_cDataService.DoubleParse(txtPayAmt.Text.ToString()))
                    {
                        WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0138);
                        return false;
                    }

                    if (m_nSaleAmount <= 0)
                    {
                        WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0409);
                        return false;
                    }
                }
                else
                {
                    // 카드번호 길이 체크
                    if (sender == null || ((Cosmos.UI.CsmPosEditBox)sender) == txtCardNo)
                    {
                        if (txtCardNo.Value.Length < 6)
                        {
                            WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0080);
                            txtCardNo.Select();
                            txtCardNo.SelectText();
                            return false;
                        }
                    }
                } 
            }
            catch (Exception ex)
            {
               WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
                return false;
            }
            return true;
        }
        #endregion

        #region 텍스트박스 입력 완료 처리
        /// <summary>
        /// 승인 처리
        /// </summary>
        /// <param name="nFlowMode"></param>
        /// <returns></returns>
        private bool CompleteTxtInPut()
        {
            string[] aCouponInfo = null;
            string sCouponType = null;
            string sProductiTem = null;

            string sRet = UserCom.RST_ERR;
            try
            {
                // 상품정보
                ArrayList aSaleItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);
                
                m_aSaleItem = new ArrayList();
                for (int iRow = 0; iRow < aSaleItem.Count; iRow++)
                {
                    Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)aSaleItem[iRow];
                    m_aSaleItem.Add(cSaleItem.Clone());
                }

                // 결제금액 Sum
                sRet = DataGridSetting(5, ref aCouponInfo, ref sCouponType, ref sProductiTem);
                if (sRet != UserCom.RST_OK) return false;

                if (CheckTxtInPut(null, false) == false) return false;

                string sInPutType = m_sInPutType;
                string sInPutData = m_sInPutData;
                string sInEncData = m_sInEncData;
                if (m_sInEncData == "")
                {
                    if (m_sInPutData == "")
                    {
                        sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_KEYIN_CP;
                        sInPutData = txtCardNo.Value;
                    }
                    ///EncryptedCardNo(sInPutData, ref sInEncData, ref sInPutData);
                }

                // 승인 처리
                sRet = m_cMobileCoupon.SetPayment(new string[] { m_sPosMenuKey, sInPutType, sInPutData, sInPutData, "0", "", "", "", mPay_DC_Type, mPay_DC_CD, aCouponInfo[0], sCouponType, sProductiTem });
                if (sRet != UserCom.RST_OK) return false;       // 오류시 종료 안함(2017.05.22)

                if (m_sPosMenuKey == PosKey.MENU_KEY.MOBILE_COUPON_HAPPYCON)
                {
                    this.DialogResult = DialogResult.OK;
                    this.Close();
                }
                return true;
            }
            catch (Exception ex)
            {
               WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
            return false;
        }

        /// <summary>
        /// 조회 처리
        /// </summary>
        /// <returns></returns>
        private string SearchTxtInPut(string sSearchType, string sCouponNo, string VirtualCouponNo)
        {
            string[] aRet = null;
            string aRet2 = null;
            string aRet3 = null;
            string sRet = UserCom.RST_ERR;
            string sCoponinfo = "";
            string sInPutType = "";
            string sInPutData = "";
            string sInEncData = "";

            try
            {
                // 조회
                if (sSearchType == PosConst.POS_INQ_MODE.SEARCH)
                {
                    if (CheckTxtInPut(null, true) == false) return sRet;

                    // 중복체크
                    if (DataGridSetting(4, ref aRet, ref aRet2, ref aRet3) != UserCom.RST_OK) return sRet;

                    // Prefix에 의한 사용 Van 정보 조회
                    if (GetPrefixToPayTypeInfo(txtCardNo.Text) == false) return sRet;

                    sInPutType = m_sInPutType;
                    sInPutData = m_sInPutData;
                    sInEncData = m_sInEncData;
                    if (m_sInEncData == "")
                    {
                        if (m_sInPutData == "")
                        {
                            sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_KEYIN_CP;
                            sInPutData = txtCardNo.Value;
                        }
                        ///EncryptedCardNo(sInPutData, ref sInEncData, ref sInPutData);
                    }
                }

                if (sSearchType == PosConst.POS_INQ_MODE.SEARCH_LOG)
                {
                    // 쿠폰 이력 조회
                    sCoponinfo = CmUtil.MidH(sCouponNo, 0, 32) ;
                    sCoponinfo += CmUtil.MidH(VirtualCouponNo, 0, 32);
                }

                m_aRecvdData = null;
                sRet = m_cMobileCoupon.SearchPayment(new string[] { m_sPosMenuKey, sInPutType, sInPutData, sInPutData, m_cDataService.DoubleParse(txtPayAmt.Text).ToString(), "", "", "", mPay_DC_Type, mPay_DC_CD, sSearchType, sCoponinfo }, ref m_aRecvdData);
                if (sRet != UserCom.RST_OK) return sRet;

                if (sSearchType == PosConst.POS_INQ_MODE.SEARCH)
                {
                    // 그리드에 추가
                    sRet = DataGridSetting(1, ref m_aRecvdData, ref aRet2, ref aRet3);
                    if (sRet != UserCom.RST_OK) return sRet;
                }

                txtCardNo.Text = "";
                txtCardNo.Select();
                txtCardNo.SelectText();

                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);
            }
            return sRet;
        }
        #endregion

        #region DeviceEvent 관련
        /// <summary>
        /// DeviceEvent 관련
        /// </summary>
        /// <param name="sDevice"></param>
        /// <param name="sData1"></param>
        /// <param name="sData2"></param>
        /// <param name="sData3"></param>
        public void OnDeviceEvent(string sDevice, string sData1, string sData2, string sData3)
        {
            try
            {
                switch (sDevice)
                {
                    case PosConst.OPOS_DEVICE.MSR:
                        this.Invoke(new EventHandler(OnMSREvent));
                        break;
                    case PosConst.OPOS_DEVICE.SCANNER:
                        this.Invoke(new EventHandler(OnScannerEvent));
                        break;
                }
            }
            catch (Exception ex)
            {
               WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }

        /// <summary>
        /// MSR Event
        /// </summary>
        /// <param name="source"></param>
        /// <param name="e"></param>
        private void OnMSREvent(object source, EventArgs e)
        {
            try
            {                
                string sMsrData = m_cDevStatus.Msr.Track2Data;
                if (sMsrData.Length > 0 && m_sInPutData == "")
                {
                    m_sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_SWIP;
                    m_sInPutData = sMsrData;
                    
                    txtCardNo.Text = m_sInPutData;
                    //txtCardNo.ReadOnly = true;

                    if (m_cTrnStatus.Head.TradeDiv == ItemConst.TRAN_DIV.NORMAL) btnProc_Click(btnSearch, null);
                }
            }
            catch (Exception ex)
            {
               WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }
        /// <summary>
        /// 스캐너 이벤트 처리
        /// </summary>
        /// <param name="source"></param>
        /// <param name="e"></param>
        private void OnScannerEvent(object source, EventArgs e)
        {
            try
            {
                string sScanData = m_cDevStatus.Scanner.DataLabel;
                if (sScanData.Length > 0 && m_sInPutData == "")
                {
                    m_sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_BARCODE_CP;
                    m_sInPutData = sScanData;
                    
                    txtCardNo.Text = m_sInPutData;
                    //txtCardNo.ReadOnly = true;

                    if (m_cTrnStatus.Head.TradeDiv == ItemConst.TRAN_DIV.NORMAL) btnProc_Click(btnSearch, null);
                }
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                   System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }

        /// <summary>
        /// 카드 번호 암호화
        /// </summary>
        /// <param name="sInData"></param>
        /// <param name="sCardData"></param>
        /// <param name="sCardNo"></param>
        /// <returns></returns>
        private string EncryptedCardNo(string sInData, ref string sCardData, ref string sCardNo)
        {
            string sEncData = sInData;

            try
            {
                sEncData = m_cDeviceICReader.GetEncryptedCardNo(sInData).Trim();

                if (CmUtil.MidH(sEncData, 0, 2) == "00")
                {
                    sCardData = CmUtil.MidH(sEncData, 2, 512).Trim();
                    sCardNo = CmUtil.MidH(sEncData, 514, sEncData.Length - 514).Trim();
                }
                else
                {
                    //암호화 처리 실패!
                    UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                        System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Fail =>" + sInData);
                }
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
            return sEncData;
        }

        /// <summary>
        /// IC 카드 정보 입력 처리
        /// </summary>
        /// <returns></returns>
        private bool GetIcCardData()
        {
            try
            {
                m_sInPutType = "";
                m_sInPutData = "";
                m_sInEncData = "";
                txtCardNo.Value = "";
                txtCardNo.ReadOnly = false;

                string sRsvStr = "";
                if (m_cDeviceICReader.GetCardInfo_ICReader(PosConst.IC_READER_TRAN_TYPE.POINT, 1, ref sRsvStr) == true)
                {
                    if (CmUtil.MidH(sRsvStr, 0, 2) == "00")
                    {
                        txtCardNo.Value = CmUtil.MidH(sRsvStr, 1030, 37).Trim(); 

                        m_sInEncData = CmUtil.MidH(sRsvStr, 6, 512).Trim();
                        m_sInPutData = CmUtil.MidH(sRsvStr, 1030, 37).Trim();
                        m_sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_SWIP;

                        //txtCardNo.ReadOnly = true;
                        return true;
                    }
                }
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
            return false;
        }
        #endregion
         
        #region ProductID로 등록된 상품 체크
        /// <summary>
        /// ProductID로 등록된 상품 체크
        /// </summary>
        /// <param name="sProductID"></param>
        /// <param name="sCouponNo"></param>
        /// <param name="sVCouponNo"></param>
        /// <param name="nPayAmt"></param>
        /// <param name="siTemCheck"></param>
        /// <returns></returns>
        public string GetDCItemAmount(string sProductID, string sCouponNo, string sVCouponNo, double nPayAmt, string sItemChgUse, ref string siTemCheck)
        {
            string sRet = UserCom.RST_ERR;

            double niTemSum = 0;
            double nQty = 0;
            int iMaxIndex = -1;

            try
            {
                // 프로덕트 id 없으면 Skip
                if (sProductID.Trim().Length <= 0) return sRet;

                // 쿠폰 List 조회
                DataTable dtMemu = m_cDataCommon.SeletProductIDToItemCD(sProductID);
                if (dtMemu == null || dtMemu.Rows.Count <= 0)
                {
                    //WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0149);
                    return UserCom.RST_OK;
                }

                ITEM_PLU_CHECK iTemCheck = new ITEM_PLU_CHECK();

                if (m_aSaleItem.Count <= 0)
                {
                    WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0149);
                    return sRet;
                }

                foreach (DataRow dr in dtMemu.Rows)
                {
                    // Product ID로 결제구분을 재설정한다.
                    string sDC_Type = CmUtil.GetDataRowStr(dr, "PAY_DC_GRP_TYPE").Trim();
                    if (sDC_Type.Trim().Length > 0) mPay_DC_Type = sDC_Type.Trim();

                    // Product ID로 결제상세코드를 재설정한다.
                    string sDC_CD = CmUtil.GetDataRowStr(dr, "PAY_DC_CD").Trim();
                    if (sDC_Type.Trim().Length > 0) mPay_DC_CD = sDC_CD.Trim();

                    for (int iRow = 0; iRow < m_aSaleItem.Count; iRow++)
                    {
                        Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)m_aSaleItem[iRow];

                        if (cSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue;// 지정취소
                        if (cSaleItem.DC_DIV == ItemConst.PLU_DC_DIV.FREE) continue;                                                                // 서비스(무료)
                        if (cSaleItem.NONSALES_RSN_CD != "0") continue;                                                                             // 비매출구분
                        if (cSaleItem.BILLSPR_NO != m_cTrnStatus.Sale.BillSplitNo) continue;                                                        // 빌분리번호
                        if (cSaleItem.BILL_AMT <= 0) continue;                                                                                      // 영수금액
                        //if (cSaleItem.DC_PRMT_YN != "0") continue;                                                                                  // 할인가능 여부 

                        if (CmUtil.GetDataRowStr(dr, "ITEM_CHECK_YN") == "1")
                        { 
                                // 등록된 상품과 쿠폰마스터 상품 체크용 저장
                            if (CmUtil.GetDataRowStr(dr, "ITEM_CD") == cSaleItem.ITEM_PLU_CD)
                            {
                                // 할인 대상 iTemCD/수량 체크용 저장
                                nQty = CmUtil.GetDataRowDouble(dr, "QTY");

                                // 할인금액+결제요금액 보다 상품판매금액이 같거나 큰 경우만 
                                if (nQty > 0 && cSaleItem.SALE_QTY > 0 && cSaleItem.BILL_AMT >= nPayAmt + CmUtil.GetDataRowDouble(dr, "DC_AMT"))
                                {
                                    // 제일 큰 금액에 설정
                                    if (iTemCheck.SALE_PRC == 0 || iTemCheck.SALE_PRC < cSaleItem.SALE_PRC)
                                    {
                                        iMaxIndex = iRow;

                                        iTemCheck.sCouponNo = sCouponNo.Trim();
                                        iTemCheck.sVCouponNo = sVCouponNo.Trim();
                                        iTemCheck.sProductID = CmUtil.GetDataRowStr(dr, "PRODUCT_CD").Trim();
                                        iTemCheck.iTemCD = cSaleItem.ITEM_PLU_CD;
                                        iTemCheck.SALE_PRC = cSaleItem.SALE_PRC;
                                        iTemCheck.SaleAmt = cSaleItem.BILL_AMT;
                                        iTemCheck.PayAmt = nPayAmt;
                                        iTemCheck.DCAmt = CmUtil.GetDataRowDouble(dr, "DC_AMT");

                                        // 대상 금액 sum
                                        niTemSum = CmUtil.DoubleAdd(CmUtil.GetDataRowDouble(dr, "DC_AMT"), nPayAmt);
                                    }
                                }
                            }
                        }
                        else
                        {
                            nQty = CmUtil.GetDataRowDouble(dr, "QTY");

                            // 프로덕트 코드 미설정 오류로 인한 수정(2017.05.18)
                            //if (nQty > 0 && cSaleItem.SALE_QTY > 0 && cSaleItem.BILL_AMT >= nPayAmt + CmUtil.GetDataRowDouble(dr, "DC_AMT"))
                            //{
                                // 제일 큰 금액에 설정
                                if (iTemCheck.SALE_PRC == 0 || iTemCheck.SALE_PRC < cSaleItem.SALE_PRC)
                                {
                                    iMaxIndex = iRow;

                                    iTemCheck.sCouponNo = sCouponNo.Trim();
                                    iTemCheck.sVCouponNo = sVCouponNo.Trim();
                                    iTemCheck.sProductID = CmUtil.GetDataRowStr(dr, "PRODUCT_CD").Trim();
                                    iTemCheck.iTemCD = cSaleItem.ITEM_PLU_CD;
                                    iTemCheck.SALE_PRC = cSaleItem.SALE_PRC;
                                    iTemCheck.SaleAmt = cSaleItem.BILL_AMT;
                                    iTemCheck.PayAmt = nPayAmt;
                                    iTemCheck.DCAmt = CmUtil.GetDataRowDouble(dr, "DC_AMT");

                                    // 대상 금액 sum
                                    niTemSum = CmUtil.DoubleAdd(CmUtil.GetDataRowDouble(dr, "DC_AMT"), nPayAmt);
                                }
                            //}
                        }
                    }
                }

                // 적용 상품의 상품금액 변경
                if (iMaxIndex > -1)
                {
                    Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)m_aSaleItem[iMaxIndex];

                    cSaleItem.CPN_DC_DIV = mPay_DC_Type + mPay_DC_CD;
                    cSaleItem.CPN_DC_AMT = CmUtil.DoubleAdd(cSaleItem.CPN_DC_AMT, iTemCheck.DCAmt);
                    cSaleItem.BILL_AMT = CmUtil.DoubleSubtraction(cSaleItem.BILL_AMT, iTemCheck.DCAmt);
                }

                //// 구매수량 체크
                //for (int index = 0; index < m_aSaleItem.Count; index++)
                //{
                //    if (iTemCheck.iTemCD != "")
                //    {
                //        if (iTemCheck.T_Qty >= 0 && iTemCheck.S_Qty != 0)
                //        {
                //            WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0160);
                //            return sRet;
                //        }
                //    }
                //}

                // 금액 체크
                if (niTemSum > m_cDataService.DoubleParse(txtPayAmt.Text.ToString()))
                {
                    WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0160);
                    return sRet;
                }

                // 가능한 상품 미존재시 && 타상품 교환 불가시
                if (niTemSum <= 0 && sItemChgUse == "1") 
                {
                    WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0149);
                    return sRet;
                }

                // 프로덕트 정보 체크용
                if (iTemCheck.sCouponNo.Trim() != "")
                {
                    siTemCheck += iTemCheck.sCouponNo;
                    siTemCheck += "!~";
                    siTemCheck += iTemCheck.sVCouponNo;
                    siTemCheck += "!~";
                    siTemCheck += iTemCheck.sProductID;
                    siTemCheck += "!~";
                    siTemCheck += iTemCheck.iTemCD;
                    siTemCheck += "!~";
                    siTemCheck += iTemCheck.PayAmt;
                    siTemCheck += "!~";
                    siTemCheck += iTemCheck.DCAmt;
                    siTemCheck += "$~";
                }

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

        #region 그리드 설정 및 사용
        private string DataGridSetting(int iWorkMode, ref string[] aRet, ref string sCounponIfo, ref string siTemCheck)
        {
            string sRet = UserCom.RST_ERR;
            try
            {
                if (iWorkMode == 0)
                {
                    #region 초기화
                    dgvData.Rows.Clear();

                    dgvData.AllowUserToAddRows = false;
                    dgvData.EnableHeadersVisualStyles = false;
                    dgvData.RowsDefaultCellStyle.BackColor = Color.White;
                    dgvData.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(249, 249, 249);
                    dgvData.RowHeadersDefaultCellStyle.SelectionBackColor = Color.FromArgb(255, 192, 128);
                    dgvData.EditMode = DataGridViewEditMode.EditProgrammatically;
                    dgvData.Font = this.Font;
                    dgvData.DefaultCellStyle.Font = new Font(m_cPosStatus.Base.FONT, 8);
                    //dgvData.DefaultCellStyle.SelectionBackColor = Color.Transparent;

                    dgvData.Font = new Font(m_cPosStatus.Base.FONT, 10);
                    dgvData.RowHeadersDefaultCellStyle.Font = new Font(m_cPosStatus.Base.FONT, 10);

                    // 타이틀 설정
                    dgvData.Columns[0].HeaderText = "V";
                    dgvData.Columns[1].HeaderText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0617);
                    dgvData.Columns[2].HeaderText = "COUPONNO";
                    dgvData.Columns[3].HeaderText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0618);
                    dgvData.Columns[4].HeaderText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0619);
                    dgvData.Columns[5].HeaderText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0052);
                    dgvData.Columns[6].HeaderText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0620);
                    dgvData.Columns[7].HeaderText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0621);
                    dgvData.Columns[8].HeaderText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0622);
                    dgvData.Columns[9].HeaderText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0623);
                    dgvData.Columns[10].HeaderText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0624);
                    dgvData.Columns[11].HeaderText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0049);
                    #endregion
                }
                else if (iWorkMode == 1)
                {
                    #region 추가
                    if (aRet != null)
                    {
                        int iRow = 0;
                        int iStart = 0; 
                        int iAdd = 0;
                        int iIndex = 0;

                        string sYYYY = CmUtil.LeftH(DateTime.Now.ToString("yyyy"), 2);
                        if (aRet.Length > 0)
                        {
                            // 가상쿠폰번호 표시
                            iRow = dgvData.Rows.Add();
                            dgvData.Rows[iRow].Height = 39; //MoonSeokWoo 2017.11.06 EDIT -> 26 -> * 1.5 = 39
                            dgvData.Rows[iRow].DefaultCellStyle.BackColor = Color.PowderBlue;

                            dgvData.Rows[iRow].Visible = true;
                            dgvData.Rows[iRow].Cells[0].Value = false;
                            dgvData.Rows[iRow].Cells[0].ReadOnly = true;                                                        
                            dgvData.Rows[iRow].Cells[1].Value = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0139);                                 // 종류
                            dgvData.Rows[iRow].Cells[2].Value = aRet[2].Trim();                                                                             // 쿠폰번호
                            dgvData.Rows[iRow].Cells[4].Value = aRet[2].Trim();                                                                             // 가상쿠폰번호
                            iStart = 6; 

                            for (int iLoop = 0; iLoop < CmUtil.IntParse(aRet[6].Trim()); iLoop++)
                            {
                                // 가상쿠폰 상세 목록
                                iRow = dgvData.Rows.Add();
                                dgvData.Rows[iRow].Height = 39; //MoonSeokWoo 2017.11.06 EDIT -> 26 -> * 1.5 = 39
                                dgvData.Rows[iRow].DefaultCellStyle.BackColor = Color.White;
                                dgvData.Rows[iRow].Visible = true;
                                dgvData.Rows[iRow].Cells[0].ReadOnly = false;

                                dgvData.Rows[iRow].Cells[0].Value = false;
                                dgvData.Rows[iRow].Cells[1].Value = (aRet[11 + iIndex].Trim() == "1") ? MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0626) : MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0625);    // 종류
                                dgvData.Rows[iRow].Cells[2].Value = aRet[2].Trim();                                                                         // 쿠폰번호
                                dgvData.Rows[iRow].Cells[3].Value = aRet[7 + iIndex].Trim();                                                                // 가상쿠폰번호
                                dgvData.Rows[iRow].Cells[4].Value = aRet[8 + iIndex].Trim();                                                                // 가상쿠폰명
                                if (aRet[19 + iIndex].Trim().Length == 6)
                                {
                                    dgvData.Rows[iRow].Cells[5].Value = sYYYY + aRet[19 + iIndex].Trim() + "\n~" + sYYYY + aRet[20 + iIndex].Trim();        // 유효기간
                                }
                                else
                                {
                                    dgvData.Rows[iRow].Cells[5].Value = aRet[19 + iIndex].Trim() + "\n~" + aRet[20 + iIndex].Trim();                        // 유효기간
                                }
                                dgvData.Rows[iRow].Cells[6].Value = "";
                                if (aRet[0].Trim() != "0") dgvData.Rows[iRow].Cells[6].Value = aRet[1].Trim();                                              // 비고1
                                dgvData.Rows[iRow].Cells[7].Value = "";
                                if (aRet[21 + iIndex].Trim() != "Y")
                                {
                                    //#20171101 해피콘 조회 시 사용한 쿠폰 표시되도록 수정 start
                                    //dgvData.Rows[iRow].Visible = m_bUseViewMode;

                                    //#20180410 해피콘 조회 시 가상쿠폰상태 구분없이 전체 표시 start
                                    //표시 소스 주석
                                    
                                    if (aRet[21 + iIndex].Trim() != "D")                                    
                                    {
                                        dgvData.Rows[iRow].Visible = false;
                                    }
                                    
                                    //#20180410 해피콘 조회 시 가상쿠폰상태 구분없이 전체 표시 end

                                    //#20171101 해피콘 조회 시 사용한 쿠폰 표시되도록 수정 end
                                    dgvData.Rows[iRow].Cells[7].Value = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0627);                         // 비고2 사유내용 aRet[22]
                                }
                                dgvData.Rows[iRow].Cells[8].Value = m_cPosStatus.Global.NumericTOCurrency(m_cDataService.DoubleParse(aRet[13 + iIndex].Trim()));    // 권면가
                                dgvData.Rows[iRow].Cells[9].Value = m_cPosStatus.Global.NumericTOCurrency(m_cDataService.DoubleParse(aRet[15 + iIndex].Trim()));    // 잔액
                                dgvData.Rows[iRow].Cells[21].Value = m_cDataService.DoubleParse(aRet[16 + iIndex].Trim());                                          // 가용금액 - 체크용
                                dgvData.Rows[iRow].Cells[10].Value = m_cPosStatus.Global.NumericTOCurrency(m_cDataService.DoubleParse(aRet[16 + iIndex].Trim()));   // 가용금액
                                dgvData.Rows[iRow].Cells[11].Value = m_cPosStatus.Global.NumericTOCurrency(m_cDataService.DoubleParse("0"));                        // 결제금액

                                string siTemCD = "";
                                iAdd = 0;
                                for (int iLoop2 = 0; iLoop2 < CmUtil.IntParse(aRet[24 + iIndex].Trim()); iLoop2++)
                                {
                                    // POS 상품코드 목록
                                    siTemCD += aRet[25 + iIndex + iLoop2].Trim() + "|";
                                    iAdd++;
                                }

                                // 사용시 체크사항들
                                dgvData.Rows[iRow].Cells[12].Value = aRet[5].Trim();                                                                        // 동시사용 제약 (0:제약없음, 1:모두 동시사용)
                                dgvData.Rows[iRow].Cells[13].Value = aRet[12 + iIndex].Trim();                                                              // 쿠폰옵션 (0:옵션없음, 1:타상품 교환불가-상품코드 체크)
                                dgvData.Rows[iRow].Cells[14].Value = aRet[24 + iIndex].Trim();                                                              // POS상품코드 개수
                                dgvData.Rows[iRow].Cells[15].Value = siTemCD;                                                                               // POS상품코드  쿠폰옵션이 1인경우
                                dgvData.Rows[iRow].Cells[16].Value = aRet[11 + iIndex].Trim();                                                              // 쿠폰종류 (0:물품형, 1:금액형) 
                                dgvData.Rows[iRow].Cells[17].Value = aRet[16 + iIndex].Trim();                                                              // 그룹번호
                                dgvData.Rows[iRow].Cells[18].Value = aRet[22 + iIndex].Trim();                                                              // 불가사유
                                dgvData.Rows[iRow].Cells[19].Value = aRet[23 + iIndex].Trim();                                                              // 구성상품순번
                                dgvData.Rows[iRow].Cells[20].Value = aRet[21 + iIndex].Trim();                                                              // 쿠폰상태 (Y:사용가능, N:사용불가, D:사용됨, C:폐기, R:환불)

                                iIndex = (24 * (iLoop + 1)) - (iStart * (iLoop + 1)) + iAdd;
                            }
                        }
                    }
                    #endregion 
                }
                else if (iWorkMode == 2)
                {
                    #region 삭제
                    if (dgvData.RowCount <= 0) return sRet;
                    if (dgvData.CurrentCell.RowIndex < 0) return sRet;

                    string sCouponNo = dgvData.Rows[dgvData.CurrentCell.RowIndex].Cells[2].Value.ToString().Trim();

                    for (int iRow = dgvData.RowCount; iRow > 0 ; iRow--)
                    {
                        if (sCouponNo == dgvData.Rows[iRow-1].Cells[2].Value.ToString().Trim())
                        {
                            dgvData.Rows.RemoveAt(iRow-1);
                        }
                    }
                    #endregion 
                }
                else if (iWorkMode == 3)
                {
                    #region  사용가능/불가 숨김 표시
                    if (dgvData.RowCount <= 0) return sRet;

                    for (int iRow = 0; iRow < dgvData.RowCount; iRow++)
                    {
                        if (m_bUseViewMode == false)
                        {
                            dgvData.Rows[iRow].Visible = true;
                        }
                        else if (dgvData.Rows[iRow].Cells[0].ReadOnly == false)
                        {
                            if (dgvData.Rows[iRow].Cells[20].Value.ToString().Trim() != "Y") 
                                dgvData.Rows[iRow].Visible = false;
                            else
                                dgvData.Rows[iRow].Visible = true;
                        }
                    }

                    m_bUseViewMode = !m_bUseViewMode;
                    #endregion
                }
                else if (iWorkMode == 4)
                {
                    #region  중복조회 체크
                    if (dgvData.RowCount <= 0) return UserCom.RST_OK;

                    for (int iRow = 0; iRow < dgvData.RowCount; iRow++)
                    {
                        if (dgvData.Rows[iRow].Cells[2].Value.ToString().Trim() == txtCardNo.Value.Trim())
                        {
                            // 중복 등록 불가
                            WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0408);

                            txtCardNo.Select();
                            txtCardNo.SelectText();
                            return sRet;
                        }
                    }
                    #endregion
                }
                else if (iWorkMode == 5)
                {
                    #region  사용시 금액Sum
                    double nPayAmount = 0;
                    double nQty = 0; 
                    bool biTemCheck = false;
                    string sSendData = ""; 

                    m_nSaleAmount = 0;
                    siTemCheck = "";

                    if (dgvData.RowCount <= 0) return sRet;

                    for (int iRow = 0; iRow < dgvData.RowCount; iRow++)
                    {
                        if ((bool)dgvData.Rows[iRow].Cells[0].Value == true)
                        {
                            // 선택한 쿠폰만
                            if (dgvData.Rows[iRow].Cells[12].Value.ToString() == "1")
                            {
                                // 모두사용시
                                string sGroupNo = dgvData.Rows[iRow].Cells[17].Value.ToString().Trim();
                                for (int iRow2 = 0; iRow2 < dgvData.RowCount; iRow2++)
                                {
                                    // 동일 그룹 체크
                                    if (dgvData.Rows[iRow2].Cells[17].Value.ToString().Trim() == sGroupNo)
                                    {
                                        // 사용 가능만 체크
                                        if (dgvData.Rows[iRow].Cells[20].Value.ToString().ToUpper().Trim() == "Y")
                                        {
                                            if ((bool)dgvData.Rows[iRow2].Cells[0].Value != true)
                                            {
                                                WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0410);
                                                return sRet;
                                            }
                                        }
                                    }
                                }
                            }

                            if (dgvData.Rows[iRow].Cells[13].Value.ToString() == "1")
                            {
                                // 타상품 교환 불가시
                                string sITemInfo = dgvData.Rows[iRow].Cells[15].Value.ToString().Trim();

                                string[] aiTemInfo = sITemInfo.Split(new string[] { "|" }, StringSplitOptions.None);
                                bool bCheckiTem = false; 

                                for (int iRow2 = 0; iRow2 < aiTemInfo.Length; iRow2++)
                                {
                                    for (int iRow3 = 0; iRow3 < m_aSaleItem.Count; iRow3++)
                                    {
                                        Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)m_aSaleItem[iRow3];

                                        if (cSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue;// 지정취소

                                        if (cSaleItem.ITEM_PLU_CD == aiTemInfo[iRow2].Trim())
                                        {
                                            bCheckiTem = true;
                                            break;
                                        }
                                    }

                                }
                                if (bCheckiTem != true)
                                {
                                    WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0411);
                                    return sRet;
                                }
                            }

                            // 결제 요청금액
                            nPayAmount = CmUtil.DoubleAdd(m_cDataService.DoubleParse(dgvData.Rows[iRow].Cells[10].EditedFormattedValue.ToString().Trim()), nPayAmount);
                            nQty++;

                            // 프로덕트코드가 있고, 쿠폰종류 물품형이면

                            //#20180329 해피콘 고정금액형 상품 개발 start
                            //기존
                            //if (dgvData.Rows[iRow].Cells[19].Value.ToString() != "" && dgvData.Rows[iRow].Cells[16].Value.ToString() == "0")
                            //변경
                            
                            if (dgvData.Rows[iRow].Cells[19].Value.ToString() != "" &&
                                (dgvData.Rows[iRow].Cells[16].Value.ToString() == "0" || dgvData.Rows[iRow].Cells[16].Value.ToString() == "2" || dgvData.Rows[iRow].Cells[16].Value.ToString() == "4"))
                            
                            //#20180329 해피콘 고정금액형 상품 개발 end
                            {
                                // 프로덕트 체크
                                sRet = GetDCItemAmount(dgvData.Rows[iRow].Cells[19].Value.ToString(), dgvData.Rows[iRow].Cells[2].Value.ToString().Trim(), dgvData.Rows[iRow].Cells[3].Value.ToString().Trim()
                                    , m_cDataService.DoubleParse(dgvData.Rows[iRow].Cells[10].EditedFormattedValue.ToString().Trim()), dgvData.Rows[iRow].Cells[13].Value.ToString(), ref siTemCheck);
                                if (sRet != UserCom.RST_OK)
                                {
                                    // 타상품 교환 불가시
                                    if (dgvData.Rows[iRow].Cells[13].Value.ToString() == "1") return sRet;
                                }
                            }

                            sSendData += CmUtil.MidH(dgvData.Rows[iRow].Cells[2].Value.ToString().Trim(), 0, 32);                                                   // 쿠폰번호
                            sSendData += CmUtil.MidH(dgvData.Rows[iRow].Cells[3].Value.ToString().Trim(), 0, 32);                                                   // 가상쿠폰번호
                            sSendData += CmUtil.MidH(m_cDataService.DoubleParse(dgvData.Rows[iRow].Cells[10].EditedFormattedValue.ToString().Trim()).ToString(), 0, 10);    // 쿠폰금액 (가용금액)

                            sCounponIfo += CmUtil.MidH(dgvData.Rows[iRow].Cells[2].Value.ToString().Trim(), 0, 32);                                                 // 쿠폰번호
                            sCounponIfo += "|";
                            sCounponIfo += CmUtil.MidH(dgvData.Rows[iRow].Cells[3].Value.ToString().Trim(), 0, 32);                                                 // 가상쿠폰번호
                            sCounponIfo += "|";
                            sCounponIfo += CmUtil.MidH(CmUtil.IntParse(dgvData.Rows[iRow].Cells[16].EditedFormattedValue.ToString()).ToString(), 0, 1);             // 쿠폰종류 (0:물품형, 1:금액형)
                            sCounponIfo += "@~";

                            if (dgvData.Rows[iRow].Cells[13].Value.ToString() == "1")
                            {
                                // 타상품 교환 불가시
                                biTemCheck = true;
                            }

                        }
                    }

                    // 상품 정보
                    if (biTemCheck == true)
                    {
                        sSendData += CmUtil.MidH(m_aSaleItem.Count.ToString(), 0, 5);                                                                 // POS 상품갯수
                        for (int iRow = 0; iRow < m_aSaleItem.Count; iRow++)
                        {
                            Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)m_aSaleItem[iRow];

                            if (cSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue;// 지정취소

                            sSendData += CmUtil.MidH(cSaleItem.ITEM_PLU_CD, 0, 32);                                                                 // POS 상품코드
                            // 전문 설정 오류 수정(2017.05.22)
                            sSendData += CmUtil.MidH(cSaleItem.SALE_AMT.ToString(), 0, 10);                                                         // POS 상품금액
                            //sSendData += m_cDataService.DoubleParse(CmUtil.MidH(cSaleItem.SALE_AMT.ToString(), 0, 10));                             // POS 상품금액
                        }
                    }
                    else
                    {
                        sSendData += CmUtil.MidH("0", 0, 5);                                                                                        // POS 상품갯수
                    }
                    sSendData = CmUtil.MidH(nQty.ToString(), 0, 5) + sSendData;                                                                     // 사용 쿠폰갯수
                    sSendData = CmUtil.MidH(nPayAmount.ToString(), 0, 10) + sSendData;                                                              // 사용쿠폰 총금액

                    aRet = new string[] { sSendData } ;              

                    m_nSaleAmount = nPayAmount;
                    #endregion
                }
                
                dgvData.Refresh();
                dgvData.Select();

                txtCardNo.Select();

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

        #region Prefix에 의한 사용 Van 정보 조회
        /// <summary>
        /// Prefix에 의한 사용 Van 정보 조회
        /// </summary>
        /// <param name="sCardNo"></param>
        /// <returns></returns>
        private bool GetPrefixToPayTypeInfo(string sCardNo)
        {
            try
            {
                if (sCardNo.Length == 0) return false;

                // PreFix 검색              
                DataTable dtVanInfo = m_cDataCommon.SeletPrefixToPayTypeInfo(sCardNo);
                if (dtVanInfo == null || dtVanInfo.Rows.Count <= 0)
                {
                    WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0080);
                    return false;
                }

                DataRow drVanInfo = dtVanInfo.Rows[0];

                // 결제 그룹 코드
                mPay_DC_Type = CmUtil.GetDataRowStr(drVanInfo, "PAY_DC_GRP_TYPE");
                // 결제 상세 코드
                mPay_DC_CD = CmUtil.GetDataRowStr(drVanInfo, "PAY_DC_CD");

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

        #region 그리드 선택
        private void dgvData_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            double nGiftType = 0;
            try
            {
                if (dgvData.Rows.Count <= 0) return;
                //if (e.ColumnIndex == 10) return;
                if (e.RowIndex < 0) return;

                int iRow = e.RowIndex;

                bool bisChecked = !(bool)dgvData.Rows[iRow].Cells[0].Value;
                if (CmUtil.IsNull(dgvData.Rows[iRow].Cells[16].Value) != true)
                { 
                    nGiftType = CmUtil.IntParse(dgvData.Rows[iRow].Cells[16].Value.ToString());      // 쿠폰종류 (0:물품형, 1:금액형) 
                }

                //#20180329 해피콘 고정금액형 상품 개발 start
                //기존
                //if (nGiftType == 1)
                //변경
                if (nGiftType == 1 || nGiftType == 3)
                //#20180329 해피콘 고정금액형 상품 개발 end
                {
                    // 금액형은 금액 수정 가능
                    dgvData.Rows[iRow].Cells[10].ReadOnly = false;
                }
                else
                {
                    dgvData.Rows[iRow].Cells[10].ReadOnly = true;
                }

                if (dgvData.CurrentCell != null && e.RowIndex >= 0)
                {
                    // 지정취소 상품 skip
                    if (dgvData.Rows[e.RowIndex].Visible == false) return;

                    // 서브타이틀로 사용된 항목 제외
                    if (dgvData.Rows[e.RowIndex].Cells[0].ReadOnly == true) return;

                    // 사용불가시 skip
                    if (dgvData.Rows[e.RowIndex].Cells[7].Value.ToString() != "")
                    {
                        WinManager.ErrorMessage(dgvData.Rows[e.RowIndex].Cells[18].Value.ToString().Trim());
                        return;
                    }
                    // 이미 사용시 skip
                    if (m_cDataService.DoubleParse(dgvData.Rows[e.RowIndex].Cells[11].Value.ToString()) > 0) return;

                    dgvData.Rows[e.RowIndex].Cells[0].Value = bisChecked;

                    //#20180329 해피콘 고정금액형 상품 개발 start
                    //기존
                    //if (nGiftType == 1)
                    //변경
                    if (nGiftType == 1 || nGiftType == 3)
                    //#20180329 해피콘 고정금액형 상품 개발 end
                    {
                        if (bisChecked == true)
                        {
                            // 금액형 결제금액 자동 설정용
                            double nPayAmount = 0;
                            for (int iLoop = 0; iLoop < dgvData.RowCount; iLoop++)
                            {
                                // 지정취소 상품 skip
                                if (dgvData.Rows[iLoop].Visible == false) continue;

                                // 서브타이틀로 사용된 항목 제외
                                if (dgvData.Rows[iLoop].Cells[0].ReadOnly == true) continue;

                                // 사용불가시 skip
                                if (dgvData.Rows[iLoop].Cells[7].Value.ToString() != "") continue;

                                // 미선택 skip
                                if ((bool)dgvData.Rows[iLoop].Cells[0].Value != true) continue;

                                if (iLoop != iRow)
                                    nPayAmount = CmUtil.DoubleAdd(m_cDataService.DoubleParse(dgvData.Rows[iLoop].Cells[10].EditedFormattedValue.ToString().Trim()), nPayAmount);
                            }

                            //#20180329 해피콘 고정금액형 상품 개발 start
                            //기존
                            //if (m_cTrnStatus.Sale.RemainPayAmt > nPayAmount && nGiftType == 1)                                                          // 결제금액이 받을금액보다 작고 금액형인 경우만
                            //변경
                            
                            if (m_cTrnStatus.Sale.RemainPayAmt > nPayAmount && 
                                (nGiftType == 1 || nGiftType == 3))                                                          // 결제금액이 받을금액보다 작고 금액형인 경우만
                            
                            //#20180329 해피콘 고정금액형 상품 개발 end
                            {
                                double nMeAmount = m_cDataService.DoubleParse(dgvData.Rows[iRow].Cells[21].EditedFormattedValue.ToString().Trim());     // 가용금액
                                if (m_cTrnStatus.Sale.RemainPayAmt < CmUtil.DoubleAdd(nPayAmount, nMeAmount))
                                {
                                    double nAutoAmount = CmUtil.DoubleSubtraction(m_cTrnStatus.Sale.RemainPayAmt, nPayAmount);
                                    if (nAutoAmount > 0)
                                    {
                                        dgvData.Rows[iRow].Cells[10].Value = m_cPosStatus.Global.NumericTOCurrency(nAutoAmount);
                                        dgvData.Update();
                                    }
                                }
                            }
                        }
                        else
                        {
                            double nMeAmount = m_cDataService.DoubleParse(dgvData.Rows[iRow].Cells[21].EditedFormattedValue.ToString().Trim());     // 가용금액
                            dgvData.Rows[iRow].Cells[10].Value = m_cPosStatus.Global.NumericTOCurrency(nMeAmount);
                        }

                        // 금액형은 금액 수정 가능
                        if ((bool)dgvData.Rows[e.RowIndex].Cells[0].Value == true)
                        {
                            dgvData.Rows[e.RowIndex].Cells[10].Selected = true;
                            dgvData.BeginEdit(true);
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }
         
        private void dgvData_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            double nGiftType = 0;
            try
            {
                if (dgvData.Rows.Count <= 0) return;
                if (e.ColumnIndex != 10) return;
                if (e.RowIndex < 0) return;

                int iRow = e.RowIndex;

                //if (CmUtil.IsNumber( m_cDataService.DoubleParse(dgvinPay.Rows[iRow].Cells[e.ColumnIndex].Value.ToString()).ToString()) != true && dgvinPay.Rows[iRow].Cells[e.ColumnIndex].Value.ToString() != "")
                bool bisChecked = (bool)dgvData.Rows[iRow].Cells[0].Value;

                if (CmUtil.IsNull(dgvData.Rows[iRow].Cells[16].Value) != true)
                {
                    nGiftType = CmUtil.IntParse(dgvData.Rows[iRow].Cells[16].Value.ToString());      // 쿠폰종류 (0:물품형, 1:금액형) 
                }

                if (bisChecked ==true &&  e.ColumnIndex == 10)
                {
                    if (dgvData.Rows[iRow].Cells[10].Value == null) dgvData.Rows[iRow].Cells[10].Value = "0";
                    if (dgvData.Rows[iRow].Cells[21].Value == null) dgvData.Rows[iRow].Cells[21].Value = "0";

                    if (dgvData.Rows[iRow].Cells[10].Value == null || dgvData.Rows[iRow].Cells[10].Value.ToString().Trim() == "") dgvData.Rows[iRow].Cells[10].Value = "0";
                    if (dgvData.Rows[iRow].Cells[21].Value == null || dgvData.Rows[iRow].Cells[21].Value.ToString().Trim() == "") dgvData.Rows[iRow].Cells[21].Value = "0";

                    double nCouponAmt = m_cDataService.DoubleParse(dgvData.Rows[iRow].Cells[10].Value.ToString());          // 가용금액
                    double nCouponCheckAmt = m_cDataService.DoubleParse( dgvData.Rows[iRow].Cells[21].Value.ToString());    // 가용금액 - 체크용

                    if (nCouponAmt > nCouponCheckAmt)
                    {
                        dgvData.Rows[iRow].Cells[10].Value = m_cPosStatus.Global.NumericTOCurrency(nCouponCheckAmt);

                        WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0578);
                        return;
                    } 

                    if (nCouponAmt.ToString().Length > 10 || nCouponAmt <= 0)
                    {
                        dgvData.Rows[iRow].Cells[10].Value = m_cPosStatus.Global.NumericTOCurrency(nCouponCheckAmt);

                        WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0036);                        
                        return;
                    }

                    if (CmUtil.AmountCut(nCouponAmt, CmUtil.IntParse(m_cPosStatus.Mst.PayRudDwLoc)) != nCouponAmt)
                    {
                        dgvData.Rows[iRow].Cells[10].Value = m_cPosStatus.Global.NumericTOCurrency(nCouponCheckAmt);
                        
                        WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0036);
                        return;
                    }


                    dgvData.Rows[iRow].Cells[10].Value = m_cPosStatus.Global.NumericTOCurrency(nCouponAmt);
                    dgvData.Update();
                    //if (bisChecked == true)
                    //{
                    //    // 금액형 결제금액 자동 설정용
                    //    double nPayAmount = 0;
                    //    for (int iLoop = 0; iLoop < dgvData.RowCount; iLoop++)
                    //    {
                    //        // 지정취소 상품 skip
                    //        if (dgvData.Rows[iLoop].Visible == false) continue;

                    //        // 서브타이틀로 사용된 항목 제외
                    //        if (dgvData.Rows[iLoop].Cells[0].ReadOnly == true) continue;

                    //        // 사용불가시 skip
                    //        if (dgvData.Rows[iLoop].Cells[7].Value.ToString() != "") continue;

                    //        // 미선택 skip
                    //        if ((bool)dgvData.Rows[iLoop].Cells[0].Value != true) continue;

                    //        if (iLoop != iRow)
                    //            nPayAmount = CmUtil.DoubleAdd(m_cDataService.DoubleParse(dgvData.Rows[iLoop].Cells[10].EditedFormattedValue.ToString().Trim()), nPayAmount);
                    //    }

                    //    if (m_cTrnStatus.Sale.RemainPayAmt > nPayAmount && nGiftType == 1)                                                          // 결제금액이 받을금액보다 작고 금액형인 경우만
                    //    {
                    //        double nMeAmount = m_cDataService.DoubleParse(dgvData.Rows[iRow].Cells[21].EditedFormattedValue.ToString().Trim());     // 가용금액
                    //        if (m_cTrnStatus.Sale.RemainPayAmt < CmUtil.DoubleAdd(nPayAmount, nMeAmount))
                    //        {
                    //            double nAutoAmount = CmUtil.DoubleSubtraction(nMeAmount, CmUtil.DoubleSubtraction(m_cTrnStatus.Sale.RemainPayAmt, nPayAmount));
                    //            dgvData.Rows[iRow].Cells[10].Value = m_cPosStatus.Global.NumericTOCurrency(nAutoAmount);
                    //            dgvData.Update();
                    //        }
                    //    }
                    //}

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