diff --git a/ProjectTransportation/ProjectTransportation/Entities/Enums/BrokenElements.cs b/ProjectTransportation/ProjectTransportation/Entities/Enums/BrokenElements.cs new file mode 100644 index 0000000..daf599a --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Entities/Enums/BrokenElements.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectTransportation.Entities.Enums; + +[Flags] +public enum BrokenElements +{ + None = 0, + + Wheels = 1, + + Headlights = 2, + + Engine = 4, + + Transmission = 8 +} + diff --git a/ProjectTransportation/ProjectTransportation/Entities/Enums/Bus.cs b/ProjectTransportation/ProjectTransportation/Entities/Enums/Bus.cs new file mode 100644 index 0000000..b53e7f3 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Entities/Enums/Bus.cs @@ -0,0 +1,20 @@ +namespace ProjectTransportation.Entities.Enums; + +public class Bus +{ + public int Id { get; private set; } + + public string LicensePlate { get; private set; } = string.Empty; + + public string Model { get; private set; } = string.Empty; + + public static Bus CreateEntity(int id, string licensePlate, string model) + { + return new Bus + { + Id = id, + LicensePlate = licensePlate, + Model = model + }; + } +} diff --git a/ProjectTransportation/ProjectTransportation/Entities/Enums/Employee.cs b/ProjectTransportation/ProjectTransportation/Entities/Enums/Employee.cs new file mode 100644 index 0000000..d9bbe53 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Entities/Enums/Employee.cs @@ -0,0 +1,23 @@ +namespace ProjectTransportation.Entities.Enums; + +public class Employee +{ + public int Id { get; private set; } + + public string FirstName { get; private set; } = string.Empty; + + public string LastName { get; private set; } = string.Empty; + + public EmployeePost Post { get; private set; } + + public static Employee CreateEntity(int id, string first, string last, EmployeePost post) + { + return new Employee + { + Id = id, + FirstName = first ?? string.Empty, + LastName = last ?? string.Empty, + Post = post + }; + } +} \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Entities/Enums/EmployeePost.cs b/ProjectTransportation/ProjectTransportation/Entities/Enums/EmployeePost.cs new file mode 100644 index 0000000..4db0c93 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Entities/Enums/EmployeePost.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectTransportation.Entities.Enums; + +public enum EmployeePost +{ + None = 0, + + Administration = 1, + + Engineer = 2, + + Driver = 3, + + Conductor = 4 +} \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Entities/Enums/GoToService.cs b/ProjectTransportation/ProjectTransportation/Entities/Enums/GoToService.cs new file mode 100644 index 0000000..318a46a --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Entities/Enums/GoToService.cs @@ -0,0 +1,26 @@ +namespace ProjectTransportation.Entities.Enums; +public class GoToService +{ + public int Id { get; private set; } + + public DateTime Date { get; private set; } + + public BrokenElements BrokenElements { get; private set; } + + public int Price { get; private set; } + + public int BusId { get; private set; } + + public static GoToService CreateOperation(int id, BrokenElements brokenElements, int price, int busId) + { + return new GoToService + { + Id = id, + Date = DateTime.Now, + BrokenElements = brokenElements, + Price = price, + BusId = busId + }; + } +} + diff --git a/ProjectTransportation/ProjectTransportation/Entities/RouteList.cs b/ProjectTransportation/ProjectTransportation/Entities/RouteList.cs new file mode 100644 index 0000000..c776d7a --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Entities/RouteList.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectTransportation.Entities; +public class RouteList +{ + public int Id { get; private set; } + + public TimeOnly Start { get; private set; } + + public TimeOnly Finish { get; private set; } + + public static RouteList CreateEntity(int id, TimeOnly start, TimeOnly finish) + { + return new RouteList + { + Id = id, + Start = start, + Finish = finish + }; + } +} diff --git a/ProjectTransportation/ProjectTransportation/Entities/StartingShift.cs b/ProjectTransportation/ProjectTransportation/Entities/StartingShift.cs new file mode 100644 index 0000000..20c1c15 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Entities/StartingShift.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectTransportation.Entities; +public class StartingShift +{ + public int Id { get; private set; } + + public DateTime Date { get; private set; } + + public int RouteListId { get; private set; } + + public int BusId { get; private set; } + + public IEnumerable StartingShiftEmployees { get; private set; } = []; + + public static StartingShift CreateOperation(int id, int routeListId, int busId, + IEnumerable startingShiftEmployees) + { + return new StartingShift() + { + Id = id, + Date = DateTime.Now, + RouteListId = routeListId, + BusId = busId, + StartingShiftEmployees = startingShiftEmployees + }; + } +} diff --git a/ProjectTransportation/ProjectTransportation/Entities/StartingShiftEmployee.cs b/ProjectTransportation/ProjectTransportation/Entities/StartingShiftEmployee.cs new file mode 100644 index 0000000..7731c31 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Entities/StartingShiftEmployee.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectTransportation.Entities; +public class StartingShiftEmployee +{ + public int StartingShiftId { get; private set; } + + public int EmployeeId { get; private set; } + + public int WorkHours { get; private set; } + + public static StartingShiftEmployee CreateElement(int startingShiftId, int employeeId, int workHours) + { + return new StartingShiftEmployee + { + StartingShiftId = startingShiftId, + EmployeeId = employeeId, + WorkHours = workHours + }; + } +} diff --git a/ProjectTransportation/ProjectTransportation/Form1.Designer.cs b/ProjectTransportation/ProjectTransportation/Form1.Designer.cs deleted file mode 100644 index ae435b8..0000000 --- a/ProjectTransportation/ProjectTransportation/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace ProjectTransportation -{ - 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 - } -} diff --git a/ProjectTransportation/ProjectTransportation/Form1.cs b/ProjectTransportation/ProjectTransportation/Form1.cs deleted file mode 100644 index 30a1bf2..0000000 --- a/ProjectTransportation/ProjectTransportation/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ProjectTransportation -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} diff --git a/ProjectTransportation/ProjectTransportation/FormTransportation.Designer.cs b/ProjectTransportation/ProjectTransportation/FormTransportation.Designer.cs new file mode 100644 index 0000000..3ec8324 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/FormTransportation.Designer.cs @@ -0,0 +1,144 @@ +using static System.Net.Mime.MediaTypeNames; +using System.Windows.Forms; +using System.Xml.Linq; + +namespace ProjectTransportation +{ + partial class FormTransportation + { + /// + /// 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(); + EmployeesToolStripMenuItem = new ToolStripMenuItem(); + BusesToolStripMenuItem = new ToolStripMenuItem(); + RouteListsToolStripMenuItem = new ToolStripMenuItem(); + операцииToolStripMenuItem = new ToolStripMenuItem(); + StartingShiftsToolStripMenuItem = new ToolStripMenuItem(); + GoToServicesToolStripMenuItem = new ToolStripMenuItem(); + отчётыToolStripMenuItem = new ToolStripMenuItem(); + menuStrip1.SuspendLayout(); + SuspendLayout(); + // + // menuStrip1 + // + menuStrip1.ImageScalingSize = new Size(28, 28); + menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, операцииToolStripMenuItem, отчётыToolStripMenuItem }); + menuStrip1.Location = new Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Padding = new Padding(4, 1, 0, 1); + menuStrip1.Size = new Size(739, 26); + menuStrip1.TabIndex = 0; + menuStrip1.Text = "menuStrip1"; + // + // справочникиToolStripMenuItem + // + справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { EmployeesToolStripMenuItem, BusesToolStripMenuItem, RouteListsToolStripMenuItem }); + справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; + справочникиToolStripMenuItem.Size = new Size(117, 24); + справочникиToolStripMenuItem.Text = "Справочники"; + // + // EmployeesToolStripMenuItem + // + EmployeesToolStripMenuItem.Name = "EmployeesToolStripMenuItem"; + EmployeesToolStripMenuItem.Size = new Size(167, 26); + EmployeesToolStripMenuItem.Text = "Работники"; + EmployeesToolStripMenuItem.Click += EmployeesToolStripMenuItem_Click; + // + // BusesToolStripMenuItem + // + BusesToolStripMenuItem.Name = "BusesToolStripMenuItem"; + BusesToolStripMenuItem.Size = new Size(167, 26); + BusesToolStripMenuItem.Text = "Автобусы"; + BusesToolStripMenuItem.Click += BusesToolStripMenuItem_Click; + // + // RouteListsToolStripMenuItem + // + RouteListsToolStripMenuItem.Name = "RouteListsToolStripMenuItem"; + RouteListsToolStripMenuItem.Size = new Size(167, 26); + RouteListsToolStripMenuItem.Text = "Маршруты"; + RouteListsToolStripMenuItem.Click += RouteListsToolStripMenuItem_Click; + // + // операцииToolStripMenuItem + // + операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { StartingShiftsToolStripMenuItem, GoToServicesToolStripMenuItem }); + операцииToolStripMenuItem.Name = "операцииToolStripMenuItem"; + операцииToolStripMenuItem.Size = new Size(95, 24); + операцииToolStripMenuItem.Text = "Операции"; + // + // StartingShiftsToolStripMenuItem + // + StartingShiftsToolStripMenuItem.Name = "StartingShiftsToolStripMenuItem"; + StartingShiftsToolStripMenuItem.Size = new Size(224, 26); + StartingShiftsToolStripMenuItem.Text = "Начало смены"; + StartingShiftsToolStripMenuItem.Click += StartingShiftsToolStripMenuItem_Click; + // + // GoToServicesToolStripMenuItem + // + GoToServicesToolStripMenuItem.Name = "GoToServicesToolStripMenuItem"; + GoToServicesToolStripMenuItem.Size = new Size(224, 26); + GoToServicesToolStripMenuItem.Text = "Тех. обслуживание"; + GoToServicesToolStripMenuItem.Click += GoToServicesToolStripMenuItem_Click; + // + // отчётыToolStripMenuItem + // + отчётыToolStripMenuItem.Name = "отчётыToolStripMenuItem"; + отчётыToolStripMenuItem.Size = new Size(73, 24); + отчётыToolStripMenuItem.Text = "Отчёты"; + // + // FormTransportation + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + BackgroundImage = Properties.Resources._1; + BackgroundImageLayout = ImageLayout.Stretch; + ClientSize = new Size(739, 424); + Controls.Add(menuStrip1); + MainMenuStrip = menuStrip1; + Margin = new Padding(2, 2, 2, 2); + Name = "FormTransportation"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Пассажирские перевозки"; + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private MenuStrip menuStrip1; + private ToolStripMenuItem справочникиToolStripMenuItem; + private ToolStripMenuItem EmployeesToolStripMenuItem; + private ToolStripMenuItem BusesToolStripMenuItem; + private ToolStripMenuItem RouteListsToolStripMenuItem; + private ToolStripMenuItem операцииToolStripMenuItem; + private ToolStripMenuItem отчётыToolStripMenuItem; + private ToolStripMenuItem StartingShiftsToolStripMenuItem; + private ToolStripMenuItem GoToServicesToolStripMenuItem; + } +} diff --git a/ProjectTransportation/ProjectTransportation/FormTransportation.cs b/ProjectTransportation/ProjectTransportation/FormTransportation.cs new file mode 100644 index 0000000..13e56bf --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/FormTransportation.cs @@ -0,0 +1,76 @@ +using ProjectTransportation.Forms; +using Unity; + +namespace ProjectTransportation +{ + public partial class FormTransportation : Form + { + private readonly IUnityContainer _container; + + public FormTransportation(IUnityContainer container) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + } + + private void EmployeesToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void BusesToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void RouteListsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void StartingShiftsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void GoToServicesToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } +} +} diff --git a/ProjectTransportation/ProjectTransportation/FormTransportation.resx b/ProjectTransportation/ProjectTransportation/FormTransportation.resx new file mode 100644 index 0000000..a0623c8 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/FormTransportation.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/ProjectTransportation/ProjectTransportation/Forms/FormBus.Designer.cs b/ProjectTransportation/ProjectTransportation/Forms/FormBus.Designer.cs new file mode 100644 index 0000000..0533605 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormBus.Designer.cs @@ -0,0 +1,133 @@ +using static System.Net.Mime.MediaTypeNames; +using System.Windows.Forms; +using System.Xml.Linq; + +namespace ProjectTransportation.Forms +{ + partial class FormBus + { + /// + /// 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() + { + labelLicensePlate = new Label(); + textBoxLicensePlate = new TextBox(); + labelBusTypeName = new Label(); + buttonSave = new Button(); + buttonCancel = new Button(); + textBoxModel = new TextBox(); + SuspendLayout(); + // + // labelLicensePlate + // + labelLicensePlate.AutoSize = true; + labelLicensePlate.Location = new Point(18, 23); + labelLicensePlate.Margin = new Padding(2, 0, 2, 0); + labelLicensePlate.Name = "labelLicensePlate"; + labelLicensePlate.Size = new Size(78, 20); + labelLicensePlate.TabIndex = 0; + labelLicensePlate.Text = "Госномер"; + // + // textBoxLicensePlate + // + textBoxLicensePlate.Location = new Point(154, 21); + textBoxLicensePlate.Margin = new Padding(2, 2, 2, 2); + textBoxLicensePlate.MaxLength = 10; + textBoxLicensePlate.Name = "textBoxLicensePlate"; + textBoxLicensePlate.Size = new Size(161, 27); + textBoxLicensePlate.TabIndex = 1; + // + // labelBusTypeName + // + labelBusTypeName.AutoSize = true; + labelBusTypeName.Location = new Point(18, 66); + labelBusTypeName.Margin = new Padding(2, 0, 2, 0); + labelBusTypeName.Name = "labelBusTypeName"; + labelBusTypeName.Size = new Size(129, 20); + labelBusTypeName.TabIndex = 2; + labelBusTypeName.Text = "Модель автобуса"; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(48, 152); + buttonSave.Margin = new Padding(2, 2, 2, 2); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(117, 33); + buttonSave.TabIndex = 6; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(266, 152); + buttonCancel.Margin = new Padding(2, 2, 2, 2); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(120, 33); + buttonCancel.TabIndex = 7; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // textBoxModel + // + textBoxModel.Location = new Point(154, 64); + textBoxModel.Margin = new Padding(2, 2, 2, 2); + textBoxModel.MaxLength = 10; + textBoxModel.Name = "textBoxModel"; + textBoxModel.Size = new Size(161, 27); + textBoxModel.TabIndex = 8; + // + // FormBus + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(444, 194); + Controls.Add(textBoxModel); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(labelBusTypeName); + Controls.Add(textBoxLicensePlate); + Controls.Add(labelLicensePlate); + Margin = new Padding(2, 2, 2, 2); + Name = "FormBus"; + StartPosition = FormStartPosition.CenterParent; + Text = "Автобус"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label labelLicensePlate; + private TextBox textBoxLicensePlate; + private Label labelBusTypeName; + private Button buttonSave; + private Button buttonCancel; + private TextBox textBoxModel; + } +} \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormBus.cs b/ProjectTransportation/ProjectTransportation/Forms/FormBus.cs new file mode 100644 index 0000000..84a83ea --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormBus.cs @@ -0,0 +1,76 @@ +using ProjectTransportation.Entities; +using ProjectTransportation.Entities.Enums; +using ProjectTransportation.Repositories; +using ProjectTransportation.Entities.Enums; +using ProjectTransportation.Repositories; + +namespace ProjectTransportation.Forms +{ + public partial class FormBus : Form + { + private readonly IBusRepository _busRepository; + + private int? _busId; + + public int Id + { + set + { + try + { + var bus = _busRepository.ReadBusById(value); + if (bus == null) + { + throw new InvalidDataException(nameof(bus)); + } + + textBoxLicensePlate.Text = bus.LicensePlate; + textBoxModel.Text = bus.Model; + _busId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormBus(IBusRepository busRepository) + { + InitializeComponent(); + _busRepository = busRepository ?? throw new ArgumentNullException(nameof(busRepository)); + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxLicensePlate.Text) || string.IsNullOrWhiteSpace(textBoxModel.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + + if (_busId.HasValue) + { + _busRepository.UpdateBus(CreateBus(_busId.Value)); + } + + else + { + _busRepository.CreateBus(CreateBus(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private Bus CreateBus(int id) => Bus.CreateEntity(id, textBoxLicensePlate.Text, textBoxModel.Text); + } +} + diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormBus.resx b/ProjectTransportation/ProjectTransportation/Forms/FormBus.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormBus.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/ProjectTransportation/ProjectTransportation/Forms/FormBuses.Designer.cs b/ProjectTransportation/ProjectTransportation/Forms/FormBuses.Designer.cs new file mode 100644 index 0000000..c814c3c --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormBuses.Designer.cs @@ -0,0 +1,138 @@ +using static System.Net.Mime.MediaTypeNames; +using System.Windows.Forms; +using System.Xml.Linq; + +namespace ProjectTransportation.Forms +{ + partial class FormBuses + { + /// + /// 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(FormBuses)); + panelButtons = new Panel(); + buttonDelete = new Button(); + buttonUpdate = new Button(); + buttonAdd = new Button(); + dataGridViewData = new DataGridView(); + panelButtons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit(); + SuspendLayout(); + // + // panelButtons + // + panelButtons.Controls.Add(buttonDelete); + panelButtons.Controls.Add(buttonUpdate); + panelButtons.Controls.Add(buttonAdd); + panelButtons.Dock = DockStyle.Right; + panelButtons.Location = new Point(563, 0); + panelButtons.Margin = new Padding(2, 2, 2, 2); + panelButtons.Name = "panelButtons"; + panelButtons.Size = new Size(131, 321); + panelButtons.TabIndex = 0; + // + // buttonDelete + // + buttonDelete.BackgroundImage = Properties.Resources.minus; + buttonDelete.BackgroundImageLayout = ImageLayout.Stretch; + buttonDelete.Location = new Point(33, 168); + buttonDelete.Margin = new Padding(2, 2, 2, 2); + buttonDelete.Name = "buttonDelete"; + buttonDelete.Size = new Size(67, 67); + buttonDelete.TabIndex = 2; + buttonDelete.UseVisualStyleBackColor = true; + buttonDelete.Click += ButtonDelete_Click; + // + // buttonUpdate + // + buttonUpdate.BackgroundImage = Properties.Resources.i; + buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpdate.Location = new Point(33, 97); + buttonUpdate.Margin = new Padding(2, 2, 2, 2); + buttonUpdate.Name = "buttonUpdate"; + buttonUpdate.Size = new Size(67, 67); + buttonUpdate.TabIndex = 1; + buttonUpdate.UseVisualStyleBackColor = true; + buttonUpdate.Click += ButtonUpdate_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = (System.Drawing.Image)resources.GetObject("buttonAdd.BackgroundImage"); + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(33, 26); + buttonAdd.Margin = new Padding(2, 2, 2, 2); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(67, 67); + 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.Margin = new Padding(2, 2, 2, 2); + dataGridViewData.MultiSelect = false; + dataGridViewData.Name = "dataGridViewData"; + dataGridViewData.ReadOnly = true; + dataGridViewData.RowHeadersVisible = false; + dataGridViewData.RowHeadersWidth = 72; + dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewData.Size = new Size(563, 321); + dataGridViewData.TabIndex = 1; + // + // FormBuses + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(694, 321); + Controls.Add(dataGridViewData); + Controls.Add(panelButtons); + Margin = new Padding(2, 2, 2, 2); + Name = "FormBuses"; + StartPosition = FormStartPosition.CenterParent; + Text = "Автобусы"; + Load += FormBuses_Load; + panelButtons.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panelButtons; + private Button buttonDelete; + private Button buttonUpdate; + private Button buttonAdd; + private DataGridView dataGridViewData; + } +} \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormBuses.cs b/ProjectTransportation/ProjectTransportation/Forms/FormBuses.cs new file mode 100644 index 0000000..4478d29 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormBuses.cs @@ -0,0 +1,104 @@ +using ProjectTransportation.Repositories; +using ProjectTransportation.Forms; +using ProjectTransportation.Repositories; +using Unity; + +namespace ProjectTransportation.Forms +{ + public partial class FormBuses : Form + { + private readonly IUnityContainer _container; + + private readonly IBusRepository _busRepository; + + public FormBuses(IUnityContainer container, IBusRepository busRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _busRepository = busRepository ?? throw new ArgumentNullException(nameof(busRepository)); + } + + private void FormBuses_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonUpdate_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonDelete_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _busRepository.DeleteBus(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewData.DataSource = _busRepository.ReadBuses(); + + 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/ProjectTransportation/ProjectTransportation/Forms/FormBuses.resx b/ProjectTransportation/ProjectTransportation/Forms/FormBuses.resx new file mode 100644 index 0000000..59ae37e --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormBuses.resx @@ -0,0 +1,316 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + /9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsN + DhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQU + FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAEOAQ4DASIAAhEBAxEB/8QA + HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh + MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVW + V1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG + x8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQF + BgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV + YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq + 8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo + AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopu7 + 2pPMFAD6KryX0UPMjrGvq7AfzrC1D4keF9JZlvdf021K9fNukXH5mpcox3ZnKpCGspJHS0VwEvx8+HcL + YfxnogP/AF+xn+tS2/xy+H12wEXjLRXPoL2P/Gs/bU/5l95z/XcLe3tY/ejuqKxNN8baFrH/AB46vY3Y + 9YbhG/ka1o7hZFyhDDsQeK1UlLVHTGcZq8XcloqPzOcYp6tmmWLRRRQAUUUUAFFFFABRRRQAUUUUAFFF + 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 + iigAooooAKKKKAP/2Q== + + + \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormEmployee.Designer.cs b/ProjectTransportation/ProjectTransportation/Forms/FormEmployee.Designer.cs new file mode 100644 index 0000000..b0a44bc --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormEmployee.Designer.cs @@ -0,0 +1,158 @@ +using static System.Net.Mime.MediaTypeNames; +using System.Windows.Forms; +using System.Xml.Linq; + +namespace ProjectTransportation.Forms +{ + partial class FormEmployee + { + /// + /// 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(); + buttonCancel = new Button(); + buttonSave = new Button(); + textBoxLastName = new TextBox(); + labelLastName = new Label(); + textBoxFirstName = new TextBox(); + labelFirstName = new Label(); + labelPost = new Label(); + SuspendLayout(); + // + // comboBoxPost + // + comboBoxPost.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxPost.FormattingEnabled = true; + comboBoxPost.Location = new Point(155, 111); + comboBoxPost.Margin = new Padding(2, 2, 2, 2); + comboBoxPost.Name = "comboBoxPost"; + comboBoxPost.Size = new Size(161, 28); + comboBoxPost.TabIndex = 0; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(214, 163); + buttonCancel.Margin = new Padding(2, 2, 2, 2); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(90, 33); + buttonCancel.TabIndex = 14; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(53, 163); + buttonSave.Margin = new Padding(2, 2, 2, 2); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(99, 33); + buttonSave.TabIndex = 13; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // textBoxLastName + // + textBoxLastName.Location = new Point(155, 63); + textBoxLastName.Margin = new Padding(2, 2, 2, 2); + textBoxLastName.Name = "textBoxLastName"; + textBoxLastName.Size = new Size(161, 27); + textBoxLastName.TabIndex = 11; + // + // labelLastName + // + labelLastName.AutoSize = true; + labelLastName.Location = new Point(19, 65); + labelLastName.Margin = new Padding(2, 0, 2, 0); + labelLastName.Name = "labelLastName"; + labelLastName.Size = new Size(73, 20); + labelLastName.TabIndex = 10; + labelLastName.Text = "Фамилия"; + // + // textBoxFirstName + // + textBoxFirstName.Location = new Point(155, 19); + textBoxFirstName.Margin = new Padding(2, 2, 2, 2); + textBoxFirstName.MaxLength = 10; + textBoxFirstName.Name = "textBoxFirstName"; + textBoxFirstName.Size = new Size(161, 27); + textBoxFirstName.TabIndex = 9; + // + // labelFirstName + // + labelFirstName.AutoSize = true; + labelFirstName.Location = new Point(19, 21); + labelFirstName.Margin = new Padding(2, 0, 2, 0); + labelFirstName.Name = "labelFirstName"; + labelFirstName.Size = new Size(39, 20); + labelFirstName.TabIndex = 8; + labelFirstName.Text = "Имя"; + // + // labelPost + // + labelPost.AutoSize = true; + labelPost.Location = new Point(19, 113); + labelPost.Margin = new Padding(2, 0, 2, 0); + labelPost.Name = "labelPost"; + labelPost.Size = new Size(86, 20); + labelPost.TabIndex = 15; + labelPost.Text = "Должность"; + // + // FormEmployee + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(353, 211); + Controls.Add(labelPost); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(textBoxLastName); + Controls.Add(labelLastName); + Controls.Add(textBoxFirstName); + Controls.Add(labelFirstName); + Controls.Add(comboBoxPost); + Margin = new Padding(2, 2, 2, 2); + Name = "FormEmployee"; + StartPosition = FormStartPosition.CenterParent; + Text = "FormEmployee"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private ComboBox comboBoxPost; + private Button buttonCancel; + private Button buttonSave; + private TextBox textBoxLastName; + private Label labelLastName; + private TextBox textBoxFirstName; + private Label labelFirstName; + private Label labelPost; + } +} \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormEmployee.cs b/ProjectTransportation/ProjectTransportation/Forms/FormEmployee.cs new file mode 100644 index 0000000..f0d0062 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormEmployee.cs @@ -0,0 +1,79 @@ +using ProjectTransportation.Entities; +using ProjectTransportation.Entities.Enums; +using ProjectTransportation.Repositories; +using ProjectTransportation.Entities.Enums; +using ProjectTransportation.Repositories; + +namespace ProjectTransportation.Forms +{ + public partial class FormEmployee : Form + { + private readonly IEmployeeRepository _employeeRepository; + + private int? _employeeId; + + public int Id + { + set + { + try + { + var employee = _employeeRepository.ReadEmployeeById(value); + + if (employee == null) + { + throw new InvalidDataException(nameof(employee)); + } + + textBoxFirstName.Text = employee.FirstName; + textBoxLastName.Text = employee.LastName; + comboBoxPost.SelectedItem = employee.Post; + _employeeId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormEmployee(IEmployeeRepository employeeRepository) + { + InitializeComponent(); + _employeeRepository = employeeRepository ?? throw new ArgumentNullException(nameof(employeeRepository)); + comboBoxPost.DataSource = Enum.GetValues(typeof(EmployeePost)); + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxFirstName.Text) || string.IsNullOrWhiteSpace(textBoxLastName.Text) + || comboBoxPost.SelectedIndex < 1) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_employeeId.HasValue) + { + _employeeRepository.UpdateEmployee(CreateEmployee(_employeeId.Value)); + } + else + { + _employeeRepository.CreateEmployee(CreateEmployee(0)); + } + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private Employee CreateEmployee(int id) => Employee.CreateEntity(id, textBoxFirstName.Text, + textBoxLastName.Text, (EmployeePost)comboBoxPost.SelectedItem!); + } +} diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormEmployee.resx b/ProjectTransportation/ProjectTransportation/Forms/FormEmployee.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormEmployee.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/ProjectTransportation/ProjectTransportation/Forms/FormEmployees.Designer.cs b/ProjectTransportation/ProjectTransportation/Forms/FormEmployees.Designer.cs new file mode 100644 index 0000000..e580059 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormEmployees.Designer.cs @@ -0,0 +1,138 @@ +using static System.Net.Mime.MediaTypeNames; +using System.Windows.Forms; +using System.Xml.Linq; + +namespace ProjectTransportation.Forms +{ + partial class FormEmployees + { + /// + /// 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(FormEmployees)); + dataGridViewData = new DataGridView(); + panelButtons = new Panel(); + buttonDelete = new Button(); + buttonUpdate = new Button(); + buttonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit(); + panelButtons.SuspendLayout(); + SuspendLayout(); + // + // dataGridViewData + // + dataGridViewData.AllowUserToAddRows = false; + dataGridViewData.AllowUserToDeleteRows = false; + dataGridViewData.AllowUserToResizeColumns = false; + dataGridViewData.AllowUserToResizeRows = false; + dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewData.Dock = DockStyle.Fill; + dataGridViewData.Location = new Point(0, 0); + dataGridViewData.Margin = new Padding(2, 2, 2, 2); + dataGridViewData.MultiSelect = false; + dataGridViewData.Name = "dataGridViewData"; + dataGridViewData.ReadOnly = true; + dataGridViewData.RowHeadersVisible = false; + dataGridViewData.RowHeadersWidth = 72; + dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewData.Size = new Size(563, 321); + dataGridViewData.TabIndex = 3; + // + // panelButtons + // + panelButtons.Controls.Add(buttonDelete); + panelButtons.Controls.Add(buttonUpdate); + panelButtons.Controls.Add(buttonAdd); + panelButtons.Dock = DockStyle.Right; + panelButtons.Location = new Point(563, 0); + panelButtons.Margin = new Padding(2, 2, 2, 2); + panelButtons.Name = "panelButtons"; + panelButtons.Size = new Size(131, 321); + panelButtons.TabIndex = 2; + // + // buttonDelete + // + buttonDelete.BackgroundImage = Properties.Resources.minus; + buttonDelete.BackgroundImageLayout = ImageLayout.Stretch; + buttonDelete.Location = new Point(33, 176); + buttonDelete.Margin = new Padding(2, 2, 2, 2); + buttonDelete.Name = "buttonDelete"; + buttonDelete.Size = new Size(67, 67); + buttonDelete.TabIndex = 2; + buttonDelete.UseVisualStyleBackColor = true; + buttonDelete.Click += ButtonDelete_Click; + // + // buttonUpdate + // + buttonUpdate.BackgroundImage = Properties.Resources.i; + buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpdate.Location = new Point(33, 97); + buttonUpdate.Margin = new Padding(2, 2, 2, 2); + buttonUpdate.Name = "buttonUpdate"; + buttonUpdate.Size = new Size(67, 67); + buttonUpdate.TabIndex = 1; + buttonUpdate.UseVisualStyleBackColor = true; + buttonUpdate.Click += ButtonUpdate_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = (System.Drawing.Image)resources.GetObject("buttonAdd.BackgroundImage"); + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(33, 19); + buttonAdd.Margin = new Padding(2, 2, 2, 2); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(67, 67); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // FormEmployees + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(694, 321); + Controls.Add(dataGridViewData); + Controls.Add(panelButtons); + Margin = new Padding(2, 2, 2, 2); + Name = "FormEmployees"; + StartPosition = FormStartPosition.CenterParent; + Text = "Работники"; + Load += FormEmployees_Load; + ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); + panelButtons.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridViewData; + private Panel panelButtons; + private Button buttonDelete; + private Button buttonUpdate; + private Button buttonAdd; + } +} \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormEmployees.cs b/ProjectTransportation/ProjectTransportation/Forms/FormEmployees.cs new file mode 100644 index 0000000..24980be --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormEmployees.cs @@ -0,0 +1,103 @@ +using ProjectTransportation.Repositories; +using ProjectTransportation.Forms; +using ProjectTransportation.Repositories; +using Unity; + +namespace ProjectTransportation.Forms +{ + public partial class FormEmployees : Form + { + private readonly IUnityContainer _container; + + private readonly IEmployeeRepository _employeeRepository; + + public FormEmployees(IUnityContainer container, IEmployeeRepository employeeRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _employeeRepository = employeeRepository ?? throw new ArgumentNullException(nameof(employeeRepository)); + } + + private void FormEmployees_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonUpdate_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonDelete_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _employeeRepository.DeleteEmployee(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewData.DataSource = _employeeRepository.ReadEmployees(); + + 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/ProjectTransportation/ProjectTransportation/Forms/FormEmployees.resx b/ProjectTransportation/ProjectTransportation/Forms/FormEmployees.resx new file mode 100644 index 0000000..59ae37e --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormEmployees.resx @@ -0,0 +1,316 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + /9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsN + DhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQU + FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAEOAQ4DASIAAhEBAxEB/8QA + HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh + MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVW + V1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG + x8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQF + BgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV + YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq + 8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo + AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopu7 + 2pPMFAD6KryX0UPMjrGvq7AfzrC1D4keF9JZlvdf021K9fNukXH5mpcox3ZnKpCGspJHS0VwEvx8+HcL + YfxnogP/AF+xn+tS2/xy+H12wEXjLRXPoL2P/Gs/bU/5l95z/XcLe3tY/ejuqKxNN8baFrH/AB46vY3Y + 9YbhG/ka1o7hZFyhDDsQeK1UlLVHTGcZq8XcloqPzOcYp6tmmWLRRRQAUUUUAFFFFABRRRQAUUUUAFFF + FABRRRQAUUUUAFFFFABRRRQAUU1mxWbrviLT/DOmz6jqt7Bp9jAu+We4cIiD1JNJuyuyZSUVduxpFj6V + i+JvG2h+DdOkvtb1O10y0TrLcyhB+tfIvxk/buJkuNN8AWgcZKHWLtOOmMxx9/q35GvknxP401vxpqT3 + +u6nc6pdt/y0uZC2312jov4AV4eIzWnT92kuZ/gfn2Z8ZYTCN08KvaS7/Z+/r8vvPuDx9+3x4Y0ZpYPD + Gm3OvzKSouJP3Fv065I3EfQV8++Lv20fiV4m8yO11C30K3b+HT4QHx/vNk/kBXhGc4yAcUleDVx+Irby + svLQ/NMbxNmeMbTq8q7R0/4P4m/rXj7xJ4kctqmvalfk9RcXcjD8s4rB4JyRuPqaSlrgbb3Pmp1alR3n + Jt+YZH90UnBGCOKXbRtqdDK46OV4XDRs0bDoyHBH5V13h34w+NvCjKdK8U6paheifaWdP++XyP0rjqKu + MnHWLsb069Wi+anJp+TsfSng39u7x3oTxprVtY+IbcHLFk8iY/8AAl4/8dr6N+HX7bHgHxg0Vtqc8vhm + +fjbqIAiJ9pBx+eK/N7680u7jHY9a9GlmOIpfauvM+rwXFeZ4NpSnzrtLX8dz9mbHVbbUrZLm1mjubdx + lZYmDKR6giratuXIr8kvhz8aPF/wrukl8P6vLbwZy9lKfMt5Pqh6fUYNfavwV/bW8OeOjBpfiVI/Desu + diySP/oszE9A5+6T6N68E19BhszpVvdn7r/A/Tsq4swWYWp1f3c+z2fo/wDM+maKhiuUmjDqwZTyDngi + pVbcM17B9uLRRRQMKKKKACiiigAooooAKKKKACiiigAooooAKYXw2MUNJtJGK8T/AGjv2jNM+CukG3g2 + Xvie7Qm1s88Rr082T0UHoOpPtk1lVqwowc5uyRyYrFUcFRlXrytFHQfGr48+HPgvorXGqS/aNTmU/ZNM + hb97MfU/3Vz1Y8V+dfxc+OPij4xas0+tXbRWKNmDTYSRBD6HH8Tf7TfhiuU8WeLdV8ba7c6xrV5Jf39y + 26SWQ9uygdlHYdB+ecevi8ZjqmKdto9v8z8EzziTEZrJ04Plpdu/r/lsL1znnPWkpyru6fSun8BfDHxL + 8TdWXT/DmlTahMfvuoxHF7u54UfWvOjFyfLFanydOjUrSUKcW2+i1OXxVzTdHvtauEttOs5765c4WG3j + MjH8BX2/8Lf2CtI0uOK78a6g2q3PBNjZsUhU+hf7zfhivpvwr4F0DwXZi10PSLTS4cYIt4gpb6nqfxr2 + qOU1amtR8qP0LL+CcXiEp4qSprtu/wDL8T83fC/7IvxP8UKsi+Hm0yE/8tNSkWH/AMdJz+lemaP/AME9 + vE9xGG1HxJpdoe6wo8pH5gV94+V15PNO2CvWhlOHj8V2fZ0OC8spr94pSfm/8rHxbD/wTrVowZPGzK3f + bYcf+h1Fdf8ABO2RVJtvGis3/TWxIH6Oa+2AuKTbyTW39m4X+T8Wd/8Aqnk9v4P4y/zPz91z/gn/AONr + KMvp2saTqRHRGZ4mP5rj9a8q8Wfs2/EbwWjyaj4YvHt063Foonj+uUzj8a/Vfb703yRzzisJ5TQl8LaP + MxHBOXVV+6coP1v+f+Z+MM1vJbSFJUZHHBVhgg++aZg8AjBr9afHfwR8F/EeF11zQbW4mYYF1GvlTr9H + XB/PIr5O+LH7Beo6OJr7wRf/ANqwKCx027ISfGOit91j9cH6149fK69L3o+8vLf7j4fMeDsdhE50P3kf + Lf7v8mz5Ho9fpj2q9rOh6h4d1Kew1OzmsLyE7ZILiMo6n3Bqj+teP5M+DlGUG1JWaPffgL+1jr3wskg0 + zWHm1vwwDgwyNumtVz1iY9QM/dP0B7V+gvgnx5o3j7QYNX0K+jv7CYZEkZ5B7qw6hh3Br8fc8Y/nXonw + X+NmvfBfxEL/AEuUzWUpAvNOlY+XcJ0z/ssOzevXINezg8xlh/cqax/I/QMg4pq4Fxw+LfNS79Y/5ry+ + 4/V9W3KDjHtTq434Y/FDRfip4Ttdc0SfzYZPlkhfiWB+8bjsw/WuxVtyg19hGUZpSi7pn7hSqQrQVSm7 + p6pi0UUVRqFFFFABRRRQAUUUUAFFFFABTGk2nGKfWL4s8SWHg/QdQ1rVJ1tdPsoWnmkY9FA7e56D60m1 + FXZMpKEXKTskcJ+0F8cNO+Cfg6TUJVW61a6DRafZZ5lfHLH/AGF4JP4d6/MXxV4o1Pxlr17rOs3TX2pX + bl5pnPU+ijso4AHYAe+ej+MfxX1L4veObzXr4tHDnyrO1J+W3gB+VQPU9SfUn2xw1fD47FvFVNPhW3+Z + /PXEWezzbEONN2pR2Xfzf9bB160Bc/lmjjua+yv2U/2T0uo7Pxj41tCY2xLp+k3C8EdVllX07hT9T6Vy + 4fDzxM1Cn/wx42V5XXzXEKhQXq+iXdnF/s9/sfal8RVttd8UibSPDrfNHAo23F2PbP3UP949ew7194+E + vBOieCdHh0zQdPh0yxjHyxQLjPux6sfc81sRQBI1A4UDGKlUY96+1wuDp4WNorXuf0DlOS4XKafLRV5d + ZPd/5LyGrHjvmn0UV3HvhTWbFOrg/jR8UbH4QeA7/wARXqeeYsRW9sDgzzNwifTqSewBqJzVOLlJ6Ixr + VoYenKrVdoxV2/I7fzuvAxnHWjzs8AZNflZ42/aO+IPjbVZbq48R3mnxliY7XTpTBHGvYfLgn6k/4V2H + wY/a68XeAdctY9e1G48QeH5JAs8V23mTRKTy8b9SQP4T19q8WOb0XOzi0u58BS42wNSv7OUZKP8ANp+R + +kyMWUEjB9KdVTSdRt9X0y1vrSRZrW5iWaGRDkOjDKkexBFW690/RE01dBTGj3NnNPooGec/Ff4H+Fvi + 5pb22t2Q+1KmINQgAWeE5yMHuB/dOR9K/PP44fs9+I/grqh+2p9v0aZiLXU4VOx/9lx/C2Ox69uK/VBk + 3e1ZfiLwzpvirR7rS9Ws4r+wuk8uWCZcqw/xHY9QeRXmYvA08UrrSXf/ADPks64dw2bQckuWr0l/n3/M + /HA9aO2O1e5ftLfs13vwY1j+0NO82+8KXb4huWGXt26+VJjv/dPfHsa8NPBr4yrSnRm4TVmfgWMwdfL6 + 8qFeNpL+tD0b4H/GjWPgv4uj1Oyd7jT5yqX9hu4uEzyR2DgZKn6joa/UHwb4y0zxx4bsdb0i4W7068jE + sUq9wex9COQR6ivx5DY7Z/lX0Z+x38eH+HfixPDWrT48O6vKESSU8WtwcBXHorcBvfafWvVy7GOhP2U/ + hf4M+44Uz54KqsHiJfu5bf3X/k/+CfourblzS0yI5jGOafX2J+5BRRRQAUUUUAFFFFABRRRQAxpNvbNf + Dn7d3xlbUdWt/AGmTj7LaslxqbIc7pTzHGfZR8xHqV9K+vPiZ44tfhv4H1vxJeYMWn2zSqmf9Y/RFHuW + 2j8a/JPX9au/EetX+qahKZr2+maeeQnq7HJP64+gAr5/NsRyQVGO739P+CfnHGeaPC4aODpv3qm/+H/g + /wCZQbliR0680nXgde3+fypSckmuy+EPw3vfix4/0vw7Z7kW4fNzPjIigGC7fgOnuRXy0YuTUVuz8Vo0 + Z4irGlTV5Sdke1/sdfs7p4+1QeL/ABBb7vD9jJ/osEg4u5ge47ovGfU4HY1+gUcAVRg4+grL8L+F7Hwn + oGnaPpkS2+n2MSwwRKPuqBj8z1J75PrWyvAA6195hMNHC0+Vb9T+k8myqnlOFVGHxPWT7v8AyXQFG0Yp + aKK7T3gooooAK+Rf+CiVxJH4P8IwByIZNQldl7ErCQp/Dcfzr66r5B/4KK/8iv4M/wCv6f8A9FCvNzH/ + AHWfy/NHzHE3/Ior+i/NHwwepp0fyspHB6g+n+cU2nL95a+F6H83n6p/sw3D3XwB8DvI25l05Ix/uqSo + H4ACvUK8q/ZZ/wCTfvBP/Xj/AOztXqtfomH/AIMPRfkf1PlzbwVFv+WP5IKKKK6D0AooooAxvFfhnTvF + +h3ukatare6fdxNFNA4+8p9PQjqD1BFfl58evgzf/BfxxPpUxe4064zNp92w/wBdHnp/vKeCPoe4r9Wi + ua8t/aG+Dtv8Yvh/d6ZhV1a2zc6dcN1SYD7uf7rD5T9Qe1eVmGEWIp80fiW3n5Hx/EmSxzXDOUF+9ht5 + +Xz/ADPyuPBNKGwCKmvbObT7ua2uYWt54XaKWFlwyMpwy49QRioOnFfE+p/PLTi7H6T/ALH/AMaG+J/w + 5TT9Qm83XtEC2tyzH5pY8fupfxAKn3U+te+I25QcYr8rf2b/AImN8LPito+oyzGPS7pxY3wz8vlSMBuP + +6wVvbB9a/VGFg0asDkEZBFfbZbiPb0bS3jp/kf0LwtmjzLAqNR3nDR/o/n+Y+iiivVPsQooooAKKKKA + Ckz7UtMbr0zQB8d/8FCPiAbbS9B8GW8mGunbUbtQf4E+WIH2Lbj/AMAFfEJ6/rXrH7VHjJvGvx08T3Ak + 8y2s5hp0ODwFhG04/wCB7z+NeT+tfA4yr7bESl/Wh/NfEWNeOzKrUvonZei0/wCD8xVXdj64/Gvv79hP + 4Vr4Z8BXHi27hxqGunEBccpbISFx/vNlvoFr4Z8GeGZ/GXizR9Cts+fqV5HaKR/DvYKT+AJP4Gv150DQ + 7bw/odhplightLOBLeFQOiIoVR+Qr0cpo89R1XtH82fVcEZeq2InjJrSGi9X/kvzNFOFHenUlLX1p+1B + RRRQAUUUUAFfIP8AwUU/5FfwZ/1/T/8AooV9fV8g/wDBRX/kV/Bn/X9P/wCihXm5j/us/l+aPl+J/wDk + UV/Rf+lI+GKcv3lptOX7y18L0P5wP1O/ZZ/5N+8E/wDXj/7O1eq15V+yz/yb94J/68f/AGdq9Vr9Ew38 + CHovyP6my3/cqH+CP5IKKKK6D0QooooAKY8Yfr0p9FAH55/tz/CtfB/xFg8T2UOzTteXdLtGAt0mN/03 + Jhvchq+ZsbePTiv1D/at8Ar8QPgr4gt1i8y90+P+0rXHXfECSB9ULr+Nfl63OSDkHkV8TmVD2NdtbS1/ + zP594uy9YLMXOC92p73z6/jr8xOoORnjGPX/ADiv1G/ZX+Ih+InwX0K6mkM19YqdOumJ5LxYAJ9ymxvx + r8uf5V9g/wDBPPxk0Gt+KPC8knyXEMeowIx/iU+XJj6ho/yp5XV9niFHpLQ14Oxrw2ZKk3pUVvmtV/Xm + fcY6UtIv3RS19qfvoUUUUAFFFFABWZ4i1SPQ9F1HUpjths7eS4f6IhY/yrTrzL9pLVG0f4G+OLlW2sdL + lhB/3xs/9mrKrLkhKXZM5sVV9jQnV/lTf3K5+V1/ey6lfT3lwd89xI00jerMSxP5mq9K3DGkr85P5Rbc + ndn0N+w14VXxB8botQkQNFo1lLdfMOPMbEafiPMY/wD6q/R5Puivi/8A4J26Mq2vjbViuXMltaKx9AHc + /wAx+VfaK/dFfaZXDlwyfe7P6D4QoKjlMJdZtv8AG35IWims2M8Zrj/iF8WvDPwt05L3xHqcNjHISIY+ + WklI7KgBJr1ZSUFzSdkfX1KtOjFzqySS6vQ7Kivm2T9vT4bq7BU1Z1B4YWZwffk03/hvb4c/88tX/wDA + P/69cf17Df8APxHjf29lf/QRH7z6Uor5r/4b2+HP/PLV/wDwD/8Ar0f8N7fDn/nlq/8A4B//AF6Pr2G/ + 5+IP7eyv/oIj959KV8g/8FFs/wDCKeDTj/l+nH/kIV1f/De3w5/55av/AOAn/wBevBf2s/2iPDPxs8P6 + DZ6Cl4ktjdySym6h2DaybeOa4Mdi6FTDyjCab0/M+e4gzjL8TllalRrRlJpWSfmj5nPU05fvLTTSr1H+ + fWvkOh+Dn6n/ALLP/Jv/AIJ/68f/AGdq9Vr40+Cf7Y3gfwB8KvDfh7Uo9TN9YWvlS+Tbbk3bieDn3rt/ + +G9vhz/zy1f/AMA//r19vQxuHjShFzV0l+R/RWAzzLaeEownXimoxT18kfSlFfNf/De3w5/55av/AOAf + /wBej/hvb4c/88tX/wDAP/69b/XsN/z8R3/29lf/AEER+8+lKK+a/wDhvb4c/wDPLV//AAD/APr1b039 + ur4aXtysU02o2KHrNPZttA9TjOKPr2G/5+Iaz7K5OyxEfvPomisjw/4p0zxXpcGpaReQahYTDMdxBIGV + h36eh4xWsrbhmu1NSV0e3GSklKLumQXUKXEckcih4nUqysOCCMEflmvyD+IXhlvB3jrxDobDA0+/mt1/ + 3Vchf/HcV+wLpuznoe1fmV+2Voq6L+0F4hZFwt4lvdjHGS0Kgn/vpT+deBnEL04z7P8AP/hj8146w/Pg + 6Vdbxlb70/8AI8Rr2D9kvxCfDvx88LNu2xXkklg/uJUIA/76C/lXj9dH8OdUbRPH/hm/Q7WtdTtpt3pi + Vf6V8zSn7OpGS6NH5Hl9b6vi6Vb+WSf4n7Ar90U6moeKdX6Mf1QFFFFABRRRQAV4t+2JMYf2dvF+P40t + kP0NzFmvaa8X/bCgM/7O/i7H8KW7n6C4iJrlxf8Au9T0f5HlZtf+z8Rb+SX/AKSz8wu5+tJS9zSV+fn8 + uH33/wAE97cL8LPEM44aTWWU/QQRY/ma+ql+7Xyp/wAE97oN8LvEVuDlo9YZz9Ggix/6Ca+q1+7X3WA/ + 3aFj+lOG/wDkU4e3b9WRTNt3En5QMmvyU+MHxG1D4ofEDV9cv52lSSZ4raMnKxQBsIijsMAH3JJr9a5l + 3ZB6Hg1+T3xs+F+o/Cn4harpF7A6Wpleezn2nZLAzZUg+2cH0IIrzs55uSFvh6/1958rx0q/1ai4X5Lu + /rpa/wCJwJ5OT1pOKU8HB60f56GvlT8W1E4o4pf89DR/noaeoaiUv15o/wA9DRt9/wBDRqGolL/+qg8H + FH1pCDryaTilxj/9VH+ehoHqJxRxS/56Gj/PQ09Q1E4pcj0/z60f56GjFIep9N/sK/Ei/wBG+Jx8JvO8 + mlazBK6wk5CTxoXDL6EqGB9fl9K/QhPujvXwB+wp8L9Q1b4gt4ymgeLStKhlihmYYEs8ilML67ULEn3W + vv8AT7or7PKuf6v73fT0P3/g9V1la9ttd8v+HT8L3FPNfnd+31biD43WkoHMujQMfqJJh/Sv0Sr87f2+ + rlbj43WsQPMOjQKfqZJj/Iilm1vq2vcz40t/ZT/xR/U+bOnFS2khhuoHXhldSPrkVFnPNTWcRmvLeNfv + M6gfXIwK+NPwWN+ZWP2chbdGrf3hmn0yFdkar12jFPr9LP60WwUUUUDCiiigArzT9o7SX1v4H+OLVV3N + /ZU0oX1KDf8A+y16XWdr2mx6zpN9p8w3QXcD27jHZlKn+dZVY88JQ7po5sTS9tQnS/mTX3qx+NbHLH60 + lWtS0+XSdQubG4G24tZXglX0dGKkfmDVavzk/lGScW4s+0f+CdutKY/G2kM2H3W12in0w6N/Jfzr7TX7 + or82/wBiDxYvhz44WtlI4SHWbSWzO48bxiRPxJjI/H3r9I0+6K+0yufNh0u1z+guD8Qq2Uwh1g2vxv8A + qBXPfFc142+G/h74i6aLDxFplvqdspLRiRSGjJ4yrAgg49DXT0V60oqStJXR9jUpwqxcKiTT6M8Db9iP + 4WMxI0u9UdgL18D2o/4Yj+F3/QNvv/A1q98ork+p4b/n2vuPJ/sXLf8AoHj/AOAo8D/4Yj+F3/QNvv8A + wNaj/hiP4Xf9A2+/8DWr3yil9Sw3/PtfcH9i5b/0Dx/8BR4F/wAMR/C7/oG33/ga1fPf7YPwG8JfB3Qf + Dt14btJ4Jb26kimM05kyqpuHWv0Br5D/AOCin/IoeD/+whMP/IVcOOwtCnh5SjBJ6fmfPcQZVgaGV1ql + KjGMklZpLuj4V6cU5eo/P+dJTl+8tfH9D8DPuv4Ffsn/AA+8cfCPwxruq2F3LqF9a+ZM6XTKC25hwB04 + ArvP+GI/hd/0Db7/AMDWrp/2Wf8Ak3/wT/14/wDs7V6rX29DB4eVKDcFey6eR/R2AyfLqmEozlQi24x6 + LsjwP/hiP4Xf9A2+/wDA1qP+GI/hd/0Db7/wNavfKK3+pYb/AJ9r7jv/ALFy3/oHj/4CjwP/AIYj+F3/ + AEDb7/wNarGn/sXfCyxuknOjXFztOfLuLuRkP1AIzXulFNYPDrVU19w1k2Wxd1h4/wDgKM/SdBsdBsIb + HTraGysoRtjt4IwiKPQAfn71fUbRilorr20R7CSirLYY0m0nI49a/Mf9sbW11z9oLxIEbcloILQY5wVh + XcP++mb8q/TK8uEtIZZpmWOCNC7ux4AAyT+ABr8gPHfiV/GHjXXtcc5/tG+muR/us5K/pivn84nanGHd + 3/r7z8046xChhKVBbylf7l/wTBrpfhtpLa58QvC2nqNzXWq20W36yrn9K5qvZf2RfDx8Q/Hzw0Cu6KxM + t+/GcCOM4P8A30yfnXzVKHtKkYLq0fkmXUfrGMpUf5pJfifp+owKdTU+6KdX6Mf1OFFFFABRRRQAUxvr + in0lAH5dftYeDT4L+OviSIR7LW/kXUYSBwRKMtj/AIHvH4V5A3U19y/8FBPh6b7w/ofjG3j3SWEhsLpg + P+WUnMZPsHyP+B18NNwxHpxXwWNpexxEo/P7z+beI8E8DmVWFtG+Zej1/wA18jW8J+Irjwj4m0nW7Ti5 + 066ju48d2Rg2D9QMV+vPhrX7XxN4d07VrFxLaXttHcxMO6uu4fzr8cAcfz/EHivvX9g34qLr3g288G3k + +b7RmMtoHb71s5JwP91iR9GWu/Ka3JVdN7S/M+m4JzBUMTPBzek9V6r/ADX5H1eKWmx/dHGKdX1x+2BR + RRQAUUUUAFfIn/BRT/kUPB3/AGEZf/RVfXdfIn/BRT/kUPB3/YRl/wDRVedmH+7S+X5o+Y4m/wCRRX9F + +aPhSnr95aZT1+8tfCdD+bj9Tv2Wf+TfvBP/AF4/+ztXqteVfss/8m/eCf8Arx/9navVa/RMN/Ah6L8j + +p8t/wByof4I/kgoooroPRCiiigAoopkkmzntQB4z+1v4/XwD8FddZJfLvdUT+zbYDrulBDkfRA5r8w2 + 4YjoAcV9Iftu/FZfHHxLj8P2c2/TPD6mBtpyrXTYMp99oAX8G9a+buvNfEZjX9tXdto6f5n8+cWZgsdm + Mowfu0/dXr1/H8hf5V9j/wDBPPwaZNS8U+KZEwsccemwOR3J8yXH4CL86+OQODzgnkH9K/U39mP4dn4c + fBnQNPmj8m+uYzf3akciSX5tp9wu1f8AgNXldL2mI5ukdTfg3BPEZl7ZrSmr/N6L9fuPVl+6KWkHA9aW + vtD98CiiigAooooAKKKKAOa+Ifg2z+IXg3WvDt8M22o2zQFsfcYj5WHuGwfwr8kfE3h+98K6/qWkajE0 + V7YTvbzIR/Epxx/P6EGv2QaPd3xXxR+3h8GTDdW/xC0yD925S21UKOjDiKU+38JP+7+Hg5th/aQVaO8d + /T/gH51xllbxWGWMpq8qe/8Ah/4G/wB58adyPTiur+FvxAv/AIW+OtL8SaeSZLR8yw5ws0J4dD9Rn8QK + 5VhhiOce/Wk9xwe3+fyr5OMnFqS3R+JUqs6FRVabtKLumfsN4O8YWHjTw1pmt6XKs+n38SyxODzg9QfQ + g5BHsa3lORX51fsh/tEL8MtcPhrXJ8eGtRkBSVzxZTE43H0RuM+hwfWv0OhulljVkwwbkEHg9+K+8weK + jiqfN1W5/SWSZtTzfCqrHSS0kuz/AMn0LFFIrbhmlruPoAooooAK+RP+Cin/ACKHg7/sIy/+iq+u6+SP + +CiFtLL4J8KTKhMMWpSK7DszQnaPxwfyrzsx/wB1n8vzPmeJf+RRX9F+aPhCnr95ab9OlOj+ZlA5OcAV + 8J0P5uP1O/ZZ/wCTfvBP/Xj/AOztXqteYfsx2stn8A/A8cqlHbTY5MH0clh+jCvT6/RMP/Bh6L8j+p8u + TWCop/yx/JBRRRXQegFFFFADWbbXkf7Sfxnh+Dvw/ubyGRTrl9m20236kyEcyEf3UHJ98DvXf+NPF+me + BvDt9rWsXS2mn2kZeSRjyfQKO7E8AdSa/Lj43fF7UvjN43utavN0FquYbG0LZFvDnIH+8Tyx7/gK8nMM + WsPT5I/E/wAPM+N4mzuOV4Z06b/ez28vP/LzOEuLh7qZ5ZpGnkkYu8jNlnJOSxPqTyTUfv3oY7mJpyxl + +gJPYAc59K+KP571kz1j9mH4YH4o/FfSrSeIyaVp7rqF8SMrsjYFUP8AvuVXHcbvSv1IjG2MD04rw79k + v4L/APCqvhtFLfwiPXtY23d7kcxjH7uL/gIOT/tMfSvc1GBX2+XYf6vRu95an9D8MZW8twK9orTnq/Ls + vkvxFooor1D68KKKKACiiigAooooAKyfEeg2XibR77StSt1utPvIWgnhYZDKwwR9f8K1qaybjmk0mrMm + UVJOMldM/J/43/B/UPg546udGud0thIfO0+8I+WeEnjn+8vQj1HuM+eV+rXx2+DGl/GrwbPpF4RBfwgy + 2N4B80EuP/QTwGHpX5g+NvBmreAfEt9omt2rWmo2rkOhHDDsynupGCD6H64+Ix2EeGqXj8L2/wAj+fOJ + MhllVd1KS/dS28vJ/p5GH9Rn69K+uP2VP2sB4dW08IeMrpjpoIisdUmbPkekch67M8Bu3APHNfI1L9QD + 9a46FeeHmqlNnh5ZmdfK66r0H6ro12Z+ztvdLcQpJGQ8bDIZTkHPfip1O5c4xX5v/s/ftaax8KzBpGue + drXhjdhV3ZntPXYT95f9g/h6V99eB/iL4f8AiJo0WpeHtRh1C1Yc+W3zRn+6y9VPsea+0wuNp4paO0ux + +/5RnmFzemnSdp9Yvdf5o6eimLJuwccU6vQPoha4r4ufDXTviz4J1Dw5qRMcdwoaG4UZaCVeUcfQ9R3B + IrtaaV3VEoqcXGS0ZlVpQr05UqivF6NeR+XvjT9lL4j+EdVmt4/D9xrNruPlXmmp5yOvYkDlT7EV2HwZ + /Yz8V+LNctbjxZZSaBoMbhpo7j5bicDnYq9Vz/ePb1r9EPK9++elJ5I7Hnp+ua8eOU0FPmbdux8JS4Ly + +nX9q3Jx/ldrfkR6bZw6fY29rbxrDbwxrHHGgwqKBgKPYDAqzTVXaoGc+9Or2z79KysgooqNpNrYxQMV + nx71jeLfGOk+CdDutX1q9isNPtk3yTSNj6ADux6ADkmuG+MH7QnhX4Q6fI2qXQudUZMwaZbMGmk5wCf7 + q/7RwK/PX4zfHTxJ8Z9a+0atP9n0+Fj9l02Fj5UGe5/vN/tH8MDivKxmYQwy5Y6y7f5nx2d8SYbKounB + 81Xt29f8tzf/AGjP2i9S+NmvCGASWHhm0cm1ss8yN082THVsdB/DmvGjyTxig0ds+nWvjqlSVWbnN3bP + wTF4utjq0q9eV5MULkenp6V9M/sZ/AVvHHiWPxfrFvnQtLl3W0Uq8XVyMEfVU4J9SQPWvN/gH8C9V+Nn + ipbSESWmi2rK2oX4GPKXP3FPd25A9MEniv068L+FtO8I6DZaRpVulnp9nGIoYIxwqj+vUk9yTXrZbg3W + l7Wfwr8Wfe8J5C8XVWOxEf3cdv7z/wAl+JrR/dFPpFG0Ypa+wP28KKKKACiiigAooooAKKKKACiiigBp + XJzXkH7QX7Pmk/GzQcOVs/ENqpNnfqOef+WcnqhP5HkdwfYaaVyc5rKpTjWg4TV0zmxOGpYylKhXjeL6 + H49eNvA2tfD3xDc6Lrtk9jfQHDKw+Vl7Op7qex/+vjBr9Yvi/wDBXw58ZNCaw1u223MYJtdQhH763Y9w + e49VPB/Wvzt+M37Pfin4Nai/9o25vdJdsQapbqTE/oG/uN7H8Ca+NxmBnhXzLWPf/M/Bs94ZxGVydWku + al36r1/z2PLw2Melb3g7x5r3w/1aPUvD2p3GmXifxRN8rj0dejD2NYW3rnjHWkrzE2ndPU+OhUnSkpwd + muqPtb4W/t9QSRxWnjjSzA/AOo6epZT7tH1H4E19ReDfip4V8fWf2jQdcs9QXGWWOUb19ip5H41+Q+al + tryexnSe1mktrhDlZoWKOPowwa9mjmtanpNcyPvsBxpjcMlDEpVF9z+//gH7OiTPal3g1+Vvhn9pv4l+ + E1VLXxTdXMK/8sr8LOPplhn9a9L0f9vzx1Zxhb7StIv8fxKrxH+Zr1YZvQa95NH2lDjbLai/eKUX6X/I + /QgNkZpN/JFfDUP/AAUR1dUAk8G2rt3K3zAf+gVDdf8ABQ7XJFIt/CFjE3rJeM3/ALIK3/tTC/zfgzv/ + ANb8nt/Ff/gMv8j7q3+opklwsaksQAO5Nfnbrn7d/wARtSjKWcWlaWD/ABRwNIw/Fmx+leWeKvjn488a + K6av4o1CeJusMUvkx/TamAfxzXPPN6MfgTZ5mI44wFP+DCUn9y/r5H6PfED9ozwJ8N0kXVddt3u1GRZW + h86Y/wDAVzj8a+TPix+3V4g8UCax8IWg8P2LAqb2bEl0wI/h/hT9T9K+W2Ytyee/1PrSZPevHr5nXraR + 91eX+Z8NmPF+PxqcKT9nF9t/v/ysWNQ1G61W8mu724mvLuZt0k87l3YnuSetV6KVULdBXknw7bk7vVib + fw+teofAz4C678ateEFkjWmkQMPtupSLlIl67V/vOecD8TjFegfAP9j/AFr4hvb6x4mWbRfDZO4RsCtx + dr6KD91T/ePboO9ffXhXwjpPg3RbfStGsotP0+BdqQRLgD1JPcnuTya9vB5bKt79VWj+Z+i5BwrUxjji + MauWn26y/wAl/SKPw9+HejfDbwraaFolsLaygHJbmSVu7u3dj1JrqFXaoGc0irtUDOcd6dX10YqK5Yqy + P22nTjSgoQVktgoooqjQKKKKACiiigAooooAKKKKACiiigAooooAaVzVPVNHtNasprO/toby0mXZLBOg + dHU9QQeoq9RRvuJpNWZ8e/GT9hSz1J7jUvAl0unTklzpV0x8ljjOEfqn0OR7ivkDxn8OfEfw/wBRay8Q + aRdabOOnnRnY/urDhvqDX6/le+cVna14b0zxJp8ljqthb6jZyfeguog6H8DXiYjK6VX3qfuv8D4HM+D8 + HjG6mHfs5eXw/d0+X3H43bQMZYDjPvTa/Q7x9+wr4K8SNLcaFcXXhq5fJ2RHzbfOOmxjkD6Gvn3xd+wv + 8QtB8yTSxZa/Av8Az6zbJMf7r4/QmvBq5fiaX2bryPzXGcK5pg22qfOu8dfw3/A+c6Wuu8QfCLxp4XZh + qnhjVLML1aS1fb+eMVy0lnNCcSRSRn0ZCK8+UXHSSsfL1KFWi+WpBp+aIt1GaGXYQCcUoUnsT9BUaGNh + tFWrbS7y8kCW9pNOzdBHGWJ/AV3Phv8AZ9+Ifizb/Z/hPUmRuks0Jhj/AO+nwK0jGU9Iq500sLXrvlpQ + cn5Js88pQuc+3419T+Df2A/FeqPHJ4i1ex0SEnDRwH7RMPpjC/rX0Z8Ov2P/AIeeBWiuJdObX79OftGq + ESKD6iP7v55r0aWW4io9VyrzPrMFwjmWKadSPs4/3t/u3/I+Evhl+z/40+K1wn9j6U8djnD6jdgxQJ/w + I/e+i5NfbXwX/Y58K/DbyNS1bb4k1xPmEtzH+4hbPVIzwSP7zfgBXv0NnFbwrFFGscSjCxoMKB6AdqmV + dq4r6HDZbSoWlL3mfp2VcK4HLWqk17Sfd7L0RGsIVcVIo2jFLRXrH2gUUUUAFFFFABRRRQAUUUUAFFFF + ABRRRQAUUUUAFFFFABRRRQAUUUUAN20nlin0UAR+SOeePSs2+8K6PqRY3mlWN0W6+dbI+fzFa1FJpPcl + xjJWaucpJ8KfBkrbn8J6Ix/7B8X/AMTUlv8AC/wfasGh8LaNE3qthED/AOg109FR7OHYx+rUE78i+5FG + x0Sw01dtpZ29qvpDEqfyFW/LFPoq0ktjeMVFWSGeWM5pyrtpaKYwooooAKKKKACiiigAooooAKKKKACi + iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi + iigAooooAKKKKAP/2Q== + + + \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormGoToService.Designer.cs b/ProjectTransportation/ProjectTransportation/Forms/FormGoToService.Designer.cs new file mode 100644 index 0000000..f0c5600 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormGoToService.Designer.cs @@ -0,0 +1,184 @@ +using static System.Net.Mime.MediaTypeNames; +using System.Windows.Forms; +using System.Xml.Linq; + +namespace ProjectTransportation.Forms +{ + partial class FormGoToService + { + /// + /// 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() + { + comboBoxBus = new ComboBox(); + labelBus = new Label(); + buttonCancel = new Button(); + buttonSave = new Button(); + labelPrice = new Label(); + numericUpDownPrice = new NumericUpDown(); + checkedListBoxBrokenElements = new CheckedListBox(); + labelBrokenElement = new Label(); + dateTimePickerServiceDate = new DateTimePicker(); + labelDate = new Label(); + ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).BeginInit(); + SuspendLayout(); + // + // comboBoxBus + // + comboBoxBus.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxBus.FormattingEnabled = true; + comboBoxBus.Location = new Point(112, 259); + comboBoxBus.Margin = new Padding(2, 2, 2, 2); + comboBoxBus.Name = "comboBoxBus"; + comboBoxBus.Size = new Size(165, 28); + comboBoxBus.TabIndex = 9; + // + // labelBus + // + labelBus.AutoSize = true; + labelBus.Location = new Point(17, 261); + labelBus.Margin = new Padding(2, 0, 2, 0); + labelBus.Name = "labelBus"; + labelBus.Size = new Size(65, 20); + labelBus.TabIndex = 8; + labelBus.Text = "Автобус"; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(187, 306); + buttonCancel.Margin = new Padding(2, 2, 2, 2); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(90, 33); + buttonCancel.TabIndex = 19; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(43, 306); + buttonSave.Margin = new Padding(2, 2, 2, 2); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(99, 33); + buttonSave.TabIndex = 18; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // labelPrice + // + labelPrice.AutoSize = true; + labelPrice.Location = new Point(17, 208); + labelPrice.Margin = new Padding(2, 0, 2, 0); + labelPrice.Name = "labelPrice"; + labelPrice.Size = new Size(83, 20); + labelPrice.TabIndex = 20; + labelPrice.Text = "Стоимость"; + // + // numericUpDownPrice + // + numericUpDownPrice.Location = new Point(112, 207); + numericUpDownPrice.Margin = new Padding(2, 2, 2, 2); + numericUpDownPrice.Name = "numericUpDownPrice"; + numericUpDownPrice.Size = new Size(163, 27); + numericUpDownPrice.TabIndex = 21; + // + // checkedListBoxBrokenElements + // + checkedListBoxBrokenElements.FormattingEnabled = true; + checkedListBoxBrokenElements.Location = new Point(112, 68); + checkedListBoxBrokenElements.Margin = new Padding(2, 2, 2, 2); + checkedListBoxBrokenElements.Name = "checkedListBoxBrokenElements"; + checkedListBoxBrokenElements.Size = new Size(166, 92); + checkedListBoxBrokenElements.TabIndex = 22; + // + // labelBrokenElement + // + labelBrokenElement.Location = new Point(17, 68); + labelBrokenElement.Margin = new Padding(2, 0, 2, 0); + labelBrokenElement.Name = "labelBrokenElement"; + labelBrokenElement.Size = new Size(85, 45); + labelBrokenElement.TabIndex = 23; + labelBrokenElement.Text = "Сломанная деталь"; + // + // dateTimePickerServiceDate + // + dateTimePickerServiceDate.Enabled = false; + dateTimePickerServiceDate.Location = new Point(112, 18); + dateTimePickerServiceDate.Margin = new Padding(2, 2, 2, 2); + dateTimePickerServiceDate.Name = "dateTimePickerServiceDate"; + dateTimePickerServiceDate.Size = new Size(166, 27); + dateTimePickerServiceDate.TabIndex = 24; + // + // labelDate + // + labelDate.AutoSize = true; + labelDate.Location = new Point(17, 21); + labelDate.Margin = new Padding(2, 0, 2, 0); + labelDate.Name = "labelDate"; + labelDate.Size = new Size(41, 20); + labelDate.TabIndex = 25; + labelDate.Text = "Дата"; + // + // FormGoToService + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(320, 347); + Controls.Add(labelDate); + Controls.Add(dateTimePickerServiceDate); + Controls.Add(labelBrokenElement); + Controls.Add(checkedListBoxBrokenElements); + Controls.Add(numericUpDownPrice); + Controls.Add(labelPrice); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(comboBoxBus); + Controls.Add(labelBus); + Margin = new Padding(2, 2, 2, 2); + Name = "FormGoToService"; + StartPosition = FormStartPosition.CenterParent; + Text = "Тех. обслуживание"; + ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private ComboBox comboBoxBus; + private Label labelBus; + private Button buttonCancel; + private Button buttonSave; + private Label labelPrice; + private NumericUpDown numericUpDownPrice; + private CheckedListBox checkedListBoxBrokenElements; + private Label labelBrokenElement; + private DateTimePicker dateTimePickerServiceDate; + private Label labelDate; + } +} \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormGoToService.cs b/ProjectTransportation/ProjectTransportation/Forms/FormGoToService.cs new file mode 100644 index 0000000..3ea12bd --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormGoToService.cs @@ -0,0 +1,55 @@ +using ProjectTransportation.Entities; +using ProjectTransportation.Entities.Enums; +using ProjectTransportation.Repositories; +using ProjectTransportation.Entities.Enums; +using ProjectTransportation.Repositories; + +namespace ProjectTransportation.Forms +{ + public partial class FormGoToService : Form + { + private readonly IGoToServiceRepository _goToServiceRepository; + + public FormGoToService(IGoToServiceRepository goToServiceRepository, IBusRepository busRepository) + { + InitializeComponent(); + _goToServiceRepository = goToServiceRepository ?? throw new ArgumentNullException(nameof(goToServiceRepository)); + comboBoxBus.DataSource = busRepository.ReadBuses(); + comboBoxBus.DisplayMember = "LicensePlate"; + comboBoxBus.ValueMember = "Id"; + foreach (var elem in Enum.GetValues(typeof(BrokenElements))) + { + checkedListBoxBrokenElements.Items.Add(elem); + } + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (comboBoxBus.SelectedIndex < 0 || checkedListBoxBrokenElements.CheckedItems.Count == 0) + { + throw new Exception("Имеются незаполненные поля"); + } + + BrokenElements brokenElements = BrokenElements.None; + foreach (var elem in checkedListBoxBrokenElements.CheckedItems) + { + brokenElements |= (BrokenElements)elem; + } + + _goToServiceRepository.CreateGoToService(GoToService.CreateOperation(0, + brokenElements, + Convert.ToInt32(numericUpDownPrice.Value), + (int)comboBoxBus.SelectedValue!)); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + } +} diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormGoToService.resx b/ProjectTransportation/ProjectTransportation/Forms/FormGoToService.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormGoToService.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/ProjectTransportation/ProjectTransportation/Forms/FormGoToServices.Designer.cs b/ProjectTransportation/ProjectTransportation/Forms/FormGoToServices.Designer.cs new file mode 100644 index 0000000..9e74fb4 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormGoToServices.Designer.cs @@ -0,0 +1,122 @@ +using static System.Net.Mime.MediaTypeNames; +using System.Windows.Forms; +using System.Xml.Linq; + +namespace ProjectTransportation.Forms +{ + partial class FormGoToServices + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + dataGridViewData = new DataGridView(); + panelButtons = new Panel(); + buttonDelete = new Button(); + buttonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit(); + panelButtons.SuspendLayout(); + SuspendLayout(); + // + // dataGridViewData + // + dataGridViewData.AllowUserToAddRows = false; + dataGridViewData.AllowUserToDeleteRows = false; + dataGridViewData.AllowUserToResizeColumns = false; + dataGridViewData.AllowUserToResizeRows = false; + dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewData.Dock = DockStyle.Fill; + dataGridViewData.Location = new Point(0, 0); + dataGridViewData.Margin = new Padding(2); + dataGridViewData.MultiSelect = false; + dataGridViewData.Name = "dataGridViewData"; + dataGridViewData.ReadOnly = true; + dataGridViewData.RowHeadersVisible = false; + dataGridViewData.RowHeadersWidth = 72; + dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewData.Size = new Size(1337, 321); + dataGridViewData.TabIndex = 5; + // + // panelButtons + // + panelButtons.Controls.Add(buttonDelete); + panelButtons.Controls.Add(buttonAdd); + panelButtons.Dock = DockStyle.Right; + panelButtons.Location = new Point(1337, 0); + panelButtons.Margin = new Padding(2); + panelButtons.Name = "panelButtons"; + panelButtons.Size = new Size(127, 321); + panelButtons.TabIndex = 4; + // + // buttonDelete + // + buttonDelete.BackgroundImage = Properties.Resources.minus; + buttonDelete.BackgroundImageLayout = ImageLayout.Stretch; + buttonDelete.Location = new Point(33, 100); + buttonDelete.Margin = new Padding(2); + buttonDelete.Name = "buttonDelete"; + buttonDelete.Size = new Size(67, 67); + buttonDelete.TabIndex = 2; + buttonDelete.UseVisualStyleBackColor = true; + buttonDelete.Click += ButtonDelete_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.plus; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(33, 19); + buttonAdd.Margin = new Padding(2); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(67, 67); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // FormGoToServices + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1464, 321); + Controls.Add(dataGridViewData); + Controls.Add(panelButtons); + Margin = new Padding(2); + Name = "FormGoToServices"; + StartPosition = FormStartPosition.CenterParent; + Text = "Тех. обслуживания"; + Load += FormGoToServices_Load; + ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); + panelButtons.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridViewData; + private Panel panelButtons; + private Button buttonDelete; + private Button buttonAdd; + } +} \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormGoToServices.cs b/ProjectTransportation/ProjectTransportation/Forms/FormGoToServices.cs new file mode 100644 index 0000000..5b78e7a --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormGoToServices.cs @@ -0,0 +1,81 @@ +using ProjectTransportation.Repositories; +using ProjectTransportation.Forms; +using ProjectTransportation.Repositories; +using Unity; + +namespace ProjectTransportation.Forms; + +public partial class FormGoToServices : Form +{ + private readonly IUnityContainer _container; + + private readonly IGoToServiceRepository _goToServiceRepository; + + public FormGoToServices(IUnityContainer container, IGoToServiceRepository goToServiceRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _goToServiceRepository = goToServiceRepository ?? throw new ArgumentNullException(nameof(goToServiceRepository)); + } + + private void FormGoToServices_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 ButtonDelete_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _goToServiceRepository.DeleteGoToService(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewData.DataSource = _goToServiceRepository.ReadServices(); + + 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/ProjectTransportation/ProjectTransportation/Forms/FormGoToServices.resx b/ProjectTransportation/ProjectTransportation/Forms/FormGoToServices.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormGoToServices.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/ProjectTransportation/ProjectTransportation/Forms/FormRouteList.Designer.cs b/ProjectTransportation/ProjectTransportation/Forms/FormRouteList.Designer.cs new file mode 100644 index 0000000..b10bd49 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormRouteList.Designer.cs @@ -0,0 +1,193 @@ +using static System.Net.Mime.MediaTypeNames; +using System.Windows.Forms; +using System.Xml.Linq; + +namespace ProjectTransportation.Forms +{ + partial class FormRouteList + { + /// + /// 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() + { + buttonCancel = new Button(); + buttonSave = new Button(); + labelStart = new Label(); + numericUpDownStartHour = new NumericUpDown(); + labelHours = new Label(); + labelMinutes = new Label(); + labelFinish = new Label(); + numericUpDownStartMin = new NumericUpDown(); + numericUpDownFinishMin = new NumericUpDown(); + numericUpDownFinishHour = new NumericUpDown(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStartHour).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStartMin).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownFinishMin).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownFinishHour).BeginInit(); + SuspendLayout(); + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(178, 134); + buttonCancel.Margin = new Padding(2, 2, 2, 2); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(90, 33); + buttonCancel.TabIndex = 15; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(42, 134); + buttonSave.Margin = new Padding(2, 2, 2, 2); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(100, 33); + buttonSave.TabIndex = 14; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // labelStart + // + labelStart.AutoSize = true; + labelStart.Location = new Point(21, 33); + labelStart.Margin = new Padding(2, 0, 2, 0); + labelStart.Name = "labelStart"; + labelStart.Size = new Size(117, 20); + labelStart.TabIndex = 8; + labelStart.Text = "Начало работы"; + // + // numericUpDownStartHour + // + numericUpDownStartHour.Location = new Point(155, 32); + numericUpDownStartHour.Margin = new Padding(2, 2, 2, 2); + numericUpDownStartHour.Maximum = new decimal(new int[] { 23, 0, 0, 0 }); + numericUpDownStartHour.Name = "numericUpDownStartHour"; + numericUpDownStartHour.Size = new Size(42, 27); + numericUpDownStartHour.TabIndex = 16; + numericUpDownStartHour.Value = new decimal(new int[] { 8, 0, 0, 0 }); + // + // labelHours + // + labelHours.AutoSize = true; + labelHours.Location = new Point(155, 6); + labelHours.Margin = new Padding(2, 0, 2, 0); + labelHours.Name = "labelHours"; + labelHours.Size = new Size(45, 20); + labelHours.TabIndex = 17; + labelHours.Text = "Часы"; + // + // labelMinutes + // + labelMinutes.AutoSize = true; + labelMinutes.Location = new Point(226, 6); + labelMinutes.Margin = new Padding(2, 0, 2, 0); + labelMinutes.Name = "labelMinutes"; + labelMinutes.Size = new Size(64, 20); + labelMinutes.TabIndex = 18; + labelMinutes.Text = "Минуты"; + // + // labelFinish + // + labelFinish.AutoSize = true; + labelFinish.Location = new Point(21, 81); + labelFinish.Margin = new Padding(2, 0, 2, 0); + labelFinish.Name = "labelFinish"; + labelFinish.Size = new Size(109, 20); + labelFinish.TabIndex = 19; + labelFinish.Text = "Конец работы"; + // + // numericUpDownStartMin + // + numericUpDownStartMin.Location = new Point(233, 32); + numericUpDownStartMin.Margin = new Padding(2, 2, 2, 2); + numericUpDownStartMin.Maximum = new decimal(new int[] { 59, 0, 0, 0 }); + numericUpDownStartMin.Name = "numericUpDownStartMin"; + numericUpDownStartMin.Size = new Size(42, 27); + numericUpDownStartMin.TabIndex = 20; + // + // numericUpDownFinishMin + // + numericUpDownFinishMin.Location = new Point(233, 80); + numericUpDownFinishMin.Margin = new Padding(2, 2, 2, 2); + numericUpDownFinishMin.Maximum = new decimal(new int[] { 59, 0, 0, 0 }); + numericUpDownFinishMin.Name = "numericUpDownFinishMin"; + numericUpDownFinishMin.Size = new Size(42, 27); + numericUpDownFinishMin.TabIndex = 22; + // + // numericUpDownFinishHour + // + numericUpDownFinishHour.Location = new Point(155, 80); + numericUpDownFinishHour.Margin = new Padding(2, 2, 2, 2); + numericUpDownFinishHour.Maximum = new decimal(new int[] { 23, 0, 0, 0 }); + numericUpDownFinishHour.Name = "numericUpDownFinishHour"; + numericUpDownFinishHour.Size = new Size(42, 27); + numericUpDownFinishHour.TabIndex = 21; + numericUpDownFinishHour.Value = new decimal(new int[] { 22, 0, 0, 0 }); + // + // FormRouteList + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(317, 177); + Controls.Add(numericUpDownFinishMin); + Controls.Add(numericUpDownFinishHour); + Controls.Add(numericUpDownStartMin); + Controls.Add(labelFinish); + Controls.Add(labelMinutes); + Controls.Add(labelHours); + Controls.Add(numericUpDownStartHour); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(labelStart); + Margin = new Padding(2, 2, 2, 2); + Name = "FormRouteList"; + StartPosition = FormStartPosition.CenterParent; + Text = "Маршрутный лист"; + ((System.ComponentModel.ISupportInitialize)numericUpDownStartHour).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStartMin).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownFinishMin).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownFinishHour).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button buttonCancel; + private Button buttonSave; + private Label labelStart; + private NumericUpDown numericUpDownStartHour; + private Label labelHours; + private Label labelMinutes; + private Label labelFinish; + private NumericUpDown numericUpDownStartMin; + private NumericUpDown numericUpDownFinishMin; + private NumericUpDown numericUpDownFinishHour; + } +} \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormRouteList.cs b/ProjectTransportation/ProjectTransportation/Forms/FormRouteList.cs new file mode 100644 index 0000000..337d7d9 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormRouteList.cs @@ -0,0 +1,73 @@ +using ProjectTransportation.Entities; +using ProjectTransportation.Repositories; +using ProjectTransportation.Entities; +using ProjectTransportation.Repositories; + +namespace ProjectTransportation.Forms +{ + public partial class FormRouteList : Form + { + private readonly IRouteListRepository _routeListRepository; + + private int? _routeListId; + + public int Id + { + set + { + try + { + var routeList = _routeListRepository.ReadRouteListById(value); + if (routeList == null) + { + throw new InvalidDataException(nameof(routeList)); + } + + numericUpDownStartHour.Value = routeList.Start.Hour; + numericUpDownStartMin.Value = routeList.Start.Minute; + numericUpDownFinishHour.Value = routeList.Finish.Hour; + numericUpDownFinishMin.Value = routeList.Finish.Minute; + _routeListId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormRouteList(IRouteListRepository routeListRepository) + { + InitializeComponent(); + _routeListRepository = routeListRepository ?? throw new ArgumentNullException(nameof(routeListRepository)); + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (_routeListId.HasValue) + { + _routeListRepository.UpdateRouteList(CreateRouteList(_routeListId.Value)); + } + + else + { + _routeListRepository.CreateRouteList(CreateRouteList(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private RouteList CreateRouteList(int id) => RouteList.CreateEntity(id, + new TimeOnly(Convert.ToInt32(numericUpDownStartHour.Value), Convert.ToInt32(numericUpDownStartMin.Value)), + new TimeOnly(Convert.ToInt32(numericUpDownFinishHour.Value), Convert.ToInt32(numericUpDownFinishMin.Value))); + } +} diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormRouteList.resx b/ProjectTransportation/ProjectTransportation/Forms/FormRouteList.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormRouteList.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/ProjectTransportation/ProjectTransportation/Forms/FormRouteLists.Designer.cs b/ProjectTransportation/ProjectTransportation/Forms/FormRouteLists.Designer.cs new file mode 100644 index 0000000..a3f8c2d --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormRouteLists.Designer.cs @@ -0,0 +1,137 @@ +using static System.Net.Mime.MediaTypeNames; +using System.Windows.Forms; +using System.Xml.Linq; + +namespace ProjectTransportation.Forms +{ + partial class FormRouteLists + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + dataGridViewData = new DataGridView(); + panelButtons = new Panel(); + buttonDelete = new Button(); + buttonUpdate = new Button(); + buttonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit(); + panelButtons.SuspendLayout(); + SuspendLayout(); + // + // dataGridViewData + // + dataGridViewData.AllowUserToAddRows = false; + dataGridViewData.AllowUserToDeleteRows = false; + dataGridViewData.AllowUserToResizeColumns = false; + dataGridViewData.AllowUserToResizeRows = false; + dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewData.Dock = DockStyle.Fill; + dataGridViewData.Location = new Point(0, 0); + dataGridViewData.Margin = new Padding(2, 2, 2, 2); + dataGridViewData.MultiSelect = false; + dataGridViewData.Name = "dataGridViewData"; + dataGridViewData.ReadOnly = true; + dataGridViewData.RowHeadersVisible = false; + dataGridViewData.RowHeadersWidth = 72; + dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewData.Size = new Size(563, 321); + dataGridViewData.TabIndex = 3; + // + // panelButtons + // + panelButtons.Controls.Add(buttonDelete); + panelButtons.Controls.Add(buttonUpdate); + panelButtons.Controls.Add(buttonAdd); + panelButtons.Dock = DockStyle.Right; + panelButtons.Location = new Point(563, 0); + panelButtons.Margin = new Padding(2, 2, 2, 2); + panelButtons.Name = "panelButtons"; + panelButtons.Size = new Size(131, 321); + panelButtons.TabIndex = 2; + // + // buttonDelete + // + buttonDelete.BackgroundImage = Properties.Resources.minus; + buttonDelete.BackgroundImageLayout = ImageLayout.Stretch; + buttonDelete.Location = new Point(33, 176); + buttonDelete.Margin = new Padding(2, 2, 2, 2); + buttonDelete.Name = "buttonDelete"; + buttonDelete.Size = new Size(67, 67); + buttonDelete.TabIndex = 2; + buttonDelete.UseVisualStyleBackColor = true; + buttonDelete.Click += ButtonDelete_Click; + // + // buttonUpdate + // + buttonUpdate.BackgroundImage = Properties.Resources.i; + buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpdate.Location = new Point(33, 97); + buttonUpdate.Margin = new Padding(2, 2, 2, 2); + buttonUpdate.Name = "buttonUpdate"; + buttonUpdate.Size = new Size(67, 67); + buttonUpdate.TabIndex = 1; + buttonUpdate.UseVisualStyleBackColor = true; + buttonUpdate.Click += ButtonUpdate_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.plus; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(33, 19); + buttonAdd.Margin = new Padding(2, 2, 2, 2); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(67, 67); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // FormRouteLists + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(694, 321); + Controls.Add(dataGridViewData); + Controls.Add(panelButtons); + Margin = new Padding(2, 2, 2, 2); + Name = "FormRouteLists"; + StartPosition = FormStartPosition.CenterParent; + Text = "Маршрутные листы"; + Load += FormRouteLists_Load; + ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); + panelButtons.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridViewData; + private Panel panelButtons; + private Button buttonDelete; + private Button buttonUpdate; + private Button buttonAdd; + } +} \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormRouteLists.cs b/ProjectTransportation/ProjectTransportation/Forms/FormRouteLists.cs new file mode 100644 index 0000000..fa496e9 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormRouteLists.cs @@ -0,0 +1,104 @@ +using ProjectTransportation.Repositories; +using ProjectTransportation.Forms; +using ProjectTransportation.Repositories; +using Unity; + +namespace ProjectTransportation.Forms +{ + public partial class FormRouteLists : Form + { + private readonly IUnityContainer _container; + + private readonly IRouteListRepository _routeListRepository; + + public FormRouteLists(IUnityContainer container, IRouteListRepository routeListRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _routeListRepository = routeListRepository ?? throw new ArgumentNullException(nameof(routeListRepository)); + } + + private void FormRouteLists_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonUpdate_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonDelete_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _routeListRepository.DeleteRouteList(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewData.DataSource = _routeListRepository.ReadRouteLists(); + + 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/ProjectTransportation/ProjectTransportation/Forms/FormRouteLists.resx b/ProjectTransportation/ProjectTransportation/Forms/FormRouteLists.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormRouteLists.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/ProjectTransportation/ProjectTransportation/Forms/FormStartingShift.Designer.cs b/ProjectTransportation/ProjectTransportation/Forms/FormStartingShift.Designer.cs new file mode 100644 index 0000000..b50609f --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormStartingShift.Designer.cs @@ -0,0 +1,216 @@ +using static System.Net.Mime.MediaTypeNames; +using System.Windows.Forms; +using System.Xml.Linq; + +namespace ProjectTransportation.Forms +{ + partial class FormStartingShift + { + /// + /// 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() + { + labelRouteList = new Label(); + comboBoxRouteList = new ComboBox(); + comboBoxBus = new ComboBox(); + labelBus = new Label(); + buttonCancel = new Button(); + buttonSave = new Button(); + groupBoxEmployees = new GroupBox(); + dataGridViewEmployees = new DataGridView(); + ColumnEmployees = new DataGridViewComboBoxColumn(); + ColumnWorkHours = new DataGridViewTextBoxColumn(); + labelDate = new Label(); + dateTimePickerShiftDate = new DateTimePicker(); + groupBoxEmployees.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewEmployees).BeginInit(); + SuspendLayout(); + // + // labelRouteList + // + labelRouteList.AutoSize = true; + labelRouteList.Location = new Point(24, 65); + labelRouteList.Margin = new Padding(2, 0, 2, 0); + labelRouteList.Name = "labelRouteList"; + labelRouteList.Size = new Size(73, 20); + labelRouteList.TabIndex = 0; + labelRouteList.Text = "Маршрут"; + // + // comboBoxRouteList + // + comboBoxRouteList.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxRouteList.FormattingEnabled = true; + comboBoxRouteList.Location = new Point(122, 63); + comboBoxRouteList.Margin = new Padding(2, 2, 2, 2); + comboBoxRouteList.Name = "comboBoxRouteList"; + comboBoxRouteList.Size = new Size(165, 28); + comboBoxRouteList.TabIndex = 1; + // + // comboBoxBus + // + comboBoxBus.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxBus.FormattingEnabled = true; + comboBoxBus.Location = new Point(122, 105); + comboBoxBus.Margin = new Padding(2, 2, 2, 2); + comboBoxBus.Name = "comboBoxBus"; + comboBoxBus.Size = new Size(165, 28); + comboBoxBus.TabIndex = 5; + // + // labelBus + // + labelBus.AutoSize = true; + labelBus.Location = new Point(24, 107); + labelBus.Margin = new Padding(2, 0, 2, 0); + labelBus.Name = "labelBus"; + labelBus.Size = new Size(65, 20); + labelBus.TabIndex = 4; + labelBus.Text = "Автобус"; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(330, 342); + buttonCancel.Margin = new Padding(2, 2, 2, 2); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(90, 33); + buttonCancel.TabIndex = 17; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(45, 342); + buttonSave.Margin = new Padding(2, 2, 2, 2); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(109, 33); + buttonSave.TabIndex = 16; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // groupBoxEmployees + // + groupBoxEmployees.Controls.Add(dataGridViewEmployees); + groupBoxEmployees.Location = new Point(24, 146); + groupBoxEmployees.Margin = new Padding(2, 2, 2, 2); + groupBoxEmployees.Name = "groupBoxEmployees"; + groupBoxEmployees.Padding = new Padding(2, 2, 2, 2); + groupBoxEmployees.Size = new Size(356, 174); + groupBoxEmployees.TabIndex = 18; + groupBoxEmployees.TabStop = false; + groupBoxEmployees.Text = "Сотрудники"; + // + // dataGridViewEmployees + // + dataGridViewEmployees.AllowUserToResizeColumns = false; + dataGridViewEmployees.AllowUserToResizeRows = false; + dataGridViewEmployees.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewEmployees.Columns.AddRange(new DataGridViewColumn[] { ColumnEmployees, ColumnWorkHours }); + dataGridViewEmployees.Dock = DockStyle.Fill; + dataGridViewEmployees.Location = new Point(2, 22); + dataGridViewEmployees.Margin = new Padding(2, 2, 2, 2); + dataGridViewEmployees.MultiSelect = false; + dataGridViewEmployees.Name = "dataGridViewEmployees"; + dataGridViewEmployees.RowHeadersVisible = false; + dataGridViewEmployees.RowHeadersWidth = 72; + dataGridViewEmployees.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewEmployees.Size = new Size(352, 150); + dataGridViewEmployees.TabIndex = 0; + // + // ColumnEmployees + // + ColumnEmployees.HeaderText = "Работник"; + ColumnEmployees.MinimumWidth = 9; + ColumnEmployees.Name = "ColumnEmployees"; + ColumnEmployees.Width = 175; + // + // ColumnWorkHours + // + ColumnWorkHours.HeaderText = "Часы работы"; + ColumnWorkHours.MinimumWidth = 9; + ColumnWorkHours.Name = "ColumnWorkHours"; + ColumnWorkHours.Width = 175; + // + // labelDate + // + labelDate.AutoSize = true; + labelDate.Location = new Point(24, 21); + labelDate.Margin = new Padding(2, 0, 2, 0); + labelDate.Name = "labelDate"; + labelDate.Size = new Size(41, 20); + labelDate.TabIndex = 27; + labelDate.Text = "Дата"; + // + // dateTimePickerShiftDate + // + dateTimePickerShiftDate.Enabled = false; + dateTimePickerShiftDate.Location = new Point(119, 19); + dateTimePickerShiftDate.Margin = new Padding(2, 2, 2, 2); + dateTimePickerShiftDate.Name = "dateTimePickerShiftDate"; + dateTimePickerShiftDate.Size = new Size(166, 27); + dateTimePickerShiftDate.TabIndex = 26; + // + // FormStartingShift + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(463, 397); + Controls.Add(labelDate); + Controls.Add(dateTimePickerShiftDate); + Controls.Add(groupBoxEmployees); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(comboBoxBus); + Controls.Add(labelBus); + Controls.Add(comboBoxRouteList); + Controls.Add(labelRouteList); + Margin = new Padding(2, 2, 2, 2); + Name = "FormStartingShift"; + StartPosition = FormStartPosition.CenterParent; + Text = "Начало смены"; + groupBoxEmployees.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewEmployees).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label labelRouteList; + private ComboBox comboBoxRouteList; + private ComboBox comboBoxBus; + private Label labelBus; + private Button buttonCancel; + private Button buttonSave; + private GroupBox groupBoxEmployees; + private DataGridView dataGridViewEmployees; + private Label labelDate; + private DateTimePicker dateTimePickerShiftDate; + private DataGridViewComboBoxColumn ColumnEmployees; + private DataGridViewTextBoxColumn ColumnWorkHours; + } +} \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormStartingShift.cs b/ProjectTransportation/ProjectTransportation/Forms/FormStartingShift.cs new file mode 100644 index 0000000..bb6ba8e --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormStartingShift.cs @@ -0,0 +1,72 @@ +using ProjectTransportation.Entities; +using ProjectTransportation.Repositories; +using ProjectTransportation.Entities; +using ProjectTransportation.Repositories; + +namespace ProjectTransportation.Forms +{ + public partial class FormStartingShift : Form + { + private readonly IStartingShiftRepository _startingShiftRepository; + public FormStartingShift(IStartingShiftRepository startingShiftRepository, + IRouteListRepository routeListRepository, + IBusRepository busRepository, + IEmployeeRepository employeeRepository) + { + InitializeComponent(); + _startingShiftRepository = startingShiftRepository ?? throw new ArgumentNullException(nameof(startingShiftRepository)); + comboBoxRouteList.DataSource = routeListRepository.ReadRouteLists(); + comboBoxRouteList.DisplayMember = "Id"; + comboBoxRouteList.ValueMember = "Id"; + comboBoxBus.DataSource = busRepository.ReadBuses(); + comboBoxBus.DisplayMember = "LicensePlate"; + comboBoxBus.ValueMember = "Id"; + ColumnEmployees.DataSource = employeeRepository.ReadEmployees(); + ColumnEmployees.DisplayMember = "FirstName"; + ColumnEmployees.ValueMember = "Id"; + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (dataGridViewEmployees.RowCount < 1 || + comboBoxRouteList.SelectedIndex < 0 || + comboBoxBus.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля"); + } + + _startingShiftRepository.CreateStartingShift(StartingShift.CreateOperation(0, + (int)comboBoxRouteList.SelectedValue!, + (int)comboBoxBus.SelectedValue!, + CreateListStartingShiftEmployeeFromDataGrid())); + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private List CreateListStartingShiftEmployeeFromDataGrid() + { + var list = new List(); + foreach (DataGridViewRow row in dataGridViewEmployees.Rows) + { + if (row.Cells["ColumnFeed"].Value == null || + row.Cells["ColumnCount"].Value == null) + { + continue; + } + list.Add(StartingShiftEmployee.CreateElement(0, + Convert.ToInt32(row.Cells["ColumnEmployees"].Value), + Convert.ToInt32(row.Cells["ColumnWorkHours"].Value))); + } + return list; + } + } +} diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormStartingShift.resx b/ProjectTransportation/ProjectTransportation/Forms/FormStartingShift.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormStartingShift.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/ProjectTransportation/ProjectTransportation/Forms/FormStartingShifts.Designer.cs b/ProjectTransportation/ProjectTransportation/Forms/FormStartingShifts.Designer.cs new file mode 100644 index 0000000..3228efd --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormStartingShifts.Designer.cs @@ -0,0 +1,107 @@ +using static System.Net.Mime.MediaTypeNames; +using System.Windows.Forms; +using System.Xml.Linq; + +namespace ProjectTransportation.Forms +{ + partial class FormStartingShifts + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + dataGridViewData = new DataGridView(); + panelButtons = new Panel(); + buttonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit(); + panelButtons.SuspendLayout(); + SuspendLayout(); + // + // dataGridViewData + // + dataGridViewData.AllowUserToAddRows = false; + dataGridViewData.AllowUserToDeleteRows = false; + dataGridViewData.AllowUserToResizeColumns = false; + dataGridViewData.AllowUserToResizeRows = false; + dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewData.Dock = DockStyle.Fill; + dataGridViewData.Location = new Point(0, 0); + dataGridViewData.Margin = new Padding(2, 2, 2, 2); + dataGridViewData.MultiSelect = false; + dataGridViewData.Name = "dataGridViewData"; + dataGridViewData.ReadOnly = true; + dataGridViewData.RowHeadersVisible = false; + dataGridViewData.RowHeadersWidth = 72; + dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewData.Size = new Size(740, 321); + dataGridViewData.TabIndex = 5; + // + // panelButtons + // + panelButtons.Controls.Add(buttonAdd); + panelButtons.Dock = DockStyle.Right; + panelButtons.Location = new Point(740, 0); + panelButtons.Margin = new Padding(2, 2, 2, 2); + panelButtons.Name = "panelButtons"; + panelButtons.Size = new Size(131, 321); + panelButtons.TabIndex = 4; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.plus; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(33, 19); + buttonAdd.Margin = new Padding(2, 2, 2, 2); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(67, 67); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // FormStartingShifts + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(871, 321); + Controls.Add(dataGridViewData); + Controls.Add(panelButtons); + Margin = new Padding(2, 2, 2, 2); + Name = "FormStartingShifts"; + StartPosition = FormStartPosition.CenterParent; + Text = "Смены"; + Load += FormStartingShifts_Load; + ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); + panelButtons.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridViewData; + private Panel panelButtons; + private Button buttonAdd; + } +} \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormStartingShifts.cs b/ProjectTransportation/ProjectTransportation/Forms/FormStartingShifts.cs new file mode 100644 index 0000000..79a3b82 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormStartingShifts.cs @@ -0,0 +1,46 @@ +using ProjectTransportation.Repositories; +using ProjectTransportation.Forms; +using ProjectTransportation.Repositories; +using Unity; + +namespace ProjectTransportation.Forms; + +public partial class FormStartingShifts : Form +{ + private readonly IUnityContainer _container; + private readonly IStartingShiftRepository _startingShiftRepository; + + public FormStartingShifts(IUnityContainer container, IStartingShiftRepository startingShiftRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _startingShiftRepository = startingShiftRepository ?? throw new ArgumentNullException(nameof(startingShiftRepository)); + } + + private void FormStartingShifts_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 LoadList() => dataGridViewData.DataSource = _startingShiftRepository.ReadShifts(); +} diff --git a/ProjectTransportation/ProjectTransportation/Forms/FormStartingShifts.resx b/ProjectTransportation/ProjectTransportation/Forms/FormStartingShifts.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Forms/FormStartingShifts.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/ProjectTransportation/ProjectTransportation/Program.cs b/ProjectTransportation/ProjectTransportation/Program.cs index cd641c2..674438e 100644 --- a/ProjectTransportation/ProjectTransportation/Program.cs +++ b/ProjectTransportation/ProjectTransportation/Program.cs @@ -1,3 +1,8 @@ +using ProjectTransportation.Repositories.Implementations; +using ProjectTransportation.Repositories; +using Unity.Lifetime; +using Unity; + namespace ProjectTransportation { internal static class Program @@ -11,7 +16,20 @@ namespace ProjectTransportation // 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(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + + return container; } } } \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/ProjectTransportation.csproj b/ProjectTransportation/ProjectTransportation/ProjectTransportation.csproj index e1a0735..e32799a 100644 --- a/ProjectTransportation/ProjectTransportation/ProjectTransportation.csproj +++ b/ProjectTransportation/ProjectTransportation/ProjectTransportation.csproj @@ -8,4 +8,23 @@ enable + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Properties/Resources.Designer.cs b/ProjectTransportation/ProjectTransportation/Properties/Resources.Designer.cs new file mode 100644 index 0000000..813f698 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Properties/Resources.Designer.cs @@ -0,0 +1,123 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ProjectTransportation.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("ProjectTransportation.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 _1 { + get { + object obj = ResourceManager.GetObject("1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap i { + get { + object obj = ResourceManager.GetObject("i", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap minus { + get { + object obj = ResourceManager.GetObject("minus", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap plus { + get { + object obj = ResourceManager.GetObject("plus", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap plus1 { + get { + object obj = ResourceManager.GetObject("plus1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap plus2 { + get { + object obj = ResourceManager.GetObject("plus2", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/ProjectTransportation/ProjectTransportation/Properties/Resources.resx b/ProjectTransportation/ProjectTransportation/Properties/Resources.resx new file mode 100644 index 0000000..50542f5 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Properties/Resources.resx @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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\minus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\plus.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\1.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\i.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\plus.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\plus.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Repositories/IBusRepository.cs b/ProjectTransportation/ProjectTransportation/Repositories/IBusRepository.cs new file mode 100644 index 0000000..aec17a0 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Repositories/IBusRepository.cs @@ -0,0 +1,21 @@ +using ProjectTransportation.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectTransportation.Repositories; + +public interface IBusRepository +{ + IEnumerable ReadBuses(); + + Bus ReadBusById(int busId); + + void CreateBus(Bus bus); + + void UpdateBus(Bus bus); + + void DeleteBus(int id); +} diff --git a/ProjectTransportation/ProjectTransportation/Repositories/IEmployeeRepository.cs b/ProjectTransportation/ProjectTransportation/Repositories/IEmployeeRepository.cs new file mode 100644 index 0000000..60ac07c --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Repositories/IEmployeeRepository.cs @@ -0,0 +1,20 @@ +using ProjectTransportation.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectTransportation.Repositories; +public interface IEmployeeRepository +{ + IEnumerable ReadEmployees(); + + Employee ReadEmployeeById(int employeeId); + + void CreateEmployee(Employee employee); + + void UpdateEmployee(Employee employee); + + void DeleteEmployee(int id); +} diff --git a/ProjectTransportation/ProjectTransportation/Repositories/IGoToServiceRepository.cs b/ProjectTransportation/ProjectTransportation/Repositories/IGoToServiceRepository.cs new file mode 100644 index 0000000..183021f --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Repositories/IGoToServiceRepository.cs @@ -0,0 +1,14 @@ +using ProjectTransportation.Entities.Enums; +using ProjectTransportation.Entities; + +namespace ProjectTransportation.Repositories; + +public interface IGoToServiceRepository +{ + IEnumerable ReadServices(DateTime? dateFrom = null, DateTime? dateTo = null, + BrokenElements BrokenElements = BrokenElements.None, int? price = null, int? busId = null); + + void DeleteGoToService(int id); + + void CreateGoToService(GoToService goToService); +} diff --git a/ProjectTransportation/ProjectTransportation/Repositories/IRouteListRepository.cs b/ProjectTransportation/ProjectTransportation/Repositories/IRouteListRepository.cs new file mode 100644 index 0000000..4bd9733 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Repositories/IRouteListRepository.cs @@ -0,0 +1,20 @@ +using ProjectTransportation.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectTransportation.Repositories; +public interface IRouteListRepository +{ + IEnumerable ReadRouteLists(); + + RouteList ReadRouteListById(int routeListId); + + void CreateRouteList(RouteList routeList); + + void UpdateRouteList(RouteList routeList); + + void DeleteRouteList(int id); +} \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Repositories/IStartingShiftRepository.cs b/ProjectTransportation/ProjectTransportation/Repositories/IStartingShiftRepository.cs new file mode 100644 index 0000000..14643d7 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Repositories/IStartingShiftRepository.cs @@ -0,0 +1,15 @@ +using ProjectTransportation.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectTransportation.Repositories; +public interface IStartingShiftRepository +{ + IEnumerable ReadShifts(DateTime? dateFrom = null, DateTime? dateTo = null, int? routeListId = null, + int? employeeId = null, int? busId = null); + + void CreateStartingShift(StartingShift startingShift); +} \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Repositories/Implementations/BusRepository.cs b/ProjectTransportation/ProjectTransportation/Repositories/Implementations/BusRepository.cs new file mode 100644 index 0000000..21ff809 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Repositories/Implementations/BusRepository.cs @@ -0,0 +1,33 @@ +using ProjectTransportation.Entities; +using ProjectTransportation.Entities.Enums; + +namespace ProjectTransportation.Repositories.Implementations; + +public class BusRepository : IBusRepository +{ + public void CreateBus(Bus bus) + { + + } + + public void DeleteBus(int id) + { + + } + + public Bus ReadBusById(int busId) + { + return Bus.CreateEntity(0, string.Empty, string.Empty); + } + + public IEnumerable ReadBuses() + { + return []; + } + + public void UpdateBus(Bus bus) + { + + } +} + diff --git a/ProjectTransportation/ProjectTransportation/Repositories/Implementations/EmployeeRepository.cs b/ProjectTransportation/ProjectTransportation/Repositories/Implementations/EmployeeRepository.cs new file mode 100644 index 0000000..51d7865 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Repositories/Implementations/EmployeeRepository.cs @@ -0,0 +1,32 @@ +using ProjectTransportation.Entities; +using ProjectTransportation.Entities.Enums; + +namespace ProjectTransportation.Repositories.Implementations; + +public class EmployeeRepository : IEmployeeRepository +{ + public void CreateEmployee(Employee employee) + { + + } + + public void DeleteEmployee(int id) + { + + } + + public Employee ReadEmployeeById(int employeeId) + { + return Employee.CreateEntity(0, string.Empty, string.Empty, EmployeePost.None); + } + + public IEnumerable ReadEmployees() + { + return []; + } + + public void UpdateEmployee(Employee employee) + { + + } +} \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Repositories/Implementations/GoToServiceRepository.cs b/ProjectTransportation/ProjectTransportation/Repositories/Implementations/GoToServiceRepository.cs new file mode 100644 index 0000000..ccb5164 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Repositories/Implementations/GoToServiceRepository.cs @@ -0,0 +1,21 @@ +using ProjectTransportation.Entities; +using ProjectTransportation.Entities.Enums; + +namespace ProjectTransportation.Repositories.Implementations; +public class GoToServiceRepository : IGoToServiceRepository +{ + public void CreateGoToService(GoToService goToService) + { + + } + + public void DeleteGoToService(int id) + { + + } + + public IEnumerable ReadServices(DateTime? dateFrom = null, DateTime? dateTo = null, BrokenElements BrokenElements = BrokenElements.None, int? price = null, int? busId = null) + { + return []; + } +} diff --git a/ProjectTransportation/ProjectTransportation/Repositories/Implementations/RouteListRepository.cs b/ProjectTransportation/ProjectTransportation/Repositories/Implementations/RouteListRepository.cs new file mode 100644 index 0000000..0d33b40 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Repositories/Implementations/RouteListRepository.cs @@ -0,0 +1,30 @@ +using ProjectTransportation.Entities; + +namespace ProjectTransportation.Repositories.Implementations; +public class RouteListRepository : IRouteListRepository +{ + public void CreateRouteList(RouteList routeList) + { + + } + + public void DeleteRouteList(int id) + { + + } + + public RouteList ReadRouteListById(int routeListId) + { + return RouteList.CreateEntity(0, new TimeOnly(0, 0), new TimeOnly(0, 0)); + } + + public IEnumerable ReadRouteLists() + { + return []; + } + + public void UpdateRouteList(RouteList routeList) + { + + } +} diff --git a/ProjectTransportation/ProjectTransportation/Repositories/Implementations/StartingShiftRepository.cs b/ProjectTransportation/ProjectTransportation/Repositories/Implementations/StartingShiftRepository.cs new file mode 100644 index 0000000..29fa177 --- /dev/null +++ b/ProjectTransportation/ProjectTransportation/Repositories/Implementations/StartingShiftRepository.cs @@ -0,0 +1,21 @@ +using ProjectTransportation.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectTransportation.Repositories.Implementations; +public class StartingShiftRepository : IStartingShiftRepository +{ + public void CreateStartingShift(StartingShift startingShift) + { + + } + + public IEnumerable ReadShifts(DateTime? dateFrom = null, DateTime? dateTo = null, + int? routeListId = null, int? employeeId = null, int? busId = null) + { + return []; + } +} \ No newline at end of file diff --git a/ProjectTransportation/ProjectTransportation/Resources/1.jpg b/ProjectTransportation/ProjectTransportation/Resources/1.jpg new file mode 100644 index 0000000..4d326ad Binary files /dev/null and b/ProjectTransportation/ProjectTransportation/Resources/1.jpg differ diff --git a/ProjectTransportation/ProjectTransportation/Resources/i.png b/ProjectTransportation/ProjectTransportation/Resources/i.png new file mode 100644 index 0000000..5b6bbcd Binary files /dev/null and b/ProjectTransportation/ProjectTransportation/Resources/i.png differ diff --git a/ProjectTransportation/ProjectTransportation/Resources/minus.png b/ProjectTransportation/ProjectTransportation/Resources/minus.png new file mode 100644 index 0000000..ca6763f Binary files /dev/null and b/ProjectTransportation/ProjectTransportation/Resources/minus.png differ diff --git a/ProjectTransportation/ProjectTransportation/Resources/plus.jpg b/ProjectTransportation/ProjectTransportation/Resources/plus.jpg new file mode 100644 index 0000000..9a2bb36 Binary files /dev/null and b/ProjectTransportation/ProjectTransportation/Resources/plus.jpg differ