using System; using System.Drawing; using System.Windows.Forms; using System.Data; using Cosmos.BaseFrame; using Cosmos.UserFrame; using Cosmos.ServiceProvider; using Cosmos.Common; using Cosmos.CommonManager; using Cosmos.UI; /*-----------------------------------------------------------------------------------------------*/ // 설 명 : 현금 결제 처리 // 작 성 자 : // 변경 이력 : /*-----------------------------------------------------------------------------------------------*/ namespace Cosmos.Win { public partial class frmCash : frm_PayMainBack { #region Variable 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 IPaymentUs m_cPaymentUs = null; // 현금 결제 클레스 private IDataProcessUs m_cDataService = null; // 거래데이터 합계금액 계산 및 관리 private IDataCommonUs m_cDataCommon = null; // POS 공통함수 인터페이스 private string m_sPayAmtIn; public string SetPayAmt { set { m_sPayAmtIn = value; } } // 판매등록시 사용자 입력 금액 private string m_sFuncKey = ""; // 결제 수단 기능키 private string m_sPosMenuKey; /// /// POS 기능키 /// public string SetPosMenuKey { set { this.m_sPosMenuKey = value; } } private PosOLEDevice.DelegateOlePos delegatePos; #endregion Variable #region 생성자 & 소멸자 public frmCash() { 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_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_cPaymentUs = (IPaymentUs)sManager.InitServiceInstance(ServiceLists.BSV_PAYMENT.DLL, ServiceLists.BSV_PAYMENT.CASH); // OLE 입력 델리게이트 생성 delegatePos = new PosOLEDevice.DelegateOlePos(OnDeviceEvent); } private void frmCash_Load(object sender, EventArgs e) { UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ""); InitControl(); } private void frmCash_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 frmCash_Activated(object sender, EventArgs e) { PosOLEDevice.SetEventHandle(delegatePos); } private void frmCash_Deactivate(object sender, EventArgs e) { PosOLEDevice.SetEventHandle(null); } private void btnExit_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; this.Close(); } #endregion 생성자 & 소멸자 #region 폼 컨트롤 초기화 /// /// 폼 컨트롤 초기화 /// private void InitControl() { try { // 이미지 로딩 처리 //picBack.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.POP_SIZE_S); //this.Size = new Size(788, 402); //this.Location = new Point(216, 173); this.Location = new Point(0, 50); this.Size = new Size(1024, 525); //this.BackColor = Color.FromArgb(114, 114, 114); 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); btnExit.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.BTN_CLOSE); if (btnExit.Image != null) btnExit.Text = ""; if (m_sPosMenuKey == PosKey.MENU_KEY.CHECK_CASH) //수표 일때! { btnPay1.Visible = false; btnPay2.Visible = false; btnPay3.Visible = false; btnPay4.Visible = false; btnPay5.Visible = false; btnPay6.Visible = false; // Add, 2017.08.29, 받은돈 권종 입력 편의를 위해 기존 버튼에 +1000원 / +500원 / +100원 추가 진행 btnPay7.Visible = false; btnPay8.Visible = false; btnPay9.Visible = false; //#17156 현금 받은돈 버튼 추가요청 start btnPay10.Visible = false; btnPay11.Visible = false; //#17156 현금 받은돈 버튼 추가요청 end lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0060); lblCashAmt.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0061); } else if (m_sPosMenuKey == PosKey.MENU_KEY.MEAL_TICKET) //식권 { btnPay1.Visible = false; btnPay2.Visible = false; btnPay3.Visible = false; btnPay4.Visible = false; btnPay5.Visible = false; btnPay6.Visible = false; // Add, 2017.08.29, 받은돈 권종 입력 편의를 위해 기존 버튼에 +1000원 / +500원 / +100원 추가 진행 btnPay7.Visible = false; btnPay8.Visible = false; btnPay9.Visible = false; //#17156 현금 받은돈 버튼 추가요청 start btnPay10.Visible = false; btnPay11.Visible = false; //#17156 현금 받은돈 버튼 추가요청 end lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0258); lblCashAmt.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0261); } else if (m_sPosMenuKey == PosKey.MENU_KEY.BALANCE_VOUCHER) //잔액교환권 { btnPay1.Visible = false; btnPay2.Visible = false; btnPay3.Visible = false; btnPay4.Visible = false; btnPay5.Visible = false; btnPay6.Visible = false; // Add, 2017.08.29, 받은돈 권종 입력 편의를 위해 기존 버튼에 +1000원 / +500원 / +100원 추가 진행 btnPay7.Visible = false; btnPay8.Visible = false; btnPay9.Visible = false; //#17156 현금 받은돈 버튼 추가요청 start btnPay10.Visible = false; btnPay11.Visible = false; //#17156 현금 받은돈 버튼 추가요청 end lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0265); lblCashAmt.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0792); } else { btnPay1.Visible = true; btnPay2.Visible = true; btnPay3.Visible = true; btnPay4.Visible = true; btnPay5.Visible = true; btnPay6.Visible = true; // Add, 2017.08.29, 받은돈 권종 입력 편의를 위해 기존 버튼에 +1000원 / +500원 / +100원 추가 진행 btnPay7.Visible = true; btnPay8.Visible = true; btnPay9.Visible = true; //#17156 현금 받은돈 버튼 추가요청 start btnPay10.Visible = true; btnPay11.Visible = true; //#17156 현금 받은돈 버튼 추가요청 end lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0042); lblCashAmt.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0043); SetCashPay(); // 현금 결제 대상 금액 세팅 } if (string.IsNullOrEmpty(m_sPayAmtIn) == false) { txtCashAmt.Value = m_cPosStatus.Global.NumericTOCurrency(m_cDataService.DoubleParse(m_sPayAmtIn)); } else { txtCashAmt.Value = m_cPosStatus.Global.NumericTOCurrency(m_cTrnStatus.Sale.RemainPayAmt); } if (string.IsNullOrEmpty(m_cPosStatus.Sale.SaleMainPayStep)) m_cPosStatus.Sale.SaleMainPayStep = "3"; m_sPayAmtIn = ""; InitPayMainBack(m_cPosStatus, m_cDataCommon, m_sPosMenuKey, PosConst.MOT_MSG_TYPE.PAY_STEP_3, ""); // 기능 버튼 설정 체크 FormManager.SetbtnMenu(null, m_cDevStatus.ICReader.UseYn, btnMenu1, btnMenu2, btnMenu3, btnMenu4); txtCashAmt.Select(); txtCashAmt.SelectText(); } 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 SetCashPay() { int nRow = 0; try { string sPayamt = m_cPosStatus.Global.NumericTOCurrency(m_cTrnStatus.Sale.RemainPayAmt); txtCashAmt.Text = m_cPosStatus.Global.NumericTOCurrency(0); // sPayamt; // 결제 대상 금액 btnPay1.Text = sPayamt; // 결제 대상 금액 btnPay1.Tag = "0" + m_cTrnStatus.Sale.RemainPayAmt.ToString(); btnPay2.Visible = false; btnPay3.Visible = false; btnPay4.Visible = false; btnPay5.Visible = false; btnPay6.Visible = false; // Add, 2017.08.29, 받은돈 권종 입력 편의를 위해 기존 버튼에 +1000원 / +500원 / +100원 추가 진행 btnPay7.Visible = false; btnPay8.Visible = false; btnPay9.Visible = false; //#17156 현금 받은돈 버튼 추가요청 start btnPay10.Visible = false; btnPay11.Visible = false; //#17156 현금 받은돈 버튼 추가요청 end // 0:pay, 1:Add DataTable dtData = m_cDataCommon.SeletCommonCode(PosConst.COMMON_CODE_GROUP.Z0001, ""); nRow = 0; if ( dtData != null && dtData.Rows.Count > 0) { foreach (DataRow dr in dtData.Rows) { nRow++; if (nRow == 1) { double nCashCeiling = CmUtil.MathRounds(m_cTrnStatus.Sale.RemainPayAmt, PosConst.MATH_ROUND.CEILING, CmUtil.GetDataRowInt(dr, PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_01)); btnPay2.Text = m_cPosStatus.Global.NumericTOCurrency(nCashCeiling); btnPay2.Tag = "0" + nCashCeiling.ToString(); btnPay2.Visible = true; } if (nRow == 2) { double nCashCeiling = CmUtil.MathRounds(m_cTrnStatus.Sale.RemainPayAmt, PosConst.MATH_ROUND.CEILING, CmUtil.GetDataRowInt(dr, PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_01)); btnPay3.Text = m_cPosStatus.Global.NumericTOCurrency(nCashCeiling); btnPay3.Tag = "0" + nCashCeiling.ToString(); btnPay3.Visible = true; } } } dtData = m_cDataCommon.SeletCommonCode(PosConst.COMMON_CODE_GROUP.Z0002, ""); nRow = 0; if (dtData != null && dtData.Rows.Count > 0) { foreach (DataRow dr in dtData.Rows) { nRow++; if (nRow == 1) { btnPay4.Text = "+" + CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CD_NM); btnPay4.Tag = "1" + CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_01); btnPay4.Visible = true; } if (nRow == 2) { btnPay5.Text = "+" + CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CD_NM); btnPay5.Tag = "1" + CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_01); btnPay5.Visible = true; } if (nRow == 3) { btnPay6.Text = "+" + CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CD_NM); btnPay6.Tag = "1" + CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_01); btnPay6.Visible = true; } // Add, 2017.08.29, 받은돈 권종 입력 편의를 위해 기존 버튼에 +1000원 / +500원 / +100원 추가 진행 // 공통코드(Z0002) , 정렬순서 중요 // 그룹코드 코드 언어 값 정렬순서 // Z0002 1 ko-KR 5,000 1 // Z0002 2 ko-KR 10,000 2 // Z0002 3 ko-KR 50,000 3 // Z0002 4 ko-KR 100 4 (신규) // Z0002 5 ko-KR 500 5 (신규) // Z0002 6 ko-KR 1,000 6 (신규) if (nRow == 4) { btnPay7.Text = "+" + CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CD_NM); btnPay7.Tag = "1" + CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_01); btnPay7.Visible = true; } if (nRow == 5) { btnPay8.Text = "+" + CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CD_NM); btnPay8.Tag = "1" + CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_01); btnPay8.Visible = true; } if (nRow == 6) { btnPay9.Text = "+" + CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CD_NM); btnPay9.Tag = "1" + CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_01); btnPay9.Visible = true; } //#17156 현금 받은돈 버튼 추가요청 start if (nRow == 7) { btnPay10.Text = "+" + CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CD_NM); btnPay10.Tag = "1" + CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_01); btnPay10.Visible = true; } if (nRow == 8) { btnPay11.Text = "+" + CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CD_NM); btnPay11.Tag = "1" + CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_01); btnPay11.Visible = true; } //#17156 현금 받은돈 버튼 추가요청 end } } } 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 btnProc_Click(object sender, EventArgs e) { try { if (((UI.CsmButton)sender).Tag.ToString().StartsWith("0") == true) // 금액 설정 { txtCashAmt.Value = ((UI.CsmButton)sender).Tag.ToString().Substring(1); txtEditBox_EditBoxKeyDownEvent(txtCashAmt, PosKey.MENU_KEY.ENTER); } else { // txtCashAmt 금액에서 시작하는 것이 아니라 0에서 시작하도록 변경(가맹점 요청 - 2017.07.07) //txtCashAmt.Value = m_cPosStatus.Global.NumericTOCurrency(CmUtil.DoubleAdd(m_cDataService.DoubleParse(txtCashAmt.Value), m_cDataService.DoubleParse(((UI.CsmButton)sender).Tag.ToString().Substring(1)))); string sFirstValue = string.Empty; if (string.IsNullOrEmpty(m_sPayAmtIn) == false) { sFirstValue = m_cPosStatus.Global.NumericTOCurrency(m_cDataService.DoubleParse(m_sPayAmtIn)); } else { sFirstValue = m_cPosStatus.Global.NumericTOCurrency(m_cTrnStatus.Sale.RemainPayAmt); } txtCashAmt.Value = m_cPosStatus.Global.NumericTOCurrency(CmUtil.DoubleAdd( (sFirstValue.Equals(txtCashAmt.Text) ? m_cDataService.DoubleParse(m_cPosStatus.Global.NumericTOCurrency(m_cDataService.DoubleParse("0"))) : m_cDataService.DoubleParse(txtCashAmt.Value)) , m_cDataService.DoubleParse(((UI.CsmButton)sender).Tag.ToString().Substring(1)))); } } 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 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 txtEditBox_EditBoxKeyDownEvent(object sender, string sFuncValue) { try { if (sFuncValue == PosKey.MENU_KEY.ENTER) { if (CheckTxtInPut(sender) == false) return; if (CompleteTxtInPut() == false) return; this.DialogResult = DialogResult.OK; this.Close(); } else if (sFuncValue == PosKey.MENU_KEY.CLEAR) { if (((CsmPosEditBox)sender).ReadOnly == false) ((CsmPosEditBox)sender).Text = ""; } else if (sFuncValue == PosKey.MENU_KEY.ESC_PREVIOUS) { 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); } } #endregion Control Event #region User Method /// /// 텍스트박스 입력 유효성 체크 /// /// /// private bool CheckTxtInPut(object sender) { try { if (sender == null || ((CsmPosEditBox)sender) == txtCashAmt) { if ((txtCashAmt.Value.Length == 0) || (txtCashAmt.Value.Length > 9)) { //입력 금액 을 확인 하세요. //WinManager.CosmosMessageBox(PosConst.MSG_BOX_TYPE.ERROR, POS_MESSAGE.ERROR.MSG_2048); //#Rhee, 20171222 결제금액이 0원이고 미국 예약등록이면 0원으로도 결제가능하게 추가 start if (m_cPosStatus.Base.CmpCd.Equals("PCUS") && m_cTrnStatus.Head.TradeKind == ItemConst.TRAN_KIND.UNDECIDED.RESERVATION_REG) { return true; } //#Rhee, 20171222 결제금액이 0원이고 미국 예약등록이면 0원으로도 결제가능하게 추가 end return false; } //#20171123 결제금액이 1억 이상이면 원 결제금액으로 변경 start //결제금액에 카드리딩하는 경우 있어서 금액 제한 //기존 /* if (m_cDataService.DoubleParse(txtCashAmt.Value) > 10000000) { txtCashAmt.Value = m_cPosStatus.Global.NumericTOCurrency(m_cTrnStatus.Sale.RemainPayAmt); return false; } */ //변경 if (m_cDataService.DoubleParse(txtCashAmt.Value) >= 100000000) { txtCashAmt.Value = m_cPosStatus.Global.NumericTOCurrency(m_cTrnStatus.Sale.RemainPayAmt); return false; } //#20171123 결제금액이 1억 이상이면 원 결제금액으로 변경 end } } 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 true; } /// /// 텍스트박스 입력 완료 처리 /// /// private bool CompleteTxtInPut() { try { string sRet = UserCom.RST_ERR; //if (m_sPosMenuKey == PosKey.MENU_KEY.CHECK_CASH) //수표 일때! - 외국! // sRet = m_cPaymentUs.SetPayment(new string[] { txtCashAmt.Value, "1", "", "", "", "", "", "" }); //else // sRet = m_cPaymentUs.SetPayment(new string[] { txtCashAmt.Value, "0" }); sRet = m_cPaymentUs.SetPayment(new string[] { m_cDataService.DoubleParse(txtCashAmt.Value).ToString(), m_sPosMenuKey, "", "", "", "", "", "" }); if (sRet != UserCom.RST_OK) return false; 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 User Method #region DeviceEvent 관련 /// /// DeviceEvent 관련 /// /// /// /// /// public void OnDeviceEvent(string sDevice, string sData1, string sData2, string sData3) { switch (sDevice) { case PosConst.OPOS_DEVICE.SCANNER: this.Invoke(new EventHandler(OnScannerEvent)); break; } } /// /// Scanner Event /// /// /// private void OnScannerEvent(object source, EventArgs e) { string sScanCode = m_cDevStatus.Scanner.DataLabel; ScannerEvent(sScanCode); // 스캐너 } /// /// 스캐너 입력 처리 /// /// 스캔데이터 private void ScannerEvent(string sScanCode) { try { //이벤트 처리 부분 } 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 DeviceEvent 관련 } }