diff --git a/GasStation/GasStation/Entities/Cashier.cs b/GasStation/GasStation/Entities/Cashier.cs new file mode 100644 index 0000000..23003f4 --- /dev/null +++ b/GasStation/GasStation/Entities/Cashier.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using GasStation.Entities.Enums; + +namespace GasStation.Entities; + +public class Cashier +{ + public int Id { get; private set; } + + public string FirstName { get; private set; } = string.Empty; + + public string LastName { get; private set; } = string.Empty; + + public CashierPost CashierPost { get; private set; } + + public static Cashier CreateEntity(int id, string first, string last, CashierPost cashierPost) + { + return new Cashier + { + Id = id, + + FirstName = first ?? string.Empty, + + LastName = last ?? string.Empty, + + CashierPost = cashierPost + }; + } +} diff --git a/GasStation/GasStation/Entities/Enums/CashierPost.cs b/GasStation/GasStation/Entities/Enums/CashierPost.cs new file mode 100644 index 0000000..0cb92fb --- /dev/null +++ b/GasStation/GasStation/Entities/Enums/CashierPost.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GasStation.Entities.Enums; + +public enum CashierPost +{ + None = 0, + + Ordinary = 1, + + Senior = 2, + + Head = 3 +} diff --git a/GasStation/GasStation/Entities/Enums/FuelType.cs b/GasStation/GasStation/Entities/Enums/FuelType.cs new file mode 100644 index 0000000..78a3270 --- /dev/null +++ b/GasStation/GasStation/Entities/Enums/FuelType.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GasStation.Entities.Enums; + +public enum FuelType +{ + None, + + Fuel_92, + + Fuel_95, + + Fuel_100, + + Fuel_diesel +} diff --git a/GasStation/GasStation/Entities/Fuel.cs b/GasStation/GasStation/Entities/Fuel.cs new file mode 100644 index 0000000..cfb5757 --- /dev/null +++ b/GasStation/GasStation/Entities/Fuel.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using GasStation.Entities.Enums; + +namespace GasStation.Entities; + +public class Fuel +{ + public int Id { get; private set; } + + public int Cost { get; private set; } + + public FuelType Type { get; private set; } + + public static Fuel CreateEntity(int id, int cost, FuelType type) + { + return new Fuel + { + Id = id, + + Cost = cost, + + Type = type + }; + } +} diff --git a/GasStation/GasStation/Entities/FuelFuelSale.cs b/GasStation/GasStation/Entities/FuelFuelSale.cs new file mode 100644 index 0000000..489b21b --- /dev/null +++ b/GasStation/GasStation/Entities/FuelFuelSale.cs @@ -0,0 +1,17 @@ +namespace ProjectGasStation.Entities; + +public class FuelFuelSale +{ + public int Id { get; private set; } + + public int FuelId { get; private set; } + + public int Quantity { get; private set; } + + public decimal Price { get; private set; } + + public static FuelFuelSale CreateFuelFuelSale(int id, int fuelId, int quantity, decimal price) + { + return new FuelFuelSale { Id = id, FuelId = fuelId, Quantity = quantity, Price = price }; + } +} \ No newline at end of file diff --git a/GasStation/GasStation/Entities/FuelSale.cs b/GasStation/GasStation/Entities/FuelSale.cs new file mode 100644 index 0000000..fc44dbb --- /dev/null +++ b/GasStation/GasStation/Entities/FuelSale.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ProjectGasStation.Entities; + +namespace GasStation.Entities; + +public class FuelSale +{ + public int Id { get; private set; } + + public int CashierId { get; private set; } + + public DateTime SaleDate { get; private set; } + + public decimal TotalPrice { get; private set; } + + public IEnumerable FuelFuelSale { get; private set; } = []; + + public static FuelSale CreateElement(int id, int cashierId, DateTime saleDate, decimal totalPrice, IEnumerable fuelFuelSale) + { + return new FuelSale + { + Id = id, + + CashierId = cashierId, + + SaleDate = saleDate, + + TotalPrice = totalPrice, + + FuelFuelSale = fuelFuelSale + }; + } +} diff --git a/GasStation/GasStation/Entities/Suppliers.cs b/GasStation/GasStation/Entities/Suppliers.cs new file mode 100644 index 0000000..24b3d18 --- /dev/null +++ b/GasStation/GasStation/Entities/Suppliers.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GasStation.Entities; + +public class Supplier +{ + public int Id { get; private set; } + + public string Brand { get; private set; } = string.Empty; + + public static Supplier CreateEntity(int id, string brand) + { + return new Supplier + { + Id = id, + + Brand = brand ?? string.Empty + }; + } +} diff --git a/GasStation/GasStation/Entities/SuppliersFuel.cs b/GasStation/GasStation/Entities/SuppliersFuel.cs new file mode 100644 index 0000000..74bf7d6 --- /dev/null +++ b/GasStation/GasStation/Entities/SuppliersFuel.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ProjectGasStation.Entities; + +namespace GasStation.Entities; + +public class SuppliersFuel +{ + public int Id { get; private set; } + + public int SuppliersId { get; private set; } + + public DateTime Date { get; private set; } + + public IEnumerable SuppliersFuelFuel { get; private set; } = []; + + public static SuppliersFuel CreateElement(int id, int suppliersId, DateTime date, IEnumerable suppliersFuelFuel) + { + return new SuppliersFuel + { + Id = id, + + SuppliersId = suppliersId, + + Date = date, + + SuppliersFuelFuel = suppliersFuelFuel + }; + } +} diff --git a/GasStation/GasStation/Entities/SuppliersFuelFuel.cs b/GasStation/GasStation/Entities/SuppliersFuelFuel.cs new file mode 100644 index 0000000..df25514 --- /dev/null +++ b/GasStation/GasStation/Entities/SuppliersFuelFuel.cs @@ -0,0 +1,12 @@ +namespace ProjectGasStation.Entities; + +public class SuppliersFuelFuel +{ + public int Id { get; private set; } + public int FuelId { get; private set; } + public int Quantity { get; private set; } + public static SuppliersFuelFuel CreateSuppliersFuelFuel(int id, int fuelId, int quantity) + { + return new SuppliersFuelFuel { Id = id, FuelId = fuelId, Quantity = quantity }; + } +} \ No newline at end of file diff --git a/GasStation/GasStation/Form1.Designer.cs b/GasStation/GasStation/Form1.Designer.cs deleted file mode 100644 index a16eab0..0000000 --- a/GasStation/GasStation/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace GasStation -{ - partial class Form1 - { - /// - /// 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.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; - } - - #endregion - } -} \ No newline at end of file diff --git a/GasStation/GasStation/Form1.cs b/GasStation/GasStation/Form1.cs deleted file mode 100644 index 313e0cf..0000000 --- a/GasStation/GasStation/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace GasStation -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} \ No newline at end of file diff --git a/GasStation/GasStation/FormGasStation.Designer.cs b/GasStation/GasStation/FormGasStation.Designer.cs new file mode 100644 index 0000000..9022b2f --- /dev/null +++ b/GasStation/GasStation/FormGasStation.Designer.cs @@ -0,0 +1,137 @@ +namespace GasStation +{ + partial class FormGasStation + { + /// + /// 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() + { + menuStrip1 = new MenuStrip(); + справочникиToolStripMenuItem = new ToolStripMenuItem(); + ToolStripMenuItemCashier = new ToolStripMenuItem(); + ToolStripMenuItemFuels = new ToolStripMenuItem(); + ToolStripMenuItemSuppliers = new ToolStripMenuItem(); + операцииToolStripMenuItem = new ToolStripMenuItem(); + ToolStripMenuItemFuelSale = new ToolStripMenuItem(); + ToolStripMenuItemSuppliersFuel = new ToolStripMenuItem(); + отчётыToolStripMenuItem = new ToolStripMenuItem(); + menuStrip1.SuspendLayout(); + SuspendLayout(); + // + // menuStrip1 + // + menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, операцииToolStripMenuItem, отчётыToolStripMenuItem }); + menuStrip1.Location = new Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Size = new Size(784, 24); + menuStrip1.TabIndex = 0; + menuStrip1.Text = "menuStrip"; + // + // справочникиToolStripMenuItem + // + справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { ToolStripMenuItemCashier, ToolStripMenuItemFuels, ToolStripMenuItemSuppliers }); + справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; + справочникиToolStripMenuItem.Size = new Size(97, 20); + справочникиToolStripMenuItem.Text = "Справочники"; + // + // ToolStripMenuItemCashier + // + ToolStripMenuItemCashier.Name = "ToolStripMenuItemCashier"; + ToolStripMenuItemCashier.Size = new Size(180, 22); + ToolStripMenuItemCashier.Text = "Кассиры"; + ToolStripMenuItemCashier.Click += ToolStripMenuItemCashier_Click; + // + // ToolStripMenuItemFuels + // + ToolStripMenuItemFuels.Name = "ToolStripMenuItemFuels"; + ToolStripMenuItemFuels.Size = new Size(180, 22); + ToolStripMenuItemFuels.Text = "Топливо"; + ToolStripMenuItemFuels.Click += ToolStripMenuItemFuels_Click; + // + // ToolStripMenuItemSuppliers + // + ToolStripMenuItemSuppliers.Name = "ToolStripMenuItemSuppliers"; + ToolStripMenuItemSuppliers.Size = new Size(180, 22); + ToolStripMenuItemSuppliers.Text = "Поставщики"; + ToolStripMenuItemSuppliers.Click += ToolStripMenuItemSuppliers_Click; + // + // операцииToolStripMenuItem + // + операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { ToolStripMenuItemFuelSale, ToolStripMenuItemSuppliersFuel }); + операцииToolStripMenuItem.Name = "операцииToolStripMenuItem"; + операцииToolStripMenuItem.Size = new Size(79, 20); + операцииToolStripMenuItem.Text = "Операции"; + // + // ToolStripMenuItemFuelSale + // + ToolStripMenuItemFuelSale.Name = "ToolStripMenuItemFuelSale"; + ToolStripMenuItemFuelSale.Size = new Size(180, 22); + ToolStripMenuItemFuelSale.Text = "Продажи топлива"; + ToolStripMenuItemFuelSale.Click += ToolStripMenuItemFuelSale_Click; + // + // ToolStripMenuItemSuppliersFuel + // + ToolStripMenuItemSuppliersFuel.Name = "ToolStripMenuItemSuppliersFuel"; + ToolStripMenuItemSuppliersFuel.Size = new Size(180, 22); + ToolStripMenuItemSuppliersFuel.Text = "Поставки топлива"; + ToolStripMenuItemSuppliersFuel.Click += ToolStripMenuItemSuppliersFuel_Click; + // + // отчётыToolStripMenuItem + // + отчётыToolStripMenuItem.Name = "отчётыToolStripMenuItem"; + отчётыToolStripMenuItem.Size = new Size(62, 20); + отчётыToolStripMenuItem.Text = "Отчёты"; + // + // FormGasStation + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackgroundImage = Properties.Resources.Заправка; + BackgroundImageLayout = ImageLayout.Stretch; + ClientSize = new Size(784, 411); + Controls.Add(menuStrip1); + MainMenuStrip = menuStrip1; + Name = "FormGasStation"; + StartPosition = FormStartPosition.CenterScreen; + Text = "GasStation"; + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private MenuStrip menuStrip1; + private ToolStripMenuItem справочникиToolStripMenuItem; + private ToolStripMenuItem ToolStripMenuItemCashier; + private ToolStripMenuItem операцииToolStripMenuItem; + private ToolStripMenuItem отчётыToolStripMenuItem; + private ToolStripMenuItem ToolStripMenuItemFuels; + private ToolStripMenuItem ToolStripMenuItemSuppliers; + private ToolStripMenuItem ToolStripMenuItemFuelSale; + private ToolStripMenuItem ToolStripMenuItemSuppliersFuel; + } +} \ No newline at end of file diff --git a/GasStation/GasStation/FormGasStation.cs b/GasStation/GasStation/FormGasStation.cs new file mode 100644 index 0000000..98b0e7e --- /dev/null +++ b/GasStation/GasStation/FormGasStation.cs @@ -0,0 +1,81 @@ +using GasStation.Forms; +using Unity; + +namespace GasStation; + +public partial class FormGasStation : Form +{ + private readonly IUnityContainer _container; + + public FormGasStation(IUnityContainer container) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + } + + private void ToolStripMenuItemCashier_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ToolStripMenuItemFuels_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ToolStripMenuItemSuppliers_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ToolStripMenuItemFuelSale_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ToolStripMenuItemSuppliersFuel_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } +} \ No newline at end of file diff --git a/GasStation/GasStation/FormGasStation.resx b/GasStation/GasStation/FormGasStation.resx new file mode 100644 index 0000000..b48baf1 --- /dev/null +++ b/GasStation/GasStation/FormGasStation.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + \ No newline at end of file diff --git a/GasStation/GasStation/Forms/FormCashier.Designer.cs b/GasStation/GasStation/Forms/FormCashier.Designer.cs new file mode 100644 index 0000000..043427d --- /dev/null +++ b/GasStation/GasStation/Forms/FormCashier.Designer.cs @@ -0,0 +1,142 @@ +namespace GasStation.Forms +{ + partial class FormCashier + { + /// + /// 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() + { + comboBoxPost = new ComboBox(); + textBoxFirstName = new TextBox(); + textBoxLastName = new TextBox(); + ButtonSave = new Button(); + ButtonCancel = new Button(); + label1 = new Label(); + label2 = new Label(); + label3 = new Label(); + SuspendLayout(); + // + // comboBoxPost + // + comboBoxPost.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxPost.FormattingEnabled = true; + comboBoxPost.Location = new Point(159, 107); + comboBoxPost.Name = "comboBoxPost"; + comboBoxPost.Size = new Size(145, 23); + comboBoxPost.TabIndex = 0; + // + // textBoxFirstName + // + textBoxFirstName.Location = new Point(159, 23); + textBoxFirstName.Name = "textBoxFirstName"; + textBoxFirstName.Size = new Size(145, 23); + textBoxFirstName.TabIndex = 1; + // + // textBoxLastName + // + textBoxLastName.Location = new Point(159, 64); + textBoxLastName.Name = "textBoxLastName"; + textBoxLastName.Size = new Size(145, 23); + textBoxLastName.TabIndex = 2; + // + // ButtonSave + // + ButtonSave.Location = new Point(69, 168); + ButtonSave.Name = "ButtonSave"; + ButtonSave.Size = new Size(87, 25); + ButtonSave.TabIndex = 3; + ButtonSave.Text = "Сохранить"; + ButtonSave.UseVisualStyleBackColor = true; + ButtonSave.Click += ButtonSave_Click; + // + // ButtonCancel + // + ButtonCancel.Location = new Point(185, 168); + ButtonCancel.Name = "ButtonCancel"; + ButtonCancel.Size = new Size(96, 25); + ButtonCancel.TabIndex = 4; + ButtonCancel.Text = "Отмена"; + ButtonCancel.UseVisualStyleBackColor = true; + ButtonCancel.Click += ButtonCancel_Click; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(29, 26); + label1.Name = "label1"; + label1.Size = new Size(35, 15); + label1.TabIndex = 5; + label1.Text = "Имя:"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(29, 67); + label2.Name = "label2"; + label2.Size = new Size(65, 15); + label2.TabIndex = 6; + label2.Text = "Фамилия:"; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(29, 110); + label3.Name = "label3"; + label3.Size = new Size(75, 15); + label3.TabIndex = 7; + label3.Text = "Должность:"; + // + // FormCashier + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(340, 212); + Controls.Add(label3); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(ButtonCancel); + Controls.Add(ButtonSave); + Controls.Add(textBoxLastName); + Controls.Add(textBoxFirstName); + Controls.Add(comboBoxPost); + Name = "FormCashier"; + StartPosition = FormStartPosition.CenterParent; + Text = "Кассир"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private ComboBox comboBoxPost; + private TextBox textBoxFirstName; + private TextBox textBoxLastName; + private Button ButtonSave; + private Button ButtonCancel; + private Label label1; + private Label label2; + private Label label3; + } +} \ No newline at end of file diff --git a/GasStation/GasStation/Forms/FormCashier.cs b/GasStation/GasStation/Forms/FormCashier.cs new file mode 100644 index 0000000..94a1c25 --- /dev/null +++ b/GasStation/GasStation/Forms/FormCashier.cs @@ -0,0 +1,84 @@ +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 GasStation.Entities; +using GasStation.Entities.Enums; +using GasStation.Repositories; +using GasStation.Repositories.Implementations; + +namespace GasStation.Forms; + +public partial class FormCashier : Form +{ + public readonly ICashierRepository _cashierRepository; + + private int? _cashierId; + + public int Id + { + set + { + try + { + var cashier = _cashierRepository.ReadCashierById(value); + if (cashier == null) + { + throw new InvalidDataException(nameof(cashier)); + } + + textBoxFirstName.Text = cashier.FirstName; + textBoxLastName.Text = cashier.LastName; + comboBoxPost.SelectedItem = cashier.CashierPost; + _cashierId = cashier.Id; + } + + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormCashier(ICashierRepository cashierRepository) + { + InitializeComponent(); + _cashierRepository = cashierRepository ?? throw new ArgumentNullException(nameof(cashierRepository)); + comboBoxPost.DataSource = Enum.GetValues(typeof(CashierPost)); + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxFirstName.Text) || string.IsNullOrWhiteSpace(textBoxLastName.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_cashierId.HasValue) + { + _cashierRepository.UpdateCashier(CreateCashier(_cashierId.Value)); + } + else + { + _cashierRepository.CreateCashier(CreateCashier(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private Cashier CreateCashier(int id) => Cashier.CreateEntity(id, textBoxFirstName.Text, textBoxLastName.Text,(CashierPost)comboBoxPost.SelectedItem!); +} diff --git a/GasStation/GasStation/Form1.resx b/GasStation/GasStation/Forms/FormCashier.resx similarity index 92% rename from GasStation/GasStation/Form1.resx rename to GasStation/GasStation/Forms/FormCashier.resx index 1af7de1..8b2ff64 100644 --- a/GasStation/GasStation/Form1.resx +++ b/GasStation/GasStation/Forms/FormCashier.resx @@ -1,17 +1,17 @@  - diff --git a/GasStation/GasStation/Forms/FormCashiers.Designer.cs b/GasStation/GasStation/Forms/FormCashiers.Designer.cs new file mode 100644 index 0000000..1d4603a --- /dev/null +++ b/GasStation/GasStation/Forms/FormCashiers.Designer.cs @@ -0,0 +1,128 @@ +namespace GasStation.Forms +{ + partial class FormCashiers + { + /// + /// 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.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormCashiers)); + panel1 = new Panel(); + ButtonDel = new Button(); + ButtonUpd = new Button(); + ButtonAdd = new Button(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(ButtonDel); + panel1.Controls.Add(ButtonUpd); + panel1.Controls.Add(ButtonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(623, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(114, 413); + panel1.TabIndex = 0; + // + // ButtonDel + // + ButtonDel.BackgroundImage = Properties.Resources.Минус; + ButtonDel.BackgroundImageLayout = ImageLayout.Stretch; + ButtonDel.Location = new Point(18, 184); + ButtonDel.Name = "ButtonDel"; + ButtonDel.Size = new Size(80, 80); + ButtonDel.TabIndex = 2; + ButtonDel.UseVisualStyleBackColor = true; + ButtonDel.Click += ButtonDel_Click; + // + // ButtonUpd + // + ButtonUpd.BackgroundImage = (Image)resources.GetObject("ButtonUpd.BackgroundImage"); + ButtonUpd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonUpd.Location = new Point(18, 98); + ButtonUpd.Name = "ButtonUpd"; + ButtonUpd.Size = new Size(80, 80); + ButtonUpd.TabIndex = 1; + ButtonUpd.UseVisualStyleBackColor = true; + ButtonUpd.Click += ButtonUpd_Click; + // + // ButtonAdd + // + ButtonAdd.BackgroundImage = Properties.Resources.Плюс; + ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonAdd.Location = new Point(18, 12); + ButtonAdd.Name = "ButtonAdd"; + ButtonAdd.Size = new Size(80, 80); + ButtonAdd.TabIndex = 0; + ButtonAdd.UseVisualStyleBackColor = true; + ButtonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.RowTemplate.Height = 25; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(623, 413); + dataGridView.TabIndex = 1; + // + // FormCashiers + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(737, 413); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormCashiers"; + StartPosition = FormStartPosition.CenterParent; + Text = "Кассиры"; + Load += FormCashiers_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button ButtonDel; + private Button ButtonUpd; + private Button ButtonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/GasStation/GasStation/Forms/FormCashiers.cs b/GasStation/GasStation/Forms/FormCashiers.cs new file mode 100644 index 0000000..9784008 --- /dev/null +++ b/GasStation/GasStation/Forms/FormCashiers.cs @@ -0,0 +1,111 @@ +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 System.Xml.Linq; +using GasStation.Repositories; +using Unity; + +namespace GasStation.Forms; + +public partial class FormCashiers : Form +{ + private readonly IUnityContainer _container; + private readonly ICashierRepository _cashierRepository; + + public FormCashiers(IUnityContainer container, ICashierRepository cashierRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _cashierRepository = cashierRepository ?? throw new ArgumentNullException(nameof(cashierRepository)); + } + + private void FormCashiers_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 ButtonUpd_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 ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _cashierRepository.DeleteCashier(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _cashierRepository.ReadCashiers(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + + } +} diff --git a/GasStation/GasStation/Forms/FormCashiers.resx b/GasStation/GasStation/Forms/FormCashiers.resx new file mode 100644 index 0000000..dc19de2 --- /dev/null +++ b/GasStation/GasStation/Forms/FormCashiers.resx @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + oUIOarX/AceT4DvUQEgWAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/GasStation/GasStation/Forms/FormFuel.Designer.cs b/GasStation/GasStation/Forms/FormFuel.Designer.cs new file mode 100644 index 0000000..7cd2f3e --- /dev/null +++ b/GasStation/GasStation/Forms/FormFuel.Designer.cs @@ -0,0 +1,121 @@ +namespace GasStation.Forms +{ + partial class FormFuel + { + /// + /// 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() + { + numericUpDownCost = new NumericUpDown(); + comboBoxType = new ComboBox(); + ButtonSave = new Button(); + ButtonCancel = new Button(); + label1 = new Label(); + label2 = new Label(); + ((System.ComponentModel.ISupportInitialize)numericUpDownCost).BeginInit(); + SuspendLayout(); + // + // numericUpDownCost + // + numericUpDownCost.Location = new Point(113, 19); + numericUpDownCost.Name = "numericUpDownCost"; + numericUpDownCost.Size = new Size(158, 23); + numericUpDownCost.TabIndex = 0; + // + // comboBoxType + // + comboBoxType.FormattingEnabled = true; + comboBoxType.Location = new Point(113, 64); + comboBoxType.Name = "comboBoxType"; + comboBoxType.Size = new Size(158, 23); + comboBoxType.TabIndex = 1; + // + // ButtonSave + // + ButtonSave.Location = new Point(37, 107); + ButtonSave.Name = "ButtonSave"; + ButtonSave.Size = new Size(96, 25); + ButtonSave.TabIndex = 2; + ButtonSave.Text = "Сохранить"; + ButtonSave.UseVisualStyleBackColor = true; + ButtonSave.Click += ButtonSave_Click; + // + // ButtonCancel + // + ButtonCancel.Location = new Point(148, 107); + ButtonCancel.Name = "ButtonCancel"; + ButtonCancel.Size = new Size(96, 25); + ButtonCancel.TabIndex = 3; + ButtonCancel.Text = "Отмена"; + ButtonCancel.UseVisualStyleBackColor = true; + ButtonCancel.Click += ButtonCancel_Click; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(12, 23); + label1.Name = "label1"; + label1.Size = new Size(40, 15); + label1.TabIndex = 4; + label1.Text = "Цена:"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(12, 67); + label2.Name = "label2"; + label2.Size = new Size(83, 15); + label2.TabIndex = 5; + label2.Text = "Вид топлива:"; + // + // FormFuel + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(286, 148); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(ButtonCancel); + Controls.Add(ButtonSave); + Controls.Add(comboBoxType); + Controls.Add(numericUpDownCost); + Name = "FormFuel"; + StartPosition = FormStartPosition.CenterParent; + Text = "Топливо"; + ((System.ComponentModel.ISupportInitialize)numericUpDownCost).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private NumericUpDown numericUpDownCost; + private ComboBox comboBoxType; + private Button ButtonSave; + private Button ButtonCancel; + private Label label1; + private Label label2; + } +} \ No newline at end of file diff --git a/GasStation/GasStation/Forms/FormFuel.cs b/GasStation/GasStation/Forms/FormFuel.cs new file mode 100644 index 0000000..2a17e2a --- /dev/null +++ b/GasStation/GasStation/Forms/FormFuel.cs @@ -0,0 +1,82 @@ +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 GasStation.Entities; +using GasStation.Entities.Enums; +using GasStation.Repositories; +using GasStation.Repositories.Implementations; + +namespace GasStation.Forms; + +public partial class FormFuel : Form +{ + private readonly IFuelRepository _fuelRepository; + + private int? _fuelId; + + public int Id + { + set + { + try + { + var fuel = _fuelRepository.ReadFuelById(value); + if (fuel == null) + { + throw new InvalidDataException(nameof(fuel)); + } + + numericUpDownCost.Value = (decimal)fuel.Cost; + comboBoxType.SelectedItem = fuel.Type; + _fuelId = fuel.Id; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormFuel(IFuelRepository fuelRepository) + { + InitializeComponent(); + _fuelRepository = fuelRepository ?? throw new ArgumentNullException(nameof(fuelRepository)); + comboBoxType.DataSource = Enum.GetValues(typeof(FuelType)); + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (numericUpDownCost.Value == 0 || comboBoxType.SelectedIndex < 1) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_fuelId.HasValue) + { + _fuelRepository.UpdateFuel(CreateFuel(_fuelId.Value)); + } + else + { + _fuelRepository.CreateFuel(CreateFuel(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private Fuel CreateFuel(int id) => Fuel.CreateEntity(id, (int)numericUpDownCost.Value, (FuelType)comboBoxType.SelectedItem!); +} diff --git a/GasStation/GasStation/Forms/FormFuel.resx b/GasStation/GasStation/Forms/FormFuel.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/GasStation/GasStation/Forms/FormFuel.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/GasStation/GasStation/Forms/FormFuelSale.Designer.cs b/GasStation/GasStation/Forms/FormFuelSale.Designer.cs new file mode 100644 index 0000000..69ef3de --- /dev/null +++ b/GasStation/GasStation/Forms/FormFuelSale.Designer.cs @@ -0,0 +1,172 @@ +namespace GasStation.Forms +{ + partial class FormFuelSale + { + /// + /// 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() + { + comboBoxCashier = new ComboBox(); + dateTimePickerDate = new DateTimePicker(); + groupBox1 = new GroupBox(); + dataGridView = new DataGridView(); + ColumnFuel = new DataGridViewComboBoxColumn(); + ColumnQuantity = new DataGridViewTextBoxColumn(); + label1 = new Label(); + label2 = new Label(); + ButtonSave = new Button(); + ButtonCancel = new Button(); + groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // comboBoxCashier + // + comboBoxCashier.FormattingEnabled = true; + comboBoxCashier.Location = new Point(105, 12); + comboBoxCashier.Name = "comboBoxCashier"; + comboBoxCashier.Size = new Size(173, 23); + comboBoxCashier.TabIndex = 0; + // + // dateTimePickerDate + // + dateTimePickerDate.Location = new Point(105, 58); + dateTimePickerDate.Name = "dateTimePickerDate"; + dateTimePickerDate.Size = new Size(173, 23); + dateTimePickerDate.TabIndex = 1; + // + // groupBox1 + // + groupBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + groupBox1.Controls.Add(dataGridView); + groupBox1.Location = new Point(12, 101); + groupBox1.Name = "groupBox1"; + groupBox1.Size = new Size(270, 245); + groupBox1.TabIndex = 2; + groupBox1.TabStop = false; + groupBox1.Text = "Топливо"; + // + // dataGridView + // + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnFuel, ColumnQuantity }); + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(3, 19); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersVisible = false; + dataGridView.RowTemplate.Height = 25; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(264, 223); + dataGridView.TabIndex = 0; + // + // ColumnFuel + // + ColumnFuel.HeaderText = "Топливо"; + ColumnFuel.Name = "ColumnFuel"; + // + // ColumnQuantity + // + ColumnQuantity.HeaderText = "Количество"; + ColumnQuantity.Name = "ColumnQuantity"; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(3, 17); + label1.Name = "label1"; + label1.Size = new Size(68, 15); + label1.TabIndex = 3; + label1.Text = "Продавец:"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(3, 64); + label2.Name = "label2"; + label2.Size = new Size(91, 15); + label2.TabIndex = 4; + label2.Text = "Дата продажи:"; + // + // ButtonSave + // + ButtonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + ButtonSave.Location = new Point(15, 358); + ButtonSave.Name = "ButtonSave"; + ButtonSave.Size = new Size(118, 31); + ButtonSave.TabIndex = 5; + ButtonSave.Text = "Сохранить"; + ButtonSave.UseVisualStyleBackColor = true; + ButtonSave.Click += ButtonSave_Click; + // + // ButtonCancel + // + ButtonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + ButtonCancel.Location = new Point(162, 358); + ButtonCancel.Name = "ButtonCancel"; + ButtonCancel.Size = new Size(118, 31); + ButtonCancel.TabIndex = 6; + ButtonCancel.Text = "Отмена"; + ButtonCancel.UseVisualStyleBackColor = true; + ButtonCancel.Click += ButtonCancel_Click; + // + // FormFuelSale + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(292, 401); + Controls.Add(ButtonCancel); + Controls.Add(ButtonSave); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(groupBox1); + Controls.Add(dateTimePickerDate); + Controls.Add(comboBoxCashier); + Name = "FormFuelSale"; + StartPosition = FormStartPosition.CenterParent; + Text = "FormFuelSale"; + groupBox1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private ComboBox comboBoxCashier; + private DateTimePicker dateTimePickerDate; + private GroupBox groupBox1; + private Label label1; + private Label label2; + private DataGridView dataGridView; + private Button ButtonSave; + private Button ButtonCancel; + private DataGridViewComboBoxColumn ColumnFuel; + private DataGridViewTextBoxColumn ColumnQuantity; + } +} \ No newline at end of file diff --git a/GasStation/GasStation/Forms/FormFuelSale.cs b/GasStation/GasStation/Forms/FormFuelSale.cs new file mode 100644 index 0000000..de69446 --- /dev/null +++ b/GasStation/GasStation/Forms/FormFuelSale.cs @@ -0,0 +1,72 @@ +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 GasStation.Entities; +using GasStation.Repositories; +using ProjectGasStation.Entities; + +namespace GasStation.Forms; + +public partial class FormFuelSale : Form +{ + private readonly IFuelSalesRepository _fuelSalesRepository; + + public FormFuelSale(IFuelSalesRepository fuelSalesRepository, + ICashierRepository cashierRepository, + IFuelRepository fuelRepository) + { + InitializeComponent(); + _fuelSalesRepository = fuelSalesRepository ?? throw new ArgumentNullException(nameof(fuelSalesRepository)); + + comboBoxCashier.DataSource = cashierRepository.ReadCashiers(); + comboBoxCashier.DisplayMember = "FirstName"; + comboBoxCashier.ValueMember = "Id"; + + ColumnFuel.DataSource = fuelRepository.ReadFuels(); + ColumnFuel.DisplayMember = "Type"; + ColumnFuel.ValueMember = "Id"; + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (dataGridView.RowCount < 1 || comboBoxCashier.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля"); + } + _fuelSalesRepository.CreateFuelSale(FuelSale.CreateElement(0, + (int)comboBoxCashier.SelectedValue!, dateTimePickerDate.Value, 0, CreateListFuelFuelSaleFromDataGrid())); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private List CreateListFuelFuelSaleFromDataGrid() + { + var list = new List(); + foreach (DataGridViewRow row in dataGridView.Rows) + { + if (row.Cells["ColumnFuel"].Value == null || row.Cells["ColumnQuantity"].Value == null) + { + continue; + } + list.Add(FuelFuelSale.CreateFuelFuelSale(0, + Convert.ToInt32(row.Cells["ColumnFuel"].Value), + Convert.ToInt32(row.Cells["ColumnQuantity"].Value), 0)); + } + return list; + } +} diff --git a/GasStation/GasStation/Forms/FormFuelSale.resx b/GasStation/GasStation/Forms/FormFuelSale.resx new file mode 100644 index 0000000..a5f58c2 --- /dev/null +++ b/GasStation/GasStation/Forms/FormFuelSale.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + True + + + True + + \ No newline at end of file diff --git a/GasStation/GasStation/Forms/FormFuelSales.Designer.cs b/GasStation/GasStation/Forms/FormFuelSales.Designer.cs new file mode 100644 index 0000000..8cf242b --- /dev/null +++ b/GasStation/GasStation/Forms/FormFuelSales.Designer.cs @@ -0,0 +1,113 @@ +namespace GasStation.Forms +{ + partial class FormFuelSales + { + /// + /// 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() + { + panel1 = new Panel(); + ButtonDel = new Button(); + ButtonAdd = new Button(); + dataGridViewData = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(ButtonDel); + panel1.Controls.Add(ButtonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(623, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(114, 413); + panel1.TabIndex = 0; + // + // ButtonDel + // + ButtonDel.BackgroundImage = Properties.Resources.Минус; + ButtonDel.BackgroundImageLayout = ImageLayout.Stretch; + ButtonDel.Location = new Point(22, 98); + ButtonDel.Name = "ButtonDel"; + ButtonDel.Size = new Size(80, 80); + ButtonDel.TabIndex = 1; + ButtonDel.UseVisualStyleBackColor = true; + ButtonDel.Click += ButtonDel_Click; + // + // ButtonAdd + // + ButtonAdd.BackgroundImage = Properties.Resources.Плюс; + ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonAdd.Location = new Point(22, 12); + ButtonAdd.Name = "ButtonAdd"; + ButtonAdd.Size = new Size(80, 80); + ButtonAdd.TabIndex = 0; + ButtonAdd.UseVisualStyleBackColor = true; + ButtonAdd.Click += ButtonAdd_Click; + // + // 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.RowTemplate.Height = 25; + dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewData.Size = new Size(623, 413); + dataGridViewData.TabIndex = 1; + // + // FormFuelSales + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(737, 413); + Controls.Add(dataGridViewData); + Controls.Add(panel1); + Name = "FormFuelSales"; + StartPosition = FormStartPosition.CenterParent; + Text = "Продажи"; + Load += FormFuels_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button ButtonDel; + private Button ButtonAdd; + private DataGridView dataGridViewData; + } +} \ No newline at end of file diff --git a/GasStation/GasStation/Forms/FormFuelSales.cs b/GasStation/GasStation/Forms/FormFuelSales.cs new file mode 100644 index 0000000..3fe5779 --- /dev/null +++ b/GasStation/GasStation/Forms/FormFuelSales.cs @@ -0,0 +1,90 @@ +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 GasStation.Repositories; +using GasStation.Repositories.Implementations; +using Unity; + +namespace GasStation.Forms; + +public partial class FormFuelSales : Form +{ + private readonly IUnityContainer _container; + private readonly IFuelSalesRepository _fuelSalesRepository; + + public FormFuelSales(IUnityContainer container, IFuelSalesRepository fuelSalesRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _fuelSalesRepository = fuelSalesRepository ?? throw new ArgumentNullException(nameof(fuelSalesRepository)); + } + + private void FormFuels_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 ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _fuelSalesRepository.DeleteFuelSale(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewData.DataSource = _fuelSalesRepository.ReadFuelSale(); + + 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/GasStation/GasStation/Forms/FormFuelSales.resx b/GasStation/GasStation/Forms/FormFuelSales.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/GasStation/GasStation/Forms/FormFuelSales.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/GasStation/GasStation/Forms/FormFuels.Designer.cs b/GasStation/GasStation/Forms/FormFuels.Designer.cs new file mode 100644 index 0000000..42ada1a --- /dev/null +++ b/GasStation/GasStation/Forms/FormFuels.Designer.cs @@ -0,0 +1,128 @@ +namespace GasStation.Forms +{ + partial class FormFuels + { + /// + /// 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.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormFuels)); + panel1 = new Panel(); + ButtonDel = new Button(); + ButtonUpd = new Button(); + ButtonAdd = new Button(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(ButtonDel); + panel1.Controls.Add(ButtonUpd); + panel1.Controls.Add(ButtonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(623, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(114, 413); + panel1.TabIndex = 0; + // + // ButtonDel + // + ButtonDel.BackgroundImage = Properties.Resources.Минус; + ButtonDel.BackgroundImageLayout = ImageLayout.Stretch; + ButtonDel.Location = new Point(21, 184); + ButtonDel.Name = "ButtonDel"; + ButtonDel.Size = new Size(80, 80); + ButtonDel.TabIndex = 2; + ButtonDel.UseVisualStyleBackColor = true; + ButtonDel.Click += ButtonDel_Click; + // + // ButtonUpd + // + ButtonUpd.BackgroundImage = (Image)resources.GetObject("ButtonUpd.BackgroundImage"); + ButtonUpd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonUpd.Location = new Point(21, 98); + ButtonUpd.Name = "ButtonUpd"; + ButtonUpd.Size = new Size(80, 80); + ButtonUpd.TabIndex = 1; + ButtonUpd.UseVisualStyleBackColor = true; + ButtonUpd.Click += ButtonUpd_Click; + // + // ButtonAdd + // + ButtonAdd.BackgroundImage = Properties.Resources.Плюс; + ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonAdd.Location = new Point(21, 12); + ButtonAdd.Name = "ButtonAdd"; + ButtonAdd.Size = new Size(80, 80); + ButtonAdd.TabIndex = 0; + ButtonAdd.UseVisualStyleBackColor = true; + ButtonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.RowTemplate.Height = 25; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(623, 413); + dataGridView.TabIndex = 1; + // + // FormFuels + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(737, 413); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormFuels"; + StartPosition = FormStartPosition.CenterParent; + Text = "Топливо"; + Load += FormFuels_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button ButtonDel; + private Button ButtonUpd; + private Button ButtonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/GasStation/GasStation/Forms/FormFuels.cs b/GasStation/GasStation/Forms/FormFuels.cs new file mode 100644 index 0000000..4587ab8 --- /dev/null +++ b/GasStation/GasStation/Forms/FormFuels.cs @@ -0,0 +1,112 @@ +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 System.Xml.Linq; +using GasStation.Repositories; +using GasStation.Repositories.Implementations; +using Unity; + +namespace GasStation.Forms; + +public partial class FormFuels : Form +{ + private readonly IUnityContainer _container; + + private readonly IFuelRepository _fuelRepository; + + public FormFuels(IUnityContainer container, IFuelRepository fuelRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _fuelRepository = fuelRepository ?? throw new ArgumentNullException(nameof(fuelRepository)); + } + + private void FormFuels_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 ButtonUpd_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 ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _fuelRepository.DeleteFuel(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _fuelRepository.ReadFuels(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + } +} diff --git a/GasStation/GasStation/Forms/FormFuels.resx b/GasStation/GasStation/Forms/FormFuels.resx new file mode 100644 index 0000000..dc19de2 --- /dev/null +++ b/GasStation/GasStation/Forms/FormFuels.resx @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + oUIOarX/AceT4DvUQEgWAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/GasStation/GasStation/Forms/FormSupplier.Designer.cs b/GasStation/GasStation/Forms/FormSupplier.Designer.cs new file mode 100644 index 0000000..49a830c --- /dev/null +++ b/GasStation/GasStation/Forms/FormSupplier.Designer.cs @@ -0,0 +1,95 @@ +namespace GasStation.Forms +{ + partial class FormSupplier + { + /// + /// 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() + { + label1 = new Label(); + textBoxBrand = new TextBox(); + ButtonSave = new Button(); + ButtonCancel = new Button(); + SuspendLayout(); + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(39, 43); + label1.Name = "label1"; + label1.Size = new Size(116, 15); + label1.TabIndex = 0; + label1.Text = "Бренд поставщика"; + // + // textBoxBrand + // + textBoxBrand.Location = new Point(191, 40); + textBoxBrand.Name = "textBoxBrand"; + textBoxBrand.Size = new Size(125, 23); + textBoxBrand.TabIndex = 1; + // + // ButtonSave + // + ButtonSave.Location = new Point(39, 116); + ButtonSave.Name = "ButtonSave"; + ButtonSave.Size = new Size(116, 30); + ButtonSave.TabIndex = 2; + ButtonSave.Text = "Сохранить"; + ButtonSave.Click += ButtonSave_Click; + // + // ButtonCancel + // + ButtonCancel.Location = new Point(191, 116); + ButtonCancel.Name = "ButtonCancel"; + ButtonCancel.Size = new Size(125, 30); + ButtonCancel.TabIndex = 3; + ButtonCancel.Text = "Отмена"; + ButtonCancel.UseVisualStyleBackColor = true; + ButtonCancel.Click += ButtonCancel_Click; + // + // FormSuppliers + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(366, 189); + Controls.Add(ButtonCancel); + Controls.Add(ButtonSave); + Controls.Add(textBoxBrand); + Controls.Add(label1); + Name = "FormSuppliers"; + StartPosition = FormStartPosition.CenterParent; + Text = "Поставщики"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label label1; + private TextBox textBoxBrand; + private Button ButtonSave; + private Button ButtonCancel; + } +} \ No newline at end of file diff --git a/GasStation/GasStation/Forms/FormSupplier.cs b/GasStation/GasStation/Forms/FormSupplier.cs new file mode 100644 index 0000000..9422a6b --- /dev/null +++ b/GasStation/GasStation/Forms/FormSupplier.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics.Contracts; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using GasStation.Entities; +using GasStation.Repositories; +using GasStation.Repositories.Implementations; + +namespace GasStation.Forms; + +public partial class FormSupplier : Form +{ + + private readonly ISupplierRepository _supplierRepository; + + private int? _supplierlId; + + public int Id + { + set + { + try + { + var supplier = _supplierRepository.ReadSupplierById(value); + + if (supplier == null) + { + + throw new InvalidDataException(nameof(supplier)); + } + + textBoxBrand.Text = supplier.Brand; + + _supplierlId = value; + } + + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormSupplier(ISupplierRepository supplierRepository) + { + InitializeComponent(); + _supplierRepository = supplierRepository ?? throw new ArgumentNullException(nameof(supplierRepository)); + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxBrand.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_supplierlId.HasValue) + { + _supplierRepository.UpdateSupplier(CreateSupplier(_supplierlId.Value)); + } + else + { + _supplierRepository.CreateSupplier(CreateSupplier(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click (object sender, EventArgs e) => Close(); + + private Supplier CreateSupplier(int id) => Supplier.CreateEntity(id, textBoxBrand.Text); +} diff --git a/GasStation/GasStation/Forms/FormSupplier.resx b/GasStation/GasStation/Forms/FormSupplier.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/GasStation/GasStation/Forms/FormSupplier.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/GasStation/GasStation/Forms/FormSupplierFuel.Designer.cs b/GasStation/GasStation/Forms/FormSupplierFuel.Designer.cs new file mode 100644 index 0000000..34a4877 --- /dev/null +++ b/GasStation/GasStation/Forms/FormSupplierFuel.Designer.cs @@ -0,0 +1,172 @@ +namespace GasStation.Forms +{ + partial class FormSupplierFuel + { + /// + /// 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() + { + comboBoxSuppliers = new ComboBox(); + label1 = new Label(); + dateTimePickerData = new DateTimePicker(); + label2 = new Label(); + ButtonSave = new Button(); + ButtonCancel = new Button(); + groupBox = new GroupBox(); + dataGridView = new DataGridView(); + ColumnFuel = new DataGridViewComboBoxColumn(); + ColumnQuantity = new DataGridViewTextBoxColumn(); + groupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // comboBoxSuppliers + // + comboBoxSuppliers.FormattingEnabled = true; + comboBoxSuppliers.Location = new Point(119, 16); + comboBoxSuppliers.Name = "comboBoxSuppliers"; + comboBoxSuppliers.Size = new Size(209, 23); + comboBoxSuppliers.TabIndex = 0; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(13, 21); + label1.Name = "label1"; + label1.Size = new Size(76, 15); + label1.TabIndex = 1; + label1.Text = "Поставщик:"; + // + // dateTimePickerData + // + dateTimePickerData.Location = new Point(119, 60); + dateTimePickerData.Name = "dateTimePickerData"; + dateTimePickerData.Size = new Size(209, 23); + dateTimePickerData.TabIndex = 2; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(15, 63); + label2.Name = "label2"; + label2.Size = new Size(36, 15); + label2.TabIndex = 3; + label2.Text = "Дата:"; + // + // ButtonSave + // + ButtonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + ButtonSave.Location = new Point(13, 370); + ButtonSave.Name = "ButtonSave"; + ButtonSave.Size = new Size(117, 22); + ButtonSave.TabIndex = 5; + ButtonSave.Text = "Сохранить"; + ButtonSave.UseVisualStyleBackColor = true; + ButtonSave.Click += ButtonSave_Click; + // + // ButtonCancel + // + ButtonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + ButtonCancel.Location = new Point(210, 370); + ButtonCancel.Name = "ButtonCancel"; + ButtonCancel.Size = new Size(117, 22); + ButtonCancel.TabIndex = 6; + ButtonCancel.Text = "Отменить"; + ButtonCancel.UseVisualStyleBackColor = true; + ButtonCancel.Click += ButtonCancel_Click; + // + // groupBox + // + groupBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + groupBox.Controls.Add(dataGridView); + groupBox.Location = new Point(12, 89); + groupBox.Name = "groupBox"; + groupBox.Size = new Size(318, 272); + groupBox.TabIndex = 7; + groupBox.TabStop = false; + groupBox.Text = "Топливо"; + // + // dataGridView + // + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnFuel, ColumnQuantity }); + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(3, 19); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersVisible = false; + dataGridView.RowTemplate.Height = 25; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(312, 250); + dataGridView.TabIndex = 0; + // + // ColumnFuel + // + ColumnFuel.HeaderText = "Топливо"; + ColumnFuel.Name = "ColumnFuel"; + // + // ColumnQuantity + // + ColumnQuantity.HeaderText = "Количество"; + ColumnQuantity.Name = "ColumnQuantity"; + // + // FormSupplierFuel + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(342, 399); + Controls.Add(groupBox); + Controls.Add(ButtonCancel); + Controls.Add(ButtonSave); + Controls.Add(label2); + Controls.Add(dateTimePickerData); + Controls.Add(label1); + Controls.Add(comboBoxSuppliers); + Name = "FormSupplierFuel"; + StartPosition = FormStartPosition.CenterParent; + Text = "FormSupplierFuel"; + groupBox.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private ComboBox comboBoxSuppliers; + private Label label1; + private DateTimePicker dateTimePickerData; + private Label label2; + private Button ButtonSave; + private Button ButtonCancel; + private GroupBox groupBox; + private DataGridView dataGridView; + private DataGridViewComboBoxColumn ColumnFuel; + private DataGridViewTextBoxColumn ColumnQuantity; + } +} \ No newline at end of file diff --git a/GasStation/GasStation/Forms/FormSupplierFuel.cs b/GasStation/GasStation/Forms/FormSupplierFuel.cs new file mode 100644 index 0000000..d2f5a90 --- /dev/null +++ b/GasStation/GasStation/Forms/FormSupplierFuel.cs @@ -0,0 +1,74 @@ +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 GasStation.Entities; +using GasStation.Repositories; +using ProjectGasStation.Entities; + +namespace GasStation.Forms; + +public partial class FormSupplierFuel : Form +{ + private readonly ISuppliersFuelRepository _suppliersFuelRepository; + + public FormSupplierFuel( + ISuppliersFuelRepository suppliersFuelRepository, + ISupplierRepository supplierRepository, + IFuelRepository fuelRepository) + { + InitializeComponent(); + _suppliersFuelRepository = suppliersFuelRepository ?? throw new ArgumentNullException(nameof(suppliersFuelRepository)); + + comboBoxSuppliers.DataSource = supplierRepository.ReadSuppliers(); + comboBoxSuppliers.DisplayMember = "Name"; + comboBoxSuppliers.ValueMember = "Id"; + + ColumnFuel.DataSource = fuelRepository.ReadFuels(); + ColumnFuel.DisplayMember = "Type"; + ColumnFuel.ValueMember = "Id"; + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (comboBoxSuppliers.SelectedIndex < 0 || dataGridView.RowCount < 1) + { + throw new Exception("Имеются незаполненные поля"); + } + _suppliersFuelRepository.CreateSuppliersFuel(SuppliersFuel.CreateElement(0, + (int)comboBoxSuppliers.SelectedValue!, dateTimePickerData.Value, CreateListContractorFuelFuelFromDataGrid())); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private List CreateListContractorFuelFuelFromDataGrid() + { + var list = new List(); + foreach (DataGridViewRow row in dataGridView.Rows) + { + if (row.Cells["ColumnFuel"].Value == null || + row.Cells["ColumnQuantity"].Value == null) + { + continue; + } + list.Add(SuppliersFuelFuel.CreateSuppliersFuelFuel(0, + Convert.ToInt32(row.Cells["ColumnFuel"].Value), + Convert.ToInt32(row.Cells["ColumnQuantity"].Value))); + } + return list; + } +} diff --git a/GasStation/GasStation/Forms/FormSupplierFuel.resx b/GasStation/GasStation/Forms/FormSupplierFuel.resx new file mode 100644 index 0000000..a5f58c2 --- /dev/null +++ b/GasStation/GasStation/Forms/FormSupplierFuel.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + True + + + True + + \ No newline at end of file diff --git a/GasStation/GasStation/Forms/FormSupplierFuels.Designer.cs b/GasStation/GasStation/Forms/FormSupplierFuels.Designer.cs new file mode 100644 index 0000000..20e6d34 --- /dev/null +++ b/GasStation/GasStation/Forms/FormSupplierFuels.Designer.cs @@ -0,0 +1,113 @@ +namespace GasStation.Forms +{ + partial class FormSupplierFuels + { + /// + /// 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() + { + panel1 = new Panel(); + ButtonDel = new Button(); + ButtonAdd = new Button(); + dataGridViewData = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(ButtonDel); + panel1.Controls.Add(ButtonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(623, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(114, 413); + panel1.TabIndex = 0; + // + // ButtonDel + // + ButtonDel.BackgroundImage = Properties.Resources.Минус; + ButtonDel.BackgroundImageLayout = ImageLayout.Stretch; + ButtonDel.Location = new Point(22, 98); + ButtonDel.Name = "ButtonDel"; + ButtonDel.Size = new Size(80, 80); + ButtonDel.TabIndex = 1; + ButtonDel.UseVisualStyleBackColor = true; + ButtonDel.Click += ButtonDel_Click; + // + // ButtonAdd + // + ButtonAdd.BackgroundImage = Properties.Resources.Плюс; + ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonAdd.Location = new Point(22, 12); + ButtonAdd.Name = "ButtonAdd"; + ButtonAdd.Size = new Size(80, 80); + ButtonAdd.TabIndex = 0; + ButtonAdd.UseVisualStyleBackColor = true; + ButtonAdd.Click += ButtonAdd_Click; + // + // 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.RowTemplate.Height = 25; + dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewData.Size = new Size(623, 413); + dataGridViewData.TabIndex = 1; + // + // FormSupplierFuels + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(737, 413); + Controls.Add(dataGridViewData); + Controls.Add(panel1); + Name = "FormSupplierFuels"; + StartPosition = FormStartPosition.CenterParent; + Text = "Поставки"; + Load += FormSuppliers_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button ButtonDel; + private Button ButtonAdd; + private DataGridView dataGridViewData; + } +} \ No newline at end of file diff --git a/GasStation/GasStation/Forms/FormSupplierFuels.cs b/GasStation/GasStation/Forms/FormSupplierFuels.cs new file mode 100644 index 0000000..65993eb --- /dev/null +++ b/GasStation/GasStation/Forms/FormSupplierFuels.cs @@ -0,0 +1,90 @@ +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 GasStation.Repositories; +using Unity; + +namespace GasStation.Forms; + +public partial class FormSupplierFuels : Form +{ + private readonly IUnityContainer _container; + private readonly ISuppliersFuelRepository _suppliersFuelRepository; + + public FormSupplierFuels(IUnityContainer container, ISuppliersFuelRepository suppliersFuelRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _suppliersFuelRepository = suppliersFuelRepository ?? throw new ArgumentNullException(nameof(suppliersFuelRepository)); + } + + private void FormSuppliers_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 ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _suppliersFuelRepository.DeleteSuppliersFuel(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewData.DataSource = _suppliersFuelRepository.ReadSuppliersFuels(); + + 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/GasStation/GasStation/Forms/FormSupplierFuels.resx b/GasStation/GasStation/Forms/FormSupplierFuels.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/GasStation/GasStation/Forms/FormSupplierFuels.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/GasStation/GasStation/Forms/FormSuppliers.Designer.cs b/GasStation/GasStation/Forms/FormSuppliers.Designer.cs new file mode 100644 index 0000000..64aafdd --- /dev/null +++ b/GasStation/GasStation/Forms/FormSuppliers.Designer.cs @@ -0,0 +1,129 @@ +namespace GasStation.Forms +{ + partial class FormSuppliers + { + /// + /// 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.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormSuppliers)); + panel1 = new Panel(); + ButtonDel = new Button(); + ButtonUpd = new Button(); + ButtonAdd = new Button(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(ButtonDel); + panel1.Controls.Add(ButtonUpd); + panel1.Controls.Add(ButtonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(623, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(114, 413); + panel1.TabIndex = 0; + // + // ButtonDel + // + ButtonDel.BackgroundImage = Properties.Resources.Минус; + ButtonDel.BackgroundImageLayout = ImageLayout.Stretch; + ButtonDel.Location = new Point(19, 184); + ButtonDel.Name = "ButtonDel"; + ButtonDel.Size = new Size(80, 80); + ButtonDel.TabIndex = 2; + ButtonDel.UseVisualStyleBackColor = true; + ButtonDel.Click += ButtonDel_Click; + // + // ButtonUpd + // + ButtonUpd.BackgroundImage = (Image)resources.GetObject("ButtonUpd.BackgroundImage"); + ButtonUpd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonUpd.ForeColor = SystemColors.ControlText; + ButtonUpd.Location = new Point(19, 98); + ButtonUpd.Name = "ButtonUpd"; + ButtonUpd.Size = new Size(80, 80); + ButtonUpd.TabIndex = 1; + ButtonUpd.UseVisualStyleBackColor = true; + ButtonUpd.Click += ButtonUpd_Click; + // + // ButtonAdd + // + ButtonAdd.BackgroundImage = (Image)resources.GetObject("ButtonAdd.BackgroundImage"); + ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonAdd.Location = new Point(19, 12); + ButtonAdd.Name = "ButtonAdd"; + ButtonAdd.Size = new Size(80, 80); + ButtonAdd.TabIndex = 0; + ButtonAdd.UseVisualStyleBackColor = true; + ButtonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.RowTemplate.Height = 25; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(623, 413); + dataGridView.TabIndex = 1; + // + // FormSuppliers + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(737, 413); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormSuppliers"; + StartPosition = FormStartPosition.CenterParent; + Text = "Поставщики"; + Load += FormSuppliers_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button ButtonDel; + private Button ButtonAdd; + private DataGridView dataGridView; + private Button ButtonUpd; + } +} \ No newline at end of file diff --git a/GasStation/GasStation/Forms/FormSuppliers.cs b/GasStation/GasStation/Forms/FormSuppliers.cs new file mode 100644 index 0000000..c21201b --- /dev/null +++ b/GasStation/GasStation/Forms/FormSuppliers.cs @@ -0,0 +1,110 @@ +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 System.Xml.Linq; +using GasStation.Repositories; +using Unity; + +namespace GasStation.Forms; + +public partial class FormSuppliers : Form +{ + private readonly IUnityContainer _container; + private readonly ISupplierRepository _supplierRepository; + + public FormSuppliers(IUnityContainer container, ISupplierRepository supplierRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _supplierRepository = supplierRepository ?? throw new ArgumentNullException(nameof(supplierRepository)); + } + + private void FormSuppliers_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 ButtonUpd_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 ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _supplierRepository.DeleteSupplier(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _supplierRepository.ReadSuppliers(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + } +} diff --git a/GasStation/GasStation/Forms/FormSuppliers.resx b/GasStation/GasStation/Forms/FormSuppliers.resx new file mode 100644 index 0000000..a974b94 --- /dev/null +++ b/GasStation/GasStation/Forms/FormSuppliers.resx @@ -0,0 +1,716 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + oUIOarX/AceT4DvUQEgWAAAAAElFTkSuQmCC + + + + + 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 + K31V8e7Vof5St9VfHu1aH+UrfVXx7tWh/lK31V8e7Vof5St9VfHu1aH+UrfVXx7tWh/lK31V8e7Vof5S + t9VfHu1aH+UrfVXx7tWh/lK31V8e7Vof5St9VfHu1aH+UrfVXx7tWh/lK31V8e7Vof5St9VfGltd6e1X + PUw5a07SU0aPJ0kRjFnJAtfuq7lc0dl9dVUU71glpZ5IZAKZiA8ZKnHu1aH+UrfVXx7tWh/lK31V8e7V + of5St9VfHu1aH+UrfVXx7tWh/lK31V8e7Vof5St9VfHu1aH+UrfVXx7tWh/lK31V8e7Vof5St9VfHu1a + H+UrfVXx7tWh/lK31V8e7Vof5St9VfHu1aH+UrfVXx7tWh/lK31V8e7Vof5St9VfHu1aH+UrfVXx7tWh + /lK31V8e7Vof5St9VfDctOiUUlTXseoCmI/rjPuW6sniaHIqA01/+pqbMw/djFx9pxNNPVTy1FRK808r + FpJXO0zk9ZPeTwOOTaA0+hMhTtokf/XdubMj+nUdid4y/fB6GPNy703/AAmQzgbkqZ4yf30Df+3x/kJ+ + G87/AISn++3daq+NmoPpas/FPj0x2YnPYpxp2A0Wm8opuDRZfTofNsxgc1bunI7FA7xl72SQecc3LbTG + fRqSgb6bMKeQ+hrx/wDu8f5CfhvO/wCEp/vt3WqvjZqD6WrPxT48lO1XNBTKLtPNHEPS7BcKAoAAsALA + c1Qbzyem3eMt/vXHat/s5uUWgau0LnkKi7LSNKPTCRJ/7cKQVB8e5Dp4YM5zsu4X/g6f77YBDAEG4PA9 + zqr42ag+lqz8U+PaHojmGs8hgAvatWUjzQAyH7vOx2nY9rE4kmhiIDuqkjgTgEEAg3BFwe6pH2KhD23H + NVU8dXTTU8guk0bIw8zCxx0ElMz08m54HaJ/Sh2T3tV2mtfHvCpOyVH6pvxOCCCQeo+IFlUgFgL8LnHI + WHfN8/jQWlamg23I8H37Yy8BWmiTfFEVVG85F27nVXxs1B9LVn4p7+q7TWvj3hUnZKj9U34nBBBIPUe+ + 8jFAKvWclQRuo6CRgf2pSEH8r80jbMbN2A4LohUM6qTwBIF8Rh3240X9MXbpXYX2Bew9O7himspljS3R + RlVQ+e127pW2GVuwg8/KDl39l63zqECyyzioT0TgOf5k96UbR7OsnC7PhAEdS368Ex3B37uC9QwSSST3 + 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 + + + \ No newline at end of file diff --git a/GasStation/GasStation/GasStation.csproj b/GasStation/GasStation/GasStation.csproj index e1a0735..f2b439c 100644 --- a/GasStation/GasStation/GasStation.csproj +++ b/GasStation/GasStation/GasStation.csproj @@ -8,4 +8,33 @@ enable + + True + False + + + + True + False + + + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/GasStation/GasStation/Program.cs b/GasStation/GasStation/Program.cs index 3efb72f..e6e7fb9 100644 --- a/GasStation/GasStation/Program.cs +++ b/GasStation/GasStation/Program.cs @@ -1,3 +1,8 @@ +using GasStation.Repositories.Implementations; +using GasStation.Repositories; +using Unity.Lifetime; +using Unity; + namespace GasStation { internal static class Program @@ -11,7 +16,20 @@ namespace GasStation // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + Application.Run(CreateContainer().Resolve()); + } + + private static IUnityContainer CreateContainer() + { + var container = new UnityContainer(); + + container.RegisterType (); + container.RegisterType (); + container.RegisterType (); + container.RegisterType (); + container.RegisterType (); + + return container; } } } \ No newline at end of file diff --git a/GasStation/GasStation/Properties/Resources.Designer.cs b/GasStation/GasStation/Properties/Resources.Designer.cs new file mode 100644 index 0000000..f6c9267 --- /dev/null +++ b/GasStation/GasStation/Properties/Resources.Designer.cs @@ -0,0 +1,113 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace GasStation.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом StronglyTypedResourceBuilder + // с помощью такого средства, как ResGen или Visual Studio. + // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen + // с параметром /str или перестройте свой проект VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GasStation.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Заправка { + get { + object obj = ResourceManager.GetObject("Заправка", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Карандаш { + get { + object obj = ResourceManager.GetObject("Карандаш", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Минус { + get { + object obj = ResourceManager.GetObject("Минус", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Плюс { + get { + object obj = ResourceManager.GetObject("Плюс", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Плюсик { + get { + object obj = ResourceManager.GetObject("Плюсик", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/GasStation/GasStation/Properties/Resources.resx b/GasStation/GasStation/Properties/Resources.resx new file mode 100644 index 0000000..3cfc203 --- /dev/null +++ b/GasStation/GasStation/Properties/Resources.resx @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + ..\Resources\Плюсик.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Карандаш.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Заправка.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Минус.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Плюс.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/GasStation/GasStation/Repositories/ICashierRepository.cs b/GasStation/GasStation/Repositories/ICashierRepository.cs new file mode 100644 index 0000000..e858f5f --- /dev/null +++ b/GasStation/GasStation/Repositories/ICashierRepository.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using GasStation.Entities; + +namespace GasStation.Repositories; + +public interface ICashierRepository +{ + IEnumerable ReadCashiers(); + + Cashier ReadCashierById(int id); + + void CreateCashier(Cashier cashier); + + void UpdateCashier(Cashier cashier); + + void DeleteCashier(int id); +} diff --git a/GasStation/GasStation/Repositories/IFuelRepository.cs b/GasStation/GasStation/Repositories/IFuelRepository.cs new file mode 100644 index 0000000..5d80d21 --- /dev/null +++ b/GasStation/GasStation/Repositories/IFuelRepository.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using GasStation.Entities; + +namespace GasStation.Repositories; + +public interface IFuelRepository +{ + IEnumerable ReadFuels(); + + Fuel ReadFuelById(int id); + + void CreateFuel(Fuel fuel); + + void UpdateFuel(Fuel fuel); + + void DeleteFuel(int id); +} diff --git a/GasStation/GasStation/Repositories/IFuelSalesRepository.cs b/GasStation/GasStation/Repositories/IFuelSalesRepository.cs new file mode 100644 index 0000000..686c6d4 --- /dev/null +++ b/GasStation/GasStation/Repositories/IFuelSalesRepository.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using GasStation.Entities; + +namespace GasStation.Repositories; + +public interface IFuelSalesRepository +{ + IEnumerable ReadFuelSale(DateTime? dateFrom = null, DateTime? dateTo = null, int? gasStationId = null, + int? fuelId = null, int ? cashierId = null); + + void CreateFuelSale(FuelSale fuelSale); + + void DeleteFuelSale(int id); +} diff --git a/GasStation/GasStation/Repositories/ISupplierRepository.cs b/GasStation/GasStation/Repositories/ISupplierRepository.cs new file mode 100644 index 0000000..a1acea5 --- /dev/null +++ b/GasStation/GasStation/Repositories/ISupplierRepository.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using GasStation.Entities; + +namespace GasStation.Repositories; + +public interface ISupplierRepository +{ + IEnumerable ReadSuppliers(); + + Supplier ReadSupplierById(int id); + + void CreateSupplier(Supplier supplier); + + void UpdateSupplier(Supplier supplier); + + void DeleteSupplier(int id); +} diff --git a/GasStation/GasStation/Repositories/ISuppliersFuelRepository.cs b/GasStation/GasStation/Repositories/ISuppliersFuelRepository.cs new file mode 100644 index 0000000..b457bbc --- /dev/null +++ b/GasStation/GasStation/Repositories/ISuppliersFuelRepository.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using GasStation.Entities; + +namespace GasStation.Repositories; + +public interface ISuppliersFuelRepository +{ + IEnumerable ReadSuppliersFuels(DateTime? dateFrom = null, DateTime? dateTo = null, int? suppliersId = null, + int? fuelId = null); + + void CreateSuppliersFuel(SuppliersFuel suppliersFuel); + + void DeleteSuppliersFuel(int id); +} diff --git a/GasStation/GasStation/Repositories/Implementations/CashierRepository.cs b/GasStation/GasStation/Repositories/Implementations/CashierRepository.cs new file mode 100644 index 0000000..d264b5e --- /dev/null +++ b/GasStation/GasStation/Repositories/Implementations/CashierRepository.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using GasStation.Entities; +using GasStation.Entities.Enums; + +namespace GasStation.Repositories.Implementations; + +public class CashierRepository : ICashierRepository +{ + public void CreateCashier(Cashier cashier) + { + } + + public void DeleteCashier(int id) + { + } + + public Cashier ReadCashierById(int id) + { + return Cashier.CreateEntity(0, string.Empty, string.Empty, CashierPost.None); + } + + public IEnumerable ReadCashiers() + { + return []; + } + + public void UpdateCashier(Cashier cashier) + { + } +} diff --git a/GasStation/GasStation/Repositories/Implementations/FuelRepository.cs b/GasStation/GasStation/Repositories/Implementations/FuelRepository.cs new file mode 100644 index 0000000..ac9ff6e --- /dev/null +++ b/GasStation/GasStation/Repositories/Implementations/FuelRepository.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using GasStation.Entities; +using GasStation.Entities.Enums; + +namespace GasStation.Repositories.Implementations; + +public class FuelRepository : IFuelRepository +{ + public void CreateFuel(Fuel fuel) + { + } + + public void DeleteFuel(int id) + { + } + + public Fuel ReadFuelById(int id) + { + return Fuel.CreateEntity(0, 0, FuelType.Fuel_diesel); + } + + public IEnumerable ReadFuels() + { + return []; + } + + public void UpdateFuel(Fuel fuel) + { + } +} diff --git a/GasStation/GasStation/Repositories/Implementations/FuelSalesRepository.cs b/GasStation/GasStation/Repositories/Implementations/FuelSalesRepository.cs new file mode 100644 index 0000000..c031429 --- /dev/null +++ b/GasStation/GasStation/Repositories/Implementations/FuelSalesRepository.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using GasStation.Entities; + +namespace GasStation.Repositories.Implementations; + +public class FuelSalesRepository : IFuelSalesRepository +{ + public void CreateFuelSale(FuelSale fuelSale) + { + } + + public void DeleteFuelSale(int id) + { + } + + public IEnumerable ReadFuelSale(DateTime? dateFrom = null, DateTime? dateTo = null, int? gasStationId = null, int? fuelId = null, int? cashierId = null) + { + return []; + } +} diff --git a/GasStation/GasStation/Repositories/Implementations/SupplierRepository.cs b/GasStation/GasStation/Repositories/Implementations/SupplierRepository.cs new file mode 100644 index 0000000..9d7b63f --- /dev/null +++ b/GasStation/GasStation/Repositories/Implementations/SupplierRepository.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.Contracts; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using GasStation.Entities; + +namespace GasStation.Repositories.Implementations; + +public class SupplierRepository : ISupplierRepository +{ + public void CreateSupplier(Supplier supplier) + { + } + + public void DeleteSupplier(int id) + { + } + + public Supplier ReadSupplierById(int id) + { + return Supplier.CreateEntity(0, string.Empty); + } + + public IEnumerable ReadSuppliers() + { + return []; + } + + public void UpdateSupplier(Supplier supplier) + { + } +} diff --git a/GasStation/GasStation/Repositories/Implementations/SuppliersFuelRepository.cs b/GasStation/GasStation/Repositories/Implementations/SuppliersFuelRepository.cs new file mode 100644 index 0000000..a198f70 --- /dev/null +++ b/GasStation/GasStation/Repositories/Implementations/SuppliersFuelRepository.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using GasStation.Entities; + +namespace GasStation.Repositories.Implementations; + +public class SuppliersFuelRepository : ISuppliersFuelRepository +{ + public void CreateSuppliersFuel(SuppliersFuel suppliersFuel) + { + } + + public void DeleteSuppliersFuel(int id) + { + } + + public IEnumerable ReadSuppliersFuels(DateTime? dateFrom = null, DateTime? dateTo = null, int? suppliersId = null, int? fuelId = null) + { + return []; + } +} diff --git a/GasStation/GasStation/Resources/Заправка.jpg b/GasStation/GasStation/Resources/Заправка.jpg new file mode 100644 index 0000000..3cdfe3e Binary files /dev/null and b/GasStation/GasStation/Resources/Заправка.jpg differ diff --git a/GasStation/GasStation/Resources/Карандаш.jpg b/GasStation/GasStation/Resources/Карандаш.jpg new file mode 100644 index 0000000..9cd6de0 Binary files /dev/null and b/GasStation/GasStation/Resources/Карандаш.jpg differ diff --git a/GasStation/GasStation/Resources/Минус.jpg b/GasStation/GasStation/Resources/Минус.jpg new file mode 100644 index 0000000..3630160 Binary files /dev/null and b/GasStation/GasStation/Resources/Минус.jpg differ diff --git a/GasStation/GasStation/Resources/Плюс.jpg b/GasStation/GasStation/Resources/Плюс.jpg new file mode 100644 index 0000000..a3899f3 Binary files /dev/null and b/GasStation/GasStation/Resources/Плюс.jpg differ diff --git a/GasStation/GasStation/Resources/Плюсик.jpg b/GasStation/GasStation/Resources/Плюсик.jpg new file mode 100644 index 0000000..126edfb Binary files /dev/null and b/GasStation/GasStation/Resources/Плюсик.jpg differ