using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Data;
using Cosmos.BaseFrame;
using Cosmos.UserFrame;
using Cosmos.ServiceProvider;
using Cosmos.Common;
using Cosmos.CommonManager;
/*-----------------------------------------------------------------------------------------------*/
// 설 명 : 캠페인 공통 처리
// 작 성 자 :
// 변경 이력 :
/*-----------------------------------------------------------------------------------------------*/
namespace Cosmos.Service
{
class CampaignBase
{
#region 변수 선언
protected SManager sManager = new SManager(); // 이 객체를 통해 업무 Service 호출
protected StateServer StateObject = (StateServer)StateServer.GetInstance(); // StateObject : StateServer Object (객체)
protected PosStatus m_cPosStatus = new PosStatus(); // 기본정보 참조
protected TranStatus m_cTrnStatus = new TranStatus(); // 거래정보 참조
///
/// 캠페인트란 아이템
///
protected ArrayList m_alTrSaleCpi = null;
///
/// 상품트란 아이템
///
protected ArrayList m_alTrPluItem = null;
///
/// 결제캠페인 적용정보
///
protected ArrayList m_alSaleCpiPay = null;
///
/// 캠페인 수량 조회 정보
///
protected ArrayList m_alSaleCpiQtyLmt = null;
///
/// 캠페인 조건 아이템
///
protected static Hashtable m_htMstSaleCpi = new Hashtable();
protected static ArrayList m_alMstSaleCpi = new ArrayList();
///
/// 캠페인 카드 마스터
///
protected static ArrayList m_alMstCpiCard = new ArrayList();
///
/// 캠페인 출력메시지 마스터
///
protected static ArrayList m_alMstCpiPrtMsg = new ArrayList();
///
/// 거래데이터 합계금액 계산 및 관리
///
protected IDataProcessUs m_cDataService = null;
///
/// 판매공통 모듈
///
protected IDataCommonUs m_cDataCommon = null;
///
/// 마스터 인터페이스
///
protected IMasterUs m_cMstService = null;
///
/// 고객디스플레이 관리
///
protected ICustDisplayUs m_cCustDisp = null;
///
/// HP포인트 고객번호
///
protected string m_sHpCustID = "";
///
/// 실효포인트
///
protected double m_nHpExpPoint = 0;
#endregion
#region 생성자
public CampaignBase()
{
m_cPosStatus = (PosStatus)StateObject.POS; // POS 기본정보
m_cTrnStatus = (TranStatus)StateObject.TRAN; // POS 거래정보
m_alTrSaleCpi = (ArrayList)StateObject.GetItemObject(Column.TR_SALE_CPI_RSLT.ITEM); // 캠페인트란 아이템
m_alTrPluItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM); // 상품 아이템
m_alSaleCpiPay = (ArrayList)StateObject.GetItemObject(Column.SALE_CPI_PAY.ITEM); // 캠페인결제정보
m_alSaleCpiQtyLmt = (ArrayList)StateObject.GetItemObject(Column.SALE_CPI_PAY.ITEM); // 수량제한 캠페인 조회 정보
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_cMstService = (IMasterUs)sManager.InitServiceInstance(ServiceLists.ASV_MASTER.DLL, ServiceLists.ASV_MASTER.POS_MASTER);
m_cCustDisp = (ICustDisplayUs)sManager.InitServiceInstance(ServiceLists.ASV_CUSTDISPLAY.DLL, ServiceLists.ASV_CUSTDISPLAY.CUST_DISPLAY);
}
#endregion
#region CheckCampaignDateTime 캠페인 적용일자 및 시간 체크
///
/// 캠페인 적용일자 및 시간 체크
///
///
///
public bool CheckCampaignDateTime(Column.MST_SALE_CPI.DATA cMstSaleCpi)
{
try
{
// 행사기간 체크
if (CmUtil.LongParse(cMstSaleCpi.STARTDAY) > CmUtil.LongParse(m_cTrnStatus.Head.SysYmd)
|| CmUtil.LongParse(cMstSaleCpi.FNSHDAY) < CmUtil.LongParse(m_cTrnStatus.Head.SysYmd)) return false;
DateTime dt = new DateTime(int.Parse(m_cTrnStatus.Head.SysYmd.Substring(0, 4)), int.Parse(m_cTrnStatus.Head.SysYmd.Substring(4, 2)), int.Parse(m_cTrnStatus.Head.SysYmd.Substring(6, 2)));
// REPT_TYPE(반복 형태) => 1:매주, 2:매월
if (cMstSaleCpi.REPT_APPNT_TYPE == "1")
{
// 반복 주차 체크
if (cMstSaleCpi.REPT_WEEK.Trim().Length > 0)
{
int nWeek = 0;
int nDay = int.Parse(m_cTrnStatus.Head.SysYmd.Substring(6, 2)) - (int)dt.DayOfWeek;
while (nDay > 1)
{
nDay -= 7;
nWeek++;
}
if (nWeek >= 5) nWeek = 4;
if (cMstSaleCpi.REPT_WEEK.Substring(nWeek, 1) == "0") return false;
}
}
if (cMstSaleCpi.REPT_APPNT_TYPE == "2")
{
// 반복일자 체크
if (cMstSaleCpi.REPT_DT.Trim().Length > 0)
{
if (int.Parse(cMstSaleCpi.REPT_DT) != int.Parse(m_cTrnStatus.Head.SysYmd.Substring(6, 2))) return false;
}
}
// 캠페인 시간 마스터 체크
bool bCpiHour = true;
if (cMstSaleCpi.alDATA_HOUR.Count > 0)
{
bCpiHour = false;
foreach (Column.MST_SALE_CPI.DATA_HOUR cMstCpiHour in cMstSaleCpi.alDATA_HOUR)
{
if (CmUtil.IntParse(cMstCpiHour.DOW_DIV) != (int)dt.DayOfWeek + 1) continue;
//#14375 PB 카페신촌 - 19일 스마일페이 행사 할인안된이유 확인요청 start,phj
//캠페인 시간체크 시 시스템 시간으로 체크하도록 변경
//기존
//if (CmUtil.IntParse(cMstCpiHour.START_HOUR) > CmUtil.IntParse(m_cTrnStatus.Head.PayHms.Substring(0, 4))
// || CmUtil.IntParse(cMstCpiHour.FNSH_HOUR) < CmUtil.IntParse(m_cTrnStatus.Head.PayHms.Substring(0, 4))) continue;
//변경
string sNowHour = DateTime.Now.ToString("HHmm");
if (CmUtil.IntParse(cMstCpiHour.START_HOUR) > CmUtil.IntParse(sNowHour) ||
CmUtil.IntParse(cMstCpiHour.FNSH_HOUR) < CmUtil.IntParse(sNowHour))
{
continue;
}
//#14375 PB 카페신촌 - 19일 스마일페이 행사 할인안된이유 확인요청 end,phj
bCpiHour = true;
}
}
if (bCpiHour == false) return false;
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 공통 상품행사 계산
///
/// 상품별 상품 할인
///
///
/// 결제금액
///
public double CampaignPluItemDiscount(Column.MST_SALE_CPI.DATA cMstSaleCpi, double nPayAmt)
{
return CampaignPluItemDiscount(cMstSaleCpi, nPayAmt, PosConst.PAY_DC_TYPE.DC);
}
///
/// 상품별 상품 할인
///
///
/// 결제금액
/// 결제할인구분
///
public double CampaignPluItemDiscount(Column.MST_SALE_CPI.DATA cMstSaleCpi, double nPayAmt, string sPayDcDiv)
{
double nTotSaleAmt = 0, nTotDisAmt = 0;
double nSaleAmt = 0, nDisAmt = 0;
long nTotDisQty = 0, nSaleQty = 0, nDisQty = 0;
//#20171206 17크리스마스캠페인 start, 20171218
double nTotCampAmt = 0;
//#20171206 17크리스마스캠페인 end, 20171218
try
{
if (cMstSaleCpi.alDATA_COMPNT.Count == 0) return 0;
Column.MST_SALE_CPI.DATA_COMPNT cMstCpiCompnt = (Column.MST_SALE_CPI.DATA_COMPNT)cMstSaleCpi.alDATA_COMPNT[0];
// 대상 상품 금액 획득
GetCampaignSaleQtyAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", ref nSaleQty, ref nSaleAmt, sPayDcDiv);
if (nSaleQty == 0 && nSaleAmt == 0) return 0;
// 캠페인 성립금액 구분 체크
if (CheckCampaignReqAmt(cMstSaleCpi, "", nSaleQty, nSaleAmt ) == false) return 0;
for (int i = 0; i < m_alTrPluItem.Count; i++)
{
Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)m_alTrPluItem[i];
if (cSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue; // 지정취소
// 상품별 행사 기적용 여부 체크(상품별 행사는 상품별로 한번만 체크)
bool bExist = false;
for (int j = 0; j < i; j++)
{
Column.TR_PLU.DATA cAgoItem = (Column.TR_PLU.DATA)m_alTrPluItem[j];
if (cAgoItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cAgoItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue; // 지정취소
if ( cSaleItem.SUB_SHOP_CD == cAgoItem.SUB_SHOP_CD && cSaleItem.ITEM_PLU_CD == cAgoItem.ITEM_PLU_CD)
{
bExist = true;
break;
}
}
if (bExist == true) continue;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
if (cMstSaleCpi.CPI_CD == cTrSaleCpi.CPI_CD)
{
// 대상 상품 금액 획득
double nPrice = GetCampaignSaleQtyAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", cTrSaleCpi.SUB_SHOP_CD + cTrSaleCpi.ITEM_PLU_CD, ref nSaleQty, ref nSaleAmt, sPayDcDiv);
if (nSaleQty <= 0 && nSaleAmt <= 0) continue;
// 캠페인 구성 자격 구분에 따른 대상 상품수량 획득
nDisQty = 0;
if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MATCH_QTY) // 수량
{
if (cMstCpiCompnt.QTY_AMT == 0) cMstCpiCompnt.QTY_AMT = 1;
nDisQty = nSaleQty /(long)cMstCpiCompnt.QTY_AMT;
// 결제캠페인 최소 결제금액 체크
if (nPayAmt > 0)
{
if (nTotSaleAmt == 0 && nPayAmt < CmUtil.DoubleMultiplication(cMstCpiCompnt.QTY_AMT, nPrice)) continue;
while (nDisQty > 0)
{
if (nPayAmt < CmUtil.DoubleAdd(nTotSaleAmt, CmUtil.DoubleMultiplication(nDisQty * (long)cMstCpiCompnt.QTY_AMT, nPrice)))
nDisQty--;
else
break;
}
if (nDisQty == 0) continue;
}
if (nSaleQty != nDisQty * (long)cMstCpiCompnt.QTY_AMT)
{
nSaleAmt = CmUtil.DoubleMultiplication(nDisQty * (long)cMstCpiCompnt.QTY_AMT, nPrice);
}
}
else
{
if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MIN_AMT) // 금액
{
if (nSaleAmt >= cMstCpiCompnt.QTY_AMT) nDisQty = nSaleQty;
// 결제캠페인 최소 결제금액 체크
if (nPayAmt > 0 && nTotSaleAmt == 0 && nPayAmt < cMstCpiCompnt.QTY_AMT) continue;
}
else if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MIN_QTY) // 최소수량
{
if (nSaleQty >= (long)cMstCpiCompnt.QTY_AMT) nDisQty = nSaleQty;
// 결제캠페인 최소 결제금액 체크
if (nPayAmt > 0 && nTotSaleAmt == 0 && nPayAmt < CmUtil.DoubleMultiplication(cMstCpiCompnt.QTY_AMT, nPrice)) continue;
}
// 결제캠페인 결제금액 체크
if (nPayAmt > 0)
{
//#20171206 17크리스마스캠페인 start, 20171218
//기존
/*
while (nDisQty > 0)
{
if (nPayAmt < CmUtil.DoubleAdd(nTotSaleAmt, CmUtil.DoubleMultiplication(nDisQty, nPrice)))
nDisQty--;
else
break;
}
*/
//변경
nTotCampAmt = nTotCampAmt + CmUtil.DoubleMultiplication(nDisQty, nPrice);
if (nTotCampAmt > nPayAmt)
{
ClearCampaginItem(cMstSaleCpi.CPI_CD);
return 0;
}
//#20171206 17크리스마스캠페인 end, 20171218
if (nDisQty == 0) continue;
if (nSaleQty != nDisQty) nSaleAmt = CmUtil.DoubleMultiplication(nDisQty, nPrice);
}
}
if (nDisQty == 0) continue;
// 캠페인 제한 수량 체크
nDisQty = CheckCampaignQtyLimit(cMstSaleCpi, nTotDisQty, nDisQty);
if (nDisQty <= 0) continue;
if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MATCH_QTY)
{
nDisAmt = SetCampaignSaleQtyAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", cTrSaleCpi.SUB_SHOP_CD + cTrSaleCpi.ITEM_PLU_CD, nDisQty * (long)cMstCpiCompnt.QTY_AMT, cMstCpiCompnt.CPI_DC_TYPE, 0, sPayDcDiv);
if (nDisAmt == 0 && cMstCpiCompnt.CPI_DC_TYPE.Trim() != "" && cMstCpiCompnt.DC_RATE_QTY_AMT > 0)
{
if (cMstCpiCompnt.CPI_DC_TYPE == ItemConst.CPI_DC_TYPE.RATE)
{
nDisAmt = CmUtil.MathAmtPercent(nSaleAmt, cMstCpiCompnt.DC_RATE_QTY_AMT);
nDisAmt = CmUtil.MathRounds(nDisAmt, m_cPosStatus.Mst.DcRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.DcRudDwLoc));
}
else
{
nDisAmt = CmUtil.DoubleMultiplication(nDisQty, cMstCpiCompnt.DC_RATE_QTY_AMT);
}
nDisAmt = SetCampaignSaleDiv(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", cTrSaleCpi.SUB_SHOP_CD + cTrSaleCpi.ITEM_PLU_CD, nDisQty * (long)cMstCpiCompnt.QTY_AMT, nDisAmt, sPayDcDiv);
}
}
else
{
nDisAmt = SetCampaignSaleQtyAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", cTrSaleCpi.SUB_SHOP_CD + cTrSaleCpi.ITEM_PLU_CD, nDisQty, cMstCpiCompnt.CPI_DC_TYPE, 0, sPayDcDiv);
if (nDisAmt == 0 && cMstCpiCompnt.CPI_DC_TYPE.Trim() != "" && cMstCpiCompnt.DC_RATE_QTY_AMT > 0)
{
if (cMstCpiCompnt.CPI_DC_TYPE == ItemConst.CPI_DC_TYPE.RATE)
{
nDisAmt = CmUtil.MathAmtPercent(nSaleAmt, cMstCpiCompnt.DC_RATE_QTY_AMT);
nDisAmt = CmUtil.MathRounds(nDisAmt, m_cPosStatus.Mst.DcRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.DcRudDwLoc));
}
else
{
nDisAmt = CmUtil.DoubleMultiplication(nDisQty, cMstCpiCompnt.DC_RATE_QTY_AMT);
}
nDisAmt = SetCampaignSaleDiv(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", cTrSaleCpi.SUB_SHOP_CD + cTrSaleCpi.ITEM_PLU_CD, nDisQty, nDisAmt, sPayDcDiv);
}
}
nTotSaleAmt = CmUtil.DoubleAdd(nTotSaleAmt, nSaleAmt);
nTotDisAmt = CmUtil.DoubleAdd(nTotDisAmt, nDisAmt);
nTotDisQty += nDisQty;
break;
}
}
}
// 실효100% 행사 체크
nTotDisAmt = CheckCampaignExpPointAll(cMstSaleCpi, nTotSaleAmt, nTotDisAmt);
}
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 nTotDisAmt;
}
///
/// 상품합산 할인
///
///
///
///
public double CampaignPluSumDiscount(Column.MST_SALE_CPI.DATA cMstSaleCpi, double nPayAmt)
{
return CampaignPluSumDiscount(cMstSaleCpi, nPayAmt, PosConst.PAY_DC_TYPE.DC);
}
///
/// 상품합산 할인
///
///
///
///
///
public double CampaignPluSumDiscount(Column.MST_SALE_CPI.DATA cMstSaleCpi, double nPayAmt, string sPayDcDiv)
{
double nSaleAmt = 0, nDisAmt = 0;
long nSaleQty = 0, nDisQty = 0;
long nCompntRow = -1, nCompntQty = 0; // 구성자격구분 적용 행
double nCompntAmt = 0, nDisSaleAmt = 0;
try
{
// 대상 상품 금액 획득
double nPrice = GetCampaignSaleQtyAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", ref nSaleQty, ref nSaleAmt, sPayDcDiv);
if (nSaleQty == 0 && nSaleAmt == 0) return 0;
// 캠페인 성립금액 구분 체크
if (CheckCampaignReqAmt(cMstSaleCpi, "", nSaleQty, nSaleAmt) == false) return 0;
// 구성 자격 구분 체크
Column.MST_SALE_CPI.DATA_COMPNT cMstCpiCompnt;
for (int i = 0; i < cMstSaleCpi.alDATA_COMPNT.Count; i++)
{
cMstCpiCompnt = (Column.MST_SALE_CPI.DATA_COMPNT)cMstSaleCpi.alDATA_COMPNT[i];
nCompntQty = 0;
nCompntAmt = nSaleAmt;
// 캠페인 구성 자격 구분에 따른 대상 상품수량 획득
if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MATCH_QTY) // 수량
{
if (cMstCpiCompnt.QTY_AMT == 0) cMstCpiCompnt.QTY_AMT = 1;
nCompntQty = nSaleQty / (long)cMstCpiCompnt.QTY_AMT;
// 결제캠페인 최소 결제금액 체크
if (nPayAmt > 0 && nPayAmt < nCompntAmt)
{
while (nCompntQty > 0)
{
nCompntAmt = GetCampaignMaxQtyToSaleAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", nCompntQty * (long)cMstCpiCompnt.QTY_AMT, sPayDcDiv);
if (nPayAmt < nCompntAmt)
nCompntQty--;
else
break;
}
}
if (nSaleQty != nCompntQty * (long)cMstCpiCompnt.QTY_AMT)
{
nCompntAmt = GetCampaignMaxQtyToSaleAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", nCompntQty * (long)cMstCpiCompnt.QTY_AMT, sPayDcDiv);
}
}
else
{
if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MIN_AMT) // 금액
{
if (nSaleAmt >= cMstCpiCompnt.QTY_AMT) nCompntQty = nSaleQty;
// 결제캠페인 최소 결제금액 체크
if (nPayAmt > 0 && nPayAmt < cMstCpiCompnt.QTY_AMT) break;
}
else if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MIN_QTY) // 최소수량
{
if (nSaleQty >= (long)cMstCpiCompnt.QTY_AMT) nCompntQty = nSaleQty;
// 결제캠페인 최소 결제금액 체크
if (nPayAmt > 0 && nPayAmt < nCompntAmt)
{
nCompntAmt = GetCampaignMaxQtyToSaleAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", (long)cMstCpiCompnt.QTY_AMT, sPayDcDiv);
if (nPayAmt < nCompntAmt) break;
}
}
// 결제캠페인 결제금액 체크
if (nPayAmt > 0)
{
while (nCompntQty > 0)
{
nCompntAmt = GetCampaignMaxQtyToSaleAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", nCompntQty, sPayDcDiv);
if (nPayAmt < nCompntAmt)
nCompntQty--;
else
break;
}
}
}
if (nCompntQty == 0) break;
// 구성 자격 적용 행
nCompntRow = i;
nDisQty = nCompntQty; // 할인대상수량
nDisSaleAmt = nCompntAmt; // 할인대상금액
}
if (nCompntRow == -1) return 0;
cMstCpiCompnt = (Column.MST_SALE_CPI.DATA_COMPNT)cMstSaleCpi.alDATA_COMPNT[(int)nCompntRow];
if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MATCH_QTY)
{
// 수량 단위로 캠페인 적용
if (cMstCpiCompnt.CPI_DC_TYPE == ItemConst.CPI_DC_TYPE.RATE)
{
nDisAmt = CmUtil.MathAmtPercent(nDisSaleAmt, cMstCpiCompnt.DC_RATE_QTY_AMT);
nDisAmt = CmUtil.MathRounds(nDisAmt, m_cPosStatus.Mst.DcRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.DcRudDwLoc));
if (cMstCpiCompnt.DC_MAX_AMT > 0 && cMstCpiCompnt.DC_MAX_AMT < nDisAmt) nDisAmt = cMstCpiCompnt.DC_MAX_AMT;
}
else if (cMstCpiCompnt.CPI_DC_TYPE == ItemConst.CPI_DC_TYPE.AMT)
{
nDisAmt = CmUtil.DoubleMultiplication(nDisQty, cMstCpiCompnt.DC_RATE_QTY_AMT);
}
else
{
nDisSaleAmt = GetCampaignMaxQtyToSaleAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", nDisQty * (long)cMstCpiCompnt.QTY_AMT, sPayDcDiv);
nDisAmt = CmUtil.DoubleSubtraction(nDisSaleAmt, CmUtil.DoubleMultiplication(nDisQty, cMstCpiCompnt.DC_RATE_QTY_AMT));
if (nDisAmt < 0) nDisAmt = 0;
}
nDisAmt = SetCampaignSaleDiv(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", nDisQty * (long)cMstCpiCompnt.QTY_AMT, nDisAmt, sPayDcDiv);
}
else
{
if (cMstCpiCompnt.CPI_DC_TYPE == ItemConst.CPI_DC_TYPE.RATE)
{
nDisAmt = CmUtil.MathAmtPercent(nDisSaleAmt, cMstCpiCompnt.DC_RATE_QTY_AMT);
nDisAmt = CmUtil.MathRounds(nDisAmt, m_cPosStatus.Mst.DcRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.DcRudDwLoc));
if (cMstCpiCompnt.DC_MAX_AMT > 0 && cMstCpiCompnt.DC_MAX_AMT < nDisAmt) nDisAmt = cMstCpiCompnt.DC_MAX_AMT;
}
else
{
nDisAmt = cMstCpiCompnt.DC_RATE_QTY_AMT;
}
nDisAmt = SetCampaignSaleDiv(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", 0, nDisAmt, sPayDcDiv);
}
// 실효100% 행사 체크
nDisAmt = CheckCampaignExpPointAll(cMstSaleCpi, nDisSaleAmt, nDisAmt);
}
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 nDisAmt;
}
///
/// M+N 행사
///
///
///
///
public double CampaignPlusOneDiscount(Column.MST_SALE_CPI.DATA cMstSaleCpi, double nPayAmt)
{
return CampaignPlusOneDiscount(cMstSaleCpi, nPayAmt, PosConst.PAY_DC_TYPE.DC);
}
///
/// M+N 행사
///
///
///
///
///
public double CampaignPlusOneDiscount(Column.MST_SALE_CPI.DATA cMstSaleCpi, double nPayAmt, string sPayDcDiv)
{
double nSaleAmt = 0, nDisAmt = 0;
long nSaleQty = 0, nDisQty = 0, nCpiQty = 0;
try
{
if (cMstSaleCpi.alDATA_COMPNT.Count == 0) return 0;
Column.MST_SALE_CPI.DATA_COMPNT cMstCpiCompnt = (Column.MST_SALE_CPI.DATA_COMPNT)cMstSaleCpi.alDATA_COMPNT[0];
double nPrice = GetCampaignSaleQtyAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", ref nSaleQty, ref nSaleAmt, sPayDcDiv);
if (nSaleQty == 0 && nSaleAmt == 0) return 0;
// 캠페인 성립금액 구분 체크
if (CheckCampaignReqAmt(cMstSaleCpi, "", nSaleQty, nSaleAmt) == false) return 0;
if (cMstCpiCompnt.QTY_AMT == 0 || cMstCpiCompnt.DC_RATE_QTY_AMT == 0) return 0;
// 행사 성립수량(M+N);
nCpiQty = (long)cMstCpiCompnt.QTY_AMT + (long)cMstCpiCompnt.DC_RATE_QTY_AMT;
// +N 수량
nDisQty = nSaleQty / nCpiQty;
if (nPayAmt > 0) // 카드행사
{
while (nDisQty > 0)
{
if (nPayAmt < CmUtil.DoubleMultiplication(nDisQty * nCpiQty, nPrice))
nDisQty--;
else
break;
}
}
if (nDisQty == 0) return 0;
// 조건수량 행사 적용
SetCampaignQtyDiv(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", nDisQty * (long)cMstCpiCompnt.QTY_AMT, sPayDcDiv);
// 증정수량 행사 적용
nDisAmt = SetCampaignSaleFreeGiftPlusN(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", nDisQty * (long)cMstCpiCompnt.DC_RATE_QTY_AMT, false, sPayDcDiv);
// 실효100% 행사 체크
nDisAmt = CheckCampaignExpPointAll(cMstSaleCpi, nSaleAmt, nDisAmt);
}
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 nDisAmt;
}
///
/// 연계(결합) 할인
///
///
///
///
public double CampaignLinkPluDiscount(Column.MST_SALE_CPI.DATA cMstSaleCpi, double nPayAmt)
{
return CampaignLinkPluDiscount(cMstSaleCpi, nPayAmt, PosConst.PAY_DC_TYPE.DC);
}
///
/// 연계(결합) 할인
///
///
///
///
public double CampaignLinkPluDiscount(Column.MST_SALE_CPI.DATA cMstSaleCpi, double nPayAmt, string sPayDcDiv)
{
double nTotSaleAmt = 0, nTotDisAmt = 0, nTotSetAmt = 0;
double nSaleAmt = 0, nDisAmt = 0;
long nSaleQty = 0, nDisQty = 0, nMatchQty = 0;
try
{
GetCampaignSaleQtyAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", ref nSaleQty, ref nSaleAmt, sPayDcDiv);
if (nSaleQty == 0 && nSaleAmt == 0) return 0;
// 캠페인 성립금액 구분 체크
if (CheckCampaignReqAmt(cMstSaleCpi, "", nSaleQty, nSaleAmt) == false) return 0;
for (int i = 0; i < cMstSaleCpi.alDATA_COMPNT.Count; i++)
{
Column.MST_SALE_CPI.DATA_COMPNT cMstCpiCompnt = (Column.MST_SALE_CPI.DATA_COMPNT)cMstSaleCpi.alDATA_COMPNT[i];
// 대상 상품 금액 획득
double nPrice = GetCampaignSaleQtyAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, cMstCpiCompnt.CPI_ITEM_GRP_CD, "", ref nSaleQty, ref nSaleAmt, sPayDcDiv);
// 캠페인 구성 자격 구분에 따른 대상 상품수량 획득
if (cMstCpiCompnt.QTY_AMT == 0) cMstCpiCompnt.QTY_AMT = 1;
nDisQty = GetCampaignDisQtyCompntReqDiv(cMstCpiCompnt.CPI_COND_TYPE, cMstCpiCompnt.QTY_AMT, nSaleQty, nSaleAmt);
if (nDisQty == 0) return 0;
if (nMatchQty == 0 || nMatchQty > nDisQty) nMatchQty = nDisQty;
// 연계세트당 구성금액 계산
if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MIN_AMT) // 금액
nTotSetAmt = CmUtil.DoubleAdd(nTotSetAmt, cMstCpiCompnt.QTY_AMT);
else
nTotSetAmt = CmUtil.DoubleAdd(nTotSetAmt, CmUtil.DoubleMultiplication(nPrice, cMstCpiCompnt.QTY_AMT));
}
if (nPayAmt > 0) // 결제(카드) 행사
{
while (nMatchQty > 0)
{
if (nPayAmt < CmUtil.DoubleMultiplication(nMatchQty, nTotSetAmt))
nMatchQty--;
else
break;
}
}
if (nMatchQty == 0) return 0;
for (int i = 0; i < cMstSaleCpi.alDATA_COMPNT.Count; i++)
{
Column.MST_SALE_CPI.DATA_COMPNT cMstCpiCompnt = (Column.MST_SALE_CPI.DATA_COMPNT)cMstSaleCpi.alDATA_COMPNT[i];
// 대상 상품 금액 획득
double nPrice = GetCampaignSaleQtyAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, cMstCpiCompnt.CPI_ITEM_GRP_CD, "", ref nSaleQty, ref nSaleAmt, sPayDcDiv);
nDisAmt = 0;
if (cMstCpiCompnt.DC_RATE_QTY_AMT > 0)
{
if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MATCH_QTY)
{
// 수량 단위로 캠페인 적용
if (cMstCpiCompnt.CPI_DC_TYPE == ItemConst.CPI_DC_TYPE.RATE)
{
nSaleAmt = GetCampaignMaxQtyToSaleAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, cMstCpiCompnt.CPI_ITEM_GRP_CD, "", nMatchQty * (long)cMstCpiCompnt.QTY_AMT, sPayDcDiv);
nDisAmt = CmUtil.MathAmtPercent(nSaleAmt, cMstCpiCompnt.DC_RATE_QTY_AMT);
nDisAmt = CmUtil.MathRounds(nDisAmt, m_cPosStatus.Mst.DcRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.DcRudDwLoc));
if (cMstCpiCompnt.DC_MAX_AMT > 0 && cMstCpiCompnt.DC_MAX_AMT < nDisAmt) nDisAmt = cMstCpiCompnt.DC_MAX_AMT;
}
else if (cMstCpiCompnt.CPI_DC_TYPE == ItemConst.CPI_DC_TYPE.AMT)
{
nDisAmt = CmUtil.DoubleMultiplication(nMatchQty, cMstCpiCompnt.DC_RATE_QTY_AMT);
}
//#20171128 결합캠페인 할인유형 추가(1:율, 2:금액, 3:판매금액) start
else if (cMstCpiCompnt.CPI_DC_TYPE == ItemConst.CPI_DC_TYPE.PRICE)
{
nSaleAmt = GetCampaignMaxQtyToSaleAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, cMstCpiCompnt.CPI_ITEM_GRP_CD, "", nMatchQty * (long)cMstCpiCompnt.QTY_AMT, sPayDcDiv);
nDisAmt = CmUtil.DoubleSubtraction(nSaleAmt, CmUtil.DoubleMultiplication(nMatchQty, cMstCpiCompnt.DC_RATE_QTY_AMT));
if (nDisAmt < 0) nDisAmt = 0;
}
//#20171128 결합캠페인 할인유형 추가(1:율, 2:금액, 3:판매금액) end
else
{
nSaleAmt = GetCampaignMaxQtyToSaleAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, cMstCpiCompnt.CPI_ITEM_GRP_CD, "", nMatchQty * (long)cMstCpiCompnt.QTY_AMT, sPayDcDiv);
nDisAmt = CmUtil.DoubleSubtraction(nSaleAmt, CmUtil.DoubleMultiplication(nMatchQty, cMstCpiCompnt.DC_RATE_QTY_AMT));
if (nDisAmt < 0) nDisAmt = 0;
}
nDisAmt = SetCampaignSaleDiv(cMstSaleCpi, cMstSaleCpi.CPI_CD, cMstCpiCompnt.CPI_ITEM_GRP_CD, "", nMatchQty * (long)cMstCpiCompnt.QTY_AMT, nDisAmt, sPayDcDiv);
}
else
{
if (cMstCpiCompnt.CPI_DC_TYPE == ItemConst.CPI_DC_TYPE.RATE)
{
nDisAmt = CmUtil.MathAmtPercent(nSaleAmt, cMstCpiCompnt.DC_RATE_QTY_AMT);
nDisAmt = CmUtil.MathRounds(nDisAmt, m_cPosStatus.Mst.DcRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.DcRudDwLoc));
if (cMstCpiCompnt.DC_MAX_AMT > 0 && cMstCpiCompnt.DC_MAX_AMT < nDisAmt) nDisAmt = cMstCpiCompnt.DC_MAX_AMT;
}
else
{
nDisAmt = cMstCpiCompnt.DC_RATE_QTY_AMT;
}
nDisAmt = SetCampaignSaleDiv(cMstSaleCpi, cMstSaleCpi.CPI_CD, cMstCpiCompnt.CPI_ITEM_GRP_CD, "", 0, nDisAmt, sPayDcDiv);
}
}
else
{
// 캠페인 성립 수량 설정
if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MATCH_QTY)
{
SetCampaignQtyDiv(cMstSaleCpi, cMstSaleCpi.CPI_CD, cMstCpiCompnt.CPI_ITEM_GRP_CD, "", nMatchQty * (long)cMstCpiCompnt.QTY_AMT, sPayDcDiv);
}
else
{
SetCampaignQtyDiv(cMstSaleCpi, cMstSaleCpi.CPI_CD, cMstCpiCompnt.CPI_ITEM_GRP_CD, "", nSaleQty, sPayDcDiv);
}
}
nTotSaleAmt = CmUtil.DoubleAdd(nTotSaleAmt, nSaleAmt);
nTotDisAmt = CmUtil.DoubleAdd(nTotDisAmt, nDisAmt);
}
// 실효100% 행사 체크
nTotDisAmt = CheckCampaignExpPointAll(cMstSaleCpi, nTotSaleAmt, nTotDisAmt);
}
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 nTotDisAmt;
}
///
/// 전체상품 할인
///
///
///
///
public double CampaignRectSumDiscount(Column.MST_SALE_CPI.DATA cMstSaleCpi, double nPayAmt)
{
return CampaignRectSumDiscount(cMstSaleCpi, nPayAmt, PosConst.PAY_DC_TYPE.DC);
}
///
/// 전체상품 할인
///
///
///
///
public double CampaignRectSumDiscount(Column.MST_SALE_CPI.DATA cMstSaleCpi, double nPayAmt, string sPayDcDiv)
{
double nSaleAmt = 0, nDisAmt = 0;
long nSaleQty = 0, nDisQty = 0;
long nCompntRow = -1, nCompntQty = 0; // 구성자격구분 적용 행
double nCompntAmt = 0, nDisSaleAmt = 0;
try
{
// 대상 상품 금액 획득
double nPrice = GetCampaignSaleQtyAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", ref nSaleQty, ref nSaleAmt, sPayDcDiv);
if (nSaleQty == 0 && nSaleAmt == 0) return 0;
// 캠페인 성립금액 구분 체크
if (CheckCampaignReqAmt(cMstSaleCpi, "", nSaleQty, nSaleAmt) == false) return 0;
if (nPayAmt > 0 && cMstSaleCpi.TRGT_AMT > nPayAmt) return 0; // 카드행사
// 구성 자격 구분 체크
Column.MST_SALE_CPI.DATA_COMPNT cMstCpiCompnt;
for (int i = 0; i < cMstSaleCpi.alDATA_COMPNT.Count; i++)
{
cMstCpiCompnt = (Column.MST_SALE_CPI.DATA_COMPNT)cMstSaleCpi.alDATA_COMPNT[i];
nCompntQty = 0;
nCompntAmt = nSaleAmt;
// 캠페인 구성 자격 구분에 따른 대상 상품수량 획득
if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MATCH_QTY) // 수량
{
if (cMstCpiCompnt.QTY_AMT == 0) cMstCpiCompnt.QTY_AMT = 1;
nCompntQty = nSaleQty / (long)cMstCpiCompnt.QTY_AMT;
// 결제캠페인 최소 결제금액 체크
if (nPayAmt > 0 && nPayAmt < nCompntAmt)
{
while (nCompntQty > 0)
{
nCompntAmt = GetCampaignMaxQtyToSaleAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", nCompntQty * (long)cMstCpiCompnt.QTY_AMT, sPayDcDiv);
if (nPayAmt < nCompntAmt)
nCompntQty--;
else
break;
}
}
if (nSaleQty != nCompntQty * (long)cMstCpiCompnt.QTY_AMT)
{
nCompntAmt = GetCampaignMaxQtyToSaleAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", nCompntQty * (long)cMstCpiCompnt.QTY_AMT, sPayDcDiv);
}
}
else
{
if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MIN_AMT) // 금액
{
if (nSaleAmt >= cMstCpiCompnt.QTY_AMT) nCompntQty = nSaleQty;
// 결제캠페인 최소 결제금액 체크
if (nPayAmt > 0 && nPayAmt < cMstCpiCompnt.QTY_AMT) break;
}
else if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MIN_QTY) // 최소수량
{
if (nSaleQty >= (long)cMstCpiCompnt.QTY_AMT) nCompntQty = nSaleQty;
// 결제캠페인 최소 결제금액 체크
if (nPayAmt > 0 && nPayAmt < nCompntAmt)
{
nCompntAmt = GetCampaignMaxQtyToSaleAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", (long)cMstCpiCompnt.QTY_AMT, sPayDcDiv);
if (nPayAmt < nCompntAmt) break;
}
}
// 결제캠페인 결제금액 체크
if (nPayAmt > 0)
{
while (nCompntQty > 0)
{
nCompntAmt = GetCampaignMaxQtyToSaleAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", nCompntQty, sPayDcDiv);
if (nPayAmt < nCompntAmt)
nCompntQty--;
else
break;
}
}
}
if (nCompntQty == 0) break;
// 구성 자격 적용 행
nCompntRow = i;
nDisQty = nCompntQty;
nDisSaleAmt = nCompntAmt;
}
if (nCompntRow == -1) return 0;
cMstCpiCompnt = (Column.MST_SALE_CPI.DATA_COMPNT)cMstSaleCpi.alDATA_COMPNT[(int)nCompntRow];
if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MATCH_QTY)
{
// 수량 단위로 캠페인 적용
if (cMstCpiCompnt.CPI_DC_TYPE == ItemConst.CPI_DC_TYPE.RATE)
{
nDisAmt = CmUtil.MathAmtPercent(nDisSaleAmt, cMstCpiCompnt.DC_RATE_QTY_AMT);
nDisAmt = CmUtil.MathRounds(nDisAmt, m_cPosStatus.Mst.DcRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.DcRudDwLoc));
if (cMstCpiCompnt.DC_MAX_AMT > 0 && cMstCpiCompnt.DC_MAX_AMT < nDisAmt) nDisAmt = cMstCpiCompnt.DC_MAX_AMT;
}
else
{
nDisAmt = CmUtil.DoubleMultiplication(nDisQty, cMstCpiCompnt.DC_RATE_QTY_AMT);
}
nDisAmt = SetCampaignSaleDiv(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", nDisQty * (long)cMstCpiCompnt.QTY_AMT, nDisAmt, sPayDcDiv);
}
else
{
if (cMstCpiCompnt.CPI_DC_TYPE == ItemConst.CPI_DC_TYPE.RATE)
{
nDisAmt = CmUtil.MathAmtPercent(nDisSaleAmt, cMstCpiCompnt.DC_RATE_QTY_AMT);
nDisAmt = CmUtil.MathRounds(nDisAmt, m_cPosStatus.Mst.DcRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.DcRudDwLoc));
if (cMstCpiCompnt.DC_MAX_AMT > 0 && cMstCpiCompnt.DC_MAX_AMT < nDisAmt) nDisAmt = cMstCpiCompnt.DC_MAX_AMT;
}
else
{
nDisAmt = cMstCpiCompnt.DC_RATE_QTY_AMT;
}
nDisAmt = SetCampaignSaleDiv(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", 0, nDisAmt, sPayDcDiv);
}
// 실효100% 행사 체크
nDisAmt = CheckCampaignExpPointAll(cMstSaleCpi, nDisSaleAmt, nDisAmt);
}
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 nDisAmt;
}
///
/// 결제금액 할인
///
///
///
///
public double CampaignPaymentDiscount(Column.MST_SALE_CPI.DATA cMstSaleCpi, double nPayAmt)
{
return CampaignPaymentDiscount(cMstSaleCpi, nPayAmt, PosConst.PAY_DC_TYPE.DC);
}
///
/// 결제금액 할인
///
///
///
///
public double CampaignPaymentDiscount(Column.MST_SALE_CPI.DATA cMstSaleCpi, double nPayAmt, string sPayDcDiv)
{
double nSaleAmt = 0, nDisAmt = 0;
long nSaleQty = 0, nDisQty = 0;
long nCompntRow = -1, nCompntQty = 0; // 구성자격구분 적용 행
double nCompntAmt = 0, nDisSaleAmt = 0;
//#20171206 17크리스마스캠페인 start, 20171218
double nTotCampAmt = 0;
//#20171206 17크리스마스캠페인 end, 20171218
try
{
// 대상 상품 금액 획득
double nPrice = GetCampaignSaleQtyAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", ref nSaleQty, ref nSaleAmt, sPayDcDiv);
if (nSaleQty == 0 && nSaleAmt == 0) return 0;
// 캠페인 성립금액 구분 체크
if (CheckCampaignReqAmt(cMstSaleCpi, "", nSaleQty, nSaleAmt) == false) return 0;
if (cMstSaleCpi.TRGT_AMT > nPayAmt) return 0; // 결제행사
// 구성 자격 구분 체크
Column.MST_SALE_CPI.DATA_COMPNT cMstCpiCompnt;
for (int i = 0; i < cMstSaleCpi.alDATA_COMPNT.Count; i++)
{
cMstCpiCompnt = (Column.MST_SALE_CPI.DATA_COMPNT)cMstSaleCpi.alDATA_COMPNT[i];
nCompntQty = 0;
nCompntAmt = nSaleAmt;
// 캠페인 구성 자격 구분에 따른 대상 상품수량 획득
if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MATCH_QTY) // 수량
{
if (cMstCpiCompnt.QTY_AMT == 0) cMstCpiCompnt.QTY_AMT = 1;
nCompntQty = nSaleQty / (long)cMstCpiCompnt.QTY_AMT;
// 결제캠페인 최소 결제금액 체크
if (nPayAmt > 0 && nPayAmt < nCompntAmt)
{
while (nCompntQty > 0)
{
nCompntAmt = GetCampaignMaxQtyToSaleAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", nCompntQty * (long)cMstCpiCompnt.QTY_AMT, sPayDcDiv);
if (nPayAmt < nCompntAmt)
nCompntQty--;
else
break;
}
}
if (nSaleQty != nCompntQty * (long)cMstCpiCompnt.QTY_AMT)
{
nCompntAmt = GetCampaignMaxQtyToSaleAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", nCompntQty * (long)cMstCpiCompnt.QTY_AMT, sPayDcDiv);
}
}
else
{
if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MIN_AMT) // 금액
{
if (nSaleAmt >= cMstCpiCompnt.QTY_AMT) nCompntQty = nSaleQty;
// 결제캠페인 최소 결제금액 체크
if (nPayAmt > 0 && nPayAmt < cMstCpiCompnt.QTY_AMT) break;
}
else if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MIN_QTY) // 최소수량
{
if (nSaleQty >= (long)cMstCpiCompnt.QTY_AMT) nCompntQty = nSaleQty;
// 결제캠페인 최소 결제금액 체크
if (nPayAmt > 0 && nPayAmt < nCompntAmt)
{
nCompntAmt = GetCampaignMaxQtyToSaleAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", (long)cMstCpiCompnt.QTY_AMT, sPayDcDiv);
if (nPayAmt < nCompntAmt) break;
}
}
// 결제캠페인 결제금액 체크
if (nPayAmt > 0)
{
//#20171206 17크리스마스캠페인 start, 20171218
//기존
/*
while (nCompntQty > 0)
{
nCompntAmt = GetCampaignMaxQtyToSaleAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", nCompntQty, sPayDcDiv);
if (nPayAmt < nCompntAmt)
nCompntQty--;
else
break;
}
*/
//변경
nCompntAmt = GetCampaignMaxQtyToSaleAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", nCompntQty, sPayDcDiv);
nTotCampAmt = nTotCampAmt + nCompntAmt;
if (nTotCampAmt > nPayAmt)
{
ClearCampaginItem(cMstSaleCpi.CPI_CD);
return 0;
}
//#20171206 17크리스마스캠페인 end, 20171218
}
}
if (nCompntQty == 0) break;
// 구성 자격 적용 행
nCompntRow = i;
nDisQty = nCompntQty;
if (nCompntAmt < nPayAmt && nPayAmt < nSaleAmt)
nDisSaleAmt = nPayAmt;
else
nDisSaleAmt = nCompntAmt;
}
if (nCompntRow == -1) return 0;
cMstCpiCompnt = (Column.MST_SALE_CPI.DATA_COMPNT)cMstSaleCpi.alDATA_COMPNT[(int)nCompntRow];
if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MATCH_QTY)
{
// 수량 단위로 캠페인 적용
if (cMstCpiCompnt.CPI_DC_TYPE == ItemConst.CPI_DC_TYPE.RATE)
{
nDisAmt = CmUtil.MathAmtPercent(nDisSaleAmt, cMstCpiCompnt.DC_RATE_QTY_AMT);
nDisAmt = CmUtil.MathRounds(nDisAmt, m_cPosStatus.Mst.DcRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.DcRudDwLoc));
if (cMstCpiCompnt.DC_MAX_AMT > 0 && cMstCpiCompnt.DC_MAX_AMT < nDisAmt) nDisAmt = cMstCpiCompnt.DC_MAX_AMT;
}
else
{
nDisAmt = CmUtil.DoubleMultiplication(nDisQty, cMstCpiCompnt.DC_RATE_QTY_AMT);
}
nDisAmt = SetCampaignSaleDiv(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", nDisQty * (long)cMstCpiCompnt.QTY_AMT, nDisAmt, sPayDcDiv);
}
else
{
if (cMstCpiCompnt.CPI_DC_TYPE == ItemConst.CPI_DC_TYPE.RATE)
{
nDisAmt = CmUtil.MathAmtPercent(nDisSaleAmt, cMstCpiCompnt.DC_RATE_QTY_AMT);
nDisAmt = CmUtil.MathRounds(nDisAmt, m_cPosStatus.Mst.DcRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.DcRudDwLoc));
if (cMstCpiCompnt.DC_MAX_AMT > 0 && cMstCpiCompnt.DC_MAX_AMT < nDisAmt) nDisAmt = cMstCpiCompnt.DC_MAX_AMT;
}
else
{
nDisAmt = cMstCpiCompnt.DC_RATE_QTY_AMT;
}
nDisAmt = SetCampaignSaleDiv(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", 0, nDisAmt, sPayDcDiv);
}
// 실효100% 행사 체크
nDisAmt = CheckCampaignExpPointAll(cMstSaleCpi, nDisSaleAmt, nDisAmt);
}
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 nDisAmt;
}
///
/// 사은품 증정
///
///
///
///
public double CampaignFreeGiftDiscount(Column.MST_SALE_CPI.DATA cMstSaleCpi, double nPayAmt, string sCampaignPosOpInputDiv, string sCustID)
{
double nSaleAmt = 0, nDisAmt = 0;
long nSaleQty = 0, nDisQty = 0;
double nPrice = 0;
try
{
// 대상 상품 금액 획득(사은품지급기준 첫번째 그룹)
if (sCampaignPosOpInputDiv == PosConst.SALE_PLU_INPUT_TYPE.FREEGIFT_HP)
nPrice = GetCampaignSaleQtyAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "01", "", ref nSaleQty, ref nSaleAmt, "3");
else
nPrice = GetCampaignSaleQtyAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "01", "", ref nSaleQty, ref nSaleAmt, PosConst.PAY_DC_TYPE.PAY);
if (nSaleQty == 0 && nSaleAmt == 0) return 0;
// 캠페인 성립금액 구분 체크
if (CheckCampaignReqAmt(cMstSaleCpi, "", nSaleQty, nSaleAmt) == false) return 0;
// 사은품 구분(0:대상 아님, 1:금액당 개수, 2:최소금액 이상 개수, 3: 수량당 개수)
if (cMstSaleCpi.FREE_GIFT_PROVD_STD == "1")
{
if (cMstSaleCpi.FREE_GIFT_STD_AMT == 0) cMstSaleCpi.FREE_GIFT_STD_AMT = 1;
// 1:금액당 개수
nDisQty = (long)(nSaleAmt / cMstSaleCpi.FREE_GIFT_STD_AMT);
if (nPayAmt > 0) // 카드행사
{
while (nDisQty > 0)
{
if (nPayAmt < nDisQty * cMstSaleCpi.FREE_GIFT_STD_AMT)
nDisQty--;
else
break;
}
}
nDisQty *= cMstSaleCpi.FREE_GIFT_PROVD_QTY;
}
else if (cMstSaleCpi.FREE_GIFT_PROVD_STD == "2")
{
// 2:최소금액 이상 개수
if (nSaleAmt >= cMstSaleCpi.FREE_GIFT_STD_AMT) nDisQty = cMstSaleCpi.FREE_GIFT_PROVD_QTY;
if (nPayAmt > 0 && nPayAmt < cMstSaleCpi.FREE_GIFT_STD_AMT) nDisQty = 0; // 카드행사
}
if (cMstSaleCpi.FREE_GIFT_PROVD_STD == "3")
{
if (cMstSaleCpi.FREE_GIFT_STD_AMT == 0) cMstSaleCpi.FREE_GIFT_STD_AMT = 1;
// 3:수량당 개수
nDisQty = (long)(nSaleQty / cMstSaleCpi.FREE_GIFT_STD_AMT);
if (nPayAmt > 0) // 카드행사
{
while (nDisQty > 0)
{
if (nPayAmt < nDisQty * cMstSaleCpi.FREE_GIFT_STD_AMT * nPrice)
nDisQty--;
else
break;
}
}
nDisQty *= cMstSaleCpi.FREE_GIFT_PROVD_QTY;
}
if (nDisQty > 0)
{
// 캠페인 제한 수량 체크
nDisQty = CheckCampaignQtyLimit(cMstSaleCpi, 0, nDisQty);
if (nDisQty <= 0) return 0;
//if (CheckCampaignQtyLimit(cMstSaleCpi) == false) return 0;
// 캠페인 HP횟수제한 체크
if (CheckCampaignCntLimit(cMstSaleCpi, sCustID) == false) return 0;
if (sCampaignPosOpInputDiv == PosConst.SALE_PLU_INPUT_TYPE.FREEGIFT_HP)
{
// 해피 사은품 캠페인 일때 일반 사은품 캠페인 삭제 처리
for (int i = 0; i < m_alTrPluItem.Count; i++)
{
Column.TR_PLU.DATA cPluItem = (Column.TR_PLU.DATA)m_alTrPluItem[i];
if (cPluItem.CAMPAIGN_FREEGIFT == PosConst.SALE_PLU_INPUT_TYPE.FREEGIFT)
{
if (cPluItem.alTrSaleCpi != null)
{
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cPluItem.alTrSaleCpi)
{
ClearCampaginItem(cTrSaleCpi.CPI_CD);
}
}
m_alTrPluItem.Remove(cPluItem);
i--;
}
}
}
// 사은품 등록 처리
frmCampPresent fPresent = new frmCampPresent();
fPresent.CampaignCode = cMstSaleCpi.CPI_CD;
fPresent.CampaignName = cMstSaleCpi.CPI_NM;
fPresent.CampaignPreQty = nDisQty.ToString();
fPresent.CampaignAddSaleYn = cMstSaleCpi.FREE_GIFT_ADD_SALE_YN;
fPresent.CampaignPosOpInputDiv = sCampaignPosOpInputDiv;
if (fPresent.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
long nSrcQty = nSaleQty;
// 사은품 상품
GetCampaignSaleQtyAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "11", "", ref nSaleQty, ref nSaleAmt, PosConst.PAY_DC_TYPE.DC);
if (nSaleQty > 0)
{
// 캠페인 성립 수량 설정(기준상품)
SetCampaignQtyDiv(cMstSaleCpi, cMstSaleCpi.CPI_CD, "01", "", nSrcQty, PosConst.PAY_DC_TYPE.PAY);
if (nDisQty > nSaleQty) nDisQty = nSaleQty;
// 사은품 할인 처리
nDisAmt = SetCampaignSaleFreeGiftPlusN(cMstSaleCpi, cMstSaleCpi.CPI_CD, "11", "", nDisQty, true, PosConst.PAY_DC_TYPE.DC);
}
}
}
}
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 nDisAmt;
}
#endregion
#region 등록된 상품리스트 상품할인 행사 적용
///
/// 등록된 상품리스트에서 행사 대상 상품의 특정 수량 만큼 할인 금액을 배분 처리 한다
///
///
///
///
///
///
///
public double SetCampaignSaleDiv(Column.MST_SALE_CPI.DATA cMstSaleCpi, string sCpiCode, string sGroupCode, string sPluCode, long nTotDisQty, double nTotDisAmt, string sPayDcDiv)
{
double nTotSaleAmt = 0, nSaleAmt = 0, nDisAmt = 0, nDisPrc = 0;
long nSaleQty = 0, nDisQty = 0, nApplyQty = 0;
double nMaxAmt = 0, nApplyAmt = 0;
Column.TR_PLU.DATA cMaxSaleItem = null;
try
{
// 상품 합계금액 구하기
foreach (Column.TR_PLU.DATA cSaleItem in m_alTrPluItem)
{
if (sPluCode != "" && sPluCode != cSaleItem.SUB_SHOP_CD + cSaleItem.ITEM_PLU_CD) continue;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
if (sCpiCode != cTrSaleCpi.CPI_CD) continue;
if (sGroupCode != "" && sGroupCode != cTrSaleCpi.cMST_CPI_ITEM.CPI_ITEM_GRP_CD) continue;
double nPrice = GetCampaignSaleItemQtyAmt(cMstSaleCpi, cSaleItem, ref nSaleQty, ref nSaleAmt, sPayDcDiv);
if (nSaleAmt <= 0) continue;
nDisQty = nSaleQty;
if ( nTotDisQty > 0 && nTotDisQty < nApplyQty + nSaleQty) nDisQty = nTotDisQty - nApplyQty;
if (nDisQty != nSaleQty)
{
nSaleAmt = (nSaleAmt / nSaleQty) * nDisQty;
}
nApplyQty += nDisQty;
nTotSaleAmt = CmUtil.DoubleAdd(nTotSaleAmt, nSaleAmt);
if (nMaxAmt == 0 || nMaxAmt < nSaleAmt)
{
nMaxAmt = nSaleAmt;
cMaxSaleItem = cSaleItem;
}
break;
}
if (nApplyQty >= nTotDisQty && nTotDisQty > 0) break;
}
// 할인 금액 배분 처리
nApplyQty = 0;
foreach (Column.TR_PLU.DATA cSaleItem in m_alTrPluItem)
{
if (sPluCode != "" && sPluCode != cSaleItem.SUB_SHOP_CD + cSaleItem.ITEM_PLU_CD) continue;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
if (sCpiCode != cTrSaleCpi.CPI_CD) continue;
if (sGroupCode != "" && sGroupCode != cTrSaleCpi.cMST_CPI_ITEM.CPI_ITEM_GRP_CD) continue;
double nPrice = GetCampaignSaleItemQtyAmt(cMstSaleCpi, cSaleItem, ref nSaleQty, ref nSaleAmt, sPayDcDiv);
if (nSaleAmt <= 0) continue;
nDisQty = nSaleQty;
if (nTotDisQty > 0 && nTotDisQty < nApplyQty + nSaleQty) nDisQty = nTotDisQty - nApplyQty;
if (nDisQty != nSaleQty) nSaleAmt = (nSaleAmt / nSaleQty) * nDisQty;
nDisAmt = CmUtil.DoubleMultiplication(nTotDisAmt, CmUtil.DoubleDivision(nSaleAmt, nTotSaleAmt));
nDisAmt = CmUtil.MathRounds(nDisAmt, m_cPosStatus.Mst.ItemRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.ItemRudDwLoc));
if (nDisAmt > 0)
{
// 캠페인 할인 금액 설정
nDisAmt = SetCampaignSaleItemDcAmt(cMstSaleCpi, cSaleItem, cTrSaleCpi, nDisAmt / nDisQty, nDisQty, nDisAmt, sPayDcDiv);
nApplyQty += nDisQty;
nApplyAmt = CmUtil.DoubleAdd(nApplyAmt, nDisAmt);
}
break;
}
ExeccutePluItemAmount(cSaleItem); // 해당상품 판매금액 계산
if (nApplyAmt >= nTotDisAmt) break;
if (nApplyQty >= nTotDisQty && nTotDisQty > 0) break;
}
// 자투리 금액
if (nTotDisAmt != nApplyAmt)
{
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cMaxSaleItem.alTrSaleCpi)
{
if (sCpiCode != cTrSaleCpi.CPI_CD) continue;
if (sGroupCode != "" && sGroupCode != cTrSaleCpi.cMST_CPI_ITEM.CPI_ITEM_GRP_CD) continue;
cTrSaleCpi.DC_SUM_AMT = CmUtil.DoubleAdd(cTrSaleCpi.DC_SUM_AMT, CmUtil.DoubleSubtraction(nTotDisAmt, nApplyAmt));
break;
}
ExeccutePluItemAmount(cMaxSaleItem); // 해당상품 판매금액 계산
}
}
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 nTotDisAmt;
}
///
/// 캠페인 성립 수량 설정
///
///
///
///
///
///
///
public double SetCampaignQtyDiv(Column.MST_SALE_CPI.DATA cMstSaleCpi, string sCpiCode, string sGroupCode, string sPluCode, long nTotDisQty, string sPayDcDiv)
{
double nSaleAmt = 0;
long nSaleQty = 0, nDisQty = 0, nApplyQty = 0;
try
{
// 캠페인 성립 수량 설정 처리
nApplyQty = 0;
foreach (Column.TR_PLU.DATA cSaleItem in m_alTrPluItem)
{
if (sPluCode != "" && sPluCode != cSaleItem.SUB_SHOP_CD + cSaleItem.ITEM_PLU_CD) continue;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
if (sCpiCode != cTrSaleCpi.CPI_CD) continue;
if (sGroupCode != "" && sGroupCode != cTrSaleCpi.cMST_CPI_ITEM.CPI_ITEM_GRP_CD) continue;
double nPrice = GetCampaignSaleItemQtyAmt(cMstSaleCpi, cSaleItem, ref nSaleQty, ref nSaleAmt, sPayDcDiv);
if (nSaleQty <= 0) continue;
nDisQty = nSaleQty;
if (nTotDisQty > 0 && nTotDisQty < nApplyQty + nSaleQty) nDisQty = nTotDisQty - nApplyQty;
if (nDisQty != nSaleQty) nSaleAmt = (nSaleAmt / nSaleQty) * nDisQty;
if (nDisQty > 0)
{
// 캠페인 성립 수량 설정
SetCampaignSaleItemDcAmt(cMstSaleCpi, cSaleItem, cTrSaleCpi, 0, nDisQty, 0, sPayDcDiv);
nApplyQty += nDisQty;
}
break;
}
if (nApplyQty >= nTotDisQty) 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);
}
return nTotDisQty;
}
///
/// 등록된 상품리스트에서 행사 대상 상품의 특정 수량 만큼 할인 처리 한다
///
///
///
///
///
///
///
///
///
public double SetCampaignSaleQtyAmt(Column.MST_SALE_CPI.DATA cMstSaleCpi, string sCpiCode, string sGroupCode, string sPluCode, long nTotDisQty, string sDcDiv, double nRateAmt, string sPayDcDiv)
{
double nTotDisAmt = 0;
double nSaleAmt = 0, nDisAmt = 0, nDisPrc = 0;
long nSaleQty = 0, nDisQty = 0, nApplyQty = 0;
try
{
foreach (Column.TR_PLU.DATA cSaleItem in m_alTrPluItem)
{
if (sPluCode != "" && sPluCode != cSaleItem.SUB_SHOP_CD + cSaleItem.ITEM_PLU_CD) continue;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
if (sCpiCode != cTrSaleCpi.CPI_CD) continue;
if (sGroupCode != "" && sGroupCode != cTrSaleCpi.cMST_CPI_ITEM.CPI_ITEM_GRP_CD) continue;
nDisPrc = GetCampaignSaleItemQtyAmt(cMstSaleCpi, cSaleItem, ref nSaleQty, ref nSaleAmt, sPayDcDiv);
if (nSaleQty <= 0 && nSaleAmt <= 0) continue;
nDisQty = nSaleQty; // 할인수량
if (nTotDisQty < nApplyQty + nSaleQty) nDisQty = nTotDisQty - nApplyQty;
if (nRateAmt == 0) // 구성마스터에 금액,율이 없다면 캠페인 행사상품마스터의 금액,율 참조
{
sDcDiv = cTrSaleCpi.cMST_CPI_ITEM.CPI_DC_TYPE;
nRateAmt = cTrSaleCpi.cMST_CPI_ITEM.DC_RATE_AMT;
}
if (sDcDiv == ItemConst.CPI_DC_TYPE.AMT) // 금액
{
if (nRateAmt <= nDisPrc || sPayDcDiv == PosConst.PAY_DC_TYPE.PAY)
{
nDisPrc = nRateAmt;
nDisAmt = nRateAmt * nDisQty;
}
else
{
UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
"Master Error. EvtCode=" + cTrSaleCpi.CPI_CD + ", PluCode=" + cTrSaleCpi.ITEM_PLU_CD);
break;
}
}
else if (sDcDiv == ItemConst.CPI_DC_TYPE.RATE) // 율
{
if (nRateAmt <= 100)
{
if (nDisQty == cSaleItem.SALE_QTY)
{
nDisAmt = CmUtil.MathAmtPercent(nSaleAmt, nRateAmt);
nDisAmt = CmUtil.MathRounds(nDisAmt, m_cPosStatus.Mst.DcRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.DcRudDwLoc));
nDisPrc = CmUtil.DoubleDivision(nDisAmt, nDisQty);
}
else
{
nDisPrc = CmUtil.MathAmtPercent(nSaleAmt / nSaleQty, nRateAmt);
nDisPrc = CmUtil.MathRounds(nDisPrc, m_cPosStatus.Mst.DcRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.DcRudDwLoc));
nDisAmt = CmUtil.DoubleMultiplication(nDisPrc, nDisQty);
nDisAmt = CmUtil.MathRounds(nDisAmt, m_cPosStatus.Mst.DcRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.DcRudDwLoc));
}
}
else
{
UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
"Master Error. EvtCode=" + cTrSaleCpi.CPI_CD + ", PluCode=" + cTrSaleCpi.ITEM_PLU_CD);
break;
}
}
else if (sDcDiv == ItemConst.CPI_DC_TYPE.PRICE) // 단가
{
if (nRateAmt > 0 && nRateAmt < cSaleItem.SALE_PRC)
{
nDisPrc = cSaleItem.SALE_PRC - nRateAmt;
nDisAmt = nDisPrc * nDisQty;
}
else
{
UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
"Master Error. EvtCode=" + cTrSaleCpi.CPI_CD + ", PluCode=" + cTrSaleCpi.ITEM_PLU_CD);
break;
}
}
if (nDisQty > 0 || nDisAmt > 0)
{
// 캠페인 할인 금액 설정
nDisAmt = SetCampaignSaleItemDcAmt(cMstSaleCpi, cSaleItem, cTrSaleCpi, nDisPrc, nDisQty, nDisAmt, sPayDcDiv);
nApplyQty += nDisQty;
nTotDisAmt = CmUtil.DoubleAdd(nTotDisAmt, cTrSaleCpi.DC_SUM_AMT);
}
break;
}
ExeccutePluItemAmount(cSaleItem); // 해당상품 판매금액 계산
if (nApplyQty >= nTotDisQty && nTotDisQty > 0) 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);
}
return nTotDisAmt;
}
///
/// 등록된 상품리스트에서 행사 대상 상품에 해당 수량 사은품증정 및 +N 증정 처리
///
///
///
///
///
///
///
///
///
public double SetCampaignSaleFreeGiftPlusN(Column.MST_SALE_CPI.DATA cMstSaleCpi, string sCpiCode, string sGroupCode, string sPluCode, long nTotDisQty, bool bFreeGift, string sPayDcDiv)
{
double nTotDisAmt = 0;
double nSaleAmt = 0, nDisAmt = 0, nDisPrc = 0;
long nSaleQty = 0, nDisQty = 0, nApplyQty = 0;
try
{
foreach (Column.TR_PLU.DATA cSaleItem in m_alTrPluItem)
{
if (sPluCode != "" && sPluCode != cSaleItem.SUB_SHOP_CD + cSaleItem.ITEM_PLU_CD) continue;
if (bFreeGift == true)
{
if (cSaleItem.CAMPAIGN_FREEGIFT != PosConst.SALE_PLU_INPUT_TYPE.FREEGIFT && cSaleItem.CAMPAIGN_FREEGIFT != PosConst.SALE_PLU_INPUT_TYPE.FREEGIFT_HP) continue;
}
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
if (sCpiCode != cTrSaleCpi.CPI_CD) continue;
if (sGroupCode != "" && sGroupCode != cTrSaleCpi.cMST_CPI_ITEM.CPI_ITEM_GRP_CD) continue;
nDisPrc = GetCampaignSaleItemQtyAmt(cMstSaleCpi, cSaleItem, ref nSaleQty, ref nSaleAmt, sPayDcDiv);
if (nSaleQty <= 0 && nSaleAmt <= 0) continue;
nDisQty = nSaleQty;
if (nTotDisQty < nApplyQty + nSaleQty) nDisQty = nTotDisQty - nApplyQty;
if (bFreeGift == true)
{
// 사은품 증정
double nFreePrice = cTrSaleCpi.cMST_CPI_ITEM.DC_RATE_AMT; // 사은품 판매가
if (nFreePrice <= cSaleItem.SALE_PRC)
{
nDisPrc = CmUtil.DoubleSubtraction(cSaleItem.SALE_PRC, nFreePrice);
nDisAmt = CmUtil.DoubleMultiplication(nDisPrc, nDisQty);
cSaleItem.CPI_PRESENT_DIV = "1";
}
}
else
{
// PLUS N
if (nDisQty == cSaleItem.SALE_QTY)
{
nDisPrc = CmUtil.DoubleDivision(nSaleAmt, nDisQty);
nDisAmt = nSaleAmt;
}
else
{
nDisAmt = CmUtil.DoubleMultiplication(nDisPrc, nDisQty);
}
}
if (nDisQty > 0 || nDisAmt > 0)
{
// 캠페인 할인 금액 설정
nDisAmt = SetCampaignSaleItemDcAmt(cMstSaleCpi, cSaleItem, cTrSaleCpi, nDisPrc, nDisQty, nDisAmt, sPayDcDiv);
nApplyQty += nSaleQty;
nTotDisAmt = CmUtil.DoubleAdd(nTotDisAmt, nDisAmt);
}
break;
}
ExeccutePluItemAmount(cSaleItem); // 해당상품 판매금액 계산
if (nApplyQty >= nTotDisQty) 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);
}
return nTotDisAmt;
}
///
/// 캠페인 금액 설정
///
///
///
///
///
///
/// 결제할인구분
public double SetCampaignSaleItemDcAmt(Column.MST_SALE_CPI.DATA cMstSaleCpi, Column.TR_PLU.DATA cSaleItem, Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi, double sDcPrc, long nDcQty, double nDcAmt, string sPayDcDiv)
{
try
{
// 캠페인 할인금액이 판매가 초과 할수 없도록 체크
double nTotDisAmt = 0;
nTotDisAmt = CmUtil.DoubleAdd(nTotDisAmt, cSaleItem.ITEM_DC_AMT);
nTotDisAmt = CmUtil.DoubleAdd(nTotDisAmt, cSaleItem.SUM_DC_AMT); // 단품 할인, 소계 할인 금액
nTotDisAmt = CmUtil.DoubleAdd(nTotDisAmt, cSaleItem.COOP_CARD_DC_AMT); // 제휴 할인 금액
nTotDisAmt = CmUtil.DoubleAdd(nTotDisAmt, cSaleItem.POINT_DC_AMT); // 포인트 할인 금액
nTotDisAmt = CmUtil.DoubleAdd(nTotDisAmt, cSaleItem.CPN_DC_AMT); // 쿠폰 할인 금액
nTotDisAmt = CmUtil.DoubleAdd(nTotDisAmt, cSaleItem.EMP_DC_AMT); // 직원 할인 금액
nTotDisAmt = CmUtil.DoubleAdd(nTotDisAmt, cSaleItem.SET_DC_AMT); // 세트할인
nTotDisAmt = CmUtil.DoubleAdd(nTotDisAmt, cSaleItem.EXCEP_DC_AMT); // 예외할인
nTotDisAmt = CmUtil.DoubleAdd(nTotDisAmt, cSaleItem.ETC_DC_AMT); // 기타할인
// 할인가능금액
double nRemainAmt = CmUtil.DoubleSubtraction(cSaleItem.SALE_PRC * cSaleItem.SALE_QTY, nTotDisAmt);
if (nRemainAmt < nDcAmt) nDcAmt = nRemainAmt;
// 캠페인 성립정보 설정
cTrSaleCpi.DC_PRC = sDcPrc;
cTrSaleCpi.DC_QTY += nDcQty;
cTrSaleCpi.DC_SUM_AMT = nDcAmt;
// 결제할인구분 (1:결제, 2:할인)
cTrSaleCpi.PAY_DC_DIV = sPayDcDiv;
// 고객번호
cTrSaleCpi.SLACK_FIELD = m_sHpCustID;
}
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 nDcAmt;
}
#endregion
#region 등록된 상품리스트에서 행사 대상 상품 획득
///
/// 등록된 상품리스트에서 행사 대상 상품의 수량 및 금액을 획득
///
///
///
///
///
///
///
public double GetCampaignSaleQtyAmt(Column.MST_SALE_CPI.DATA cMstSaleCpi, string sCpiCode, string sGroupCode, string sPluCode, ref long nSaleQty, ref double nSaleAmt, string sPayDcDiv)
{
long nQty = 0;
double nAmt = 0, nPrice = 0, nLowPrice = 0;
try
{
nSaleQty = 0; nSaleAmt = 0;
foreach (Column.TR_PLU.DATA cSaleItem in m_alTrPluItem)
{
if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.RECTSUM || cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.PAYMENT)
{
if (sGroupCode != "11")
{
// 해당 캠페인이 상품에 등록되어 있는지 체크 => 등록되어 있지 않다면 등록 처리
bool bExist = false;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
if (sCpiCode == cTrSaleCpi.CPI_CD)
{
bExist = true;
break;
}
}
if (bExist == false)
{
Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi = AddSaleItemTrSaleCpiData(cSaleItem, sCpiCode, sGroupCode, "", 0);
}
}
}
if (sPluCode != "" && sPluCode != cSaleItem.SUB_SHOP_CD + cSaleItem.ITEM_PLU_CD) continue;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
if (sCpiCode != cTrSaleCpi.CPI_CD) continue;
if (sGroupCode != "" && sGroupCode != cTrSaleCpi.cMST_CPI_ITEM.CPI_ITEM_GRP_CD) continue;
nPrice = GetCampaignSaleItemQtyAmt(cMstSaleCpi, cSaleItem, ref nQty, ref nAmt, sPayDcDiv);
if (nQty > 0 || nAmt > 0)
{
nSaleQty += nQty;
nSaleAmt = CmUtil.DoubleAdd(nSaleAmt, nAmt);
if (nLowPrice == 0 || nLowPrice > nPrice) nLowPrice = nPrice;
}
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);
}
return nLowPrice;
}
///
/// 등록된 상품리스트에서 행사 대상상품의 특정수량 까지의 금액을 획득
///
///
///
///
///
///
///
///
public double GetCampaignMaxQtyToSaleAmt(Column.MST_SALE_CPI.DATA cMstSaleCpi, string sCpiCode, string sGroupCode, string sPluCode, long nMaxQty, string sPayDcDiv)
{
long nQty = 0, nTotQty = 0;
double nAmt = 0, nTotAmt = 0;
try
{
foreach (Column.TR_PLU.DATA cSaleItem in m_alTrPluItem)
{
if (cSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) return 0;// 지정취소
if (cSaleItem.BILLSPR_NO != m_cTrnStatus.Sale.BillSplitNo) return 0; // 빌분리번호
if (cMstSaleCpi.DC_NOADM_PASS_YN != "1" && cSaleItem.DC_PRMT_YN == "1") return 0; // 할인 불가 여부(0:가능, 1:불가)
if (sPluCode != "" && sPluCode != cSaleItem.SUB_SHOP_CD + cSaleItem.ITEM_PLU_CD) continue;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
if (sCpiCode != cTrSaleCpi.CPI_CD) continue;
if (sGroupCode != "" && sGroupCode != cTrSaleCpi.cMST_CPI_ITEM.CPI_ITEM_GRP_CD) continue;
double nPrice = GetCampaignSaleItemQtyAmt(cMstSaleCpi, cSaleItem, ref nQty, ref nAmt, sPayDcDiv);
if (nQty > 0 || nAmt > 0)
{
if (nMaxQty > 0 && nTotQty + nQty > nMaxQty)
{
for (int i = 1; i <= nQty; i++)
{
nTotQty += 1;
nTotAmt = CmUtil.DoubleAdd(nTotAmt, nPrice);
if (nMaxQty > 0 && nTotQty >= nMaxQty) break;
}
}
else
{
nTotQty += nQty;
nTotAmt = CmUtil.DoubleAdd(nTotAmt, nAmt);
}
}
break;
}
if (nMaxQty > 0 && nTotQty >= nMaxQty) 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);
}
return nTotAmt;
}
///
/// 캠페인 대상상품 수량 및 상품금액 획득
///
/// 캠페인정보
/// 상품정보
/// 대상수량
/// 대상금액
/// 결제할인구분
/// 단가
public double GetCampaignSaleItemQtyAmt(Column.MST_SALE_CPI.DATA cMstSaleCpi, Column.TR_PLU.DATA cSaleItem, ref long nDestQty, ref double nDestAmt, string sPayDcDiv)
{
double nPrice = 0;
long nDisQty = 0;
try
{
nDestQty = 0; nDestAmt = 0;
if (cSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) return 0;// 지정취소
if (cSaleItem.BILLSPR_NO != m_cTrnStatus.Sale.BillSplitNo) return 0; // 빌분리번호
if (cMstSaleCpi.DC_NOADM_PASS_YN != "1" && cSaleItem.DC_PRMT_YN == "1") return 0; // 할인 불가 여부(0:가능, 1:불가)
if (cSaleItem.FLAVOUR_DIV == ItemConst.PLU_FLAVOUR_DIV.FLAVOUR) return 0; // 플레이버 제외
if (cSaleItem.ITEM_DIV == ItemConst.PLU_ITEM_DIV.OPT_MENU && cSaleItem.SUBPRC_MENU_KEY_DIV == "1") return 0; // 부가상품(속성) 제외
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//if ((cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.FREEGIFT && cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.FREE_SAVE) && cSaleItem.FREE_GIFT_YN == "1") return 0; // 사은품제외
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 기존 할인이 적용되어 있으면 캠페인 적용 안함.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (cMstSaleCpi.TELECOM_COOP_DUP_PRMT_YN == "0" && cSaleItem.COOP_CARD_DC_AMT > 0) return 0; // 제휴카드 할인 금액
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if ((cSaleItem.ITEM_DC_AMT > 0 || cSaleItem.SUM_DC_AMT > 0) && cSaleItem.DC_DIV.Length >= 4) // 단품 할인, 소계 할인 금액
{
// 캠페인중복 여부(0:불가, 1:가능)
if (PosMstManager.GetMstPayDc(cSaleItem.DC_DIV.Substring(0, 2), cSaleItem.DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.CPI_DUP_YN) == "0") return 0;
}
if (cSaleItem.COOP_CARD_DC_AMT > 0 && cSaleItem.COOP_CARD_DC_DIV.Length >= 4) // 제휴 할인 금액
{
// 캠페인중복 여부(0:불가, 1:가능)
if (PosMstManager.GetMstPayDc(cSaleItem.COOP_CARD_DC_DIV.Substring(0, 2), cSaleItem.COOP_CARD_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.CPI_DUP_YN) == "0") return 0;
}
if (cSaleItem.POINT_DC_AMT > 0 && cSaleItem.POINT_DC_DIV.Length >= 4) // 포인트 할인 금액
{
// 캠페인중복 여부(0:불가, 1:가능)
if (PosMstManager.GetMstPayDc(cSaleItem.POINT_DC_DIV.Substring(0, 2), cSaleItem.POINT_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.CPI_DUP_YN) == "0") return 0;
}
if (cSaleItem.CPN_DC_AMT > 0 && cSaleItem.CPN_DC_DIV.Length >= 4) // 쿠폰 할인 금액
{
// 캠페인중복 여부(0:불가, 1:가능)
if (PosMstManager.GetMstPayDc(cSaleItem.CPN_DC_DIV.Substring(0, 2), cSaleItem.CPN_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.CPI_DUP_YN) == "0") return 0;
}
if (cSaleItem.EMP_DC_AMT > 0 && cSaleItem.EMP_DC_DIV.Length >= 4) // 직원 할인 금액
{
// 캠페인중복 여부(0:불가, 1:가능)
if (PosMstManager.GetMstPayDc(cSaleItem.EMP_DC_DIV.Substring(0, 2), cSaleItem.EMP_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.CPI_DUP_YN) == "0") return 0;
}
if (cSaleItem.SET_DC_AMT > 0) // 세트할인
{
// 캠페인중복 여부(0:불가, 1:가능)
if (PosMstManager.GetMstPayDc(ItemConst.PLU_DC_DIV.SET_DC.Substring(0, 2), ItemConst.PLU_DC_DIV.SET_DC.Substring(2, 2), PosMst.MST_PAY_DC.DATA.CPI_DUP_YN) == "0") return 0;
}
if (sPayDcDiv == PosConst.PAY_DC_TYPE.DC) // 할인결제구분 (1:결제, 2:할인) )
{
// 할인 행사
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
// 할인행사 이면 할인행가 간 중복 안됨
if (cTrSaleCpi.PAY_DC_DIV == PosConst.PAY_DC_TYPE.DC)
{
nDisQty += cTrSaleCpi.DC_QTY;
break;
}
if (cTrSaleCpi.PAY_DC_DIV == PosConst.PAY_DC_TYPE.PAY)
{
if (cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.FREEGIFT || cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.FREE_SAVE)
{
// 캠페인 사은품대상 상품과 중복가능여부 체크
if ((cMstSaleCpi.ITEM_DUP_PRMT_YN == "0" || cTrSaleCpi.ITEM_DUP_PRMT_YN == "0") && cTrSaleCpi.DC_QTY > 0)
{
nDisQty += cTrSaleCpi.DC_QTY;
break;
}
}
}
}
}
else if (sPayDcDiv == PosConst.PAY_DC_TYPE.PAY) // 할인결제구분 (1:결제, 2:할인) )
{
// 결제 행사
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.FREEGIFT || cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.FREE_SAVE)
{
// 사은품
if (cTrSaleCpi.PAY_DC_DIV == PosConst.PAY_DC_TYPE.DC)
{
// 캠페인 할인 상품과 중복가능여부체크
if ((cMstSaleCpi.ITEM_DUP_PRMT_YN == "0" || cTrSaleCpi.ITEM_DUP_PRMT_YN == "0") && cTrSaleCpi.DC_QTY > 0)
{
nDisQty += cTrSaleCpi.DC_QTY;
break;
}
}
else if (cTrSaleCpi.PAY_DC_DIV == PosConst.PAY_DC_TYPE.PAY)
{
// 캠페인 사은품대상 상품과 중복불가 체크
if (cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.FREEGIFT || cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.FREE_SAVE)
{
nDisQty += cTrSaleCpi.DC_QTY;
break;
}
}
}
else
{
// 결제할인
if (cTrSaleCpi.PAY_DC_DIV == PosConst.PAY_DC_TYPE.DC)
{
// 캠페인 할인 상품과 중복가능여부체크
if ((cMstSaleCpi.ITEM_DUP_PRMT_YN == "0" || cTrSaleCpi.ITEM_DUP_PRMT_YN == "0") && cTrSaleCpi.DC_QTY > 0)
{
nDisQty += cTrSaleCpi.DC_QTY;
break;
}
}
else if (cTrSaleCpi.PAY_DC_DIV == PosConst.PAY_DC_TYPE.PAY)
{
if ((cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.FREEGIFT || cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.FREE_SAVE)
&& cTrSaleCpi.DC_SUM_AMT == 0) continue;
// 캠페인 결제할인 상품과 중복가능여부체크
nDisQty += cTrSaleCpi.DC_QTY;
break;
}
}
}
}
else
{
// HP 사은품 행사
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.FREEGIFT || cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.FREE_SAVE)
{
// 사은품
if (cTrSaleCpi.PAY_DC_DIV == PosConst.PAY_DC_TYPE.DC)
{
// 캠페인 할인 상품과 중복가능여부체크
if ((cMstSaleCpi.ITEM_DUP_PRMT_YN == "0" || cTrSaleCpi.ITEM_DUP_PRMT_YN == "0") && cTrSaleCpi.DC_QTY > 0)
{
nDisQty += cTrSaleCpi.DC_QTY;
break;
}
}
}
else
{
// 결제할인
if (cTrSaleCpi.PAY_DC_DIV == PosConst.PAY_DC_TYPE.DC)
{
// 캠페인 할인 상품과 중복가능여부체크
if ((cMstSaleCpi.ITEM_DUP_PRMT_YN == "0" || cTrSaleCpi.ITEM_DUP_PRMT_YN == "0") && cTrSaleCpi.DC_QTY > 0)
{
nDisQty += cTrSaleCpi.DC_QTY;
break;
}
}
}
}
}
if (nDisQty == 0)
{
nDestQty = cSaleItem.SALE_QTY;
nPrice = cSaleItem.SALE_PRC;
// 캠페인 대상 체크(상품캠페인) - 예외할인, 추가금액할인 제외
if (cMstSaleCpi.TRGT_CUST_TYPE == ItemConst.CPI_TRGT_CUST_TYPE.NORMAL && cMstSaleCpi.CUST_PAY_TYPE == ItemConst.CPI_CUST_PAY_TYPE.NORMAL)
{
nDestAmt = CmUtil.DoubleAdd(cSaleItem.BILL_AMT, CmUtil.DoubleAdd(cSaleItem.EXCEP_DC_AMT, cSaleItem.ETC_DC_AMT));
}
else
{
//#20171206 17크리스마스캠페인 start
//할인, 할인+적립 캠페인인 경우 제휴할인그룹 중복 여부에 따라 할인대상금액 계산
//기존
//nDestAmt = cSaleItem.BILL_AMT;
//변경
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DISCOUNT || cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DIS_SAVE)
{
if ((cMstSaleCpi.TELECOM_COOP_DUP_PRMT_YN == "2") &&
(cSaleItem.COOP_CARD_DC_DIV.Substring(0, 2) == ItemConst.TR_ITEM_ID.MOBILE_COM_POINT) &&
(cSaleItem.COOP_CARD_DC_DIV.Substring(2, 2) == ItemConst.TR_ITEM_ID.MOBILE_COM.MOBILE_SKT ||
cSaleItem.COOP_CARD_DC_DIV.Substring(2, 2) == ItemConst.TR_ITEM_ID.MOBILE_COM.MOBILE_KTF ||
//#20180413 웰컴카드 신규기능 추가 start,phj
cSaleItem.COOP_CARD_DC_DIV.Substring(2, 2) == ItemConst.TR_ITEM_ID.MOBILE_COM.WELCOMECARD ||
//#20180413 웰컴카드 신규기능 추가 end,phj
cSaleItem.COOP_CARD_DC_DIV.Substring(2, 2) == ItemConst.TR_ITEM_ID.MOBILE_COM.MOBILE_LGT))
{
nDestAmt = cSaleItem.BILL_AMT + cSaleItem.COOP_CARD_DC_AMT;
}
else
{
nDestAmt = cSaleItem.BILL_AMT;
}
}
else
{
nDestAmt = cSaleItem.BILL_AMT;
}
//#20171206 17크리스마스캠페인 end
}
}
else if (cSaleItem.SALE_QTY > nDisQty)
{
nDestQty = cSaleItem.SALE_QTY - nDisQty;
nPrice = cSaleItem.SALE_PRC;
// 캠페인 대상 체크(상품캠페인) - 예외할인, 추가금액할인 제외
if (cMstSaleCpi.TRGT_CUST_TYPE == ItemConst.CPI_TRGT_CUST_TYPE.NORMAL && cMstSaleCpi.CUST_PAY_TYPE == ItemConst.CPI_CUST_PAY_TYPE.NORMAL)
{
nDestAmt = CmUtil.DoubleAdd(cSaleItem.BILL_AMT,CmUtil.DoubleAdd(cSaleItem.EXCEP_DC_AMT, cSaleItem.ETC_DC_AMT));
nDestAmt = CmUtil.DoubleMultiplication(CmUtil.DoubleDivision(nDestAmt, cSaleItem.SALE_QTY), nDestQty);
}
else
{
nDestAmt = CmUtil.DoubleMultiplication(nDestQty, nPrice);
}
}
if (sPayDcDiv == PosConst.PAY_DC_TYPE.PAY)
{
if (nDestAmt / nDestQty < nPrice) nPrice = CmUtil.DoubleDivision(nDestAmt, nDestQty);
}
}
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 nPrice;
}
#endregion
#region ExistCampaignDiscount 캠페인 할인 적용 여부 체크
///
/// 캠페인 할인 적용(중복불가 체크) 여부 체크
///
/// true:중복불가, false:중복가능
public bool ExistCampaignDupApply(string sCPI_CUST_BNFT_TYPE, string sDUP_APPLY_YN)
{
try
{
// 캠페인 상품
foreach (Column.TR_PLU.DATA cSaleItem in m_alTrPluItem)
{
if (cSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue; // 지정취소
if (cSaleItem.BILLSPR_NO != m_cTrnStatus.Sale.BillSplitNo) continue; // 빌분리번호
if (cSaleItem.SALE_PRC == 0) continue;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
// 캠페인 할인이 적용 되어있으면 중복 안함 => 중복 가능여부(1:중복적용 가능, 0:중복적용 불가)
if (cTrSaleCpi.DC_SUM_AMT > 0 && sDUP_APPLY_YN == "0") return true;
if (cTrSaleCpi.DC_SUM_AMT > 0 && cTrSaleCpi.DUP_APPLY_YN == "0") return true;
}
}
// 캠페인 정보
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in m_alTrSaleCpi)
{
if (cTrSaleCpi.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL) continue;
// 적립 캠페인은 다름 캠페인과 중복 불가 체크 하지 않음
if (cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.PNTSAVE ||
//#17169 스마일페이 변경요청 건 start
//기존
//cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DIS_SAVE ||
//변경
//스마일페이결제할인캠페인일 때는 ItemConst.CPI_CUST_BNFT.DIS_SAVE 값이라도 중복가능여부 체크하도록 할까?
//어차피 아직은 스마일페이결제할인캠페인은 m_alTrSaleCpi 이곳에 없겠지만....
(cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DIS_SAVE && cTrSaleCpi.CUST_PAY_TYPE != ItemConst.CPI_CUST_PAY_TYPE.SMILEPAY) ||
//#17169 스마일페이 변경요청 건 end
cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.FREE_SAVE) continue;
// 캠페인 중복적용 여부(1:중복적용 가능, 0:중복적용 불가)
if (cTrSaleCpi.DUP_APPLY_YN == "0" || sDUP_APPLY_YN == "0") 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;
}
///
/// 캠페인 할인 적용 여부 체크
///
///
public bool ExistCampaignDiscount(string sCPI_CD)
{
try
{
foreach (Column.TR_PLU.DATA cSaleItem in m_alTrPluItem)
{
if (cSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue; // 지정취소
if (cSaleItem.BILLSPR_NO != m_cTrnStatus.Sale.BillSplitNo) continue; // 빌분리번호
if (cSaleItem.SALE_PRC == 0) continue;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
if (sCPI_CD != cTrSaleCpi.CPI_CD) continue;
if (cTrSaleCpi.DC_SUM_AMT > 0) 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 GetCampaignSaleQtyReqDiv 캠페인 구성 자격 구분에 따른 대상 상품수량 획득
///
/// 캠페인 구성 자격 구분에 따른 대상 상품수량 획득
///
/// 구성자격구분
/// 구성금액
/// 수량
/// 금액
///
public long GetCampaignDisQtyCompntReqDiv(string sCompntReqDiv, double nCompntAmt, long nQty, double nAmount)
{
long nDisQty = 0;
try
{
if (sCompntReqDiv == ItemConst.CPI_COND_TYPE.MATCH_QTY) // 수량
{
nDisQty = nQty / (long)nCompntAmt;
}
else if (sCompntReqDiv == ItemConst.CPI_COND_TYPE.MIN_AMT) // 금액
{
if (nAmount >= nCompntAmt) nDisQty = nQty;
}
else if (sCompntReqDiv == ItemConst.CPI_COND_TYPE.MIN_QTY) // 최소수량
{
if (nQty >= (long)nCompntAmt) nDisQty = nQty;
}
}
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 nDisQty;
}
#endregion
#region CheckCampaignReqAmt 캠페인 성립금액 구분 체크
///
/// 캠페인 성립금액 구분 체크
///
///
///
///
///
public bool CheckCampaignReqAmt(Column.MST_SALE_CPI.DATA cMstSaleCpi, string sCpiCode, long nSaleQty, double nSaleAmt)
{
try
{
// 조건의 캠페인 성립금액 체크
if (cMstSaleCpi.TRGT_AMT_TYPE == ItemConst.CPI_TRGT_AMT_TYPE.RECT_AMT || cMstSaleCpi.TRGT_AMT_TYPE == ItemConst.CPI_TRGT_AMT_TYPE.RECT_ITEM_AMT)
{
//캠페인 구매금액 체크
if (cMstSaleCpi.TRGT_AMT > m_cTrnStatus.Sale.NetSaleAmt) return false; // 구매금액체크
}
if (cMstSaleCpi.TRGT_AMT_TYPE == ItemConst.CPI_TRGT_AMT_TYPE.ITEM_AMT || cMstSaleCpi.TRGT_AMT_TYPE == ItemConst.CPI_TRGT_AMT_TYPE.RECT_ITEM_AMT)
{
// 대상상품 금액체크
if (sCpiCode != "") GetCampaignSaleQtyAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, "", "", ref nSaleQty, ref nSaleAmt, "0");
// 대상상품 등록 여부 체크
if (nSaleQty == 0 && nSaleAmt == 0) return false;
// 대상상품 금액체크
if (cMstSaleCpi.TRGT_AMT_TYPE == ItemConst.CPI_TRGT_AMT_TYPE.ITEM_AMT)
{
//캠페인 구매금액 체크
if (cMstSaleCpi.TRGT_AMT > nSaleAmt) return false;
}
}
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 ClearCampaginItem 등록된 캠페인 리스트에서 해당 캠페인의 적용정보를 삭제 한다
///
/// 등록된 캠페인 리스트에서 해당 캠페인의 적용정보를 삭제.
///
/// 캠페인코드
///
public bool ClearCampaginItem(string sCpiCode)
{
return ClearCampaginItem(sCpiCode, true);
}
///
/// 등록된 캠페인 리스트에서 해당 캠페인의 적용정보를 삭제.
///
/// 캠페인코드
/// 상품캠페인삭제여부
///
public bool ClearCampaginItem(string sCpiCode, bool bClearPlu)
{
try
{
if (bClearPlu == true)
{
// 상품 캠페인 정보
foreach (Column.TR_PLU.DATA cPluItem in m_alTrPluItem)
{
if (cPluItem.alTrSaleCpi == null) continue;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cPluItem.alTrSaleCpi)
{
if (sCpiCode == "" || sCpiCode == cTrSaleCpi.CPI_CD)
{
cTrSaleCpi.DC_QTY = 0;
cTrSaleCpi.DC_PRC = 0;
cTrSaleCpi.DC_SUM_AMT = 0;
cTrSaleCpi.ACCUM_POINT = 0;
cTrSaleCpi.PAY_DC_DIV = "0";
}
}
ExeccutePluItemAmount(cPluItem);
}
}
// 상품외 캠페인 정보
foreach(Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in m_alTrSaleCpi)
{
if (sCpiCode == "" || sCpiCode == cTrSaleCpi.CPI_CD) cTrSaleCpi.CANCEL_DIV = "1";
}
// 상품 합계금액 계산(거래해더)
m_cDataService.UpdatePluAmount(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 ExeccutePluItemAmount 상품 판매가 재계산
///
/// 상품 판매가 재계산
///
private void ExeccutePluItemAmount(Column.TR_PLU.DATA cPluItem)
{
try
{
// 캠페인 행사 합계금액 계산
cPluItem.CPI_DC_QTY = 0;
cPluItem.CPI_DC_AMT = 0;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cPluItem.alTrSaleCpi)
{
if (cTrSaleCpi.PAY_DC_DIV == PosConst.PAY_DC_TYPE.DC) // 결제할인구분 (1:결제, 2:할인)
{
cPluItem.CPI_DC_QTY += cTrSaleCpi.DC_QTY;
cPluItem.CPI_DC_AMT = CmUtil.DoubleAdd(cPluItem.CPI_DC_AMT, cTrSaleCpi.DC_SUM_AMT);
}
}
// 상품별 판매금액 재계산
m_cDataService.UpdatePluItemAmount(cPluItem);
}
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 AddSaleItemTrSaleCpiData 상품정보에 캠페인 정보 추가
///
/// 상품정보에 캠페인 정보 추가
///
public Column.TR_SALE_CPI_RSLT.DATA AddSaleItemTrSaleCpiData(Column.TR_PLU.DATA cSaleItem, string sCPI_CD, string sITEM_COMPNT_GRP, string sCPI_DC_DIV, double nCPI_DC_AMT)
{
try
{
if (cSaleItem.alTrSaleCpi == null) return null;
foreach (Column.TR_SALE_CPI_RSLT.DATA cSaleCpi in cSaleItem.alTrSaleCpi)
{
if (cSaleCpi.CPI_CD == sCPI_CD && cSaleCpi.cMST_CPI_ITEM.CPI_ITEM_GRP_CD == sITEM_COMPNT_GRP) return cSaleCpi;
}
if (m_htMstSaleCpi.Contains(sCPI_CD) == false) return null;
// 캠페인 조건 정보 획득
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCPI_CD];
Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi = new Column.TR_SALE_CPI_RSLT.DATA();
// 캠페인 실적 정보 설정
cTrSaleCpi.CPI_CD = sCPI_CD;
cTrSaleCpi.ITEM_APPLY_METHD = cMstSaleCpi.ITEM_APPLY_METHD;
cTrSaleCpi.SUB_SHOP_CD = cSaleItem.SUB_SHOP_CD;
cTrSaleCpi.ITEM_PLU_CD = cSaleItem.ITEM_PLU_CD;
cTrSaleCpi.DC_QTY = 0;
cTrSaleCpi.DC_PRC = 0;
cTrSaleCpi.DC_SUM_AMT = 0;
cTrSaleCpi.CPI_CUST_BNFT_TYPE = cMstSaleCpi.CPI_CUST_BNFT_TYPE;
cTrSaleCpi.LTTR_NMPLAT_NO = "";
cTrSaleCpi.TRGT_CUST_TYPE = cMstSaleCpi.TRGT_CUST_TYPE;
cTrSaleCpi.BILLSPR_NO = m_cTrnStatus.Sale.BillSplitNo;
cTrSaleCpi.SLACK_FIELD = "";
cTrSaleCpi.CANCEL_DIV = "0";
cTrSaleCpi.ACCUM_POINT = 0;
cTrSaleCpi.CUST_PAY_TYPE = cMstSaleCpi.CUST_PAY_TYPE;
cTrSaleCpi.PRESENT_DIV = "0";
cTrSaleCpi.PAY_DC_DIV = "0";
cTrSaleCpi.BASIC_RULE_EXCEP_YN = cMstSaleCpi.BASIC_RULE_EXCEP_YN;
cTrSaleCpi.TELECOM_COOP_DUP_PRMT_YN = cMstSaleCpi.TELECOM_COOP_DUP_PRMT_YN;
//#15583 캠페인 기능 개선 요청 start
cTrSaleCpi.MOBILE_CPN_DUP_PRMT_YN = cMstSaleCpi.MOBILE_CPN_DUP_PRMT_YN;
cTrSaleCpi.HPY_CPN_DUP_PRMT_YN = cMstSaleCpi.HPY_CPN_DUP_PRMT_YN;
//#15583 캠페인 기능 개선 요청 end
cTrSaleCpi.BASIC_HP_ACCUM_YN = cMstSaleCpi.BASIC_HP_ACCUM_YN;
cTrSaleCpi.BASIC_HP_ACCUM_STD = cMstSaleCpi.BASIC_HP_ACCUM_STD;
cTrSaleCpi.DUP_APPLY_YN = cMstSaleCpi.DUP_APPLY_YN;
// 캠페인 상품정보 설정
cTrSaleCpi.cMST_CPI_ITEM.CPI_ITEM_GRP_CD = sITEM_COMPNT_GRP.Trim();
cTrSaleCpi.cMST_CPI_ITEM.CPI_DC_TYPE = sCPI_DC_DIV;
cTrSaleCpi.cMST_CPI_ITEM.DC_RATE_AMT = nCPI_DC_AMT;
cTrSaleCpi.ITEM_DUP_PRMT_YN = cMstSaleCpi.ITEM_DUP_PRMT_YN;
//#17169 스마일페이 변경요청 건 start
cTrSaleCpi.OFFER_ID = cMstSaleCpi.OFFER_ID;
//#17169 스마일페이 변경요청 건 end
cSaleItem.alTrSaleCpi.Add(cTrSaleCpi);
return cTrSaleCpi;
}
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 null;
}
#endregion
#region AddTrCampaignData 캠페인 아이템에 캠페인 실적정보 추가
///
/// 캠페인 아이템에 캠페인 실적정보 추가
///
public Column.TR_SALE_CPI_RSLT.DATA AddTrCampaignData(string sCPI_CD, long nSavePnt, string sLttrNmplatNo, string sLttrGrade)
{
try
{
// 캠페인 조건 정보 획득
if (m_htMstSaleCpi.Contains(sCPI_CD) == false) return null;
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCPI_CD];
Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi = new Column.TR_SALE_CPI_RSLT.DATA();
// 캠페인 실적 정보 설정
cTrSaleCpi.CPI_CD = sCPI_CD;
cTrSaleCpi.ITEM_APPLY_METHD = cMstSaleCpi.ITEM_APPLY_METHD;
cTrSaleCpi.SUB_SHOP_CD = "";
cTrSaleCpi.ITEM_PLU_CD = "";
cTrSaleCpi.DC_QTY = 1;
cTrSaleCpi.DC_PRC = 0;
cTrSaleCpi.DC_SUM_AMT = 0;
cTrSaleCpi.CPI_CUST_BNFT_TYPE = cMstSaleCpi.CPI_CUST_BNFT_TYPE;
cTrSaleCpi.LTTR_NMPLAT_NO = sLttrNmplatNo;
cTrSaleCpi.TRGT_CUST_TYPE = cMstSaleCpi.TRGT_CUST_TYPE;
cTrSaleCpi.BILLSPR_NO = m_cTrnStatus.Sale.BillSplitNo;
cTrSaleCpi.SLACK_FIELD = m_sHpCustID;
cTrSaleCpi.CANCEL_DIV = "0";
cTrSaleCpi.ACCUM_POINT = nSavePnt;
cTrSaleCpi.CUST_PAY_TYPE = cMstSaleCpi.CUST_PAY_TYPE;
cTrSaleCpi.PRESENT_DIV = "0";
cTrSaleCpi.PAY_DC_DIV = "0";
cTrSaleCpi.BASIC_RULE_EXCEP_YN = cMstSaleCpi.BASIC_RULE_EXCEP_YN;
cTrSaleCpi.TELECOM_COOP_DUP_PRMT_YN = cMstSaleCpi.TELECOM_COOP_DUP_PRMT_YN;
//#15583 캠페인 기능 개선 요청 start
cTrSaleCpi.MOBILE_CPN_DUP_PRMT_YN = cMstSaleCpi.MOBILE_CPN_DUP_PRMT_YN;
cTrSaleCpi.HPY_CPN_DUP_PRMT_YN = cMstSaleCpi.HPY_CPN_DUP_PRMT_YN;
//#15583 캠페인 기능 개선 요청 end
cTrSaleCpi.BASIC_HP_ACCUM_YN = cMstSaleCpi.BASIC_HP_ACCUM_YN;
cTrSaleCpi.BASIC_HP_ACCUM_STD = cMstSaleCpi.BASIC_HP_ACCUM_STD;
cTrSaleCpi.LTTR_GRADE = sLttrGrade;
cTrSaleCpi.DUP_APPLY_YN = cMstSaleCpi.DUP_APPLY_YN;
cTrSaleCpi.OFFER_ID = cMstSaleCpi.OFFER_ID;
cTrSaleCpi.ITEM_DUP_PRMT_YN = cMstSaleCpi.ITEM_DUP_PRMT_YN;
m_alTrSaleCpi.Add(cTrSaleCpi);
return cTrSaleCpi;
}
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 null;
}
#endregion
#region CheckCampaginCard 캠페인 카드 마스터 체크
///
/// 캠페인 카드 마스터 체크
///
///
///
///
public bool CheckCampaginCard(string sCpiCode, string sCardNo, bool bUsePrefix)
{
bool bExistCpi = false;
bool bExistCardPreFix = false;
try
{
foreach (string[] saCpiCard in m_alMstCpiCard)
{
if(saCpiCard[0] == sCpiCode)
{
bExistCpi = true;
int nLen = saCpiCard[1].Length;
if (nLen > 0 && sCardNo.Length >= nLen)
{
bool bExist = false;
if (saCpiCard[1] == sCardNo.Substring(0, nLen)) bExist = true;
else if (nLen == 6)
{
if (saCpiCard[1] == sCardNo.Substring(0, 5) + "X") bExist = true;
else if (saCpiCard[1] == sCardNo.Substring(0, 4) + "XX") bExist = true;
else if (saCpiCard[1] == sCardNo.Substring(0, 3) + "XXX") bExist = true;
else if (saCpiCard[1] == sCardNo.Substring(0, 2) + "XXXX") bExist = true;
else if (saCpiCard[1] == sCardNo.Substring(0, 1) + "XXXXX") bExist = true;
}
if (bExist == false) continue;
}
// 서비스코드 체크
int nLoc = CmUtil.IntParse(saCpiCard[2]);
string sCheckValue = saCpiCard[3];
if (nLoc > 0 && sCheckValue.Trim() != "")
{
if (CmUtil.MidH(sCardNo, nLoc - 1, sCheckValue.Length) == sCheckValue)
{
bExistCardPreFix = true;
}
}
else
{
bExistCardPreFix = true;
}
if (bExistCardPreFix == true) break;
}
}
if (bExistCpi == false && bUsePrefix == false) bExistCardPreFix = 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 bExistCardPreFix;
}
#endregion
#region 추가 적립 행사 계산
///
/// 추가 적립 행사 계산
///
///
///
public long CampaignHappyPointSave(Column.MST_SALE_CPI.DATA cMstSaleCpi, ref double nSaveAmt, ref long nSavePnt)
{
nSaveAmt = 0; nSavePnt = 0;
try
{
foreach (Column.TR_PLU.DATA cPluItem in m_alTrPluItem)
{
if (cPluItem.ACCUM_PRMT_YN == "0") continue; // 추가적립구분 => 대상상품
if (cPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue; // 지정취소
if (cPluItem.BILLSPR_NO != m_cTrnStatus.Sale.BillSplitNo) continue; // 빌분리번호
if (cPluItem.SALE_PRC == 0) continue;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool bExist = false;
if (cMstSaleCpi.ADD_HP_ACCUM_TRGT_STD == ItemConst.CPI_ADD_ACCUM_DIV.ITEM_AMT)
{
// 추가적립구분 => 대상상품
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cPluItem.alTrSaleCpi)
{
if (cMstSaleCpi.CPI_CD == cTrSaleCpi.CPI_CD)
{
bExist = true;
break;
}
}
}
else
{
bExist = true;
if (cMstSaleCpi.ADD_HP_ACCUM_TRGT_STD == ItemConst.CPI_ADD_ACCUM_DIV.NOT_ITEM_AMT)
{
// 추가적립구분 => 대상상품외
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cPluItem.alTrSaleCpi)
{
if (cMstSaleCpi.CPI_CD == cTrSaleCpi.CPI_CD)
{
bExist = false;
break;
}
}
}
}
if (bExist == false) continue;
// 추가적립 대상 상품 존재
if ((cPluItem.ITEM_DC_AMT > 0 || cPluItem.SUM_DC_AMT > 0) && cPluItem.DC_DIV.Length >= 4) // 단품 할인, 소계 할인 금액
{
// HP 기본 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.DC_DIV.Substring(0, 2), cPluItem.DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.DC_DIV.Substring(0, 2), cPluItem.DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2") continue;
}
if (cPluItem.COOP_CARD_DC_AMT > 0 && cPluItem.COOP_CARD_DC_DIV.Length >= 4) // 제휴 할인 금액
{
// HP 기본 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.COOP_CARD_DC_DIV.Substring(0, 2), cPluItem.COOP_CARD_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.COOP_CARD_DC_DIV.Substring(0, 2), cPluItem.COOP_CARD_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2") continue;
}
if (cPluItem.POINT_DC_AMT > 0 && cPluItem.POINT_DC_DIV.Length >= 4) // 포인트 할인 금액
{
// HP 기본 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.POINT_DC_DIV.Substring(0, 2), cPluItem.POINT_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.POINT_DC_DIV.Substring(0, 2), cPluItem.POINT_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2") continue;
}
if (cPluItem.CPN_DC_AMT > 0 && cPluItem.CPN_DC_DIV.Length >= 4) // 쿠폰 할인 금액
{
// HP 기본 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.CPN_DC_DIV.Substring(0, 2), cPluItem.CPN_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.CPN_DC_DIV.Substring(0, 2), cPluItem.CPN_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2") continue;
}
if (cPluItem.EMP_DC_AMT > 0 && cPluItem.EMP_DC_DIV.Length >= 4) // 직원 할인 금액
{
// HP 기본 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.EMP_DC_DIV.Substring(0, 2), cPluItem.EMP_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.EMP_DC_DIV.Substring(0, 2), cPluItem.EMP_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2") continue;
}
if (cPluItem.SET_DC_AMT > 0) // 세트할인
{
// HP 기본 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(ItemConst.PLU_DC_DIV.SET_DC.Substring(0, 2), ItemConst.PLU_DC_DIV.SET_DC.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0") return 0;
if (PosMstManager.GetMstPayDc(ItemConst.PLU_DC_DIV.SET_DC.Substring(0, 2), ItemConst.PLU_DC_DIV.SET_DC.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2") continue;
}
if (cPluItem.ETC_DC_AMT > 0 && cPluItem.ETC_DC_DIV.Length >= 4) // 기타 할인 금액
{
// HP 기본 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.ETC_DC_DIV.Substring(0, 2), cPluItem.ETC_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.ETC_DC_DIV.Substring(0, 2), cPluItem.ETC_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2") continue;
}
// 추가적립일때 캠페인 성립 상품과 중복 적용 가능여부 체크
long nDisQty = 0;
if (cPluItem.alTrSaleCpi != null)
{
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cPluItem.alTrSaleCpi)
{
if (cMstSaleCpi.CPI_CD == cTrSaleCpi.CPI_CD) continue;
if (cTrSaleCpi.PAY_DC_DIV == PosConst.PAY_DC_TYPE.DC)
{
// 캠페인 할인 상품과 중복가능여부체크
if ((cMstSaleCpi.ITEM_DUP_PRMT_YN == "0" || cTrSaleCpi.ITEM_DUP_PRMT_YN == "0") && cTrSaleCpi.DC_QTY > 0)
{
nDisQty += cTrSaleCpi.DC_QTY;
break;
}
}
}
}
if (nDisQty == 0)
{
nSaveAmt = CmUtil.DoubleAdd(nSaveAmt, cPluItem.BILL_AMT);
}
else if (cPluItem.SALE_QTY > nDisQty)
{
nSaveAmt = CmUtil.DoubleAdd(nSaveAmt, CmUtil.DoubleMultiplication(cPluItem.SALE_QTY - nDisQty, cPluItem.SALE_PRC));
}
}
if (nSaveAmt <= 0) return 0;
// 캠페인 성립금액 구분 체크
if (CheckCampaignReqAmt(cMstSaleCpi, "", 0, nSaveAmt) == false) return 0;
// 해피포인트 적립 대상금액은 결제 금액중 적립가능 결제금액만 설정 함.
double nExceptPayAmt = 0;
ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
foreach (Column.TR_PAYMENT.DATA cPayItem in alPayItem)
{
if (cPayItem.CANCEL_DIV != PosConst.CANCEL_DIV.NORMAL) continue;
if (cPayItem.PAY_DTL_CD_05 == PosConst.PAY_DC_TYPE.PAY) // 할인결제구분 (1:결제, 2:할인)
{
// 결제수단별 HP 기본 적립 여부 체크(적립불가 결제수단) => HP 기본 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPayItem.PAY_WAY_CD, cPayItem.PAY_DTL_CD_01, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPayItem.PAY_WAY_CD, cPayItem.PAY_DTL_CD_01, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2")
{
nExceptPayAmt = CmUtil.DoubleAdd(nExceptPayAmt, cPayItem.PAY_AMT);
}
else if (cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.CREDITCARD_ITEM && cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.CREDITCARD.CREDIT_CARD)
{
//#16745 신용카드 포인트 결제 시 해피포인트 취소되는 현상 확인요청 start
//기존
#region 기존
/*
// 신용카드 포인트사용 결제 적립 없음
if (CmUtil.IntParse(cPayItem.OCCUR_ENTRY_14) >= 60) nExceptPayAmt = CmUtil.DoubleAdd(nExceptPayAmt, cPayItem.PAY_AMT);
*/
#endregion 기존
//변경
#region 변경
if (CmUtil.IntParse(cPayItem.OCCUR_ENTRY_14) >= 60 && cPayItem.PAY_DTL_CD_02 != "")
{
switch (cPayItem.PAY_DTL_CD_02)
{
#region
case ItemConst.CREDITCARD_DC_TY.CREDIT_SPNT: //삼성포인트
if (PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.SAMSUNG_POINT, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0")
{
return 0;
}
else if (PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.SAMSUNG_POINT, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2")
{
nExceptPayAmt = CmUtil.DoubleAdd(nExceptPayAmt, cPayItem.PAY_AMT);
}
break;
case ItemConst.CREDITCARD_DC_TY.SHINHAN_CARD_POINT: //신한포인트
if (PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.SHINHAN_POINT, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0")
{
return 0;
}
else if (PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.SHINHAN_POINT, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2")
{
nExceptPayAmt = CmUtil.DoubleAdd(nExceptPayAmt, cPayItem.PAY_AMT);
}
break;
case ItemConst.CREDITCARD_DC_TY.HYUNDAI_M_POINTS: //현대M
if (PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.HYUNDAI_MPOINTS, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0")
{
return 0;
}
else if (PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.HYUNDAI_MPOINTS, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2")
{
nExceptPayAmt = CmUtil.DoubleAdd(nExceptPayAmt, cPayItem.PAY_AMT);
}
break;
// grayber@20180102 우리모아포인트 추가 start - 결제수단별 HP 기본 적립 여부 체크 분기 추가
case ItemConst.CREDITCARD_DC_TY.WOORIMORE_POINTS:
if (PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.WOORIMORE_POINTS, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0")
{
return 0;
}
else if (PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.WOORIMORE_POINTS, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2")
{
nExceptPayAmt = CmUtil.DoubleAdd(nExceptPayAmt, cPayItem.PAY_AMT);
}
break;
// grayber@20180102 우리모아포인트 추가 end
default:
if (CmUtil.IntParse(cPayItem.OCCUR_ENTRY_14) >= 60) nExceptPayAmt = CmUtil.DoubleAdd(nExceptPayAmt, cPayItem.PAY_AMT);
break;
#endregion
}
}
else
{
// 신용카드 포인트사용 결제 적립 없음
if (CmUtil.IntParse(cPayItem.OCCUR_ENTRY_14) >= 60) nExceptPayAmt = CmUtil.DoubleAdd(nExceptPayAmt, cPayItem.PAY_AMT);
}
#endregion 변경
//#16745 신용카드 포인트 결제 시 해피포인트 취소되는 현상 확인요청 end
}
}
}
if (nExceptPayAmt > 0)
{
//#20171219 할인, 적립 제외 금액 계산시 상품리스트에서 계산된 금액에서 빼도록 수정 start
//기존
//double nPaySaveAmt = m_cTrnStatus.Head.NetSaleAmt - nExceptPayAmt;
//변경
double nPaySaveAmt = nSaveAmt - nExceptPayAmt;
//#20171219 할인, 적립 제외 금액 계산시 상품리스트에서 계산된 금액에서 빼도록 수정 end
//#20171222 대상금액이 0보다 작은 경우 전문 오류 발생으로 0으로 변경 start
if (nPaySaveAmt <= 0) return 0;
//#20171222 대상금액이 0보다 작은 경우 전문 오류 발생으로 0으로 변경 end
if (nSaveAmt > nPaySaveAmt) nSaveAmt = nPaySaveAmt;
}
// 적립 포인트 계산
nSavePnt = (long)CmUtil.MathRounds(CmUtil.MathAmtPercent(nSaveAmt, cMstSaleCpi.ADD_HP_ACCUM_RATE), PosConst.MATH_ROUND.CEILING, 0);
}
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 nSavePnt;
}
///
/// 결제수단별 추가 적립 계산
///
///
///
public double PaymentHappyPointSave()
{
double nSaveAmt = 0;
try
{
foreach (Column.TR_PLU.DATA cPluItem in m_alTrPluItem)
{
if (cPluItem.ACCUM_PRMT_YN == "0") continue; // 추가적립구분 => 대상상품
if (cPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue; // 지정취소
if (cPluItem.BILLSPR_NO != m_cTrnStatus.Sale.BillSplitNo) continue; // 빌분리번호
if (cPluItem.SALE_PRC == 0) continue;
// 추가적립 대상 상품 존재
if ((cPluItem.ITEM_DC_AMT > 0 || cPluItem.SUM_DC_AMT > 0) && cPluItem.DC_DIV.Length >= 4) // 단품 할인, 소계 할인 금액
{
// HP 추가 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.DC_DIV.Substring(0, 2), cPluItem.DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_ADD_ACCUM_DIV) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.DC_DIV.Substring(0, 2), cPluItem.DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_ADD_ACCUM_DIV) == "2") continue;
}
if (cPluItem.COOP_CARD_DC_AMT > 0 && cPluItem.COOP_CARD_DC_DIV.Length >= 4) // 제휴 할인 금액
{
// HP 추가 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.COOP_CARD_DC_DIV.Substring(0, 2), cPluItem.COOP_CARD_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_ADD_ACCUM_DIV) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.COOP_CARD_DC_DIV.Substring(0, 2), cPluItem.COOP_CARD_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_ADD_ACCUM_DIV) == "2") continue;
}
if (cPluItem.POINT_DC_AMT > 0 && cPluItem.POINT_DC_DIV.Length >= 4) // 포인트 할인 금액
{
// HP 추가 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.POINT_DC_DIV.Substring(0, 2), cPluItem.POINT_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_ADD_ACCUM_DIV) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.POINT_DC_DIV.Substring(0, 2), cPluItem.POINT_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_ADD_ACCUM_DIV) == "2") continue;
}
if (cPluItem.CPN_DC_AMT > 0 && cPluItem.CPN_DC_DIV.Length >= 4) // 쿠폰 할인 금액
{
// HP 추가 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.CPN_DC_DIV.Substring(0, 2), cPluItem.CPN_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_ADD_ACCUM_DIV) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.CPN_DC_DIV.Substring(0, 2), cPluItem.CPN_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_ADD_ACCUM_DIV) == "2") continue;
}
if (cPluItem.EMP_DC_AMT > 0 && cPluItem.EMP_DC_DIV.Length >= 4) // 직원 할인 금액
{
// HP 추가 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.EMP_DC_DIV.Substring(0, 2), cPluItem.EMP_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_ADD_ACCUM_DIV) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.EMP_DC_DIV.Substring(0, 2), cPluItem.EMP_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_ADD_ACCUM_DIV) == "2") continue;
}
if (cPluItem.SET_DC_AMT > 0) // 세트할인
{
// HP 추가 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(ItemConst.PLU_DC_DIV.SET_DC.Substring(0, 2), ItemConst.PLU_DC_DIV.SET_DC.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_ADD_ACCUM_DIV) == "0") return 0;
if (PosMstManager.GetMstPayDc(ItemConst.PLU_DC_DIV.SET_DC.Substring(0, 2), ItemConst.PLU_DC_DIV.SET_DC.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_ADD_ACCUM_DIV) == "2") continue;
}
if (cPluItem.ETC_DC_AMT > 0 && cPluItem.ETC_DC_DIV.Length >= 4) // 기타 할인 금액
{
// HP 추가 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.ETC_DC_DIV.Substring(0, 2), cPluItem.ETC_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_ADD_ACCUM_DIV) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.ETC_DC_DIV.Substring(0, 2), cPluItem.ETC_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_ADD_ACCUM_DIV) == "2") continue;
}
nSaveAmt = CmUtil.DoubleAdd(nSaveAmt, cPluItem.BILL_AMT);
}
if (nSaveAmt <= 0) return 0;
double nExceptPayAmt = 0;
ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
foreach (Column.TR_PAYMENT.DATA cPayItem in alPayItem)
{
if (cPayItem.CANCEL_DIV != PosConst.CANCEL_DIV.NORMAL) continue;
if (cPayItem.PAY_DTL_CD_05 == PosConst.PAY_DC_TYPE.PAY) // 할인결제구분 (1:결제, 2:할인)
{
// 결제수단별 추가 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPayItem.PAY_WAY_CD, cPayItem.PAY_DTL_CD_01, PosMst.MST_PAY_DC.DATA.HP_ADD_ACCUM_DIV) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPayItem.PAY_WAY_CD, cPayItem.PAY_DTL_CD_01, PosMst.MST_PAY_DC.DATA.HP_ADD_ACCUM_DIV) == "2")
{
nExceptPayAmt = CmUtil.DoubleAdd(nExceptPayAmt, cPayItem.PAY_AMT);
}
else if (cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.CREDITCARD_ITEM && cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.CREDITCARD.CREDIT_CARD)
{
//#16745 신용카드 포인트 결제 시 해피포인트 취소되는 현상 확인요청 start
//기존
#region 기존
/*
// 신용카드 포인트사용 결제 적립 없음
if (CmUtil.IntParse(cPayItem.OCCUR_ENTRY_14) >= 60) nExceptPayAmt = CmUtil.DoubleAdd(nExceptPayAmt, cPayItem.PAY_AMT);
*/
#endregion 기존
//변경
#region 변경
if (CmUtil.IntParse(cPayItem.OCCUR_ENTRY_14) >= 60 && cPayItem.PAY_DTL_CD_02 != "")
{
switch (cPayItem.PAY_DTL_CD_02)
{
#region
case ItemConst.CREDITCARD_DC_TY.CREDIT_SPNT: //삼성포인트
if (PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.SAMSUNG_POINT, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0")
{
return 0;
}
else if (PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.SAMSUNG_POINT, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2")
{
nExceptPayAmt = CmUtil.DoubleAdd(nExceptPayAmt, cPayItem.PAY_AMT);
}
break;
case ItemConst.CREDITCARD_DC_TY.SHINHAN_CARD_POINT: //신한포인트
if (PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.SHINHAN_POINT, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0")
{
return 0;
}
else if (PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.SHINHAN_POINT, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2")
{
nExceptPayAmt = CmUtil.DoubleAdd(nExceptPayAmt, cPayItem.PAY_AMT);
}
break;
case ItemConst.CREDITCARD_DC_TY.HYUNDAI_M_POINTS: //현대M
if (PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.HYUNDAI_MPOINTS, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0")
{
return 0;
}
else if (PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.HYUNDAI_MPOINTS, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2")
{
nExceptPayAmt = CmUtil.DoubleAdd(nExceptPayAmt, cPayItem.PAY_AMT);
}
break;
// grayber@20180102 우리모아포인트 추가 start - 결제수단별 HP 기본 적립 여부 체크 분기 추가
case ItemConst.CREDITCARD_DC_TY.WOORIMORE_POINTS:
if (PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.WOORIMORE_POINTS, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0")
{
return 0;
}
else if (PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.WOORIMORE_POINTS, PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2")
{
nExceptPayAmt = CmUtil.DoubleAdd(nExceptPayAmt, cPayItem.PAY_AMT);
}
break;
// grayber@20180102 우리모아포인트 추가 end
default:
if (CmUtil.IntParse(cPayItem.OCCUR_ENTRY_14) >= 60) nExceptPayAmt = CmUtil.DoubleAdd(nExceptPayAmt, cPayItem.PAY_AMT);
break;
#endregion
}
}
else
{
// 신용카드 포인트사용 결제 적립 없음
if (CmUtil.IntParse(cPayItem.OCCUR_ENTRY_14) >= 60) nExceptPayAmt = CmUtil.DoubleAdd(nExceptPayAmt, cPayItem.PAY_AMT);
}
#endregion 변경
//#16745 신용카드 포인트 결제 시 해피포인트 취소되는 현상 확인요청 end
}
}
}
if (nExceptPayAmt > 0)
{
//#20171219 할인, 적립 제외 금액 계산시 상품리스트에서 계산된 금액에서 빼도록 수정 start
//기존
//double nPaySaveAmt = m_cTrnStatus.Head.NetSaleAmt - nExceptPayAmt;
//변경
double nPaySaveAmt = nSaveAmt - nExceptPayAmt;
//#20171219 할인, 적립 제외 금액 계산시 상품리스트에서 계산된 금액에서 빼도록 수정 end
//#20171222 대상금액이 0보다 작은 경우 전문 오류 발생으로 0으로 변경 start
if (nPaySaveAmt <= 0) return 0;
//#20171222 대상금액이 0보다 작은 경우 전문 오류 발생으로 0으로 변경 end
if (nSaveAmt > nPaySaveAmt) nSaveAmt = nPaySaveAmt;
}
}
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 nSaveAmt;
}
#endregion
#region 스템프 캠페인 대상 상품정보 설정
///
/// 스템프 캠페인 대상 상품정보 설정
///
///
///
public string CampaignHappyPointStamp(Column.MST_SALE_CPI.DATA cMstSaleCpi, ref ArrayList alStampPluInfo)
{
double nSaleAmt = 0, nAmt = 0;
long nPluCnt = 0, nSaleQty = 0, nQty = 0;
try
{
// 대상 상품 금액 획득
foreach (Column.TR_PLU.DATA cSaleItem in m_alTrPluItem)
{
if (cSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue; // 지정취소
if (cSaleItem.BILLSPR_NO != m_cTrnStatus.Sale.BillSplitNo) continue; // 빌분리번호
if (cMstSaleCpi.DC_NOADM_PASS_YN != "1" && cSaleItem.DC_PRMT_YN == "1") continue; // 할인 불가 여부(0:가능, 1:불가)
nQty = 0; nAmt = 0;
if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.RECTSUM || cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.PAYMENT)
{
// 전체상품
GetCampaignSaleItemQtyAmt(cMstSaleCpi, cSaleItem, ref nQty, ref nAmt, "0");
}
else
{
// 상품합산
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
if (cMstSaleCpi.CPI_CD == cTrSaleCpi.CPI_CD)
{
GetCampaignSaleItemQtyAmt(cMstSaleCpi, cSaleItem, ref nQty, ref nAmt, "0");
break;
}
}
}
nSaleQty += nQty;
nSaleAmt = CmUtil.DoubleAdd(nSaleAmt, nAmt);
}
if (nSaleQty == 0 && nSaleAmt == 0) return "";
// 캠페인 성립금액 구분 체크
if (CheckCampaignReqAmt(cMstSaleCpi, cMstSaleCpi.CPI_CD, nSaleQty, nSaleAmt) == false) return "";
// 캠페인 대상 상품 설정
foreach (Column.TR_PLU.DATA cSaleItem in m_alTrPluItem)
{
if (cSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue; // 지정취소
if (cSaleItem.BILLSPR_NO != m_cTrnStatus.Sale.BillSplitNo) continue; // 빌분리번호
if (cMstSaleCpi.DC_NOADM_PASS_YN != "1" && cSaleItem.DC_PRMT_YN == "1") continue; // 할인 불가 여부(0:가능, 1:불가)
nQty = 0; nAmt = 0;
if (cMstSaleCpi.TRGT_AMT_TYPE == ItemConst.CPI_TRGT_AMT_TYPE.RECT_AMT) // 구매금액체크
{
// 전체상품
GetCampaignSaleItemQtyAmt(cMstSaleCpi, cSaleItem, ref nQty, ref nAmt, "0");
}
else
{
// 대상상품
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
if (cMstSaleCpi.CPI_CD == cTrSaleCpi.CPI_CD)
{
GetCampaignSaleItemQtyAmt(cMstSaleCpi, cSaleItem, ref nQty, ref nAmt, "0");
break;
}
}
}
if (nQty == 0 && nAmt == 0) continue;
nPluCnt++;
if (alStampPluInfo.Count < 30) // 스템프 상품은 최대 30개까지 가능
{
bool bExist = false;
for (int i = 0; i < alStampPluInfo.Count; i++)
{
string sInfo = (string)alStampPluInfo[i];
if (sInfo.StartsWith(cSaleItem.ITEM_PLU_CD.Trim()) == true)
{
long nNewQty = (CmUtil.LongParse(sInfo.Substring(6, 3)) + nQty > 999) ? 999 : CmUtil.LongParse(sInfo.Substring(6, 3)) + nQty;
// 상품정보 = 제품코드(6)+구매수량(3)+FS
alStampPluInfo[i] = CmUtil.RPadH(cSaleItem.ITEM_PLU_CD, 6) + string.Format("{0:D3}", nNewQty) + PosConst.VAN_HEXA.FS;
bExist = true;
break;
}
}
if (bExist == false)
{
long nNewQty = (cSaleItem.SALE_QTY > 999) ? 999 : nQty;
// 상품정보 = 제품코드(6)+구매수량(3)+FS
string sNewInfo = CmUtil.RPadH(cSaleItem.ITEM_PLU_CD, 6) + string.Format("{0:D3}", nNewQty) + PosConst.VAN_HEXA.FS;
alStampPluInfo.Add(sNewInfo);
}
}
}
if (nPluCnt == 0) return "";
// 스템프 캠페인 실적 생성
AddTrCampaignData(cMstSaleCpi.CPI_CD, 0, "", "");
}
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 "";
}
#endregion
#region 영수증 출력 행사 계산 처리
///
/// 상품합산, 전체상품 영수 행사
///
///
///
public long CampaignPluRectPrint(Column.MST_SALE_CPI.DATA cMstSaleCpi)
{
double nSaleAmt = 0, nAmt = 0;
long nSaleQty = 0, nDisQty = 0, nQty = 0;
try
{
// 대상 상품 금액 획득
foreach (Column.TR_PLU.DATA cSaleItem in m_alTrPluItem)
{
if (cSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue; // 지정취소
if (cSaleItem.BILLSPR_NO != m_cTrnStatus.Sale.BillSplitNo) continue; // 빌분리번호
if (cMstSaleCpi.DC_NOADM_PASS_YN != "1" && cSaleItem.DC_PRMT_YN == "1") continue; // 할인 불가 여부(0:가능, 1:불가)
nQty = 0; nAmt = 0;
if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.RECTSUM || cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.PAYMENT)
{
// 전체상품
GetCampaignSaleItemQtyAmt(cMstSaleCpi, cSaleItem, ref nQty, ref nAmt, "0");
}
else
{
// 상품합산
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
if (cMstSaleCpi.CPI_CD == cTrSaleCpi.CPI_CD)
{
GetCampaignSaleItemQtyAmt(cMstSaleCpi, cSaleItem, ref nQty, ref nAmt, "0");
break;
}
}
}
nSaleQty += nQty;
nSaleAmt = CmUtil.DoubleAdd(nSaleAmt, nAmt);
}
if (nSaleQty == 0 && nSaleAmt == 0) return 0;
// 캠페인 성립금액 구분 체크
if (CheckCampaignReqAmt(cMstSaleCpi, "", nSaleQty, nSaleAmt) == false) return 0;
nDisQty = nSaleQty;
if (cMstSaleCpi.alDATA_COMPNT.Count > 0)
{
nDisQty = 0;
// 구성 자격 구분 체크
Column.MST_SALE_CPI.DATA_COMPNT cMstCpiCompnt = (Column.MST_SALE_CPI.DATA_COMPNT)cMstSaleCpi.alDATA_COMPNT[0];
// 캠페인 구성 자격 구분에 따른 대상 상품수량 획득
if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MATCH_QTY) // 수량
{
if (cMstCpiCompnt.QTY_AMT == 0) cMstCpiCompnt.QTY_AMT = 1;
nDisQty = nSaleQty / (long)cMstCpiCompnt.QTY_AMT;
}
else if (cMstCpiCompnt.CPI_COND_TYPE == ItemConst.CPI_COND_TYPE.MIN_QTY) // 최소수량
{
if (nSaleQty >= (long)cMstCpiCompnt.QTY_AMT) nDisQty = nSaleQty;
}
else // 금액
{
if (nSaleAmt >= cMstCpiCompnt.QTY_AMT) nDisQty = nSaleQty;
}
}
if (nDisQty == 0) return 0;
string sLttrNmplatNo = "", sLttrGrade = ""; // 복권번호, 등수
// 캠페인고객혜택=> 영수행사(복권)
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.LOTTERY || cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.LOTT_REC)
{
long nIssueCnt = 1;
if (cMstSaleCpi.LTTR_MULTI_PRT_YN == "1") nIssueCnt = nDisQty > 10 ? 10 : nDisQty;
// 복권 번호 획득(서버 IRT)
if (ExecuteLttrPosIrt(cMstSaleCpi.CPI_CD, nSaleAmt, nIssueCnt, ref sLttrNmplatNo, ref sLttrGrade) != true) return 0;
// 복권당첨메시지 삭제(2017.04.03) BR(황D) PB(안K)
//WinManager.ConfirmMessage(string.Format(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0558), sLttrGrade) + PosConst.CRLF
// + MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0399) + " : " + cMstSaleCpi.CPI_NM );
}
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.ENTRY || cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.ENTR_REC)
{
// 응모권 번호 생성
if (ExecuteMakeEntryNo(cMstSaleCpi.CPI_CD, ref sLttrNmplatNo) != true) return 0;
}
// 캠페인 실적 생성
AddTrCampaignData(cMstSaleCpi.CPI_CD, 0, sLttrNmplatNo, sLttrGrade);
return nDisQty;
}
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 0;
}
///
/// 복권 번호 조회
///
///
///
public bool ExecuteLttrPosIrt(string sCPI_CD, double nSaleAmt, long nIssueCnt, ref string sLttrNmplatNo, ref string sLttrGrade)
{
try
{
// 연습모드이면
if (m_cPosStatus.Base.TrainingFlag == "1" || m_cPosStatus.Mst.TestStorYn == "1") return false;
Hashtable htSendData = new Hashtable();
Hashtable htRecvData = new Hashtable();
htSendData.Add(Column.IQ_LOTTERY_NUMBERINQ_REQ.DATA.INQ_TYPE, ItemConst.IRT_INQ_TYPE.LOTTERY_NUMBERINQ);
htSendData.Add(Column.IQ_LOTTERY_NUMBERINQ_REQ.DATA.STOR_CD, m_cPosStatus.Base.StoreNo);
htSendData.Add(Column.IQ_LOTTERY_NUMBERINQ_REQ.DATA.SALE_DT, m_cPosStatus.Base.SaleDate);
htSendData.Add(Column.IQ_LOTTERY_NUMBERINQ_REQ.DATA.CAMPAIGN_CODE, sCPI_CD);
htSendData.Add(Column.IQ_LOTTERY_NUMBERINQ_REQ.DATA.INQ_FLAG, "00");
htSendData.Add(Column.IQ_LOTTERY_NUMBERINQ_REQ.DATA.COND_AMT, nSaleAmt.ToString());
htSendData.Add(Column.IQ_LOTTERY_NUMBERINQ_REQ.DATA.ISSUE_CNT, nIssueCnt.ToString());
string sRet = m_cDataCommon.ExecutePosIrt(ItemConst.COMM_MSG_TYPE.POSIRT, m_cPosStatus.Base.CommSvrIp, (int)m_cPosStatus.Base.PayInqPort, 10000, htSendData, ref htRecvData);
if ( sRet != UserCom.RST_OK)
{
UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name
, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()"
, MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0127));
//WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0127));
return false;
}
if (htRecvData[Column.IQ_LOTTERY_NUMBERINQ_RSP.DATA.RES_CD].ToString() != "0")
{
UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name
, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()"
, MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0127) + ", " + htRecvData[Column.IQ_LOTTERY_NUMBERINQ_RSP.DATA.RES_MSG]);
return false;
}
sLttrNmplatNo = htRecvData[Column.IQ_LOTTERY_NUMBERINQ_RSP.DATA.LOTTERY_NO].ToString();
sLttrGrade = htRecvData[Column.IQ_LOTTERY_NUMBERINQ_RSP.DATA.LOTTERY_GRADE].ToString();
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;
}
///
/// 응모권 번호 생성
///
///
///
public bool ExecuteMakeEntryNo(string sCPI_CD, ref string sLttrNmplatNo)
{
try
{
// 일자정보 = 년도 끝자리 (1) + 일자를365로환산(3) + 시간HHMMDD를 초로환산(5) 9자리로 생성
string sEntryInfo = DateTime.Now.ToString("yyyy").Substring(3,1) + string.Format("{0:D3}{1:D5}", DateTime.Now.DayOfYear, (int)DateTime.Now.TimeOfDay.TotalSeconds);
// 체크 디지트 생성
int nCheckSum = 0;
for (int i = 0; i < sEntryInfo.Length; i++)
{
if (i % 2 == 0)
nCheckSum += CmUtil.IntParse(sEntryInfo.Substring(i, 1)) * 3;
else
nCheckSum += CmUtil.IntParse(sEntryInfo.Substring(i, 1));
}
nCheckSum = 10 - (nCheckSum % 10);
if (nCheckSum == 10) nCheckSum = 0;
// 점포정보 = 점포코드(앞3)3 + 체크디지트1 + 점포코드(뒤2)2 + 포스번호1
string sStoreInfo = m_cPosStatus.Base.StoreNo.Substring(0, 3) + nCheckSum + m_cPosStatus.Base.StoreNo.Substring(3, 2)
+ m_cPosStatus.Base.PosNo.Substring(m_cPosStatus.Base.PosNo.Length - 1, 1);
sLttrNmplatNo = sStoreInfo + sEntryInfo;
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;
}
///
/// 캠페인 출력데이터 획득
///
///
///
public void GetCampaignPrintData(string sCPI_CUST_BNFT_TYPE, string sCPI_CD, string sLTTR_NMPLAT_NO, string sGradeCD, ref ArrayList alPrintBuf)
{
GetCampaignPrintData(sCPI_CUST_BNFT_TYPE, sCPI_CD, sLTTR_NMPLAT_NO, sGradeCD, ref alPrintBuf, true);
}
public void GetCampaignPrintData(string sCPI_CUST_BNFT_TYPE, string sCPI_CD, string sLTTR_NMPLAT_NO, string sGradeCD, ref ArrayList alPrintBuf, bool bLastLine)
{
try
{
string sLottoRecType = "0"; //명판,복권 구분(0:명판, 1:복권)
if (sCPI_CUST_BNFT_TYPE != "")
{
if (sCPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.LOTTERY || sCPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.LOTT_REC)
{
// 복권번호
if (sLTTR_NMPLAT_NO.Trim() != "")
{
//alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + "------------------------------------------");
alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0072) + " : " + m_cPosStatus.Global.DateToCulture(DateTime.Now.ToString("yyyyMMdd")));
alPrintBuf.Add(PosConst.PRT_HDR.PRT_BAR + sLTTR_NMPLAT_NO.Trim());
alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + "------------------------------------------");
alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0056) + " : [ " + sLTTR_NMPLAT_NO.Trim() + " ]");
alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR);
}
}
else if (sCPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.ENTRY || sCPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.ENTR_REC)
{
// 응모번호
if (sLTTR_NMPLAT_NO.Trim() != "")
{
alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + "------------------------------------------");
alPrintBuf.Add(PosConst.PRT_HDR.PRT_BLD + MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0073) + " : [ "
+ sLTTR_NMPLAT_NO.Substring(0, 4) + "-" + sLTTR_NMPLAT_NO.Substring(4, 4) + "-" + sLTTR_NMPLAT_NO.Substring(8, 4) + "-" + sLTTR_NMPLAT_NO.Substring(12, 4) + " ]");
alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR);
}
}
sLottoRecType = "1"; //복권 출력데이터
//#20170807 명판 캠페인 커팅 start
//grayber@20171214 캠페인 리펀드 쿠폰 start
// 캠페인 리펀드 사용하지 않더라도 명판 출력 할 수 있도록 분기 처리
if(PosMstManager.GetPosOption(POS_OPTION.OPT431).Equals("1") == true )
{
if (sCPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.RECEIPT || sCPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.REFUND)
{
sLottoRecType = "0"; //명판 출력데이터
}
}
else
{
if (sCPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.RECEIPT)
{
{
sLottoRecType = "0"; //명판 출력데이터
}
}
}
//grayber@20171214 캠페인 리펀드 쿠폰 end
}
bool bExistPrtData = false;
foreach (string[] saCpiPrtMsg in m_alMstCpiPrtMsg)
{
//0:유형(0:명판,1:복권), 1:캠페인코드, 2:출력위치(등수), 3:확대문자, 4:BOLD여부, 5:정렬유형, 6:문자열
if (saCpiPrtMsg[0] != sLottoRecType) continue;
if (saCpiPrtMsg[1] != sCPI_CD ) continue;
if (sGradeCD != "" && saCpiPrtMsg[2] != sGradeCD) continue;
// 정렬 방식
string sPrtData = saCpiPrtMsg[6];
if (saCpiPrtMsg[5] == PosConst.PRT_ALIGN_TYPE.RIGHT) // 오른쪽 정렬
{
sPrtData = CmUtil.LPadH(saCpiPrtMsg[6], 42);
}
else if (saCpiPrtMsg[5] == PosConst.PRT_ALIGN_TYPE.CENTER) // 중앙정렬
{
if (saCpiPrtMsg[3] == PosConst.PRT_EXPAND_TYPE.HOR || saCpiPrtMsg[3] == PosConst.PRT_EXPAND_TYPE.BOTH)
{
if (CmUtil.LenH(saCpiPrtMsg[6]) <= 21) sPrtData = CmUtil.LPadH("", 10 - (CmUtil.LenH(saCpiPrtMsg[6]) / 2)) + saCpiPrtMsg[6];
}
else
{
if (CmUtil.LenH(saCpiPrtMsg[6]) <= 42) sPrtData = CmUtil.LPadH("", 21 - (CmUtil.LenH(saCpiPrtMsg[6]) / 2)) + saCpiPrtMsg[6];
}
}
alPrintBuf.Add(CmUtil.GetPrtMstToPrtHeadConst(saCpiPrtMsg[3],saCpiPrtMsg[4]) + sPrtData);
bExistPrtData = true;
}
if (bExistPrtData == true && bLastLine == true)
{
alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + "------------------------------------------");
}
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
}
///
/// 스템프 캠페인 쿠폰 출력데이터 획득
///
///
///
public void GetStampCouponPrintData( string sCPI_CD, string sCOUPON_NO, string sHP_CAMPAIGN_INFO, ref ArrayList alPrintBuf)
{
string sPrtData = "";
try
{
//alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0072) + " : " + m_cPosStatus.Global.DateToCulture(DateTime.Now.ToString("yyyyMMdd")));
//alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + "------------------------------------------");
GetCampaignPrintData("", sCPI_CD, "", "1", ref alPrintBuf, true);
string[] saPrtData = sHP_CAMPAIGN_INFO.Split(new string[] { "\n\r", "\r\n" }, StringSplitOptions.None);
foreach (string sData in saPrtData)
{
alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + sData);
}
alPrintBuf.Add(PosConst.PRT_HDR.PRT_BAR + sCOUPON_NO);
alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + " [No " + sCOUPON_NO.Trim() + " ]");
alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + "------------------------------------------");
GetCampaignPrintData("", sCPI_CD, "", "3", ref alPrintBuf, 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);
}
}
///
/// 스템프 캠페인 수량표시 출력데이터 획득
///
///
///
public void GetStampCntPrintData(string sCPI_CD, string sHP_CAMPAIGN_INFO, string sStampCntInfo, ref ArrayList alPrintBuf)
{
string sPrtData = "";
try
{
GetCampaignPrintData("", sCPI_CD, "", "2", ref alPrintBuf, false);
string[] saPrtData = sHP_CAMPAIGN_INFO.Split(new string[] { "\n\r", "\r\n" }, StringSplitOptions.None);
foreach (string sData in saPrtData)
{
alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + sData);
}
// 스템프 수량 파싱(구매,잔여,누적)
if (sStampCntInfo.Trim() != "")
{
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCPI_CD];
string[] saStampCnt = sStampCntInfo.Split(',');
if (saStampCnt.Length >= 3)
{
if (cMstSaleCpi.STAMP_QTY > 0 && cMstSaleCpi.STAMP_QTY <= 15)
{
//alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + "------------------------------------------");
string[] saNumber = new string[] { "①", "②", "③", "④", "⑤", "⑥", "⑦", "⑧", "⑨", "⑩", "⑪", "⑫", "⑬", "⑭", "⑮" };
sPrtData = "";
for (int i = 1; i <= cMstSaleCpi.STAMP_QTY; i++)
{
if (i <= cMstSaleCpi.STAMP_QTY - CmUtil.IntParse(saStampCnt[1])) // 구매수량
sPrtData += " [●] ";
else
sPrtData += " [" + saNumber[i - 1] + "] ";
if (i % 5 == 0)
{
alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + sPrtData);
sPrtData = "";
}
}
if (sPrtData != "") alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + sPrtData);
alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + "------------------------------------------");
}
}
}
GetCampaignPrintData("", sCPI_CD, "", "3", ref alPrintBuf, 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);
}
}
#endregion
///
/// 수량 제한 캠페인 수량 초과 체크
///
///
///
public long CheckCampaignQtyLimit(Column.MST_SALE_CPI.DATA cMstSaleCpi, long nTotDisQty, long nDisQty)
{
string[] saCpiQtyLmtInfo = null;
try
{
if (cMstSaleCpi.LMT_QTY <= 0) return nDisQty;
// 연습모드이면
if (m_cPosStatus.Base.TrainingFlag == "1" || m_cPosStatus.Mst.TestStorYn == "1") return nDisQty;
foreach (string[] saCpiQtyLmt in m_alSaleCpiQtyLmt)
{
if (saCpiQtyLmt[0] == cMstSaleCpi.CPI_CD)
{
saCpiQtyLmtInfo = saCpiQtyLmt;
}
}
if (saCpiQtyLmtInfo == null)
{
Hashtable htSendData = new Hashtable();
Hashtable htRecvData = new Hashtable();
htSendData.Add(Column.IQ_POSLINEUPORDER_REQ.DATA.INQ_TYPE, ItemConst.IRT_INQ_TYPE.POSLINEUPORDER_REQ);
htSendData.Add(Column.IQ_POSLINEUPORDER_REQ.DATA.STOR_CD, m_cPosStatus.Base.StoreNo);
htSendData.Add(Column.IQ_POSLINEUPORDER_REQ.DATA.CPI_CD, cMstSaleCpi.CPI_CD);
htSendData.Add(Column.IQ_POSLINEUPORDER_REQ.DATA.LIMIT_DIV, cMstSaleCpi.QTY_LMT_STD);
if (cMstSaleCpi.QTY_LMT_STD == "1") // 수량 제한 기준(1:일별, 2:행사기간별)
{
htSendData.Add(Column.IQ_POSLINEUPORDER_REQ.DATA.LIMIT_ST_DATE, m_cTrnStatus.Head.SysYmd);
htSendData.Add(Column.IQ_POSLINEUPORDER_REQ.DATA.LIMIT_ED_DATE, m_cTrnStatus.Head.SysYmd);
}
else
{
htSendData.Add(Column.IQ_POSLINEUPORDER_REQ.DATA.LIMIT_ST_DATE, cMstSaleCpi.STARTDAY);
htSendData.Add(Column.IQ_POSLINEUPORDER_REQ.DATA.LIMIT_ED_DATE, m_cTrnStatus.Head.SysYmd);
}
htSendData.Add(Column.IQ_POSLINEUPORDER_REQ.DATA.CPI_CNT, "0");
htSendData.Add(Column.IQ_POSLINEUPORDER_REQ.DATA.RES_CD, "00");
string sCpiQty = "0";
string sRet = m_cDataCommon.ExecutePosIrt(ItemConst.COMM_MSG_TYPE.POSIRT, m_cPosStatus.Base.CommSvrIp, (int)m_cPosStatus.Base.PayInqPort, 10000, htSendData, ref htRecvData);
if (sRet == UserCom.RST_OK)
{
if (htRecvData[Column.IQ_POSLINEUPORDER_REQ.DATA.RES_CD].ToString() == "00")
{
sCpiQty = htRecvData[Column.IQ_POSLINEUPORDER_REQ.DATA.CPI_CNT].ToString();
}
}
else
{
string sQuery = "";
sQuery += " SELECT ISNULL(SUM(CASE WHEN TRADE_DIV = '0' THEN B.DC_QTY ELSE B.DC_QTY * -1 END), 0) SUM_QTY FROM POSLOG..TR_SALE_HEADER A ";
sQuery += " JOIN POSLOG..TR_SALE_CPI_RSLT B ON A.CMP_CD=B.CMP_CD AND A.SALE_DT = B.SALE_DT AND A.STOR_CD=B.STOR_CD AND A.POS_NO = B.POS_NO AND A.TRADE_NO = B.TRADE_NO ";
sQuery += " WHERE A.CMP_CD = '" + m_cPosStatus.Base.CmpCd + "' ";
sQuery += " AND A.STOR_CD = '" + m_cPosStatus.Base.StoreNo + "' ";
if (cMstSaleCpi.QTY_LMT_STD == "1") // 수량 제한 기준(1:일별, 2:행사기간별)
sQuery += " AND A.SALE_DT BETWEEN '" + m_cTrnStatus.Head.SysYmd + "' AND '" + m_cTrnStatus.Head.SysYmd + "' ";
else
sQuery += " AND A.SALE_DT BETWEEN '" + cMstSaleCpi.STARTDAY + "' AND '" + m_cTrnStatus.Head.SysYmd + "' ";
sQuery += " AND B.CPI_CD = '" + cMstSaleCpi.CPI_CD + "' ";
DataTable dtCpiRslt = m_cMstService.Select(new string[] { sQuery });
if (dtCpiRslt != null && dtCpiRslt.Rows.Count > 0)
{
DataRow dr = dtCpiRslt.Rows[0];
sCpiQty = CmUtil.GetDataRowStr(dr, "SUM_QTY");
}
}
// 캠페인코드(0), 이전성립수량(1), 캠페인명(2), 제한수량(3), 현성립수량(4)
saCpiQtyLmtInfo = new string[] { cMstSaleCpi.CPI_CD, sCpiQty, cMstSaleCpi.CPI_NM, cMstSaleCpi.LMT_QTY.ToString(), nDisQty.ToString() };
m_alSaleCpiQtyLmt.Add(saCpiQtyLmtInfo);
}
if (CmUtil.LongParse(saCpiQtyLmtInfo[1]) >= cMstSaleCpi.LMT_QTY)
{
//UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
// System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()"
// , string.Format("CAMPAIGN QTY LIMIT OVER => CODE:{0}={1}, LimitQty:{2}, AgoDisQty:{3}", cMstSaleCpi.CPI_CD, cMstSaleCpi.CPI_NM, cMstSaleCpi.LMT_QTY, saCpiQtyLmtInfo[1]));
// 제한수량 초과(적용 불가)
nDisQty = 0;
}
if (CmUtil.LongParse(saCpiQtyLmtInfo[1]) + nTotDisQty + nDisQty > cMstSaleCpi.LMT_QTY)
{
UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()"
, string.Format("CAMPAIGN QTY LIMIT OVER => CODE:{0}={1}, LimitQty:{2}, AgoDisQty:{3}", cMstSaleCpi.CPI_CD, cMstSaleCpi.CPI_NM, cMstSaleCpi.LMT_QTY, saCpiQtyLmtInfo[1]));
// 제한수량 초과(일부 적용)
nDisQty = cMstSaleCpi.LMT_QTY - CmUtil.LongParse(saCpiQtyLmtInfo[1]) - nTotDisQty;
}
saCpiQtyLmtInfo[4] = (nTotDisQty + nDisQty).ToString(); // 현성립수량
return nDisQty;
}
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 nDisQty;
}
///
/// HP 횟수 제한 캠페인 수량 초과 체크
///
///
/// false:행사불가
public bool CheckCampaignCntLimit(Column.MST_SALE_CPI.DATA cMstSaleCpi, string sCustID)
{
string[] saCpiQtyLmtInfo = null;
try
{
// 연습모드이면
if (m_cPosStatus.Base.TrainingFlag == "1" || m_cPosStatus.Mst.TestStorYn == "1") return true;
if (cMstSaleCpi.HP_CUST_MAX_JOIN_CNT <= 0 || sCustID.Trim() == "") return true;
foreach (string[] saCpiQtyLmt in m_alSaleCpiQtyLmt)
{
if (saCpiQtyLmt[0] == cMstSaleCpi.CPI_CD)
{
saCpiQtyLmtInfo = saCpiQtyLmt;
}
}
if (saCpiQtyLmtInfo == null)
{
Hashtable htSendData = new Hashtable();
Hashtable htRecvData = new Hashtable();
htSendData.Add(Column.IQ_CAMPAIGN_HPCNT_REQ.DATA.INQ_TYPE, ItemConst.IRT_INQ_TYPE.CAMPAIGN_HPCNT_REQ);
htSendData.Add(Column.IQ_CAMPAIGN_HPCNT_REQ.DATA.STOR_CD, m_cPosStatus.Base.StoreNo);
htSendData.Add(Column.IQ_CAMPAIGN_HPCNT_REQ.DATA.CPI_CD, cMstSaleCpi.CPI_CD);
htSendData.Add(Column.IQ_CAMPAIGN_HPCNT_REQ.DATA.LIMIT_DIV, cMstSaleCpi.HP_CUST_JOIN_LMT_STD);
if (cMstSaleCpi.HP_CUST_JOIN_LMT_STD == "1") // 수량 제한 기준(1:일별, 2:행사기간별)
{
htSendData.Add(Column.IQ_CAMPAIGN_HPCNT_REQ.DATA.LIMIT_ST_DATE, m_cTrnStatus.Head.SysYmd);
htSendData.Add(Column.IQ_CAMPAIGN_HPCNT_REQ.DATA.LIMIT_ED_DATE, m_cTrnStatus.Head.SysYmd);
}
else
{
htSendData.Add(Column.IQ_CAMPAIGN_HPCNT_REQ.DATA.LIMIT_ST_DATE, cMstSaleCpi.STARTDAY);
htSendData.Add(Column.IQ_CAMPAIGN_HPCNT_REQ.DATA.LIMIT_ED_DATE, m_cTrnStatus.Head.SysYmd);
}
htSendData.Add(Column.IQ_CAMPAIGN_HPCNT_REQ.DATA.CPI_CNT, "0");
htSendData.Add(Column.IQ_CAMPAIGN_HPCNT_REQ.DATA.CUST_ID, sCustID);
htSendData.Add(Column.IQ_CAMPAIGN_HPCNT_REQ.DATA.RES_CD, "00");
string sCpiCnt = "0";
string sRet = m_cDataCommon.ExecutePosIrt(ItemConst.COMM_MSG_TYPE.POSIRT, m_cPosStatus.Base.CommSvrIp, (int)m_cPosStatus.Base.PayInqPort, 10000, htSendData, ref htRecvData);
if (sRet == UserCom.RST_OK)
{
if (htRecvData[Column.IQ_CAMPAIGN_HPCNT_REQ.DATA.RES_CD].ToString() == "00")
{
sCpiCnt = htRecvData[Column.IQ_CAMPAIGN_HPCNT_REQ.DATA.CPI_CNT].ToString();
}
}
else
{
string sQuery = "";
sQuery += " SELECT ISNULL(SUM(CASE WHEN TRADE_DIV = '0' THEN 1 ELSE -1 END), 0) SUM_QTY FROM POSLOG..TR_SALE_HEADER A ";
sQuery += " JOIN (SELECT DISTINCT CMP_CD, SALE_DT, STOR_CD, POS_NO, TRADE_NO, CPI_CD, SLACK_FIELD FROM POSLOG..TR_SALE_CPI_RSLT) B ON A.CMP_CD=B.CMP_CD AND A.SALE_DT = B.SALE_DT AND A.STOR_CD=B.STOR_CD AND A.POS_NO = B.POS_NO AND A.TRADE_NO = B.TRADE_NO ";
sQuery += " WHERE A.CMP_CD = '" + m_cPosStatus.Base.CmpCd + "' ";
sQuery += " AND A.STOR_CD = '" + m_cPosStatus.Base.StoreNo + "' ";
if (cMstSaleCpi.HP_CUST_JOIN_LMT_STD == "1") // 수량 제한 기준(1:일별, 2:행사기간별)
sQuery += " AND A.SALE_DT BETWEEN '" + m_cTrnStatus.Head.SysYmd + "' AND '" + m_cTrnStatus.Head.SysYmd + "' ";
else
sQuery += " AND A.SALE_DT BETWEEN '" + cMstSaleCpi.STARTDAY + "' AND '" + m_cTrnStatus.Head.SysYmd + "' ";
sQuery += " AND B.CPI_CD = '" + cMstSaleCpi.CPI_CD + "' ";
sQuery += " AND B.SLACK_FIELD = '" + sCustID + "' ";
DataTable dtCpiRslt = m_cMstService.Select(new string[] { sQuery });
if (dtCpiRslt != null && dtCpiRslt.Rows.Count > 0)
{
DataRow dr = dtCpiRslt.Rows[0];
sCpiCnt = CmUtil.GetDataRowStr(dr, "SUM_QTY");
}
}
string sCPI_NAME = cMstSaleCpi.CPI_NM;
if (cMstSaleCpi.QTY_LIMIT_MSG.Trim() != "") sCPI_NAME = cMstSaleCpi.QTY_LIMIT_MSG;
// 캠페인코드(0), 이전성립수량(1), 캠페인명(2), 제한수량(3), 현성립수량(4)
saCpiQtyLmtInfo = new string[] { cMstSaleCpi.CPI_CD, sCpiCnt, sCPI_NAME, cMstSaleCpi.HP_CUST_MAX_JOIN_CNT.ToString(), "1" };
//
m_alSaleCpiQtyLmt.Add(saCpiQtyLmtInfo);
}
if (CmUtil.LongParse(saCpiQtyLmtInfo[1]) >= cMstSaleCpi.HP_CUST_MAX_JOIN_CNT)
{
UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()"
, string.Format("CAMPAIGN CNT LIMIT OVER => CODE:{0}={1}, LimitCnt:{2}, AgoDisCnt:{3}", cMstSaleCpi.CPI_CD, cMstSaleCpi.CPI_NM, cMstSaleCpi.HP_CUST_MAX_JOIN_CNT, saCpiQtyLmtInfo[1]));
//WinManager.ConfirmMessage(cMstSaleCpi.CPI_NM + PosConst.CRLF + MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0589));
return false;
}
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 true;
}
///
/// 캠페인 참여문의 여부
///
///
/// false:행사불가
public bool CheckCampaignJoinQustn(Column.MST_SALE_CPI.DATA cMstSaleCpi, bool bFocusQustn = false)
{
try
{
if (cMstSaleCpi.JOIN_QUSTN_YN == "1")
{
if (cMstSaleCpi.JOIN_QUSTN_ANSWER == "" || bFocusQustn == true)
{
if (WinManager.QuestionMessage(cMstSaleCpi.CPI_NM + PosConst.CRLF + MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0556)) == true)
cMstSaleCpi.JOIN_QUSTN_ANSWER = "1";
else
cMstSaleCpi.JOIN_QUSTN_ANSWER = "0";
UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()"
, "CAMPAIGN JOIN QUSTN ANSWER => " + cMstSaleCpi.JOIN_QUSTN_ANSWER);
}
if (cMstSaleCpi.JOIN_QUSTN_ANSWER == "0") 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 true;
}
///
/// 실효100% 행사 체크
///
///
///
///
///
public double CheckCampaignExpPointAll(Column.MST_SALE_CPI.DATA cMstSaleCpi, double nTotSaleAmt, double nTotDisAmt)
{
try
{
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DIS_POINT_ALL)
{
// 실효 100% 캠페인은 실효 포인트 100% 있어야 함.
//if (nTotSaleAmt > nTotDisAmt + m_nHpExpPoint)
if (nTotSaleAmt > m_nHpExpPoint) // 실효포인트가 상품금액만큼 있어야함.(2017.06.12)
{
//UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
// System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()"
// , string.Format( "EXP POINT LESS => SaleAmt={0}, TotDisAmt={1}, ExpPoint={2}", nTotSaleAmt, nTotDisAmt, m_nHpExpPoint));
ClearCampaginItem(cMstSaleCpi.CPI_CD);
return 0;
}
}
return nTotDisAmt;
}
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 0;
}
///
/// 캠페인 중복 가능 여부 체크
///
///
public bool CheckCampaignDuplication()
{
try
{
foreach (Column.TR_PLU.DATA cSaleItem in m_alTrPluItem)
{
if (cSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue;// 지정취소
if (cSaleItem.BILLSPR_NO != m_cTrnStatus.Sale.BillSplitNo) continue; // 빌분리번호
if (cSaleItem.FLAVOUR_DIV == ItemConst.PLU_FLAVOUR_DIV.FLAVOUR) continue; // 플레이버 제외
if (cSaleItem.ITEM_DIV == ItemConst.PLU_ITEM_DIV.OPT_MENU && cSaleItem.SUBPRC_MENU_KEY_DIV == "1") continue; // 부가상품(속성) 제외
if ((cSaleItem.ITEM_DC_AMT > 0 || cSaleItem.SUM_DC_AMT > 0) && cSaleItem.DC_DIV.Length >= 4) // 단품 할인, 소계 할인 금액
{
// 캠페인중복 여부(0:불가, 1:가능)
if (PosMstManager.GetMstPayDc(cSaleItem.DC_DIV.Substring(0, 2), cSaleItem.DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.CPI_DUP_YN) == "0") return false;
}
if (cSaleItem.COOP_CARD_DC_AMT > 0 && cSaleItem.COOP_CARD_DC_DIV.Length >= 4) // 제휴 할인 금액
{
// 캠페인중복 여부(0:불가, 1:가능)
if (PosMstManager.GetMstPayDc(cSaleItem.COOP_CARD_DC_DIV.Substring(0, 2), cSaleItem.COOP_CARD_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.CPI_DUP_YN) == "0") return false;
}
if (cSaleItem.POINT_DC_AMT > 0 && cSaleItem.POINT_DC_DIV.Length >= 4) // 포인트 할인 금액
{
// 캠페인중복 여부(0:불가, 1:가능)
if (PosMstManager.GetMstPayDc(cSaleItem.POINT_DC_DIV.Substring(0, 2), cSaleItem.POINT_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.CPI_DUP_YN) == "0") return false;
}
if (cSaleItem.CPN_DC_AMT > 0 && cSaleItem.CPN_DC_DIV.Length >= 4) // 쿠폰 할인 금액
{
// 캠페인중복 여부(0:불가, 1:가능)
if (PosMstManager.GetMstPayDc(cSaleItem.CPN_DC_DIV.Substring(0, 2), cSaleItem.CPN_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.CPI_DUP_YN) == "0") return false;
}
if (cSaleItem.EMP_DC_AMT > 0 && cSaleItem.EMP_DC_DIV.Length >= 4) // 직원 할인 금액
{
// 캠페인중복 여부(0:불가, 1:가능)
if (PosMstManager.GetMstPayDc(cSaleItem.EMP_DC_DIV.Substring(0, 2), cSaleItem.EMP_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.CPI_DUP_YN) == "0") return false;
}
if (cSaleItem.SET_DC_AMT > 0) // 세트할인
{
// 캠페인중복 여부(0:불가, 1:가능)
if (PosMstManager.GetMstPayDc(ItemConst.PLU_DC_DIV.SET_DC.Substring(0, 2), ItemConst.PLU_DC_DIV.SET_DC.Substring(2, 2), PosMst.MST_PAY_DC.DATA.CPI_DUP_YN) == "0") return false;
}
}
ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
foreach (Column.TR_PAYMENT.DATA cPayItem in alPayItem)
{
if (cPayItem.CANCEL_DIV != PosConst.CANCEL_DIV.NORMAL) continue;
if (cPayItem.PAY_DTL_CD_05 == PosConst.PAY_DC_TYPE.PAY) // 할인결제구분 (1:결제, 2:할인)
{
// 캠페인중복 여부(0:불가, 1:가능)
if (PosMstManager.GetMstPayDc(cPayItem.PAY_WAY_CD, cPayItem.PAY_DTL_CD_01, PosMst.MST_PAY_DC.DATA.CPI_DUP_YN) == "0") return false;
}
}
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;
}
//#15583 캠페인 기능 개선 요청 start
///
/// 캠페인 마스터의 중복 가능 여부 체크(통신사 제휴 중복 허용 여부, 모바일쿠폰 중복 허용 여부, 해피쿠폰 중복 허용 여부)
///
///
public bool CheckCampaignMstDuplication(Column.MST_SALE_CPI.DATA cMstSaleCpi)
{
try
{
// TELECOM_COOP_DUP_PRMT_YN -> 제휴할인그룹 중복 여부(1:중복적용가능, 0:중복적용불가)
// MOBILE_CPN_DUP_PRMT_YN -> 모바일쿠폰 그룹 중복 여부(1:중복적용가능, 0:중복적용불가)
// HPY_CPN_DUP_PRMT_YN -> 해피쿠폰 사용 중복 허용 여부(1:중복적용가능, 0:중복적용불가)
// CPI_CUST_BNFT_TYPE -> 캠페인 고객해택 구분(01:할인,02:적립,03:할인+적립,04:사은품,05:복권,06:명판,07:복권+명판,08:응모권,09:응모권+명판,10:스템프,11:할인(실효100%),12:사은품+적립,13:할인(실효))
if (cMstSaleCpi.TELECOM_COOP_DUP_PRMT_YN == "1" &&
cMstSaleCpi.MOBILE_CPN_DUP_PRMT_YN == "1" &&
cMstSaleCpi.HPY_CPN_DUP_PRMT_YN == "1")
{
return true;
}
// 결제 리스트에서 모바일쿠폰 결제 여부 채크
bool bMobileCpnYN = false;
ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
foreach (Column.TR_PAYMENT.DATA cPayItem in alPayItem)
{
if (cPayItem.CANCEL_DIV != PosConst.CANCEL_DIV.NORMAL) continue;
if (cPayItem.PAY_DTL_CD_05 == PosConst.PAY_DC_TYPE.PAY) // 할인결제구분 (1:결제, 2:할인)
{
if (cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.MOBILECON_ITEM)
{
bMobileCpnYN = true;
break;
}
}
}
// 상품 리스트에서 중복 여부 체크
foreach (Column.TR_PLU.DATA cSaleItem in m_alTrPluItem)
{
if (cSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue;// 지정취소
if (cSaleItem.BILLSPR_NO != m_cTrnStatus.Sale.BillSplitNo) continue; // 빌분리번호
if (cSaleItem.FLAVOUR_DIV == ItemConst.PLU_FLAVOUR_DIV.FLAVOUR) continue; // 플레이버 제외
if (cSaleItem.ITEM_DIV == ItemConst.PLU_ITEM_DIV.OPT_MENU && cSaleItem.SUBPRC_MENU_KEY_DIV == "1") continue; // 부가상품(속성) 제외
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.LOTTERY ||
cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.RECEIPT ||
cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.LOTT_REC ||
cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.ENTRY ||
cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.ENTR_REC ||
cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.HP_STAMP)
{
if (cMstSaleCpi.TELECOM_COOP_DUP_PRMT_YN == "0" && cSaleItem.COOP_CARD_DC_AMT > 0) return false; // 제휴카드 할인 금액
}
if (cMstSaleCpi.HPY_CPN_DUP_PRMT_YN == "0" && cSaleItem.CPN_DC_AMT > 0) return false; // 쿠폰 할인 금액
if (cMstSaleCpi.MOBILE_CPN_DUP_PRMT_YN == "0" && bMobileCpnYN == true) return false; // 모바일쿠폰 결제 여부
}
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;
}
//#15583 캠페인 기능 개선 요청 end
}
}