spc-kiosk-pb/Kiosk/Payments/SPC.Kiosk.Payments/posMobileHappyCoupon.cs
2019-06-16 14:12:09 +09:00

1111 lines
46 KiB
C#

using System;
using System.Data;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Cosmos.BaseFrame;
using Cosmos.UserFrame;
using Cosmos.ServiceProvider;
using Cosmos.Common;
using Cosmos.CommonManager;
using System.Threading;
using System.Collections;
using SPC.Kiosk.Common;
using SPC.Kiosk.Popup.Model;
namespace SPC.Kiosk.Payments
{
/// <summary>
/// POS HappyPoint Approval Process
/// </summary>
public class posMobileHappyCoupon : IDisposable
{
//CommonLog.ErrorLogWrite(this, "Ctor", "Fail", string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
#region [ Members ]
/// <summary>
/// HappyPointCertify ErrorCode
/// </summary>
public enum ErrorCode
{
MobileHappyCouponMobilePhoneNumberError,
MobileHappyCouponMobileCouponNumberError,
MobileHappyCouponMemInfoEncryptedCardNoError,
MobileHappyCouponNotInitailzedError,
MobileHappyCouponProcessingTimeOut,
MobileHappyCouponTotalAmount,
MobileHappyCouponCanUseCouponsIsZero,
MobileHappyCouponUnknownError,
}
/// <summary>
/// ErrorMessage Event
/// </summary>
/// <param name="LogString">반환 로그</param>
public delegate void ErrorMessageEventHandler(string ErrorString);
/// <summary>
/// 로그메세지 이벤트 반환용
/// </summary>
public event ErrorMessageEventHandler ErrorMessageEvent;
/// <summary>
/// Error 반환 Event
/// </summary>
/// <param name="errorCode">반환 Error Code</param>
public delegate void LogErrorHandler(ErrorCode errorCode);
/// <summary>
/// Error Code 이벤트 반환용
/// </summary>
public event LogErrorHandler ErrorEvent;
/// <summary>
/// IcReadStart Event
/// </summary>
/// <param name="sender"></param>
public delegate void IcReadStart(object sender);
/// <summary>
/// IcReadStart Event 반환용
/// </summary>
public event IcReadStart ReadStart;
/// <summary>
/// IcReadStart Event
/// </summary>
/// <param name="sender"></param>
public delegate void IcReadEnd(object sender);
/// <summary>
/// IcReadStart Event 반환용
/// </summary>
public event IcReadEnd ReadEnd;
private SManager sManager = null; // 이 객체를 통해 업무 Service 호출
private StateServer StateObject = null; // StateObject : StateServer Object (객체)
private PosStatus m_cPosStatus = null; // 기본정보 참조
private TranStatus m_cTrnStatus = null; // 거래정보 참조
private DeviceStatus m_cDevStatus = null; // 디바이스 관리
private IDataProcessUs m_cDataService = null;
private IDataCommonUs m_cDataCommon = null;
private IPaymentUs m_cMobileCoupon = null;
private string mPay_DC_Type = ""; // 결제 그룹 코드
private string mPay_DC_CD = ""; // 결제 상세 코드
private string m_sPosMenuKey = PosKey.MENU_KEY.MOBILE_COUPON_HAPPYCON; // 입력값 할인
private string[] m_aRecvdData = null;
/// <summary>
/// 상품정보 작업용
/// </summary>
private ArrayList m_aSaleItem = null;
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; // 할인
}
/// <summary>
/// 입력구분
/// </summary>
private string m_sInPutType = "";
/// <summary>
/// 입력데이터
/// </summary>
private string m_sInPutData = "";
/// <summary>
/// 마스킹데이터
/// </summary>
private string m_sInMaskData = "";
/// <summary>
/// 카드데이터(암호화)
/// </summary>
private string m_sInEncData = "";
/// <summary>
/// 서비스코드
/// </summary>
private string m_sServiceCode = "";
/// <summary>
/// 승인카드번호
/// </summary>
private string m_sAppCardNo = "";
/// <summary>
/// 조회 성공 여부
/// </summary>
private bool m_bSearchSuccess = false;
/// <summary>
/// POS 초기화 필요 유무
/// </summary>
public bool NeedInitModule { get; set; }
/// <summary>
/// 승인 수단
/// </summary>
public string CertifyKey { get; set; } = string.Empty;
/// <summary>
/// 마스크된 회원성명
/// </summary>
public string MemberName { get; protected set; } = string.Empty;
public string MemberNumber { get; protected set; } = string.Empty;
/// <summary>
/// SPC 임직원 유무
/// </summary>
public bool IsCompanyMember { get; protected set; }
/// <summary>
/// 적립 가능 유무
/// </summary>
public bool CanReservePoint { get; protected set; }
/// <summary>
/// 회원 등급
/// </summary>
public string MemberLevel { get; protected set; } = string.Empty;
/// <summary>
/// 회원 비밀번호
/// </summary>
public string MemberPassword { get; protected set; } = string.Empty;
/// <summary>
/// HappyApp 가입 고객
/// </summary>
public bool IsAppMamber { get; protected set; } = false;
/// <summary>
/// 단골 매장 유무
/// </summary>
public bool IsFavoriteStore { get; protected set; } = false;
/// <summary>
/// 회원 적립 Point
/// </summary>
public double MemberPoint { get; protected set; } = 0d;
/// <summary>
/// 회원 가용 Point
/// </summary>
public double UseablePoint { get; protected set; } = 0d;
/// <summary>
/// 승인 요청 포인트
/// </summary>
public double UseingPoint { get; set; } = 0d;
/// <summary>
/// 승인 포인트
/// </summary>
public double ApprovalPoint { get; protected set; } = 0d;
/// <summary>
/// Point 사용시 비번 필요 유무
/// </summary>
public bool NeedPassword { get; protected set; }
public double Payments { get; protected set; }
public long PaySEQ { get; protected set; }
/// <summary>
/// 인증 처리 성공 유무
/// </summary>
public bool ProcessOK
{
get { return m_bSearchSuccess; }
}
/// <summary>
/// Processing TimeOut
/// </summary>
public bool IsTimeout
{
set
{
if (value)
{
ErrorEvent(ErrorCode.MobileHappyCouponProcessingTimeOut);
}
}
}
public M_MobileCouponReturn CouponData { get; protected set; }
#endregion
#region [ Ctor && Dispose ]
/// <summary>
/// Ctor
/// </summary>
public posMobileHappyCoupon()
{
try
{
sManager = new SManager();
StateObject = (StateServer)StateServer.GetInstance();
NeedInitModule = StateObject.POS == null
|| StateObject.TRAN == null
|| StateObject.DEVICE == null;
if (!NeedInitModule)
{
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_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON);
m_cMobileCoupon = (IPaymentUs)sManager.InitServiceInstance(ServiceLists.BSV_PAYMENT.DLL, ServiceLists.BSV_PAYMENT.MOBILECOUPON_HAPPYCON);
}
}
catch (Exception ex)
{
CommonLog.ErrorLogWrite(this, "Ctor", "Fail", string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
}
}
/// <summary>
///
/// </summary>
public void Dispose()
{
try
{
InDataToZeroFill();
sManager = null;
StateObject = null;
m_cPosStatus = null; // POS 기본정보
m_cTrnStatus = null; // POS 거래정보
m_cDevStatus = null;
m_cDataService = null;
m_cDataCommon = null;
m_cMobileCoupon = null;
}
catch (Exception ex)
{
CommonLog.ErrorLogWrite(this, "Dispose", "Fail", string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
}
}
#endregion
#region [ Methods ]
/// <summary>
/// HappyPoint 회원 조회 (16 자리이면 Mobile BarCode, 그외는 전화 번호)
/// </summary>
/// <param name="_inputString"></param>
public void StartCertifyProcessing(string _inputString,double _payments)
{
try
{
CommonLog.InfoLogWrite(this, "StartCertifyProcessing()", "Start");
SendReadStart();
if (NeedInitModule)
{
Thread.Sleep(1000); //진행창 보이기 위한 딜레이
ErrorEvent(ErrorCode.MobileHappyCouponNotInitailzedError);
}
else
{
var startPorcess = false;
if (_inputString.Length > 6)
{
startPorcess = GetPrefixToPayTypeInfo(_inputString);
Payments = _payments;
}
else
{
SendErrLogEvent(ErrorCode.MobileHappyCouponMobileCouponNumberError);
}
//조회 전문 처리
if (startPorcess)
{
//SearchTxtInPut(PosConst.POS_INQ_MODE.SEARCH, "", "");
SearchTxtInPut(_inputString, _payments);
}
}
SendReadEnd();
CommonLog.InfoLogWrite(this, "StartCertifyProcessing()", string.Format("End : Result={0}", ProcessOK ? "OK" : "Fail"));
}
catch (Exception ex)
{
CommonLog.ErrorLogWrite(this, "StartCertifyProcessing()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
}
}
public void StartPaymentProcessing(M_MobileCouponReturn _mobileCouponReturn, double _payments)
{
try
{
CommonLog.InfoLogWrite(this, "StartPaymentProcessing()", "Start");
SendReadStart();
if (NeedInitModule)
{
Thread.Sleep(3000); //진행창 보이기 위한 딜레이
ErrorEvent(ErrorCode.MobileHappyCouponNotInitailzedError);
}
else
{
var startPorcess = false;
if (_mobileCouponReturn is M_MobileCouponReturn
&& _mobileCouponReturn.VirtureCoupons.Where(r=>r.RequestPrice > 0 ).Count() > 0)
{
CouponData = _mobileCouponReturn;
Payments = _payments;
startPorcess = true;
}
else
{
SendErrLogEvent(ErrorCode.MobileHappyCouponTotalAmount);
}
//승인 전문 처리
if (startPorcess)
{
CompleteTxtInPut();
}
}
SendReadEnd();
CommonLog.InfoLogWrite(this, "StartPaymentProcessing()", string.Format("End : Result={0}", ProcessOK ? "OK" : "Fail"));
}
catch (Exception ex)
{
CommonLog.ErrorLogWrite(this, "StartPaymentProcessing()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
}
}
#region Prefix에 Van
/// <summary>
/// Prefix에 의한 사용 Van 정보 조회
/// </summary>
/// <param name="sCardNo"></param>
/// <returns></returns>
private bool GetPrefixToPayTypeInfo(string sCardNo)
{
bool result = false;
try
{
if (sCardNo.Length == 0) return false;
// PreFix 검색
DataTable dtVanInfo = m_cDataCommon.SeletPrefixToPayTypeInfo(sCardNo);
if (dtVanInfo == null || dtVanInfo.Rows.Count <= 0)
{
SendErrLogEvent(ErrorCode.MobileHappyCouponMobileCouponNumberError);
result = false;
}
else
{
DataRow drVanInfo = dtVanInfo.Rows[0];
// 결제 그룹 코드
mPay_DC_Type = CmUtil.GetDataRowStr(drVanInfo, "PAY_DC_GRP_TYPE");
// 결제 상세 코드
mPay_DC_CD = CmUtil.GetDataRowStr(drVanInfo, "PAY_DC_CD");
result = true;
}
}
catch (Exception ex)
{
CommonLog.ErrorLogWrite(this, "GetPrefixToPayTypeInfo()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
result = false;
}
return result;
}
#endregion
#region CouponData
private MobileCouponType GetMobileCouponType(string _TypeCode)
{
MobileCouponType result = MobileCouponType.Normal;
try
{
switch (_TypeCode)
{
case "0":
result = MobileCouponType.Normal;
break;
case "1":
result = MobileCouponType.NormalValue;
break;
case "2":
result = MobileCouponType.CountLimit;
break;
case "3":
result = MobileCouponType.ValueLimit;
break;
case "4":
result = MobileCouponType.ValueFixed;
break;
default:
result = MobileCouponType.Normal;
break;
}
}
catch
{
result = MobileCouponType.Normal;
}
return result;
}
private string GetStringMobileCouponType(MobileCouponType _Type)
{
string result = "0";
try
{
switch (_Type)
{
case MobileCouponType.Normal:
result = "0";
break;
case MobileCouponType.NormalValue:
result = "1";
break;
case MobileCouponType.CountLimit:
result = "2";
break;
case MobileCouponType.ValueLimit:
result = "3";
break;
case MobileCouponType.ValueFixed:
result = "4";
break;
default:
result = "0";
break;
}
}
catch
{
result = "0";
}
return result;
}
private MobileCouponStatusType GetMobileCouponStatusType(string _TypeCode)
{
MobileCouponStatusType result = MobileCouponStatusType.CanNotUse;
try
{
switch (_TypeCode)
{
case "Y":
result = MobileCouponStatusType.CanUse;
break;
case "N":
result = MobileCouponStatusType.CanNotUse;
break;
case "D":
result = MobileCouponStatusType.Used;
break;
case "C":
result = MobileCouponStatusType.Cancel;
break;
case "R":
result = MobileCouponStatusType.Refound;
break;
default:
result = MobileCouponStatusType.CanNotUse;
break;
}
}
catch (Exception)
{
result = MobileCouponStatusType.CanNotUse;
}
return result;
}
private string GetNextData(ref int _index)
{
string result = string.Empty;
try
{
_index++;
if (m_aRecvdData.Length > _index)
{
result = m_aRecvdData[_index].Trim();
}
}
catch (Exception)
{
result = string.Empty;
}
return result;
}
private bool CouponDataCreate()
{
bool result = false;
try
{
int dataIndex = -1;
if (m_aRecvdData is string[] && m_aRecvdData.Length > 6)
{
if (GetNextData(ref dataIndex).Equals("0"))
{
GetNextData(ref dataIndex); // [1] 버림
CouponData = new M_MobileCouponReturn
{
Number = GetNextData(ref dataIndex), //[2]
Name = GetNextData(ref dataIndex), //[3]
TotalAmount = CmUtil.LongParse(GetNextData(ref dataIndex)), //[4]
IsOnlyAllUse = GetNextData(ref dataIndex).Equals("1"), //[5]
};
var virtureCouponCount = CmUtil.LongParse(GetNextData(ref dataIndex)); //[6]
var virtureCoupons = new List<M_MobileCouponDetail>();
for (int iLoop = 0; iLoop < virtureCouponCount; iLoop++)
{
var aVirtureCoupon = new M_MobileCouponDetail
{
Number = GetNextData(ref dataIndex),
Name = GetNextData(ref dataIndex),
BrandCode = GetNextData(ref dataIndex),
BrandName = GetNextData(ref dataIndex),
Type = GetMobileCouponType(GetNextData(ref dataIndex)),
Option = GetNextData(ref dataIndex).Equals("1")
? MobileCouponOptionType.ItemFixed
: MobileCouponOptionType.None,
ShowPrice = CmUtil.LongParse(GetNextData(ref dataIndex)),
ByePrice = CmUtil.LongParse(GetNextData(ref dataIndex)),
RemainPrice = CmUtil.LongParse(GetNextData(ref dataIndex)),
CanUsingPrice = CmUtil.LongParse(GetNextData(ref dataIndex)),
GroupNo = CmUtil.IntParse(GetNextData(ref dataIndex)),
GroupLimitUsingCount = CmUtil.IntParse(GetNextData(ref dataIndex)),
StartDate = CommonFunction.GetDate(GetNextData(ref dataIndex)),
EndDate = CommonFunction.GetDate(GetNextData(ref dataIndex)),
Status = GetMobileCouponStatusType(GetNextData(ref dataIndex)),
StatusDetail = GetNextData(ref dataIndex),
ItemCodeKey = GetNextData(ref dataIndex),
};
var itemCount = CmUtil.IntParse(GetNextData(ref dataIndex));
var itemCodes = new List<string>();
if (itemCount > 0)
{
for (int iLoop2 = 0; iLoop2 < itemCount; iLoop2++)
{
itemCodes.Add(GetNextData(ref dataIndex));
}
}
aVirtureCoupon.ItemCodes = itemCodes;
virtureCoupons.Add(aVirtureCoupon);
}
if (virtureCoupons.Where(r => r.Status.Equals(MobileCouponStatusType.CanUse)).Count() > 0)
{
CouponData.VirtureCoupons = virtureCoupons.OrderBy(r => r.Status).ToList();
result = true;
}
else
{
SendErrLogEvent(ErrorCode.MobileHappyCouponCanUseCouponsIsZero);
CommonLog.ErrorLogWrite(this, "CouponDataCreate()", "Not found useable Coupons", string.Format("{0} : {1}", CouponData.Name, CouponData.Number));
}
}
else
{
CommonLog.ErrorLogWrite(this, "CouponDataCreate()", "Fail !!", string.Format("{0}={1}", m_aRecvdData[0].Trim(), m_aRecvdData[1].Trim()));
}
}
else
{
CommonLog.ErrorLogWrite(this, "CouponDataCreate()", "Recive Data Length Fail !!");
}
}
catch (Exception ex)
{
CommonLog.ErrorLogWrite(this, "CouponDataCreate()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
result = false;
}
return result;
}
#endregion
/// <summary>
/// 조회 처리
/// </summary>
/// <returns></returns>
private void SearchTxtInPut(string _inputString, double _payments)
{
string sCoponinfo = "";
string sInPutType = "";
string sInPutData = "";
string sInEncData = "";
try
{
CommonLog.DebugLogWrite(this, "SearchTxtInPut()", "Start");
// 중복체크
//if (DataGridSetting(4, ref aRet, ref aRet2, ref aRet3) != UserCom.RST_OK) return sRet;
var sSearchType = PosConst.POS_INQ_MODE.SEARCH;
sInPutType = m_sInPutType;
sInPutData = m_sInPutData;
sInEncData = m_sInEncData;
if (m_sInEncData == "")
{
if (m_sInPutData == "")
{
sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_KEYIN_CP;
sInPutData = _inputString;
}
}
m_aRecvdData = null;
var sRet = m_cMobileCoupon.SearchPayment(new string[] { m_sPosMenuKey, sInPutType, sInPutData, sInPutData, _payments.ToString(), "", "", "", mPay_DC_Type, mPay_DC_CD, sSearchType, sCoponinfo }, ref m_aRecvdData);
if (sRet != UserCom.RST_OK)
{
InDataToZeroFill();
if (sRet == null || sRet.Equals(UserCom.RST_ERR))
{
SendErrLogEvent(ErrorCode.MobileHappyCouponUnknownError);
}
else
{
SendErrorMessageEvent(sRet);
}
}
else
{
m_bSearchSuccess = CouponDataCreate();
}
CommonLog.DebugLogWrite(this, "SearchTxtInPut()", string.Format("End : Result={0}", sRet));
}
catch (Exception ex)
{
CommonLog.ErrorLogWrite(this, "SearchTxtInPut()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
}
}
/// <summary>
/// 사용 승인 처리
/// </summary>
/// <returns></returns>
private void CompleteTxtInPut()
{
CommonLog.DebugLogWrite(this, "CompleteTxtInPut()", "Start");
string sProductiTem = string.Empty;
string sRet = UserCom.RST_ERR;
try
{
m_bSearchSuccess = false;
var sSendData = new StringBuilder();
var sCounponIfo = new StringBuilder();
bool biTemCheck = false;
// 상품정보
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());
}
var checkOK = true;
sSendData.Append(CmUtil.MidH(CouponData.VirtureCoupons.Where(r => r.Status.Equals(MobileCouponStatusType.CanUse)).Sum(r2=>r2.DiscountPrice).ToString(), 0, 10));
sSendData.Append(CmUtil.MidH(CouponData.VirtureCoupons.Where(r =>r.Status.Equals(MobileCouponStatusType.CanUse)).Count().ToString(), 0, 5));
foreach (var aCoupon in CouponData.VirtureCoupons)
{
if (aCoupon.DiscountPrice > 0)
{
if (CouponData.IsOnlyAllUse)
{
var checkGrooup = aCoupon.GroupNo;
var groupItemCount = CouponData.VirtureCoupons.Where(r => r.GroupNo.Equals(checkGrooup)
&& r.Status.Equals(MobileCouponStatusType.CanUse)).Count();
var usingIgtemCount = CouponData.VirtureCoupons.Where(r => r.GroupNo.Equals(checkGrooup) && r.RequestPrice > 0
&& r.Status.Equals(MobileCouponStatusType.CanUse)).Count();
if (usingIgtemCount < groupItemCount)
{
SendErrorMessageEvent(POS_MESSAGE.ERROR.MSG_0410);
checkOK = false;
break;
}
}
if (!string.IsNullOrEmpty(aCoupon.ItemCodeKey)
&& (aCoupon.Type.Equals(MobileCouponType.Normal)
|| aCoupon.Type.Equals(MobileCouponType.CountLimit)
|| aCoupon.Type.Equals(MobileCouponType.ValueFixed)
))
{
sRet = GetDCItemAmount(aCoupon.ItemCodeKey
, CouponData.Number
, aCoupon.Number
, m_cDataService.DoubleParse(aCoupon.DiscountPrice.ToString())
, aCoupon.Option.Equals(MobileCouponOptionType.ItemFixed) ? "1" : "0", ref sProductiTem);
if (sRet != UserCom.RST_OK && aCoupon.Option.Equals(MobileCouponOptionType.ItemFixed))
{
SendErrorMessageEvent(sRet);
checkOK = false;
break;
}
}
sSendData.Append(CmUtil.MidH(CouponData.Number, 0, 32)); //쿠폰번호
sSendData.Append(CmUtil.MidH(aCoupon.Number, 0, 32)); //가상쿠폰번호
sSendData.Append(CmUtil.MidH(aCoupon.DiscountPrice.ToString(), 0, 10)); //사용금액
sCounponIfo.Append(CmUtil.MidH(CouponData.Number, 0, 32)); //쿠폰번호
sCounponIfo.Append("|");
sCounponIfo.Append(CmUtil.MidH(aCoupon.Number, 0, 32)); //가상쿠폰번호
sCounponIfo.Append("|");
sCounponIfo.Append(GetStringMobileCouponType(aCoupon.Type)); //쿠폰종류
sCounponIfo.Append("@~");
if (aCoupon.Option.Equals(MobileCouponOptionType.ItemFixed)) biTemCheck = true;
}
}
if (checkOK)
{
if (biTemCheck == true)
{
sSendData.Append(CmUtil.MidH(m_aSaleItem.Count.ToString(), 0, 5)); // POS 상품갯수
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;// 지정취소
sSendData.Append(CmUtil.MidH(cSaleItem.ITEM_PLU_CD, 0, 32)); // POS 상품코드
// 전문 설정 오류 수정(2017.05.22)
sSendData.Append(CmUtil.MidH(cSaleItem.SALE_AMT.ToString(), 0, 10)); // POS 상품금액
//sSendData += m_cDataService.DoubleParse(CmUtil.MidH(cSaleItem.SALE_AMT.ToString(), 0, 10)); // POS 상품금액
}
}
else
{
sSendData.Append(CmUtil.MidH("0", 0, 5)); // POS 상품갯수
}
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 = CouponData.Number;
}
}
// 승인 처리
sRet = m_cMobileCoupon.SetPayment(new string[] { m_sPosMenuKey, sInPutType, sInPutData, sInPutData, "0", "", "", "", mPay_DC_Type, mPay_DC_CD, sSendData.ToString(), sCounponIfo.ToString(), sProductiTem });
if (sRet != UserCom.RST_OK)
{
InDataToZeroFill();
if (sRet == null || sRet.Equals(UserCom.RST_ERR))
{
SendErrLogEvent(ErrorCode.MobileHappyCouponUnknownError);
}
else
{
SendErrorMessageEvent(sRet);
}
}
else
{
CouponData.TotalUseAmount = CouponData.VirtureCoupons.Where(r => r.Status.Equals(MobileCouponStatusType.CanUse)).Sum(r2 => r2.DiscountPrice);
foreach (var aCoupon in CouponData.VirtureCoupons)
{
if (aCoupon.DiscountPrice > 0) aCoupon.PaySEQ = FindPaySEQ(aCoupon.Number);
}
m_bSearchSuccess = true;
}
}
sSendData.Remove(0, sSendData.Length);
sCounponIfo.Remove(0, sCounponIfo.Length);
}
catch (Exception ex)
{
CommonLog.ErrorLogWrite(this, "CompleteTxtInPut()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
}
CommonLog.DebugLogWrite(this, "CompleteTxtInPut()", "End");
}
private long FindPaySEQ(string _virtureCouponNo)
{
var result = -1L;
try
{
var alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
foreach (var aitem in alPayItem)
{
if (aitem is Column.TR_PAYMENT.DATA aPayTem)
{
if (aPayTem.PAY_WAY_CD.Trim().Equals(mPay_DC_Type)
&& aPayTem.PAY_DTL_CD_01.Trim().Equals(mPay_DC_CD)
&& aPayTem.OCCUR_ENTRY_09.Trim().Equals(_virtureCouponNo))
{
result = aPayTem.SEQ;
break;
}
}
}
}
catch
{
result = -1L;
}
return result;
}
#region ProductID로
/// <summary>
/// ProductID로 등록된 상품 체크
/// </summary>
/// <param name="sProductID"></param>
/// <param name="sCouponNo"></param>
/// <param name="sVCouponNo"></param>
/// <param name="nPayAmt"></param>
/// <param name="siTemCheck"></param>
/// <returns></returns>
public string GetDCItemAmount(string sProductID, string sCouponNo, string sVCouponNo, double nPayAmt, string sItemChgUse, 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 UserCom.RST_OK;
}
ITEM_PLU_CHECK iTemCheck = new ITEM_PLU_CHECK();
if (m_aSaleItem.Count <= 0)
{
return POS_MESSAGE.ERROR.MSG_0149;
}
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");
// 프로덕트 코드 미설정 오류로 인한 수정(2017.05.18)
//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);
}
//// 구매수량 체크
//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 > Payments)
{
return POS_MESSAGE.ERROR.MSG_0160;
}
// 가능한 상품 미존재시 && 타상품 교환 불가시
if (niTemSum <= 0 && sItemChgUse == "1")
{
return POS_MESSAGE.ERROR.MSG_0160;
}
// 프로덕트 정보 체크용
if (!string.IsNullOrEmpty(iTemCheck.sCouponNo) && 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)
{
CommonLog.ErrorLogWrite(this, "GetDCItemAmount()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
}
return sRet;
}
#endregion
#region
/// <summary>
/// ZeroFill 초기화
/// </summary>
private void InDataToZeroFill()
{
try
{
//여전법 대응!
//////////////////////////////////////////////////////////////////////////////////
CmUtil.ZeroFillClear(ref m_sInPutData);
CmUtil.ZeroFillClear(ref m_sInEncData);
CmUtil.ZeroFillClear(ref m_sInMaskData);
//////////////////////////////////////////////////////////////////////////////////
}
catch
{
}
}
#endregion
private void SendErrorMessageEvent(string _errorMessageString)
{
try
{
CommonLog.ErrorLogWrite(this, "SendErrorMessageEvent()", _errorMessageString);
ErrorMessageEvent(_errorMessageString);
}
catch
{
}
}
private void SendErrLogEvent(ErrorCode _errorCode)
{
try
{
CommonLog.DebugLogWrite(this, "SendErrLogEvent()", _errorCode.ToString());
ErrorEvent(_errorCode);
}
catch
{
}
}
private void SendReadStart()
{
try
{
CommonLog.DebugLogWrite(this, "SendReadStart()");
ReadStart(this);
}
catch
{
}
}
private void SendReadEnd()
{
try
{
CommonLog.DebugLogWrite(this, "SendReadEnd()");
ReadEnd(this);
}
catch
{
}
}
private void ClearCardInfo()
{
try
{
m_sInPutType = ""; // 입력구분
m_sInPutData = ""; // 입력데이터
m_sInMaskData = ""; // 마스킹
m_sInEncData = ""; // 카드데이터
m_sServiceCode = ""; // 서비스코드
m_sAppCardNo = ""; // 승인카드번호
m_bSearchSuccess = false;
}
catch
{
}
}
#endregion
}
}