using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Globalization; using Cosmos.ServiceProvider; using Cosmos.CommonManager; using Cosmos.Common; using Cosmos.UserFrame; using Cosmos.BaseFrame; namespace Cosmos.Win { public partial class frmSOD : Form { #region 변수 선언 private SManager sManager = new SManager(); // 이 객체를 통해 업무 Service 호출 private PosStatus m_cPosStatus = new PosStatus(); // 기본정보 참조 private StateServer StateObject = (StateServer)StateServer.GetInstance(); // StateObject : StateServer Object (객체) private IDataServiceUs m_cSOD = null; // 테스트모드 서비스 private IStoreCheck m_cStoreCheck = null; // 점포점검 서비스 /// /// 메인포스 오픈일자 /// /// /// 후불주문포스 인경우 참조 /// private string MainPosOpenDate { get; set; } #endregion 변수 선언 #region 생성자 & 소멸자 public frmSOD() { InitializeComponent(); base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw, true); //this.UpdateStyles(); m_cPosStatus = (PosStatus)StateObject.POS; // POS 기본정보 m_cSOD = (IDataServiceUs)sManager.InitServiceInstance(ServiceLists.BSV_OPEN_CLOSE.DLL, ServiceLists.BSV_OPEN_CLOSE.SALE_OPEN); m_cStoreCheck = (IStoreCheck)sManager.InitServiceInstance(ServiceLists.BSV_OPEN_CLOSE.DLL, ServiceLists.BSV_OPEN_CLOSE.STORE_CHECK); } private void frmSOD_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(); } private void frmSOD_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); } #endregion 생성자 & 소멸자 #region 폼 컨트롤 초기화 /// /// 폼 컨트롤 초기화 /// private void InitControl() { try { picBack.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.POP_SIZE_S); 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); //테마색상 적용! padInPut.ThemeColor = m_cPosStatus.ScnMst.ThemeColor; padInPut.ClearBtnText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0817); padInPut.SearchBtnText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_1018); btnExit.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.BTN_CLOSE); if (btnExit.Image != null) btnExit.Text = ""; btnDate.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.ICON_DATE_BASIC); if (btnDate.Image != null) btnDate.Text = ""; lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0001); lblCashierName.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0191); lblSaleDate.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0242); lblOrgDate.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0517); lblSysDate.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0516); btnOpen.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0001); txtCashierName.Text = m_cPosStatus.Base.CashierName; txtOrgDate.Text = m_cPosStatus.Global.DateToCulture(m_cPosStatus.Base.SaleDate); txtSysDate.Text = m_cPosStatus.Global.DateToCulture(System.DateTime.Now.ToString("yyyyMMdd")); txtSaleDate.InputTypeFormat = m_cPosStatus.Global.m_stCultureMaster.strDatePattern; txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(System.DateTime.Now.ToString("yyyyMMdd")); // 익일개점이 가능할 경우 // 영업일자가 시스템 일자와 같으며 마감이 되어 있다면 다음날로 날짜를 자동 설정한다. if (PosMstManager.GetPosOption(POS_OPTION.OPT302) != "0") { #region Mod, 2017.08.29, 익일개점 판단조건 변경 //if (m_cPosStatus.Base.SaleDate == System.DateTime.Now.ToString("yyyyMMdd") && m_cPosStatus.Base.OpenClose == "0") //{ // txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(System.DateTime.Now.AddDays(1).ToString("yyyyMMdd")); //} //else //{ // txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(System.DateTime.Now.ToString("yyyyMMdd")); //} #endregion if (CmUtil.LongParse(m_cPosStatus.Base.SaleDate) >= CmUtil.LongParse(System.DateTime.Now.ToString("yyyyMMdd")) && m_cPosStatus.Base.OpenClose == "0") { txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(System.DateTime.Now.AddDays(1).ToString("yyyyMMdd")); } else { txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(System.DateTime.Now.ToString("yyyyMMdd")); } } //else //{ // txtSaleDate.Value = System.DateTime.Now.ToString("yyyyMMdd"); //} // Add, 2017.03.14, 후불주문POS는 메인포스 개점 이후 개점 가능 //var mainOpenDate = string.Empty; //if (m_cPosStatus.Base.PosType == PosConst.POS_TYPE.DEFERRED_PAYMENT && m_cPosStatus.Base.PosCommunicationType == PosConst.MAIN_POS_DIV.SUB_POS) //{ // //IDataServiceUs openCheck = (IDataServiceUs)sManager.InitServiceInstance(ServiceLists.BSV_OPEN_CLOSE.DLL, ServiceLists.BSV_OPEN_CLOSE.SALE_OPEN); // //sRet = (string)openCheck.GetData(new string[] { "CHECK_SUBPOS_OPEN" }); // //if (sRet.StartsWith(UserCom.RST_ERR)) // //{ // // WinManager.ErrorMessage(sRet); // // return false; // //} // //if (sRet.StartsWith(UserCom.RST_OK)) // //{ // // var tmp = sRet.Split('|'); // // mainOpenDate = tmp[1].Trim(); // //} //} // Add, 2017.03.16, 후불 주문포스는 메인포스 개점 이후 개점 가능, 영업일은 메인포스 영업일로 고정 MainPosOpenDate = string.Empty; txtSaleDate.ReadOnly = false; btnDate.Enabled = true; if (m_cPosStatus.Base.PosType == PosConst.POS_TYPE.DEFERRED_PAYMENT && m_cPosStatus.Base.PosCommunicationType == PosConst.MAIN_POS_DIV.SUB_POS) { var ret = (string)m_cSOD.GetData(new string[] { "CHECK_SUBPOS_OPEN" }); if (ret.StartsWith(UserCom.RST_ERR)) { WinManager.ErrorMessage(ret); this.DialogResult = System.Windows.Forms.DialogResult.Abort; this.Close(); return; } if (ret.StartsWith(UserCom.RST_OK)) { var tmp = ret.Split('|'); if (tmp.Length > 1) this.MainPosOpenDate = tmp[1].Trim(); } if (MainPosOpenDate.Trim().Length == 8) { txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(MainPosOpenDate); txtSaleDate.ReadOnly = true; btnDate.Enabled = false; } } txtSaleDate.Select(); //dtSaleDate.Value = System.DateTime.Now; //dtSaleDate.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); } } #endregion 폼 컨트롤 초기화 #region Control Event /// /// 텍스트박스 활성화 처리 /// /// /// 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); } } /// /// 종료 버튼 클릭 /// /// /// private void btnExit_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; this.Close(); } /// /// 개점 처리 /// /// /// private void btnOpen_Click(object sender, EventArgs e) { string sRet = UserCom.RST_ERR; try { if (txtSaleDate.Value.Length != 8) { WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0186)); return; } //#13342 개점/마감시간 허용 시간 제한 start, phj IDataCommonUs m_cMstCmm = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON); string sNextOpenTime = string.Empty; sNextOpenTime = m_cMstCmm.MstCmmSearch("T0031", "1"); //POS 익일개점 허용시간 //#13342 개점/마감시간 허용 시간 제한 end, phj // Add, 2017.03.16, 후불 주문포스는 메인포스 개점 이후 개점 가능, 영업일은 메인포스 영업일로 고정 var sSaleDate = string.Empty; if (MainPosOpenDate.Length == 8 && m_cPosStatus.Base.PosType == PosConst.POS_TYPE.DEFERRED_PAYMENT && m_cPosStatus.Base.PosCommunicationType == PosConst.MAIN_POS_DIV.SUB_POS) { txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(MainPosOpenDate); sSaleDate = MainPosOpenDate; } else { // 익일개점이 가능할 경우 // 영업일자가 시스템 일자와 같으며 마감이 되어 있다면 다음날로 날짜를 자동 설정한다. if (PosMstManager.GetPosOption(POS_OPTION.OPT302) != "0") { #region Mod, 2017.08.29, 익일개점 판단조건 변경 //if (m_cPosStatus.Base.SaleDate == System.DateTime.Now.ToString("yyyyMMdd") && m_cPosStatus.Base.OpenClose == "0") //{ // txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(System.DateTime.Now.AddDays(1).ToString("yyyyMMdd")); //} #endregion if (CmUtil.LongParse(m_cPosStatus.Base.SaleDate) >= CmUtil.LongParse(System.DateTime.Now.ToString("yyyyMMdd")) && m_cPosStatus.Base.OpenClose == "0") { txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(System.DateTime.Now.AddDays(1).ToString("yyyyMMdd")); } } sSaleDate = m_cPosStatus.Global.CultureToDate(txtSaleDate.Text); // 영업일자 체크 if (CmUtil.LongParse(sSaleDate) < CmUtil.LongParse(System.DateTime.Now.ToString("yyyyMMdd"))) { WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0186)); return; } if (CmUtil.LongParse(sSaleDate) > CmUtil.LongParse(System.DateTime.Now.ToString("yyyyMMdd"))) { if (PosMstManager.GetPosOption(POS_OPTION.OPT302) == "0") { WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0186)); return; } } // Add, 2017.08.29, 마지막 영업일자 영업일자보다 작거나 같은 경우 오류 if (CmUtil.LongParse(sSaleDate) <= CmUtil.LongParse(m_cPosStatus.Base.SaleDate)) { WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0186)); return; } // Add, 2017.08.29, 내일보다 큰 경우 오류 if (CmUtil.LongParse(sSaleDate) > CmUtil.LongParse(System.DateTime.Now.AddDays(1).ToString("yyyyMMdd"))) { WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0186)); return; } //#13342 개점/마감시간 허용 시간 제한 start, phj //if (m_cPosStatus.Base.CmpCd == "PCKR") //{ // 옵션값있을경우 if (sNextOpenTime != "") { // 기준시간이 지났을 경우, 익일로만 개점 가능하다. // 그 전에는 익일 개점 불가. int iNowTime = CmUtil.IntParse(System.DateTime.Now.ToString("HHmm")); if (CmUtil.LongParse(System.DateTime.Now.ToString("yyyyMMdd")) < CmUtil.LongParse(sSaleDate)) { if (int.Parse(sNextOpenTime, 0) <= iNowTime) { } else { string sMsg = string.Empty; sMsg = sNextOpenTime.Substring(0,2) + ":" + sNextOpenTime.Substring(2,2); WinManager.ConfirmMessage(string.Format(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0767), sMsg)); return; } } } //} //#13342 개점/마감시간 허용 시간 제한 end, phj } //// 영업개시 시작(IRT 전송) //sRet = m_cSOD.Execute(new string[] { sSaleDate, m_cPosStatus.Base.CashierNo, "0" }); //if (sRet != UserCom.RST_OK) //{ // // 영업개시 통신에 실패하였습니다. 수동 개설 하시겠습니까? // if (WinManager.QuestionMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0188)) != true) // { // this.DialogResult = DialogResult.Cancel; // return; // } //} // 영업일자 확인 팝업창 발생 if (WinManager.QuestionMessage(string.Format(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0575), txtSaleDate.Text)) != true) { //WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0574)); return; } // 개점 완료 처리 => 영업일자 변경, 거래번호 설정 sRet = m_cSOD.SetData(sSaleDate); if (sRet != UserCom.RST_OK) { WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0574)); return; } // 개점정보 생성 IAccADMT m_cAccADMT = (IAccADMT)sManager.InitServiceInstance(ServiceLists.BSV_OPEN_CLOSE.DLL, ServiceLists.BSV_OPEN_CLOSE.ACC_ADMT); sRet = m_cAccADMT.SetData(new string[] { ItemConst.TRAN_KIND.LOG.POS_OPEN, ItemConst.TRAN_DIV.NORMAL }, null, "0"); if (sRet != UserCom.RST_OK) { WinManager.ErrorMessage(sRet); } // 준비금 입력 sRet = WinOpenClose.ShowForm(new string[] { FormManager.FORM_ACC_REMONEY, sSaleDate, "AutoClose" }); if (sRet != UserCom.RST_OK) { } // 환율 수기 등록 if (CmUtil.IsNull(PosMstManager.GetPosOption(POS_OPTION.OPT040), "0") == "1") { IDataCommonUs m_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON); DataTable dtMemu = m_cDataCommon.SelectForeign(); // 수신 받은 환율이 없는 경우 수기등록 화면으로 이동 if (dtMemu == null) { sRet = WinBasic.ShowForm(new string[] { FormManager.FORM_ETC_EXCHANGE_REG, "" }); } } WinManager.ConfirmMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0204)); //// 준비점검 공지사항 및 판매준비점검 시작 //sRet = UserCom.RST_ERR; //DataTable dtCheckInfo = new DataTable(); //string sCheckCode = string.Empty; //string sAlarmType = string.Empty; //// 웹 업무 화면 호출(준비점검, 공지사항, 판매준비점검) //// 개점시 준비점검 입력 여부 //dtCheckInfo = new DataTable(); //// 0 : 없음, 1 : 로그인, 2 : 개점, 3 : 마감 //// 공지사항은 POS 옵션에 따라 보여주고 안보여주고를 결정한다. //// 개점 요청 일자로 스케줄을 체크한다. //dtCheckInfo = (DataTable)m_cStoreCheck.StoreCheckSchedule(PosConst.POS_CHECK_ALARM_TYPE.CHECK_TYPE_NONE, PosKey.MENU_KEY.SALE_OPEN); //if (dtCheckInfo.Rows.Count > 0) //{ // // 공지사항 호출 // sRet = WinOpenClose.ShowForm(new string[] { FormManager.FORM_SCH_PREP_STOR_NOTICE, PosKey.MENU_KEY.PREP_STOR_NOTICE, sCheckCode }); // if (sRet != UserCom.RST_OK) // { // } //} // 왕진활현 인터페이스 생성자료 삭제 if (m_cPosStatus.Mst.ETC_IF_DIV == ItemConst.TranInterfaceOutside.IF_CHN_03) { CmUtil.FileDelete(BaseCom.NxDataPath + @"CapitaInterface\possalesdata.txt"); // 디렉토리 생성 CmUtil.CreateDirectory(BaseCom.NxDataPath + @"CapitaInterface\"); } // 준비점검 공지사항 및 판매준비점검 sRet = WinOpenClose.EndStoreCheck(PosConst.POS_CHECK_ALARM_TYPE.CHECK_TYPE_NONE, PosKey.MENU_KEY.SALE_OPEN); sRet = WinOpenClose.EndStoreCheck(PosConst.POS_CHECK_ALARM_TYPE.CHECK_TYPE_SOD, PosKey.MENU_KEY.SALE_OPEN); //// 개점시 준비점검 입력 여부 //// 1 : 로그인, 2 : 개점, 3 : 마감 //// 개점 요청 일자로 스케줄을 체크한다. //dtCheckInfo = (DataTable)m_cStoreCheck.StoreCheckSchedule(PosConst.POS_CHECK_ALARM_TYPE.CHECK_TYPE_SOD, PosKey.MENU_KEY.SALE_OPEN); //if (dtCheckInfo.Rows.Count > 0) //{ // for (int nLoop = 0; nLoop < dtCheckInfo.Rows.Count; nLoop++) // { // sCheckCode = CmUtil.GetDataRowStr(dtCheckInfo.Rows[nLoop], "CHECK_CD"); // if (sCheckCode != "" && sCheckCode != null) // { // sRet = m_cStoreCheck.StoreCheckSaveIrt(sCheckCode, sSaleDate); // if (sRet == UserCom.RST_OK) // { // //continue; // } // else // { // // 이미 등록되어 있다면 해당 체크 코드는 빠져나온다. // continue; // } // } // else // { // continue; // } // if (sCheckCode == "12") // { // // 유통기한 점검 체크리스트 // sRet = WinOpenClose.ShowForm(new string[] { FormManager.FORM_EXPIRATION_DATE_CHECK, PosKey.MENU_KEY.EXPIRATION_DATE_CHECK_LIST, PosConst.STORE_CHECK_FLAG.STORE_OPEN_CHECK, sSaleDate, sCheckCode }); // if (sRet != UserCom.RST_OK) // { // } // } // else if (sCheckCode == "11") // { // // 식품안전의 날 // sRet = WinOpenClose.ShowForm(new string[] { FormManager.FORM_FOOD_SAFETY_DAY_POPUP, PosKey.MENU_KEY.FOOD_SAFETY_DAY_POPUP, PosConst.STORE_CHECK_FLAG.STORE_OPEN_CHECK, sSaleDate, sCheckCode }); // if (sRet != UserCom.RST_OK) // { // } // } // else // { // // 위에 설정된 점검코드 외 점검내용은 기본 점검화면을 사용한다. // sRet = WinOpenClose.ShowForm(new string[] { FormManager.FORM_SOD_CHECK, PosKey.MENU_KEY.STORE_CHECK_LIST, PosConst.STORE_CHECK_FLAG.STORE_OPEN_CHECK, sSaleDate, sCheckCode }); // if (sRet != UserCom.RST_OK) // { // } // } // } //} this.DialogResult = DialogResult.OK; 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); } } #endregion Control Event private void btnDate_Click(object sender, EventArgs e) { try { string sDate = WinBasic.ShowForm(new string[] { FormManager.FORM_CALENDAR }); if (sDate != "") txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(sDate); } 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 txtSaleDate_Enter(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); } } } }