896 lines
34 KiB
C#
896 lines
34 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.ComponentModel;
|
|||
|
using System.IO;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using System.Windows;
|
|||
|
using System.Windows.Input;
|
|||
|
using System.Windows.Threading;
|
|||
|
using SPC.Kiosk.Base;
|
|||
|
using SPC.Kiosk.Common;
|
|||
|
using SPC.Kiosk.Popup.Model;
|
|||
|
using SPC.Kiosk.Payments;
|
|||
|
|
|||
|
namespace SPC.Kiosk.Popup.ViewModel
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// HappyPointCertify.xaml에 대한 ViewModel
|
|||
|
/// </summary>
|
|||
|
public class VmPaymentProcess : PopupViewModelBase
|
|||
|
{
|
|||
|
#region [ Members ]
|
|||
|
private string titileImage;
|
|||
|
/// <summary>
|
|||
|
/// Read Barcode Formated Text
|
|||
|
/// </summary>
|
|||
|
public string TitileImage
|
|||
|
{
|
|||
|
get { return titileImage; }
|
|||
|
set { titileImage = value; PropertyChange("TitileImage"); }
|
|||
|
}
|
|||
|
private string processingGIF;
|
|||
|
/// <summary>
|
|||
|
/// Processing GIF
|
|||
|
/// </summary>
|
|||
|
public string ProcessingGIF
|
|||
|
{
|
|||
|
get { return processingGIF; }
|
|||
|
set { processingGIF = value; PropertyChange("ProcessingGIF"); }
|
|||
|
}
|
|||
|
private string errorImage;
|
|||
|
/// <summary>
|
|||
|
/// Error Icon
|
|||
|
/// </summary>
|
|||
|
public string ErrorImage
|
|||
|
{
|
|||
|
get { return errorImage; }
|
|||
|
set { errorImage = value; PropertyChange("ErrorImage"); }
|
|||
|
}
|
|||
|
private string successImage;
|
|||
|
/// <summary>
|
|||
|
/// Sucess Icon
|
|||
|
/// </summary>
|
|||
|
public string SuccessImage
|
|||
|
{
|
|||
|
get { return successImage; }
|
|||
|
set { successImage = value; PropertyChange("SuccessImage"); }
|
|||
|
}
|
|||
|
private List<M_Language> headerText;
|
|||
|
/// <summary>
|
|||
|
/// Top Header Text
|
|||
|
/// </summary>
|
|||
|
public List<M_Language> HeaderText
|
|||
|
{
|
|||
|
get { return headerText; }
|
|||
|
set { headerText = value; PropertyChange("HeaderText"); }
|
|||
|
}
|
|||
|
private List<M_Language> scanGuidText;
|
|||
|
/// <summary>
|
|||
|
/// Second Sub Header Text
|
|||
|
/// </summary>
|
|||
|
public List<M_Language> ScanGuidText
|
|||
|
{
|
|||
|
get { return scanGuidText; }
|
|||
|
set { scanGuidText = value; PropertyChange("ScanGuidText"); }
|
|||
|
}
|
|||
|
private List<M_Language> processingMessageText;
|
|||
|
/// <summary>
|
|||
|
/// Number Pad Input Guide Text
|
|||
|
/// </summary>
|
|||
|
public List<M_Language> ProcessingMessageText
|
|||
|
{
|
|||
|
get { return processingMessageText; }
|
|||
|
set { processingMessageText = value; PropertyChange("ProcessingMessageText"); }
|
|||
|
}
|
|||
|
private List<M_Language> processingGuide;
|
|||
|
/// <summary>
|
|||
|
/// Processing Guide Text
|
|||
|
/// </summary>
|
|||
|
public List<M_Language> ProcessingGuide
|
|||
|
{
|
|||
|
get { return processingGuide; }
|
|||
|
set { processingGuide = value; PropertyChange("ProcessingGuide"); }
|
|||
|
}
|
|||
|
private List<M_Language> errorGuide;
|
|||
|
/// <summary>
|
|||
|
/// Error Guide Text
|
|||
|
/// </summary>
|
|||
|
public List<M_Language> ErrorGuide
|
|||
|
{
|
|||
|
get { return errorGuide; }
|
|||
|
set { errorGuide = value; PropertyChange("ErrorGuide"); }
|
|||
|
}
|
|||
|
|
|||
|
private List<M_Language> infoGuid1Text;
|
|||
|
/// <summary>
|
|||
|
/// Bootom first infomation text
|
|||
|
/// </summary>
|
|||
|
public List<M_Language> InfoGuid1Text
|
|||
|
{
|
|||
|
get { return infoGuid1Text; }
|
|||
|
set { infoGuid1Text = value; PropertyChange("InfoGuid1Text"); }
|
|||
|
}
|
|||
|
private TextAlignment infoGuid1TextAlignment = TextAlignment.Left;
|
|||
|
public TextAlignment InfoGuid1TextAlignment
|
|||
|
{
|
|||
|
get { return infoGuid1TextAlignment; }
|
|||
|
set { infoGuid1TextAlignment = value; PropertyChange("InfoGuid1TextAlignment"); }
|
|||
|
}
|
|||
|
private List<M_Language> infoGuid2Text;
|
|||
|
/// <summary>
|
|||
|
/// Bootom Second infomation text
|
|||
|
/// </summary>
|
|||
|
public List<M_Language> InfoGuid2Text
|
|||
|
{
|
|||
|
get { return infoGuid2Text; }
|
|||
|
set { infoGuid2Text = value; PropertyChange("InfoGuid2Text"); }
|
|||
|
}
|
|||
|
private List<M_Language> leftInfomationText;
|
|||
|
/// <summary>
|
|||
|
/// Bootom Second infomation text
|
|||
|
/// </summary>
|
|||
|
public List<M_Language> LeftInfomationText
|
|||
|
{
|
|||
|
get { return leftInfomationText; }
|
|||
|
set { leftInfomationText = value; PropertyChange("LeftInfomationText"); }
|
|||
|
}
|
|||
|
private bool paymentStartVisible = false;
|
|||
|
/// <summary>
|
|||
|
/// ReadCardOrBarCode Window Is Visible
|
|||
|
/// </summary>
|
|||
|
public bool PaymentStartVisible
|
|||
|
{
|
|||
|
get { return paymentStartVisible; }
|
|||
|
set { paymentStartVisible = value; PropertyChange("PaymentStartVisible"); }
|
|||
|
}
|
|||
|
private bool readSignVisible = false;
|
|||
|
/// <summary>
|
|||
|
/// PaymentProcessing Window Is Visible
|
|||
|
/// </summary>
|
|||
|
public bool ReadSignVisible
|
|||
|
{
|
|||
|
get { return readSignVisible; }
|
|||
|
set { readSignVisible = value; PropertyChange("ReadSignVisible"); }
|
|||
|
}
|
|||
|
private bool paymentProcessingVisible = false;
|
|||
|
/// <summary>
|
|||
|
/// PaymentProcessing Window Is Visible
|
|||
|
/// </summary>
|
|||
|
public bool PaymentProcessingVisible
|
|||
|
{
|
|||
|
get { return paymentProcessingVisible; }
|
|||
|
set { paymentProcessingVisible = value; PropertyChange("PaymentProcessingVisible"); }
|
|||
|
}
|
|||
|
private bool processingErrorVisible = false;
|
|||
|
/// <summary>
|
|||
|
/// ProcessingError Window Is Visible
|
|||
|
/// </summary>
|
|||
|
public bool ProcessingErrorVisible
|
|||
|
{
|
|||
|
get { return processingErrorVisible; }
|
|||
|
set { processingErrorVisible = value; PropertyChange("ProcessingErrorVisible"); }
|
|||
|
}
|
|||
|
|
|||
|
private bool paymentSuccessVisible = false;
|
|||
|
/// <summary>
|
|||
|
/// Payment Success Window Is Visible
|
|||
|
/// </summary>
|
|||
|
public bool PaymentSuccessVisible
|
|||
|
{
|
|||
|
get { return paymentSuccessVisible; }
|
|||
|
set { paymentSuccessVisible = value; PropertyChange("PaymentSuccessVisible"); }
|
|||
|
}
|
|||
|
private List<M_Language> errorText;
|
|||
|
/// <summary>
|
|||
|
/// Process Error Text
|
|||
|
/// </summary>
|
|||
|
public List<M_Language> ErrorText
|
|||
|
{
|
|||
|
get { return errorText; }
|
|||
|
set { errorText = value; PropertyChange("ErrorText"); }
|
|||
|
}
|
|||
|
private bool isErrorBlink = false;
|
|||
|
/// <summary>
|
|||
|
/// Is Error Text Blink
|
|||
|
/// </summary>
|
|||
|
public bool IsErrorBlink
|
|||
|
{
|
|||
|
get { return isErrorBlink; }
|
|||
|
set { isErrorBlink = value; PropertyChange("IsErrorBlink"); }
|
|||
|
}
|
|||
|
private string formatedBarCode;
|
|||
|
/// <summary>
|
|||
|
/// Read Barcode Formated Text
|
|||
|
/// </summary>
|
|||
|
public string FormatedBarCode
|
|||
|
{
|
|||
|
get { return formatedBarCode; }
|
|||
|
set { formatedBarCode = value; PropertyChange("FormatedBarCode"); }
|
|||
|
}
|
|||
|
private string readBarCode;
|
|||
|
/// <summary>
|
|||
|
/// Read Barcode
|
|||
|
/// </summary>
|
|||
|
public string ReadBarCode
|
|||
|
{
|
|||
|
get { return readBarCode; }
|
|||
|
set { readBarCode = value; PropertyChange("ReadBarCode"); }
|
|||
|
}
|
|||
|
private double payments;
|
|||
|
/// <summary>
|
|||
|
/// Total Payments
|
|||
|
/// </summary>
|
|||
|
public double Payments
|
|||
|
{
|
|||
|
get { return payments; }
|
|||
|
set { payments = value; PropertyChange("Payments"); }
|
|||
|
}
|
|||
|
private string showPayment;
|
|||
|
/// <summary>
|
|||
|
/// Total Payments
|
|||
|
/// </summary>
|
|||
|
public string ShowPayment
|
|||
|
{
|
|||
|
get { return showPayment; }
|
|||
|
set { showPayment = value; PropertyChange("ShowPayment"); }
|
|||
|
}
|
|||
|
private double popupWidth = 1300d;
|
|||
|
/// <summary>
|
|||
|
/// Popup Whidth (For Calculate OK Button Width)
|
|||
|
/// </summary>
|
|||
|
public double PopupWidth
|
|||
|
{
|
|||
|
get { return popupWidth; }
|
|||
|
set { popupWidth = value; PropertyChange("PopupWidth"); }
|
|||
|
}
|
|||
|
private List<M_Language> cancelButtonText;
|
|||
|
/// <summary>
|
|||
|
/// Cancel Button Text
|
|||
|
/// </summary>
|
|||
|
public List<M_Language> CancelButtonText
|
|||
|
{
|
|||
|
get { return cancelButtonText; }
|
|||
|
set { cancelButtonText = value; PropertyChange("CancelButtonText"); }
|
|||
|
}
|
|||
|
|
|||
|
private double cancelButtonWidth = 650d;
|
|||
|
/// <summary>
|
|||
|
/// Cancel Button Width
|
|||
|
/// </summary>
|
|||
|
public double CancelButtonWidth
|
|||
|
{
|
|||
|
get { return cancelButtonWidth; }
|
|||
|
set { cancelButtonWidth = value; PropertyChange("CancelButtonWidth"); }
|
|||
|
}
|
|||
|
|
|||
|
private List<M_Language> okButtonText;
|
|||
|
/// <summary>
|
|||
|
/// OK Button Text
|
|||
|
/// </summary>
|
|||
|
public List<M_Language> OkButtonText
|
|||
|
{
|
|||
|
get { return okButtonText; }
|
|||
|
set { okButtonText = value; PropertyChange("OkButtonText"); }
|
|||
|
}
|
|||
|
private bool oKButtonEnabled = false;
|
|||
|
/// <summary>
|
|||
|
/// OK Button Enabled
|
|||
|
/// </summary>
|
|||
|
public bool OKButtonEnabled
|
|||
|
{
|
|||
|
get { return oKButtonEnabled; }
|
|||
|
set { oKButtonEnabled = value; PropertyChange("OKButtonEnabled"); }
|
|||
|
}
|
|||
|
|
|||
|
private double okButtonWidth = 650d;
|
|||
|
/// <summary>
|
|||
|
/// OK Button Width
|
|||
|
/// </summary>
|
|||
|
public double OKButtonWidth
|
|||
|
{
|
|||
|
get { return okButtonWidth; }
|
|||
|
set { okButtonWidth = value; PropertyChange("OKButtonWidth"); }
|
|||
|
}
|
|||
|
private string signData;
|
|||
|
/// <summary>
|
|||
|
/// SignData
|
|||
|
/// </summary>
|
|||
|
public string SignData
|
|||
|
{
|
|||
|
get { return signData; }
|
|||
|
set { signData = value; PropertyChange("SignData"); }
|
|||
|
}
|
|||
|
private string signFile;
|
|||
|
/// <summary>
|
|||
|
/// SignFile
|
|||
|
/// </summary>
|
|||
|
public string SignFile
|
|||
|
{
|
|||
|
get { return signFile; }
|
|||
|
set { signFile = value; PropertyChange("SignFile"); }
|
|||
|
}
|
|||
|
private bool useableSign;
|
|||
|
/// <summary>
|
|||
|
/// Useable Sign
|
|||
|
/// </summary>
|
|||
|
public bool UseableSign
|
|||
|
{
|
|||
|
get { return useableSign; }
|
|||
|
set { useableSign = value; PropertyChange("UseableSign"); }
|
|||
|
}
|
|||
|
private bool signEnd;
|
|||
|
/// <summary>
|
|||
|
/// Sign End
|
|||
|
/// </summary>
|
|||
|
public bool SignEnd
|
|||
|
{
|
|||
|
get { return signEnd; }
|
|||
|
set { signEnd = value; PropertyChange("SignEnd"); }
|
|||
|
}
|
|||
|
private bool signReset;
|
|||
|
/// <summary>
|
|||
|
/// Sign Reset
|
|||
|
/// </summary>
|
|||
|
public bool SignReset
|
|||
|
{
|
|||
|
get { return signReset; }
|
|||
|
set { signReset = value; PropertyChange("SignReset"); }
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 결제 처리 정보
|
|||
|
/// </summary>
|
|||
|
public M_PaymentReturn PaymentReturn { get; set; }
|
|||
|
/// <summary>
|
|||
|
/// OK Click Command
|
|||
|
/// </summary>
|
|||
|
public ICommand OkCommand { get; protected set; }
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Cancel Click Command
|
|||
|
/// </summary>
|
|||
|
public ICommand CancelCommand { get; protected set; }
|
|||
|
private LastPaymentsType paymentType = LastPaymentsType.None;
|
|||
|
public LastPaymentsType PaymentType
|
|||
|
{
|
|||
|
get { return paymentType; }
|
|||
|
set { paymentType = value; PropertyChange("PaymentType"); }
|
|||
|
}
|
|||
|
private PaymentWindowType paymentWindow = PaymentWindowType.None;
|
|||
|
/// <summary>
|
|||
|
/// Current View Window
|
|||
|
/// </summary>
|
|||
|
public PaymentWindowType PaymentWindow
|
|||
|
{
|
|||
|
get { return paymentWindow; }
|
|||
|
set { paymentWindow = value; PropertyChange("PaymentWindow"); }
|
|||
|
}
|
|||
|
public bool ImmediatelyClose { get; protected set; } = false;
|
|||
|
|
|||
|
private bool ProcessStart = false;
|
|||
|
private posLastPayments PosLastPayments = null;
|
|||
|
|
|||
|
private Task ProcessTask = null;
|
|||
|
private Task ProcessTask2 = null;
|
|||
|
private CancellationTokenSource TokenSource;
|
|||
|
private string certifyKey = string.Empty;
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region [ Ctor ]
|
|||
|
/// <summary>
|
|||
|
/// Ctor
|
|||
|
/// </summary>
|
|||
|
public VmPaymentProcess()
|
|||
|
{
|
|||
|
OkCommand = new Command(OkCommandHandler);
|
|||
|
CancelCommand = new Command(CancelCommandHandler);
|
|||
|
this.PropertyChanged += VmHappyPointCertify_PropertyChanged;
|
|||
|
|
|||
|
ProcessingGIF = ResourceManager.GetNximagePathAdd("ic_alert_ing2.gif", CommonValue.PBdesignImagesPath);
|
|||
|
SuccessImage = ResourceManager.GetNximagePathAdd("ic_alert_check.png", CommonValue.PBdesignImagesPath);
|
|||
|
ErrorImage = ResourceManager.GetNximagePathAdd("ic_alert_error.png", CommonValue.PBdesignImagesPath);
|
|||
|
HeaderText = Languages.GetMessages("LBL0026");
|
|||
|
|
|||
|
ProcessingMessageText = Languages.GetMessages("LBL0031");
|
|||
|
ProcessingGuide = Languages.GetMessages("LBL0140");
|
|||
|
ErrorGuide = Languages.GetMessages("LBL0028");
|
|||
|
ErrorText = new List<M_Language>();
|
|||
|
ShowLanguageType = CommonValue.CommonLanguageType;
|
|||
|
PaymentWindow = PaymentWindowType.PaymentStart;
|
|||
|
PosLastPayments = new posLastPayments();
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// Dispose()
|
|||
|
/// </summary>
|
|||
|
public new void Dispose()
|
|||
|
{
|
|||
|
this.TitileImage = string.Empty;
|
|||
|
this.ProcessingGIF = string.Empty;
|
|||
|
this.ErrorImage = string.Empty;
|
|||
|
this.PropertyChanged -= VmHappyPointCertify_PropertyChanged;
|
|||
|
if (TokenSource != null)
|
|||
|
{
|
|||
|
TokenSource.Cancel();
|
|||
|
}
|
|||
|
if (PosLastPayments != null)
|
|||
|
{
|
|||
|
PaymentProcessRemoveEvents();
|
|||
|
PosLastPayments.Dispose();
|
|||
|
PosLastPayments = null;
|
|||
|
}
|
|||
|
if (ProcessTask != null)
|
|||
|
{
|
|||
|
//ProcessTask.Dispose();
|
|||
|
ProcessTask = null;
|
|||
|
}
|
|||
|
base.Dispose();
|
|||
|
}
|
|||
|
#endregion Ctor
|
|||
|
|
|||
|
#region [ Methods ]
|
|||
|
private void PaymentProcessCreateEvents()
|
|||
|
{
|
|||
|
if (PosLastPayments != null)
|
|||
|
{
|
|||
|
PosLastPayments.ReadStart += posLastPayments_ReadStart;
|
|||
|
PosLastPayments.ReadEnd += posLastPayments_ReadEnd;
|
|||
|
PosLastPayments.SignStartEvent += posLastPayments_SignStartEvent;
|
|||
|
PosLastPayments.SignEndEvent += PosLastPayments_SignEndEvent;
|
|||
|
PosLastPayments.ErrorEvent += posLastPayments_ErrorEvent;
|
|||
|
PosLastPayments.ErrorMessageEvent += posLastPayments_ErrorMessageEvent;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void posLastPayments_SignStartEvent(object sender)
|
|||
|
{
|
|||
|
PaymentWindow = PaymentWindowType.ReadSign;
|
|||
|
}
|
|||
|
|
|||
|
private void PosLastPayments_SignEndEvent(object sender)
|
|||
|
{
|
|||
|
PaymentWindow = PaymentWindowType.PaymentProcessing;
|
|||
|
}
|
|||
|
|
|||
|
private void PaymentProcessRemoveEvents()
|
|||
|
{
|
|||
|
if (PosLastPayments != null)
|
|||
|
{
|
|||
|
PosLastPayments.ReadStart -= posLastPayments_ReadStart;
|
|||
|
PosLastPayments.ReadEnd -= posLastPayments_ReadEnd;
|
|||
|
PosLastPayments.SignStartEvent -= posLastPayments_SignStartEvent;
|
|||
|
PosLastPayments.SignEndEvent -= PosLastPayments_SignEndEvent;
|
|||
|
PosLastPayments.ErrorEvent -= posLastPayments_ErrorEvent;
|
|||
|
PosLastPayments.ErrorMessageEvent -= posLastPayments_ErrorMessageEvent;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void DoPaymentProcess()
|
|||
|
{
|
|||
|
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
#region 결제 처리 Task 처리
|
|||
|
PosLastPayments.NoSignLimitAmount = CommonValue.NoSignAmountMaxLimit;
|
|||
|
if (PosLastPayments != null)
|
|||
|
{
|
|||
|
TimerEnabled = false;
|
|||
|
SignReset = false;
|
|||
|
SignEnd = false;
|
|||
|
PaymentProcessCreateEvents();
|
|||
|
ProcessTask2 = new Task(() => PosLastPayments.StartCertifyProcessing(PaymentType, certifyKey, Payments));
|
|||
|
TokenSource = new CancellationTokenSource();
|
|||
|
ProcessTask2.Start();
|
|||
|
ProcessTask2.Wait();
|
|||
|
PaymentProcessRemoveEvents();
|
|||
|
PaymentWindow = PosLastPayments.ProcessOK ? PaymentWindowType.PaymentSuccess : PaymentWindowType.ProcessingError;
|
|||
|
TokenSource.Dispose();
|
|||
|
ProcessTask2.Dispose();
|
|||
|
ProcessTask2 = null;
|
|||
|
TokenSource = null;
|
|||
|
}
|
|||
|
#endregion
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
CommonLog.ErrorLogWrite(this, "DoPaymentProcess()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
TimerEnabled = true;
|
|||
|
}
|
|||
|
}
|
|||
|
#endregion Methods
|
|||
|
|
|||
|
#region [ Event Handlers ]
|
|||
|
|
|||
|
private void CancelCommandHandler(object obj)
|
|||
|
{
|
|||
|
switch (PaymentWindow)
|
|||
|
{
|
|||
|
case PaymentWindowType.ProcessingError:
|
|||
|
case PaymentWindowType.PaymentStart:
|
|||
|
TimerEnabled = false;
|
|||
|
ReturnValue = new M_PopupReturn
|
|||
|
{
|
|||
|
OKAnswer = false,
|
|||
|
TimeOut = false,
|
|||
|
ReturnLanguage = ShowLanguageType,
|
|||
|
PopupArgs = null
|
|||
|
};
|
|||
|
CanWindowClose = true;
|
|||
|
break;
|
|||
|
case PaymentWindowType.ReadSign:
|
|||
|
SignReset = true;
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
private void OkCommandHandler(object obj)
|
|||
|
{
|
|||
|
switch (PaymentWindow)
|
|||
|
{
|
|||
|
case PaymentWindowType.ProcessingError:
|
|||
|
PaymentWindow = PaymentWindowType.PaymentStart;
|
|||
|
break;
|
|||
|
case PaymentWindowType.PaymentSuccess:
|
|||
|
if (ProcessTask != null) ProcessTask.Wait();
|
|||
|
CanWindowClose = true;
|
|||
|
break;
|
|||
|
case PaymentWindowType.ReadSign:
|
|||
|
SignEnd = true;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
private void posLastPayments_ErrorMessageEvent(string ErrorString)
|
|||
|
{
|
|||
|
ErrorText = new List<M_Language>
|
|||
|
{
|
|||
|
new M_Language
|
|||
|
{
|
|||
|
Type = SupportLanguageType.ko,
|
|||
|
LanguageData = ErrorString.Replace("\n"," ").Replace("\r","")
|
|||
|
},
|
|||
|
};
|
|||
|
IsErrorBlink = true;
|
|||
|
}
|
|||
|
|
|||
|
private void posLastPayments_ErrorEvent(posLastPayments.ErrorCode _errorCode)
|
|||
|
{
|
|||
|
//TODO: 공통에 에러 메세지 등록 필요
|
|||
|
//ErrorText = Languages.GetMessages(_errorCode.ToString());
|
|||
|
var errTxt = string.Empty;
|
|||
|
|
|||
|
switch (_errorCode)
|
|||
|
{
|
|||
|
case posLastPayments.ErrorCode.LastPaymentsCardNumberError:
|
|||
|
errTxt = "카드를 리딩에 실패했습니다. \n다시 결제 버튼을 눌러 다시 시도하세요.";
|
|||
|
break;
|
|||
|
case posLastPayments.ErrorCode.LastPaymentsCardReadingError:
|
|||
|
errTxt = "카드를 리딩에 실패했습니다. \n다시 결제 버튼을 눌러 다시 시도하세요.";
|
|||
|
break;
|
|||
|
case posLastPayments.ErrorCode.LastPaymentsEncrtipError:
|
|||
|
errTxt = "암호화 에러가 발생했습니다.";
|
|||
|
break;
|
|||
|
case posLastPayments.ErrorCode.LastPaymentsNotInitailzedError:
|
|||
|
errTxt = "초기화 에러가 발생했습니다.";
|
|||
|
break;
|
|||
|
case posLastPayments.ErrorCode.LastPaymentsProcessingTimeOut:
|
|||
|
errTxt = "처리시간이 초과되었습니다. \n재결제 버튼을 눌러 다시 시도하세요.";
|
|||
|
break;
|
|||
|
case posLastPayments.ErrorCode.LastPaymentsUnknownError:
|
|||
|
errTxt = "에러가 발생했습니다.";
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
ErrorText = new List<M_Language>
|
|||
|
{
|
|||
|
new M_Language
|
|||
|
{
|
|||
|
Type = SupportLanguageType.ko,
|
|||
|
//LanguageData = _errorCode.ToString()
|
|||
|
LanguageData = errTxt
|
|||
|
},
|
|||
|
};
|
|||
|
IsErrorBlink = true;
|
|||
|
}
|
|||
|
|
|||
|
private void posLastPayments_ReadStart(object sender)
|
|||
|
{
|
|||
|
TimerEnabled = false;
|
|||
|
ProcessStart = true;
|
|||
|
switch (PaymentType)
|
|||
|
{
|
|||
|
case LastPaymentsType.IcCard:
|
|||
|
case LastPaymentsType.SsLgPay:
|
|||
|
case LastPaymentsType.CashBee:
|
|||
|
case LastPaymentsType.HappyGift:
|
|||
|
case LastPaymentsType.Tmoney:
|
|||
|
case LastPaymentsType.SpcEmployee:
|
|||
|
case LastPaymentsType.SmilePay:
|
|||
|
PaymentWindow = PaymentWindowType.PaymentProcessing;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void posLastPayments_ReadEnd(object sender)
|
|||
|
{
|
|||
|
ProcessStart = false;
|
|||
|
try
|
|||
|
{
|
|||
|
if (sender is posLastPayments getposLastPayments)
|
|||
|
{
|
|||
|
if (getposLastPayments.ProcessOK)
|
|||
|
{
|
|||
|
PaymentReturn = new M_PaymentReturn
|
|||
|
{
|
|||
|
IsProcessOK = true,
|
|||
|
PaymentsTotal = getposLastPayments.PaymentsValue,
|
|||
|
PaySEQ = getposLastPayments.PaySEQ,
|
|||
|
|
|||
|
};
|
|||
|
ReturnValue = new M_PopupReturn
|
|||
|
{
|
|||
|
OKAnswer = true,
|
|||
|
TimeOut = false,
|
|||
|
ReturnLanguage = ShowLanguageType,
|
|||
|
PopupArgs = PaymentReturn
|
|||
|
|
|||
|
};
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
CommonLog.ErrorLogWrite(this, "posLastPayments_ReadEnd()", "Fail", string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
private void VmHappyPointCertify_PropertyChanged(object sender, PropertyChangedEventArgs e)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
switch (e.PropertyName)
|
|||
|
{
|
|||
|
case "IsTimeout":
|
|||
|
if (IsTimeout)
|
|||
|
{
|
|||
|
#region 입력시간 초과시
|
|||
|
switch (PaymentWindow)
|
|||
|
{
|
|||
|
case PaymentWindowType.PaymentStart:
|
|||
|
case PaymentWindowType.ProcessingError:
|
|||
|
ReturnValue = new M_PopupReturn
|
|||
|
{
|
|||
|
OKAnswer = false,
|
|||
|
TimeOut = true,
|
|||
|
ReturnLanguage = ShowLanguageType,
|
|||
|
PopupArgs = null
|
|||
|
};
|
|||
|
break;
|
|||
|
}
|
|||
|
if (!ProcessStart) CanWindowClose = true;
|
|||
|
#endregion
|
|||
|
}
|
|||
|
break;
|
|||
|
case "PaymentWindow":
|
|||
|
#region 창 모두 안보이게 하기
|
|||
|
PaymentStartVisible = false;
|
|||
|
ReadSignVisible = false;
|
|||
|
PaymentProcessingVisible = false;
|
|||
|
ProcessingErrorVisible = false;
|
|||
|
PaymentSuccessVisible = false;
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 선택창 보이기
|
|||
|
switch (PaymentWindow)
|
|||
|
{
|
|||
|
case PaymentWindowType.PaymentStart:
|
|||
|
PaymentStartVisible = true;
|
|||
|
break;
|
|||
|
case PaymentWindowType.ReadSign:
|
|||
|
ReadSignVisible = true;
|
|||
|
break;
|
|||
|
case PaymentWindowType.PaymentProcessing:
|
|||
|
PaymentProcessingVisible = true;
|
|||
|
break;
|
|||
|
case PaymentWindowType.ProcessingError:
|
|||
|
ProcessingErrorVisible = true;
|
|||
|
break;
|
|||
|
case PaymentWindowType.PaymentSuccess:
|
|||
|
PaymentSuccessVisible = true;
|
|||
|
break;
|
|||
|
}
|
|||
|
#endregion
|
|||
|
break;
|
|||
|
case "PaymentType":
|
|||
|
switch (PaymentType)
|
|||
|
{
|
|||
|
case LastPaymentsType.IcCard:
|
|||
|
TitileImage = ResourceManager.GetNximagePathAdd("img_gif_card.gif", CommonValue.PBdesignImagesPath);
|
|||
|
ScanGuidText = Languages.GetMessages("LBL0084");
|
|||
|
break;
|
|||
|
case LastPaymentsType.SsLgPay:
|
|||
|
TitileImage = ResourceManager.GetNximagePathAdd("img_gif_pay.gif", CommonValue.PBdesignImagesPath);
|
|||
|
ScanGuidText = Languages.GetMessages("LBL0083");
|
|||
|
break;
|
|||
|
case LastPaymentsType.SmilePay:
|
|||
|
TitileImage = ResourceManager.GetNximagePathAdd("img_gif_barcode.gif", CommonValue.PBdesignImagesPath);
|
|||
|
ScanGuidText = Languages.GetMessages("LBL0082");
|
|||
|
break;
|
|||
|
}
|
|||
|
break;
|
|||
|
case "PaymentStartVisible":
|
|||
|
if (PaymentStartVisible)
|
|||
|
{
|
|||
|
#region 카드 또는 신용카드 리딩 처리
|
|||
|
InfoGuid1Text = new List<M_Language>();
|
|||
|
InfoGuid2Text = new List<M_Language>();
|
|||
|
InfoGuid1TextAlignment = TextAlignment.Left;
|
|||
|
CancelButtonText = Languages.GetMessages("BTN0033");
|
|||
|
CancelButtonWidth = PopupWidth;
|
|||
|
OKButtonWidth = 0;
|
|||
|
TimeOutSeconds = CommonValue.TimeOutSeconds;
|
|||
|
switch (PaymentType)
|
|||
|
{
|
|||
|
case LastPaymentsType.IcCard:
|
|||
|
case LastPaymentsType.SsLgPay:
|
|||
|
case LastPaymentsType.CashBee:
|
|||
|
case LastPaymentsType.HappyGift:
|
|||
|
case LastPaymentsType.Tmoney:
|
|||
|
case LastPaymentsType.SpcEmployee:
|
|||
|
if (ProcessTask != null) ProcessTask.Wait();
|
|||
|
ProcessTask = new Task(DoPaymentProcess);
|
|||
|
ProcessTask.Start();
|
|||
|
break;
|
|||
|
}
|
|||
|
#endregion
|
|||
|
}
|
|||
|
break;
|
|||
|
case "ReadSignVisible":
|
|||
|
if (ReadSignVisible)
|
|||
|
{
|
|||
|
ScanGuidText = Languages.GetMessages("LBL0072");
|
|||
|
InfoGuid1Text = Languages.GetMessages("LBL0066");
|
|||
|
InfoGuid2Text = new List<M_Language>
|
|||
|
{
|
|||
|
new M_Language
|
|||
|
{
|
|||
|
Type = SupportLanguageType.ko,
|
|||
|
LanguageData = "* 싸인이 너무 짧거나 길면 확인 버튼이 활성화 되지 않습니다."
|
|||
|
},
|
|||
|
new M_Language
|
|||
|
{
|
|||
|
Type = SupportLanguageType.en,
|
|||
|
LanguageData = "en* * * 싸인이 너무 짧거나 길면 확인 버튼이 활성화 되지 않습니다."
|
|||
|
},
|
|||
|
};
|
|||
|
CancelButtonText = Languages.GetMessages("BTN0007");
|
|||
|
CancelButtonWidth = PopupWidth / 2;
|
|||
|
OkButtonText = Languages.GetMessages("BTN0024");
|
|||
|
OKButtonWidth = PopupWidth / 2;
|
|||
|
OKButtonEnabled = false;
|
|||
|
}
|
|||
|
break;
|
|||
|
case "PaymentProcessingVisible":
|
|||
|
if (PaymentProcessingVisible)
|
|||
|
{
|
|||
|
if (PaymentType == LastPaymentsType.SmilePay)
|
|||
|
{
|
|||
|
//ScanGuidText = Languages.GetMessages("LBL0087");
|
|||
|
ProcessingMessageText = Languages.GetMessages("LBL0087");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ScanGuidText = Languages.GetMessages("LBL0032");
|
|||
|
}
|
|||
|
|
|||
|
InfoGuid1Text = new List<M_Language>();
|
|||
|
InfoGuid2Text = new List<M_Language>();
|
|||
|
OKButtonWidth = 0d;
|
|||
|
CancelButtonWidth = 0d;
|
|||
|
|
|||
|
if (!SignEnd)
|
|||
|
{
|
|||
|
switch (PaymentType)
|
|||
|
{
|
|||
|
case LastPaymentsType.SmilePay:
|
|||
|
case LastPaymentsType.AliPay:
|
|||
|
case LastPaymentsType.ZeroPay:
|
|||
|
if (ProcessTask != null) ProcessTask.Wait();
|
|||
|
ProcessTask = new Task(DoPaymentProcess);
|
|||
|
ProcessTask.Start();
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case "ProcessingErrorVisible":
|
|||
|
if (ProcessingErrorVisible)
|
|||
|
{
|
|||
|
#region 처리 실패 오류 창
|
|||
|
ScanGuidText = new List<M_Language>();
|
|||
|
InfoGuid1Text = new List<M_Language>();
|
|||
|
InfoGuid2Text = new List<M_Language>();
|
|||
|
InfoGuid1TextAlignment = TextAlignment.Left;
|
|||
|
CancelButtonText = Languages.GetMessages("BTN0003");
|
|||
|
CancelButtonWidth = PopupWidth / 2;
|
|||
|
OkButtonText = Languages.GetMessages("BTN0006");
|
|||
|
OKButtonWidth = PopupWidth / 2;
|
|||
|
OKButtonEnabled = true;
|
|||
|
TimeOutSeconds = 10d;
|
|||
|
#endregion
|
|||
|
}
|
|||
|
break;
|
|||
|
case "PaymentSuccessVisible":
|
|||
|
if (PaymentSuccessVisible)
|
|||
|
{
|
|||
|
if (PaymentType == LastPaymentsType.SmilePay)
|
|||
|
{
|
|||
|
ScanGuidText = Languages.GetMessages("LBL0087");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ScanGuidText = Languages.GetMessages("LBL0029");
|
|||
|
}
|
|||
|
|
|||
|
InfoGuid1Text = new List<M_Language>();
|
|||
|
InfoGuid2Text = new List<M_Language>();
|
|||
|
OKButtonWidth = 0d;
|
|||
|
CancelButtonWidth = 0d;
|
|||
|
ImmediatelyClose = true;
|
|||
|
TimeOutSeconds = 0d;
|
|||
|
}
|
|||
|
break;
|
|||
|
case "ReadBarCode":
|
|||
|
if (!ProcessStart)
|
|||
|
{
|
|||
|
switch (PaymentType)
|
|||
|
{
|
|||
|
case LastPaymentsType.SmilePay:
|
|||
|
case LastPaymentsType.AliPay:
|
|||
|
case LastPaymentsType.ZeroPay:
|
|||
|
switch (ReadBarCode.Length)
|
|||
|
{
|
|||
|
case 16:
|
|||
|
case 17:
|
|||
|
certifyKey = ReadBarCode.Substring(0, 16);
|
|||
|
FormatedBarCode = ReadBarCode.GetEncriptCardNo();
|
|||
|
PaymentWindow = PaymentWindowType.PaymentProcessing;
|
|||
|
break;
|
|||
|
default:
|
|||
|
FormatedBarCode = string.Empty;
|
|||
|
break;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case "UseableSign":
|
|||
|
OKButtonEnabled = UseableSign;
|
|||
|
break;
|
|||
|
case "SignData":
|
|||
|
if (PosLastPayments != null && !string.IsNullOrEmpty(SignData))
|
|||
|
{
|
|||
|
PosLastPayments.SignData = SignData;
|
|||
|
PosLastPayments.SignEndStatus = true;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
CommonLog.ErrorLogWrite(this, "VmHappyPointCertify_PropertyChanged()", "Fail", string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
|
|||
|
}
|
|||
|
}
|
|||
|
#endregion Event Handlers
|
|||
|
}
|
|||
|
|
|||
|
}
|