Files
2022-10-09 12:22:57 +09:00

247 lines
8.9 KiB
C#

using System;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace Cheongbuk_MegaPark_Key_Management
{
public partial class MainForm : Form
{
// 기본 Database
private readonly DB _database = new DB();
public MainForm()
{
InitializeComponent();
}
private void ClockTimer_Tick(object sender, EventArgs e)
{
ClockChanger();
}
private void ClockChanger()
{
Clock.Text = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
}
private void MainForm_Load(object sender, EventArgs e)
{
// Check DBFile
if (!File.Exists(Setting.DbLocation))
{
MessageBox.Show("DATABASE 파일을 찾을수 없습니다.\r\n프로그램을 종료합니다.", "프로그램 에러", MessageBoxButtons.OK,
MessageBoxIcon.Error);
Application.Exit();
}
// Clock Init Setting
Clock.Font = new Font(FontLibrary.Families[0], 30, FontStyle.Bold);
//button_RentKey.Font = new Font(FontLibrary.Families[1], 10);
ClockChanger();
//Database Load
_database.LoadData();
//MainScreen Init Change
ChangeMainScreenData();
//ListView Init Setting
listView_Profit.Items.Clear();
listView_Rent.Items.Clear();
foreach (var rentData in Setting.RentDatas) ListViewRentDataAdd(rentData);
foreach (var profitData in Setting.ProfitDatas) ListViewProfitDataAdd(profitData);
}
private void ListViewRentDataAdd(RentData rentData)
{
var data = new string[3];
data[0] = rentData.KeyCode.ToString();
data[1] = Setting.CategoryDictionary[rentData.Category].CategoryName;
data[2] = rentData.StartDateTime.ToString("yyyy/MM/dd HH:mm:ss");
listView_Rent.Items.Add(new ListViewItem(data));
}
private void ListViewProfitDataAdd(ProfitData profitData)
{
var data = new string[5];
data[0] = profitData.Id.ToString();
data[1] = profitData.KeyCode.ToString();
data[2] = Setting.CategoryDictionary[profitData.Category].CategoryName;
data[3] = profitData.UseTime / 60 + "시간 " + profitData.UseTime % 60 + "분";
data[4] = $"{profitData.ProfitAdd - profitData.ProfitDiscount:#,##0원}";
listView_Profit.Items.Add(new ListViewItem(data));
}
// 메인 스크린 데이터 갱신
private void ChangeMainScreenData()
{
int sumProfitAdd = Setting.ProfitDatas.Sum(x => x.ProfitAdd);
int sumProfitDiscount = Setting.ProfitDatas.Sum(x => x.ProfitDiscount);
label_AllKeyCount.Text = $"{Setting.RentDatas.Count + Setting.ProfitDatas.Count:#,##0}";
label_NowKeyCount.Text = $"{Setting.RentDatas.Count:#,##0}";
label_Profit.Text = (sumProfitAdd - sumProfitDiscount).ToMoney();
}
private void TextBox_KeyNumber_TextChanged(object sender, EventArgs e)
{
var value = Regex.Replace(textBox_KeyNumber.Text, "[^0-9]", "");
if (value != textBox_KeyNumber.Text)
{
textBox_KeyNumber.Text = value;
textBox_KeyNumber.SelectionStart = textBox_KeyNumber.Text.Length;
}
}
private void TextBox_KeyNumber_Changer(object sender, EventArgs e)
{
int.TryParse(((Button)sender).Tag.ToString(), out var key);
if (key > -1)
{
if (key != 0 || textBox_KeyNumber.Text != string.Empty) textBox_KeyNumber.Text += key.ToString();
}
else
{
switch (key)
{
case -1:
{
if (textBox_KeyNumber.Text.Length != 0)
textBox_KeyNumber.Text =
textBox_KeyNumber.Text.Substring(0, textBox_KeyNumber.Text.Length - 1);
break;
}
case -2:
textBox_KeyNumber.Text = string.Empty;
break;
}
}
textBox_KeyNumber.Focus();
textBox_KeyNumber.SelectionStart = textBox_KeyNumber.Text.Length;
}
private void Button_RentKey_Click(object sender, EventArgs e)
{
RentReturnProcess();
textBox_KeyNumber.Focus();
}
private void TextBox_KeyNumber_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar != 13) return;
RentReturnProcess();
textBox_KeyNumber.Focus();
}
private void RentReturnProcess()
{
int.TryParse(textBox_KeyNumber.Text, out var key);
if (key == 0) return;
var tempRentData = (from rentData in Setting.RentDatas where rentData.KeyCode == key select rentData)
.FirstOrDefault();
// 대여 프로세스
if (tempRentData.KeyCode == 0)
{
var rentKey = new RentKey { KeyCode = key };
if (DialogResult.Yes == rentKey.ShowDialog())
{
var returnData = rentKey.ReturnData;
Setting.RentDatas.Add(returnData);
ListViewRentDataAdd(returnData);
_database.InsertRent(returnData);
textBox_KeyNumber.Text = string.Empty;
}
}
// 반납프로세스
else
{
var returnKey = new ReturnKey { Data = tempRentData };
if (DialogResult.Yes == returnKey.ShowDialog())
{
var returnData = returnKey.ReturnData;
var rD = new RentData();
foreach (var rentData in Setting.RentDatas)
if (rentData.KeyCode == returnData.KeyCode)
rD = rentData;
Setting.RentDatas.Remove(rD);
foreach (ListViewItem listViewItem in listView_Rent.Items)
if (listViewItem.SubItems[0].Text == returnData.KeyCode.ToString())
listView_Rent.Items.Remove(listViewItem);
returnData.Id = _database.ReturnRent(returnData);
Setting.ProfitDatas.Add(returnData);
ListViewProfitDataAdd(returnData);
}
textBox_KeyNumber.Text = string.Empty;
}
ChangeMainScreenData();
}
private void ListView_Profit_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button.Equals(MouseButtons.Right))
{
int.TryParse(listView_Profit.SelectedItems[0].Text, out int value);
if (DialogResult.Yes == MessageBox.Show("정말 선택된 데이터를 삭제하시겠습니까?", "삭제 확인",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question))
{
ProfitData pf = new ProfitData();
foreach (var profitData in Setting.ProfitDatas.Where(profitData => profitData.Id == value))
{
pf = profitData;
}
Setting.ProfitDatas.Remove(pf);
_database.DeleteProfitData(value);
listView_Profit.Items.RemoveAt(listView_Profit.SelectedItems[0].Index);
ChangeMainScreenData();
}
}
}
private void ListView_Rent_MouseDoubleClick(object sender, MouseEventArgs e)
{
int.TryParse(listView_Rent.SelectedItems[0].Text, out int value);
RentData rD = new RentData();
foreach (var rentData in Setting.RentDatas.Where(x => x.KeyCode == value))
{
rD = rentData;
}
RentKeyInfo rentKeyInfo = new RentKeyInfo();
rentKeyInfo.RentKeyData = rD;
rentKeyInfo.ShowDialog();
textBox_KeyNumber.Focus();
}
private void ListView_Profit_MouseDoubleClick(object sender, MouseEventArgs e)
{
int.TryParse(listView_Profit.SelectedItems[0].Text, out int value);
ProfitData pD = new ProfitData();
foreach (var profitData in Setting.ProfitDatas.Where(x => x.Id == value))
{
pD = profitData;
}
ReturnKeyInfo returnKeyInfo = new ReturnKeyInfo();
returnKeyInfo.ProfitDataInfo = pD;
returnKeyInfo.ShowDialog();
textBox_KeyNumber.Focus();
}
}
}