diff --git a/project/ProjectTourAgency/Enities/Discount.cs b/project/ProjectTourAgency/Enities/Discount.cs index bc5b181..30e99fe 100644 --- a/project/ProjectTourAgency/Enities/Discount.cs +++ b/project/ProjectTourAgency/Enities/Discount.cs @@ -10,16 +10,14 @@ namespace ProjectTourAgency.Enities; public class Discount { public int Id { get; private set; } - public float DiscountPercent { get; private set; } + public decimal DiscountPercent { get; private set; } public ClientSocialStatus ClientSocialStatus { get; private set; } - public int ClientId { get; private set; } - public static Discount CreateEntity(int id, int clientId, - ClientSocialStatus clientSocialStatus,float discountPercent) + public static Discount CreateEntity(int id, + ClientSocialStatus clientSocialStatus,decimal discountPercent) { return new Discount { Id = id, - ClientId = clientId, ClientSocialStatus = clientSocialStatus, DiscountPercent = discountPercent }; diff --git a/project/ProjectTourAgency/Forms/FormClients.Designer.cs b/project/ProjectTourAgency/Forms/FormClients.Designer.cs index cf905fa..f9bfecd 100644 --- a/project/ProjectTourAgency/Forms/FormClients.Designer.cs +++ b/project/ProjectTourAgency/Forms/FormClients.Designer.cs @@ -43,9 +43,9 @@ panel1.Controls.Add(buttonUpdate); panel1.Controls.Add(buttonAdd); panel1.Dock = DockStyle.Right; - panel1.Location = new Point(778, 0); + panel1.Location = new Point(775, 0); panel1.Name = "panel1"; - panel1.Size = new Size(149, 378); + panel1.Size = new Size(149, 371); panel1.TabIndex = 0; // // buttonDelete @@ -96,14 +96,14 @@ dataGridViewData.ReadOnly = true; dataGridViewData.RowHeadersVisible = false; dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; - dataGridViewData.Size = new Size(778, 378); + dataGridViewData.Size = new Size(775, 371); dataGridViewData.TabIndex = 1; // // FormClients // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(927, 378); + ClientSize = new Size(924, 371); Controls.Add(dataGridViewData); Controls.Add(panel1); Name = "FormClients"; diff --git a/project/ProjectTourAgency/Forms/FormClients.cs b/project/ProjectTourAgency/Forms/FormClients.cs index 109c5e2..b557f14 100644 --- a/project/ProjectTourAgency/Forms/FormClients.cs +++ b/project/ProjectTourAgency/Forms/FormClients.cs @@ -46,7 +46,7 @@ namespace ProjectTourAgency.Forms } catch (Exception ex) { - MessageBox.Show(ex.Message, "Ошибка рот добавлении", MessageBoxButtons.OK,MessageBoxIcon.Error); + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK,MessageBoxIcon.Error); } } diff --git a/project/ProjectTourAgency/Forms/FormDiscount.Designer.cs b/project/ProjectTourAgency/Forms/FormDiscount.Designer.cs new file mode 100644 index 0000000..723c0c4 --- /dev/null +++ b/project/ProjectTourAgency/Forms/FormDiscount.Designer.cs @@ -0,0 +1,122 @@ +namespace ProjectTourAgency.Forms +{ + partial class FormDiscount + { + /// + /// 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() + { + labelDiscount = new Label(); + comboBoxSocialStatus = new ComboBox(); + labelSocialStatus = new Label(); + buttonCancel = new Button(); + buttonSave = new Button(); + numericUpDownDiscount = new NumericUpDown(); + ((System.ComponentModel.ISupportInitialize)numericUpDownDiscount).BeginInit(); + SuspendLayout(); + // + // labelDiscount + // + labelDiscount.AutoSize = true; + labelDiscount.Location = new Point(25, 82); + labelDiscount.Name = "labelDiscount"; + labelDiscount.Size = new Size(88, 15); + labelDiscount.TabIndex = 0; + labelDiscount.Text = "Размер скидки"; + // + // comboBoxSocialStatus + // + comboBoxSocialStatus.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxSocialStatus.FormattingEnabled = true; + comboBoxSocialStatus.Location = new Point(182, 33); + comboBoxSocialStatus.Name = "comboBoxSocialStatus"; + comboBoxSocialStatus.Size = new Size(121, 23); + comboBoxSocialStatus.TabIndex = 13; + // + // labelSocialStatus + // + labelSocialStatus.AutoSize = true; + labelSocialStatus.Location = new Point(25, 33); + labelSocialStatus.Name = "labelSocialStatus"; + labelSocialStatus.Size = new Size(131, 15); + labelSocialStatus.TabIndex = 12; + labelSocialStatus.Text = "Основания для скидки"; + // + // buttonCancel + // + buttonCancel.Location = new Point(228, 139); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(75, 23); + buttonCancel.TabIndex = 15; + buttonCancel.Text = "Отменить"; + buttonCancel.UseVisualStyleBackColor = true; + // + // buttonSave + // + buttonSave.Location = new Point(65, 139); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(75, 23); + buttonSave.TabIndex = 14; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + // + // numericUpDownDiscount + // + numericUpDownDiscount.DecimalPlaces = 2; + numericUpDownDiscount.Increment = new decimal(new int[] { 1, 0, 0, 131072 }); + numericUpDownDiscount.Location = new Point(182, 82); + numericUpDownDiscount.Maximum = new decimal(new int[] { 1, 0, 0, 0 }); + numericUpDownDiscount.Name = "numericUpDownDiscount"; + numericUpDownDiscount.Size = new Size(121, 23); + numericUpDownDiscount.TabIndex = 16; + // + // FormDiscount + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(383, 174); + Controls.Add(numericUpDownDiscount); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(comboBoxSocialStatus); + Controls.Add(labelSocialStatus); + Controls.Add(labelDiscount); + Name = "FormDiscount"; + Text = "FormDiscount"; + ((System.ComponentModel.ISupportInitialize)numericUpDownDiscount).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label labelDiscount; + private ComboBox comboBoxSocialStatus; + private Label labelSocialStatus; + private Button buttonCancel; + private Button buttonSave; + private NumericUpDown numericUpDownDiscount; + } +} \ No newline at end of file diff --git a/project/ProjectTourAgency/Forms/FormDiscount.cs b/project/ProjectTourAgency/Forms/FormDiscount.cs new file mode 100644 index 0000000..79aae23 --- /dev/null +++ b/project/ProjectTourAgency/Forms/FormDiscount.cs @@ -0,0 +1,81 @@ +using ProjectTourAgency.Enities.Enums; +using ProjectTourAgency.Enities; +using ProjectTourAgency.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ProjectTourAgency.Forms; + +public partial class FormDiscount : Form +{ + private readonly IDiscountRepository _discountRepository; + + private int? _discountId; + + public int Id + { + set + { + try + { + var discount = _discountRepository.ReadDiscountById(value); + if (discount == null) + { + throw new InvalidDataException(nameof(discount)); + } + + + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormDiscount(IDiscountRepository discountRepository) + { + InitializeComponent(); + _discountRepository = discountRepository ?? + throw new ArgumentNullException(nameof(discountRepository)); + comboBoxSocialStatus.DataSource = Enum.GetValues(typeof(ClientSocialStatus)); + } + + private void buttonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(numericUpDownDiscount.Text) + || comboBoxSocialStatus.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля"); + } + + if (_discountId.HasValue) + { + _discountRepository.UpdateDiscount(CreateDiscount(_discountId.Value)); + } + else + { + _discountRepository.CreateDiscount(CreateDiscount(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) => Close(); + + private Discount CreateDiscount(int id) => Discount.CreateEntity(id, (ClientSocialStatus)comboBoxSocialStatus.SelectedItem!,numericUpDownDiscount.Value ); +} diff --git a/project/ProjectTourAgency/Forms/FormDiscount.resx b/project/ProjectTourAgency/Forms/FormDiscount.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/project/ProjectTourAgency/Forms/FormDiscount.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/project/ProjectTourAgency/Forms/FormDiscounts.Designer.cs b/project/ProjectTourAgency/Forms/FormDiscounts.Designer.cs new file mode 100644 index 0000000..ddad0af --- /dev/null +++ b/project/ProjectTourAgency/Forms/FormDiscounts.Designer.cs @@ -0,0 +1,125 @@ +namespace ProjectTourAgency.Forms +{ + partial class FormDiscounts + { + /// + /// 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() + { + dataGridViewData = new DataGridView(); + panel1 = new Panel(); + buttonDelete = new Button(); + buttonUpdate = new Button(); + buttonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // dataGridViewData + // + dataGridViewData.AllowUserToAddRows = false; + dataGridViewData.AllowUserToDeleteRows = false; + dataGridViewData.AllowUserToResizeColumns = false; + dataGridViewData.AllowUserToResizeRows = false; + dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewData.Dock = DockStyle.Fill; + dataGridViewData.Location = new Point(0, 0); + dataGridViewData.MultiSelect = false; + dataGridViewData.Name = "dataGridViewData"; + dataGridViewData.ReadOnly = true; + dataGridViewData.RowHeadersVisible = false; + dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewData.Size = new Size(775, 371); + dataGridViewData.TabIndex = 3; + // + // panel1 + // + panel1.Controls.Add(buttonDelete); + panel1.Controls.Add(buttonUpdate); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(775, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(149, 371); + panel1.TabIndex = 2; + // + // buttonDelete + // + buttonDelete.BackgroundImage = Properties.Resources.free_icon_delete_3807871; + buttonDelete.BackgroundImageLayout = ImageLayout.Stretch; + buttonDelete.Location = new Point(43, 276); + buttonDelete.Name = "buttonDelete"; + buttonDelete.Size = new Size(61, 59); + buttonDelete.TabIndex = 3; + buttonDelete.UseVisualStyleBackColor = true; + buttonDelete.Click += buttonDelete_Click; + // + // buttonUpdate + // + buttonUpdate.BackgroundImage = Properties.Resources.free_icon_edit_8679935; + buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpdate.Location = new Point(43, 142); + buttonUpdate.Name = "buttonUpdate"; + buttonUpdate.Size = new Size(61, 59); + buttonUpdate.TabIndex = 2; + buttonUpdate.UseVisualStyleBackColor = true; + buttonUpdate.Click += buttonUpdate_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.free_icon_add_button_5974633; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(43, 25); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(61, 59); + buttonAdd.TabIndex = 1; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += buttonAdd_Click; + // + // FormDiscounts + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(924, 371); + Controls.Add(dataGridViewData); + Controls.Add(panel1); + Name = "FormDiscounts"; + Text = "FormDiscounts"; + Load += FormDiscounts_Load; + ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridViewData; + private Panel panel1; + private Button buttonDelete; + private Button buttonUpdate; + private Button buttonAdd; + } +} \ No newline at end of file diff --git a/project/ProjectTourAgency/Forms/FormDiscounts.cs b/project/ProjectTourAgency/Forms/FormDiscounts.cs new file mode 100644 index 0000000..c87aa38 --- /dev/null +++ b/project/ProjectTourAgency/Forms/FormDiscounts.cs @@ -0,0 +1,110 @@ +using ProjectTourAgency.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace ProjectTourAgency.Forms +{ + public partial class FormDiscounts : Form + { + private readonly IUnityContainer _container; + + private readonly IDiscountRepository _discountRepository; + + public FormDiscounts(IDiscountRepository discountRepository, IUnityContainer container) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _discountRepository = discountRepository ?? throw new ArgumentNullException(nameof(_discountRepository)); + } + + private void FormDiscounts_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch(Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK,MessageBoxIcon.Error); + } + } + + private void buttonUpdate_Click(object sender, EventArgs e) + { + if(!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonDelete_Click(object sender, EventArgs e) + { + if(!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + if(MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _discountRepository.DeleteDiscount(findId); + LoadList(); + } + catch(Exception ex) + { + MessageBox.Show(ex.Message,"Ошибка при удалении", MessageBoxButtons.OK,MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewData.DataSource = _discountRepository.ReadDiscounts(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if(dataGridViewData.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["ID"].Value); + return true; + } + } +} diff --git a/project/ProjectTourAgency/Forms/FormDiscounts.resx b/project/ProjectTourAgency/Forms/FormDiscounts.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/project/ProjectTourAgency/Forms/FormDiscounts.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/project/ProjectTourAgency/Forms/FormTours.Designer.cs b/project/ProjectTourAgency/Forms/FormTours.Designer.cs index a22f020..62f9d9c 100644 --- a/project/ProjectTourAgency/Forms/FormTours.Designer.cs +++ b/project/ProjectTourAgency/Forms/FormTours.Designer.cs @@ -52,7 +52,7 @@ dataGridViewData.ReadOnly = true; dataGridViewData.RowHeadersVisible = false; dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; - dataGridViewData.Size = new Size(651, 450); + dataGridViewData.Size = new Size(775, 371); dataGridViewData.TabIndex = 3; // // panel1 @@ -61,9 +61,9 @@ panel1.Controls.Add(buttonUpdate); panel1.Controls.Add(buttonAdd); panel1.Dock = DockStyle.Right; - panel1.Location = new Point(651, 0); + panel1.Location = new Point(775, 0); panel1.Name = "panel1"; - panel1.Size = new Size(149, 450); + panel1.Size = new Size(149, 371); panel1.TabIndex = 2; // // buttonDelete @@ -103,7 +103,7 @@ // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(800, 450); + ClientSize = new Size(924, 371); Controls.Add(dataGridViewData); Controls.Add(panel1); Name = "FormTours"; diff --git a/project/ProjectTourAgency/Implementations/DiscountRepository.cs b/project/ProjectTourAgency/Implementations/DiscountRepository.cs index 12fd57c..fbe9a2e 100644 --- a/project/ProjectTourAgency/Implementations/DiscountRepository.cs +++ b/project/ProjectTourAgency/Implementations/DiscountRepository.cs @@ -22,7 +22,7 @@ public class DiscountRepository : IDiscountRepository public Discount ReadDiscountById(int id) { - return Discount.CreateEntity(0, 0, 0, 0); + return Discount.CreateEntity(0, 0, 0); } public IEnumerable ReadDiscounts()