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; using System.Data; /*-----------------------------------------------------------------------------------------------*/ // 설 명 : 모바일쿠폰 // 작 성 자 : // 변경 이력 : /*-----------------------------------------------------------------------------------------------*/ namespace Cosmos.Win { public partial class frmMobileCoupon : 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 IDataProcessUs m_cDataService = null; private IPaymentUs m_cMobileCoupon = null; private IICReaderUs m_cDeviceICReader = null; private ISalePluItemUs m_cPluService = null; // 판매 등록 관리 private bool bNotDoubleClik = false; // 더블 클릭 방지용 private IDataCommonUs m_cDataCommon = null; private string mPay_DC_Type = ""; // 결제 그룹 코드 private string mPay_DC_CD = ""; // 결제 상세 코드 private string m_sPosMenuKey; // 입력값 할인 /// /// 할인 구분 /// public string SetPosMenuKey { set { this.m_sPosMenuKey = value; } } /// /// 입력구분 /// private string m_sInPutType = ""; /// /// 입력데이터 /// private string m_sInPutData = ""; /// /// 카드데이터 /// private string m_sInEncData = ""; /// /// 상품정보 작업용 /// private ArrayList m_aSaleItem = null; private string m_sProductiTem = ""; private struct ITEM_PLU_CHECK { public string sCouponNo; // 쿠폰코드 public string sVCouponNo; // 가상 쿠폰코드 public string sProductID; // 프로덕트 코드 public string iTemCD; // 상품코드 public double T_Qty; // 구매해야될 건수 public double S_Qty; // 구매한 건수 public double SALE_PRC; // 상품단가 public double SaleAmt; // 상품판매금액 public double PayAmt; // 상품결제금액 public double DCAmt; // 할인 } #endregion 변수 선언 #region 생성자 & 소멸자 & 폼초기화 public frmMobileCoupon() { 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_cDeviceICReader = (IICReaderUs)sManager.InitServiceInstance(ServiceLists.AGENT_OLEDEVICE.DLL, ServiceLists.AGENT_OLEDEVICE.DEVICE_ICREADER); m_cPluService = (ISalePluItemUs)sManager.InitServiceInstance(ServiceLists.BSV_SALE.DLL, ServiceLists.BSV_SALE.SALE_PLU_ITEM); m_cMobileCoupon = (IPaymentUs)sManager.InitServiceInstance(ServiceLists.BSV_PAYMENT.DLL, ServiceLists.BSV_PAYMENT.MOBILECOUPON); m_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON); delegatePos = new PosOLEDevice.DelegateOlePos(OnDeviceEvent); } private void frmMobileCoupon_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(); //#15608 모바일쿠폰해피기프트카드 자동인식 기능 도입요청 start #region 모바일쿠폰 선리딩 처리 if (m_cPosStatus.Sale.strMobileCpnNo != "") { //============================================================== // 오버로딩된 모바일쿠폰 이벤트 함수 호출 //-------------------------------------------------------------- // - 파라미터 : sender, 모바일쿠폰 카드번호, 조회까지 실행할지 여부 //============================================================== #region 오버로딩된 제휴할인 조회 함수 호출 txtEditBox_EditBoxKeyDownEvent(null, m_cPosStatus.Sale.strMobileCpnNo, btnSearch); // 조회까지 수행 #endregion } #endregion 모바일쿠폰 선리딩 처리 //#15608 모바일쿠폰해피기프트카드 자동인식 기능 도입요청 end } private void frmMobileCoupon_Activated(object sender, EventArgs e) { PosOLEDevice.SetEventHandle(delegatePos); } private void frmMobileCoupon_Deactivate(object sender, EventArgs e) { PosOLEDevice.SetEventHandle(null); } private void frmMobileCoupon_FormClosing(object sender, FormClosingEventArgs e) { if (m_sPosMenuKey == PosKey.MENU_KEY.MOBILE_COUPON_SCH) FormManager.SetFormAllControlMove(this, 216, 123); 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 { // 이미지 로딩 처리 if (m_sPosMenuKey == PosKey.MENU_KEY.MOBILE_COUPON_SCH) { this.Size = new Size(788, 402); //#20181015 결제창 엑박 관련 이미지 미사용 처리 start //기존 //picBack.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.POP_SIZE_S); //#20181015 결제창 엑박 관련 이미지 미사용 처리 end FormManager.SetFormAllControlMove(this, -216, -123); FormManager.MovePopUpForm(this, false, m_cPosStatus.Sale.ScreenSizeUser); } else { this.Location = new Point(0, 50); this.Size = new Size(1024, 525); picBack.Size = new Size(1024, 525); //#20181015 결제창 엑박 관련 이미지 미사용 처리 start //기존 //picBack.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.PAY_MAIN_BACKGROUND); //#20181015 결제창 엑박 관련 이미지 미사용 처리 end //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 = ""; //테마색상 적용! btnEnter.BackColor = CmUtil.GetColorToString(m_cPosStatus.ScnMst.ThemeColor); // 모바일쿠폰 if (m_sPosMenuKey == PosKey.MENU_KEY.MOBILE_COUPON) lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0199); else if (m_sPosMenuKey == PosKey.MENU_KEY.MOBILE_COUPON_SCH) lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0199); lblCardNo.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0139); lblCardNM.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0168); lblCouponAmt.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0200); lblPayAmt.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0037); lbliTemAmt.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0215); btnSearch.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0004); btnEnter.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0057); btnEnter.Visible = false; if (m_sPosMenuKey == PosKey.MENU_KEY.MOBILE_COUPON) btnEnter.Visible = true; txtCardNo.Text = ""; txtCardNM.Text = ""; txtCouponAmt.Text = "0"; txtPayAmt.Text = m_cPosStatus.Global.NumericTOCurrency(m_cTrnStatus.Sale.RemainPayAmt); // 받을금액 txtiTemAmt.Text = "0"; m_sInPutType = ""; // 입력구분 m_sInPutData = ""; // 입력데이터 m_sInEncData = ""; // 카드데이터 m_sProductiTem = ""; bNotDoubleClik = false; mPay_DC_Type = ""; // 결제 그룹 코드 mPay_DC_CD = ""; // 결제 상세 코드 // 기능 버튼 설정 체크 FormManager.SetbtnMenu(txtCardNo, m_cDevStatus.ICReader.UseYn, btnMenu1, btnMenu2, btnMenu3, btnMenu4); InitPayMainBack(m_cPosStatus, m_cDataCommon, m_sPosMenuKey, PosConst.MOT_MSG_TYPE.PAY_STEP_3, ""); txtCardNo.Select(); // 상품정보 ArrayList aSaleItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM); m_aSaleItem = new ArrayList(); for (int iRow = 0; iRow < aSaleItem.Count; iRow++) { Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)aSaleItem[iRow]; m_aSaleItem.Add(cSaleItem.Clone()); } } 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) == btnSearch) // 조회 { SearchTxtInPut(); } else if (((Cosmos.UI.CsmButton)sender) == btnEnter) // 승인 { CompleteTxtInPut(); } 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; } /// /// 닫기 /// /// /// private void btnExit_Click(object sender, EventArgs e) { try { txtEditBox_EditBoxKeyDownEvent(null, PosKey.MENU_KEY.ESC_PREVIOUS); } 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 txtEditBox_EditBoxKeyDownEvent(object sender, string sFuncValue) { try { if (sFuncValue == PosKey.MENU_KEY.ENTER) { if (((Cosmos.UI.CsmPosEditBox)sender) == txtCardNo) { SearchTxtInPut(); return; } else if (((Cosmos.UI.CsmPosEditBox)sender) == txtCouponAmt) { if (txtCardNo.Text == "") { SearchTxtInPut(); return; } if (txtCardNM.Text == "") { SearchTxtInPut(); return; } if (CheckTxtInPut(sender, false) == false) return; if (m_cTrnStatus.Head.TradeDiv == ItemConst.TRAN_DIV.NORMAL) { CompleteTxtInPut(); // 할인 승인 처리 } } } else if (sFuncValue == PosKey.MENU_KEY.CLEAR) { if (((Cosmos.UI.CsmPosEditBox)sender).ReadOnly == false) ((Cosmos.UI.CsmPosEditBox)sender).Text = ""; if (((Cosmos.UI.CsmPosEditBox)sender) == txtCardNo) { m_sInPutType = ""; m_sInPutData = ""; m_sInEncData = ""; txtCardNo.ReadOnly = false; } } 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); } } /// /// 텍스트박스 활성화 처리 /// /// /// 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 txtCardNo_EditBoxTextChangedEvnet(object sender, EventArgs e) { txtCouponAmt.Value = "0"; txtiTemAmt.Text = "0"; txtCardNM.Text = ""; m_sInPutType = ""; // 입력구분 m_sInPutData = ""; // 입력데이터 m_sInEncData = ""; // 카드데이터 } #endregion #region 텍스트박스 입력 유효성 체크 /// /// 텍스트박스 입력 유효성 체크 /// /// /// private bool CheckTxtInPut(object sender, bool bSearchMode) { try { // 카드번호 길이 체크 if (sender == null || ((Cosmos.UI.CsmPosEditBox)sender) == txtCardNo) { if (txtCardNo.Value.Length < 6) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0080); txtCardNo.Focus(); return false; } } if (bSearchMode == false) { if (txtCardNM.Text.Trim() == "") { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0043); txtCardNo.Focus(); return false; } if (txtCouponAmt.Value.Length > 10 || m_cDataService.LongParse(txtCouponAmt.Value) <= 0) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0036); txtCouponAmt.Focus(); return false; } if (CmUtil.AmountCut(m_cDataService.DoubleParse(txtCouponAmt.Value), CmUtil.IntParse(m_cPosStatus.Mst.PayRudDwLoc)) != m_cDataService.DoubleParse(txtCouponAmt.Value)) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0036); txtCouponAmt.Focus(); return false; } if (m_cDataService.DoubleParse(txtCouponAmt.Value.ToString()) > m_cDataService.DoubleParse(txtPayAmt.Text.ToString())) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0138); txtCouponAmt.Focus(); return false; } if (m_cDataService.DoubleParse(txtCouponAmt.Value.ToString()) > m_cDataService.DoubleParse(txtiTemAmt.Text.ToString())) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0150); txtCouponAmt.Focus(); return false; } } // 승인 요청시 금액 체크 if (bSearchMode == false) { if (mPay_DC_Type == ItemConst.TR_ITEM_ID.MOBILECON_ITEM && mPay_DC_CD == ItemConst.TR_ITEM_ID.MOBILECON.HPCON) { // 해피콘 최소 입력 금액 체크 if (m_cDataService.DoubleParse(txtCouponAmt.Value) < 2500) { string stmp = string.Format(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0243), m_cPosStatus.Global.NumericTOCurrency(2500)); WinManager.ErrorMessage(stmp); txtCouponAmt.Focus(); return false; } } //if (mPay_DC_Type == ItemConst.TR_ITEM_ID.MOBILECON_ITEM && mPay_DC_CD == ItemConst.TR_ITEM_ID.MOBILECON.GIFTCON) //{ // // 기프티콘 최소 입력 금액 체크 // Column.TR_PAYMENT.DATA m_cPayItem = (Column.TR_PAYMENT.DATA)m_cMobileCoupon.GetPayment(new string[] { }); // if (m_cPayItem.OCCUR_ENTRY_10.Trim() == "03" || m_cPayItem.OCCUR_ENTRY_10.Trim() == "04") // { // // 상품종류 (01: 일반상품, 02: 상품권(Gifticon을 종이상품권으로), 03: 정액 할인, 04: 특정 상품 할인, 05: 배송 상품, 06: 금액 차감권, 07: 수량 차감권, 08: 정기권) // if (m_cDataService.DoubleParse(txtCouponAmt.Value) < m_cDataService.DoubleParse(m_cPayItem.AMT_ENTRY_03.ToString())) // { // string stmp = string.Format(MessageManager.GetGuideMessage(POS_MESSAGE.GUIDE.MSG_0014), m_cPosStatus.Global.NumericTOCurrency(m_cDataService.DoubleParse(m_cPayItem.AMT_ENTRY_03.ToString()))); // WinManager.ErrorMessage(stmp); // txtCouponAmt.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 CompleteTxtInPut() { string sRet = UserCom.RST_ERR; try { if (CheckTxtInPut(null, false) == false) return false; string sInPutType = m_sInPutType; string sInPutData = m_sInPutData; string sInEncData = m_sInEncData; if (m_sInEncData == "") { if (m_sInPutData == "") { sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_KEYIN_CP; sInPutData = txtCardNo.Value; } ///EncryptedCardNo(sInPutData, ref sInEncData, ref sInPutData); } Column.TR_PAYMENT.DATA m_cPayItem = (Column.TR_PAYMENT.DATA)m_cMobileCoupon.GetPayment(new string[] { }); // 상품정보 ArrayList aSaleItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM); m_aSaleItem = new ArrayList(); for (int iRow = 0; iRow < aSaleItem.Count; iRow++) { Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)aSaleItem[iRow]; m_aSaleItem.Add(cSaleItem.Clone()); } //string sProductiTem = ""; //double nDCSum = 0; /////sRet = GetDCItemAmount(m_cPayItem.PAY_DTL_CD_04, sInPutData, "", m_cPayItem.PAY_AMT, ref sProductiTem); /////if (m_cPayItem.PAY_DTL_CD_04.Trim() != "" && m_cPayItem.OCCUR_ENTRY_10 == "04") //if (m_cPayItem.PAY_DTL_CD_04.Trim() != "") //{ // // ProductID로 등록된 상품 체크 // sRet = GetDCItemAmount(m_cPayItem.PAY_DTL_CD_04, sInPutData, "", m_cPayItem.PAY_AMT, ref sProductiTem); // if (sRet != UserCom.RST_OK) return false; // txtCouponAmt.Value = m_cPosStatus.Global.NumericTOCurrency(m_cPayItem.PAY_AMT); // txtiTemAmt.Text = m_cPosStatus.Global.NumericTOCurrency(m_cPayItem.PAY_AMT); //} //else if (m_cPayItem.AMT_ENTRY_02 > 0 || nDCSum == 0) //{ // nDCSum = m_cPayItem.AMT_ENTRY_02; // txtCouponAmt.Value = m_cPosStatus.Global.NumericTOCurrency(nDCSum); // txtiTemAmt.Text = m_cPosStatus.Global.NumericTOCurrency(nDCSum); //} // 승인 처리 sRet = m_cMobileCoupon.SetPayment(new string[] { m_sPosMenuKey, sInPutType, sInPutData, sInPutData, m_cDataService.DoubleParse(txtCouponAmt.Value).ToString(), m_cPayItem.OCCUR_ENTRY_02, m_cPayItem.OCCUR_ENTRY_03, m_cPayItem.OCCUR_ENTRY_04, mPay_DC_Type, mPay_DC_CD, "", m_sProductiTem }); if (sRet != UserCom.RST_OK) return false; if (m_sPosMenuKey == PosKey.MENU_KEY.MOBILE_COUPON) { 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 SearchTxtInPut() { string sRet = UserCom.RST_ERR; try { if (CheckTxtInPut(null, true) == false) return false; // Prefix에 의한 사용 Van 정보 조회 if (GetPrefixToPayTypeInfo(txtCardNo.Text) == false) return false; ///if (mPay_DC_Type == ItemConst.TR_ITEM_ID.MOBILECON_ITEM && mPay_DC_CD == ItemConst.TR_ITEM_ID.MOBILECON.HPCON && CmUtil.MidH (txtCardNo.Value, 0, 3) == "920") if (mPay_DC_Type == ItemConst.TR_ITEM_ID.MOBILECON_ITEM && mPay_DC_CD == ItemConst.TR_ITEM_ID.MOBILECON.HPCON ) { // 차세대 해피콘 if (m_sPosMenuKey == PosKey.MENU_KEY.MOBILE_COUPON) { sRet = WinPay.ShowForm(new string[] { FormManager.FORM_PAY_MOBILE_COUPON_HAPPYCON, PosKey.MENU_KEY.MOBILE_COUPON_HAPPYCON, txtCardNo.Value.Trim().ToString() }); this.DialogResult = DialogResult.OK; this.Close(); } else if (m_sPosMenuKey == PosKey.MENU_KEY.MOBILE_COUPON_SCH) { sRet = WinPay.ShowForm(new string[] { FormManager.FORM_PAY_MOBILE_COUPON_HAPPYCON, PosKey.MENU_KEY.MOBILE_COUPON_HAPPYCON_SCH, txtCardNo.Value.Trim().ToString() }); this.DialogResult = DialogResult.Cancel; this.Close(); } return true; } string sInPutType = m_sInPutType; string sInPutData = m_sInPutData; string sInEncData = m_sInEncData; if (m_sInEncData == "") { if (m_sInPutData == "") { sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_KEYIN_CP; sInPutData = txtCardNo.Value; } ///EncryptedCardNo(sInPutData, ref sInEncData, ref sInPutData); } // 조회 string[] saRecvdData = null; txtCouponAmt.Value = "0"; txtiTemAmt.Text = "0"; txtCardNM.Text = ""; m_sProductiTem = ""; double nDCSum = 0; sRet = m_cMobileCoupon.SearchPayment(new string[] { m_sPosMenuKey, sInPutType, sInPutData, sInPutData, m_cDataService.DoubleParse(txtPayAmt.Text).ToString(), "", "", "", mPay_DC_Type, mPay_DC_CD }, ref saRecvdData); if (sRet != UserCom.RST_OK) { txtCardNo.Select(); txtCardNo.SelectText(); return false; } Column.TR_PAYMENT.DATA m_cPayItem = (Column.TR_PAYMENT.DATA)m_cMobileCoupon.GetPayment(new string[] { }); ///if (m_cPayItem.PAY_DTL_CD_04.Trim() != "" && m_cPayItem.OCCUR_ENTRY_10 == "04") if (m_cPayItem.PAY_DTL_CD_04.Trim() != "") { // ProductID로 등록된 상품 체크 sRet = GetDCItemAmount(m_cPayItem.PAY_DTL_CD_04, sInPutData, " ", m_cPayItem.PAY_AMT, ref nDCSum, ref m_sProductiTem); if (sRet != UserCom.RST_OK) return false; txtCouponAmt.Value = m_cPosStatus.Global.NumericTOCurrency(m_cPayItem.PAY_AMT); txtiTemAmt.Text = m_cPosStatus.Global.NumericTOCurrency(CmUtil.DoubleAdd(nDCSum, m_cPayItem.PAY_AMT)); } //else if (m_cPayItem.AMT_ENTRY_02 > 0 || nDCSum == 0) else if (m_cPayItem.AMT_ENTRY_02 > 0) { nDCSum = m_cPayItem.AMT_ENTRY_02; txtCouponAmt.Value = m_cPosStatus.Global.NumericTOCurrency(nDCSum); txtiTemAmt.Text = m_cPosStatus.Global.NumericTOCurrency(nDCSum); } else if (m_cPayItem.PAY_AMT > 0 ) { nDCSum = m_cPayItem.PAY_AMT; txtCouponAmt.Value = m_cPosStatus.Global.NumericTOCurrency(nDCSum); txtiTemAmt.Text = m_cPosStatus.Global.NumericTOCurrency(nDCSum); } if (mPay_DC_Type == ItemConst.TR_ITEM_ID.MOBILECON_ITEM && mPay_DC_CD == ItemConst.TR_ITEM_ID.MOBILECON.HPCON) // 해피 쿠폰인 경우 금액수정 가능 txtCouponAmt.ReadOnly = false; else txtCouponAmt.ReadOnly = true; txtCardNM.Text = PosMstManager.GetMstPayDc(mPay_DC_Type, mPay_DC_CD, PosMst.MST_PAY_DC.DATA.PAY_DC_NM); // 쿠폰명 txtCardNo.Select(); txtCardNo.SelectText(); 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 { 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); } } /// /// MSR Event /// /// /// private void OnMSREvent(object source, EventArgs e) { } /// /// 스캐너 이벤트 처리 /// /// /// private void OnScannerEvent(object source, EventArgs e) { try { string sScanData = m_cDevStatus.Scanner.DataLabel; if (sScanData.Length > 0 && m_sInPutData == "") { m_sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_BARCODE_CP; m_sInPutData = sScanData; txtCardNo.Text = m_sInPutData; //txtCardNo.ReadOnly = true; if (m_cTrnStatus.Head.TradeDiv == ItemConst.TRAN_DIV.NORMAL) SearchTxtInPut(); } } 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 string EncryptedCardNo(string sInData, ref string sCardData, ref string sCardNo) { string sEncData = sInData; try { sEncData = m_cDeviceICReader.GetEncryptedCardNo(sInData).Trim(); if (CmUtil.MidH(sEncData, 0, 2) == "00") { sCardData = CmUtil.MidH(sEncData, 2, 512).Trim(); sCardNo = CmUtil.MidH(sEncData, 514, sEncData.Length - 514).Trim(); } 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); } } 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 sEncData; } /// /// IC 카드 정보 입력 처리 /// /// private bool GetIcCardData() { try { m_sInPutType = ""; m_sInPutData = ""; m_sInEncData = ""; txtCardNo.Value = ""; txtCardNo.ReadOnly = false; string sRsvStr = ""; if (m_cDeviceICReader.GetCardInfo_ICReader(PosConst.IC_READER_TRAN_TYPE.POINT, 1, ref sRsvStr) == true) { if (CmUtil.MidH(sRsvStr, 0, 2) == "00") { txtCardNo.Value = CmUtil.MidH(sRsvStr, 1030, 37).Trim(); m_sInEncData = CmUtil.MidH(sRsvStr, 6, 512).Trim(); m_sInPutData = CmUtil.MidH(sRsvStr, 1030, 37).Trim(); m_sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_SWIP; //txtCardNo.ReadOnly = 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; } #endregion #region Prefix에 의한 사용 Van 정보 조회 /// /// Prefix에 의한 사용 Van 정보 조회 /// /// /// private bool GetPrefixToPayTypeInfo(string sCardNo) { try { if (sCardNo.Length == 0) return false; // PreFix 검색 DataTable dtVanInfo = m_cDataCommon.SeletPrefixToPayTypeInfo(sCardNo); if (dtVanInfo == null || dtVanInfo.Rows.Count <= 0) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0080); return false; } DataRow drVanInfo = dtVanInfo.Rows[0]; // 결제 그룹 코드 mPay_DC_Type = CmUtil.GetDataRowStr(drVanInfo, "PAY_DC_GRP_TYPE"); // 결제 상세 코드 mPay_DC_CD = CmUtil.GetDataRowStr(drVanInfo, "PAY_DC_CD"); 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 ProductID로 등록된 상품 체크 /// /// ProductID로 등록된 상품 체크 /// /// /// /// /// /// /// /// public string GetDCItemAmount(string sProductID, string sCouponNo, string sVCouponNo, double nPayAmt, ref double nDCAmt, ref string siTemCheck) { string sRet = UserCom.RST_ERR; double niTemSum = 0; double nQty = 0; int iMaxIndex = -1; try { // 프로덕트 id 없으면 Skip if (sProductID.Trim().Length <= 0) return sRet; // 쿠폰 List 조회 DataTable dtMemu = m_cDataCommon.SeletProductIDToItemCD(sProductID); if (dtMemu == null || dtMemu.Rows.Count <= 0) { //WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0149); return sRet = UserCom.RST_OK ; } ITEM_PLU_CHECK iTemCheck = new ITEM_PLU_CHECK(); if (m_aSaleItem.Count <= 0) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0149); return sRet; } foreach (DataRow dr in dtMemu.Rows) { // Product ID로 결제구분을 재설정한다. string sDC_Type = CmUtil.GetDataRowStr(dr, "PAY_DC_GRP_TYPE").Trim(); if (sDC_Type.Trim().Length > 0) mPay_DC_Type = sDC_Type.Trim(); // Product ID로 결제상세코드를 재설정한다. string sDC_CD = CmUtil.GetDataRowStr(dr, "PAY_DC_CD").Trim(); if (sDC_Type.Trim().Length > 0) mPay_DC_CD = sDC_CD.Trim(); for (int iRow = 0; iRow < m_aSaleItem.Count; iRow++) { Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)m_aSaleItem[iRow]; if (cSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue;// 지정취소 if (cSaleItem.DC_DIV == ItemConst.PLU_DC_DIV.FREE) continue; // 서비스(무료) if (cSaleItem.NONSALES_RSN_CD != "0") continue; // 비매출구분 if (cSaleItem.BILLSPR_NO != m_cTrnStatus.Sale.BillSplitNo) continue; // 빌분리번호 if (cSaleItem.BILL_AMT <= 0) continue; // 영수금액 //if (cSaleItem.DC_PRMT_YN != "0") continue; // 할인가능 여부 if (CmUtil.GetDataRowStr(dr, "ITEM_CHECK_YN") == "1") { // 등록된 상품과 쿠폰마스터 상품 체크용 저장 if (CmUtil.GetDataRowStr(dr, "ITEM_CD") == cSaleItem.ITEM_PLU_CD) { // 할인 대상 iTemCD/수량 체크용 저장 nQty = CmUtil.GetDataRowDouble(dr, "QTY"); // 할인금액+결제요금액 보다 상품판매금액이 같거나 큰 경우만 if (nQty > 0 && cSaleItem.SALE_QTY > 0 && cSaleItem.BILL_AMT >= nPayAmt + CmUtil.GetDataRowDouble(dr, "DC_AMT")) { // 제일 큰 금액에 설정 if (iTemCheck.SALE_PRC == 0 || iTemCheck.SALE_PRC < cSaleItem.SALE_PRC) { iMaxIndex = iRow; iTemCheck.sCouponNo = sCouponNo.Trim(); iTemCheck.sVCouponNo = sVCouponNo.Trim(); iTemCheck.sProductID = CmUtil.GetDataRowStr(dr, "PRODUCT_CD").Trim(); iTemCheck.iTemCD = cSaleItem.ITEM_PLU_CD; iTemCheck.SALE_PRC = cSaleItem.SALE_PRC; iTemCheck.SaleAmt = cSaleItem.BILL_AMT; iTemCheck.PayAmt = nPayAmt; iTemCheck.DCAmt = CmUtil.GetDataRowDouble(dr, "DC_AMT"); // 대상 금액 sum niTemSum = CmUtil.DoubleAdd(CmUtil.GetDataRowDouble(dr, "DC_AMT"), nPayAmt); } } } } else { nQty = CmUtil.GetDataRowDouble(dr, "QTY"); if (nQty > 0 && cSaleItem.SALE_QTY > 0 && cSaleItem.BILL_AMT >= nPayAmt + CmUtil.GetDataRowDouble(dr, "DC_AMT")) { // 제일 큰 금액에 설정 if (iTemCheck.SALE_PRC == 0 || iTemCheck.SALE_PRC < cSaleItem.SALE_PRC) { iMaxIndex = iRow; iTemCheck.sCouponNo = sCouponNo.Trim(); iTemCheck.sVCouponNo = sVCouponNo.Trim(); iTemCheck.sProductID = CmUtil.GetDataRowStr(dr, "PRODUCT_CD").Trim(); iTemCheck.iTemCD = cSaleItem.ITEM_PLU_CD; iTemCheck.SALE_PRC = cSaleItem.SALE_PRC; iTemCheck.SaleAmt = cSaleItem.BILL_AMT; iTemCheck.PayAmt = nPayAmt; iTemCheck.DCAmt = CmUtil.GetDataRowDouble(dr, "DC_AMT"); // 대상 금액 sum niTemSum = CmUtil.DoubleAdd(CmUtil.GetDataRowDouble(dr, "DC_AMT"), nPayAmt); } } } } } // 적용 상품의 상품금액 변경 if (iMaxIndex > -1) { Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)m_aSaleItem[iMaxIndex]; cSaleItem.CPN_DC_DIV = mPay_DC_Type + mPay_DC_CD; cSaleItem.CPN_DC_AMT = CmUtil.DoubleAdd(cSaleItem.CPN_DC_AMT, iTemCheck.DCAmt); cSaleItem.BILL_AMT = CmUtil.DoubleSubtraction(cSaleItem.BILL_AMT, iTemCheck.DCAmt); nDCAmt = iTemCheck.DCAmt; } //// 구매수량 체크 //for (int index = 0; index < m_aSaleItem.Count; index++) //{ // if (iTemCheck.iTemCD != "") // { // if (iTemCheck.T_Qty >= 0 && iTemCheck.S_Qty != 0) // { // WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0160); // return sRet; // } // } //} // 금액 체크 if (niTemSum > m_cDataService.DoubleParse(txtPayAmt.Text.ToString())) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0160); return sRet; } // 가능한 상품 미존재시 if (niTemSum <= 0) { WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0149); return sRet; } // 프로덕트 정보 체크용 if (iTemCheck.sCouponNo.Trim() != "") { siTemCheck += iTemCheck.sCouponNo; siTemCheck += "!~"; siTemCheck += iTemCheck.sVCouponNo; siTemCheck += "!~"; siTemCheck += iTemCheck.sProductID; siTemCheck += "!~"; siTemCheck += iTemCheck.iTemCD; siTemCheck += "!~"; siTemCheck += iTemCheck.PayAmt; siTemCheck += "!~"; siTemCheck += iTemCheck.DCAmt; siTemCheck += "$~"; } sRet = UserCom.RST_OK; } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } return sRet; } #endregion //#15608 모바일쿠폰해피기프트카드 자동인식 기능 도입요청 start #region 모바일쿠폰 선리딩 처리를 위한 이벤트 오버로딩 public void txtEditBox_EditBoxKeyDownEvent(object sender, string _strMobileCpnNo, object _strDiv) { #region 구분(_strDiv) 값이 ''(공백)일 경우 카드 번호만 표시한다. if (_strDiv == null) { // 카드 번호 설정 txtCardNo.Value = _strMobileCpnNo; // 카드 번호 설정 후 clear m_cPosStatus.Sale.strMobileCpnNo = ""; } #endregion #region 구분(_strDiv) 값이 '조회'일 경우 카드 번호 표시후 조회까지 처리한다. else if (((Cosmos.UI.CsmButton)_strDiv) == btnSearch) { // 카드 번호 설정 ----- txtCardNo.Value = _strMobileCpnNo; // 카드 번호 설정 후 clear m_cPosStatus.Sale.strMobileCpnNo = ""; // 카드 조회 이벤트 호출 ----- txtEditBox_EditBoxKeyDownEvent(txtCardNo, PosKey.MENU_KEY.ENTER); } #endregion #region 구분(_strDiv) 값이 '승인'일 경우 제휴할인 카드 번호 표시후 승인까지 처리한다. else if (((Cosmos.UI.CsmButton)_strDiv) == btnEnter) { // 카드 번호 설정 txtCardNo.Value = _strMobileCpnNo; // 카드 번호 설정 후 clear m_cPosStatus.Sale.strMobileCpnNo = ""; // 카드 조회 이벤트 호출 txtEditBox_EditBoxKeyDownEvent(txtCardNo, PosKey.MENU_KEY.ENTER); // 카드 승인 이벤트 호출 btnProc_Click(btnEnter, null); } #endregion } #endregion 모바일쿠폰 선리딩 처리를 위한 이벤트 오버로딩 //#15608 모바일쿠폰해피기프트카드 자동인식 기능 도입요청 end } }