using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Cosmos.UI;
using Cosmos.Common;
using Cosmos.CommonManager;
using Cosmos.ServiceProvider;
using Cosmos.BaseFrame;
using Cosmos.UserFrame;

namespace Cosmos.Win
{
    public partial class frmAccRemoney : Form
    {
        #region 변수 선언

        private SManager sManager = new SManager();                                 // 이 객체를 통해 업무 Service 호출
        private StateServer StateObject = (StateServer)StateServer.GetInstance();   // StateObject : StateServer Object (객체)
        private PosStatus m_cPosStatus = new PosStatus();                           // 기본정보 참조
        private IAccRemoney m_cAccRemoney = null;                                   // 준비금 기능 처리 서비스
        private IDataProcessUs m_cDataService = null;
        private IDataCommonUs m_cDataCommon = null;                                 // POS 공통함수 인터페이스
        private ICashdrawerUs m_cCashDrawer = null;

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

        private int TotalControlCount = 0;
        private int MAX_CASH_COUNT = 0;

        private Hashtable m_htLblControl;
        private Hashtable m_htTxtControl;

        private DataTable m_dtItemInit;                                             // 조회 데이터 리스트

        // 준비금 등록내역을 조회할 영업일자
        private string m_sSearchInfo = "";
        public string SearchInfo { set { m_sSearchInfo = value; } get { return m_sSearchInfo; } }

        // 개점시 자동 닫힘 플래그
        private string m_sAutoClose = "";
        public string SetAutoClose { set { m_sAutoClose = value; } get { return m_sAutoClose; } }
        
        #endregion 변수 선언

        #region 생성자 & 소멸자

        public frmAccRemoney()
        {
            InitializeComponent();

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

            m_cPosStatus = (PosStatus)StateObject.POS;      // POS 기본정보
            m_cAccRemoney = (IAccRemoney)sManager.InitServiceInstance(ServiceLists.BSV_OPEN_CLOSE.DLL, ServiceLists.BSV_OPEN_CLOSE.ACC_REMONEY);
            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_cCashDrawer = (ICashdrawerUs)sManager.InitServiceInstance(ServiceLists.AGENT_OLEDEVICE.DLL, ServiceLists.AGENT_OLEDEVICE.DEVICE_CASHDRAWER);
        }

        private void frmAccRemoney_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();

            // 준비금 입력 내역 조회
            GetAccInfo();
        }

        private void frmAccRemoney_FormClosing(object sender, FormClosingEventArgs e)
        {
            m_sAutoClose = "";
            UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", lblTitle.Text);
        }
        #endregion 생성자 & 소멸자

        #region 폼 컨트롤 초기화
        /// <summary>
        /// 폼 컨트롤 초기화
        /// </summary>
        private void InitControl()
        {
            try
            {
                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);
                FormManager.MovePopUpForm(this, false, m_cPosStatus.Sale.ScreenSizeUser);
                picBack.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.POP_FULL_SIZE);
                btnExit.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.BTN_CLOSE);
                if (btnExit.Image != null) btnExit.Text = "";

                btnUp.DefaultImage = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_164X48_UP1_BASIC);
                btnUp.ClickImage = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_164X48_UP1_PRESS);
                btnUp2.DefaultImage = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_164X48_UP2_BASIC);
                btnUp2.ClickImage = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_164X48_UP2_PRESS);

                btnDw.DefaultImage = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_164X48_DOWN1_BASIC);
                btnDw.ClickImage = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_164X48_DOWN1_PRESS);
                btnDw2.DefaultImage = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_164X48_DOWN2_BASIC);
                btnDw2.ClickImage = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_164X48_DOWN2_PRESS);
                
                //테마색상 적용!
                padInPut.ThemeColor = m_cPosStatus.ScnMst.ThemeColor;
                padInPut.ClearBtnText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0817);
                padInPut.SearchBtnText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_1018);
                btnSave.BackColor = CmUtil.GetColorToString(m_cPosStatus.ScnMst.ThemeColor);

                // 라벨 이름 설정
                lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0085);

                lblCashTotAmt01.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0085);
                lblCashTotAmt02.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0085);

                lblCashID00.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0240);
                lblCashQty00.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0241);
                lblCashAmt00.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0019);

                lblSaleDate.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0242);
                lblCashier.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0191);
                
                // 버튼 이름 설정
                btnSave.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0225);
                btnPrt.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0257);

                // 준비금 입력 담당자
                txtCashier.Text = m_cPosStatus.Base.CashierName;

                txtSaleDate.InputTypeFormat = m_cPosStatus.Global.m_stCultureMaster.strDatePattern;
                txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(m_cPosStatus.Base.SaleDate);

                // 총 합계 초기화
                //this.txtCashTotAmt01.Text = "0";

                // 합계 기본 선택
                //this.txtCashTotAmt01.Select();

                // 준비금이 권종별 입력 옵션일 경우 표시함
                if (PosMstManager.GetPosOption(POS_OPTION.OPT012) == "0")
                {
                    this.panel1.Enabled = false;

                    // 굵은 실선을 없애고 얇은 실선으로 경계선을 대체
                    label05.Visible = false;


                    label25.Visible = true;
                    lblCashTotAmt01.Visible = true;
                    txtCashTotAmt01.Visible = true;
                    label02.Visible = true;
                    label24.Size = new Size(1, 120);
                    label22.Size = new Size(1, 117);
                    label23.Size = new Size(1, 120);

                    this.txtCashTotAmt01.Text = "0";

                    this.txtCashTotAmt01.Select();

                    // 총합 금액 입력시 조회 그리드를 늘려준다.
                    label17.Size = new Size(656, 1);
                    dgvData.Size = new Size(656, 560);
                    // 스크롤 버튼 위치를 재조정한다.
                    btnUp.Location = new Point(16, 630);
                    btnUp2.Location = new Point(180, 630);
                    btnDw.Location = new Point(344, 630);
                    btnDw2.Location = new Point(508, 630);

                    btnUp2.Visible = true;
                    btnDw2.Visible = true;
                }
                    m_htLblControl = new Hashtable();
                    m_htTxtControl = new Hashtable();

                    // {1: 0:현금,1:합계}, {2:0:이름,1:수량,2:금액}
                    m_htLblControl.Add("0001", lblCashID01);
                    m_htLblControl.Add("0002", lblCashID02);
                    m_htLblControl.Add("0003", lblCashID03);
                    m_htLblControl.Add("0004", lblCashID04);
                    m_htLblControl.Add("0005", lblCashID05);
                    m_htLblControl.Add("0006", lblCashID06);
                    m_htLblControl.Add("0007", lblCashID07);
                    m_htLblControl.Add("0008", lblCashID08);
                    m_htLblControl.Add("0009", lblCashID09);
                    m_htLblControl.Add("0010", lblCashID10);
                    m_htLblControl.Add("0011", lblCashID11);
                    m_htLblControl.Add("0012", lblCashID12);
                    m_htLblControl.Add("0013", lblCashID13);
                    m_htLblControl.Add("0014", lblCashID14);
                    m_htLblControl.Add("0015", lblCashID15);

                    // 준비금 입력 텍스트 박스
                    m_htTxtControl.Add("0101", txtCashQty01);
                    m_htTxtControl.Add("0201", txtCashAmt01);
                    m_htTxtControl.Add("0102", txtCashQty02);
                    m_htTxtControl.Add("0202", txtCashAmt02);
                    m_htTxtControl.Add("0103", txtCashQty03);
                    m_htTxtControl.Add("0203", txtCashAmt03);
                    m_htTxtControl.Add("0104", txtCashQty04);
                    m_htTxtControl.Add("0204", txtCashAmt04);
                    m_htTxtControl.Add("0105", txtCashQty05);
                    m_htTxtControl.Add("0205", txtCashAmt05);
                    m_htTxtControl.Add("0106", txtCashQty06);
                    m_htTxtControl.Add("0206", txtCashAmt06);
                    m_htTxtControl.Add("0107", txtCashQty07);
                    m_htTxtControl.Add("0207", txtCashAmt07);
                    m_htTxtControl.Add("0108", txtCashQty08);
                    m_htTxtControl.Add("0208", txtCashAmt08);

                    m_htTxtControl.Add("0109", txtCashQty09);
                    m_htTxtControl.Add("0209", txtCashAmt09);
                    m_htTxtControl.Add("0110", txtCashQty10);
                    m_htTxtControl.Add("0210", txtCashAmt10);
                    m_htTxtControl.Add("0111", txtCashQty11);
                    m_htTxtControl.Add("0211", txtCashAmt11);
                    m_htTxtControl.Add("0112", txtCashQty12);
                    m_htTxtControl.Add("0212", txtCashAmt12);

                    m_htTxtControl.Add("0113", txtCashQty13);
                    m_htTxtControl.Add("0213", txtCashAmt13);
                    m_htTxtControl.Add("0114", txtCashQty14);
                    m_htTxtControl.Add("0214", txtCashAmt14);
                    m_htTxtControl.Add("0115", txtCashQty15);
                    m_htTxtControl.Add("0215", txtCashAmt15);

                    foreach (object obj in m_htLblControl.Values)
                    {
                        Cosmos.UI.CsmLabel LblCtl = (Cosmos.UI.CsmLabel)obj;
                        LblCtl.Text = "";
                        LblCtl.Tag = "";
                        LblCtl.Visible = false;
                    }

                    foreach (object obj in m_htTxtControl.Values)
                    {
                        Cosmos.UI.CsmPosEditBox TxtCtl = (Cosmos.UI.CsmPosEditBox)obj;

                        TxtCtl.Text = "0";
                        TxtCtl.Tag = "0";
                        TxtCtl.Enabled = false;
                        TxtCtl.Visible = false;
                    }

                    // 그리드 초기화
                    SetListColumn();

                    // 준비금 입력 권종 조회
                    GetCommonCode();

                    // 권종별 입력
                    panel1.Visible = true;
                    
                    if (PosMstManager.GetPosOption(POS_OPTION.OPT012) == "0")
                    {
                        this.panel1.Visible = false;
                        this.panel1.Enabled = false;
                    }
                    else
                    {
                        this.txtCashTotAmt02.Text = "0";

                        this.txtCashQty01.Select();
                    }
                //}
            }
            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>
        /// 준비금 입력 정보에 대한 DataGridView 초기화
        /// </summary>
        private void SetListColumn()
        {
            try
            {
                // 준비금 입력 정보
                dgvData.CsmGridColumnHeadersVisible = true;                                   //DataGridView 자체의 컬럼 헤더 Visible 여부
                dgvData.CsmGridColumnHeadersHeight = 40;                                      //DataGridView 자체의 컬럼 헤더 높이
                dgvData.CsmGridColumnHeadersFont = new Font(m_cPosStatus.Base.FONT, 12, FontStyle.Bold);  //DataGridView 자체의 컬럼 헤더 폰트
                dgvData.CsmGridRowsHeight = 40;
                dgvData.CsmGridColumnCount = 4;                                               //그리드의 컬럼수
                dgvData.CsmGridShowPageRowsCount = 13;                                         //그리드의 한 화면에 보이는 로우수
                dgvData.CsmGridSetHeaderBackColor(236, 238, 239);                             //그리드 헤더 배경색
                dgvData.CsmGridDefaultRowBackColor = Color.FromArgb(255, 255, 255);           //그리드 홀수(Default)행의 배경색 지정
                dgvData.CsmGridAlternateRowBackColor = Color.FromArgb(251, 253, 255);         //그리드 짝수(Alternate)행의 배경색 지정
                dgvData.CsmGridBackGroundColor = Color.FromArgb(251, 253, 255);               //기본 백그라운드 컬러
                dgvData.CsmGridHighlightColor = Color.FromArgb(255, 251, 211);                //그리드 선택 백 컬러
                dgvData.CsmGridHighlightTextColor = Color.Black;                              //그리드 선택 글자 컬러
                if (PosMstManager.GetPosOption(POS_OPTION.OPT012) == "0")
                {
                    dgvData.CsmGridSetColumnWidth(new int[] { 50, 240, 240, 126 });   //컬럼넓이 지정(656)
                }
                else
                {
                    dgvData.CsmGridSetColumnWidth(new int[] { 30, 100, 100, 99 });   //컬럼넓이 지정(329)
                }
                dgvData.CsmGridAlignment(new int[] { 1, 0, 2, 1 });               //컬럼 정렬 0:왼쪽, 1:가운데, 2:오른쪽

                //각 컬럼별 이름 지정
                dgvData.CsmGridColumnName(0, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0014));
                dgvData.CsmGridColumnName(1, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0191));
                dgvData.CsmGridColumnName(2, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0085));
                dgvData.CsmGridColumnName(3, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0239));

                //그리드 초기화 테이블
                m_dtItemInit = new DataTable("INIT");
                m_dtItemInit.Columns.Add(new DataColumn("NO", typeof(string)));
                m_dtItemInit.Columns.Add(new DataColumn("CASHIER_NM", typeof(string)));
                m_dtItemInit.Columns.Add(new DataColumn("REMONEY", typeof(string)));
                m_dtItemInit.Columns.Add(new DataColumn("INPUT_TIME", typeof(string)));

                m_dtItemInit.Clear();
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR,
                                     System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +  // Class Name (Class Name (클래스명))
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",                // Function Name (Function Name (함수명))
                                     ex.Message);
            }
        }

        /// <summary>
        /// 계정선택 DataGridView와 Data 연결
        /// </summary>
        public void GetAccInfo()
        {
            try
            {
                DataTable dtData = new DataTable();

                if (m_sSearchInfo == "")
                {
                    m_sSearchInfo = m_cPosStatus.Base.SaleDate;
                }

                dtData = (DataTable)m_cAccRemoney.GetData(new string[] { m_sSearchInfo });

                if (dtData != null && dtData.Rows.Count > 0)
                {
                    foreach (DataRow dr in dtData.Rows)
                    {
                        dr["TOTSALE_AMT"] = m_cPosStatus.Global.NumericTOCurrency(m_cDataService.DoubleParse(dr["TOTSALE_AMT"].ToString()));
                    }

                    //그리드 적용!
                    dgvData.CsmGridDataSource = dtData;

                    dgvData.CsmGridSelectRow(0);
                }
                else
                {
                    //데이터 없음!
                    dgvData.CsmGridDataSource = m_dtItemInit;
                }
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR,
                                     System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +  // Class Name (Class Name (클래스명))
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",                // Function Name (Function Name (함수명))
                                     ex.Message);
            }
        }
        #endregion 폼 컨트롤 초기화

        #region Control Event

        #region 버튼 입력 처리
        /// <summary>
        /// 준비금 입력 창 닫기
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnExit_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }
        #endregion 버튼 입력 처리

        #region 준비금 저장 이벤트
        /// <summary>
        /// 준비금 저장 진행
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSave_Click(object sender, EventArgs e)
        {
            string sQty, sAmt;
            int nTotQty = 0;
            string sRet = UserCom.RST_ERR;

            try
            {
                DataTable dtData = new DataTable();

                dtData.Columns.Add(new DataColumn("DPST_WTHDR_CD", typeof(string)));
                dtData.Columns.Add(new DataColumn("DPST_WTHDR_QTY", typeof(string)));
                dtData.Columns.Add(new DataColumn("DPST_WTHDR_AMT", typeof(string)));
                dtData.Columns.Add(new DataColumn("DPST_WTHDR_NM", typeof(string)));

                // 준비금을 합계로 입력했을 경우
                // 준비금이 권종별 입력 옵션일 경우 표시함
                if (PosMstManager.GetPosOption(POS_OPTION.OPT012) != "0")
                {
                    // 권종 입력시 준비금 저장
                    // 권종 금액 재계산
                    DisplayTotal();

                    for (int i = 1; i <= MAX_CASH_COUNT; i++)
                    {
                        string sSeq = string.Format("{0:00}", i);

                        Cosmos.UI.CsmLabel LblCtl = (Cosmos.UI.CsmLabel)m_htLblControl["00" + sSeq];
                        if (LblCtl.Tag.ToString() == "") continue;

                        Cosmos.UI.CsmPosEditBox txtQty = (Cosmos.UI.CsmPosEditBox)m_htTxtControl["01" + sSeq];  //수량
                        sQty = txtQty.Value;
                        if (sQty == "") sQty = "0";

                        nTotQty = nTotQty + CmUtil.IntParse(sQty);

                        Cosmos.UI.CsmPosEditBox txtAmt = (Cosmos.UI.CsmPosEditBox)m_htTxtControl["02" + sSeq];  //금액
                        sAmt = txtAmt.Value;
                        if (sAmt == "") sAmt = "0";

                        DataRow dr = dtData.NewRow();
                        dr["DPST_WTHDR_CD"] = LblCtl.Tag.ToString();
                        dr["DPST_WTHDR_NM"] = LblCtl.Text;
                        dr["DPST_WTHDR_QTY"] = sQty;
                        dr["DPST_WTHDR_AMT"] = sAmt;
                        dtData.Rows.Add(dr);
                    }

                    DataRow dr2 = dtData.NewRow();
                    dr2["DPST_WTHDR_CD"] = PosConst.FRM_ACC_REMONEY_CODE.TOTAL_REMONEY;
                    dr2["DPST_WTHDR_NM"] = lblCashTotAmt02.Text;
                    dr2["DPST_WTHDR_QTY"] = nTotQty;
                    dr2["DPST_WTHDR_AMT"] = txtCashTotAmt02.Text.Replace(m_cPosStatus.Global.m_stCultureMaster.strGroupingSymbol, "");
                    dtData.Rows.Add(dr2);
                }
                else
                {
                    // 현금합계
                    DataRow dr = dtData.NewRow();

                    dr["DPST_WTHDR_CD"] = PosConst.FRM_ACC_REMONEY_CODE.TOTAL_REMONEY;
                    dr["DPST_WTHDR_NM"] = lblCashTotAmt01.Text;
                    dr["DPST_WTHDR_QTY"] = 0;
                    dr["DPST_WTHDR_AMT"] = txtCashTotAmt01.Text.Replace(m_cPosStatus.Global.m_stCultureMaster.strGroupingSymbol, "");
                    dtData.Rows.Add(dr);
                }

                // 저장 버튼 눌렀을 경우
                // 입출금 유형, 입출금 코드, 입출금 금액, 입출금 명, 고객번호, 여유필드01,  여유필드02, 여유필드03, 여유필드04, 여유필드05
                sRet = m_cAccRemoney.SetData(dtData);

                if (sRet == UserCom.RST_OK)
                {

                    m_cCashDrawer.OpenCashDrawer(); //돈통오픈
                    WinManager.ConfirmMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0178));
                    GetAccInfo();

                    if (m_sAutoClose != "")
                    {
                        this.DialogResult = DialogResult.OK;
                        this.Close();
                    }
                }
                else
                {
                    WinManager.ErrorMessage(sRet);
                }
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR,
                                     System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +  // Class Name (Class Name (클래스명))
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",                // Function Name (Function Name (함수명))
                                     ex.Message);
            }
        }
        #endregion 준비금 저장 이벤트

        #region 준비금 등록 현황 출력 이벤트
        private void btnPrt_Click(object sender, EventArgs e)
        {
            string sRet = UserCom.RST_ERR;
            DataTable dtData = new DataTable();

            try
            {
                if (dgvData.CsmGridRowsCount <= 0)
                {
                    WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0413);
                    return;
                }

                dtData.Columns.Add(new DataColumn("No", typeof(string)));
                dtData.Columns.Add(new DataColumn("CASHIER_NM", typeof(string)));
                dtData.Columns.Add(new DataColumn("TOTSALE_AMT", typeof(string)));
                dtData.Columns.Add(new DataColumn("PAY_TIME", typeof(string)));

                for (int i = 0; i <= dgvData.CsmGridRowsCount - 1; i++)
                {
                    DataRow dr = dtData.NewRow();
                    dr["No"] = dgvData.CsmGridGetCell(i, 0);
                    dr["CASHIER_NM"] = dgvData.CsmGridGetCell(i, 1);
                    dr["TOTSALE_AMT"] = dgvData.CsmGridGetCell(i, 2);
                    dr["PAY_TIME"] = dgvData.CsmGridGetCell(i, 3);
                    dtData.Rows.Add(dr);
                }

                sRet = m_cAccRemoney.AccRemoneyListPrt(dtData, m_cPosStatus.Base.SaleDate);
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR,
                                     System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +  // Class Name (Class Name (클래스명))
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",                // Function Name (Function Name (함수명))
                                     ex.Message);
            }
        }
        #endregion 준비금 등록 현황 출력 이벤트

        #region 수량 변경 이벤트
        /// <summary>
        /// 권종 수량 변경시 금액 재계산
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtCashQty_EditBoxTextChangedEvnet(object sender, EventArgs e)
        {
            DisplayTotal();
        }
        #endregion 수량 변경 이벤트

        #region 텍스트박스 키 입력 이벤트 처리
        /// <summary>
        /// 텍스트박스 키 입력 이벤트 처리
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="sFuncValue"></param>
        private void txtEditBox_EditBoxKeyDownEvent(object sender, string sFuncValue)
        {
            try
            {
                string sTxtBoxName = ((Cosmos.UI.CsmPosEditBox)sender).Name;

                if (sFuncValue == PosKey.MENU_KEY.ENTER)
                {
                    MoveTxFocus(sTxtBoxName, "DOWN");
                    DisplayTotal();
                }
                else if (sFuncValue == PosKey.MENU_KEY.CLEAR)
                {
                    // CLEAR 눌렀을 경우 뭘 해줘야 할까...
                }
                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);
            }
        }
        #endregion 텍스트박스 키 입력 이벤트 처리

        #endregion Control Event

        #region User Method

        #region 계산 Method
        /// <summary>
        /// 매수 입력시 계산/총 등록액 계산
        /// </summary>
        private void DisplayTotal()
        {
            string sQty, sAmt;
            double lTotQty = 0, lTotAmt = 0;

            try
            {
                {
                    //현금시재 합계금액 표시
                    lTotQty = 0; lTotAmt = 0;
                    for (int i = 1; i <= MAX_CASH_COUNT; i++)
                    {
                        string sSeq = string.Format("{0:00}", i);

                        Cosmos.UI.CsmLabel LblCtl = (Cosmos.UI.CsmLabel)m_htLblControl["00" + sSeq];
                        if (LblCtl.Tag.ToString() == "") continue;

                        Cosmos.UI.CsmPosEditBox txtQty = (Cosmos.UI.CsmPosEditBox)m_htTxtControl["01" + sSeq];  //수량
                        Cosmos.UI.CsmPosEditBox txtAmt = (Cosmos.UI.CsmPosEditBox)m_htTxtControl["02" + sSeq];  //금액

                        //수량
                        sQty = txtQty.Value;
                        if (sQty == "") sQty = "0";
                        if (double.Parse(txtQty.Tag.ToString()) > 0)  //권종 존재
                        {
                            txtAmt.Text = m_cPosStatus.Global.NumericTOCurrency(double.Parse(sQty) * double.Parse(txtQty.Tag.ToString()));
                        }

                        //금액
                        sAmt = txtAmt.Value;
                        if (sAmt == "") sAmt = "0";

                        lTotQty = CmUtil.DoubleAdd(lTotQty, double.Parse(sQty));
                        lTotAmt = CmUtil.DoubleAdd(lTotAmt, double.Parse(sAmt));
                    }

                    //txtCashTotAmt01.Text = m_cPosStatus.Global.NumericTOCurrency(lTotAmt);
                    txtCashTotAmt02.Text = m_cPosStatus.Global.NumericTOCurrency(lTotAmt);
                }
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR,
                                     System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +  // Class Name (Class Name (클래스명))
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",                // Function Name (Function Name (함수명))
                                     ex.Message);
            }
        }
        #endregion 계산 Method

        #region 포커스 이동
        /// <summary>
        /// 포커스 이동
        /// </summary>
        /// <param name="sTxName"></param>
        /// <param name="sUpDown"></param>
        private void MoveTxFocus(string sTxName, string sUpDown)
        {
            int nTabIndex = 0;
            try
            {
                foreach (object obj in m_htTxtControl.Values)
                {
                    Cosmos.UI.CsmPosEditBox txtCtl = (Cosmos.UI.CsmPosEditBox)obj;
                    if (txtCtl.Name == sTxName)
                    {
                        nTabIndex = txtCtl.TabIndex;
                        break;
                    }
                }

                if (sUpDown == "DOWN")
                    nTabIndex++;
                else
                    nTabIndex--;

                foreach (object obj in m_htTxtControl.Values)
                {
                    Cosmos.UI.CsmPosEditBox txtCtl = (Cosmos.UI.CsmPosEditBox)obj;
                    if (nTabIndex == txtCtl.TabIndex)
                    {
                        txtCtl.Focus();
                        break;
                    }
                }

                // 마지막 합계쪽에 Focus가 갔을 경우 거기서 Down 일 경우 저장 진행
                if (sUpDown == "DOWN")
                    if (TotalControlCount == nTabIndex)
                    {

                    }

            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR,
                                     System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +  // Class Name (Class Name (클래스명))
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",                // Function Name (Function Name (함수명))
                                     ex.Message);
            }
        }
        #endregion 포커스 이동

        #region 권종 정보 조회
        /// <summary>
        /// 공통코드에 있는 권종 조회
        /// </summary>
        public void GetCommonCode()
        {
            try
            {
                int nTabIndex = 0;
                {
                    //현금시재 조회
                    DataTable dtData = new DataTable();

                    dtData = m_cDataCommon.SeletCommonCode(PosConst.COMMON_CODE_GROUP.Z0004, "");

                    if (dtData != null && dtData.Rows.Count != 0)
                    {
                        foreach (DataRow dr in dtData.Rows)
                        {
                            string sSeq = string.Format("{0:00}", nTabIndex + 1);

                            //권종명 설정
                            Cosmos.UI.CsmLabel LblCtl = (Cosmos.UI.CsmLabel)m_htLblControl["00" + sSeq];

                            string sPassChk = dr[PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_02].ToString();
                            if (sPassChk != "1") continue;

                            LblCtl.Text = dr[PosMst.MST_COMMON.DATA.CD_NM].ToString();
                            LblCtl.Tag = dr[PosMst.MST_COMMON.DATA.CMM_CD].ToString();
                            LblCtl.Visible = true;

                            //수량 설정
                            Cosmos.UI.CsmPosEditBox txtQty = (Cosmos.UI.CsmPosEditBox)m_htTxtControl["01" + sSeq];
                            txtQty.Tag = dr[PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_01].ToString();
                            txtQty.Enabled = true;
                            txtQty.Visible = true;
                            txtQty.TabIndex = nTabIndex++;

                            //금액 설정
                            Cosmos.UI.CsmPosEditBox txtAmt = (Cosmos.UI.CsmPosEditBox)m_htTxtControl["02" + sSeq];
                            if (double.Parse(txtQty.Tag.ToString()) == 0)
                            {
                                txtAmt.Enabled = true;
                                txtAmt.TabIndex = nTabIndex++;
                            }
                            txtAmt.Visible = true;
                        }
                    }
                }
                MAX_CASH_COUNT = nTabIndex;
                TotalControlCount = nTabIndex;
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR,
                                     System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +  // Class Name (Class Name (클래스명))
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",                // Function Name (Function Name (함수명))
                                     ex.Message);
            }
        }
        #endregion 권종 정보 조회

        #region 업/다운 클릭 이벤트
        /// <summary>
        /// 조회 그리드 업/다운 클릭 이벤트
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSelProc_Click(object sender, EventArgs e)
        {
            try
            {
                if (bNotDoubleClik) return;
                bNotDoubleClik = true;

                if ((UI.CsmButton)sender == btnUp2)
                {
                    dgvData.CsmGridScroll("PAGE UP");
                }
                else if ((UI.CsmButton)sender == btnUp)
                {
                    dgvData.CsmGridScroll("UP");
                }
                else if ((UI.CsmButton)sender == btnDw)
                {
                    dgvData.CsmGridScroll("DOWN");
                }
                else if ((UI.CsmButton)sender == btnDw2)
                {
                    dgvData.CsmGridScroll("PAGE DOWN");
                }
            }

            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;
        }
        #endregion 업/다운 클릭 이벤트

        #endregion User Method
    }
}
