using System; using System.Text; 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; /*-----------------------------------------------------------------------------------------------*/ // 설 명 : 포인트 사용(해피포인트) // 작 성 자 : // 변경 이력 : /*-----------------------------------------------------------------------------------------------*/ namespace Cosmos.Win { public partial class frmPntHappyPointUse : frm_PayMainBack { #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 PosOLEDevice.DelegateIcReader delegateReader; // IC리더 콜백 //#20170918 IC 콜백 함수 변경 start //포인트창에서 해피제휴 신용카드 리딩시 IC 우선 거래로 인해 '카드를 읽혀 주세요' 팝업 나오는 현상 수정. /* private PosOLEDevice.CallbackIc delegateReaderCardInfo; // IC리더 콜백(CardInfo) private bool m_bCardInPut; //카드 입력 중복 방지 private string m_sIcChip; //IC CHIP DATA(EMV) private string m_InputType = ""; //PosConst.POS_VAN_MASTER.VAN_KEYIN; //입력구분 private string m_sCardNo; //입력 카드 번호 private string m_sFallDiv; //FallBack구분 private string m_sServiceCode; //서비스코드 */ //#20170918 IC 콜백 함수 변경 end private IICReaderUs m_cDeviceICReader = null; private ISignPadUs m_cDeviceSignPad = null; private IDataProcessUs m_cDataService = null; // 거래데이터 합계금액 계산 및 관리 private IDataCommonUs m_cDataCommon = null; // POS 공통함수 인터페이스 private IPaymentUs m_cHappyPointUse = null; private ICampaignUs m_cCampaingMain = null; // 캠페인 관리 private bool bNotDoubleClik = false; // 더블 클릭 방지용 private string m_sPosMenuKey; /// /// 포인트 사용(해피포인트) /// public string SetPosMenuKey { set { this.m_sPosMenuKey = value; } } /// /// 입력구분 /// private string m_sInPutType = ""; /// /// 입력데이터 /// private string m_sInPutData = ""; /// /// 마스킹데이터 /// private string m_sInMaskData = ""; /// /// 카드데이터(암호화) /// private string m_sInEncData = ""; /// /// 승인카드번호 /// private string m_sAppCardNo = ""; /// /// 비밀번호 사용 여부 /// private bool m_bPassWord = false; /// /// 결제포인트 금액 /// private double m_nUsePoint; /// /// 받을금액 /// private double m_nRemainPayAmt; /// /// 조회 성공 여부 /// private bool m_bSearchSuccess = false; #endregion 변수 선언 #region 생성자 & 소멸자 & 폼초기화 public frmPntHappyPointUse() { 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_cDeviceICReader = (IICReaderUs)sManager.InitServiceInstance(ServiceLists.AGENT_OLEDEVICE.DLL, ServiceLists.AGENT_OLEDEVICE.DEVICE_ICREADER); m_cDeviceSignPad = (ISignPadUs)sManager.InitServiceInstance(ServiceLists.AGENT_OLEDEVICE.DLL, ServiceLists.AGENT_OLEDEVICE.DEVICE_SIGNPAD); 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_cHappyPointUse = (IPaymentUs)sManager.InitServiceInstance(ServiceLists.BSV_PAYMENT.DLL, ServiceLists.BSV_PAYMENT.POINTHAPPYPOINTUSE); m_cCampaingMain = (ICampaignUs)sManager.InitServiceInstance(ServiceLists.ASV_CAMPAIGN.DLL, ServiceLists.ASV_CAMPAIGN.CAMPAIGN_MAIN); delegatePos = new PosOLEDevice.DelegateOlePos(OnDeviceEvent); delegateReader = new PosOLEDevice.DelegateIcReader(OnIcReaderCallBack); // IC리더 콜백 //#20170918 IC 콜백 함수 변경 start //포인트창에서 해피제휴 신용카드 리딩시 IC 우선 거래로 인해 '카드를 읽혀 주세요' 팝업 나오는 현상 수정. //delegateReaderCardInfo = new PosOLEDevice.CallbackIc(OnIcReaderCallBackCardInfo); // IC리더 콜백(CardInfo) //#20170918 IC 콜백 함수 변경 end } private void frmPointHappyPointUse_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(); // 고객화면 캠페인 컨텐츠 표시 m_cCampaingMain.CustDisplayCampaign(ItemConst.CPI_CUST_PAY_TYPE.HP_USE); tmrIcCard.Tag = ""; tmrIcCard.Enabled = true; // IC리더 콜백 설정 //******************************************************************************* // (2017.11.01) 선릉진선 해피포인트 사용 창 결제버튼 클릭 시 자동으로 띄우는 기능 //------------------------------------------------------------------------------- // - 만약 선릉진선 해피포인트 사용 창 결제버튼 클릭 시 자동으로 띄우는 기능이 설정되어 있을 경우 // <- if (PosMstManager.GetPosOption(POS_OPTION.OPT511) == "1") // 오버로딩된 해피포인트 사용 함수(SearchTxtInPut)를 호출한다. // - 오버로딩된 해피포인트 사용 함수에서는 해피포인트 카드번호를 표시/조회한다. //----------------------------------------------------------------------------- // - 오버로딩 함수 : SearchTxtInPut(Column.TR_ETC.DATA _cEtcItem, string _strHappyPointCardNoOption, string _strDiv) //***************************************************************************** #region 해피포인트 제휴할인 선리딩 처리 if (PosMstManager.GetPosOption(POS_OPTION.OPT511) == "1") { //============================================================================ // 오버로딩된 해피포인트 사용 함수 호출 //---------------------------------------------------------------------------- // - 파라미터 : Column.TR_ETC.DATA, 해피포인트카드번호, 조회까지 실행할지 여부 //============================================================================ #region 오버로딩된 해피포인트 사용 함수 호출 if (m_cPosStatus.Sale.strHappyPointCardNo != "") { SearchTxtInPut(null, m_cPosStatus.Sale.strHappyPointCardNo, btnSearch); // 조회까지 수행 } else { SearchTxtInPut(null, m_cPosStatus.Sale.strHappyPointCardNo, null); // 카드번호만 표시 } #endregion } #endregion //***************************************************************************** // (2017.11.01) 해피포인트 제휴할인 선리딩 처리 //----------------------------------------------------------------------------- // - 만약 해피포인트 사용 화면이 표시될 경우 // - 전역변수(m_cPosStatus.Sale.strHappyPointCardNo)에 값이 저장되어 있을 경우 // 해피포인트 카드번호를 표시한다. // - 해피포인트 사용 화면에서는 키보드 입력 처리는 안되도록 되어 있어서, // 저장해둔 해피포인트 번호에 '==' 값을 추가하여 이후 처리를 진행한다. //***************************************************************************** #region 해피포인트 제휴할인 선리딩 처리 if (m_cPosStatus.Sale.strHappyPointCardNo != "") { //m_cPosStatus.Sale.strHappyPointCardNo += "=="; SearchTxtInPut(null, m_cPosStatus.Sale.strHappyPointCardNo, btnSearch); // 조회까지 수행 } #endregion //******************************************************************************* // (2017.11.01) 선릉진선 해피포인트 사용 창 결제버튼 클릭 시 자동으로 띄우는 기능 //------------------------------------------------------------------------------- // - 만약 선릉진선 해피포인트 사용 창 결제버튼 클릭 시 자동으로 띄우는 기능이 설정되어 있을 경우 // <- if (PosMstManager.GetPosOption(POS_OPTION.OPT511) == "1") // 오버로딩된 해피포인트 사용 함수(SearchTxtInPut)를 호출한다. // - 오버로딩된 해피포인트 사용 함수에서는 해피포인트 카드번호를 표시/조회한다. //----------------------------------------------------------------------------- // - 오버로딩 함수 : SearchTxtInPut(Column.TR_ETC.DATA _cEtcItem, string _strHappyPointCardNoOption, string _strDiv) //***************************************************************************** #region 해피포인트 제휴할인 선리딩 처리 if (PosMstManager.GetPosOption(POS_OPTION.OPT511) == "1") { //============================================================================ // 오버로딩된 해피포인트 사용 함수 호출 //---------------------------------------------------------------------------- // - 파라미터 : Column.TR_ETC.DATA, 해피포인트카드번호, 조회까지 실행할지 여부 //============================================================================ #region 오버로딩된 해피포인트 사용 함수 호출 if (m_cPosStatus.Sale.strHappyPointCardNo != "") { SearchTxtInPut(null, m_cPosStatus.Sale.strHappyPointCardNo, btnSearch); // 조회까지 수행 } else { SearchTxtInPut(null, m_cPosStatus.Sale.strHappyPointCardNo, null); // 카드번호만 표시 } #endregion } #endregion } private void frmPointHappyPointUse_Activated(object sender, EventArgs e) { PosOLEDevice.SetEventHandle(delegatePos); } private void frmPointHappyPointUse_Deactivate(object sender, EventArgs e) { PosOLEDevice.SetEventHandle(null); } private void frmPointHappyPointUse_FormClosing(object sender, FormClosingEventArgs e) { tmrIcCard.Tag = "CLOSE"; // 마우스(이중클릭방지) Point nPoint = System.Windows.Forms.Cursor.Position; Cursor.Clip = new System.Drawing.Rectangle(1024, 0, 1, 1); this.Update(); UnRegIcCallback(); // IC리더 콜백 해지 InDataToZeroFill(); UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", lblTitle.Text); // 마우스(이중클릭방지) Cursor.Clip = Screen.PrimaryScreen.Bounds; Cursor.Position = nPoint; } /// /// 폼 컨트롤 초기화 /// private void InitControl() { try { this.Location = new Point(0, 50); this.Size = new Size(1024, 525); // 이미지 로딩 처리 //picBack.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.POP_SIZE_S); 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 = ""; btnEnter.BackColor = CmUtil.GetColorToString(m_cPosStatus.ScnMst.ThemeColor); lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0109); //lblRemainAmt.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0037); lblCardNo.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0051); lblPassword.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0013); lblUsablePoint.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0070); lblUsePoint.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0147); lblDisPoint.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0036); lblPayPoint.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0533); btnSearch.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0004); btnEnter.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0057); btnIcCard.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0132); btnRfCard.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0580); btnPinPad.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0097); btnMenual.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0364); btnPopCard.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0878); // 기능 버튼 설정 체크 FormManager.SetbtnMenu(txtCardNo, m_cDevStatus.ICReader.UseYn, btnIcCard, btnRfCard, btnPopCard, btnPinPad); if (PosMstManager.GetPosOption(POS_OPTION.OPT323) != "0") // 임의등록 사용여부 btnMenual.Visible = true; else btnMenual.Visible = false; //Cat단말기 사용 여부 if (m_cDevStatus.CatTerminal.UseYn == false) btnCatApp.Visible = false; else btnCatApp.Visible = true; m_bPassWord = true; if (m_bPassWord == true) { lblPassword.Visible = true; txtPassword.Visible = true; btnPinPad.Visible = true; lblBox2.Visible = true; } else { lblPassword.Visible = false; txtPassword.Visible = false; btnPinPad.Visible = false; lblBox2.Visible = false; } InitPayMainBack(m_cPosStatus, m_cDataCommon, m_sPosMenuKey, PosConst.MOT_MSG_TYPE.PAY_STEP_3, ""); ClearCardInfo(); // 카드 입력 정보 클리어 bNotDoubleClik = false; txtPassword.Text = ""; lblCampaignInfo.Text = ""; // 캠페인 대상금액 표시(2017.06.23) m_nRemainPayAmt = m_cTrnStatus.Sale.RemainPayAmt; txtUsePoint.Text = m_cPosStatus.Global.NumericTOCurrency(m_nRemainPayAmt); // 무결성 실패후 진행시 오류 메시지 표시 if (m_cDevStatus.ICReader.UseYn == true) // 여신전문금융업법 적용여부 체크 { //#20171208, RF버튼 선택 시에만 서명패드 무결성 체크하도록 수정 Start /*if (m_cDevStatus.ICReader.Integrity_IC_Status != true && m_cDevStatus.ICReader.UseYn == true && m_cDevStatus.ICReader.Integrity_SignPad_Status != true && m_cDevStatus.SignPad.UseYn == true) WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0388); else { if (m_cDevStatus.ICReader.Integrity_IC_Status != true && m_cDevStatus.ICReader.UseYn == true) WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0384); if (m_cDevStatus.ICReader.Integrity_SignPad_Status != true && m_cDevStatus.SignPad.UseYn == true) WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0385); }*/ if (m_cDevStatus.ICReader.Integrity_IC_Status != true && m_cDevStatus.ICReader.UseYn == true) WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0384); //#20171208, RF버튼 선택 시에만 서명패드 무결성 체크하도록 수정 End } // 해피포인트 카드 등록 여부 체크 ArrayList alTrEtc = (ArrayList)StateObject.GetItemObject(Column.TR_ETC.ITEM); foreach (Column.TR_ETC.DATA cEtcItem in alTrEtc) { if (cEtcItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL) continue; if (cEtcItem.ETC_WAY_CD == ItemConst.TR_ITEM_ID.ETC_INFO_ITEM && cEtcItem.ETC_DTL_CD_01 == ItemConst.TR_ITEM_ID.ETC_INFO.SAVEPOINT) { if (cEtcItem.OCCUR_ENTRY_05 != PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_KEYIN) // 수입력 해피포인트 사용불가 { m_sInPutType = cEtcItem.OCCUR_ENTRY_05; // 입력구분 m_sInPutData = cEtcItem.OCCUR_ENTRY_01; // 입력데이터 m_sInMaskData = cEtcItem.OCCUR_ENTRY_01; // 마스킹 m_sInEncData = cEtcItem.CanFiller1; // 카드데이터 m_sAppCardNo = cEtcItem.OCCUR_ENTRY_14; // 승인카드번호 } break; } } txtCardNo.Value = m_sInMaskData; txtCardNo.ReadOnly = false; if (m_sInPutData != "") { if (SearchTxtInPut() == true) { if (m_bPassWord == true) { txtPassword.Select(); } else { txtUsePoint.Select(); } } else { txtCardNo.Select(); } } else { txtCardNo.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); } } /// /// 카드 입력 정보 클리어 /// private void ClearCardInfo() { try { m_sInPutType = ""; // 입력구분 m_sInPutData = ""; // 입력데이터 m_sInMaskData = ""; // 마스킹 m_sInEncData = ""; // 카드데이터 m_sAppCardNo = ""; // 승인카드번호 m_nUsePoint = 0; // 결제포인트 m_bSearchSuccess = false; txtUsablePoint.Text = ""; txtUsePoint.Text = ""; txtDisPoint.Text = ""; txtPayPoint.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); } } #endregion #region 버튼 입력 처리 /// /// 버튼 입력 처리 /// /// /// private void btnProc_Click(object sender, EventArgs e) { try { if (bNotDoubleClik) return; bNotDoubleClik = true; if (((Cosmos.UI.CsmButton)sender) == btnIcCard) // 카드입력 { if (GetIcCardData(e != null ? true : false) == true) { bNotDoubleClik = false; txtEditBox_EditBoxKeyDownEvent(txtCardNo, PosKey.MENU_KEY.ENTER); } } else if (((Cosmos.UI.CsmButton)sender) == btnRfCard) // 카드입력 { UnRegIcCallback(); // IC리더 콜백 해지 if (GetRfCardData() == true) { bNotDoubleClik = false; txtEditBox_EditBoxKeyDownEvent(txtCardNo, PosKey.MENU_KEY.ENTER); } if (txtCardNo.Value == "") tmrIcCard.Enabled = true; } else if (((Cosmos.UI.CsmButton)sender) == btnPopCard) // POP카드 { UnRegIcCallback(); // IC리더 콜백 해지 if (GetPopCardData() == true) { bNotDoubleClik = false; txtEditBox_EditBoxKeyDownEvent(txtCardNo, PosKey.MENU_KEY.ENTER); } if (txtCardNo.Value == "") tmrIcCard.Enabled = true; } else if (((Cosmos.UI.CsmButton)sender) == btnPinPad) // 핀패드 { UnRegIcCallback(); // IC리더 콜백 해지 if (GetPinPadData() == true) { txtUsePoint.Focus(); //bNotDoubleClik = false; //txtEditBox_EditBoxKeyDownEvent(txtCardNo, PosKey.MENU_KEY.ENTER); } if (txtCardNo.Value == "") tmrIcCard.Enabled = true; } else if (((Cosmos.UI.CsmButton)sender) == btnSearch) // 조회 { SearchTxtInPut(); } else if (((Cosmos.UI.CsmButton)sender) == btnEnter) // 승인 { CompleteTxtInPut(0); } else if (((Cosmos.UI.CsmButton)sender) == btnCatApp) // CatCAT 단말기 승인 { CompleteTxtInPut(1); } else if (((Cosmos.UI.CsmButton)sender) == btnExit) { // 캠페인 취소 처리 ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM); m_cCampaingMain.CancelCampaignPayment(alPayItem.Count.ToString(), ""); bNotDoubleClik = false; this.DialogResult = DialogResult.Cancel; this.Close(); return; } else if (((Cosmos.UI.CsmButton)sender) == btnMenual) // 수기결제 { MenualTxtInPut(); } //padInPut.SetActiveFocus(); } 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 void txtEditBox_EditBoxKeyDownEvent(object sender, string sFuncValue) { try { if (bNotDoubleClik) return; bNotDoubleClik = true; try { if (sFuncValue == PosKey.MENU_KEY.ENTER) { if (((Cosmos.UI.CsmPosEditBox)sender) == txtCardNo) { if (txtCardNo.Text == "") { if (GetIcCardData(true) == false) return; // 카드정보 읽기 } if (CheckTxtInPut(sender) == false) return; if (SearchTxtInPut() == false) return; // 조회 } if (((Cosmos.UI.CsmPosEditBox)sender) == txtPassword) { if (m_cDataService.DoubleParse(txtUsablePoint.Text) == 0) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0327); txtCardNo.Focus(); return; } if (txtPassword.Text == "") { // 비밀번호 입력 if (GetPinPadData() == false) return; } if (CheckTxtInPut(sender) == false) return; txtUsePoint.Focus(); } if (((Cosmos.UI.CsmPosEditBox)sender) == txtUsePoint) { if (m_cDataService.DoubleParse(txtUsablePoint.Text) == 0) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0327); txtCardNo.Focus(); return; } // 결제포인트 변경시 승인포인트만 표시(2017.06.23) if (txtPayPoint.Text == "" || m_nUsePoint != CmUtil.DoubleParse(txtUsePoint.Value)) { if (CheckTxtInPut(sender) == false) return; } else { if (CheckTxtInPut(txtPayPoint) == false) return; CompleteTxtInPut(0); // 승인 처리 } //txtPayPoint.Focus(); } if (((Cosmos.UI.CsmPosEditBox)sender) == txtPayPoint) { if (CheckTxtInPut(sender) == false) return; CompleteTxtInPut(0); // 승인 처리 } } else if (sFuncValue == PosKey.MENU_KEY.CLEAR) { if (((Cosmos.UI.CsmPosEditBox)sender) == txtCardNo) { ClearCardInfo(); // 카드 입력 정보 클리어 tmrIcCard.Enabled = true; } if (((Cosmos.UI.CsmPosEditBox)sender).ReadOnly == false) ((Cosmos.UI.CsmPosEditBox)sender).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); } finally { 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); } bNotDoubleClik = false; } /// /// 텍스트박스 활성화 처리 /// /// /// 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); } } #endregion #region 텍스트박스 입력 유효성 체크 /// /// 텍스트박스 입력 유효성 체크 /// /// /// private bool CheckTxtInPut(object sender) { return CheckTxtInPut(sender, true); } private bool CheckTxtInPut(object sender, bool bNotManual) { try { // 특정 문자값 제거 try { if (m_cDevStatus.Msr.STX != "" && txtCardNo.Value.StartsWith(m_cDevStatus.Msr.STX)) txtCardNo.Value = txtCardNo.Value.Substring(1); int iLastEtx = txtCardNo.Value.LastIndexOf(m_cDevStatus.Msr.ETX); if (m_cDevStatus.Msr.ETX != "" && iLastEtx > 0) txtCardNo.Value = CmUtil.MidH(txtCardNo.Value, 0, iLastEtx); } catch { } // 카드번호 길이 체크 if (sender == null || ((Cosmos.UI.CsmPosEditBox)sender) == txtCardNo) { if (bNotManual == true) { if (txtCardNo.Value.Length < 14) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0037); txtCardNo.SelectText(); txtCardNo.Focus(); return false; } // 입력된 카드번호 변경 체크 if (txtCardNo.Value != m_sInPutData) { ClearCardInfo(); // 카드 입력 정보 클리어 } if (m_sInEncData == "") { if (m_sInPutData == "") { m_sInPutData = txtCardNo.Value; if (m_sInPutData.Length > 16 && CmUtil.IsNumber(m_sInPutData.Substring(16, 1)) == false) { if (CmUtil.CheckHappyMobileCard(m_sInPutData) == false) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0037); ClearCardInfo(); // 카드 입력 정보 클리어 txtCardNo.Focus(); txtCardNo.SelectText(); return false; } m_sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_MOBILE_SWIP; if (m_sInPutData.Length.Equals(17) && CmUtil.IsNumber(m_sInPutData.Substring(16, 1)) == false) m_sInPutData = m_sInPutData.Substring(0, 16) + "="; txtCardNo.Value = m_sInPutData; // .Substring(0, 16); //Moon SeokWoo 20171023 카드번호 17자리 , 끝자리가 숫자가 아니면 앱카드 체크디지트 = 변경. //#20171027 start //해피앱으로 리딩한 경우 17자리가 강제로 변경되어 ClearCardInfo 동작하여 조회 안된 상태로 변경됨 //if (m_sInPutData.Length.Equals(17) && CmUtil.IsNumber(m_sInPutData.Substring(16, 1)) == false) m_sInPutData = m_sInPutData.Substring(0, 16) + "="; //#20171027 end } else { m_sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_KEYIN; } //2017.10.26 MoonSeokWoo 17자리가 아닐시 입력모드 변경하도록 수정. if (m_sInPutData.Contains("=") == true && !m_sInPutData.Length.Equals(17)) m_sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_SWIP; } m_sInMaskData = m_sInPutData; if (EncryptedCardNo(m_sInPutData, ref m_sInMaskData, ref m_sInEncData) == false) return false; m_sAppCardNo = m_sInPutData; // 승인카드번호 } } //if (m_sInPutType == PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_KEYIN) //{ // WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0037); // txtCardNo.SelectText(); // txtCardNo.Focus(); // return false; //} } if (m_bPassWord == true && bNotManual == true) { // 비밀번호 체크 if (sender == null || ((Cosmos.UI.CsmPosEditBox)sender) == txtPassword) { if (txtPassword.Value.Length == 0) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0074); txtPassword.Focus(); return false; } } } // 결제포인트 체크 if (sender == null || ((Cosmos.UI.CsmPosEditBox)sender) == txtUsePoint || ((Cosmos.UI.CsmPosEditBox)sender) == txtPayPoint) { if (bNotManual == true) { if (m_cDataService.DoubleParse(txtUsablePoint.Text) == 0) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0327); txtCardNo.Focus(); return false; } } if (m_cDataService.DoubleParse(txtUsePoint.Value) == 0) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0071); txtUsePoint.Focus(); return false; } if (CmUtil.AmountCut(m_cDataService.DoubleParse(txtUsePoint.Value), CmUtil.IntParse(m_cPosStatus.Mst.PayRudDwLoc)) != m_cDataService.DoubleParse(txtUsePoint.Value)) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0036); // 입력한 금액은 입력 불가 단위 입니다. txtUsePoint.Focus(); return false; } if (m_nRemainPayAmt < m_cDataService.DoubleParse(txtUsePoint.Value)) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0073); txtUsePoint.Focus(); return false; } double nExtPoint = 0; // 실효포인트 string sCustID = ""; // 고객번호 if (bNotManual == true) { Column.TR_PAYMENT.DATA cPayItem = (Column.TR_PAYMENT.DATA)m_cHappyPointUse.GetPayment(new string[] { }); nExtPoint = cPayItem.HP_EXT_POINT; // BRKR은 가용포인트 1000원 미만 승인 처리(2017.06.23 - 황D요청) if (m_cDataService.DoubleParse(txtUsablePoint.Text) < 1000 && nExtPoint == 0 && m_cPosStatus.Mst.CorpDiv != ItemConst.CORP_DIV.BR) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0549); txtCardNo.Focus(); return false; } sCustID = cPayItem.OCCUR_ENTRY_10; } if (m_cDataService.DoubleParse(txtUsePoint.Value) != m_nUsePoint || ((Cosmos.UI.CsmPosEditBox)sender) == txtUsePoint) { txtDisPoint.Text = ""; txtPayPoint.Text = ""; // 캠페인 처리 ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM); double nDisPoint = m_cCampaingMain.ExecuteCampaignHappyUse(alPayItem.Count.ToString(), txtCardNo.Text, m_cDataService.DoubleParse(txtUsePoint.Value), nExtPoint, sCustID); txtDisPoint.Text = m_cPosStatus.Global.NumericTOCurrency(nDisPoint); txtPayPoint.Text = m_cPosStatus.Global.NumericTOCurrency(CmUtil.DoubleSubtraction(m_cDataService.DoubleParse(txtUsePoint.Value), nDisPoint)); if (CmUtil.DoubleSubtraction(m_cDataService.DoubleParse(txtUsePoint.Value), nDisPoint) <= 0) { WinManager.ErrorMessage(string.Format(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0598), nDisPoint, txtUsePoint.Value)); txtUsePoint.Focus(); return false; } m_nUsePoint = m_cDataService.DoubleParse(txtUsePoint.Value); } } // 승인포인트 체크 if (sender == null || ((Cosmos.UI.CsmPosEditBox)sender) == txtUsePoint || ((Cosmos.UI.CsmPosEditBox)sender) == txtPayPoint) { if (txtPayPoint.Value.Length == 0 || m_cDataService.DoubleParse(txtPayPoint.Value) == 0) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0071); txtUsePoint.Focus(); return false; } if (bNotManual == true) { if (m_cDataService.DoubleParse(txtUsablePoint.Text) < m_cDataService.DoubleParse(txtPayPoint.Value)) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0072); txtUsePoint.Focus(); return 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); return false; } return true; } #endregion #region 입력 완료 처리 /// /// 포인트 조회 처리 /// /// private bool SearchTxtInPut() { string sRet = UserCom.RST_ERR; try { if (CheckTxtInPut(txtCardNo) == false) return false; m_nUsePoint = 0; // 결제포인트 txtUsablePoint.Text = ""; txtUsePoint.Text = ""; txtDisPoint.Text = ""; txtPayPoint.Text = ""; m_bSearchSuccess = false; //m_cTrnStatus.Sale.HappyBuzzMemNo = ""; // 조회 string[] saRecvdData = null; sRet = m_cHappyPointUse.SearchPayment(new string[] { m_sPosMenuKey, m_sInPutType, m_sInMaskData, m_sInEncData, "1", m_sAppCardNo }, ref saRecvdData); if (sRet != UserCom.RST_OK) { InDataToZeroFill(); txtCardNo.Focus(); return false; } Column.TR_PAYMENT.DATA cPayItem = (Column.TR_PAYMENT.DATA)m_cHappyPointUse.GetPayment(new string[] { }); m_bPassWord = true; if (cPayItem.HP_ADD_INFO_SCH.Trim() != "") { int nNowPos = 0; string[] aIrtRsp = new string[Column.POINT_ADD_INFO_SEARCH.LEN.Length]; ItemColumn.ParseMessage(Column.POINT_ADD_INFO_SEARCH.LEN, Column.POINT_ADD_INFO_SEARCH.TYPE, Encoding.Default.GetBytes(cPayItem.HP_ADD_INFO_SCH), ref nNowPos, ref aIrtRsp); if (aIrtRsp[Column.POINT_ADD_INFO_SEARCH.SEQ.pointHPUSEYN] != "Y") { WinManager.ConfirmMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0139)); return false; } m_bPassWord = (aIrtRsp[Column.POINT_ADD_INFO_SEARCH.SEQ.pointHPUSEPWYN] == "Y") ? true : false; if (m_sInPutData.StartsWith(PosConst.HP_CARD_PRIFIX) == false) { // 고객정보 string sMemInfo = aIrtRsp[Column.POINT_ADD_INFO_SEARCH.SEQ.pointMEMINFO].Trim(); if (sMemInfo.Length >= 17 && CmUtil.LongParse(sMemInfo.Substring(0, 1)) > 0) { string sInPutData = sMemInfo.Substring(1, 16).Trim(); // 카드번호 string sInMaskData = ""; if (EncryptedCardNo(sInPutData, ref sInMaskData, ref m_sInEncData) == false) return false; cPayItem.CanFiller1 = m_sInEncData; cPayItem.OCCUR_ENTRY_14 = m_sAppCardNo = sInPutData; // 승인카드번호 } } //#20171017 전자영수증 발행 start, phj cPayItem.OCCUR_ENTRY_23 = CmUtil.MidH(cPayItem.HP_ADD_INFO_SCH, 144, 1).Trim(); //#20171017 전자영수증 발행 end, phj } if (cPayItem.OCCUR_ENTRY_12 == "Y") { m_cTrnStatus.Sale.HappyBuzzMemNo = m_sInPutData; } cPayItem.CanFiller3 = m_sInPutData; // MoonSeokWoo 2017.09.26 마이원 카드 제약조건 제거. //if (cPayItem.HP_RESERVED.StartsWith("M") == true) // 마이원카드 사용 불가 //{ // WinManager.ConfirmMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0139)); // return false; //} if (m_bPassWord == true) { lblPassword.Visible = true; txtPassword.Visible = true; btnPinPad.Visible = true; lblBox2.Visible = true; txtPassword.Text = ""; txtPassword.Focus(); } else { lblPassword.Visible = false; txtPassword.Visible = false; btnPinPad.Visible = false; lblBox2.Visible = false; txtPassword.Text = ""; txtUsePoint.Focus(); } // 가용포인트 txtUsablePoint.Text = m_cPosStatus.Global.NumericTOCurrency(cPayItem.AMT_ENTRY_04); // 결제포인트 및 승인포인트 화면표시 보완(2017.06.23) ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM); double nDisPoint = 0, nOldDisPoint = 0; double nUseablePoint = m_nRemainPayAmt; for (int i = 0; i < 99; i++) { nDisPoint = m_cCampaingMain.ExecuteCampaignHappyUse(alPayItem.Count.ToString(), txtCardNo.Text, nUseablePoint, cPayItem.HP_EXT_POINT, cPayItem.OCCUR_ENTRY_10); nUseablePoint = CmUtil.DoubleAdd(cPayItem.AMT_ENTRY_04, nDisPoint); if (nDisPoint == 0 || nDisPoint == nOldDisPoint) break; nOldDisPoint = nDisPoint; } // 결제포인트 txtUsePoint.Value = (m_nRemainPayAmt > nUseablePoint) ? nUseablePoint.ToString() : m_nRemainPayAmt.ToString(); // 할인금액 txtDisPoint.Text = m_cPosStatus.Global.NumericTOCurrency(nDisPoint); // 승인포인트 txtPayPoint.Text = m_cPosStatus.Global.NumericTOCurrency(CmUtil.DoubleSubtraction(m_cDataService.DoubleParse(txtUsePoint.Value), nDisPoint)); m_nUsePoint = m_cDataService.DoubleParse(txtUsePoint.Value); // 할인 대상상품 합계 double nDestPluAmt = 0; ArrayList alTrPluItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM); foreach (Column.TR_PLU.DATA cPluItem in alTrPluItem) { if (cPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue; // 지정취소 if (cPluItem.alTrSaleCpi == null) continue; foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cPluItem.alTrSaleCpi) { if (cTrSaleCpi.TRGT_CUST_TYPE == ItemConst.CPI_TRGT_CUST_TYPE.HPC_PAY && cTrSaleCpi.DC_SUM_AMT > 0) { nDestPluAmt = CmUtil.DoubleAdd(nDestPluAmt, cPluItem.BILL_AMT); break; } } } // 캠페인 대상상품 정보 표시 if (nDestPluAmt > 0) lblCampaignInfo.Text = "※ " + MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0162) + " : " + m_cPosStatus.Global.NumericTOCurrency(nDestPluAmt) + " " + MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0036) + " : " + m_cPosStatus.Global.NumericTOCurrency(nDisPoint); else lblCampaignInfo.Text = ""; //// 결제포인트 //txtUsePoint.Value = (m_nRemainPayAmt > cPayItem.AMT_ENTRY_04) ? cPayItem.AMT_ENTRY_04.ToString() : m_nRemainPayAmt.ToString(); //#20180821 해피포인트 고객이름 마스킹 start if (cPayItem.HP_CUST_NAME != "") { cPayItem.HP_CUST_NAME = m_cDataCommon.NameMasking(cPayItem.HP_CUST_NAME); } //#20180821 해피포인트 고객이름 마스킹 end lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0109) + " [ " + cPayItem.HP_CUST_NAME + " ]"; m_bSearchSuccess = true; 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; } #region public bool SearchTxtInPut(Column.TR_ETC.DATA _cEtcItem, string _strHappyPointCardNoOption, string _strDiv) public bool SearchTxtInPut(Column.TR_ETC.DATA _cEtcItem, string _strHappyPointCardNo, object _strDiv) { // 리턴 변수 선언 ----- bool _blnResult = false; //================================================================== // (2017.11.01) 해피포인트 제휴할인 선리딩 처리를 위한 함수 오버로딩 //================================================================== #region 해피포인트 제휴할인 선리딩 처리를 위한 함수 오버로딩 #region 만약 구분(_strDiv) 값이 ''(공백)일 경우 해피 포인트만 표시한다. if (_strDiv == null) { // 해피포인트 카드 번호 표시 ----- txtCardNo.Text = _strHappyPointCardNo; } #endregion #region 만약 구분(_strDiv) 값이 '조회'일 경우 해피 포인트 번호 표시후 조회까지 처리한다. else if (((Cosmos.UI.CsmButton)_strDiv) == btnSearch) { // 해피포인트 카드 번호 설정 ----- txtCardNo.Value = _strHappyPointCardNo; // 해피포인트 조회 함수 호출 ----- _blnResult = SearchTxtInPut(); } #endregion #endregion // 리턴값 설정 ----- return _blnResult; } #endregion /// /// 포인트 사용 승인 처리 /// /// /// private bool CompleteTxtInPut(int nFlowMode) { string sRet = UserCom.RST_ERR; try { // Cat단말기 포인트 사용 승인 처리 if (nFlowMode == 1) { // 승인금액 또는 결제 금액을 확인 하세요. if (m_cDataService.DoubleParse(txtUsePoint.Value) <= 0) { MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0597); return false; } //InParam // 0.전문구분,1.거래유형, 2.할부개월, 3.승인금액 , 4.봉사료, 5.세금, 6.원승인번호, 7.원거래일자, 8.포인트거래구분, 9.상품코드, //10.전표인쇄여부, 11.추가항목, 12.제휴할인코드, 13.제휴할인금액, 14.예비1, 15.예비2 string sAppType = ""; sAppType = PosConst.POS_CAT_MASTER.TRADE_ID.CAT_HAPPY_USE; //#20171204 해피포인트 사용시 원단위 절삭 start txtUsePoint.Value = CmUtil.MathRounds(m_cDataService.DoubleParse(txtUsePoint.Value), PosConst.MATH_ROUND.TRANCATE, -1).ToString(); //#20171204 해피포인트 사용시 원단위 절삭 end //승인처리 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 sRet = m_cHappyPointUse.SetPayment(new string[] { PosConst.POS_CAT_MASTER.TRAN_TYPE, sAppType, "00", txtUsePoint.Value, "0", "0", "", "", "", "", "", "", m_sPosMenuKey, "", "", "" }); if (sRet != UserCom.RST_OK) { txtPayPoint.Focus(); return false; } } else { if (CheckTxtInPut(null) == false) return false; if (m_bSearchSuccess == false) { // 조회 if (SearchTxtInPut() == false) return false; } // 승인금액 또는 결제 금액을 확인 하세요. if (m_cDataService.DoubleParse(txtPayPoint.Value) <= 0) { MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0597); return false; } //#20171204 해피포인트 사용시 원단위 절삭 start txtPayPoint.Value = CmUtil.MathRounds(m_cDataService.DoubleParse(txtPayPoint.Value), PosConst.MATH_ROUND.TRANCATE, -1).ToString(); //#20171204 해피포인트 사용시 원단위 절삭 end // 포인트 사용 승인 처리 sRet = m_cHappyPointUse.SetPayment(new string[] { m_sPosMenuKey, m_sInPutType, m_sInMaskData, m_sInEncData, m_cDataService.DoubleParse(txtPayPoint.Value).ToString(), txtPassword.Value, m_sAppCardNo }); if (sRet != UserCom.RST_OK) { txtUsePoint.Focus(); return false; } } // 캠페인 할인결제 확정 처리 => 키값 ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM); m_cCampaingMain.CompleteCampaignPayment((alPayItem.Count - 1).ToString()); this.DialogResult = DialogResult.OK; this.Close(); 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; } /// /// 포인트 사용 수기승인 처리 /// /// private bool MenualTxtInPut() { string sRet = UserCom.RST_ERR; try { if (CheckTxtInPut(null, false) == false) return false; if (WinManager.QuestionMessage(POS_MESSAGE.ERROR.MSG_0368) == false) return false; // 승인번호 입력 처리 string sStat = WinBasic.ShowForm(new string[] { FormManager.FORM_USER_INPUT_DATA, PosConst.FRM_INPUT_DATA.APPRNO }); if (sStat != UserCom.RST_ERR && sStat.Length > 0) { // 포인트 사용 수기승인 처리 sRet = m_cHappyPointUse.SetMenualPayment(new string[] { m_sPosMenuKey, PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_KEYIN, txtCardNo.Text, txtCardNo.Text, m_cDataService.DoubleParse(txtPayPoint.Value).ToString(), txtPassword.Value, sStat, m_sAppCardNo }); if (sRet != UserCom.RST_OK) return false; // 캠페인 할인결제 확정 처리 => 키값 ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM); m_cCampaingMain.CompleteCampaignPayment((alPayItem.Count - 1).ToString()); this.DialogResult = DialogResult.OK; this.Close(); 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 #region DeviceEvent 관련 /// /// DeviceEvent 관련 /// /// /// /// /// public void OnDeviceEvent(string sDevice, string sData1, string sData2, string sData3) { try { if (bNotDoubleClik) return; bNotDoubleClik = true; switch (sDevice) { case PosConst.OPOS_DEVICE.MSR: this.Invoke(new EventHandler(OnMSREvent)); break; case PosConst.OPOS_DEVICE.SCANNER: this.Invoke(new EventHandler(OnScannerEvent)); break; } } 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; } /// /// MSR Event /// /// /// private void OnMSREvent(object source, EventArgs e) { try { string sMsrData = m_cDevStatus.Msr.Track2Data; if (sMsrData.Length > 0) { m_sInEncData = ""; m_sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_SWIP; m_sInPutData = sMsrData; txtCardNo.Value = m_sInPutData.Length > 16 ? m_sInPutData.Substring(0, 16) : m_sInPutData; txtEditBox_EditBoxKeyDownEvent(txtCardNo, PosKey.MENU_KEY.ENTER); } } 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 OnScannerEvent(object source, EventArgs e) { try { string sScanData = m_cDevStatus.Scanner.DataLabel; if (sScanData.Length > 0) { m_sInEncData = ""; m_sInPutData = sScanData; if (m_sInPutData.Length > 16 && CmUtil.IsNumber(m_sInPutData.Substring(16, 1)) == false) { m_sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_MOBILE_SWIP; txtCardNo.Value = m_sInPutData.Substring(0, 16); } else { m_sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_KEYIN; txtCardNo.Value = m_sInPutData; } txtEditBox_EditBoxKeyDownEvent(txtCardNo, PosKey.MENU_KEY.ENTER); } } 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 bool EncryptedCardNo(string sInData, ref string sInMaskData, ref string sInEncData) { string sEncData = sInData; bool bRet = false; try { UnRegIcCallback(); // IC리더 콜백 해지 sEncData = m_cDeviceICReader.GetEncryptedCardNo(sInData).Trim(); if (CmUtil.MidH(sEncData, 0, 2) == "00") { sInEncData = CmUtil.MidH(sEncData, 2, 512).Trim(); // 암호화 데이터 sInMaskData = CmUtil.MidH(sEncData, 514, sEncData.Length - 514).Trim(); // 마스킹 데이터 bRet = true; } else { //암호화 처리 실패! UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Fail =>" + sInData); WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0280); } if (txtCardNo.Value == "") tmrIcCard.Enabled = true; // IC리더 콜백 설정 } 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 bRet; } /// /// IC 카드 정보 입력 처리 /// /// private bool GetIcCardData(bool bCancelCallBack) { string sRsvStr = ""; try { if (bCancelCallBack == true) UnRegIcCallback(); // IC리더 콜백 해지 txtCardNo.Value = ""; ClearCardInfo(); // 카드 입력 정보 클리어 if (m_cDeviceICReader.GetCardInfo_ICReader(PosConst.IC_READER_TRAN_TYPE.POINT, (int)m_cTrnStatus.Head.NetSaleAmt, ref sRsvStr) == true) { if (CmUtil.MidH(sRsvStr, 0, 2) == "00") { m_sInEncData = CmUtil.MidH(sRsvStr, 6, 512).Trim(); m_sInMaskData = CmUtil.MidH(sRsvStr, 1030, 37).Trim(); m_sInPutData = m_sInMaskData; m_sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_SWIP; txtCardNo.Value = m_sInPutData.Length > 16 ? m_sInPutData.Substring(0, 16) : m_sInPutData; //tmrIcCard.Enabled = true; // IC리더 콜백 설정 return true; } } if (txtCardNo.Value == "") tmrIcCard.Enabled = true; // IC리더 콜백 설정 // WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0321); } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } finally { // 여전법 대응//////////////////////////////////////////////////////////////////// CmUtil.ZeroFillClear(ref sRsvStr); ////////////////////////////////////////////////////////////////////////////////// } return false; } /// /// RF 카드 정보 입력 처리 /// /// private bool GetRfCardData() { string sRsvStr = ""; try { txtCardNo.Value = ""; ClearCardInfo(); // 카드 입력 정보 클리어 //카드 정보 입력 if (m_cDeviceICReader.GetRfCreditCardInfo("1", m_cTrnStatus.Head.NetSaleAmt.ToString(), "", "", "", ref sRsvStr) == false) { if (sRsvStr != "") WinManager.ErrorMessage(sRsvStr); return false; } m_sInEncData = CmUtil.MidH(sRsvStr, 2, 512).Trim(); m_sInMaskData = CmUtil.MidH(sRsvStr, 514, 40).Trim(); m_sInPutData = m_sInMaskData; m_sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_RF; txtCardNo.Value = m_sInPutData.Length > 16 ? m_sInPutData.Substring(0, 16) : m_sInPutData; 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); } finally { // 여전법 대응//////////////////////////////////////////////////////////////////// CmUtil.ZeroFillClear(ref sRsvStr); ////////////////////////////////////////////////////////////////////////////////// } return false; } /// /// POP 카드 정보 입력 처리 /// /// private bool GetPopCardData() { string sRsvStr = ""; try { txtCardNo.Value = ""; ClearCardInfo(); // 카드 입력 정보 클리어 if (m_cDeviceICReader.RfPrepaidCardInfo(ref sRsvStr) == false) { if (sRsvStr != "") WinManager.ErrorMessage(sRsvStr); return false; } if (sRsvStr.StartsWith("T") == true) { m_sInPutData = sRsvStr.Substring(7, 16).Trim(); } else if (sRsvStr.StartsWith("E") == true) { m_sInPutData = sRsvStr.Substring(1, 20).Trim(); } else { return false; } bool bRet = EncryptedCardNo(m_sInPutData, ref m_sInMaskData, ref m_sInEncData); if (bRet == true) { m_sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_RF; txtCardNo.Text = m_sInPutData; } return bRet; } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } finally { // 여전법 대응//////////////////////////////////////////////////////////////////// CmUtil.ZeroFillClear(ref sRsvStr); ////////////////////////////////////////////////////////////////////////////////// } return false; } /// /// 비밀번호 입력 처리 /// /// private bool GetPinPadData() { try { if (m_cDataService.DoubleParse(txtUsablePoint.Text) == 0) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0327); txtCardNo.Focus(); return false; } txtPassword.Text = ""; string sPassWord = ""; if (m_cDeviceSignPad.GetMsg_SignPad(false, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0013), ref sPassWord, 4) == true) { txtPassword.Text = sPassWord; 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 lblCardNo_MouseDown(object sender, MouseEventArgs e) { //if (e.Button == System.Windows.Forms.MouseButtons.Right) //{ // m_cDevStatus.Scanner.DataLabel = "8231124183433925%"; // OnScannerEvent(null, null); //} } #region 여전법 대응 /// /// ZeroFill 초기화 /// private void InDataToZeroFill() { try { //여전법 대응! ////////////////////////////////////////////////////////////////////////////////// CmUtil.ZeroFillClear(ref m_sInPutData); CmUtil.ZeroFillClear(ref m_sInEncData); CmUtil.ZeroFillClear(ref m_sInMaskData); ////////////////////////////////////////////////////////////////////////////////// txtCardNo.Value = string.Empty; } catch (Exception) { } } #endregion 여전법 대응 #region IC리더 콜백 관련 /// /// IC리더 콜백 설정 /// /// /// private void tmrIcCard_Tick(object sender, EventArgs e) { try { if (m_cDevStatus.ICReader.UseYn != true) // 여전법 인증여부(0:MSR, 1:IC) { tmrIcCard.Enabled = false; return; } if (tmrIcCard.Tag == null || tmrIcCard.Tag.ToString() == "") { // IC리더 콜백 설정 if (bNotDoubleClik) return; tmrIcCard.Enabled = false; //#20170918 IC 콜백 함수 변경 start //포인트창에서 해피제휴 신용카드 리딩시 IC 우선 거래로 인해 '카드를 읽혀 주세요' 팝업 나오는 현상 수정. //기존 m_cDeviceICReader.RegIcCallback(delegateReader); //변경 //string sApprID = PosMstManager.GetMstVan(ItemConst.TR_ITEM_ID.CREDITCARD_ITEM, ItemConst.TR_ITEM_ID.CREDITCARD.CREDIT_CARD, PosMst.MST_VAN.DATA.APPR_ID); //m_cDeviceICReader.RegIcCallbackCardInfo(sApprID, m_cDataService.IntParse(txtUsePoint.Text), delegateReaderCardInfo); //#20170918 IC 콜백 함수 변경 end } else if (tmrIcCard.Tag.ToString() == "MSR") { // MSR 카드 읽기 tmrIcCard.Enabled = false; tmrIcCard.Tag = ""; tmrIcCard.Interval = 500; bNotDoubleClik = false; txtEditBox_EditBoxKeyDownEvent(txtCardNo, PosKey.MENU_KEY.ENTER); tmrIcCard.Enabled = true; } else if (tmrIcCard.Tag.ToString() == "IC") { // IC리더 카드 읽기 tmrIcCard.Enabled = false; tmrIcCard.Tag = ""; tmrIcCard.Interval = 500; bNotDoubleClik = false; btnProc_Click(btnIcCard, null); } else tmrIcCard.Enabled = 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); } } delegate void DelegateIcReaderCallBack(int rc, StringBuilder str); /// /// IC리더 콜백 함수 /// /// /// public void OnIcReaderCallBack(int num, StringBuilder str) { try { if (txtCardNo.InvokeRequired) { DelegateIcReaderCallBack d = new DelegateIcReaderCallBack(OnIcReaderCallBack); this.Invoke(d, new object[] { num, str }); } else { if (bNotDoubleClik) return; bNotDoubleClik = true; if (num == 1) { // IC 카드 tmrIcCard.Tag = "IC"; tmrIcCard.Interval = 100; } else { // MSR 카드 if (str.ToString().StartsWith("EN") == true) { ClearCardInfo(); // 카드 입력 정보 클리어 m_sInEncData = CmUtil.MidH(str.ToString(), 0, 512).Trim(); m_sInMaskData = CmUtil.MidH(str.ToString(), 512, 40).Trim(); m_sInPutData = m_sInMaskData; m_sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_SWIP; txtCardNo.Value = m_sInPutData; tmrIcCard.Tag = "MSR"; tmrIcCard.Interval = 100; } else { tmrIcCard.Interval = 500; } } tmrIcCard.Enabled = true; 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); bNotDoubleClik = false; } } /// /// IC리더 콜백 해지 /// private void UnRegIcCallback() { try { if (m_cDevStatus.ICReader.UseYn == true) // 여신전문금융업법 적용여부 체크 { tmrIcCard.Enabled = false; //#20170918 IC 콜백 함수 변경 start //포인트창에서 해피제휴 신용카드 리딩시 IC 우선 거래로 인해 '카드를 읽혀 주세요' 팝업 나오는 현상 수정. //기존 m_cDeviceICReader.UnRegIcCallback(); //변경 //m_cDeviceICReader.UnRegIcCallbackCardInfo(); //#20170918 IC 콜백 함수 변경 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); } } //#20170918 IC 콜백 함수 변경 start //포인트창에서 해피제휴 신용카드 리딩시 IC 우선 거래로 인해 '카드를 읽혀 주세요' 팝업 나오는 현상 수정. /* delegate void DelegateWriteLog(int returnValue, StringBuilder returnData); /// /// IC리더 콜백 함수(CardInfo) /// /// /// public void OnIcReaderCallBackCardInfo(int returnValue, StringBuilder returnData) { if (txtCardNo.InvokeRequired) { DelegateWriteLog d = new DelegateWriteLog(OnIcReaderCallBackCardInfo); this.Invoke(d, new object[] { returnValue, returnData }); } else { if (m_bCardInPut) return; m_bCardInPut = true; if (returnValue > 0) { string sRsvStr = returnData.ToString(); if (CmUtil.MidH(sRsvStr, 0, 2) == "00") { m_sCardNo = CmUtil.MidH(sRsvStr, 6, 512).Trim(); txtCardNo.Value = CmUtil.MidH(sRsvStr, 1030, 37).Trim(); m_sIcChip = CmUtil.MidH(sRsvStr, 518, 512).Trim(); if (CmUtil.MidH(sRsvStr, 4, 2).Trim() == "02") { m_InputType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_SWIP; } else { m_InputType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_IC; } m_sServiceCode = CmUtil.MidH(sRsvStr, 1067, 5).Trim(); m_sFallDiv = CmUtil.MidH(sRsvStr, 3, 1); // == "3" ? "0" : "1"; // IC 카드(CardInfo) tmrIcCard.Tag = "ICREADER"; tmrIcCard.Interval = 100; tmrIcCard.Enabled = true; m_bCardInPut = false; } } } } */ //#20170918 IC 콜백 함수 변경 end #endregion } }