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
}
}