using System; using System.Text; using System.Drawing; using System.Windows.Forms; using System.Collections; using System.Data; using Cosmos.Win; using Cosmos.BaseFrame; using Cosmos.UserFrame; using Cosmos.ServiceProvider; using Cosmos.Common; using Cosmos.CommonManager; //#20181015 결제창 엑박 관련 이미지 미사용 처리 start using System.Drawing.Drawing2D; //#20181015 결제창 엑박 관련 이미지 미사용 처리 end /*-----------------------------------------------------------------------------------------------*/ // 설 명 : 결제 팝업 백그라운드 화면 // 작 성 자 : // 변경 이력 : /*-----------------------------------------------------------------------------------------------*/ namespace Cosmos.Win { public partial class frm_PayMainBack : Form { #region 변수 선언 private PosStatus m_cPosStatus = new PosStatus(); //기본정보 참조 private StateServer StateObject = (StateServer)StateServer.GetInstance(); //StateObject : StateServer Object(객체) private SManager sManager = new SManager(); // 이 객체를 통해 업무 Service 호출 private IDataCommonUs m_cDataCommon = null; // POS 공통함수 인터페이스 private ArrayList m_alMotDtl = new ArrayList(); // 결제 수단 정보 MOT 배열 private int iMaxPage; // 결제 수단 정보 MOT 최대 페이지 수 private int iNowPage; // 결제 수단 정보 MOT 현재 페이지 private readonly string MotbtnName = "BtnMotPay"; // 결제 수단 기본 버튼명 private string m_sFuncKey = ""; // 결제 수단 기능키 #endregion 변수 선언 #region 생성자 & 소멸자 & 폼초기화 public frm_PayMainBack() { InitializeComponent(); base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw, true); //this.UpdateStyles(); //#20181015 결제창 엑박 관련 이미지 미사용 처리 start this.picBack.Paint += new System.Windows.Forms.PaintEventHandler(this.picBack_Gradient); //#20181015 결제창 엑박 관련 이미지 미사용 처리 end } //#20181015 결제창 엑박 관련 이미지 미사용 처리 start #region picBack Paint 이벤트 private void picBack_Gradient(object sender, PaintEventArgs e) { try { //picBack 그라데이션 처리 #region picBack 그라데이션 처리 Color startColor = Color.FromArgb(138, 147, 165); Color middleColor1 = Color.FromArgb(138, 147, 165); Color middleColor2 = Color.FromArgb(33, 44, 56); Color endColor = Color.FromArgb(33, 44, 56); LinearGradientBrush br = new LinearGradientBrush(this.picBack.ClientRectangle, System.Drawing.Color.FromArgb(255, 255, 255), System.Drawing.Color.Black, 0, false); ColorBlend cb = new ColorBlend(); //그라데이션 시작 위치 설정 cb.Positions = new[] { 0, 1 / 10f, 1 / 2f, 1 }; //그라데이션 시작 위치별 색상 설정 cb.Colors = new[] { startColor, middleColor1, middleColor2, endColor }; //그라데이션 처리 회전 각도 br.RotateTransform(90); br.InterpolationColors = cb; e.Graphics.FillRectangle(br, this.picBack.ClientRectangle); #endregion picBack 그라데이션 처리 } 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 picBack Paint 이벤트 //#20181015 결제창 엑박 관련 이미지 미사용 처리 end protected void InitPayMainBack(PosStatus cPosStatus, IDataCommonUs cDataCommon, string sPosMenuKey, string sPAY_STEP, string sSeqNo) { m_cPosStatus = cPosStatus; m_cDataCommon = cDataCommon; picMotPayImg.Parent = pnlCardMot; m_sFuncKey = sPosMenuKey; //#20181015 결제창 엑박 관련 이미지 미사용 처리 start //변경 //picBack.BackColor = Color.FromArgb(138, 147, 165); //#20181015 결제창 엑박 관련 이미지 미사용 처리 end btnExit.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.BTN_CLOSE); if (btnExit.Image != null) btnExit.Text = ""; string m_sEnterThemeColor = m_cPosStatus.ScnMst.ThemeColor; ////승인 종류 버튼 테마색상 적용! if (string.IsNullOrEmpty(m_sEnterThemeColor) == false) { if (m_sEnterThemeColor.Length == 9) padInPut.ThemeColor = m_sEnterThemeColor; } padInPut.ClearBtnText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0817); padInPut.SearchBtnText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_1018); SetRichBoxMotMsg(rtbMotMain, PosConst.MOT_MSG_TYPE.DSP_SCN_MSG, sPosMenuKey, sSeqNo); //#15606 제휴서비스 결제 프로세스 개선 start //기능키를 넘겨 해당 기능키의 mot만 가져오도록 처리 //기존 //LoadMotPayHdr(m_cPosStatus.Sale.SaleMainPayStep); //변경 LoadMotPayHdr(m_cPosStatus.Sale.SaleMainPayStep, sPosMenuKey); //#15606 제휴서비스 결제 프로세스 개선 end //LoadMotPayHdr(sPAY_STEP); } #endregion #region 결제 MOT 처리 /// /// 결제 MOT 초기화 /// private void SetMotPayInit() { try { foreach (Control control in pnlCardMot.Controls) { if (control is UI.CsmButton) { if (control.Text != "∧" && control.Text != " ∨") { control.Text = ""; control.Tag = ""; control.Visible = true; } } } rtbMotPayTxt.Text = ""; picMotPayImg.Image = null; } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } } /// /// 결제 MOT 헤더 로드 /// /// //#15606 제휴서비스 결제 프로세스 개선 start //기능키를 넘겨 해당 기능키의 mot만 가져오도록 처리 //기존 //protected void LoadMotPayHdr(string sStep) //변경 protected void LoadMotPayHdr(string sStep, string sPosMenuKey) //#15606 제휴서비스 결제 프로세스 개선 end { //헤더 로드 m_alMotDtl.Clear(); int iPage = 1; int iSeq = 1; SetMotPayInit(); //#15606 제휴서비스 결제 프로세스 개선 start //기능키를 넘겨 해당 기능키의 mot만 가져오도록 처리 //기존 //DataTable dt = m_cDataCommon.SelectMOT(PosMst.MST_MOT_MSG.TABLE_NAME, sStep, "", ""); //변경 DataTable dt = m_cDataCommon.SelectMOT(PosMst.MST_MOT_MSG.TABLE_NAME, sStep, sPosMenuKey, ""); //#15606 제휴서비스 결제 프로세스 개선 end if (dt == null || dt.Rows.Count <= 0) return; //배열 담기 foreach (DataRow dr in dt.Rows) { if (iSeq == 6) { iPage += 1; iSeq = 1; } // 페이지 번호, 버튼명, 명, 태그 값 m_alMotDtl.Add(new string[] { iPage.ToString(), string.Format("{0}{1:00}",MotbtnName,iSeq), CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.MOT_NM) ,string.Format("{0}^{1}^{2}^{3}",CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.MSG_TYPE),CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.CNNT_ID) ,CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.SEQ_NO),CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.IMG_NM)) ,CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.CNNT_ID) }); //// 페이지 번호, 버튼명, 명, 태그 값 //m_alMotDtl.Add(new string[] { iPage.ToString(), string.Format("{0}{1:00}",MotbtnName,iSeq), CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.MOT_NM), // CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.MSG_TYPE) + CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.CNNT_ID) + CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.IMG_NM)}); iSeq += 1; } // 보여주기 iNowPage = 1; iMaxPage = iPage; SetBtnMotPay(); //#15606 제휴서비스 결제 프로세스 개선 start //1:1 매칭인 경우에만 해당 mot 활성화 //기존 /* //2016-10-25 조성완과장 요청으로 신용카드 일때 선택 안함! if (m_sFuncKey != PosKey.MENU_KEY.CREDIT_CARD) { if (dt.Rows.Count > 0) FindFuncMot(); //BtnMotPay_Click(BtnMotPay01, null); } */ //변경 if (dt.Rows.Count == 1) FindFuncMot(); //#15606 제휴서비스 결제 프로세스 개선 end } private void FindFuncMot() { try { if (m_alMotDtl == null || iMaxPage == 0) return; foreach (string[] atmp in m_alMotDtl) { if (atmp[4] == m_sFuncKey) { BtnMotPay01.Text = atmp[2].ToString(); BtnMotPay01.Tag = atmp[3].ToString(); iNowPage = CmUtil.IntParse(atmp[0]); string sTmp; sTmp = BtnMotPay01.Tag.ToString(); string[] aParam = sTmp.Split(new string[] { "^" }, StringSplitOptions.None); string sCnntId = aParam[0]; string sMsgFlg = aParam[1]; string sSeqNo = aParam[2]; string sImgPath = aParam[3]; picMotPayImg.Image = ImageManager.GetImage(BaseCom.NxCDPPath + PosConst.MST_IMG_PATH.CDP_COM, sImgPath.Trim()); SetRichBoxMotMsg(rtbMotPayTxt, sCnntId, sMsgFlg, sSeqNo); BtnMotPay02.Visible = false; BtnMotPay03.Visible = false; BtnMotPay04.Visible = false; BtnMotPay05.Visible = false; BtnMotPayUp.Enabled = true; BtnMotPayDown.Enabled = true; 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); } } /// /// 결제 MOT 버튼 셋팅 /// /// public bool SetBtnMotPay() { try { SetMotPayInit(); if (m_alMotDtl == null || iMaxPage == 0) return false; int iStrtNum = 1; foreach (string[] atmp in m_alMotDtl) { if (atmp[0] == iNowPage.ToString()) { Cosmos.UI.CsmButton btnCtl = (Cosmos.UI.CsmButton)pnlCardMot.Controls[atmp[1]]; if (btnCtl != null) { btnCtl.Text = atmp[2]; btnCtl.Tag = atmp[3]; } } iStrtNum += 1; } if (iNowPage == 1) { BtnMotPayUp.Enabled = false; } else { BtnMotPayUp.Enabled = true; } if (iMaxPage == iNowPage) { BtnMotPayDown.Enabled = false; } else { BtnMotPayDown.Enabled = 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; } } /// /// 결제 MOT 버튼 클릭 /// /// /// private void BtnMotPay_Click(object sender, EventArgs e) { try { if (((UI.CsmButton)sender).Text == "") return; if (BtnMotPay02.Visible == false) { SetBtnMotPay(); } else { if (((UI.CsmButton)sender) == BtnMotPayUp) { if (iNowPage == 1) return; iNowPage -= 1; SetBtnMotPay(); } else if (((UI.CsmButton)sender) == BtnMotPayDown) { if (iNowPage == iMaxPage) return; iNowPage += 1; SetBtnMotPay(); } else { string sTmp; BtnMotPay01.Text = ((UI.CsmButton)sender).Text; BtnMotPay01.Tag = ((UI.CsmButton)sender).Tag; sTmp = BtnMotPay01.Tag.ToString(); string[] aParam = sTmp.Split(new string[] { "^" }, StringSplitOptions.None); string sCnntId = aParam[0]; string sMsgFlg = aParam[1]; string sSeqNo = aParam[2]; string sImgPath = aParam[3]; picMotPayImg.Image = ImageManager.GetImage(BaseCom.NxCDPPath + PosConst.MST_IMG_PATH.CDP_COM, sImgPath.Trim()); SetRichBoxMotMsg(rtbMotPayTxt, sCnntId, sMsgFlg, sSeqNo); //sTmp = BtnMotPay01.Tag.ToString(); //picMotPayImg.Image = ImageManager.GetImage(BaseCom.NxCDPPath + PosConst.MST_IMG_PATH.CDP_COM, CmUtil.MidH(sTmp, 5, 50).Trim()); //SetRichBoxMotMsg(rtbMotPayTxt, CmUtil.MidH(sTmp, 0, 1), CmUtil.MidH(sTmp, 1, 4)); BtnMotPay02.Visible = false; BtnMotPay03.Visible = false; BtnMotPay04.Visible = false; BtnMotPay05.Visible = false; BtnMotPayUp.Enabled = true; BtnMotPayDown.Enabled = true; } } try { padInPut.ActiveControl.Focus(); } catch { } } 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 리치박스 MOT 텍스트 설정 /// /// 리치박스 MOT 텍스트 설정 /// /// protected bool SetRichBoxMotMsg(RichTextBox rtbMot, string sMsgTp, string sMsgFlag, string sSeqNo) { try { rtbMot.Text = ""; DataTable dtHead = m_cDataCommon.SelectMOT(PosMst.MST_MOT_MSG.TABLE_NAME, sMsgTp, sMsgFlag, sSeqNo); if (dtHead != null && dtHead.Rows.Count > 0) { //#13753 POS MOT음성 기능 추가 개발요청 start,phj //기존 /* // 음성 사용 유무(0:미사용, 1:사용) if (PosMstManager.GetPosOption(POS_OPTION.OPT309) != "0") { DataRow dr = dtHead.Rows[0]; if (CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.SOUND_FILE_DIV) == "01") // 00(없음), 01(WAVE), 02(TTS) { string sFilePath = BaseCom.NxCDPPath + PosConst.MST_IMG_PATH.CDP_COM + CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.SOUND_FILE_NM); CmUtil.PlaySound(sFilePath); } else if (CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.SOUND_FILE_DIV) == "02") // 00(없음), 01(WAVE), 02(TTS) { CmUtil.SpeakByTTSEngine(m_cPosStatus.Base.Country, CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.TTS_DSCRP), 150); } } */ //변경 // PCKR인 경우에는 직영만 음성파일 재생하도록 함! // PCKR이 아닌 경우에는 직영가맹 조건에 추가안함! //#20180214 마스터 수신 시 포스에서 설정한 MOT 값 변경안되도록 수정 start,phj // 기존 /* if (((m_cPosStatus.Mst.CntryDiv == ItemConst.CNTRY_DIV.KR && m_cPosStatus.Mst.CorpDiv == ItemConst.CORP_DIV.PC) == false) || //PCKR이 아니거나 (((m_cPosStatus.Mst.CntryDiv == ItemConst.CNTRY_DIV.KR && m_cPosStatus.Mst.CorpDiv == ItemConst.CORP_DIV.PC) == true) && m_cPosStatus.Mst.DrtFrcsDiv == "10")) //PCKR이고 직영일 때! { */ //#20180214 마스터 수신 시 포스에서 설정한 MOT 값 변경안되도록 수정 end,phj //#13753 POS MOT음성 기능 추가 개발요청 - 20180222 음성MOT 옵션처리 start,phj if (((m_cPosStatus.Mst.CntryDiv == ItemConst.CNTRY_DIV.KR && m_cPosStatus.Mst.CorpDiv == ItemConst.CORP_DIV.PC) == false) || //PCKR이 아니거나 (((m_cPosStatus.Mst.CntryDiv == ItemConst.CNTRY_DIV.KR && m_cPosStatus.Mst.CorpDiv == ItemConst.CORP_DIV.PC) == true) && PosMstManager.GetPosOption(POS_OPTION.OPT331) == "1")) //PCKR이고 MOT옵션 사용 일 때! { //#13753 POS MOT음성 기능 추가 개발요청 - 20180222 음성MOT 옵션처리 end,phj // 음성 사용 유무(0:미사용, 1:사용) if (PosMstManager.GetPosOption(POS_OPTION.OPT309) != "0") { DataRow dr = dtHead.Rows[0]; if (CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.SOUND_FILE_DIV) == "01") // 00(없음), 01(WAVE), 02(TTS) { string sFilePath = BaseCom.NxCDPPath + PosConst.MST_IMG_PATH.CDP_COM + CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.SOUND_FILE_NM); CmUtil.PlaySound(sFilePath); } else if (CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.SOUND_FILE_DIV) == "02") // 00(없음), 01(WAVE), 02(TTS) { CmUtil.SpeakByTTSEngine(m_cPosStatus.Base.Country, CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG.DATA.TTS_DSCRP), 150); } } } //#13753 POS MOT음성 기능 추가 개발요청 end,phj } DataTable dtDetl = m_cDataCommon.SelectMOT(PosMst.MST_MOT_MSG_DTL.TABLE_NAME, sMsgTp, sMsgFlag, sSeqNo); if (dtDetl == null || dtDetl.Rows.Count <= 0) return false; int iStrtNum = 0; foreach (DataRow dr in dtDetl.Rows) { string tmpStr = CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG_DTL.DATA.MSG); //rtbMot.AppendText(tmpStr.Trim()); //rtbMot.Select(iStrtNum, tmpStr.Trim().Length); rtbMot.AppendText(tmpStr); rtbMot.Select(iStrtNum, tmpStr.Length); rtbMot.SelectionColor = CmUtil.GetColorToString(CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG_DTL.DATA.FONT_COLOR)); // 백 컬러 int iFontSize = CmUtil.GetDataRowInt(dr, PosMst.MST_MOT_MSG_DTL.DATA.FONT_SIZE); if (iFontSize <= 0) iFontSize = 1; rtbMot.SelectionFont = new Font(m_cPosStatus.Base.FONT, iFontSize); if (CmUtil.GetDataRowStr(dr, PosMst.MST_MOT_MSG_DTL.DATA.NEW_LINE_YN) == "1") { rtbMot.AppendText("\n"); iStrtNum += 1; } //iStrtNum += tmpStr.Trim().Length; // +1; iStrtNum += tmpStr.Length; // +1; } rtbMot.Select(0, 0); rtbMot.Refresh(); 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 rtbMotMain_Enter(object sender, EventArgs e) { padInPut.SetActiveFocus(); } private void rtbMotPayTxt_Enter(object sender, EventArgs e) { padInPut.SetActiveFocus(); } //#15606 제휴서비스 결제 프로세스 개선 start //제휴통합 창에서 상단 제휴사 선택시 mot및 음성mot 재설정 #region 제휴통합 MOT 설정 /// /// 제휴통합 MOT 설정 /// public void SetMotMobileUnity(string sPosMenuKey, string sPAY_STEP) { try { m_sFuncKey = sPosMenuKey; SetRichBoxMotMsg(rtbMotMain, PosConst.MOT_MSG_TYPE.DSP_SCN_MSG, sPosMenuKey, ""); LoadMotPayHdr(m_cPosStatus.Sale.SaleMainPayStep, sPosMenuKey); } 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 제휴통합 MOT 설정 //#15606 제휴서비스 결제 프로세스 개선 end } }