diff --git a/.gitignore b/.gitignore index ca1c7a3..a2517d3 100644 --- a/.gitignore +++ b/.gitignore @@ -398,3 +398,7 @@ FodyWeavers.xsd # JetBrains Rider *.sln.iml +/78.jpg +/edit.png +/minus.jpg +/plus.jpg diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Bus.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Bus.cs new file mode 100644 index 0000000..ed89d0c --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Bus.cs @@ -0,0 +1,22 @@ +using ProjectPassengerTransportation.Entities.Enums; + +namespace ProjectPassengerTransportation.Entities; + +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/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Employee.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Employee.cs new file mode 100644 index 0000000..43cdf5f --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Employee.cs @@ -0,0 +1,25 @@ +using ProjectPassengerTransportation.Entities.Enums; + +namespace ProjectPassengerTransportation.Entities; + +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 + }; + } +} diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Enums/BrokenElements.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Enums/BrokenElements.cs new file mode 100644 index 0000000..18585b5 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Enums/BrokenElements.cs @@ -0,0 +1,15 @@ +namespace ProjectPassengerTransportation.Entities.Enums; + +[Flags] +public enum BrokenElements +{ + None = 0, + + Wheels = 1, + + Headlights = 2, + + Engine = 4, + + Transmission = 8 +} diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Enums/EmployeePost.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Enums/EmployeePost.cs new file mode 100644 index 0000000..b16f724 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Enums/EmployeePost.cs @@ -0,0 +1,14 @@ +namespace ProjectPassengerTransportation.Entities.Enums; + +public enum EmployeePost +{ + None = 0, + + Administration = 1, + + Engineer = 2, + + Driver = 3, + + Conductor = 4 +} \ No newline at end of file diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/GoToService.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/GoToService.cs new file mode 100644 index 0000000..1b56cec --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/GoToService.cs @@ -0,0 +1,28 @@ +using ProjectPassengerTransportation.Entities.Enums; + +namespace ProjectPassengerTransportation.Entities; + +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/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/RouteList.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/RouteList.cs new file mode 100644 index 0000000..65b8e3c --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/RouteList.cs @@ -0,0 +1,20 @@ +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/StartingShift.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/StartingShift.cs new file mode 100644 index 0000000..cfd130e --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/StartingShift.cs @@ -0,0 +1,27 @@ +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/StartingShiftEmployee.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/StartingShiftEmployee.cs new file mode 100644 index 0000000..f1735ba --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/StartingShiftEmployee.cs @@ -0,0 +1,20 @@ +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Form1.Designer.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Form1.Designer.cs deleted file mode 100644 index deb831b..0000000 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace ProjectPassengerTransportation -{ - 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/ProjectPassengerTransportation/ProjectPassengerTransportation/Form1.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Form1.cs deleted file mode 100644 index deecb17..0000000 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ProjectPassengerTransportation -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/FormPassengerTransportation.Designer.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/FormPassengerTransportation.Designer.cs new file mode 100644 index 0000000..bdf115b --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/FormPassengerTransportation.Designer.cs @@ -0,0 +1,138 @@ +namespace ProjectPassengerTransportation +{ + partial class FormPassengerTransportation + { + /// + /// 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.Size = new Size(976, 38); + menuStrip1.TabIndex = 0; + menuStrip1.Text = "menuStrip1"; + // + // справочникиToolStripMenuItem + // + справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { EmployeesToolStripMenuItem, BusesToolStripMenuItem, RouteListsToolStripMenuItem }); + справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; + справочникиToolStripMenuItem.Size = new Size(160, 34); + справочникиToolStripMenuItem.Text = "Справочники"; + // + // EmployeesToolStripMenuItem + // + EmployeesToolStripMenuItem.Name = "EmployeesToolStripMenuItem"; + EmployeesToolStripMenuItem.Size = new Size(236, 40); + EmployeesToolStripMenuItem.Text = "Работники"; + EmployeesToolStripMenuItem.Click += EmployeesToolStripMenuItem_Click; + // + // BusesToolStripMenuItem + // + BusesToolStripMenuItem.Name = "BusesToolStripMenuItem"; + BusesToolStripMenuItem.Size = new Size(236, 40); + BusesToolStripMenuItem.Text = "Автобусы"; + BusesToolStripMenuItem.Click += BusesToolStripMenuItem_Click; + // + // RouteListsToolStripMenuItem + // + RouteListsToolStripMenuItem.Name = "RouteListsToolStripMenuItem"; + RouteListsToolStripMenuItem.Size = new Size(236, 40); + RouteListsToolStripMenuItem.Text = "Маршруты"; + RouteListsToolStripMenuItem.Click += RouteListsToolStripMenuItem_Click; + // + // операцииToolStripMenuItem + // + операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { StartingShiftsToolStripMenuItem, GoToServicesToolStripMenuItem }); + операцииToolStripMenuItem.Name = "операцииToolStripMenuItem"; + операцииToolStripMenuItem.Size = new Size(130, 34); + операцииToolStripMenuItem.Text = "Операции"; + // + // StartingShiftsToolStripMenuItem + // + StartingShiftsToolStripMenuItem.Name = "StartingShiftsToolStripMenuItem"; + StartingShiftsToolStripMenuItem.Size = new Size(315, 40); + StartingShiftsToolStripMenuItem.Text = "Начало смены"; + StartingShiftsToolStripMenuItem.Click += StartingShiftsToolStripMenuItem_Click; + // + // GoToServicesToolStripMenuItem + // + GoToServicesToolStripMenuItem.Name = "GoToServicesToolStripMenuItem"; + GoToServicesToolStripMenuItem.Size = new Size(315, 40); + GoToServicesToolStripMenuItem.Text = "Тех. обслуживание"; + GoToServicesToolStripMenuItem.Click += GoToServicesToolStripMenuItem_Click; + // + // отчётыToolStripMenuItem + // + отчётыToolStripMenuItem.Name = "отчётыToolStripMenuItem"; + отчётыToolStripMenuItem.Size = new Size(103, 34); + отчётыToolStripMenuItem.Text = "Отчёты"; + // + // FormPassengerTransportation + // + AutoScaleDimensions = new SizeF(12F, 30F); + AutoScaleMode = AutoScaleMode.Font; + BackgroundImage = Properties.Resources._78; + BackgroundImageLayout = ImageLayout.Stretch; + ClientSize = new Size(976, 636); + Controls.Add(menuStrip1); + MainMenuStrip = menuStrip1; + Name = "FormPassengerTransportation"; + 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/ProjectPassengerTransportation/ProjectPassengerTransportation/FormPassengerTransportation.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/FormPassengerTransportation.cs new file mode 100644 index 0000000..764a3e8 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/FormPassengerTransportation.cs @@ -0,0 +1,76 @@ +using ProjectPassengerTransportation.Forms; +using Unity; + +namespace ProjectPassengerTransportation +{ + public partial class FormPassengerTransportation : Form + { + private readonly IUnityContainer _container; + + public FormPassengerTransportation(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/ProjectPassengerTransportation/ProjectPassengerTransportation/FormPassengerTransportation.resx b/ProjectPassengerTransportation/ProjectPassengerTransportation/FormPassengerTransportation.resx new file mode 100644 index 0000000..a0623c8 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/FormPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBus.Designer.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBus.Designer.cs new file mode 100644 index 0000000..943e85e --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBus.Designer.cs @@ -0,0 +1,122 @@ +namespace ProjectPassengerTransportation.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(27, 34); + labelLicensePlate.Name = "labelLicensePlate"; + labelLicensePlate.Size = new Size(107, 30); + labelLicensePlate.TabIndex = 0; + labelLicensePlate.Text = "Госномер"; + // + // textBoxLicensePlate + // + textBoxLicensePlate.Location = new Point(231, 31); + textBoxLicensePlate.MaxLength = 10; + textBoxLicensePlate.Name = "textBoxLicensePlate"; + textBoxLicensePlate.Size = new Size(240, 35); + textBoxLicensePlate.TabIndex = 1; + // + // labelBusTypeName + // + labelBusTypeName.AutoSize = true; + labelBusTypeName.Location = new Point(27, 99); + labelBusTypeName.Name = "labelBusTypeName"; + labelBusTypeName.Size = new Size(180, 30); + labelBusTypeName.TabIndex = 2; + labelBusTypeName.Text = "Модель автобуса"; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(72, 164); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(135, 50); + buttonSave.TabIndex = 6; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(284, 164); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(135, 50); + buttonCancel.TabIndex = 7; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // textBoxModel + // + textBoxModel.Location = new Point(231, 96); + textBoxModel.MaxLength = 10; + textBoxModel.Name = "textBoxModel"; + textBoxModel.Size = new Size(240, 35); + textBoxModel.TabIndex = 8; + // + // FormBus + // + AutoScaleDimensions = new SizeF(12F, 30F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(506, 226); + Controls.Add(textBoxModel); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(labelBusTypeName); + Controls.Add(textBoxLicensePlate); + Controls.Add(labelLicensePlate); + 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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBus.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBus.cs new file mode 100644 index 0000000..19f92c7 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBus.cs @@ -0,0 +1,73 @@ +using ProjectPassengerTransportation.Entities; +using ProjectPassengerTransportation.Entities.Enums; +using ProjectPassengerTransportation.Repositories; + +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Form1.resx b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBus.resx similarity index 93% rename from ProjectPassengerTransportation/ProjectPassengerTransportation/Form1.resx rename to ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBus.resx index 1af7de1..af32865 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Form1.resx +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBus.resx @@ -1,17 +1,17 @@  - diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBuses.Designer.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBuses.Designer.cs new file mode 100644 index 0000000..0c253b6 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBuses.Designer.cs @@ -0,0 +1,127 @@ +namespace ProjectPassengerTransportation.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() + { + 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(845, 0); + panelButtons.Name = "panelButtons"; + panelButtons.Size = new Size(196, 481); + panelButtons.TabIndex = 0; + // + // buttonDelete + // + buttonDelete.BackgroundImage = Properties.Resources.minus; + buttonDelete.BackgroundImageLayout = ImageLayout.Stretch; + buttonDelete.Location = new Point(50, 264); + buttonDelete.Name = "buttonDelete"; + buttonDelete.Size = new Size(100, 100); + buttonDelete.TabIndex = 2; + buttonDelete.UseVisualStyleBackColor = true; + buttonDelete.Click += ButtonDelete_Click; + // + // buttonUpdate + // + buttonUpdate.BackgroundImage = Properties.Resources.edit; + buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpdate.Location = new Point(50, 145); + buttonUpdate.Name = "buttonUpdate"; + buttonUpdate.Size = new Size(100, 100); + buttonUpdate.TabIndex = 1; + buttonUpdate.UseVisualStyleBackColor = true; + buttonUpdate.Click += ButtonUpdate_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.plus; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(50, 29); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(100, 100); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridViewData + // + dataGridViewData.AllowUserToAddRows = false; + dataGridViewData.AllowUserToDeleteRows = false; + dataGridViewData.AllowUserToResizeColumns = false; + dataGridViewData.AllowUserToResizeRows = false; + dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewData.Dock = DockStyle.Fill; + dataGridViewData.Location = new Point(0, 0); + dataGridViewData.MultiSelect = false; + dataGridViewData.Name = "dataGridViewData"; + dataGridViewData.ReadOnly = true; + dataGridViewData.RowHeadersVisible = false; + dataGridViewData.RowHeadersWidth = 72; + dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewData.Size = new Size(845, 481); + dataGridViewData.TabIndex = 1; + // + // FormBuses + // + AutoScaleDimensions = new SizeF(12F, 30F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1041, 481); + Controls.Add(dataGridViewData); + Controls.Add(panelButtons); + 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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBuses.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBuses.cs new file mode 100644 index 0000000..cdd40cb --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBuses.cs @@ -0,0 +1,102 @@ +using ProjectPassengerTransportation.Repositories; +using Unity; + +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBuses.resx b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBuses.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBuses.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployee.Designer.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployee.Designer.cs new file mode 100644 index 0000000..1ffd92b --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployee.Designer.cs @@ -0,0 +1,145 @@ +namespace ProjectPassengerTransportation.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(232, 166); + comboBoxPost.Name = "comboBoxPost"; + comboBoxPost.Size = new Size(240, 38); + comboBoxPost.TabIndex = 0; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(297, 224); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(135, 50); + buttonCancel.TabIndex = 14; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(80, 224); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(135, 50); + buttonSave.TabIndex = 13; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // textBoxLastName + // + textBoxLastName.Location = new Point(232, 94); + textBoxLastName.Name = "textBoxLastName"; + textBoxLastName.Size = new Size(240, 35); + textBoxLastName.TabIndex = 11; + // + // labelLastName + // + labelLastName.AutoSize = true; + labelLastName.Location = new Point(28, 97); + labelLastName.Name = "labelLastName"; + labelLastName.Size = new Size(100, 30); + labelLastName.TabIndex = 10; + labelLastName.Text = "Фамилия"; + // + // textBoxFirstName + // + textBoxFirstName.Location = new Point(232, 29); + textBoxFirstName.MaxLength = 10; + textBoxFirstName.Name = "textBoxFirstName"; + textBoxFirstName.Size = new Size(240, 35); + textBoxFirstName.TabIndex = 9; + // + // labelFirstName + // + labelFirstName.AutoSize = true; + labelFirstName.Location = new Point(28, 32); + labelFirstName.Name = "labelFirstName"; + labelFirstName.Size = new Size(55, 30); + labelFirstName.TabIndex = 8; + labelFirstName.Text = "Имя"; + // + // labelPost + // + labelPost.AutoSize = true; + labelPost.Location = new Point(28, 169); + labelPost.Name = "labelPost"; + labelPost.Size = new Size(121, 30); + labelPost.TabIndex = 15; + labelPost.Text = "Должность"; + // + // FormEmployee + // + AutoScaleDimensions = new SizeF(12F, 30F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(506, 296); + Controls.Add(labelPost); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(textBoxLastName); + Controls.Add(labelLastName); + Controls.Add(textBoxFirstName); + Controls.Add(labelFirstName); + Controls.Add(comboBoxPost); + 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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployee.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployee.cs new file mode 100644 index 0000000..1300111 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployee.cs @@ -0,0 +1,77 @@ +using ProjectPassengerTransportation.Entities; +using ProjectPassengerTransportation.Entities.Enums; +using ProjectPassengerTransportation.Repositories; + +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployee.resx b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployee.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployees.Designer.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployees.Designer.cs new file mode 100644 index 0000000..1f69ef7 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployees.Designer.cs @@ -0,0 +1,127 @@ +namespace ProjectPassengerTransportation.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() + { + 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.MultiSelect = false; + dataGridViewData.Name = "dataGridViewData"; + dataGridViewData.ReadOnly = true; + dataGridViewData.RowHeadersVisible = false; + dataGridViewData.RowHeadersWidth = 72; + dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewData.Size = new Size(845, 481); + dataGridViewData.TabIndex = 3; + // + // panelButtons + // + panelButtons.Controls.Add(buttonDelete); + panelButtons.Controls.Add(buttonUpdate); + panelButtons.Controls.Add(buttonAdd); + panelButtons.Dock = DockStyle.Right; + panelButtons.Location = new Point(845, 0); + panelButtons.Name = "panelButtons"; + panelButtons.Size = new Size(196, 481); + panelButtons.TabIndex = 2; + // + // buttonDelete + // + buttonDelete.BackgroundImage = Properties.Resources.minus; + buttonDelete.BackgroundImageLayout = ImageLayout.Stretch; + buttonDelete.Location = new Point(50, 264); + buttonDelete.Name = "buttonDelete"; + buttonDelete.Size = new Size(100, 100); + buttonDelete.TabIndex = 2; + buttonDelete.UseVisualStyleBackColor = true; + buttonDelete.Click += ButtonDelete_Click; + // + // buttonUpdate + // + buttonUpdate.BackgroundImage = Properties.Resources.edit; + buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpdate.Location = new Point(50, 145); + buttonUpdate.Name = "buttonUpdate"; + buttonUpdate.Size = new Size(100, 100); + buttonUpdate.TabIndex = 1; + buttonUpdate.UseVisualStyleBackColor = true; + buttonUpdate.Click += ButtonUpdate_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.plus; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(50, 29); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(100, 100); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // FormEmployees + // + AutoScaleDimensions = new SizeF(12F, 30F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1041, 481); + Controls.Add(dataGridViewData); + Controls.Add(panelButtons); + 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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployees.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployees.cs new file mode 100644 index 0000000..f7fcb92 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployees.cs @@ -0,0 +1,101 @@ +using ProjectPassengerTransportation.Repositories; +using Unity; + +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployees.resx b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployees.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployees.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToService.Designer.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToService.Designer.cs new file mode 100644 index 0000000..7677995 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToService.Designer.cs @@ -0,0 +1,169 @@ +namespace ProjectPassengerTransportation.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(168, 389); + comboBoxBus.Name = "comboBoxBus"; + comboBoxBus.Size = new Size(245, 38); + comboBoxBus.TabIndex = 9; + // + // labelBus + // + labelBus.AutoSize = true; + labelBus.Location = new Point(25, 392); + labelBus.Name = "labelBus"; + labelBus.Size = new Size(91, 30); + labelBus.TabIndex = 8; + labelBus.Text = "Автобус"; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(241, 459); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(135, 50); + buttonCancel.TabIndex = 19; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(64, 459); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(135, 50); + buttonSave.TabIndex = 18; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // labelPrice + // + labelPrice.AutoSize = true; + labelPrice.Location = new Point(25, 312); + labelPrice.Name = "labelPrice"; + labelPrice.Size = new Size(116, 30); + labelPrice.TabIndex = 20; + labelPrice.Text = "Стоимость"; + // + // numericUpDownPrice + // + numericUpDownPrice.Location = new Point(168, 310); + numericUpDownPrice.Name = "numericUpDownPrice"; + numericUpDownPrice.Size = new Size(245, 35); + numericUpDownPrice.TabIndex = 21; + // + // checkedListBoxBrokenElements + // + checkedListBoxBrokenElements.FormattingEnabled = true; + checkedListBoxBrokenElements.Location = new Point(168, 102); + checkedListBoxBrokenElements.Name = "checkedListBoxBrokenElements"; + checkedListBoxBrokenElements.Size = new Size(247, 164); + checkedListBoxBrokenElements.TabIndex = 22; + // + // labelBrokenElement + // + labelBrokenElement.Location = new Point(25, 102); + labelBrokenElement.Name = "labelBrokenElement"; + labelBrokenElement.Size = new Size(128, 68); + labelBrokenElement.TabIndex = 23; + labelBrokenElement.Text = "Сломанная деталь"; + // + // dateTimePickerServiceDate + // + dateTimePickerServiceDate.Enabled = false; + dateTimePickerServiceDate.Location = new Point(168, 27); + dateTimePickerServiceDate.Name = "dateTimePickerServiceDate"; + dateTimePickerServiceDate.Size = new Size(247, 35); + dateTimePickerServiceDate.TabIndex = 24; + // + // labelDate + // + labelDate.AutoSize = true; + labelDate.Location = new Point(25, 31); + labelDate.Name = "labelDate"; + labelDate.Size = new Size(59, 30); + labelDate.TabIndex = 25; + labelDate.Text = "Дата"; + // + // FormGoToService + // + AutoScaleDimensions = new SizeF(12F, 30F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(441, 521); + 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); + 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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToService.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToService.cs new file mode 100644 index 0000000..e39c947 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToService.cs @@ -0,0 +1,53 @@ +using ProjectPassengerTransportation.Entities; +using ProjectPassengerTransportation.Entities.Enums; +using ProjectPassengerTransportation.Repositories; + +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToService.resx b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToService.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToServices.Designer.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToServices.Designer.cs new file mode 100644 index 0000000..56120cc --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToServices.Designer.cs @@ -0,0 +1,113 @@ +namespace ProjectPassengerTransportation.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.MultiSelect = false; + dataGridViewData.Name = "dataGridViewData"; + dataGridViewData.ReadOnly = true; + dataGridViewData.RowHeadersVisible = false; + dataGridViewData.RowHeadersWidth = 72; + dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewData.Size = new Size(845, 481); + dataGridViewData.TabIndex = 5; + // + // panelButtons + // + panelButtons.Controls.Add(buttonDelete); + panelButtons.Controls.Add(buttonAdd); + panelButtons.Dock = DockStyle.Right; + panelButtons.Location = new Point(845, 0); + panelButtons.Name = "panelButtons"; + panelButtons.Size = new Size(196, 481); + panelButtons.TabIndex = 4; + // + // buttonDelete + // + buttonDelete.BackgroundImage = Properties.Resources.minus; + buttonDelete.BackgroundImageLayout = ImageLayout.Stretch; + buttonDelete.Location = new Point(50, 150); + buttonDelete.Name = "buttonDelete"; + buttonDelete.Size = new Size(100, 100); + buttonDelete.TabIndex = 2; + buttonDelete.UseVisualStyleBackColor = true; + buttonDelete.Click += ButtonDelete_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.plus; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(50, 29); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(100, 100); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // FormGoToServices + // + AutoScaleDimensions = new SizeF(12F, 30F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1041, 481); + Controls.Add(dataGridViewData); + Controls.Add(panelButtons); + 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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToServices.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToServices.cs new file mode 100644 index 0000000..95a02e3 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToServices.cs @@ -0,0 +1,79 @@ +using ProjectPassengerTransportation.Repositories; +using Unity; + +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToServices.resx b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToServices.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteList.Designer.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteList.Designer.cs new file mode 100644 index 0000000..5eabce9 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteList.Designer.cs @@ -0,0 +1,178 @@ +namespace ProjectPassengerTransportation.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(267, 201); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(135, 50); + buttonCancel.TabIndex = 15; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(78, 201); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(135, 50); + buttonSave.TabIndex = 14; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // labelStart + // + labelStart.AutoSize = true; + labelStart.Location = new Point(31, 50); + labelStart.Name = "labelStart"; + labelStart.Size = new Size(162, 30); + labelStart.TabIndex = 8; + labelStart.Text = "Начало работы"; + // + // numericUpDownStartHour + // + numericUpDownStartHour.Location = new Point(232, 48); + numericUpDownStartHour.Maximum = new decimal(new int[] { 23, 0, 0, 0 }); + numericUpDownStartHour.Name = "numericUpDownStartHour"; + numericUpDownStartHour.Size = new Size(63, 35); + numericUpDownStartHour.TabIndex = 16; + numericUpDownStartHour.Value = new decimal(new int[] { 8, 0, 0, 0 }); + // + // labelHours + // + labelHours.AutoSize = true; + labelHours.Location = new Point(232, 9); + labelHours.Name = "labelHours"; + labelHours.Size = new Size(63, 30); + labelHours.TabIndex = 17; + labelHours.Text = "Часы"; + // + // labelMinutes + // + labelMinutes.AutoSize = true; + labelMinutes.Location = new Point(339, 9); + labelMinutes.Name = "labelMinutes"; + labelMinutes.Size = new Size(90, 30); + labelMinutes.TabIndex = 18; + labelMinutes.Text = "Минуты"; + // + // labelFinish + // + labelFinish.AutoSize = true; + labelFinish.Location = new Point(31, 122); + labelFinish.Name = "labelFinish"; + labelFinish.Size = new Size(150, 30); + labelFinish.TabIndex = 19; + labelFinish.Text = "Конец работы"; + // + // numericUpDownStartMin + // + numericUpDownStartMin.Location = new Point(350, 48); + numericUpDownStartMin.Maximum = new decimal(new int[] { 59, 0, 0, 0 }); + numericUpDownStartMin.Name = "numericUpDownStartMin"; + numericUpDownStartMin.Size = new Size(63, 35); + numericUpDownStartMin.TabIndex = 20; + // + // numericUpDownFinishMin + // + numericUpDownFinishMin.Location = new Point(350, 120); + numericUpDownFinishMin.Maximum = new decimal(new int[] { 59, 0, 0, 0 }); + numericUpDownFinishMin.Name = "numericUpDownFinishMin"; + numericUpDownFinishMin.Size = new Size(63, 35); + numericUpDownFinishMin.TabIndex = 22; + // + // numericUpDownFinishHour + // + numericUpDownFinishHour.Location = new Point(232, 120); + numericUpDownFinishHour.Maximum = new decimal(new int[] { 23, 0, 0, 0 }); + numericUpDownFinishHour.Name = "numericUpDownFinishHour"; + numericUpDownFinishHour.Size = new Size(63, 35); + numericUpDownFinishHour.TabIndex = 21; + numericUpDownFinishHour.Value = new decimal(new int[] { 22, 0, 0, 0 }); + // + // FormRouteList + // + AutoScaleDimensions = new SizeF(12F, 30F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(476, 265); + 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); + 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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteList.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteList.cs new file mode 100644 index 0000000..8d835c0 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteList.cs @@ -0,0 +1,71 @@ +using ProjectPassengerTransportation.Entities; +using ProjectPassengerTransportation.Repositories; + +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteList.resx b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteList.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteLists.Designer.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteLists.Designer.cs new file mode 100644 index 0000000..d99174d --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteLists.Designer.cs @@ -0,0 +1,127 @@ +namespace ProjectPassengerTransportation.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.MultiSelect = false; + dataGridViewData.Name = "dataGridViewData"; + dataGridViewData.ReadOnly = true; + dataGridViewData.RowHeadersVisible = false; + dataGridViewData.RowHeadersWidth = 72; + dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewData.Size = new Size(845, 481); + dataGridViewData.TabIndex = 3; + // + // panelButtons + // + panelButtons.Controls.Add(buttonDelete); + panelButtons.Controls.Add(buttonUpdate); + panelButtons.Controls.Add(buttonAdd); + panelButtons.Dock = DockStyle.Right; + panelButtons.Location = new Point(845, 0); + panelButtons.Name = "panelButtons"; + panelButtons.Size = new Size(196, 481); + panelButtons.TabIndex = 2; + // + // buttonDelete + // + buttonDelete.BackgroundImage = Properties.Resources.minus; + buttonDelete.BackgroundImageLayout = ImageLayout.Stretch; + buttonDelete.Location = new Point(50, 264); + buttonDelete.Name = "buttonDelete"; + buttonDelete.Size = new Size(100, 100); + buttonDelete.TabIndex = 2; + buttonDelete.UseVisualStyleBackColor = true; + buttonDelete.Click += ButtonDelete_Click; + // + // buttonUpdate + // + buttonUpdate.BackgroundImage = Properties.Resources.edit; + buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpdate.Location = new Point(50, 145); + buttonUpdate.Name = "buttonUpdate"; + buttonUpdate.Size = new Size(100, 100); + buttonUpdate.TabIndex = 1; + buttonUpdate.UseVisualStyleBackColor = true; + buttonUpdate.Click += ButtonUpdate_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.plus; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(50, 29); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(100, 100); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // FormRouteLists + // + AutoScaleDimensions = new SizeF(12F, 30F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1041, 481); + Controls.Add(dataGridViewData); + Controls.Add(panelButtons); + 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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteLists.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteLists.cs new file mode 100644 index 0000000..e9a3e80 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteLists.cs @@ -0,0 +1,102 @@ +using ProjectPassengerTransportation.Repositories; +using Unity; + +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteLists.resx b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteLists.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShift.Designer.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShift.Designer.cs new file mode 100644 index 0000000..e0884db --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShift.Designer.cs @@ -0,0 +1,200 @@ +namespace ProjectPassengerTransportation.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(36, 97); + labelRouteList.Name = "labelRouteList"; + labelRouteList.Size = new Size(103, 30); + labelRouteList.TabIndex = 0; + labelRouteList.Text = "Маршрут"; + // + // comboBoxRouteList + // + comboBoxRouteList.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxRouteList.FormattingEnabled = true; + comboBoxRouteList.Location = new Point(183, 94); + comboBoxRouteList.Name = "comboBoxRouteList"; + comboBoxRouteList.Size = new Size(245, 38); + comboBoxRouteList.TabIndex = 1; + // + // comboBoxBus + // + comboBoxBus.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxBus.FormattingEnabled = true; + comboBoxBus.Location = new Point(183, 158); + comboBoxBus.Name = "comboBoxBus"; + comboBoxBus.Size = new Size(245, 38); + comboBoxBus.TabIndex = 5; + // + // labelBus + // + labelBus.AutoSize = true; + labelBus.Location = new Point(36, 161); + labelBus.Name = "labelBus"; + labelBus.Size = new Size(91, 30); + labelBus.TabIndex = 4; + labelBus.Text = "Автобус"; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(256, 513); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(135, 50); + buttonCancel.TabIndex = 17; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(67, 513); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(135, 50); + buttonSave.TabIndex = 16; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // groupBoxEmployees + // + groupBoxEmployees.Controls.Add(dataGridViewEmployees); + groupBoxEmployees.Location = new Point(36, 226); + groupBoxEmployees.Name = "groupBoxEmployees"; + groupBoxEmployees.Size = new Size(392, 254); + 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(3, 31); + dataGridViewEmployees.MultiSelect = false; + dataGridViewEmployees.Name = "dataGridViewEmployees"; + dataGridViewEmployees.RowHeadersVisible = false; + dataGridViewEmployees.RowHeadersWidth = 72; + dataGridViewEmployees.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewEmployees.Size = new Size(386, 220); + 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(36, 32); + labelDate.Name = "labelDate"; + labelDate.Size = new Size(59, 30); + labelDate.TabIndex = 27; + labelDate.Text = "Дата"; + // + // dateTimePickerShiftDate + // + dateTimePickerShiftDate.Enabled = false; + dateTimePickerShiftDate.Location = new Point(179, 28); + dateTimePickerShiftDate.Name = "dateTimePickerShiftDate"; + dateTimePickerShiftDate.Size = new Size(247, 35); + dateTimePickerShiftDate.TabIndex = 26; + // + // FormStartingShift + // + AutoScaleDimensions = new SizeF(12F, 30F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(456, 596); + 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); + 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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShift.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShift.cs new file mode 100644 index 0000000..c246c3d --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShift.cs @@ -0,0 +1,70 @@ +using ProjectPassengerTransportation.Entities; +using ProjectPassengerTransportation.Repositories; + +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShift.resx b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShift.resx new file mode 100644 index 0000000..bffc86f --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShift.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + \ No newline at end of file diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShifts.Designer.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShifts.Designer.cs new file mode 100644 index 0000000..ebf0698 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShifts.Designer.cs @@ -0,0 +1,99 @@ +namespace ProjectPassengerTransportation.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.MultiSelect = false; + dataGridViewData.Name = "dataGridViewData"; + dataGridViewData.ReadOnly = true; + dataGridViewData.RowHeadersVisible = false; + dataGridViewData.RowHeadersWidth = 72; + dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewData.Size = new Size(845, 481); + dataGridViewData.TabIndex = 5; + // + // panelButtons + // + panelButtons.Controls.Add(buttonAdd); + panelButtons.Dock = DockStyle.Right; + panelButtons.Location = new Point(845, 0); + panelButtons.Name = "panelButtons"; + panelButtons.Size = new Size(196, 481); + panelButtons.TabIndex = 4; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.plus; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(50, 29); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(100, 100); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // FormStartingShifts + // + AutoScaleDimensions = new SizeF(12F, 30F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1041, 481); + Controls.Add(dataGridViewData); + Controls.Add(panelButtons); + 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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShifts.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShifts.cs new file mode 100644 index 0000000..9e27d9f --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShifts.cs @@ -0,0 +1,44 @@ +using ProjectPassengerTransportation.Repositories; +using Unity; + +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShifts.resx b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShifts.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/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/ProjectPassengerTransportation/ProjectPassengerTransportation/Program.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Program.cs index b08c960..ca70ad9 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Program.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Program.cs @@ -1,3 +1,8 @@ +using ProjectPassengerTransportation.Repositories.Implementations; +using ProjectPassengerTransportation.Repositories; +using Unity.Lifetime; +using Unity; + namespace ProjectPassengerTransportation { internal static class Program @@ -11,7 +16,20 @@ namespace ProjectPassengerTransportation // 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/ProjectPassengerTransportation/ProjectPassengerTransportation/ProjectPassengerTransportation.csproj b/ProjectPassengerTransportation/ProjectPassengerTransportation/ProjectPassengerTransportation.csproj index 663fdb8..accbdf0 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/ProjectPassengerTransportation.csproj +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/ProjectPassengerTransportation.csproj @@ -8,4 +8,23 @@ enable + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Properties/Resources.Designer.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Properties/Resources.Designer.cs new file mode 100644 index 0000000..ccedf9d --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ProjectPassengerTransportation.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("ProjectPassengerTransportation.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 _78 { + get { + object obj = ResourceManager.GetObject("78", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap edit { + get { + object obj = ResourceManager.GetObject("edit", 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)); + } + } + } +} diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Properties/Resources.resx b/ProjectPassengerTransportation/ProjectPassengerTransportation/Properties/Resources.resx new file mode 100644 index 0000000..163719e --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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\78.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\edit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\minus.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IBusRepository.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IBusRepository.cs new file mode 100644 index 0000000..394be70 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IBusRepository.cs @@ -0,0 +1,16 @@ +using ProjectPassengerTransportation.Entities; + +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IEmployeeRepository.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IEmployeeRepository.cs new file mode 100644 index 0000000..e7d5c8e --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IEmployeeRepository.cs @@ -0,0 +1,16 @@ +using ProjectPassengerTransportation.Entities; + +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IGoToServiceRepository.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IGoToServiceRepository.cs new file mode 100644 index 0000000..78dbeea --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IGoToServiceRepository.cs @@ -0,0 +1,14 @@ +using ProjectPassengerTransportation.Entities; +using ProjectPassengerTransportation.Entities.Enums; + +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IRouteListRepository.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IRouteListRepository.cs new file mode 100644 index 0000000..67b8be1 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IRouteListRepository.cs @@ -0,0 +1,16 @@ +using ProjectPassengerTransportation.Entities; + +namespace ProjectPassengerTransportation.Repositories; + +public interface IRouteListRepository +{ + IEnumerable ReadRouteLists(); + + RouteList ReadRouteListById(int routeListId); + + void CreateRouteList(RouteList routeList); + + void UpdateRouteList(RouteList routeList); + + void DeleteRouteList(int id); +} diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IStartingShiftRepository.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IStartingShiftRepository.cs new file mode 100644 index 0000000..5cea988 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IStartingShiftRepository.cs @@ -0,0 +1,11 @@ +using ProjectPassengerTransportation.Entities; + +namespace ProjectPassengerTransportation.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); +} diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/BusRepository.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/BusRepository.cs new file mode 100644 index 0000000..bf63bd6 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/BusRepository.cs @@ -0,0 +1,32 @@ +using ProjectPassengerTransportation.Entities; +using ProjectPassengerTransportation.Entities.Enums; + +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/EmployeeRepository.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/EmployeeRepository.cs new file mode 100644 index 0000000..6d6cccc --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/EmployeeRepository.cs @@ -0,0 +1,32 @@ +using ProjectPassengerTransportation.Entities; +using ProjectPassengerTransportation.Entities.Enums; + +namespace ProjectPassengerTransportation.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) + { + + } +} diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/GoToServiceRepository.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/GoToServiceRepository.cs new file mode 100644 index 0000000..62618ae --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/GoToServiceRepository.cs @@ -0,0 +1,22 @@ +using ProjectPassengerTransportation.Entities; +using ProjectPassengerTransportation.Entities.Enums; + +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/RouteListRepository.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/RouteListRepository.cs new file mode 100644 index 0000000..e0e1ed1 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/RouteListRepository.cs @@ -0,0 +1,31 @@ +using ProjectPassengerTransportation.Entities; + +namespace ProjectPassengerTransportation.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/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/StartingShiftRepository.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/StartingShiftRepository.cs new file mode 100644 index 0000000..828e725 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/StartingShiftRepository.cs @@ -0,0 +1,17 @@ +using ProjectPassengerTransportation.Entities; + +namespace ProjectPassengerTransportation.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 []; + } +} diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Resources/78.jpg b/ProjectPassengerTransportation/ProjectPassengerTransportation/Resources/78.jpg new file mode 100644 index 0000000..e701e95 Binary files /dev/null and b/ProjectPassengerTransportation/ProjectPassengerTransportation/Resources/78.jpg differ diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Resources/edit.png b/ProjectPassengerTransportation/ProjectPassengerTransportation/Resources/edit.png new file mode 100644 index 0000000..e782409 Binary files /dev/null and b/ProjectPassengerTransportation/ProjectPassengerTransportation/Resources/edit.png differ diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Resources/minus.jpg b/ProjectPassengerTransportation/ProjectPassengerTransportation/Resources/minus.jpg new file mode 100644 index 0000000..9de9451 Binary files /dev/null and b/ProjectPassengerTransportation/ProjectPassengerTransportation/Resources/minus.jpg differ diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Resources/plus.jpg b/ProjectPassengerTransportation/ProjectPassengerTransportation/Resources/plus.jpg new file mode 100644 index 0000000..9a2bb36 Binary files /dev/null and b/ProjectPassengerTransportation/ProjectPassengerTransportation/Resources/plus.jpg differ