spc-kiosk-pb/Service/AsvDataProcess/DataService.cs

2150 lines
118 KiB
C#
Raw Normal View History

2019-06-16 05:12:09 +00:00
using System;
using System.Collections;
using System.IO;
using System.Data;
using Cosmos.BaseFrame;
using Cosmos.UserFrame;
using Cosmos.ServiceProvider;
using Cosmos.Common;
using Cosmos.CommonManager;
/*-----------------------------------------------------------------------------------------------*/
// 설 명 : 거래데이터 합계금액 계산 및 관리
// 작 성 자 :
// 변경 이력 :
/*-----------------------------------------------------------------------------------------------*/
namespace Cosmos.Service
{
class DataService : IDataProcessUs
{
private SManager sManager = new SManager(); // 이 객체를 통해 업무 Service 호출
private StateServer StateObject = (StateServer)StateServer.GetInstance(); // StateObject : StateServer Object (객체)
private PosStatus m_cPosStatus = new PosStatus(); // 기본정보 참조
private TranStatus m_cTrnStatus = new TranStatus(); // 거래정보 참조
private DataCommon m_cDataCommon = null;
public DataService()
{
m_cPosStatus = (PosStatus)StateObject.POS; // POS 기본정보
m_cTrnStatus = (TranStatus)StateObject.TRAN; // POS 거래정보
}
/// <summary>
/// 거래(TRAN) 합계금액 재계산 처리
/// </summary>
public void UpdateTranAmount()
{
try
{
UpdatePluAmount();
UpdatePayAmount();
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
}
/// <summary>
/// 상품행별 영수 금액 재계산 처리
/// </summary>
public void UpdatePluItemAmount(Column.TR_PLU.DATA cPluItem)
{
try
{
double nTotDcAmt = 0;
//판매 loss일 경우 0원 처리
if (m_cTrnStatus.Head.TradeKind == ItemConst.TRAN_KIND.ETC.LOSS)
{
cPluItem.SALE_AMT = 0;
cPluItem.TOT_DC_AMT = 0;
cPluItem.BILL_AMT = 0;
}
else
{
// 상품 영수금액 재계산
cPluItem.SALE_AMT = CmUtil.DoubleMultiplication(cPluItem.SALE_QTY, cPluItem.SALE_PRC);
nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.ITEM_DC_AMT); // 단품 할인 금액
nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.SUM_DC_AMT); // 소계 할인 금액
nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.CPI_DC_AMT); // 행사 할인 금액
nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.COOP_CARD_DC_AMT); // 제휴카드 할인 금액
nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.POINT_DC_AMT); // 포인트 할인 금액
nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.CPN_DC_AMT); // 쿠폰 할인 금액
nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.EMP_DC_AMT); // 직원 할인 금액
nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.SET_DC_AMT); // 세트 할인 금액
nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.ETC_DC_AMT); // 기타 할인 금액
nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.EXCEP_DC_AMT); // 예외 할인 금액
cPluItem.TOT_DC_AMT = nTotDcAmt;
cPluItem.BILL_AMT = CmUtil.DoubleSubtraction(cPluItem.SALE_AMT, cPluItem.TOT_DC_AMT); // 영수금액
// 상품 부가세 미 포함일 경우 부가세 더해주기!
//2018.01.04; 상품 부가세 미 포함일 경우 부가세 더해 주기(미주의 경우 별도 처리);girak.kim;start
//기존소스
//if (cPluItem.TAX_AMT_INCLUDE_YN == ItemConst.TAX_AMT_INCLUDE_YN.NOT_INCLUDED)
//{
// cPluItem.BILL_AMT = CmUtil.DoubleAdd(cPluItem.BILL_AMT, cPluItem.APPLY_TAX_AMT);
//}
if (m_cPosStatus.Base.CmpCd.ToUpper().Equals(PosConst.POS_COMPANY_CODE.PCUS))
{
if (cPluItem.TAX_AMT_INCLUDE_YN == ItemConst.MST_ITEM_TAX_AMT_INCLUDE_YN.NOT_INCLUDED)
{
cPluItem.BILL_AMT = CmUtil.DoubleAdd(cPluItem.BILL_AMT, cPluItem.APPLY_TAX_AMT);
}
}
else
{
if (cPluItem.TAX_AMT_INCLUDE_YN == ItemConst.TAX_AMT_INCLUDE_YN.NOT_INCLUDED)
{
cPluItem.BILL_AMT = CmUtil.DoubleAdd(cPluItem.BILL_AMT, cPluItem.APPLY_TAX_AMT);
}
}
//2018.01.04;미주의 경우 상품 부가세 미 포함일 경우 부가세 더해 주기;girak.kim;End
}
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
}
/// <summary>
/// 거래(TRAN) 상품 합계금액 재계산 처리
/// </summary>
public void UpdatePluAmount()
{
// 합계금액 재계산 처리 시 세금 계산 처리는 기본으로 처리 하도록 수정(2017/05/01)
//UpdatePluAmount(false);
UpdatePluAmount(true);
}
/// <summary>
/// 거래(TRAN) 상품 합계금액 재계산 처리
/// </summary>
public void UpdatePluAmount(bool bTaxExec)
{
try
{
if (bTaxExec == true)
{
// 세금 계산 처리
ItemVatProc();
}
// 헤더 정보 초기화
#region
m_cTrnStatus.Head.TotSaleAmt = 0;
m_cTrnStatus.Head.TotQty = 0;
m_cTrnStatus.Head.TotDcAmt = 0;
m_cTrnStatus.Head.NetSaleAmt = 0;
m_cTrnStatus.Head.LossTotSaleAmt = 0;
m_cTrnStatus.Head.CoopCardDcAmt = 0;
m_cTrnStatus.Head.PointDcAmt = 0;
m_cTrnStatus.Head.CpnDcAmt = 0;
m_cTrnStatus.Head.EmpDcAmt = 0;
m_cTrnStatus.Head.ItemDcAmt = 0;
m_cTrnStatus.Head.CpiDcAmt = 0;
m_cTrnStatus.Head.SetDcAmt = 0;
m_cTrnStatus.Head.EtcDcAmt = 0;
m_cTrnStatus.Head.ExcepDcAmt = 0;
m_cTrnStatus.Head.SvcFeeAmt = 0;
m_cTrnStatus.Head.SvcFeeVat = 0;
m_cTrnStatus.Head.TotVatAmt = 0;
m_cTrnStatus.Sale.VatPluAmt = 0;
m_cTrnStatus.Sale.NoVatPluAmt = 0;
#endregion
// 상품정보
ArrayList aSaleItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);
//#20170828 해피포인트 적립 제외 버튼 추가 phj, start
//선택 상품이 없을 경우 0으로 초기화
if (aSaleItem.Count == 0) m_cTrnStatus.Head.HP_EXCLUDE_YN = "0";
//#20170828 해피포인트 적립 제외 버튼 추가 phj, end
for (int iRow = 0; iRow < aSaleItem.Count; iRow++)
{
Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)aSaleItem[iRow];
if (cSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue; // 지정취소
if (bTaxExec == true) UpdatePluItemAmount(cSaleItem);
#region
// 총매출
m_cTrnStatus.Head.TotSaleAmt = CmUtil.DoubleAdd(m_cTrnStatus.Head.TotSaleAmt, cSaleItem.SALE_AMT);
// 판매수량
if (cSaleItem.ITEM_DIV != ItemConst.PLU_ITEM_DIV.SET_MAIN && cSaleItem.ITEM_DIV != ItemConst.PLU_ITEM_DIV.OPT_MENU && cSaleItem.FLAVOUR_DIV != ItemConst.PLU_FLAVOUR_DIV.FLAVOUR)
m_cTrnStatus.Head.TotQty += cSaleItem.SALE_QTY;
// 총할인 금액
m_cTrnStatus.Head.TotDcAmt = CmUtil.DoubleAdd(m_cTrnStatus.Head.TotDcAmt, cSaleItem.TOT_DC_AMT);
// 순매출 금액
m_cTrnStatus.Head.NetSaleAmt = CmUtil.DoubleAdd(m_cTrnStatus.Head.NetSaleAmt, cSaleItem.BILL_AMT);
//아이템 부가세 합
m_cTrnStatus.Head.TotVatAmt = CmUtil.DoubleAdd(m_cTrnStatus.Head.TotVatAmt, cSaleItem.APPLY_TAX_AMT);
//서비스 합계
m_cTrnStatus.Head.SvcFeeAmt = CmUtil.DoubleAdd(m_cTrnStatus.Head.SvcFeeAmt, cSaleItem.SVC_FEE_AMT);
//서비스 부가세 합
m_cTrnStatus.Head.SvcFeeVat = CmUtil.DoubleAdd(m_cTrnStatus.Head.SvcFeeVat, cSaleItem.SVC_FEE_VAT);
m_cTrnStatus.Head.CoopCardDcAmt = CmUtil.DoubleAdd(m_cTrnStatus.Head.CoopCardDcAmt, cSaleItem.COOP_CARD_DC_AMT);
m_cTrnStatus.Head.PointDcAmt = CmUtil.DoubleAdd(m_cTrnStatus.Head.PointDcAmt, cSaleItem.POINT_DC_AMT);
m_cTrnStatus.Head.CpnDcAmt = CmUtil.DoubleAdd(m_cTrnStatus.Head.CpnDcAmt, cSaleItem.CPN_DC_AMT);
m_cTrnStatus.Head.EmpDcAmt = CmUtil.DoubleAdd(m_cTrnStatus.Head.EmpDcAmt, cSaleItem.EMP_DC_AMT);
m_cTrnStatus.Head.ItemDcAmt = CmUtil.DoubleAdd(m_cTrnStatus.Head.ItemDcAmt, cSaleItem.ITEM_DC_AMT);
m_cTrnStatus.Head.CpiDcAmt = CmUtil.DoubleAdd(m_cTrnStatus.Head.CpiDcAmt, cSaleItem.CPI_DC_AMT);
m_cTrnStatus.Head.SetDcAmt = CmUtil.DoubleAdd(m_cTrnStatus.Head.SetDcAmt, cSaleItem.SET_DC_AMT);
m_cTrnStatus.Head.EtcDcAmt = CmUtil.DoubleAdd(m_cTrnStatus.Head.EtcDcAmt, cSaleItem.ETC_DC_AMT);
m_cTrnStatus.Head.ExcepDcAmt = CmUtil.DoubleAdd(m_cTrnStatus.Head.ExcepDcAmt, cSaleItem.EXCEP_DC_AMT);
if (cSaleItem.ITEM_TAX_DIV == PosConst.ITEM_TAX_DIV.TAX && cSaleItem.NOTAX_DIV != PosConst.ITEM_NOTAX_DIV.YES)
{
m_cTrnStatus.Sale.VatPluAmt = CmUtil.DoubleAdd(m_cTrnStatus.Sale.VatPluAmt, CmUtil.DoubleSubtraction(cSaleItem.BILL_AMT, cSaleItem.APPLY_TAX_AMT));
}
else
{
m_cTrnStatus.Sale.NoVatPluAmt = CmUtil.DoubleAdd(m_cTrnStatus.Sale.NoVatPluAmt, cSaleItem.BILL_AMT);
}
m_cTrnStatus.Head.LossTotSaleAmt = CmUtil.DoubleAdd(m_cTrnStatus.Head.LossTotSaleAmt, CmUtil.DoubleMultiplication(cSaleItem.SALE_QTY, cSaleItem.SALE_PRC));
#endregion
}
// 순매출 금액
m_cTrnStatus.Sale.NetSaleAmt = m_cTrnStatus.Head.NetSaleAmt;
// 받을금액
//m_cTrnStatus.Sale.RemainPayAmt = m_cTrnStatus.Head.NetSaleAmt;
m_cTrnStatus.Sale.RemainPayAmt = CmUtil.DoubleAdd(CmUtil.DoubleSubtraction(m_cTrnStatus.Head.NetSaleAmt, m_cTrnStatus.Sale.RecvedPayAmt), CmUtil.DoubleAdd(m_cTrnStatus.Head.SvcFeeAmt, m_cPosStatus.Mst.TaxAmtIncludeYn == ItemConst.TAX_AMT_INCLUDE_YN.NOT_INCLUDED ? m_cTrnStatus.Head.SvcFeeVat : 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);
}
}
/// <summary>
/// 거래(TRAN) 결제 합계금액 재계산 처리
/// </summary>
public void UpdatePayAmount()
{
try
{
// 헤더 정보 초기화
m_cTrnStatus.Sale.RecvedPayAmt = 0; // 받은금액
//#20171113 최종 결제수단의 거스름돈만 표기되는 현상 수정 start
//반영시 주석 해제
//m_cPosStatus.Sale.ChangeCashAmt = 0;
//#20171113 최종 결제수단의 거스름돈만 표기되는 현상 수정 end
// 결제 금액 계산 처리
ArrayList alPayment = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
for (int iRow = 0; iRow < alPayment.Count; iRow++)
{
Column.TR_PAYMENT.DATA cPayItem = (Column.TR_PAYMENT.DATA)alPayment[iRow];
if (cPayItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL) continue;
if (cPayItem.PAY_DTL_CD_05 != "" && cPayItem.PAY_DTL_CD_05 != "1") continue;
if (cPayItem.BILLSPR_NO != m_cTrnStatus.Sale.BillSplitNo) continue;
// 받은금액 계산 처리
m_cTrnStatus.Sale.RecvedPayAmt = CmUtil.DoubleAdd(m_cTrnStatus.Sale.RecvedPayAmt, cPayItem.PAY_AMT);
//#20171113 최종 결제수단의 거스름돈만 표기되는 현상 수정 start
//거스름돈 계산 처리
//반영시 주석 해제
//m_cPosStatus.Sale.ChangeCashAmt = CmUtil.DoubleAdd(m_cPosStatus.Sale.ChangeCashAmt, cPayItem.AMT_ENTRY_02);
//#20171113 최종 결제수단의 거스름돈만 표기되는 현상 수정 end
}
m_cPosStatus.Sale.PayRecvedAmt = CmUtil.DoubleAdd(m_cTrnStatus.Sale.RecvedPayAmt, m_cPosStatus.Sale.ChangeCashAmt);
// 받을금액
//m_cTrnStatus.Sale.RemainPayAmt = CmUtil.DoubleSubtraction(m_cTrnStatus.Head.NetSaleAmt, m_cTrnStatus.Sale.RecvedPayAmt);
m_cTrnStatus.Sale.RemainPayAmt = CmUtil.DoubleAdd(CmUtil.DoubleSubtraction(m_cTrnStatus.Head.NetSaleAmt, m_cTrnStatus.Sale.RecvedPayAmt), CmUtil.DoubleAdd(m_cTrnStatus.Head.SvcFeeAmt, m_cPosStatus.Mst.TaxAmtIncludeYn == ItemConst.TAX_AMT_INCLUDE_YN.NOT_INCLUDED ? m_cTrnStatus.Head.SvcFeeVat : 0));
if (m_cTrnStatus.Sale.RemainPayAmt < 0) m_cTrnStatus.Sale.RemainPayAmt = 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);
}
}
/// <summary>
/// 모든 거래데이터 삭제
/// </summary>
public bool DeleteTranItem()
{
try
{
//결제 내역 지우기
ArrayList alPays = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
for (int iRow = 0; iRow < alPays.Count; iRow++)
{
Column.TR_PAYMENT.DATA cPayItem = (Column.TR_PAYMENT.DATA)alPays[iRow];
CmUtil.ZeroFillClear(ref cPayItem.OCCUR_ENTRY_01);
CmUtil.ZeroFillClear(ref cPayItem.CanFiller1);
}
//기타 내역 지우기
ArrayList alEtcs = (ArrayList)StateObject.GetItemObject(Column.TR_ETC.ITEM);
for (int iRow = 0; iRow < alEtcs.Count; iRow++)
{
Column.TR_ETC.DATA cEtcItem = (Column.TR_ETC.DATA)alEtcs[iRow];
CmUtil.ZeroFillClear(ref cEtcItem.OCCUR_ENTRY_01);
CmUtil.ZeroFillClear(ref cEtcItem.CanFiller1);
}
// 거래데이터 삭제 처리
IEnumerator ienum = StateObject.GetItemObject().Keys.GetEnumerator();
ienum.Reset();
while (ienum.MoveNext())
{
string sKey = (string)ienum.Current;
((ArrayList)StateObject.GetItemObject(sKey)).Clear();
}
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;
}
/// <summary>
/// 거래 완료 후 처리
/// </summary>
public bool TranComplete()
{
try
{
DeleteTranItem();
InitTranHeader();
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;
}
/// <summary>
/// 거래해더 초기화
/// </summary>
/// <returns></returns>
public bool InitTranHeader()
{
try
{
string sOrderNo = m_cTrnStatus.Head.OrderNo;
m_cTrnStatus.ClearAll();
m_cTrnStatus.Head.CmpCd = m_cPosStatus.Base.CmpCd;
m_cTrnStatus.Head.StoreCd = m_cPosStatus.Base.StoreNo;
m_cTrnStatus.Head.SaleDate = m_cPosStatus.Base.SaleDate;
m_cTrnStatus.Head.PosNo = m_cPosStatus.Base.PosNo;
m_cTrnStatus.Head.RegNo = m_cPosStatus.Base.RegNo;
m_cTrnStatus.Head.TradeNo = m_cPosStatus.Base.TradeNo;
m_cTrnStatus.Head.TradeDiv = ItemConst.TRAN_DIV.NORMAL;
m_cTrnStatus.Head.TrainModeYn = m_cPosStatus.Base.TrainingFlag;
m_cTrnStatus.Head.TradeKind = ItemConst.TRAN_KIND.NORMAL.SALE;
m_cTrnStatus.Head.SysYmd = DateTime.Now.ToString("yyyyMMdd");
m_cTrnStatus.Head.OrderHms = "";
m_cTrnStatus.Head.PayHms = DateTime.Now.ToString("HHmmss");
m_cTrnStatus.Head.CashierId = m_cPosStatus.Base.CashierNo;
m_cTrnStatus.Head.OrderPicNo = "";
m_cTrnStatus.Head.OwnPartDiv = m_cPosStatus.Base.OwnPartDiv;
m_cTrnStatus.Head.OrgPosNo = "";
m_cTrnStatus.Head.OrgSaleDate = "";
m_cTrnStatus.Head.OrgTradeNo = "";
m_cTrnStatus.Head.RtnReasonCd = "";
m_cTrnStatus.Head.RtnReasonMemo = "";
m_cTrnStatus.Head.NonSaleRsnCd = "";
m_cTrnStatus.Head.ReserveNo = "";
m_cTrnStatus.Head.ReserveYmd = "";
m_cTrnStatus.Head.MemberCustNo = "";
m_cTrnStatus.Head.OrderFlag = "0";
m_cTrnStatus.Head.FloorCd = "";
m_cTrnStatus.Head.TableNo = "";
m_cTrnStatus.Head.CustFloor = "";
m_cTrnStatus.Head.ForeignFlag = "";
m_cTrnStatus.Head.PayGndrDiv = "";
m_cTrnStatus.Head.AmtDutchPayYn = "";
m_cTrnStatus.Head.OrderNo = sOrderNo; // 2019-04-18 - 1997fx11 : 주문(대기)번호 Return을 위해 초기화 하지 않는다.
m_cTrnStatus.Head.FloorNm = "";
m_cTrnStatus.Head.TableNm = "";
m_cTrnStatus.Head.OrderPicNm = "";
m_cTrnStatus.Head.PpCardCustNm = "";
m_cTrnStatus.Head.AftSaveAddDiv = "";
m_cTrnStatus.Head.AftSaveAddInfo = "";
m_cTrnStatus.Head.RefundInfo = "";
m_cTrnStatus.Head.MidCloseSeq = m_cPosStatus.Base.MidCloseSeq;
m_cTrnStatus.Head.PpCardCustId = "";
m_cTrnStatus.Head.PackTradeDiv = "";
m_cTrnStatus.Head.HoldStat = "";
m_cTrnStatus.Head.HoldOrgRegNo = "";
m_cTrnStatus.Head.VipTy = "";
m_cTrnStatus.Head.TotSaleAmt = 0;
m_cTrnStatus.Head.TotDcAmt = 0;
m_cTrnStatus.Head.NetSaleAmt = 0;
m_cTrnStatus.Head.ItemDcAmt = 0;
m_cTrnStatus.Head.CpiDcAmt = 0;
m_cTrnStatus.Head.CoopCardDcAmt = 0;
m_cTrnStatus.Head.PointDcAmt = 0;
m_cTrnStatus.Head.CpnDcAmt = 0;
m_cTrnStatus.Head.EmpDcAmt = 0;
m_cTrnStatus.Head.SetDcAmt = 0;
m_cTrnStatus.Head.EtcDcAmt = 0;
m_cTrnStatus.Head.TotVatAmt = 0;
m_cTrnStatus.Head.SvcFeeAmt = 0;
m_cTrnStatus.Head.SvcFeeVat = 0;
m_cTrnStatus.Head.EtcVatAmt = 0;
m_cTrnStatus.Head.AftSavePoint = 0;
m_cTrnStatus.Head.ExcepDcAmt = 0;
m_cTrnStatus.Head.CustCnt = 0;
m_cTrnStatus.Head.PayAge = 0;
m_cTrnStatus.Head.ManCmpnpsnCnt = 0;
m_cTrnStatus.Head.WomanCmpnpsnCnt = 0;
m_cTrnStatus.Head.TotQty = 0;
m_cTrnStatus.Head.BillSplitCnt = 0;
m_cTrnStatus.Head.LossTotSaleAmt = 0;
//#20170828 해피포인트 적립 제외 버튼 추가 phj, start
m_cTrnStatus.Head.HP_EXCLUDE_YN = "0";
//#20170828 해피포인트 적립 제외 버튼 추가 phj, end
//#15746 해피오더 '쇼킹박스' 관련 POS 시스템 개발 요청 start
m_cTrnStatus.Head.ShockingBoxBarcodeData = "";
m_cTrnStatus.Head.ShockingBoxTradeKind = "";
m_cTrnStatus.Head.ShockingBoxStat = "";
//#15746 해피오더 '쇼킹박스' 관련 POS 시스템 개발 요청 end
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;
}
/// <summary>
/// 트란해더 필수정보 재설정
/// </summary>
public void SetTranBaseToHead()
{
try
{
m_cTrnStatus.Head.CmpCd = m_cPosStatus.Base.CmpCd;
m_cTrnStatus.Head.StoreCd = m_cPosStatus.Base.StoreNo;
m_cTrnStatus.Head.SaleDate = m_cPosStatus.Base.SaleDate;
m_cTrnStatus.Head.PosNo = m_cPosStatus.Base.PosNo;
m_cTrnStatus.Head.RegNo = m_cPosStatus.Base.RegNo;
m_cTrnStatus.Head.TradeNo = m_cPosStatus.Base.TradeNo;
m_cTrnStatus.Head.MidCloseSeq = m_cPosStatus.Base.MidCloseSeq;
m_cTrnStatus.Head.SysYmd = DateTime.Now.ToString("yyyyMMdd");
m_cTrnStatus.Head.PayHms = DateTime.Now.ToString("HHmmss");
m_cTrnStatus.Head.CashierId = m_cPosStatus.Base.CashierNo;
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
}
/// <summary>
/// 거래 번호 증가
/// </summary>
/// <param name="bMsgSeq">전문순번증가여부</param>
/// <param name="bRegNo">등록번호증가여부</param>
/// <param name="bTradeNo">거래번호증가여부</param>
/// <returns></returns>
public bool SetMsgNoInc(bool bMsgSeq, bool bRegNo, bool bTradeNo)
{
return SetMsgNoInc(bMsgSeq, bRegNo, bTradeNo, "");
}
public bool SetMsgNoInc(bool bMsgSeq, bool bRegNo, bool bTradeNo, string sTranKind)
{
try
{
CmMessage m_PosSaleInfo = CmMessage.MakeMessageFromFile(BaseCom.NxIniPath + PosConst.INI_FILE_NAME.PosSaleInfo);
if (bMsgSeq == true)
{
// 전문 순번 증가
#region
if (m_cPosStatus.Base.MsgSeqNo == null || m_cPosStatus.Base.MsgSeqNo == "" || int.Parse(m_cPosStatus.Base.MsgSeqNo) >= 9999)
m_cPosStatus.Base.MsgSeqNo = "000001";
else
m_cPosStatus.Base.MsgSeqNo = string.Format("{0:D06}", int.Parse(m_cPosStatus.Base.MsgSeqNo) + 1);
m_PosSaleInfo.GetMessage("MSGNO").MakeMessageOverWrite("MsgSeqNo", m_cPosStatus.Base.MsgSeqNo);
#endregion
}
if (bRegNo == true)
{
// 등록 번호 증가
#region
if (m_cPosStatus.Base.RegNo == null || m_cPosStatus.Base.RegNo == "" || int.Parse(m_cPosStatus.Base.RegNo) >= 99999)
m_cPosStatus.Base.RegNo = "00001";
else
m_cPosStatus.Base.RegNo = string.Format("{0:D5}", int.Parse(m_cPosStatus.Base.RegNo) + 1);
m_PosSaleInfo.GetMessage("MSGNO").MakeMessageOverWrite("RegNo", m_cPosStatus.Base.RegNo);
#endregion
}
if (bTradeNo == true)
{
// 거래 번호 증가
#region
if (m_cPosStatus.Base.TradeNo == null || m_cPosStatus.Base.TradeNo == "" || int.Parse(m_cPosStatus.Base.TradeNo) >= 99999)
m_cPosStatus.Base.TradeNo = "00001";
else
m_cPosStatus.Base.TradeNo = string.Format("{0:D5}", int.Parse(m_cPosStatus.Base.TradeNo) + 1);
m_PosSaleInfo.GetMessage("MSGNO").MakeMessageOverWrite("TradeNo", m_cPosStatus.Base.TradeNo);
#endregion
}
if (sTranKind == ItemConst.TRAN_KIND.STATEMENT.MIDDLE_ADJUSTMENT)
{
// 중간정산 차수 증가
#region
if (m_cPosStatus.Base.MidCloseSeq == null || m_cPosStatus.Base.MidCloseSeq == "")
m_cPosStatus.Base.MidCloseSeq = "01";
else if (int.Parse(m_cPosStatus.Base.MidCloseSeq) >= 89)
m_cPosStatus.Base.MidCloseSeq = "89"; // 최대 89까지만 가능, 99는 영업마감
else
m_cPosStatus.Base.MidCloseSeq = string.Format("{0:00}", int.Parse(m_cPosStatus.Base.MidCloseSeq) + 1);
m_PosSaleInfo.GetMessage("MSGNO").MakeMessageOverWrite("MidCloseSeq", m_cPosStatus.Base.MidCloseSeq);
#endregion
}
m_PosSaleInfo.MakeFileFromMessage(BaseCom.NxIniPath + PosConst.INI_FILE_NAME.PosSaleInfo);
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;
}
#region
/// <summary>
/// 현금영수증 승인 금액 계산
/// </summary>
/// <returns></returns>
public double GetCashAmt()
{
double dCashAmt = 0;
try
{
ArrayList aPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
for (int iRow = 0; iRow < aPayItem.Count; iRow++)
{
Column.TR_PAYMENT.DATA cPayItem = (Column.TR_PAYMENT.DATA)aPayItem[iRow];
if (cPayItem.CANCEL_DIV == PosConst.CANCEL_DIV.NORMAL && cPayItem.OCCUR_ENTRY_21 == ItemConst.PAY_CASHBILL_DIV.YES
&& cPayItem.PAY_WAY_CD == ItemConst.TR_ITEM_ID.PAY_ITEM && cPayItem.PAY_DTL_CD_01 == ItemConst.TR_ITEM_ID.PAY.SMILE_PAY)
{
// 스마일 페이 현금영수증 승인 금액
dCashAmt = CmUtil.DoubleAdd(dCashAmt, cPayItem.AMT_ENTRY_07);
}
else if (cPayItem.CANCEL_DIV == PosConst.CANCEL_DIV.NORMAL && cPayItem.OCCUR_ENTRY_21 == ItemConst.PAY_CASHBILL_DIV.YES)
{
dCashAmt = CmUtil.DoubleAdd(dCashAmt, cPayItem.PAY_AMT);
}
}
}
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 dCashAmt;
}
#endregion
/// <summary>
/// 할인 금액 획득
/// </summary>
/// <param name="bPosDc"></param>
/// <param name="bCpi"></param>
/// <param name="bCoop"></param>
/// <param name="bPoint"></param>
/// <param name="bCpn"></param>
/// <param name="bEmp"></param>
/// <param name="bSet"></param>
/// <param name="bEtc"></param>
/// <returns></returns>
public double GetPluDiscountAmount(bool bPosDc, bool bCpi, bool bCoop, bool bPoint, bool bCpn, bool bEmp, bool bSet, bool bEtc, bool bExcep, int iRow)
{
double nTotDcAmt = 0;
try
{
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[iRow];
if (cPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) return 0; // continue; // 지정취소
if (bPosDc == true) nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.ITEM_DC_AMT); // 단품 할인 금액
if (bPosDc == true) nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.SUM_DC_AMT); // 소계 할인 금액
if (bCpi == true) nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.CPI_DC_AMT); // 행사 할인 금액
if (bCoop == true) nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.COOP_CARD_DC_AMT); // 제휴카드 할인 금액
if (bPoint == true) nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.POINT_DC_AMT); // 포인트 할인 금액
if (bCpn == true) nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.CPN_DC_AMT); // 쿠폰 할인 금액
if (bEmp == true) nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.EMP_DC_AMT); // 직원 할인 금액
if (bSet == true) nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.SET_DC_AMT); // 세트 할인 금액
if (bEtc == true) nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.ETC_DC_AMT); // 기타 할인 금액
if (bExcep == true) nTotDcAmt = CmUtil.DoubleAdd(nTotDcAmt, cPluItem.EXCEP_DC_AMT); // 예외 할인 금액
//}
}
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 nTotDcAmt;
}
#region ,
/// <summary>
/// 할인, 적립 대상 금액 획득
/// </summary>
/// <param name="sMenuKey"></param>
/// <returns></returns>
public double GetPluTagetAmount(string sMenuKey)
{
return GetPluTagetAmount(sMenuKey, false);
}
public double GetPluTagetAmount(string sMenuKey, bool bHpSaveNoCampaign)
{
double nTotAmt = 0;
//#20171206 17크리스마스캠페인 start
double dCpiDcAddAmt = 0;
//#20171206 17크리스마스캠페인 end
try
{
//#20170828 해피포인트 적립 제외 버튼 추가 phj, start
//해피포인트 적립제외 버튼 선택 시 무조건 0.5% 적립으로 변경
//#13501 PAS 부산남천_해피포인트 기본 적립제외를 누르면 임직원 할인이 대상금액이 0이뜨는 증상 수정 요청. start, phj
//기존
//if (m_cTrnStatus.Head.HP_EXCLUDE_YN == "1") return 0;
//변경
if (sMenuKey == PosKey.MENU_KEY.HAPPY_POINT || sMenuKey == PosKey.MENU_KEY.HAPPY_POINT_SAVE_CHINA)
{
if (m_cTrnStatus.Head.HP_EXCLUDE_YN == "1") return 0;
}
//#13501 PAS 부산남천_해피포인트 기본 적립제외를 누르면 임직원 할인이 대상금액이 0이뜨는 증상 수정 요청. end, phj
//#20170828 해피포인트 적립 제외 버튼 추가 phj, end
ArrayList alSaleItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);
ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
// 할인대상금액 유형 => 0:대상아님, 1:총액, 2:결제금액
string TagGetAmtType = "";
#region
if (sMenuKey == PosKey.MENU_KEY.SKT)
TagGetAmtType = PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.MOBILE_COM_POINT, ItemConst.TR_ITEM_ID.MOBILE_COM.MOBILE_SKT, PosMst.MST_PAY_DC.DATA.DC_TRGT_AMT_TYPE);
else if (sMenuKey == PosKey.MENU_KEY.KT)
TagGetAmtType = PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.MOBILE_COM_POINT, ItemConst.TR_ITEM_ID.MOBILE_COM.MOBILE_KTF, PosMst.MST_PAY_DC.DATA.DC_TRGT_AMT_TYPE);
else if (sMenuKey == PosKey.MENU_KEY.LGT)
TagGetAmtType = PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.MOBILE_COM_POINT, ItemConst.TR_ITEM_ID.MOBILE_COM.MOBILE_LGT, PosMst.MST_PAY_DC.DATA.DC_TRGT_AMT_TYPE);
//#20180413 웰컴카드 신규기능 추가 start,phj
else if (sMenuKey == PosKey.MENU_KEY.WELCOMECARD_DC)
TagGetAmtType = PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.MOBILE_COM_POINT, ItemConst.TR_ITEM_ID.MOBILE_COM.WELCOMECARD, PosMst.MST_PAY_DC.DATA.DC_TRGT_AMT_TYPE);
//#20180413 웰컴카드 신규기능 추가 end,phj
else if (sMenuKey == PosKey.MENU_KEY.HAPPY_POINT)
TagGetAmtType = PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.ETC_INFO_ITEM, ItemConst.TR_ITEM_ID.ETC_INFO.SAVEPOINT, PosMst.MST_PAY_DC.DATA.DC_TRGT_AMT_TYPE);
else if (sMenuKey == PosKey.MENU_KEY.HAPPY_POINT_SAVE_CHINA)
TagGetAmtType = PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.ETC_INFO_ITEM, ItemConst.TR_ITEM_ID.ETC_INFO.POINT_SAVE_CHINA, PosMst.MST_PAY_DC.DATA.DC_TRGT_AMT_TYPE);
else if (sMenuKey == PosKey.MENU_KEY.OKCASHBACK_SAVE)
TagGetAmtType = PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.ETC_INFO_ITEM, ItemConst.TR_ITEM_ID.ETC_INFO.OCB_SAVE, PosMst.MST_PAY_DC.DATA.DC_TRGT_AMT_TYPE);
else if (sMenuKey == PosKey.MENU_KEY.HAPPY_DC_COUPON)
TagGetAmtType = PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.COUPON_ITEM, ItemConst.TR_ITEM_ID.COUPON.INCARD, PosMst.MST_PAY_DC.DATA.DC_TRGT_AMT_TYPE);
else if (sMenuKey == PosKey.MENU_KEY.SPC_EMPLOYEE_DC)
TagGetAmtType = PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.EMP_DC_ITEM, ItemConst.TR_ITEM_ID.EMP_DC.SPC, PosMst.MST_PAY_DC.DATA.DC_TRGT_AMT_TYPE);
else if (sMenuKey == PosKey.MENU_KEY.SPC_EMPLOYEE_DC_PAY)
TagGetAmtType = PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.EMP_DC_ITEM, ItemConst.TR_ITEM_ID.EMP_DC.SPC_PAY, PosMst.MST_PAY_DC.DATA.DC_TRGT_AMT_TYPE);
else if (sMenuKey == PosKey.MENU_KEY.SEVERANCE_DC) // 세브란스할인(2017.05.23)
TagGetAmtType = PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.EMP_DC_ITEM, ItemConst.TR_ITEM_ID.EMP_DC.SEVERANCE, PosMst.MST_PAY_DC.DATA.DC_TRGT_AMT_TYPE);
else if (sMenuKey == PosKey.MENU_KEY.SPC_EMPLOYEE_DC_CHINA) // 중국임직원할인(2017.05.30)
TagGetAmtType = PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.EMP_DC_ITEM, ItemConst.TR_ITEM_ID.EMP_DC.SPC_CHINA, PosMst.MST_PAY_DC.DATA.DC_TRGT_AMT_TYPE);
#endregion
foreach (Column.TR_PLU.DATA cPluItem in alSaleItem)
{
// 해당상품이 할인 적립 가능한지 체크
if (CheckPluDiscountAble(sMenuKey, cPluItem) == false) continue;
if (sMenuKey == PosKey.MENU_KEY.SKT || sMenuKey == PosKey.MENU_KEY.KT || sMenuKey == PosKey.MENU_KEY.LGT
//#20180413 웰컴카드 신규기능 추가 start,phj
|| sMenuKey == PosKey.MENU_KEY.WELCOMECARD_DC
//#20180413 웰컴카드 신규기능 추가 end,phj
|| sMenuKey == PosKey.MENU_KEY.SPC_EMPLOYEE_DC || sMenuKey == PosKey.MENU_KEY.SPC_EMPLOYEE_DC_PAY)
{
///////////////////////////////////////////////////////////////////////////////////////////////
// 통신사 할인 대상금액
///////////////////////////////////////////////////////////////////////////////////////////////
#region
if ((cPluItem.ITEM_DC_AMT > 0 || cPluItem.SUM_DC_AMT > 0) && cPluItem.DC_DIV.Length >= 4) // 단품 할인, 소계 할인 금액
{
// 통신사할인 대상구분(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.DC_DIV.Substring(0, 2), cPluItem.DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.DC_DIV.Substring(0, 2), cPluItem.DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "2") continue;
}
if (cPluItem.POINT_DC_AMT > 0 && cPluItem.POINT_DC_DIV.Length >= 4) // 포인트 할인 금액
{
// 통신사할인 대상구분(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.POINT_DC_DIV.Substring(0, 2), cPluItem.POINT_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.POINT_DC_DIV.Substring(0, 2), cPluItem.POINT_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "2") continue;
}
if (cPluItem.CPN_DC_AMT > 0 && cPluItem.CPN_DC_DIV.Length >= 4) // 쿠폰 할인 금액
{
// 통신사할인 대상구분(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.CPN_DC_DIV.Substring(0, 2), cPluItem.CPN_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.CPN_DC_DIV.Substring(0, 2), cPluItem.CPN_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "2") continue;
}
if (cPluItem.EMP_DC_AMT > 0 && cPluItem.EMP_DC_DIV.Length >= 4) // 직원 할인 금액
{
// 통신사할인 대상구분(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.EMP_DC_DIV.Substring(0, 2), cPluItem.EMP_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.EMP_DC_DIV.Substring(0, 2), cPluItem.EMP_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "2") continue;
}
if (cPluItem.SET_DC_AMT > 0) // 세트할인
{
// 통신사할인 대상구분(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(ItemConst.PLU_DC_DIV.SET_DC.Substring(0, 2), ItemConst.PLU_DC_DIV.SET_DC.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "0") return 0;
if (PosMstManager.GetMstPayDc(ItemConst.PLU_DC_DIV.SET_DC.Substring(0, 2), ItemConst.PLU_DC_DIV.SET_DC.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "2") continue;
}
if (cPluItem.ETC_DC_AMT > 0 && cPluItem.ETC_DC_DIV.Length >= 4) // 기타 할인 금액
{
// 통신사할인 대상구분(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.ETC_DC_DIV.Substring(0, 2), cPluItem.ETC_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.ETC_DC_DIV.Substring(0, 2), cPluItem.ETC_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "2") continue;
}
#endregion
if (cPluItem.alTrSaleCpi != null)
{
// 통신사 할인 대상상품 선택시 캠페인 할인상품은 제외(2017.06.20)
bool bCpiExist = false;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cPluItem.alTrSaleCpi)
{
#region
//#20170811 제휴할인그룹 중복 여부 체크가 할인캠페인만 적용이 되어 다른 캠페인에도 적용 되도록 수정 start
//기존
if (cTrSaleCpi.DC_SUM_AMT > 0) // 캠페인 성립 상품과 중복 적용 가능여부 체크
//변경
//if (cTrSaleCpi.DC_QTY > 0) // 캠페인 성립 상품과 중복 적용 가능여부 체크
//#20170811 제휴할인그룹 중복 여부 체크가 할인캠페인만 적용이 되어 다른 캠페인에도 적용 되도록 수정 end
{
//#20171206 17크리스마스캠페인 start
//기존
/*
// 제휴할인그룹 중복 여부(0:중복적용불가, 1:중복적용가능)
if (cTrSaleCpi.TELECOM_COOP_DUP_PRMT_YN == "0")
return -1; // 캠페인 취소 후 가능
else
bCpiExist = true;
*/
//변경
// 제휴할인그룹 중복 여부(0:중복적용불가, 1:중복적용가능, 2:중복적용가능(할인금액포함))
if (cTrSaleCpi.TELECOM_COOP_DUP_PRMT_YN == "0")
return -1; // 캠페인 취소 후 가능
else if (cTrSaleCpi.TELECOM_COOP_DUP_PRMT_YN == "1")
bCpiExist = true;
else
{
//통신사 할인이 아니면 통신사할인 대상금액에서 제외
if (sMenuKey != PosKey.MENU_KEY.SKT &&
sMenuKey != PosKey.MENU_KEY.KT &&
sMenuKey != PosKey.MENU_KEY.LGT &&
//#20180413 웰컴카드 신규기능 추가 start,phj
sMenuKey != PosKey.MENU_KEY.WELCOMECARD_DC
//#20180413 웰컴카드 신규기능 추가 end,phj
)
{
bCpiExist = true;
}
}
//#20171206 17크리스마스캠페인 end
}
#endregion
}
if (bCpiExist == true) continue;
//foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cPluItem.alTrSaleCpi)
//{
// if (cTrSaleCpi.DC_SUM_AMT > 0) // 캠페인 성립 상품과 중복 적용 가능여부 체크
// {
// // 제휴할인그룹 중복 여부(0:중복적용불가, 1:중복적용가능)
// if (cTrSaleCpi.TELECOM_COOP_DUP_PRMT_YN == "0") return -1; // 캠페인 취소 후 가능
// }
//}
}
}
else if (sMenuKey == PosKey.MENU_KEY.HAPPY_POINT || sMenuKey == PosKey.MENU_KEY.HAPPY_POINT_SAVE_CHINA || sMenuKey == PosKey.MENU_KEY.OKCASHBACK_SAVE)
{
///////////////////////////////////////////////////////////////////////////////////////////////
// 해피포인트 기본적립 대상금액
///////////////////////////////////////////////////////////////////////////////////////////////
#region
if ((cPluItem.ITEM_DC_AMT > 0 || cPluItem.SUM_DC_AMT > 0) && cPluItem.DC_DIV.Length >= 4) // 단품 할인, 소계 할인 금액
{
// HP 기본 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.DC_DIV.Substring(0, 2), cPluItem.DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.DC_DIV.Substring(0, 2), cPluItem.DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2") continue;
}
if (cPluItem.COOP_CARD_DC_AMT > 0 && cPluItem.COOP_CARD_DC_DIV.Length >= 4) // 제휴 할인 금액
{
// HP 기본 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.COOP_CARD_DC_DIV.Substring(0, 2), cPluItem.COOP_CARD_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.COOP_CARD_DC_DIV.Substring(0, 2), cPluItem.COOP_CARD_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2") continue;
}
if (cPluItem.POINT_DC_AMT > 0 && cPluItem.POINT_DC_DIV.Length >= 4) // 포인트 할인 금액
{
// HP 기본 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.POINT_DC_DIV.Substring(0, 2), cPluItem.POINT_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.POINT_DC_DIV.Substring(0, 2), cPluItem.POINT_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2") continue;
}
if (cPluItem.CPN_DC_AMT > 0 && cPluItem.CPN_DC_DIV.Length >= 4) // 쿠폰 할인 금액
{
// HP 기본 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.CPN_DC_DIV.Substring(0, 2), cPluItem.CPN_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.CPN_DC_DIV.Substring(0, 2), cPluItem.CPN_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2") continue;
}
if (cPluItem.EMP_DC_AMT > 0 && cPluItem.EMP_DC_DIV.Length >= 4) // 직원 할인 금액
{
// HP 기본 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.EMP_DC_DIV.Substring(0, 2), cPluItem.EMP_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.EMP_DC_DIV.Substring(0, 2), cPluItem.EMP_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2") continue;
}
if (cPluItem.SET_DC_AMT > 0) // 세트할인
{
// HP 기본 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(ItemConst.PLU_DC_DIV.SET_DC.Substring(0, 2), ItemConst.PLU_DC_DIV.SET_DC.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0") return 0;
if (PosMstManager.GetMstPayDc(ItemConst.PLU_DC_DIV.SET_DC.Substring(0, 2), ItemConst.PLU_DC_DIV.SET_DC.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2") continue;
}
if (cPluItem.ETC_DC_AMT > 0 && cPluItem.ETC_DC_DIV.Length >= 4) // 기타 할인 금액
{
// HP 기본 적립 여부(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.ETC_DC_DIV.Substring(0, 2), cPluItem.ETC_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPluItem.ETC_DC_DIV.Substring(0, 2), cPluItem.ETC_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.HP_BASIC_ACCUM_YN) == "2") continue;
}
#endregion
// 캠페인 제외여부(추가적립시 기본적립 1000원 이하일때 캠페인 제외)
if (bHpSaveNoCampaign == false)
{
// 기본적립일때 캠페인 성립 상품과 중복 적용 가능여부 체크
bool bNotSave = false;
if (cPluItem.alTrSaleCpi != null)
{
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cPluItem.alTrSaleCpi)
{
#region
if (cTrSaleCpi.DC_QTY > 0 || cTrSaleCpi.DC_SUM_AMT > 0)
{
// 기본 HP 적립여부(0:적립없음, 1:적립가능)
if (cTrSaleCpi.BASIC_HP_ACCUM_YN == "0") return 0;
// 기본 HP 적립기준(0:적립안함, 1:행사상품포함, 2:행사상품제외, 3:사은품제외)
if (cTrSaleCpi.BASIC_HP_ACCUM_STD == "0") return 0;
else if (cTrSaleCpi.BASIC_HP_ACCUM_STD == "2") bNotSave = true;
else if (cTrSaleCpi.BASIC_HP_ACCUM_STD == "3")
{
if (cPluItem.CAMPAIGN_FREEGIFT == PosConst.SALE_PLU_INPUT_TYPE.FREEGIFT || cPluItem.CAMPAIGN_FREEGIFT == PosConst.SALE_PLU_INPUT_TYPE.FREEGIFT_HP) bNotSave = true;
}
}
#endregion
}
}
if (bNotSave == true) continue;
}
}
// 할인대상금액 유형 => 0:대상아님, 1:총액, 2:결제금액
if (TagGetAmtType == "1")
nTotAmt = CmUtil.DoubleAdd(nTotAmt, cPluItem.SALE_AMT); // 총매출
else
//#20171206 17크리스마스캠페인 start
//기존
// nTotAmt = CmUtil.DoubleAdd(nTotAmt, cPluItem.BILL_AMT); // 순매출
//변경
{
if (cPluItem.alTrSaleCpi != null)
{
dCpiDcAddAmt = 0;
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cPluItem.alTrSaleCpi)
{
if (cTrSaleCpi.DC_SUM_AMT > 0) // 캠페인 성립 상품과 중복 적용 가능여부 체크
{
//통신사 할인시 해당 상품시 캠페인 적용되어 있고 통신사 제휴 중복 할인금액 포함이면 캠페인 할인금액 포함.
if ((sMenuKey == PosKey.MENU_KEY.SKT ||
sMenuKey == PosKey.MENU_KEY.KT ||
sMenuKey == PosKey.MENU_KEY.LGT ||
//#20180413 웰컴카드 신규기능 추가 start,phj
sMenuKey == PosKey.MENU_KEY.WELCOMECARD_DC
//#20180413 웰컴카드 신규기능 추가 end,phj
) &&
(cTrSaleCpi.TELECOM_COOP_DUP_PRMT_YN == "2"))
{
dCpiDcAddAmt = CmUtil.DoubleAdd(dCpiDcAddAmt, cTrSaleCpi.DC_SUM_AMT); // 캠페인할인금액
}
}
}
}
nTotAmt = CmUtil.DoubleAdd(nTotAmt, cPluItem.BILL_AMT + dCpiDcAddAmt); // 순매출
}
//#20171206 17크리스마스캠페인 end
}
if (sMenuKey == PosKey.MENU_KEY.HAPPY_POINT || sMenuKey == PosKey.MENU_KEY.HAPPY_POINT_SAVE_CHINA || sMenuKey == PosKey.MENU_KEY.OKCASHBACK_SAVE)
{
// 적립불가 상품의 캠페인 성립여부 체크
foreach (Column.TR_PLU.DATA cPluItem in alSaleItem)
{
if (bHpSaveNoCampaign == false && cPluItem.alTrSaleCpi != null)
{
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cPluItem.alTrSaleCpi)
{
if (cTrSaleCpi.DC_QTY > 0 || cTrSaleCpi.DC_SUM_AMT > 0)
{
// 기본 HP 적립여부(0:적립없음, 1:적립가능)
if (cTrSaleCpi.BASIC_HP_ACCUM_YN == "0") return 0;
}
}
}
}
// 해피포인트 적립 대상금액은 결제 금액중 적립가능 결제금액만 설정 함.
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)
{
//#20171219 할인, 적립 제외 금액 계산시 상품리스트에서 계산된 금액에서 빼도록 수정 start
//기존
//double nPaySaveAmt = m_cTrnStatus.Head.NetSaleAmt - nExceptPayAmt;
//변경
double nPaySaveAmt = nTotAmt - nExceptPayAmt;
//#20171219 할인, 적립 제외 금액 계산시 상품리스트에서 계산된 금액에서 빼도록 수정 end
//#20171222 대상금액이 0보다 작은 경우 전문 오류 발생으로 0으로 변경 start
if (nPaySaveAmt <= 0) return 0;
//#20171222 대상금액이 0보다 작은 경우 전문 오류 발생으로 0으로 변경 end
if (nTotAmt > nPaySaveAmt) nTotAmt = nPaySaveAmt;
}
}
else if (sMenuKey == PosKey.MENU_KEY.SKT || sMenuKey == PosKey.MENU_KEY.KT || sMenuKey == PosKey.MENU_KEY.LGT || sMenuKey == PosKey.MENU_KEY.KT_VIP
//#20180413 웰컴카드 신규기능 추가 start,phj
|| sMenuKey == PosKey.MENU_KEY.WELCOMECARD_DC
//#20180413 웰컴카드 신규기능 추가 end,phj
|| sMenuKey == PosKey.MENU_KEY.SPC_EMPLOYEE_DC || sMenuKey == PosKey.MENU_KEY.SPC_EMPLOYEE_DC_PAY)
{
// 통신사할인 대상금액은 결제 금액중 통신사할인가능 결제금액만 설정 함.
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:할인)
{
// 통신사 할인 구분(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPayItem.PAY_WAY_CD, cPayItem.PAY_DTL_CD_01, PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "0") return 0;
if (PosMstManager.GetMstPayDc(cPayItem.PAY_WAY_CD, cPayItem.PAY_DTL_CD_01, PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "2")
{
nExceptPayAmt = CmUtil.DoubleAdd(nExceptPayAmt, cPayItem.PAY_AMT);
}
}
}
if (nExceptPayAmt > 0)
{
//#20171206 17크리스마스캠페인 start
//결제항목중 통신사할인 제외 처리시 할인금액포함 캠페인 할인 금액 합산
//기존
//double nPaySaveAmt = m_cTrnStatus.Head.NetSaleAmt - nExceptPayAmt;
//변경
//#20171219 할인, 적립 제외 금액 계산시 상품리스트에서 계산된 금액에서 빼도록 수정 start
//기존
//double nPaySaveAmt = m_cTrnStatus.Head.NetSaleAmt - nExceptPayAmt + dCpiDcAddAmt;
//변경
double nPaySaveAmt = nTotAmt - nExceptPayAmt + dCpiDcAddAmt;
//#20171219 할인, 적립 제외 금액 계산시 상품리스트에서 계산된 금액에서 빼도록 수정 end
//#20171206 17크리스마스캠페인 end
//#20171222 대상금액이 0보다 작은 경우 전문 오류 발생으로 0으로 변경 start
if (nPaySaveAmt <= 0) return 0;
//#20171222 대상금액이 0보다 작은 경우 전문 오류 발생으로 0으로 변경 end
if (nTotAmt > nPaySaveAmt) nTotAmt = nPaySaveAmt;
}
}
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
return nTotAmt;
}
#endregion
#region
/// <summary>
/// 해당 상품이 할인 적립 가능한지 체크
/// </summary>
/// <param name="sMenuKey"></param>
/// <returns>true:가능, false:불가</returns>
public bool CheckPluDiscountAble(string sMenuKey, Column.TR_PLU.DATA cPluItem)
{
try
{
if (cPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) return false; // 지정취소
if (cPluItem.NONSALES_RSN_CD != "0") return false; // 비매출구분
if (cPluItem.BILLSPR_NO != m_cTrnStatus.Sale.BillSplitNo) return false; // 빌분리번호
#region
if (sMenuKey == PosKey.MENU_KEY.SKT ||
sMenuKey == PosKey.MENU_KEY.KT ||
sMenuKey == PosKey.MENU_KEY.LGT ||
sMenuKey == PosKey.MENU_KEY.KT_VIP
//#20180413 웰컴카드 신규기능 추가 start,phj
|| sMenuKey == PosKey.MENU_KEY.WELCOMECARD_DC
//#20180413 웰컴카드 신규기능 추가 end,phj
)
{
///////////////////////////////////////////////////////////////////////////////////////////////
// 통신사 할인 대상
///////////////////////////////////////////////////////////////////////////////////////////////
if (cPluItem.COOP_CARD_DC_NOADM_YN == "1") return false; // 제휴 할인 불가 여부(0:가능, 1:불가)
#region
if ((cPluItem.ITEM_DC_AMT > 0 || cPluItem.SUM_DC_AMT > 0) && cPluItem.DC_DIV.Length >= 4) // 단품 할인, 소계 할인 금액
{
// 통신사할인 대상구분(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.DC_DIV.Substring(0, 2), cPluItem.DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "2") return false;
}
if (cPluItem.POINT_DC_AMT > 0 && cPluItem.POINT_DC_DIV.Length >= 4) // 포인트 할인 금액
{
// 통신사할인 대상구분(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.POINT_DC_DIV.Substring(0, 2), cPluItem.POINT_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "2") return false;
}
if (cPluItem.CPN_DC_AMT > 0 && cPluItem.CPN_DC_DIV.Length >= 4) // 쿠폰 할인 금액
{
// 통신사할인 대상구분(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.CPN_DC_DIV.Substring(0, 2), cPluItem.CPN_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "2") return false;
}
if (cPluItem.EMP_DC_AMT > 0 && cPluItem.EMP_DC_DIV.Length >= 4) // 직원 할인 금액
{
// 통신사할인 대상구분(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.EMP_DC_DIV.Substring(0, 2), cPluItem.EMP_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "2") return false;
}
if (cPluItem.SET_DC_AMT > 0) // 세트할인
{
// 통신사할인 대상구분(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(ItemConst.PLU_DC_DIV.SET_DC.Substring(0, 2), ItemConst.PLU_DC_DIV.SET_DC.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "2") return false;
}
if (cPluItem.ETC_DC_AMT > 0 && cPluItem.ETC_DC_DIV.Length >= 4) // 기타 할인 금액
{
// 통신사할인 대상구분(0:불가, 1:가능, 2:제외)
if (PosMstManager.GetMstPayDc(cPluItem.ETC_DC_DIV.Substring(0, 2), cPluItem.ETC_DC_DIV.Substring(2, 2), PosMst.MST_PAY_DC.DATA.MOBILE_DC_DIV) == "2") return false;
}
#endregion
// 통신사 할인 대상상품 선택시 캠페인 할인상품은 제외(2017.06.20)
if (cPluItem.alTrSaleCpi != null)
{
foreach (Column.TR_SALE_CPI_RSLT.DATA cTrSaleCpi in cPluItem.alTrSaleCpi)
{
//#20171206 17크리스마스캠페인 start
//기존
//if (cTrSaleCpi.DC_SUM_AMT > 0) return false; // 캠페인 성립 상품과 중복 적용 가능여부 체크
//변경
if (cTrSaleCpi.DC_SUM_AMT > 0 && cTrSaleCpi.TELECOM_COOP_DUP_PRMT_YN != "2") return false;
//#20171206 17크리스마스캠페인 end
}
}
}
else if (sMenuKey == PosKey.MENU_KEY.OLIBANK || sMenuKey == PosKey.MENU_KEY.OKCASHBACK || sMenuKey == PosKey.MENU_KEY.BLUE_MEMBERS || sMenuKey == PosKey.MENU_KEY.RED_MEMBERS)
{
///////////////////////////////////////////////////////////////////////////////////////////////
// 제휴 포인트 할인 대상
///////////////////////////////////////////////////////////////////////////////////////////////
if (cPluItem.COOP_CARD_DC_NOADM_YN == "1") return false; // 제휴 할인 불가 여부(0:가능, 1:불가)
}
else if (sMenuKey == PosKey.MENU_KEY.HAPPY_POINT || sMenuKey == PosKey.MENU_KEY.HAPPY_POINT_SAVE_CHINA || sMenuKey == PosKey.MENU_KEY.OKCASHBACK_SAVE)
{
///////////////////////////////////////////////////////////////////////////////////////////////
// 해피포인트 기본적립 대상
///////////////////////////////////////////////////////////////////////////////////////////////
if (cPluItem.ACCUM_PRMT_YN == "0") return false; // 적립허용 여부
}
else if (sMenuKey == PosKey.MENU_KEY.ONLINE_COUPONS || sMenuKey == PosKey.MENU_KEY.ONLINE_COUPONS_SCH)
{
///////////////////////////////////////////////////////////////////////////////////////////////
// 온라인 쿠폰(중국)
///////////////////////////////////////////////////////////////////////////////////////////////
if (cPluItem.DC_PRMT_YN == "1") return false;
// 기존 할인이 적용되어 있으면 제외
if (cPluItem.ITEM_DC_AMT > 0 || cPluItem.SUM_DC_AMT > 0) return false; // 단품 할인 금액
if (cPluItem.COOP_CARD_DC_AMT > 0) return false; // 제휴카드 할인 금액
if (cPluItem.POINT_DC_AMT > 0) return false; // 포인트 할인 금액
if (cPluItem.CPN_DC_AMT > 0) return false; // 쿠폰 할인 금액
//if (cPluItem.CPN_DC_AMT > 0 && cPluItem.CPN_DC_DIV != ItemConst.PLU_CPN_DC_TYPE.DC_ONLINE_CPN) return false; // 쿠폰 할인 금액
if (cPluItem.EMP_DC_AMT > 0) return false; // 직원 할인 금액
if (cPluItem.SET_DC_AMT > 0) return false; // 묶음 할인 금액
}
else
{
///////////////////////////////////////////////////////////////////////////////////////////////
// 일반 할인 대상
///////////////////////////////////////////////////////////////////////////////////////////////
if (cPluItem.DC_PRMT_YN == "1") return false;
}
#endregion
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
/// <summary>
/// 상품 부가세 계산 처리
/// </summary>
/// <returns></returns>
public bool ItemVatProc()
{
bool bRet = false;
try
{
double dItemTakeInSum = 0; //부가세 TakeIn 대상 금액에 합
double dItemTakeOutSum = 0; //부가세 TakeOut대상 금액에 합
double dTaxTakeInSum = 0; //합 TakeIn 부가세 금액
double dTaxTakeOutSum = 0; //합 TakeOut부가세 금액
double dTaxTakeInSumAppy = 0; //적용한 TakeIn 부가세 금액
double dTaxTakeOutSumAppy = 0; //적용한 TakeOut부가세 금액
double dTakeInRate = 0; //TakeIn 부가세 율
double dTakeOutRate = 0; //TakeOut 부가세 율
double dTakeInMax = 0; //TakeIn 부가세 최대값
double dTakeOutMax = 0; //TakeOut 부가세 최대값
int iTakeInMaxIndx = 0; //TakeIn 부가세 최대값 인덱스
int iTakeOutMaxIndx = 0; //TakeOut 부가세 최대값 인덱스
ArrayList alTrPluItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);
IDataCommonUs m_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON);
dTakeInRate = m_cDataCommon.ItemTaxRate(m_cPosStatus.Mst.BasicTakeInTaxCd);
dTakeOutRate = m_cDataCommon.ItemTaxRate(m_cPosStatus.Mst.BasicTakeOutTaxCd);
//1. 부가세 계산 방식 체크(아이템SUM or 거래합계 배분)
if (m_cPosStatus.Mst.TaxAmtCalcMethd == ItemConst.TAX_AMT_CALC_METHD.BILL)
{
//거래 합계 후 아이템 분배
foreach (Column.TR_PLU.DATA cPluItem in alTrPluItem)
{
#region
if (cPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.NORMAL && cPluItem.NOTAX_DIV != PosConst.ITEM_NOTAX_DIV.YES && cPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.NORMAL)
{
//면세 체크(2016-12-05 100% 할인경우 체크 추가)
if (cPluItem.ITEM_TAX_DIV == PosConst.ITEM_TAX_DIV.TAX && cPluItem.BILL_AMT > 0)
{
if (cPluItem.TAKE_IN_OUT_DIV == PosConst.TAKE_IN_OUT_DIV.TAKE_IN)
{
cPluItem.TAXRATE_CD = m_cPosStatus.Mst.BasicTakeInTaxCd;
cPluItem.TAX_RATE = dTakeInRate;
dItemTakeInSum = CmUtil.DoubleAdd(dItemTakeInSum, CmUtil.DoubleSubtraction(cPluItem.SALE_AMT, cPluItem.TOT_DC_AMT));
}
else
{
cPluItem.TAXRATE_CD = m_cPosStatus.Mst.BasicTakeOutTaxCd;
cPluItem.TAX_RATE = dTakeOutRate;
dItemTakeOutSum = CmUtil.DoubleAdd(dItemTakeOutSum, CmUtil.DoubleSubtraction(cPluItem.SALE_AMT, cPluItem.TOT_DC_AMT));
}
}
else
{
cPluItem.APPLY_TAX_AMT = 0;
cPluItem.TAX_RATE = 0;
}
}
#endregion
}
if (dItemTakeInSum > 0 || dItemTakeOutSum > 0)
{
//전체 부가세 계산
#region
if (dItemTakeInSum > 0)
{
//dTaxTakeInSum = dItemTakeInSum - (dItemTakeInSum / (1 + (dTakeInRate / 100)));
dTaxTakeInSum = CmUtil.DoubleSubtraction(dItemTakeInSum, CmUtil.DoubleDivision(dItemTakeInSum, CmUtil.DoubleAdd(1, CmUtil.DoubleDivision(dTakeInRate, 100))));
dTaxTakeInSum = CmUtil.MathRounds(dTaxTakeInSum, m_cPosStatus.Mst.VatRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.VatRudDwLoc));
}
if (dItemTakeOutSum > 0)
{
//dTaxTakeOutSum = dItemTakeOutSum - (dItemTakeOutSum / (1 + (dTakeOutRate / 100)));
dTaxTakeOutSum = CmUtil.DoubleSubtraction(dItemTakeOutSum, CmUtil.DoubleDivision(dItemTakeOutSum, CmUtil.DoubleAdd(1, CmUtil.DoubleDivision(dTakeOutRate, 100))));
dTaxTakeOutSum = CmUtil.MathRounds(dTaxTakeOutSum, m_cPosStatus.Mst.VatRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.VatRudDwLoc));
}
double dItemTaxRate;
double dItemTaxAmt;
//아이템 배분 처리
//foreach (Column.TR_PLU.DATA cPluItem in alTrPluItem)
for (int iRow = 0; alTrPluItem.Count > iRow ; iRow++)
{
#region
Column.TR_PLU.DATA cPluItem = (Column.TR_PLU.DATA)alTrPluItem[iRow];
if (cPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.NORMAL && cPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.NORMAL)
{
dItemTaxRate = 0;
dItemTaxAmt = 0;
//면세 체크
if (cPluItem.ITEM_TAX_DIV == PosConst.ITEM_TAX_DIV.TAX && cPluItem.NOTAX_DIV != PosConst.ITEM_NOTAX_DIV.YES && cPluItem.BILL_AMT > 0)
{
#region
if (cPluItem.TAKE_IN_OUT_DIV == PosConst.TAKE_IN_OUT_DIV.TAKE_IN)
{
dItemTaxRate = CmUtil.DoubleMultiplication(CmUtil.DoubleDivision(CmUtil.DoubleSubtraction(cPluItem.SALE_AMT, cPluItem.TOT_DC_AMT), dItemTakeInSum), 100);
dItemTaxAmt = CmUtil.DoubleDivision(dTaxTakeInSum, CmUtil.DoubleDivision(100, dItemTaxRate));
cPluItem.APPLY_TAX_AMT = CmUtil.MathRounds(dItemTaxAmt, m_cPosStatus.Mst.VatRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.VatRudDwLoc));
dTaxTakeInSumAppy = CmUtil.DoubleAdd(dTaxTakeInSumAppy, cPluItem.APPLY_TAX_AMT);
if (dTakeInMax == 0 || dTakeInMax <= cPluItem.APPLY_TAX_AMT)
{
dTakeInMax = cPluItem.APPLY_TAX_AMT;
iTakeInMaxIndx = iRow;
}
}
else
{
dItemTaxRate = CmUtil.DoubleMultiplication(CmUtil.DoubleDivision(CmUtil.DoubleSubtraction(cPluItem.SALE_AMT, cPluItem.TOT_DC_AMT), dItemTakeOutSum), 100);
dItemTaxAmt = CmUtil.DoubleDivision(dTaxTakeOutSum, CmUtil.DoubleDivision(100, dItemTaxRate));
cPluItem.APPLY_TAX_AMT = CmUtil.MathRounds(dItemTaxAmt, m_cPosStatus.Mst.VatRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.VatRudDwLoc));
dTaxTakeOutSumAppy = CmUtil.DoubleAdd(dTaxTakeOutSumAppy, cPluItem.APPLY_TAX_AMT);
if (dTakeOutMax == 0 || dTakeOutMax <= cPluItem.APPLY_TAX_AMT)
{
dTakeOutMax = cPluItem.APPLY_TAX_AMT;
iTakeOutMaxIndx = iRow;
}
}
#endregion
}
}
#endregion
}
//짜투리 금액 계산 Take In
if (dTaxTakeInSum != dTaxTakeInSumAppy)
{
#region
Column.TR_PLU.DATA tmpPluItem = (Column.TR_PLU.DATA)alTrPluItem[iTakeInMaxIndx];
dItemTaxAmt = 0;
dItemTaxAmt = CmUtil.DoubleSubtraction(dTaxTakeInSum, dTaxTakeInSumAppy);
tmpPluItem.APPLY_TAX_AMT = CmUtil.DoubleAdd(tmpPluItem.APPLY_TAX_AMT, dItemTaxAmt);
#endregion
}
//짜투리 금액 계산 Take Out
if (dTaxTakeOutSum != dTaxTakeOutSumAppy)
{
#region
Column.TR_PLU.DATA tmpPluItem = (Column.TR_PLU.DATA)alTrPluItem[iTakeOutMaxIndx];
dItemTaxAmt = 0;
dItemTaxAmt = CmUtil.DoubleSubtraction(dTaxTakeOutSum, dTaxTakeOutSumAppy);
tmpPluItem.APPLY_TAX_AMT = CmUtil.DoubleAdd(tmpPluItem.APPLY_TAX_AMT, dItemTaxAmt);
#endregion
}
#endregion
}
}
else
{
//아이템 계산 후 합계 적용
double dItemTaxAmt;
double dTargetAmt;
//상품 낱개별 처리후 거래합 적용
foreach (Column.TR_PLU.DATA cPluItem in alTrPluItem)
{
#region
dItemTaxAmt = 0;
dTargetAmt = 0;
if (cPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.NORMAL && cPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.NORMAL)
{
//면세 체크
if (cPluItem.ITEM_TAX_DIV == PosConst.ITEM_TAX_DIV.TAX && cPluItem.NOTAX_DIV != PosConst.ITEM_NOTAX_DIV.YES && cPluItem.BILL_AMT > 0)
{
dTargetAmt = CmUtil.DoubleSubtraction(cPluItem.SALE_AMT, cPluItem.TOT_DC_AMT);
#region
double dTaxRate = 0;
// 상품별 VATCD는 상품마스터만 참조 하면됨(2017.05.29)
if (cPluItem.TAKE_IN_OUT_DIV == PosConst.TAKE_IN_OUT_DIV.TAKE_IN)
{
cPluItem.TAXRATE_CD = cPluItem.ITEM_TAKE_IN_VAT_CD;
}
else
{
cPluItem.TAXRATE_CD = cPluItem.ITEM_TAKE_OUT_VAT_CD;
}
dTaxRate = m_cDataCommon.ItemTaxRate(cPluItem.TAXRATE_CD);
#region
//if (m_cPosStatus.Mst.TaxAmtApplydiv == ItemConst.TAX_AMT_APPLY_DIV.BASIC_TAX_APPY)
//{
// if (cPluItem.TAKE_IN_OUT_DIV == PosConst.TAKE_IN_OUT_DIV.TAKE_IN)
// {
// dTaxRate = dTakeInRate;
// cPluItem.TAXRATE_CD = m_cPosStatus.Mst.BasicTakeInTaxCd;
// }
// else
// {
// dTaxRate = dTakeOutRate;
// cPluItem.TAXRATE_CD = m_cPosStatus.Mst.BasicTakeOutTaxCd;
// }
//}
//else
//{
// dTaxRate = m_cDataCommon.ItemTaxRate(cPluItem.TAXRATE_CD);
//}
//dItemTaxAmt = dTargetAmt - (dTargetAmt / (1 + (dTaxRate / 100)));
#endregion
//#2018.01.02;미주일 경우 부가세 포함, 미포함 옵션에 따라 계산식 다르게 처리;girak.kim;Start
/*
dItemTaxAmt = CmUtil.DoubleSubtraction(dTargetAmt, CmUtil.DoubleDivision(dTargetAmt, CmUtil.DoubleAdd(1, CmUtil.DoubleDivision(dTaxRate, 100))));
dItemTaxAmt = CmUtil.MathRounds(dItemTaxAmt, m_cPosStatus.Mst.VatRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.VatRudDwLoc));
cPluItem.APPLY_TAX_AMT = dItemTaxAmt;
cPluItem.TAX_RATE = dTaxRate;
*/
if ( m_cPosStatus.Base.CmpCd.ToUpper().Equals(PosConst.POS_COMPANY_CODE.PCUS)) //m_cPosStatus.Mst.CntryDiv == ItemConst.CNTRY_DIV.US
{
#region /
if (cPluItem.TAX_AMT_INCLUDE_YN == ItemConst.MST_ITEM_TAX_AMT_INCLUDE_YN.NOT_INCLUDED)//부가세 미포함 경우
{
// (4.75 * 1.07 ) - (4.75)
dItemTaxAmt = CmUtil.DoubleAdd(1, CmUtil.DoubleDivision(dTaxRate, 100));//1 + (7/100) = 1.07
dItemTaxAmt = CmUtil.DoubleMultiplication(dTargetAmt, dItemTaxAmt); //4.75*1.07
dItemTaxAmt = CmUtil.DoubleSubtraction(dItemTaxAmt, dTargetAmt);//(4.75*1.07) - (4.75)
dItemTaxAmt = CmUtil.MathRounds(dItemTaxAmt, m_cPosStatus.Mst.VatRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.VatRudDwLoc));
//dItemTaxAmt = CmUtil.MathRounds(dItemTaxAmt, "2", CmUtil.IntParse("3"));//소수점 3째자리 무조건 버림
cPluItem.APPLY_TAX_AMT = dItemTaxAmt;
cPluItem.TAX_RATE = dTaxRate;
}
else if (cPluItem.TAX_AMT_INCLUDE_YN == ItemConst.MST_ITEM_TAX_AMT_INCLUDE_YN.INCLUDED) // 부가세 포함
{
//dItemTaxAmt = CmUtil.DoubleSubtraction(dTargetAmt, CmUtil.DoubleDivision(dTargetAmt, CmUtil.DoubleAdd(1, CmUtil.DoubleDivision(dTaxRate, 100))));
dItemTaxAmt = CmUtil.MathRounds(dItemTaxAmt, m_cPosStatus.Mst.VatRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.VatRudDwLoc));
cPluItem.APPLY_TAX_AMT = dItemTaxAmt;
cPluItem.TAX_RATE = dTaxRate;
}
else // N , 또는 설정 없음 일 경우 면세처리..
{
cPluItem.APPLY_TAX_AMT = 0;
cPluItem.TAX_RATE = 0;
}
#endregion
}
else//그 외는 국가는 기존 계산 방식과 동일
{
dItemTaxAmt = CmUtil.DoubleSubtraction(dTargetAmt, CmUtil.DoubleDivision(dTargetAmt, CmUtil.DoubleAdd(1, CmUtil.DoubleDivision(dTaxRate, 100))));
dItemTaxAmt = CmUtil.MathRounds(dItemTaxAmt, m_cPosStatus.Mst.VatRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.VatRudDwLoc));
cPluItem.APPLY_TAX_AMT = dItemTaxAmt;
cPluItem.TAX_RATE = dTaxRate;
}
//#2018.01.02;미주일 경우 부가세 포함, 미포함 옵션에 따라 계산식 다르게 처리;girak.kim;End
#endregion
}
else
{
cPluItem.APPLY_TAX_AMT = 0;
cPluItem.TAX_RATE = 0;
}
}
#endregion
}
}
ServiceChargeProc();
}
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;
}
/// <summary>
/// 봉사료 적용
/// </summary>
/// <returns></returns>
public bool ServiceChargeProc()
{
bool bRet = false;
try
{
ArrayList alTrPluItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);
IDataCommonUs m_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON);
double dBasicAmt = 0; //봉사료 대상 기준 금액
double dTargetAmt = 0; //봉사료 대상 금액
double dItemTaxAmt = 0; //봉사료 세금 금액
double dApplyAmt = 0; //봉사료 적용 금액
double dLastService = 0; //Service 짜투리 적용 금액
double dServiceMax = 0; //Service 최대값
int iServiceIdx = 0; //Service 최대값 인덱스
if (m_cPosStatus.Mst.SeriveFreeApplyDiv == ItemConst.SERVICE_CHARGE_APPLY_DIV.BILL)
{
//거래 합계 후 아이템 분배
#region
foreach (Column.TR_PLU.DATA cPluItem in alTrPluItem)
{
if (cPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.NORMAL && cPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.NORMAL && cPluItem.BILL_AMT > 0 && cPluItem.SVC_FEE_TRGT_YN == "1")
{
dBasicAmt = CmUtil.DoubleAdd(dBasicAmt, CmUtil.DoubleSubtraction(cPluItem.SALE_AMT, cPluItem.TOT_DC_AMT));
}
cPluItem.SVC_TAXREATE_CD = "";
cPluItem.SVC_FEE_AMT = 0;
cPluItem.SVC_FEE_VAT = 0;
}
if (dBasicAmt > 0)
{
dItemTaxAmt = 0;
//1-1. 적용 금액 체크
#region
if (m_cPosStatus.Mst.SeriveFreeDiv == ItemConst.SERVICE_CHARGE_DIV.RATE) //율
{
if (m_cPosStatus.Mst.SeriveFree > 0)
{
dTargetAmt = GetPercentageAmt(dBasicAmt, m_cPosStatus.Mst.SeriveFree, 1);
}
else
{
dTargetAmt = 0;
UserLog.WriteLogFile(UserCom.LOG_ERROR,System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().Name + "()","봉사료 적용 율 없음!");
}
}
else if (m_cPosStatus.Mst.SeriveFreeDiv == ItemConst.SERVICE_CHARGE_DIV.AMT) //금액
{
dTargetAmt = CmUtil.MathRounds(m_cPosStatus.Mst.SeriveFree, m_cPosStatus.Mst.ItemRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.ItemRudDwLoc));
}
#endregion
if (dTargetAmt > 0)
{
//1-2. 분배 처리
for (int iRow = 0; alTrPluItem.Count > iRow; iRow++)
{
#region
Column.TR_PLU.DATA cPluItem = (Column.TR_PLU.DATA)alTrPluItem[iRow];
if (cPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.NORMAL && cPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.NORMAL && cPluItem.SVC_FEE_TRGT_YN == "1")
{
cPluItem.SVC_FEE_AMT = GetPercentageDcAmt(dBasicAmt, CmUtil.DoubleSubtraction(cPluItem.SALE_AMT, cPluItem.TOT_DC_AMT), dTargetAmt, 1);
dApplyAmt = CmUtil.DoubleAdd(dApplyAmt, cPluItem.SVC_FEE_AMT);
if (dServiceMax == 0 || dServiceMax <= cPluItem.SVC_FEE_AMT)
{
dServiceMax = cPluItem.SVC_FEE_AMT;
iServiceIdx = iRow;
}
}
#endregion
}
//1-3. 짜투리 금액 계산
if (dTargetAmt != dApplyAmt)
{
#region
Column.TR_PLU.DATA tmpPluItem = (Column.TR_PLU.DATA)alTrPluItem[iServiceIdx];
dLastService = 0;
dLastService = CmUtil.DoubleSubtraction(dTargetAmt, dApplyAmt);
tmpPluItem.SVC_FEE_AMT = CmUtil.DoubleAdd(tmpPluItem.APPLY_TAX_AMT, dLastService);
//for (int iRow = alTrPluItem.Count - 1; iRow >= 0; iRow--)
//{
// Column.TR_PLU.DATA tmpPluItem = (Column.TR_PLU.DATA)alTrPluItem[iRow];
// if (tmpPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.NORMAL && tmpPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.NORMAL && tmpPluItem.SVC_FEE_TRGT_YN == "1")
// {
// tmpPluItem.SVC_FEE_AMT = CmUtil.DoubleAdd(tmpPluItem.SVC_FEE_AMT, CmUtil.DoubleSubtraction(dTargetAmt, dApplyAmt));
// break;
// }
//}
#endregion
}
// 2. 봉사료 부가세 처리
if (m_cPosStatus.Mst.SeriveFreeTaxAmtDiv != "")
{
#region
double dRate = m_cDataCommon.ItemTaxRate(m_cPosStatus.Mst.SeriveFreeTaxAmtDiv);
if (dRate > 0)
{
//상품 낱개별 처리후 거래합 적용
foreach (Column.TR_PLU.DATA cPluItem in alTrPluItem)
{
if (cPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.NORMAL && cPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.NORMAL && cPluItem.SVC_FEE_TRGT_YN == "1" && cPluItem.SVC_FEE_AMT > 0)
{
cPluItem.SVC_FEE_VAT = GetTaxAmt(cPluItem.SVC_FEE_AMT, dRate);
cPluItem.SVC_TAXREATE_CD = m_cPosStatus.Mst.SeriveFreeTaxAmtDiv;
}
}
}
#endregion
}
}
}
#endregion
}
else if (m_cPosStatus.Mst.SeriveFreeApplyDiv == ItemConst.SERVICE_CHARGE_APPLY_DIV.ITEM)
{
//아이템 계산 후 합계 적용
#region
//상품 낱개별 처리후 거래합 적용
foreach (Column.TR_PLU.DATA cPluItem in alTrPluItem)
{
dTargetAmt = 0;
dItemTaxAmt = 0;
if (cPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.NORMAL && cPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.NORMAL && cPluItem.SVC_FEE_TRGT_YN =="1")
{
//1. 적용 금액 체크
#region
if (m_cPosStatus.Mst.SeriveFreeDiv == ItemConst.SERVICE_CHARGE_DIV.RATE) //율
{
if (m_cPosStatus.Mst.SeriveFree > 0)
{
dTargetAmt = GetPercentageAmt(CmUtil.DoubleSubtraction(cPluItem.SALE_AMT, cPluItem.TOT_DC_AMT), m_cPosStatus.Mst.SeriveFree, 1);
}
else
{
dTargetAmt = 0;
UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "봉사료 적용 율 없음!");
}
}
else if (m_cPosStatus.Mst.SeriveFreeDiv == ItemConst.SERVICE_CHARGE_DIV.AMT) //금액
{
dTargetAmt = CmUtil.MathRounds(m_cPosStatus.Mst.SeriveFree, m_cPosStatus.Mst.ItemRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.ItemRudDwLoc));
}
#endregion
//2. 부가세 금액 체크
#region
if (m_cPosStatus.Mst.SeriveFreeTaxAmtDiv != "" && dTargetAmt > 0)
{
double dRate = m_cDataCommon.ItemTaxRate(m_cPosStatus.Mst.SeriveFreeTaxAmtDiv);
if (dRate > 0)
{
dItemTaxAmt = GetTaxAmt(cPluItem.SVC_FEE_AMT, dRate);
}
else
{
dItemTaxAmt = 0;
}
}
#endregion
}
cPluItem.SVC_FEE_AMT = dTargetAmt;
cPluItem.SVC_FEE_VAT = dItemTaxAmt;
if (cPluItem.SVC_FEE_VAT > 0)
cPluItem.SVC_TAXREATE_CD = m_cPosStatus.Mst.SeriveFreeTaxAmtDiv;
}
#endregion
}
else
{
// 미국의 경우 입력 받았을 때 처리!
if (m_cTrnStatus.Head.SvcFeeAmt > 0 || m_cTrnStatus.Head.SvcFeeAmt == -999)
{
#region
// -999면 등록 취소
if (m_cTrnStatus.Head.SvcFeeAmt == -999)
{
m_cTrnStatus.Head.SvcFeeAmt = 0;
//1-2. 분배 처리
foreach (Column.TR_PLU.DATA cPluItem in alTrPluItem)
{
if (cPluItem.SVC_FEE_AMT > 0 || cPluItem.SVC_FEE_VAT > 0)
{
cPluItem.SVC_TAXREATE_CD = "";
cPluItem.SVC_FEE_AMT = 0;
cPluItem.SVC_FEE_VAT = 0;
}
}
}
else
{
dApplyAmt = 0;
dTargetAmt = m_cTrnStatus.Head.SvcFeeAmt;
dBasicAmt = m_cTrnStatus.Head.NetSaleAmt;
//1-2. 분배 처리
#region
for (int iRow = 0; alTrPluItem.Count > iRow; iRow++)
{
Column.TR_PLU.DATA cPluItem = (Column.TR_PLU.DATA)alTrPluItem[iRow];
if (cPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.NORMAL && cPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.NORMAL)
{
cPluItem.SVC_FEE_AMT = GetPercentageDcAmt(dBasicAmt, CmUtil.DoubleSubtraction(cPluItem.SALE_AMT, cPluItem.TOT_DC_AMT), dTargetAmt, 1);
dApplyAmt = CmUtil.DoubleAdd(dApplyAmt, cPluItem.SVC_FEE_AMT);
if (dServiceMax == 0 || dServiceMax <= cPluItem.SVC_FEE_AMT)
{
dServiceMax = cPluItem.SVC_FEE_AMT;
iServiceIdx = iRow;
}
}
else
{
cPluItem.SVC_TAXREATE_CD = "";
cPluItem.SVC_FEE_AMT = 0;
}
}
#endregion
//1-3. 짜투리 금액 계산
#region
if (dTargetAmt != dApplyAmt)
{
Column.TR_PLU.DATA tmpPluItem = (Column.TR_PLU.DATA)alTrPluItem[iServiceIdx];
dLastService = 0;
dLastService = CmUtil.DoubleSubtraction(dTargetAmt, dApplyAmt);
tmpPluItem.SVC_FEE_AMT = CmUtil.DoubleAdd(tmpPluItem.APPLY_TAX_AMT, dLastService);
//for (int iRow = alTrPluItem.Count - 1; iRow >= 0; iRow--)
//{
// Column.TR_PLU.DATA tmpPluItem = (Column.TR_PLU.DATA)alTrPluItem[iRow];
// if (tmpPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.NORMAL && tmpPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.NORMAL)
// {
// tmpPluItem.SVC_FEE_AMT = CmUtil.DoubleAdd(tmpPluItem.SVC_FEE_AMT, CmUtil.DoubleSubtraction(dTargetAmt, dApplyAmt));
// break;
// }
//}
}
#endregion
// 2. 봉사료 부가세 처리
#region
if (m_cPosStatus.Mst.SeriveFreeTaxAmtDiv != "")
{
m_cTrnStatus.Head.SvcFeeVat = 0;
double dRate = m_cDataCommon.ItemTaxRate(m_cPosStatus.Mst.SeriveFreeTaxAmtDiv);
if (dRate > 0)
{
//상품 낱개별 처리후 거래합 적용
foreach (Column.TR_PLU.DATA cPluItem in alTrPluItem)
{
if (cPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.NORMAL && cPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.NORMAL && cPluItem.SVC_FEE_AMT > 0)
{
cPluItem.SVC_FEE_VAT = GetTaxAmt(cPluItem.SVC_FEE_AMT, dRate);
cPluItem.SVC_TAXREATE_CD = m_cPosStatus.Mst.SeriveFreeTaxAmtDiv;
m_cTrnStatus.Head.SvcFeeVat = CmUtil.DoubleAdd(m_cTrnStatus.Head.SvcFeeVat, cPluItem.SVC_FEE_VAT);
}
}
}
else
{
//상품 낱개별 처리후 거래합 적용
foreach (Column.TR_PLU.DATA cPluItem in alTrPluItem)
{
if (cPluItem.SVC_FEE_VAT > 0)
{
cPluItem.SVC_FEE_VAT = 0;
cPluItem.SVC_TAXREATE_CD = "";
}
}
}
}
#endregion
}
#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 bRet;
}
/// <summary>
/// 기준 대비 대상 율 구하기
/// </summary>
/// <param name="dBasic"></param>
/// <param name="dTarget"></param>
/// <param name="bPoint"></param>
/// <returns></returns>
public double GetPercentageRate(double dBasic, double dTarget, bool bPoint)
{
double bRate = 0;
try
{
bRate = CmUtil.DoubleMultiplication(CmUtil.DoubleDivision(dTarget, dBasic), bPoint == true ? 1 : 100);
}
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 bRate;
}
/// <summary>
/// 대상을 율로 값 구하기
/// </summary>
/// <param name="dTarget">대상</param>
/// <param name="dRate">율</param>
/// <param name="iCutFlag">1:금액배분절삭,2:부가세배분절삭,그외없음</param>
/// <returns></returns>
public double GetPercentageAmt(double dTarget, double dRate, int iCutFlag)
{
try
{
if (dRate > 1) dRate = CmUtil.DoubleDivision(dRate, 100);
double dRetValue = CmUtil.DoubleMultiplication(dTarget, dRate);
if (iCutFlag == 1) //금액 배분 절삭
{
dRetValue = CmUtil.MathRounds(dRetValue, m_cPosStatus.Mst.ItemRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.ItemRudDwLoc));
}
else if (iCutFlag == 2) //부가세 배분 절삭
{
dRetValue = CmUtil.MathRounds(dRetValue, m_cPosStatus.Mst.VatRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.VatRudDwLoc));
}
return dRetValue;
}
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;
}
/// <summary>
/// 최종기준 금액 구하기
/// </summary>
/// <param name="dBasic">기준</param>
/// <param name="dTarget">대상</param>
/// <param name="dDcAmt">최종기준</param>
/// <param name="iCutFlag">1:금액배분절삭,2:부가세배분절삭,그외없음</param>
/// <returns></returns>
public double GetPercentageDcAmt(double dBasic, double dTarget, double dLastBasic, int iCutFlag)
{
try
{
double dRetValue = CmUtil.DoubleMultiplication(dLastBasic, GetPercentageRate(dBasic, dTarget, true));
if (iCutFlag == 1) //금액 배분 절삭
{
dRetValue = CmUtil.MathRounds(dRetValue, m_cPosStatus.Mst.ItemRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.ItemRudDwLoc));
}
else if (iCutFlag == 2) //부가세 배분 절삭
{
dRetValue = CmUtil.MathRounds(dRetValue, m_cPosStatus.Mst.VatRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.VatRudDwLoc));
}
return dRetValue;
}
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 double GetTaxAmt(double dTarget, double dTaxRate)
{
try
{
if (dTaxRate > 1) dTaxRate = CmUtil.DoubleDivision(dTaxRate, 100);
double dRetValue = CmUtil.DoubleSubtraction(dTarget, CmUtil.DoubleDivision(dTarget, CmUtil.DoubleAdd(1, dTaxRate)));
dRetValue = CmUtil.MathRounds(dRetValue, m_cPosStatus.Mst.VatRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.VatRudDwLoc));
return dRetValue;
}
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 double GetPercentageDcAmt(double dBasic, double dTarget, double dDcRate)
//{
// double bRate = 0;
// try
// {
// if (dDcRate > 1) dDcRate = CmUtil.DoubleDivision(dDcRate, 100);
// // 기준 금액에 할인율 할인 금액 구하기!
// double dDcAmt = CmUtil.DoubleMultiplication(dBasic, dDcRate);
// // 기준 금액을 기준으로 대상 금액 할인율 구하기
// double dTargetDcRate = GetPercentage(dBasic, dTarget, true);
// // 할인 금액을 대상 금액 비율로 금액 구하기!
// bRate = CmUtil.DoubleMultiplication(dDcAmt, dTargetDcRate);
// }
// 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 bRate;
//}
/// <summary>
/// 문자열의 숫자(Int)로 변환
/// </summary>
/// <param name="sValue"></param>
/// <returns></returns>
public int IntParse(string sValue)
{
return (int)DoubleParse(sValue);
}
/// <summary>
/// 문자열의 숫자(Long)로 변환
/// </summary>
/// <param name="sValue"></param>
/// <returns></returns>
public long LongParse(string sValue)
{
return (long)DoubleParse(sValue);
}
/// <summary>
/// 문자열의 숫자(Double)로 변환
/// </summary>
/// <param name="sValue"></param>
/// <returns></returns>
public double DoubleParse(string sValue)
{
double dValue = 0;
try
{
if (sValue.Trim().Length > 0)
{
// 화폐 문자열 이면 글로벌 변환 처리
if (sValue.Trim().Contains(m_cPosStatus.Global.m_stCultureMaster.strGroupingSymbol) == true || sValue.Trim().Contains(m_cPosStatus.Global.m_stCultureMaster.strDecimalSymbol) == true)
dValue = m_cPosStatus.Global.CurrencyTONumeric(sValue.Trim());
else
dValue = double.Parse(sValue.Trim());
}
}
catch { }
return dValue;
}
/// <summary>
/// 전체 금액 대비 결제 금액 부가세 구하기
/// </summary>
/// <param name="dPayAmt"></param>
/// <returns></returns>
public double GetPaymentAmtVAT(double dPayAmt)
{
double dTax = 0;
try
{
dTax = m_cTrnStatus.Head.TotVatAmt * (dPayAmt / m_cTrnStatus.Head.NetSaleAmt);
dTax = CmUtil.MathRounds(dTax, m_cPosStatus.Mst.VatRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.VatRudDwLoc));
}
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 dTax;
}
}
}