using System;
using System.Text;
using System.Data;
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 Cosmos.UI;

/*-----------------------------------------------------------------------------------------------*/
// 설      명 : 선택상품할인
// 작  성  자 : 
// 변경  이력 : 
/*-----------------------------------------------------------------------------------------------*/
//************************************************************************************************
// 변경  이력 : 바코드 중복 처리
//------------------------------------------------------------------------------------------------
// - 작 업 자 : 서광원B
// - 작업일자 : 2017.11.10
// - 작업분류 : 2017.10.28 정보운영 판매 바코드 인식
// - 화면설명 : 만약 사용자가 입력한 바코드 정보가 여러개일 경우
//              사용자가 원하는 상품을 선택할 수 있도록 동일한 바코드의 상품을 표시하는 화면
//************************************************************************************************
namespace Cosmos.Win
{
    public partial class frmMultiItem : 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 IDataCommonUs m_cDataCommon = null;                                 // POS 공통함수 인터페이스
        private IDataProcessUs m_cDataService = null;
        private ISalePluItemUs m_cPluService = null;                                // 판매 등록 관리

        // 전달받은 데이터 설정에 필요한 데이터 테이블 선언 -----
        private DataTable _m_dtItemInit = null;                                       // 전달받은 데이터 리스트
        private DataTable m_dtItemInit = null;                                        // 조회 데이터 리스트

        // 사용자가 선택한 그리드 행번호(초기값: -1) -----
        private int intSelectRow = -1;

        // 사용자가 선택한 매장코드 -----
        public string strStorCD = "";

        // 사용자가 선택한 상품코드 -----
        public string strSelectItemCD = "";
        #endregion

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

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

            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_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON);
            m_cPluService = (ISalePluItemUs)sManager.InitServiceInstance(ServiceLists.BSV_SALE.DLL, ServiceLists.BSV_SALE.SALE_PLU_ITEM);
        }

        public frmMultiItem(DataTable _dtDataInfo)
        {
            InitializeComponent();

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

            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_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON);
            m_cPluService = (ISalePluItemUs)sManager.InitServiceInstance(ServiceLists.BSV_SALE.DLL, ServiceLists.BSV_SALE.SALE_PLU_ITEM);

            //---------------------------------------------------------
            // 이전 폼에서 전달받은 데이터 테이블을 폼 변수에 저장한다.
            //---------------------------------------------------------
            #region 이전 폼에서 전달받은 데이터 테이블을 폼 변수에 저장한다.
            _m_dtItemInit = _dtDataInfo.Copy();     // 전달받은 데이터 테이블을 저장

            m_dtItemInit = new DataTable("INIT");   // 타켓 데이터 테이블 설정
            m_dtItemInit.Columns.Add(new DataColumn("NO", typeof(string)));
            m_dtItemInit.Columns.Add(new DataColumn("STOR_CD", typeof(string)));
            m_dtItemInit.Columns.Add(new DataColumn("ITEM_CD", typeof(string)));
            m_dtItemInit.Columns.Add(new DataColumn("ITEM_NM", typeof(string)));
            m_dtItemInit.Columns.Add(new DataColumn("SALE_AMT", typeof(string)));
            m_dtItemInit.Clear();
            #endregion
        }

        private void frmMultiItem_Load(object sender, EventArgs e)
        {
            // 컨트롤 초기화 함수 호출 -----
            InitControl();

            // LOG Write -----
            UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "");
        }

        private void frmMultiItem_FormClosing(object sender, FormClosingEventArgs e)
        {

            // LOG Write -----
            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()
        {
            // 그리드 초기화 함수 호출 -----
            SetListColumn();

            //=====================================
            // 만약 전달받은 데이터가 존재할 경우
            // 전달받은 데이터를 그리드에 표시한다.
            //=====================================
            #region 만약 전달받은 데이터가 존재할 경우 전달받은 데이터를 그리드에 표시한다.
            if (_m_dtItemInit != null && _m_dtItemInit.Rows.Count > 0)
            {
                for (int i = 0; i < _m_dtItemInit.Rows.Count; i++)
                {
                    DataRow dr = m_dtItemInit.NewRow();
                    dr["NO"] = i + 1;
                    dr["STOR_CD"] = _m_dtItemInit.Rows[i]["STOR_CD"].ToString();
                    dr["ITEM_CD"] = _m_dtItemInit.Rows[i]["ITEM_CD"].ToString();
                    dr["ITEM_NM"] = _m_dtItemInit.Rows[i]["ITEM_NM"].ToString();

                    long _lngSaleAmt = Convert.ToInt32(_m_dtItemInit.Rows[i]["SALE_AMT"]);
                    dr["SALE_AMT"] = _lngSaleAmt.ToString("n0");

                    m_dtItemInit.Rows.Add(dr);
                }

                // 전달받은 데이터를 그리드에 표시한다. -----
                dgvData.CsmGridDataSource = m_dtItemInit;
            }
            #endregion

            // 그리드 클릭 이벤트 호출(초기화) -----
            dgvData_GridClickEvent(null, "0");
        }

        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 = 4;                                         //그리드의 한 화면에 보이는 로우수
                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[] { 30, 100, 100, 150, 100 });          //컬럼넓이 지정(480)
                dgvData.CsmGridAlignment(new int[] { 1, 1, 1, 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, "단가");
            }
            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>
        /// 선택
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSelection_Click(object sender, EventArgs e)
        {
            if (intSelectRow > -1)
            {
                // 사용자가 선택한 매장코드 저장 -----
                string _strStorCD = m_dtItemInit.Rows[intSelectRow]["STOR_CD"].ToString();
                strStorCD = _strStorCD;

                // 사용자가 선택한 상품코드 저장 -----
                string _strSelectItemCD = m_dtItemInit.Rows[intSelectRow]["ITEM_CD"].ToString();
                strSelectItemCD = _strSelectItemCD;

                //------------
                // 리턴값 설정
                //------------
                this.DialogResult = DialogResult.OK;
            }
        }

        /// <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 dgvData_GridClickEvent(object sender, string rowIndex)
        {
            // 사용자가 선택한 행 값(intSelectRow)을 저장한다. -----
            if (dgvData.CsmGridRowsCount == 0) return;
            intSelectRow = Convert.ToInt16(rowIndex);       // 행 값(intSelectRow) 저장
        }
        #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
    }
}
