using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Cosmos.UserFrame;
using Cosmos.BaseFrame;
using Cosmos.ServiceProvider;
using Cosmos.Common;
using Cosmos.CommonManager;
using Cosmos.UI;
namespace Cosmos.Win
{
///
/// 주방프린터 수동 선택 (상품선택)
///
public partial class frmMenualOrderItem : Form
{
private SManager sManager = new SManager(); //이 객체를 통해 업무 Service 호출
private StateServer StateObject = (StateServer)StateServer.GetInstance(); //StateObject : StateServer Object(객체)
private PosStatus m_cPosStatus; //기본정보 참조
private TranStatus m_cTrnStatus; //거래정보 참조
private IMasterUs m_cMstService = null; // 마스터 서비스
///
/// 리스트 데이터
///
private DataTable m_dtGridList;
///
/// 해피오더 목록
///
public ArrayList HappyOrderList { set; get; }
///
/// 생성자
///
public frmMenualOrderItem()
{
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_cMstService = (IMasterUs)sManager.InitServiceInstance(ServiceLists.ASV_MASTER.DLL, ServiceLists.ASV_MASTER.POS_MASTER);
}
private void Form_Load(object sender, EventArgs e)
{
try
{
UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "");
InitControls();
InitializeGrid();
if (DisplayGrid() == false)
{
this.DialogResult = System.Windows.Forms.DialogResult.Abort;
this.Close();
return;
}
}
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 Form_Closing(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 InitControls()
{
try
{
this.picBack.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.POP_SIZE_S);
this.picBack.Location = new Point(0, 0);
this.picBack.SendToBack();
this.Size = this.picBack.Size = this.picBack.Image.Size;
FormManager.MovePopUpForm(this, m_cPosStatus.Sale.SaleFlow == PosConst.SALE_FLOW.SALE_END ? true : false
, m_cPosStatus.Sale.ScreenSizeUser);
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);
btnEnter.BackColor = CmUtil.GetColorToString(m_cPosStatus.ScnMst.ThemeColor);
btnEnter.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0009);
btnExit.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.BTN_CLOSE);
if (btnExit.Image != null) btnExit.Text = string.Empty;
btnUp.Image = CmUtil.LoadImage(BaseCom.NxImgPath + ImageManager.NAVIBTN_14X9_UP1_BASIC);
btnDn.Image = CmUtil.LoadImage(BaseCom.NxImgPath + ImageManager.NAVIBTN_14X9_DOWN1_BASIC);
if (btnUp.Image != null) btnUp.Text = string.Empty;
if (btnDn.Image != null) btnDn.Text = string.Empty;
lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0972);
lblMemo.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0177);
txtMemo.Text = m_cTrnStatus.Sale.MenualOrderMemo;
}
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 InitializeGrid()
{
try
{
gridList.Tag = false;
gridList.CsmGridColumnHeadersFont = new Font(m_cPosStatus.Base.FONT, 12, gridList.CsmGridColumnHeadersFont.Style);
//DataGridView 자체의 컬럼 헤더 Visible 여부
gridList.CsmGridColumnHeadersVisible = true;
gridList.CsmGridRowsHeight = 40;
//그리드의 컬럼 수
gridList.CsmGridColumnCount = 5;
//그리드의 컬럼 헤더 높이
gridList.CsmGridRowsHeight = 30;
//그리드의 한 화면에 보이는 로우수
gridList.CsmGridShowPageRowsCount = 9;
//그리드 홀수(Default)/짝수(Alternate)행의 배경색 지정
gridList.BackColor = Color.White;
gridList.ForeColor = Color.Black;
gridList.CsmGridSetHeaderBackColor(236, 238, 239); //그리드 헤더 배경색
gridList.CsmGridDefaultRowBackColor = Color.FromArgb(255, 255, 255); //그리드 홀수(Default)행의 배경색 지정
gridList.CsmGridAlternateRowBackColor = Color.FromArgb(251, 253, 255); //그리드 짝수(Alternate)행의 배경색 지정
gridList.CsmGridBackGroundColor = Color.FromArgb(251, 253, 255); //기본 백그라운드 컬러
gridList.CsmGridHighlightColor = Color.FromArgb(255, 251, 211); //그리드 선택 백 컬러
gridList.CsmGridHighlightTextColor = Color.Black; //그리드 선택 글자 컬러
//각 컬럼별 이름 지정
gridList.CsmGridColumnName(0, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0226));
gridList.CsmGridColumnName(2, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0178));
gridList.CsmGridColumnName(3, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0015));
//컬럼넓이 지정
gridList.CsmGridSetColumnWidth(new int[] { 70, 0, 0, 270, 0 });
gridList.CsmGridColumnShowHide(1, false);
gridList.CsmGridColumnShowHide(2, false);
//컬럼 정렬 0:왼쪽, 1:가운데, 2:오른쪽
gridList.CsmGridAlignment(new int[] { 1, 0, 0, 0, 0 });
//컬럼헤더 대신 할 버튼
btnSelectAll.Text = "□" + MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0226);
btnSelectAll.Width = 67;
m_dtGridList = new DataTable("GRID_LIST");
m_dtGridList.Columns.Add(new DataColumn("ITEM_CH", typeof(string)));
m_dtGridList.Columns.Add(new DataColumn("SUB_STR", typeof(string)));
m_dtGridList.Columns.Add(new DataColumn("ITEM_CD", typeof(string)));
m_dtGridList.Columns.Add(new DataColumn("ITEM_NM", typeof(string)));
m_dtGridList.Columns.Add(new DataColumn("ROW_IDX", typeof(string)));
m_dtGridList.Clear();
gridList.CsmGridDataSource = m_dtGridList;
}
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 bool DisplayGrid()
{
try
{
m_dtGridList.Clear();
gridList.CsmGridClear();
gridList.SuspendLayout();
// 주방프린트 사용(0 : 미사용, 1 : 사용)
if (PosMstManager.GetPosOption(POS_OPTION.OPT506) != "1") return false;
// 선불 주문대기번호 사용(0 : 미사용, 1 : 사용)
if (m_cPosStatus.Base.PosType == PosConst.POS_TYPE.PRE_PAYMENT &&
PosMstManager.GetPosOption(POS_OPTION.OPT008) == "0") return false;
// 주방프린터 자동/수동 출력 여부 (0:자동 1:수동(프린터선택) 2:수동(상품선택))
if (PosMstManager.GetPosOption(POS_OPTION.OPT425) != "2") return false;
// 주문상품/해피오더 목록에서 주문중 또는 주문수정 상품 추출
List lstktchItems = new List();
if (HappyOrderList != null)
{
// 해피오더 일때
foreach (Column.TR_HPORD.HPORD_ITEM item in HappyOrderList)
{
lstktchItems.Add(string.Format("'{0}{1}{2}'", "999", m_cPosStatus.Base.StoreNo, item.GoodsCode));
}
}
else
{
// 일반주문 일때
ArrayList pluItems = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);
foreach (Column.TR_PLU.DATA item in pluItems)
{
if (item.ORDER_OK_FLAG == PosConst.PLU_ORDER_OK_FLAG.ORDER_OK) continue;
if (string.IsNullOrWhiteSpace(m_cTrnStatus.Head.FloorCd) == false)
lstktchItems.Add(string.Format("'{0}{1}{2}'", m_cTrnStatus.Head.FloorCd, item.SUB_SHOP_CD, item.ITEM_PLU_CD));
lstktchItems.Add(string.Format("'{0}{1}{2}'", "999", item.SUB_SHOP_CD, item.ITEM_PLU_CD));
}
}
if (lstktchItems.Count == 0) return false;
// 대상상품 중 주방프린터 출력 상품 조회
//string fmt = "SELECT A.SUB_STOR_CD, A.ITEM_CD, MAX(C.ITEM_NM) ITEM_NM, COUNT(B.KTCH_SYS_CD) KTCH_CNT \n"
// + " FROM MST_KTCH_DEVICE_ITEM A WITH(NOLOCK) \n"
// + " , MST_KTCH_DEVICE B WITH(NOLOCK) \n"
// + " , MST_ITEM C WITH(NOLOCK) \n"
// + " WHERE A.CMP_CD = B.CMP_CD AND A.STOR_CD = B.STOR_CD \n" // AND A.SUB_STOR_CD = B.SUB_STOR_CD AND A.KTCH_SYS_CD = B.KTCH_SYS_CD \n"
// + " AND CASE WHEN A.KTCH_SYS_CD = '99' THEN 1 ELSE A.SUB_STOR_CD + A.KTCH_SYS_CD END \n"
// + " = CASE WHEN A.KTCH_SYS_CD = '99' THEN 1 ELSE B.SUB_STOR_CD + B.KTCH_SYS_CD END \n"
// + " AND A.CMP_CD = C.CMP_CD AND A.STOR_CD = C.STOR_CD AND A.SUB_STOR_CD = C.SUB_STOR_CD AND A.ITEM_CD = C.ITEM_CD \n"
// + " AND A.FLOOR_CD + A.SUB_STOR_CD + A.ITEM_CD IN ({2}) \n"
// + " AND A.USE_YN = '{3}' \n"
// + " AND B.USE_YN = '{3}' \n"
// + " AND B.KTCH_SYS_CD <> '99' \n"
// + " AND A.CMP_CD = '{0}' \n"
// + " AND A.STOR_CD = '{1}' \n"
// + " GROUP BY A.SUB_STOR_CD, A.ITEM_CD "
// ;
string fmt = "SELECT A.SUB_STOR_CD, A.ITEM_CD, COUNT(B.KTCH_SYS_CD) KTCH_CNT \n"
+ " FROM MST_KTCH_DEVICE_ITEM A WITH(NOLOCK) \n"
+ " , MST_KTCH_DEVICE B WITH(NOLOCK) \n"
+ " WHERE A.CMP_CD = B.CMP_CD AND A.STOR_CD = B.STOR_CD \n"
+ " AND CASE WHEN A.KTCH_SYS_CD = '99' THEN 1 ELSE A.SUB_STOR_CD + A.KTCH_SYS_CD END \n"
+ " = CASE WHEN A.KTCH_SYS_CD = '99' THEN 1 ELSE B.SUB_STOR_CD + B.KTCH_SYS_CD END \n"
+ " AND A.CMP_CD = '{0}' \n"
+ " AND A.STOR_CD = '{1}' \n"
+ " AND A.FLOOR_CD + A.SUB_STOR_CD + A.ITEM_CD IN ({2}) \n"
+ " AND A.USE_YN = '{3}' \n"
+ " AND B.USE_YN = '{3}' \n"
+ " AND B.KTCH_SYS_DIV = '" + PosConst.KTCH_SYS_DIV.KPS + "' \n"
+ " AND B.KTCH_SYS_CD <> '99' \n"
+ " GROUP BY A.SUB_STOR_CD, A.ITEM_CD "
;
string sql = string.Format(fmt, m_cPosStatus.Base.CmpCd
, m_cPosStatus.Base.StoreNo
, string.Join(",", lstktchItems.ToArray())
, PosConst.MST_USE_YN.YES);
DataTable dt = m_cMstService.Select(new string[] { sql });
if (dt == null || dt.Rows.Count == 0) return false;
if (HappyOrderList != null)
{
// 해피오더 일때, 해피오더는 2017.02.04 현재 구조상 복합매장 대응이 불가능 하다.
for (var i = 0; i < HappyOrderList.Count; i++)
{
Column.TR_HPORD.HPORD_ITEM item = (Column.TR_HPORD.HPORD_ITEM)HappyOrderList[i];
var exp = string.Format("SUB_STOR_CD = '{0}' AND ITEM_CD = '{1}'", m_cPosStatus.Base.StoreNo, item.GoodsCode);
var dr = dt.Select(exp, "ITEM_CD ASC");
if (dr.Length == 0) continue;
var idx = -1;
if (string.IsNullOrWhiteSpace(m_cTrnStatus.Sale.MenualOrderValue) == false)
idx = m_cTrnStatus.Sale.MenualOrderValue.IndexOf(i.ToString());
DataRow newRow = m_dtGridList.NewRow();
newRow["ITEM_CH"] = idx < 0 ? "□" : "√"; // □ √
newRow["SUB_STR"] = m_cPosStatus.Base.StoreNo;
newRow["ITEM_CD"] = item.GoodsCode.Trim();
newRow["ITEM_NM"] = item.GoodsName.Trim();
newRow["ROW_IDX"] = i.ToString();
m_dtGridList.Rows.Add(newRow);
}
}
else
{
// 일반주문 일때
ArrayList pluItems = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);
for (var i = 0; i < pluItems.Count; i++)
{
Column.TR_PLU.DATA item = (Column.TR_PLU.DATA)pluItems[i];
if (item.ORDER_OK_FLAG == PosConst.PLU_ORDER_OK_FLAG.ORDER_OK) continue;
//if (item.CANCEL_DIV == PosConst.CANCEL_DIV.CANCEL ||
// item.CANCEL_DIV_MAIN == PosConst.CANCEL_DIV.CANCEL) continue;
// 상품구분(0:일반, 1:세트, 2:세트자식, 3:부가상품, 4:세트할인, 5:상품권(추가))
string itemPluCd = item.SUBPRC_MENU_KEY_DIV == "1" ? item.SUB_MENU_MAIN_CD : item.ITEM_PLU_CD;
var exp = string.Format("SUB_STOR_CD = '{0}' AND ITEM_CD = '{1}'", item.SUB_SHOP_CD, itemPluCd);
var dr = dt.Select(exp, "ITEM_CD ASC");
var isPrint = dr.Length == 0 ? false : true;
if (isPrint)
{
var idx = -1;
if (string.IsNullOrWhiteSpace(m_cTrnStatus.Sale.MenualOrderValue) == false)
idx = m_cTrnStatus.Sale.MenualOrderValue.IndexOf(i.ToString());
DataRow newRow = m_dtGridList.NewRow();
newRow["ITEM_CH"] = idx < 0 ? "□" : "√"; // □ √
newRow["SUB_STR"] = item.SUB_SHOP_CD;
newRow["ITEM_CD"] = item.ITEM_PLU_CD;
newRow["ITEM_NM"] = item.ITEM_NAME;
newRow["ROW_IDX"] = i.ToString();
m_dtGridList.Rows.Add(newRow);
}
}
}
return gridList.CsmGridRowsCount > 0 ? true : 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;
}
finally
{
gridList.CsmGridDataSource = m_dtGridList;
gridList.Focus();
gridList.ResumeLayout();
}
}
private void btnExit_Click(object sender, EventArgs e)
{
try
{
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 gridList_GridClickEvent(object sender, string rowIndex)
{
try
{
if ((bool)gridList.Tag == true)
{
gridList.Tag = false;
return;
}
int row = CmUtil.IntParse(rowIndex);
if (row < 0) return;
// □ √
string check = m_dtGridList.Rows[row][0].ToString() == "□" ? "√" : "□";
m_dtGridList.Rows[row][0] = check;
}
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 Button_Click(object sender, EventArgs e)
{
try
{
if (sender == btnDn)
{
gridList.Tag = true;
gridList.CsmGridScroll("DOWN");
}
else if (sender == btnUp)
{
gridList.Tag = true;
gridList.CsmGridScroll("UP");
}
else if (sender == btnSelectAll)
{
// □ √
string check = ((CsmButton)sender).Text.Substring(0, 1) == "□" ? "√" : "□";
btnSelectAll.Text = check + MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0226);
foreach (DataRow dr in m_dtGridList.Rows)
{
dr["ITEM_CH"] = check;
}
}
else if (sender == btnExit)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
else if (sender == btnEnter)
{
CompleteInputValue();
this.DialogResult = DialogResult.OK;
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 bool CompleteInputValue()
{
try
{
List selItems = new List();
foreach (DataRow dr in m_dtGridList.Rows)
{
if (dr["ITEM_CH"].ToString().Trim() == "√")
{
//var key = string.Format("{0}{1}", dr["SUB_STR"].ToString().Trim(), dr["ITEM_CD"].ToString().Trim());
//selItems.Add(key);
var rowIdx = CmUtil.GetDataRowInt(dr, "ROW_IDX");
selItems.Add(rowIdx.ToString());
}
}
m_cTrnStatus.Sale.MenualOrderValue = selItems.Count > 0
? string.Join(",", selItems.ToArray())
: string.Empty;
m_cTrnStatus.Sale.MenualOrderMemo = txtMemo.Text.TrimEnd();
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;
}
}
}
}