using System;
using System.Text;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.Collections;
using Cosmos.Win;
using Cosmos.BaseFrame;
using Cosmos.UserFrame;
using Cosmos.ServiceProvider;
using Cosmos.Common;
using Cosmos.CommonManager;
using Cosmos.UI;
/*-----------------------------------------------------------------------------------------------*/
// 설 명 : 묶음상품/쇼킹박스
// 작 성 자 :
// 변경 이력 :
/*-----------------------------------------------------------------------------------------------*/
namespace Cosmos.Win
{
public partial class frmBundleiTem : Form
{
#region 변수 선언
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 DeviceStatus m_cDevStatus = new DeviceStatus(); // 디바이스 관리
private PosOLEDevice.DelegateOlePos delegatePos;
private IICReaderUs m_cDeviceICReader = null;
private IDataCommonUs m_cDataCommon = null; // POS 공통함수 인터페이스
private IDataProcessUs m_cDataService = null;
private ISalePluItemUs m_cPluService = null; // 판매 등록 관리
private string m_sPosMenuKeyIn;
public string PosMenuKeyIn { set { m_sPosMenuKeyIn = value; } get { return m_sPosMenuKeyIn; } }
private string m_sPosMenuKeyOut;
public string PosMenuKeyOut { set { m_sPosMenuKeyOut = value; } get { return m_sPosMenuKeyOut; } }
private bool bNotDoubleClik = false; // 더블 클릭 방지용
private string m_sPosMenuKey; // 입력코드
///
/// 할인 구분
///
public string SetPosMenuKey { set { this.m_sPosMenuKey = value; } }
///
/// 입력구분
///
private string m_sInPutType = "";
///
/// 입력데이터
///
private string m_sInPutData = "";
///
/// 카드데이터
///
private string m_sInEncData = "";
///
/// 등록 상품 리스트 데이터
///
private DataTable m_dtcglAlliTem;
///
/// 선택 상품 리스트 데이터
///
private DataTable m_dtcglBundleiTem;
#endregion 변수 선언
#region 생성자 & 소멸자 & 폼초기화
public frmBundleiTem()
{
InitializeComponent();
base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw, true);
//this.UpdateStyles();
m_cPosStatus = (PosStatus)StateObject.POS; // POS 기본정보
m_cTrnStatus = (TranStatus)StateObject.TRAN; // POS 거래정보
m_cDevStatus = (DeviceStatus)StateObject.DEVICE;
m_cDataService = (IDataProcessUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_SERVICE);
m_cDeviceICReader = (IICReaderUs)sManager.InitServiceInstance(ServiceLists.AGENT_OLEDEVICE.DLL, ServiceLists.AGENT_OLEDEVICE.DEVICE_ICREADER);
m_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON);
m_cPluService = (ISalePluItemUs)sManager.InitServiceInstance(ServiceLists.BSV_SALE.DLL, ServiceLists.BSV_SALE.SALE_PLU_ITEM);
delegatePos = new PosOLEDevice.DelegateOlePos(OnDeviceEvent);
}
private void frmBundleiTem_Load(object sender, EventArgs e)
{
UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "");
InitControl();
}
private void frmBundleiTem_Activated(object sender, EventArgs e)
{
PosOLEDevice.SetEventHandle(delegatePos);
}
private void frmBundleiTem_Deactivate(object sender, EventArgs e)
{
PosOLEDevice.SetEventHandle(null);
}
private void frmBundleiTem_FormClosing(object sender, FormClosingEventArgs e)
{
UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", lblTitle.Text);
}
///
/// 폼 컨트롤 초기화
///
private void InitControl()
{
try
{
// 이미지 로딩 처리
//this.Size = new Size(800, 544);
//this.Location = new Point(110, 173);
picBack.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.POP_SIZE_800X600);
FormManager.SetFormAllControlFont(this, m_cPosStatus.Base.FONT);
FormManager.SetTextBoxGlobalInfo(this, m_cPosStatus.Global.m_stCultureMaster.nGroupingDigits, m_cPosStatus.Global.m_stCultureMaster.strGroupingSymbol
, m_cPosStatus.Global.m_stCultureMaster.nDecimalDigits, m_cPosStatus.Global.m_stCultureMaster.strDecimalSymbol);
//테마색상 적용!
padInPut.ThemeColor = m_cPosStatus.ScnMst.ThemeColor;
padInPut.ClearBtnText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0817);
padInPut.SearchBtnText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_1018);
btnAllUp.DefaultImage = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_210X48_UP1_BASIC);
btnAllUp.ClickImage = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_210X48_UP1_PRESS);
btnAllDw.DefaultImage = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_210X48_DOWN1_BASIC);
btnAllDw.ClickImage = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_210X48_DOWN1_PRESS);
btnBudleUp.DefaultImage = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_210X48_UP1_BASIC);
btnBudleUp.ClickImage = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_210X48_UP1_PRESS);
btnBudleDw.DefaultImage = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_210X48_DOWN1_BASIC);
btnBudleDw.ClickImage = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.NAVIBTN_210X48_DOWN1_PRESS);
btnExit.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.BTN_CLOSE);
if (btnExit.Image != null) btnExit.Text = "";
// 묶음상품/쇼킹박스
if (m_sPosMenuKey == PosKey.MENU_KEY.DC_COUPONS) lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0373);
//2017.12.20;타이틀 다국어 처리: WinPay.cs 에서 FORM_SAL_BUNDLE_ITEM 라인에서 호출 시 m_sPosMenuKey 값을 설정하는 부분이 없어 미주만 lblTitle 메시지 분기 처리 Start
if (m_cPosStatus.Mst.CntryDiv == ItemConst.CNTRY_DIV.US)//if (m_cPosStatus.Base.CmpCd.ToUpper().Equals(PosConst.POS_COMPANY_CODE.PCUS))
{
lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0373);
}
//2017.12.20;타이틀 다국어 처리: WinPay.cs 에서 FORM_SAL_BUNDLE_ITEM 라인에서 호출 시 m_sPosMenuKey 값을 설정하는 부분이 없어 미주만 lblTitle 메시지 분기 처리 End
lblPayAmt.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0374); // 선택금액
lblSaleAmt.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0348); // 판매금액
//btnAddAll.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0375); // 추가(수량전체)
//btnAddOne.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0376); // 추가(수랑1개)
btnAddAll.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0226); // 전체
btnAddOne.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0224); // 추가
btnDelete.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0021); // 삭제
btnComplete.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0380); // 묶음적용
btnCancel.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0381); // 묶음취소
txtSaleAmt.Text = "0";
txtSaleAmt.Value = "0";
//txtPayAmt.Text = m_cPosStatus.Global.NumericTOCurrency(m_cTrnStatus.Sale.RemainPayAmt); // 선택금액
txtPayAmt.Text = "0";
m_sInPutType = ""; // 입력구분
m_sInPutData = ""; // 입력데이터
m_sInEncData = ""; // 카드데이터
bNotDoubleClik = false;
DataGridSetting(0); // 그리드 초기화
txtSaleAmt.Select();
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
}
#endregion
#region 버튼 입력 처리
///
/// 버튼 입력 처리
///
///
///
private void btnProc_Click(object sender, EventArgs e)
{
string sRet = UserCom.RST_ERR;
try
{
if (bNotDoubleClik) return;
bNotDoubleClik = true;
if ((UI.CsmButton)sender == btnAllUp) // 상단 그리드 Up
{
cglAlliTem.CsmGridScroll("UP");
}
else if ((UI.CsmButton)sender == btnAllDw) // 상단 그리드 Down
{
cglAlliTem.CsmGridScroll("DOWN");
}
else if ((UI.CsmButton)sender == btnBudleUp) // 하단 그리드 Up
{
cgdBundleiTem.CsmGridScroll("UP");
}
else if ((UI.CsmButton)sender == btnBudleDw) // 하단 그리드 Down
{
cgdBundleiTem.CsmGridScroll("DOWN");
}
else if (((Cosmos.UI.CsmButton)sender) == btnAddAll) // 전체
{
sRet = DataGridSetting(1);
bNotDoubleClik = false;
if (sRet != UserCom.RST_OK) return;
}
else if (((Cosmos.UI.CsmButton)sender) == btnAddOne) // 추가
{
sRet = DataGridSetting(2);
bNotDoubleClik = false;
if (sRet != UserCom.RST_OK) return;
}
else if (((Cosmos.UI.CsmButton)sender) == btnDelete) // 삭제
{
sRet = DataGridSetting(3);
bNotDoubleClik = false;
if (sRet != UserCom.RST_OK) return;
}
else if (((Cosmos.UI.CsmButton)sender) == btnComplete) // 묶음적용
{
sRet = CompleteTxtInPut();
bNotDoubleClik = false;
if (sRet != UserCom.RST_OK) return;
this.DialogResult = DialogResult.OK;
this.Close();
}
else if (((Cosmos.UI.CsmButton)sender) == btnCancel) // 묶음취소
{
sRet = GetSaleItemSetDCCancel();
bNotDoubleClik = false;
if (sRet != UserCom.RST_OK) return;
this.DialogResult = DialogResult.OK;
this.Close();
}
padInPut.SetActiveFocus();
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
bNotDoubleClik = false;
}
bNotDoubleClik = false;
}
///
/// 닫기
///
///
///
private void btnExit_Click(object sender, EventArgs e)
{
try
{
txtEditBox_EditBoxKeyDownEvent(null, PosKey.MENU_KEY.ESC_PREVIOUS);
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
}
#endregion
#region 텍스트박스 키 입력 이벤트 처리
///
/// 텍스트박스 키 입력 이벤트 처리
///
///
///
private void txtEditBox_EditBoxKeyDownEvent(object sender, string sFuncValue)
{
try
{
if (sFuncValue == PosKey.MENU_KEY.ENTER)
{
btnProc_Click(btnComplete, null);
}
else if (sFuncValue == PosKey.MENU_KEY.CLEAR)
{
if (((Cosmos.UI.CsmPosEditBox)sender).ReadOnly == false) ((Cosmos.UI.CsmPosEditBox)sender).Text = "";
if (((Cosmos.UI.CsmPosEditBox)sender) == txtSaleAmt)
{
m_sInPutType = "";
m_sInPutData = "";
m_sInEncData = "";
txtSaleAmt.ReadOnly = false;
}
}
else if (sFuncValue == PosKey.MENU_KEY.ESC_PREVIOUS)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
}
///
/// 텍스트박스 활성화 처리
///
///
///
private void txtEditBox_EnterEvent(object sender, EventArgs e)
{
try
{
padInPut.SetActiveControl = (Control)sender;
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
}
#endregion
#region 텍스트박스 입력 유효성 체크
///
/// 텍스트박스 입력 유효성 체크
///
///
///
private bool CheckTxtInPut(object sender)
{
try
{
if (txtSaleAmt.Value.Length > 10 || m_cDataService.DoubleParse(txtSaleAmt.Value) <= 0)
{
WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0036);
txtSaleAmt.Focus();
return false;
}
if (CmUtil.AmountCut(m_cDataService.DoubleParse(txtSaleAmt.Value), CmUtil.IntParse(m_cPosStatus.Mst.PayRudDwLoc)) != m_cDataService.DoubleParse(txtSaleAmt.Value))
{
WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0036);
txtSaleAmt.Focus();
return false;
}
// 받을금액 체크
if (m_cDataService.DoubleParse(txtPayAmt.Text) <= 0)
{
WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0034);
txtSaleAmt.Focus();
return false;
}
// 판매금액과 받을금액 체크
if (m_cDataService.DoubleParse(txtSaleAmt.Text) > m_cDataService.DoubleParse(txtPayAmt.Text))
{
WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0035);
txtSaleAmt.Focus();
return false;
}
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
return false;
}
return true;
}
#endregion
#region 텍스트박스 입력 완료 처리
///
/// 할인 처리
///
///
///
private string CompleteTxtInPut()
{
string sRet = UserCom.RST_ERR;
try
{
if (cgdBundleiTem.CsmGridRowsCount <= 0) return UserCom.RST_OK;
if (CheckTxtInPut(null) != true) return sRet;
sRet = GetSaleItemSetDC(m_cDataService.DoubleParse(txtSaleAmt.Value));
if (sRet != UserCom.RST_OK) return sRet;
}
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 sRet;
}
#endregion
#region DeviceEvent 관련
///
/// DeviceEvent 관련
///
///
///
///
///
public void OnDeviceEvent(string sDevice, string sData1, string sData2, string sData3)
{
try
{
switch (sDevice)
{
case PosConst.OPOS_DEVICE.MSR:
this.Invoke(new EventHandler(OnMSREvent));
break;
case PosConst.OPOS_DEVICE.SCANNER:
this.Invoke(new EventHandler(OnScannerEvent));
break;
}
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
}
///
/// MSR Event
///
///
///
private void OnMSREvent(object source, EventArgs e)
{
}
///
/// 스캐너 이벤트 처리
///
///
///
private void OnScannerEvent(object source, EventArgs e)
{
}
///
/// 카드 번호 암호화
///
///
///
///
///
private string EncryptedCardNo(string sInData, ref string sCardData, ref string sCardNo)
{
string sEncData = sInData;
try
{
if (sInData.Length <= 0) return "";
sEncData = m_cDeviceICReader.GetEncryptedCardNo(sInData).Trim();
if (CmUtil.MidH(sEncData, 0, 2) == "00")
{
sCardData = CmUtil.MidH(sEncData, 2, 512).Trim();
sCardNo = CmUtil.MidH(sEncData, 514, sEncData.Length - 514).Trim();
}
else
{
//암호화 처리 실패!
UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Fail =>" + sInData);
}
}
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 sEncData;
}
///
/// IC 카드 정보 입력 처리
///
///
private bool GetIcCardData()
{
try
{
m_sInPutType = "";
m_sInPutData = "";
m_sInEncData = "";
txtSaleAmt.Value = "";
txtSaleAmt.ReadOnly = false;
string sRsvStr = "";
if (m_cDeviceICReader.GetCardInfo_ICReader(PosConst.IC_READER_TRAN_TYPE.POINT, 1, ref sRsvStr) == true)
{
if (CmUtil.MidH(sRsvStr, 0, 2) == "00")
{
m_sInEncData = CmUtil.MidH(sRsvStr, 6, 512).Trim();
m_sInPutData = CmUtil.MidH(sRsvStr, 1030, 37).Trim();
m_sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_SWIP;
txtSaleAmt.Value = m_sInPutData;
txtSaleAmt.ReadOnly = true;
return true;
}
}
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
return false;
}
#endregion
#region 그리드 설정 및 사용
private string DataGridSetting(int index)
{
string sRet = UserCom.RST_ERR;
try
{
switch (index)
{
case 0:
#region 초기화
{
// ------------------------------------------------------------------------------------------------------------------------
// 상단 그리드
// ------------------------------------------------------------------------------------------------------------------------
// 초기화
cglAlliTem.CsmGridColumnHeadersFont = new Font(m_cPosStatus.Base.FONT, 9, FontStyle.Bold);
cglAlliTem.Font = new Font(m_cPosStatus.Base.FONT, 9, FontStyle.Regular);
//DataGridView 자체의 컬럼 헤더 Visible 여부
cglAlliTem.CsmGridColumnHeadersVisible = true;
//DataGridView 자체의 컬럼 헤더 높이
cglAlliTem.CsmGridColumnHeadersHeight = 33;
cglAlliTem.CsmGridRowsHeight = 35;
//그리드의 컬럼 수
cglAlliTem.CsmGridColumnCount = 14;
//그리드의 한 화면에 보이는 로우수
cglAlliTem.CsmGridShowPageRowsCount = 4;
cglAlliTem.CsmGridSetHeaderBackColor(236, 238, 239); //그리드 헤더 배경색
cglAlliTem.CsmGridDefaultRowBackColor = Color.FromArgb(255, 255, 255); //그리드 홀수(Default)행의 배경색 지정
cglAlliTem.CsmGridAlternateRowBackColor = Color.FromArgb(251, 253, 255); //그리드 짝수(Alternate)행의 배경색 지정
cglAlliTem.CsmGridBackGroundColor = Color.FromArgb(251, 253, 255); //기본 백그라운드 컬러
cglAlliTem.CsmGridHighlightColor = Color.FromArgb(255, 251, 211); //그리드 선택 백 컬러
cglAlliTem.CsmGridHighlightTextColor = Color.Black; //그리드 선택 글자 컬러
//각 컬럼별 이름 지정
cglAlliTem.CsmGridColumnName(0, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0014));
cglAlliTem.CsmGridColumnName(1, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0178));
cglAlliTem.CsmGridColumnName(2, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0015));
cglAlliTem.CsmGridColumnName(3, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0017));
cglAlliTem.CsmGridColumnName(4, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0348));
cglAlliTem.CsmGridColumnName(5, "");
cglAlliTem.CsmGridColumnName(6, "");
cglAlliTem.CsmGridColumnName(7, "");
cglAlliTem.CsmGridColumnName(8, "");
cglAlliTem.CsmGridColumnName(9, "");
cglAlliTem.CsmGridColumnName(10, "");
cglAlliTem.CsmGridColumnName(11, "");
cglAlliTem.CsmGridColumnName(12, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0036));
cglAlliTem.CsmGridColumnName(13, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_1023));
cglAlliTem.CsmGridColumnShowHide(3, false);
cglAlliTem.CsmGridColumnShowHide(5, false);
cglAlliTem.CsmGridColumnShowHide(6, false);
cglAlliTem.CsmGridColumnShowHide(7, false);
cglAlliTem.CsmGridColumnShowHide(8, false);
cglAlliTem.CsmGridColumnShowHide(9, false);
cglAlliTem.CsmGridColumnShowHide(10, false);
cglAlliTem.CsmGridColumnShowHide(11, false);
//컬럼넓이 지정(420)
//cglAlliTem.CsmGridSetColumnWidth(new int[] { 45, 90, 124, 60, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0 });
cglAlliTem.CsmGridSetColumnWidth(new int[] { 35, 0, 124, 0, 90, 0, 0, 0, 0, 0, 0, 0, 85, 85 });
//컬럼 정렬 0:왼쪽, 1:가운데, 2:오른쪽
cglAlliTem.CsmGridAlignment(new int[] { 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 });
m_dtcglAlliTem = new DataTable("GRID_LIST");
m_dtcglAlliTem.Columns.Add(new DataColumn("NO", typeof(string)));
m_dtcglAlliTem.Columns.Add(new DataColumn("ITEMCD", typeof(string)));
m_dtcglAlliTem.Columns.Add(new DataColumn("ITEMNM", typeof(string)));
m_dtcglAlliTem.Columns.Add(new DataColumn("QTY", typeof(string)));
m_dtcglAlliTem.Columns.Add(new DataColumn("AMOUNT", typeof(string)));
m_dtcglAlliTem.Columns.Add(new DataColumn("ITEM_DIV", typeof(string)));
m_dtcglAlliTem.Columns.Add(new DataColumn("DC_PRMT_YN", typeof(string)));
m_dtcglAlliTem.Columns.Add(new DataColumn("COST", typeof(string)));
m_dtcglAlliTem.Columns.Add(new DataColumn("SEQ", typeof(string)));
m_dtcglAlliTem.Columns.Add(new DataColumn("UPDATE", typeof(string)));
m_dtcglAlliTem.Columns.Add(new DataColumn("SET_DC_AMT", typeof(string)));
m_dtcglAlliTem.Columns.Add(new DataColumn("ORDER_OK_FLAG", typeof(string)));
m_dtcglAlliTem.Columns.Add(new DataColumn("TOT_DC_AMT", typeof(string)));
m_dtcglAlliTem.Columns.Add(new DataColumn("EXCEP_DC_AMT", typeof(string)));
m_dtcglAlliTem.Clear();
// ------------------------------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------------------------------
// 하단 그리드
// ------------------------------------------------------------------------------------------------------------------------
// 초기화
cgdBundleiTem.CsmGridColumnHeadersFont = new Font(m_cPosStatus.Base.FONT, 9, FontStyle.Bold);
cgdBundleiTem.Font = new Font(m_cPosStatus.Base.FONT, 9, FontStyle.Regular);
//DataGridView 자체의 컬럼 헤더 Visible 여부
cgdBundleiTem.CsmGridColumnHeadersVisible = true;
//DataGridView 자체의 컬럼 헤더 높이
cgdBundleiTem.CsmGridColumnHeadersHeight = 34;
cgdBundleiTem.CsmGridRowsHeight = 35;
//그리드의 컬럼 수
cgdBundleiTem.CsmGridColumnCount = 14;
//그리드의 한 화면에 보이는 로우수
cgdBundleiTem.CsmGridShowPageRowsCount = 4;
cgdBundleiTem.CsmGridSetHeaderBackColor(236, 238, 239); //그리드 헤더 배경색
cgdBundleiTem.CsmGridDefaultRowBackColor = Color.FromArgb(255, 255, 255); //그리드 홀수(Default)행의 배경색 지정
cgdBundleiTem.CsmGridAlternateRowBackColor = Color.FromArgb(251, 253, 255); //그리드 짝수(Alternate)행의 배경색 지정
cgdBundleiTem.CsmGridBackGroundColor = Color.FromArgb(251, 253, 255); //기본 백그라운드 컬러
cgdBundleiTem.CsmGridHighlightColor = Color.FromArgb(255, 251, 211); //그리드 선택 백 컬러
cgdBundleiTem.CsmGridHighlightTextColor = Color.Black; //그리드 선택 글자 컬러
//각 컬럼별 이름 지정
cgdBundleiTem.CsmGridColumnName(0, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0014));
cgdBundleiTem.CsmGridColumnName(1, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0178));
cgdBundleiTem.CsmGridColumnName(2, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0015));
cgdBundleiTem.CsmGridColumnName(3, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0017));
cgdBundleiTem.CsmGridColumnName(4, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0348));
cgdBundleiTem.CsmGridColumnName(5, "");
cgdBundleiTem.CsmGridColumnName(6, "");
cgdBundleiTem.CsmGridColumnName(7, "");
cgdBundleiTem.CsmGridColumnName(8, "");
cgdBundleiTem.CsmGridColumnName(9, "");
cgdBundleiTem.CsmGridColumnName(10, "");
cgdBundleiTem.CsmGridColumnName(11, "");
cgdBundleiTem.CsmGridColumnName(12, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0036));
cgdBundleiTem.CsmGridColumnName(13, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_1023));
cgdBundleiTem.CsmGridColumnShowHide(3, false);
cgdBundleiTem.CsmGridColumnShowHide(5, false);
cgdBundleiTem.CsmGridColumnShowHide(6, false);
cgdBundleiTem.CsmGridColumnShowHide(7, false);
cgdBundleiTem.CsmGridColumnShowHide(8, false);
cgdBundleiTem.CsmGridColumnShowHide(9, false);
cgdBundleiTem.CsmGridColumnShowHide(10, false);
cgdBundleiTem.CsmGridColumnShowHide(11, false);
//컬럼넓이 지정(406)
//cgdBundleiTem.CsmGridSetColumnWidth(new int[] { 45, 90, 124, 60, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0 });
cgdBundleiTem.CsmGridSetColumnWidth(new int[] { 35, 0, 124, 0, 90, 0, 0, 0, 0, 0, 0, 0, 85, 85 });
//컬럼 정렬 0:왼쪽, 1:가운데, 2:오른쪽
cgdBundleiTem.CsmGridAlignment(new int[] { 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 });
m_dtcglBundleiTem = new DataTable("GRID_BUNDLE_LIST");
m_dtcglBundleiTem.Columns.Add(new DataColumn("NO", typeof(string)));
m_dtcglBundleiTem.Columns.Add(new DataColumn("ITEMCD", typeof(string)));
m_dtcglBundleiTem.Columns.Add(new DataColumn("ITEMNM", typeof(string)));
m_dtcglBundleiTem.Columns.Add(new DataColumn("QTY", typeof(string)));
m_dtcglBundleiTem.Columns.Add(new DataColumn("AMOUNT", typeof(string)));
m_dtcglBundleiTem.Columns.Add(new DataColumn("ITEM_DIV", typeof(string)));
m_dtcglBundleiTem.Columns.Add(new DataColumn("DC_PRMT_YN", typeof(string)));
m_dtcglBundleiTem.Columns.Add(new DataColumn("COST", typeof(string)));
m_dtcglBundleiTem.Columns.Add(new DataColumn("SEQ", typeof(string)));
m_dtcglBundleiTem.Columns.Add(new DataColumn("UPDATE", typeof(string)));
m_dtcglBundleiTem.Columns.Add(new DataColumn("SET_DC_AMT", typeof(string)));
m_dtcglBundleiTem.Columns.Add(new DataColumn("ORDER_OK_FLAG", typeof(string)));
m_dtcglBundleiTem.Columns.Add(new DataColumn("TOT_DC_AMT", typeof(string)));
m_dtcglBundleiTem.Columns.Add(new DataColumn("EXCEP_DC_AMT", typeof(string)));
m_dtcglBundleiTem.Clear();
// ------------------------------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------------------------------
// 상품정보 (정상-묶음제외)
// ------------------------------------------------------------------------------------------------------------------------
ArrayList aSaleItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);
for (int iLoop = 0; iLoop < aSaleItem.Count; iLoop++)
{
Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)aSaleItem[iLoop];
if (cSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue; // 지정취소
if (cSaleItem.DC_DIV == ItemConst.PLU_DC_DIV.FREE) continue;
if (cSaleItem.SET_DC_AMT > 0) continue;
DataRow drNewRow = m_dtcglAlliTem.NewRow();
if (cSaleItem.ITEM_DIV == ItemConst.PLU_ITEM_DIV.OPT_MENU || cSaleItem.ITEM_DIV == ItemConst.PLU_ITEM_DIV.SET_DETL || cSaleItem.ITEM_DIV == ItemConst.PLU_ITEM_DIV.SET_MAIN)
{
drNewRow["NO"] = "";
}
else
{
drNewRow["NO"] = SelectMaxNo(m_dtcglAlliTem).ToString();
}
drNewRow["ITEMCD"] = cSaleItem.ITEM_PLU_CD; // 상품코드
drNewRow["ITEMNM"] = cSaleItem.ITEM_NAME; // 상품명
drNewRow["QTY"] = m_cPosStatus.Global.NumericToQuantity(cSaleItem.SALE_QTY); // 수량
drNewRow["AMOUNT"] = m_cPosStatus.Global.NumericTOCurrency(cSaleItem.BILL_AMT); // 판매금액
drNewRow["ITEM_DIV"] = cSaleItem.ITEM_DIV; // 부가상품
drNewRow["DC_PRMT_YN"] = cSaleItem.DC_PRMT_YN; // 할인불가
drNewRow["COST"] = cSaleItem.SALE_PRC; // 단가
drNewRow["SEQ"] = iLoop; // Seq
drNewRow["UPDATE"] = ""; // 변경구분
drNewRow["SET_DC_AMT"] = cSaleItem.SET_DC_AMT; // 세트할인금액
drNewRow["ORDER_OK_FLAG"] = cSaleItem.ORDER_OK_FLAG; // 주문완료 상태
drNewRow["TOT_DC_AMT"] = m_cPosStatus.Global.NumericTOCurrency(CmUtil.DoubleAdd(cSaleItem.ITEM_DC_AMT, cSaleItem.CPI_DC_AMT)); // 적용된 할인
drNewRow["EXCEP_DC_AMT"] = cSaleItem.EXCEP_DC_AMT; // 예외할인
m_dtcglAlliTem.Rows.Add(drNewRow);
}
cglAlliTem.CsmGridDataSource = m_dtcglAlliTem;
cglAlliTem.CsmGridSelectRow(0);
// ------------------------------------------------------------------------------------------------------------------------
m_dtcglBundleiTem.Clear();
// ------------------------------------------------------------------------------------------------------------------------
// 상품정보 (묶음만)
// ------------------------------------------------------------------------------------------------------------------------
aSaleItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);
for (int iLoop = 0; iLoop < aSaleItem.Count; iLoop++)
{
Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)aSaleItem[iLoop];
if (cSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue; // 지정취소
if (cSaleItem.DC_DIV == ItemConst.PLU_DC_DIV.FREE) continue;
if (cSaleItem.SET_DC_AMT <= 0) continue;
DataRow drNewRow = m_dtcglBundleiTem.NewRow();
if (cSaleItem.ITEM_DIV == ItemConst.PLU_ITEM_DIV.OPT_MENU || cSaleItem.ITEM_DIV == ItemConst.PLU_ITEM_DIV.SET_DETL || cSaleItem.ITEM_DIV == ItemConst.PLU_ITEM_DIV.SET_MAIN)
{
drNewRow["NO"] = "";
}
else
{
drNewRow["NO"] = SelectMaxNo(m_dtcglBundleiTem).ToString();
}
drNewRow["ITEMCD"] = cSaleItem.ITEM_PLU_CD; // 상품코드
drNewRow["ITEMNM"] = cSaleItem.ITEM_NAME; // 상품명
drNewRow["QTY"] = m_cPosStatus.Global.NumericTOCurrency(cSaleItem.SALE_QTY); // 수량
drNewRow["AMOUNT"] = m_cPosStatus.Global.NumericTOCurrency(cSaleItem.BILL_AMT); // 판매금액
drNewRow["ITEM_DIV"] = cSaleItem.ITEM_DIV; // 부가상품
drNewRow["DC_PRMT_YN"] = cSaleItem.DC_PRMT_YN; // 할인불가
drNewRow["COST"] = cSaleItem.SALE_PRC; // 단가
drNewRow["SEQ"] = iLoop; // Seq
drNewRow["UPDATE"] = ""; // 변경구분
drNewRow["SET_DC_AMT"] = m_cPosStatus.Global.NumericTOCurrency(cSaleItem.SET_DC_AMT); // 세트할인금액
drNewRow["ORDER_OK_FLAG"] = cSaleItem.ORDER_OK_FLAG; // 주문완료 상태
drNewRow["TOT_DC_AMT"] = m_cPosStatus.Global.NumericTOCurrency(CmUtil.DoubleAdd(cSaleItem.SET_DC_AMT, cSaleItem.CPI_DC_AMT)); // 적용된 할인
drNewRow["EXCEP_DC_AMT"] = m_cPosStatus.Global.NumericTOCurrency(cSaleItem.EXCEP_DC_AMT); // 예외할인
m_dtcglBundleiTem.Rows.Add(drNewRow);
}
cgdBundleiTem.CsmGridDataSource = m_dtcglBundleiTem;
cgdBundleiTem.CsmGridSelectRow(0);
// ------------------------------------------------------------------------------------------------------------------------
break;
}
#endregion
case 1:
#region 전체 추가
// 전체
{
//int iRow = cglAlliTem.CsmGridSelectedRowIndex;
//if (cglAlliTem.CsmGridRowsCount <= 0) break;
//if (m_dtcglAlliTem.Rows[iRow]["ITEM_DIV"].ToString() == ItemConst.PLU_ITEM_DIV.OPT_MENU
// || m_dtcglAlliTem.Rows[iRow]["ITEM_DIV"].ToString() == ItemConst.PLU_ITEM_DIV.SET_DETL
// || m_dtcglAlliTem.Rows[iRow]["ITEM_DIV"].ToString() == ItemConst.PLU_ITEM_DIV.SET_MAIN)
//{
// WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0305);
// break;
//}
//if (m_dtcglAlliTem.Rows[iRow]["ORDER_OK_FLAG"].ToString() != PosConst.PLU_ORDER_OK_FLAG.ORDER_ING)
//{
// WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0306);
// break;
//}
if (cglAlliTem.CsmGridRowsCount > 0)
{
//int iMaxCnt = cglAlliTem.CsmGridRowsCount;
int iMaxCnt = 0;
// 부가상품, 세트자식을 제외한 수량 체크
for (int iLoop = 0; iLoop < cglAlliTem.CsmGridRowsCount; iLoop++)
{
if (m_dtcglAlliTem.Rows[iLoop]["ITEM_DIV"].ToString() != ItemConst.PLU_ITEM_DIV.OPT_MENU && m_dtcglAlliTem.Rows[iLoop]["ITEM_DIV"].ToString() != ItemConst.PLU_ITEM_DIV.SET_DETL)
{
iMaxCnt++;
}
}
// 기존 할인이 있는지 확인
for (int iLoop = 0; iLoop < cglAlliTem.CsmGridRowsCount; iLoop++)
{
if (CmUtil.LongParse(m_dtcglAlliTem.Rows[iLoop]["TOT_DC_AMT"].ToString()) > 0)
{
if (WinManager.QuestionMessage(POS_MESSAGE.ERROR.MSG_0680) == false)
{
return sRet;
}
break;
}
}
bool bAdd = false;
int iRow = 0;
for (int iLoop = 0; iLoop < iMaxCnt; iLoop++)
{
double aaa = m_cDataService.DoubleParse(m_dtcglAlliTem.Rows[iRow]["AMOUNT"].ToString());
if (m_dtcglAlliTem.Rows[iRow]["ITEM_DIV"].ToString() == ItemConst.PLU_ITEM_DIV.OPT_MENU
|| m_dtcglAlliTem.Rows[iRow]["ITEM_DIV"].ToString() == ItemConst.PLU_ITEM_DIV.SET_DETL
|| m_dtcglAlliTem.Rows[iRow]["ITEM_DIV"].ToString() == ItemConst.PLU_ITEM_DIV.SET_MAIN
|| m_cDataService.DoubleParse(m_dtcglAlliTem.Rows[iRow]["SET_DC_AMT"].ToString()) > 0
//|| m_cDataService.DoubleParse(m_dtcglAlliTem.Rows[iRow]["AMOUNT"].ToString()) <= 0
)
{
iRow++;
//WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0305);
continue;
}
//if (m_dtcglAlliTem.Rows[iRow]["ORDER_OK_FLAG"].ToString() != PosConst.PLU_ORDER_OK_FLAG.ORDER_ING)
//{
// //WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0306);
// continue;
//}
sRet = GridDataSet(cglAlliTem, m_dtcglAlliTem, cgdBundleiTem, m_dtcglBundleiTem, true, iRow, false);
if (sRet != UserCom.RST_OK) return sRet;
bAdd = true;
}
if (bAdd == false)
{
WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0305);
}
}
//sRet = GridDataSet(cglAlliTem, m_dtcglAlliTem, cgdBundleiTem, m_dtcglBundleiTem, true, iRow, false);
if (sRet != UserCom.RST_OK) return sRet;
break;
}
#endregion
case 2:
#region 선택 추가
// 추가
{
int iRow = cglAlliTem.CsmGridSelectedRowIndex;
if (cglAlliTem.CsmGridRowsCount <= 0) break;
if (m_dtcglAlliTem.Rows[iRow]["ITEM_DIV"].ToString() == ItemConst.PLU_ITEM_DIV.OPT_MENU
|| m_dtcglAlliTem.Rows[iRow]["ITEM_DIV"].ToString() == ItemConst.PLU_ITEM_DIV.SET_DETL
|| m_dtcglAlliTem.Rows[iRow]["ITEM_DIV"].ToString() == ItemConst.PLU_ITEM_DIV.SET_MAIN
//|| m_cDataService.DoubleParse(m_dtcglAlliTem.Rows[iRow]["AMOUNT"].ToString()) <= 0
)
{
WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0305);
break;
}
//if (m_dtcglAlliTem.Rows[iRow]["ORDER_OK_FLAG"].ToString() != PosConst.PLU_ORDER_OK_FLAG.ORDER_ING)
//{
// WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0306);
// break;
//}
// 기존 할인이 있는지 확인
if (CmUtil.LongParse(m_dtcglAlliTem.Rows[iRow]["TOT_DC_AMT"].ToString()) > 0)
{
if (WinManager.QuestionMessage(POS_MESSAGE.ERROR.MSG_0680) == false)
{
return sRet;
}
}
//for (int iLoop = 0; iLoop < cglAlliTem.CsmGridRowsCount; iLoop++)
//{
// if (CmUtil.LongParse(m_dtcglAlliTem.Rows[iLoop]["TOT_DC_AMT"].ToString()) > 0)
// {
// if (WinManager.QuestionMessage(POS_MESSAGE.ERROR.MSG_0680) == false)
// {
// return sRet;
// }
// break;
// }
//}
sRet = GridDataSet(cglAlliTem, m_dtcglAlliTem, cgdBundleiTem, m_dtcglBundleiTem, true, iRow, false);
//sRet = GridDataSet(cglAlliTem, m_dtcglAlliTem, cgdBundleiTem, m_dtcglBundleiTem, false, iRow, false);
if (sRet != UserCom.RST_OK) return sRet;
break;
}
#endregion
case 3:
#region 삭제
// 삭제
{
int iRow = cgdBundleiTem.CsmGridSelectedRowIndex;
if (cgdBundleiTem.CsmGridRowsCount <= 0) break;
if (m_dtcglBundleiTem.Rows[iRow]["ITEM_DIV"].ToString() == ItemConst.PLU_ITEM_DIV.OPT_MENU
|| m_dtcglBundleiTem.Rows[iRow]["ITEM_DIV"].ToString() == ItemConst.PLU_ITEM_DIV.SET_DETL
|| m_dtcglBundleiTem.Rows[iRow]["ITEM_DIV"].ToString() == ItemConst.PLU_ITEM_DIV.SET_MAIN ) break;
sRet = GridDataSet(cgdBundleiTem, m_dtcglBundleiTem, cglAlliTem, m_dtcglAlliTem, true, iRow, true);
if (sRet != UserCom.RST_OK) return sRet;
break;
}
#endregion
}
sRet = UserCom.RST_OK;
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
sRet = UserCom.RST_ERR;
}
return sRet;
}
///
/// 그리드 No 최대값 조회
///
///
///
private string SelectMaxNo(DataTable dtData)
{
long nGetData = 0;
long nMaxNo = 0;
string sRet = "";
try
{
if (dtData.Rows.Count <= 0) sRet = "1";
for (int iLoop = 0; iLoop < dtData.Rows.Count; iLoop++)
{
DataRow dvDataRow = dtData.Rows[iLoop];
if (dvDataRow["ITEM_DIV"].ToString() == ItemConst.PLU_ITEM_DIV.OPT_MENU || dvDataRow["ITEM_DIV"].ToString() == ItemConst.PLU_ITEM_DIV.SET_DETL) continue;
nGetData = m_cDataService.LongParse(dvDataRow["NO"].ToString());
if (nGetData >= nMaxNo)
{
nMaxNo = nGetData + 1;
sRet = (nMaxNo).ToString();
}
}
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
return sRet;
}
///
/// 그리드 특정 Row 추가/삭제
///
///
///
///
///
///
///
///
///
private string GridDataSet(Cosmos.UI.CsmGrid cdgSrc, DataTable dtSrc, Cosmos.UI.CsmGrid cdgTaget, DataTable dtTarget, bool AllMove, int iRow, bool bDelete)
{
string sRet = UserCom.RST_ERR;
double nPayAmount = 0;
try
{
if (cdgSrc.CsmGridRowsCount <= 0) return sRet;
// 할인 체크
if (m_cDataService.DoubleParse(dtSrc.Rows[iRow]["SET_DC_AMT"].ToString()) > 0 )
{
WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0256);
return sRet;
}
// 할인불가 체크
if (dtSrc.Rows[iRow]["DC_PRMT_YN"].ToString() == "1")
{
WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0050);
return sRet;
}
// 코드 체크
if (cdgSrc.CsmGridGetCell(iRow, 1).ToString().Trim() == "") return sRet;
DataRow drNewRow = dtTarget.NewRow();
if (cdgSrc.CsmGridGetCell(iRow, 5) == ItemConst.PLU_ITEM_DIV.OPT_MENU || cdgSrc.CsmGridGetCell(iRow, 5) == ItemConst.PLU_ITEM_DIV.SET_DETL)
{
drNewRow["NO"] = "";
}
else
{
drNewRow["NO"] = SelectMaxNo(dtTarget).ToString();
}
drNewRow["ITEMCD"] = cdgSrc.CsmGridGetCell(iRow, 1);
drNewRow["ITEMNM"] = cdgSrc.CsmGridGetCell(iRow, 2);
drNewRow["ITEM_DIV"] = cdgSrc.CsmGridGetCell(iRow, 5);
drNewRow["DC_PRMT_YN"] = cdgSrc.CsmGridGetCell(iRow, 6);
drNewRow["COST"] = cdgSrc.CsmGridGetCell(iRow, 7);
drNewRow["SEQ"] = cdgSrc.CsmGridGetCell(iRow, 8);
drNewRow["UPDATE"] = "U";
drNewRow["SET_DC_AMT"] = cdgSrc.CsmGridGetCell(iRow, 10);
drNewRow["ORDER_OK_FLAG"] = cdgSrc.CsmGridGetCell(iRow, 11);
drNewRow["EXCEP_DC_AMT"] = cdgSrc.CsmGridGetCell(iRow, 13);
dtSrc.Rows[iRow]["UPDATE"] = "U";
if (AllMove != true)
{
// 수량1개
long nQty = m_cDataService.LongParse(dtSrc.Rows[iRow]["QTY"].ToString());
double nAmount = m_cDataService.DoubleParse(dtSrc.Rows[iRow]["AMOUNT"].ToString());
double nDanga = m_cDataService.DoubleParse(dtSrc.Rows[iRow]["COST"].ToString());
double nEXCEP_DC_AMT = m_cDataService.DoubleParse(dtSrc.Rows[iRow]["EXCEP_DC_AMT"].ToString());
if (nQty <= 1)
{
// 삭제
dtSrc.Rows.RemoveAt(iRow);
}
else
{
// 원시 수량 1차감
nQty -= 1;
dtSrc.Rows[iRow]["QTY"] = m_cPosStatus.Global.NumericToQuantity(nQty);
dtSrc.Rows[iRow]["AMOUNT"] = m_cPosStatus.Global.NumericTOCurrency(CmUtil.DoubleSubtraction(CmUtil.DoubleMultiplication(nQty, nDanga), nEXCEP_DC_AMT)); // 판매금액 재계산
// 타켓 수량 1로 설정
nQty = 1;
drNewRow["SEQ"] = ""; // 신규생성
// 다음 Row 세트자식/부가메뉴
iRow++;
}
drNewRow["QTY"] = m_cPosStatus.Global.NumericToQuantity(nQty);
drNewRow["AMOUNT"] = m_cPosStatus.Global.NumericTOCurrency(CmUtil.DoubleSubtraction(CmUtil.DoubleMultiplication(nQty, nDanga), nEXCEP_DC_AMT));
cdgSrc.CsmGridDataSource = dtSrc;
cdgSrc.CsmGridSelectRow(iRow);
}
else
{
// 전체
drNewRow["QTY"] = m_cPosStatus.Global.NumericToQuantity(m_cDataService.IntParse(cdgSrc.CsmGridGetCell(iRow, 3)));
//drNewRow["AMOUNT"] = m_cPosStatus.Global.NumericTOCurrency(m_cDataService.DoubleParse(cdgSrc.CsmGridGetCell(iRow, 4)));
double nQty = m_cDataService.DoubleParse(cdgSrc.CsmGridGetCell(iRow, 3));
double nCost = m_cDataService.DoubleParse(cdgSrc.CsmGridGetCell(iRow, 7));
double nEXCEP_DC_AMT = m_cDataService.DoubleParse(cdgSrc.CsmGridGetCell(iRow, 13));
drNewRow["AMOUNT"] = m_cPosStatus.Global.NumericTOCurrency(CmUtil.DoubleSubtraction(CmUtil.DoubleMultiplication(nQty, nCost), nEXCEP_DC_AMT));
// 삭제
dtSrc.Rows.RemoveAt(iRow);
cdgSrc.CsmGridDataSource = dtSrc;
cdgSrc.CsmGridSelectRow(iRow);
}
// 추가
dtTarget.Rows.Add(drNewRow);
cdgTaget.CsmGridDataSource = dtTarget;
cdgTaget.CsmGridSelectRow(cdgTaget.CsmGridRowsCount);
// 부가메뉴 체크
if (cdgSrc.CsmGridRowsCount > iRow)
{
if (dtSrc.Rows[iRow]["ITEM_DIV"].ToString() == ItemConst.PLU_ITEM_DIV.OPT_MENU || dtSrc.Rows[iRow]["ITEM_DIV"].ToString() == ItemConst.PLU_ITEM_DIV.SET_DETL)
sRet = GridDataSet(cdgSrc, dtSrc, cdgTaget, dtTarget, AllMove, iRow, bDelete);
}
DataTable dt = null;
//if (bDelete == true) //삭제면
// dt = dtSrc;
//else
// dt = dtTarget;
//if (dt.Rows.Count > 0)
//{
// for (int iLoop = 0; iLoop < dt.Rows.Count; iLoop++)
// {
// nPayAmount = CmUtil.DoubleAdd(nPayAmount, m_cDataService.DoubleParse(dt.Rows[iLoop]["AMOUNT"].ToString()));
// }
//}
//else
//{
// nPayAmount = 0;
//}
// 선택금액
nPayAmount = 0;
if (m_dtcglBundleiTem.Rows.Count > 0)
{
for (int iLoop = 0; iLoop < m_dtcglBundleiTem.Rows.Count; iLoop++)
{
//nPayAmount = CmUtil.DoubleAdd(nPayAmount, m_cDataService.DoubleParse(m_dtcglBundleiTem.Rows[iLoop]["AMOUNT"].ToString()));
double nCost = m_cDataService.DoubleParse(m_dtcglBundleiTem.Rows[iLoop]["COST"].ToString());
double nQty = m_cDataService.DoubleParse(m_dtcglBundleiTem.Rows[iLoop]["QTY"].ToString());
double nAmount = m_cDataService.DoubleParse(m_dtcglBundleiTem.Rows[iLoop]["AMOUNT"].ToString());
double nEXCEP_DC_AMT = m_cDataService.DoubleParse(m_dtcglBundleiTem.Rows[iLoop]["EXCEP_DC_AMT"].ToString());
if (m_dtcglBundleiTem.Rows[iLoop]["UPDATE"].Equals("U") != true) continue;
// 선택금액 = (수량*원가) - 예외할인 + 선택금액
if (nAmount > 0)
{
//nPayAmount = CmUtil.DoubleAdd(nPayAmount, CmUtil.DoubleSubtraction(CmUtil.DoubleMultiplication(nCost, nQty), nEXCEP_DC_AMT));
//nPayAmount = CmUtil.DoubleAdd(nPayAmount, CmUtil.DoubleSubtraction(nAmount, nEXCEP_DC_AMT));
nPayAmount = CmUtil.DoubleAdd(nPayAmount, nAmount);
}
}
}
//else
//{
// for (int iLoop = 0; iLoop < dtSrc.Rows.Count; iLoop++)
// {
// nPayAmount = CmUtil.DoubleAdd(nPayAmount, m_cDataService.DoubleParse(dtSrc.Rows[iLoop]["AMOUNT"].ToString()));
// }
//}
txtPayAmt.Text = m_cPosStatus.Global.NumericTOCurrency(nPayAmount); // 선택금액
sRet = UserCom.RST_OK;
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
sRet = UserCom.RST_ERR;
}
return sRet;
}
#endregion
#region 전체상품 할인 처리
///
/// 전체상품 할인 처리
///
///
///
///
///
public string GetSaleItemSetDC(double nAmount)
{
double nSaleAmount = 0, nDCAvaAmount = 0;
double nPrice = 0, nDCSum = 0, nRate = 0, nDCAmount = 0, nMaxPrice = 0;
int iIndex = 0;
Column.TR_PLU.DATA cSaleItem = new Column.TR_PLU.DATA();
Column.TR_PLU.DATA cNewSaleItem = new Column.TR_PLU.DATA();
string sRet = UserCom.RST_ERR;
try
{
nDCSum = 0;
nRate = 0;
nDCAmount = 0;
nMaxPrice = 0;
// 상품정보
ArrayList aSaleItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);
// 받을금액중 할인 안된 금액만 조회
nSaleAmount = GetSaleItemDCTargerAmt(true); // 받을 금액
// 받을금액중 할인 안된 금액만 조회
nDCAvaAmount = GetSaleItemDCTargerAmt(false); // 할인 대상 금액
nDCAmount = CmUtil.DoubleSubtraction(nSaleAmount, nAmount);
// ---------------------------------------------------------------------------------------------------------
// 소스 업데이트
// ---------------------------------------------------------------------------------------------------------
for (int iRow = 0; iRow < m_dtcglAlliTem.Rows.Count; iRow++)
{
if (m_dtcglAlliTem.Rows[iRow]["UPDATE"].ToString() != "U") continue;
if (m_dtcglAlliTem.Rows[iRow]["SEQ"].ToString() != "")
{
// 수정인 경우
int iSeq = CmUtil.IntParse(m_dtcglAlliTem.Rows[iRow]["SEQ"].ToString());
cSaleItem = (Column.TR_PLU.DATA)aSaleItem[iSeq];
}
else
{
// 신규인 경우
cSaleItem = new Column.TR_PLU.DATA();
for (int iRow2 = 0; iRow2 < aSaleItem.Count; iRow2++)
{
cSaleItem = (Column.TR_PLU.DATA)aSaleItem[iRow2];
if (m_dtcglBundleiTem.Rows[iRow]["ITEMCD"].ToString() == cSaleItem.ITEM_PLU_CD)
{
cSaleItem = (Column.TR_PLU.DATA)cSaleItem.Clone();
cSaleItem.CANCEL_DIV = PosConst.CANCEL_DIV.NORMAL;
break;
}
}
}
// 기존 수량/금액 변경
cSaleItem.SALE_AMT = m_cDataService.DoubleParse(m_dtcglAlliTem.Rows[iRow]["AMOUNT"].ToString());
cSaleItem.BILL_AMT = m_cDataService.DoubleParse(m_dtcglAlliTem.Rows[iRow]["AMOUNT"].ToString());
cSaleItem.SALE_QTY = m_cDataService.LongParse(m_dtcglAlliTem.Rows[iRow]["QTY"].ToString());
cSaleItem.DC_DIV = ItemConst.PLU_DC_DIV.NORMAL;
cSaleItem.DC_TYPE = ItemConst.PLU_DC_TYPE.NORMAL;
cSaleItem.DC_RATE = 0;
cSaleItem.ITEM_DC_AMT = 0;
cSaleItem.CPI_DC_AMT = 0;
cSaleItem.CPI_PRESENT_DIV = "0";
cSaleItem.SET_DC_AMT = 0;
cSaleItem.SET_DC_GROUP_CD = 0;
if (m_cDataService.LongParse(m_dtcglAlliTem.Rows[iRow]["QTY"].ToString()) <= 0)
cSaleItem.CANCEL_DIV = PosConst.CANCEL_DIV.CANCEL;
if (cSaleItem.ORDER_OK_FLAG == PosConst.PLU_ORDER_OK_FLAG.ORDER_OK) cSaleItem.ORDER_OK_FLAG = PosConst.PLU_ORDER_OK_FLAG.ORDER_MOD;
if (m_dtcglAlliTem.Rows[iRow]["SEQ"].ToString() == "") aSaleItem.Add(cSaleItem);
}
// ---------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------
// 그룹코드 조회
// ---------------------------------------------------------------------------------------------------------
ArrayList alSaleItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);
int iSetDCMaxSeq = 1;
for (int i = 0; i < alSaleItem.Count; i++)
{
Column.TR_PLU.DATA cPluItem = (Column.TR_PLU.DATA)alSaleItem[i];
if (cPluItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cPluItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue; // 지정취소
if (cPluItem.DC_PRMT_YN != "0") continue;
if (cPluItem.SET_DC_GROUP_CD > 0)
{
if (iSetDCMaxSeq <= cPluItem.SET_DC_GROUP_CD)
{
iSetDCMaxSeq = cPluItem.SET_DC_GROUP_CD + 1;
}
}
}
// ---------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------
// 타켓 업데이트
// ---------------------------------------------------------------------------------------------------------
for (int iRow = 0; iRow < m_dtcglBundleiTem.Rows.Count; iRow++)
{
if (m_dtcglBundleiTem.Rows[iRow]["UPDATE"].ToString() != "U") continue;
if (m_dtcglBundleiTem.Rows[iRow]["SEQ"].ToString() != "")
{
// 수정인 경우
int iSeq = CmUtil.IntParse(m_dtcglBundleiTem.Rows[iRow]["SEQ"].ToString());
cNewSaleItem = (Column.TR_PLU.DATA)aSaleItem[iSeq];
}
else
{
// 신규인 경우
cNewSaleItem = new Column.TR_PLU.DATA();
for (int iRow2 = 0; iRow2 < aSaleItem.Count; iRow2++)
{
cSaleItem = (Column.TR_PLU.DATA)aSaleItem[iRow2];
if (m_dtcglBundleiTem.Rows[iRow]["ITEMCD"].ToString() == cSaleItem.ITEM_PLU_CD)
{
cNewSaleItem = (Column.TR_PLU.DATA)cSaleItem.Clone();
cNewSaleItem.CANCEL_DIV = PosConst.CANCEL_DIV.NORMAL;
break;
}
}
}
if (cNewSaleItem.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL || cNewSaleItem.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue ;// 지정취소
//if (cNewSaleItem.DC_DIV == ItemConst.PLU_DC_DIV.FREE) continue; // 서비스(무료)
/// if (cNewSaleItem.ITEM_DIV != ItemConst.PLU_ITEM_DIV.NORMAL) continue; // 상품구분(일반)
if (cNewSaleItem.NONSALES_RSN_CD != "0") continue; // 비매출구분
if (cNewSaleItem.BILLSPR_NO != m_cTrnStatus.Sale.BillSplitNo) continue; // 빌분리번호
//if (cNewSaleItem.BILL_AMT <= 0) continue; // 영수금액
if (cNewSaleItem.DC_PRMT_YN != "0") continue; // 할인가능 여부
if (cNewSaleItem.FREE_GIFT_YN == "1") continue; // 사은품
if (cNewSaleItem.SET_DC_GROUP_CD > 0) continue; // 이미 적용
cNewSaleItem.SALE_AMT = m_cDataService.DoubleParse(m_dtcglBundleiTem.Rows[iRow]["AMOUNT"].ToString());
cNewSaleItem.BILL_AMT = m_cDataService.DoubleParse(m_dtcglBundleiTem.Rows[iRow]["AMOUNT"].ToString());
cNewSaleItem.SALE_QTY = m_cDataService.LongParse(m_dtcglBundleiTem.Rows[iRow]["QTY"].ToString());
cNewSaleItem.DC_DIV = ItemConst.PLU_DC_DIV.NORMAL;
cNewSaleItem.DC_TYPE = ItemConst.PLU_DC_TYPE.NORMAL;
cNewSaleItem.DC_RATE = 0;
cNewSaleItem.ITEM_DC_AMT = 0;
cNewSaleItem.CPI_DC_AMT = 0;
cNewSaleItem.CPI_PRESENT_DIV = "0";
cNewSaleItem.SET_DC_AMT = 0;
cNewSaleItem.SET_DC_GROUP_CD = 0;
// 할인 절삭
nDCAmount = CmUtil.MathRounds(nDCAmount, m_cPosStatus.Mst.DcRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.DcRudDwLoc));
// 비율 = 상품금액 / 총판매가 * 100
//nRate = CmUtil.DoubleMultiplication(CmUtil.DoubleDivision(cNewSaleItem.BILL_AMT, nDCAvaAmount), 100);
// 분배금액 = 상품금액 * 비율 / 100
//nPrice = CmUtil.DoubleDivision(CmUtil.DoubleMultiplication(nDCAmount, nRate), 100);
// 금액 배분 절삭
nPrice = CmUtil.DoubleMultiplication(nDCAmount, CmUtil.DoubleDivision(cNewSaleItem.BILL_AMT, nDCAvaAmount));
nPrice = CmUtil.MathRounds(nPrice, m_cPosStatus.Mst.DcRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.DcRudDwLoc));
//nPrice = CmUtil.MathRounds(nPrice, m_cPosStatus.Mst.ItemRudDwLocMethd, CmUtil.IntParse(m_cPosStatus.Mst.ItemRudDwLoc));
if (nPrice > cNewSaleItem.BILL_AMT) continue; // 할인금액이 상품금액보다 클수 없음
// 세트 할인 적용
cNewSaleItem.SET_DC_AMT = nPrice;
cNewSaleItem.SET_DC_GROUP_CD = iSetDCMaxSeq;
// 분배후 짜투리 금액 체크용
nDCSum = CmUtil.DoubleAdd(nDCSum, nPrice);
// 최종 적용 상품 index
if (nMaxPrice == 0 || nMaxPrice >= cNewSaleItem.BILL_AMT)
{
nMaxPrice = cNewSaleItem.BILL_AMT;
iIndex = iRow;
}
if (m_dtcglBundleiTem.Rows[iRow]["SEQ"].ToString() == "") aSaleItem.Add(cNewSaleItem);
if (cNewSaleItem.ORDER_OK_FLAG == PosConst.PLU_ORDER_OK_FLAG.ORDER_OK) cNewSaleItem.ORDER_OK_FLAG = PosConst.PLU_ORDER_OK_FLAG.ORDER_MOD;
// 상품행별 영수 금액 재계산 처리
m_cDataService.UpdatePluItemAmount(cNewSaleItem);
}
// 짜투리 금액 최종 적용 상품에 추가
if (nDCSum != nDCAmount)
{
// 추가된 Row로 인해 index 재검색
nMaxPrice = 0;
for (int iRow = 0; iRow < aSaleItem.Count; iRow++)
{
cNewSaleItem = (Column.TR_PLU.DATA)aSaleItem[iRow];
if (cNewSaleItem.SET_DC_AMT <= 0) continue;
// 최종 적용 상품 index
if (nMaxPrice == 0 || nMaxPrice >= cNewSaleItem.BILL_AMT)
{
nMaxPrice = cNewSaleItem.BILL_AMT;
iIndex = iRow;
}
}
cNewSaleItem = (Column.TR_PLU.DATA)aSaleItem[iIndex];
nPrice = 0;
nPrice = CmUtil.DoubleSubtraction(nDCAmount, nDCSum);
cNewSaleItem.SET_DC_AMT = CmUtil.DoubleAdd(cNewSaleItem.SET_DC_AMT, nPrice); // 세트 할인 금액
if (cNewSaleItem.ORDER_OK_FLAG == PosConst.PLU_ORDER_OK_FLAG.ORDER_OK) cNewSaleItem.ORDER_OK_FLAG = PosConst.PLU_ORDER_OK_FLAG.ORDER_MOD;
// 상품행별 영수 금액 재계산 처리
m_cDataService.UpdatePluItemAmount(cSaleItem);
}
// 상품 판매가 계산
m_cPluService.ItemAmountExeccute(true, true);
// ---------------------------------------------------------------------------------------------------------
sRet = UserCom.RST_OK;
}
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 sRet;
}
///
/// 전체상품 할인 취소 처리
///
///
public string GetSaleItemSetDCCancel()
{
string sRet = UserCom.RST_ERR;
try
{
// 상품정보
ArrayList aSaleItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);
for (int iRow = 0; iRow < aSaleItem.Count; iRow++)
{
Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)aSaleItem[iRow];
if (cSaleItem.SET_DC_AMT <= 0) continue;
// 세트 할인 적용
cSaleItem.SET_DC_AMT = 0;
cSaleItem.SET_DC_GROUP_CD = 0;
if (cSaleItem.ORDER_OK_FLAG == PosConst.PLU_ORDER_OK_FLAG.ORDER_OK) cSaleItem.ORDER_OK_FLAG = PosConst.PLU_ORDER_OK_FLAG.ORDER_MOD;
// 상품행별 영수 금액 재계산 처리
m_cDataService.UpdatePluItemAmount(cSaleItem);
}
// 상품 판매가 계산
m_cPluService.ItemAmountExeccute(true, true);
sRet = UserCom.RST_OK;
}
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 sRet;
}
///
/// 전체 상품중 할인 대상금액 조회
///
///
public double GetSaleItemDCTargerAmt(bool bAllMode)
{
double nDCSum = 0;
string sRet = UserCom.RST_ERR;
try
{
nDCSum = 0;
for (int iRow = 0; iRow < m_dtcglBundleiTem.Rows.Count; iRow++)
{
// 할인 불가 체크
if (m_dtcglBundleiTem.Rows[iRow]["DC_PRMT_YN"].ToString() != "0") continue;
if (m_dtcglBundleiTem.Rows[iRow]["UPDATE"].ToString() != "U") continue;
// 할인 대상 금액 sum
nDCSum = CmUtil.DoubleAdd(nDCSum, m_cDataService.DoubleParse(m_dtcglBundleiTem.Rows[iRow]["AMOUNT"].ToString()));
}
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
return nDCSum;
}
#endregion
}
}