From b0b03748bb3d1299f0eb9083d78062abb1197d2a Mon Sep 17 00:00:00 2001 From: Maxim Date: Tue, 5 Nov 2024 03:59:13 +0400 Subject: [PATCH] lab1 ready --- .../.idea.ProjectGSM.dir/.idea/.gitignore | 13 + .../.idea.ProjectGSM.dir/.idea/encodings.xml | 4 + .../.idea/indexLayout.xml | 8 + .../.idea/.idea.ProjectGSM.dir/.idea/vcs.xml | 6 + ProjectGSM/Entities/Advocate.cs | 45 +++ ProjectGSM/Entities/Case.cs | 46 +++ ProjectGSM/Entities/CaseAdvocate.cs | 19 ++ ProjectGSM/Entities/Client.cs | 36 +++ ProjectGSM/Entities/Court.cs | 21 ++ ProjectGSM/Entities/Status.cs | 21 ++ ProjectGSM/Entities/StatusHistory.cs | 19 ++ ProjectGSM/Entities/TypeAppeal.cs | 19 ++ ProjectGSM/Form1.Designer.cs | 39 --- ProjectGSM/Form1.cs | 10 - ProjectGSM/FormAdvocateApp.Designer.cs | 156 ++++++++++ ProjectGSM/FormAdvocateApp.cs | 107 +++++++ ProjectGSM/FormAdvocateApp.resx | 123 ++++++++ ProjectGSM/Forms/FormAdvocate.Designer.cs | 270 ++++++++++++++++ ProjectGSM/Forms/FormAdvocate.cs | 96 ++++++ .../{Form1.resx => Forms/FormAdvocate.resx} | 54 ++-- ProjectGSM/Forms/FormAdvocates.Designer.cs | 130 ++++++++ ProjectGSM/Forms/FormAdvocates.cs | 123 ++++++++ ProjectGSM/Forms/FormAdvocates.resx | 120 ++++++++ ProjectGSM/Forms/FormBase.Designer.cs | 118 +++++++ ProjectGSM/Forms/FormBase.cs | 20 ++ ProjectGSM/Forms/FormBase.resx | 120 ++++++++ ProjectGSM/Forms/FormCase.Designer.cs | 288 ++++++++++++++++++ ProjectGSM/Forms/FormCase.cs | 118 +++++++ ProjectGSM/Forms/FormCase.resx | 120 ++++++++ .../Forms/FormCaseAdvocates.Designer.cs | 116 +++++++ ProjectGSM/Forms/FormCaseAdvocates.cs | 64 ++++ ProjectGSM/Forms/FormCaseAdvocates.resx | 120 ++++++++ ProjectGSM/Forms/FormCases.Designer.cs | 130 ++++++++ ProjectGSM/Forms/FormCases.cs | 123 ++++++++ ProjectGSM/Forms/FormCases.resx | 120 ++++++++ .../Forms/FormCasesAdvocates.Designer.cs | 101 ++++++ ProjectGSM/Forms/FormCasesAdvocates.cs | 68 +++++ ProjectGSM/Forms/FormCasesAdvocates.resx | 120 ++++++++ ProjectGSM/Forms/FormClient.Designer.cs | 202 ++++++++++++ ProjectGSM/Forms/FormClient.cs | 95 ++++++ ProjectGSM/Forms/FormClient.resx | 120 ++++++++ ProjectGSM/Forms/FormClients.Designer.cs | 130 ++++++++ ProjectGSM/Forms/FormClients.cs | 123 ++++++++ ProjectGSM/Forms/FormClients.resx | 120 ++++++++ ProjectGSM/Forms/FormCourt.Designer.cs | 113 +++++++ ProjectGSM/Forms/FormCourt.cs | 79 +++++ ProjectGSM/Forms/FormCourt.resx | 120 ++++++++ ProjectGSM/Forms/FormCourts.Designer.cs | 130 ++++++++ ProjectGSM/Forms/FormCourts.cs | 123 ++++++++ ProjectGSM/Forms/FormCourts.resx | 120 ++++++++ ProjectGSM/Forms/FormStatus.Designer.cs | 136 +++++++++ ProjectGSM/Forms/FormStatus.cs | 78 +++++ ProjectGSM/Forms/FormStatus.resx | 120 ++++++++ .../Forms/FormStatusHistory.Designer.cs | 137 +++++++++ ProjectGSM/Forms/FormStatusHistory.cs | 58 ++++ ProjectGSM/Forms/FormStatusHistory.resx | 120 ++++++++ ProjectGSM/Forms/FormStatuses.Designer.cs | 130 ++++++++ ProjectGSM/Forms/FormStatuses.cs | 114 +++++++ ProjectGSM/Forms/FormStatuses.resx | 120 ++++++++ .../Forms/FormStatusesHistory.Designer.cs | 100 ++++++ ProjectGSM/Forms/FormStatusesHistory.cs | 68 +++++ ProjectGSM/Forms/FormStatusesHistory.resx | 120 ++++++++ ProjectGSM/Forms/FormTypeApeal.Designer.cs | 92 ++++++ ProjectGSM/Forms/FormTypeApeal.cs | 77 +++++ ProjectGSM/Forms/FormTypeApeal.resx | 120 ++++++++ ProjectGSM/Forms/FormTypeAppeals.Designer.cs | 130 ++++++++ ProjectGSM/Forms/FormTypeAppeals.cs | 123 ++++++++ ProjectGSM/Forms/FormTypeAppeals.resx | 120 ++++++++ ProjectGSM/Program.cs | 22 +- ProjectGSM/ProjectGSM.csproj | 66 ++++ ProjectGSM/Properties/Resources.Designer.cs | 103 +++++++ ProjectGSM/Properties/Resources.resx | 133 ++++++++ .../Repositories/IAdvocateRepository.cs | 12 + .../Repositories/ICaseAdvocateRepository.cs | 11 + ProjectGSM/Repositories/ICaseRepository.cs | 12 + ProjectGSM/Repositories/IClientRepository.cs | 12 + ProjectGSM/Repositories/ICourtRepository.cs | 12 + .../Repositories/IStatusHistoryRepository.cs | 11 + ProjectGSM/Repositories/IStatusRepository.cs | 12 + .../Repositories/ITypeAppealRepository.cs | 12 + .../Implementations/AdvocateRepository.cs | 29 ++ .../Implementations/CaseAdvocateRepository.cs | 16 + .../Implementations/CaseRepository.cs | 28 ++ .../Implementations/ClientRepository.cs | 21 ++ .../Implementations/CourtRepository.cs | 28 ++ .../StatusHistoryRepository.cs | 20 ++ .../Implementations/StatusRepository.cs | 28 ++ .../Implementations/TypeAppealRepository.cs | 28 ++ .../Resources/circle-plus-svgrepo-com.png | Bin 0 -> 4686 bytes ProjectGSM/Resources/circle-x-svgrepo-com.png | Bin 0 -> 5021 bytes ProjectGSM/Resources/maxresdefault.jpg | Bin 0 -> 190491 bytes ProjectGSM/Resources/pencil-svgrepo-com.png | Bin 0 -> 3771 bytes 92 files changed, 7208 insertions(+), 77 deletions(-) create mode 100644 ProjectGSM/.idea/.idea.ProjectGSM.dir/.idea/.gitignore create mode 100644 ProjectGSM/.idea/.idea.ProjectGSM.dir/.idea/encodings.xml create mode 100644 ProjectGSM/.idea/.idea.ProjectGSM.dir/.idea/indexLayout.xml create mode 100644 ProjectGSM/.idea/.idea.ProjectGSM.dir/.idea/vcs.xml create mode 100644 ProjectGSM/Entities/Advocate.cs create mode 100644 ProjectGSM/Entities/Case.cs create mode 100644 ProjectGSM/Entities/CaseAdvocate.cs create mode 100644 ProjectGSM/Entities/Client.cs create mode 100644 ProjectGSM/Entities/Court.cs create mode 100644 ProjectGSM/Entities/Status.cs create mode 100644 ProjectGSM/Entities/StatusHistory.cs create mode 100644 ProjectGSM/Entities/TypeAppeal.cs delete mode 100644 ProjectGSM/Form1.Designer.cs delete mode 100644 ProjectGSM/Form1.cs create mode 100644 ProjectGSM/FormAdvocateApp.Designer.cs create mode 100644 ProjectGSM/FormAdvocateApp.cs create mode 100644 ProjectGSM/FormAdvocateApp.resx create mode 100644 ProjectGSM/Forms/FormAdvocate.Designer.cs create mode 100644 ProjectGSM/Forms/FormAdvocate.cs rename ProjectGSM/{Form1.resx => Forms/FormAdvocate.resx} (92%) create mode 100644 ProjectGSM/Forms/FormAdvocates.Designer.cs create mode 100644 ProjectGSM/Forms/FormAdvocates.cs create mode 100644 ProjectGSM/Forms/FormAdvocates.resx create mode 100644 ProjectGSM/Forms/FormBase.Designer.cs create mode 100644 ProjectGSM/Forms/FormBase.cs create mode 100644 ProjectGSM/Forms/FormBase.resx create mode 100644 ProjectGSM/Forms/FormCase.Designer.cs create mode 100644 ProjectGSM/Forms/FormCase.cs create mode 100644 ProjectGSM/Forms/FormCase.resx create mode 100644 ProjectGSM/Forms/FormCaseAdvocates.Designer.cs create mode 100644 ProjectGSM/Forms/FormCaseAdvocates.cs create mode 100644 ProjectGSM/Forms/FormCaseAdvocates.resx create mode 100644 ProjectGSM/Forms/FormCases.Designer.cs create mode 100644 ProjectGSM/Forms/FormCases.cs create mode 100644 ProjectGSM/Forms/FormCases.resx create mode 100644 ProjectGSM/Forms/FormCasesAdvocates.Designer.cs create mode 100644 ProjectGSM/Forms/FormCasesAdvocates.cs create mode 100644 ProjectGSM/Forms/FormCasesAdvocates.resx create mode 100644 ProjectGSM/Forms/FormClient.Designer.cs create mode 100644 ProjectGSM/Forms/FormClient.cs create mode 100644 ProjectGSM/Forms/FormClient.resx create mode 100644 ProjectGSM/Forms/FormClients.Designer.cs create mode 100644 ProjectGSM/Forms/FormClients.cs create mode 100644 ProjectGSM/Forms/FormClients.resx create mode 100644 ProjectGSM/Forms/FormCourt.Designer.cs create mode 100644 ProjectGSM/Forms/FormCourt.cs create mode 100644 ProjectGSM/Forms/FormCourt.resx create mode 100644 ProjectGSM/Forms/FormCourts.Designer.cs create mode 100644 ProjectGSM/Forms/FormCourts.cs create mode 100644 ProjectGSM/Forms/FormCourts.resx create mode 100644 ProjectGSM/Forms/FormStatus.Designer.cs create mode 100644 ProjectGSM/Forms/FormStatus.cs create mode 100644 ProjectGSM/Forms/FormStatus.resx create mode 100644 ProjectGSM/Forms/FormStatusHistory.Designer.cs create mode 100644 ProjectGSM/Forms/FormStatusHistory.cs create mode 100644 ProjectGSM/Forms/FormStatusHistory.resx create mode 100644 ProjectGSM/Forms/FormStatuses.Designer.cs create mode 100644 ProjectGSM/Forms/FormStatuses.cs create mode 100644 ProjectGSM/Forms/FormStatuses.resx create mode 100644 ProjectGSM/Forms/FormStatusesHistory.Designer.cs create mode 100644 ProjectGSM/Forms/FormStatusesHistory.cs create mode 100644 ProjectGSM/Forms/FormStatusesHistory.resx create mode 100644 ProjectGSM/Forms/FormTypeApeal.Designer.cs create mode 100644 ProjectGSM/Forms/FormTypeApeal.cs create mode 100644 ProjectGSM/Forms/FormTypeApeal.resx create mode 100644 ProjectGSM/Forms/FormTypeAppeals.Designer.cs create mode 100644 ProjectGSM/Forms/FormTypeAppeals.cs create mode 100644 ProjectGSM/Forms/FormTypeAppeals.resx create mode 100644 ProjectGSM/Properties/Resources.Designer.cs create mode 100644 ProjectGSM/Properties/Resources.resx create mode 100644 ProjectGSM/Repositories/IAdvocateRepository.cs create mode 100644 ProjectGSM/Repositories/ICaseAdvocateRepository.cs create mode 100644 ProjectGSM/Repositories/ICaseRepository.cs create mode 100644 ProjectGSM/Repositories/IClientRepository.cs create mode 100644 ProjectGSM/Repositories/ICourtRepository.cs create mode 100644 ProjectGSM/Repositories/IStatusHistoryRepository.cs create mode 100644 ProjectGSM/Repositories/IStatusRepository.cs create mode 100644 ProjectGSM/Repositories/ITypeAppealRepository.cs create mode 100644 ProjectGSM/Repositories/Implementations/AdvocateRepository.cs create mode 100644 ProjectGSM/Repositories/Implementations/CaseAdvocateRepository.cs create mode 100644 ProjectGSM/Repositories/Implementations/CaseRepository.cs create mode 100644 ProjectGSM/Repositories/Implementations/ClientRepository.cs create mode 100644 ProjectGSM/Repositories/Implementations/CourtRepository.cs create mode 100644 ProjectGSM/Repositories/Implementations/StatusHistoryRepository.cs create mode 100644 ProjectGSM/Repositories/Implementations/StatusRepository.cs create mode 100644 ProjectGSM/Repositories/Implementations/TypeAppealRepository.cs create mode 100644 ProjectGSM/Resources/circle-plus-svgrepo-com.png create mode 100644 ProjectGSM/Resources/circle-x-svgrepo-com.png create mode 100644 ProjectGSM/Resources/maxresdefault.jpg create mode 100644 ProjectGSM/Resources/pencil-svgrepo-com.png diff --git a/ProjectGSM/.idea/.idea.ProjectGSM.dir/.idea/.gitignore b/ProjectGSM/.idea/.idea.ProjectGSM.dir/.idea/.gitignore new file mode 100644 index 0000000..7930bcf --- /dev/null +++ b/ProjectGSM/.idea/.idea.ProjectGSM.dir/.idea/.gitignore @@ -0,0 +1,13 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Rider ignored files +/projectSettingsUpdater.xml +/modules.xml +/.idea.ProjectGSM.iml +/contentModel.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/ProjectGSM/.idea/.idea.ProjectGSM.dir/.idea/encodings.xml b/ProjectGSM/.idea/.idea.ProjectGSM.dir/.idea/encodings.xml new file mode 100644 index 0000000..df87cf9 --- /dev/null +++ b/ProjectGSM/.idea/.idea.ProjectGSM.dir/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ProjectGSM/.idea/.idea.ProjectGSM.dir/.idea/indexLayout.xml b/ProjectGSM/.idea/.idea.ProjectGSM.dir/.idea/indexLayout.xml new file mode 100644 index 0000000..7b08163 --- /dev/null +++ b/ProjectGSM/.idea/.idea.ProjectGSM.dir/.idea/indexLayout.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/ProjectGSM/.idea/.idea.ProjectGSM.dir/.idea/vcs.xml b/ProjectGSM/.idea/.idea.ProjectGSM.dir/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/ProjectGSM/.idea/.idea.ProjectGSM.dir/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ProjectGSM/Entities/Advocate.cs b/ProjectGSM/Entities/Advocate.cs new file mode 100644 index 0000000..ce2144b --- /dev/null +++ b/ProjectGSM/Entities/Advocate.cs @@ -0,0 +1,45 @@ +namespace ProjectGSM.Entities; + +public class Advocate +{ + public int Id { get; private set; } + public string Name { get; private set; } = string.Empty; + public bool Sex { get; private set; } + public DateTime DateOfBirth { get; private set; } + public int Experience { get; private set; } + public int CompletedTasks { get; private set; } + public int Rating { get; private set; } + public string Email { get; private set; } = string.Empty; + public string PhoneNumber { get; private set; } = string.Empty; + public string Address { get; private set; } = string.Empty; + public DateTime CreatedAt { get; private set; } = DateTime.UtcNow; + + // Конструктор для создания сущности + public static Advocate CreateEntity( + int id, + string name, + bool sex, + DateTime dateOfBirth, + int experience, + int completedTasks, + int rating, + string email, + string phoneNumber, + string address) + { + return new Advocate + { + Id = id, + Name = name ?? string.Empty, + Sex = sex, + DateOfBirth = dateOfBirth, + Experience = experience, + CompletedTasks = completedTasks, + Rating = rating, + Email = email ?? string.Empty, + PhoneNumber = phoneNumber ?? string.Empty, + Address = address ?? string.Empty, + CreatedAt = DateTime.UtcNow + }; + } +} diff --git a/ProjectGSM/Entities/Case.cs b/ProjectGSM/Entities/Case.cs new file mode 100644 index 0000000..b28b706 --- /dev/null +++ b/ProjectGSM/Entities/Case.cs @@ -0,0 +1,46 @@ +namespace ProjectGSM.Entities; + +public class Case +{ + public int Id { get; private set; } + public int TypeAppealId { get; private set; } + public bool Payment { get; private set; } = false; + public decimal Price { get; private set; } + public decimal VictoryPrice { get; private set; } + public int StatusId { get; private set; } + public bool Verdict { get; private set; } = false; + public int CourtId { get; private set; } + public int ClientId { get; private set; } + public string Description { get; private set; } = string.Empty; + public DateTime CreatedAt { get; private set; } = DateTime.UtcNow; + + // Конструктор для создания сущности + public static Case CreateEntity( + int id, + int typeAppealId, + bool payment, + decimal price, + decimal victoryPrice, + int statusId, + bool verdict, + int courtId, + int clientId, + string description + ) + { + return new Case + { + Id = id, + TypeAppealId = typeAppealId, + Payment = payment, + Price = price, + VictoryPrice = victoryPrice, + StatusId = statusId, + Verdict = verdict, + CourtId = courtId, + ClientId = clientId, + Description = description ?? string.Empty, + CreatedAt = DateTime.UtcNow + }; + } +} diff --git a/ProjectGSM/Entities/CaseAdvocate.cs b/ProjectGSM/Entities/CaseAdvocate.cs new file mode 100644 index 0000000..7d9a309 --- /dev/null +++ b/ProjectGSM/Entities/CaseAdvocate.cs @@ -0,0 +1,19 @@ +namespace ProjectGSM.Entities; + +public class CaseAdvocate +{ + public int CaseId { get; private set; } + public int AdvocateId { get; private set; } + public DateTime CreatedAt { get; private set; } = DateTime.UtcNow; + + // Конструктор для создания сущности + public static CaseAdvocate CreateEntity(int caseId, int advocateId) + { + return new CaseAdvocate + { + CaseId = caseId, + AdvocateId = advocateId, + CreatedAt = DateTime.UtcNow + }; + } +} \ No newline at end of file diff --git a/ProjectGSM/Entities/Client.cs b/ProjectGSM/Entities/Client.cs new file mode 100644 index 0000000..4af304b --- /dev/null +++ b/ProjectGSM/Entities/Client.cs @@ -0,0 +1,36 @@ +namespace ProjectGSM.Entities; + +public class Client +{ + public int Id { get; private set; } + public string Name { get; private set; } = string.Empty; + public bool Sex { get; private set; } + public DateTime DateOfBirth { get; private set; } + public string Email { get; private set; } = string.Empty; + public string PhoneNumber { get; private set; } = string.Empty; + public string Address { get; private set; } = string.Empty; + public DateTime CreatedAt { get; private set; } = DateTime.UtcNow; + + // Конструктор для создания сущности + public static Client CreateEntity( + int id, + string name, + bool sex, + DateTime dateOfBirth, + string email, + string phoneNumber, + string address) + { + return new Client + { + Id = id, + Name = name ?? string.Empty, + Sex = sex, + DateOfBirth = dateOfBirth, + Email = email ?? string.Empty, + PhoneNumber = phoneNumber ?? string.Empty, + Address = address ?? string.Empty, + CreatedAt = DateTime.UtcNow + }; + } +} diff --git a/ProjectGSM/Entities/Court.cs b/ProjectGSM/Entities/Court.cs new file mode 100644 index 0000000..8e3dc35 --- /dev/null +++ b/ProjectGSM/Entities/Court.cs @@ -0,0 +1,21 @@ +namespace ProjectGSM.Entities; + +public class Court +{ + public int Id { get; private set; } + public string Name { get; private set; } = string.Empty; + public string Address { get; private set; } = string.Empty; + public DateTime CreatedAt { get; private set; } = DateTime.UtcNow; + + // Конструктор для создания сущности + public static Court CreateEntity(int id, string name, string address, DateTime? createdAt = null) + { + return new Court + { + Id = id, + Name = name ?? string.Empty, + Address = address ?? string.Empty, + CreatedAt = createdAt ?? DateTime.UtcNow + }; + } +} diff --git a/ProjectGSM/Entities/Status.cs b/ProjectGSM/Entities/Status.cs new file mode 100644 index 0000000..049f119 --- /dev/null +++ b/ProjectGSM/Entities/Status.cs @@ -0,0 +1,21 @@ +namespace ProjectGSM.Entities; + +public class Status +{ + public int Id { get; private set; } + public string Name { get; private set; } = string.Empty; + public DateTime CreatedAt { get; private set; } = DateTime.UtcNow; + public decimal? Price { get; private set; } + + // Конструктор для создания сущности + public static Status CreateEntity(int id, string name, decimal? price = null, DateTime? dateTime = null) + { + return new Status + { + Id = id, + Name = name ?? string.Empty, + Price = price, + CreatedAt = dateTime ?? DateTime.UtcNow + }; + } +} diff --git a/ProjectGSM/Entities/StatusHistory.cs b/ProjectGSM/Entities/StatusHistory.cs new file mode 100644 index 0000000..ee4aa33 --- /dev/null +++ b/ProjectGSM/Entities/StatusHistory.cs @@ -0,0 +1,19 @@ +namespace ProjectGSM.Entities; + +public class StatusHistory +{ + public int CaseId { get; private set; } + public int StatusId { get; private set; } + public DateTime CreatedAt { get; private set; } = DateTime.UtcNow; + + // Конструктор для создания сущности + public static StatusHistory CreateEntity(int caseId, int statusId, DateTime? dateTime = null) + { + return new StatusHistory + { + CaseId = caseId, + StatusId = statusId, + CreatedAt = dateTime ?? DateTime.UtcNow + }; + } +} diff --git a/ProjectGSM/Entities/TypeAppeal.cs b/ProjectGSM/Entities/TypeAppeal.cs new file mode 100644 index 0000000..4b0dd6d --- /dev/null +++ b/ProjectGSM/Entities/TypeAppeal.cs @@ -0,0 +1,19 @@ +namespace ProjectGSM.Entities; + +public class TypeAppeal +{ + public int Id { get; private set; } + public string Name { get; private set; } = string.Empty; + public DateTime CreatedAt { get; private set; } = DateTime.UtcNow; + + // Конструктор для создания сущности + public static TypeAppeal CreateEntity(int id, string name) + { + return new TypeAppeal + { + Id = id, + Name = name ?? string.Empty, + CreatedAt = DateTime.UtcNow + }; + } +} diff --git a/ProjectGSM/Form1.Designer.cs b/ProjectGSM/Form1.Designer.cs deleted file mode 100644 index 78f42e6..0000000 --- a/ProjectGSM/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace ProjectGSM -{ - 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/ProjectGSM/Form1.cs b/ProjectGSM/Form1.cs deleted file mode 100644 index 07e9ed7..0000000 --- a/ProjectGSM/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ProjectGSM -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} diff --git a/ProjectGSM/FormAdvocateApp.Designer.cs b/ProjectGSM/FormAdvocateApp.Designer.cs new file mode 100644 index 0000000..1439ed5 --- /dev/null +++ b/ProjectGSM/FormAdvocateApp.Designer.cs @@ -0,0 +1,156 @@ +namespace ProjectGSM +{ + partial class FormAdvocateApp + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + private System.Windows.Forms.MenuStrip menuStrip; + private System.Windows.Forms.ToolStripMenuItem directoriesMenuItem; + private System.Windows.Forms.ToolStripMenuItem operationsMenuItem; + private System.Windows.Forms.ToolStripMenuItem reportsMenuItem; // Новый пункт "Отчеты" + private System.Windows.Forms.ToolStripMenuItem clientsMenuItem; + private System.Windows.Forms.ToolStripMenuItem advocatesMenuItem; + private System.Windows.Forms.ToolStripMenuItem casesMenuItem; + private System.Windows.Forms.ToolStripMenuItem caseAdvocateRepositoryMenuItem; + private System.Windows.Forms.ToolStripMenuItem statusHistoryRepositoryMenuItem; + + /// + /// 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() + { + menuStrip = new MenuStrip(); + directoriesMenuItem = new ToolStripMenuItem(); + clientsMenuItem = new ToolStripMenuItem(); + advocatesMenuItem = new ToolStripMenuItem(); + casesMenuItem = new ToolStripMenuItem(); + typeAppealsToolStripMenuItem = new ToolStripMenuItem(); + courtsToolStripMenuItem = new ToolStripMenuItem(); + operationsMenuItem = new ToolStripMenuItem(); + caseAdvocateRepositoryMenuItem = new ToolStripMenuItem(); + statusHistoryRepositoryMenuItem = new ToolStripMenuItem(); + reportsMenuItem = new ToolStripMenuItem(); + menuStrip.SuspendLayout(); + SuspendLayout(); + // + // menuStrip + // + menuStrip.Items.AddRange(new ToolStripItem[] { directoriesMenuItem, operationsMenuItem, reportsMenuItem }); + menuStrip.Location = new Point(0, 0); + menuStrip.Name = "menuStrip"; + menuStrip.Padding = new Padding(7, 2, 0, 2); + menuStrip.Size = new Size(933, 24); + menuStrip.TabIndex = 0; + menuStrip.Text = "menuStrip"; + // + // directoriesMenuItem + // + directoriesMenuItem.DropDownItems.AddRange(new ToolStripItem[] { clientsMenuItem, advocatesMenuItem, casesMenuItem, typeAppealsToolStripMenuItem, courtsToolStripMenuItem }); + directoriesMenuItem.Name = "directoriesMenuItem"; + directoriesMenuItem.Size = new Size(94, 20); + directoriesMenuItem.Text = "Справочники"; + // + // clientsMenuItem + // + clientsMenuItem.Name = "clientsMenuItem"; + clientsMenuItem.Size = new Size(161, 22); + clientsMenuItem.Text = "Клиенты"; + clientsMenuItem.Click += clientsMenuItem_Click_1; + // + // advocatesMenuItem + // + advocatesMenuItem.Name = "advocatesMenuItem"; + advocatesMenuItem.Size = new Size(161, 22); + advocatesMenuItem.Text = "Адвокаты"; + advocatesMenuItem.Click += advocatesMenuItem_Click; + // + // casesMenuItem + // + casesMenuItem.Name = "casesMenuItem"; + casesMenuItem.Size = new Size(161, 22); + casesMenuItem.Text = "Дела"; + casesMenuItem.Click += casesMenuItem_Click; + // + // typeAppealsToolStripMenuItem + // + typeAppealsToolStripMenuItem.Name = "typeAppealsToolStripMenuItem"; + typeAppealsToolStripMenuItem.Size = new Size(161, 22); + typeAppealsToolStripMenuItem.Text = "Тип обращения"; + typeAppealsToolStripMenuItem.Click += typeAppealsToolStripMenuItem_Click; + // + // courtsToolStripMenuItem + // + courtsToolStripMenuItem.Name = "courtsToolStripMenuItem"; + courtsToolStripMenuItem.Size = new Size(161, 22); + courtsToolStripMenuItem.Text = "Суды"; + courtsToolStripMenuItem.Click += courtsToolStripMenuItem_Click; + // + // operationsMenuItem + // + operationsMenuItem.DropDownItems.AddRange(new ToolStripItem[] { caseAdvocateRepositoryMenuItem, statusHistoryRepositoryMenuItem }); + operationsMenuItem.Name = "operationsMenuItem"; + operationsMenuItem.Size = new Size(75, 20); + operationsMenuItem.Text = "Операции"; + // + // caseAdvocateRepositoryMenuItem + // + caseAdvocateRepositoryMenuItem.Name = "caseAdvocateRepositoryMenuItem"; + caseAdvocateRepositoryMenuItem.Size = new Size(221, 22); + caseAdvocateRepositoryMenuItem.Text = "Привязка адвокатов к делу"; + caseAdvocateRepositoryMenuItem.Click += caseAdvocateRepositoryMenuItem_Click; + // + // statusHistoryRepositoryMenuItem + // + statusHistoryRepositoryMenuItem.Name = "statusHistoryRepositoryMenuItem"; + statusHistoryRepositoryMenuItem.Size = new Size(221, 22); + statusHistoryRepositoryMenuItem.Text = "Хронология статусов"; + statusHistoryRepositoryMenuItem.Click += statusHistoryRepositoryMenuItem_Click; + // + // reportsMenuItem + // + reportsMenuItem.Name = "reportsMenuItem"; + reportsMenuItem.Size = new Size(60, 20); + reportsMenuItem.Text = "Отчеты"; + // + // FormAdvocateApp + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackgroundImage = Properties.Resources.maxresdefault; + BackgroundImageLayout = ImageLayout.Stretch; + ClientSize = new Size(933, 519); + Controls.Add(menuStrip); + MainMenuStrip = menuStrip; + Margin = new Padding(4, 3, 4, 3); + Name = "FormAdvocateApp"; + Text = "Шарашкина контора"; + menuStrip.ResumeLayout(false); + menuStrip.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private ToolStripMenuItem typeAppealsToolStripMenuItem; + private ToolStripMenuItem courtsToolStripMenuItem; + } +} diff --git a/ProjectGSM/FormAdvocateApp.cs b/ProjectGSM/FormAdvocateApp.cs new file mode 100644 index 0000000..a70a98b --- /dev/null +++ b/ProjectGSM/FormAdvocateApp.cs @@ -0,0 +1,107 @@ +using ProjectGSM.Forms; +using System.ComponentModel; +using Unity; + +namespace ProjectGSM +{ + public partial class FormAdvocateApp : Form + { + private readonly IUnityContainer _container; + public FormAdvocateApp(IUnityContainer container) + { + InitializeComponent(); + _container = container ?? +throw new ArgumentNullException(nameof(container)); + } + private void clientsMenuItem_Click_1(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void advocatesMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void casesMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void typeAppealsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void courtsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void caseAdvocateRepositoryMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void statusHistoryRepositoryMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/ProjectGSM/FormAdvocateApp.resx b/ProjectGSM/FormAdvocateApp.resx new file mode 100644 index 0000000..31084d5 --- /dev/null +++ b/ProjectGSM/FormAdvocateApp.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/ProjectGSM/Forms/FormAdvocate.Designer.cs b/ProjectGSM/Forms/FormAdvocate.Designer.cs new file mode 100644 index 0000000..cd57418 --- /dev/null +++ b/ProjectGSM/Forms/FormAdvocate.Designer.cs @@ -0,0 +1,270 @@ +namespace ProjectGSM.Forms +{ + partial class FormAdvocate + { + /// + /// 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() + { + nameLabel = new Label(); + nameTextBox = new TextBox(); + expLabel = new Label(); + saveButton = new Button(); + cancelButton = new Button(); + sex = new Label(); + sexCheckBox = new CheckBox(); + DateLabel = new Label(); + dateTimePicker = new DateTimePicker(); + PhoneLabel = new Label(); + phoneText = new TextBox(); + adressLabel = new Label(); + adressBox = new TextBox(); + expNumeric = new NumericUpDown(); + tasksLabel = new Label(); + tasksNumeric = new NumericUpDown(); + ratingLabel = new Label(); + ratingNumeric = new NumericUpDown(); + emailLabel = new Label(); + emailTextBox = new TextBox(); + ((System.ComponentModel.ISupportInitialize)expNumeric).BeginInit(); + ((System.ComponentModel.ISupportInitialize)tasksNumeric).BeginInit(); + ((System.ComponentModel.ISupportInitialize)ratingNumeric).BeginInit(); + SuspendLayout(); + // + // nameLabel + // + nameLabel.Location = new Point(10, 10); + nameLabel.Name = "nameLabel"; + nameLabel.Size = new Size(100, 23); + nameLabel.TabIndex = 0; + nameLabel.Text = "Имя адвоката:"; + // + // nameTextBox + // + nameTextBox.Location = new Point(120, 10); + nameTextBox.Name = "nameTextBox"; + nameTextBox.Size = new Size(116, 23); + nameTextBox.TabIndex = 1; + // + // expLabel + // + expLabel.Location = new Point(10, 90); + expLabel.Name = "expLabel"; + expLabel.Size = new Size(100, 23); + expLabel.TabIndex = 2; + expLabel.Text = "Опыт:"; + // + // saveButton + // + saveButton.Location = new Point(122, 303); + saveButton.Name = "saveButton"; + saveButton.Size = new Size(75, 23); + saveButton.TabIndex = 4; + saveButton.Text = "Сохранить"; + saveButton.Click += saveButton_Click; + // + // cancelButton + // + cancelButton.Location = new Point(203, 303); + cancelButton.Name = "cancelButton"; + cancelButton.Size = new Size(75, 23); + cancelButton.TabIndex = 5; + cancelButton.Text = "Отмена"; + cancelButton.Click += cancelButton_Click; + // + // sex + // + sex.Location = new Point(10, 38); + sex.Name = "sex"; + sex.Size = new Size(100, 23); + sex.TabIndex = 0; + sex.Text = "Пол:"; + // + // sexCheckBox + // + sexCheckBox.AutoSize = true; + sexCheckBox.Location = new Point(120, 37); + sexCheckBox.Name = "sexCheckBox"; + sexCheckBox.Size = new Size(77, 19); + sexCheckBox.TabIndex = 6; + sexCheckBox.Text = "мужчина"; + sexCheckBox.UseVisualStyleBackColor = true; + // + // DateLabel + // + DateLabel.Location = new Point(10, 61); + DateLabel.Name = "DateLabel"; + DateLabel.Size = new Size(100, 23); + DateLabel.TabIndex = 7; + DateLabel.Text = "Дата рождения:"; + // + // dateTimePicker + // + dateTimePicker.Location = new Point(116, 61); + dateTimePicker.Name = "dateTimePicker"; + dateTimePicker.Size = new Size(120, 23); + dateTimePicker.TabIndex = 8; + // + // PhoneLabel + // + PhoneLabel.Location = new Point(10, 217); + PhoneLabel.Name = "PhoneLabel"; + PhoneLabel.Size = new Size(111, 23); + PhoneLabel.TabIndex = 9; + PhoneLabel.Text = "Номер телефона:"; + // + // phoneText + // + phoneText.Location = new Point(116, 217); + phoneText.Name = "phoneText"; + phoneText.Size = new Size(120, 23); + phoneText.TabIndex = 10; + // + // adressLabel + // + adressLabel.Location = new Point(12, 249); + adressLabel.Name = "adressLabel"; + adressLabel.Size = new Size(111, 23); + adressLabel.TabIndex = 11; + adressLabel.Text = "Адрес:"; + // + // adressBox + // + adressBox.Location = new Point(116, 246); + adressBox.Name = "adressBox"; + adressBox.Size = new Size(120, 23); + adressBox.TabIndex = 12; + // + // expNumeric + // + expNumeric.Location = new Point(116, 90); + expNumeric.Name = "expNumeric"; + expNumeric.Size = new Size(120, 23); + expNumeric.TabIndex = 13; + // + // tasksLabel + // + tasksLabel.Location = new Point(10, 119); + tasksLabel.Name = "tasksLabel"; + tasksLabel.Size = new Size(100, 23); + tasksLabel.TabIndex = 15; + tasksLabel.Text = "Решенные дела:"; + // + // tasksNumeric + // + tasksNumeric.Location = new Point(116, 119); + tasksNumeric.Name = "tasksNumeric"; + tasksNumeric.Size = new Size(120, 23); + tasksNumeric.TabIndex = 16; + // + // ratingLabel + // + ratingLabel.Location = new Point(10, 154); + ratingLabel.Name = "ratingLabel"; + ratingLabel.Size = new Size(100, 23); + ratingLabel.TabIndex = 17; + ratingLabel.Text = "Рейтинг:"; + // + // ratingNumeric + // + ratingNumeric.Location = new Point(116, 152); + ratingNumeric.Name = "ratingNumeric"; + ratingNumeric.Size = new Size(120, 23); + ratingNumeric.TabIndex = 18; + // + // emailLabel + // + emailLabel.Location = new Point(11, 184); + emailLabel.Name = "emailLabel"; + emailLabel.Size = new Size(111, 23); + emailLabel.TabIndex = 19; + emailLabel.Text = "Email:"; + // + // emailTextBox + // + emailTextBox.Location = new Point(116, 184); + emailTextBox.Name = "emailTextBox"; + emailTextBox.Size = new Size(120, 23); + emailTextBox.TabIndex = 20; + // + // FormAdvocate + // + ClientSize = new Size(284, 338); + Controls.Add(emailTextBox); + Controls.Add(emailLabel); + Controls.Add(ratingNumeric); + Controls.Add(ratingLabel); + Controls.Add(tasksNumeric); + Controls.Add(tasksLabel); + Controls.Add(expNumeric); + Controls.Add(adressBox); + Controls.Add(adressLabel); + Controls.Add(phoneText); + Controls.Add(PhoneLabel); + Controls.Add(dateTimePicker); + Controls.Add(DateLabel); + Controls.Add(sexCheckBox); + Controls.Add(sex); + Controls.Add(nameLabel); + Controls.Add(nameTextBox); + Controls.Add(expLabel); + Controls.Add(saveButton); + Controls.Add(cancelButton); + Name = "FormAdvocate"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Адвокат"; + ((System.ComponentModel.ISupportInitialize)expNumeric).EndInit(); + ((System.ComponentModel.ISupportInitialize)tasksNumeric).EndInit(); + ((System.ComponentModel.ISupportInitialize)ratingNumeric).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label nameLabel; + private TextBox nameTextBox; + + private Label expLabel; + + private Button saveButton; + private Button cancelButton; + private Label sex; + private Label tasksLabel; + private CheckBox sexCheckBox; + private Label DateLabel; + private DateTimePicker dateTimePicker; + private Label PhoneLabel; + private TextBox phoneText; + private Label adressLabel; + private TextBox adressBox; + private NumericUpDown expNumeric; + private NumericUpDown tasksNumeric; + private Label ratingLabel; + private NumericUpDown ratingNumeric; + private Label emailLabel; + private TextBox emailTextBox; + } +} \ No newline at end of file diff --git a/ProjectGSM/Forms/FormAdvocate.cs b/ProjectGSM/Forms/FormAdvocate.cs new file mode 100644 index 0000000..3fccacd --- /dev/null +++ b/ProjectGSM/Forms/FormAdvocate.cs @@ -0,0 +1,96 @@ +using ProjectGSM.Entities; +using ProjectGSM.Repositories; + +namespace ProjectGSM.Forms +{ + + public partial class FormAdvocate : Form + { + private readonly IAdvocateRepository _advocateRepository; + + private int? _advocateId; + + public int Id + { + set + { + try + { + var advocate = + _advocateRepository.ReadAdvocateById(value); + if (advocate == null) + { + throw new + InvalidDataException(nameof(advocate)); + } + nameTextBox.Text = advocate.Name; + sexCheckBox.Checked= advocate.Sex; + dateTimePicker.Value = new DateTime(advocate.DateOfBirth.Year, advocate.DateOfBirth.Month, advocate.DateOfBirth.Day); + expNumeric.Value = advocate.Experience; + tasksNumeric.Value = advocate.CompletedTasks; + ratingNumeric.Value = advocate.Rating; + emailTextBox.Text = advocate.Email; + phoneText.Text = advocate.PhoneNumber; + adressBox.Text = advocate.Address; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + + public FormAdvocate(IAdvocateRepository advocateRepository) + { + InitializeComponent(); + _advocateRepository = advocateRepository ?? + throw new + ArgumentNullException(nameof(advocateRepository)); + } + + private void saveButton_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(nameTextBox.Text) || + string.IsNullOrWhiteSpace(emailTextBox.Text) || + string.IsNullOrWhiteSpace(phoneText.Text) || + string.IsNullOrWhiteSpace(adressBox.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_advocateId.HasValue) + { + _advocateRepository.UpdateAdvocate(CreateAdvocate(_advocateId.Value)); + } + else + { + _advocateRepository.UpdateAdvocate(CreateAdvocate(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void cancelButton_Click(object sender, EventArgs e) => Close(); + + private Advocate CreateAdvocate(int id) => Advocate.CreateEntity(id, + nameTextBox.Text, + sexCheckBox.Checked, + dateTimePicker.Value, + Convert.ToInt32(expNumeric.Value), + Convert.ToInt32(tasksNumeric.Value), + Convert.ToInt32(ratingNumeric.Value), + emailTextBox.Text, + phoneText.Text, + adressBox.Text); + + } +} diff --git a/ProjectGSM/Form1.resx b/ProjectGSM/Forms/FormAdvocate.resx similarity index 92% rename from ProjectGSM/Form1.resx rename to ProjectGSM/Forms/FormAdvocate.resx index 1af7de1..8b2ff64 100644 --- a/ProjectGSM/Form1.resx +++ b/ProjectGSM/Forms/FormAdvocate.resx @@ -1,17 +1,17 @@  - diff --git a/ProjectGSM/Forms/FormAdvocates.Designer.cs b/ProjectGSM/Forms/FormAdvocates.Designer.cs new file mode 100644 index 0000000..d4f88e5 --- /dev/null +++ b/ProjectGSM/Forms/FormAdvocates.Designer.cs @@ -0,0 +1,130 @@ +namespace ProjectGSM.Forms +{ + partial class FormAdvocates + { + /// + /// 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(); + deleteButton = new Button(); + editButton = new Button(); + addButton = new Button(); + dataGridView1 = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(deleteButton); + panel1.Controls.Add(editButton); + panel1.Controls.Add(addButton); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(604, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(142, 450); + panel1.TabIndex = 0; + // + // deleteButton + // + deleteButton.BackgroundImage = Properties.Resources.circle_x_svgrepo_com; + deleteButton.BackgroundImageLayout = ImageLayout.Zoom; + deleteButton.Location = new Point(33, 240); + deleteButton.Name = "deleteButton"; + deleteButton.Size = new Size(75, 75); + deleteButton.TabIndex = 2; + deleteButton.Text = " "; + deleteButton.UseVisualStyleBackColor = true; + deleteButton.Click += deleteButton_Click; + // + // editButton + // + editButton.BackgroundImage = Properties.Resources.pencil_svgrepo_com; + editButton.BackgroundImageLayout = ImageLayout.Zoom; + editButton.Location = new Point(33, 139); + editButton.Name = "editButton"; + editButton.Size = new Size(75, 75); + editButton.TabIndex = 1; + editButton.Text = " "; + editButton.UseVisualStyleBackColor = true; + editButton.Click += editButton_Click; + // + // addButton + // + addButton.BackgroundImage = Properties.Resources.circle_plus_svgrepo_com; + addButton.BackgroundImageLayout = ImageLayout.Zoom; + addButton.Location = new Point(33, 38); + addButton.Name = "addButton"; + addButton.Size = new Size(75, 75); + addButton.TabIndex = 0; + addButton.Text = " "; + addButton.UseVisualStyleBackColor = true; + addButton.Click += addButton_Click; + // + // dataGridView1 + // + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToDeleteRows = false; + dataGridView1.AllowUserToResizeColumns = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView1.BackgroundColor = SystemColors.Info; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.MultiSelect = false; + dataGridView1.Name = "dataGridView1"; + dataGridView1.ReadOnly = true; + dataGridView1.RowHeadersVisible = false; + dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView1.Size = new Size(604, 450); + dataGridView1.TabIndex = 1; + // + // FormAdvocates + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(746, 450); + Controls.Add(dataGridView1); + Controls.Add(panel1); + Name = "FormAdvocates"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Адвокаты"; + Load += FormClients_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button deleteButton; + private Button editButton; + private Button addButton; + private DataGridView dataGridView1; + } +} \ No newline at end of file diff --git a/ProjectGSM/Forms/FormAdvocates.cs b/ProjectGSM/Forms/FormAdvocates.cs new file mode 100644 index 0000000..00a8683 --- /dev/null +++ b/ProjectGSM/Forms/FormAdvocates.cs @@ -0,0 +1,123 @@ +using ProjectGSM.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace ProjectGSM.Forms +{ + public partial class FormAdvocates : Form + { + private readonly IUnityContainer _container; + + private readonly IAdvocateRepository _advocateRepository; + public FormAdvocates(IUnityContainer container, IAdvocateRepository advocateRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _advocateRepository = advocateRepository ?? + throw new + ArgumentNullException(nameof(advocateRepository)); + + } + + private void deleteButton_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", + MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _advocateRepository.DeleteAdvocate(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void editButton_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 addButton_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void FormClients_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void LoadList() => dataGridView1.DataSource = +_advocateRepository.ReadAdvocates(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView1.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Id"].Value); + return true; + } + + } +} diff --git a/ProjectGSM/Forms/FormAdvocates.resx b/ProjectGSM/Forms/FormAdvocates.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectGSM/Forms/FormAdvocates.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/ProjectGSM/Forms/FormBase.Designer.cs b/ProjectGSM/Forms/FormBase.Designer.cs new file mode 100644 index 0000000..e874d26 --- /dev/null +++ b/ProjectGSM/Forms/FormBase.Designer.cs @@ -0,0 +1,118 @@ +namespace ProjectGSM.Forms +{ + partial class FormBase + { + /// + /// 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() + { + textBox1 = new TextBox(); + label1 = new Label(); + label2 = new Label(); + numericUpDown1 = new NumericUpDown(); + button1 = new Button(); + button2 = new Button(); + ((System.ComponentModel.ISupportInitialize)numericUpDown1).BeginInit(); + SuspendLayout(); + // + // textBox1 + // + textBox1.Location = new Point(185, 43); + textBox1.Name = "textBox1"; + textBox1.Size = new Size(120, 23); + textBox1.TabIndex = 0; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(61, 51); + label1.Name = "label1"; + label1.Size = new Size(38, 15); + label1.TabIndex = 1; + label1.Text = "label1"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(61, 106); + label2.Name = "label2"; + label2.Size = new Size(38, 15); + label2.TabIndex = 2; + label2.Text = "label2"; + // + // numericUpDown1 + // + numericUpDown1.Location = new Point(185, 98); + numericUpDown1.Name = "numericUpDown1"; + numericUpDown1.Size = new Size(120, 23); + numericUpDown1.TabIndex = 3; + // + // button1 + // + button1.Location = new Point(85, 268); + button1.Name = "button1"; + button1.Size = new Size(104, 35); + button1.TabIndex = 4; + button1.Text = "Сохранить"; + button1.UseVisualStyleBackColor = true; + // + // button2 + // + button2.Location = new Point(211, 268); + button2.Name = "button2"; + button2.Size = new Size(104, 35); + button2.TabIndex = 5; + button2.Text = "Отмена"; + button2.UseVisualStyleBackColor = true; + // + // FormBase + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(385, 336); + Controls.Add(button2); + Controls.Add(button1); + Controls.Add(numericUpDown1); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(textBox1); + Name = "FormBase"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Клиент"; + ((System.ComponentModel.ISupportInitialize)numericUpDown1).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private TextBox textBox1; + private Label label1; + private Label label2; + private NumericUpDown numericUpDown1; + private Button button1; + private Button button2; + } +} \ No newline at end of file diff --git a/ProjectGSM/Forms/FormBase.cs b/ProjectGSM/Forms/FormBase.cs new file mode 100644 index 0000000..6d60bbf --- /dev/null +++ b/ProjectGSM/Forms/FormBase.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ProjectGSM.Forms +{ + public partial class FormBase : Form + { + public FormBase() + { + InitializeComponent(); + } + } +} diff --git a/ProjectGSM/Forms/FormBase.resx b/ProjectGSM/Forms/FormBase.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectGSM/Forms/FormBase.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/ProjectGSM/Forms/FormCase.Designer.cs b/ProjectGSM/Forms/FormCase.Designer.cs new file mode 100644 index 0000000..7b43630 --- /dev/null +++ b/ProjectGSM/Forms/FormCase.Designer.cs @@ -0,0 +1,288 @@ +namespace ProjectGSM.Forms +{ + partial class FormCase + { + /// + /// 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() + { + typeApealLabel = new Label(); + paymentLabel = new Label(); + saveButton = new Button(); + cancelButton = new Button(); + priceLabel = new Label(); + StatusLabel = new Label(); + verdictLabel = new Label(); + typeApellBox = new ComboBox(); + paymentCheckBox = new CheckBox(); + priceNumeric = new NumericUpDown(); + winPriceLabel = new Label(); + winPriceNumeric = new NumericUpDown(); + statusBox = new ComboBox(); + verdictCheckBox = new CheckBox(); + courtBox = new ComboBox(); + courtLabel = new Label(); + clientBox = new ComboBox(); + clientLabel = new Label(); + descriptionLabel = new Label(); + textBox1 = new TextBox(); + ((System.ComponentModel.ISupportInitialize)priceNumeric).BeginInit(); + ((System.ComponentModel.ISupportInitialize)winPriceNumeric).BeginInit(); + SuspendLayout(); + // + // typeApealLabel + // + typeApealLabel.Location = new Point(10, 10); + typeApealLabel.Name = "typeApealLabel"; + typeApealLabel.Size = new Size(100, 23); + typeApealLabel.TabIndex = 0; + typeApealLabel.Text = "Тип обращения:"; + // + // paymentLabel + // + paymentLabel.Location = new Point(10, 50); + paymentLabel.Name = "paymentLabel"; + paymentLabel.Size = new Size(100, 23); + paymentLabel.TabIndex = 2; + paymentLabel.Text = "Оплачено:"; + // + // saveButton + // + saveButton.Location = new Point(118, 375); + saveButton.Name = "saveButton"; + saveButton.Size = new Size(75, 23); + saveButton.TabIndex = 4; + saveButton.Text = "Сохранить"; + saveButton.Click += saveButton_Click; + // + // cancelButton + // + cancelButton.Location = new Point(197, 375); + cancelButton.Name = "cancelButton"; + cancelButton.Size = new Size(75, 23); + cancelButton.TabIndex = 5; + cancelButton.Text = "Отмена"; + cancelButton.Click += cancelButton_Click; + // + // priceLabel + // + priceLabel.Location = new Point(10, 89); + priceLabel.Name = "priceLabel"; + priceLabel.Size = new Size(100, 23); + priceLabel.TabIndex = 0; + priceLabel.Text = "Цена:"; + // + // StatusLabel + // + StatusLabel.Location = new Point(10, 157); + StatusLabel.Name = "StatusLabel"; + StatusLabel.Size = new Size(111, 23); + StatusLabel.TabIndex = 9; + StatusLabel.Text = "Текущий статус:"; + // + // verdictLabel + // + verdictLabel.Location = new Point(10, 191); + verdictLabel.Name = "verdictLabel"; + verdictLabel.Size = new Size(111, 23); + verdictLabel.TabIndex = 11; + verdictLabel.Text = "Вердикт:"; + // + // typeApellBox + // + typeApellBox.DropDownStyle = ComboBoxStyle.DropDownList; + typeApellBox.FormattingEnabled = true; + typeApellBox.Location = new Point(116, 10); + typeApellBox.Name = "typeApellBox"; + typeApellBox.Size = new Size(121, 23); + typeApellBox.TabIndex = 13; + // + // paymentCheckBox + // + paymentCheckBox.AutoSize = true; + paymentCheckBox.Location = new Point(120, 49); + paymentCheckBox.Name = "paymentCheckBox"; + paymentCheckBox.Size = new Size(76, 19); + paymentCheckBox.TabIndex = 14; + paymentCheckBox.Text = "успешно"; + paymentCheckBox.UseVisualStyleBackColor = true; + // + // priceNumeric + // + priceNumeric.DecimalPlaces = 2; + priceNumeric.Location = new Point(117, 87); + priceNumeric.Name = "priceNumeric"; + priceNumeric.Size = new Size(120, 23); + priceNumeric.TabIndex = 15; + // + // winPriceLabel + // + winPriceLabel.Location = new Point(10, 122); + winPriceLabel.Name = "winPriceLabel"; + winPriceLabel.Size = new Size(100, 23); + winPriceLabel.TabIndex = 16; + winPriceLabel.Text = "Победная цена:"; + // + // winPriceNumeric + // + winPriceNumeric.DecimalPlaces = 2; + winPriceNumeric.Location = new Point(117, 122); + winPriceNumeric.Name = "winPriceNumeric"; + winPriceNumeric.Size = new Size(120, 23); + winPriceNumeric.TabIndex = 17; + // + // statusBox + // + statusBox.DropDownStyle = ComboBoxStyle.DropDownList; + statusBox.FormattingEnabled = true; + statusBox.Location = new Point(116, 157); + statusBox.Name = "statusBox"; + statusBox.Size = new Size(121, 23); + statusBox.TabIndex = 18; + // + // verdictCheckBox + // + verdictCheckBox.AutoSize = true; + verdictCheckBox.Location = new Point(117, 191); + verdictCheckBox.Name = "verdictCheckBox"; + verdictCheckBox.Size = new Size(76, 19); + verdictCheckBox.TabIndex = 19; + verdictCheckBox.Text = "успешно"; + verdictCheckBox.UseVisualStyleBackColor = true; + // + // courtBox + // + courtBox.DropDownStyle = ComboBoxStyle.DropDownList; + courtBox.FormattingEnabled = true; + courtBox.Location = new Point(116, 224); + courtBox.Name = "courtBox"; + courtBox.Size = new Size(121, 23); + courtBox.TabIndex = 21; + // + // courtLabel + // + courtLabel.Location = new Point(10, 224); + courtLabel.Name = "courtLabel"; + courtLabel.Size = new Size(100, 23); + courtLabel.TabIndex = 20; + courtLabel.Text = "Суд:"; + // + // clientBox + // + clientBox.DropDownStyle = ComboBoxStyle.DropDownList; + clientBox.FormattingEnabled = true; + clientBox.Location = new Point(116, 262); + clientBox.Name = "clientBox"; + clientBox.Size = new Size(121, 23); + clientBox.TabIndex = 23; + // + // clientLabel + // + clientLabel.Location = new Point(10, 262); + clientLabel.Name = "clientLabel"; + clientLabel.Size = new Size(100, 23); + clientLabel.TabIndex = 22; + clientLabel.Text = "Клиент:"; + // + // descriptionLabel + // + descriptionLabel.Location = new Point(10, 296); + descriptionLabel.Name = "descriptionLabel"; + descriptionLabel.Size = new Size(100, 23); + descriptionLabel.TabIndex = 24; + descriptionLabel.Text = "Описание:"; + // + // textBox1 + // + textBox1.Location = new Point(118, 296); + textBox1.Multiline = true; + textBox1.Name = "textBox1"; + textBox1.Size = new Size(154, 73); + textBox1.TabIndex = 25; + // + // FormCase + // + ClientSize = new Size(284, 407); + Controls.Add(textBox1); + Controls.Add(descriptionLabel); + Controls.Add(clientBox); + Controls.Add(clientLabel); + Controls.Add(courtBox); + Controls.Add(courtLabel); + Controls.Add(verdictCheckBox); + Controls.Add(statusBox); + Controls.Add(winPriceNumeric); + Controls.Add(winPriceLabel); + Controls.Add(priceNumeric); + Controls.Add(paymentCheckBox); + Controls.Add(typeApellBox); + Controls.Add(verdictLabel); + Controls.Add(StatusLabel); + Controls.Add(priceLabel); + Controls.Add(typeApealLabel); + Controls.Add(paymentLabel); + Controls.Add(saveButton); + Controls.Add(cancelButton); + Name = "FormCase"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Дело"; + ((System.ComponentModel.ISupportInitialize)priceNumeric).EndInit(); + ((System.ComponentModel.ISupportInitialize)winPriceNumeric).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label typeApealLabel; + + private Label paymentLabel; + private TextBox emailTextBox; + + private Button saveButton; + private Button cancelButton; + private Label priceLabel; + private Label label2; + private CheckBox sexCheckBox; + private Label DateLabel; + private DateTimePicker dateTimePicker; + private Label StatusLabel; + private TextBox phoneText; + private Label verdictLabel; + private ComboBox typeApellBox; + private CheckBox paymentCheckBox; + private NumericUpDown priceNumeric; + private Label winPriceLabel; + private NumericUpDown winPriceNumeric; + private ComboBox statusBox; + private CheckBox verdictCheckBox; + private ComboBox courtBox; + private Label courtLabel; + private ComboBox clientBox; + private Label clientLabel; + private Label descriptionLabel; + private TextBox textBox1; + } +} \ No newline at end of file diff --git a/ProjectGSM/Forms/FormCase.cs b/ProjectGSM/Forms/FormCase.cs new file mode 100644 index 0000000..98ed0ef --- /dev/null +++ b/ProjectGSM/Forms/FormCase.cs @@ -0,0 +1,118 @@ +using ProjectGSM.Entities; +using ProjectGSM.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ProjectGSM.Forms +{ + + public partial class FormCase : Form + { + private readonly ICaseRepository _caseRepository; + + private int? _caseId; + + public int Id + { + set + { + try + { + var caseE = + _caseRepository.ReadCaseById(value); + if (caseE == null) + { + throw new + InvalidDataException(nameof(caseE)); + } + typeApellBox.SelectedIndex = caseE.TypeAppealId; + clientBox.SelectedIndex = caseE.ClientId; + courtBox.SelectedIndex = caseE.CourtId; + statusBox.SelectedIndex = caseE.StatusId; + paymentCheckBox.Checked = caseE.Payment; + priceNumeric.Value = caseE.Price; + winPriceNumeric.Value = caseE.VictoryPrice; + verdictCheckBox.Checked= caseE.Verdict; + textBox1.Text = caseE.Description; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + + public FormCase(ICaseRepository caseRepository, IClientRepository clientRepository, ICourtRepository courtRepository, IStatusRepository statusRepository) + { + InitializeComponent(); + _caseRepository = caseRepository ?? + throw new + ArgumentNullException(nameof(caseRepository)); + + typeApellBox.DataSource = caseRepository.ReadCases(); + typeApellBox.DisplayMember = "Name"; + typeApellBox.ValueMember = "Id"; + + clientBox.DataSource = clientRepository.ReadClients(); + clientBox.DisplayMember = "Name"; + clientBox.ValueMember = "Id"; + + statusBox.DataSource = statusRepository.ReadStatuses(); + statusBox.DisplayMember = "Name"; + statusBox.ValueMember = "Id"; + + courtBox.DataSource = courtRepository.ReadCourts(); + courtBox.DisplayMember = "Name"; + courtBox.ValueMember = "Id"; + } + + private void saveButton_Click(object sender, EventArgs e) + { + try + {if(typeApellBox.SelectedIndex < 0 || clientBox.SelectedIndex < 0 || statusBox.SelectedIndex < 0 || courtBox.SelectedIndex < 0 + + ) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_caseId.HasValue) + { + _caseRepository.UpdateCase(CreateCase(_caseId.Value)); + } + else + { + _caseRepository.UpdateCase(CreateCase(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void cancelButton_Click(object sender, EventArgs e) => Close(); + + private Case CreateCase(int id) => Case.CreateEntity(id, + typeApellBox.SelectedIndex, + paymentCheckBox.Checked, + priceNumeric.Value, + winPriceNumeric.Value, + statusBox.SelectedIndex, + verdictCheckBox.Checked, + courtBox.SelectedIndex, + clientBox.SelectedIndex, + textBox1.Text); + } +} diff --git a/ProjectGSM/Forms/FormCase.resx b/ProjectGSM/Forms/FormCase.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectGSM/Forms/FormCase.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/ProjectGSM/Forms/FormCaseAdvocates.Designer.cs b/ProjectGSM/Forms/FormCaseAdvocates.Designer.cs new file mode 100644 index 0000000..198b534 --- /dev/null +++ b/ProjectGSM/Forms/FormCaseAdvocates.Designer.cs @@ -0,0 +1,116 @@ +namespace ProjectGSM.Forms +{ + partial class FormCaseAdvocates + { + /// + /// 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() + { + advocateLabel = new Label(); + saveButton = new Button(); + cancelButton = new Button(); + caseLabel = new Label(); + advocateBox = new ComboBox(); + caseBox = new ComboBox(); + SuspendLayout(); + // + // advocateLabel + // + advocateLabel.Location = new Point(10, 47); + advocateLabel.Name = "advocateLabel"; + advocateLabel.Size = new Size(100, 23); + advocateLabel.TabIndex = 0; + advocateLabel.Text = "Адвокат:"; + // + // saveButton + // + saveButton.Location = new Point(138, 92); + saveButton.Name = "saveButton"; + saveButton.Size = new Size(75, 23); + saveButton.TabIndex = 4; + saveButton.Text = "Сохранить"; + saveButton.Click += saveButton_Click; + // + // cancelButton + // + cancelButton.Location = new Point(219, 92); + cancelButton.Name = "cancelButton"; + cancelButton.Size = new Size(75, 23); + cancelButton.TabIndex = 5; + cancelButton.Text = "Отмена"; + cancelButton.Click += cancelButton_Click; + // + // caseLabel + // + caseLabel.Location = new Point(10, 7); + caseLabel.Name = "caseLabel"; + caseLabel.Size = new Size(100, 23); + caseLabel.TabIndex = 15; + caseLabel.Text = "Дело:"; + // + // advocateBox + // + advocateBox.DropDownStyle = ComboBoxStyle.DropDownList; + advocateBox.FormattingEnabled = true; + advocateBox.Location = new Point(125, 47); + advocateBox.Name = "advocateBox"; + advocateBox.Size = new Size(169, 23); + advocateBox.TabIndex = 16; + // + // caseBox + // + caseBox.DropDownStyle = ComboBoxStyle.DropDownList; + caseBox.FormattingEnabled = true; + caseBox.Location = new Point(125, 7); + caseBox.Name = "caseBox"; + caseBox.Size = new Size(169, 23); + caseBox.TabIndex = 17; + // + // FormCaseAdvocates + // + ClientSize = new Size(306, 117); + Controls.Add(caseBox); + Controls.Add(advocateBox); + Controls.Add(caseLabel); + Controls.Add(advocateLabel); + Controls.Add(saveButton); + Controls.Add(cancelButton); + Name = "FormCaseAdvocates"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Закрепление адвоката за делом"; + ResumeLayout(false); + } + + #endregion + + private Label advocateLabel; + + private Button saveButton; + private Button cancelButton; + private Label caseLabel; + private ComboBox advocateBox; + private ComboBox caseBox; + } +} \ No newline at end of file diff --git a/ProjectGSM/Forms/FormCaseAdvocates.cs b/ProjectGSM/Forms/FormCaseAdvocates.cs new file mode 100644 index 0000000..b5606c3 --- /dev/null +++ b/ProjectGSM/Forms/FormCaseAdvocates.cs @@ -0,0 +1,64 @@ +using ProjectGSM.Entities; +using ProjectGSM.Repositories; +using ProjectGSM.Repositories.Implementations; + +namespace ProjectGSM.Forms +{ + + public partial class FormCaseAdvocates : Form + { + private readonly ICaseAdvocateRepository _caseAdvocateRepository; + + + public FormCaseAdvocates(ICaseAdvocateRepository caseAdvocateRepository, + ICaseRepository caseRepository, IAdvocateRepository advocateRepository) + { + InitializeComponent(); + _caseAdvocateRepository = caseAdvocateRepository ?? + throw new + ArgumentNullException(nameof(caseAdvocateRepository)); + + + try + { + caseBox.DataSource = caseRepository.ReadCases(); + caseBox.DisplayMember = "Name"; + caseBox.SelectedIndex = 0; + } + catch (Exception ex) + { + } + try + { + advocateBox.DataSource = advocateRepository.ReadAdvocates(); + advocateBox.DisplayMember = "Name"; + advocateBox.SelectedIndex = 0; + } + catch (Exception ex) { } + + + + + } + + private void saveButton_Click(object sender, EventArgs e) + { + try + { + if (caseBox.SelectedIndex < 0 || advocateBox.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля"); + } + _caseAdvocateRepository.CreateCaseAdvocate(CaseAdvocate.CreateEntity(caseBox.SelectedIndex, advocateBox.SelectedIndex)); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + private void cancelButton_Click(object sender, EventArgs e) => Close(); + } +} diff --git a/ProjectGSM/Forms/FormCaseAdvocates.resx b/ProjectGSM/Forms/FormCaseAdvocates.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectGSM/Forms/FormCaseAdvocates.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/ProjectGSM/Forms/FormCases.Designer.cs b/ProjectGSM/Forms/FormCases.Designer.cs new file mode 100644 index 0000000..c6401a7 --- /dev/null +++ b/ProjectGSM/Forms/FormCases.Designer.cs @@ -0,0 +1,130 @@ +namespace ProjectGSM.Forms +{ + partial class FormCases + { + /// + /// 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(); + deleteButton = new Button(); + editButton = new Button(); + addButton = new Button(); + dataGridView1 = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(deleteButton); + panel1.Controls.Add(editButton); + panel1.Controls.Add(addButton); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(604, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(142, 450); + panel1.TabIndex = 0; + // + // deleteButton + // + deleteButton.BackgroundImage = Properties.Resources.circle_x_svgrepo_com; + deleteButton.BackgroundImageLayout = ImageLayout.Zoom; + deleteButton.Location = new Point(33, 240); + deleteButton.Name = "deleteButton"; + deleteButton.Size = new Size(75, 75); + deleteButton.TabIndex = 2; + deleteButton.Text = " "; + deleteButton.UseVisualStyleBackColor = true; + deleteButton.Click += deleteButton_Click; + // + // editButton + // + editButton.BackgroundImage = Properties.Resources.pencil_svgrepo_com; + editButton.BackgroundImageLayout = ImageLayout.Zoom; + editButton.Location = new Point(33, 139); + editButton.Name = "editButton"; + editButton.Size = new Size(75, 75); + editButton.TabIndex = 1; + editButton.Text = " "; + editButton.UseVisualStyleBackColor = true; + editButton.Click += editButton_Click; + // + // addButton + // + addButton.BackgroundImage = Properties.Resources.circle_plus_svgrepo_com; + addButton.BackgroundImageLayout = ImageLayout.Zoom; + addButton.Location = new Point(33, 38); + addButton.Name = "addButton"; + addButton.Size = new Size(75, 75); + addButton.TabIndex = 0; + addButton.Text = " "; + addButton.UseVisualStyleBackColor = true; + addButton.Click += addButton_Click; + // + // dataGridView1 + // + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToDeleteRows = false; + dataGridView1.AllowUserToResizeColumns = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView1.BackgroundColor = SystemColors.Info; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.MultiSelect = false; + dataGridView1.Name = "dataGridView1"; + dataGridView1.ReadOnly = true; + dataGridView1.RowHeadersVisible = false; + dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView1.Size = new Size(604, 450); + dataGridView1.TabIndex = 1; + // + // FormCases + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(746, 450); + Controls.Add(dataGridView1); + Controls.Add(panel1); + Name = "FormCases"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Дела"; + Load += FormClients_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button deleteButton; + private Button editButton; + private Button addButton; + private DataGridView dataGridView1; + } +} \ No newline at end of file diff --git a/ProjectGSM/Forms/FormCases.cs b/ProjectGSM/Forms/FormCases.cs new file mode 100644 index 0000000..3adba5c --- /dev/null +++ b/ProjectGSM/Forms/FormCases.cs @@ -0,0 +1,123 @@ +using ProjectGSM.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace ProjectGSM.Forms +{ + public partial class FormCases : Form + { + private readonly IUnityContainer _container; + + private readonly ICaseRepository _caseRepository; + public FormCases(IUnityContainer container, ICaseRepository caseRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _caseRepository = caseRepository ?? + throw new + ArgumentNullException(nameof(caseRepository)); + + } + + private void deleteButton_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", + MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _caseRepository.DeleteCase(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void editButton_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 addButton_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void FormClients_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void LoadList() => dataGridView1.DataSource = +_caseRepository.ReadCases(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView1.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Id"].Value); + return true; + } + + } +} diff --git a/ProjectGSM/Forms/FormCases.resx b/ProjectGSM/Forms/FormCases.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectGSM/Forms/FormCases.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/ProjectGSM/Forms/FormCasesAdvocates.Designer.cs b/ProjectGSM/Forms/FormCasesAdvocates.Designer.cs new file mode 100644 index 0000000..ad879a6 --- /dev/null +++ b/ProjectGSM/Forms/FormCasesAdvocates.Designer.cs @@ -0,0 +1,101 @@ +namespace ProjectGSM.Forms +{ + partial class FormCasesAdvocates + { + /// + /// 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(); + addButton = new Button(); + dataGridView1 = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(addButton); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(604, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(142, 450); + panel1.TabIndex = 0; + // + // addButton + // + addButton.BackgroundImage = Properties.Resources.circle_plus_svgrepo_com; + addButton.BackgroundImageLayout = ImageLayout.Zoom; + addButton.Location = new Point(33, 38); + addButton.Name = "addButton"; + addButton.Size = new Size(75, 75); + addButton.TabIndex = 0; + addButton.Text = " "; + addButton.UseVisualStyleBackColor = true; + addButton.Click += addButton_Click; + // + // dataGridView1 + // + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToDeleteRows = false; + dataGridView1.AllowUserToResizeColumns = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView1.BackgroundColor = SystemColors.Info; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.MultiSelect = false; + dataGridView1.Name = "dataGridView1"; + dataGridView1.ReadOnly = true; + dataGridView1.RowHeadersVisible = false; + dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView1.Size = new Size(604, 450); + dataGridView1.TabIndex = 1; + // + // FormCasesAdvocates + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(746, 450); + Controls.Add(dataGridView1); + Controls.Add(panel1); + Name = "FormCasesAdvocates"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Суды"; + Load += FormClients_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button addButton; + private DataGridView dataGridView1; + + } +} \ No newline at end of file diff --git a/ProjectGSM/Forms/FormCasesAdvocates.cs b/ProjectGSM/Forms/FormCasesAdvocates.cs new file mode 100644 index 0000000..079c6ed --- /dev/null +++ b/ProjectGSM/Forms/FormCasesAdvocates.cs @@ -0,0 +1,68 @@ +using ProjectGSM.Repositories; +using ProjectGSM.Repositories.Implementations; +using Unity; + +namespace ProjectGSM.Forms +{ + public partial class FormCasesAdvocates : Form + { + private readonly IUnityContainer _container; + + private readonly ICaseAdvocateRepository _caseAdvocateRepository; + public FormCasesAdvocates(IUnityContainer container, ICaseAdvocateRepository caseAdvocateRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _caseAdvocateRepository = caseAdvocateRepository ?? + throw new + ArgumentNullException(nameof(caseAdvocateRepository)); + + } + private void addButton_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void FormClients_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void LoadList() => dataGridView1.DataSource = +_caseAdvocateRepository.ReadCaseAdvocates(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView1.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} diff --git a/ProjectGSM/Forms/FormCasesAdvocates.resx b/ProjectGSM/Forms/FormCasesAdvocates.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectGSM/Forms/FormCasesAdvocates.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/ProjectGSM/Forms/FormClient.Designer.cs b/ProjectGSM/Forms/FormClient.Designer.cs new file mode 100644 index 0000000..02c9cd1 --- /dev/null +++ b/ProjectGSM/Forms/FormClient.Designer.cs @@ -0,0 +1,202 @@ +namespace ProjectGSM.Forms +{ + partial class FormClient + { + /// + /// 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() + { + nameLabel = new Label(); + nameTextBox = new TextBox(); + emailLabel = new Label(); + emailTextBox = new TextBox(); + saveButton = new Button(); + cancelButton = new Button(); + sex = new Label(); + sexCheckBox = new CheckBox(); + DateLabel = new Label(); + dateTimePicker = new DateTimePicker(); + PhoneLabel = new Label(); + phoneText = new TextBox(); + adressLabel = new Label(); + adressBox = new TextBox(); + SuspendLayout(); + // + // nameLabel + // + nameLabel.Location = new Point(10, 10); + nameLabel.Name = "nameLabel"; + nameLabel.Size = new Size(100, 23); + nameLabel.TabIndex = 0; + nameLabel.Text = "Имя клиента:"; + // + // nameTextBox + // + nameTextBox.Location = new Point(120, 10); + nameTextBox.Name = "nameTextBox"; + nameTextBox.Size = new Size(108, 23); + nameTextBox.TabIndex = 1; + // + // emailLabel + // + emailLabel.Location = new Point(10, 50); + emailLabel.Name = "emailLabel"; + emailLabel.Size = new Size(100, 23); + emailLabel.TabIndex = 2; + emailLabel.Text = "Email:"; + // + // emailTextBox + // + emailTextBox.Location = new Point(120, 50); + emailTextBox.Name = "emailTextBox"; + emailTextBox.Size = new Size(108, 23); + emailTextBox.TabIndex = 3; + // + // saveButton + // + saveButton.Location = new Point(117, 226); + saveButton.Name = "saveButton"; + saveButton.Size = new Size(75, 23); + saveButton.TabIndex = 4; + saveButton.Text = "Сохранить"; + saveButton.Click += saveButton_Click; + // + // cancelButton + // + cancelButton.Location = new Point(197, 226); + cancelButton.Name = "cancelButton"; + cancelButton.Size = new Size(75, 23); + cancelButton.TabIndex = 5; + cancelButton.Text = "Отмена"; + cancelButton.Click += cancelButton_Click; + // + // sex + // + sex.Location = new Point(10, 89); + sex.Name = "sex"; + sex.Size = new Size(100, 23); + sex.TabIndex = 0; + sex.Text = "Пол:"; + // + // sexCheckBox + // + sexCheckBox.AutoSize = true; + sexCheckBox.Location = new Point(120, 88); + sexCheckBox.Name = "sexCheckBox"; + sexCheckBox.Size = new Size(77, 19); + sexCheckBox.TabIndex = 6; + sexCheckBox.Text = "мужчина"; + sexCheckBox.UseVisualStyleBackColor = true; + // + // DateLabel + // + DateLabel.Location = new Point(10, 121); + DateLabel.Name = "DateLabel"; + DateLabel.Size = new Size(100, 23); + DateLabel.TabIndex = 7; + DateLabel.Text = "Дата рождения:"; + // + // dateTimePicker + // + dateTimePicker.Location = new Point(116, 115); + dateTimePicker.Name = "dateTimePicker"; + dateTimePicker.Size = new Size(112, 23); + dateTimePicker.TabIndex = 8; + // + // PhoneLabel + // + PhoneLabel.Location = new Point(10, 157); + PhoneLabel.Name = "PhoneLabel"; + PhoneLabel.Size = new Size(111, 23); + PhoneLabel.TabIndex = 9; + PhoneLabel.Text = "Номер телефона:"; + // + // phoneText + // + phoneText.Location = new Point(120, 155); + phoneText.Name = "phoneText"; + phoneText.Size = new Size(108, 23); + phoneText.TabIndex = 10; + // + // adressLabel + // + adressLabel.Location = new Point(10, 191); + adressLabel.Name = "adressLabel"; + adressLabel.Size = new Size(111, 23); + adressLabel.TabIndex = 11; + adressLabel.Text = "Адрес:"; + // + // adressBox + // + adressBox.Location = new Point(120, 191); + adressBox.Name = "adressBox"; + adressBox.Size = new Size(108, 23); + adressBox.TabIndex = 12; + // + // FormClient + // + ClientSize = new Size(284, 261); + Controls.Add(adressBox); + Controls.Add(adressLabel); + Controls.Add(phoneText); + Controls.Add(PhoneLabel); + Controls.Add(dateTimePicker); + Controls.Add(DateLabel); + Controls.Add(sexCheckBox); + Controls.Add(sex); + Controls.Add(nameLabel); + Controls.Add(nameTextBox); + Controls.Add(emailLabel); + Controls.Add(emailTextBox); + Controls.Add(saveButton); + Controls.Add(cancelButton); + Name = "FormClient"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Клиент"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label nameLabel; + private TextBox nameTextBox; + + private Label emailLabel; + private TextBox emailTextBox; + + private Button saveButton; + private Button cancelButton; + private Label sex; + private Label label2; + private CheckBox sexCheckBox; + private Label DateLabel; + private DateTimePicker dateTimePicker; + private Label PhoneLabel; + private TextBox phoneText; + private Label adressLabel; + private TextBox adressBox; + } +} \ No newline at end of file diff --git a/ProjectGSM/Forms/FormClient.cs b/ProjectGSM/Forms/FormClient.cs new file mode 100644 index 0000000..8971889 --- /dev/null +++ b/ProjectGSM/Forms/FormClient.cs @@ -0,0 +1,95 @@ +using ProjectGSM.Entities; +using ProjectGSM.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ProjectGSM.Forms +{ + + public partial class FormClient : Form + { + private readonly IClientRepository _clientRepository; + + private int? _clientId; + + public int Id + { + set + { + try + { + var client = + _clientRepository.ReadClientById(value); + if (client == null) + { + throw new + InvalidDataException(nameof(client)); + } + nameTextBox.Text = client.Name; + emailTextBox.Text = client.Email; + sexCheckBox.Checked = client.Sex; + dateTimePicker.Value = new DateTime(client.DateOfBirth.Year, client.DateOfBirth.Month, client.DateOfBirth.Day); + phoneText.Text = client.PhoneNumber; + adressBox.Text = client.Address; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + + public FormClient(IClientRepository clientRepository) + { + InitializeComponent(); + _clientRepository = clientRepository ?? +throw new +ArgumentNullException(nameof(clientRepository)); + } + + private void saveButton_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(nameTextBox.Text) || string.IsNullOrWhiteSpace(emailTextBox.Text) || string.IsNullOrWhiteSpace(phoneText.Text) || string.IsNullOrWhiteSpace(adressBox.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_clientId.HasValue) + { + _clientRepository.UpdateClient(CreateClient(_clientId.Value)); + } + else + { + _clientRepository.UpdateClient(CreateClient(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void cancelButton_Click(object sender, EventArgs e) => Close(); + + private Client CreateClient(int id) => Client.CreateEntity(id, + nameTextBox.Text, + sexCheckBox.Checked, + dateTimePicker.Value, + emailTextBox.Text, + phoneText.Text, + adressBox.Text); + } +} diff --git a/ProjectGSM/Forms/FormClient.resx b/ProjectGSM/Forms/FormClient.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectGSM/Forms/FormClient.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/ProjectGSM/Forms/FormClients.Designer.cs b/ProjectGSM/Forms/FormClients.Designer.cs new file mode 100644 index 0000000..446c517 --- /dev/null +++ b/ProjectGSM/Forms/FormClients.Designer.cs @@ -0,0 +1,130 @@ +namespace ProjectGSM.Forms +{ + partial class FormClients + { + /// + /// 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(); + deleteButton = new Button(); + editButton = new Button(); + addButton = new Button(); + dataGridView1 = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(deleteButton); + panel1.Controls.Add(editButton); + panel1.Controls.Add(addButton); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(604, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(142, 450); + panel1.TabIndex = 0; + // + // deleteButton + // + deleteButton.BackgroundImage = Properties.Resources.circle_x_svgrepo_com; + deleteButton.BackgroundImageLayout = ImageLayout.Zoom; + deleteButton.Location = new Point(33, 240); + deleteButton.Name = "deleteButton"; + deleteButton.Size = new Size(75, 75); + deleteButton.TabIndex = 2; + deleteButton.Text = " "; + deleteButton.UseVisualStyleBackColor = true; + deleteButton.Click += deleteButton_Click; + // + // editButton + // + editButton.BackgroundImage = Properties.Resources.pencil_svgrepo_com; + editButton.BackgroundImageLayout = ImageLayout.Zoom; + editButton.Location = new Point(33, 139); + editButton.Name = "editButton"; + editButton.Size = new Size(75, 75); + editButton.TabIndex = 1; + editButton.Text = " "; + editButton.UseVisualStyleBackColor = true; + editButton.Click += editButton_Click; + // + // addButton + // + addButton.BackgroundImage = Properties.Resources.circle_plus_svgrepo_com; + addButton.BackgroundImageLayout = ImageLayout.Zoom; + addButton.Location = new Point(33, 38); + addButton.Name = "addButton"; + addButton.Size = new Size(75, 75); + addButton.TabIndex = 0; + addButton.Text = " "; + addButton.UseVisualStyleBackColor = true; + addButton.Click += addButton_Click; + // + // dataGridView1 + // + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToDeleteRows = false; + dataGridView1.AllowUserToResizeColumns = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView1.BackgroundColor = SystemColors.Info; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.MultiSelect = false; + dataGridView1.Name = "dataGridView1"; + dataGridView1.ReadOnly = true; + dataGridView1.RowHeadersVisible = false; + dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView1.Size = new Size(604, 450); + dataGridView1.TabIndex = 1; + // + // FormClients + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(746, 450); + Controls.Add(dataGridView1); + Controls.Add(panel1); + Name = "FormClients"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Клиенты"; + Load += FormClients_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button deleteButton; + private Button editButton; + private Button addButton; + private DataGridView dataGridView1; + } +} \ No newline at end of file diff --git a/ProjectGSM/Forms/FormClients.cs b/ProjectGSM/Forms/FormClients.cs new file mode 100644 index 0000000..eab944f --- /dev/null +++ b/ProjectGSM/Forms/FormClients.cs @@ -0,0 +1,123 @@ +using ProjectGSM.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace ProjectGSM.Forms +{ + public partial class FormClients : Form + { + private readonly IUnityContainer _container; + + private readonly IClientRepository _clientRepository; + public FormClients(IUnityContainer container, IClientRepository clientRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _clientRepository = clientRepository ?? + throw new + ArgumentNullException(nameof(clientRepository)); + + } + + private void deleteButton_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", + MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _clientRepository.DeleteClient(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void editButton_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 addButton_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void FormClients_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void LoadList() => dataGridView1.DataSource = +_clientRepository.ReadClients(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView1.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Id"].Value); + return true; + } + + } +} diff --git a/ProjectGSM/Forms/FormClients.resx b/ProjectGSM/Forms/FormClients.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectGSM/Forms/FormClients.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/ProjectGSM/Forms/FormCourt.Designer.cs b/ProjectGSM/Forms/FormCourt.Designer.cs new file mode 100644 index 0000000..27eebd1 --- /dev/null +++ b/ProjectGSM/Forms/FormCourt.Designer.cs @@ -0,0 +1,113 @@ +namespace ProjectGSM.Forms +{ + partial class FormCourt + { + /// + /// 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() + { + nameLabel = new Label(); + nameTextBox = new TextBox(); + saveButton = new Button(); + cancelButton = new Button(); + adressLabel = new Label(); + adressBox = new TextBox(); + SuspendLayout(); + // + // nameLabel + // + nameLabel.Location = new Point(10, 10); + nameLabel.Name = "nameLabel"; + nameLabel.Size = new Size(100, 23); + nameLabel.TabIndex = 0; + nameLabel.Text = "Название:"; + // + // nameTextBox + // + nameTextBox.Location = new Point(116, 10); + nameTextBox.Name = "nameTextBox"; + nameTextBox.Size = new Size(120, 23); + nameTextBox.TabIndex = 1; + // + // saveButton + // + saveButton.Location = new Point(116, 101); + saveButton.Name = "saveButton"; + saveButton.Size = new Size(75, 23); + saveButton.TabIndex = 4; + saveButton.Text = "Сохранить"; + saveButton.Click += saveButton_Click; + // + // cancelButton + // + cancelButton.Location = new Point(197, 101); + cancelButton.Name = "cancelButton"; + cancelButton.Size = new Size(75, 23); + cancelButton.TabIndex = 5; + cancelButton.Text = "Отмена"; + cancelButton.Click += cancelButton_Click; + // + // adressLabel + // + adressLabel.Location = new Point(10, 50); + adressLabel.Name = "adressLabel"; + adressLabel.Size = new Size(111, 23); + adressLabel.TabIndex = 11; + adressLabel.Text = "Адрес:"; + // + // adressBox + // + adressBox.Location = new Point(116, 47); + adressBox.Name = "adressBox"; + adressBox.Size = new Size(120, 23); + adressBox.TabIndex = 12; + // + // FormCourt + // + ClientSize = new Size(284, 134); + Controls.Add(adressBox); + Controls.Add(adressLabel); + Controls.Add(nameLabel); + Controls.Add(nameTextBox); + Controls.Add(saveButton); + Controls.Add(cancelButton); + Name = "FormCourt"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Суд"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label nameLabel; + private TextBox nameTextBox; + + private Button saveButton; + private Button cancelButton; + private Label adressLabel; + private TextBox adressBox; + } +} \ No newline at end of file diff --git a/ProjectGSM/Forms/FormCourt.cs b/ProjectGSM/Forms/FormCourt.cs new file mode 100644 index 0000000..cc6ef76 --- /dev/null +++ b/ProjectGSM/Forms/FormCourt.cs @@ -0,0 +1,79 @@ +using ProjectGSM.Entities; +using ProjectGSM.Repositories; + +namespace ProjectGSM.Forms +{ + + public partial class FormCourt : Form + { + private readonly ICourtRepository _courtRepository; + + private int? _courtId; + + public int Id + { + set + { + try + { + var court = + _courtRepository.ReadCourtById(value); + if (court == null) + { + throw new + InvalidDataException(nameof(court)); + } + nameTextBox.Text = court.Name; + adressBox.Text = court.Address; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + + public FormCourt(ICourtRepository courtRepository) + { + InitializeComponent(); + _courtRepository = courtRepository ?? + throw new + ArgumentNullException(nameof(courtRepository)); + } + + private void saveButton_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(nameTextBox.Text) || string.IsNullOrWhiteSpace(adressBox.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_courtId.HasValue) + { + _courtRepository.UpdateCourt(CreateCourt(_courtId.Value)); + } + else + { + _courtRepository.CreateCourt(CreateCourt(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void cancelButton_Click(object sender, EventArgs e) => Close(); + + private Court CreateCourt(int id) => Court.CreateEntity(id, + nameTextBox.Text, + adressBox.Text); + + } +} diff --git a/ProjectGSM/Forms/FormCourt.resx b/ProjectGSM/Forms/FormCourt.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectGSM/Forms/FormCourt.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/ProjectGSM/Forms/FormCourts.Designer.cs b/ProjectGSM/Forms/FormCourts.Designer.cs new file mode 100644 index 0000000..5c140b8 --- /dev/null +++ b/ProjectGSM/Forms/FormCourts.Designer.cs @@ -0,0 +1,130 @@ +namespace ProjectGSM.Forms +{ + partial class FormCourts + { + /// + /// 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(); + deleteButton = new Button(); + editButton = new Button(); + addButton = new Button(); + dataGridView1 = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(deleteButton); + panel1.Controls.Add(editButton); + panel1.Controls.Add(addButton); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(604, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(142, 450); + panel1.TabIndex = 0; + // + // deleteButton + // + deleteButton.BackgroundImage = Properties.Resources.circle_x_svgrepo_com; + deleteButton.BackgroundImageLayout = ImageLayout.Zoom; + deleteButton.Location = new Point(33, 240); + deleteButton.Name = "deleteButton"; + deleteButton.Size = new Size(75, 75); + deleteButton.TabIndex = 2; + deleteButton.Text = " "; + deleteButton.UseVisualStyleBackColor = true; + deleteButton.Click += deleteButton_Click; + // + // editButton + // + editButton.BackgroundImage = Properties.Resources.pencil_svgrepo_com; + editButton.BackgroundImageLayout = ImageLayout.Zoom; + editButton.Location = new Point(33, 139); + editButton.Name = "editButton"; + editButton.Size = new Size(75, 75); + editButton.TabIndex = 1; + editButton.Text = " "; + editButton.UseVisualStyleBackColor = true; + editButton.Click += editButton_Click; + // + // addButton + // + addButton.BackgroundImage = Properties.Resources.circle_plus_svgrepo_com; + addButton.BackgroundImageLayout = ImageLayout.Zoom; + addButton.Location = new Point(33, 38); + addButton.Name = "addButton"; + addButton.Size = new Size(75, 75); + addButton.TabIndex = 0; + addButton.Text = " "; + addButton.UseVisualStyleBackColor = true; + addButton.Click += addButton_Click; + // + // dataGridView1 + // + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToDeleteRows = false; + dataGridView1.AllowUserToResizeColumns = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView1.BackgroundColor = SystemColors.Info; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.MultiSelect = false; + dataGridView1.Name = "dataGridView1"; + dataGridView1.ReadOnly = true; + dataGridView1.RowHeadersVisible = false; + dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView1.Size = new Size(604, 450); + dataGridView1.TabIndex = 1; + // + // FormCourts + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(746, 450); + Controls.Add(dataGridView1); + Controls.Add(panel1); + Name = "FormCourts"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Суды"; + Load += FormClients_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button deleteButton; + private Button editButton; + private Button addButton; + private DataGridView dataGridView1; + } +} \ No newline at end of file diff --git a/ProjectGSM/Forms/FormCourts.cs b/ProjectGSM/Forms/FormCourts.cs new file mode 100644 index 0000000..3f9c21c --- /dev/null +++ b/ProjectGSM/Forms/FormCourts.cs @@ -0,0 +1,123 @@ +using ProjectGSM.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace ProjectGSM.Forms +{ + public partial class FormCourts : Form + { + private readonly IUnityContainer _container; + + private readonly ICourtRepository _courtRepository; + public FormCourts(IUnityContainer container, ICourtRepository courtRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _courtRepository = courtRepository ?? + throw new + ArgumentNullException(nameof(courtRepository)); + + } + + private void deleteButton_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", + MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _courtRepository.DeleteCourt(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void editButton_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 addButton_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void FormClients_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void LoadList() => dataGridView1.DataSource = +_courtRepository.ReadCourts(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView1.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Id"].Value); + return true; + } + + } +} diff --git a/ProjectGSM/Forms/FormCourts.resx b/ProjectGSM/Forms/FormCourts.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectGSM/Forms/FormCourts.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/ProjectGSM/Forms/FormStatus.Designer.cs b/ProjectGSM/Forms/FormStatus.Designer.cs new file mode 100644 index 0000000..680cd69 --- /dev/null +++ b/ProjectGSM/Forms/FormStatus.Designer.cs @@ -0,0 +1,136 @@ +namespace ProjectGSM.Forms +{ + partial class FormStatus + { + /// + /// 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() + { + nameLabel = new Label(); + nameTextBox = new TextBox(); + saveButton = new Button(); + cancelButton = new Button(); + priceLabel = new Label(); + priceNumeric = new NumericUpDown(); + dateLabel = new Label(); + dateTimePicker1 = new DateTimePicker(); + ((System.ComponentModel.ISupportInitialize)priceNumeric).BeginInit(); + SuspendLayout(); + // + // nameLabel + // + nameLabel.Location = new Point(10, 10); + nameLabel.Name = "nameLabel"; + nameLabel.Size = new Size(100, 23); + nameLabel.TabIndex = 0; + nameLabel.Text = "Название:"; + // + // nameTextBox + // + nameTextBox.Location = new Point(116, 10); + nameTextBox.Name = "nameTextBox"; + nameTextBox.Size = new Size(120, 23); + nameTextBox.TabIndex = 1; + // + // saveButton + // + saveButton.Location = new Point(116, 134); + saveButton.Name = "saveButton"; + saveButton.Size = new Size(75, 23); + saveButton.TabIndex = 4; + saveButton.Text = "Сохранить"; + saveButton.Click += saveButton_Click; + // + // cancelButton + // + cancelButton.Location = new Point(197, 134); + cancelButton.Name = "cancelButton"; + cancelButton.Size = new Size(75, 23); + cancelButton.TabIndex = 5; + cancelButton.Text = "Отмена"; + cancelButton.Click += cancelButton_Click; + // + // priceLabel + // + priceLabel.Location = new Point(10, 50); + priceLabel.Name = "priceLabel"; + priceLabel.Size = new Size(111, 23); + priceLabel.TabIndex = 11; + priceLabel.Text = "Цена:"; + // + // priceNumeric + // + priceNumeric.Location = new Point(116, 50); + priceNumeric.Name = "priceNumeric"; + priceNumeric.Size = new Size(120, 23); + priceNumeric.TabIndex = 12; + // + // dateLabel + // + dateLabel.Location = new Point(10, 96); + dateLabel.Name = "dateLabel"; + dateLabel.Size = new Size(111, 23); + dateLabel.TabIndex = 13; + dateLabel.Text = "Дата:"; + // + // dateTimePicker1 + // + dateTimePicker1.Location = new Point(116, 96); + dateTimePicker1.Name = "dateTimePicker1"; + dateTimePicker1.Size = new Size(120, 23); + dateTimePicker1.TabIndex = 14; + // + // FornStatus + // + ClientSize = new Size(284, 169); + Controls.Add(dateTimePicker1); + Controls.Add(dateLabel); + Controls.Add(priceNumeric); + Controls.Add(priceLabel); + Controls.Add(nameLabel); + Controls.Add(nameTextBox); + Controls.Add(saveButton); + Controls.Add(cancelButton); + Name = "FornStatus"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Суд"; + ((System.ComponentModel.ISupportInitialize)priceNumeric).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label nameLabel; + private TextBox nameTextBox; + + private Button saveButton; + private Button cancelButton; + private Label priceLabel; + private NumericUpDown priceNumeric; + private Label dateLabel; + private DateTimePicker dateTimePicker1; + } +} \ No newline at end of file diff --git a/ProjectGSM/Forms/FormStatus.cs b/ProjectGSM/Forms/FormStatus.cs new file mode 100644 index 0000000..042c5b4 --- /dev/null +++ b/ProjectGSM/Forms/FormStatus.cs @@ -0,0 +1,78 @@ +using ProjectGSM.Entities; +using ProjectGSM.Repositories; + +namespace ProjectGSM.Forms +{ + + public partial class FormStatus : Form + { + private readonly IStatusRepository _statusRepository; + + private int? _statusId; + + public int Id + { + set + { + try + { + var status = + _statusRepository.ReadStatusById(value); + if (status == null) + { + throw new + InvalidDataException(nameof(status)); + } + nameTextBox.Text = status.Name; + priceNumeric.Value = status.Price ?? 0; + dateTimePicker1.Value = new DateTime(status.CreatedAt.Year, status.CreatedAt.Month, status.CreatedAt.Day); ; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + + public FormStatus(IStatusRepository statusRepository) + { + InitializeComponent(); + _statusRepository = statusRepository ?? + throw new + ArgumentNullException(nameof(statusRepository)); + } + + private void saveButton_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(nameTextBox.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_statusId.HasValue) + { + _statusRepository.UpdateStatus(CreateStatus(_statusId.Value)); + } + else + { + _statusRepository.UpdateStatus(CreateStatus(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void cancelButton_Click(object sender, EventArgs e) => Close(); + + private Status CreateStatus(int id) => Status.CreateEntity(id, + nameTextBox.Text, Convert.ToDecimal(priceNumeric.Value), dateTimePicker1.Value); + } +} diff --git a/ProjectGSM/Forms/FormStatus.resx b/ProjectGSM/Forms/FormStatus.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectGSM/Forms/FormStatus.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/ProjectGSM/Forms/FormStatusHistory.Designer.cs b/ProjectGSM/Forms/FormStatusHistory.Designer.cs new file mode 100644 index 0000000..d997c92 --- /dev/null +++ b/ProjectGSM/Forms/FormStatusHistory.Designer.cs @@ -0,0 +1,137 @@ +namespace ProjectGSM.Forms +{ + partial class FormStatusHistory + { + /// + /// 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() + { + statusLabel = new Label(); + saveButton = new Button(); + cancelButton = new Button(); + dateLabel = new Label(); + dateTimePicker1 = new DateTimePicker(); + caseLabel = new Label(); + statusBox = new ComboBox(); + caseBox = new ComboBox(); + SuspendLayout(); + // + // statusLabel + // + statusLabel.Location = new Point(10, 47); + statusLabel.Name = "statusLabel"; + statusLabel.Size = new Size(100, 23); + statusLabel.TabIndex = 0; + statusLabel.Text = "Статус:"; + // + // saveButton + // + saveButton.Location = new Point(116, 128); + saveButton.Name = "saveButton"; + saveButton.Size = new Size(75, 23); + saveButton.TabIndex = 4; + saveButton.Text = "Сохранить"; + saveButton.Click += saveButton_Click; + // + // cancelButton + // + cancelButton.Location = new Point(197, 128); + cancelButton.Name = "cancelButton"; + cancelButton.Size = new Size(75, 23); + cancelButton.TabIndex = 5; + cancelButton.Text = "Отмена"; + cancelButton.Click += cancelButton_Click; + // + // dateLabel + // + dateLabel.Location = new Point(10, 92); + dateLabel.Name = "dateLabel"; + dateLabel.Size = new Size(111, 23); + dateLabel.TabIndex = 13; + dateLabel.Text = "Дата:"; + // + // dateTimePicker1 + // + dateTimePicker1.Location = new Point(125, 92); + dateTimePicker1.Name = "dateTimePicker1"; + dateTimePicker1.Size = new Size(120, 23); + dateTimePicker1.TabIndex = 14; + // + // caseLabel + // + caseLabel.Location = new Point(10, 7); + caseLabel.Name = "caseLabel"; + caseLabel.Size = new Size(100, 23); + caseLabel.TabIndex = 15; + caseLabel.Text = "Дело:"; + // + // statusBox + // + statusBox.DropDownStyle = ComboBoxStyle.DropDownList; + statusBox.FormattingEnabled = true; + statusBox.Location = new Point(125, 47); + statusBox.Name = "statusBox"; + statusBox.Size = new Size(121, 23); + statusBox.TabIndex = 16; + // + // caseBox + // + caseBox.DropDownStyle = ComboBoxStyle.DropDownList; + caseBox.FormattingEnabled = true; + caseBox.Location = new Point(125, 7); + caseBox.Name = "caseBox"; + caseBox.Size = new Size(121, 23); + caseBox.TabIndex = 17; + // + // FormStatusHistory + // + ClientSize = new Size(284, 163); + Controls.Add(caseBox); + Controls.Add(statusBox); + Controls.Add(caseLabel); + Controls.Add(dateTimePicker1); + Controls.Add(dateLabel); + Controls.Add(statusLabel); + Controls.Add(saveButton); + Controls.Add(cancelButton); + Name = "FormStatusHistory"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Хронология статусов"; + ResumeLayout(false); + } + + #endregion + + private Label statusLabel; + + private Button saveButton; + private Button cancelButton; + private Label dateLabel; + private DateTimePicker dateTimePicker1; + private Label caseLabel; + private ComboBox statusBox; + private ComboBox caseBox; + } +} \ No newline at end of file diff --git a/ProjectGSM/Forms/FormStatusHistory.cs b/ProjectGSM/Forms/FormStatusHistory.cs new file mode 100644 index 0000000..3f225a0 --- /dev/null +++ b/ProjectGSM/Forms/FormStatusHistory.cs @@ -0,0 +1,58 @@ +using ProjectGSM.Entities; +using ProjectGSM.Repositories; + +namespace ProjectGSM.Forms +{ + + public partial class FormStatusHistory : Form + { + private readonly IStatusHistoryRepository _statusHistoryRepository; + + + public FormStatusHistory(IStatusHistoryRepository statusHistoryRepository, + IStatusRepository statusRepository, ICaseRepository caseRepository) + { + InitializeComponent(); + _statusHistoryRepository = statusHistoryRepository ?? + throw new + ArgumentNullException(nameof(statusHistoryRepository)); + + try + { + caseBox.DataSource = caseRepository.ReadCases(); + caseBox.DisplayMember = "Name"; + caseBox.SelectedIndex = 0; + } + catch (Exception ex) { } + + try + { + statusBox.DataSource = statusRepository.ReadStatuses(); + statusBox.DisplayMember = "Name"; + statusBox.SelectedIndex = 0; + } + catch (Exception ex) { } + } + + private void saveButton_Click(object sender, EventArgs e) + { + try + { + if (caseBox.SelectedIndex < 0 || statusBox.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля"); + } + _statusHistoryRepository.CreateStatusHistory(StatusHistory.CreateEntity(caseBox.SelectedIndex, statusBox.SelectedIndex, dateTimePicker1.Value)); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void cancelButton_Click(object sender, EventArgs e) => Close(); + } +} diff --git a/ProjectGSM/Forms/FormStatusHistory.resx b/ProjectGSM/Forms/FormStatusHistory.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectGSM/Forms/FormStatusHistory.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/ProjectGSM/Forms/FormStatuses.Designer.cs b/ProjectGSM/Forms/FormStatuses.Designer.cs new file mode 100644 index 0000000..4536b20 --- /dev/null +++ b/ProjectGSM/Forms/FormStatuses.Designer.cs @@ -0,0 +1,130 @@ +namespace ProjectGSM.Forms +{ + partial class FormStatuses + { + /// + /// 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(); + deleteButton = new Button(); + editButton = new Button(); + addButton = new Button(); + dataGridView1 = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(deleteButton); + panel1.Controls.Add(editButton); + panel1.Controls.Add(addButton); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(604, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(142, 450); + panel1.TabIndex = 0; + // + // deleteButton + // + deleteButton.BackgroundImage = Properties.Resources.circle_x_svgrepo_com; + deleteButton.BackgroundImageLayout = ImageLayout.Zoom; + deleteButton.Location = new Point(33, 240); + deleteButton.Name = "deleteButton"; + deleteButton.Size = new Size(75, 75); + deleteButton.TabIndex = 2; + deleteButton.Text = " "; + deleteButton.UseVisualStyleBackColor = true; + deleteButton.Click += deleteButton_Click; + // + // editButton + // + editButton.BackgroundImage = Properties.Resources.pencil_svgrepo_com; + editButton.BackgroundImageLayout = ImageLayout.Zoom; + editButton.Location = new Point(33, 139); + editButton.Name = "editButton"; + editButton.Size = new Size(75, 75); + editButton.TabIndex = 1; + editButton.Text = " "; + editButton.UseVisualStyleBackColor = true; + editButton.Click += editButton_Click; + // + // addButton + // + addButton.BackgroundImage = Properties.Resources.circle_plus_svgrepo_com; + addButton.BackgroundImageLayout = ImageLayout.Zoom; + addButton.Location = new Point(33, 38); + addButton.Name = "addButton"; + addButton.Size = new Size(75, 75); + addButton.TabIndex = 0; + addButton.Text = " "; + addButton.UseVisualStyleBackColor = true; + addButton.Click += addButton_Click; + // + // dataGridView1 + // + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToDeleteRows = false; + dataGridView1.AllowUserToResizeColumns = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView1.BackgroundColor = SystemColors.Info; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.MultiSelect = false; + dataGridView1.Name = "dataGridView1"; + dataGridView1.ReadOnly = true; + dataGridView1.RowHeadersVisible = false; + dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView1.Size = new Size(604, 450); + dataGridView1.TabIndex = 1; + // + // FormCourts + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(746, 450); + Controls.Add(dataGridView1); + Controls.Add(panel1); + Name = "FormCourts"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Суды"; + Load += FormClients_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button deleteButton; + private Button editButton; + private Button addButton; + private DataGridView dataGridView1; + } +} \ No newline at end of file diff --git a/ProjectGSM/Forms/FormStatuses.cs b/ProjectGSM/Forms/FormStatuses.cs new file mode 100644 index 0000000..3f5afed --- /dev/null +++ b/ProjectGSM/Forms/FormStatuses.cs @@ -0,0 +1,114 @@ +using ProjectGSM.Repositories; +using Unity; + +namespace ProjectGSM.Forms +{ + public partial class FormStatuses : Form + { + private readonly IUnityContainer _container; + + private readonly IStatusRepository _statusRepository; + public FormStatuses(IUnityContainer container, IStatusRepository statusRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _statusRepository = statusRepository ?? + throw new + ArgumentNullException(nameof(statusRepository)); + + } + + private void deleteButton_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", + MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _statusRepository.DeleteStatus(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void editButton_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 addButton_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void FormClients_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void LoadList() => dataGridView1.DataSource = +_statusRepository.ReadStatuses(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView1.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Id"].Value); + return true; + } + + } +} diff --git a/ProjectGSM/Forms/FormStatuses.resx b/ProjectGSM/Forms/FormStatuses.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectGSM/Forms/FormStatuses.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/ProjectGSM/Forms/FormStatusesHistory.Designer.cs b/ProjectGSM/Forms/FormStatusesHistory.Designer.cs new file mode 100644 index 0000000..f0443a3 --- /dev/null +++ b/ProjectGSM/Forms/FormStatusesHistory.Designer.cs @@ -0,0 +1,100 @@ +namespace ProjectGSM.Forms +{ + partial class FormStatusesHistory + { + /// + /// 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(); + addButton = new Button(); + dataGridView1 = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(addButton); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(604, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(142, 450); + panel1.TabIndex = 0; + // + // addButton + // + addButton.BackgroundImage = Properties.Resources.circle_plus_svgrepo_com; + addButton.BackgroundImageLayout = ImageLayout.Zoom; + addButton.Location = new Point(33, 38); + addButton.Name = "addButton"; + addButton.Size = new Size(75, 75); + addButton.TabIndex = 0; + addButton.Text = " "; + addButton.UseVisualStyleBackColor = true; + addButton.Click += addButton_Click; + // + // dataGridView1 + // + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToDeleteRows = false; + dataGridView1.AllowUserToResizeColumns = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView1.BackgroundColor = SystemColors.Info; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.MultiSelect = false; + dataGridView1.Name = "dataGridView1"; + dataGridView1.ReadOnly = true; + dataGridView1.RowHeadersVisible = false; + dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView1.Size = new Size(604, 450); + dataGridView1.TabIndex = 1; + // + // FormStatusesHistory + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(746, 450); + Controls.Add(dataGridView1); + Controls.Add(panel1); + Name = "FormStatusesHistory"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Суды"; + Load += FormClients_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button addButton; + private DataGridView dataGridView1; + } +} \ No newline at end of file diff --git a/ProjectGSM/Forms/FormStatusesHistory.cs b/ProjectGSM/Forms/FormStatusesHistory.cs new file mode 100644 index 0000000..f2cb80f --- /dev/null +++ b/ProjectGSM/Forms/FormStatusesHistory.cs @@ -0,0 +1,68 @@ +using ProjectGSM.Repositories; +using Unity; + +namespace ProjectGSM.Forms +{ + public partial class FormStatusesHistory : Form + { + private readonly IUnityContainer _container; + + private readonly IStatusHistoryRepository _statusHistoryRepository; + public FormStatusesHistory(IUnityContainer container, IStatusHistoryRepository statusHistoryRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _statusHistoryRepository = statusHistoryRepository ?? + throw new + ArgumentNullException(nameof(statusHistoryRepository)); + + } + private void addButton_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void FormClients_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void LoadList() => dataGridView1.DataSource = +_statusHistoryRepository.ReadStatusHistories(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView1.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Id"].Value); + return true; + } + + } +} diff --git a/ProjectGSM/Forms/FormStatusesHistory.resx b/ProjectGSM/Forms/FormStatusesHistory.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectGSM/Forms/FormStatusesHistory.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/ProjectGSM/Forms/FormTypeApeal.Designer.cs b/ProjectGSM/Forms/FormTypeApeal.Designer.cs new file mode 100644 index 0000000..2cc7c3a --- /dev/null +++ b/ProjectGSM/Forms/FormTypeApeal.Designer.cs @@ -0,0 +1,92 @@ +namespace ProjectGSM.Forms +{ + partial class FormTypeApeal + { + /// + /// 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() + { + nameLabel = new Label(); + nameTextBox = new TextBox(); + saveButton = new Button(); + cancelButton = new Button(); + SuspendLayout(); + // + // nameLabel + // + nameLabel.Location = new Point(10, 10); + nameLabel.Name = "nameLabel"; + nameLabel.Size = new Size(100, 23); + nameLabel.TabIndex = 0; + nameLabel.Text = "Название:"; + // + // nameTextBox + // + nameTextBox.Location = new Point(116, 10); + nameTextBox.Name = "nameTextBox"; + nameTextBox.Size = new Size(120, 23); + nameTextBox.TabIndex = 1; + // + // saveButton + // + saveButton.Location = new Point(116, 53); + saveButton.Name = "saveButton"; + saveButton.Size = new Size(75, 23); + saveButton.TabIndex = 4; + saveButton.Text = "Сохранить"; + saveButton.Click += saveButton_Click; + // + // cancelButton + // + cancelButton.Location = new Point(197, 53); + cancelButton.Name = "cancelButton"; + cancelButton.Size = new Size(75, 23); + cancelButton.TabIndex = 5; + cancelButton.Text = "Отмена"; + cancelButton.Click += cancelButton_Click; + // + // FormTypeApeal + // + ClientSize = new Size(284, 84); + Controls.Add(nameLabel); + Controls.Add(nameTextBox); + Controls.Add(saveButton); + Controls.Add(cancelButton); + Name = "FormTypeApeal"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Тип обращения"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label nameLabel; + private TextBox nameTextBox; + + private Button saveButton; + private Button cancelButton; + } +} \ No newline at end of file diff --git a/ProjectGSM/Forms/FormTypeApeal.cs b/ProjectGSM/Forms/FormTypeApeal.cs new file mode 100644 index 0000000..61a23d5 --- /dev/null +++ b/ProjectGSM/Forms/FormTypeApeal.cs @@ -0,0 +1,77 @@ +using ProjectGSM.Entities; +using ProjectGSM.Repositories; + +namespace ProjectGSM.Forms +{ + + public partial class FormTypeApeal : Form + { + private readonly ITypeAppealRepository _typeAppealRepository; + + private int? _appealId; + + public int Id + { + set + { + try + { + var appeal = + _typeAppealRepository.ReadTypeAppealById(value); + if (appeal == null) + { + throw new + InvalidDataException(nameof(appeal)); + } + nameTextBox.Text = appeal.Name; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + + public FormTypeApeal(ITypeAppealRepository typeAppealRepository) + { + InitializeComponent(); + _typeAppealRepository = typeAppealRepository ?? + throw new + ArgumentNullException(nameof(typeAppealRepository)); + } + + private void saveButton_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(nameTextBox.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_appealId.HasValue) + { + _typeAppealRepository.UpdateTypeAppeal(CreateTypeAppeal(_appealId.Value)); + } + else + { + _typeAppealRepository.UpdateTypeAppeal(CreateTypeAppeal(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void cancelButton_Click(object sender, EventArgs e) => Close(); + + private TypeAppeal CreateTypeAppeal(int id) => TypeAppeal.CreateEntity(id, + nameTextBox.Text); + + } +} diff --git a/ProjectGSM/Forms/FormTypeApeal.resx b/ProjectGSM/Forms/FormTypeApeal.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectGSM/Forms/FormTypeApeal.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/ProjectGSM/Forms/FormTypeAppeals.Designer.cs b/ProjectGSM/Forms/FormTypeAppeals.Designer.cs new file mode 100644 index 0000000..1f08700 --- /dev/null +++ b/ProjectGSM/Forms/FormTypeAppeals.Designer.cs @@ -0,0 +1,130 @@ +namespace ProjectGSM.Forms +{ + partial class FormTypeAppeals + { + /// + /// 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(); + deleteButton = new Button(); + editButton = new Button(); + addButton = new Button(); + dataGridView1 = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(deleteButton); + panel1.Controls.Add(editButton); + panel1.Controls.Add(addButton); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(604, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(142, 450); + panel1.TabIndex = 0; + // + // deleteButton + // + deleteButton.BackgroundImage = Properties.Resources.circle_x_svgrepo_com; + deleteButton.BackgroundImageLayout = ImageLayout.Zoom; + deleteButton.Location = new Point(33, 240); + deleteButton.Name = "deleteButton"; + deleteButton.Size = new Size(75, 75); + deleteButton.TabIndex = 2; + deleteButton.Text = " "; + deleteButton.UseVisualStyleBackColor = true; + deleteButton.Click += deleteButton_Click; + // + // editButton + // + editButton.BackgroundImage = Properties.Resources.pencil_svgrepo_com; + editButton.BackgroundImageLayout = ImageLayout.Zoom; + editButton.Location = new Point(33, 139); + editButton.Name = "editButton"; + editButton.Size = new Size(75, 75); + editButton.TabIndex = 1; + editButton.Text = " "; + editButton.UseVisualStyleBackColor = true; + editButton.Click += editButton_Click; + // + // addButton + // + addButton.BackgroundImage = Properties.Resources.circle_plus_svgrepo_com; + addButton.BackgroundImageLayout = ImageLayout.Zoom; + addButton.Location = new Point(33, 38); + addButton.Name = "addButton"; + addButton.Size = new Size(75, 75); + addButton.TabIndex = 0; + addButton.Text = " "; + addButton.UseVisualStyleBackColor = true; + addButton.Click += addButton_Click; + // + // dataGridView1 + // + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToDeleteRows = false; + dataGridView1.AllowUserToResizeColumns = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView1.BackgroundColor = SystemColors.Info; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.MultiSelect = false; + dataGridView1.Name = "dataGridView1"; + dataGridView1.ReadOnly = true; + dataGridView1.RowHeadersVisible = false; + dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView1.Size = new Size(604, 450); + dataGridView1.TabIndex = 1; + // + // FormCourts + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(746, 450); + Controls.Add(dataGridView1); + Controls.Add(panel1); + Name = "FormCourts"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Суды"; + Load += FormClients_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button deleteButton; + private Button editButton; + private Button addButton; + private DataGridView dataGridView1; + } +} \ No newline at end of file diff --git a/ProjectGSM/Forms/FormTypeAppeals.cs b/ProjectGSM/Forms/FormTypeAppeals.cs new file mode 100644 index 0000000..c592c8b --- /dev/null +++ b/ProjectGSM/Forms/FormTypeAppeals.cs @@ -0,0 +1,123 @@ +using ProjectGSM.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace ProjectGSM.Forms +{ + public partial class FormTypeAppeals : Form + { + private readonly IUnityContainer _container; + + private readonly ITypeAppealRepository _typeAppealRepository; + public FormTypeAppeals(IUnityContainer container, ITypeAppealRepository typeAppealRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _typeAppealRepository = typeAppealRepository ?? + throw new + ArgumentNullException(nameof(typeAppealRepository)); + + } + + private void deleteButton_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", + MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _typeAppealRepository.DeleteTypeAppeal(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void editButton_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 addButton_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void FormClients_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void LoadList() => dataGridView1.DataSource = +_typeAppealRepository.ReadTypeAppeals(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView1.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Id"].Value); + return true; + } + + } +} diff --git a/ProjectGSM/Forms/FormTypeAppeals.resx b/ProjectGSM/Forms/FormTypeAppeals.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectGSM/Forms/FormTypeAppeals.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/ProjectGSM/Program.cs b/ProjectGSM/Program.cs index cea8648..7e70864 100644 --- a/ProjectGSM/Program.cs +++ b/ProjectGSM/Program.cs @@ -1,3 +1,9 @@ +using ProjectGSM.Forms; +using ProjectGSM.Repositories; +using ProjectGSM.Repositories.Implementations; +using Unity; +using Unity.Lifetime; + namespace ProjectGSM { internal static class Program @@ -11,7 +17,21 @@ namespace ProjectGSM // 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()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + return container; } } } \ No newline at end of file diff --git a/ProjectGSM/ProjectGSM.csproj b/ProjectGSM/ProjectGSM.csproj index 663fdb8..a31e0ba 100644 --- a/ProjectGSM/ProjectGSM.csproj +++ b/ProjectGSM/ProjectGSM.csproj @@ -8,4 +8,70 @@ enable + + + Form + + + Form + + + Form + + + Form + + + Form + + + Form + + + Form + + + Form + + + Form + + + Form + + + Form + + + Form + + + Form + + + + Form + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + + + + + + \ No newline at end of file diff --git a/ProjectGSM/Properties/Resources.Designer.cs b/ProjectGSM/Properties/Resources.Designer.cs new file mode 100644 index 0000000..3a80843 --- /dev/null +++ b/ProjectGSM/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ProjectGSM.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("ProjectGSM.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 circle_plus_svgrepo_com { + get { + object obj = ResourceManager.GetObject("circle-plus-svgrepo-com", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap circle_x_svgrepo_com { + get { + object obj = ResourceManager.GetObject("circle-x-svgrepo-com", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap maxresdefault { + get { + object obj = ResourceManager.GetObject("maxresdefault", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pencil_svgrepo_com { + get { + object obj = ResourceManager.GetObject("pencil-svgrepo-com", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/ProjectGSM/Properties/Resources.resx b/ProjectGSM/Properties/Resources.resx new file mode 100644 index 0000000..2b1a20e --- /dev/null +++ b/ProjectGSM/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\pencil-svgrepo-com.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\maxresdefault.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\circle-plus-svgrepo-com.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\circle-x-svgrepo-com.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ProjectGSM/Repositories/IAdvocateRepository.cs b/ProjectGSM/Repositories/IAdvocateRepository.cs new file mode 100644 index 0000000..2f315c6 --- /dev/null +++ b/ProjectGSM/Repositories/IAdvocateRepository.cs @@ -0,0 +1,12 @@ +using ProjectGSM.Entities; + +namespace ProjectGSM.Repositories; + +public interface IAdvocateRepository +{ + IEnumerable ReadAdvocates(); + Advocate ReadAdvocateById(int id); + void CreateAdvocate(Advocate advocate); + void UpdateAdvocate(Advocate advocate); + void DeleteAdvocate(int id); +} \ No newline at end of file diff --git a/ProjectGSM/Repositories/ICaseAdvocateRepository.cs b/ProjectGSM/Repositories/ICaseAdvocateRepository.cs new file mode 100644 index 0000000..cf35edb --- /dev/null +++ b/ProjectGSM/Repositories/ICaseAdvocateRepository.cs @@ -0,0 +1,11 @@ +using ProjectGSM.Entities; + +namespace ProjectGSM.Repositories; + +public interface ICaseAdvocateRepository +{ + IEnumerable ReadCaseAdvocates(DateTime? dateForm = null, DateTime? dateTo = null, int? caseId = null, + int? advocateId = null); + void CreateCaseAdvocate(CaseAdvocate caseAdvocate); + void DeleteCaseAdvocate(int caseId, int advocateId); +} \ No newline at end of file diff --git a/ProjectGSM/Repositories/ICaseRepository.cs b/ProjectGSM/Repositories/ICaseRepository.cs new file mode 100644 index 0000000..8f3d8ab --- /dev/null +++ b/ProjectGSM/Repositories/ICaseRepository.cs @@ -0,0 +1,12 @@ +using ProjectGSM.Entities; + +namespace ProjectGSM.Repositories; + +public interface ICaseRepository +{ + IEnumerable ReadCases(); + Case ReadCaseById(int id); + void CreateCase(Case caseEntity); + void UpdateCase(Case caseEntity); + void DeleteCase(int id); +} \ No newline at end of file diff --git a/ProjectGSM/Repositories/IClientRepository.cs b/ProjectGSM/Repositories/IClientRepository.cs new file mode 100644 index 0000000..0447c79 --- /dev/null +++ b/ProjectGSM/Repositories/IClientRepository.cs @@ -0,0 +1,12 @@ +using ProjectGSM.Entities; + +namespace ProjectGSM.Repositories; + +public interface IClientRepository +{ + IEnumerable ReadClients(); + Client ReadClientById(int id); + void CreateClient(Client client); + void UpdateClient(Client client); + void DeleteClient(int id); +} \ No newline at end of file diff --git a/ProjectGSM/Repositories/ICourtRepository.cs b/ProjectGSM/Repositories/ICourtRepository.cs new file mode 100644 index 0000000..4cbfba3 --- /dev/null +++ b/ProjectGSM/Repositories/ICourtRepository.cs @@ -0,0 +1,12 @@ +using ProjectGSM.Entities; + +namespace ProjectGSM.Repositories; + +public interface ICourtRepository +{ + IEnumerable ReadCourts(); + Court ReadCourtById(int id); + void CreateCourt(Court court); + void UpdateCourt(Court court); + void DeleteCourt(int id); +} \ No newline at end of file diff --git a/ProjectGSM/Repositories/IStatusHistoryRepository.cs b/ProjectGSM/Repositories/IStatusHistoryRepository.cs new file mode 100644 index 0000000..da00b97 --- /dev/null +++ b/ProjectGSM/Repositories/IStatusHistoryRepository.cs @@ -0,0 +1,11 @@ +using ProjectGSM.Entities; + +namespace ProjectGSM.Repositories; + +public interface IStatusHistoryRepository +{ + IEnumerable ReadStatusHistories(DateTime? dateForm = null, DateTime? dateTo = null, + int? caseId = null, int? statusId = null); + void CreateStatusHistory(StatusHistory statusHistory); + void DeleteStatusHistory(int statusId, int caseId); +} \ No newline at end of file diff --git a/ProjectGSM/Repositories/IStatusRepository.cs b/ProjectGSM/Repositories/IStatusRepository.cs new file mode 100644 index 0000000..478b5dd --- /dev/null +++ b/ProjectGSM/Repositories/IStatusRepository.cs @@ -0,0 +1,12 @@ +using ProjectGSM.Entities; + +namespace ProjectGSM.Repositories; + +public interface IStatusRepository +{ + IEnumerable ReadStatuses(); + Status ReadStatusById(int id); + void CreateStatus(Status status); + void UpdateStatus(Status status); + void DeleteStatus(int id); +} \ No newline at end of file diff --git a/ProjectGSM/Repositories/ITypeAppealRepository.cs b/ProjectGSM/Repositories/ITypeAppealRepository.cs new file mode 100644 index 0000000..3f70d06 --- /dev/null +++ b/ProjectGSM/Repositories/ITypeAppealRepository.cs @@ -0,0 +1,12 @@ +using ProjectGSM.Entities; + +namespace ProjectGSM.Repositories; + +public interface ITypeAppealRepository +{ + IEnumerable ReadTypeAppeals(); + TypeAppeal ReadTypeAppealById(int id); + void CreateTypeAppeal(TypeAppeal typeAppeal); + void UpdateTypeAppeal(TypeAppeal typeAppeal); + void DeleteTypeAppeal(int id); +} \ No newline at end of file diff --git a/ProjectGSM/Repositories/Implementations/AdvocateRepository.cs b/ProjectGSM/Repositories/Implementations/AdvocateRepository.cs new file mode 100644 index 0000000..7fe34ae --- /dev/null +++ b/ProjectGSM/Repositories/Implementations/AdvocateRepository.cs @@ -0,0 +1,29 @@ +using ProjectGSM.Entities; + +namespace ProjectGSM.Repositories.Implementations; + +public class AdvocateRepository : IAdvocateRepository +{ + public IEnumerable ReadAdvocates() + { + return []; + } + + public Advocate ReadAdvocateById(int id) + { + return Advocate.CreateEntity(0, String.Empty, false, DateTime.UtcNow, 0, 0, 0, String.Empty, String.Empty, + String.Empty); + } + + public void CreateAdvocate(Advocate advocate) + { + } + + public void UpdateAdvocate(Advocate advocate) + { + } + + public void DeleteAdvocate(int id) + { + } +} \ No newline at end of file diff --git a/ProjectGSM/Repositories/Implementations/CaseAdvocateRepository.cs b/ProjectGSM/Repositories/Implementations/CaseAdvocateRepository.cs new file mode 100644 index 0000000..488549a --- /dev/null +++ b/ProjectGSM/Repositories/Implementations/CaseAdvocateRepository.cs @@ -0,0 +1,16 @@ +using ProjectGSM.Entities; + +namespace ProjectGSM.Repositories.Implementations; + +public class CaseAdvocateRepository : ICaseAdvocateRepository +{ + public IEnumerable ReadCaseAdvocates(DateTime? dateForm = null, DateTime? dateTo = null, + int? caseId = null, int? advocateId = null) + { + return []; + } + + public void CreateCaseAdvocate(CaseAdvocate caseAdvocate) { } + + public void DeleteCaseAdvocate(int caseId, int advocateId) { } +} \ No newline at end of file diff --git a/ProjectGSM/Repositories/Implementations/CaseRepository.cs b/ProjectGSM/Repositories/Implementations/CaseRepository.cs new file mode 100644 index 0000000..f68e1a8 --- /dev/null +++ b/ProjectGSM/Repositories/Implementations/CaseRepository.cs @@ -0,0 +1,28 @@ +using ProjectGSM.Entities; + +namespace ProjectGSM.Repositories.Implementations; + +public class CaseRepository : ICaseRepository +{ + public IEnumerable ReadCases() + { + return []; + } + + public Case ReadCaseById(int id) + { + return Case.CreateEntity(0, 0, false, 0, 0, 0, false, 0, 0, String.Empty); + } + + public void CreateCase(Case caseEntity) + { + } + + public void UpdateCase(Case caseEntity) + { + } + + public void DeleteCase(int id) + { + } +} \ No newline at end of file diff --git a/ProjectGSM/Repositories/Implementations/ClientRepository.cs b/ProjectGSM/Repositories/Implementations/ClientRepository.cs new file mode 100644 index 0000000..9e478e0 --- /dev/null +++ b/ProjectGSM/Repositories/Implementations/ClientRepository.cs @@ -0,0 +1,21 @@ +using ProjectGSM.Entities; + +namespace ProjectGSM.Repositories.Implementations; + +public class ClientRepository : IClientRepository +{ + public IEnumerable ReadClients() + { + return [];} + + public Client ReadClientById(int id) + { + return Client.CreateEntity(0, String.Empty, false, DateTime.UtcNow, String.Empty, String.Empty, String.Empty); + } + + public void CreateClient(Client client) { } + + public void UpdateClient(Client client) { } + + public void DeleteClient(int id) { } +} \ No newline at end of file diff --git a/ProjectGSM/Repositories/Implementations/CourtRepository.cs b/ProjectGSM/Repositories/Implementations/CourtRepository.cs new file mode 100644 index 0000000..4183b02 --- /dev/null +++ b/ProjectGSM/Repositories/Implementations/CourtRepository.cs @@ -0,0 +1,28 @@ +using ProjectGSM.Entities; + +namespace ProjectGSM.Repositories.Implementations; + +public class CourtRepository : ICourtRepository +{ + public IEnumerable ReadCourts() + { + return []; + } + + public Court ReadCourtById(int id) + { + return Court.CreateEntity(0, String.Empty, String.Empty); + } + + public void CreateCourt(Court court) + { + } + + public void UpdateCourt(Court court) + { + } + + public void DeleteCourt(int id) + { + } +} \ No newline at end of file diff --git a/ProjectGSM/Repositories/Implementations/StatusHistoryRepository.cs b/ProjectGSM/Repositories/Implementations/StatusHistoryRepository.cs new file mode 100644 index 0000000..6401d8e --- /dev/null +++ b/ProjectGSM/Repositories/Implementations/StatusHistoryRepository.cs @@ -0,0 +1,20 @@ +using ProjectGSM.Entities; + +namespace ProjectGSM.Repositories.Implementations; + +public class StatusHistoryRepository : IStatusHistoryRepository +{ + public IEnumerable ReadStatusHistories(DateTime? dateForm = null, DateTime? dateTo = null, + int? caseId = null, int? statusId = null) + { + return []; + } + + public void CreateStatusHistory(StatusHistory statusHistory) + { + } + + public void DeleteStatusHistory(int statusId, int caseId) + { + } +} \ No newline at end of file diff --git a/ProjectGSM/Repositories/Implementations/StatusRepository.cs b/ProjectGSM/Repositories/Implementations/StatusRepository.cs new file mode 100644 index 0000000..a3b23fa --- /dev/null +++ b/ProjectGSM/Repositories/Implementations/StatusRepository.cs @@ -0,0 +1,28 @@ +using ProjectGSM.Entities; + +namespace ProjectGSM.Repositories.Implementations; + +public class StatusRepository : IStatusRepository +{ + public IEnumerable ReadStatuses() + { + return []; + } + + public Status ReadStatusById(int id) + { + return Status.CreateEntity(0, String.Empty); + } + + public void CreateStatus(Status status) + { + } + + public void UpdateStatus(Status status) + { + } + + public void DeleteStatus(int id) + { + } +} \ No newline at end of file diff --git a/ProjectGSM/Repositories/Implementations/TypeAppealRepository.cs b/ProjectGSM/Repositories/Implementations/TypeAppealRepository.cs new file mode 100644 index 0000000..dc64b32 --- /dev/null +++ b/ProjectGSM/Repositories/Implementations/TypeAppealRepository.cs @@ -0,0 +1,28 @@ +using ProjectGSM.Entities; + +namespace ProjectGSM.Repositories.Implementations; + +public class TypeAppealRepository : ITypeAppealRepository +{ + public IEnumerable ReadTypeAppeals() + { + return []; + } + + public TypeAppeal ReadTypeAppealById(int id) + { + return TypeAppeal.CreateEntity(0, String.Empty); + } + + public void CreateTypeAppeal(TypeAppeal typeAppeal) + { + } + + public void UpdateTypeAppeal(TypeAppeal typeAppeal) + { + } + + public void DeleteTypeAppeal(int id) + { + } +} \ No newline at end of file diff --git a/ProjectGSM/Resources/circle-plus-svgrepo-com.png b/ProjectGSM/Resources/circle-plus-svgrepo-com.png new file mode 100644 index 0000000000000000000000000000000000000000..2c996673dce2d973e8025b0eb5236bd0f38d72c4 GIT binary patch literal 4686 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

su3W-AV zNbx#GI!q&b`hkQLIi~xW<*4I5ZU4{<(9AyC&3bw0s3;?yL>tMf6&z2%axW^iS4;*A z5mH14ciDOQ#?We?vt?lPM2cvyjDX>gDQCvDZuRByHyd_ikF$NGAGXVedzrFSX0?Ee z^jb)gDUFY508XMzu3UQZ`jW?kmRrEwf0W=gdV3&V+4K5B-VuS!WHUp~*Yr2Db;_RU z3;6sJUUzr~%N4wcSMt2I5K01bSiH-&&e5ybN0FSPWWvl-b}Bge!^V$) zjTeo7M{-C^`{@Wj2!pjli6Q$rHBT8Z!~rBX07sylue_Z+nPu>hY;}mZ5itA4y9(J- z{x*=>K9ftLUxl1W{y`BFNWNN*1zN@(%B|IJe9G49Z|wUfPx#xCqoqgQvhx6>Ry->g~}uG9EmwK@Z(4{FvrRhCjKFbOYiwaI(QpdU1SQF8zB<(^}Hh6o-kRHQi2y>-~-Nihizx|}#$gDjQqLl58cJ7?#J0=r0;)Nc*$NR&7? z1GrrQZ=PC+&~NIm_)v%jgN+7+wA0v$CV$Qs#7$}NEe+g(>#g!uw@XiZQ-B?m{ct0c zAUXusPtRU_onov^Ac_wLd{od`|BAmf-#HZWwie zzuM8idh0Ci_Y7+_dn_NmXPMk@1W(3-cR(d&>!%p-UR*(`*%H1!)Z!doQdO?by4Arw z9w6apA@`3op-bjbwhrogb&p@ZM3q`_+`zA=JaTz%!Eh{iXvK`>$ew>L&A*~R!NQd{ zD&hC`B(*Jp>uDfJzjfkxH%H&gyM{F- zXB!PN-3rV*;W?Ms^t$@wakt!%1++Vg!A`J=FO{aO)+5dvRWjVUuUDZ^4ihB z0DCkX>0-k8Exwb_-Qa5(kX$AW5oudc$2!Ws_7lIxR=t`$B}v3~u;S^@8l9}eL>}os zrS`Yn&AC{U8bU@`2e_&R&DO}*;g=(?N927-kUuaCsM8J(ndTCFB%w_-k!}0Txz{u_ z4@RNyOu0I_HGNX8IY<9_-Y?vx0Bh&l>6&kCi8mE9Znbz8D*2r1#}D1m@ybN^-W?)q zcUohDR1`XRYr@iLIhgw)tTBwcFg+1TwvG_by6H8=D5rMDJ-U*$75_m5EcaQPSDJc8 F{vTq|QLF#} literal 0 HcmV?d00001 diff --git a/ProjectGSM/Resources/circle-x-svgrepo-com.png b/ProjectGSM/Resources/circle-x-svgrepo-com.png new file mode 100644 index 0000000000000000000000000000000000000000..012165f896696c2ffc9843d68e2d912f93d62264 GIT binary patch literal 5021 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 T4^$-nw}DMAUe33j7#aTqT42YM literal 0 HcmV?d00001 diff --git a/ProjectGSM/Resources/maxresdefault.jpg b/ProjectGSM/Resources/maxresdefault.jpg new file mode 100644 index 0000000000000000000000000000000000000000..66cb510e55887db7c474aa2123b6d273077b382f GIT binary patch literal 190491 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

BBUJ<**I(2juQoP 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�v^Dh7?^|gzBd3JKRJLb=I z>Bj{AIhx9e;T0&)v(*!Jr(wn=aS=qqgRRRU1|F`UZ#)n+E|dcyx|Sd*>Ye5Co`Wk$ zaQU^r%*NCc#-^Uv0x^sgybUq3DcG}fo^JG`ewcm%2&PeLHg=5nw*2h}fj`E9;N8vn zHVGncWFfAOQ%%%+XD;R0!~QXMtPHs?09-#{DtYd`;q1O)2>o>GA~T|M+3|^xR$htZ zB3s~|bzJvK0%9`ahN|HYwy9J1b{ZA&-!-B5)SQdWJ@P716e&S9`A1 zcHU{UuHT{_4X^pG1ycoV2&epKzUlP@t~UiWkHF6sWKiqd^BVk4?`J?;GGSAI-`s|2 zUgay_;!I3^wa+tQ6iAK<3rpQ&&v(CzWVIrOY>SZO^BULE;RfCG`r^({K<2o#dw1R9 zs1MKxo4*aUoLk|3?2@%ou&Y3QVLg-C`N@;Z`iVE)o|Yu|XDKH+md^JLr<%arZB@lF z!h_wDT4#&yU!V;J9Tb#urTz0)k3 zh7tIOQaSiR70wsUZI>_W93XY&jt?rXhYqW9gbA4TJ$Ff=$m$h^ObMc7>~$<-J^Z3= zZ^Q-6=A)T$zE5|Ud{b7X%ZmBK6r9-fD3LTLiZMzSSloZKbNEC|dYrKnVRpnOU~FDO z&%a>ghEd(Zf}rsHqvO_9{BD;OYP|<55_r2fDwFvusLc%)T-7=;?I13R=Y^;r6WUW; zsIEl#SsmvsQvhJC6J1f-TrIOb$Mx5SD*2OHT|YHOSi6UImHU3OtZk=PEP%?bYlREL$csR>9M}WMc%T0`fzhLqA{CxB{zA>-zFFLj@UYvHNAXBC@EP`Vk!*T&AEwg z2i{1G#G1&ve&UU~{80P$p7>5pbCaw3nYF?xn;1W|#*@lEV6jnXz_bkNq>0j%X!fI< zryIrZH-gvup@rU7kVe)E;LRIO-rfqDcdkD3`szXKvW0BSgrizab@|$1i4=Xt@Ud}q zy!&|*20mwGP4!{zwU@(gZwbxfTYb=F1&$TM??0rjdv1~P%PH0jLQ1lVWMRN67;hF9 z8@1g*Zy^IMW~>Mvd;zqUQh6fX8#_@)eST^O_Ln`*-fzO!rLfHxK;{Ez@1rw93G92u z_9qDJs6+aJ;|YK4A@a;ZAVXja3;w=c%4b30c~W=XN~znr-(0W0E%x(_B}mrcg3b#T zb-yw5m?mu4{Bxqq6J92{<$ZL}EYRc!UpqSeZ6DMzFHC>~k})p;wp~L?c=)^N z301rjgh=j91Uu+ITtYe`ure+-_90lTRgGTQ)y)%s=OCe>1tZY4=A9A2&|lBYW$jpK z5J_;sD0uJms=PzW9|IERy8fu;%ifXjwVPb+NBxEnCioo|0m|4f zb18N%`mf|||9&yYa+_>B(S>bElp*$mIF(E>f#)l&Z#YCs9(b=r%(W+4xN}l8-m7x|BOTCx$m*abYh2kzL&kq{fG(jO=xqD?4?1!K+2^p=SoX z(zL6kFYTJl9_9UPZMWPw*dhPSiHmZ`kMS3c=X_Uw%gRGC8Aa7l`Fc}*y2}GENzh{F zV#@iF47pd}PnZY(l8$Y!eQN8BjC*xkn1^|jQ;mM(sq?WPb0V6#2!eEA=jTn8^dGLG zRcQX3F*ex7r^i1Onpg#OKT8t3A>OD@Fs(X9Q&@Su-no()%yZT3k`WY~x%E^W2O;Wh z2YV@b1?tmWC;{nwo?2n?Iw|jC6w5q_I}@~t=-gmDFhpaRHT#IRzu0pj z4UM{=^)aJ5x#&LA24cRE<}Sg+k+&G+esYFf-600=QX)~WI9~1VA zW@W0XGs|m^Fur|Qy6BPZ>v6zK_Tj`1HL()HP# zG!^ud=kQ6!EsAdK1%Mcr8#N4xrqIK!H5gH_A!gI&YE5Mu5^1eb9nWzOwTQ0wB*O2J z>-OuN7HPg)%adg}CXEg$T_Cu=|0 z_aAK!b*c7xmiN@`eFja(*&b(|=18AsH{|*|2k9oGfRD)@wV7Ofq?aNXB78v8wX2Fm z|0Gl9^8?^o7*GCg)yO)COmvz@&yeWepCIALGs9z3_e_T(wBs^2QOTJgvQ+F|avr#r zn+QJv(ud}tUw7!z?u$E2a*h8C(U@qQfLjAQerT?+W25U#4oCh)`6bch%KpcA4FXMFw2rh`u4zjm zw$=*(RZfBzVNunLrLAAt`?SHhf#v5%JG;s;2f-i6_Ikg^3#L=@=WOU?hO5LDXcGpC znNiCAFzXLnIkND7JP%kG;b?3z{L@_qFM}z1slr!0#ro#0#+ASFw(xLcO$d3SjiGnT z(NWk@vABi)mtOmYI@iVUQsCWJJsLd`8f;fj3s3~LnlVNY*lI@(4=^;U5ZU|C2sQNOU-mn~@FbQ%MPTU70bQdLC1yroDR3 zi@A`5>3ckJ!687Kf+)DE1No!d#=!(!tstETu1}!hjM6RLajqvBY7TssR^LtA9`&me zc@WQdULkyfhibzz0dUo3xIV!cOGpLtdHpl||J@?N*>GhB;UY(u@&GS!@9x%2 zY)_^9;0jEDx44%!kIDbzXM^Oq;q=VBybvZl4<&lWM8*2vI!G6wjPky4Bh}R})^cev z7YFO}^ynzol|(a^5Kpc{NUR#EI-VQX#8AY)tV(cbcR2pjD}<1sL?`@V&x^E; zrc&QmXvggX4mFeu2K`q}87Xgzm93dpnzu&#j<}d(;|!b0QPD|d==U@} zs>e)5C!n%(wt8#KG_*a*`(F;We<{Jp#lFP@sd;EFNS|&=2|=)O=6T6ltBP<{ESsA( zt67bwG{t*Sbu|SQmcsr_teBD#cgE$ZrfR;v)60o072Xa+3FC&-T)cHUO`T=zqrMEh z{rTH_C~pxKqw6;KSGbMy0Ffy$JF@wFOJ0F-z+8C!U~bYrO*oeDr;TqT7+3St;32vI zvcxY*Ve_V|JLC~>V&`it?pwaec@p2ROZ>418O0W>Vq_uy;iSB}RH3qmjN8k)IoZ_I z?O3e}M=}pryvbA)N10u>LGFTo@$+-O7Bn{$C@Vpk>a~Og`+ql_OiAxDnvv7b2HnnZ|Z7Hk;U8q0Lqd~j4yN}*h%QT zDmKoz4yxDlj#b_wPwHYAt@AVZz}d3At%OIfWYr!2A%V7-(N{Ryjqpn7|T%Jy2ot59Z%_Q5zV@m0%JV_H8b zwdOAqcyVA?^=9F;$WWKksD1L2OZMAJdxD{K=|-GSw&Oi=-``^HWi1Le=_}HsELt_o zIS>4l(2Gd1R<)z-n~KQjJGs}r`t*Q3RuScNt{Ww&Nd&s&s`&4p4VmCc=J>kx@c}QO0 z$?0+GVeuAzw4M{zJ9h6)=o0Wx{DEr6u_Qo9av<)gdTx!5AVE}7HQsK^QHm0gpRWzxXb!gQhIAE&iA zUO0a7OO$F`&vKMGuRCdGhIt34EnLvIZ~oY$J#s?H?^5{Tv9S#3{96`vFN*_sVyj8r zM#Hc>cGXUOngP)w+9VI6NNsRb&OXADlZsv6{G`|oo{R?hLFHNg`aey41fo|qqs&op z5qu?hXp2LsYv-(@R_S`b?H~8ru+&5Ivzy@*i*T!O>Q56awrYe0`PKz#A(!50r8jCb zRlqYia0uON6aY)rt{OF-jsMYqZ@tsc_Wed@9(}ORg4V&qJT;MuhO1KRN(rHG@|9x$ z3t+zC)Z}xmSH+#lW$Ab7yc2Q4T^R+1rPb`%T$hFJ7l4hdQ7J;M{K;3d7*d4g2CjCO zHSiRV#9ZJ-^s-<6d~>x_&r*#=KnRmVt3<}ct37O{A17t$_j+_y$%_FwqI6*Z=}BoC z)y!=}@u>j`!h4}V=Nb~;&(g!eEHY7WJ@gVc`o`;y6GG#qBQC3qy^F&q&pb z3_=-oSCL=+@D`6yen0kg@attIGy&;-xu;fH=wRP>f4QQPoOTRdu~c5xq3JhBV+XO= zxMX~HnxBl$&6SK90w;rdaXX`?G(UC)QIaHlZ3-kKS!Xy^5_U_|b2E;81OYmaEN3q2 z7#_Z2azP@`^*SKp<9OEX2huPOhf!#}5rkC|x*56w33r1xe_j%MJ*t~jIklzrdH%^a zjs{;CJ1E0btk!{JShgnNZ5dod!{q)2z-0FfeZ8BfJ$4b`Io;QxYjEE;QO%Tkh&9Dq zvEJT^+~&AyRP&oC3fWkPdrP|9J|aJzk(ceDK{bUdT&hY0Q}W^Je7l+9%7a%S-p6fA zYDw!F8xnnYMKdW>k|L0Q$oY)};rRP7@?T@0Qr?T3{8Fmwr_HLLUB>K(W^)zGHs2zO zFjDs=t|_vkD_-v>aE32wUcMovA>rP56eqTD{0C60=-LE^MKN^T04cR zi(cZs^#)zhsZIlf9@Xh{OBOQ>e7Y`dvIm*R@|9a4@&uvKhvv=z`9O@Z_aDluC;1- zWJoNAotn_}q>wd1oAYt7-d9?bTh<>l6;$2lZra&YaEv1);;wqcGdsU0(dr)tE#9Px zHfa$Ygd{1(Z0Ofb*;=o`?SBwkGt)%e_wIv~Z_PgiOLY;$}8>U1CCqeTXdH zeHa2}PpH?cf+^8el+JYe%njt|U|9$^m_# zhkNFsWA7+!BA%rZL2qAmVul?jd+aI0DZ*(G661*jNHt@+Ww@yU;{g2bPE*>KFm!MY zR={yxepNo+azXb9!lUHfde3^%?Xd0n@r?*g26;UkHsjHx?!JFC$9`fx<7&Uy-&Nan z5P#r+KfOx$Q%SH8^N#P`Dr4PgGhXI+i!wfuYxDbq7S~O&_>TwP^~Z-l2}l6}WW0aFWjn_Li*?e53Hb-xeBtUzg6A zfNH{_B&W#8y+1bz+m3O%!djDVrDf8plz8g*y(V z%QHSYJgKcP6EL*w-l@o@8=5gTD~8s>2om;7HXhWLEVG0s-kp`n@7`%F+`^M-^x2K} zCkb_Q0eI(h=*L67-J2+7s44HIEzwpGR6;X$ zEMRD`DU~U4!khi^|5c78Q2Ky4W$? z`PNzAz4s42bkD4A7ClezT~)hEZZQElpD7mhMMp}NyMrSu4S$|1G05|C>-%Q49hGv= z2(sne@QL1%BxN_!et&f^$}hXRii+%~Lvu5?)fSsE0E)UtP~&v0>k7U3n)pM#8die)5SPG=6K+l<+V2*(0{C`@rw9@=DhpO=B*QU=mJ%F-P;i6;; zZ{!@Xj{D{L787=@z7ifG#R6dMmX+ zZz|H&6od)J|H~mpEj)AFdUVRReC9!-j))1o2Pn^NDZ>m z_z)eod8z23$wf7sCC0rCtsP(^&T*FW6k%nslg`sMs$vSE-i#o+JGr&L#9T z^}dAIHGQa#dIiV$6~sMjVao8)J%clOF|xCEx%*59x%pwACwH#B*m6==$>ar&dS)mH zsigFqfunv5Mr~=_m$ik02t6;AIDKbTkA`4f3Z*GWdfCT9H`VT3?gqhbc+@*|*;D~K zU84P=flr+QLvG^hC9F%$Qdf1s5xO`BO<_M-d2Dtmm$e^c4yamQwQw!Gq^veOd)??> zcyeGCB)1Yl`6Qm->Thn=9_%8}pt?KNbo*H^89)WG%94ivfE=Fl#`~Vfy)fSh2(}$U zUPnMz{(!VPm?NB%R!Dm6B4}$!0AZSRi3IpmS;loX>9NSGX>b_YBuh!cB*F18RX9d6 zdPrnjQ? zN9bPOOAJXf+NHCR<w9Y?-_XjCCY2Tp9Xc$ zMUnl_n}X8bW?KSXiNM=osYNbdmVG+`M+!OOC6kt>X|7@L6CR0o2;v_Qq8$0PwztA9 za)Hb+$^DcKMK2pae^8j@bbt7HJ&-IAPQ#UrZZUVKb?n3Cu8B^A6;hpzl)7C!J9qk^ zb{wfA@4~GJ*sr5f%|=or_H;=FvXF_lHmcbTBa+-^b+74sAw0we!pt&1-;$v=dx!WP zX6w)%cp$s?B-7{i^{jF>)mGk&8P=$~svYxdASNUlD|3q}xY!UtYU5`dGU*vl{oy`c zveGq<)biTzM=bvI%d?BCvhBs+XQ@^-K1-dq^e|r5R~I5Y-oRIs#9L%q0Vg)N9r0P zR<*qNXS~vn?ufU5!185*sib>jhu#sttYCc?9#PT&HXzHSEi|q%tho6;52ZN4;9rYiIfQsC70xp`^qSwNl@@W&VzvF0mpe5w|$X+;+ZbT1K@~>b7 zQ#YF*ZUVK!=|T1*F(Q+ej3k7q2DKr=?TfCjlgJab92lz^{mUtoOq0QTR02Y z{)u6_JCc0bcD{JHYY0G8wW19D-KA=Jp5$q;-mw_i@}<5&@5TEAdi-MX`;P0V_^$m- zvW_J^?UO6CRpp`Za85^6pHbIi=4=nWUBYDfk(S^!EG7O&U5b=4l8>ZfdX(3}WRV9C zg44W57<0uysY*$aTQ)>eu^S!9lq#y|_h?1z#Otq1hMvj*Ss;Pvu1S~s)L&?65T&u{=cy9z$XlI_i*^1Rwu&1binwHPNE6-Fj($ ziz8o*%1y%irmA!z3~kHV$n2~v+1QN;_}ooiq_FC`y2^{z$4n{6D3W*3AVrg zGxUUPhu9d;U)G6^S)48?2YDucKwEYzMfzTGr;qgWZTBSHX+~8KD+#Rt`}nzU>kr5t ztelXOScP#ex z{Lmi*x+2C=Uw)ser*Sk#&3x|~<1{8rtht=15X_`d-`b+&CnRw%B9!%#;#Vq4e%K~ymB1P@}dlKK9Igu9{g+E^} z*ygrYH5S)IGzB&-5Mu_uK!d2hKeCk(l~mvX)slNjWy= zDL74RcjLy3{P)7{eNAEPy8ZaZoh45Vs1|Pr5}oAD5=0;78M9ZtaPnf5w}H!>;(3xRGq$qN2jXW|g)06(c*R z1+v@`%mrwC4*_d^@#hcl4*A_eCTtCApDM;A^GeHH5DY3%%sGc#PvOLi`#Mzc&V6`7 z4z2yhj+jF0N*5~g?_#-wVu-xn;tZraII^ds4i_NK2;%L@W227Tc?vekU;g|-7@*&y zCiOA~?r4%e==F!9HfefumJIM`SL=vJd{C|R`yvZbh+@&+NOJ$Fg~lLucdXJ%qu%qu z0ul6#rCdFb_DpA z3igVXnl%eLU-D)23lnTnzHAakY*RT&bf`Xy9*JD>+%27P8Xf5dtTSpgn2eB3H>s{ zi!Z(Yo`DwZ-vuS>jL_h|UA2W9D1?9LBU7EzF}ODO@2eC%x6`Q&i$8%lgyDvDyjJq9 z`--Hqbw>4Bm%HE>_PX_#pV}@gzx0%gf=u6{`KM95umR!ZYQTMFG*V`myuLf%4AVLO z-Qcb%ZJjY&!0{x$a(sNl5-ulbIR9KdKCa_ui*BS@O#o4r9O_w+m10~tTY8HD`dmDl zkZR%Rpff)o!DkSAWKS-?V1Ku|Umtm?mEf!ejnE=-#01J^Td9X%^LK#__9dK6vo>gv zF4KMDESDKlmLG+3GB|0tV3vYa)AEF;>$VggnEqn5FN%G1s=pJPyRx%c<#B)gNOD}d zcb&D*=&s_rc~8QU9XH=rc3d=fRBR}VUo}_o=G6wF)t>1`e3VilQABiZGloV!neq|? zYtH1GozB`o-gC|E%fr>lRGATE4;Albn*No*ulB|Pi6M5J zUIS}|>e9)}h_yG#qjFgs#mJ>OAkB}fzdyj^yTuWX?NSz-&@943jkQ8T>(54t^3P~r z7%4gE5mp>>=3=Bw25?PvL1r)bP0q>2wRPn6uqk6s^l(0OQ1}%u2iR+n$c1z0l&@pt zGUtz)J(SX?soGkn0iiNs__67BCbPW$uJm{;mZ$Y0omRIOFid|Iw~CrM4C^OC>rgh_occKz|8 zAi>bd7R|Uyv&vxdJKp8HcXcKx6pnC-!BjD_sZ^6iIwXD7-khV;yAf7NF`090JmNn$ zW7m)WfTYK^?mQIMHETMCJjBc$wZl_Th)S{lIig^fhH3ktwiqtOyh74f8(mo;-V_Ej zo_|E!R5?pNUf9#1n+b{(!DZWIYA1YYrjGKg3sl0$^v>RVg%R8fyjtiU;NV z10pDz%>_>90u;czcS-rWso-HJ+Oj+$yZH3VM~nSU?Jv$8>)rMg$e%Nz;ZsiBy1U|%fQFO z>&z_7M=i`y6<;f)Q27c1U8@byrtiRMqn!or+xEHSJcgJ|XR_X4BG`235Ak3*Ts8$bo+2DtM_DEp`ya~Pk*XrZp7)PTjQo} z`u}tyRWGz0papS8XB72(fZK*|c?WQXS}l6l>E3@pUSHAwO&+&k&6Fc|V8-urLjY$Hb+*N#(=wSw3>ZnvFzc#}n;J>2k1%mnqmRHXBcc@q8lbeh@BY?Ad(&TlSAqAgr;8{`BY;u%ZkwaYr{t?Pp$mm* z!N7b!Bj*x`Mw3Q|&Z`!kaMg9VpQ9UyLSMygGF=KHoiUK2r=rDf#x7tJ$@0cG`S|v| zBkS*$2_yd%w|y!WpYz<*np(J)N*jN6yW@p$&J!uKbK@9!0O!k*j3p`-i9vBFYGMx; zzZ|jz+vNz7^%N(A*dQG-#N&dKOz9i~C@andElCFbTD+$ENBZq-iEpupum$`*CbdmX zt+bR9xX!O77CEW+=4HHU>ZZ?bZRqOia-0|Ho(Q{?r4&81mBvA6MmTuv z#ya=_P_ls3ewbFqu=~Ess~goxTJ+H6NyEJZn9-nFg?xnBA1N$k*B+OR13A4_(j}O1 zM+hf{)KXb&PF~fihdya+&hPDkjfsf7G+f8DYsUv5r+>PLhJ#qGS*=j4fDmzhMWYB#wQm zF!PPndq}ZOaxn<&W#uROw>~}?0@**=E&hP+MrZ4e>~E9gvvT9{el&##(*G_&bxg}# zT?Tt0?M~a8K1}P)%tB=R1jBRcJl?2D#vdIc?9~kSB%b0;`HE-fQ*sMk#pV(eOHspi z?Yxb)s|8-iqv1G>gKXK5AqWn7kwtpRAB5E8k&^uIp2K9t%sUg z<4LHcz$F$1X0^Dn)_Z&+4OvvJGk0Roe}7OSvZ4(&pDR+QbA$!oWIO#c#?Eqcgd;zF|NEf+SCX%ho$Rfr;pTK~4asqI zQt|dtnV4%!(i2tHe)Xkvtx%;1`|z_pfEjN$EqQmRMQIdVTA_uj{_v-12Wg!#>-G+X z#&Go6x5;jb-od%8zmCOgzIQK)D>=wuU(x(F>0|c)hC5dGO z3?E6kYc||WYJYklPCwH`| zOe2gxw`eeRxjFKGSX2el@AT<-HA8x{e{!tpYcCTo276B|sgbTx3A2t-$;a@Lsdgl1 z_Xlgoub8R{jHUKR5BNG{qtk6gj<{NE40jjhH7r~Za>Ti?tewJ~NIj^+fM>av59!N$@5@Prv z##d#SPCZTe-De|(tA*X%jVXgA+rWOGpBGbWyvY1WJ$-{ z`w+C3C9<3(R7htH>Kj|+v-2B1lF2-*`ee0Sdlf^si{HXnPRfqezmsP}RiW6rQj6kU z$w`j{usd}fRZ(K4)9lT>T-2>q3kxsDTcZ1E(H^%Nn zN~ieP!Zd3Iun42#%xcu!L*iC^OxKZs-gVZIl14JZp?A~syXs`Aey?oku(;|jnL6e% z(HdX=^11W&u_^dcJq=GUQ!wz9GppgM?J@jO#Z@Q)xcA#Ed~lw0ynUbZfin5Ff?N!$ z;*ImeXa}s*W)UQB`LKJFUuC8m<%RW-bymiHhpGQW$EEVnx(b_eG4JVa2Nle5)&&{4uNuBTu8;o`_a&tSqbs5xQzZf2)eDC7}&U5gn)5_k~V8CNmE z$&Mj&gj=`^=m1BKGp;1cl_Bwgv=>xf*IWbLqy-F+EyGSK_Xf4W;NNN5u9pCeywv58{^(00pkc0hc0fJux*LO~tpSws!#&u{M@cv7qBZfp{6FJVRF4cq z{Y9v7WDO-i8X5?$fNBo}6!{Y`-0bg?4o-b%KkG!vdNT=W23RpA5G^QwXgzS%{ZdFV zv+$F3hpE4EQB0$3ZFVZMr*e}m^vNu^!nlUO&Xpg%@3q9uM+IrgJyhEC-5<#=ok8;q4Vp`DXwQj&WSup#`(~6N z?iva!9AyyS!J+icWHTCqExJ`~VAqg871qKMr9|ss_5*Ep;i+pqIsq@bm*v&Y$#_re zyRE_pJSN#tHJo1sx&Hm{m+PwtctyVvDCyGAv;)zM{W+C@n(tTC{|*mOk;wJiM&840 z&6&p9&-?qTdUA6sUKfq#-`&BZTBHA0w~*~qUx|NQI*+vu7(DtCA1zA-NQO2_n-pNX zK*JE`-JyiW5A3#3{W~GwTmd~_$*ipdygMg2l>Xf>1pYt!1>l0<4rT*F`tw1Y;qJKs zI3PNJ&C(44U8!*%BoQbg1D>*=e{_&NlP33^B&$cr=Xnd^SL@Xx8+}K)fz8wkP6rC1 z@$U@a5IgR>>_DgdMKkj!!ypK+@%Ir2g=G?+nL~atM{ZZUXetoK9)ipBhgD1K{^83h zpXTprGRgbdDl%gwcFZV=uTgw3k}OPvx43PKXR|imGrKEwDN-hUi#;g@oU^r@ecmR- zzTtiuKH(g4@jPyJ;vZ!A)9W2K9C1B4`qK+Mr0hAdrS@-eKdNlwBgI_h6=hSlE^v-5 zQP8b@;}nMwicLVmzw%t)dU+Ovtr%jmbQ-vFtpn+nsid3PsH<*sd)+aeFHhyw*qxVn z2-m1mByoA+R6J=PIOh#NmIjAbS9XfJ>|dHXMZZCzid7Noe%mn?zR}p1yG-h-i+^;G?v2(Xtuxa!0p#JYc=W_C8X$TWB=}!v_C= z<{r!d&*{EBlkZ+EfJL{}=j)aMC~A+wx98JM&B$?~?k7thLj%7nVBJ|P`Hji;(DryJ zS~dkPY^#Cbtv*&g6g{f^R-+da=sSR(=5S5HSPaTmKln364yR3%*FlccpXP5cVbVtO zqL1bqD`Vi!%)0l{1D^f1)e|@(_f@b}nDkNznEO-@rsW{(P?Nic90gy+w0W9)t#se! z4n0t_$htIKw7n_l$@uaGfIJNB(XJ8}7(}0aAFZJ!CUuzON-z(@Bdr%%Ea7DnWCdXT zGH-UFisvkE+{j+yu1Aqa&fvyX^+yF*HC$cYL)k;%X$bn}75TNq%5?sc4WP}f23P2s z+TKD-p$66H%LNaZu+_!FrgibHqoR}M6>v{^ zPs}P!OXKzND=f;Yk5{TeU|NfpndN`8OqLKaDL(5KG*ZnKix#`$x7ZDdB9u0xxl?wJ zBB+K$ymDTk6D3|T_hsyied**8d))$ZLwZm(ajMHUL=SB7>e{X{ zUkWScz$KkZTseLzprPC>SeZ`0s8|S6BoPJ)!>gDf#i@JJas8D0#nkaRsC&MS_s5=p zS^2m2P_{$d%Z1g?DSEDtkr3&wNSoig40Cz)!!GN?E{8RPVPBhm3JJ@?)q_A|s5jG< zPN3L!II7rs5GPd%2-jby4H+ZUx9?4Va#h6WIF@~0%L=8cqU4qa=}X)z-pXQ)rRGQ) z5|V9QW6jz|im)oH?HS!y!EM-#Q!kgc^2i*i}X%@^a6nGo_}$l1(I% z${vx;q^^5TLPYo9bc9)0P6BT%L-+)tOoyh2m|rHEIE)Nsv}(sZe&@`zoe&q$hy@NV!swM|805$M$e$ffDKDEpl;~iQ zv)GQFa2^`m;*XPX+@?*Zr1&{TJK2hP+fI|=^v!s6J&}ivx5XH6f4fgO&nx;a$Lb9XM2R(Epmj&9 zjNp%xeLN~kTkE;E1o}M#2c*`7!Y4W}!i}{jNtl#Er^yKxBgErQ$sIPsRje~SUsIXB z6yIX)zvQRPg!0Nrm@wQiyaK+7J9insCal~_Pg8VYlcAEmkx=aw_Qz&7Y^7J+N=*W` zbn-Cl;fbM0GpkGUdH>~>pKquj zqafw?AIa}p+?-0v6VXZonGU~eREkV#w@~uDaOOG=tQSyJf3H~wf~!}ZJ*!z@zhfZk z8(bB#U|RTi%{73HKs-K>+vg3^5xe`RZ?-sz{n$EXlm#eRSsK)iA0dkE5UrG z_GP|I8jFUeIfn`s2lzGi(%Q;+sI`H+wi_5{!UFV~u=iQiKT4RT4fd`@7ne5pnx4@~ zsVI^!74^*&fK~3ENAa!hVBg6b zn=X2cdS{aWoVOpvEXiB;VC9EiGo$WZJu>z@Sf5n>qX*qlml>i-_zv$Zj&2WsRm;S% zTT1whBeRX~#~uD`)^|w0Z-wETqV;t8pdVn3>%|h=EKsR#XqrRw=%+R}FN~1}JKifx z{iW_Dykn5|$&f?o{&af#WSo3COw3U7sT50LoSQjKB@{Pr?dCjOPwn{0Q-W`Qr-6Su zGV$|Gje6O^#g~{cPyc=QuUny38#d8a9&?t%hOd7zrz3y-NlN6fB!2&U>=VHDyngwv z?g~O;y;|Ge_Z4BwsR(oZvoi(xR0L! zNgT~Wcd~zJU5@+avW?*3$SkqW@D6ru?9=1W+dy~EpP^g83Qw*l>orAI5}0v&{q0&Q6@vo#kt)Y-WtyFYuHuk4wVpv-t4h~e zytEbXf1ge=|JY!w3qO*ZX>wGo%7iGJzHc(XTd)}yuVB>ZXQHp!!%g7}u1quf`ocpD zXUq3LJj8!*Ghpmsda$t9HEVvLEFeq*i+Dfe3Q29>%FwLEKDF*%S*BUcDlPmSn$oU2 zlX}*3eBd0du`FP+1(FGH|BhVQ<3l3(CGcVIcI$h@j{oj1pwS9^J_D9%sitQRr6x#U zVzxJKY~kEU0$sFx7Qx*Hxp%gFP!AR+Qxd^Z zg!`Mlrlgw;_CkLDC?{P=Jc)F#_a5Q2(BQBB@L)JS6j_r|7<>`QXp%idRV2{FTAx*S$Be9I3sk}nu_`B2Gj-$0YwGeB4Xu^5s**ezsE!mD2u@W= z#t+gz=oP*7GvgIO;#TphE$P*q673J535f0coWo^!eoGm!27zX~qHK?ZQ)_Z}TibmL z;{CS7eSiP;>tSb7g&+gh0DGyWbp}<3D*uq}RU481{K)X-7s;^$jp~aBK5`vqV!=_j zriFGuJmeGp0f#3b)4ZzIPqblhXnQr@?JT-$XqMl3vOEHta1laI5uBhzWZ|v!a=A@u zSKXwmBhD)0u_Eq!2S+j8JHTGYJZG6{kD3_UV&2(Q#$rH`KkztlXf%uBYsyvqcBZJD z7O#ZWQ4M8HO(D6I__cu3wyb!mtf}fPLetTs?*m0Z`4-bD?r(kWw@#e8$Hze(ziDS| z&a3QjV*4mqF`5}_Ib^r(%_5XEwMAcH0pr9Kc{mJSzj&$OnrHBsV)X4loL4FCI`Fu9 z3V07t?Gr^^mfz@_ijl?pd^MRc3|DwqGVWUJI@+Sz3cY>OX`^m*m`*<_=1Z8bJ-$gi z9OklXIbNQz;}79I%n@a4(md5`3aa;3zD%IpE4WghDrX20nmVoI!~3mLXA}(ENP%D> zNX@PoIA zzchVhxhfg>yX7o?Jv04bMlS0^`4wHe_=(Yn} zh+d5*QkkRLe86ikCu~u#MpyW0^p?qc+B%6k6hQ@Z2%uDEkChNE!AmuFGfUGu7L2bx zd7D1Qw^-^_f(-(nf~0WB2(kR=h3&-(H+V zBJpejWF4XCQpeg0D%G?z@5Pi<8VbSL$19<(9}h*z#eEwFF?xCxHmUCH)J`s{PxCNw z;G98)-0M1C&|nBC*yHvkMZClNY9emtv6Ef(;#r|5KnwXpAG!{ha`pI^A&)QaM(#dg zsuwR}0~-4{0^I3krL~C_j5$6$Mulx;k}Q|xAL{g4e-|Si=rq8$;Z%`-0!%oHrml*L zWe%Tyc8#%IgDE!oyeJ<|Z)XLb=%T%OzZ^H$WWrhG=Tk7)8gOvk){%yd6i?ULDqnSl@2rFHt+ z!Dc9Hmm8kST-z;xbQ?x-6LLi67t}ewyyt-I!M4FLepR<#R(4@ZE^^wIcgZV}7kKx~ z{a}0yEj1Tv??rP}8c7G-$K^23mrSpK#(#%3xABV2BXlo9>T&d7aFKAfJ#{;U$HeWC z39~i}@Y0Sye#E!Bap_#Hy_xHZ!P|(Vat$bV5;`c%&u0!qb;(q^)+C#8v(|?jD7Ez? zxQC==F461(lMCREM9-Yjae+RZE%V0Fj)bw1v~$X9mVSZ0@@LM2*dY(hO)amsVkprS zIoS3=ePI3+=-(*Fdn=%mY~bA%#yvA&ZfEo)JLNrj@A<#>G3_Z_gaXcAUf%_$uY_E5 zFCS8(ZS9up9iM0cQ3SY3EAZzHW^XWnK>&|`Pmiq!Do1c9uoCA{ zjJ0Wz2U}EzA1*>u9!#l=xHgCcl)uBLVh&?u-pH`U1Ag2aQd4QzIw=aDs)nT%jOVty zrka(^DQu;HZ+CA#=on`M07kUyZbp9jvi@-#OLtPF(@2_3{5A5KP0n0SBK_!E(On+r8= zwE?Oph>a&13x0DEQ zR#dq~%lRr{8qr|e_^KQZE17$nEC>6eq@zBE-Wo^XN;#4|q-K9Eh$O>SZ%3DCPhnIr zHL#^Jsb9#j$)aOz>)6}J9_C>^O3qw4H*yhtb1>_`s;qmI*RlA=tHr5&p#u)3B*1BG z@UX2$VyPx?V2xTjHw`f|m?rKj3-@ZFq=*-7CJ@6TYDcs?l# z6{JN=Q8g4ZiJz8pWoCs`QcVEtU)}z{3(Nofo)49c9QXrL@_tBE;m-xfKNrHTWj$jC zJB&TwKogdp!yN&Z3PlezPrWjJQ74+RU`z$a28i0MJzqQqI7GR!1*d-D|CI4m zR(nd%Ce!c(Ej=8g;%)d^!9@Yt?|s$o7cUBGPc)CC89HCSLG;UyCHlOp(SlSLSzVH7 zx@?N0LJ2S7F!J^jt4S20gsW606OA&>hkG%PYWKps&g6Qu8GALUX!8@qZY|=T*6}O> z43F<}>ah2FNbfrCA^69b*^1hFv$c|xy-7Ez@Ha%45UUwmih)k)(I5epQ)GKwroCAR z|3}Qdm62EGcBYeiK3~;8&eZ2R9{rZb@|8h;W!MPfAH{zA$+if&AR>sG`C@@dK-w2E z=VMI@pv5O1p3ehGdgj+aX)%qUd zMrF?_5c6y1M-mYo1-@z-$||~Mcyl> zV~gm%9A)&6rK64W^_aDEWRxTM%-?vp;E1cp%N>gr3zw`1zZ!AUSEaGBh;T!n{bd$9*nbQi!|U*J)u@r}(bZVl@zbFJrMLzbP0?t}6N9zo?T- zPQjP=0C+~Qw8lHb%76^ht;McQtJxB zHnOl>x@(dSFpC8jX7#L;3oI6PNT-zAf|P_Fc1Cht$gM-9NT*M^_lmKP$H65!{0phh zV3}=o0&nQ;P@%^WS}@2MEw2!_y5kYs@d8;%nOR(E(zVkFd z95kDf=jUBe!s01^-j-sx7-4vOt=^}3^}{itQvpMKLfsedDKXUq00ekW~^n zw59GEIXMz04cEd&+F2k5!()=8>dqP}6TmfZFCksF#W|j;ds(>PJ@SVpqAzsZbliw} z%#cG$+z02YtRRpOCOB6aG#j zuX_oPBTL%F;a$deQzd86y&40s3OfdV{n0F3dVW}?J216U#)XgD=io^;Jz)C&s0UCg zmaaNCZd#Xv!wjG~8_>~)ZC!;-@*0-kSAtXppQbJ5sXUKEuu-fYp zb^p|m6TP&Y+RP@7nwj5e?S%^y2TbVY4)MvDk6-EZTzNQJgT*^bN@z3~!xmul2g7;Q z=uNivrJ&m5mQDw|+MI~T=5M9!9sKM&wsQThFq-$tE0)t&0)hoHgNA++?DL5w(ByinLr@qCNrrqtFMgoJn0&P2{#1|el4MTR9pg^cUv>MV1XB@W}_Ry!g!znGR0gufeHl5_DS6?`kyKcGnBOQ+Um z?>>}*~gS03MAKOnq>`i+RR2lLI>sn|`1`^)3HM_g@B@`|H5gN({;umm?-&v$c@ zgMoynjXxkG@HNBE!`=Sq`+L}^ZFYRI5*vX(pz^!d^C^zMdpf((da~?F+t0hvd%kF< zXjpju{XA_yKW2^jeC1tIwpiv!KEiU4_nbq+HOfHq5GJ&#aU-#(c^g@~jE6%Xd*1_7 z1)|xDHR>ky0C9knG_(m|4FJl#g6{cX^^oRh23|DYe(MOiYY?vj~-xARNI<+oB{h1=7GX5R| zkcPoJ&KvUHY8(K5=O>}AePA*LnfcOv%Qml5RszuryI5b7nnQd2D+bj`r?uPlCziigO__i^X zj9tr8Pk(~S74}V$j-*c3{UGMM;o#~vOiW(E|CZR@Be0bfpX0?5youyhM}3#ttQfnY zJl|QV^`Y%O=_o&RC&x)a-X(m}x5YY<*kHvMpA9a7)?`I=pX_6tV;My6cd6Ur9}t^m zUXEq2zaHD}1(A7a^8490n|o?4FTD>VWHGBHmX%RMok$-?c=LsTw0gR-g8ox-mdItG zJBi9TB$^r4)Zt`4kjXS8uC}`&kSm7eoM*e>iMy($CENK|0Y39MF~<4@n#6ra{5OC) zfl;r{*oVPoJGsEz&;7kkC7Kn{r`NJ0zv$p+Cj)dSzl}v;4RA~Ns|&IpfK3dtYYDBj z**#==kBH=N=>00{mrS?77 z#B%B5;5v_~u$gCC-7XD;&=$V=A5XOZ4FCW4Hqfc>Vs%=tHJ9_%zUy}6UfH}#Pd{Tb zo?Zt4HNI|u5$!J2OwIg_G@fPjeA9N0{2b~EG*}+QeTje{fFlXTB(Uz5S8{ouwE@kBzD;_63UmS3lAPV9?DHM zlzB=`v2e0wp9vTgK?vSZGxLD#Y|dH7FFq5_JwIFs)J8v zA`>cDGH*W>y%?W%QyeM%;A3R=;hGHWEX_w@aU7)i+3Hz&kxSpr4R6JO2NN5^$~`~Y zDYKn7;65>6!(5!(0z2Iq@q}75ZtPdz&($)2u_F4wk?M!4x{%+)b`fKq{u>{Ot-yCK z1N^_`4@;d&E%t@*c8Ct=JiJo6S*2!#`Pfr>w5YIj(8keQTqaq$aijA-{5rsM72i&o zptIEwM3!}q`;{{xPPUzi!cMbst1(ExpV&ul<@TY`Xd9CU_MbR#@!p!6p(JxIxjT*bC)E zF$F{hE)7uP-^6I%#Wf zz$_mre;cXd_7OG?b>4jMjQ8I!-F8zJ8*glF?y)djr$y6~)Fc0t!vV4+3riIEub;q}R}FVNj=S!uKa9)5b>LIdYVKI?uLl z)RiKr9)x4rA3W#D%GI%wbCpBgOk4Oy4f>_*zCeFpX(h8-jbj#LZ#h1GO)w8W=<_^# zUyFF7m%-sF29gJ-n=cJ^R!gNq=!2&}(Iyc<0&Ra$<|G`7L*lbA$U@38l~=k`gBzlR zG=bQcoqWFo00T%v@LD=_5lj}BiX5e230Cy*5$U8zXW9x~v#2l{oB+4hqSvf%Uq>K_^HPi)yVa38;P%_a8(698wl~L_Ib%q=m^|wnr5eL>4{=>+dB4K zD-L*VBf>ehm%vNp?&W&Z#nxmFK`qwM31n=Ur+EbuL$SD_D~CzuLtoO=Hg9I8np-%KrTV)G zXJx|Akif+;!%tf0x0~n!&=RJ8%B-xr{u*AZ_JM~Pbr0&vVQ%IMWn9h56;bew@0AL( zv438{HX@(L@(Po>6Y(N?_Fm?--h}yJ$FY-yt+)AzZuJXM+U!<$vN+{VV+=7=jD0r&=#7LFWj^MQUy;d!yYtN4N zI-EBQm=vr??Cg3GlUbeGSmKf16De8BK5?a#BdBGnkxQCT*qW3t<=n%ncSVtFeCRD6 zE?4j#jNRY^XQop6^y)~_EJ*jam#YapC`ZTBGSjc2j@lu({(MQksJIbDA zT|b*%!Jc~Z3v4abj61T8BD5Bi7t3)dNMy{K56R+^Z2jq7je>)hWSO|8BZrhDt6Xg3 zHPhBcf@InRj=lyR$tMVkN+u3pbBOU9|%n|>>D&SDCS_%VzOXo#! zXO-PY%?~G~a*o|0H9OxvG_)UOqC_s-sbq95Q+h}8dLVdfddlhqP{E`y)G0?LAQP9| zrp(2TOP91fRoq||R#hIw6#z0nPBWlL-9O)T)ICFyS>H!-~?wdLFykF$g973vOQWN^-Z!f@pO^qK6P(Sd* zrNiu&pqp1U>D=PkR0W_;v2Wkh$YHOkeA4)j8)nk`Tb#~1s3*PFj=fl)hDdS|ty(mp z#>gNdD+muG$LUf)6^wU871S_sPCxV*BBmY!i-`nh!t<%Vldh_&tYfv$Ey=|eH6MqT zvd%?~4ILFu=!yEVA}qw)c3N_FbCkEqb^FXivSQY+rR=SncA29ww|Zqbmbnd00w2)zpjsDPM$^95(@7~N1cKwKn+J_YW{ z`1_}{=5ecps_|;E*iF8^nx_s+>vqoo?PGLY-<&a!WfqK7B2IsP$%3s8rNT==5Ov^bW z8Mo}}q)>49D#d{qKgO(WfnpivM1-OT8}AeM9s4t>6PdIarz~76lzpC#UGYs&**CR8+eY z9K?p!hQFEQ$;2lGiwwE-&eG4!ulDCIj-^=}YE0f*{`7qSvF|e9ReM=f>g#Vtn{R2; zc6n0l84i#%B!fu0ccS~5^LxoLO)c&Z!AA-X3TLU`dMS)}LWx2F`LfYjU%$;v``CS% z_@eXeUWK1?t?N{t|0TbX5xX@+MEk_ps3sC6|nt z-CpoMVR2r6PFHRipoe>i(5Jc=dB|=DYl7jp&2ghGDa2qI1F^3sHPjPb8DFI<)Ov_dc0rzy3D%I75#^M1L|7fsUZMp&W{)N1Y zY#gX{_qa|^bBXKGNRrtK&EY?-;`%z^9-NA>*R|Au$@0WHNi3OY$#itw$P|sT2m`Uh zPqVd5b##Z6w;DNww7+nf#Y~;icy!I=xr)A)0vS?9@^m(BIXi{}fa0|s+SS0mU(c`A zVyO1uBMre)j#)R{hM88V+y#l$WfQ05IiZrvmo9J?0SU<)FMZl3In>0)n!o#vq0=AA zH1Ueg5>*9ZY6b5C2n?OQCz?#bI(~yBlQh4JKb8daVB0srIj9VOOTD{2JOBW)O$ z%V!!Ar7+aHnLo>jRYu_k?z!DgTvdO64%&~paH0HgO1Rj8m7qDPuL`DO^KqBu8(Mmg zo?Q}-xYhV%lf(l?49D;42lPv;gQK`J*<8A9dexl=hnU?v*D$ z;6qDSZ$+Uoa`+++gRv-DIi|(_FpJyBHu@wWUab0_2J7U2fw&C|-8$KbUKKC-@X z`!KLGXX13yC^K!9w8t1);>7&lnL%tan#T_Dx5}DGX$9ye);@|muO2ow|Hc&2L^zS`?aFG+@}fpbq!VAbD!=RZU|=3UY$H3{vmCm} zmK0~m-x_pVMboO@XEQJ)f1ve>>Eg6l z``hQBCHQGje`Au2$!Z?&Z5`{VAs3TOmTXhpt;guw53&y78tZDaqtC%%!nfJi=&=wF z+q3QSuTT--?IN)mIJN$F4faNi{QM-R*X6;4oa*GF*l z2t*CfC}j)=R%Tz(cl0Q>&RPf%eEq$@MWNysW_66EN%@4r&)cO%jUNn8-La+2?Sh#3Dznn=8AUkrv-XPkq@Vm z9ZfHoJ6bzxw$NM9WdS3~m}X(=x0W!uHy@M&Hu`jny#n>o^*vAH=><)b71(Q@1Qh1} z+c`0OV94eZ%Yf=#kV;olnqqG~(i8<%%M&JcE4yM_?r;=u{4q2f^Q5;VlM{s1C{%0n)MLD_*N9liJGmzaM}Ro^yC z{zSa7Ob#ZyrSe@SEkH6+81?2V z?}vL-l{T-{QWyn@!4nML|4{2G2(0@fF;INg-j@m}z8H3bQNze&3_dvymuE)Em;VPV z7f_r#wb&6UQg7;?FJ=n+DGQVcs>!TjG4=ztQmcIen%!+2)4~82#5sv!&(1Lh9_d)m z`I0t9TucObH^mJ>2f&pUG~jHOv$$q1C1UPih@9P7J7Xk*KZIwYLJVW`C(;j>{O zw~0~yT@a$uxZxz@_2x~Q=Q6!3?l)y9$td;kPA!oT0}R?qnkd8iQZkB5>Q=q`sh@^q zm#yA>nlzw<*gYkj7dX5jg>;2D25lR@M>4e`Ya^yOy07Ct*u!;uu%xSG!Gb1Q9VouB z3$oob4`lX}-u;3$whLP1TLDG`QGCVdMY2zWBMCHMYfysEnpD6lVN2Y|&dgS!fGIME zvlJ*Yy$U8=IPeLT+KhCL??9fy?0jYPLfAL#C4qe<=Dxh%1T^R1AMzphJ#vu=8^=aE zhaouus2w|v7{~QP7a?1BqzDu@dLD!Fr-{a159M}G?Xl&RRQWiX+3e4lUC>=32`5)b zP!2~eyx9e*I-FpXEPx4FRt>xqqlSF0C^~>V@7rPW1K2EP`VWKNMwOm%RKrEHY>_LF zqU|>p1%RE1s@?@m96Rrm`YYJv294FJun257{c{;kzfY&=t2$Z*&r+RuPp&SxL+}%)0J@$*?}c{P~~fwO(Qq2 z2JSUQ{sKy%OqC#A9>Ui(ZGl&xwoxX7YE#u}^Y0*k6W68asfbSS=jEM5Mkm%W3Yfif z+LSbe;udlMt3P^h8Vx4YQ5AbpEIVmB3)R$uU;(k2>0%(;_c-!^6>YG40NJ?L2->51 zYfmE3hd&_F$Z^Dge2Uc<&LQc2-^~_D(;vV;B2X#S^i&4#1fCBf2VgX@6F1TT$=?b1 z-P^2I%LGzBa#If87!zZMm5-u7rkZpkKX3geCgD*3Fj-~^FbVDHz6Z=bK&ou3ql(jL zEJ1216N}oNL(a9FlWG8bY{4Elfw*UnAPZq-P=qKN@_7?0D0|=qXIo%2qXi@Gu=)rp+`@ zRPA^rW-DCRpXa$iZ@p(IWG&^L_GeF8HKUpF)m=aK5v+8wZG;Q$jFSpMyaqIB$kb#& zM6Jpa+83)$P{fw*BifM7)lMppd#oC7ol=|69C7#~Q}jRDlyggrqY5+aV42>&_$Wz= zRt+8oBHgm^4f8K67$3x|rWg$89psnaLaikA(zv|W%^<*_v#jb8hlzhY6joUUxFJx0 zXfI~(f;iFU6<~IMn$ONpL%LW9;~-Nw_&;q8nHIq`KXgVOI0`_VNIed2^lCxExCr95 zWiNpotz8gC1E|D$2lYoe|FfZEJ|N#zrY`{;!d)8a6Oo2vPFBb0ZcgBa0_oyOb`55B zn8&oYm>yBj~{nn{1 z4Tst#hl%>i7|WfREO;5?YexK!MsbDcVub4q*^?^&8pq{}*+A#?->@oY6ts)ym|wVk zdP>X01jBND-;C5{`RkkIkg!nz?qfeNSRwhPq4Ud6k1DEZK|_tgHctp>=72u_C`dzW zC!Ot=%0k}zrfZJTqjLBoW#^@R*7es?pve~QxQJJXQaZ*CWBRQ}{g=*&>2-)LReatH zbt$yUNQ?Juiv%WUR^u;?OYydLZ`V2G?_PT)Up{pH?$x)EvuLH$xQzbB&nKhDSkp5^ z{U)ha?XSl2rXDm__;%tX>3Oihyz&G|0-~ot8RFu9Nz2Q^Ow`1mMVRt1;mX;{cJ2Gt z=d7M)@$!~F7cID;`HKXE4!t-2*`@#6=X}29jwyRM94$Wt!YO4yr9*CR_6Xmyq;54#Z2=v+RcY)Lf5pC9xTy=^h4YPEOa0iNQ(T)Z-&VC7lNVr2A_g8QkFLawmCb zEDc<3zZ>cS`S3|4o{Dk2u;l`K$wF9CTKzJB>O)zvRd-m88wFKU#*?9!v{=3*=rGXA zPBG=bZ&}0WnC|Q~y`6k-9tX5GWulguMPFN^=j>Bt-8&>S(H8%Dd|~Q4d#;2w^h`|= zXlK07o+|?$W88VRk~aG@pi2teUo{mM6UpMFpo*wPIA*bRL9L4_MU-VwAzmj9Lor3G zD8)FI?i7|CO#~61EO4YDJdDKUj$HcbhWF$*V7#(tq}P=Y$Dc!1o%`Hv)#T=Qt3Wjx2$uAA#jAOxmJn)FZgG z{Y@FZfH8V7CR=t}JV+-_NVsyG9`Ix|>b*R-rRXY0HaRgStjikDWVYuBPb)LC_?2^h z7$tyh2F!-x%7kJdTMXzF!dZOSliheGr`$GB>Q4-h9ubG_NQqzGL2nR{1N}7Q3u zg_q&Zc6LaxvMy0Ct@4`t8YK5JU6f41y-Ig7K=wFw-H9fnb*J19y942DI%8JvdLg{9 z4X&-i(Te>glh^1grF8NC^o=_hm{#G>w>XKSGP#8lTShMD~ey#9XHpw^g?M z(1l0owcOG1nQ2KwWFLtZ;N4>0%m9nKY+v;_$yRG7E%&U6VZV#GUfPkDdptXf9!Mg) z<_;t#_l+}LV7T}6KK}RSSS>t_FA~A{Hl6`z z$&2ZIc9FtlTGrE5BlRuTkaplwoY!5REUq_mw1?gBt67fb|NW)e&r`Yt+qhr#kNb^I zxWEXv%`(tZM5Bxx`j9j|Vi@4E=ESocB9%NE%L((FN>!F zj3m<@J5+G}du8B9Yxd~N4I&ziYn7*Ydfh^T97X@=zovdje^uN+yd6{^KVNotW&LxK z^rOPNcluQ5ez?x`{1Ep`d?~C*Tfl$5*g zbcC^*D?f5c(!FsPoP`*zK+dluOrAvKDZv|?ovGV@XLP(pk;N=~q!Pn_^T?CF`5 z<3fycjL=|TsYa*p<8J4%5d6=4Lca%^_BB41B9KbAV1xToOA~2Gep^Kj^lLn5s+d#C&_UVFV&PfEZ z5p?2kX#S6}v0>pz-pbKYZ{YaE5+tV949SLEBI5!;Vn2aZ#5WhTGHNtoquCaroa88P zM4Be-$y^Y0na6);M9zIPf@`xq_MCS-{{@7|NiH_iU7&v0-+Jzh?!1>Qw2Q)<8M8r> z*FX`meg_r5gChRmM6$;K{{P|R_heN-xl|tGzHF#0@Qg$(NdT#J5pZ`R#aB94Q~_lu zi!(M^=mYBY4`mWBNh}i`CI!4G3kLT(i~Y7U4@qdX6-E5Xo3w~g1F~2_V3cnov~DZJ zfW>|24B^{>EC#M&ar-f1Ml$%Nv8r*1(#BF8lk_Ok~vT~Cmm zqbEvv5rT@STT=I%aLpsU4H2+kkbPNSL_8IO0nf{V>gL3)3igyifPoZS|aCJKqOKJ)13muzU{z9FbsaxH?gsb~$+YZDV z8a8|EAiRvvF|NV`*PQ1vpvj`9$7>>EPOV-Cv-xIncicQRf#v`F)i7r&Q*sJ(EkQO zYpwubq4)0QZ2r#sQoxZm+^`SFizoXAIYIIDZ=bB>B(`E4GriTaPK6sqdH7WcIJ+i3 zg)53bi6`PnU})*VyGUTClqn($gq2PICG(r7!^*6|V%gx&Y&prlYEsNs@;Y@Jxm1c@ zPB~D{?5<5xqWd)TdrHBfcc*=?@K4v+H?9Io)q&v*7Pb0>c7qgC;jQ6S8=;Za^yow2 zq?AtXTg~&2(FLa6IY#V97K675Ky9sL?46vXS9~VXh~iJU7_F=*E^JJXYm=k7zp?y> zz|g!CqlJg3bM}=kLj9+oJC)(E(!hbe+{tB$ogo;_J?!84rJ||)(kcSH^Vt)NvDnU~ zzhp4x>?R|T;KZk-R4Dd&s-i5%AQp)7rGefXUbS6Vqk64)GhE>`UEM|zMbDYiJ%F}v z*Gvj)us>y^JTN!G1Ipt1fz+`jzDH@&(IUnPj0ncNcv<-D z?TA*wnjK+4DZR|1mYTnh#lz>l&cZLpR!2GjC8vf(&Cz`yF9o0XY!`k>c(C0FD5ttu z)KjFESPVofj6`Cc<$W0NYp(Iw)7lN-L!=@%>b8}chbe$*s^$`Vp)5Z5X(syrcj)QykYhK#sO%_* z-(QiV=qsXcX&Bm6QL>fF$B1Bhpl4|~<% z&BSG%0L#{9b-M+)qeoUj5x7wv;DGYr*rQBb2@#lX_`ED!x+*|=TS=_SVh@0`rY{p! z9FeSJgwEX(P8kjY+_wyu&;s#53l#jNjkiba65?uIypkD!Qh~#`u|)+k;c