spc-kiosk-pb/Window/WinTable/frmKtchMsg.cs
2019-06-16 14:12:09 +09:00

618 lines
27 KiB
C#

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 frmKtchMsg : Form, IFormKtchMsgUs
{
private SManager sManager = new SManager(); //이 객체를 통해 업무 Service 호출
private StateServer StateObject = (StateServer)StateServer.GetInstance(); //StateObject : StateServer Object(객체)
private PosStatus m_cPosStatus; //기본정보 참조
private TranStatus m_cTrnStatus; //거래정보 참조
private ITableUs m_cTableSvr = null; //테이블 서비스 관리
private IMasterUs m_cMstService = null; // 마스터 인터페이스
private List<CsmPosEditBox> m_EditBoxList = new List<CsmPosEditBox>(); // 입력컨트롤 목록
/// <summary>
/// 리스트 데이터
/// </summary>
private DataTable m_dtGridList;
/// <summary>
/// 메모구분
/// (PosConst.KPS_ORD_MSG_ID, 0:거래중지, 1:상품메모, 2:좌석메모, 3:테이블합석, 4:테이블이동, 5:상품이동, 9:FireKey)
/// </summary>
public string MsgId { get; set; }
/// <summary>
/// 상품등록행
/// </summary>
public int ItemRow { get; set; }
/// <summary>
/// 층코드
/// </summary>
public string FloorCd { get; set; }
/// <summary>
/// 테이블번호
/// </summary>
public string TableNo { get; set; }
/// <summary>
/// 테이블 명
/// </summary>
public string TableNm { get; set; }
public frmKtchMsg()
{
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_cTableSvr = (ITableUs)sManager.InitServiceInstance(ServiceLists.BSV_TABLE.DLL, ServiceLists.BSV_TABLE.TABLE_SERVICE);
m_cMstService = (IMasterUs)sManager.InitServiceInstance(ServiceLists.ASV_MASTER.DLL, ServiceLists.ASV_MASTER.POS_MASTER);
this.MsgId = string.Empty;
this.ItemRow = -1;
this.FloorCd = string.Empty;
this.TableNo = string.Empty;
this.TableNm = string.Empty;
// 입력컨트롤 목록 추가
m_EditBoxList.Add(this.tbKtchMsg1);
m_EditBoxList.Add(this.tbKtchMsg2);
m_EditBoxList.Add(this.tbKtchMsg3);
}
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 + "()", "");
PosOLEDevice.SetEventHandle(null);
this.InitControls();
if (this.MsgId == PosConst.KPS_ORD_MSG_ID.FIRE_KEY) return;
this.InitializeGrid();
this.DisplayGrid();
}
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)
{
try
{
PosOLEDevice.SetEventHandle(null);
this.MsgId = string.Empty;
this.ItemRow = -1;
this.FloorCd = string.Empty;
this.TableNo = string.Empty;
this.TableNm = string.Empty;
UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
System.Reflection.MethodBase.GetCurrentMethod().Name + "()", lblTitle.Text);
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
ex.Message);
}
}
/// <summary>
/// 폼 초기화
/// </summary>
private void InitControls()
{
try
{
this.picBack.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.POP_SIZE_800X600);
this.picBack.Location = new Point(0, 0);
this.picBack.SendToBack();
this.Size = this.picBack.Size = new Size(800, 600);
FormManager.MovePopUpForm(this, false, m_cPosStatus.Sale.ScreenSizeUser);
FormManager.SetFormAllControlFont(this, m_cPosStatus.Base.FONT);
//테마색상 적용!
btnEnter.BackColor = CmUtil.GetColorToString(m_cPosStatus.ScnMst.ThemeColor);
btnEnter.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0009);
btnSave.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0225);
btnDel.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0021);
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;
if (MsgId == PosConst.KPS_ORD_MSG_ID.ITEM_MEMO)
{
// 1:상품메모
lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0180);
lblTarget1.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0178);
lblTarget2.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0015);
ArrayList alSaleItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);
Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)alSaleItem[ItemRow];
lblFloorNm.Text = cSaleItem.ITEM_PLU_CD;
lblTableNo.Text = cSaleItem.ITEM_NAME;
lblMsg.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0177);
}
else if (MsgId == PosConst.KPS_ORD_MSG_ID.SEAT_MEMO)
{
// 2:좌석메모
lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0174);
lblTarget1.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0175);
lblTarget2.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0176);
lblFloorNm.Text = m_cTrnStatus.Head.FloorNm;
lblTableNo.Text = this.TableNm;
lblMsg.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0177);
}
else
{
// 9:FIRE KEY
ArrayList alSaleItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);
Column.TR_PLU.DATA cSaleItem = (Column.TR_PLU.DATA)alSaleItem[ItemRow];
//var msg = " " + MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0103) + ":" + cSaleItem.SALE_QTY.ToString().PadLeft(5) + "FIRE".PadLeft(25);
var msg = cSaleItem.SALE_QTY.ToString();
var sReturn = m_cTableSvr.UpdateKtchOrderMessage(MsgId, ItemRow, msg, string.Empty, string.Empty);
if (sReturn != UserCom.RST_OK)
{
WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0157);
}
this.DialogResult = sReturn != UserCom.RST_OK ? DialogResult.Cancel : DialogResult.OK;
return;
}
tbKtchMsg1.Text = string.Empty;
tbKtchMsg2.Text = string.Empty;
tbKtchMsg3.Text = string.Empty;
tbKtchMsg1.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);
}
}
private void InitializeGrid()
{
try
{
gridList.CsmGridColumnHeadersFont = new Font(m_cPosStatus.Base.FONT, 12, gridList.CsmGridColumnHeadersFont.Style);
//DataGridView 자체의 컬럼 헤더 Visible 여부
gridList.CsmGridColumnHeadersVisible = false;
gridList.CsmGridRowsHeight = 60;
//그리드의 컬럼 수
gridList.CsmGridColumnCount = 2;
//그리드의 컬럼 헤더 높이
gridList.CsmGridRowsHeight = 60;
//그리드의 한 화면에 보이는 로우수
gridList.CsmGridShowPageRowsCount = 5;
//그리드 홀수(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, "");
gridList.CsmGridColumnName(1, "");
//컬럼넓이 지정(406)
gridList.CsmGridSetColumnWidth(new int[] { 721, 0 });
//컬럼 정렬 0:왼쪽, 1:가운데, 2:오른쪽
gridList.CsmGridAlignment(new int[] { 0, 0 });
m_dtGridList = new DataTable("GRID_LIST");
m_dtGridList.Columns.Add(new DataColumn("REASON_NM", typeof(string)));
m_dtGridList.Columns.Add(new DataColumn("REASON_CD", typeof(string)));
m_dtGridList.Clear();
}
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 DisplayGrid(bool isLastSelect = false)
{
try
{
m_dtGridList.Clear();
gridList.SuspendLayout();
string fmt = "SELECT * FROM POSMST..MST_POS_LOCAL WITH (NOLOCK) "
+ " WHERE CMP_CD = '{0}' AND STOR_CD = '{1}' AND GRP_CD = '{2}' AND USE_YN = '{3}' "
+ " ORDER BY ENTRY_NM ";
string sql = string.Format(fmt, m_cPosStatus.Base.CmpCd
, m_cPosStatus.Base.StoreNo
, PosConst.COMMON_CODE_GROUP.Z0020
, PosConst.MST_USE_YN.YES);
DataTable dtData = m_cMstService.Select(new string[] { sql });
if (dtData != null && dtData.Rows.Count > 0)
{
foreach (DataRow dr in dtData.Rows)
{
DataRow drNewRow = m_dtGridList.NewRow();
drNewRow["REASON_NM"] = CmUtil.GetDataRowStr(dr, "ENTRY_NM");
drNewRow["REASON_CD"] = CmUtil.GetDataRowStr(dr, "ENTRY_CD");
m_dtGridList.Rows.Add(drNewRow);
}
}
gridList.CsmGridDataSource = m_dtGridList;
//gridList.CsmGridSelectRow(0);
gridList.ResumeLayout();
}
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 btnExit_Click(object sender, EventArgs e)
{
this.EditBox_KeyDownEvent(null, PosKey.MENU_KEY.ESC_PREVIOUS);
}
private void Button_Click(object sender, EventArgs e)
{
if (sender == btnEnter)
{
this.EditBox_KeyDownEvent(tbKtchMsg3, PosKey.MENU_KEY.ENTER);
}
else if (sender == btnSave)
{
SaveText();
}
else if (sender == btnDel)
{
DeleteText();
}
else if (sender == btnUp)
{
gridList.CsmGridScroll("UP");
tbKtchMsg1.Focus();
}
else if (sender == btnDn)
{
gridList.CsmGridScroll("DOWN");
tbKtchMsg1.Focus();
}
}
private void EditBox_KeyDownEvent(object sender, string sFuncValue)
{
try
{
int index = m_EditBoxList.IndexOf((CsmPosEditBox)sender);
switch (sFuncValue)
{
case PosKey.MENU_KEY.ENTER:
if (CheckInputValue(index) == false) return;
if (index >= m_EditBoxList.Count - 1)
{
// 수동출력시 장치코드 선택 => 후불 좌석메모 일때 만, 장치선택
if (MsgId == PosConst.KPS_ORD_MSG_ID.SEAT_MEMO && PosMstManager.GetPosOption(POS_OPTION.OPT425) == "1")
{
WinBasic.ShowForm(new string[] { FormManager.FORM_MENUAL_ORDER_KPS });
}
// 메모등록
string ret = m_cTableSvr.UpdateKtchOrderMessage(MsgId, ItemRow, tbKtchMsg1.Value.Trim(), tbKtchMsg2.Value.Trim(), tbKtchMsg3.Value.Trim());
if (ret != UserCom.RST_OK)
{
WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0157);
return;
}
// 상품메모 메모리 저장
if (this.MsgId == PosConst.KPS_ORD_MSG_ID.ITEM_MEMO)
{
ArrayList alPluItem = (ArrayList)StateObject.GetItemObject(Column.TR_PLU.ITEM);
Column.TR_PLU.DATA cItem = (Column.TR_PLU.DATA)alPluItem[ItemRow];
cItem.ITEM_MEMO_1 = tbKtchMsg1.Value.Trim();
cItem.ITEM_MEMO_2 = tbKtchMsg2.Value.Trim();
cItem.ITEM_MEMO_3 = tbKtchMsg3.Value.Trim();
}
this.DialogResult = System.Windows.Forms.DialogResult.OK;
this.Close();
return;
}
if (index < m_EditBoxList.Count - 1)
{
m_EditBoxList[index + 1].Select();
m_EditBoxList[index + 1].SelectText();
}
break;
case PosKey.MENU_KEY.ESC_PREVIOUS:
this.DialogResult = DialogResult.Cancel;
this.Close();
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);
}
}
/// <summary>
/// 입력데이터 유효성 체크
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
private bool CheckInputValue(int index)
{
try
{
string value = string.Empty;
if (index >= 0)
{
value = tbKtchMsg1.Value.Trim();
//if (CmUtil.LenH(value) > 40)
if (value.Length > 40)
{
WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0405);
tbKtchMsg1.SelectText();
tbKtchMsg1.Select();
return false;
}
}
if (index >= 1)
{
value = tbKtchMsg2.Value.Trim();
//if (CmUtil.LenH(value) > 40)
if (value.Length > 40)
{
WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0405);
tbKtchMsg2.SelectText();
tbKtchMsg2.Select();
return false;
}
}
if (index >= 2)
{
value = tbKtchMsg3.Value.Trim();
//if (CmUtil.LenH(value) > 40)
if (value.Length > 40)
{
WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0405);
tbKtchMsg3.SelectText();
tbKtchMsg3.Select();
return false;
}
if (tbKtchMsg1.Text.Trim().Length == 0 && tbKtchMsg2.Text.Trim().Length == 0 && tbKtchMsg3.Text.Trim().Length == 0)
{
WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0129);
tbKtchMsg1.SelectText();
tbKtchMsg1.Select();
return false;
}
}
return true;
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
ex.Message);
return false;
}
}
/// <summary>
/// 메모 상용구 저장
/// </summary>
/// <returns></returns>
private bool SaveText()
{
try
{
if (CheckInputValue(2) == false) return false;
List<string> memoList = new List<string>();
if (string.IsNullOrWhiteSpace(tbKtchMsg1.Text) == false) memoList.Add(tbKtchMsg1.Text.Trim());
if (string.IsNullOrWhiteSpace(tbKtchMsg2.Text) == false) memoList.Add(tbKtchMsg2.Text.Trim());
if (string.IsNullOrWhiteSpace(tbKtchMsg3.Text) == false) memoList.Add(tbKtchMsg3.Text.Trim());
if (memoList.Count == 0) return false;
string memo = string.Join(Environment.NewLine, memoList.ToArray());
int maxEntryCode = 1;
for (var i = 0; i < gridList.CsmGridRowsCount; i++)
{
int code = CmUtil.IntParse(gridList.CsmGridGetCell(i, 1));
if (maxEntryCode < code) maxEntryCode = code + 1;
string name = gridList.CsmGridGetCell(i, 1);
if (memo == name) return false;
}
string fmt = "INSERT INTO POSMST..MST_POS_LOCAL (CMP_CD, STOR_CD, GRP_CD, ENTRY_NM, DISP_SEQ, USE_YN, UPD_DT, REG_DT, ENTRY_CD) \n"
+ " SELECT '{0}', '{1}', '{2}', '{3}', 0, '1', '{4}', '{4}' \n"
+ " , ISNULL(MAX(CONVERT(int, ENTRY_CD)), 0) + 1 \n"
+ " FROM POSMST..MST_POS_LOCAL \n"
+ " WHERE CMP_CD = '{0}' AND STOR_CD = '{1}' AND GRP_CD = '{2}' ";
string sql = string.Format(fmt, m_cPosStatus.Base.CmpCd
, m_cPosStatus.Base.StoreNo
, PosConst.COMMON_CODE_GROUP.Z0020
, ConvertDBStr(memo)
, DateTime.Now.ToString("yyyyMMddHHmmss")
);
if (m_cMstService.Update(new string[] { sql }) != UserCom.OK)
{
WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0417);
return false;
}
DisplayGrid();
for (var i = gridList.CsmGridRowsCount - 1; i >= 0; i--)
{
var temp = gridList.CsmGridGetCell(i, 0);
if (temp.Equals(memo))
{
gridList.CsmGridSelectRow(i);
break;
}
}
return true;
}
catch (Exception ex)
{
WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
ex.Message);
return false;
}
}
/// <summary>
/// 메모 상용구 삭제
/// </summary>
/// <returns></returns>
private bool DeleteText()
{
try
{
// 반품 사유
if (gridList.CsmGridRowsCount == 0) return false;
int row = gridList.CsmGridSelectedRowIndex;
if (row < 0) return false;
if (row >= gridList.CsmGridRowsCount) return false;
string entryCode = gridList.CsmGridGetCell(row, 1);
string fmt = "DELETE POSMST..MST_POS_LOCAL WHERE CMP_CD = '{0}' AND STOR_CD = '{1}' AND GRP_CD = '{2}' AND ENTRY_CD = '{3}' ";
string sql = string.Format(fmt, m_cPosStatus.Base.CmpCd, m_cPosStatus.Base.StoreNo, PosConst.COMMON_CODE_GROUP.Z0020, entryCode);
if (m_cMstService.Update(new string[] { sql }) != UserCom.OK)
{
WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0417);
return false;
}
//DisplayGrid();
m_dtGridList.Rows[row].Delete();
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;
}
}
private void gridList_GridClickEvent(object sender, string rowIndex)
{
try
{
if (gridList.CsmGridRowsCount == 0) return;
int row = gridList.CsmGridSelectedRowIndex;
if (row < 0) return;
string text = gridList.CsmGridGetCell(row, 0);
string[] memo = text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
if (memo.Length == 0) return;
for (var i = 0; i < memo.Length; i++)
{
switch (i)
{
case 0: tbKtchMsg1.Value = memo[0]; break;
case 1: tbKtchMsg2.Value = memo[1]; break;
case 2: tbKtchMsg3.Value = memo[2]; break;
}
}
tbKtchMsg1.Focus();
}
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 string ConvertDBStr(string str)
{
return str.Replace("'", "''");
}
}
}