From a2acfd3fb1967c2836114422bb3c3c3cdfd99e7e Mon Sep 17 00:00:00 2001 From: Arslan Date: Mon, 25 Nov 2024 01:31:46 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BB=D0=B0=D0=B1=D0=B0=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProjectRepairWork/Entities/Contractors.cs | 24 ++ ProjectRepairWork/Entities/Cost.cs | 21 ++ .../Entities/Enums/MaterialsName.cs | 23 ++ .../Entities/Enums/PremisesType.cs | 17 ++ ProjectRepairWork/Entities/Premises.cs | 31 +++ ProjectRepairWork/Entities/Repair.cs | 30 +++ ProjectRepairWork/Entities/RepairRepair.cs | 27 +++ ProjectRepairWork/Entities/Works.cs | 24 ++ ProjectRepairWork/Form1.Designer.cs | 39 ---- ProjectRepairWork/Form1.cs | 10 - ProjectRepairWork/FormRepairWork.Designer.cs | 138 ++++++++++++ ProjectRepairWork/FormRepairWork.cs | 76 +++++++ ProjectRepairWork/FormRepairWork.resx | 123 ++++++++++ .../Forms/FormContractor.Designer.cs | 118 ++++++++++ ProjectRepairWork/Forms/FormContractor.cs | 75 +++++++ .../{Form1.resx => Forms/FormContractor.resx} | 50 ++--- .../Forms/FormContractors.Designer.cs | 125 +++++++++++ ProjectRepairWork/Forms/FormContractors.cs | 107 +++++++++ ProjectRepairWork/Forms/FormContractors.resx | 120 ++++++++++ ProjectRepairWork/Forms/FormCost.Designer.cs | 98 ++++++++ ProjectRepairWork/Forms/FormCost.cs | 82 +++++++ ProjectRepairWork/Forms/FormCost.resx | 120 ++++++++++ ProjectRepairWork/Forms/FormCosts.Designer.cs | 125 +++++++++++ ProjectRepairWork/Forms/FormCosts.cs | 107 +++++++++ ProjectRepairWork/Forms/FormCosts.resx | 120 ++++++++++ .../Forms/FormPremise.Designer.cs | 212 ++++++++++++++++++ ProjectRepairWork/Forms/FormPremise.cs | 88 ++++++++ ProjectRepairWork/Forms/FormPremise.resx | 120 ++++++++++ .../Forms/FormPremises.Designer.cs | 126 +++++++++++ ProjectRepairWork/Forms/FormPremises.cs | 96 ++++++++ ProjectRepairWork/Forms/FormPremises.resx | 120 ++++++++++ .../Forms/FormRepair.Designer.cs | 160 +++++++++++++ ProjectRepairWork/Forms/FormRepair.cs | 78 +++++++ ProjectRepairWork/Forms/FormRepair.resx | 126 +++++++++++ .../Forms/FormRepairs.Designer.cs | 97 ++++++++ ProjectRepairWork/Forms/FormRepairs.cs | 52 +++++ ProjectRepairWork/Forms/FormRepairs.resx | 120 ++++++++++ ProjectRepairWork/Forms/FormWork.Designer.cs | 117 ++++++++++ ProjectRepairWork/Forms/FormWork.cs | 95 ++++++++ ProjectRepairWork/Forms/FormWork.resx | 120 ++++++++++ ProjectRepairWork/Forms/FormWorks.Designer.cs | 126 +++++++++++ ProjectRepairWork/Forms/FormWorks.cs | 108 +++++++++ ProjectRepairWork/Forms/FormWorks.resx | 120 ++++++++++ ProjectRepairWork/Program.cs | 17 +- ProjectRepairWork/ProjectRepairWork.csproj | 19 ++ .../Properties/Resources.Designer.cs | 103 +++++++++ ProjectRepairWork/Properties/Resources.resx | 133 +++++++++++ .../Repositories/IContractorsRepository.cs | 18 ++ .../Repositories/ICostRepository.cs | 18 ++ .../Repositories/IPremisesRepository.cs | 18 ++ .../Repositories/IRepairRepository.cs | 14 ++ .../Repositories/IWorksRepository.cs | 18 ++ .../Implementation/ContractorsRepository.cs | 37 +++ .../Implementation/CostRepository.cs | 37 +++ .../Implementation/PremisesRepository.cs | 35 +++ .../Implementation/RepairRepository.cs | 21 ++ .../Implementation/WorksRepository.cs | 37 +++ .../Resources/free-icon-font-cross.png | Bin 0 -> 10066 bytes .../free-icon-font-pencil-3917376.png | Bin 0 -> 7485 bytes .../Resources/free-icon-font-plus.png | Bin 0 -> 5317 bytes .../Resources/photo_2024-11-11_02-05-26.jpg | Bin 0 -> 140949 bytes 61 files changed, 4361 insertions(+), 75 deletions(-) create mode 100644 ProjectRepairWork/Entities/Contractors.cs create mode 100644 ProjectRepairWork/Entities/Cost.cs create mode 100644 ProjectRepairWork/Entities/Enums/MaterialsName.cs create mode 100644 ProjectRepairWork/Entities/Enums/PremisesType.cs create mode 100644 ProjectRepairWork/Entities/Premises.cs create mode 100644 ProjectRepairWork/Entities/Repair.cs create mode 100644 ProjectRepairWork/Entities/RepairRepair.cs create mode 100644 ProjectRepairWork/Entities/Works.cs delete mode 100644 ProjectRepairWork/Form1.Designer.cs delete mode 100644 ProjectRepairWork/Form1.cs create mode 100644 ProjectRepairWork/FormRepairWork.Designer.cs create mode 100644 ProjectRepairWork/FormRepairWork.cs create mode 100644 ProjectRepairWork/FormRepairWork.resx create mode 100644 ProjectRepairWork/Forms/FormContractor.Designer.cs create mode 100644 ProjectRepairWork/Forms/FormContractor.cs rename ProjectRepairWork/{Form1.resx => Forms/FormContractor.resx} (93%) create mode 100644 ProjectRepairWork/Forms/FormContractors.Designer.cs create mode 100644 ProjectRepairWork/Forms/FormContractors.cs create mode 100644 ProjectRepairWork/Forms/FormContractors.resx create mode 100644 ProjectRepairWork/Forms/FormCost.Designer.cs create mode 100644 ProjectRepairWork/Forms/FormCost.cs create mode 100644 ProjectRepairWork/Forms/FormCost.resx create mode 100644 ProjectRepairWork/Forms/FormCosts.Designer.cs create mode 100644 ProjectRepairWork/Forms/FormCosts.cs create mode 100644 ProjectRepairWork/Forms/FormCosts.resx create mode 100644 ProjectRepairWork/Forms/FormPremise.Designer.cs create mode 100644 ProjectRepairWork/Forms/FormPremise.cs create mode 100644 ProjectRepairWork/Forms/FormPremise.resx create mode 100644 ProjectRepairWork/Forms/FormPremises.Designer.cs create mode 100644 ProjectRepairWork/Forms/FormPremises.cs create mode 100644 ProjectRepairWork/Forms/FormPremises.resx create mode 100644 ProjectRepairWork/Forms/FormRepair.Designer.cs create mode 100644 ProjectRepairWork/Forms/FormRepair.cs create mode 100644 ProjectRepairWork/Forms/FormRepair.resx create mode 100644 ProjectRepairWork/Forms/FormRepairs.Designer.cs create mode 100644 ProjectRepairWork/Forms/FormRepairs.cs create mode 100644 ProjectRepairWork/Forms/FormRepairs.resx create mode 100644 ProjectRepairWork/Forms/FormWork.Designer.cs create mode 100644 ProjectRepairWork/Forms/FormWork.cs create mode 100644 ProjectRepairWork/Forms/FormWork.resx create mode 100644 ProjectRepairWork/Forms/FormWorks.Designer.cs create mode 100644 ProjectRepairWork/Forms/FormWorks.cs create mode 100644 ProjectRepairWork/Forms/FormWorks.resx create mode 100644 ProjectRepairWork/Properties/Resources.Designer.cs create mode 100644 ProjectRepairWork/Properties/Resources.resx create mode 100644 ProjectRepairWork/Repositories/IContractorsRepository.cs create mode 100644 ProjectRepairWork/Repositories/ICostRepository.cs create mode 100644 ProjectRepairWork/Repositories/IPremisesRepository.cs create mode 100644 ProjectRepairWork/Repositories/IRepairRepository.cs create mode 100644 ProjectRepairWork/Repositories/IWorksRepository.cs create mode 100644 ProjectRepairWork/Repositories/Implementation/ContractorsRepository.cs create mode 100644 ProjectRepairWork/Repositories/Implementation/CostRepository.cs create mode 100644 ProjectRepairWork/Repositories/Implementation/PremisesRepository.cs create mode 100644 ProjectRepairWork/Repositories/Implementation/RepairRepository.cs create mode 100644 ProjectRepairWork/Repositories/Implementation/WorksRepository.cs create mode 100644 ProjectRepairWork/Resources/free-icon-font-cross.png create mode 100644 ProjectRepairWork/Resources/free-icon-font-pencil-3917376.png create mode 100644 ProjectRepairWork/Resources/free-icon-font-plus.png create mode 100644 ProjectRepairWork/Resources/photo_2024-11-11_02-05-26.jpg diff --git a/ProjectRepairWork/Entities/Contractors.cs b/ProjectRepairWork/Entities/Contractors.cs new file mode 100644 index 0000000..32b229b --- /dev/null +++ b/ProjectRepairWork/Entities/Contractors.cs @@ -0,0 +1,24 @@ +using ProjectRepairWork.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Entities; + +public class Contractors +{ + public int Id { get; private set; } + public string CompanyName { get; private set; } = string.Empty; + public string Contacts { get; private set; } = string.Empty; + public static Contractors CreatEntity(int id, string companyName, string contants) + { + return new Contractors + + { Id = id, + CompanyName = companyName, + Contacts = contants + }; + } +} diff --git a/ProjectRepairWork/Entities/Cost.cs b/ProjectRepairWork/Entities/Cost.cs new file mode 100644 index 0000000..563c4e2 --- /dev/null +++ b/ProjectRepairWork/Entities/Cost.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Entities; +public class Cost +{ + public int Id { get; private set; } + public int Price { get; private set; } + public static Cost CreatEntity(int id, int price) + { + return new Cost + { + Id = id, + + Price = price + }; + } +} diff --git a/ProjectRepairWork/Entities/Enums/MaterialsName.cs b/ProjectRepairWork/Entities/Enums/MaterialsName.cs new file mode 100644 index 0000000..05bf497 --- /dev/null +++ b/ProjectRepairWork/Entities/Enums/MaterialsName.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Entities.Enums; +[Flags] +public enum MaterialsName +{ + None = 0, + + Tiles = 1, // напольная плитка + + Wallpaper = 2, // обои + + Paints = 3, // краски + + Furniture = 4, // мебель + + Windows = 5, // окна + +} diff --git a/ProjectRepairWork/Entities/Enums/PremisesType.cs b/ProjectRepairWork/Entities/Enums/PremisesType.cs new file mode 100644 index 0000000..ab435c5 --- /dev/null +++ b/ProjectRepairWork/Entities/Enums/PremisesType.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Entities.Enums +{ + public enum PremisesType + { + None = 0, + + SivingSpace = 1, + + OfficeSpace = 2, + } +} diff --git a/ProjectRepairWork/Entities/Premises.cs b/ProjectRepairWork/Entities/Premises.cs new file mode 100644 index 0000000..53c4ad9 --- /dev/null +++ b/ProjectRepairWork/Entities/Premises.cs @@ -0,0 +1,31 @@ +using ProjectRepairWork.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Entities; +public class Premises +{ + public int Id { get; private set; } + public string ClientName { get; private set; } = string.Empty; + public string Address { get; private set; } = string.Empty; + public int Area { get; private set; } + public PremisesType PremisesType { get; private set; } + public DateTime DateStart { get; private set; } + public DateTime DateEnd { get; private set; } + public static Premises CreatEntity(int id, string clientName, string address, int area, DateTime dateStart, DateTime dateEnd, PremisesType premisesType) + { + return new Premises + { + Id = id, + ClientName = clientName, + Address = address, + Area = area, + DateStart = dateStart, + DateEnd = dateEnd, + PremisesType = premisesType + }; + } +} diff --git a/ProjectRepairWork/Entities/Repair.cs b/ProjectRepairWork/Entities/Repair.cs new file mode 100644 index 0000000..81d3774 --- /dev/null +++ b/ProjectRepairWork/Entities/Repair.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Entities; + +public class Repair +{ + public int Id { get; private set; } + public int ContractorsId { get; private set; } + public int PremisesId { get; private set; } + public IEnumerable RepairRepair { get; private set; } = []; + + + + public static Repair CreatOpertions(int id, int contractorsId, int premisesId, IEnumerable repairRepair) + { + return new Repair + { + Id = id, + ContractorsId = contractorsId, + PremisesId = premisesId, + RepairRepair = repairRepair, + + }; + } + +} diff --git a/ProjectRepairWork/Entities/RepairRepair.cs b/ProjectRepairWork/Entities/RepairRepair.cs new file mode 100644 index 0000000..f8b5675 --- /dev/null +++ b/ProjectRepairWork/Entities/RepairRepair.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Entities; + +public class RepairRepair +{ + public int Id { get; private set; } + public int WorkId { get; private set; } + public int Count { get; private set; } + + + public static RepairRepair CreatElement(int id, int workId, int count) + { + return new RepairRepair + { + Id = id, + WorkId = workId, + Count = count, + + }; + } + +} diff --git a/ProjectRepairWork/Entities/Works.cs b/ProjectRepairWork/Entities/Works.cs new file mode 100644 index 0000000..4022b67 --- /dev/null +++ b/ProjectRepairWork/Entities/Works.cs @@ -0,0 +1,24 @@ +using ProjectRepairWork.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Entities; + +public class Works +{ + public int Id { get; private set; } + public string WorkName { get; private set; } = string.Empty; + public MaterialsName MaterialsName { get; private set; } + public static Works CreatEntity(int id, string workName, MaterialsName materialsName) + { + return new Works + { + Id = id, + WorkName = workName, + MaterialsName = materialsName + }; + } +} diff --git a/ProjectRepairWork/Form1.Designer.cs b/ProjectRepairWork/Form1.Designer.cs deleted file mode 100644 index 6180970..0000000 --- a/ProjectRepairWork/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace ProjectRepairWork -{ - 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/ProjectRepairWork/Form1.cs b/ProjectRepairWork/Form1.cs deleted file mode 100644 index 639b6c7..0000000 --- a/ProjectRepairWork/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ProjectRepairWork -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} diff --git a/ProjectRepairWork/FormRepairWork.Designer.cs b/ProjectRepairWork/FormRepairWork.Designer.cs new file mode 100644 index 0000000..9b22dfb --- /dev/null +++ b/ProjectRepairWork/FormRepairWork.Designer.cs @@ -0,0 +1,138 @@ +namespace ProjectRepairWork +{ + partial class FormRepairWork + { + /// + /// 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(); + ContractorsToolStripMenuItem = new ToolStripMenuItem(); + PremisesToolStripMenuItem = new ToolStripMenuItem(); + CostToolStripMenuItem = new ToolStripMenuItem(); + WorksToolStripMenuItem = new ToolStripMenuItem(); + операцииToolStripMenuItem = new ToolStripMenuItem(); + RepairToolStripMenuItem = new ToolStripMenuItem(); + отчетыToolStripMenuItem = new ToolStripMenuItem(); + menuStrip1.SuspendLayout(); + SuspendLayout(); + // + // menuStrip1 + // + menuStrip1.ImageScalingSize = new Size(20, 20); + menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, операцииToolStripMenuItem, отчетыToolStripMenuItem }); + menuStrip1.Location = new Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Size = new Size(800, 28); + menuStrip1.TabIndex = 0; + menuStrip1.Text = "menuStrip"; + // + // справочникиToolStripMenuItem + // + справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { ContractorsToolStripMenuItem, PremisesToolStripMenuItem, CostToolStripMenuItem, WorksToolStripMenuItem }); + справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; + справочникиToolStripMenuItem.Size = new Size(117, 24); + справочникиToolStripMenuItem.Text = "Справочники"; + // + // ContractorsToolStripMenuItem + // + ContractorsToolStripMenuItem.Name = "ContractorsToolStripMenuItem"; + ContractorsToolStripMenuItem.Size = new Size(224, 26); + ContractorsToolStripMenuItem.Text = "Подрядчики"; + ContractorsToolStripMenuItem.Click += ContractorsToolStripMenuItem_Click; + // + // PremisesToolStripMenuItem + // + PremisesToolStripMenuItem.Name = "PremisesToolStripMenuItem"; + PremisesToolStripMenuItem.Size = new Size(224, 26); + PremisesToolStripMenuItem.Text = "Помещения"; + PremisesToolStripMenuItem.Click += PremisesToolStripMenuItem_Click; + // + // CostToolStripMenuItem + // + CostToolStripMenuItem.Name = "CostToolStripMenuItem"; + CostToolStripMenuItem.Size = new Size(224, 26); + CostToolStripMenuItem.Text = "Затраты"; + CostToolStripMenuItem.Click += CostToolStripMenuItem_Click; + // + // WorksToolStripMenuItem + // + WorksToolStripMenuItem.Name = "WorksToolStripMenuItem"; + WorksToolStripMenuItem.Size = new Size(224, 26); + WorksToolStripMenuItem.Text = "Работы"; + WorksToolStripMenuItem.Click += WorksToolStripMenuItem_Click; + // + // операцииToolStripMenuItem + // + операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { RepairToolStripMenuItem }); + операцииToolStripMenuItem.Name = "операцииToolStripMenuItem"; + операцииToolStripMenuItem.Size = new Size(95, 24); + операцииToolStripMenuItem.Text = "Операции"; + // + // RepairToolStripMenuItem + // + RepairToolStripMenuItem.Name = "RepairToolStripMenuItem"; + RepairToolStripMenuItem.Size = new Size(224, 26); + RepairToolStripMenuItem.Text = "Ремонт"; + RepairToolStripMenuItem.Click += RepairToolStripMenuItem_Click; + // + // отчетыToolStripMenuItem + // + отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem"; + отчетыToolStripMenuItem.Size = new Size(73, 24); + отчетыToolStripMenuItem.Text = "Отчеты"; + // + // FormRepairWork + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + BackgroundImage = Properties.Resources.photo_2024_11_11_02_05_26; + BackgroundImageLayout = ImageLayout.Stretch; + ClientSize = new Size(800, 450); + Controls.Add(menuStrip1); + MainMenuStrip = menuStrip1; + Name = "FormRepairWork"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Ремонтные работы"; + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private MenuStrip menuStrip1; + private ToolStripMenuItem справочникиToolStripMenuItem; + private ToolStripMenuItem ContractorsToolStripMenuItem; + private ToolStripMenuItem PremisesToolStripMenuItem; + private ToolStripMenuItem CostToolStripMenuItem; + private ToolStripMenuItem операцииToolStripMenuItem; + private ToolStripMenuItem RepairToolStripMenuItem; + private ToolStripMenuItem отчетыToolStripMenuItem; + private ToolStripMenuItem WorksToolStripMenuItem; + } +} diff --git a/ProjectRepairWork/FormRepairWork.cs b/ProjectRepairWork/FormRepairWork.cs new file mode 100644 index 0000000..78d7742 --- /dev/null +++ b/ProjectRepairWork/FormRepairWork.cs @@ -0,0 +1,76 @@ +using ProjectRepairWork.Forms; +using System.ComponentModel; +using Unity; + +namespace ProjectRepairWork +{ + public partial class FormRepairWork : Form + { + private readonly IUnityContainer _container; + public FormRepairWork(IUnityContainer container) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + } + + private void WorksToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void CostToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void PremisesToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ContractorsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void RepairToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/ProjectRepairWork/FormRepairWork.resx b/ProjectRepairWork/FormRepairWork.resx new file mode 100644 index 0000000..a0623c8 --- /dev/null +++ b/ProjectRepairWork/FormRepairWork.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/ProjectRepairWork/Forms/FormContractor.Designer.cs b/ProjectRepairWork/Forms/FormContractor.Designer.cs new file mode 100644 index 0000000..4348f34 --- /dev/null +++ b/ProjectRepairWork/Forms/FormContractor.Designer.cs @@ -0,0 +1,118 @@ +namespace ProjectRepairWork.Forms +{ + partial class FormContractor + { + /// + /// 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() + { + textBoxContacts = new TextBox(); + Contacts = new Label(); + textBoxCompanyName = new TextBox(); + CompanyName = new Label(); + ButtonCancel = new Button(); + ButtonSave = new Button(); + SuspendLayout(); + // + // textBoxContacts + // + textBoxContacts.Location = new Point(192, 95); + textBoxContacts.Name = "textBoxContacts"; + textBoxContacts.Size = new Size(200, 27); + textBoxContacts.TabIndex = 18; + textBoxContacts.Text = "+7"; + // + // Contacts + // + Contacts.AutoSize = true; + Contacts.Location = new Point(107, 98); + Contacts.Name = "Contacts"; + Contacts.Size = new Size(69, 20); + Contacts.TabIndex = 17; + Contacts.Text = "Телефон"; + // + // textBoxCompanyName + // + textBoxCompanyName.Location = new Point(192, 42); + textBoxCompanyName.Name = "textBoxCompanyName"; + textBoxCompanyName.Size = new Size(200, 27); + textBoxCompanyName.TabIndex = 16; + // + // CompanyName + // + CompanyName.AutoSize = true; + CompanyName.Location = new Point(12, 45); + CompanyName.Name = "CompanyName"; + CompanyName.Size = new Size(164, 20); + CompanyName.TabIndex = 15; + CompanyName.Text = "Название подрядчика"; + // + // ButtonCancel + // + ButtonCancel.Location = new Point(223, 165); + ButtonCancel.Name = "ButtonCancel"; + ButtonCancel.Size = new Size(169, 29); + ButtonCancel.TabIndex = 20; + ButtonCancel.Text = "Отмена"; + ButtonCancel.UseVisualStyleBackColor = true; + ButtonCancel.Click += Cancel_Click; + // + // ButtonSave + // + ButtonSave.Location = new Point(12, 165); + ButtonSave.Name = "ButtonSave"; + ButtonSave.Size = new Size(169, 29); + ButtonSave.TabIndex = 19; + ButtonSave.Text = "Сохранить"; + ButtonSave.UseVisualStyleBackColor = true; + ButtonSave.Click += Save_Click; + // + // FormContractor + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(403, 217); + Controls.Add(ButtonCancel); + Controls.Add(ButtonSave); + Controls.Add(textBoxContacts); + Controls.Add(Contacts); + Controls.Add(textBoxCompanyName); + Controls.Add(CompanyName); + Name = "FormContractor"; + Text = "Подрядчик"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private TextBox textBoxContacts; + private Label Contacts; + private TextBox textBoxCompanyName; + private Label CompanyName; + private Button ButtonCancel; + private Button ButtonSave; + } +} \ No newline at end of file diff --git a/ProjectRepairWork/Forms/FormContractor.cs b/ProjectRepairWork/Forms/FormContractor.cs new file mode 100644 index 0000000..9dbdafa --- /dev/null +++ b/ProjectRepairWork/Forms/FormContractor.cs @@ -0,0 +1,75 @@ +using ProjectRepairWork.Repositories; +using ProjectRepairWork.Entities; +using ProjectRepairWork.Repositories.Implementation; +using ProjectRepairWork.Entities.Enums; +using System.Diagnostics.Contracts; + +namespace ProjectRepairWork.Forms +{ + public partial class FormContractor : Form + { + private readonly IContractorsRepository _contractorsRepository; + private int? _contractorsId; + + public int Id + { + set + { + try + { + var contractors = _contractorsRepository.ReadContractorsById(value); + if (contractors == null) + { + throw new InvalidDataException(nameof(contractors)); + } + textBoxCompanyName.Text = contractors.CompanyName; + textBoxContacts.Text = contractors.Contacts; + _contractorsId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormContractor(IContractorsRepository contractorsRepository) + { + InitializeComponent(); + _contractorsRepository = contractorsRepository ?? throw new ArgumentNullException(nameof(contractorsRepository)); + } + private void Cancel_Click(object sender, EventArgs e) => Close(); + private Contractors CreateContractors(int id) => Contractors.CreatEntity( + id, + textBoxCompanyName.Text, + textBoxContacts.Text); + + private void Save_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxCompanyName.Text) || + string.IsNullOrWhiteSpace(textBoxContacts.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + + if (_contractorsId.HasValue) + { + _contractorsRepository.UpdateContractors(CreateContractors(_contractorsId.Value)); + } + else + { + _contractorsRepository.CreateContractors(CreateContractors(0)); + } + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + } +} diff --git a/ProjectRepairWork/Form1.resx b/ProjectRepairWork/Forms/FormContractor.resx similarity index 93% rename from ProjectRepairWork/Form1.resx rename to ProjectRepairWork/Forms/FormContractor.resx index 1af7de1..af32865 100644 --- a/ProjectRepairWork/Form1.resx +++ b/ProjectRepairWork/Forms/FormContractor.resx @@ -1,17 +1,17 @@  - diff --git a/ProjectRepairWork/Forms/FormContractors.Designer.cs b/ProjectRepairWork/Forms/FormContractors.Designer.cs new file mode 100644 index 0000000..d1fc8f0 --- /dev/null +++ b/ProjectRepairWork/Forms/FormContractors.Designer.cs @@ -0,0 +1,125 @@ +namespace ProjectRepairWork.Forms +{ + partial class FormContractors + { + /// + /// 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() + { + dataGridView = new DataGridView(); + panel1 = new Panel(); + ButtonDel = new Button(); + ButtonUpd = new Button(); + ButtonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(771, 446); + dataGridView.TabIndex = 3; + // + // panel1 + // + panel1.Controls.Add(ButtonDel); + panel1.Controls.Add(ButtonUpd); + panel1.Controls.Add(ButtonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(771, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(167, 446); + panel1.TabIndex = 2; + // + // ButtonDel + // + ButtonDel.BackgroundImage = Properties.Resources.free_icon_font_cross; + ButtonDel.BackgroundImageLayout = ImageLayout.Stretch; + ButtonDel.Location = new Point(32, 252); + ButtonDel.Name = "ButtonDel"; + ButtonDel.Size = new Size(105, 92); + ButtonDel.TabIndex = 2; + ButtonDel.UseVisualStyleBackColor = true; + ButtonDel.Click += ButtonDel_Click; + // + // ButtonUpd + // + ButtonUpd.BackgroundImage = Properties.Resources.free_icon_font_pencil_3917376; + ButtonUpd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonUpd.Location = new Point(32, 137); + ButtonUpd.Name = "ButtonUpd"; + ButtonUpd.Size = new Size(105, 92); + ButtonUpd.TabIndex = 1; + ButtonUpd.UseVisualStyleBackColor = true; + ButtonUpd.Click += ButtonUpd_Click; + // + // ButtonAdd + // + ButtonAdd.BackgroundImage = Properties.Resources.free_icon_font_plus; + ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonAdd.Location = new Point(32, 12); + ButtonAdd.Name = "ButtonAdd"; + ButtonAdd.Size = new Size(105, 92); + ButtonAdd.TabIndex = 0; + ButtonAdd.UseVisualStyleBackColor = true; + ButtonAdd.Click += ButtonAdd_Click; + // + // FormContractors + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(938, 446); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormContractors"; + Text = "Подрядчики"; + Load += FormContractors_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridView; + private Panel panel1; + private Button ButtonDel; + private Button ButtonUpd; + private Button ButtonAdd; + } +} \ No newline at end of file diff --git a/ProjectRepairWork/Forms/FormContractors.cs b/ProjectRepairWork/Forms/FormContractors.cs new file mode 100644 index 0000000..ec739c8 --- /dev/null +++ b/ProjectRepairWork/Forms/FormContractors.cs @@ -0,0 +1,107 @@ +using ProjectRepairWork.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Xml.Linq; +using Unity; + +namespace ProjectRepairWork.Forms +{ + + public partial class FormContractors : Form + { + private readonly IUnityContainer _container; + private readonly IContractorsRepository _contractorsRepository; + public FormContractors(IUnityContainer container, IContractorsRepository premisesRepository) + { + InitializeComponent(); + + _container = container ?? throw new ArgumentNullException(nameof(container)); + _contractorsRepository = premisesRepository ?? throw new ArgumentNullException(nameof(premisesRepository)); + } + + private void FormContractors_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _contractorsRepository.DeletedContractors(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _contractorsRepository.ReadContractors(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["ID"].Value); + return true; + } + } +} diff --git a/ProjectRepairWork/Forms/FormContractors.resx b/ProjectRepairWork/Forms/FormContractors.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectRepairWork/Forms/FormContractors.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/ProjectRepairWork/Forms/FormCost.Designer.cs b/ProjectRepairWork/Forms/FormCost.Designer.cs new file mode 100644 index 0000000..7b78b2c --- /dev/null +++ b/ProjectRepairWork/Forms/FormCost.Designer.cs @@ -0,0 +1,98 @@ +namespace ProjectRepairWork.Forms +{ + partial class FormCost + { + /// + /// 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(); + numericUpDownPrice = new NumericUpDown(); + PriceLabel = new Label(); + ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).BeginInit(); + SuspendLayout(); + // + // ButtonCancel + // + ButtonCancel.Location = new Point(220, 211); + ButtonCancel.Name = "ButtonCancel"; + ButtonCancel.Size = new Size(170, 29); + ButtonCancel.TabIndex = 16; + ButtonCancel.Text = "Отмена"; + ButtonCancel.UseVisualStyleBackColor = true; + ButtonCancel.Click += ButtonCancel_Click; + // + // ButtonSave + // + ButtonSave.Location = new Point(18, 211); + ButtonSave.Name = "ButtonSave"; + ButtonSave.Size = new Size(170, 29); + ButtonSave.TabIndex = 15; + ButtonSave.Text = "Сохранить"; + ButtonSave.UseVisualStyleBackColor = true; + ButtonSave.Click += ButtonSave_Click; + // + // numericUpDownPrice + // + numericUpDownPrice.Location = new Point(180, 97); + numericUpDownPrice.Name = "numericUpDownPrice"; + numericUpDownPrice.Size = new Size(200, 27); + numericUpDownPrice.TabIndex = 14; + numericUpDownPrice.Value = new decimal(new int[] { 1, 0, 0, 131072 }); + // + // PriceLabel + // + PriceLabel.AutoSize = true; + PriceLabel.Location = new Point(72, 104); + PriceLabel.Name = "PriceLabel"; + PriceLabel.Size = new Size(83, 20); + PriceLabel.TabIndex = 13; + PriceLabel.Text = "Стоимость"; + // + // FormCost + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(408, 259); + Controls.Add(ButtonCancel); + Controls.Add(ButtonSave); + Controls.Add(numericUpDownPrice); + Controls.Add(PriceLabel); + Name = "FormCost"; + Text = "Затрата"; + ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button ButtonCancel; + private Button ButtonSave; + private NumericUpDown numericUpDownPrice; + private Label PriceLabel; + } +} \ No newline at end of file diff --git a/ProjectRepairWork/Forms/FormCost.cs b/ProjectRepairWork/Forms/FormCost.cs new file mode 100644 index 0000000..735b3aa --- /dev/null +++ b/ProjectRepairWork/Forms/FormCost.cs @@ -0,0 +1,82 @@ +using ProjectRepairWork.Repositories; +using ProjectRepairWork.Entities; +using ProjectRepairWork.Repositories.Implementation; +using System.Windows.Forms; +using ProjectRepairWork.Entities.Enums; + +namespace ProjectRepairWork.Forms +{ + public partial class FormCost : Form + { + + private readonly ICostRepository _costRepository; + private int? _costId; + + public int Id + { + set + { + try + { + var premises = _costRepository.ReadCostById(value); + if (premises == null) + { + throw new InvalidDataException(nameof(premises)); + } + numericUpDownPrice.Value = (decimal)premises.Price; + _costId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormCost(ICostRepository costRepository) + { + InitializeComponent(); + _costRepository = costRepository ?? throw new ArgumentNullException(nameof(costRepository)); + + } + + + + + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (numericUpDownPrice.Value == 0) + { + throw new Exception("Имеются незаполненные поля"); + } + + if (_costId.HasValue) + { + _costRepository.UpdateCost(CreateCost(_costId.Value)); + } + else + { + _costRepository.CreateCost(CreateCost(0)); + } + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + + private Cost CreateCost(int id) => Cost.CreatEntity( + id, Convert.ToInt32(numericUpDownPrice.Value)); + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + + + } +} diff --git a/ProjectRepairWork/Forms/FormCost.resx b/ProjectRepairWork/Forms/FormCost.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectRepairWork/Forms/FormCost.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/ProjectRepairWork/Forms/FormCosts.Designer.cs b/ProjectRepairWork/Forms/FormCosts.Designer.cs new file mode 100644 index 0000000..7cf31ba --- /dev/null +++ b/ProjectRepairWork/Forms/FormCosts.Designer.cs @@ -0,0 +1,125 @@ +namespace ProjectRepairWork.Forms +{ + partial class FormCosts + { + /// + /// 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() + { + dataGridView = new DataGridView(); + panel1 = new Panel(); + ButtonDel = new Button(); + ButtonUpd = new Button(); + ButtonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(633, 450); + dataGridView.TabIndex = 5; + // + // panel1 + // + panel1.Controls.Add(ButtonDel); + panel1.Controls.Add(ButtonUpd); + panel1.Controls.Add(ButtonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(633, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(167, 450); + panel1.TabIndex = 4; + // + // ButtonDel + // + ButtonDel.BackgroundImage = Properties.Resources.free_icon_font_cross; + ButtonDel.BackgroundImageLayout = ImageLayout.Stretch; + ButtonDel.Location = new Point(32, 252); + ButtonDel.Name = "ButtonDel"; + ButtonDel.Size = new Size(105, 92); + ButtonDel.TabIndex = 2; + ButtonDel.UseVisualStyleBackColor = true; + ButtonDel.Click += ButtonDel_Click; + // + // ButtonUpd + // + ButtonUpd.BackgroundImage = Properties.Resources.free_icon_font_pencil_3917376; + ButtonUpd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonUpd.Location = new Point(32, 137); + ButtonUpd.Name = "ButtonUpd"; + ButtonUpd.Size = new Size(105, 92); + ButtonUpd.TabIndex = 1; + ButtonUpd.UseVisualStyleBackColor = true; + ButtonUpd.Click += ButtonUpd_Click; + // + // ButtonAdd + // + ButtonAdd.BackgroundImage = Properties.Resources.free_icon_font_plus; + ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonAdd.Location = new Point(32, 12); + ButtonAdd.Name = "ButtonAdd"; + ButtonAdd.Size = new Size(105, 92); + ButtonAdd.TabIndex = 0; + ButtonAdd.UseVisualStyleBackColor = true; + ButtonAdd.Click += ButtonAdd_Click; + // + // FormCosts + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormCosts"; + Text = "Затраты"; + Load += FormCosts_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridView; + private Panel panel1; + private Button ButtonDel; + private Button ButtonUpd; + private Button ButtonAdd; + } +} \ No newline at end of file diff --git a/ProjectRepairWork/Forms/FormCosts.cs b/ProjectRepairWork/Forms/FormCosts.cs new file mode 100644 index 0000000..9bc3699 --- /dev/null +++ b/ProjectRepairWork/Forms/FormCosts.cs @@ -0,0 +1,107 @@ +using ProjectRepairWork.Repositories; +using ProjectRepairWork.Repositories.Implementation; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Xml.Linq; +using Unity; + +namespace ProjectRepairWork.Forms +{ + public partial class FormCosts : Form + { + private readonly IUnityContainer _container; + private readonly ICostRepository _costRepository; + public FormCosts(ICostRepository costRepository, IUnityContainer container) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _costRepository = costRepository ?? throw new ArgumentNullException(nameof(costRepository)); + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonUpd_Click(object sender, EventArgs e) + { + + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _costRepository.DeletedCost(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _costRepository.ReadCost(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["ID"].Value); + return true; + } + + private void FormCosts_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/ProjectRepairWork/Forms/FormCosts.resx b/ProjectRepairWork/Forms/FormCosts.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectRepairWork/Forms/FormCosts.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/ProjectRepairWork/Forms/FormPremise.Designer.cs b/ProjectRepairWork/Forms/FormPremise.Designer.cs new file mode 100644 index 0000000..51b78d1 --- /dev/null +++ b/ProjectRepairWork/Forms/FormPremise.Designer.cs @@ -0,0 +1,212 @@ +namespace ProjectRepairWork.Forms +{ + partial class FormPremise + { + /// + /// 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() + { + ClientName = new Label(); + textBoxClientName = new TextBox(); + Address = new Label(); + textBoxAddress = new TextBox(); + Area = new Label(); + dateTimePickerStart = new DateTimePicker(); + dateTimePickerEnd = new DateTimePicker(); + numericUpDownArea = new NumericUpDown(); + DateStart = new Label(); + DateEnd = new Label(); + ButtonSave = new Button(); + ButtonCancel = new Button(); + labelPremisesType = new Label(); + comboBoxPremisesType = new ComboBox(); + ((System.ComponentModel.ISupportInitialize)numericUpDownArea).BeginInit(); + SuspendLayout(); + // + // ClientName + // + ClientName.AutoSize = true; + ClientName.Location = new Point(96, 30); + ClientName.Name = "ClientName"; + ClientName.Size = new Size(98, 20); + ClientName.TabIndex = 0; + ClientName.Text = "Имя клиента"; + // + // textBoxClientName + // + textBoxClientName.Location = new Point(200, 30); + textBoxClientName.Name = "textBoxClientName"; + textBoxClientName.Size = new Size(200, 27); + textBoxClientName.TabIndex = 1; + // + // Address + // + Address.AutoSize = true; + Address.Location = new Point(143, 76); + Address.Name = "Address"; + Address.Size = new Size(51, 20); + Address.TabIndex = 2; + Address.Text = "Адрес"; + // + // textBoxAddress + // + textBoxAddress.Location = new Point(200, 76); + textBoxAddress.Name = "textBoxAddress"; + textBoxAddress.Size = new Size(200, 27); + textBoxAddress.TabIndex = 3; + // + // Area + // + Area.AutoSize = true; + Area.Location = new Point(85, 130); + Area.Name = "Area"; + Area.Size = new Size(109, 20); + Area.TabIndex = 4; + Area.Text = "Площадь, кв.м"; + // + // dateTimePickerStart + // + dateTimePickerStart.Location = new Point(200, 217); + dateTimePickerStart.Name = "dateTimePickerStart"; + dateTimePickerStart.Size = new Size(200, 27); + dateTimePickerStart.TabIndex = 6; + // + // dateTimePickerEnd + // + dateTimePickerEnd.Location = new Point(200, 250); + dateTimePickerEnd.Name = "dateTimePickerEnd"; + dateTimePickerEnd.Size = new Size(200, 27); + dateTimePickerEnd.TabIndex = 7; + // + // numericUpDownArea + // + numericUpDownArea.DecimalPlaces = 2; + numericUpDownArea.Location = new Point(200, 123); + numericUpDownArea.Name = "numericUpDownArea"; + numericUpDownArea.Size = new Size(200, 27); + numericUpDownArea.TabIndex = 8; + numericUpDownArea.Value = new decimal(new int[] { 1, 0, 0, 131072 }); + // + // DateStart + // + DateStart.AutoSize = true; + DateStart.Location = new Point(55, 222); + DateStart.Name = "DateStart"; + DateStart.Size = new Size(139, 20); + DateStart.TabIndex = 9; + DateStart.Text = "Дата начала работ"; + // + // DateEnd + // + DateEnd.AutoSize = true; + DateEnd.Location = new Point(28, 255); + DateEnd.Name = "DateEnd"; + DateEnd.Size = new Size(166, 20); + DateEnd.TabIndex = 10; + DateEnd.Text = "Дата окончания работ"; + // + // ButtonSave + // + ButtonSave.Location = new Point(28, 316); + ButtonSave.Name = "ButtonSave"; + ButtonSave.Size = new Size(170, 29); + ButtonSave.TabIndex = 11; + ButtonSave.Text = "Сохранить"; + ButtonSave.UseVisualStyleBackColor = true; + ButtonSave.Click += Save_Click; + // + // ButtonCancel + // + ButtonCancel.Location = new Point(230, 316); + ButtonCancel.Name = "ButtonCancel"; + ButtonCancel.Size = new Size(170, 29); + ButtonCancel.TabIndex = 12; + ButtonCancel.Text = "Отмена"; + ButtonCancel.UseVisualStyleBackColor = true; + ButtonCancel.Click += Cancel_Click; + // + // labelPremisesType + // + labelPremisesType.AutoSize = true; + labelPremisesType.Location = new Point(72, 174); + labelPremisesType.Name = "labelPremisesType"; + labelPremisesType.Size = new Size(122, 20); + labelPremisesType.TabIndex = 13; + labelPremisesType.Text = "Тип помещения"; + // + // comboBoxPremisesType + // + comboBoxPremisesType.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxPremisesType.FormattingEnabled = true; + comboBoxPremisesType.Location = new Point(200, 171); + comboBoxPremisesType.Name = "comboBoxPremisesType"; + comboBoxPremisesType.Size = new Size(200, 28); + comboBoxPremisesType.TabIndex = 14; + // + // FormPremise + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(424, 376); + Controls.Add(comboBoxPremisesType); + Controls.Add(labelPremisesType); + Controls.Add(ButtonCancel); + Controls.Add(ButtonSave); + Controls.Add(DateEnd); + Controls.Add(DateStart); + Controls.Add(numericUpDownArea); + Controls.Add(dateTimePickerEnd); + Controls.Add(dateTimePickerStart); + Controls.Add(Area); + Controls.Add(textBoxAddress); + Controls.Add(Address); + Controls.Add(textBoxClientName); + Controls.Add(ClientName); + Name = "FormPremise"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Помещение"; + ((System.ComponentModel.ISupportInitialize)numericUpDownArea).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label ClientName; + private TextBox textBoxClientName; + private Label Address; + private TextBox textBoxAddress; + private Label Area; + private DateTimePicker dateTimePickerStart; + private DateTimePicker dateTimePickerEnd; + private NumericUpDown numericUpDownArea; + private Label DateStart; + private Label DateEnd; + private Button ButtonSave; + private Button ButtonCancel; + private Label labelPremisesType; + private ComboBox comboBoxPremisesType; + } +} \ No newline at end of file diff --git a/ProjectRepairWork/Forms/FormPremise.cs b/ProjectRepairWork/Forms/FormPremise.cs new file mode 100644 index 0000000..3be6dde --- /dev/null +++ b/ProjectRepairWork/Forms/FormPremise.cs @@ -0,0 +1,88 @@ +using ProjectRepairWork.Repositories; +using ProjectRepairWork.Entities; +using ProjectRepairWork.Repositories.Implementation; +using System.Windows.Forms; +using ProjectRepairWork.Entities.Enums; + +namespace ProjectRepairWork.Forms +{ + public partial class FormPremise : Form + { + private readonly IPremisesRepository _premisesRepository; + private int? _premisesId; + + public int Id + { + set + { + try + { + var premises = _premisesRepository.ReadPremisesById(value); + if (premises == null) + { + throw new InvalidDataException(nameof(premises)); + } + textBoxClientName.Text = premises.ClientName; + textBoxAddress.Text = premises.Address; + numericUpDownArea.Value = (decimal)premises.Area; + dateTimePickerStart.Value = DateTime.Now; + dateTimePickerEnd.Value = DateTime.Now; + comboBoxPremisesType.SelectedItem = premises.PremisesType; + _premisesId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormPremise(IPremisesRepository premisesRepository) + { + InitializeComponent(); + _premisesRepository = premisesRepository ?? throw new ArgumentNullException(nameof(premisesRepository)); + + comboBoxPremisesType.DataSource = Enum.GetValues(typeof(PremisesType)); + } + + private void Save_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxClientName.Text) || + string.IsNullOrWhiteSpace(textBoxAddress.Text) || + comboBoxPremisesType.SelectedIndex < 1) + { + throw new Exception("Имеются незаполненные поля"); + } + + if (_premisesId.HasValue) + { + _premisesRepository.UpdatePremises(CreatePremises(_premisesId.Value)); + } + else + { + _premisesRepository.CreatePremises(CreatePremises(0)); + } + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void Cancel_Click(object sender, EventArgs e) => Close(); + + private Premises CreatePremises(int id) => Premises.CreatEntity( + id, + textBoxClientName.Text, + textBoxAddress.Text, + Convert.ToInt32(numericUpDownArea.Value), + dateTimePickerStart.Value, dateTimePickerStart.Value, (PremisesType)comboBoxPremisesType.SelectedItem!); + + + } +} diff --git a/ProjectRepairWork/Forms/FormPremise.resx b/ProjectRepairWork/Forms/FormPremise.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectRepairWork/Forms/FormPremise.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/ProjectRepairWork/Forms/FormPremises.Designer.cs b/ProjectRepairWork/Forms/FormPremises.Designer.cs new file mode 100644 index 0000000..18868db --- /dev/null +++ b/ProjectRepairWork/Forms/FormPremises.Designer.cs @@ -0,0 +1,126 @@ +namespace ProjectRepairWork.Forms +{ + partial class FormPremises + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1 = new Panel(); + ButtonDel = new Button(); + ButtonUpd = new Button(); + ButtonAdd = new Button(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(ButtonDel); + panel1.Controls.Add(ButtonUpd); + panel1.Controls.Add(ButtonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(771, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(167, 446); + panel1.TabIndex = 0; + // + // ButtonDel + // + ButtonDel.BackgroundImage = Properties.Resources.free_icon_font_cross; + ButtonDel.BackgroundImageLayout = ImageLayout.Stretch; + ButtonDel.Location = new Point(32, 252); + ButtonDel.Name = "ButtonDel"; + ButtonDel.Size = new Size(105, 92); + ButtonDel.TabIndex = 2; + ButtonDel.UseVisualStyleBackColor = true; + ButtonDel.Click += ButtonDel_Click; + // + // ButtonUpd + // + ButtonUpd.BackgroundImage = Properties.Resources.free_icon_font_pencil_3917376; + ButtonUpd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonUpd.Location = new Point(32, 137); + ButtonUpd.Name = "ButtonUpd"; + ButtonUpd.Size = new Size(105, 92); + ButtonUpd.TabIndex = 1; + ButtonUpd.UseVisualStyleBackColor = true; + ButtonUpd.Click += ButtonUpd_Click; + // + // ButtonAdd + // + ButtonAdd.BackgroundImage = Properties.Resources.free_icon_font_plus; + ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonAdd.Location = new Point(32, 12); + ButtonAdd.Name = "ButtonAdd"; + ButtonAdd.Size = new Size(105, 92); + ButtonAdd.TabIndex = 0; + ButtonAdd.UseVisualStyleBackColor = true; + ButtonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(771, 446); + dataGridView.TabIndex = 1; + // + // FormPremises + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(938, 446); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormPremises"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Помещения"; + Load += FormPremises_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button ButtonAdd; + private DataGridView dataGridView; + private Button ButtonDel; + private Button ButtonUpd; + } +} \ No newline at end of file diff --git a/ProjectRepairWork/Forms/FormPremises.cs b/ProjectRepairWork/Forms/FormPremises.cs new file mode 100644 index 0000000..b663ec9 --- /dev/null +++ b/ProjectRepairWork/Forms/FormPremises.cs @@ -0,0 +1,96 @@ +using ProjectRepairWork.Repositories; +using ProjectRepairWork.Entities; +using Unity; + +namespace ProjectRepairWork.Forms +{ + public partial class FormPremises : Form + { + private readonly IUnityContainer _container; + private readonly IPremisesRepository _premisesRepository; + + public FormPremises(IUnityContainer container, IPremisesRepository premisesRepository) + { + InitializeComponent(); + + _container = container ?? throw new ArgumentNullException(nameof(container)); + _premisesRepository = premisesRepository ?? throw new ArgumentNullException(nameof(premisesRepository)); + } + + 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 FormPremises_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _premisesRepository.DeletePremises(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _premisesRepository.ReadPremises(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["ID"].Value); + return true; + } + } +} diff --git a/ProjectRepairWork/Forms/FormPremises.resx b/ProjectRepairWork/Forms/FormPremises.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectRepairWork/Forms/FormPremises.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/ProjectRepairWork/Forms/FormRepair.Designer.cs b/ProjectRepairWork/Forms/FormRepair.Designer.cs new file mode 100644 index 0000000..f157cfc --- /dev/null +++ b/ProjectRepairWork/Forms/FormRepair.Designer.cs @@ -0,0 +1,160 @@ +namespace ProjectRepairWork.Forms +{ + partial class FormRepair + { + /// + /// 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() + { + comboBoxPremises = new ComboBox(); + comboBoxContractors = new ComboBox(); + ButtonCancel = new Button(); + ButtonSave = new Button(); + label2 = new Label(); + label1 = new Label(); + dataGridViewWorks = new DataGridView(); + ColumnWork = new DataGridViewComboBoxColumn(); + ColumnCount = new DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)dataGridViewWorks).BeginInit(); + SuspendLayout(); + // + // comboBoxPremises + // + comboBoxPremises.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxPremises.FormattingEnabled = true; + comboBoxPremises.Location = new Point(152, 72); + comboBoxPremises.Margin = new Padding(3, 4, 3, 4); + comboBoxPremises.Name = "comboBoxPremises"; + comboBoxPremises.Size = new Size(199, 28); + comboBoxPremises.TabIndex = 27; + // + // comboBoxContractors + // + comboBoxContractors.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxContractors.FormattingEnabled = true; + comboBoxContractors.Location = new Point(152, 28); + comboBoxContractors.Margin = new Padding(3, 4, 3, 4); + comboBoxContractors.Name = "comboBoxContractors"; + comboBoxContractors.Size = new Size(199, 28); + comboBoxContractors.TabIndex = 26; + // + // ButtonCancel + // + ButtonCancel.Location = new Point(368, 418); + ButtonCancel.Margin = new Padding(3, 4, 3, 4); + ButtonCancel.Name = "ButtonCancel"; + ButtonCancel.Size = new Size(110, 31); + ButtonCancel.TabIndex = 25; + ButtonCancel.Text = "Отменить"; + ButtonCancel.UseVisualStyleBackColor = true; + ButtonCancel.Click += ButtonCancel_Click; + // + // ButtonSave + // + ButtonSave.Location = new Point(14, 418); + ButtonSave.Margin = new Padding(3, 4, 3, 4); + ButtonSave.Name = "ButtonSave"; + ButtonSave.Size = new Size(110, 31); + ButtonSave.TabIndex = 24; + ButtonSave.Text = "Сохранить"; + ButtonSave.UseVisualStyleBackColor = true; + ButtonSave.Click += ButtonSave_Click; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(29, 69); + label2.Name = "label2"; + label2.Size = new Size(94, 20); + label2.TabIndex = 19; + label2.Text = "Помещения"; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(29, 28); + label1.Name = "label1"; + label1.Size = new Size(95, 20); + label1.TabIndex = 18; + label1.Text = "Подрядчики"; + // + // dataGridViewWorks + // + dataGridViewWorks.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewWorks.Columns.AddRange(new DataGridViewColumn[] { ColumnWork, ColumnCount }); + dataGridViewWorks.Location = new Point(14, 212); + dataGridViewWorks.Name = "dataGridViewWorks"; + dataGridViewWorks.RowHeadersVisible = false; + dataGridViewWorks.RowHeadersWidth = 51; + dataGridViewWorks.Size = new Size(464, 188); + dataGridViewWorks.TabIndex = 30; + // + // ColumnWork + // + ColumnWork.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + ColumnWork.HeaderText = "Вид Работы"; + ColumnWork.MinimumWidth = 6; + ColumnWork.Name = "ColumnWork"; + ColumnWork.Resizable = DataGridViewTriState.True; + ColumnWork.SortMode = DataGridViewColumnSortMode.Automatic; + // + // ColumnCount + // + ColumnCount.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + ColumnCount.HeaderText = "Количество"; + ColumnCount.MinimumWidth = 6; + ColumnCount.Name = "ColumnCount"; + // + // FormRepair + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(490, 462); + Controls.Add(dataGridViewWorks); + Controls.Add(comboBoxPremises); + Controls.Add(comboBoxContractors); + Controls.Add(ButtonCancel); + Controls.Add(ButtonSave); + Controls.Add(label2); + Controls.Add(label1); + Name = "FormRepair"; + Text = "Ремонт"; + ((System.ComponentModel.ISupportInitialize)dataGridViewWorks).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + private ComboBox comboBoxPremises; + private ComboBox comboBoxContractors; + private Button ButtonCancel; + private Button ButtonSave; + private Label label2; + private Label label1; + private DataGridView dataGridViewWorks; + private DataGridViewComboBoxColumn ColumnWork; + private DataGridViewTextBoxColumn ColumnCount; + } +} \ No newline at end of file diff --git a/ProjectRepairWork/Forms/FormRepair.cs b/ProjectRepairWork/Forms/FormRepair.cs new file mode 100644 index 0000000..bd8fe15 --- /dev/null +++ b/ProjectRepairWork/Forms/FormRepair.cs @@ -0,0 +1,78 @@ +using ProjectRepairWork.Repositories; +using ProjectRepairWork.Entities; +using ProjectRepairWork.Repositories.Implementation; +using System.Windows.Forms; +using ProjectRepairWork.Entities.Enums; + +namespace ProjectRepairWork.Forms +{ + public partial class FormRepair : Form + { + private readonly IRepairRepository _repairRepository; + + public FormRepair(IRepairRepository repairRepository, IContractorsRepository contractorsRepository, ICostRepository costRepository, IPremisesRepository premisesRepository, IWorksRepository worksRepository) + { + InitializeComponent(); + _repairRepository = repairRepository ?? throw new ArgumentNullException(nameof(repairRepository)); + + + + comboBoxContractors.DataSource = contractorsRepository.ReadContractors(); + comboBoxContractors.DisplayMember = "CompanyName"; + comboBoxContractors.ValueMember = "Id"; + + comboBoxPremises.DataSource = premisesRepository.ReadPremises(); + comboBoxPremises.DisplayMember = "Name"; + comboBoxPremises.ValueMember = "Id"; + + ColumnWork.DataSource = worksRepository.ReadWorks(); + ColumnWork.DisplayMember = "Name"; + ColumnWork.ValueMember = "Id"; + + + + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (dataGridViewWorks.RowCount < 1|| comboBoxContractors.SelectedIndex < 0 || + comboBoxPremises.SelectedIndex < 0) + + { + throw new Exception("Имеются незаполненные поля"); + } + + _repairRepository.CraeteRepair(Repair.CreatOpertions(0, + (int)comboBoxContractors.SelectedValue!, + (int)comboBoxPremises.SelectedValue!, CreateRepairFromDataGrid())); + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private List CreateRepairFromDataGrid() + { + var list = new List(); + foreach(DataGridViewRow row in dataGridViewWorks.Rows) + { + if (row.Cells["ColumnWork"].Value == null || + row.Cells["ColumnCount"].Value == null) + { + continue; + } + list.Add(RepairRepair.CreatElement(0, + Convert.ToInt32(row.Cells["ColumnWork"].Value), + Convert.ToInt32(row.Cells["ColumnCount"].Value))); + } + return list; + } + } +} \ No newline at end of file diff --git a/ProjectRepairWork/Forms/FormRepair.resx b/ProjectRepairWork/Forms/FormRepair.resx new file mode 100644 index 0000000..6c3a593 --- /dev/null +++ b/ProjectRepairWork/Forms/FormRepair.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/ProjectRepairWork/Forms/FormRepairs.Designer.cs b/ProjectRepairWork/Forms/FormRepairs.Designer.cs new file mode 100644 index 0000000..1f42dd5 --- /dev/null +++ b/ProjectRepairWork/Forms/FormRepairs.Designer.cs @@ -0,0 +1,97 @@ +namespace ProjectRepairWork.Forms +{ + partial class FormRepairs + { + /// + /// 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() + { + dataGridView = new DataGridView(); + panel1 = new Panel(); + ButtonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(633, 450); + dataGridView.TabIndex = 3; + // + // panel1 + // + panel1.Controls.Add(ButtonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(633, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(167, 450); + panel1.TabIndex = 2; + // + // ButtonAdd + // + ButtonAdd.BackgroundImage = Properties.Resources.free_icon_font_plus; + ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonAdd.Location = new Point(32, 12); + ButtonAdd.Name = "ButtonAdd"; + ButtonAdd.Size = new Size(105, 92); + ButtonAdd.TabIndex = 0; + ButtonAdd.UseVisualStyleBackColor = true; + ButtonAdd.Click += ButtonAdd_Click; + // + // FormRepairs + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormRepairs"; + Text = "Ремонтные работы"; + Load += FormRepairs_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridView; + private Panel panel1; + private Button ButtonAdd; + } +} \ No newline at end of file diff --git a/ProjectRepairWork/Forms/FormRepairs.cs b/ProjectRepairWork/Forms/FormRepairs.cs new file mode 100644 index 0000000..5b9fca8 --- /dev/null +++ b/ProjectRepairWork/Forms/FormRepairs.cs @@ -0,0 +1,52 @@ +using ProjectRepairWork.Repositories; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace ProjectRepairWork.Forms +{ + public partial class FormRepairs : Form + { + private readonly IUnityContainer _container; + private readonly IRepairRepository _repairRepository; + public FormRepairs(IUnityContainer container, IRepairRepository repairRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _repairRepository = repairRepository ?? throw new ArgumentNullException(nameof(repairRepository)); + } + + private void FormRepairs_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _repairRepository.ReadRepair(); + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/ProjectRepairWork/Forms/FormRepairs.resx b/ProjectRepairWork/Forms/FormRepairs.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectRepairWork/Forms/FormRepairs.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/ProjectRepairWork/Forms/FormWork.Designer.cs b/ProjectRepairWork/Forms/FormWork.Designer.cs new file mode 100644 index 0000000..8921e5a --- /dev/null +++ b/ProjectRepairWork/Forms/FormWork.Designer.cs @@ -0,0 +1,117 @@ +namespace ProjectRepairWork.Forms +{ + partial class FormWork + { + /// + /// 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() + { + labelMaterialsName = new Label(); + textBoxWorksName = new TextBox(); + WorksName = new Label(); + Cancel = new Button(); + Save = new Button(); + checkedListBoxMaterialsName = new CheckedListBox(); + SuspendLayout(); + // + // labelMaterialsName + // + labelMaterialsName.AutoSize = true; + labelMaterialsName.Location = new Point(103, 80); + labelMaterialsName.Name = "labelMaterialsName"; + labelMaterialsName.Size = new Size(89, 20); + labelMaterialsName.TabIndex = 17; + labelMaterialsName.Text = "Материалы"; + // + // textBoxWorksName + // + textBoxWorksName.Location = new Point(198, 26); + textBoxWorksName.Name = "textBoxWorksName"; + textBoxWorksName.Size = new Size(200, 27); + textBoxWorksName.TabIndex = 16; + // + // WorksName + // + WorksName.AutoSize = true; + WorksName.Location = new Point(22, 29); + WorksName.Name = "WorksName"; + WorksName.Size = new Size(170, 20); + WorksName.TabIndex = 15; + WorksName.Text = "Название вида работы"; + // + // Cancel + // + Cancel.Location = new Point(228, 233); + Cancel.Name = "Cancel"; + Cancel.Size = new Size(170, 30); + Cancel.TabIndex = 20; + Cancel.Text = "Отмена"; + Cancel.UseVisualStyleBackColor = true; + Cancel.Click += Cancel_Click; + // + // Save + // + Save.Location = new Point(22, 233); + Save.Name = "Save"; + Save.Size = new Size(170, 30); + Save.TabIndex = 19; + Save.Text = "Сохранить"; + Save.UseVisualStyleBackColor = true; + Save.Click += Save_Click; + // + // checkedListBoxMaterialsName + // + checkedListBoxMaterialsName.FormattingEnabled = true; + checkedListBoxMaterialsName.Location = new Point(202, 80); + checkedListBoxMaterialsName.Name = "checkedListBoxMaterialsName"; + checkedListBoxMaterialsName.Size = new Size(196, 114); + checkedListBoxMaterialsName.TabIndex = 21; + // + // FormWork + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(410, 288); + Controls.Add(checkedListBoxMaterialsName); + Controls.Add(Cancel); + Controls.Add(Save); + Controls.Add(labelMaterialsName); + Controls.Add(textBoxWorksName); + Controls.Add(WorksName); + Name = "FormWork"; + Text = "Работа"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + private Label labelMaterialsName; + private TextBox textBoxWorksName; + private Label WorksName; + private Button Cancel; + private Button Save; + private CheckedListBox checkedListBoxMaterialsName; + } +} \ No newline at end of file diff --git a/ProjectRepairWork/Forms/FormWork.cs b/ProjectRepairWork/Forms/FormWork.cs new file mode 100644 index 0000000..5bfa6c2 --- /dev/null +++ b/ProjectRepairWork/Forms/FormWork.cs @@ -0,0 +1,95 @@ +using ProjectRepairWork.Repositories; +using ProjectRepairWork.Entities; +using ProjectRepairWork.Repositories.Implementation; +using System.Windows.Forms; +using ProjectRepairWork.Entities.Enums; + +namespace ProjectRepairWork.Forms +{ + public partial class FormWork : Form + { + + + private readonly IWorksRepository _worksRepository; + private int? _worksId; + + public int Id + { + set + { + try + { + var works = _worksRepository.ReadWorksById(value); + if (works == null) + { + throw new InvalidDataException(nameof(works)); + } + foreach (MaterialsName elem in Enum.GetValues(typeof(MaterialsName))) + { + if ((elem & works.MaterialsName) != 0) + { + + checkedListBoxMaterialsName.SetItemChecked(checkedListBoxMaterialsName.Items.IndexOf(elem), true); + } + } + textBoxWorksName.Text = works.WorkName; + _worksId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormWork(IWorksRepository worksRepository) + { + InitializeComponent(); + _worksRepository = worksRepository ?? throw new ArgumentNullException(nameof(worksRepository)); + foreach(var elem in Enum.GetValues(typeof(MaterialsName))) + { + checkedListBoxMaterialsName.Items.Add(elem); + } + } + private void Save_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxWorksName.Text) || + checkedListBoxMaterialsName.CheckedItems.Count == 0) + { + throw new Exception("Имеются незаполненные поля"); + } + + if (_worksId.HasValue) + { + _worksRepository.UpdateWorks(CreateWorks(_worksId.Value)); + } + else + { + _worksRepository.CreateWorks(CreateWorks(0)); + } + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void Cancel_Click(object sender, EventArgs e) => Close(); + + private Works CreateWorks(int id) + { + MaterialsName materialsName = MaterialsName.None; + foreach(var elem in checkedListBoxMaterialsName.CheckedItems) + { + materialsName |= (MaterialsName)elem; + } + + return Works.CreatEntity(id, textBoxWorksName.Text, materialsName); + } + + } +} diff --git a/ProjectRepairWork/Forms/FormWork.resx b/ProjectRepairWork/Forms/FormWork.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectRepairWork/Forms/FormWork.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/ProjectRepairWork/Forms/FormWorks.Designer.cs b/ProjectRepairWork/Forms/FormWorks.Designer.cs new file mode 100644 index 0000000..f058306 --- /dev/null +++ b/ProjectRepairWork/Forms/FormWorks.Designer.cs @@ -0,0 +1,126 @@ +namespace ProjectRepairWork.Forms +{ + partial class FormWorks + { + /// + /// 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() + { + dataGridView = new DataGridView(); + panel1 = new Panel(); + ButtonDel = new Button(); + ButtonUpd = new Button(); + ButtonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(771, 446); + dataGridView.TabIndex = 3; + // + // panel1 + // + panel1.Controls.Add(ButtonDel); + panel1.Controls.Add(ButtonUpd); + panel1.Controls.Add(ButtonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(771, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(167, 446); + panel1.TabIndex = 2; + // + // ButtonDel + // + ButtonDel.BackgroundImage = Properties.Resources.free_icon_font_cross; + ButtonDel.BackgroundImageLayout = ImageLayout.Stretch; + ButtonDel.Location = new Point(32, 252); + ButtonDel.Name = "ButtonDel"; + ButtonDel.Size = new Size(105, 92); + ButtonDel.TabIndex = 2; + ButtonDel.UseVisualStyleBackColor = true; + ButtonDel.Click += ButtonDel_Click; + // + // ButtonUpd + // + ButtonUpd.BackgroundImage = Properties.Resources.free_icon_font_pencil_3917376; + ButtonUpd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonUpd.Location = new Point(32, 137); + ButtonUpd.Name = "ButtonUpd"; + ButtonUpd.Size = new Size(105, 92); + ButtonUpd.TabIndex = 1; + ButtonUpd.UseVisualStyleBackColor = true; + ButtonUpd.Click += ButtonUpd_Click; + // + // ButtonAdd + // + ButtonAdd.BackgroundImage = Properties.Resources.free_icon_font_plus; + ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonAdd.Location = new Point(32, 12); + ButtonAdd.Name = "ButtonAdd"; + ButtonAdd.Size = new Size(105, 92); + ButtonAdd.TabIndex = 0; + ButtonAdd.UseVisualStyleBackColor = true; + ButtonAdd.Click += ButtonAdd_Click; + // + // FormWorks + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(938, 446); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormWorks"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Работы"; + Load += FormWorks_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridView; + private Panel panel1; + private Button ButtonDel; + private Button ButtonUpd; + private Button ButtonAdd; + } +} \ No newline at end of file diff --git a/ProjectRepairWork/Forms/FormWorks.cs b/ProjectRepairWork/Forms/FormWorks.cs new file mode 100644 index 0000000..de7b8c3 --- /dev/null +++ b/ProjectRepairWork/Forms/FormWorks.cs @@ -0,0 +1,108 @@ +using ProjectRepairWork.Repositories; +using ProjectRepairWork.Repositories.Implementation; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Xml.Linq; +using Unity; + +namespace ProjectRepairWork.Forms +{ + public partial class FormWorks : Form + { + private readonly IUnityContainer _container; + private readonly IWorksRepository _worksRepository; + public FormWorks(IUnityContainer container, IWorksRepository worksRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _worksRepository = worksRepository ?? throw new ArgumentNullException(nameof(worksRepository)); + } + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _worksRepository.DeleteWorks(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + + } + + private void FormWorks_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _worksRepository.ReadWorks(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["ID"].Value); + return true; + } + } +} diff --git a/ProjectRepairWork/Forms/FormWorks.resx b/ProjectRepairWork/Forms/FormWorks.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectRepairWork/Forms/FormWorks.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/ProjectRepairWork/Program.cs b/ProjectRepairWork/Program.cs index c93e286..df37fa6 100644 --- a/ProjectRepairWork/Program.cs +++ b/ProjectRepairWork/Program.cs @@ -1,3 +1,7 @@ +using Unity; +using ProjectRepairWork.Repositories; +using ProjectRepairWork.Repositories.Implementation; +using Unity.Lifetime; namespace ProjectRepairWork { internal static class Program @@ -11,7 +15,18 @@ namespace ProjectRepairWork // 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/ProjectRepairWork/ProjectRepairWork.csproj b/ProjectRepairWork/ProjectRepairWork.csproj index 663fdb8..accbdf0 100644 --- a/ProjectRepairWork/ProjectRepairWork.csproj +++ b/ProjectRepairWork/ProjectRepairWork.csproj @@ -8,4 +8,23 @@ enable + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/ProjectRepairWork/Properties/Resources.Designer.cs b/ProjectRepairWork/Properties/Resources.Designer.cs new file mode 100644 index 0000000..89ae8d3 --- /dev/null +++ b/ProjectRepairWork/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ProjectRepairWork.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("ProjectRepairWork.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 free_icon_font_cross { + get { + object obj = ResourceManager.GetObject("free-icon-font-cross", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap free_icon_font_pencil_3917376 { + get { + object obj = ResourceManager.GetObject("free-icon-font-pencil-3917376", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap free_icon_font_plus { + get { + object obj = ResourceManager.GetObject("free-icon-font-plus", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap photo_2024_11_11_02_05_26 { + get { + object obj = ResourceManager.GetObject("photo_2024-11-11_02-05-26", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/ProjectRepairWork/Properties/Resources.resx b/ProjectRepairWork/Properties/Resources.resx new file mode 100644 index 0000000..69ea6f6 --- /dev/null +++ b/ProjectRepairWork/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\free-icon-font-plus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\photo_2024-11-11_02-05-26.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\free-icon-font-cross.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\free-icon-font-pencil-3917376.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ProjectRepairWork/Repositories/IContractorsRepository.cs b/ProjectRepairWork/Repositories/IContractorsRepository.cs new file mode 100644 index 0000000..fd8a0c3 --- /dev/null +++ b/ProjectRepairWork/Repositories/IContractorsRepository.cs @@ -0,0 +1,18 @@ +using ProjectRepairWork.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Repositories; + +public interface IContractorsRepository +{ + IEnumerable ReadContractors(); + + Contractors ReadContractorsById(int id); + void CreateContractors(Contractors contractors); + void UpdateContractors(Contractors contractors); + void DeletedContractors(int id); +} diff --git a/ProjectRepairWork/Repositories/ICostRepository.cs b/ProjectRepairWork/Repositories/ICostRepository.cs new file mode 100644 index 0000000..b231ab8 --- /dev/null +++ b/ProjectRepairWork/Repositories/ICostRepository.cs @@ -0,0 +1,18 @@ +using ProjectRepairWork.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Repositories; + +public interface ICostRepository +{ + IEnumerable ReadCost(); + + Cost ReadCostById(int id); + void CreateCost(Cost cost); + void UpdateCost(Cost cost); + void DeletedCost(int id); +} diff --git a/ProjectRepairWork/Repositories/IPremisesRepository.cs b/ProjectRepairWork/Repositories/IPremisesRepository.cs new file mode 100644 index 0000000..1ec29ca --- /dev/null +++ b/ProjectRepairWork/Repositories/IPremisesRepository.cs @@ -0,0 +1,18 @@ +using ProjectRepairWork.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Repositories; + +public interface IPremisesRepository +{ + IEnumerable ReadPremises(); + + Premises ReadPremisesById(int id); + void CreatePremises(Premises premises); + void UpdatePremises(Premises premises); + void DeletePremises(int id); +} diff --git a/ProjectRepairWork/Repositories/IRepairRepository.cs b/ProjectRepairWork/Repositories/IRepairRepository.cs new file mode 100644 index 0000000..6b8e90c --- /dev/null +++ b/ProjectRepairWork/Repositories/IRepairRepository.cs @@ -0,0 +1,14 @@ +using ProjectRepairWork.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Repositories; + +public interface IRepairRepository +{ + IEnumerable ReadRepair(int? contractorsId = null, int? costId = null, int? worksId = null, int? premisesId = null); + void CraeteRepair(Repair repair); +} diff --git a/ProjectRepairWork/Repositories/IWorksRepository.cs b/ProjectRepairWork/Repositories/IWorksRepository.cs new file mode 100644 index 0000000..09ae5da --- /dev/null +++ b/ProjectRepairWork/Repositories/IWorksRepository.cs @@ -0,0 +1,18 @@ +using ProjectRepairWork.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Repositories; + +public interface IWorksRepository +{ + IEnumerable ReadWorks(); + + Works ReadWorksById(int id); + void CreateWorks(Works works); + void UpdateWorks(Works works); + void DeleteWorks(int id); +} diff --git a/ProjectRepairWork/Repositories/Implementation/ContractorsRepository.cs b/ProjectRepairWork/Repositories/Implementation/ContractorsRepository.cs new file mode 100644 index 0000000..c88b4dc --- /dev/null +++ b/ProjectRepairWork/Repositories/Implementation/ContractorsRepository.cs @@ -0,0 +1,37 @@ +using ProjectRepairWork.Entities; +using ProjectRepairWork.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Repositories.Implementation; + +public class ContractorsRepository : IContractorsRepository +{ + public void CreateContractors(Contractors contractors) + { + + } + + public void DeletedContractors(int id) + { + + } + + public IEnumerable ReadContractors() + { + return []; + } + + public Contractors ReadContractorsById(int id) + { + return Contractors.CreatEntity(0, string.Empty, string.Empty); + } + + public void UpdateContractors(Contractors contractors) + { + + } +} diff --git a/ProjectRepairWork/Repositories/Implementation/CostRepository.cs b/ProjectRepairWork/Repositories/Implementation/CostRepository.cs new file mode 100644 index 0000000..517b326 --- /dev/null +++ b/ProjectRepairWork/Repositories/Implementation/CostRepository.cs @@ -0,0 +1,37 @@ +using ProjectRepairWork.Entities; +using ProjectRepairWork.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Repositories.Implementation; + +public class CostRepository : ICostRepository +{ + public void CreateCost(Cost cost) + { + + } + + public void DeletedCost(int id) + { + + } + + public IEnumerable ReadCost() + { + return []; + } + + public Cost ReadCostById(int id) + { + return Cost.CreatEntity(0, 0); + } + + public void UpdateCost(Cost cost) + { + + } +} diff --git a/ProjectRepairWork/Repositories/Implementation/PremisesRepository.cs b/ProjectRepairWork/Repositories/Implementation/PremisesRepository.cs new file mode 100644 index 0000000..4a48547 --- /dev/null +++ b/ProjectRepairWork/Repositories/Implementation/PremisesRepository.cs @@ -0,0 +1,35 @@ +using ProjectRepairWork.Entities; +using ProjectRepairWork.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Repositories.Implementation; +public class PremisesRepository : IPremisesRepository +{ + public void CreatePremises(Premises premises) + { + + } + + public void DeletePremises(int id) + { + } + + public IEnumerable ReadPremises() + { + return []; + } + + public Premises ReadPremisesById(int id) + { + return Premises.CreatEntity(0, string.Empty, string.Empty, 0, DateTime.Now, DateTime.Now, PremisesType.None); + } + + public void UpdatePremises(Premises premises) + { + + } +} diff --git a/ProjectRepairWork/Repositories/Implementation/RepairRepository.cs b/ProjectRepairWork/Repositories/Implementation/RepairRepository.cs new file mode 100644 index 0000000..a98f3ac --- /dev/null +++ b/ProjectRepairWork/Repositories/Implementation/RepairRepository.cs @@ -0,0 +1,21 @@ +using ProjectRepairWork.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Repositories.Implementation; + +public class RepairRepository : IRepairRepository +{ + public void CraeteRepair(Repair repair) + { + + } + + public IEnumerable ReadRepair(int? contractorsId = null, int? costId = null, int? worksId = null, int? premisesId = null) + { + return[]; + } +} diff --git a/ProjectRepairWork/Repositories/Implementation/WorksRepository.cs b/ProjectRepairWork/Repositories/Implementation/WorksRepository.cs new file mode 100644 index 0000000..2857579 --- /dev/null +++ b/ProjectRepairWork/Repositories/Implementation/WorksRepository.cs @@ -0,0 +1,37 @@ +using ProjectRepairWork.Entities; +using ProjectRepairWork.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairWork.Repositories.Implementation; + +public class WorksRepository : IWorksRepository +{ + public void CreateWorks(Works works) + { + + } + + public void DeleteWorks(int id) + { + + } + + public IEnumerable ReadWorks() + { + return []; + } + + public Works ReadWorksById(int id) + { + return Works.CreatEntity(0,string.Empty, MaterialsName.None); + } + + public void UpdateWorks(Works works) + { + + } +} diff --git a/ProjectRepairWork/Resources/free-icon-font-cross.png b/ProjectRepairWork/Resources/free-icon-font-cross.png new file mode 100644 index 0000000000000000000000000000000000000000..5fd3ba6a518cdcdda42f113daa1c4c3421ac60ce GIT binary patch literal 10066 zcmX|H2UJs86MlIl#1M*xjwo>@N{N6J5v4?3m12nqhFAclS*fmoC`m-oRZwKku@bGYx zeSrtUe0B%>nFNIfTpG63K@c+H^yezKh|Hn4J8t?19Pb|adKB+(JNk0IMU?F(OQSzu zW}1XvRqu_!rSKQr<*d_Eyl%K$fwARMS@P?`?*+73u1?#P;}aVMe+s;tYlCZ6eOkME zqdU)AGxNpjxPV_L>q_bx8wYFbzrH#>QT$@c=D0(mUsQ{|ZN{YSRCiF(`0&J#7L#RF z_XAgSwXc(NfOFuZ&89ka-o=jam1|o14pZeOFcZ(hR9Xghylq)-_g#nLq_drMqHy`W zELJDd*;ZQSBDw4zCYjf}Nu5gDke_|JS3XqmZt>2={w#kZo-NW6 zjs&JJUiVWcQGeqtuU_+QC11A*a0`#8M{zE+jr=`q84xQvNz`OZ4A$H5^x8)31r3-N zmhtO9{jg{rs~TQ9pZGH)QUBKGB7w8===yJB`(VqD|JkEr!w*0DhPTZ3>Q`;rg&h63 zymsZM2#4T37uQk+b5=;?Zv1e>e^9-(DzQCbO;8g(Lrd6g?CM*kS^s`BeH!_(c(p^NQ0p)YZdpO{+@G0^YjZjXOD z)?L`LT_pEyXWjFzj%-1jO#3=$XAO+uVjXyMJ$g+i9?g3^Q87xfr`0_=z0p5KRYp!Sb)ogHF-0=k-F8&NnvcKcj+ zxzm)cNkDZ4&-Bz1s*==rP-RLB=VO#kPh~_sdY^nV8~Nr^o^*t-x9v9e*sE^kgq)+=5~Ms2 z=GE>#4c;4)$s)~nAa&N3?C4UQixZ3!G!s>`7t<1rd_+OdL+ogsQ|2zV{52a!+IUJM zOEHOV7(Q#g9sd5&YNls=Pvzx%a{Bqfu~WBKG>Vf6 z*jlvEMI#eBKWo6l07bjAo7NPrI^A!mb@ zB<%AdUOFfzK!ivZV$If(C)jPCnjRLV5X(Per%oJg-oW0P-?_z%wU(ZE;zwb0OvGNa zEBmPW+A#)}Vi;FBXq~3Fk^RfH=qf4=%*Du8Ec(Rek3Rwj-QB9+U=l4!roU8feqj9w zm)YW7-Sz&w!)*$gxwiRy^*!yghO@na4;p$+efV;ebuw zE*x`Ho&84DzVYarPMpnd4*5Z2h6?Y_Z%o@u%$~{@w1$ui59#}xS1C^(etq(otpX@t!E-SU}*3DJ( zy!vKaA66N4gGI|#;dAQbq1gG&$7c zgX+8Au8dt{TRTrnGDmXO@7Fz!{V$M9=8=IR#7TX7<%b~AdXc>9yK*lPUyXsh5IxG^l#|H$ zB+u_ER?k(NHts@rq}dH1365purDyvc$wiSAHXT|xWiDRRG_E#gp@|e@PnKXEjpBOr z_78WarWYb?3OR{Fb6ub~MJHC=@9M%KRLm7fbMpYv>FuIqKTRXVn=s3dkdS1^cW5V@ z8drWDL%!UIO1QDSVJ^pX$AP>!tjD;d#$ z&)3#9xTc-C7C5}~;+Ao9$}%fB=9em7sUg7&V;c@GbUyo`Q7NgXv8e!9%-v$=y1FU` z9O7;WICKPubfsM}f18$A+ZU&lG!oZT0xFhnwR7FtiZgF<%(HL3g3e!yZ8&z#d3&aX z6&+(?^%;8il8!s*;WQSKB5&lI;_rp<;^!75#2fEB+T2RRHMRZ${&Uu-mvJaVO|P`` zieE7|fOnyJ)yqn9&e>SVsV}!UXM_l1mE8rgDP`46?Yvedb0?@A$y;rGx7|FzmwO_> z_ab;FxT5e*;Cdi4o}-W*UnBM9w9&C^E=z(J$rpGp(tt!%(knQjWZKcd)XGa_dK?3i z=sf3TkKI%Qyt!xnz14AuEpo+Z1>*WC^Ek)o((w*8L`Xha@P+J12_3){1P{2oBRsh| z1=Vs3lB=1Td2LL_E)1fwF3(vdHpwDjC--c?&SW4VUoo;Ly9Q<+;uvKg>d-)h+>-@j zuA@zGE^fbft~+=lr&_>~TX?;fN^GyE7CuJU_{DAu@$1j_D-zpV6%Skmfq~l^yra&g zQe(PLX<<5w%+I06&(q(h*nE?w)O<5n0g2$Qwu<29Tv=X-TCFI|Fh&Gb3LPJ-5;c0_ z6xxMx`(b?WR5w0;Lq>9`A-%6O{}qsw(c|?j_vtj}(3*4Z5|IeO>PSJ(E}L_x%{hb! z48-?U|CsbDD)cLE55Rc5$0+t=l3v(Ep*B%>i;;u9s}%cJC1u)N%(T(GgB30lpR7`#BiKOb z-|#9G=dCyYC2hWkdn1!n&ooyj^3-hab8PPyBv|MtSorSOU>ioVjP#kGX}~EQHU1KPK%Tyln!0 zCoW_eHgp;F30jP(93`tfR1j>K)xW_b4d=aTzKAwI!mp7zyPj!w#%U0jbo)_usqXtF zyj0k2kJ=UWQNzD4w#htd*ydl@Go`IKHKHwv8ByTT4o*oI$Jy2^kffN6JyW&q2lBIe z91Ms&HWkC6Vj9>zdi6rROq{oO3Y(UKP<%yrbMgA!7%dKk3>z{*OTtl{dgg(w+e4V; zOQ4ha4hcODMnv8jnYn_uOg#Xjl`d0XXfBr1mMowm7#Xa?k+Q4!U}njzTiLM6#j*^D zG_nhP*zz)K{tq`EXPMn0q2^X;S2}-`Rc$}nqqp~Z@mxt&Ihw$Zp(HR+OMJ^-a?4(G z4fdb9W*l9!3{HSWLV$%Kk+xbngQl#rvC2Zb-Xc8{M_!8GM8=>0E?_G5GaFCf$a2bA zH0Ak2JPWOQi!>!7ZILdGqf2}Jq*SxMG*z8QTc`UcNB7Ta3(W?L)Okdjzpf)k*Ky<6 zP2A{Bzo%%z0{m7oe(OKBJ{()0S0#vV14g|b)1lU~joh;B1r^Z_qvJy9R#g`2^%lu? zMB0F^2S?Y#eT<45rK(qY*;Sx0VJ z_YBO#T5+MR>QxqV>Mgd|5@|iU5ggqJ<`@+_N_B(QF?cUB-Ydmcj$i#1)3qY&^YZ^LPdX{z@I1TiTX3sTWsitaV~nVe+~CrbtEu0D6DY$xI|uuT zV}DVRQS08ER81bA?-&>xeR1_=>k4g*%x8wc<`e35$ zZyfEj?h}sg6LyqIQq-n59!S|KIU9PP+^Y(Wypf9B%S`0(9DEpe9lkV*O1~Dh;a4fL zcfImQTD;QUiEZ54?QU?P=B)T_W4R zm!{$-qJjgA!=D1l(WTgC08clZUY(cudQc0~3-FI&a!B|AI_YjiNkz*GZiYFee2 zm$2$<)-1RBEc#eqYVP?* z50d6S#7C^CNu7wAS1;_GMMZQnt7aQ)Aqb;%;kP6FK82ZMa33qGQ1TTW_)`OkujS5C zb3?^h^5$YIb0T}4pEp+L0pN&ODSGEbqd#0rhL3PP&5_5abrM#!+}*HpLn>uThkqh4wDKvL8aq?0kyTp$`f2PRtYeu;@nW&pS z-wRia7(}HY>NP?JEUiW-D73X^V)xlZ_SxM8`U^#tdM(Pm>VYOvK(z$PTb_dWf$9}d z1y&}gLTJtct7~kfLI8&TjEZrt7BX;vXHjTZ6j|=oDA&jXRRiH#DpC+jp}{XBe=4LitGp0D06X#7LlC+tmi=$SO+}NvQs@p>zGKpz6%@Sdu=R5@|Y>?T5ZYx zOdM@vDb}(}Ira7MHPJBDoAxtet$(YX!)LyRKaD2Pv)vTgWZEGD# zB968_fRLBjV|r*eCSlnftQ!!R?7<}5g|D^3)FZx_gd^UBypuhqLk%c-sG3Ay&i8u# z503UahQg)CR+gC(*<~s&wB3rVeMTC{K7|zaYAs1yI~8e5qGHl5#Mje3kQ{9f)Z9l0JHWYUt{$fmk&OgP??f6xkKa>Z4+0Luf9>d7$lHK6K&xGmv( z5$|C0LNyTgr@~G$6;qG~s;~k_%*b2TF z`cjybO`r;{VEJBaL6xk5__YWbTR`fbQyF(T$cw^{yVN!x>BdjqnDcy^)20ow) ztnP5+0#@cHSU@v-N_pe?oo(z#+op!P$3?@vv#kG85gr~q<#=FGz9#wBryg>E$Wp#d zbo6nu_L&T|g>m4X$K@tHZum=y3By(8@3A20%ba^V`oGYue1I)yA_cn`y$}dsK zkX?U+^U`w|Tna^myU?^;*rXD~AQL3D!fuh-v;@|@B#<srb!7GQSYm4SYm+9UHOr z<2ac^3t^{)0|Qq|6e=T%hb5#6%uWE&e=;IV5|J$rM-*o@$y~2@q}jD3?i>%qQj70E zmrbkuYF51IfEpwphlyCu0`a1rO6lQ(#KkaSGX#PEZvh8(M>uiNbAJmkz+?@Af!_ig zaA<;H!T$xIVF7~OzXdj+p$dX4{}+IU6$pBM3$#H)9R!sB3!qt35cvHT7=mMqL2&*5 z0?;r9!TaBW;~-cFf`z{Yb{=p_0fEnN!7k7^)uWg9Oz7n!J;=8z!&x9egx_x~?({%W zCR!Gcqd_eIgIz6)#zrb)E?%fDSqaCw671e&95)2cYJApaS(&gKvo}L}w9h^(J@#|q zh_w!eL2)Ww#+BiZ+1t8b)Qu@$FuuJYK-5x0nw{5oK(|-kg%$;8y`|D30j4q#TRufw zrKh?chgs5+fEEU@nG}wZwQE^}wjwfEK?cJ~F&PqCTLQCNY7Ix+rBYZ=<}@A7nb)UF z44HNZ6;YQJBu+B73j8p6kec zejMSPGL6IOy;+7g$#5KzRwXl^BZF&7;dCyAHK)xji8KfZlsgxvVK}_k%HU~heIjj@ z3|60p??7oFg&EV0zn$YqKz_b<{iYBCnY<8myR|2pa%lCvJi9F zAYrh{L=E;ynRPDQZ21x#n^D-^AgY~;GIJ*;LXwSO#y!EAN=>_8lpKB#Z zoXmA&j5Gmwd#Q+=%ynnjck4-J3Q+dSTsNOKhq9L}GuM_SqhbSUCd;-WMW`>BsJsux z19A(_mbEha7&wT~o=y{VR$1u2zr~xbS)u&ShD-6~TDb7RA8z5{ZQ_Yu%QO7EMzg3m&N$I^h!hK_ZpesQPL|9S@Wx8&F^9&cV%;MzqClB zc(2!BZt0ZR@mll9CIJ+u%%7$8o10XYt@^$n~SKl}YnlXn8@w?9T8T z5$5BoHQbNQ@ZE(g-vR^7TB&n%ztqP$I+4bfZX*=#OH_8jaea>mx>|h~dX|dF2F>U^ zh3s~R!oB|+W&+Ga&l=6ZSpbJnxM?%+eyO!Pde&eXE|6L;rI3I9hNae9&=QjwSZe*9 zLVhy?`-8RLF0^E(?fp{gyA<-H-!NGFG0~Elw)ab|k5I^$reVsh670!_0<7Dc5P zg07YrVxAJGLsv$GkWigzZ8Pdae9~;ANP^?G8FfQor!2uZ%|zOAA*lOO$mNLiR*B^l z2JFtR=<45Wu>R)>Nwa@jbHMdeDeQz9a-~Kfzln|WoFTs`g_GD@W~?pE!TK4@d7LcO zT@>KT$!b4A>-tP%Rp9zMV@%9U3K`A;^)1dk?u@!Ku)tCvK>j2Pem|((Y=<{d8vjbu>`@u}t-L#;&2QIwEndXd= zDCG8?6z^PF=l0Xz;3_f*-UmP8cAK*N=Pf1aRn}7PG&sBZulN` zdcJaK%F3nUx&V<&0X^Iy;K50jb6qD~31W(RP}XyP)#SU77PNIu9Vwgp;bG5<+sVU1FPF_jDOQdfVsk$}ba7MHNMeZr^5hxbg#&A)YX`9Vx<|JUZ7!JR*HM z>jTf`#maUpJ8=e_BTVy`+AkuvFL`U8-StW32o;%hx6LLV!{0yF?)Psq*us5Gng!40 zkzaJ#q>9NyTr2-1@feBE+8JA!6C1gb+&D*2`Sn`_`<$L!@smo#Q=>TV2zb^nC)ZaV z*C!qu3hD|aaw|_5M=o=~of4|4`2m8=0pvW@-8*OVIPL^`QzhIKiP>sCS{q z)Jb#X2#uZPqucKl82$XGIy?IB|JYMR-FQ!iDrDO0e;DYxiRB+611AhF@Lw1s_x6Y` z@P(;4$0I4;hZ(`_iJOxx1ICC0)-%D^$;v`Z*|*4(pw%(?*1WTNP@OH&n!@r~5#U7A z&FPC*(Ho4<{aml!>%~Wi+`dCjsaqHFy%GlohS*!)D$c!t5#2gT%$GVw9E(KPg~2mf zucnaZkh6B4nlxDJDf{U5i@bwn&t!3)F+C1Y2PMjX7-CobmD%U6Y9cJmXSm`(wytl8 z&G}0_h}D~{ghDlO-G?B&;^1pS@Ww%RwI=9+**j&e#(z}>f5Pwo;CC?me&VjW&C}SU z)Lcw4)DFT^^ZH;-pAX(s0tgozi43QhIMGK?A*ssNFPUh2mLa^7MyRWqAJtE^1TOYNc#hT#QS#UJJ z%lgWPEO=Jj-l@cLGJ5`V2oW6}{MR@C!=qg+o0cB(4UW^`xGz6jOvzVxoFqJdR5`RG z=a9WOdE^Lh**q`KzyC?*-2pZB4(-e?RiC^})!|?BO}lo9Zghc`@K3B@ug5a)d__FZ zT^Nr@y%i~a&IoS}itbyxdFsuo7F?kGe8P_Haj+N7 zg)p}rQTHN5#L1P1MTz((EmPfg)l)vzxB7~V<5DLnPEiGA*z%&4HJgw8jM?Rdu*L^k~zgiadY2!@7MfpCTp%|DEmGEJ@5scNeCy zH{WSovU1l?uhIYv^0DU?b;O!C7r*QEOL(@BFaacEpQP^ubUC&BmEUQ8&9tQP(n?W{ z=hrfLt;1@b_=I2J)ekMFcf6@TIxKL_?q8p1SvkBatJgB<#8pqTuXp!V>*X3C$h^$H z-S6a%1@~N!|GGIMt^3n_!6)fUAj!940z3vZ1bpB=HBs95D3`!W>($^LnOqupwXYJx zXf7`cnbZ|c21dU3Q-)WRTv_TtJ!m#^KG*ZVWe)i0q8$T8{y(_sM1;mV;nkyi@7c)N zNc-sEc~dcjuOBy!^hsY|=_sr``yq_888vmONOA8TV0N`l#^L=ZdHI2ugPoUq7uz-# ze*6)@%a63Lqd|(OEN?1=jA?uM@U+N*IyTxNjxu<=IwI}7gLisoqpHL>d(W!L zp~-48a|s`x&)zfQ>& YK3KzgLFbd;eK^Ev?WR9(ul7FiKc*CDCjbBd literal 0 HcmV?d00001 diff --git a/ProjectRepairWork/Resources/free-icon-font-pencil-3917376.png b/ProjectRepairWork/Resources/free-icon-font-pencil-3917376.png new file mode 100644 index 0000000000000000000000000000000000000000..c6d171349df2365f144f9234374c82c97000a772 GIT binary patch literal 7485 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

8+oZvv>Av+k+-*6l98QKs5|g!0!4<2e3{ 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 literal 0 HcmV?d00001 -- 2.25.1