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 거래정보 } /// /// 거래(TRAN) 합계금액 재계산 처리 /// 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); } } /// /// 상품행별 영수 금액 재계산 처리 /// 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); } } /// /// 거래(TRAN) 상품 합계금액 재계산 처리 /// public void UpdatePluAmount() { // 합계금액 재계산 처리 시 세금 계산 처리는 기본으로 처리 하도록 수정(2017/05/01) //UpdatePluAmount(false); UpdatePluAmount(true); } /// /// 거래(TRAN) 상품 합계금액 재계산 처리 /// 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); } } /// /// 거래(TRAN) 결제 합계금액 재계산 처리 /// 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); } } /// /// 모든 거래데이터 삭제 /// 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; } /// /// 거래 완료 후 처리 /// 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; } /// /// 거래해더 초기화 /// /// 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; } /// /// 트란해더 필수정보 재설정 /// 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); } } /// /// 거래 번호 증가 /// /// 전문순번증가여부 /// 등록번호증가여부 /// 거래번호증가여부 /// 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 현금영수증 승인 금액 계산 /// /// 현금영수증 승인 금액 계산 /// /// 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 /// /// 할인 금액 획득 /// /// /// /// /// /// /// /// /// /// 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 할인, 적립 대상 금액 획득 /// /// 할인, 적립 대상 금액 획득 /// /// /// 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 해당 상품이 할인 적립 가능한지 체크 /// /// 해당 상품이 할인 적립 가능한지 체크 /// /// /// true:가능, false:불가 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 /// /// 상품 부가세 계산 처리 /// /// 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; } /// /// 봉사료 적용 /// /// 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; } /// /// 기준 대비 대상 율 구하기 /// /// /// /// /// 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; } /// /// 대상을 율로 값 구하기 /// /// 대상 /// 율 /// 1:금액배분절삭,2:부가세배분절삭,그외없음 /// 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; } /// /// 최종기준 금액 구하기 /// /// 기준 /// 대상 /// 최종기준 /// 1:금액배분절삭,2:부가세배분절삭,그외없음 /// 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; //} /// /// 문자열의 숫자(Int)로 변환 /// /// /// public int IntParse(string sValue) { return (int)DoubleParse(sValue); } /// /// 문자열의 숫자(Long)로 변환 /// /// /// public long LongParse(string sValue) { return (long)DoubleParse(sValue); } /// /// 문자열의 숫자(Double)로 변환 /// /// /// 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; } /// /// 전체 금액 대비 결제 금액 부가세 구하기 /// /// /// 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; } } }