//#16401 해피오더)주문내역 바코드 리딩 시 자동 완료처리 start
//#16401 해피오더)주문내역 바코드 리딩 시 자동 완료처리 end

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text; 
using System.Windows.Forms; 
using Cosmos.BaseFrame;
using Cosmos.UserFrame;
using Cosmos.ServiceProvider;
using Cosmos.Common;
using Cosmos.CommonManager;

namespace Cosmos.Win
{
    public partial class frmHappyOrderMsg : Form
    {
        private SManager sManager = new SManager();                                 //이 객체를 통해 업무 Service 호출
        private StateServer StateObject = (StateServer)StateServer.GetInstance();   //StateObject : StateServer Object(객체)
        private PosStatus m_cPosStatus;
        //private TranStatus m_cTrnStatus;                                            //거래정보 참조
        //private DeviceStatus m_cDevStatus = null;

        private IHoldDeal m_cHoldDeal = null;
        private IHappyOrderList m_cHappyOrder = null;
        private IFormHappyOrderMainUs m_cHappyOrderList = null;
        private IDataCommonUs m_cDataCommon = null;

        /// <summary>
        /// 해피오더 리스트 TAB ("01":내점, "02":배달", "03":사전예약, "04":오더폼내점, "05":오더폼배달)
        /// </summary>
        private string m_sPosMenuKeyIn;
        public string PosMenuKeyIn { set { m_sPosMenuKeyIn = value; } get { return m_sPosMenuKeyIn; } }

        /// <summary>
        /// 주문번호 
        /// </summary>
        private string m_HPOrderNo;
        public string HPOrderNo { set { this.m_HPOrderNo = value; } }

        /// <summary>
        /// 픽업/배달 구분 
        /// </summary>
        private string m_HPOrderType;
        public string HPOrderType { set { this.m_HPOrderType = value; } }

        /// <summary>
        /// 상품 리스트 
        /// </summary>
        private ArrayList alHappOrderItem;

        private DataTable m_dtGrid;

        public frmHappyOrderMsg()
        {
            try
            {
                InitializeComponent();

                base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw, true);
                m_cPosStatus = (PosStatus)StateObject.POS;      //POS 기본정보
                //m_cTrnStatus = (TranStatus)StateObject.TRAN;    //거래정보
                //m_cDevStatus = (DeviceStatus)StateObject.DEVICE;

                m_cHoldDeal = (IHoldDeal)sManager.InitServiceInstance(ServiceLists.BSV_SALE.DLL, ServiceLists.BSV_SALE.HOLD_DEAL);
                m_cHappyOrder = (IHappyOrderList)sManager.InitServiceInstance(ServiceLists.BSV_SALE.DLL, ServiceLists.BSV_SALE.HAPPY_ORDER_LIST);
                m_cHappyOrderList = (IFormHappyOrderMainUs)FormManager.GetForm(FormManager.FORM_SAL_HPORD);
                m_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON);
            }
            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);
            }
        }

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

                InitControls();
            }
            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);
            }
        }

        private void frmHappyOrderMsg_FormClosed(object sender, FormClosedEventArgs 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);
        }

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

                this.Location = new Point((1024 - this.Size.Width) / 2, (768 - this.Size.Height) / 2);
                
                picBack.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.POP_SIZE_S);                

                lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_1181);
                btnYes.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0025);
                btnNo.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0026);

                lbMsg1.Text = "주문번호 :" + m_HPOrderNo;
                if (m_HPOrderType != "5" && m_HPOrderType != "6")        // 내점
                {
                    //픽업건
                    lbMsg2.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0798);
                }
                else 
                {
                    //배달건
                    lbMsg2.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0799);
                }

                // 해피오더 상품 리스트 
                alHappOrderItem = m_cHappyOrderList.HappyOrderItem;

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

                // 그리드 값 셋팅
                RegisterItemOnGrid();

                //#16401 해피오더)주문내역 바코드 리딩 시 자동 완료처리 start - 20180829
                //btnUp.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.BUTTON_GRID_UP_ARROW);
                //btnUp.ImageAlign = ContentAlignment.MiddleCenter;
                //#16401 해피오더)주문내역 바코드 리딩 시 자동 완료처리 end - 20180829
                btnUp.BorderStyle = BorderStyle.None;
                //#16401 해피오더)주문내역 바코드 리딩 시 자동 완료처리 start - 20180829
                //btnDw.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.BUTTON_GRID_DOWN_ARROW);
                //btnDw.ImageAlign = ContentAlignment.MiddleCenter;
                //#16401 해피오더)주문내역 바코드 리딩 시 자동 완료처리 end - 20180829

                btnDw.BorderStyle = BorderStyle.None;
                
                //사이즈 및 위치조정
                btnUp.Top = dgvData.Top;
                btnUp.Height = dgvData.Height / 2;
                btnDw.Top = btnUp.Top + btnUp.Height;
                btnDw.Height = dgvData.Height / 2;
                lbMsg1.Left = dgvData.Left;
                lbMsg2.Left = dgvData.Left;
            }
            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);
            }
        }

        #region 그리드 초기화
        private void SetListColumn()
        {
            try
            {
                dgvData.CsmGridColumnHeadersVisible = true;                                   //DataGridView 자체의 컬럼 헤더 Visible 여부
                dgvData.CsmGridColumnHeadersHeight = 37;                                      //DataGridView 자체의 컬럼 헤더 높이
                dgvData.CsmGridColumnHeadersFont = new Font(m_cPosStatus.Base.FONT, 12, FontStyle.Bold);  //DataGridView 자체의 컬럼 헤더 폰트
                dgvData.CsmGridRowsHeight = 35;
                dgvData.CsmGridColumnCount = 5;                                               //그리드의 컬럼수(5)
                dgvData.CsmGridShowPageRowsCount = 5;                                         //그리드의 한 화면에 보이는 로우수
                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;                              //그리드 선택 글자 컬러
                dgvData.CsmGridSetColumnWidth(new int[] { 65, 150, 300, 150, 50 });           //컬럼넓이 지정(715)
                dgvData.CsmGridAlignment(new int[] { 1, 1, 0, 1, 2 });                        //컬럼 정렬 0:왼쪽, 1:가운데, 2:오른쪽

                //각 컬럼별 이름 지정
                dgvData.CsmGridColumnName(0, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0014));
                dgvData.CsmGridColumnName(1, "상품코드");
                dgvData.CsmGridColumnName(2, "상품명");
                dgvData.CsmGridColumnName(3, "수량");
                dgvData.CsmGridColumnName(4, "비고");

                // 
                m_dtGrid = new DataTable();
                m_dtGrid.Columns.Add(new DataColumn("NO", typeof(string)));
                m_dtGrid.Columns.Add(new DataColumn("ITEM_CD", typeof(string)));
                m_dtGrid.Columns.Add(new DataColumn("ITEM_NM", typeof(string)));
                m_dtGrid.Columns.Add(new DataColumn("ITEM_QTY", typeof(string)));
                m_dtGrid.Columns.Add(new DataColumn("ETC", typeof(string)));
                m_dtGrid.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);
            }
        }
        #endregion 그리드 초기화 

        #region 그리드 값 셋팅
        private void RegisterItemOnGrid()
        {
            try
            {
                m_dtGrid.Clear();
                for (int nLoop = 0; nLoop < alHappOrderItem.Count; nLoop++)
                {
                    Column.TR_HPORD.HPORD_ITEM item = (Column.TR_HPORD.HPORD_ITEM)alHappOrderItem[nLoop];

                    DataRow drNew = m_dtGrid.NewRow();
                    drNew["NO"] = nLoop + 1;
                    drNew["ITEM_CD"] = item.GoodsCode;
                    if (CmUtil.StringNullEmpty(item.FlavourFlag).Equals("N") == false)
                    {
                        drNew["ITEM_NM"] = " >" +item.GoodsName;
                    }
                    else
                    {
                        drNew["ITEM_NM"] = item.GoodsName;
                    }
                    
                    drNew["ITEM_QTY"] = item.Qty;
                    m_dtGrid.Rows.Add(drNew);
                }
                dgvData.CsmGridDataSource = m_dtGrid;
                dgvData.CsmGridSelectRow(0);
            }
            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)
        {
            if ((UI.CsmButton)sender == btnUp)
            {
                dgvData.CsmGridScroll("UP");
            }
            else if ((UI.CsmButton)sender == btnDw)
            {
                dgvData.CsmGridScroll("DOWN");
            }
        }
        #endregion
                
        #region 버튼이벤트
        //예/아니오 버튼
        private void btnProc_Click(object sender, EventArgs e)
        {
            try
            {
                if ((Cosmos.UI.CsmButton)sender == btnYes)      // 등록
                {
                    this.DialogResult = DialogResult.OK;
                    this.Close();
                }
                else
                {
                    this.DialogResult = DialogResult.Cancel;
                    this.Close();
                }
            }
            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);
            }
        }
        //닫기버튼
        private void btnExit_Click(object sender, EventArgs e)
        {
            try
            {
                this.DialogResult = DialogResult.Cancel;
                this.Close();
            }
            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

        
    }
}