using System; using System.Text; using System.Drawing; using System.Windows.Forms; using System.Collections; using System.Data; using Cosmos.Win; using Cosmos.BaseFrame; using Cosmos.UserFrame; using Cosmos.ServiceProvider; using Cosmos.Common; using Cosmos.CommonManager; /*-----------------------------------------------------------------------------------------------*/ // 설 명 : 제품 교육 시험 // 작 성 자 : // 변경 이력 : /*-----------------------------------------------------------------------------------------------*/ namespace Cosmos.Win { public partial class frmTestEduPlu : 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 IDataProcessUs m_cDataSrv = null; private IDataServiceUs m_cTestMode = null; // 테스트모드 서비스 private bool bNotDoubleClik = false; /// /// 시험항목 데이터 /// private DataTable m_dtTestMode; /// /// 시험항목 데이터 위치 /// private int m_nTestModePos; /// /// 시험 오답횟수 /// private int m_nTestErrCnt = 0; /// /// 시험 정답횟수 /// private int m_nTestSucCnt = 0; /// /// 시험 현재위치 /// private int m_nTestNowRow = 0; /// /// 시험 시험갯수 /// private int m_nTestMaxCnt = 0; /// /// 정답 상품코드 /// private string m_sTestPluCode = ""; /// /// 판매원 코드 /// private string m_sCashierNo = ""; public string CashierNo { set { m_sCashierNo = value; } get { return m_sCashierNo; } } /// /// 판매원 명 /// private string m_sCashierName = ""; public string CashierName { set { m_sCashierName = value; } get { return m_sCashierName; } } /// /// 메뉴키 값 /// private string m_sPosMenuKeyIn; public string PosMenuKeyIn { set { m_sPosMenuKeyIn = value; } get { return m_sPosMenuKeyIn; } } #endregion 변수 선언 #region 생성자 & 소멸자 & 폼초기화 public frmTestEduPlu() { InitializeComponent(); base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw, true); //this.UpdateStyles(); m_cPosStatus = (PosStatus)StateObject.POS; // POS 기본정보 m_cTrnStatus = (TranStatus)StateObject.TRAN; // POS 거래정보 m_cDataSrv = (IDataProcessUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_SERVICE); m_cTestMode = (IDataServiceUs)sManager.InitServiceInstance(ServiceLists.BSV_ADMIN.DLL, ServiceLists.BSV_ADMIN.TEST_MODE); } private void frmTestEduPlu_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(); SearchTestData(); } private void frmTestEduPlu_Activated(object sender, EventArgs e) { } private void frmTestEduPlu_Deactivate(object sender, EventArgs e) { } private void frmTestEduPlu_FormClosing(object sender, FormClosingEventArgs e) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", lblTitle.Text); } /// /// 폼 컨트롤 초기화 /// private void InitControl() { try { this.Size = new Size(800, 600); // 이미지 로딩 처리 picBack.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.POP_SIZE_800X600); FormManager.MovePopUpForm(this, false, m_cPosStatus.Sale.ScreenSizeUser); FormManager.SetFormAllControlFont(this, m_cPosStatus.Base.FONT); FormManager.SetTextBoxGlobalInfo(this, m_cPosStatus.Global.m_stCultureMaster.nGroupingDigits, m_cPosStatus.Global.m_stCultureMaster.strGroupingSymbol , m_cPosStatus.Global.m_stCultureMaster.nDecimalDigits, m_cPosStatus.Global.m_stCultureMaster.strDecimalSymbol); //테마색상 적용! btnNext.BackColor = CmUtil.GetColorToString(m_cPosStatus.ScnMst.ThemeColor); btnExit.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.BTN_CLOSE); if (btnExit.Image != null) btnExit.Text = ""; if (m_sPosMenuKeyIn == PosKey.MENU_KEY.TEST_MODE_PLU_ALL) lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0460); else lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0461); lblPluImg.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0462); lblTestTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0463); lblTestDesc.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0296); lblCashierName.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0150); txtCashierName.Text = m_sCashierName; tmrEduPlu.Tag = ""; picPluImg.Tag = ""; bNotDoubleClik = false; } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } } /// /// 제품 교육 시험 항목 내역 조회 /// private void SearchTestData() { try { m_nTestSucCnt = 0; m_nTestNowRow = 0; m_nTestMaxCnt = 10; m_dtTestMode = (DataTable)m_cTestMode.GetData(new string[] { "TEST_MODE_PLU_ALL" }); //if (m_sPosMenuKeyIn == PosKey.MENU_KEY.TEST_MODE_PLU_ALL) // m_dtTestMode = (DataTable)m_cTestMode.GetData(new string[] { "TEST_MODE_PLU_ALL" }); //else // m_dtTestMode = (DataTable)m_cTestMode.GetData(new string[] { "TEST_MODE_PLU_NEW" }); if (m_dtTestMode == null || m_dtTestMode.Rows.Count == 0) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0294); return; } if (m_nTestMaxCnt > m_dtTestMode.Rows.Count) m_nTestMaxCnt = m_dtTestMode.Rows.Count; NextTestDisplay(); } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } } #endregion #region 버튼 입력 처리 /// /// 버튼 입력 처리 /// /// /// private void btnProc_Click(object sender, EventArgs e) { try { if (bNotDoubleClik) return; bNotDoubleClik = true; if (((Cosmos.UI.CsmButton)sender) == btnNext) // 다음 { if (tmrEduPlu.Tag.ToString() == "SUCCESS") { NextTestDisplay(); } else if (WinManager.QuestionMessage(POS_MESSAGE.ERROR.MSG_0168) == true) // 다음화면 진행시 시험을 통과 할수 없습니다. 그래도 진행 하시겠습니까? { m_nTestNowRow++; NextTestDisplay(); } tmrEduPlu.Tag = ""; } else if ((UI.CsmButton)sender == btnExit) { if (m_nTestNowRow > 0) { if (WinManager.QuestionMessage(POS_MESSAGE.ERROR.MSG_0168) == false) { bNotDoubleClik = false; return; } // 시험결과 저장(TEST_KIND, CASHIER_NO, TEST_ENTRY_ID, PASS_CNT, TEST_CNT, TEST_PASS_YN) if (m_sPosMenuKeyIn == PosKey.MENU_KEY.TEST_MODE_PLU_ALL) m_cTestMode.Execute(new string[] { "2", m_sCashierNo, "", m_nTestSucCnt.ToString(), m_nTestMaxCnt.ToString(), "0" }); else m_cTestMode.Execute(new string[] { "3", m_sCashierNo, "", m_nTestSucCnt.ToString(), m_nTestMaxCnt.ToString(), "0" }); } bNotDoubleClik = false; 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); bNotDoubleClik = false; } bNotDoubleClik = false; } #endregion #region 다음 항목 시험 화면 표시 /// /// 다음 항목 시험 화면 표시 /// /// private bool NextTestDisplay() { string sTestPluName = ""; string sTestPluPrice =""; try { if (m_dtTestMode == null || m_dtTestMode.Rows.Count == 0) return false; m_nTestErrCnt = 0; lblTestResult.Text = ""; if (m_nTestNowRow >= m_nTestMaxCnt) // 시험완료 { bool bRet = WinManager.QuestionMessage(POS_MESSAGE.ERROR.MSG_0299); if (m_sPosMenuKeyIn == PosKey.MENU_KEY.TEST_MODE_PLU_ALL) m_cTestMode.Execute(new string[] { "2", m_sCashierNo, "", m_nTestSucCnt.ToString(), m_nTestMaxCnt.ToString(), (m_nTestSucCnt == m_nTestMaxCnt) ? "1" : "0" }); else m_cTestMode.Execute(new string[] { "3", m_sCashierNo, "", m_nTestSucCnt.ToString(), m_nTestMaxCnt.ToString(), (m_nTestSucCnt == m_nTestMaxCnt) ? "1" : "0" }); if (bRet == false) { this.DialogResult = DialogResult.OK; this.Close(); return true; } else { m_nTestSucCnt = 0; m_nTestNowRow = 0; } } lblStep.Text = "▶ STEP : " + string.Format("{0:D2} / {1:D2}", m_nTestNowRow + 1, m_nTestMaxCnt); lblError.Text = "▶ " + MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0727) + " : " + string.Format("{0:D2} / {1:D2}", m_nTestSucCnt, m_nTestNowRow - m_nTestSucCnt); // 시험 문항 랜덤 출제 Random rndPos = new Random(int.Parse(DateTime.Now.ToString("HHmmss"))); if (m_nTestNowRow % 3 == 0) m_nTestModePos = rndPos.Next(m_dtTestMode.Rows.Count); m_sTestPluCode = ""; for (int i = 0; i < m_dtTestMode.Rows.Count; i++) { DataRow drTest = m_dtTestMode.Rows[m_nTestModePos]; if (m_sPosMenuKeyIn == PosKey.MENU_KEY.TEST_MODE_PLU_NEW) { string sStartDT = CmUtil.GetDataRowStr(drTest, PosMst.MST_ITEM.DATA.NEW_ITEM_START_DT); string sFinishDT = CmUtil.GetDataRowStr(drTest, PosMst.MST_ITEM.DATA.NEW_ITEM_FNSH_DT); if (sStartDT == "" || CmUtil.LongParse(m_cPosStatus.Base.SaleDate) < CmUtil.LongParse(sStartDT) || CmUtil.LongParse(m_cPosStatus.Base.SaleDate) > CmUtil.LongParse(sFinishDT)) { m_nTestModePos++; if (m_nTestModePos >= m_dtTestMode.Rows.Count) m_nTestModePos = 0; continue; } } //string sFileName = CmUtil.GetDataRowStr(drTest, PosMst.MST_ITEM.DATA.SALE_IMG_FILE_NM).Trim(); //picPluImg.Image = CmUtil.LoadImage(BaseCom.NxCDPPath + PosConst.MST_IMG_PATH.ITEM + sFileName); //if (picPluImg.Image == null) //{ // sFileName = CmUtil.GetDataRowStr(drTest, PosMst.MST_ITEM.DATA.BTN_ITEM_IMG).Trim(); // picPluImg.Image = CmUtil.LoadImage(BaseCom.NxCDPPath + PosConst.MST_IMG_PATH.ITEM + sFileName); //} string sFileName = CmUtil.GetDataRowStr(drTest, PosMst.MST_ITEM.DATA.ITEM_CD).Trim() + "_FULL.PNG"; picPluImg.Image = CmUtil.LoadImage(BaseCom.NxCDPPath + PosConst.MST_IMG_PATH.ITEM + sFileName); if (picPluImg.Image == null) { sFileName = CmUtil.GetDataRowStr(drTest, PosMst.MST_ITEM.DATA.ITEM_CD).Trim() + ".PNG"; picPluImg.Image = CmUtil.LoadImage(BaseCom.NxCDPPath + PosConst.MST_IMG_PATH.ITEM + sFileName); } if (picPluImg.Image == null) { m_nTestModePos++; if (m_nTestModePos >= m_dtTestMode.Rows.Count) m_nTestModePos = 0; continue; } m_sTestPluCode = CmUtil.GetDataRowStr(drTest, PosMst.MST_ITEM.DATA.ITEM_CD); sTestPluName = CmUtil.GetDataRowStr(drTest, PosMst.MST_ITEM.DATA.SHTCUT_ITEMNM); if (PosMstManager.GetPosOption(POS_OPTION.OPT005) == "0") sTestPluPrice = m_cPosStatus.Global.NumericTOCurrency(CmUtil.GetDataRowDouble(drTest, PosMst.MST_ITEM.DATA.TAKE_OUT_SALE_AMT)); else sTestPluPrice = m_cPosStatus.Global.NumericTOCurrency(CmUtil.GetDataRowDouble(drTest, PosMst.MST_ITEM.DATA.TAKE_IN_SALE_AMT)); lblPluInfo.Text = CmUtil.GetDataRowStr(drTest, PosMst.MST_ITEM.DATA.ITEM_INFO).Trim() + "\n" + CmUtil.GetDataRowStr(drTest, PosMst.MST_ITEM.DATA.CALORY_INFO).Trim(); lblPluName.Text = sTestPluName; lblPluName.Visible = false; break; } if (m_sTestPluCode == "") { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0294); btnTestMenu.ClearMenuButtonInfo(); // 설정된 메뉴정보 초기화 tmrEduPlu.Enabled = true; return false; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// btnTestMenu.SetMenuButtonCount(3, 3); // 메뉴버튼갯수 설정 btnTestMenu.BackColor = CmUtil.GetColorToString("223223223"); btnTestMenu.VisibleUpDown = false; btnTestMenu.BackColorUpDown = Color.White; btnTestMenu.ForeColorUpDown = Color.Black; btnTestMenu.ClearMenuButtonInfo(); // 설정된 메뉴정보 초기화 int nStartPos = m_dtTestMode.Rows.Count - 10 > 0 ? rndPos.Next(m_dtTestMode.Rows.Count - 10) : 0; int nTestPluPos = rndPos.Next(m_dtTestMode.Rows.Count > 9 ? 9 : m_dtTestMode.Rows.Count); int nExamMaxRow = 0; bool bExistSuccess = false; for (int j = nStartPos; j < m_dtTestMode.Rows.Count; j++) { DataRow dr = m_dtTestMode.Rows[j]; if (CmUtil.GetDataRowStr(dr, PosMst.MST_ITEM_KEY.DATA.ITEM_CD) == m_sTestPluCode && bExistSuccess == true) continue; nExamMaxRow++; Cosmos.UI.CsmMenu.MenuBtnInfo cMenuInfo = new Cosmos.UI.CsmMenu.MenuBtnInfo(); cMenuInfo.sClassCode = "00"; // 대분류코드 cMenuInfo.sGroupCode = "0000"; // 중분류코드 cMenuInfo.nSeqNo = nExamMaxRow; // 표시순번 if (CmUtil.GetDataRowStr(dr, PosMst.MST_ITEM_KEY.DATA.ITEM_CD) == m_sTestPluCode || nTestPluPos == (nExamMaxRow - 1)) { cMenuInfo.sMenuCode = m_sTestPluCode; // 메뉴 연결코드 cMenuInfo.sMenuName = sTestPluName; // 메뉴 명 cMenuInfo.sMenuPrice = sTestPluPrice; // 메뉴 가격 bExistSuccess = true; } else { cMenuInfo.sMenuCode = CmUtil.GetDataRowStr(dr, PosMst.MST_ITEM_KEY.DATA.ITEM_CD); // 메뉴 연결코드 cMenuInfo.sMenuName = CmUtil.GetDataRowStr(dr, PosMst.MST_ITEM.DATA.SHTCUT_ITEMNM); // 메뉴 명 if (PosMstManager.GetPosOption(POS_OPTION.OPT005) == "0") cMenuInfo.sMenuPrice = m_cPosStatus.Global.NumericTOCurrency(CmUtil.GetDataRowDouble(dr, PosMst.MST_ITEM.DATA.TAKE_OUT_SALE_AMT)); // 메뉴 가격 else cMenuInfo.sMenuPrice = m_cPosStatus.Global.NumericTOCurrency(CmUtil.GetDataRowDouble(dr, PosMst.MST_ITEM.DATA.TAKE_IN_SALE_AMT)); // 메뉴 가격 } cMenuInfo.cBackColor = Color.White; // 버튼 백 컬러 cMenuInfo.cForeColorName = Color.Black; // 메뉴명 컬러 cMenuInfo.cForeColorPrice = Color.Red; // 메뉴가격 컬러 cMenuInfo.fFontSizeName = 10; // 메뉴명 폰트 사이즈 cMenuInfo.fFontSizePrice = 10; // 메뉴 가격 폰트 사이즈 cMenuInfo.nButtonSize = 0; // 메뉴버튼 사이즈(0:일반,1:가로확대,2:세로확대,3:가로세로확대) cMenuInfo.cMenuImage = ""; btnTestMenu.AddMenuButtonInfo(cMenuInfo); if (nExamMaxRow == 9) break; } btnTestMenu.DisplayMenuButton("00", "0000"); m_nTestModePos++; return true; } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } return false; } #endregion private void btnTestMenu_MenuClickHandler(object sender, string sMenuCode) { try { if (tmrEduPlu.Tag != null && tmrEduPlu.Tag.ToString() == "SUCCESS") return; if (sMenuCode == m_sTestPluCode) { // 정답 if (m_nTestErrCnt == 0) m_nTestSucCnt++; lblPluName.Visible = true; lblTestResult.ForeColor = Color.Blue; lblTestResult.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0297); m_nTestNowRow++; tmrEduPlu.Tag = "SUCCESS"; } else { lblTestResult.ForeColor = Color.Red; lblTestResult.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0298); m_nTestErrCnt++; tmrEduPlu.Tag = "FAIL"; } tmrEduPlu.Enabled = true; } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } } private void tmrEduPlu_Tick(object sender, EventArgs e) { try { tmrEduPlu.Enabled = false; if (m_sTestPluCode == "") { // 시험문재가 없거나 출제 오류이면 화면 종료 this.DialogResult = DialogResult.OK; this.Close(); return; } if (tmrEduPlu.Tag.ToString() == "SUCCESS") { //NextTestDisplay(); } else { lblTestResult.ForeColor = Color.White; } //tmrEduPlu.Tag = ""; //lblTestResult.Text = ""; } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } } } }