using System;
using System.Data;
using System.Collections;

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

/*-----------------------------------------------------------------------------------------------*/
// 설      명 : 자료조회
// 작  성  자 : 
// 변경  이력 : 
/*-----------------------------------------------------------------------------------------------*/
namespace Cosmos.Service
{
    public class DataSearch : IDataSearch
    {
        #region 변수 선언
        private SManager sManager = new SManager();                                 // 이 객체를 통해 업무 Service 호출
        private PosStatus m_cPosStatus = new PosStatus();                           //기본정보 참조
        private IMasterUs m_cMstService = null;                                     // 마스터 인터페이스
        private StateServer StateObject = (StateServer)StateServer.GetInstance();   // StateObject : StateServer Object (객체)
        private IDataProcessUs m_cDataService = null;
        private TranStatus m_cTrnStatus = new TranStatus();                         //거래정보 참조

        private ISaleCompleteUs m_cSaleComplete = null;                             // 거래완료처리
        private IDatabaseSQL m_cSqlDbService = null;                                // 데이터베이스 관리
        private IDataCommonUs m_cDataCommon = null;                                 // POS 공통함수 인터페이스
        private IPosPrinterUs m_cPrinterUs = null;
        private IMakeAccADMT m_cTranService = null;

        public DataSearch()
        {
            m_cPosStatus = (PosStatus)StateObject.POS;      // POS 기본정보
            m_cTrnStatus = (TranStatus)StateObject.TRAN;    // POS 거래정보

            m_cMstService = (IMasterUs)sManager.InitServiceInstance(ServiceLists.ASV_MASTER.DLL, ServiceLists.ASV_MASTER.POS_MASTER);
            m_cDataService = (IDataProcessUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_SERVICE);
            m_cSaleComplete = (ISaleCompleteUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.SALE_COMPLETE);
            m_cSqlDbService = (IDatabaseSQL)sManager.InitServiceInstance(ServiceLists.AGENT_DATABASE.DLL, ServiceLists.AGENT_DATABASE.DATABASE_MSSQL);
            m_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON);
            m_cPrinterUs = (IPosPrinterUs)sManager.InitServiceInstance(ServiceLists.AGENT_OLEDEVICE.DLL, ServiceLists.AGENT_OLEDEVICE.DEVICE_POSPRINTER);
            m_cTranService = (IMakeAccADMT)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.MAKE_TRANLOG);

        }
        #endregion
       
        #region 조회 대상 그룹 조회
        /// <summary>
        /// 조회 대상 그룹 조회
        /// </summary>
        /// <param name="aParam"></param>
        /// <returns></returns>
        public DataTable SelectGroupList(string[] aParam)
        {
            string sSql = "";
            try
            {
                sSql = "";

                sSql += " SELECT \n";
 			    sSql += "		CMM_CD \n";
                sSql += "	,	ISNULL(ENTRY_NM, '')					ENTRY_NM \n";	
 			    sSql += "	,	ISNULL(CHAR_VAL_TITLE_VAL_04, '')		TODATE_USE \n";
 			    sSql += "	,	ISNULL(CHAR_VAL_TITLE_VAL_02, '')		SUB_CMM_CD1 \n";
 			    sSql += "	,	ISNULL(CHAR_VAL_TITLE_VAL_03, '')		SUB_CMM_CD2 \n";
                sSql += "	,	ISNULL(CHAR_VAL_TITLE_VAL_05, '')		POSNO_USE \n";
                sSql += "	,	ISNULL(CHAR_VAL_TITLE_VAL_06, '')		SIMPLE_USE \n";
                sSql += "FROM POSMST..MST_CMM \n";
                sSql += "WHERE  \n";
 			    sSql += "	CMP_CD		= '" + m_cPosStatus.Base.CmpCd + "' \n";
 			    sSql += "AND CMM_GRP_CD	= '" + aParam[0] + "' \n";
                sSql += "AND CHAR_VAL_TITLE_VAL_01 = '" + aParam[1] + "' \n";
                sSql += "AND LANG_TYPE  = '" + m_cPosStatus.Base.Country + "' \n";
 			    sSql += "AND USE_YN		= '1' \n";
 			    sSql += "ORDER BY DISP_SEQ \n";

                sSql = sSql.Replace("\t", " ");

                DataTable dtDataInfo = m_cMstService.Select(new string[] { sSql });

                return dtDataInfo;
            }
            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 null;
        }
        #endregion

        #region POS번호 조회
        /// <summary>
        /// POS번호 조회
        /// </summary>
        /// <param name="aParam"></param>
        /// <returns></returns>
        public DataTable SelectPosNo(string[] aParam)
        {
            string sSql = "";
            try
            {
                sSql = "";

                //sSql += "SELECT DISTINCT  \n";
                //sSql += "	POS_NO												CMM_CD \n";
                //sSql += ",	CASE WHEN POS_NO = '00' THEN '전체' ELSE 'POS' END ENTRY_NM \n";
                //sSql += "FROM ( \n";
                //sSql += "   SELECT \n";
                //sSql += "		'00'      POS_NO \n";
                //sSql += "   UNION ALL \n";
                //sSql += "   SELECT \n";
                //sSql += "		POS_NO \n";
                //sSql += "   FROM POSMST..MST_POS \n";
                //sSql += "   WHERE  \n";
                //sSql += "	    CMP_CD		= '" + m_cPosStatus.Base.CmpCd + "' \n";
                //sSql += "   AND STOR_CD	= '" + m_cPosStatus.Base.StoreNo + "' \n";
                //sSql += "   AND USE_YN		= '1' \n";
                //sSql += ") MM \n";
                //sSql += "ORDER BY 1 \n";
                sSql += "   SELECT \n";
                sSql += "		    POS_NO  CMM_CD \n";
                sSql += "	    ,   'POS'   ENTRY_NM \n";
                sSql += "   FROM POSMST..MST_POS \n";
                sSql += "   WHERE  \n";
                sSql += "	    CMP_CD		= '" + m_cPosStatus.Base.CmpCd + "' \n";
                sSql += "   AND STOR_CD	= '" + m_cPosStatus.Base.StoreNo + "' \n";
                sSql += "   AND USE_YN		= '1' \n";
                sSql += "ORDER BY 1 \n";

                sSql = sSql.Replace("\t", " ");

                DataTable dtDataInfo = m_cMstService.Select(new string[] { sSql });

                return dtDataInfo;
            }
            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 null;
        }
        #endregion

        #region Host 조회 실행
        /// <summary>
        /// Host 조회 실행
        /// </summary>
        /// <param name="sIRTType"></param>
        /// <param name="sPosNo"></param>
        /// <param name="sStartDate"></param>
        /// <param name="sEndDate"></param>
        /// <param name="sChasu"></param>
        /// <param name="siTemGroup"></param>
        /// <param name="aRet"></param>
        /// <returns></returns>
        public string ExecuteHostIrt(string sIRTType, string sPosNo, string sStartDate, string sEndDate, string sChasu, string siTemGroup, ref string[] aRet)
        {
            int iRecvTimeOut = 10000;
            string sRet = UserCom.RST_ERR;
            Hashtable htSendData = new Hashtable();
            Hashtable htRecvData = new Hashtable();

            try
            {
                // 조회
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.INQ_TYPE, ItemConst.IRT_INQ_TYPE.SERVER_INTERFACE_SCH);
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.STOR_CD, m_cPosStatus.Base.StoreNo);
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.POS_NO, sPosNo);
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.STOR_TY, m_cPosStatus.Mst.DrtFrcsDiv);
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.PRT_DIV, sIRTType);
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.START_DT, sStartDate);
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.END_DT, sEndDate);
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.ORD_SEQ, sChasu);
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.ORD_GRP, siTemGroup);
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.DATA_CNT, "0");
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.RES_DATA, "");

                sRet = m_cDataCommon.ExecutePosIrt(ItemConst.COMM_MSG_TYPE.POSIRT, m_cPosStatus.Base.CommSvrIp, (int)m_cPosStatus.Base.BizInqPort, iRecvTimeOut, htSendData, ref htRecvData);
                if (sRet != UserCom.RST_OK)
                {
                    WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0326));

                    sRet = UserCom.RST_ERR;
                    return sRet;
                }

                if (CmUtil.DoubleParse(htRecvData[Column.IQ_DATA_SEARCH_REQ.DATA.DATA_CNT].ToString()) <= 0)
                {
                    WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0302));
                    sRet = UserCom.RST_ERR;
                    return sRet;
                }

                aRet = htRecvData[Column.IQ_DATA_SEARCH_REQ.DATA.RES_DATA].ToString().Split(new string[] { "#~" }, StringSplitOptions.None);

                sRet = UserCom.RST_OK;
                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 영수증 프린터 출력
        /// <summary>
        /// 영수증 프린터 출력
        /// </summary>
        /// <param name="alPrintData"></param>
        /// <returns></returns>
        public bool PosDataPrint(ArrayList alPrintData)
        {
            bool bReturn = false;
            try
            {
                string[] arPrintData = (string[])alPrintData.ToArray(typeof(string));

                bReturn = m_cPrinterUs.ReceiptPrinter(arPrintData);
            }
            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);
            }

            return bReturn;
        }
        #endregion

        #region 조회일 판매이력이 있는 담당자 조회
        /// <summary>
        /// 조회일 판매이력이 있는 담당자 조회
        /// </summary>
        /// <param name="aParam"></param>
        /// <returns></returns>
        public DataTable SelectTranCashier(string[] aParam)
        {
            string sSql = "";
            try
            {
                sSql = "";

                sSql += "SELECT  \n";
                sSql += "       mm.CASHIER_ID       CMM_CD \n";
                sSql += "   ,   mm.CASHIER_NM       ENTRY_NM \n";
                sSql += "   ,   ''                  TODATE_USE \n";
                sSql += "   ,   ''                  SUB_CMM_CD1 \n";
                sSql += "   ,   ''                  SUB_CMM_CD2 \n";
                sSql += "   ,   ''                  POSNO_USE \n";
                sSql += "   ,   '1'                  SIMPLE_USE \n";
                sSql += "   ,   mm.SEQ              SEQ \n";
                sSql += "from (  \n";
                sSql += "SELECT  \n";
                sSql += "	'00'							CASHIER_ID	 \n";
                sSql += "	,	'" + MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_1025) + "'		CASHIER_NM \n";
                sSql += "	,	1							SEQ \n";
                sSql += "UNION ALL \n";
                sSql += "SELECT  \n";
                sSql += "	''							    CASHIER_ID	 \n";
                sSql += "	,	'" + MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0226) + "'		CASHIER_NM \n";
                sSql += "	,	2							SEQ \n";
                sSql += "UNION ALL \n";
                sSql += "SELECT DISTINCT \n";
                sSql += "		MU.CASHIER_ID \n";
                sSql += "	,	ISNULL(MU.CASHIER_NM, '')	CASHIER_NM \n";
                sSql += "	,	3							SEQ \n";
                sSql += "FROM POSLOG..TR_SALE_HEADER		TSH \n";
                sSql += "	LEFT JOIN POSMST..MST_USER		MU \n";
                sSql += "		ON	MU.CMP_CD		= TSH.CMP_CD \n";
                sSql += "		AND MU.STOR_CD		= TSH.STOR_CD \n";
                sSql += "		AND MU.CASHIER_ID	= TSH.PIC_NO \n";
                sSql += "		AND MU.USE_YN		= '1' \n";
                sSql += "WHERE    \n";
                sSql += "	TSH.CMP_CD           = '" + m_cPosStatus.Base.CmpCd + "' \n";
                sSql += "AND TSH.SALE_DT         = '" + aParam[0] + "' \n";
                sSql += "AND TSH.STOR_CD         = '" + m_cPosStatus.Base.StoreNo + "' \n";
                sSql += "AND TSH.TRAIN_MODE_YN   = '0'    \n";
                sSql += "AND MU.CASHIER_ID      IS NOT NULL \n";
                sSql += ") mm  \n";
                sSql += "ORDER BY mm.SEQ, 1 \n";

                sSql = sSql.Replace("\t", " ");

                DataTable dtDataInfo = m_cMstService.Select(new string[] { sSql });

                return dtDataInfo;
            }
            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 null;
        }
        #endregion

        // Rhee, 2017.10.18 00077점포 매출 Text파일 다운로드 기능(매30분) Start
        #region 점포별 상품 판매금액 조회
        public DataTable SelectPayAmtFilePut(string sStoreCd, string sDate)
        {
            string sSql = "";
            try
            {
                if (sStoreCd != "" && sDate != "")
                {
                    // 판매 금액 조회(반품 및 할인 금액 제외한 실매출액)
                    sSql = "";
                    sSql += "SELECT SUM(CASE WHEN TRADE_DIV = '0' THEN NET_SALE_AMT ELSE 0 END) - SUM(CASE WHEN TRADE_DIV = '1' THEN NET_SALE_AMT ELSE 0 END) AS PAY_AMT ";
                    sSql += " FROM POSLOG..TR_SALE_HEADER ";
                    sSql += " WHERE CMP_CD    = 'PCCN' ";
                    sSql += " AND STOR_CD   = '" + sStoreCd + "' ";
                    sSql += " AND SALE_DT   = '" + sDate + "' ";
                }
                
                DataTable dtDataInfo = m_cMstService.Select(new string[] { sSql });

                return dtDataInfo;
            }
            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 null;
        }
        #endregion
        // Rhee, 2017.10.18 00077점포 매출 Text파일 다운로드 기능(매30분) End

        #region 담당자별 상품 판매 이력 조회
        /// <summary>
        /// 담당자별 상품 판매 이력 조회
        /// </summary>
        /// <param name="aParam"></param>
        /// <returns></returns>
        public DataTable SelectCashier_iTem(string[] aParam)
        {
            string sSql = "";
            try
            {
                if (aParam[0] == "1")
                {
                    // 품목별 정산 내역 조회
                    sSql = "";
                    sSql += "SELECT * FROM ( \n";
                    sSql += "SELECT  \n";
                    sSql += "        TSD.ITEM_PLU_CD \n";
                    sSql += "	  ,	 ISNULL(MI.SHTCUT_ITEMNM, '')													ITEM_NM \n";
                    sSql += "     ,  ISNULL(SUM(CASE TSH.TRADE_DIV WHEN '0' THEN ISNULL(TSD.SALE_QTY, 0)   \n";
                    sSql += "                         ELSE ISNULL(TSD.SALE_QTY, 0) * (-1)   \n";
                    sSql += "                         END), 0)                                                       SALE_QTY   \n";
                    sSql += "     ,  ISNULL(SUM(CASE TSH.TRADE_DIV WHEN '0' THEN ISNULL(TSD.SALE_AMT, 0)   \n";
                    sSql += "                        ELSE ISNULL(TSD.SALE_AMT, 0) * (-1)   \n";
                    sSql += "                         END), 0)                                                       SALE_AMT   \n";
                    sSql += "FROM POSLOG..TR_SALE_HEADER						TSH  \n";
                    sSql += "	LEFT JOIN POSLOG..TR_SALE_DETAIL			    TSD \n";
                    sSql += "		ON	TSD.CMP_CD		= TSH.CMP_CD \n";
                    sSql += "		AND TSD.SALE_DT		= TSH.SALE_DT \n";
                    sSql += "		AND TSD.STOR_CD		= TSH.STOR_CD \n";
                    sSql += "		AND TSD.POS_NO		= TSH.POS_NO \n";
                    sSql += "		AND TSD.TRADE_NO	= TSH.TRADE_NO \n";
                    sSql += "		AND TSD.CANCEL_DIV	= '0' \n";
                    sSql += "	LEFT JOIN POSMST..MST_ITEM					    MI \n";
                    sSql += "		ON	TSD.CMP_CD		= MI.CMP_CD  \n";
                    sSql += "		AND TSD.STOR_CD		= MI.STOR_CD \n";
                    sSql += "		AND TSD.SUB_SHOP_CD	= MI.SUB_STOR_CD \n";
                    sSql += "		AND TSD.ITEM_PLU_CD	= MI.ITEM_CD \n";
                    sSql += "WHERE     \n";
                    sSql += "	 TSH.CMP_CD          = '" + m_cPosStatus.Base.CmpCd + "' \n";
                    sSql += "AND TSH.SALE_DT         = '" + aParam[1] + "' \n";
                    sSql += "AND TSH.STOR_CD         = '" + m_cPosStatus.Base.StoreNo + "' \n";
                    sSql += "AND TSH.TRAIN_MODE_YN   = '0'    \n";
                    sSql += "AND TSH.PIC_NO			LIKE '" + aParam[2] + "' + '%' \n";
                    sSql += "AND TSD.ITEM_PLU_CD		IS NOT NULL\n";
                    sSql += "GROUP BY TSD.ITEM_PLU_CD, MI.SHTCUT_ITEMNM \n";
                    sSql += ") MM \n";
                    sSql += "WHERE MM.SALE_AMT > 0 \n";
                    sSql += "ORDER BY MM.ITEM_PLU_CD \n";
                }
                
                //#20171113 담당자별 매출 조회 분류별 제품 나오도록 수정 start,phj
                //기존
                //else
                //변경
                else if (aParam[0] == "2")
                //#20171113 담당자별 매출 조회 분류별 제품 나오도록 수정 end,phj 
                {
                    // 결제 내역 조회
                    sSql = "";
                    sSql += "SELECT * FROM ( \n";
                    sSql += "SELECT  \n";
                    sSql += "        TSP.PAY_WAY_CD, TSP.PAY_DTL_CD_01 \n";
                    sSql += "	  ,  ISNULL(MPD.PAY_DC_NM, '')														ITEM_NM \n";
                    sSql += "     ,  ISNULL(SUM(CASE TSH.TRADE_DIV WHEN '0' THEN ISNULL(TSP.QTY_ENTRY_01, 0)   \n";
                    sSql += "                         ELSE ISNULL(TSP.QTY_ENTRY_01, 0) * (-1)   \n";
                    sSql += "                         END), 0)                                                       SALE_QTY   \n";
                    sSql += "     ,  ISNULL(SUM(CASE TSH.TRADE_DIV WHEN '0' THEN ISNULL(TSP.PAY_AMT, 0)   \n";
                    sSql += "                         ELSE ISNULL(TSP.PAY_AMT, 0) * (-1)   \n";
                    sSql += "                         END), 0)                                                       SALE_AMT   \n";
                    sSql += "FROM POSLOG..TR_SALE_HEADER						TSH  \n";
                    sSql += "	LEFT JOIN POSLOG..TR_SALE_PAY				    TSP \n";
                    sSql += "		ON	TSP.CMP_CD		= TSH.CMP_CD \n";
                    sSql += "		AND TSP.SALE_DT		= TSH.SALE_DT \n";
                    sSql += "		AND TSP.STOR_CD		= TSH.STOR_CD \n";
                    sSql += "		AND TSP.POS_NO		= TSH.POS_NO \n";
                    sSql += "		AND TSP.TRADE_NO	= TSH.TRADE_NO \n";
                    sSql += "		AND TSP.CANCEL_DIV	= '0'  \n";
                    sSql += "	LEFT JOIN POSMST..MST_PAY_DC				    MPD \n";
                    sSql += "		ON	TSP.CMP_CD			= MPD.CMP_CD \n";
                    sSql += "		AND TSP.STOR_CD			= MPD.STOR_CD \n";
                    sSql += "		AND TSP.PAY_WAY_CD		= MPD.PAY_DC_GRP_TYPE \n";
                    sSql += "		AND TSP.PAY_DTL_CD_01	= MPD.PAY_DC_CD \n";
                    sSql += "		AND MPD.USE_YN			= '1' \n";
                    sSql += "WHERE     \n";
                    sSql += "	 TSH.CMP_CD          = '" + m_cPosStatus.Base.CmpCd + "' \n";
                    sSql += "AND TSH.SALE_DT         = '" + aParam[1] + "' \n";
                    sSql += "AND TSH.STOR_CD         = '" + m_cPosStatus.Base.StoreNo + "' \n";
                    sSql += "AND TSH.TRAIN_MODE_YN   = '0'    \n";
                    sSql += "AND TSH.PIC_NO			LIKE '" + aParam[2] + "' + '%' \n";
                    sSql += "AND TSP.PAY_WAY_CD		IS NOT NULL \n";
                    sSql += "GROUP BY TSP.PAY_WAY_CD, TSP.PAY_DTL_CD_01, MPD.PAY_DC_NM \n";
                    sSql += ") MM \n";
                    sSql += "WHERE MM.SALE_AMT > 0 \n";
                    sSql += "ORDER BY MM.PAY_WAY_CD, MM.PAY_DTL_CD_01 \n";
                }

                //#20171113 담당자별 매출 조회 분류별 제품 나오도록 수정 start,phj
                else if (aParam[0] == "3")
                {
                    sSql = " SELECT isnull(MM.ITEM_CLSS_CD,'') ITEM_CLSS_CD, \n";
                    sSql += " 		CASE GROUPING(MM.ITEM_CLSS_NM) + GROUPING(MM.ITEM_CLSS_CD) + GROUPING(MM.ITEM_PLU_CD) + GROUPING(MM.ITEM_NM) WHEN 3 THEN '#SUB_SUM#' \n";
                    sSql += " 		                                                                                                             WHEN 4 THEN '#TOT_SUM#' \n";
                    sSql += " 																													 ELSE MM.ITEM_CLSS_NM \n";
                    sSql += " 																													 END AS ITEM_CLSS_NM, \n";
                    sSql += " 	    isnull(MM.ITEM_PLU_CD,'') ITEM_PLU_CD , \n";
                    sSql += " 		isnull(MM.ITEM_NM,'') ITEM_NM, \n";
                    sSql += " 		SUM(MM.BILL_AMT) SALE_AMT, \n";
                    sSql += " 		SUM(MM.SALE_QTY) SALE_QTY, \n";
                    sSql += " 		GROUPING(MM.ITEM_CLSS_NM) + GROUPING(MM.ITEM_CLSS_CD) + GROUPING(MM.ITEM_PLU_CD) + GROUPING(MM.ITEM_NM) AS LEVEL_GB \n";
                    sSql += "   FROM \n";
                    sSql += " ( \n";
                    sSql += " SELECT TSH.CMP_CD, TSH.SALE_DT, TSH.STOR_CD, TSH.POS_NO, TSH.TRADE_NO, TSH.TRADE_DIV, \n";
                    sSql += " 	    TSD.ITEM_PLU_CD, \n";
                    sSql += " 	    CASE TSH.TRADE_DIV WHEN '0' THEN ISNULL(TSD.SALE_QTY, 0) \n";
                    sSql += " 								   ELSE ISNULL(TSD.SALE_QTY, 0) * (-1) \n";
                    sSql += " 								   END AS SALE_QTY, \n";
                    sSql += " 	    CASE TSH.TRADE_DIV WHEN '0' THEN ISNULL(TSD.BILL_AMT, 0) \n";
                    sSql += " 								   ELSE ISNULL(TSD.BILL_AMT, 0) * (-1) \n";
                    sSql += " 								   END AS BILL_AMT, \n";
                    sSql += " 	    MI.ITEM_NM,  MI.L_CLSS , \n";
                    sSql += " 	    ISNULL(MIC.ITEM_CLSS_NM, 'Non Registered') AS ITEM_CLSS_NM, MIC.ITEM_CLSS_CD \n";
                    sSql += "   FROM POSLOG..TR_SALE_HEADER TSH \n";
                    sSql += " LEFT JOIN POSLOG..TR_SALE_DETAIL TSD \n";
                    sSql += " 	   ON TSD.CMP_CD		= TSH.CMP_CD \n";
                    sSql += " 	  AND TSD.SALE_DT		= TSH.SALE_DT \n";
                    sSql += " 	  AND TSD.STOR_CD		= TSH.STOR_CD \n";
                    sSql += "       AND TSD.POS_NO		= TSH.POS_NO \n";
                    sSql += " 	  AND TSD.TRADE_NO   	= TSH.TRADE_NO \n";
                    sSql += " 	  AND TSD.CANCEL_DIV	= '0' \n";
                    sSql += " LEFT JOIN POSMST..MST_ITEM MI \n";
                    sSql += "        ON TSD.CMP_CD		= MI.CMP_CD \n";
                    sSql += " 	  AND TSD.STOR_CD		= MI.STOR_CD \n";
                    sSql += " 	  AND TSD.SUB_SHOP_CD	= MI.SUB_STOR_CD \n";
                    sSql += " 	  AND TSD.ITEM_PLU_CD	= MI.ITEM_CD \n";
                    sSql += " 	  AND MI.USE_YN = '1' \n";
                    sSql += " LEFT JOIN POSMST..MST_ITEM_CLSS MIC \n";
                    sSql += "        ON MI.CMP_CD = MIC.CMP_CD \n";
                    sSql += " 	  AND MI.L_CLSS = MIC.ITEM_CLSS_CD \n";
                    sSql += " 	  AND MIC.ITEM_CLSS_TYPE_CD = '00' \n";
                    sSql += "       AND MIC.ITEM_CLSS_LVL_TYPE = 'L' \n";
                    sSql += "       AND MIC.USE_YN = '1' \n";
                    sSql += " WHERE TSH.CMP_CD = '" + m_cPosStatus.Base.CmpCd + "' \n";
                    sSql += "   AND TSH.SALE_DT = '" + aParam[1] + "' \n";
                    sSql += "   AND TSH.STOR_CD = '" + m_cPosStatus.Base.StoreNo + "' \n";
                    sSql += "   AND TSH.POS_NO = '" + m_cPosStatus.Base.PosNo + "' \n";
                    sSql += "   AND TSH.PIC_NO LIKE '" + aParam[2] + "' + '%' \n";
                    sSql += "   AND TSD.ITEM_PLU_CD IS NOT NULL \n";
                    sSql += "   AND TSH.TRAIN_MODE_YN = '0' \n";
                    sSql += " ) MM \n";
                    sSql += " GROUP BY MM.ITEM_CLSS_CD, MM.ITEM_CLSS_NM, MM.ITEM_PLU_CD, MM.ITEM_NM WITH ROLLUP \n";
                    sSql += " HAVING ((GROUPING(MM.ITEM_CLSS_NM) + GROUPING(MM.ITEM_CLSS_CD) + GROUPING(MM.ITEM_PLU_CD) + GROUPING(MM.ITEM_NM) IN (0,3,4)) \n";
                    sSql += "          AND SUM(MM.SALE_QTY)  <> 0) \n";
                    sSql += " ORDER BY MM.ITEM_CLSS_CD DESC, MM.ITEM_PLU_CD DESC \n";
                }
                //#20171113 담당자별 매출 조회 분류별 제품 나오도록 수정 end,phj
                sSql = sSql.Replace("\t", " ");

                DataTable dtDataInfo = m_cMstService.Select(new string[] { sSql });

                return dtDataInfo;
            }
            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 null;
        }
        #endregion        

        #region 점검지 생성
        /// <summary>
        /// 점검지 생성
        /// </summary>
        /// <param name="sSaleDate"></param>
        /// <returns></returns>
        public string MakeAccADMTCheck(string sSaleDate, ref DataTable dtReturn, string bSimplePrint)
        {
            string sRet = UserCom.RST_ERR;
            try
            {
                sRet = m_cTranService.SaveAccADMT(ItemConst.TRAN_KIND.STATEMENT.CLOSING_MONEY, sSaleDate, ref dtReturn, bSimplePrint);
            }
            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);
            } 
            return sRet;
        }
        #endregion

        //#region 정산 점검지 조회
        ///// <summary>
        ///// 정산 점검지 조회
        ///// </summary>
        ///// <param name="aParam"></param>
        ///// <returns></returns>
        //public DataTable SelectAccADMTCheck(string[] aParam)
        //{
        //    string sSql = "";
        //    try
        //    {
        //        sSql = "";

        //        sSql += " SELECT \n";
        //        sSql += "       ISNULL(MBT.BILL_TYPE_DIV, '')				BILL_TYPE_DIV \n";
        //        sSql += "     ,	ISNULL(MBT.SEQ_NO, 0)						SEQ_NO \n";
        //        sSql += "     ,	ISNULL(MBT.SORT_DIV, '2')					SORT_DIV \n";
        //        sSql += "     ,	ISNULL(MBT.SIZE_DIV, '0')					SIZE_DIV \n";
        //        sSql += "     ,	CASE WHEN SUBSTRING(MBT.BILL_TYPE_TAG, 1, 6) = '<CODE>' THEN SUBSTRING(MBT.BILL_TYPE_TAG, 1, 6) ELSE ISNULL(MBT.BILL_TYPE_TAG, '') END BILL_TYPE_TAG \n";
        //        sSql += "     ,	ISNULL(MM.QTY, 0)							QTY \n";
        //        sSql += "     ,	ISNULL(MM.AMT, 0)							AMT \n";
        //        sSql += "     ,	ISNULL(MM.MSG1, '')							MSG \n";
        //        sSql += " FROM POSMST.dbo.MST_BILL_TYPE						MBT \n";
        //        sSql += "     LEFT JOIN (   \n";
        //        sSql += "         SELECT  \n";
        //        sSql += "               MM.CMP_CD \n";
        //        sSql += "             ,	MM.STOR_CD \n";
        //        sSql += "             ,	MM.ADMT_CD   \n";
        //        sSql += "             ,	ISNULL(SUM(MM.QTY), 0)				QTY   \n";
        //        sSql += "             ,	ISNULL(SUM(MM.AMT), 0)				AMT   \n";
        //        sSql += "             ,	ISNULL(MM.MSG1, '')					MSG1   \n";
        //        sSql += "         FROM ( \n";

        //        sSql += "             SELECT     \n";
        //        sSql += "                    MBT.CMP_CD  \n";
        //        sSql += "                  , MBT.STOR_CD  \n";
        //        sSql += "                  , ISNULL(SUBSTRING(MBT.BILL_TYPE_TAG, 7, 4)  , '') ADMT_CD    \n";
        //        sSql += "                  , 0 QTY    \n";
        //        sSql += "                  , 0 AMT    \n";
        //        sSql += "                  , ISNULL(CMM.ENTRY_NM, '')		MSG1 \n";
        //        sSql += "                  , ISNULL(CMM.DISP_SEQ, 0)        DISP_SEQ  \n";
        //        sSql += "             FROM  POSMST..MST_BILL_TYPE			MBT \n";
        //        sSql += "                 INNER JOIN POSMST..MST_CMM			CMM \n";
        //        sSql += "                  ON  CMM.CMP_CD		= MBT.CMP_CD    \n";
        //        sSql += "                  AND CMM.CMM_GRP_CD	= '" + PosConst.COMMON_CODE_GROUP.Z0013 + "' \n";
        //        sSql += "                  AND ISNULL(CMM.CHAR_VAL_TITLE_VAL_01, '') LIKE '" + sSimplePrint + "' + '%' \n";
        //        sSql += "                  AND CMM.CMM_CD		= SUBSTRING(MBT.BILL_TYPE_TAG, 7, 4)    \n";
        //        sSql += "                  AND CMM.LANG_TYPE	= '" + m_cPosStatus.Base.Country + "' \n";
        //        sSql += "                  AND CMM.USE_YN		= '1'    \n";
        //        sSql += "              WHERE     \n";
        //        sSql += "                 MBT.CMP_CD			= '" + m_cPosStatus.Base.CmpCd + "' \n";
        //        sSql += "             AND MBT.STOR_CD			= '" + m_cPosStatus.Base.StoreNo + "' \n";
        //        sSql += "             AND MBT.BILL_TYPE_GRP_CD	= '" + CmUtil.GetDataRowStr(PosMstManager.GetMstPos(), PosMst.MST_POS.DATA.BILL_TYPEGRP) + "' \n";
        //        sSql += "             AND MBT.BILL_TYPE_DIV		= '" + PosConst.BILL_TYPE_DIV.ADMT_TRAN + "' \n";
        //        sSql += "             AND SUBSTRING(MBT.BILL_TYPE_TAG, 1, 6)	= '<CODE>' \n";
        //        sSql += "             AND MBT.USE_YN				= '1'     \n";
        //        sSql += "  \n";
        //        sSql += "             UNION ALL   \n";
        //        sSql += "  \n";
        //        sSql += " 			  SELECT      \n";
        //        sSql += " 				        TSH.CMP_CD   \n";
        //        sSql += " 				  	,	TSH.STOR_CD   \n";
        //        sSql += " 				  	,	TSA.ADMT_CD						ADMT_CD   \n";
        //        sSql += " 				  	,	TSA.QTY     \n";
        //        sSql += " 				  	,	TSA.AMT     \n";
        //        sSql += " 				  	,	ISNULL(CMM.ENTRY_NM, '')		MSG1      \n";
        //        sSql += "                  ,    ISNULL(CMM.DISP_SEQ, 0)        DISP_SEQ  \n";
        //        sSql += " 			 FROM      \n";
        //        sSql += " 			    POSLOG..TR_SALE_HEADER					TSH     \n";
        //        sSql += " 			    INNER JOIN POSLOG..TR_SALE_ADMT_CHECK			TSA     \n";
        //        sSql += " 				    ON	TSA.CMP_CD		= TSH.CMP_CD     \n";
        //        sSql += " 				  	AND TSA.SALE_DT		= TSH.SALE_DT     \n";
        //        sSql += " 				  	AND TSA.STOR_CD		= TSH.STOR_CD     \n";
        //        sSql += " 				  	AND TSA.POS_NO		= TSH.POS_NO     \n"; 
        //        sSql += " 				INNER JOIN POSMST..MST_POS				MP   \n";
        //        sSql += " 				  	ON  MP.CMP_CD		= TSH.CMP_CD     \n";
        //        sSql += " 				  	AND MP.STOR_CD		= TSH.STOR_CD     \n";
        //        sSql += " 				  	AND MP.POS_NO		IN ('00', TSH.POS_NO)  \n";
        //        sSql += " 				  	AND MP.USE_YN		= '1'     \n";
        //        sSql += " 				RIGHT JOIN POSMST..MST_BILL_TYPE			MBT \n";
        //        sSql += " 				  	ON MBT.CMP_CD		= TSH.CMP_CD  \n";
        //        sSql += "					AND MBT.STOR_CD		= TSH.STOR_CD \n";
        //        sSql += "					AND MBT.BILL_TYPE_GRP_CD	= MP.BILL_TYPEGRP \n";
        //        sSql += "					AND MBT.BILL_TYPE_DIV		= '" + PosConst.BILL_TYPE_DIV.ADMT_TRAN + "' \n";
        //        sSql += "					AND SUBSTRING(MBT.BILL_TYPE_TAG, 1, 6)	= '<CODE>'		 \n";
        //        sSql += "					AND SUBSTRING(MBT.BILL_TYPE_TAG, 7, 4) = TSA.ADMT_CD	 \n";
        //        sSql += "					AND MBT.USE_YN		= '1'     \n";
        //        sSql += "		        LEFT JOIN POSMST..MST_CMM			        CMM \n";
        //        sSql += "					ON  CMM.CMP_CD		= MBT.CMP_CD    \n";
        //        sSql += "					AND CMM.CMM_GRP_CD	= '" + PosConst.COMMON_CODE_GROUP.Z0013 + "' \n";
        //        sSql += "                   AND ISNULL(CMM.CHAR_VAL_TITLE_VAL_01, '') LIKE '" + sSimplePrint + "' + '%' \n";
        //        sSql += "					AND CMM.CMM_CD		= SUBSTRING(MBT.BILL_TYPE_TAG, 7, 4)    \n";
        //        sSql += "					AND CMM.LANG_TYPE	= '" + m_cPosStatus.Base.Country + "' \n";
        //        sSql += "					AND CMM.USE_YN		= '1'    \n";
        //        sSql += " 			  WHERE      \n";
        //        sSql += "                 TSH.CMP_CD			= '" + m_cPosStatus.Base.CmpCd + "' \n";
        //        sSql += "             AND TSH.SALE_DT			= '" + aParam[0] + "' \n";
        //        sSql += "             AND TSH.STOR_CD			= '" + m_cPosStatus.Base.StoreNo + "' \n";
        //        sSql += "             AND TSH.POS_NO			= '" + m_cPosStatus.Base.PosNo + "' \n";
        //        sSql += "             AND TSH.TRADE_KINDPER		IN ('" + ItemConst.TRAN_KIND.STATEMENT.MIDDLE_ADJUSTMENT + "', '" + ItemConst.TRAN_KIND.STATEMENT.ADJUSTMENT + "')   \n";
        //        sSql += " 			  AND TSH.TRADE_NO = (SELECT MAX(TSH1.TRADE_NO)    \n";
        //        sSql += " 			                        FROM POSLOG..TR_SALE_HEADER		TSH1    \n";
        //        sSql += " 			      					WHERE      \n";
        //        sSql += " 			      					    TSH1.CMP_CD          = TSH.CMP_CD    \n";
        //        sSql += " 			      					AND TSH1.SALE_DT         = TSH.SALE_DT    \n";
        //        sSql += " 			      					AND TSH1.STOR_CD         = TSH.STOR_CD    \n";
        //        sSql += " 			      					AND TSH1.POS_NO          = TSH.POS_NO    \n";
        //        sSql += " 			      					AND TSH1.TRAIN_MODE_YN   = '0'      \n";
        //        sSql += "                  					AND TSH1.TRADE_KINDPER   IN ('" + ItemConst.TRAN_KIND.STATEMENT.MIDDLE_ADJUSTMENT + "', '" + ItemConst.TRAN_KIND.STATEMENT.ADJUSTMENT + "')) \n";
        //        sSql += "             )  MM \n";
        //        sSql += "         GROUP BY MM.CMP_CD, MM.STOR_CD,	MM.ADMT_CD, ISNULL(MM.MSG1, '') \n";
        //        sSql += "     ) MM \n";
        //        sSql += "     ON	MBT.CMP_CD	= MM.CMP_CD \n";
        //        sSql += "     AND MBT.STOR_CD	= MM.STOR_CD \n";
        //        sSql += "     AND SUBSTRING(MBT.BILL_TYPE_TAG, 7, 4) = MM.ADMT_CD \n";
        //        sSql += " WHERE  \n";
        //        sSql += "     MBT.CMP_CD    = '" + m_cPosStatus.Base.CmpCd + "' \n";
        //        sSql += " AND MBT.STOR_CD	= '" + m_cPosStatus.Base.StoreNo + "' \n";
        //        sSql += " AND MBT.BILL_TYPE_GRP_CD = '" + CmUtil.GetDataRowStr(PosMstManager.GetMstPos(), PosMst.MST_POS.DATA.BILL_TYPEGRP) + "' \n";
        //        sSql += " AND MBT.BILL_TYPE_DIV		= '" + PosConst.BILL_TYPE_DIV.ADMT_TRAN + "' \n";
        //        sSql += " AND MBT.USE_YN	= '1' \n";
        //        sSql += " ORDER BY 1, 2 \n";

        //        sSql = sSql.Replace("\t", " ");

        //        DataTable dtDataInfo = m_cMstService.Select(new string[] { sSql });

        //        return dtDataInfo;
        //    }
        //    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 null;
        //}
        //#endregion 

        #region 영업공지사항 조회
        /// <summary>
        /// 영업공지사항 조회
        /// </summary>
        /// <param name="aParam"></param>
        /// <returns></returns>
        public DataTable SelectBusiNotice(string[] aParam)
        {
            string sSql = "";
            try
            {
                sSql = "";

                // 영업공지사항 조회
                sSql += "SELECT   \n";
                sSql += "		ISNULL(MEN.MSG_CODE, '')			CODE \n";
                sSql += "	,	ISNULL(MEN.MSG_TITLE, '')		    MSG_TITLE \n";
                sSql += "	,	ISNULL(MEN.MSG_CONTENTS, '')		MSG \n";
                sSql += "	,	ISNULL(MEN.START_DT, '')		    START_DT \n";
                sSql += "	,	ISNULL(MEN.FNSH_HOUR, '')		    END_DT \n";
                sSql += "FROM POSMST..MST_EMG_NOTE		            MEN \n";
                sSql += "WHERE  \n";
                sSql += "	 MEN.CMP_CD		= '" + m_cPosStatus.Base.CmpCd + "' \n";
                sSql += "AND MEN.STOR_CD	= '" + m_cPosStatus.Base.StoreNo + "' \n";
                sSql += "AND MEN.POS_NO		IN ('00', '" + m_cPosStatus.Base.PosNo + "') \n";
                sSql += "AND '" + m_cPosStatus.Base.SaleDate + "'     BETWEEN MEN.START_DT AND MEN.FNSH_HOUR  \n";
                sSql += "AND MEN.MSG_DIV	= '" + ItemConst.NOTE_MSG_DIV.BIZ + "' \n";
                sSql += "AND MEN.MSG_TYPE	= '" + aParam[0] + "' \n";
                sSql += "ORDER BY MEN.MSG_CODE DESC \n";
                
                sSql = sSql.Replace("\t", " ");

                DataTable dtDataInfo = m_cMstService.Select(new string[] { sSql });

                return dtDataInfo;
            }
            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 null;
        }
        #endregion   
    }
}
