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

538 lines
26 KiB
C#

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 System.Globalization;
using Cosmos.ServiceProvider;
using Cosmos.CommonManager;
using Cosmos.Common;
using Cosmos.UserFrame;
using Cosmos.BaseFrame;
namespace Cosmos.Win
{
public partial class frmSOD : Form
{
#region
private SManager sManager = new SManager(); // 이 객체를 통해 업무 Service 호출
private PosStatus m_cPosStatus = new PosStatus(); // 기본정보 참조
private StateServer StateObject = (StateServer)StateServer.GetInstance(); // StateObject : StateServer Object (객체)
private IDataServiceUs m_cSOD = null; // 테스트모드 서비스
private IStoreCheck m_cStoreCheck = null; // 점포점검 서비스
/// <summary>
/// 메인포스 오픈일자
/// </summary>
/// <remarks>
/// 후불주문포스 인경우 참조
/// </remarks>
private string MainPosOpenDate { get; set; }
#endregion
#region &
public frmSOD()
{
InitializeComponent();
base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw, true);
//this.UpdateStyles();
m_cPosStatus = (PosStatus)StateObject.POS; // POS 기본정보
m_cSOD = (IDataServiceUs)sManager.InitServiceInstance(ServiceLists.BSV_OPEN_CLOSE.DLL, ServiceLists.BSV_OPEN_CLOSE.SALE_OPEN);
m_cStoreCheck = (IStoreCheck)sManager.InitServiceInstance(ServiceLists.BSV_OPEN_CLOSE.DLL, ServiceLists.BSV_OPEN_CLOSE.STORE_CHECK);
}
private void frmSOD_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 frmSOD_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
/// <summary>
/// 폼 컨트롤 초기화
/// </summary>
private void InitControl()
{
try
{
picBack.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.POP_SIZE_S);
FormManager.MovePopUpForm(this, 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);
//테마색상 적용!
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 = "";
lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0001);
lblCashierName.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0191);
lblSaleDate.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0242);
lblOrgDate.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0517);
lblSysDate.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0516);
btnOpen.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0001);
txtCashierName.Text = m_cPosStatus.Base.CashierName;
txtOrgDate.Text = m_cPosStatus.Global.DateToCulture(m_cPosStatus.Base.SaleDate);
txtSysDate.Text = m_cPosStatus.Global.DateToCulture(System.DateTime.Now.ToString("yyyyMMdd"));
txtSaleDate.InputTypeFormat = m_cPosStatus.Global.m_stCultureMaster.strDatePattern;
txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(System.DateTime.Now.ToString("yyyyMMdd"));
// 익일개점이 가능할 경우
// 영업일자가 시스템 일자와 같으며 마감이 되어 있다면 다음날로 날짜를 자동 설정한다.
if (PosMstManager.GetPosOption(POS_OPTION.OPT302) != "0")
{
#region Mod, 2017.08.29,
//if (m_cPosStatus.Base.SaleDate == System.DateTime.Now.ToString("yyyyMMdd") && m_cPosStatus.Base.OpenClose == "0")
//{
// txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(System.DateTime.Now.AddDays(1).ToString("yyyyMMdd"));
//}
//else
//{
// txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(System.DateTime.Now.ToString("yyyyMMdd"));
//}
#endregion
if (CmUtil.LongParse(m_cPosStatus.Base.SaleDate) >= CmUtil.LongParse(System.DateTime.Now.ToString("yyyyMMdd")) && m_cPosStatus.Base.OpenClose == "0")
{
txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(System.DateTime.Now.AddDays(1).ToString("yyyyMMdd"));
}
else
{
txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(System.DateTime.Now.ToString("yyyyMMdd"));
}
}
//else
//{
// txtSaleDate.Value = System.DateTime.Now.ToString("yyyyMMdd");
//}
// Add, 2017.03.14, 후불주문POS는 메인포스 개점 이후 개점 가능
//var mainOpenDate = string.Empty;
//if (m_cPosStatus.Base.PosType == PosConst.POS_TYPE.DEFERRED_PAYMENT && m_cPosStatus.Base.PosCommunicationType == PosConst.MAIN_POS_DIV.SUB_POS)
//{
// //IDataServiceUs openCheck = (IDataServiceUs)sManager.InitServiceInstance(ServiceLists.BSV_OPEN_CLOSE.DLL, ServiceLists.BSV_OPEN_CLOSE.SALE_OPEN);
// //sRet = (string)openCheck.GetData(new string[] { "CHECK_SUBPOS_OPEN" });
// //if (sRet.StartsWith(UserCom.RST_ERR))
// //{
// // WinManager.ErrorMessage(sRet);
// // return false;
// //}
// //if (sRet.StartsWith(UserCom.RST_OK))
// //{
// // var tmp = sRet.Split('|');
// // mainOpenDate = tmp[1].Trim();
// //}
//}
// Add, 2017.03.16, 후불 주문포스는 메인포스 개점 이후 개점 가능, 영업일은 메인포스 영업일로 고정
MainPosOpenDate = string.Empty;
txtSaleDate.ReadOnly = false;
btnDate.Enabled = true;
if (m_cPosStatus.Base.PosType == PosConst.POS_TYPE.DEFERRED_PAYMENT && m_cPosStatus.Base.PosCommunicationType == PosConst.MAIN_POS_DIV.SUB_POS)
{
var ret = (string)m_cSOD.GetData(new string[] { "CHECK_SUBPOS_OPEN" });
if (ret.StartsWith(UserCom.RST_ERR))
{
WinManager.ErrorMessage(ret);
this.DialogResult = System.Windows.Forms.DialogResult.Abort;
this.Close();
return;
}
if (ret.StartsWith(UserCom.RST_OK))
{
var tmp = ret.Split('|');
if (tmp.Length > 1) this.MainPosOpenDate = tmp[1].Trim();
}
if (MainPosOpenDate.Trim().Length == 8)
{
txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(MainPosOpenDate);
txtSaleDate.ReadOnly = true;
btnDate.Enabled = false;
}
}
txtSaleDate.Select();
//dtSaleDate.Value = System.DateTime.Now;
//dtSaleDate.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 Control Event
/// <summary>
/// 텍스트박스 활성화 처리
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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);
}
}
/// <summary>
/// 종료 버튼 클릭
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnExit_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
/// <summary>
/// 개점 처리
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnOpen_Click(object sender, EventArgs e)
{
string sRet = UserCom.RST_ERR;
try
{
if (txtSaleDate.Value.Length != 8)
{
WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0186));
return;
}
//#13342 개점/마감시간 허용 시간 제한 start, phj
IDataCommonUs m_cMstCmm = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON);
string sNextOpenTime = string.Empty;
sNextOpenTime = m_cMstCmm.MstCmmSearch("T0031", "1"); //POS 익일개점 허용시간
//#13342 개점/마감시간 허용 시간 제한 end, phj
// Add, 2017.03.16, 후불 주문포스는 메인포스 개점 이후 개점 가능, 영업일은 메인포스 영업일로 고정
var sSaleDate = string.Empty;
if (MainPosOpenDate.Length == 8 &&
m_cPosStatus.Base.PosType == PosConst.POS_TYPE.DEFERRED_PAYMENT &&
m_cPosStatus.Base.PosCommunicationType == PosConst.MAIN_POS_DIV.SUB_POS)
{
txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(MainPosOpenDate);
sSaleDate = MainPosOpenDate;
}
else
{
// 익일개점이 가능할 경우
// 영업일자가 시스템 일자와 같으며 마감이 되어 있다면 다음날로 날짜를 자동 설정한다.
if (PosMstManager.GetPosOption(POS_OPTION.OPT302) != "0")
{
#region Mod, 2017.08.29,
//if (m_cPosStatus.Base.SaleDate == System.DateTime.Now.ToString("yyyyMMdd") && m_cPosStatus.Base.OpenClose == "0")
//{
// txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(System.DateTime.Now.AddDays(1).ToString("yyyyMMdd"));
//}
#endregion
if (CmUtil.LongParse(m_cPosStatus.Base.SaleDate) >= CmUtil.LongParse(System.DateTime.Now.ToString("yyyyMMdd")) && m_cPosStatus.Base.OpenClose == "0")
{
txtSaleDate.Text = m_cPosStatus.Global.DateToCulture(System.DateTime.Now.AddDays(1).ToString("yyyyMMdd"));
}
}
sSaleDate = m_cPosStatus.Global.CultureToDate(txtSaleDate.Text);
// 영업일자 체크
if (CmUtil.LongParse(sSaleDate) < CmUtil.LongParse(System.DateTime.Now.ToString("yyyyMMdd")))
{
WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0186));
return;
}
if (CmUtil.LongParse(sSaleDate) > CmUtil.LongParse(System.DateTime.Now.ToString("yyyyMMdd")))
{
if (PosMstManager.GetPosOption(POS_OPTION.OPT302) == "0")
{
WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0186));
return;
}
}
// Add, 2017.08.29, 마지막 영업일자 영업일자보다 작거나 같은 경우 오류
if (CmUtil.LongParse(sSaleDate) <= CmUtil.LongParse(m_cPosStatus.Base.SaleDate))
{
WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0186));
return;
}
// Add, 2017.08.29, 내일보다 큰 경우 오류
if (CmUtil.LongParse(sSaleDate) > CmUtil.LongParse(System.DateTime.Now.AddDays(1).ToString("yyyyMMdd")))
{
WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0186));
return;
}
//#13342 개점/마감시간 허용 시간 제한 start, phj
//if (m_cPosStatus.Base.CmpCd == "PCKR")
//{
// 옵션값있을경우
if (sNextOpenTime != "")
{
// 기준시간이 지났을 경우, 익일로만 개점 가능하다.
// 그 전에는 익일 개점 불가.
int iNowTime = CmUtil.IntParse(System.DateTime.Now.ToString("HHmm"));
if (CmUtil.LongParse(System.DateTime.Now.ToString("yyyyMMdd")) < CmUtil.LongParse(sSaleDate))
{
if (int.Parse(sNextOpenTime, 0) <= iNowTime)
{
}
else
{
string sMsg = string.Empty;
sMsg = sNextOpenTime.Substring(0,2) + ":" + sNextOpenTime.Substring(2,2);
WinManager.ConfirmMessage(string.Format(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0767), sMsg));
return;
}
}
}
//}
//#13342 개점/마감시간 허용 시간 제한 end, phj
}
//// 영업개시 시작(IRT 전송)
//sRet = m_cSOD.Execute(new string[] { sSaleDate, m_cPosStatus.Base.CashierNo, "0" });
//if (sRet != UserCom.RST_OK)
//{
// // 영업개시 통신에 실패하였습니다. 수동 개설 하시겠습니까?
// if (WinManager.QuestionMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0188)) != true)
// {
// this.DialogResult = DialogResult.Cancel;
// return;
// }
//}
// 영업일자 확인 팝업창 발생
if (WinManager.QuestionMessage(string.Format(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0575), txtSaleDate.Text)) != true)
{
//WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0574));
return;
}
// 개점 완료 처리 => 영업일자 변경, 거래번호 설정
sRet = m_cSOD.SetData(sSaleDate);
if (sRet != UserCom.RST_OK)
{
WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0574));
return;
}
// 개점정보 생성
IAccADMT m_cAccADMT = (IAccADMT)sManager.InitServiceInstance(ServiceLists.BSV_OPEN_CLOSE.DLL, ServiceLists.BSV_OPEN_CLOSE.ACC_ADMT);
sRet = m_cAccADMT.SetData(new string[] { ItemConst.TRAN_KIND.LOG.POS_OPEN, ItemConst.TRAN_DIV.NORMAL }, null, "0");
if (sRet != UserCom.RST_OK)
{
WinManager.ErrorMessage(sRet);
}
// 준비금 입력
sRet = WinOpenClose.ShowForm(new string[] { FormManager.FORM_ACC_REMONEY, sSaleDate, "AutoClose" });
if (sRet != UserCom.RST_OK)
{
}
// 환율 수기 등록
if (CmUtil.IsNull(PosMstManager.GetPosOption(POS_OPTION.OPT040), "0") == "1")
{
IDataCommonUs m_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON);
DataTable dtMemu = m_cDataCommon.SelectForeign();
// 수신 받은 환율이 없는 경우 수기등록 화면으로 이동
if (dtMemu == null)
{
sRet = WinBasic.ShowForm(new string[] { FormManager.FORM_ETC_EXCHANGE_REG, "" });
}
}
WinManager.ConfirmMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0204));
//// 준비점검 공지사항 및 판매준비점검 시작
//sRet = UserCom.RST_ERR;
//DataTable dtCheckInfo = new DataTable();
//string sCheckCode = string.Empty;
//string sAlarmType = string.Empty;
//// 웹 업무 화면 호출(준비점검, 공지사항, 판매준비점검)
//// 개점시 준비점검 입력 여부
//dtCheckInfo = new DataTable();
//// 0 : 없음, 1 : 로그인, 2 : 개점, 3 : 마감
//// 공지사항은 POS 옵션에 따라 보여주고 안보여주고를 결정한다.
//// 개점 요청 일자로 스케줄을 체크한다.
//dtCheckInfo = (DataTable)m_cStoreCheck.StoreCheckSchedule(PosConst.POS_CHECK_ALARM_TYPE.CHECK_TYPE_NONE, PosKey.MENU_KEY.SALE_OPEN);
//if (dtCheckInfo.Rows.Count > 0)
//{
// // 공지사항 호출
// sRet = WinOpenClose.ShowForm(new string[] { FormManager.FORM_SCH_PREP_STOR_NOTICE, PosKey.MENU_KEY.PREP_STOR_NOTICE, sCheckCode });
// if (sRet != UserCom.RST_OK)
// {
// }
//}
// 왕진활현 인터페이스 생성자료 삭제
if (m_cPosStatus.Mst.ETC_IF_DIV == ItemConst.TranInterfaceOutside.IF_CHN_03)
{
CmUtil.FileDelete(BaseCom.NxDataPath + @"CapitaInterface\possalesdata.txt");
// 디렉토리 생성
CmUtil.CreateDirectory(BaseCom.NxDataPath + @"CapitaInterface\");
}
// 준비점검 공지사항 및 판매준비점검
sRet = WinOpenClose.EndStoreCheck(PosConst.POS_CHECK_ALARM_TYPE.CHECK_TYPE_NONE, PosKey.MENU_KEY.SALE_OPEN);
sRet = WinOpenClose.EndStoreCheck(PosConst.POS_CHECK_ALARM_TYPE.CHECK_TYPE_SOD, PosKey.MENU_KEY.SALE_OPEN);
//// 개점시 준비점검 입력 여부
//// 1 : 로그인, 2 : 개점, 3 : 마감
//// 개점 요청 일자로 스케줄을 체크한다.
//dtCheckInfo = (DataTable)m_cStoreCheck.StoreCheckSchedule(PosConst.POS_CHECK_ALARM_TYPE.CHECK_TYPE_SOD, PosKey.MENU_KEY.SALE_OPEN);
//if (dtCheckInfo.Rows.Count > 0)
//{
// for (int nLoop = 0; nLoop < dtCheckInfo.Rows.Count; nLoop++)
// {
// sCheckCode = CmUtil.GetDataRowStr(dtCheckInfo.Rows[nLoop], "CHECK_CD");
// if (sCheckCode != "" && sCheckCode != null)
// {
// sRet = m_cStoreCheck.StoreCheckSaveIrt(sCheckCode, sSaleDate);
// if (sRet == UserCom.RST_OK)
// {
// //continue;
// }
// else
// {
// // 이미 등록되어 있다면 해당 체크 코드는 빠져나온다.
// continue;
// }
// }
// else
// {
// continue;
// }
// if (sCheckCode == "12")
// {
// // 유통기한 점검 체크리스트
// sRet = WinOpenClose.ShowForm(new string[] { FormManager.FORM_EXPIRATION_DATE_CHECK, PosKey.MENU_KEY.EXPIRATION_DATE_CHECK_LIST, PosConst.STORE_CHECK_FLAG.STORE_OPEN_CHECK, sSaleDate, sCheckCode });
// if (sRet != UserCom.RST_OK)
// {
// }
// }
// else if (sCheckCode == "11")
// {
// // 식품안전의 날
// sRet = WinOpenClose.ShowForm(new string[] { FormManager.FORM_FOOD_SAFETY_DAY_POPUP, PosKey.MENU_KEY.FOOD_SAFETY_DAY_POPUP, PosConst.STORE_CHECK_FLAG.STORE_OPEN_CHECK, sSaleDate, sCheckCode });
// if (sRet != UserCom.RST_OK)
// {
// }
// }
// else
// {
// // 위에 설정된 점검코드 외 점검내용은 기본 점검화면을 사용한다.
// sRet = WinOpenClose.ShowForm(new string[] { FormManager.FORM_SOD_CHECK, PosKey.MENU_KEY.STORE_CHECK_LIST, PosConst.STORE_CHECK_FLAG.STORE_OPEN_CHECK, sSaleDate, sCheckCode });
// if (sRet != UserCom.RST_OK)
// {
// }
// }
// }
//}
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);
}
}
#endregion Control Event
private void btnDate_Click(object sender, EventArgs e)
{
try
{
string sDate = WinBasic.ShowForm(new string[] { FormManager.FORM_CALENDAR });
if (sDate != "") txtSaleDate.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);
}
}
private void txtSaleDate_Enter(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);
}
}
}
}