using System;
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.CommonManager;
using Cosmos.ServiceProvider;
using Cosmos.Common;
//************************************************************************************************
// 변경 이력 : 간이영수증 발행 시 제품 추가 후 삭제 기능 추가
//------------------------------------------------------------------------------------------------
// - 작 업 자 : 서광원B
// - 작업일자 : 2017.11.06
// - 작업분류 : 2017-10-20 CS팀 판매 간이영수증
// - 요청사항 : 간이영수증 발행 시 제품 추가 후 삭제 기능 추가
// -[X]버튼 추가
// - 작업내용 : 기존의 그리드(UI.CsmGrid)는 셀 단위 클릭 이벤트를 발생시키지 않으므로
// [X]버튼 추가 작업은 그리드 컨트롤을 변경해야 함.
// 그래서, 쉽게 개발할 수 있는 삭제 버튼을 추가하여 동일 기능을 구현함.
//************************************************************************************************
namespace Cosmos.Win
{
public partial class frmEtcReceipt : Form
{
#region 변수 선언
private SManager sManager = new SManager(); // 이 객체를 통해 업무 Service 호출
private StateServer StateObject = (StateServer)StateServer.GetInstance(); // StateObject : StateServer Object (객체)
private PosStatus m_cPosStatus = new PosStatus(); // 기본정보 참조
private IDataServiceUs m_cEtcReceipt = null; // 거래완료처리
private DataTable m_dtItemInit; // 조회 데이터 리스트
private int nNO = 0;
#region (2017.11.06) 간이영수증 삭제 기능 추가을 위한 변수 선언
private int intSelectRow = -1; // 사용자가 선택한 그리드 행번호(초기값: -1)
#endregion
#endregion 변수 선언
#region 생성자 & 소멸자
public frmEtcReceipt()
{
InitializeComponent();
base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw, true);
//this.UpdateStyles();
m_cPosStatus = (PosStatus)StateObject.POS; // POS 기본정보
m_cEtcReceipt = (IDataServiceUs)sManager.InitServiceInstance(ServiceLists.BSV_ADMIN.DLL, ServiceLists.BSV_ADMIN.ETC_RECEIPT);
}
private void frmEtcReceipt_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 frmEtcReceipt_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);
}
#endregion 생성자 & 소멸자
#region 폼 컨트롤 초기화
///
/// 폼 컨트롤 초기화
///
private void InitControl()
{
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);
picBack.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.POP_SIZE_S);
//테마색상 적용!
//btnPrint.BackColor = CmUtil.GetColorToString(m_cPosStatus.ScnMst.ThemeColor);
padInPut.ThemeColor = m_cPosStatus.ScnMst.ThemeColor;
padInPut.ClearBtnText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0817);
padInPut.SearchBtnText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_1018);
btnExit.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.BTN_CLOSE);
if (btnExit.Image != null) btnExit.Text = "";
btnDate.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.ICON_DATE_BASIC);
if (btnDate.Image != null) btnDate.Text = "";
btnUp.Image = CmUtil.LoadImage(BaseCom.NxImgPath + ImageManager.NAVIBTN_14X9_UP1_BASIC);
btnDw.Image = CmUtil.LoadImage(BaseCom.NxImgPath + ImageManager.NAVIBTN_14X9_DOWN1_BASIC);
if (btnUp.Image != null) btnUp.Text = "";
if (btnDw.Image != null) btnDw.Text = "";
// 라벨 이름 설정
lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0344);
lblSaleDate.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0242);
lblPluName.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0015);
lblAmount.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0019);
// 버튼 이름 설정
btnPluChoice.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0224);
btnPrint.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0257);
//=======================================================================
// (2017.11.06) 간이영수증 삭제 기능 추가을 위한 삭제 버튼 추가
//-----------------------------------------------------------------------
// - 삭제 기능을 위해 삭제 버튼을 추가하였고,
// 사용자들은 삭제 가능한 경우에만 버튼을 클릭할 수 있도록 비표시하였음
//=======================================================================
#region (2017.11.06) 간이영수증 삭제 기능 추가을 위한 삭제 버튼 추가
btnDelete.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0021);
SubDeleteButtonSetting("비표시"); // 삭제버튼 비표시(초기값)
#endregion
txtDate.InputTypeFormat = m_cPosStatus.Global.m_stCultureMaster.strDatePattern;
txtDate.Text = m_cPosStatus.Global.DateToCulture(m_cPosStatus.Base.SaleDate);
if (btnDelete.Text.Length == 0) btnDelete.Visible = false;
if (btnMenu4.Text.Length == 0) btnMenu4.Visible = false;
nNO = 0;
txtAmount.Text = "0";
txtPluName.Text = "";
SetListColumn();
// 간이영수증 화면 TOPMOST 처리 삭제(2017.07.18)
//this.TopMost = true;
txtAmount.Select();
txtPluName.Select();
}
///
/// 간이영수증 품목 추가 정보에 대한 DataGridView 초기화
///
private void SetListColumn()
{
try
{
// 간이영수증 정보
dgvData.CsmGridColumnHeadersVisible = true; //DataGridView 자체의 컬럼 헤더 Visible 여부
dgvData.CsmGridColumnHeadersHeight = 37; //DataGridView 자체의 컬럼 헤더 높이
dgvData.CsmGridColumnHeadersFont = new Font(m_cPosStatus.Base.FONT, 12, FontStyle.Bold); //DataGridView 자체의 컬럼 헤더 폰트
dgvData.CsmGridRowsHeight = 35;
dgvData.CsmGridColumnCount = 3; //그리드의 컬럼수
dgvData.CsmGridShowPageRowsCount = 4; //그리드의 한 화면에 보이는 로우수
dgvData.CsmGridSetHeaderBackColor(236, 238, 239); //그리드 헤더 배경색
dgvData.CsmGridDefaultRowBackColor = Color.FromArgb(255, 255, 255); //그리드 홀수(Default)행의 배경색 지정
dgvData.CsmGridAlternateRowBackColor = Color.FromArgb(251, 253, 255); //그리드 짝수(Alternate)행의 배경색 지정
dgvData.CsmGridBackGroundColor = Color.FromArgb(251, 253, 255); //기본 백그라운드 컬러
dgvData.CsmGridHighlightColor = Color.FromArgb(255, 251, 211); //그리드 선택 백 컬러
dgvData.CsmGridHighlightTextColor = Color.Black; //그리드 선택 글자 컬러
dgvData.CsmGridSetColumnWidth(new int[] { 30, 210, 140 }); //컬럼넓이 지정(380)
dgvData.CsmGridAlignment(new int[] { 1, 0, 2 }); //컬럼 정렬 0:왼쪽, 1:가운데, 2:오른쪽
//각 컬럼별 이름 지정
dgvData.CsmGridColumnName(0, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0014));
dgvData.CsmGridColumnName(1, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0015));
dgvData.CsmGridColumnName(2, MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0019));
//그리드 초기화 테이블
m_dtItemInit = new DataTable("INIT");
m_dtItemInit.Columns.Add(new DataColumn("No", typeof(string)));
m_dtItemInit.Columns.Add(new DataColumn("Plu", typeof(string)));
m_dtItemInit.Columns.Add(new DataColumn("Amount", typeof(string)));
m_dtItemInit.Clear();
}
catch (Exception ex)
{
UserLog.WriteLogFile(UserCom.LOG_ERROR,
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명))
System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명))
ex.Message);
}
}
#endregion 폼 컨트롤 초기화
#region Control Event
#region 텍스트박스 키 입력 이벤트 처리
///
/// 텍스트박스 키 입력 이벤트 처리
///
///
///
private void txtEditBox_EditBoxKeyDownEvent(object sender, string sFuncValue)
{
try
{
string sTxtBoxName = ((Cosmos.UI.CsmPosEditBox)sender).Name;
if (sFuncValue == PosKey.MENU_KEY.ENTER)
{
if (sTxtBoxName == "txtPluName")
{
txtAmount.Focus();
}
}
else if (sFuncValue == PosKey.MENU_KEY.CLEAR)
{
// CLEAR 눌렀을 경우 뭘 해줘야 할까...
}
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 void btnSelProc_Click(object sender, EventArgs e)
{
if ((UI.CsmButton)sender == btnUp)
{
dgvData.CsmGridScroll("UP");
#region (2017.11.06) 간이영수증 삭제 기능 추가을 위한 업(UP) 처리
intSelectRow -= 1; // 행값(intSelectRow) 증가
if (intSelectRow < 0) { intSelectRow = 0; }
if (intSelectRow > -1)
{
// 그리드 클릭 이벤트 호출 -----
dgvData_GridClickEvent(sender, intSelectRow.ToString());
}
#endregion
}
else if ((UI.CsmButton)sender == btnDw)
{
dgvData.CsmGridScroll("DOWN");
#region (2017.11.06) 간이영수증 삭제 기능 추가을 위한 다운(DOWN) 처리
intSelectRow += 1; // 행값(intSelectRow) 증가
if (intSelectRow > 4) { intSelectRow = 4; }
if (intSelectRow > -1)
{
// 그리드 클릭 이벤트 호출 -----
dgvData_GridClickEvent(sender, intSelectRow.ToString());
}
#endregion
}
}
#endregion 업/다운 클릭 이벤트
///
/// Form Close
///
///
///
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
#region 버튼 입력 처리
///
/// 상품 등록
///
///
///
private void btnPluChoice_Click(object sender, EventArgs e)
{
try
{
//금액이 입력되지 않은 경우 처리하지 못함
if (txtAmount.Text == "" || txtAmount.Text == "0")
{
WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0175));
return;
}
//-------------------------------------------------------------------------------------
// (2017.11.06) 간이영수증 삭제 기능 추가을 위한 번호 설정
//-------------------------------------------------------------------------------------
// - 기존의 폼 변수에 +1 하는 처리 대신에 데이터 테이블 갯수에 +1 하는 처리로 변경한다.
//-------------------------------------------------------------------------------------
// nNO = nNO + 1;
nNO = m_dtItemInit.Rows.Count + 1;
//-------------------------------------------------------------------------------------
DataRow dr = m_dtItemInit.NewRow();
dr["No"] = nNO;
if (txtPluName.Text.Trim() == "")
{
txtPluName.Text = "기타제품";
}
dr["Plu"] = txtPluName.Text;
dr["Amount"] = CmUtil.GetToMoney(txtAmount.Text);
m_dtItemInit.Rows.Add(dr);
dgvData.CsmGridDataSource = m_dtItemInit;
//금액
txtPluName.Text = "";
txtAmount.Text = "0";
//--------------------------------------------------------------------------------
// (2017.11.06) 간이영수증 삭제 기능 추가을 위한 그리드 클릭 이벤트 및 포커스 설정
//--------------------------------------------------------------------------------
// - 입력시 그리드 포커스는 맨위로
// - 포커스는 상품명으로
//--------------------------------------------------------------------------------
#region 그리드 클릭 이벤트 및 포커스 설정
dgvData_GridClickEvent(sender, "0");
txtPluName.Focus();
#endregion
}
catch (Exception ex)
{
UserLog.WriteLogFile(UserCom.LOG_ERROR,
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명))
System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명))
ex.Message);
}
}
///
/// 영수증 출력
///
///
///
private void btnPrint_Click(object sender, EventArgs e)
{
string sRet = UserCom.RST_ERR;
double dTotAmount = 0;
try
{
DataTable dtData = new DataTable();
dtData.Columns.Add(new DataColumn("NO", typeof(int)));
dtData.Columns.Add(new DataColumn("SALEDT", typeof(string)));
dtData.Columns.Add(new DataColumn("PLU", typeof(string)));
dtData.Columns.Add(new DataColumn("AMOUNT", typeof(string)));
if (dgvData.CsmGridRowsCount <= 0)
{
if (txtAmount.Text != "" && txtAmount.Text != "0")
{
DataRow dr = dtData.NewRow();
dr["NO"] = 1;
dr["SALEDT"] = m_cPosStatus.Global.CultureToDate(txtDate.Text);
dr["PLU"] = "기타제품";
dr["AMOUNT"] = txtAmount.Text;
dtData.Rows.Add(dr);
}
else
{
WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0003));
return;
}
}
for (int i = 0; i < dgvData.CsmGridRowsCount; i++)
{
string sAmount = (dgvData.CsmGridGetCell(i, 2)).Replace(m_cPosStatus.Global.m_stCultureMaster.strGroupingSymbol, "");
dTotAmount = dTotAmount + CmUtil.GetValueToLong(sAmount);
DataRow dr = dtData.NewRow();
dr["NO"] = CmUtil.GetValueToInt(dgvData.CsmGridGetCell(i, 0));
dr["SALEDT"] = m_cPosStatus.Global.CultureToDate(txtDate.Text);
dr["PLU"] = dgvData.CsmGridGetCell(i, 1);
dr["AMOUNT"] = sAmount;
dtData.Rows.Add(dr);
}
// 출력 버튼을 눌렀을 경우 저장 되는것 없이 출력만 가능해야 한다.
sRet = m_cEtcReceipt.SetData(dtData);
if (sRet == UserCom.RST_OK)
{
WinManager.ConfirmMessage(POS_MESSAGE.ERROR.MSG_0179);
}
else
{
WinManager.ErrorMessage(sRet);
}
}
catch (Exception ex)
{
UserLog.WriteLogFile(UserCom.LOG_ERROR,
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명))
System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명))
ex.Message);
}
}
#endregion 버튼 입력 처리
private void btnDate_Click(object sender, EventArgs e)
{
try
{
string sDate = WinBasic.ShowForm(new string[] { FormManager.FORM_CALENDAR });
if (sDate != "") txtDate.Text = m_cPosStatus.Global.DateToCulture(sDate);
}
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 Control Event
//**************************************************
// (2017.11.06) 간이영수증 삭제 기능 추가을 위한
// 삭제버튼(btnDelete) 클릭 이벤트 함수
//**************************************************
#region 삭제버튼(btnDelete) 클릭 이벤트 함수
private void btnDelete_Click(object sender, EventArgs e)
{
if (intSelectRow > -1)
{
//---------------------------------------------
// 데이터 테이블에서 선택한 행을 우선 삭제하고,
// 일련번호 재설정 후
// 데이터 테이블을 그리드에 표시한다.
//---------------------------------------------
#region 데이터 테이블에서 선택행 삭제 -> 일련번호 재설정 -> 그리드에 표시한다.
m_dtItemInit.Rows.RemoveAt(intSelectRow); // 선택한 행을 삭제한다.
for (int i = 0; i < m_dtItemInit.Rows.Count; i++)
{
m_dtItemInit.Rows[i]["No"] = i + 1; // 일련번호 재설정
}
dgvData.CsmGridDataSource = m_dtItemInit; // 그리드에 표시한다.
#endregion
//-----------------------------------------------------------
// 마지막 행까지 삭제했을 경우 '삭제' 버튼을 비활성화 시킨다.
//-----------------------------------------------------------
#region 마지막 행까지 삭제했을 경우 '삭제' 버튼을 비활성화 시킨다.
if (m_dtItemInit != null && m_dtItemInit.Rows.Count == 0)
{
// 삭제버튼 비표시 -----
SubDeleteButtonSetting("비표시");
// 포커스 설정 -----
txtPluName.Focus();
}
#endregion
//-----------------------------------------------------------
// 삭제후 마지막 행이 아니면서
// 기존 소스가 디폴트로 맨처음 행으로 포커스를 이동하므로
// 행위치 값을 맞춰주기 위하여 그리드 클릭 이벤트를 호출한다.
//-----------------------------------------------------------
#region 행위치 값을 맞춰주기 위하여 그리드 클릭 이벤트를 호출한다.
else
{
if (dgvData.CsmGridRowsCount <= intSelectRow)
{
intSelectRow = intSelectRow - 1;
}
dgvData_GridClickEvent(sender, intSelectRow.ToString());
dgvData.CsmGridSelectRow(intSelectRow);
}
#endregion
}
}
#endregion
//**********************************************
// (2017.11.06) 간이영수증 삭제 기능 추가을 위한
// 그리드 클릭 이벤트 함수
//**********************************************
#region 그리드 클릭 이벤트 함수
private void dgvData_GridClickEvent(object sender, string rowIndex)
{
// 사용자가 선택한 행 값(intSelectRow)을 저장한다. -----
if (dgvData.CsmGridRowsCount == 0) return;
intSelectRow = Convert.ToInt16(rowIndex); // 행 값(intSelectRow) 저장
//-------------------------------------------------------------------
// 만약 사용자가 선택한 행이 존재할 경우 '삭제' 버튼을 활성화 시킨다.
//-------------------------------------------------------------------
#region 만약 사용자가 선택한 행이 존재할 경우 '삭제' 버튼을 활성화 시킨다.
if (intSelectRow > -1)
{
// 삭제버튼 표시 -----
SubDeleteButtonSetting("표시");
}
else { return; }
#endregion
}
#endregion
//************************************************
// (2017.11.06) 간이영수증 삭제 기능 추가을 위한
// 삭제버튼(btnDelete) 상태 설정 함수
//************************************************
#region 삭제버튼(btnDelete) 상태 설정 함수
private void SubDeleteButtonSetting(string _strDiv)
{
//--------------------------------------------
// 만약 구분값이 '표시'일 경우
// 삭제 버튼을 출력 버튼 앞에 표시되도록 한다.
//--------------------------------------------
#region 만약 구분값이 '표시'일 경우
if (_strDiv == "표시")
{
btnDelete.Visible = true; // 삭제버튼 표시
btnDelete.Left = 524;
btnPrint.Left = 605;
}
#endregion
//---------------------------------------------------------
// 만약 구분값이 '비표시'일 경우
// 삭제 버튼을 비표시하고 출력 버튼이 공백을 채우도록 한다.
//---------------------------------------------------------
#region 만약 구분값이 '비표시'일 경우
else if (_strDiv == "비표시")
{
btnDelete.Visible = false; // 삭제버튼 비표시
btnDelete.Left = 605;
btnPrint.Left = 524;
}
#endregion
}
#endregion
}
}