diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomForm/InsertResult.Designer.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomForm/InsertResult.Designer.cs new file mode 100644 index 0000000..6c55453 --- /dev/null +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomForm/InsertResult.Designer.cs @@ -0,0 +1,108 @@ +namespace HSUCO_Cargo_Garage_Operation_Program.CustomForm +{ + partial class InsertResult + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + this.dataGridView_List = new System.Windows.Forms.DataGridView(); + this.metroButton_ExportExcel = new MetroFramework.Controls.MetroButton(); + this.metroButton_Close = new MetroFramework.Controls.MetroButton(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView_List)).BeginInit(); + this.SuspendLayout(); + // + // dataGridView_List + // + this.dataGridView_List.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.dataGridView_List.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; + this.dataGridView_List.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("굴림", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridView_List.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dataGridView_List.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView_List.Location = new System.Drawing.Point(23, 63); + this.dataGridView_List.Name = "dataGridView_List"; + this.dataGridView_List.ReadOnly = true; + this.dataGridView_List.RowTemplate.Height = 23; + this.dataGridView_List.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dataGridView_List.Size = new System.Drawing.Size(636, 370); + this.dataGridView_List.TabIndex = 7; + // + // metroButton_ExportExcel + // + this.metroButton_ExportExcel.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.metroButton_ExportExcel.BackgroundImage = global::HSUCO_Cargo_Garage_Operation_Program.Properties.Resources.file_type_excel_icon_130611; + this.metroButton_ExportExcel.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.metroButton_ExportExcel.FontSize = MetroFramework.MetroButtonSize.Tall; + this.metroButton_ExportExcel.Location = new System.Drawing.Point(665, 318); + this.metroButton_ExportExcel.Name = "metroButton_ExportExcel"; + this.metroButton_ExportExcel.Size = new System.Drawing.Size(121, 115); + this.metroButton_ExportExcel.TabIndex = 11; + this.metroButton_ExportExcel.UseSelectable = true; + this.metroButton_ExportExcel.Click += new System.EventHandler(this.metroButton_ExportExcel_Click); + // + // metroButton_Close + // + this.metroButton_Close.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.metroButton_Close.FontSize = MetroFramework.MetroButtonSize.Tall; + this.metroButton_Close.Location = new System.Drawing.Point(665, 63); + this.metroButton_Close.Name = "metroButton_Close"; + this.metroButton_Close.Size = new System.Drawing.Size(121, 40); + this.metroButton_Close.TabIndex = 12; + this.metroButton_Close.Text = "닫기"; + this.metroButton_Close.UseSelectable = true; + this.metroButton_Close.Click += new System.EventHandler(this.metroButton_Close_Click); + // + // InsertResult + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(809, 456); + this.Controls.Add(this.metroButton_Close); + this.Controls.Add(this.metroButton_ExportExcel); + this.Controls.Add(this.dataGridView_List); + this.Name = "InsertResult"; + this.Text = "결과"; + ((System.ComponentModel.ISupportInitialize)(this.dataGridView_List)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.DataGridView dataGridView_List; + private MetroFramework.Controls.MetroButton metroButton_ExportExcel; + private MetroFramework.Controls.MetroButton metroButton_Close; + } +} \ No newline at end of file diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomForm/InsertResult.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomForm/InsertResult.cs new file mode 100644 index 0000000..9ac5726 --- /dev/null +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomForm/InsertResult.cs @@ -0,0 +1,71 @@ +using MetroFramework; +using MetroFramework.Forms; +using System; +using System.Collections.Generic; +using System.Data; +using System.Windows.Forms; + +namespace HSUCO_Cargo_Garage_Operation_Program.CustomForm +{ + public partial class InsertResult : MetroForm + { + List _resultSetUserListInformation; + public InsertResult(List ResultSetUserListInformation) + { + _resultSetUserListInformation = ResultSetUserListInformation; + InitializeComponent(); + DataChange(); + + } + + private void DataChange() + { + var dataTable = new DataTable(); + dataTable.Columns.Add("주차구역"); + + + dataTable.Columns.Add("이용자번호"); + dataTable.Columns.Add("접 수번호"); + + + for (int i = 0; i < _resultSetUserListInformation.Count; i++) + { + dataTable.Rows + .Add( + _resultSetUserListInformation[i].Area, + _resultSetUserListInformation[i].No, + _resultSetUserListInformation[i].ApplicantNo + ); + } + + dataGridView_List.DataSource = dataTable; + dataGridView_List.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + } + private void metroButton_ExportExcel_Click(object sender, System.EventArgs e) + { + var excelWrapper = new ExcelWrapper(); + + var saveFileDialog = new SaveFileDialog(); + saveFileDialog.Filter = "XLSX files (*.xlsx)|*.xlsx"; + + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + var result = excelWrapper.WriteDataTableToExcel((DataTable)dataGridView_List.DataSource, "UserList", saveFileDialog.FileName, "대기자 등록 리스트", Environment.MachineName, DateTime.Now); + if (result) + { + MetroMessageBox.Show(this, "엑셀 파일 저장에 성공하였습니다.", "Excel Export", MessageBoxButtons.OK, MessageBoxIcon.Information); + DataChange(); + } + else + { + MetroMessageBox.Show(this, "엑셀 파일 저장에 실패하였습니다.", "Excel Export", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + private void metroButton_Close_Click(object sender, System.EventArgs e) + { + this.Close(); + } + } +} diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomForm/InsertResult.resx b/HSUCO_Cargo_Garage_Operation_Program/CustomForm/InsertResult.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomForm/InsertResult.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomForm/LotsScreen.Designer.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomForm/LotsScreen.Designer.cs new file mode 100644 index 0000000..a122d1d --- /dev/null +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomForm/LotsScreen.Designer.cs @@ -0,0 +1,90 @@ +namespace HSUCO_Cargo_Garage_Operation_Program.CustomForm +{ + partial class LotsScreen + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); + this.metroButton_Close = new MetroFramework.Controls.MetroButton(); + this.flowLayoutPanel_Lots = new System.Windows.Forms.FlowLayoutPanel(); + this.SuspendLayout(); + // + // metroLabel1 + // + this.metroLabel1.AutoSize = true; + this.metroLabel1.Location = new System.Drawing.Point(93, 12); + this.metroLabel1.Name = "metroLabel1"; + this.metroLabel1.Size = new System.Drawing.Size(24, 19); + this.metroLabel1.TabIndex = 0; + this.metroLabel1.Text = "1/1"; + // + // metroButton_Close + // + this.metroButton_Close.Location = new System.Drawing.Point(12, 12); + this.metroButton_Close.Name = "metroButton_Close"; + this.metroButton_Close.Size = new System.Drawing.Size(75, 23); + this.metroButton_Close.TabIndex = 1; + this.metroButton_Close.Text = "닫기"; + this.metroButton_Close.UseSelectable = true; + this.metroButton_Close.Click += new System.EventHandler(this.metroButton_Close_Click); + // + // flowLayoutPanel_Lots + // + this.flowLayoutPanel_Lots.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.flowLayoutPanel_Lots.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.flowLayoutPanel_Lots.Location = new System.Drawing.Point(9, 54); + this.flowLayoutPanel_Lots.Margin = new System.Windows.Forms.Padding(0); + this.flowLayoutPanel_Lots.Name = "flowLayoutPanel_Lots"; + this.flowLayoutPanel_Lots.Size = new System.Drawing.Size(782, 437); + this.flowLayoutPanel_Lots.TabIndex = 2; + // + // LotsScreen + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.ActiveCaptionText; + this.ClientSize = new System.Drawing.Size(800, 500); + this.Controls.Add(this.flowLayoutPanel_Lots); + this.Controls.Add(this.metroButton_Close); + this.Controls.Add(this.metroLabel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "LotsScreen"; + this.Text = "LotsScreen"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private MetroFramework.Controls.MetroLabel metroLabel1; + private MetroFramework.Controls.MetroButton metroButton_Close; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel_Lots; + } +} \ No newline at end of file diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomForm/LotsScreen.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomForm/LotsScreen.cs new file mode 100644 index 0000000..cfb7f5a --- /dev/null +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomForm/LotsScreen.cs @@ -0,0 +1,35 @@ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace HSUCO_Cargo_Garage_Operation_Program.CustomForm +{ + public partial class LotsScreen : Form + { + public LotsScreen() + { + InitializeComponent(); + this.StartPosition = FormStartPosition.Manual; + var fullScrenn_bounds = Rectangle.Empty; + + foreach (var screen in Screen.AllScreens) + { + fullScrenn_bounds = Rectangle.Union(fullScrenn_bounds, screen.Bounds); + } + this.ClientSize = new Size(fullScrenn_bounds.Width, fullScrenn_bounds.Height); + this.Location = new Point(fullScrenn_bounds.Left, fullScrenn_bounds.Top); + this.TopMost = true; + + CustomUserControl.Lot a = new CustomUserControl.Lot("특대형-999", "2023-A1234"); + CustomUserControl.Lot b = new CustomUserControl.Lot("특대형-998", "2023-A1232"); + CustomUserControl.Lot c = new CustomUserControl.Lot("특대형-996", "2023-A1231"); + flowLayoutPanel_Lots.Controls.Add(a); flowLayoutPanel_Lots.Controls.Add(b); flowLayoutPanel_Lots.Controls.Add(c); + + } + + private void metroButton_Close_Click(object sender, EventArgs e) + { + this.Close(); + } + } +} diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomForm/LotsScreen.resx b/HSUCO_Cargo_Garage_Operation_Program/CustomForm/LotsScreen.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomForm/LotsScreen.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomForm/Refund.Designer.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomForm/Refund.Designer.cs index beb9b63..b9c8b78 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/CustomForm/Refund.Designer.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomForm/Refund.Designer.cs @@ -49,7 +49,7 @@ // // metroDateTime_Refund // - this.metroDateTime_Refund.Location = new System.Drawing.Point(183, 159); + this.metroDateTime_Refund.Location = new System.Drawing.Point(147, 146); this.metroDateTime_Refund.MinimumSize = new System.Drawing.Size(0, 29); this.metroDateTime_Refund.Name = "metroDateTime_Refund"; this.metroDateTime_Refund.Size = new System.Drawing.Size(200, 29); @@ -58,7 +58,7 @@ // metroButton_Refund // this.metroButton_Refund.FontSize = MetroFramework.MetroButtonSize.Tall; - this.metroButton_Refund.Location = new System.Drawing.Point(44, 212); + this.metroButton_Refund.Location = new System.Drawing.Point(23, 181); this.metroButton_Refund.Name = "metroButton_Refund"; this.metroButton_Refund.Size = new System.Drawing.Size(170, 50); this.metroButton_Refund.TabIndex = 37; @@ -69,7 +69,7 @@ // metroButton_Cancel // this.metroButton_Cancel.FontSize = MetroFramework.MetroButtonSize.Tall; - this.metroButton_Cancel.Location = new System.Drawing.Point(258, 221); + this.metroButton_Cancel.Location = new System.Drawing.Point(207, 181); this.metroButton_Cancel.Name = "metroButton_Cancel"; this.metroButton_Cancel.Size = new System.Drawing.Size(170, 50); this.metroButton_Cancel.TabIndex = 38; @@ -117,7 +117,7 @@ // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(466, 304); + this.ClientSize = new System.Drawing.Size(400, 250); this.Controls.Add(this.metroLabel5); this.Controls.Add(this.metroLabel4); this.Controls.Add(this.metroLabel_DateEnd); diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ApplicantControl.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ApplicantControl.cs index ef599b8..e973f87 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ApplicantControl.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ApplicantControl.cs @@ -93,7 +93,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl return; } var applicant = new ApplicantInformation(); - applicant.ApplicantType = metroRadioButton_Draw.Checked; // 추첨이 true, 대기가 false + applicant.ApplicantType = metroRadioButton_Draw.Checked ? EApplicantType.Lots : EApplicantType.Wait; // 추첨이 true, 대기가 false applicant.CargoVehicleNumber = metroTextBox_CargoVehicleNumber.Text.Trim(); applicant.CargoVehicleName = metroTextBox_CargoVehicleName.Text.Trim(); applicant.PassengerVehicleNumber = metroTextBox_PassengerVehicleNumber.Text.Trim(); @@ -104,7 +104,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl applicant.PersonalNumber = metroTextBox_PersonalNumber.Text.Trim(); applicant.Phone = maskedTextBox_Phone.Text.Trim(); applicant.Address = metroTextBox_Address.Text.Trim(); - applicant.DateOfApplication = DateTime.Now; + applicant.Date = DateTime.Now; var resultInsert = Database.SetApplicant(applicant); @@ -120,7 +120,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl printFilingReceiptInformation.Address = applicant.Address; printFilingReceiptInformation.CargoVehicleNumber = applicant.CargoVehicleNumber; printFilingReceiptInformation.PassengerVehicleNumber = applicant.PassengerVehicleNumber; - printFilingReceiptInformation.DateReception = applicant.DateOfApplication; + printFilingReceiptInformation.DateReception = applicant.Date; PrintFilingReceipt printFilingReceipt = new PrintFilingReceipt(new List() { printFilingReceiptInformation }); var printPreviewDialog = new PrintPreviewDialog(); diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ApplicantList.Designer.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ApplicantList.Designer.cs index 78dbe36..7eae59e 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ApplicantList.Designer.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ApplicantList.Designer.cs @@ -28,7 +28,7 @@ /// private void InitializeComponent() { - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); this.metroPanel1 = new MetroFramework.Controls.MetroPanel(); this.metroButton_UpdateUserData = new MetroFramework.Controls.MetroButton(); this.metroButton_ExportExcel = new MetroFramework.Controls.MetroButton(); @@ -209,19 +209,21 @@ // // dataGridView_List // + this.dataGridView_List.AllowUserToAddRows = false; + this.dataGridView_List.AllowUserToDeleteRows = false; this.dataGridView_List.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.dataGridView_List.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; this.dataGridView_List.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle2.Font = new System.Drawing.Font("굴림", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); - dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridView_List.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("굴림", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridView_List.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; this.dataGridView_List.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dataGridView_List.Location = new System.Drawing.Point(20, 120); this.dataGridView_List.Name = "dataGridView_List"; diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ApplicantList.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ApplicantList.cs index f01be79..365948b 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ApplicantList.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ApplicantList.cs @@ -71,7 +71,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl applicants[i].PassengerVehicleNumber, applicants[i].PassengerVehicleName, applicants[i].VehicleType == 0 ? "대형(4.5톤 미만)" : "특대형(4.5톤 이상)", - applicants[i].DateOfApplication + applicants[i].Date.DateTimeDatabase() ); } @@ -121,37 +121,32 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl void metroButton_UpdateUser_Click(object sender, EventArgs e) { - var allCount = dataGridView_List.SelectedRows.Count; - if (allCount == 0) return; + var count = dataGridView_List.Rows.Count - 1; + if (count == 0) return; - var CargoVehicleNumber = new List(); - - for (int i = 0; i < dataGridView_List.SelectedRows.Count; i++) + Promotion promotion = new Promotion("추첨자 이용기간"); + DialogResult dialogResult = promotion.ShowDialog(); + if (dialogResult != DialogResult.OK) { - if (dataGridView_List.SelectedRows[i].Cells[6].Value.ToString() == "Y") - { - CargoVehicleNumber.Add(dataGridView_List.SelectedRows[i].Cells[0].Value.ToString()); - } - } - - if (CargoVehicleNumber.Count == 0) - { - MetroMessageBox.Show(this, "선택하신 건수 중에 당첨 처리 할수 있는 건이 없습니다.", "당첨 처리", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } - - var message = "선태하신 " + allCount + "건을 당첨 하시겠습니까?"; - - if (MetroMessageBox.Show(this, message, "이용자로 변경", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK) + DateTime startDate = promotion.StartDate; + LeftAreaInformation leftAreaInformation = Database.GetLeftArea(startDate, Global.GlobalSettings.CargoLargeMaxCount, Global.GlobalSettings.CargoOversizedMaxCount); + if (leftAreaInformation.Large.Count + leftAreaInformation.OverSized.Count == 0) { - //var promotion = new -Promotion(); - - //if (promotion.ShowDialog() == DialogResult.OK) - //{ - //Database.AddUserList(CargoVehicleNumber, promotion.StartDate, promotion.EndDate, promotion.TotalCost); - // DataChange(); - //} + MetroMessageBox.Show(this, "남은 자리가 없습니다", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; } + List result = Database.SetUserListForApplicant(leftAreaInformation, promotion.EndDate); + //TODO: 당첨 화면 출력 필요함 + LotsScreen lotsScreen = new LotsScreen(); + lotsScreen.ShowDialog(); + + InsertResult insertResult = new InsertResult(result); + insertResult.ShowDialog(); + + DataChange(); + } private void metroButton_ExportExcel_Click(object sender, EventArgs e) @@ -184,8 +179,8 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl UpdateUserInformation updateUserInformation = Database.GetUserData(EUserInformationType.ApplicantList, no); UpdateUserData updateUserData = new UpdateUserData(updateUserInformation); - DialogResult dialogResult = updateUserData.ShowDialog(); - if(dialogResult ==DialogResult.OK) + DialogResult dialogResult = updateUserData.ShowDialog(); + if (dialogResult == DialogResult.OK) { DataChange(); } diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ListCertificate.Designer.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ListCertificate.Designer.cs index dd3cfab..84883c7 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ListCertificate.Designer.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ListCertificate.Designer.cs @@ -44,6 +44,8 @@ // // dataGridView_List // + this.dataGridView_List.AllowUserToAddRows = false; + this.dataGridView_List.AllowUserToDeleteRows = false; this.dataGridView_List.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ListCertificate.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ListCertificate.cs index 0e2fc0d..17a0d2c 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ListCertificate.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ListCertificate.cs @@ -57,13 +57,13 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl .Add( certificateInformation[i].IssueNumber, - certificateInformation[i].IssueDate, + certificateInformation[i].IssueDate.DateTimeDatabase(), certificateInformation[i].Name, certificateInformation[i].PersonalNumber, certificateInformation[i].Address, certificateInformation[i].CargoVehicleNumber, - certificateInformation[i].StartDate, - certificateInformation[i].EndDate, + certificateInformation[i].StartDate.ToString("yyyy-MM-dd"), + certificateInformation[i].EndDate.ToString("yyyy-MM-dd"), certificateInformation[i].Amount ); diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ListProceeds.Designer.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ListProceeds.Designer.cs index 9706917..0f02e69 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ListProceeds.Designer.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ListProceeds.Designer.cs @@ -103,6 +103,8 @@ // // dataGridView_List // + this.dataGridView_List.AllowUserToAddRows = false; + this.dataGridView_List.AllowUserToDeleteRows = false; this.dataGridView_List.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ListProceeds.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ListProceeds.cs index 17da927..67aff7b 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ListProceeds.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/ListProceeds.cs @@ -78,7 +78,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl proceedsDatas[i].Name, typeString, String.Format("{0:n0}", proceedsDatas[i].Amount), - proceedsDatas[i].Date + proceedsDatas[i].Date.DateTimeDatabase() ); } diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/Lot.Designer.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/Lot.Designer.cs new file mode 100644 index 0000000..a50c2e1 --- /dev/null +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/Lot.Designer.cs @@ -0,0 +1,106 @@ +namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl +{ + partial class Lot + { + /// + /// 필수 디자이너 변수입니다. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 사용 중인 모든 리소스를 정리합니다. + /// + /// 관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 구성 요소 디자이너에서 생성한 코드 + + /// + /// 디자이너 지원에 필요한 메서드입니다. + /// 이 메서드의 내용을 코드 편집기로 수정하지 마세요. + /// + private void InitializeComponent() + { + this.metroPanel1 = new MetroFramework.Controls.MetroPanel(); + this.label_No = new System.Windows.Forms.Label(); + this.label_Area = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.metroPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // metroPanel1 + // + this.metroPanel1.Controls.Add(this.label_No); + this.metroPanel1.Controls.Add(this.label2); + this.metroPanel1.Controls.Add(this.label_Area); + this.metroPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.metroPanel1.HorizontalScrollbarBarColor = true; + this.metroPanel1.HorizontalScrollbarHighlightOnWheel = false; + this.metroPanel1.HorizontalScrollbarSize = 10; + this.metroPanel1.Location = new System.Drawing.Point(0, 0); + this.metroPanel1.Name = "metroPanel1"; + this.metroPanel1.Size = new System.Drawing.Size(340, 90); + this.metroPanel1.TabIndex = 3; + this.metroPanel1.VerticalScrollbarBarColor = true; + this.metroPanel1.VerticalScrollbarHighlightOnWheel = false; + this.metroPanel1.VerticalScrollbarSize = 10; + // + // label_No + // + this.label_No.AutoSize = true; + this.label_No.Font = new System.Drawing.Font("맑은 고딕", 20.25F, System.Drawing.FontStyle.Bold); + this.label_No.Location = new System.Drawing.Point(167, 50); + this.label_No.Name = "label_No"; + this.label_No.Size = new System.Drawing.Size(170, 37); + this.label_No.TabIndex = 5; + this.label_No.Text = "2023-L9999"; + // + // label_Area + // + this.label_Area.AutoSize = true; + this.label_Area.Font = new System.Drawing.Font("맑은 고딕", 30F, System.Drawing.FontStyle.Bold); + this.label_Area.Location = new System.Drawing.Point(3, 0); + this.label_Area.Name = "label_Area"; + this.label_Area.Size = new System.Drawing.Size(229, 54); + this.label_Area.TabIndex = 2; + this.label_Area.Text = "특대형-999"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("맑은 고딕", 20.25F, System.Drawing.FontStyle.Bold); + this.label2.Location = new System.Drawing.Point(30, 50); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(141, 37); + this.label2.TabIndex = 3; + this.label2.Text = "접수번호 :"; + // + // Lot + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.Transparent; + this.Controls.Add(this.metroPanel1); + this.Name = "Lot"; + this.Size = new System.Drawing.Size(340, 90); + this.metroPanel1.ResumeLayout(false); + this.metroPanel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private MetroFramework.Controls.MetroPanel metroPanel1; + private System.Windows.Forms.Label label_Area; + private System.Windows.Forms.Label label_No; + private System.Windows.Forms.Label label2; + } +} diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/Lot.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/Lot.cs new file mode 100644 index 0000000..99e1c19 --- /dev/null +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/Lot.cs @@ -0,0 +1,14 @@ +using System.Windows.Forms; + +namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl +{ + public partial class Lot : UserControl + { + public Lot(string area, string no) + { + InitializeComponent(); + label_Area.Text = area; + label_No.Text = no; + } + } +} diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/Lot.resx b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/Lot.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/Lot.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/SettingControl.Designer.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/SettingControl.Designer.cs index 0c9a406..ef888ca 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/SettingControl.Designer.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/SettingControl.Designer.cs @@ -54,6 +54,7 @@ this.metroLabel20 = new MetroFramework.Controls.MetroLabel(); this.metroLabel21 = new MetroFramework.Controls.MetroLabel(); this.metroButton_init = new MetroFramework.Controls.MetroButton(); + this.metroButton_Test = new MetroFramework.Controls.MetroButton(); this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); this.groupBox3.SuspendLayout(); @@ -468,11 +469,22 @@ this.metroButton_init.UseSelectable = true; this.metroButton_init.Click += new System.EventHandler(this.metroButton_init_Click); // + // metroButton_Test + // + this.metroButton_Test.Location = new System.Drawing.Point(184, 466); + this.metroButton_Test.Name = "metroButton_Test"; + this.metroButton_Test.Size = new System.Drawing.Size(140, 23); + this.metroButton_Test.TabIndex = 23; + this.metroButton_Test.Text = "당첨창 테스트"; + this.metroButton_Test.UseSelectable = true; + this.metroButton_Test.Click += new System.EventHandler(this.metroButton_Test_Click); + // // SettingControl // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.White; + this.Controls.Add(this.metroButton_Test); this.Controls.Add(this.metroButton_init); this.Controls.Add(this.groupBox3); this.Controls.Add(this.groupBox2); @@ -482,7 +494,7 @@ this.Controls.Add(this.metroLabel9); this.Controls.Add(this.metroButton_Save); this.Name = "SettingControl"; - this.Size = new System.Drawing.Size(346, 492); + this.Size = new System.Drawing.Size(346, 505); this.Paint += new System.Windows.Forms.PaintEventHandler(this.Settings_Paint); this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); @@ -522,5 +534,6 @@ private MetroFramework.Controls.MetroLabel metroLabel20; private MetroFramework.Controls.MetroLabel metroLabel21; private MetroFramework.Controls.MetroButton metroButton_init; + private MetroFramework.Controls.MetroButton metroButton_Test; } } diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/SettingControl.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/SettingControl.cs index 86379bc..5416206 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/SettingControl.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/SettingControl.cs @@ -1,4 +1,5 @@ -using System; +using HSUCO_Cargo_Garage_Operation_Program.CustomForm; +using System; using System.Windows.Forms; namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl @@ -60,5 +61,11 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl { SettingReset(); } + + private void metroButton_Test_Click(object sender, EventArgs e) + { + LotsScreen lotsScreen = new LotsScreen(); + lotsScreen.Show(); + } } } diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/UserList.Designer.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/UserList.Designer.cs index 4705b88..8fb2edd 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/UserList.Designer.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/UserList.Designer.cs @@ -28,14 +28,19 @@ /// private void InitializeComponent() { - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.metroRadioButton_EndUser = new MetroFramework.Controls.MetroRadioButton(); this.metroRadioButton_UseUser = new MetroFramework.Controls.MetroRadioButton(); this.metroRadioButton_InspectionAll = new MetroFramework.Controls.MetroRadioButton(); this.metroPanel1 = new MetroFramework.Controls.MetroPanel(); - this.metroButton2 = new MetroFramework.Controls.MetroButton(); - this.metroButton1 = new MetroFramework.Controls.MetroButton(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.metroRadioButton_Refund = new MetroFramework.Controls.MetroRadioButton(); + this.metroRadioButton_Use = new MetroFramework.Controls.MetroRadioButton(); + this.metroRadioButton_StandBy = new MetroFramework.Controls.MetroRadioButton(); + this.metroRadioButton_PayAll = new MetroFramework.Controls.MetroRadioButton(); + this.metroButton_DeleteStandBy = new MetroFramework.Controls.MetroButton(); + this.metroButton_PaymentOk = new MetroFramework.Controls.MetroButton(); this.metroButton_UpdateUserData = new MetroFramework.Controls.MetroButton(); this.metroButton_Certificate = new MetroFramework.Controls.MetroButton(); this.metroButton_ExportExcel = new MetroFramework.Controls.MetroButton(); @@ -49,16 +54,11 @@ this.metroComboBox_SearchType = new MetroFramework.Controls.MetroComboBox(); this.dataGridView_List = new System.Windows.Forms.DataGridView(); this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); - this.groupBox3 = new System.Windows.Forms.GroupBox(); - this.metroRadioButton_Use = new MetroFramework.Controls.MetroRadioButton(); - this.metroRadioButton_StandBy = new MetroFramework.Controls.MetroRadioButton(); - this.metroRadioButton_PayAll = new MetroFramework.Controls.MetroRadioButton(); - this.metroRadioButton_Refund = new MetroFramework.Controls.MetroRadioButton(); this.groupBox1.SuspendLayout(); this.metroPanel1.SuspendLayout(); + this.groupBox3.SuspendLayout(); this.groupBox2.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView_List)).BeginInit(); - this.groupBox3.SuspendLayout(); this.SuspendLayout(); // // groupBox1 @@ -109,8 +109,8 @@ // metroPanel1 // this.metroPanel1.Controls.Add(this.groupBox3); - this.metroPanel1.Controls.Add(this.metroButton2); - this.metroPanel1.Controls.Add(this.metroButton1); + this.metroPanel1.Controls.Add(this.metroButton_DeleteStandBy); + this.metroPanel1.Controls.Add(this.metroButton_PaymentOk); this.metroPanel1.Controls.Add(this.metroButton_UpdateUserData); this.metroPanel1.Controls.Add(this.metroButton_Certificate); this.metroPanel1.Controls.Add(this.metroButton_ExportExcel); @@ -132,27 +132,85 @@ this.metroPanel1.VerticalScrollbarHighlightOnWheel = false; this.metroPanel1.VerticalScrollbarSize = 10; // - // metroButton2 + // groupBox3 // - this.metroButton2.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.metroButton2.FontSize = MetroFramework.MetroButtonSize.Tall; - this.metroButton2.Location = new System.Drawing.Point(776, 279); - this.metroButton2.Name = "metroButton2"; - this.metroButton2.Size = new System.Drawing.Size(121, 40); - this.metroButton2.TabIndex = 15; - this.metroButton2.Text = "결재대기 삭제"; - this.metroButton2.UseSelectable = true; + this.groupBox3.BackColor = System.Drawing.Color.Transparent; + this.groupBox3.Controls.Add(this.metroRadioButton_Refund); + this.groupBox3.Controls.Add(this.metroRadioButton_Use); + this.groupBox3.Controls.Add(this.metroRadioButton_StandBy); + this.groupBox3.Controls.Add(this.metroRadioButton_PayAll); + this.groupBox3.Location = new System.Drawing.Point(176, 20); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(181, 90); + this.groupBox3.TabIndex = 5; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "결재 필터"; // - // metroButton1 + // metroRadioButton_Refund // - this.metroButton1.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.metroButton1.FontSize = MetroFramework.MetroButtonSize.Tall; - this.metroButton1.Location = new System.Drawing.Point(776, 233); - this.metroButton1.Name = "metroButton1"; - this.metroButton1.Size = new System.Drawing.Size(121, 40); - this.metroButton1.TabIndex = 14; - this.metroButton1.Text = "결재 확인"; - this.metroButton1.UseSelectable = true; + this.metroRadioButton_Refund.AutoSize = true; + this.metroRadioButton_Refund.Location = new System.Drawing.Point(41, 56); + this.metroRadioButton_Refund.Name = "metroRadioButton_Refund"; + this.metroRadioButton_Refund.Size = new System.Drawing.Size(47, 15); + this.metroRadioButton_Refund.TabIndex = 3; + this.metroRadioButton_Refund.Text = "환불"; + this.metroRadioButton_Refund.UseSelectable = true; + // + // metroRadioButton_Use + // + this.metroRadioButton_Use.AutoSize = true; + this.metroRadioButton_Use.Location = new System.Drawing.Point(106, 35); + this.metroRadioButton_Use.Name = "metroRadioButton_Use"; + this.metroRadioButton_Use.Size = new System.Drawing.Size(71, 15); + this.metroRadioButton_Use.TabIndex = 2; + this.metroRadioButton_Use.Text = "결재완료"; + this.metroRadioButton_Use.UseSelectable = true; + // + // metroRadioButton_StandBy + // + this.metroRadioButton_StandBy.AutoSize = true; + this.metroRadioButton_StandBy.Location = new System.Drawing.Point(41, 35); + this.metroRadioButton_StandBy.Name = "metroRadioButton_StandBy"; + this.metroRadioButton_StandBy.Size = new System.Drawing.Size(59, 15); + this.metroRadioButton_StandBy.TabIndex = 1; + this.metroRadioButton_StandBy.Text = "미결재"; + this.metroRadioButton_StandBy.UseSelectable = true; + // + // metroRadioButton_PayAll + // + this.metroRadioButton_PayAll.AutoSize = true; + this.metroRadioButton_PayAll.Checked = true; + this.metroRadioButton_PayAll.Location = new System.Drawing.Point(30, 15); + this.metroRadioButton_PayAll.Name = "metroRadioButton_PayAll"; + this.metroRadioButton_PayAll.Size = new System.Drawing.Size(47, 15); + this.metroRadioButton_PayAll.TabIndex = 0; + this.metroRadioButton_PayAll.TabStop = true; + this.metroRadioButton_PayAll.Text = "전체"; + this.metroRadioButton_PayAll.UseSelectable = true; + // + // metroButton_DeleteStandBy + // + this.metroButton_DeleteStandBy.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.metroButton_DeleteStandBy.FontSize = MetroFramework.MetroButtonSize.Tall; + this.metroButton_DeleteStandBy.Location = new System.Drawing.Point(776, 279); + this.metroButton_DeleteStandBy.Name = "metroButton_DeleteStandBy"; + this.metroButton_DeleteStandBy.Size = new System.Drawing.Size(121, 40); + this.metroButton_DeleteStandBy.TabIndex = 15; + this.metroButton_DeleteStandBy.Text = "결재대기 삭제"; + this.metroButton_DeleteStandBy.UseSelectable = true; + this.metroButton_DeleteStandBy.Click += new System.EventHandler(this.metroButton_DeleteStandBy_Click); + // + // metroButton_PaymentOk + // + this.metroButton_PaymentOk.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.metroButton_PaymentOk.FontSize = MetroFramework.MetroButtonSize.Tall; + this.metroButton_PaymentOk.Location = new System.Drawing.Point(776, 233); + this.metroButton_PaymentOk.Name = "metroButton_PaymentOk"; + this.metroButton_PaymentOk.Size = new System.Drawing.Size(121, 40); + this.metroButton_PaymentOk.TabIndex = 14; + this.metroButton_PaymentOk.Text = "결재 확인"; + this.metroButton_PaymentOk.UseSelectable = true; + this.metroButton_PaymentOk.Click += new System.EventHandler(this.metroButton_PaymentOk_Click); // // metroButton_UpdateUserData // @@ -307,19 +365,21 @@ // // dataGridView_List // + this.dataGridView_List.AllowUserToAddRows = false; + this.dataGridView_List.AllowUserToDeleteRows = false; this.dataGridView_List.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.dataGridView_List.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; this.dataGridView_List.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCells; - dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle1.Font = new System.Drawing.Font("굴림", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); - dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridView_List.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle3.Font = new System.Drawing.Font("굴림", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridView_List.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle3; this.dataGridView_List.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dataGridView_List.Location = new System.Drawing.Point(20, 120); this.dataGridView_List.MultiSelect = false; @@ -330,62 +390,6 @@ this.dataGridView_List.Size = new System.Drawing.Size(750, 460); this.dataGridView_List.TabIndex = 6; // - // groupBox3 - // - this.groupBox3.BackColor = System.Drawing.Color.Transparent; - this.groupBox3.Controls.Add(this.metroRadioButton_Refund); - this.groupBox3.Controls.Add(this.metroRadioButton_Use); - this.groupBox3.Controls.Add(this.metroRadioButton_StandBy); - this.groupBox3.Controls.Add(this.metroRadioButton_PayAll); - this.groupBox3.Location = new System.Drawing.Point(176, 20); - this.groupBox3.Name = "groupBox3"; - this.groupBox3.Size = new System.Drawing.Size(181, 90); - this.groupBox3.TabIndex = 5; - this.groupBox3.TabStop = false; - this.groupBox3.Text = "결재 필터"; - // - // metroRadioButton_Use - // - this.metroRadioButton_Use.AutoSize = true; - this.metroRadioButton_Use.Location = new System.Drawing.Point(106, 35); - this.metroRadioButton_Use.Name = "metroRadioButton_Use"; - this.metroRadioButton_Use.Size = new System.Drawing.Size(71, 15); - this.metroRadioButton_Use.TabIndex = 2; - this.metroRadioButton_Use.Text = "결재완료"; - this.metroRadioButton_Use.UseSelectable = true; - // - // metroRadioButton_StandBy - // - this.metroRadioButton_StandBy.AutoSize = true; - this.metroRadioButton_StandBy.Location = new System.Drawing.Point(41, 35); - this.metroRadioButton_StandBy.Name = "metroRadioButton_StandBy"; - this.metroRadioButton_StandBy.Size = new System.Drawing.Size(59, 15); - this.metroRadioButton_StandBy.TabIndex = 1; - this.metroRadioButton_StandBy.Text = "미결재"; - this.metroRadioButton_StandBy.UseSelectable = true; - // - // metroRadioButton_PayAll - // - this.metroRadioButton_PayAll.AutoSize = true; - this.metroRadioButton_PayAll.Checked = true; - this.metroRadioButton_PayAll.Location = new System.Drawing.Point(30, 15); - this.metroRadioButton_PayAll.Name = "metroRadioButton_PayAll"; - this.metroRadioButton_PayAll.Size = new System.Drawing.Size(47, 15); - this.metroRadioButton_PayAll.TabIndex = 0; - this.metroRadioButton_PayAll.TabStop = true; - this.metroRadioButton_PayAll.Text = "전체"; - this.metroRadioButton_PayAll.UseSelectable = true; - // - // metroRadioButton_Refund - // - this.metroRadioButton_Refund.AutoSize = true; - this.metroRadioButton_Refund.Location = new System.Drawing.Point(41, 56); - this.metroRadioButton_Refund.Name = "metroRadioButton_Refund"; - this.metroRadioButton_Refund.Size = new System.Drawing.Size(47, 15); - this.metroRadioButton_Refund.TabIndex = 3; - this.metroRadioButton_Refund.Text = "환불"; - this.metroRadioButton_Refund.UseSelectable = true; - // // UserList // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); @@ -397,11 +401,11 @@ this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); this.metroPanel1.ResumeLayout(false); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); this.groupBox2.ResumeLayout(false); this.groupBox2.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView_List)).EndInit(); - this.groupBox3.ResumeLayout(false); - this.groupBox3.PerformLayout(); this.ResumeLayout(false); } @@ -426,8 +430,8 @@ private MetroFramework.Controls.MetroButton metroButton_ExportExcel; private MetroFramework.Controls.MetroButton metroButton_Certificate; private MetroFramework.Controls.MetroButton metroButton_UpdateUserData; - private MetroFramework.Controls.MetroButton metroButton2; - private MetroFramework.Controls.MetroButton metroButton1; + private MetroFramework.Controls.MetroButton metroButton_DeleteStandBy; + private MetroFramework.Controls.MetroButton metroButton_PaymentOk; private System.Windows.Forms.GroupBox groupBox3; private MetroFramework.Controls.MetroRadioButton metroRadioButton_Use; private MetroFramework.Controls.MetroRadioButton metroRadioButton_StandBy; diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/UserList.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/UserList.cs index 4785b15..7223452 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/UserList.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/UserList.cs @@ -4,7 +4,6 @@ using MetroFramework; using System; using System.Collections.Generic; using System.Data; -using System.Diagnostics.Eventing.Reader; using System.Linq; using System.Text; using System.Windows.Forms; @@ -29,7 +28,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl List nowUserList; if (metroRadioButton_UseUser.Checked) - nowUserList = userList.Where(x => x.DateEnd >= DateTime.Now && x.PaymentStatus != EPaymentStatus.Refund ).ToList(); + nowUserList = userList.Where(x => x.DateEnd >= DateTime.Now && x.PaymentStatus != EPaymentStatus.Refund).ToList(); else if (metroRadioButton_EndUser.Checked) nowUserList = userList.Where(x => x.DateEnd <= DateTime.Now || x.PaymentStatus == EPaymentStatus.Refund).ToList(); else @@ -40,9 +39,9 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl private List PaymentType(List beforUserInfromation) { List userList = beforUserInfromation; - if(metroRadioButton_StandBy.Checked) + if (metroRadioButton_StandBy.Checked) { - userList = beforUserInfromation.Where(x=> x.PaymentStatus == EPaymentStatus.StandBy).ToList(); + userList = beforUserInfromation.Where(x => x.PaymentStatus == EPaymentStatus.StandBy).ToList(); } else if (metroRadioButton_Use.Checked) @@ -53,7 +52,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl { userList = beforUserInfromation.Where(x => x.PaymentStatus == EPaymentStatus.Refund).ToList(); } - + return userList; @@ -104,6 +103,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl dataTable.Columns.Add("차종(승용)"); dataTable.Columns.Add("이용시작일"); dataTable.Columns.Add("이용종료일"); + dataTable.Columns.Add("결재여부"); dataTable.Columns.Add("변경사항"); for (var i = 0; i < nowUserList.Count; i++) { @@ -114,12 +114,31 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl history.Append(" "); history.AppendLine(nowUserList[i].HistoryInformations[j].HistoryCode == EHistoryCode.Extension ? "연장" : "환불"); } + string payment = string.Empty; + switch (nowUserList[i].PaymentStatus) + { + case EPaymentStatus.StandBy: + payment = "결재 대기"; + break; + case EPaymentStatus.Use: + payment = "결재 완료"; + break; + case EPaymentStatus.Refund: + payment = "환불"; + break; + case EPaymentStatus.Delete: + payment = "삭제"; + break; + + } + dataTable.Rows .Add( nowUserList[i].No, - nowUserList[i].DateOfApplicant, + + nowUserList[i].Date.DateTimeDatabase(), nowUserList[i].ApplicantNo, - nowUserList[i].ApplicantDate, + nowUserList[i].ApplicantDate.DateTimeDatabase(), nowUserList[i].Name, nowUserList[i].PersonalNumber, nowUserList[i].Phone, @@ -129,23 +148,16 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl nowUserList[i].CargoVehicleName, nowUserList[i].PassengerVehicleNumber, nowUserList[i].PassengerVehicleName, - nowUserList[i].DateStart, - nowUserList[i].DateEnd, + nowUserList[i].DateStart.ToString("yyyy-MM-dd"), + nowUserList[i].DateEnd.ToString("yyyy-MM-dd"), + payment, history ); } dataGridView_List.DataSource = dataTable; dataGridView_List.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; - dataGridView_List.Columns[0].MinimumWidth = 20; - dataGridView_List.Columns[0].FillWeight = 20; - dataGridView_List.Columns[1].MinimumWidth = 100; - dataGridView_List.Columns[1].FillWeight = 100; - dataGridView_List.Columns[2].MinimumWidth = 60; - dataGridView_List.Columns[2].FillWeight = 60; - dataGridView_List.Columns[15].DefaultCellStyle.WrapMode = - DataGridViewTriState.True; } private void metroButton_Search_Click(object sender, EventArgs e) @@ -171,7 +183,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl } else { - MetroMessageBox.Show(this, "엑셀 파일 저장에 실패하였습니다.", "Excel Export", MessageBoxButtons.OK, MessageBoxIcon.Error); + MetroMessageBox.Show(this, "엑셀 파일 저장에 실패하였습니다.", "Excel Export", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } @@ -184,7 +196,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl // 연장 했는가? string no = dataGridView_List.SelectedRows[0].Cells[0].Value.ToString(); bool result = Database.CheckExtensionStatus(no); - if(result) + if (result) { MetroMessageBox.Show(this, "이미 연장된 사용자 입니다.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; @@ -194,16 +206,16 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl EVehicleType eVehicleType = Database.GetVehicleType(no); int amount = eVehicleType == EVehicleType.Large ? Global.GlobalSettings.CargoLargeFee : Global.GlobalSettings.CargoOversizedFee; string cargoNumber = dataGridView_List.SelectedRows[0].Cells[9].Value.ToString(); - var message = $"선태하신 차량 {cargoNumber}을 연장하시겠습니까?\r\n연장금액 : {String.Format("{0:n0}", amount)}원"; + var message = $"선태하신 차량 {cargoNumber}을 연장하시겠습니까?\r\n연장금액 : {String.Format("{0:n0}", amount)}원"; if (MetroMessageBox.Show(this, message, "1년 연장", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK) { - Database.UpdateExtended(no,amount); + Database.UpdateExtended(no, amount); DataChange(); } - + } private void metroButton_Refund_Click(object sender, EventArgs e) @@ -212,35 +224,41 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl if (count == 0) return; string no = dataGridView_List.SelectedRows[0].Cells[0].Value.ToString(); GetRefundInformation getRefundInformation = Database.GetRefundData(no); - if (getRefundInformation.RefundStatus) + if (getRefundInformation.PaymentStatus == EPaymentStatus.Refund) { MetroMessageBox.Show(this, "이미 환불된 사용자 입니다.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } Refund refund = new Refund(getRefundInformation); refund.ShowDialog(); - if(refund.DialogResult != DialogResult.OK) + if (refund.DialogResult != DialogResult.OK) { return; - + } DateTime refundDateTime = refund.RefundDateTime; int totalAmount = 0; - + + if (getRefundInformation.DateEnd < refundDateTime) + { + MetroMessageBox.Show(this, "이용종료일이 환불일 보다 이전입니다.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + // 연장여부 // 이용 전 이면 - if(getRefundInformation.DateStart > refundDateTime) + if (getRefundInformation.DateStart > refundDateTime) { refundDateTime = getRefundInformation.DateStart; totalAmount += getRefundInformation.BaseFee; - if(getRefundInformation.ExtensionStatus) + if (getRefundInformation.ExtensionStatus) { totalAmount += getRefundInformation.ExtensionFee; } } - else if(getRefundInformation.ExtensionStatus) + else if (getRefundInformation.ExtensionStatus) { //연장일 보다 환불일이 늦는경우(연장에 부분만 일자 계산후 정산) if (getRefundInformation.ExtensionStart < refundDateTime) @@ -291,7 +309,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl int totalMonth = Extends.GetProgressMonth(getRefundInformation.DateStart.Year, getRefundInformation.DateStart.Month, getRefundInformation.DateEnd.Year, getRefundInformation.DateEnd.Month); int monthAmount = getRefundInformation.BaseFee / totalMonth; int leftAmount = progressDays.Month * monthAmount; - if(progressDays.StartDay != 0) + if (progressDays.StartDay != 0) { leftAmount += (monthAmount / progressDays.StartTotalDay) * (progressDays.StartTotalDay - progressDays.StartDay); } @@ -304,10 +322,10 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl DialogResult dialogResult = MetroMessageBox.Show(this, $"환불 처리 하시겟습니까?\r\n 환불 금액 : {String.Format("{0:n0}", totalAmount)}원", "환불", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); - if(dialogResult == DialogResult.OK) + if (dialogResult == DialogResult.OK) { bool result = Database.SetRefund(no, refundDateTime, totalAmount); - if(result) + if (result) { MetroMessageBox.Show(this, "환불처리가 완료되었습니다.", "환불", MessageBoxButtons.OK, MessageBoxIcon.Information); DataChange(); @@ -407,5 +425,51 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl DataChange(); } } + + private void metroButton_PaymentOk_Click(object sender, EventArgs e) + { + var selectCount = dataGridView_List.SelectedRows.Count; + if (selectCount == 0) return; + string no = dataGridView_List.SelectedRows[0].Cells[0].Value.ToString(); + var status = Database.CheckPaymentStatus(no); + if (status != EPaymentStatus.StandBy) + { + MetroMessageBox.Show(this, "현재 사용자는 결재 완료로 전환할수 없는 사용자 입니다.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + + } + GetPaymentBaseInformation getPaymentBaseInformation = Database.GetPaymentBase(no); + int payBase = getPaymentBaseInformation.VehicleType == EVehicleType.Large ? Global.GlobalSettings.CargoLargeFee : Global.GlobalSettings.CargoOversizedFee; + int pay = getPaymentBaseInformation.Month * payBase; + StringBuilder sb = new StringBuilder(); + sb.AppendLine("선택하신 사용자의 수납을 확인하시겠습니까 ?"); + sb.AppendLine($"이용개월 : {getPaymentBaseInformation.Month}월"); + sb.AppendLine($"이용금액(월) : {payBase}원"); + sb.AppendLine($"총 이용금액 : {pay}원"); + + var result = MetroMessageBox.Show(this, sb.ToString(), "Information", MessageBoxButtons.YesNo, MessageBoxIcon.Information); + if (result == DialogResult.Yes) + { + Database.AcceptUser(no, pay); + } + + } + + private void metroButton_DeleteStandBy_Click(object sender, EventArgs e) + { + var selectCount = dataGridView_List.SelectedRows.Count; + if (selectCount == 0) return; + string no = dataGridView_List.SelectedRows[0].Cells[0].Value.ToString(); + var status = Database.CheckPaymentStatus(no); + if (status != EPaymentStatus.StandBy) + { + MetroMessageBox.Show(this, "현재 사용자는 삭제처리할수 없는 사용자 입니다.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + Database.DeleteUser(no); + MetroMessageBox.Show(this, "해당 사용자를 제거 완료했습니다.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); + DataChange(); + + } } } \ No newline at end of file diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/WaitingList.Designer.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/WaitingList.Designer.cs index 7a54af0..e84e1e4 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/WaitingList.Designer.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/WaitingList.Designer.cs @@ -209,6 +209,8 @@ // // dataGridView_List // + this.dataGridView_List.AllowUserToAddRows = false; + this.dataGridView_List.AllowUserToDeleteRows = false; this.dataGridView_List.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); diff --git a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/WaitingList.cs b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/WaitingList.cs index e22e5c5..3c98b44 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/WaitingList.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/CustomUserControl/WaitingList.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using System.Data; using System.Linq; -using System.Runtime.InteropServices.WindowsRuntime; using System.Windows.Forms; namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl @@ -13,14 +12,12 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl { public WaitingList() => InitializeComponent(); - void ApplicantList_Load(object sender, EventArgs e) + private void ApplicantList_Load(object sender, EventArgs e) { metroComboBox_SearchType.SelectedIndex = 0; } - - - void DataChange() + private void DataChange() { var applicants = Database.GetApplicantWait(); switch (metroComboBox_SearchType.SelectedIndex) @@ -29,19 +26,22 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl applicants = applicants.Where(x => x.CargoVehicleNumber.Contains(metroTextBox_Search.Text.Trim())).ToList(); break; + case 1: applicants = applicants.Where(x => x.PassengerVehicleNumber.Contains(metroTextBox_Search.Text.Trim())).ToList(); break; + case 2: applicants = applicants.Where(x => x.Name.Contains(metroTextBox_Search.Text.Trim())).ToList(); break; + case 3: applicants = applicants.Where(x => x.Phone.Contains(metroTextBox_Search.Text.Trim())).ToList(); break; + case 4: applicants = applicants.Where(x => x.Address.Contains(metroTextBox_Search.Text.Trim())).ToList(); break; - } var dataTable = new DataTable(); @@ -60,10 +60,9 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl string order; int countLarge = 1; - int countOversize = 1; + int countOversized = 1; for (int i = 0; i < applicants.Count; i++) { - if (applicants[i].VehicleType == 0) { order = $"대형-{countLarge}"; @@ -71,8 +70,8 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl } else { - order = $"특대형-{countOversize}"; - countOversize++; + order = $"특대형-{countOversized}"; + countOversized++; } dataTable.Rows .Add( @@ -87,73 +86,62 @@ namespace HSUCO_Cargo_Garage_Operation_Program.CustomUserControl applicants[i].PassengerVehicleNumber, applicants[i].PassengerVehicleName, applicants[i].VehicleType == 0 ? "대형(4.5톤 미만)" : "특대형(4.5톤 이상)", - applicants[i].DateOfApplication - + applicants[i].Date.DateTimeDatabase() ); } dataGridView_List.DataSource = dataTable; dataGridView_List.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; - dataGridView_List.Columns[0].MinimumWidth = 100; - dataGridView_List.Columns[0].FillWeight = 100; - - dataGridView_List.Columns[1].MinimumWidth = 100; - dataGridView_List.Columns[1].FillWeight = 100; - dataGridView_List.Columns[2].MinimumWidth = 60; - dataGridView_List.Columns[2].FillWeight = 60; } - void metroButton_Search_Click(object sender, EventArgs e) => DataChange(); + private void metroButton_Search_Click(object sender, EventArgs e) => DataChange(); - void metroButton_Delete_Click(object sender, EventArgs e) + private void metroButton_Delete_Click(object sender, EventArgs e) { var selectCount = dataGridView_List.SelectedRows.Count; if (selectCount == 0) return; string no = dataGridView_List.SelectedRows[0].Cells[0].Value.ToString(); - var message = "선태하신 화물챠랑번호 " + dataGridView_List.SelectedRows[0].Cells[5].Value.ToString() + "을 삭제 하시겠습니까?"; if (MetroMessageBox.Show(this, message, "삭제", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK) { - bool result = Database.DeleteApplicantList(no); - if(result) + bool result = Database.DeleteApplicantList(no); + if (result) { MetroMessageBox.Show(this, "삭제에 성공하였습니다.", "성공", MessageBoxButtons.OK, MessageBoxIcon.Information); DataChange(); } else { - MetroMessageBox.Show(this, "삭제에 실패하였습니다.", "성공", MessageBoxButtons.OK, MessageBoxIcon.Error ); + MetroMessageBox.Show(this, "삭제에 실패하였습니다.", "성공", MessageBoxButtons.OK, MessageBoxIcon.Error); } - } } - void metroButton_UpdateUser_Click(object sender, EventArgs e) + private void metroButton_UpdateUser_Click(object sender, EventArgs e) { var count = dataGridView_List.Rows.Count - 1; if (count == 0) return; Promotion promotion = new Promotion("대기자 이용기간"); - DialogResult dialogResult = promotion.ShowDialog(); - if(dialogResult != DialogResult.OK) + DialogResult dialogResult = promotion.ShowDialog(); + if (dialogResult != DialogResult.OK) { return; } DateTime startDate = promotion.StartDate; LeftAreaInformation leftAreaInformation = Database.GetLeftArea(startDate, Global.GlobalSettings.CargoLargeMaxCount, Global.GlobalSettings.CargoOversizedMaxCount); - if(leftAreaInformation.Large.Count + leftAreaInformation.OverSized.Count == 0) + if (leftAreaInformation.Large.Count + leftAreaInformation.OverSized.Count == 0) { - // 자리 없음 - MetroMessageBox.Show(this, "남은 자리가 없습니다", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + MetroMessageBox.Show(this, "남은 자리가 없습니다", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } - // 순서를 어떻게 하지? - // 1. 추첨에서 떨어진 사람 들, - //TODO: 업데이트 필요함 - + + List result = Database.SetUserListForApplicantWait(leftAreaInformation, promotion.EndDate); + InsertResult insertResult = new InsertResult(result); + insertResult.ShowDialog(); DataChange(); } diff --git a/HSUCO_Cargo_Garage_Operation_Program/DataModel.cs b/HSUCO_Cargo_Garage_Operation_Program/DataModel.cs index 736cc38..bfa4821 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/DataModel.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/DataModel.cs @@ -6,7 +6,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program public struct ApplicantInformation { public string No { get; set; } // 고유번호 - public bool ApplicantType { get; set; } + public EApplicantType ApplicantType { get; set; } public string CargoVehicleNumber { get; set; } public string CargoVehicleName { get; set; } public string PassengerVehicleNumber { get; set; } @@ -16,7 +16,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program public string PersonalNumber { get; set; } // 생년월일 및 법인등록변호 public string Phone { get; set; } public string Address { get; set; } - public DateTime DateOfApplication { get; set; } + public DateTime Date { get; set; } } public struct UserInformation @@ -34,7 +34,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program public string PersonalNumber { get; set; } //생년월일 혹은 법인번호 public string Phone { get; set; } // 연락처 public string Address { get; set; } // 주소 - public DateTime DateOfApplicant { get; set; } // 당첨일 + public DateTime Date { get; set; } // 당첨일 public DateTime DateStart { get; set; } // 시작일 public DateTime DateEnd { get; set; } // 종료일 public bool ExtensionStatus { get; set; } // 연장여부 @@ -125,8 +125,8 @@ namespace HSUCO_Cargo_Garage_Operation_Program } public struct GetRefundInformation { - - public bool RefundStatus { get; set; } + + public EPaymentStatus PaymentStatus { get; set; } public DateTime DateStart { get; set; } public DateTime DateEnd { get; set; } public bool ExtensionStatus { get; set; } @@ -142,6 +142,28 @@ namespace HSUCO_Cargo_Garage_Operation_Program public List OverSized { get; set; } } + public struct SetUserListInformation + { + public string No { get; set; } + public string Area { get; set; } + public string ApplicantNo { get; set; } + public int UID { get; set; } + public DateTime Date { get; set; } + public EVehicleType VehicleType { get; set; } + + } + public struct ResultSetUserListInformation + { + public string Area { get; set; } + public string No { get; set; } + public string ApplicantNo { get; set; } + } + public struct GetPaymentBaseInformation + { + + public int Month { get; set; } + public EVehicleType VehicleType { get; set; } + } public struct Settings { public string GarageName { get; set; } @@ -184,18 +206,26 @@ namespace HSUCO_Cargo_Garage_Operation_Program { ApplicantList, UserList, - + } public enum EApplicantType { - Lots, - LotsOut, - Wait + Lots, // 추첨 대기 + LotsOut, // 추첨 아웃 -> 순번 대기 + Wait // 추첨 + } + public enum ERegistrationStatus + { + Wait, + Registration, + Delete } public enum EPaymentStatus { StandBy, // 대기 Use, // 사용중 - Refund // 삭제됨 + Refund, // 환불됨 + Delete + } } \ No newline at end of file diff --git a/HSUCO_Cargo_Garage_Operation_Program/Database.cs b/HSUCO_Cargo_Garage_Operation_Program/Database.cs index d9f7e12..9089bdc 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/Database.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/Database.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Data.SQLite; using System.Globalization; using System.IO; +using System.Linq; namespace HSUCO_Cargo_Garage_Operation_Program { @@ -31,10 +32,11 @@ namespace HSUCO_Cargo_Garage_Operation_Program ""No"" TEXT NOT NULL, ""ApplicantType"" INTEGER NOT NULL, ""UID"" INTEGER NOT NULL, - ""DateOfApplicant"" TEXT NOT NULL, - ""Status"" INTEGER NOT NULL, - PRIMARY KEY(""No""), - FOREIGN KEY(""UID"") REFERENCES ""UserInformation""(""UID"") + ""Date"" TEXT NOT NULL, + ""RegistrationStatus"" INTEGER NOT NULL, + ""DropDate"" TEXT, + FOREIGN KEY(""UID"") REFERENCES ""UserInformation""(""UID""), + PRIMARY KEY(""No"") ); CREATE TABLE ""LedgerCertificate"" ( @@ -82,7 +84,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program ""ApplicantNo"" TEXT NOT NULL, ""ApplicantDate"" TEXT NOT NULL, ""UID"" INTEGER NOT NULL, - ""DateOfApplicant"" TEXT NOT NULL, + ""Date"" TEXT NOT NULL, ""DateStart"" TEXT NOT NULL, ""DateEnd"" TEXT NOT NULL, ""ExtensionStatus"" INTEGER NOT NULL, @@ -112,8 +114,9 @@ namespace HSUCO_Cargo_Garage_Operation_Program UI.PersonalNumber, UI.Phone, UI.Address, - AL.DateOfApplicant, - AL.Status + AL.Date, + AL.RegistrationStatus, + AL.DropDate FROM main.ApplicantList AL INNER JOIN main.UserInformation UI ON AL.UID = UI.UID; CREATE VIEW ViewUserList AS SELECT @@ -131,7 +134,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program UI.PersonalNumber, UI.Phone, UI.Address, - UL.DateOfApplicant, + UL.Date, UL.DateStart, UL.DateEnd, UL.ExtensionStatus, @@ -168,7 +171,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program public static bool ApplicantCheckAlready(string CargoVehicleNumber) { var count = 0; - var query = string.Format("SELECT COUNT(*) From ViewApplicantList Where CargoVehicleNumber = '{0}' And Status=0;", + var query = string.Format($"SELECT COUNT(*) From ViewApplicantList Where CargoVehicleNumber = '{0}' And RegistrationStatus={(int)ERegistrationStatus.Wait};", CargoVehicleNumber.Trim()); using (var command = _sqLiteConnection.CreateCommand()) @@ -204,13 +207,28 @@ namespace HSUCO_Cargo_Garage_Operation_Program return count > 0; } + public static EPaymentStatus CheckPaymentStatus(string no) + { + EPaymentStatus paymentStatus = new EPaymentStatus(); + var query = $"SELECT PaymentStatus From UserList Where No='{no}'"; + using (var command = _sqLiteConnection.CreateCommand()) + { + command.CommandText = query; + using (var reader = command.ExecuteReader()) + { + while (reader.Read()) + paymentStatus = (EPaymentStatus)int.Parse(reader["PaymentStatus"].ToString()); + } + } + return paymentStatus; + } public static string SetApplicant(ApplicantInformation applicant) { int year = DateTime.Now.Year; string suffix; EGetLastNumber eGetLastNumber; - if (applicant.ApplicantType) + if (applicant.ApplicantType == EApplicantType.Lots) { suffix = Global.SuffixApplicantLot; eGetLastNumber = EGetLastNumber.ApplicantListLots; @@ -229,7 +247,6 @@ namespace HSUCO_Cargo_Garage_Operation_Program $"VALUES('{applicant.CargoVehicleNumber}','{applicant.CargoVehicleName}','{applicant.PassengerVehicleNumber}','{applicant.PassengerVehicleName}','{(int)applicant.VehicleType}','{applicant.Name}','{applicant.PersonalNumber}','{applicant.Phone}','{applicant.Address}');" + $"select last_insert_rowid();"; - int lastId = 0; int insertResult; using (var command = _sqLiteConnection.CreateCommand()) @@ -237,11 +254,11 @@ namespace HSUCO_Cargo_Garage_Operation_Program command.CommandText = query; lastId = int.Parse(command.ExecuteScalar().ToString()); } - if(lastId < 1) + if (lastId < 1) { return string.Empty; } - query = $"INSERT INTO ApplicantList(No, ApplicantType, UID, DateOfApplicant, Status) VALUES('{no}', '{applicant.ApplicantType.BoolToInt()}',{lastId},'{applicant.DateOfApplication.DateTimeDatabase()}', 0)"; + query = $"INSERT INTO ApplicantList(No, ApplicantType, UID, Date, RegistrationStatus) VALUES('{no}', '{(int)applicant.ApplicantType}',{lastId},'{applicant.Date.DateTimeDatabase()}', {(int)ERegistrationStatus.Wait})"; using (var command = _sqLiteConnection.CreateCommand()) { command.CommandText = query; @@ -261,7 +278,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program public static List GetApplicant() { var applicants = new List(); - var query = "SELECT * From ViewApplicantList Where ApplicantType=1 And Status=0"; + var query = $"SELECT * From ViewApplicantList Where ApplicantType={(int)EApplicantType.Lots} And RegistrationStatus={(int)ERegistrationStatus.Wait}"; using (var command = _sqLiteConnection.CreateCommand()) { @@ -273,7 +290,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program { var applicant = new ApplicantInformation(); applicant.No = reader["No"].ToString(); - applicant.ApplicantType = reader["ApplicantType"].ToString() == "1"; + applicant.ApplicantType = (EApplicantType)int.Parse(reader["ApplicantType"].ToString()); applicant.CargoVehicleNumber = reader["CargoVehicleNumber"].ToString(); applicant.CargoVehicleName = reader["CargoVehicleName"].ToString(); applicant.PassengerVehicleNumber = reader["PassengerVehicleNumber"].ToString(); @@ -283,7 +300,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program applicant.PersonalNumber = reader["PersonalNumber"].ToString(); applicant.Phone = reader["Phone"].ToString(); applicant.Address = reader["Address"].ToString(); - applicant.DateOfApplication = DateTime.Parse(reader["DateOfApplicant"].ToString()); + applicant.Date = DateTime.Parse(reader["Date"].ToString()); applicants.Add(applicant); } } @@ -295,7 +312,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program public static List GetApplicantWait() { var applicants = new List(); - var query = "SELECT * From ViewApplicantList Where ApplicantType=0 And Status=0 Order By DateOfApplicant ASC"; + var query = $"SELECT * From ViewApplicantList Where ApplicantType={(int)EApplicantType.LotsOut} And RegistrationStatus={(int)ERegistrationStatus.Wait} Order By DropDate, Date ASC"; using (var command = _sqLiteConnection.CreateCommand()) { @@ -307,7 +324,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program { var applicant = new ApplicantInformation(); applicant.No = reader["No"].ToString(); - applicant.ApplicantType = reader["ApplicantType"].ToString() == "1"; + applicant.ApplicantType = (EApplicantType)int.Parse(reader["ApplicantType"].ToString()); applicant.CargoVehicleNumber = reader["CargoVehicleNumber"].ToString(); applicant.CargoVehicleName = reader["CargoVehicleName"].ToString(); applicant.PassengerVehicleNumber = reader["PassengerVehicleNumber"].ToString(); @@ -317,7 +334,34 @@ namespace HSUCO_Cargo_Garage_Operation_Program applicant.PersonalNumber = reader["PersonalNumber"].ToString(); applicant.Phone = reader["Phone"].ToString(); applicant.Address = reader["Address"].ToString(); - applicant.DateOfApplication = DateTime.Parse(reader["DateOfApplicant"].ToString()); + applicant.Date = DateTime.Parse(reader["Date"].ToString()); + + applicants.Add(applicant); + } + } + } + query = $"SELECT * From ViewApplicantList Where ApplicantType={(int)EApplicantType.Wait} And RegistrationStatus={(int)ERegistrationStatus.Wait} Order By Date ASC"; + using (var command = _sqLiteConnection.CreateCommand()) + { + command.CommandText = query; + + using (var reader = command.ExecuteReader()) + { + while (reader.Read()) + { + var applicant = new ApplicantInformation(); + applicant.No = reader["No"].ToString(); + applicant.ApplicantType = (EApplicantType)int.Parse(reader["ApplicantType"].ToString()); + applicant.CargoVehicleNumber = reader["CargoVehicleNumber"].ToString(); + applicant.CargoVehicleName = reader["CargoVehicleName"].ToString(); + applicant.PassengerVehicleNumber = reader["PassengerVehicleNumber"].ToString(); + applicant.PassengerVehicleName = reader["PassengerVehicleName"].ToString(); + applicant.VehicleType = (EVehicleType)int.Parse(reader["VehicleType"].ToString()); + applicant.Name = reader["Name"].ToString(); + applicant.PersonalNumber = reader["PersonalNumber"].ToString(); + applicant.Phone = reader["Phone"].ToString(); + applicant.Address = reader["Address"].ToString(); + applicant.Date = DateTime.Parse(reader["Date"].ToString()); applicants.Add(applicant); } @@ -327,10 +371,12 @@ namespace HSUCO_Cargo_Garage_Operation_Program return applicants; } + + public static bool DeleteApplicantList(string no) { - //TODO: 수정사항 - var query = $"UPDATE ApplicantList SET Status=2 Where No='{no}'"; + + var query = $"UPDATE ApplicantList SET RegistrationStatus={(int)ERegistrationStatus.Delete} Where No='{no}'"; using (var updateCommand = _sqLiteConnection.CreateCommand()) { updateCommand.CommandText = query; @@ -415,7 +461,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program user.PersonalNumber = reader["PersonalNumber"].ToString(); user.Phone = reader["Phone"].ToString(); user.Address = reader["Address"].ToString(); - user.DateOfApplicant = DateTime.Parse(reader["DateOfApplicant"].ToString(), new CultureInfo("ko-KR")); + user.Date = DateTime.Parse(reader["Date"].ToString(), new CultureInfo("ko-KR")); user.DateStart = DateTime.Parse(reader["DateStart"].ToString(), new CultureInfo("ko-KR")); user.DateEnd = DateTime.Parse(reader["DateEnd"].ToString(), new CultureInfo("ko-KR")); user.ExtensionStatus = reader["ExtensionStatus"].ToString() == "1"; @@ -450,12 +496,10 @@ namespace HSUCO_Cargo_Garage_Operation_Program } return users; } - - public static EVehicleType GetEVehicleType(string no) + public static GetPaymentBaseInformation GetPaymentBase(string no) { - EVehicleType eVehicleType = new EVehicleType(); - string query = $"SELECT VehicleType From UserList Where No='{no}'"; - + GetPaymentBaseInformation getPaymentBaseInformation = new GetPaymentBaseInformation(); + var query = $"SELECT DateStart, DateEnd, VehicleType FROM ViewUserList Where No='{no}'"; using (var command = _sqLiteConnection.CreateCommand()) { command.CommandText = query; @@ -463,13 +507,59 @@ namespace HSUCO_Cargo_Garage_Operation_Program { while (reader.Read()) { - int result = int.Parse(reader["VehicleType"].ToString()); - eVehicleType = (EVehicleType)result; + DateTime start = DateTime.Parse(reader["DateStart"].ToString(), new CultureInfo("ko-KR")); + DateTime end = DateTime.Parse(reader["DateEnd"].ToString(), new CultureInfo("ko-KR")); + getPaymentBaseInformation.Month = Extends.GetProgressDays(start, end).Month; + getPaymentBaseInformation.VehicleType = (EVehicleType)int.Parse(reader["VehicleType"].ToString()); + } } } - return eVehicleType; + return getPaymentBaseInformation; + + } + public static void AcceptUser(string no, int pay) + { + var query = $"UPDATE PaymentStatus{(int)EPaymentStatus.Use} FROM UserList Where No='{no}'"; + using (var command = _sqLiteConnection.CreateCommand()) + { + command.CommandText = query; + command.ExecuteNonQuery(); + + } + query = $"INSERT INTO LedgerProceeds(UserNo, Type, Amount, Date) VALUES('{no}',{(int)EProceedsType.Fees},{pay},'{DateTime.Now.DateTimeDatabase()}')"; + using (var command = _sqLiteConnection.CreateCommand()) + { + command.CommandText = query; + command.ExecuteNonQuery(); + + } + return; + } + public static void DeleteUser(string no) + { + DateTime endDate = new DateTime(); + var query = $"SELECT DateEnd FROM UserList Where No='{no}'"; + using (var command = _sqLiteConnection.CreateCommand()) + { + command.CommandText = query; + using (var reader = command.ExecuteReader()) + { + while (reader.Read()) + { + endDate = DateTime.Parse(reader["DateEnd"].ToString()); + } + } + } + endDate = endDate.AddDays(-1); + query = $"UPDATE UserList Set DateEnd='{endDate.EndDateTime()}', PaymentStatus={(int)EPaymentStatus.Delete} Where No='{no}'"; + using (var command = _sqLiteConnection.CreateCommand()) + { + command.CommandText = query; + command.ExecuteNonQuery(); + + } } /// @@ -550,7 +640,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program public static GetRefundInformation GetRefundData(string no) { GetRefundInformation getRefundInformation = new GetRefundInformation(); - var query = $"SELECT RefundStatus, DateStart, DateEnd, ExtensionStatus, ExtensionStart From UserList Where No='{no}'"; + var query = $"SELECT PaymentStatus, DateStart, DateEnd, ExtensionStatus, ExtensionStart From UserList Where No='{no}'"; using (var command = _sqLiteConnection.CreateCommand()) { command.CommandText = query; @@ -558,7 +648,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program { while (reader.Read()) { - getRefundInformation.RefundStatus = reader["RefundStatus"].ToString() == "1"; + getRefundInformation.PaymentStatus = (EPaymentStatus)int.Parse(reader["PaymentStatus"].ToString()); getRefundInformation.DateStart = DateTime.Parse(reader["DateStart"].ToString()); getRefundInformation.DateEnd = DateTime.Parse(reader["DateEnd"].ToString()); getRefundInformation.ExtensionStatus = reader["ExtensionStatus"].ToString() == "1"; @@ -595,7 +685,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program public static bool SetRefund(string no, DateTime refundDate, int amount) { - var query = $"UPDATE UserList Set DateEnd='{refundDate.AddDays(-1).EndDateTime()}', RefundStatus={true.BoolToInt()} Where No='{no}'"; + var query = $"UPDATE UserList Set DateEnd='{refundDate.AddDays(-1).EndDateTime()}', PaymentStatus={(int)EPaymentStatus.Refund} Where No='{no}'"; using (var command = _sqLiteConnection.CreateCommand()) { command.CommandText = query; @@ -630,77 +720,155 @@ namespace HSUCO_Cargo_Garage_Operation_Program return true; } - public static List GetApplicantList(List CargoVehicleNumber) + public static List SetUserListForApplicant(LeftAreaInformation leftAreaInformation, DateTime endDate) { - var applicants = new List(); - - for (var i = 0; i < CargoVehicleNumber.Count; i++) + List setUserListInformations = new List(); + var query = $"SELECT * From ViewApplicantList Where ApplicantType={(int)EApplicantType.Lots} And RegistrationStatus={(int)ERegistrationStatus.Wait}"; + using (var command = _sqLiteConnection.CreateCommand()) { - var query = $"SELECT * From ViewApplicantList Where CargoVehicleNumber='{CargoVehicleNumber[i]}' And Status=0"; + command.CommandText = query; + + using (var reader = command.ExecuteReader()) + { + while (reader.Read()) + { + SetUserListInformation setUserListInformation = new SetUserListInformation(); + setUserListInformation.ApplicantNo = reader["No"].ToString(); + setUserListInformation.UID = int.Parse(reader["UID"].ToString()); + setUserListInformation.Date = DateTime.Parse(reader["Date"].ToString()); + setUserListInformation.VehicleType = (EVehicleType)int.Parse(reader["VehicleType"].ToString()); + setUserListInformations.Add(setUserListInformation); + } + } + } + setUserListInformations.Shuffle(); // 랜덤화 시킨다 + + List setUserListInformationLarge = new List(); + List setUserListInformationOversized = new List(); + setUserListInformationLarge.AddRange(setUserListInformations.Where(x => x.VehicleType == EVehicleType.Large).Take(leftAreaInformation.Large.Count)); + setUserListInformationOversized.AddRange(setUserListInformations.Where(x => x.VehicleType == EVehicleType.Oversized).Take(leftAreaInformation.OverSized.Count)); + + List setUserListInformationFinal = new List(); + for (int i = 0; i < setUserListInformationLarge.Count; i++) + { + SetUserListInformation setUserListInformation = setUserListInformationLarge[i]; + setUserListInformation.Area = "대형-" + leftAreaInformation.Large[i]; + setUserListInformationFinal.Add(setUserListInformation); + } + for (int i = 0; i < setUserListInformationOversized.Count; i++) + { + SetUserListInformation setUserListInformation = setUserListInformationOversized[i]; + setUserListInformation.Area = "특대형-" + leftAreaInformation.OverSized[i]; + setUserListInformationFinal.Add(setUserListInformation); + } + var result = SetUserList(setUserListInformationFinal, leftAreaInformation.StartDateTime, endDate); + + + // 남은 사람 대기로 + query = $"UPDATE ApplicantList SET ApplicantType={(int)EApplicantType.LotsOut} Where ApplicantType={(int)EApplicantType.Lots}"; + using (var command = _sqLiteConnection.CreateCommand()) + { + command.CommandText = query; + command.ExecuteNonQuery(); + } + + return result; + } + public static List SetUserListForApplicantWait(LeftAreaInformation leftAreaInformation, DateTime endDate) + { + List setUserListInformations = new List(); + // 저번에 떨어진 사람들 리스트 + var query = $"SELECT * From ViewApplicantList Where ApplicantType={(int)EApplicantType.LotsOut} And RegistrationStatus={(int)ERegistrationStatus.Wait} Order By DropDate, Date ASC "; + using (var command = _sqLiteConnection.CreateCommand()) + { + command.CommandText = query; + + using (var reader = command.ExecuteReader()) + { + while (reader.Read()) + { + SetUserListInformation setUserListInformation = new SetUserListInformation(); + setUserListInformation.ApplicantNo = reader["No"].ToString(); + setUserListInformation.UID = int.Parse(reader["UID"].ToString()); + setUserListInformation.Date = DateTime.Parse(reader["Date"].ToString()); + setUserListInformation.VehicleType = (EVehicleType)int.Parse(reader["VehicleType"].ToString()); + setUserListInformations.Add(setUserListInformation); + } + } + } + query = $"SELECT * From ViewApplicantList Where ApplicantType={(int)EApplicantType.Wait} And RegistrationStatus={(int)ERegistrationStatus.Wait} Order By Date ASC"; + using (var command = _sqLiteConnection.CreateCommand()) + { + command.CommandText = query; + + using (var reader = command.ExecuteReader()) + { + while (reader.Read()) + { + SetUserListInformation setUserListInformation = new SetUserListInformation(); + setUserListInformation.ApplicantNo = reader["No"].ToString(); + setUserListInformation.UID = int.Parse(reader["UID"].ToString()); + setUserListInformation.Date = DateTime.Parse(reader["Date"].ToString()); + setUserListInformation.VehicleType = (EVehicleType)int.Parse(reader["VehicleType"].ToString()); + setUserListInformations.Add(setUserListInformation); + } + } + } + List setUserListInformationLarge = new List(); + List setUserListInformationOversized = new List(); + setUserListInformationLarge.AddRange(setUserListInformations.Where(x => x.VehicleType == EVehicleType.Large).Take(leftAreaInformation.Large.Count)); + setUserListInformationOversized.AddRange(setUserListInformations.Where(x => x.VehicleType == EVehicleType.Oversized).Take(leftAreaInformation.OverSized.Count)); + + setUserListInformationLarge.Shuffle(); + setUserListInformationOversized.Shuffle(); + List setUserListInformationFinal = new List(); + for (int i = 0; i < setUserListInformationLarge.Count; i++) + { + SetUserListInformation setUserListInformation = setUserListInformationLarge[i]; + setUserListInformation.Area = "대형-" + leftAreaInformation.Large[i]; + setUserListInformationFinal.Add(setUserListInformation); + } + for (int i = 0; i < setUserListInformationOversized.Count; i++) + { + SetUserListInformation setUserListInformation = setUserListInformationOversized[i]; + setUserListInformation.Area = "특대형-" + leftAreaInformation.OverSized[i]; + setUserListInformationFinal.Add(setUserListInformation); + } + var result = SetUserList(setUserListInformationFinal, leftAreaInformation.StartDateTime, endDate); + return result; + } + + public static List SetUserList(List setUserListInformation, DateTime startDate, DateTime endDate) + { + List ResultSetUserListInformations = new List(); + int lastNo = GetLastUser(startDate.Year); + string noPrefix = startDate.Year + "-U"; + lastNo++; + for (int i = 0; i < setUserListInformation.Count; i++) + { + string query = $"INSERT INTO UserList(No, Area, ApplicantNo, ApplicantDate, UID, Date, DateStart, DateEnd, ExtensionStatus, PaymentStatus) " + + $"VALUES('{noPrefix + lastNo}','{setUserListInformation[i].Area}','{setUserListInformation[i].ApplicantNo}','{setUserListInformation[i].Date}',{setUserListInformation[i].UID},'{startDate.DateOnly()}','{endDate.DateOnly()}',0,{(int)EPaymentStatus.StandBy})"; using (var command = _sqLiteConnection.CreateCommand()) { command.CommandText = query; - - using (var reader = command.ExecuteReader()) - { - while (reader.Read()) - { - var applicant = new ApplicantInformation(); - applicant.ApplicantType = reader["ApplicantType"].ToString() == "1"; - applicant.CargoVehicleNumber = reader["CargoVehicleNumber"].ToString(); - applicant.PassengerVehicleNumber = reader["PassengerVehicleNumber"].ToString(); - applicant.Name = reader["Name"].ToString(); - applicant.Phone = reader["Phone"].ToString(); - applicant.Address = reader["Address"].ToString(); - applicant.DateOfApplication = DateTime.Parse(reader["DateOfApplicant"].ToString()); - - applicants.Add(applicant); - } - } + command.ExecuteNonQuery(); } + query = $"UPDATE ApplicantList SET RegistrationStatus={(int)ERegistrationStatus.Registration} Where No={setUserListInformation[i].ApplicantNo}"; + using (var command = _sqLiteConnection.CreateCommand()) + { + command.CommandText = query; + command.ExecuteNonQuery(); + } + ResultSetUserListInformation ResultSetUserListInformation = new ResultSetUserListInformation(); + ResultSetUserListInformation.Area = setUserListInformation[i].Area; + ResultSetUserListInformation.No = noPrefix + lastNo; + ResultSetUserListInformation.ApplicantNo = setUserListInformation[i].ApplicantNo; + ResultSetUserListInformations.Add(ResultSetUserListInformation); + lastNo++; } - - return applicants; + return ResultSetUserListInformations; } - - public static void AddUserList(List CargoVehicleNumber, DateTime start, DateTime end, - int totalCost) - { - var applicants = GetApplicantList(CargoVehicleNumber); - - for (var i = 0; i < applicants.Count; i++) - { - //TODO: 사용자 User 업데이트 부분 Status 1 로 변경 - //UID? 를 가져와야 하나? 아니면 여기서 처리 - var query = - $"INSERT INTO UserList VALUES('{applicants[i].CargoVehicleNumber}','{applicants[i].PassengerVehicleNumber}','{applicants[i].Name}','{applicants[i].Phone}','{applicants[i].Address}','{applicants[i].DateOfApplication.DateTimeDatabase()}','{start.StartDateTime()}','{end.EndDateTime()}','0','0') "; - using (var insertCommand = _sqLiteConnection.CreateCommand()) - { - insertCommand.CommandText = query; - insertCommand.ExecuteNonQuery(); - } - - var no = _sqLiteConnection.LastInsertRowId; - query = - $"INSERT INTO LedgerProceeds(No, Type, Amount, Date) VALUES({no},{(int)EProceedsType.Fees},{totalCost},'{DateTime.Now.DateTimeDatabase()}')"; - using (var insertCommand = _sqLiteConnection.CreateCommand()) - { - insertCommand.CommandText = query; - insertCommand.ExecuteNonQuery(); - } - - query = - $"UPDATE ApplicantList SET Status=1 Where CargoVehicleNumber=\"{applicants[i].CargoVehicleNumber}\""; - - using (var updateCommand = _sqLiteConnection.CreateCommand()) - { - updateCommand.CommandText = query; - updateCommand.ExecuteNonQuery(); - } - } - } - public static List GetLedgerProceeds(DateTime startDateTime, DateTime endDateTime) { var proceedsDatas = new List(); diff --git a/HSUCO_Cargo_Garage_Operation_Program/DevelopReadMe.txt b/HSUCO_Cargo_Garage_Operation_Program/DevelopReadMe.txt index 34243ad..b9e7487 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/DevelopReadMe.txt +++ b/HSUCO_Cargo_Garage_Operation_Program/DevelopReadMe.txt @@ -4,18 +4,11 @@ ApplicantType 1 Ture = 추첨 0 False = 대기 -Status +RegistrationStatus 0 = 대기 1 = 등록 -2 = 삭제됨 - -UserInfo가 필요한가? -PersonalData - -결재 대기 ? -결재 전환 -이걸 UserList에서 ? -userList Status 가 필요함 +2 = 당첨에서 떨어짐 +3 = 삭제됨 UserList Status = 0 결재 대기 diff --git a/HSUCO_Cargo_Garage_Operation_Program/Extends.cs b/HSUCO_Cargo_Garage_Operation_Program/Extends.cs index 611984d..d63957f 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/Extends.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/Extends.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; namespace HSUCO_Cargo_Garage_Operation_Program { @@ -11,7 +12,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program /// public static string DateTimeDatabase(this DateTime dateTime) { - return dateTime.ToString("yyyy-MM-dd hh:mm:ss"); + return dateTime.ToString("yyyy-MM-dd HH:mm:ss"); } /// /// 시간이 00:00:00 으로 된 버전 @@ -43,7 +44,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program return $"{date.Year:D4}-{date.Month:D2}-{date.Day:D2} 23:59:59"; } - + public static int BoolToInt(this bool value) { return value ? 1 : 0; @@ -58,13 +59,13 @@ namespace HSUCO_Cargo_Garage_Operation_Program progressDays.StartTotalDay = DateTime.DaysInMonth(start.Year, start.Month); midDay = midDay.AddMonths(1); } - int month = 0; + progressDays.Month = 0; while (true) { DateTime get = new DateTime(midDay.Year, midDay.Month, DateTime.DaysInMonth(midDay.Year, midDay.Month)); if (get <= end.Date) { - month++; + progressDays.Month++; midDay = midDay.AddMonths(1); } @@ -83,7 +84,7 @@ namespace HSUCO_Cargo_Garage_Operation_Program int month = 0; while (true) { - + if (progressDate <= endDate.Date) { month++; @@ -97,6 +98,19 @@ namespace HSUCO_Cargo_Garage_Operation_Program } return month; } + public static void Shuffle(this IList list) + { + Random random = new Random(); + int n = list.Count; + while (n > 1) + { + n--; + int k = random.Next(n + 1); + T Value = list[k]; + list[k] = list[n]; + list[n] = Value; + } + } } public struct ProgressDays { diff --git a/HSUCO_Cargo_Garage_Operation_Program/HSUCO_Cargo_Garage_Operation_Program.csproj b/HSUCO_Cargo_Garage_Operation_Program/HSUCO_Cargo_Garage_Operation_Program.csproj index fd2ae8c..d544ff0 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/HSUCO_Cargo_Garage_Operation_Program.csproj +++ b/HSUCO_Cargo_Garage_Operation_Program/HSUCO_Cargo_Garage_Operation_Program.csproj @@ -86,6 +86,18 @@ + + Form + + + InsertResult.cs + + + Form + + + LotsScreen.cs + Form @@ -128,6 +140,12 @@ SettingControl.cs + + UserControl + + + Lot.cs + UserControl @@ -161,6 +179,12 @@ + + InsertResult.cs + + + LotsScreen.cs + Promotion.cs @@ -183,6 +207,9 @@ SettingControl.cs + + Lot.cs + UserList.cs diff --git a/HSUCO_Cargo_Garage_Operation_Program/Master.cs b/HSUCO_Cargo_Garage_Operation_Program/Master.cs index fff5b69..81f6f27 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/Master.cs +++ b/HSUCO_Cargo_Garage_Operation_Program/Master.cs @@ -1,13 +1,10 @@ -using HSUCO_Cargo_Garage_Operation_Program.CustomForm; -using System; -using System.Collections.Generic; -using System.Windows.Forms; +using System; namespace HSUCO_Cargo_Garage_Operation_Program { public partial class Master : MetroFramework.Forms.MetroForm { - + public Master() => InitializeComponent(); diff --git a/HSUCO_Cargo_Garage_Operation_Program/Master.resx b/HSUCO_Cargo_Garage_Operation_Program/Master.resx index c0152c7..18ac088 100644 --- a/HSUCO_Cargo_Garage_Operation_Program/Master.resx +++ b/HSUCO_Cargo_Garage_Operation_Program/Master.resx @@ -120,280 +120,10 @@ - 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 @@ -404,7 +134,277 @@ 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