using System;
using System.Text;
using System.Collections;
using System.Data;
using System.IO;
using System.Threading;
using Cosmos.Common;
using Cosmos.CommonManager;
using Cosmos.BaseFrame;
using Cosmos.UserFrame;
/*-----------------------------------------------------------------------------------------------*/
// 설 명 : 캠페인 처리
// 작 성 자 :
// 변경 이력 :
/*-----------------------------------------------------------------------------------------------*/
namespace Cosmos.Service
{
class CampaignMain : CampaignBase , ICampaignUs
{
public CampaignMain()
:base()
{
}
///
/// 캠페인 조건 마스터 획득
///
///
public Hashtable GetCampaignCondition()
{
return m_htMstSaleCpi;
}
///
/// 캠페인 조건에서 캠페인명 획득
///
/// 캠페인코드
/// 명종류(0:캠페인명, 1:영수증명, 2:수량제한명)
///
public string GetCampaignName(string sCpiCode, int nNameDiv)
{
string sCpiName = "";
try
{
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCpiCode];
if (cMstSaleCpi != null)
{
sCpiName = cMstSaleCpi.CPI_NM;
if ( nNameDiv == 1) // 영수증명
{
if (cMstSaleCpi.CPI_BILL_NM.Trim() != "") sCpiName = cMstSaleCpi.CPI_BILL_NM;
}
else if (nNameDiv == 2) // 수량제한명
{
if (cMstSaleCpi.QTY_LIMIT_MSG.Trim() != "") sCpiName = cMstSaleCpi.QTY_LIMIT_MSG;
}
}
}
catch { }
return sCpiName;
}
///
/// 캠페인 조건의 행사상품 합계금액 및 행사금액 초기화
///
///
public void ClearCampaignAmt()
{
CancelCampaignPayment(PosConst.CAMPAIGN_PAY_KEY.HP_SAVE, PosConst.SALE_PLU_INPUT_TYPE.FREEGIFT_HP); // HP 캠페인 할인 취소 처리(재계산)
CancelCampaignPayment("", PosConst.SALE_PLU_INPUT_TYPE.FREEGIFT); // 사은품 캠페인 등록 취소
ClearCampaginItem("");
}
#region LoadCampaignCondition 캠페인 조건 마스터 로드
///
/// 캠페인 조건 마스터 로드
///
///
///
public bool LoadCampaignCondition(string[] aParam)
{
string sQuery;
try
{
m_htMstSaleCpi.Clear();
m_alMstSaleCpi.Clear();
//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 + "()", "START");
// 캠페인 마스터
sQuery = " SELECT * FROM POSMST..MST_CPI WITH(NOLOCK) ";
sQuery += " WHERE CMP_CD = '" + m_cPosStatus.Base.CmpCd + "'";
sQuery += " AND STOR_CD = '" + m_cPosStatus.Base.StoreNo + "'";
sQuery += " AND '" + m_cTrnStatus.Head.SysYmd + "' BETWEEN STARTDAY AND FNSHDAY ";
sQuery += " AND PRGRS_STATUS = 'C'";
sQuery += " AND USE_YN = '" + PosConst.MST_USE_YN.YES + "'";
sQuery += " ORDER BY PRRTY, STARTDAY DESC, CPI_CD DESC ";
DataTable dtMstCpi = m_cMstService.Select(new string[] { sQuery });
if (dtMstCpi != null && dtMstCpi.Rows.Count > 0)
{
foreach (DataRow dr in dtMstCpi.Rows)
{
// 행사기간 체크
//if (CmUtil.GetDataRowLong(dr, PosMst.MST_CPI.DATA.STARTDAY) > CmUtil.LongParse(m_cTrnStatus.Head.SysYmd) || CmUtil.GetDataRowLong(dr, PosMst.MST_CPI.DATA.FNSHDAY) < CmUtil.LongParse(m_cTrnStatus.Head.SysYmd)) continue;
// 캠페인 조건정보 생성
Column.MST_SALE_CPI.DATA cMstSaleCpi = new Column.MST_SALE_CPI.DATA();
cMstSaleCpi.CPI_CD = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.CPI_CD);
cMstSaleCpi.CPI_NM = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.CPI_NM);
cMstSaleCpi.STARTDAY = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.STARTDAY);
cMstSaleCpi.FNSHDAY = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.FNSHDAY);
if (CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.REPT_YN) != "1")
cMstSaleCpi.REPT_APPNT_TYPE = "0";
else
cMstSaleCpi.REPT_APPNT_TYPE = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.REPT_APPNT_TYPE);
cMstSaleCpi.REPT_WEEK = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.REPT_WEEK);
cMstSaleCpi.REPT_DT = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.REPT_DT);
cMstSaleCpi.DUP_APPLY_YN = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.DUP_APPLY_YN);
cMstSaleCpi.BASIC_RULE_EXCEP_YN = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.BASIC_RULE_EXCEP_YN);
cMstSaleCpi.TELECOM_COOP_DUP_PRMT_YN = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.TELECOM_COOP_DUP_PRMT_YN);
//#15583 캠페인 기능 개선 요청 start
if (cMstSaleCpi.TELECOM_COOP_DUP_PRMT_YN == "") cMstSaleCpi.TELECOM_COOP_DUP_PRMT_YN = "0";
cMstSaleCpi.MOBILE_CPN_DUP_PRMT_YN = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.MOBILE_CPN_DUP_PRMT_YN);
cMstSaleCpi.HPY_CPN_DUP_PRMT_YN = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.HPY_CPN_DUP_PRMT_YN);
//#15583 캠페인 기능 개선 요청 end
//cMstSaleCpi.CPNDC_GRP_DUP_YN = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.CPNDC_GRP_DUP_YN);
//cMstSaleCpi.GNRL_DC_GRP_DUP_YN = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.GNRL_DC_GRP_DUP_YN);
cMstSaleCpi.TRGT_CUST_TYPE = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.TRGT_CUST_TYPE);
cMstSaleCpi.CPI_CUST_BNFT_TYPE = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.CPI_CUST_BNFT_TYPE);
cMstSaleCpi.ITEM_APPLY_METHD = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.ITEM_APPLY_METHD);
cMstSaleCpi.CUST_PAY_TYPE = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.CUST_PAY_TYPE);
cMstSaleCpi.TRGT_AMT_TYPE = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.TRGT_AMT_TYPE);
cMstSaleCpi.TRGT_AMT = CmUtil.GetDataRowDouble(dr, PosMst.MST_CPI.DATA.TRGT_AMT);
if (CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.QTY_LMT_YN) != "1")
cMstSaleCpi.LMT_QTY = 0;
else
cMstSaleCpi.LMT_QTY = CmUtil.GetDataRowLong(dr, PosMst.MST_CPI.DATA.LMT_QTY);
cMstSaleCpi.QTY_LMT_STD = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.QTY_LMT_STD);
if (CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.HP_CUST_JOIN_LMT_YN) != "1")
cMstSaleCpi.HP_CUST_MAX_JOIN_CNT = 0;
else
cMstSaleCpi.HP_CUST_MAX_JOIN_CNT = CmUtil.GetDataRowLong(dr, PosMst.MST_CPI.DATA.HP_CUST_MAX_JOIN_CNT);
cMstSaleCpi.HP_CUST_JOIN_LMT_STD = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.HP_CUST_JOIN_LMT_STD);
cMstSaleCpi.BASIC_HP_ACCUM_YN = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.BASIC_HP_ACCUM_YN);
cMstSaleCpi.BASIC_HP_ACCUM_STD = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.BASIC_HP_ACCUM_STD);
cMstSaleCpi.ADD_HP_ACCUM_TELECOM_DIV = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.ADD_HP_ACCUM_TELECOM_DIV);
cMstSaleCpi.ADD_HP_ACCUM_TRGT_STD = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.ADD_HP_ACCUM_TRGT_STD);
cMstSaleCpi.ADD_HP_ACCUM_RATE = CmUtil.GetDataRowDouble(dr, PosMst.MST_CPI.DATA.ADD_HP_ACCUM_RATE);
cMstSaleCpi.ADD_HP_ACCUM_AF_DIV = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.ADD_HP_ACCUM_AF_DIV);
cMstSaleCpi.ADD_HP_ACCUM_CD1 = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.ADD_HP_ACCUM_CD1);
cMstSaleCpi.ADD_HP_ACCUM_CD2 = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.ADD_HP_ACCUM_CD2);
cMstSaleCpi.OFFER_ID = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.OFFER_ID);
cMstSaleCpi.FREE_GIFT_PROVD_STD = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.FREE_GIFT_PROVD_STD);
cMstSaleCpi.FREE_GIFT_STD_AMT = CmUtil.GetDataRowDouble(dr, PosMst.MST_CPI.DATA.FREE_GIFT_STD_AMT);
cMstSaleCpi.FREE_GIFT_PROVD_QTY = CmUtil.GetDataRowLong(dr, PosMst.MST_CPI.DATA.FREE_GIFT_PROVD_QTY);
cMstSaleCpi.FREE_GIFT_ADD_SALE_YN = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.FREE_GIFT_ADD_SALE_YN);
cMstSaleCpi.CPI_EXPLN = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.CPI_EXPLN);
cMstSaleCpi.CUST_DSP_FILE_DIV = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.CUST_DSP_FILE_DIV);
cMstSaleCpi.CUST_DSP_FILENM = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.CUST_DSP_FILENM);
cMstSaleCpi.STAMP_QTY = CmUtil.GetDataRowLong(dr, PosMst.MST_CPI.DATA.STAMP_QTY);
cMstSaleCpi.SOUND_FILE_DIV = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.SOUND_FILE_DIV);
cMstSaleCpi.SOUND_FILE_NM = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.SOUND_FILE_NM);
cMstSaleCpi.TTS_DSCRP = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.TTS_DSCRP);
cMstSaleCpi.SOUND_FILE_PLAY_CHK_PNT = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.SOUND_FILE_PLAY_CHK_PNT);
cMstSaleCpi.JOIN_QUSTN_YN = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.JOIN_QUSTN_YN);
cMstSaleCpi.ITEM_DUP_PRMT_YN = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.ITEM_DUP_PRMT_YN);
cMstSaleCpi.LTTR_MULTI_PRT_YN = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.LTTR_MULTI_PRT_YN);
cMstSaleCpi.CPI_DC_PAY_WAY = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.CPI_DC_PAY_WAY);
cMstSaleCpi.CPI_BILL_NM = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.CPI_BILL_NM);
cMstSaleCpi.QTY_LIMIT_MSG = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.QTY_LIMIT_MSG);
cMstSaleCpi.HP_CUST_LVL = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.HP_CUST_LVL);
cMstSaleCpi.DC_NOADM_PASS_YN = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI.DATA.DC_NOADM_PASS_YN);
m_htMstSaleCpi.Add(cMstSaleCpi.CPI_CD, cMstSaleCpi);
m_alMstSaleCpi.Add(cMstSaleCpi.CPI_CD);
}
}
// 캠페인 시간 마스터
sQuery = " SELECT A.* FROM POSMST..MST_CPI_HOUR A WITH(NOLOCK) ";
sQuery += " JOIN POSMST..MST_CPI B WITH(NOLOCK) ON A.CMP_CD=B.CMP_CD AND A.STOR_CD=B.STOR_CD AND A.CPI_CD=B.CPI_CD";
sQuery += " WHERE A.CMP_CD = '" + m_cPosStatus.Base.CmpCd + "'";
sQuery += " AND A.STOR_CD = '" + m_cPosStatus.Base.StoreNo + "'";
sQuery += " AND A.USE_YN = '" + PosConst.MST_USE_YN.YES + "'";
sQuery += " AND '" + m_cTrnStatus.Head.SysYmd + "' BETWEEN B.STARTDAY AND B.FNSHDAY ";
sQuery += " AND B.PRGRS_STATUS = 'C'";
sQuery += " AND B.USE_YN = '" + PosConst.MST_USE_YN.YES + "'";
DataTable dtMstCpiHour = m_cMstService.Select(new string[] { sQuery });
if (dtMstCpiHour != null && dtMstCpiHour.Rows.Count > 0)
{
foreach (DataRow dr in dtMstCpiHour.Rows)
{
string sCPI_CD = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_HOUR.DATA.CPI_CD);
if (m_htMstSaleCpi.Contains(sCPI_CD))
{
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCPI_CD];
Column.MST_SALE_CPI.DATA_HOUR cMstCpiHour = new Column.MST_SALE_CPI.DATA_HOUR();
cMstCpiHour.DOW_DIV = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_HOUR.DATA.DOW_DIV);
cMstCpiHour.START_HOUR = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_HOUR.DATA.START_HOUR);
cMstCpiHour.FNSH_HOUR = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_HOUR.DATA.FNSH_HOUR);
cMstSaleCpi.alDATA_HOUR.Add(cMstCpiHour);
}
}
}
// 캠페인 구성 마스터
sQuery = " SELECT A.* FROM POSMST..MST_CPI_COMPNT A WITH(NOLOCK) ";
sQuery += " JOIN POSMST..MST_CPI B WITH(NOLOCK) ON A.CMP_CD=B.CMP_CD AND A.STOR_CD=B.STOR_CD AND A.CPI_CD=B.CPI_CD";
sQuery += " WHERE A.CMP_CD = '" + m_cPosStatus.Base.CmpCd + "'";
sQuery += " AND A.STOR_CD = '" + m_cPosStatus.Base.StoreNo + "'";
sQuery += " AND A.USE_YN = '" + PosConst.MST_USE_YN.YES + "'";
sQuery += " AND '" + m_cTrnStatus.Head.SysYmd + "' BETWEEN B.STARTDAY AND B.FNSHDAY ";
sQuery += " AND B.PRGRS_STATUS = 'C'";
sQuery += " AND B.USE_YN = '" + PosConst.MST_USE_YN.YES + "'";
sQuery += " ORDER BY A.CPI_CD, A.CPI_ITEM_GRP_CD ";
DataTable dtMstCpiCompnt = m_cMstService.Select(new string[] { sQuery });
if (dtMstCpiCompnt != null && dtMstCpiCompnt.Rows.Count > 0)
{
foreach (DataRow dr in dtMstCpiCompnt.Rows)
{
string sCPI_CD = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_COMPNT.DATA.CPI_CD);
if (m_htMstSaleCpi.Contains(sCPI_CD))
{
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCPI_CD];
Column.MST_SALE_CPI.DATA_COMPNT cMstCpiCompnt= new Column.MST_SALE_CPI.DATA_COMPNT();
cMstCpiCompnt.CPI_ITEM_GRP_CD = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_COMPNT.DATA.CPI_ITEM_GRP_CD);
cMstCpiCompnt.CPI_COND_TYPE = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_COMPNT.DATA.CPI_COND_TYPE);
cMstCpiCompnt.QTY_AMT = CmUtil.GetDataRowDouble(dr, PosMst.MST_CPI_COMPNT.DATA.QTY_AMT);
cMstCpiCompnt.CPI_DC_TYPE = CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_COMPNT.DATA.CPI_DC_TYPE);
cMstCpiCompnt.DC_RATE_QTY_AMT = CmUtil.GetDataRowDouble(dr, PosMst.MST_CPI_COMPNT.DATA.DC_RATE_QTY_AMT);
cMstCpiCompnt.DC_MAX_AMT = CmUtil.GetDataRowDouble(dr, PosMst.MST_CPI_COMPNT.DATA.DC_MAX_AMT);
cMstSaleCpi.alDATA_COMPNT.Add(cMstCpiCompnt);
}
}
}
m_alMstCpiCard.Clear();
// 캠페인 카드 마스터
sQuery = " SELECT A.* FROM POSMST..MST_CPI_CARD A WITH(NOLOCK) ";
sQuery += " JOIN POSMST..MST_CPI B WITH(NOLOCK) ON A.CMP_CD=B.CMP_CD AND A.STOR_CD=B.STOR_CD AND A.CPI_CD=B.CPI_CD";
sQuery += " WHERE A.CMP_CD = '" + m_cPosStatus.Base.CmpCd + "'";
sQuery += " AND A.STOR_CD = '" + m_cPosStatus.Base.StoreNo + "'";
sQuery += " AND A.USE_YN = '" + PosConst.MST_USE_YN.YES + "'";
sQuery += " AND '" + m_cTrnStatus.Head.SysYmd + "' BETWEEN B.STARTDAY AND B.FNSHDAY ";
sQuery += " AND B.PRGRS_STATUS = 'C'";
sQuery += " AND B.USE_YN = '" + PosConst.MST_USE_YN.YES + "'";
sQuery += " ORDER BY A.CPI_CD ";
DataTable dtMstCpiCard = m_cMstService.Select(new string[] { sQuery });
if (dtMstCpiCard != null && dtMstCpiCard.Rows.Count > 0)
{
foreach (DataRow dr in dtMstCpiCard.Rows)
{
m_alMstCpiCard.Add(new string[] { CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_CARD.DATA.CPI_CD), CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_CARD.DATA.CARD_PRFX_CD).Trim(),
CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_CARD.DATA.LOC).Trim(), CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_CARD.DATA.CHECK_VAL).Trim() });
}
}
m_alMstCpiPrtMsg.Clear();
// 캠페인 명판 출력메시지 마스터
sQuery = " SELECT A.* FROM POSMST..MST_CPI_PRT_MSG A WITH(NOLOCK) ";
sQuery += " JOIN POSMST..MST_CPI B WITH(NOLOCK) ON A.CMP_CD=B.CMP_CD AND A.STOR_CD=B.STOR_CD AND A.CPI_CD=B.CPI_CD";
sQuery += " WHERE A.CMP_CD = '" + m_cPosStatus.Base.CmpCd + "'";
sQuery += " AND A.STOR_CD = '" + m_cPosStatus.Base.StoreNo + "'";
sQuery += " AND A.PRT_YN = '" + PosConst.MST_USE_YN.YES + "'";
sQuery += " AND '" + m_cTrnStatus.Head.SysYmd + "' BETWEEN B.STARTDAY AND B.FNSHDAY ";
sQuery += " AND B.PRGRS_STATUS = 'C'";
sQuery += " AND B.USE_YN = '" + PosConst.MST_USE_YN.YES + "'";
sQuery += " ORDER BY A.CPI_CD, A.CPI_BILL_PRT_AREA_TYPE, A.PRT_SEQ ";
DataTable dtMstCpiPrt = m_cMstService.Select(new string[] { sQuery });
if (dtMstCpiPrt != null && dtMstCpiPrt.Rows.Count > 0)
{
foreach (DataRow dr in dtMstCpiPrt.Rows)
{
//0:유형(0:명판,1:복권), 1:캠페인코드, 2:출력위치(등수), 3:확대문자, 4:BOLD여부, 5:정렬유형, 6:문자열
m_alMstCpiPrtMsg.Add(new string[] { "0", CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_PRT_MSG.DATA.CPI_CD), CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_PRT_MSG.DATA.CPI_BILL_PRT_AREA_TYPE),
CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_PRT_MSG.DATA.PRT_EXPAND_TYPE), CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_PRT_MSG.DATA.BOLD_YN),
CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_PRT_MSG.DATA.ALIGN_TYPE), CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_PRT_MSG.DATA.MSG_VAL) });
}
}
// 캠페인 복권 출력메시지 마스터
sQuery = " SELECT A.* FROM POSMST..MST_CPI_LTTR_PRT A WITH(NOLOCK) ";
sQuery += " JOIN POSMST..MST_CPI B WITH(NOLOCK) ON A.CMP_CD=B.CMP_CD AND A.STOR_CD=B.STOR_CD AND A.CPI_CD=B.CPI_CD";
sQuery += " WHERE A.CMP_CD = '" + m_cPosStatus.Base.CmpCd + "'";
sQuery += " AND A.STOR_CD = '" + m_cPosStatus.Base.StoreNo + "'";
sQuery += " AND A.PRT_YN = '" + PosConst.MST_USE_YN.YES + "'";
sQuery += " AND '" + m_cTrnStatus.Head.SysYmd + "' BETWEEN B.STARTDAY AND B.FNSHDAY ";
sQuery += " AND B.PRGRS_STATUS = 'C'";
sQuery += " AND B.USE_YN = '" + PosConst.MST_USE_YN.YES + "'";
sQuery += " ORDER BY A.CPI_CD, A.GRADE, A.PRT_SEQ ";
DataTable dtMstCpiLttPrt = m_cMstService.Select(new string[] { sQuery });
if (dtMstCpiLttPrt != null && dtMstCpiLttPrt.Rows.Count > 0)
{
foreach (DataRow dr in dtMstCpiLttPrt.Rows)
{
//0:유형(0:명판,1:복권), 1:캠페인코드, 2:출력위치(등수), 3:확대문자, 4:BOLD여부, 5:정렬유형, 6:문자열
m_alMstCpiPrtMsg.Add(new string[] { "1", CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_LTTR_PRT.DATA.CPI_CD), CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_LTTR_PRT.DATA.GRADE),
CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_LTTR_PRT.DATA.PRT_EXPAND_TYPE), CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_PRT_MSG.DATA.BOLD_YN),
CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_PRT_MSG.DATA.ALIGN_TYPE), CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_LTTR_PRT.DATA.MSG_VAL) });
}
}
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 RegisterCampaignPlu 캠페인 상품 등록 및 실행
///
/// 캠페인 상품 등록 및 실행
///
/// 캠페인실행여부
///
public double RegisterCampaignPlu(bool bExecCampaign)
{
try
{
Column.TR_PLU.DATA cNewSaleItem = null; // 신규상품 등록 정보
bool bStartCampaign = true;
for (int i = 0; i < m_alTrPluItem.Count; i++)
{
Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)m_alTrPluItem[i];
// 캠페인 상품 정보가 없으면 마스터 로딩 처리
if (cSaleItem.alTrSaleCpi == null)
{
cSaleItem.alTrSaleCpi = new ArrayList();
if (cSaleItem.ITEM_DIV != ItemConst.PLU_ITEM_DIV.NORMAL
&& cSaleItem.ITEM_DIV != ItemConst.PLU_ITEM_DIV.SET_MAIN && cSaleItem.ITEM_DIV == ItemConst.PLU_ITEM_DIV.SET_DETL
&& cSaleItem.ITEM_DIV != ItemConst.PLU_ITEM_DIV.OPT_MENU && cSaleItem.ITEM_DIV != ItemConst.PLU_ITEM_DIV.SET_DIS) 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; // 부가상품(속성) 제외
// 캠페인 상품 마스터
string sQuery = " SELECT A.* FROM POSMST..MST_CPI_ITEM A WITH(NOLOCK) ";
sQuery += " JOIN POSMST..MST_CPI B WITH(NOLOCK) ON A.CMP_CD=B.CMP_CD AND A.STOR_CD=B.STOR_CD AND A.CPI_CD=B.CPI_CD";
sQuery += " WHERE A.CMP_CD = '" + m_cPosStatus.Base.CmpCd + "'";
sQuery += " AND A.STOR_CD = '" + m_cPosStatus.Base.StoreNo + "'";
//#20171010 스퀘어 점포 대상상품 캠페인 적용 안되는 현상 수정 start
//일반 점포는 stor_cd, sub_stor_cd 가 동일, 스퀘어 점포는 stor_cd, sub_stor_cd가 달라서 대상상품 체크가 안됨.
//sQuery += " AND A.SUB_STOR_CD = '" + cSaleItem.SUB_SHOP_CD + "'";
//#20171010 스퀘어 점포 대상상품 캠페인 적용 안되는 현상 수정 end
sQuery += " AND ((A.ITEM_LVL = '1' AND A.ITEM_CD = '" + cSaleItem.ITEM_PLU_CD + "')";
sQuery += " OR (A.ITEM_LVL = '2' AND A.ITEM_CD = '" + cSaleItem.S_CLSS + "')";
sQuery += " OR (A.ITEM_LVL = '3' AND A.ITEM_CD = '" + cSaleItem.M_CLSS + "')";
sQuery += " OR (A.ITEM_LVL = '4' AND A.ITEM_CD = '" + cSaleItem.L_CLSS + "'))";
sQuery += " AND A.USE_YN = '" + PosConst.MST_USE_YN.YES + "'";
sQuery += " AND '" + m_cTrnStatus.Head.SysYmd + "' BETWEEN B.STARTDAY AND B.FNSHDAY ";
sQuery += " AND B.PRGRS_STATUS = 'C'";
sQuery += " AND B.USE_YN = '" + PosConst.MST_USE_YN.YES + "'";
sQuery += " ORDER BY A.CPI_CD, A.CPI_ITEM_GRP_CD, A.ITEM_LVL";
DataTable dtMstCpiItem = m_cMstService.Select(new string[] { sQuery });
if (dtMstCpiItem != null && dtMstCpiItem.Rows.Count > 0)
{
foreach (DataRow dr in dtMstCpiItem.Rows)
{
AddSaleItemTrSaleCpiData(cSaleItem, CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_ITEM.DATA.CPI_CD), CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_ITEM.DATA.CPI_ITEM_GRP_CD),
CmUtil.GetDataRowStr(dr, PosMst.MST_CPI_ITEM.DATA.CPI_DC_TYPE), CmUtil.GetDataRowDouble(dr, PosMst.MST_CPI_ITEM.DATA.DC_RATE_AMT));
}
}
cNewSaleItem = cSaleItem;
}
else
{
bStartCampaign = false;
}
}
if (bStartCampaign == true)
{
foreach (string sCpiCode in m_alMstSaleCpi)
{
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCpiCode];
cMstSaleCpi.SOUND_PLAY_YN = false;
cMstSaleCpi.JOIN_QUSTN_ANSWER = "";
}
}
if (bExecCampaign == false) return 0; // 캠페인 계산 안함.
//////////////// 캠페인 안내를 위한 처리(음성 및 고객화면 이미지) ///////////////////////////
m_cTrnStatus.Sale.CampaignFileName = "";
if ( cNewSaleItem != null)
{
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cNewSaleItem.alTrSaleCpi)
{
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[cTrSaleCpi.CPI_CD];
if ( cMstSaleCpi.SOUND_PLAY_YN == true) continue;
if ( cMstSaleCpi.SOUND_FILE_PLAY_CHK_PNT != "1") continue; // 1:상품등록, 2:캠페인성립
//#13521 일반캠페인 등록 start, phj
//기존
//캠페인 대상 체크
//if (cMstSaleCpi.TRGT_CUST_TYPE != ItemConst.CPI_TRGT_CUST_TYPE.NORMAL) continue;
//캠페인 지불구분 체크
//if (cMstSaleCpi.CUST_PAY_TYPE != ItemConst.CPI_CUST_PAY_TYPE.NORMAL) continue;
//#13521 일반캠페인 등록 end, phj
if ( cMstSaleCpi.SOUND_FILE_DIV == "01" || cMstSaleCpi.SOUND_FILE_DIV == "02")
{
PlayCampaignSound(cMstSaleCpi.SOUND_FILE_DIV, cMstSaleCpi.SOUND_FILE_NM, cMstSaleCpi.TTS_DSCRP);
}
// 고객화면에 캠페인 안내 이미지 표시
if (cMstSaleCpi.CUST_DSP_FILENM.Trim() != "")
{
m_cCustDisp.DisplayCampaign(cMstSaleCpi.CUST_DSP_FILE_DIV, cMstSaleCpi.CUST_DSP_FILENM);
}
cMstSaleCpi.SOUND_PLAY_YN = true;
}
}
//return ExecuteCampaignPlu(""); // 상품 캠페인 계산
return ExecuteCampaignPluHappyPoint("", 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 0;
}
#endregion
///
/// 상품 캠페인 및 해피포인트 캠페인 할인 계산 처리
///
/// 키값(취소시사용 "":상품캠페인, 그외 HP캠페인
/// 상품캠페인일때전체취소후재계산여부(true:전체쉬소, false:사은품제외)
/// 사은품캠페인("":상품만, 그외:사은품캠페인계산)
/// 카드번호
/// 고객구분(앱여부):N:일반고객, Y:앱고객
/// 고객ID
/// 고객등급코드
///
public double ExecuteCampaignPluHappyPoint(string sPayKeySeqNo, bool bPluAllClear, string sPosOpInputDiv, string sCardNo = "", string sTrgtCustType = "", string sCustID = "", string sCustLvlCd = "")
{
double nTotDisAmt = 0, nDisAmt = 0;
try
{
if (m_cTrnStatus.Head.TradeDiv != ItemConst.TRAN_DIV.NORMAL) return 0;
if (m_cTrnStatus.Head.TradeKind != ItemConst.TRAN_KIND.NORMAL.SALE && m_cTrnStatus.Head.TradeKind != ItemConst.TRAN_KIND.UNDECIDED.RESERVATION_REG) return 0;
// 캠페인 상품이 로드되어 있지 않다면 로드 처리함
foreach (Column.TR_PLU.DATA cPluItem in m_alTrPluItem)
{
if (cPluItem.alTrSaleCpi == null)
{
RegisterCampaignPlu(false);
break;
}
}
m_sHpCustID = sCustID;
if (sPayKeySeqNo == "" && bPluAllClear == true)
{
// 모든 캠페인 성립정보 초기화
RegisterCampaignPlu(false); // 캠페인 상품 등록
ClearCampaginItem(""); // 모든 행사 초기화
}
else
{
// 해피포인트 캠페인 삭제
CancelCampaignPayment(PosConst.CAMPAIGN_PAY_KEY.HP_SAVE, PosConst.SALE_PLU_INPUT_TYPE.FREEGIFT_HP); // HP 캠페인 할인 취소 처리(재계산)
// 일반 사은품 캠페인 제외한 캠페인 성립정보 초기화
foreach (Column.TR_PLU.DATA cPluItem in m_alTrPluItem)
{
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cPluItem.alTrSaleCpi)
{
if (cTrSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.FREEGIFT && cTrSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.FREE_SAVE)
{
ClearCampaginItem(cTrSaleCpi.CPI_CD);
}
}
}
}
if (CheckCampaignDuplication() == false) return 0; // 캠페인 중복불가 결제 수단 체크
//m_cPosStatus.Mst.ItemRudDwLocMethd = m_cPosStatus.Mst.DcRudDwLocMethd;
foreach (string sCpiCode in m_alMstSaleCpi)
{
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCpiCode];
// 캠페인고객혜택=>할인
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.DISCOUNT && cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.DIS_SAVE
&& cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.FREEGIFT && cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.FREE_SAVE) continue;
// 행사 조건 체크
if (CheckCampaignDateTime(cMstSaleCpi) == false) continue; // 캠페인 적용일자 및 시간 체크
nDisAmt = 0;
if (sPayKeySeqNo == "")
{
// 캠페인 대상 체크(상품캠페인)
if (cMstSaleCpi.TRGT_CUST_TYPE != ItemConst.CPI_TRGT_CUST_TYPE.NORMAL) continue;
}
else
{
// 캠페인 대상 체크(HP 캠페인)
if (cMstSaleCpi.TRGT_CUST_TYPE != ItemConst.CPI_TRGT_CUST_TYPE.NORMAL
&& cMstSaleCpi.TRGT_CUST_TYPE != ItemConst.CPI_TRGT_CUST_TYPE.HPC_CUST && cMstSaleCpi.TRGT_CUST_TYPE != ItemConst.CPI_TRGT_CUST_TYPE.HAPPYAPP) continue;
if (cMstSaleCpi.TRGT_CUST_TYPE == ItemConst.CPI_TRGT_CUST_TYPE.HAPPYAPP)
{
if (sTrgtCustType != "Y") continue;
}
// 고객 등급별 캠페인
if (cMstSaleCpi.HP_CUST_LVL.TrimEnd().Length > 3 && CmUtil.LongParse(cMstSaleCpi.HP_CUST_LVL) > 0)
{
bool bHpCustLvlExist = false; // 해피고객 등급별 행사 여부
if (cMstSaleCpi.HP_CUST_LVL.StartsWith("111") == true)
{
bHpCustLvlExist = true;
}
if (cMstSaleCpi.HP_CUST_LVL.Substring(0, 1) == "1") // 핑크
{
if (sCustLvlCd.StartsWith("G") == false && sCustLvlCd != "VIP") bHpCustLvlExist = true;
}
if (cMstSaleCpi.HP_CUST_LVL.Substring(1, 1) == "1") // 골드
{
if (sCustLvlCd.StartsWith("G") == true) bHpCustLvlExist = true;
}
if (cMstSaleCpi.HP_CUST_LVL.Substring(2, 1) == "1") // 플레티넘
{
if (sCustLvlCd == "VIP") bHpCustLvlExist = true;
}
if (bHpCustLvlExist == false) continue;
}
}
// 캠페인 지불구분체크
if (cMstSaleCpi.CUST_PAY_TYPE != ItemConst.CPI_CUST_PAY_TYPE.NORMAL) continue;
// 캠페인 중복적용 여부(1:중복적용 가능, 0:중복적용 불가)
if (ExistCampaignDupApply(cMstSaleCpi.CPI_CUST_BNFT_TYPE, cMstSaleCpi.DUP_APPLY_YN) == true) continue;
//#15583 캠페인 기능 개선 요청 start
// 캠페인 마스터의 중복 가능 여부 체크
// (통신사 제휴 중복 허용 여부, 모바일쿠폰 중복 허용 여부, 해피쿠폰 중복 허용 여부)
if (CheckCampaignMstDuplication(cMstSaleCpi) == false) continue;
//#15583 캠페인 기능 개선 요청 end
// 캠페인고객혜택=>할인
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DISCOUNT || cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DIS_SAVE)
{
if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.PLUITEM)
{
//#17198 (구포스 기능) 영수건 별 최대 할인 금액 제한 확인요청 start
//할인 최대 금액 제한이 있는 경우 할인적용방법 전체상품 형태로 변경.
//기존
// 할인적용방법=> 상품별 할인
nDisAmt = CampaignPluItemDiscount(cMstSaleCpi, 0);
//변경
/*
//할인 최대 금액 존재 여부
bool bCpnAllDcYN = false;
if (cMstSaleCpi.alDATA_COMPNT.Count == 0)
{
bCpnAllDcYN = false;
}
else
{
Column.MST_SALE_CPI.DATA_COMPNT cMstCpiCompnt = (Column.MST_SALE_CPI.DATA_COMPNT)cMstSaleCpi.alDATA_COMPNT[0];
if (cMstCpiCompnt.DC_MAX_AMT > 0)
{
bCpnAllDcYN = true;
}
else
{
bCpnAllDcYN = false;
}
}
//할인 최대 금액 존재 여부
if (bCpnAllDcYN == false)
{
// 할인적용방법=> 상품별 할인
nDisAmt = CampaignPluItemDiscount(cMstSaleCpi, 0);
}
else
{
// 할인적용방법=> 전체상품
nDisAmt = CampaignRectSumDiscount(cMstSaleCpi, 0);
}
*/
//#17198 (구포스 기능) 영수건 별 최대 할인 금액 제한 확인요청 end
}
else if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.NPLUS)
{
// 할인적용방법=> N+1
nDisAmt = CampaignPlusOneDiscount(cMstSaleCpi, 0);
}
else if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.PLULINK)
{
// 할인적용방법=> 결합
nDisAmt = CampaignLinkPluDiscount(cMstSaleCpi, 0);
}
else if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.PLUSUM)
{
// 할인적용방법=> 상품합산
nDisAmt = CampaignPluSumDiscount(cMstSaleCpi, 0);
}
else if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.RECTSUM)
{
// 할인적용방법=> 전체상품
nDisAmt = CampaignRectSumDiscount(cMstSaleCpi, 0);
}
if (nDisAmt <= 0) continue;
if (sPayKeySeqNo != "")
{
// 캠페인 HP횟수제한 체크
if (CheckCampaignCntLimit(cMstSaleCpi, sCustID) == false)
{
ClearCampaginItem(cMstSaleCpi.CPI_CD);
continue;
}
// 캠페인 참여문의 여부
if (CheckCampaignJoinQustn(cMstSaleCpi, true) == false)
{
ClearCampaginItem(cMstSaleCpi.CPI_CD);
continue;
}
}
else
{
// 캠페인 참여문의 여부
if (CheckCampaignJoinQustn(cMstSaleCpi) == false)
{
ClearCampaginItem(cMstSaleCpi.CPI_CD);
continue;
}
}
}
// 캠페인고객혜택=> 사은품
else if (cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.FREEGIFT || cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.FREE_SAVE)
{
if (sPosOpInputDiv != ""
&& (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.PLUITEM || cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.RECTSUM))
{
if (sPayKeySeqNo == "" && sPosOpInputDiv == PosConst.SALE_PLU_INPUT_TYPE.FREEGIFT)
{
// 일반사은품
if (cMstSaleCpi.TRGT_CUST_TYPE != ItemConst.CPI_TRGT_CUST_TYPE.NORMAL) continue;
// 할인적용방법 => 사은품
nDisAmt = CampaignFreeGiftDiscount(cMstSaleCpi, 0, sPosOpInputDiv, sCustID);
}
if (sPayKeySeqNo != "" && sPosOpInputDiv == PosConst.SALE_PLU_INPUT_TYPE.FREEGIFT_HP)
{
// 해피사은품
if (cMstSaleCpi.TRGT_CUST_TYPE != ItemConst.CPI_TRGT_CUST_TYPE.HPC_CUST && cMstSaleCpi.TRGT_CUST_TYPE != ItemConst.CPI_TRGT_CUST_TYPE.HAPPYAPP) continue;
if (cMstSaleCpi.TRGT_CUST_TYPE == ItemConst.CPI_TRGT_CUST_TYPE.HAPPYAPP)
{
if (sTrgtCustType != "Y") continue;
}
// 할인적용방법 => 사은품
nDisAmt = CampaignFreeGiftDiscount(cMstSaleCpi, 0, sPosOpInputDiv, sCustID);
}
if (nDisAmt <= 0) continue;
}
}
// 결제캠페인 적용 정보 저장
if (nDisAmt > 0)
{
if (sPayKeySeqNo != "" )
{
m_alSaleCpiPay.Add(new string[] { sPayKeySeqNo, cMstSaleCpi.CPI_CD, "", "", "0" });
}
PlayCompleteSound(cMstSaleCpi, false); // 캠페인 성립시 사운드 출력
nTotDisAmt = CmUtil.DoubleAdd(nTotDisAmt, nDisAmt);
}
}
// 상품 합계금액 계산(거래해더)
m_cDataService.UpdatePluAmount(true);
if (sPayKeySeqNo != "" || sPosOpInputDiv != "")
{
//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("CAMPAIGN = PayKey:{0}, CardNo:{1}, TrgtCustType:{2} => DisAmt:{3}", sPayKeySeqNo, sCardNo, sTrgtCustType, 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);
}
finally
{
m_sHpCustID = "";
}
return nTotDisAmt;
}
///
/// 해피포인트 결제 캠페인 할인 계산 처리
///
/// 키값(취소시사용)
/// 카드번호
/// 지불금액
/// 소멸예정포인트
/// 고객번호
///
public double ExecuteCampaignHappyUse(string sPayKey, string sCardNo, double nPayAmt, double nExpPoint, string sCustID)
{
double nTotDisAmt = 0, nDisAmt = 0;
try
{
if (m_cTrnStatus.Head.TradeDiv != ItemConst.TRAN_DIV.NORMAL) return 0;
if (m_cTrnStatus.Head.TradeKind != ItemConst.TRAN_KIND.NORMAL.SALE && m_cTrnStatus.Head.TradeKind != ItemConst.TRAN_KIND.UNDECIDED.RESERVATION_REG) return 0;
m_nHpExpPoint = nExpPoint; // 소멸예정포인트
m_sHpCustID = sCustID; // 고객번호
//m_cPosStatus.Mst.ItemRudDwLocMethd = m_cPosStatus.Mst.DcRudDwLocMethd;
CancelCampaignPayment(sPayKey, ""); // 결제 캠페인 할인 취소 처리(재계산)
if (CheckCampaignDuplication() == false) return 0; // 캠페인 중복불가 결제 수단 체크
foreach (string sCpiCode in m_alMstSaleCpi)
{
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCpiCode];
// 캠페인고객혜택=>할인
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.DISCOUNT && cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.DIS_SAVE
&& cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.DIS_POINT_ALL && cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.DIS_POINT) continue;
// 행사 조건 체크
if (CheckCampaignDateTime(cMstSaleCpi) == false) continue; // 캠페인 적용일자 및 시간 체크
// 해피포인트 결제
if (cMstSaleCpi.TRGT_CUST_TYPE != ItemConst.CPI_TRGT_CUST_TYPE.HPC_PAY) continue;
// 캠페인 지불구분체크
if (cMstSaleCpi.CUST_PAY_TYPE != ItemConst.CPI_CUST_PAY_TYPE.NORMAL) continue;
string sPayDcType = PosConst.PAY_DC_TYPE.DC; // 결제할인구분
string sPayDtlCode = ""; // 결제할인상세코드
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DIS_POINT_ALL || cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DIS_POINT)
{
// 실효포인트 행사(실효포인트가 있을때만 적용)
// 실효포인트 행사 => 실효포인트가 없더라도 가능하게 처리(2017.06.21)
//if (m_nHpExpPoint == 0) continue;
sPayDcType = PosConst.PAY_DC_TYPE.PAY;
sPayDtlCode = ItemConst.TR_ITEM_ID.CPI_PAY.HPEXT_PAY;
}
// 캠페인 중복적용 여부(1:중복적용 가능, 0:중복적용 불가)
if (ExistCampaignDupApply(cMstSaleCpi.CPI_CUST_BNFT_TYPE, cMstSaleCpi.DUP_APPLY_YN) == true) continue;
//#15583 캠페인 기능 개선 요청 start
// 캠페인 마스터의 중복 가능 여부 체크
// (통신사 제휴 중복 허용 여부, 모바일쿠폰 중복 허용 여부, 해피쿠폰 중복 허용 여부)
if (CheckCampaignMstDuplication(cMstSaleCpi) == false) continue;
//#15583 캠페인 기능 개선 요청 end
// 캠페인고객혜택=>할인
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DISCOUNT || cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DIS_SAVE
|| cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DIS_POINT_ALL || cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DIS_POINT)
{
if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.PLUITEM)
{
// 할인적용방법=> 상품별 할인
nDisAmt = CampaignPluItemDiscount(cMstSaleCpi, nPayAmt, sPayDcType);
}
else if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.NPLUS)
{
// 할인적용방법=> N+1
nDisAmt = CampaignPlusOneDiscount(cMstSaleCpi, nPayAmt, sPayDcType);
}
else if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.PLULINK)
{
// 할인적용방법=> 결합
nDisAmt = CampaignLinkPluDiscount(cMstSaleCpi, nPayAmt, sPayDcType);
}
else if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.PLUSUM)
{
// 할인적용방법=> 상품합산
nDisAmt = CampaignPluSumDiscount(cMstSaleCpi, nPayAmt, sPayDcType);
}
else if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.RECTSUM)
{
// 할인적용방법=> 전체상품
nDisAmt = CampaignRectSumDiscount(cMstSaleCpi, nPayAmt, sPayDcType);
}
else if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.PAYMENT)
{
// 할인적용방법=> 결제금액
nDisAmt = CampaignPaymentDiscount(cMstSaleCpi, nPayAmt, sPayDcType);
}
}
// 결제캠페인 적용 정보 저장
if (nDisAmt > 0)
{
//// 캠페인 제한 수량 체크
//if (CheckCampaignQtyLimit(cMstSaleCpi) == false)
//{
// ClearCampaginItem(cMstSaleCpi.CPI_CD);
// continue;
//}
// 캠페인 HP횟수제한 체크
if (CheckCampaignCntLimit(cMstSaleCpi, m_sHpCustID) == false)
{
ClearCampaginItem(cMstSaleCpi.CPI_CD);
continue;
}
// 캠페인 참여문의 여부
if (CheckCampaignJoinQustn(cMstSaleCpi, true) == false)
{
ClearCampaginItem(cMstSaleCpi.CPI_CD);
continue;
}
m_alSaleCpiPay.Add(new string[] { sPayKey, cMstSaleCpi.CPI_CD, sPayDtlCode, sCardNo, nDisAmt.ToString() });
nTotDisAmt = CmUtil.DoubleAdd(nTotDisAmt, nDisAmt);
PlayCompleteSound(cMstSaleCpi, false); // 캠페인 성립시 사운드 출력
}
}
// 상품 합계금액 계산(거래해더)
m_cDataService.UpdatePluAmount(true);
m_cDataService.UpdatePayAmount();
//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("CAMPAIGN = PayKey:{0}, CardNo:{1}, PayAmt:{2}, HpExpPnt:{3} => DisAmt:{4}", sPayKey, sCardNo, nPayAmt, m_nHpExpPoint, 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);
}
finally
{
m_sHpCustID = "";
}
return nTotDisAmt;
}
///
/// 결제 캠페인 할인 계산 처리
///
/// 키값(취소시사용)
/// 카드번호
/// 지불구분(01:신용카드, 02:캐시비, 03:티머니, 04:스마일페이)
/// 지불금액
///
//#14538 스마일페이 캠페인 확인창 중복 팝업 확인요청 start,phj
//기존
//public double ExecuteCampaignPayment(string sPayKey, string sCardNo, string sPaymentDiv, double nPayAmt)
//변경
public double ExecuteCampaignPayment(string sPayKey, string sCardNo, string sPaymentDiv, double nPayAmt, bool bPopupYN)
//#14538 스마일페이 캠페인 확인창 중복 팝업 확인요청 end,phj
{
double nTotDisAmt = 0, nDisAmt = 0;
try
{
if (m_cTrnStatus.Head.TradeDiv != ItemConst.TRAN_DIV.NORMAL) return 0;
if (m_cTrnStatus.Head.TradeKind != ItemConst.TRAN_KIND.NORMAL.SALE && m_cTrnStatus.Head.TradeKind != ItemConst.TRAN_KIND.UNDECIDED.RESERVATION_REG) return 0;
//m_cPosStatus.Mst.ItemRudDwLocMethd = m_cPosStatus.Mst.DcRudDwLocMethd;
CancelCampaignPayment(sPayKey, ""); // 결제 캠페인 할인 취소 처리(재계산)
if (CheckCampaignDuplication() == false) return 0; // 캠페인 중복불가 결제 수단 체크
foreach (string sCpiCode in m_alMstSaleCpi)
{
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCpiCode];
// 캠페인고객혜택=>할인
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.DISCOUNT && cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.DIS_SAVE) continue;
// 행사 조건 체크
if (CheckCampaignDateTime(cMstSaleCpi) == false) continue; // 캠페인 적용일자 및 시간 체크
// 캠페인 대상 체크
if (cMstSaleCpi.TRGT_CUST_TYPE != ItemConst.CPI_TRGT_CUST_TYPE.NORMAL && cMstSaleCpi.TRGT_CUST_TYPE != ItemConst.CPI_TRGT_CUST_TYPE.CREDIT_CARD) continue;
// 캠페인 지불구분체크
if (cMstSaleCpi.CUST_PAY_TYPE != sPaymentDiv) continue;
// 카드 프리픽스 체크
if (CheckCampaginCard(cMstSaleCpi.CPI_CD, sCardNo, cMstSaleCpi.TRGT_CUST_TYPE == ItemConst.CPI_TRGT_CUST_TYPE.CREDIT_CARD ? true : false) == false) continue;
// 캠페인 중복적용 여부(1:중복적용 가능, 0:중복적용 불가)
if (ExistCampaignDupApply(cMstSaleCpi.CPI_CUST_BNFT_TYPE, cMstSaleCpi.DUP_APPLY_YN) == true) continue;
//#15583 캠페인 기능 개선 요청 start
// 캠페인 마스터의 중복 가능 여부 체크
// (통신사 제휴 중복 허용 여부, 모바일쿠폰 중복 허용 여부, 해피쿠폰 중복 허용 여부)
if (CheckCampaignMstDuplication(cMstSaleCpi) == false) continue;
//#15583 캠페인 기능 개선 요청 end
//#17169 스마일페이 변경요청 건 start
if (sPaymentDiv == ItemConst.CPI_CUST_PAY_TYPE.SMILEPAY)
{
// 문의해야할것.
// 스마일페이결제승인 시 스마일페이 중복적용 된 할인금액으로 보내야하는지?
// 아니면 중복적용 안된 한 건으로 적용된 할인금액으로 보내야하는지?
// 만약 전자라면 위치변경해야함.
if (CheckSmilepayCampaignDuplication() == true) continue;
}
//#17169 스마일페이 변경요청 건 end
// 캠페인고객혜택=>할인
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DISCOUNT || cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DIS_SAVE
|| cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DIS_POINT_ALL || cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DIS_POINT)
{
if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.PLUITEM)
{
// 할인적용방법=> 상품별 할인
nDisAmt = CampaignPluItemDiscount(cMstSaleCpi, nPayAmt, PosConst.PAY_DC_TYPE.PAY);
}
else if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.NPLUS)
{
// 할인적용방법=> N+1
nDisAmt = CampaignPlusOneDiscount(cMstSaleCpi, nPayAmt, PosConst.PAY_DC_TYPE.PAY);
}
else if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.PLULINK)
{
// 할인적용방법=> 결합
nDisAmt = CampaignLinkPluDiscount(cMstSaleCpi, nPayAmt, PosConst.PAY_DC_TYPE.PAY);
}
else if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.PLUSUM)
{
// 할인적용방법=> 상품합산
nDisAmt = CampaignPluSumDiscount(cMstSaleCpi, nPayAmt, PosConst.PAY_DC_TYPE.PAY);
}
else if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.RECTSUM)
{
// 할인적용방법=> 전체상품
nDisAmt = CampaignRectSumDiscount(cMstSaleCpi, nPayAmt, PosConst.PAY_DC_TYPE.PAY);
}
else if (cMstSaleCpi.ITEM_APPLY_METHD == ItemConst.CPI_ITEM_APPLY_METHD.PAYMENT)
{
// 할인적용방법=> 결제금액
nDisAmt = CampaignPaymentDiscount(cMstSaleCpi, nPayAmt, PosConst.PAY_DC_TYPE.PAY);
}
}
// 결제캠페인 적용 정보 저장
if (nDisAmt > 0)
{
//// 캠페인 제한 수량 체크
//if (CheckCampaignQtyLimit(cMstSaleCpi) == false)
//{
// ClearCampaginItem(cMstSaleCpi.CPI_CD);
// continue;
//}
//#14538 스마일페이 캠페인 확인창 중복 팝업 확인요청 start,phj
if (bPopupYN == true)
{
// 캠페인 참여문의 여부
if (CheckCampaignJoinQustn(cMstSaleCpi, true) == false)
{
ClearCampaginItem(cMstSaleCpi.CPI_CD);
continue;
}
}
//#14538 스마일페이 캠페인 확인창 중복 팝업 확인요청 end,phj
m_alSaleCpiPay.Add(new string[] { sPayKey, cMstSaleCpi.CPI_CD, cMstSaleCpi.CPI_DC_PAY_WAY, sCardNo, nDisAmt.ToString() });
nTotDisAmt = CmUtil.DoubleAdd(nTotDisAmt, nDisAmt);
PlayCompleteSound(cMstSaleCpi, false); // 캠페인 성립시 사운드 출력
}
}
// 상품 합계금액 계산(거래해더)
m_cDataService.UpdatePluAmount(true);
m_cDataService.UpdatePayAmount();
//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("CAMPAIGN = PayKey:{0}, CardNo:{1}, PayDiv:{2}, PayAmt:{3} => DisAmt:{4}", sPayKey, sCardNo, sPaymentDiv, nPayAmt, 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;
}
//#17169 스마일페이 변경요청 건 start
///
/// 적용된 스마일페이캠페인 존재여부 체크한다.
/// 현재 스마일페이 중복 적용 가능하나
/// 결제 승인 시 프로모션 코드를 하나만 넘겨야 하므로
/// 스마일페이 캠페인 중복적용을 막는다.
/// true : 컨티뉴, false : 적용안됨
///
public bool CheckSmilepayCampaignDuplication()
{
bool bRet = false;
try
{
if (m_alSaleCpiPay.Count > 0)
{
foreach (string[] saCpiPay in m_alSaleCpiPay)
{
string sPaySeq = saCpiPay.Length > 1 ? saCpiPay[0] : "";
string sCpiCode = saCpiPay.Length > 2 ? saCpiPay[1] : "";
string sCpiDcPayWay = saCpiPay.Length > 3 ? saCpiPay[2] : "";
string sCardNo = saCpiPay.Length > 4 ? saCpiPay[3] : "";
string sDisAmt = saCpiPay.Length > 5 ? saCpiPay[4] : "";
if (sPaySeq == "") continue;
if (sCpiCode == "") continue;
if (sCpiDcPayWay == ItemConst.TR_ITEM_ID.CPI_PAY.SMAILE_PAY) { bRet = 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 bRet;
}
//#17169 스마일페이 변경요청 건 end
//#17169 스마일페이 변경요청 건 start, 20181113
///
/// 적용된 스마일페이 오퍼아이디 있으면 넣고, 없으면 공백
/// 적용된 캠페인 존재 시 0원, 없으면 스마일페이 결제금액
/// pSmilepayPayAmt: 결제금액
/// pSmilepayPromotionCode: 프로모션코드
/// pSmileCashTargetAmt: 스마일캐시
/// pApplyCampaign: 적용된 캠페인 유무
///
public void GetSmailePayCampaignCheck(double pSmilepayPayAmt, out string pSmilepayPromotionCode, out double pSmileCashTargetAmt, out bool pApplyCampaign)
{
string sSmilepayPromotionCode = "";
double dSmileCashTargetAmt = 0;
bool bApplyCampaign = false;
try
{
#region 적용된 스마일페이 캠페인의 오퍼아이디 구하기
string sSmilepayCampaingCode = "";
if (m_alSaleCpiPay.Count > 0)
{
foreach (string[] saCpiPay in m_alSaleCpiPay)
{
string sPaySeq = saCpiPay.Length > 1 ? saCpiPay[0] : "";
string sCpiCode = saCpiPay.Length > 2 ? saCpiPay[1] : "";
string sCpiDcPayWay = saCpiPay.Length > 3 ? saCpiPay[2] : "";
string sCardNo = saCpiPay.Length > 4 ? saCpiPay[3] : "";
string sDisAmt = saCpiPay.Length > 5 ? saCpiPay[4] : "";
if (sPaySeq == "") continue;
if (sCpiCode == "") continue;
if (sCpiDcPayWay != ItemConst.TR_ITEM_ID.CPI_PAY.SMAILE_PAY) continue;
sSmilepayCampaingCode = sCpiCode;
break;
}
if (sSmilepayCampaingCode != "")
{
foreach (string sCpiCode in m_alMstSaleCpi)
{
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCpiCode];
if (cMstSaleCpi.CPI_CD != sSmilepayCampaingCode) continue;
if (cMstSaleCpi.CUST_PAY_TYPE != ItemConst.CPI_CUST_PAY_TYPE.SMILEPAY) continue;
sSmilepayPromotionCode = cMstSaleCpi.OFFER_ID;
}
}
}
#endregion 적용된 스마일페이 캠페인의 오퍼아이디 구하기
#region 적용된 캠페인 유무
// 캠페인 상품
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;
if (cSaleItem.alTrSaleCpi == null) continue;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
{
if (cTrSaleCpi.CPI_CD == "") continue;
if (cTrSaleCpi.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL) continue;
if (cTrSaleCpi.DC_SUM_AMT <= 0 && cTrSaleCpi.DC_QTY <= 0) continue;
bApplyCampaign = true;
break;
}
}
// 캠페인 정보
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in m_alTrSaleCpi)
{
if (cTrSaleCpi.CPI_CD == "") continue;
if (cTrSaleCpi.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL) continue;
if (cTrSaleCpi.DC_SUM_AMT <= 0 && cTrSaleCpi.DC_QTY <= 0) continue;
if (cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.LOTTERY ||
cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.RECEIPT ||
cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.LOTT_REC ||
cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.ENTRY ||
cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.ENTR_REC ||
cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.HP_STAMP)
{
if (cTrSaleCpi.LTTR_NMPLAT_NO.Trim() == "") continue;//복권
}
bApplyCampaign = true;
break;
}
#endregion 적용된 캠페인 유무
#region 스마일캐시 금액구하기
if (bApplyCampaign == false)
{
dSmileCashTargetAmt = pSmilepayPayAmt;
}
else
{
dSmileCashTargetAmt = 0;
}
#endregion 스마일캐시 금액구하기
UserLog.WriteLogFile(UserCom.LOG_IOS,
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
"스마일페이오퍼아이디: " + sSmilepayPromotionCode + " , 스마일캐시금액: " + dSmileCashTargetAmt.ToString() + " 적용캠페인존재유무: " + bApplyCampaign.ToString());
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
ex.Message);
}
pSmilepayPromotionCode = sSmilepayPromotionCode;
pSmileCashTargetAmt = dSmileCashTargetAmt;
pApplyCampaign = bApplyCampaign;
}
//#17169 스마일페이 변경요청 건 end, 20181113
//#17169 스마일페이 변경요청 건 start, 20181113
#region 기존소스
////#17169 스마일페이 변경요청 건 start
/////
///// 스마일페이 프로모션코드
///// ※ 기존에는 스탬프 캠페인의 OFFER_ID 필드였으나, 스마일페이 캠페인 일 때는 프로모션 코드로 사용
///// SmilepayCampaingCode : 스마일페이캠페인코드, SmilepayPromotionCode : 스마일페이프로모션코드
/////
//public void GetSmilepayPromotionCode(out string SmilepayCampaingCode, out string SmilepayPromotionCode)
//{
// string sSmilepayCampaingCode = ""; // 스마일페이 결제캠페인코드
// string sSmilepayPromotionCode = ""; //스마일페이 프로모션코드
// try
// {
// if (m_alSaleCpiPay.Count > 0)
// {
// foreach (string[] saCpiPay in m_alSaleCpiPay)
// {
// string sPaySeq = saCpiPay.Length > 1 ? saCpiPay[0] : "";
// string sCpiCode = saCpiPay.Length > 2 ? saCpiPay[1] : "";
// string sCpiDcPayWay = saCpiPay.Length > 3 ? saCpiPay[2] : "";
// string sCardNo = saCpiPay.Length > 4 ? saCpiPay[3] : "";
// string sDisAmt = saCpiPay.Length > 5 ? saCpiPay[4] : "";
//
// if (sPaySeq == "") continue;
// if (sCpiCode == "") continue;
//
// //if (sCpiDcPayWay != ItemConst.TR_ITEM_ID.CPI_PAY.SMAILE_PAY) continue;
// if (sCpiDcPayWay == ItemConst.TR_ITEM_ID.CPI_PAY.SMAILE_PAY)
// {
// sSmilepayCampaingCode = sCpiCode;
// break;
// }
// }
// }
// if (sSmilepayCampaingCode != "")
// {
// foreach (string sCpiCode in m_alMstSaleCpi)
// {
// Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCpiCode];
//
// //if (cMstSaleCpi.CPI_CD != sSmilepayCampaingCode) continue;
// if (cMstSaleCpi.CUST_PAY_TYPE != ItemConst.CPI_CUST_PAY_TYPE.SMILEPAY) continue;
// if (cMstSaleCpi.CPI_CD == sSmilepayCampaingCode) { sSmilepayPromotionCode = cMstSaleCpi.OFFER_ID; }
// }
// }
//
// //foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in m_alTrPluItem)
// //{
// // if (cTrSaleCpi.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL) continue;
// // if (cTrSaleCpi.CUST_PAY_TYPE != ItemConst.CPI_CUST_PAY_TYPE.SMILEPAY) continue;
// // if (cTrSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.DISCOUNT && cTrSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.DIS_SAVE) continue;
// // if (cTrSaleCpi.DC_SUM_AMT < 0 && cTrSaleCpi.DC_QTY < 0) continue;
// // sSmilepayPromotionCode = cTrSaleCpi.CPI_CD;
// // sSmilepayPromotionCode = cTrSaleCpi.OFFER_ID;
// //}
// }
// catch (Exception ex)
// {
// WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
// System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
// System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
// ex.Message);
// }
// SmilepayCampaingCode = sSmilepayCampaingCode;
// SmilepayPromotionCode = sSmilepayPromotionCode;
//}
////#17169 스마일페이 변경요청 건 end
#endregion
//#17169 스마일페이 변경요청 건 end, 20181113
//#17169 스마일페이 변경요청 건 start, 20181113
#region 기존소스
////#17169 스마일페이 변경요청 건 start
/////
///// 스마일캐시 적립대상금액 구하기
///// - 할인 적용된 상품 제외
///// - 상품 적립 불가 상품 제외
///// - 스마일페이 할인 캠페인 적용된 상품 제외
/////
//public double GetSmileCashTargetAmt(string pCampainCode)
//{
// double dSmileCashTargetAmt = 0; //스마일캐시 적립대상금액
// try
// {
// ArrayList alSaleItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);
// ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
//
// #region 할인 적용된 상품 제외, 상품 적립 불가 상품 제외, 스마일페이 할인 캠페인 적용된 상품 제외
// foreach (Column.TR_PLU.DATA cSaleItem in m_alTrPluItem)
// //foreach (Column.TR_PLU.DATA cSaleItem in alSaleItem)
// {
// 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) continue; // 단품 할인, 소계 할인 금액
// if (cSaleItem.COOP_CARD_DC_AMT > 0 && cSaleItem.COOP_CARD_DC_DIV.Length >= 4) continue; // 제휴 할인 금액
// if (cSaleItem.POINT_DC_AMT > 0 && cSaleItem.POINT_DC_DIV.Length >= 4) continue; // 포인트 할인 금액
// if (cSaleItem.CPN_DC_AMT > 0 && cSaleItem.CPN_DC_DIV.Length >= 4) continue; // 쿠폰 할인 금액
// if (cSaleItem.EMP_DC_AMT > 0 && cSaleItem.EMP_DC_DIV.Length >= 4) continue; // 직원 할인 금액
// if (cSaleItem.SET_DC_AMT > 0) continue; // 세트할인
// if (cSaleItem.ETC_DC_AMT > 0) continue; // 기타할인
// if (cSaleItem.CPI_DC_AMT > 0) continue; // 캠페인 할인금액
// //if (cSaleItem.DC_PRMT_YN == "1") continue; // 할인 불가 여부(0:가능, 1:불가)
// if (cSaleItem.ACCUM_PRMT_YN == "0") continue; // 적립허용여부 (0: 불가능, 1:가능)
//
// bool bExist = false;
// if (cSaleItem.alTrSaleCpi != null)
// {
// foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cSaleItem.alTrSaleCpi)
// {
// if (cTrSaleCpi.CPI_CD == "") continue;
// if (cTrSaleCpi.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL) continue;
//
// //스마일페이 캠페인 적용대상 상품이면 제외
// if (pCampainCode == cTrSaleCpi.CPI_CD) { bExist = true; break; };
//
// //다른 결제할인캠페인 적용된 것이 있으면 상품제외
// if (cTrSaleCpi.DC_SUM_AMT > 0 || cTrSaleCpi.DC_QTY > 0) { bExist = true; break; };
// }
// if (bExist == true) { continue; }
// }
//
// dSmileCashTargetAmt += cSaleItem.BILL_AMT;
// }
// #endregion
//
// #region 결제 금액중 적립가능 결제금액만 설정 함 -- 주석처리
// /*
// double nExceptPayAmt = 0;
// 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)
// {
// 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);
// }
//
// }
//
// }
// }
// if (nExceptPayAmt > 0)
// {
// double nPaySaveAmt = dSmileCashTargetAmt - nExceptPayAmt;
// if (nPaySaveAmt <= 0) return 0;
// if (dSmileCashTargetAmt > nPaySaveAmt) dSmileCashTargetAmt = nPaySaveAmt;
// }
// */
// #endregion
// }
// 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 dSmileCashTargetAmt;
//}
////#17169 스마일페이 변경요청 건 end
#endregion 기존소스
//#17169 스마일페이 변경요청 건 end, 20181113
///
/// 결제 캠페인 할인 취소 처리
///
/// 키값(취소시사용)
/// 사은품취소구분
///
public bool CancelCampaignPayment(string sPayKeySeqNo, string sPosOpInputDiv)
{
try
{
if (sPayKeySeqNo != "") // 키값(결제수단 등록 인덱스번호)
{
ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
foreach (string[] saCpiPay in m_alSaleCpiPay)
{
if (saCpiPay[0] == "") continue;
// 해당 캠페인 취소 처리
if (saCpiPay[0] == sPayKeySeqNo)
{
saCpiPay[0] = "";
if (sPayKeySeqNo == PosConst.CAMPAIGN_PAY_KEY.HP_SAVE)
{
ClearCampaginItem(saCpiPay[1], false);
}
else
{
// 결제아이템 취소
foreach (Column.TR_PAYMENT.DATA cPayItem in alPayItem)
{
if (cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.CPI_PAY_ITEM && cPayItem.OCCUR_ENTRY_02 == saCpiPay[1])
{
cPayItem.CANCEL_DIV = ItemConst.PAY_CANCEL_DIV.CANCEL;
}
}
// 상품아이템 취소
ClearCampaginItem(saCpiPay[1], true);
}
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[saCpiPay[1]];
cMstSaleCpi.SOUND_PLAY_YN = false;
}
}
}
if (sPosOpInputDiv == PosConst.SALE_PLU_INPUT_TYPE.FREEGIFT || sPosOpInputDiv == PosConst.SALE_PLU_INPUT_TYPE.FREEGIFT_HP)
{
// 취소할 사은품(상품, HP)
ArrayList aSaleItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM); // 상품 정보
for (int i = 0; i < aSaleItem.Count; i++)
{
Column.TR_PLU.DATA cPluItem = (Column.TR_PLU.DATA)aSaleItem[i];
if (cPluItem.CAMPAIGN_FREEGIFT == sPosOpInputDiv)
{
if (cPluItem.alTrSaleCpi != null)
{
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cPluItem.alTrSaleCpi)
{
ClearCampaginItem(cTrSaleCpi.CPI_CD);
}
}
aSaleItem.Remove(cPluItem);
i--;
}
}
}
// 상품 합계금액 계산(거래해더)
m_cDataService.UpdatePluAmount(true);
m_cDataService.UpdatePayAmount();
//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 = PayKey:{0}, InputDiv:{1}", sPayKeySeqNo, sPosOpInputDiv));
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 CompleteCampaignPayment(string sPayKeySeqNo)
{
try
{
ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
foreach (string[] saCpiPay in m_alSaleCpiPay)
{
if (saCpiPay[0] == "") continue;
if (saCpiPay[0] != sPayKeySeqNo) continue;
Column.TR_PAYMENT.DATA cPayItem = new Column.TR_PAYMENT.DATA();
cPayItem.PAY_AMT = CmUtil.DoubleParse(saCpiPay[4]); // 결제금액
cPayItem.PAY_WAY_CD = ItemConst.TR_ITEM_ID.CPI_PAY_ITEM;
cPayItem.PAY_DTL_CD_01 = saCpiPay[2]; // 결제코드
cPayItem.PAY_DTL_CD_03 = "0"; // 할인금액 아이템 적용여부(0:미적용, 1:적용)
cPayItem.PAY_DTL_CD_05 = PosConst.PAY_DC_TYPE.PAY; // 할인결제구분 (1:결제, 2:할인)
cPayItem.AMT_ENTRY_01 = cPayItem.PAY_AMT; // 결제금액
cPayItem.OCCUR_ENTRY_01 = saCpiPay[3].Length > 16 ? saCpiPay[3].Substring(0, 16).Trim() : saCpiPay[3]; // 카드번호
cPayItem.OCCUR_ENTRY_02 = saCpiPay[1]; // 캠페인번호
cPayItem.OCCUR_ENTRY_20 = PosMstManager.GetMstPayDc(cPayItem.PAY_WAY_CD, cPayItem.PAY_DTL_CD_01, PosMst.MST_PAY_DC.DATA.PAY_DC_NM); // 결제수단명
cPayItem.OCCUR_ENTRY_21 = PosMstManager.GetMstPayDc(cPayItem.PAY_WAY_CD, cPayItem.PAY_DTL_CD_01, PosMst.MST_PAY_DC.DATA.CASH_BILL_ISSUE_YN); // 현금영수증발행여부
if (cPayItem.OCCUR_ENTRY_20 == "")
{
if (cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.CPI_PAY.TMONEY)
{
cPayItem.OCCUR_ENTRY_20 = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0977); // 결제수단명
}
else if (cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.CPI_PAY.CASHBEE)
{
cPayItem.OCCUR_ENTRY_20 = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0978); // 결제수단명
}
else if (cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.CPI_PAY.SMAILE_PAY)
{
cPayItem.OCCUR_ENTRY_20 = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0979); // 결제수단명
}
else if (cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.CPI_PAY.HPEXT_PAY)
{
cPayItem.OCCUR_ENTRY_20 = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0789)
+ MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0018); // 결제수단명
}
else
{
cPayItem.OCCUR_ENTRY_20 = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0976); // 결제수단명
}
}
cPayItem.CANCEL_DIV = ItemConst.PAY_CANCEL_DIV.NORMAL;
cPayItem.BILLSPR_NO = m_cTrnStatus.Sale.BillSplitNo; // 빌분리 번호
// 결제 아이템 추가
cPayItem.SEQ = alPayItem.Count + 1;
alPayItem.Add(cPayItem);
}
m_cDataService.UpdatePayAmount();
//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("CAMPAIGN = PayKey:{0}", sPayKeySeqNo));
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 ExecuteCampaignHappyPointSave(string sPayKey, Column.TR_ETC.DATA cEtcItemHP)
{
try
{
if (m_cTrnStatus.Head.TradeDiv != ItemConst.TRAN_DIV.NORMAL) return;
if (m_cTrnStatus.Head.TradeKind != ItemConst.TRAN_KIND.NORMAL.SALE && m_cTrnStatus.Head.TradeKind != ItemConst.TRAN_KIND.UNDECIDED.RESERVATION_REG) return;
// 기존(적립) 캠페인 정보 초기화
CancelCampaignPayment(sPayKey, "");
m_cTrnStatus.Head.AftSaveAddDiv = "0";
m_cTrnStatus.Head.AftSaveAddInfo = "";
// 고객 구분 획득
string sTrgtCustType = "N"; // 고객구분(앱여부) :N:일반고객, Y:앱고객
ArrayList alEtcItem = (ArrayList)StateObject.GetItemObject(Column.TR_ETC.ITEM);
foreach (Column.TR_ETC.DATA cEtcItem in alEtcItem)
{
if (cEtcItem.CANCEL_DIV == ItemConst.PAY_CANCEL_DIV.CANCEL) continue;
if (cEtcItem.ETC_WAY_CD == ItemConst.TR_ITEM_ID.ETC_INFO_ITEM && cEtcItem.ETC_DTL_CD_01 == ItemConst.TR_ITEM_ID.ETC_INFO.SAVEPOINT)
{
sTrgtCustType = cEtcItem.OCCUR_ENTRY_12;
m_sHpCustID = cEtcItem.OCCUR_ENTRY_10;
cEtcItemHP = cEtcItem;
break;
}
}
// 통신사 구분 획득
string sTelecomDiv = "0"; // 0: 일반, 1: SKT, 2: KT,3: LGT
ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
foreach (Column.TR_PAYMENT.DATA cPayItem in alPayItem)
{
if (cPayItem.CANCEL_DIV == ItemConst.PAY_CANCEL_DIV.CANCEL) continue;
if (cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.MOBILE_COM_POINT && cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.MOBILE_COM.MOBILE_SKT)
{
sTelecomDiv = "1";
}
else if ((cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.MOBILE_COM_POINT && cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.MOBILE_COM.MOBILE_KTF)
|| (cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.MOBILE_COM_POINT && cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.MOBILE_COM.MOBILE_KT_VIP)
|| (cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.MOBILE_COM_POINT && cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.MOBILE_COM.MOBILE_KT_DOUBLE))
{
sTelecomDiv = "2";
}
else if (cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.MOBILE_COM_POINT && cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.MOBILE_COM.MOBILE_LGT)
{
sTelecomDiv = "3";
}
//#20180413 웰컴카드 신규기능 추가 start,phj
/////////////////////////////////
//#20180618_웰컴카드 수정_grayber
// 해피포인트 적립을 위하여 아래 내용 주석 처리
//else if (cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.MOBILE_COM_POINT && cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.MOBILE_COM.WELCOMECARD)
//{
// sTelecomDiv = "4";
//}
/////////////////////////////////
if (sTelecomDiv != "0") break;
}
if (CheckCampaignDuplication() == true) // 캠페인 중복불가 결제 수단 체크
{
if (sTelecomDiv != "0") // 0: 일반, 1: SKT, 2: KT,3: LGT)
{
// 해피포인트 통신사 추가적립 캠페인 계산 처리
ExecuteCampaingHpMobileSave(sPayKey, cEtcItemHP, sTrgtCustType, sTelecomDiv);
}
else
{
// 해피포인트 추가적립 캠페인 계산 처리
ExecuteCampaingHpAddSave(sPayKey, cEtcItemHP, sTrgtCustType, sTelecomDiv);
}
}
// 해피포인트 결제수단별 추가 적립 계산 처리
if (m_cTrnStatus.Head.AftSaveAddInfo == "") ExecutePaymentAddSave();
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
finally
{
m_sHpCustID = "";
}
}
///
/// 해피포인트 통신사 추가적립 캠페인 계산 처리
///
///
public void ExecuteCampaingHpMobileSave(string sPayKey, Column.TR_ETC.DATA cEtcItemHP, string sTrgtCustType, string sTelecomDiv)
{
double nSaveAmt = 0;
long nSavePnt = 0;
try
{
// 추가적립 캠페인(통신사 추가 적립)
foreach (string sCpiCode in m_alMstSaleCpi)
{
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCpiCode];
// 캠페인고객혜택=> 적립
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.PNTSAVE) continue;
// 행사 조건 체크
if (CheckCampaignDateTime(cMstSaleCpi) == false) continue; // 캠페인 적용일자 및 시간 체크
// 캠페인 대상 체크
if (cMstSaleCpi.TRGT_CUST_TYPE == ItemConst.CPI_TRGT_CUST_TYPE.HAPPYAPP)
{
if (sTrgtCustType != "Y") continue;
}
// 적립통신사 구분 체크
if (cMstSaleCpi.ADD_HP_ACCUM_TELECOM_DIV != sTelecomDiv) continue;
// 캠페인 중복적용 여부(1:중복적용 가능, 0:중복적용 불가)
if (ExistCampaignDupApply(cMstSaleCpi.CPI_CUST_BNFT_TYPE, cMstSaleCpi.DUP_APPLY_YN) == true) continue;
//#15583 캠페인 기능 개선 요청 start
// 캠페인 마스터의 중복 가능 여부 체크
// (통신사 제휴 중복 허용 여부, 모바일쿠폰 중복 허용 여부, 해피쿠폰 중복 허용 여부)
if (CheckCampaignMstDuplication(cMstSaleCpi) == false) continue;
//#15583 캠페인 기능 개선 요청 end
// 추가적립 행사 계산
if (CampaignHappyPointSave(cMstSaleCpi, ref nSaveAmt, ref nSavePnt) <= 0) continue;
// 통신사 추가 적립 정보
// 추가적립 정보[캠페인코드(10)+대상상품금액(15)+추가적립여부(1)+추가적립상세코드(2)+본사부담금(7)+매장부담금(7)]
string sAddHpAccume = CmUtil.RPadH(cMstSaleCpi.CPI_CD, 10) + CmUtil.RPadH(nSaveAmt.ToString(), 15) + "N" + CmUtil.RPadH(cMstSaleCpi.ADD_HP_ACCUM_CD1, 2) + string.Format("{0:D7}{1:D7}", (long)nSavePnt, 0);
m_cTrnStatus.Head.AftSavePoint = nSaveAmt;
m_cTrnStatus.Head.AftSaveAddDiv = cMstSaleCpi.ADD_HP_ACCUM_AF_DIV;
m_cTrnStatus.Head.AftSaveAddInfo = sAddHpAccume;
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("CAMPAIGN MOBILE POINT = {0}", sAddHpAccume));
if (cEtcItemHP != null)
{
// 캠페인 실적 생성
AddTrCampaignData(cMstSaleCpi.CPI_CD, nSavePnt, "", "");
m_alSaleCpiPay.Add(new string[] { sPayKey, cMstSaleCpi.CPI_CD, "", "", "0" });
}
break; // 적립 캠페인은 한번만 적용
}
// 통신사 추가 적립 없을때 적립대상금액 초기화
if (m_cTrnStatus.Head.AftSaveAddInfo == "") m_cTrnStatus.Head.AftSavePoint = 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);
}
}
///
/// 해피포인트 추가적립 캠페인 계산 처리
///
///
public void ExecuteCampaingHpAddSave(string sPayKey, Column.TR_ETC.DATA cEtcItemHP, string sTrgtCustType, string sTelecomDiv)
{
double nSaveAmt = 0;
long nSavePnt = 0;
try
{
// 추가적립 캠페인(해피포인트)
foreach (string sCpiCode in m_alMstSaleCpi)
{
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCpiCode];
// 캠페인고객혜택=> 적립
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.PNTSAVE
&& cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.DIS_SAVE && cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.FREE_SAVE) continue;
// 행사 조건 체크
if (CheckCampaignDateTime(cMstSaleCpi) == false) continue; // 캠페인 적용일자 및 시간 체크
// 캠페인 대상 체크
if (cMstSaleCpi.TRGT_CUST_TYPE == ItemConst.CPI_TRGT_CUST_TYPE.HAPPYAPP)
{
if (sTrgtCustType != "Y") continue;
}
// 적립통신사 구분 체크
if (cMstSaleCpi.ADD_HP_ACCUM_TELECOM_DIV != sTelecomDiv) continue;
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.DIS_SAVE || cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.FREE_SAVE)
{
// 할인적립 캠페인==> 할인캠페인이 있어야 함.
if (ExistCampaignDiscount(cMstSaleCpi.CPI_CD) == false) continue;
}
else
{
// 캠페인 중복적용 여부(1:중복적용 가능, 0:중복적용 불가)
if (ExistCampaignDupApply(cMstSaleCpi.CPI_CUST_BNFT_TYPE, cMstSaleCpi.DUP_APPLY_YN) == true) continue;
}
//#15583 캠페인 기능 개선 요청 start
// 캠페인 마스터의 중복 가능 여부 체크
// (통신사 제휴 중복 허용 여부, 모바일쿠폰 중복 허용 여부, 해피쿠폰 중복 허용 여부)
if (CheckCampaignMstDuplication(cMstSaleCpi) == false) continue;
//#15583 캠페인 기능 개선 요청 end
// 추가적립 행사 계산
if (CampaignHappyPointSave(cMstSaleCpi, ref nSaveAmt, ref nSavePnt) <= 0) continue;
// 일반 추가 적립
string sAddHpAccume = "";
if (m_cTrnStatus.Head.AftSavePoint >= 1000)
{
// 추가적립 정보[캠페인코드(10)+대상상품금액(15)+추가적립여부(1)+추가적립상세코드(2)+본사부담금(7)+매장부담금(7)]
sAddHpAccume = CmUtil.RPadH(cMstSaleCpi.CPI_CD, 10) + CmUtil.RPadH(nSaveAmt.ToString(), 15) + "Y" + CmUtil.RPadH(cMstSaleCpi.ADD_HP_ACCUM_CD2, 2) + string.Format("{0:D7}{1:D7}", (long)nSavePnt, 0);
m_cTrnStatus.Head.AftSaveAddDiv = cMstSaleCpi.ADD_HP_ACCUM_AF_DIV;
m_cTrnStatus.Head.AftSaveAddInfo = sAddHpAccume;
}
else
{
sAddHpAccume = CmUtil.RPadH(cMstSaleCpi.CPI_CD, 10) + CmUtil.RPadH(nSaveAmt.ToString(), 15) + "N" + CmUtil.RPadH(cMstSaleCpi.ADD_HP_ACCUM_CD1, 2) + string.Format("{0:D7}{1:D7}", (long)nSavePnt, 0);
m_cTrnStatus.Head.AftSaveAddDiv = cMstSaleCpi.ADD_HP_ACCUM_AF_DIV;
m_cTrnStatus.Head.AftSaveAddInfo = sAddHpAccume;
// 적립 대상 금액 설정
m_cTrnStatus.Head.AftSavePoint = m_cDataService.GetPluTagetAmount(PosKey.MENU_KEY.HAPPY_POINT, true);
}
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("CAMPAIGN HP ADD POINT = {0}", sAddHpAccume));
if (cEtcItemHP != null)
{
// 캠페인 실적 생성
AddTrCampaignData(cMstSaleCpi.CPI_CD, nSavePnt, "", "");
m_alSaleCpiPay.Add(new string[] { sPayKey, cMstSaleCpi.CPI_CD, "", "", "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);
}
}
///
/// 해피포인트 결제수단별 추가적립 계산 처리
///
///
public void ExecutePaymentAddSave()
{
double nSaveAmt = 0;
long nSavePnt = 0;
try
{
// 천미만코드, 천이상코드, 적립율, 추후적립가능여부
string sADD_HP_ACCUM_CD1 = "A0", sADD_HP_ACCUM_CD2 = "A5", sADD_HP_ACCUM_RATE = "0.5", sADD_HP_ACCUM_AF_DIV = "1";
DataTable dtData = m_cDataCommon.SeletCommonCode(PosConst.COMMON_CODE_GROUP.Z0022, "");
if (dtData != null && dtData.Rows.Count > 0)
{
foreach (DataRow dr in dtData.Rows)
{
sADD_HP_ACCUM_CD1 = CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_01);
sADD_HP_ACCUM_CD2 = CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_02);
sADD_HP_ACCUM_RATE = CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_03);
sADD_HP_ACCUM_AF_DIV = CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_04);
break;
}
}
// 결제수단별 추가적립 행사 대상 계산
nSaveAmt = PaymentHappyPointSave();
if (nSaveAmt <= 0 || (m_cTrnStatus.Head.AftSavePoint < 1000 && nSaveAmt < 1000)) return;
// 기본적립 > 추가적립 = 추가적립 없음.
if (m_cTrnStatus.Head.AftSavePoint >= nSaveAmt) return;
bool bHpSave1000 = false; // 1000원이하 적립 가능여부
if (m_cPosStatus.Mst.CorpDiv == ItemConst.CORP_DIV.PC && m_cPosStatus.Mst.CntryDiv == ItemConst.CNTRY_DIV.KR)
{
ArrayList alPayment = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
foreach (Column.TR_PAYMENT.DATA cPayItem in alPayment)
{
if (cPayItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL) continue;
// 천원이하 기본적립 가능
if (cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.MOBILECON_ITEM) // 모바일카드
{
bHpSave1000 = true;
break;
}
}
}
// 추가적립 대상 금액은 기본적립 대상 금액을 제외함
if ((bHpSave1000 == true && m_cTrnStatus.Head.AftSavePoint > 0) || (bHpSave1000 == false && m_cTrnStatus.Head.AftSavePoint >= 1000))
{
nSaveAmt = CmUtil.DoubleSubtraction(nSaveAmt, m_cTrnStatus.Head.AftSavePoint);
}
// 적립 포인트 계산(무조건 올림 처리)
nSavePnt = (long)CmUtil.MathRounds(CmUtil.MathAmtPercent(nSaveAmt, CmUtil.DoubleParse(sADD_HP_ACCUM_RATE)), PosConst.MATH_ROUND.CEILING, 0);
if (nSavePnt <= 0) return;
// 일반 추가 적립
string sAddHpAccume = "";
if ((bHpSave1000 == true && m_cTrnStatus.Head.AftSavePoint == 0) || (bHpSave1000 == false && m_cTrnStatus.Head.AftSavePoint < 1000))
{
// 추가적립 정보[캠페인코드(10)+대상상품금액(15)+추가적립여부(1)+추가적립상세코드(2)+본사부담금(7)+매장부담금(7)]
sAddHpAccume = CmUtil.RPadH("", 10) + CmUtil.RPadH(nSaveAmt.ToString(), 15) + "N" + CmUtil.RPadH(sADD_HP_ACCUM_CD1, 2) + string.Format("{0:D7}{1:D7}", (long)nSavePnt, 0);
m_cTrnStatus.Head.AftSaveAddDiv = sADD_HP_ACCUM_AF_DIV;
m_cTrnStatus.Head.AftSaveAddInfo = sAddHpAccume;
m_cTrnStatus.Head.AftSavePoint = nSaveAmt; // 적립 대상 금액 설정
}
else
{
// 추가적립 정보[캠페인코드(10)+대상상품금액(15)+추가적립여부(1)+추가적립상세코드(2)+본사부담금(7)+매장부담금(7)]
sAddHpAccume = CmUtil.RPadH("", 10) + CmUtil.RPadH(nSaveAmt.ToString(), 15) + "Y" + CmUtil.RPadH(sADD_HP_ACCUM_CD2, 2) + string.Format("{0:D7}{1:D7}", (long)nSavePnt, 0);
m_cTrnStatus.Head.AftSaveAddDiv = sADD_HP_ACCUM_AF_DIV;
m_cTrnStatus.Head.AftSaveAddInfo = sAddHpAccume;
}
//// 추가적립 대상 금액은 기본적립 대상 금액을 제외함
//if (m_cTrnStatus.Head.AftSavePoint >= 1000) nSaveAmt = CmUtil.DoubleSubtraction(nSaveAmt, m_cTrnStatus.Head.AftSavePoint);
//// 적립 포인트 계산(무조건 올림 처리)
//nSavePnt = (long)CmUtil.MathRounds(CmUtil.MathAmtPercent(nSaveAmt, CmUtil.DoubleParse(sADD_HP_ACCUM_RATE)), PosConst.MATH_ROUND.CEILING, 0);
//if (nSavePnt <= 0) return;
//// 일반 추가 적립
//string sAddHpAccume = "";
//if (m_cTrnStatus.Head.AftSavePoint < 1000)
//{
// // 추가적립 정보[캠페인코드(10)+대상상품금액(15)+추가적립여부(1)+추가적립상세코드(2)+본사부담금(7)+매장부담금(7)]
// sAddHpAccume = CmUtil.RPadH("", 10) + CmUtil.RPadH(nSaveAmt.ToString(), 15) + "N" + CmUtil.RPadH(sADD_HP_ACCUM_CD1, 2) + string.Format("{0:D7}{1:D7}", (long)nSavePnt, 0);
// m_cTrnStatus.Head.AftSaveAddDiv = sADD_HP_ACCUM_AF_DIV;
// m_cTrnStatus.Head.AftSaveAddInfo = sAddHpAccume;
// m_cTrnStatus.Head.AftSavePoint = nSaveAmt; // 적립 대상 금액 설정
//}
//else
//{
// // 추가적립 정보[캠페인코드(10)+대상상품금액(15)+추가적립여부(1)+추가적립상세코드(2)+본사부담금(7)+매장부담금(7)]
// sAddHpAccume = CmUtil.RPadH("", 10) + CmUtil.RPadH(nSaveAmt.ToString(), 15) + "Y" + CmUtil.RPadH(sADD_HP_ACCUM_CD2, 2) + string.Format("{0:D7}{1:D7}", (long)nSavePnt, 0);
// m_cTrnStatus.Head.AftSaveAddDiv = sADD_HP_ACCUM_AF_DIV;
// m_cTrnStatus.Head.AftSaveAddInfo = sAddHpAccume;
//}
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("PAYMENT HP ADD POINT = {0}", sAddHpAccume));
}
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 string GetCampaignHappyStampInfo()
{
ArrayList alStampPluInfo = new ArrayList(); // 스템프 상품 정보
try
{
if (m_cTrnStatus.Head.TradeDiv != ItemConst.TRAN_DIV.NORMAL) return "";
if (m_cTrnStatus.Head.TradeKind != ItemConst.TRAN_KIND.NORMAL.SALE && m_cTrnStatus.Head.TradeKind != ItemConst.TRAN_KIND.UNDECIDED.RESERVATION_REG) return "";
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.HP_STAMP)
{
if (cTrSaleCpi.HP_CAMPAIGN_INFO != "") // 적용 되어있으면 안함
return "";
else
return cTrSaleCpi.HP_STAMP_PLU;
}
}
if (CheckCampaignDuplication() == false) return ""; // 캠페인 중복불가 결제 수단 체크
foreach (string sCpiCode in m_alMstSaleCpi)
{
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCpiCode];
// 캠페인고객혜택=> 스탬프
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.HP_STAMP) continue;
// 행사 조건 체크
if (CheckCampaignDateTime(cMstSaleCpi) == false) continue; // 캠페인 적용일자 및 시간 체크
// 캠페인 중복적용 여부(1:중복적용 가능, 0:중복적용 불가)
if (ExistCampaignDupApply(cMstSaleCpi.CPI_CUST_BNFT_TYPE, cMstSaleCpi.DUP_APPLY_YN) == true) continue;
//#15583 캠페인 기능 개선 요청 start
// 캠페인 마스터의 중복 가능 여부 체크
// (통신사 제휴 중복 허용 여부, 모바일쿠폰 중복 허용 여부, 해피쿠폰 중복 허용 여부)
if (CheckCampaignMstDuplication(cMstSaleCpi) == false) continue;
//#15583 캠페인 기능 개선 요청 end
// 스템프 캠페인 상품정보 생성
CampaignHappyPointStamp(cMstSaleCpi, ref alStampPluInfo);
}
// 스템프 캠페인 상품 정보("ST" + 구매상품건수(2) + 상품 정보(10)
if (alStampPluInfo.Count > 0)
{
string sStampPlu = "ST" + string.Format("{0:D2}", alStampPluInfo.Count);
foreach (string sInfo in alStampPluInfo)
{
sStampPlu += sInfo;
}
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.HP_STAMP)
{
cTrSaleCpi.HP_STAMP_PLU = sStampPlu;
}
}
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("CAMPAIGN = {0}", sStampPlu));
return sStampPlu;
}
}
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 "";
}
///
/// 해피포인트 스템프 캠페인 설정 처리
///
///
///
///
public void SetCampaignHappyStampInfo(string sHP_CAMPAIGN_INFO, string sStmapCntInfo, string sCustID)
{
try
{
if (sHP_CAMPAIGN_INFO == "")
{
// 미성립 스템프 캠페인 삭제
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.HP_STAMP) continue;
if (cTrSaleCpi.HP_CAMPAIGN_INFO == "" && cTrSaleCpi.LTTR_NMPLAT_NO == "")
{
cTrSaleCpi.CANCEL_DIV = PosConst.CANCEL_DIV.CANCEL;
}
}
return;
}
// 캠페인별 구분자 파싱
string[] saCampInfo = sHP_CAMPAIGN_INFO.Split(new string[] { PosConst.VAN_HEXA.GS }, StringSplitOptions.None);
foreach (string sCampInfo in saCampInfo)
{
if (sCampInfo.Trim() == "") continue;
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.HP_STAMP) continue;
if (cTrSaleCpi.OFFER_ID != sCampInfo.Substring(0, 16).Trim()) continue;
cTrSaleCpi.HP_STAMP_COUPON = "";
cTrSaleCpi.HP_CAMPAIGN_INFO = "";
cTrSaleCpi.HP_STAMP_COUPON_INFO = "";
cTrSaleCpi.LTTR_NMPLAT_NO = sStmapCntInfo;
cTrSaleCpi.SLACK_FIELD = sCustID;
// 스템프 캠페인 룰파일 데이터 획득
string sRuleData = CmUtil.ReadTextFile(BaseCom.NxMstPath + @"RULE\" + sCampInfo.Substring(0, 16).Trim() + ".txt", System.Text.Encoding.UTF8);
if (sRuleData == "")
{
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("RULE FILE NOT FIND = {0}", sCampInfo.Substring(0, 16).Trim()));
continue;
}
string[] saCampSplit = sCampInfo.Split(new string[] { PosConst.VAN_HEXA.FS }, StringSplitOptions.None);
string[] saRuleSplit = sRuleData.Split(new string[] { "$$" }, StringSplitOptions.None);
string sStampData = "";
string sCoupnData = "";
for (int i = 1; i < saCampSplit.Length; i++)
{
if (saRuleSplit.Length > (i - 1) * 2) sStampData += saRuleSplit[(i - 1) * 2]; // 영수증 출력정보
// 쿠폰번호 체크
int nCpnNmPos = saCampSplit[i].LastIndexOf("쿠폰번호");
if (nCpnNmPos >= 0)
{
string sCpnNoInfo = saCampSplit[i].Substring(nCpnNmPos);
int nCpnNoPos = sCpnNoInfo.LastIndexOf(";");
if (nCpnNoPos < 0) nCpnNoPos = sCpnNoInfo.LastIndexOf(":");
if (nCpnNoPos >= 0)
{
cTrSaleCpi.HP_STAMP_COUPON = sCpnNoInfo.Substring(nCpnNoPos + 1).Trim().Replace("&", "").Replace("\r","").Replace("\n",""); // 쿠폰번호
sCoupnData = saCampSplit[i].Substring(0, nCpnNmPos + nCpnNoPos).Replace("&", ""); // 쿠폰 출력정보
}
}
else
{
sStampData += saCampSplit[i];
}
}
cTrSaleCpi.HP_CAMPAIGN_INFO = sStampData; // 출력정보 설정(스템프)
cTrSaleCpi.HP_STAMP_COUPON_INFO = cTrSaleCpi.HP_STAMP_COUPON == "" ? "" : sCoupnData; // 출력정보 설정(쿠폰)
if (cTrSaleCpi.HP_STAMP_COUPON != "")
{
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[cTrSaleCpi.CPI_CD];
PlayCompleteSound(cMstSaleCpi, 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 double ExecuteCampaignPrint(string[] aParam)
{
try
{
if (m_cTrnStatus.Head.TradeDiv != ItemConst.TRAN_DIV.NORMAL) return 0;
if (m_cTrnStatus.Head.TradeKind != ItemConst.TRAN_KIND.NORMAL.SALE && m_cTrnStatus.Head.TradeKind != ItemConst.TRAN_KIND.UNDECIDED.RESERVATION_REG) return 0;
// 수량/횟수 제한 캠페인 완료 메시지 출력
foreach (string[] saCpiQtyLmt in m_alSaleCpiQtyLmt)
{
// 캠페인코드(0), 이전성립수량(1), 캠페인명(2), 제한수량(3), 현성립수량(4)
if (CmUtil.LongParse(saCpiQtyLmt[1]) + CmUtil.LongParse(saCpiQtyLmt[4]) >= CmUtil.LongParse(saCpiQtyLmt[3]))
{
bool bShowMsg = false;
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.alTrSaleCpi == null) continue;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrPluCpi in cSaleItem.alTrSaleCpi)
{
if (saCpiQtyLmt[0] != cTrPluCpi.CPI_CD) continue;
if (cTrPluCpi.DC_SUM_AMT <= 0 || cTrPluCpi.DC_QTY <= 0) continue;
WinManager.ConfirmMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0658) + PosConst.CRLF
+ MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0399) + " : " + saCpiQtyLmt[2]);
bShowMsg = true;
break;
}
if (bShowMsg == true) break;
}
}
}
if (CheckCampaignDuplication() == false) return 0; // 캠페인 중복불가 결제 수단 체크
string sTrgtCustType = ""; // 고객구분(앱여부) :N:일반고객, Y:앱고객
ArrayList alEtcItem = (ArrayList)StateObject.GetItemObject(Column.TR_ETC.ITEM);
foreach (Column.TR_ETC.DATA cEtcItem in alEtcItem)
{
if (cEtcItem.CANCEL_DIV == ItemConst.PAY_CANCEL_DIV.CANCEL) continue;
if (cEtcItem.ETC_WAY_CD == ItemConst.TR_ITEM_ID.ETC_INFO_ITEM && cEtcItem.ETC_DTL_CD_01 == ItemConst.TR_ITEM_ID.ETC_INFO.SAVEPOINT)
{
sTrgtCustType = cEtcItem.OCCUR_ENTRY_12;
break;
}
}
// 영수증 출력 캠페인 체크
foreach (string sCpiCode in m_alMstSaleCpi)
{
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCpiCode];
// 캠페인고객혜택=> 영수행사
//grayber@20171214 캠페인 리펀드 쿠폰 start
// 캠페인 리펀드 구분 추가 - 기존코드 남김
if (PosMstManager.GetPosOption(POS_OPTION.OPT431).Equals("1") == true)
{
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.RECEIPT && cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.REFUND
&& cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.LOTTERY && 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) continue;
}
else
{
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.RECEIPT
&& cMstSaleCpi.CPI_CUST_BNFT_TYPE != ItemConst.CPI_CUST_BNFT.LOTTERY && 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) continue;
}
//grayber@20171214 캠페인 리펀드 쿠폰 end
// 행사 조건 체크
if (CheckCampaignDateTime(cMstSaleCpi) == false) continue; // 캠페인 적용일자 및 시간 체크
// 캠페인 대상 체크
if (cMstSaleCpi.TRGT_CUST_TYPE == ItemConst.CPI_TRGT_CUST_TYPE.HPC_CUST)
{
if (sTrgtCustType == "") continue;
}
else if (cMstSaleCpi.TRGT_CUST_TYPE == ItemConst.CPI_TRGT_CUST_TYPE.HAPPYAPP)
{
if (sTrgtCustType != "Y") continue;
}
// 캠페인 중복적용 여부(1:중복적용 가능, 0:중복적용 불가)
if (ExistCampaignDupApply(cMstSaleCpi.CPI_CUST_BNFT_TYPE, cMstSaleCpi.DUP_APPLY_YN) == true) continue;
//#15583 캠페인 기능 개선 요청 start
// 캠페인 마스터의 중복 가능 여부 체크
// (통신사 제휴 중복 허용 여부, 모바일쿠폰 중복 허용 여부, 해피쿠폰 중복 허용 여부)
if (CheckCampaignMstDuplication(cMstSaleCpi) == false) continue;
//#15583 캠페인 기능 개선 요청 end
// 영수행사 적용방법 => 전체상품, 상품합산
long nDisQty = CampaignPluRectPrint(cMstSaleCpi);
if (nDisQty == 0) continue;
PlayCompleteSound(cMstSaleCpi, false); // 캠페인 성립시 사운드 출력
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 0;
}
///
/// 캠페인 출력데이터 획득(본영수증)
///
public ArrayList GetCampaignPrintData(string[] aParam)
{
ArrayList alPrintBuf = new ArrayList();
try
{
if (m_cTrnStatus.Head.TradeDiv != ItemConst.TRAN_DIV.NORMAL) return alPrintBuf;
// 수량/횟수 제한 캠페인 메시지 출력
bool bPrtMsg = false;
foreach (string[] saCpiQtyLmt in m_alSaleCpiQtyLmt)
{
// 캠페인코드(0), 이전성립수량(1), 캠페인명(2), 제한수량(3), 현성립수량(4)
if (CmUtil.LongParse(saCpiQtyLmt[1]) + CmUtil.LongParse(saCpiQtyLmt[4]) <= CmUtil.LongParse(saCpiQtyLmt[3]))
{
bool bShowMsg = false;
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.alTrSaleCpi == null) continue;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrPluCpi in cSaleItem.alTrSaleCpi)
{
if (saCpiQtyLmt[0] != cTrPluCpi.CPI_CD) continue;
if (cTrPluCpi.DC_SUM_AMT <= 0 || cTrPluCpi.DC_QTY <= 0) continue;
alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + CmUtil.RPadH(saCpiQtyLmt[2], 30) + CmUtil.LPadH("[" + (CmUtil.LongParse(saCpiQtyLmt[1]) + CmUtil.LongParse(saCpiQtyLmt[4])) + "/" + saCpiQtyLmt[3] + "]", 12));
bShowMsg = true;
bPrtMsg = true;
break;
}
if (bShowMsg == true) break;
}
}
}
if (bPrtMsg == true) alPrintBuf.Add(PosConst.PRT_HDR.PRT_NOR + "------------------------------------------");
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 본영수증에 포힘된 캠페인 정보
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 복권 명판 스템프 캠페인 출력 데이터 설정
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in m_alTrSaleCpi)
{
if (cTrSaleCpi.CANCEL_DIV == "1") continue;
if (cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.RECEIPT
|| cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.LOTTERY || cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.LOTT_REC
|| cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.ENTRY || cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.ENTR_REC)
{
//#20170807 명판 캠페인 커팅 start
if (cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.RECEIPT) continue;
//#20170807 명판 캠페인 커팅 end
if (cTrSaleCpi.LTTR_NMPLAT_NO.Trim() != "") continue;
// 캠페인 명판 출력정보 획득
GetCampaignPrintData("", cTrSaleCpi.CPI_CD, "", "", ref alPrintBuf);
}
else if (cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.HP_STAMP)
{
if (cTrSaleCpi.HP_CAMPAIGN_INFO.Trim() == "") continue;
// 스템프 정보 영수증(도식화) 출력
GetStampCntPrintData(cTrSaleCpi.CPI_CD, cTrSaleCpi.HP_CAMPAIGN_INFO, cTrSaleCpi.LTTR_NMPLAT_NO, ref alPrintBuf);
}
}
// 캠페인 안내(설명) 출력 데이터 생성
foreach (string sCpiCode in m_alMstSaleCpi)
{
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCpiCode];
//grayber@20171214 캠페인 리펀드 쿠폰 start
// 캠페인 리펀드 구분자 추가
// 캠페인 리펀드가 캠페인 안내 출력 데이터와 합쳐지지 않도록 처리
if (cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.RECEIPT || cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.REFUND
|| cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.LOTTERY || 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) continue;
//기존
//if (cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.RECEIPT
// || cMstSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.LOTTERY || 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) continue;
//grayber@20171214 캠페인 리펀드 쿠폰 end
// 행사 조건 체크
if (CheckCampaignDateTime(cMstSaleCpi) == false) continue; // 캠페인 적용일자 및 시간 체크
// 캠페인 안내 출력정보 획득
GetCampaignPrintData("", cMstSaleCpi.CPI_CD, "", "", ref alPrintBuf);
}
}
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 alPrintBuf;
}
//grayber@20171214 캠페인 리펀드 쿠폰 start
///
/// 캠페인 리펀드 출력데이터 획득(본영수증)
///
///
///
public ArrayList GetRefundCampaignPrintData(string[] aParam)
{
ArrayList alPrintBuf = new ArrayList();
try
{
// POS_OPTION 430 이 활성화 되지 않으면 가져올 필요 없음.
if (PosMstManager.GetPosOption(POS_OPTION.OPT431).Equals("1") != true) return alPrintBuf;
if (m_cTrnStatus.Head.TradeDiv != ItemConst.TRAN_DIV.NORMAL) return alPrintBuf;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in m_alTrSaleCpi)
{
if (cTrSaleCpi.CANCEL_DIV == "1") continue;
if (cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.REFUND)
{
GetCampaignPrintData(cTrSaleCpi.CPI_CUST_BNFT_TYPE, cTrSaleCpi.CPI_CD, "", "", ref alPrintBuf);
}
}
}
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 alPrintBuf;
}
//grayber@20171214 캠페인 리펀드 쿠폰 end
///
/// 캠페인 출력데이터 획득(별도영수증)
///
public ArrayList GetCampaignPrintDataAddBill(string[] aParam)
{
ArrayList alPrintBuf = new ArrayList();
try
{
if (m_cTrnStatus.Head.TradeDiv != ItemConst.TRAN_DIV.NORMAL) return alPrintBuf;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 별도 영수증 캠페인 정보
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 복권 명판 캠페인 출력 데이터 설정
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in m_alTrSaleCpi)
{
if (cTrSaleCpi.CANCEL_DIV == "1") continue;
if (cTrSaleCpi.CPI_CD == aParam[0])
{
if (cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.HP_STAMP)
{
// 캠페인 스템프 쿠폰 출력
string sCouponNo = aParam[1];
GetStampCouponPrintData(cTrSaleCpi.CPI_CD, sCouponNo, cTrSaleCpi.HP_STAMP_COUPON_INFO, ref alPrintBuf);
}
else if (cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.LOTTERY || cTrSaleCpi.CPI_CUST_BNFT_TYPE == ItemConst.CPI_CUST_BNFT.LOTT_REC)
{
// 복권번호
if (cTrSaleCpi.LTTR_NMPLAT_NO.Trim() != "")
{
cTrSaleCpi.DC_QTY = 0;
string[] saLTTR_NMPLAT_NO = cTrSaleCpi.LTTR_NMPLAT_NO.Split('|');
foreach(string sLTTR_NMPLAT_NO in saLTTR_NMPLAT_NO)
{
if ( sLTTR_NMPLAT_NO.Trim() != "")
{
GetCampaignPrintData(cTrSaleCpi.CPI_CUST_BNFT_TYPE, cTrSaleCpi.CPI_CD, sLTTR_NMPLAT_NO, cTrSaleCpi.LTTR_GRADE, ref alPrintBuf);
cTrSaleCpi.DC_QTY++;
}
}
cTrSaleCpi.LTTR_NMPLAT_NO = saLTTR_NMPLAT_NO[0];
}
}
else
{
// 캠페인 출력정보 획득
GetCampaignPrintData(cTrSaleCpi.CPI_CUST_BNFT_TYPE, cTrSaleCpi.CPI_CD, cTrSaleCpi.LTTR_NMPLAT_NO, cTrSaleCpi.LTTR_GRADE, ref alPrintBuf);
}
}
}
}
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 alPrintBuf;
}
///
/// 고객화면 캠페인 컨텐츠 표시
///
/// 지불구분(01:신용카드, 02:캐시비, 03:티머니, 98:해피포인트적립, 99:해피포인트결제)
public void CustDisplayCampaign(string sPaymentDiv)
{
try
{
foreach (string sCpiCode in m_alMstSaleCpi)
{
Column.MST_SALE_CPI.DATA cMstSaleCpi = (Column.MST_SALE_CPI.DATA)m_htMstSaleCpi[sCpiCode];
if (cMstSaleCpi.SOUND_PLAY_YN == true) continue;
if (cMstSaleCpi.SOUND_FILE_PLAY_CHK_PNT != "1") continue; // 1:상품등록, 2:캠페인성립
// 행사 조건 체크
if (CheckCampaignDateTime(cMstSaleCpi) == false) continue; // 캠페인 적용일자 및 시간 체크
// 캠페인 대상 체크
if (sPaymentDiv == "98") //98:해피포인트적립
{
// 캠페인 대상 체크
if (cMstSaleCpi.TRGT_CUST_TYPE != ItemConst.CPI_TRGT_CUST_TYPE.HPC_CUST && cMstSaleCpi.TRGT_CUST_TYPE != ItemConst.CPI_TRGT_CUST_TYPE.HAPPYAPP) continue;
// 캠페인 지불구분체크
if (cMstSaleCpi.CUST_PAY_TYPE != ItemConst.CPI_CUST_PAY_TYPE.NORMAL) continue;
}
else if (sPaymentDiv == "99") //99:해피포인트결제
{
// 해피포인트 결제
if (cMstSaleCpi.TRGT_CUST_TYPE != ItemConst.CPI_TRGT_CUST_TYPE.HPC_PAY) continue;
// 캠페인 지불구분체크
if (cMstSaleCpi.CUST_PAY_TYPE != ItemConst.CPI_CUST_PAY_TYPE.NORMAL) continue;
}
else
{
// 캠페인 대상 체크
if (cMstSaleCpi.TRGT_CUST_TYPE != ItemConst.CPI_TRGT_CUST_TYPE.NORMAL && cMstSaleCpi.TRGT_CUST_TYPE != ItemConst.CPI_TRGT_CUST_TYPE.CREDIT_CARD) continue;
// 캠페인 지불구분체크
if (sPaymentDiv != cMstSaleCpi.CUST_PAY_TYPE) continue;
}
if (cMstSaleCpi.SOUND_FILE_DIV == "01" || cMstSaleCpi.SOUND_FILE_DIV == "02")
{
PlayCampaignSound(cMstSaleCpi.SOUND_FILE_DIV, cMstSaleCpi.SOUND_FILE_NM, cMstSaleCpi.TTS_DSCRP);
}
// 고객화면에 캠페인 안내 이미지 표시
if (cMstSaleCpi.CUST_DSP_FILENM.Trim() != "")
{
m_cCustDisp.DisplayCampaign(cMstSaleCpi.CUST_DSP_FILE_DIV, cMstSaleCpi.CUST_DSP_FILENM);
}
cMstSaleCpi.SOUND_PLAY_YN = 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);
}
}
///
/// 캠페인 성립시 사운드 출력 처리
///
///
///
public void PlayCompleteSound(Column.MST_SALE_CPI.DATA cMstSaleCpi, bool bReSound)
{
try
{
if (cMstSaleCpi.SOUND_PLAY_YN == true && bReSound == false) return;
if (cMstSaleCpi.SOUND_FILE_PLAY_CHK_PNT != "2") return; // 1:상품등록, 2:캠페인성립
if (cMstSaleCpi.SOUND_FILE_DIV == "01" || cMstSaleCpi.SOUND_FILE_DIV == "02")
{
PlayCampaignSound(cMstSaleCpi.SOUND_FILE_DIV, cMstSaleCpi.SOUND_FILE_NM, cMstSaleCpi.TTS_DSCRP);
}
// 고객화면에 캠페인 안내 이미지 표시
if (cMstSaleCpi.CUST_DSP_FILENM.Trim() != "")
{
m_cCustDisp.DisplayCampaign(cMstSaleCpi.CUST_DSP_FILE_DIV, cMstSaleCpi.CUST_DSP_FILENM);
}
cMstSaleCpi.SOUND_PLAY_YN = 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);
}
}
///
/// 캠페인 음성 출력 처리
///
public void PlayCampaignSound(string sFielDiv, string sFileName, string sTtsDscrp)
{
try
{
// 음성 사용 유무(0:미사용, 1:사용)
if (PosMstManager.GetPosOption(POS_OPTION.OPT309) == "0") return;
if (sFielDiv == "01") // 00(없음), 01(WAVE), 02(TTS)
{
string sFilePath = BaseCom.NxCDPPath + PosConst.MST_IMG_PATH.CAMPAIGN + sFileName;
CmUtil.PlaySound(sFilePath);
}
else if (sFielDiv == "02") // 00(없음), 01(WAVE), 02(TTS)
{
CmUtil.SpeakByTTSEngine(m_cPosStatus.Base.Country, sTtsDscrp, 150);
}
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
}
}
}