diff --git a/App.config b/App.config
new file mode 100644
index 0000000..24c49e7
--- /dev/null
+++ b/App.config
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DbManager.cs b/DbManager.cs
new file mode 100644
index 0000000..d124555
--- /dev/null
+++ b/DbManager.cs
@@ -0,0 +1,333 @@
+using System;
+using System.Collections.Generic;
+using System.Data.SQLite;
+using System.IO;
+using System.Linq;
+using System.Text;
+
+namespace Учет_вещей
+{
+ public static class DbManager
+ {
+ private const string DbFileName = "inventory.db";
+ private static readonly string ConnectionString = $"Data Source={DbFileName};Version=3;";
+
+ // Инициализация базы данных
+ public static void InitializeDatabase()
+ {
+ // Проверяем существование файла базы данных
+ bool isNewDatabase = !File.Exists(DbFileName);
+
+ if (isNewDatabase)
+ {
+ // Создаем базу данных и необходимые таблицы
+ SQLiteConnection.CreateFile(DbFileName);
+
+ using (var connection = new SQLiteConnection(ConnectionString))
+ {
+ connection.Open();
+
+ // Создаем таблицы
+ string createUsersTable = @"
+ CREATE TABLE Users (
+ Username TEXT PRIMARY KEY,
+ Password TEXT NOT NULL,
+ Role INTEGER NOT NULL
+ )";
+
+ string createDevicesTable = @"
+ CREATE TABLE Devices (
+ Id INTEGER PRIMARY KEY AUTOINCREMENT,
+ Name TEXT NOT NULL,
+ InventoryNumber TEXT NOT NULL,
+ Type INTEGER NOT NULL,
+ Location TEXT,
+ ResponsiblePerson TEXT,
+ State INTEGER NOT NULL,
+ RegistrationDate TEXT NOT NULL
+ )";
+
+ using (var command = new SQLiteCommand(createUsersTable, connection))
+ {
+ command.ExecuteNonQuery();
+ }
+
+ using (var command = new SQLiteCommand(createDevicesTable, connection))
+ {
+ command.ExecuteNonQuery();
+ }
+
+ // Добавляем предустановленных пользователей
+ string insertDefaultUsers = @"
+ INSERT INTO Users (Username, Password, Role) VALUES
+ ('admin', 'admin', 1),
+ ('user', 'user', 0)";
+
+ using (var command = new SQLiteCommand(insertDefaultUsers, connection))
+ {
+ command.ExecuteNonQuery();
+ }
+ }
+ }
+ }
+
+ #region Пользователи
+
+ // Авторизация пользователя
+ public static User Authenticate(string username, string password)
+ {
+ using (var connection = new SQLiteConnection(ConnectionString))
+ {
+ connection.Open();
+ string query = "SELECT Username, Password, Role FROM Users WHERE Username = @Username AND Password = @Password";
+
+ using (var command = new SQLiteCommand(query, connection))
+ {
+ command.Parameters.AddWithValue("@Username", username);
+ command.Parameters.AddWithValue("@Password", password);
+
+ using (var reader = command.ExecuteReader())
+ {
+ if (reader.Read())
+ {
+ return new User
+ {
+ Username = reader["Username"].ToString(),
+ Password = reader["Password"].ToString(),
+ Role = (UserRole)Convert.ToInt32(reader["Role"])
+ };
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+
+ #endregion
+
+ #region Устройства
+
+ // Получение всех устройств
+ public static List GetAllDevices()
+ {
+ List devices = new List();
+
+ using (var connection = new SQLiteConnection(ConnectionString))
+ {
+ connection.Open();
+ string query = "SELECT * FROM Devices";
+
+ using (var command = new SQLiteCommand(query, connection))
+ {
+ using (var reader = command.ExecuteReader())
+ {
+ while (reader.Read())
+ {
+ devices.Add(ReadDeviceFromDb(reader));
+ }
+ }
+ }
+ }
+
+ return devices;
+ }
+
+ // Добавление нового устройства
+ public static void AddDevice(Device device)
+ {
+ using (var connection = new SQLiteConnection(ConnectionString))
+ {
+ connection.Open();
+ string query = @"
+ INSERT INTO Devices (Name, InventoryNumber, Type, Location, ResponsiblePerson, State, RegistrationDate)
+ VALUES (@Name, @InventoryNumber, @Type, @Location, @ResponsiblePerson, @State, @RegistrationDate);
+ SELECT last_insert_rowid();";
+
+ using (var command = new SQLiteCommand(query, connection))
+ {
+ SetDeviceParameters(command, device);
+ device.Id = Convert.ToInt32(command.ExecuteScalar());
+ }
+ }
+ }
+
+ // Обновление существующего устройства
+ public static void UpdateDevice(Device device)
+ {
+ using (var connection = new SQLiteConnection(ConnectionString))
+ {
+ connection.Open();
+ string query = @"
+ UPDATE Devices
+ SET Name = @Name,
+ InventoryNumber = @InventoryNumber,
+ Type = @Type,
+ Location = @Location,
+ ResponsiblePerson = @ResponsiblePerson,
+ State = @State,
+ RegistrationDate = @RegistrationDate
+ WHERE Id = @Id";
+
+ using (var command = new SQLiteCommand(query, connection))
+ {
+ command.Parameters.AddWithValue("@Id", device.Id);
+ SetDeviceParameters(command, device);
+ command.ExecuteNonQuery();
+ }
+ }
+ }
+
+ // Удаление устройства
+ public static void DeleteDevice(int id)
+ {
+ using (var connection = new SQLiteConnection(ConnectionString))
+ {
+ connection.Open();
+ string query = "DELETE FROM Devices WHERE Id = @Id";
+
+ using (var command = new SQLiteCommand(query, connection))
+ {
+ command.Parameters.AddWithValue("@Id", id);
+ command.ExecuteNonQuery();
+ }
+ }
+ }
+
+ // Фильтрация устройств
+ public static List FilterDevices(DeviceType? type = null, DeviceState? state = null,
+ string location = null, string searchText = null)
+ {
+ List devices = new List();
+ StringBuilder queryBuilder = new StringBuilder("SELECT * FROM Devices WHERE 1=1");
+ Dictionary parameters = new Dictionary();
+
+ if (type.HasValue)
+ {
+ queryBuilder.Append(" AND Type = @Type");
+ parameters.Add("@Type", (int)type.Value);
+ }
+
+ if (state.HasValue)
+ {
+ queryBuilder.Append(" AND State = @State");
+ parameters.Add("@State", (int)state.Value);
+ }
+
+ if (!string.IsNullOrEmpty(location))
+ {
+ queryBuilder.Append(" AND Location LIKE @Location");
+ parameters.Add("@Location", "%" + location + "%");
+ }
+
+ if (!string.IsNullOrEmpty(searchText))
+ {
+ queryBuilder.Append(" AND (Name LIKE @SearchText OR InventoryNumber LIKE @SearchText)");
+ parameters.Add("@SearchText", "%" + searchText.ToLower() + "%");
+ }
+
+ using (var connection = new SQLiteConnection(ConnectionString))
+ {
+ connection.Open();
+
+ using (var command = new SQLiteCommand(queryBuilder.ToString(), connection))
+ {
+ foreach (var param in parameters)
+ {
+ command.Parameters.AddWithValue(param.Key, param.Value);
+ }
+
+ using (var reader = command.ExecuteReader())
+ {
+ while (reader.Read())
+ {
+ devices.Add(ReadDeviceFromDb(reader));
+ }
+ }
+ }
+ }
+
+ return devices;
+ }
+
+ // Статистика по типам устройств
+ public static Dictionary GetDeviceTypeStats()
+ {
+ var result = new Dictionary();
+
+ using (var connection = new SQLiteConnection(ConnectionString))
+ {
+ connection.Open();
+ string query = "SELECT Type, COUNT(*) as Count FROM Devices GROUP BY Type";
+
+ using (var command = new SQLiteCommand(query, connection))
+ {
+ using (var reader = command.ExecuteReader())
+ {
+ while (reader.Read())
+ {
+ DeviceType type = (DeviceType)Convert.ToInt32(reader["Type"]);
+ int count = Convert.ToInt32(reader["Count"]);
+ result[type] = count;
+ }
+ }
+ }
+ }
+
+ return result;
+ }
+
+ // Экспорт данных в CSV
+ public static void ExportToCsv(string filePath)
+ {
+ var devices = GetAllDevices();
+
+ var lines = new List
+ {
+ "ID;Наименование;Инвентарный номер;Тип;Местоположение;Ответственное лицо;Состояние;Дата постановки на учёт"
+ };
+
+ foreach (var device in devices)
+ {
+ lines.Add($"{device.Id};{device.Name};{device.InventoryNumber};{device.TypeString};" +
+ $"{device.Location};{device.ResponsiblePerson};{device.StateString};{device.RegistrationDate:dd.MM.yyyy}");
+ }
+
+ File.WriteAllLines(filePath, lines, Encoding.UTF8);
+ }
+
+ #endregion
+
+ #region Вспомогательные методы
+
+ // Чтение устройства из базы данных
+ private static Device ReadDeviceFromDb(SQLiteDataReader reader)
+ {
+ return new Device
+ {
+ Id = Convert.ToInt32(reader["Id"]),
+ Name = reader["Name"].ToString(),
+ InventoryNumber = reader["InventoryNumber"].ToString(),
+ Type = (DeviceType)Convert.ToInt32(reader["Type"]),
+ Location = reader["Location"].ToString(),
+ ResponsiblePerson = reader["ResponsiblePerson"].ToString(),
+ State = (DeviceState)Convert.ToInt32(reader["State"]),
+ RegistrationDate = Convert.ToDateTime(reader["RegistrationDate"])
+ };
+ }
+
+ // Установка параметров устройства для команды SQLite
+ private static void SetDeviceParameters(SQLiteCommand command, Device device)
+ {
+ command.Parameters.AddWithValue("@Name", device.Name);
+ command.Parameters.AddWithValue("@InventoryNumber", device.InventoryNumber);
+ command.Parameters.AddWithValue("@Type", (int)device.Type);
+ command.Parameters.AddWithValue("@Location", device.Location ?? string.Empty);
+ command.Parameters.AddWithValue("@ResponsiblePerson", device.ResponsiblePerson ?? string.Empty);
+ command.Parameters.AddWithValue("@State", (int)device.State);
+ command.Parameters.AddWithValue("@RegistrationDate", device.RegistrationDate.ToString("yyyy-MM-dd HH:mm:ss"));
+ }
+
+ #endregion
+ }
+}
diff --git a/Form1.Designer.cs b/Form1.Designer.cs
new file mode 100644
index 0000000..b9e726b
--- /dev/null
+++ b/Form1.Designer.cs
@@ -0,0 +1,816 @@
+using MetroFramework.Controls;
+using MetroFramework.Forms;
+
+namespace Учет_вещей
+{
+ partial class Form1
+ {
+ private System.ComponentModel.IContainer components = null;
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ private void InitializeComponent()
+ {
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle19 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle20 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle21 = new System.Windows.Forms.DataGridViewCellStyle();
+ this.dgvDevices = new MetroFramework.Controls.MetroGrid();
+ this.panelControls = new System.Windows.Forms.Panel();
+ this.btnExport = new MetroFramework.Controls.MetroButton();
+ this.btnResetFilter = new MetroFramework.Controls.MetroButton();
+ this.btnFilter = new MetroFramework.Controls.MetroButton();
+ this.txtSearch = new MetroFramework.Controls.MetroTextBox();
+ this.label10 = new MetroFramework.Controls.MetroLabel();
+ this.txtFilterLocation = new MetroFramework.Controls.MetroTextBox();
+ this.label9 = new MetroFramework.Controls.MetroLabel();
+ this.cmbFilterState = new MetroFramework.Controls.MetroComboBox();
+ this.label8 = new MetroFramework.Controls.MetroLabel();
+ this.cmbFilterType = new MetroFramework.Controls.MetroComboBox();
+ this.label7 = new MetroFramework.Controls.MetroLabel();
+ this.panelDeviceDetails = new System.Windows.Forms.Panel();
+ this.dtpRegistrationDate = new MetroFramework.Controls.MetroDateTime();
+ this.label6 = new MetroFramework.Controls.MetroLabel();
+ this.cmbDeviceState = new MetroFramework.Controls.MetroComboBox();
+ this.label5 = new MetroFramework.Controls.MetroLabel();
+ this.txtResponsiblePerson = new MetroFramework.Controls.MetroTextBox();
+ this.label4 = new MetroFramework.Controls.MetroLabel();
+ this.txtLocation = new MetroFramework.Controls.MetroTextBox();
+ this.label3 = new MetroFramework.Controls.MetroLabel();
+ this.cmbDeviceType = new MetroFramework.Controls.MetroComboBox();
+ this.label2 = new MetroFramework.Controls.MetroLabel();
+ this.txtInventoryNumber = new MetroFramework.Controls.MetroTextBox();
+ this.label1 = new MetroFramework.Controls.MetroLabel();
+ this.txtDeviceName = new MetroFramework.Controls.MetroTextBox();
+ this.lblDeviceName = new MetroFramework.Controls.MetroLabel();
+ this.btnSave = new MetroFramework.Controls.MetroButton();
+ this.btnDelete = new MetroFramework.Controls.MetroButton();
+ this.btnEdit = new MetroFramework.Controls.MetroButton();
+ this.btnAdd = new MetroFramework.Controls.MetroButton();
+ this.tabControl1 = new MetroFramework.Controls.MetroTabControl();
+ this.tabPageDevices = new MetroFramework.Controls.MetroTabPage();
+ this.tabPageStatistics = new MetroFramework.Controls.MetroTabPage();
+ this.lvStatistics = new System.Windows.Forms.ListView();
+ this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ ((System.ComponentModel.ISupportInitialize)(this.dgvDevices)).BeginInit();
+ this.panelControls.SuspendLayout();
+ this.panelDeviceDetails.SuspendLayout();
+ this.tabControl1.SuspendLayout();
+ this.tabPageDevices.SuspendLayout();
+ this.tabPageStatistics.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // dgvDevices
+ //
+ this.dgvDevices.AllowUserToAddRows = false;
+ this.dgvDevices.AllowUserToDeleteRows = false;
+ this.dgvDevices.AllowUserToResizeRows = false;
+ this.dgvDevices.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.dgvDevices.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
+ this.dgvDevices.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
+ this.dgvDevices.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.dgvDevices.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
+ this.dgvDevices.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
+ dataGridViewCellStyle19.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+ dataGridViewCellStyle19.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(219)))));
+ dataGridViewCellStyle19.Font = new System.Drawing.Font("Segoe UI", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
+ dataGridViewCellStyle19.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
+ dataGridViewCellStyle19.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(198)))), ((int)(((byte)(247)))));
+ dataGridViewCellStyle19.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17)))));
+ dataGridViewCellStyle19.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+ this.dgvDevices.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle19;
+ this.dgvDevices.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dataGridViewCellStyle20.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+ dataGridViewCellStyle20.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
+ dataGridViewCellStyle20.Font = new System.Drawing.Font("Segoe UI", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
+ dataGridViewCellStyle20.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(136)))), ((int)(((byte)(136)))));
+ dataGridViewCellStyle20.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(198)))), ((int)(((byte)(247)))));
+ dataGridViewCellStyle20.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17)))));
+ dataGridViewCellStyle20.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
+ this.dgvDevices.DefaultCellStyle = dataGridViewCellStyle20;
+ this.dgvDevices.EnableHeadersVisualStyles = false;
+ this.dgvDevices.Font = new System.Drawing.Font("Segoe UI", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
+ this.dgvDevices.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
+ this.dgvDevices.Location = new System.Drawing.Point(10, 62);
+ this.dgvDevices.Margin = new System.Windows.Forms.Padding(10);
+ this.dgvDevices.MultiSelect = false;
+ this.dgvDevices.Name = "dgvDevices";
+ this.dgvDevices.ReadOnly = true;
+ this.dgvDevices.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
+ dataGridViewCellStyle21.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+ dataGridViewCellStyle21.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(219)))));
+ dataGridViewCellStyle21.Font = new System.Drawing.Font("Segoe UI", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
+ dataGridViewCellStyle21.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
+ dataGridViewCellStyle21.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(198)))), ((int)(((byte)(247)))));
+ dataGridViewCellStyle21.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17)))));
+ dataGridViewCellStyle21.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+ this.dgvDevices.RowHeadersDefaultCellStyle = dataGridViewCellStyle21;
+ this.dgvDevices.RowHeadersVisible = false;
+ this.dgvDevices.RowHeadersWidth = 51;
+ this.dgvDevices.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
+ this.dgvDevices.RowTemplate.Height = 24;
+ this.dgvDevices.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
+ this.dgvDevices.Size = new System.Drawing.Size(916, 225);
+ this.dgvDevices.TabIndex = 0;
+ //
+ // panelControls
+ //
+ this.panelControls.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.panelControls.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(255)))));
+ this.panelControls.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ this.panelControls.Controls.Add(this.btnExport);
+ this.panelControls.Controls.Add(this.btnResetFilter);
+ this.panelControls.Controls.Add(this.btnFilter);
+ this.panelControls.Controls.Add(this.txtSearch);
+ this.panelControls.Controls.Add(this.label10);
+ this.panelControls.Controls.Add(this.txtFilterLocation);
+ this.panelControls.Controls.Add(this.label9);
+ this.panelControls.Controls.Add(this.cmbFilterState);
+ this.panelControls.Controls.Add(this.label8);
+ this.panelControls.Controls.Add(this.cmbFilterType);
+ this.panelControls.Controls.Add(this.label7);
+ this.panelControls.Location = new System.Drawing.Point(10, 10);
+ this.panelControls.Margin = new System.Windows.Forms.Padding(10);
+ this.panelControls.Name = "panelControls";
+ this.panelControls.Size = new System.Drawing.Size(916, 42);
+ this.panelControls.TabIndex = 1;
+ //
+ // btnExport
+ //
+ this.btnExport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnExport.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(177)))), ((int)(((byte)(89)))));
+ this.btnExport.ForeColor = System.Drawing.Color.White;
+ this.btnExport.Highlight = true;
+ this.btnExport.Location = new System.Drawing.Point(838, 9);
+ this.btnExport.Margin = new System.Windows.Forms.Padding(2);
+ this.btnExport.Name = "btnExport";
+ this.btnExport.Size = new System.Drawing.Size(70, 23);
+ this.btnExport.TabIndex = 10;
+ this.btnExport.Text = "Экспорт";
+ this.btnExport.UseCustomBackColor = true;
+ this.btnExport.UseCustomForeColor = true;
+ this.btnExport.UseSelectable = true;
+ this.btnExport.Click += new System.EventHandler(this.btnExport_Click);
+ //
+ // btnResetFilter
+ //
+ this.btnResetFilter.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnResetFilter.BackColor = System.Drawing.Color.Silver;
+ this.btnResetFilter.ForeColor = System.Drawing.Color.White;
+ this.btnResetFilter.Location = new System.Drawing.Point(763, 9);
+ this.btnResetFilter.Margin = new System.Windows.Forms.Padding(2);
+ this.btnResetFilter.Name = "btnResetFilter";
+ this.btnResetFilter.Size = new System.Drawing.Size(71, 23);
+ this.btnResetFilter.TabIndex = 9;
+ this.btnResetFilter.Text = "Сбросить";
+ this.btnResetFilter.UseCustomBackColor = true;
+ this.btnResetFilter.UseCustomForeColor = true;
+ this.btnResetFilter.UseSelectable = true;
+ this.btnResetFilter.Click += new System.EventHandler(this.btnResetFilter_Click);
+ //
+ // btnFilter
+ //
+ this.btnFilter.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnFilter.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(219)))));
+ this.btnFilter.ForeColor = System.Drawing.Color.White;
+ this.btnFilter.Highlight = true;
+ this.btnFilter.Location = new System.Drawing.Point(711, 9);
+ this.btnFilter.Margin = new System.Windows.Forms.Padding(2);
+ this.btnFilter.Name = "btnFilter";
+ this.btnFilter.Size = new System.Drawing.Size(48, 23);
+ this.btnFilter.TabIndex = 8;
+ this.btnFilter.Text = "Поиск";
+ this.btnFilter.UseCustomBackColor = true;
+ this.btnFilter.UseCustomForeColor = true;
+ this.btnFilter.UseSelectable = true;
+ this.btnFilter.Click += new System.EventHandler(this.btnFilter_Click);
+ //
+ // txtSearch
+ //
+ this.txtSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ //
+ //
+ //
+ this.txtSearch.CustomButton.Image = null;
+ this.txtSearch.CustomButton.Location = new System.Drawing.Point(74, 1);
+ this.txtSearch.CustomButton.Name = "";
+ this.txtSearch.CustomButton.Size = new System.Drawing.Size(21, 21);
+ this.txtSearch.CustomButton.Style = MetroFramework.MetroColorStyle.Blue;
+ this.txtSearch.CustomButton.TabIndex = 1;
+ this.txtSearch.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light;
+ this.txtSearch.CustomButton.UseSelectable = true;
+ this.txtSearch.CustomButton.Visible = false;
+ this.txtSearch.Lines = new string[0];
+ this.txtSearch.Location = new System.Drawing.Point(601, 9);
+ this.txtSearch.Margin = new System.Windows.Forms.Padding(2);
+ this.txtSearch.MaxLength = 32767;
+ this.txtSearch.Name = "txtSearch";
+ this.txtSearch.PasswordChar = '\0';
+ this.txtSearch.PromptText = "Поиск...";
+ this.txtSearch.ScrollBars = System.Windows.Forms.ScrollBars.None;
+ this.txtSearch.SelectedText = "";
+ this.txtSearch.SelectionLength = 0;
+ this.txtSearch.SelectionStart = 0;
+ this.txtSearch.ShortcutsEnabled = true;
+ this.txtSearch.Size = new System.Drawing.Size(104, 23);
+ this.txtSearch.TabIndex = 7;
+ this.txtSearch.UseSelectable = true;
+ this.txtSearch.WaterMark = "Поиск...";
+ this.txtSearch.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109)))));
+ this.txtSearch.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel);
+ //
+ // label10
+ //
+ this.label10.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.label10.AutoSize = true;
+ this.label10.Location = new System.Drawing.Point(560, 10);
+ this.label10.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.label10.Name = "label10";
+ this.label10.Size = new System.Drawing.Size(43, 19);
+ this.label10.TabIndex = 6;
+ this.label10.Text = "Текст:";
+ //
+ // txtFilterLocation
+ //
+ //
+ //
+ //
+ this.txtFilterLocation.CustomButton.Image = null;
+ this.txtFilterLocation.CustomButton.Location = new System.Drawing.Point(54, 1);
+ this.txtFilterLocation.CustomButton.Name = "";
+ this.txtFilterLocation.CustomButton.Size = new System.Drawing.Size(21, 21);
+ this.txtFilterLocation.CustomButton.Style = MetroFramework.MetroColorStyle.Blue;
+ this.txtFilterLocation.CustomButton.TabIndex = 1;
+ this.txtFilterLocation.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light;
+ this.txtFilterLocation.CustomButton.UseSelectable = true;
+ this.txtFilterLocation.CustomButton.Visible = false;
+ this.txtFilterLocation.Lines = new string[0];
+ this.txtFilterLocation.Location = new System.Drawing.Point(439, 9);
+ this.txtFilterLocation.Margin = new System.Windows.Forms.Padding(2);
+ this.txtFilterLocation.MaxLength = 32767;
+ this.txtFilterLocation.Name = "txtFilterLocation";
+ this.txtFilterLocation.PasswordChar = '\0';
+ this.txtFilterLocation.PromptText = "Кабинет...";
+ this.txtFilterLocation.ScrollBars = System.Windows.Forms.ScrollBars.None;
+ this.txtFilterLocation.SelectedText = "";
+ this.txtFilterLocation.SelectionLength = 0;
+ this.txtFilterLocation.SelectionStart = 0;
+ this.txtFilterLocation.ShortcutsEnabled = true;
+ this.txtFilterLocation.Size = new System.Drawing.Size(104, 23);
+ this.txtFilterLocation.TabIndex = 5;
+ this.txtFilterLocation.UseSelectable = true;
+ this.txtFilterLocation.WaterMark = "Кабинет...";
+ this.txtFilterLocation.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109)))));
+ this.txtFilterLocation.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel);
+ //
+ // label9
+ //
+ this.label9.AutoSize = true;
+ this.label9.Location = new System.Drawing.Point(378, 10);
+ this.label9.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.label9.Name = "label9";
+ this.label9.Size = new System.Drawing.Size(62, 19);
+ this.label9.TabIndex = 4;
+ this.label9.Text = "Кабинет:";
+ //
+ // cmbFilterState
+ //
+ this.cmbFilterState.FormattingEnabled = true;
+ this.cmbFilterState.ItemHeight = 23;
+ this.cmbFilterState.Location = new System.Drawing.Point(242, 6);
+ this.cmbFilterState.Margin = new System.Windows.Forms.Padding(2);
+ this.cmbFilterState.Name = "cmbFilterState";
+ this.cmbFilterState.PromptText = "Состояние";
+ this.cmbFilterState.Size = new System.Drawing.Size(120, 29);
+ this.cmbFilterState.TabIndex = 3;
+ this.cmbFilterState.UseSelectable = true;
+ //
+ // label8
+ //
+ this.label8.AutoSize = true;
+ this.label8.Location = new System.Drawing.Point(164, 10);
+ this.label8.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.label8.Name = "label8";
+ this.label8.Size = new System.Drawing.Size(78, 19);
+ this.label8.TabIndex = 2;
+ this.label8.Text = "Состояние:";
+ //
+ // cmbFilterType
+ //
+ this.cmbFilterType.FormattingEnabled = true;
+ this.cmbFilterType.ItemHeight = 23;
+ this.cmbFilterType.Location = new System.Drawing.Point(43, 6);
+ this.cmbFilterType.Margin = new System.Windows.Forms.Padding(2);
+ this.cmbFilterType.Name = "cmbFilterType";
+ this.cmbFilterType.PromptText = "Тип";
+ this.cmbFilterType.Size = new System.Drawing.Size(104, 29);
+ this.cmbFilterType.TabIndex = 1;
+ this.cmbFilterType.UseSelectable = true;
+ //
+ // label7
+ //
+ this.label7.AutoSize = true;
+ this.label7.Location = new System.Drawing.Point(8, 10);
+ this.label7.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.label7.Name = "label7";
+ this.label7.Size = new System.Drawing.Size(35, 19);
+ this.label7.TabIndex = 0;
+ this.label7.Text = "Тип:";
+ //
+ // panelDeviceDetails
+ //
+ this.panelDeviceDetails.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.panelDeviceDetails.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(255)))));
+ this.panelDeviceDetails.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ this.panelDeviceDetails.Controls.Add(this.dtpRegistrationDate);
+ this.panelDeviceDetails.Controls.Add(this.label6);
+ this.panelDeviceDetails.Controls.Add(this.cmbDeviceState);
+ this.panelDeviceDetails.Controls.Add(this.label5);
+ this.panelDeviceDetails.Controls.Add(this.txtResponsiblePerson);
+ this.panelDeviceDetails.Controls.Add(this.label4);
+ this.panelDeviceDetails.Controls.Add(this.txtLocation);
+ this.panelDeviceDetails.Controls.Add(this.label3);
+ this.panelDeviceDetails.Controls.Add(this.cmbDeviceType);
+ this.panelDeviceDetails.Controls.Add(this.label2);
+ this.panelDeviceDetails.Controls.Add(this.txtInventoryNumber);
+ this.panelDeviceDetails.Controls.Add(this.label1);
+ this.panelDeviceDetails.Controls.Add(this.txtDeviceName);
+ this.panelDeviceDetails.Controls.Add(this.lblDeviceName);
+ this.panelDeviceDetails.Controls.Add(this.btnSave);
+ this.panelDeviceDetails.Controls.Add(this.btnDelete);
+ this.panelDeviceDetails.Controls.Add(this.btnEdit);
+ this.panelDeviceDetails.Controls.Add(this.btnAdd);
+ this.panelDeviceDetails.Location = new System.Drawing.Point(10, 306);
+ this.panelDeviceDetails.Margin = new System.Windows.Forms.Padding(20);
+ this.panelDeviceDetails.Name = "panelDeviceDetails";
+ this.panelDeviceDetails.Size = new System.Drawing.Size(916, 96);
+ this.panelDeviceDetails.TabIndex = 2;
+ //
+ // dtpRegistrationDate
+ //
+ this.dtpRegistrationDate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.dtpRegistrationDate.Format = System.Windows.Forms.DateTimePickerFormat.Short;
+ this.dtpRegistrationDate.Location = new System.Drawing.Point(806, 45);
+ this.dtpRegistrationDate.Margin = new System.Windows.Forms.Padding(2);
+ this.dtpRegistrationDate.MinimumSize = new System.Drawing.Size(0, 29);
+ this.dtpRegistrationDate.Name = "dtpRegistrationDate";
+ this.dtpRegistrationDate.Size = new System.Drawing.Size(102, 29);
+ this.dtpRegistrationDate.TabIndex = 17;
+ //
+ // label6
+ //
+ this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.label6.AutoSize = true;
+ this.label6.Location = new System.Drawing.Point(765, 50);
+ this.label6.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(40, 19);
+ this.label6.TabIndex = 16;
+ this.label6.Text = "Дата:";
+ //
+ // cmbDeviceState
+ //
+ this.cmbDeviceState.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.cmbDeviceState.FormattingEnabled = true;
+ this.cmbDeviceState.ItemHeight = 23;
+ this.cmbDeviceState.Location = new System.Drawing.Point(806, 8);
+ this.cmbDeviceState.Margin = new System.Windows.Forms.Padding(2);
+ this.cmbDeviceState.Name = "cmbDeviceState";
+ this.cmbDeviceState.PromptText = "Состояние";
+ this.cmbDeviceState.Size = new System.Drawing.Size(102, 29);
+ this.cmbDeviceState.TabIndex = 15;
+ this.cmbDeviceState.UseSelectable = true;
+ //
+ // label5
+ //
+ this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.label5.AutoSize = true;
+ this.label5.Location = new System.Drawing.Point(728, 12);
+ this.label5.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(78, 19);
+ this.label5.TabIndex = 14;
+ this.label5.Text = "Состояние:";
+ //
+ // txtResponsiblePerson
+ //
+ this.txtResponsiblePerson.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ //
+ //
+ //
+ this.txtResponsiblePerson.CustomButton.Image = null;
+ this.txtResponsiblePerson.CustomButton.Location = new System.Drawing.Point(273, 1);
+ this.txtResponsiblePerson.CustomButton.Name = "";
+ this.txtResponsiblePerson.CustomButton.Size = new System.Drawing.Size(21, 21);
+ this.txtResponsiblePerson.CustomButton.Style = MetroFramework.MetroColorStyle.Blue;
+ this.txtResponsiblePerson.CustomButton.TabIndex = 1;
+ this.txtResponsiblePerson.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light;
+ this.txtResponsiblePerson.CustomButton.UseSelectable = true;
+ this.txtResponsiblePerson.CustomButton.Visible = false;
+ this.txtResponsiblePerson.Lines = new string[0];
+ this.txtResponsiblePerson.Location = new System.Drawing.Point(509, 48);
+ this.txtResponsiblePerson.Margin = new System.Windows.Forms.Padding(2);
+ this.txtResponsiblePerson.MaxLength = 32767;
+ this.txtResponsiblePerson.Name = "txtResponsiblePerson";
+ this.txtResponsiblePerson.PasswordChar = '\0';
+ this.txtResponsiblePerson.PromptText = "Отв. лицо";
+ this.txtResponsiblePerson.ScrollBars = System.Windows.Forms.ScrollBars.None;
+ this.txtResponsiblePerson.SelectedText = "";
+ this.txtResponsiblePerson.SelectionLength = 0;
+ this.txtResponsiblePerson.SelectionStart = 0;
+ this.txtResponsiblePerson.ShortcutsEnabled = true;
+ this.txtResponsiblePerson.Size = new System.Drawing.Size(212, 23);
+ this.txtResponsiblePerson.TabIndex = 13;
+ this.txtResponsiblePerson.UseSelectable = true;
+ this.txtResponsiblePerson.WaterMark = "Отв. лицо";
+ this.txtResponsiblePerson.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109)))));
+ this.txtResponsiblePerson.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel);
+ //
+ // label4
+ //
+ this.label4.AutoSize = true;
+ this.label4.Location = new System.Drawing.Point(429, 50);
+ this.label4.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(73, 19);
+ this.label4.TabIndex = 12;
+ this.label4.Text = "Отв. лицо:";
+ //
+ // txtLocation
+ //
+ this.txtLocation.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ //
+ //
+ //
+ this.txtLocation.CustomButton.Image = null;
+ this.txtLocation.CustomButton.Location = new System.Drawing.Point(273, 1);
+ this.txtLocation.CustomButton.Name = "";
+ this.txtLocation.CustomButton.Size = new System.Drawing.Size(21, 21);
+ this.txtLocation.CustomButton.Style = MetroFramework.MetroColorStyle.Blue;
+ this.txtLocation.CustomButton.TabIndex = 1;
+ this.txtLocation.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light;
+ this.txtLocation.CustomButton.UseSelectable = true;
+ this.txtLocation.CustomButton.Visible = false;
+ this.txtLocation.Lines = new string[0];
+ this.txtLocation.Location = new System.Drawing.Point(509, 12);
+ this.txtLocation.Margin = new System.Windows.Forms.Padding(2);
+ this.txtLocation.MaxLength = 32767;
+ this.txtLocation.Name = "txtLocation";
+ this.txtLocation.PasswordChar = '\0';
+ this.txtLocation.PromptText = "Кабинет";
+ this.txtLocation.ScrollBars = System.Windows.Forms.ScrollBars.None;
+ this.txtLocation.SelectedText = "";
+ this.txtLocation.SelectionLength = 0;
+ this.txtLocation.SelectionStart = 0;
+ this.txtLocation.ShortcutsEnabled = true;
+ this.txtLocation.Size = new System.Drawing.Size(212, 23);
+ this.txtLocation.TabIndex = 11;
+ this.txtLocation.UseSelectable = true;
+ this.txtLocation.WaterMark = "Кабинет";
+ this.txtLocation.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109)))));
+ this.txtLocation.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel);
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(439, 12);
+ this.label3.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(62, 19);
+ this.label3.TabIndex = 10;
+ this.label3.Text = "Кабинет:";
+ //
+ // cmbDeviceType
+ //
+ this.cmbDeviceType.FormattingEnabled = true;
+ this.cmbDeviceType.ItemHeight = 23;
+ this.cmbDeviceType.Location = new System.Drawing.Point(336, 8);
+ this.cmbDeviceType.Margin = new System.Windows.Forms.Padding(2);
+ this.cmbDeviceType.Name = "cmbDeviceType";
+ this.cmbDeviceType.PromptText = "Тип";
+ this.cmbDeviceType.Size = new System.Drawing.Size(76, 29);
+ this.cmbDeviceType.TabIndex = 9;
+ this.cmbDeviceType.UseSelectable = true;
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(294, 12);
+ this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(35, 19);
+ this.label2.TabIndex = 8;
+ this.label2.Text = "Тип:";
+ //
+ // txtInventoryNumber
+ //
+ //
+ //
+ //
+ this.txtInventoryNumber.CustomButton.Image = null;
+ this.txtInventoryNumber.CustomButton.Location = new System.Drawing.Point(54, 1);
+ this.txtInventoryNumber.CustomButton.Name = "";
+ this.txtInventoryNumber.CustomButton.Size = new System.Drawing.Size(21, 21);
+ this.txtInventoryNumber.CustomButton.Style = MetroFramework.MetroColorStyle.Blue;
+ this.txtInventoryNumber.CustomButton.TabIndex = 1;
+ this.txtInventoryNumber.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light;
+ this.txtInventoryNumber.CustomButton.UseSelectable = true;
+ this.txtInventoryNumber.CustomButton.Visible = false;
+ this.txtInventoryNumber.Lines = new string[0];
+ this.txtInventoryNumber.Location = new System.Drawing.Point(336, 48);
+ this.txtInventoryNumber.Margin = new System.Windows.Forms.Padding(2);
+ this.txtInventoryNumber.MaxLength = 32767;
+ this.txtInventoryNumber.Name = "txtInventoryNumber";
+ this.txtInventoryNumber.PasswordChar = '\0';
+ this.txtInventoryNumber.PromptText = "Инв. №";
+ this.txtInventoryNumber.ScrollBars = System.Windows.Forms.ScrollBars.None;
+ this.txtInventoryNumber.SelectedText = "";
+ this.txtInventoryNumber.SelectionLength = 0;
+ this.txtInventoryNumber.SelectionStart = 0;
+ this.txtInventoryNumber.ShortcutsEnabled = true;
+ this.txtInventoryNumber.Size = new System.Drawing.Size(76, 23);
+ this.txtInventoryNumber.TabIndex = 7;
+ this.txtInventoryNumber.UseSelectable = true;
+ this.txtInventoryNumber.WaterMark = "Инв. №";
+ this.txtInventoryNumber.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109)))));
+ this.txtInventoryNumber.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel);
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(270, 50);
+ this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(60, 19);
+ this.label1.TabIndex = 6;
+ this.label1.Text = "Инв. №:";
+ //
+ // txtDeviceName
+ //
+ //
+ //
+ //
+ this.txtDeviceName.CustomButton.Image = null;
+ this.txtDeviceName.CustomButton.Location = new System.Drawing.Point(86, 1);
+ this.txtDeviceName.CustomButton.Name = "";
+ this.txtDeviceName.CustomButton.Size = new System.Drawing.Size(21, 21);
+ this.txtDeviceName.CustomButton.Style = MetroFramework.MetroColorStyle.Blue;
+ this.txtDeviceName.CustomButton.TabIndex = 1;
+ this.txtDeviceName.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light;
+ this.txtDeviceName.CustomButton.UseSelectable = true;
+ this.txtDeviceName.CustomButton.Visible = false;
+ this.txtDeviceName.Lines = new string[0];
+ this.txtDeviceName.Location = new System.Drawing.Point(168, 12);
+ this.txtDeviceName.Margin = new System.Windows.Forms.Padding(2);
+ this.txtDeviceName.MaxLength = 32767;
+ this.txtDeviceName.Name = "txtDeviceName";
+ this.txtDeviceName.PasswordChar = '\0';
+ this.txtDeviceName.PromptText = "Название устройства";
+ this.txtDeviceName.ScrollBars = System.Windows.Forms.ScrollBars.None;
+ this.txtDeviceName.SelectedText = "";
+ this.txtDeviceName.SelectionLength = 0;
+ this.txtDeviceName.SelectionStart = 0;
+ this.txtDeviceName.ShortcutsEnabled = true;
+ this.txtDeviceName.Size = new System.Drawing.Size(108, 23);
+ this.txtDeviceName.TabIndex = 5;
+ this.txtDeviceName.UseSelectable = true;
+ this.txtDeviceName.WaterMark = "Название устройства";
+ this.txtDeviceName.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109)))));
+ this.txtDeviceName.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel);
+ //
+ // lblDeviceName
+ //
+ this.lblDeviceName.AutoSize = true;
+ this.lblDeviceName.Location = new System.Drawing.Point(96, 12);
+ this.lblDeviceName.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.lblDeviceName.Name = "lblDeviceName";
+ this.lblDeviceName.Size = new System.Drawing.Size(71, 19);
+ this.lblDeviceName.TabIndex = 4;
+ this.lblDeviceName.Text = "Название:";
+ this.lblDeviceName.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // btnSave
+ //
+ this.btnSave.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(177)))), ((int)(((byte)(89)))));
+ this.btnSave.ForeColor = System.Drawing.Color.White;
+ this.btnSave.Highlight = true;
+ this.btnSave.Location = new System.Drawing.Point(10, 69);
+ this.btnSave.Margin = new System.Windows.Forms.Padding(4);
+ this.btnSave.Name = "btnSave";
+ this.btnSave.Size = new System.Drawing.Size(82, 17);
+ this.btnSave.TabIndex = 3;
+ this.btnSave.Text = "Сохранить";
+ this.btnSave.UseCustomBackColor = true;
+ this.btnSave.UseCustomForeColor = true;
+ this.btnSave.UseSelectable = true;
+ this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
+ //
+ // btnDelete
+ //
+ this.btnDelete.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(209)))), ((int)(((byte)(17)))), ((int)(((byte)(65)))));
+ this.btnDelete.ForeColor = System.Drawing.Color.White;
+ this.btnDelete.Location = new System.Drawing.Point(10, 49);
+ this.btnDelete.Margin = new System.Windows.Forms.Padding(4);
+ this.btnDelete.Name = "btnDelete";
+ this.btnDelete.Size = new System.Drawing.Size(82, 17);
+ this.btnDelete.TabIndex = 2;
+ this.btnDelete.Text = "Удалить";
+ this.btnDelete.UseCustomBackColor = true;
+ this.btnDelete.UseCustomForeColor = true;
+ this.btnDelete.UseSelectable = true;
+ this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click);
+ //
+ // btnEdit
+ //
+ this.btnEdit.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(219)))));
+ this.btnEdit.ForeColor = System.Drawing.Color.White;
+ this.btnEdit.Location = new System.Drawing.Point(10, 30);
+ this.btnEdit.Margin = new System.Windows.Forms.Padding(4);
+ this.btnEdit.Name = "btnEdit";
+ this.btnEdit.Size = new System.Drawing.Size(82, 17);
+ this.btnEdit.TabIndex = 1;
+ this.btnEdit.Text = "Изменить";
+ this.btnEdit.UseCustomBackColor = true;
+ this.btnEdit.UseCustomForeColor = true;
+ this.btnEdit.UseSelectable = true;
+ this.btnEdit.Click += new System.EventHandler(this.btnEdit_Click);
+ //
+ // btnAdd
+ //
+ this.btnAdd.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(219)))));
+ this.btnAdd.ForeColor = System.Drawing.Color.White;
+ this.btnAdd.Highlight = true;
+ this.btnAdd.Location = new System.Drawing.Point(10, 10);
+ this.btnAdd.Margin = new System.Windows.Forms.Padding(4);
+ this.btnAdd.Name = "btnAdd";
+ this.btnAdd.Size = new System.Drawing.Size(82, 17);
+ this.btnAdd.TabIndex = 0;
+ this.btnAdd.Text = "Очистить";
+ this.btnAdd.UseCustomBackColor = true;
+ this.btnAdd.UseCustomForeColor = true;
+ this.btnAdd.UseSelectable = true;
+ this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
+ //
+ // tabControl1
+ //
+ this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tabControl1.Controls.Add(this.tabPageDevices);
+ this.tabControl1.Controls.Add(this.tabPageStatistics);
+ this.tabControl1.Location = new System.Drawing.Point(10, 42);
+ this.tabControl1.Margin = new System.Windows.Forms.Padding(10);
+ this.tabControl1.Name = "tabControl1";
+ this.tabControl1.SelectedIndex = 0;
+ this.tabControl1.Size = new System.Drawing.Size(943, 444);
+ this.tabControl1.TabIndex = 4;
+ this.tabControl1.UseSelectable = true;
+ //
+ // tabPageDevices
+ //
+ this.tabPageDevices.Controls.Add(this.dgvDevices);
+ this.tabPageDevices.Controls.Add(this.panelControls);
+ this.tabPageDevices.Controls.Add(this.panelDeviceDetails);
+ this.tabPageDevices.HorizontalScrollbarBarColor = true;
+ this.tabPageDevices.HorizontalScrollbarHighlightOnWheel = false;
+ this.tabPageDevices.HorizontalScrollbarSize = 8;
+ this.tabPageDevices.Location = new System.Drawing.Point(4, 38);
+ this.tabPageDevices.Margin = new System.Windows.Forms.Padding(2);
+ this.tabPageDevices.Name = "tabPageDevices";
+ this.tabPageDevices.Padding = new System.Windows.Forms.Padding(2);
+ this.tabPageDevices.Size = new System.Drawing.Size(935, 402);
+ this.tabPageDevices.TabIndex = 0;
+ this.tabPageDevices.Text = "Оборудование";
+ this.tabPageDevices.VerticalScrollbarBarColor = true;
+ this.tabPageDevices.VerticalScrollbarHighlightOnWheel = false;
+ this.tabPageDevices.VerticalScrollbarSize = 8;
+ //
+ // tabPageStatistics
+ //
+ this.tabPageStatistics.Controls.Add(this.lvStatistics);
+ this.tabPageStatistics.HorizontalScrollbarBarColor = true;
+ this.tabPageStatistics.HorizontalScrollbarHighlightOnWheel = false;
+ this.tabPageStatistics.HorizontalScrollbarSize = 8;
+ this.tabPageStatistics.Location = new System.Drawing.Point(4, 38);
+ this.tabPageStatistics.Margin = new System.Windows.Forms.Padding(2);
+ this.tabPageStatistics.Name = "tabPageStatistics";
+ this.tabPageStatistics.Padding = new System.Windows.Forms.Padding(2);
+ this.tabPageStatistics.Size = new System.Drawing.Size(935, 402);
+ this.tabPageStatistics.TabIndex = 1;
+ this.tabPageStatistics.Text = "Статистика";
+ this.tabPageStatistics.VerticalScrollbarBarColor = true;
+ this.tabPageStatistics.VerticalScrollbarHighlightOnWheel = false;
+ this.tabPageStatistics.VerticalScrollbarSize = 8;
+ //
+ // lvStatistics
+ //
+ this.lvStatistics.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lvStatistics.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.columnHeader1,
+ this.columnHeader2});
+ this.lvStatistics.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.lvStatistics.FullRowSelect = true;
+ this.lvStatistics.GridLines = true;
+ this.lvStatistics.HideSelection = false;
+ this.lvStatistics.Location = new System.Drawing.Point(10, 10);
+ this.lvStatistics.Margin = new System.Windows.Forms.Padding(10);
+ this.lvStatistics.Name = "lvStatistics";
+ this.lvStatistics.Size = new System.Drawing.Size(915, 382);
+ this.lvStatistics.TabIndex = 0;
+ this.lvStatistics.UseCompatibleStateImageBehavior = false;
+ this.lvStatistics.View = System.Windows.Forms.View.Details;
+ //
+ // columnHeader1
+ //
+ this.columnHeader1.Text = "Тип техники";
+ this.columnHeader1.Width = 200;
+ //
+ // columnHeader2
+ //
+ this.columnHeader2.Text = "Количество";
+ this.columnHeader2.Width = 120;
+ //
+ // Form1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(979, 535);
+ this.Controls.Add(this.tabControl1);
+ this.DisplayHeader = false;
+ this.Margin = new System.Windows.Forms.Padding(2);
+ this.MinimumSize = new System.Drawing.Size(776, 535);
+ this.Name = "Form1";
+ this.Padding = new System.Windows.Forms.Padding(20, 30, 20, 20);
+ this.Text = "Учёт техники в организации";
+ this.Load += new System.EventHandler(this.Form1_Load);
+ ((System.ComponentModel.ISupportInitialize)(this.dgvDevices)).EndInit();
+ this.panelControls.ResumeLayout(false);
+ this.panelControls.PerformLayout();
+ this.panelDeviceDetails.ResumeLayout(false);
+ this.panelDeviceDetails.PerformLayout();
+ this.tabControl1.ResumeLayout(false);
+ this.tabPageDevices.ResumeLayout(false);
+ this.tabPageStatistics.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private MetroFramework.Controls.MetroGrid dgvDevices;
+ private System.Windows.Forms.Panel panelControls;
+ private System.Windows.Forms.Panel panelDeviceDetails;
+ private MetroFramework.Controls.MetroButton btnSave;
+ private MetroFramework.Controls.MetroButton btnDelete;
+ private MetroFramework.Controls.MetroButton btnEdit;
+ private MetroFramework.Controls.MetroButton btnAdd;
+ private MetroFramework.Controls.MetroLabel lblDeviceName;
+ private MetroFramework.Controls.MetroTextBox txtDeviceName;
+ private MetroFramework.Controls.MetroTextBox txtInventoryNumber;
+ private MetroFramework.Controls.MetroLabel label1;
+ private MetroFramework.Controls.MetroComboBox cmbDeviceType;
+ private MetroFramework.Controls.MetroLabel label2;
+ private MetroFramework.Controls.MetroTextBox txtResponsiblePerson;
+ private MetroFramework.Controls.MetroLabel label4;
+ private MetroFramework.Controls.MetroTextBox txtLocation;
+ private MetroFramework.Controls.MetroLabel label3;
+ private MetroFramework.Controls.MetroDateTime dtpRegistrationDate;
+ private MetroFramework.Controls.MetroLabel label6;
+ private MetroFramework.Controls.MetroComboBox cmbDeviceState;
+ private MetroFramework.Controls.MetroLabel label5;
+ private MetroFramework.Controls.MetroComboBox cmbFilterType;
+ private MetroFramework.Controls.MetroLabel label7;
+ private MetroFramework.Controls.MetroComboBox cmbFilterState;
+ private MetroFramework.Controls.MetroLabel label8;
+ private MetroFramework.Controls.MetroTextBox txtFilterLocation;
+ private MetroFramework.Controls.MetroLabel label9;
+ private MetroFramework.Controls.MetroTextBox txtSearch;
+ private MetroFramework.Controls.MetroLabel label10;
+ private MetroFramework.Controls.MetroButton btnExport;
+ private MetroFramework.Controls.MetroButton btnResetFilter;
+ private MetroFramework.Controls.MetroButton btnFilter;
+ private MetroFramework.Controls.MetroTabControl tabControl1;
+ private MetroFramework.Controls.MetroTabPage tabPageDevices;
+ private MetroFramework.Controls.MetroTabPage tabPageStatistics;
+ private System.Windows.Forms.ListView lvStatistics;
+ private System.Windows.Forms.ColumnHeader columnHeader1;
+ private System.Windows.Forms.ColumnHeader columnHeader2;
+ }
+}
diff --git a/Form1.cs b/Form1.cs
new file mode 100644
index 0000000..e84143e
--- /dev/null
+++ b/Form1.cs
@@ -0,0 +1,327 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using MetroFramework;
+using MetroFramework.Forms;
+
+namespace Учет_вещей
+{
+ public partial class Form1 : MetroForm
+ {
+ private User _currentUser;
+ private Device _selectedDevice;
+
+ public Form1()
+ {
+ InitializeComponent();
+ this.Theme = MetroFramework.MetroThemeStyle.Light;
+ this.Style = MetroFramework.MetroColorStyle.Blue;
+ this.BorderStyle = MetroFormBorderStyle.FixedSingle;
+ this.ShadowType = MetroFormShadowType.AeroShadow;
+
+ this.Text = "Учет оборудования";
+ }
+
+ private void Form1_Load(object sender, EventArgs e)
+ {
+ // Показываем форму логина
+ using (var loginForm = new LoginForm())
+ {
+ if (loginForm.ShowDialog() == DialogResult.OK)
+ {
+ _currentUser = loginForm.CurrentUser;
+ ConfigureFormForUser();
+ RefreshDevicesGrid();
+ }
+ else
+ {
+ Close(); // Выход, если пользователь отменил вход
+ }
+ }
+
+ // Настройка ComboBox для типов устройств и состояний
+ cmbFilterType.Items.Add("Все типы");
+ foreach (DeviceType type in Enum.GetValues(typeof(DeviceType)))
+ {
+ cmbFilterType.Items.Add(type.ToString());
+ cmbDeviceType.Items.Add(type.ToString());
+ }
+ cmbFilterType.SelectedIndex = 0;
+
+ cmbFilterState.Items.Add("Все состояния");
+ foreach (DeviceState state in Enum.GetValues(typeof(DeviceState)))
+ {
+ cmbFilterState.Items.Add(state.ToString());
+ cmbDeviceState.Items.Add(state.ToString());
+ }
+ cmbFilterState.SelectedIndex = 0;
+
+ // Текущая дата для нового устройства
+ dtpRegistrationDate.Value = DateTime.Today;
+
+ // Обработчик выбора строки в DataGridView
+ dgvDevices.SelectionChanged += DgvDevices_SelectionChanged;
+ }
+
+ private void ConfigureFormForUser()
+ {
+ Text = $"Учёт техники в организации - {_currentUser.Username} ({_currentUser.Role})";
+
+ bool isAdmin = _currentUser.Role == UserRole.Admin;
+ btnAdd.Enabled = isAdmin;
+ btnEdit.Enabled = isAdmin;
+ btnDelete.Enabled = isAdmin;
+ btnSave.Enabled = isAdmin;
+ panelDeviceDetails.Enabled = isAdmin;
+ }
+
+ private void RefreshDevicesGrid(List devices = null)
+ {
+ devices = devices ?? DbManager.GetAllDevices();
+
+ dgvDevices.DataSource = null;
+ dgvDevices.DataSource = devices;
+
+ // Настройка столбцов
+ if (dgvDevices.Columns.Count > 0)
+ {
+ dgvDevices.Columns["Id"].HeaderText = "ID";
+ dgvDevices.Columns["Id"].Width = 40;
+ dgvDevices.Columns["Name"].HeaderText = "Наименование";
+ dgvDevices.Columns["Name"].Width = 150;
+ dgvDevices.Columns["InventoryNumber"].HeaderText = "Инв. номер";
+ dgvDevices.Columns["InventoryNumber"].Width = 80;
+ dgvDevices.Columns["TypeString"].HeaderText = "Тип";
+ dgvDevices.Columns["Type"].Visible = false;
+ dgvDevices.Columns["Location"].HeaderText = "Местоположение";
+ dgvDevices.Columns["ResponsiblePerson"].HeaderText = "Отв. лицо";
+ dgvDevices.Columns["StateString"].HeaderText = "Состояние";
+ dgvDevices.Columns["State"].Visible = false;
+ dgvDevices.Columns["RegistrationDate"].HeaderText = "Дата регистрации";
+ dgvDevices.Columns["RegistrationDate"].DefaultCellStyle.Format = "dd.MM.yyyy";
+ }
+
+ // Обновляем статистику
+ UpdateStatistics();
+ }
+
+ private void UpdateStatistics()
+ {
+ Dictionary stats = DbManager.GetDeviceTypeStats();
+ lvStatistics.Items.Clear();
+
+ foreach (var item in stats)
+ {
+ ListViewItem lvi = new ListViewItem(item.Key.ToString());
+ lvi.SubItems.Add(item.Value.ToString());
+ lvStatistics.Items.Add(lvi);
+ }
+
+ // Общее количество устройств
+ int totalDevices = stats.Values.Sum();
+ ListViewItem totalItem = new ListViewItem("ВСЕГО");
+ totalItem.SubItems.Add(totalDevices.ToString());
+ totalItem.Font = new Font(lvStatistics.Font, FontStyle.Bold);
+ lvStatistics.Items.Add(totalItem);
+ }
+
+ private void ClearDeviceForm()
+ {
+ txtDeviceName.Text = "";
+ txtInventoryNumber.Text = "";
+ txtLocation.Text = "";
+ txtResponsiblePerson.Text = "";
+ cmbDeviceType.SelectedIndex = -1;
+ cmbDeviceState.SelectedIndex = -1;
+ dtpRegistrationDate.Value = DateTime.Today;
+ _selectedDevice = null;
+ }
+
+ private void FillDeviceForm(Device device)
+ {
+ if (device == null) return;
+
+ txtDeviceName.Text = device.Name;
+ txtInventoryNumber.Text = device.InventoryNumber;
+ txtLocation.Text = device.Location;
+ txtResponsiblePerson.Text = device.ResponsiblePerson;
+ cmbDeviceType.SelectedItem = device.Type.ToString();
+ cmbDeviceState.SelectedItem = device.State.ToString();
+ dtpRegistrationDate.Value = device.RegistrationDate;
+ _selectedDevice = device;
+ }
+
+ private Device GetDeviceFromForm()
+ {
+ if (string.IsNullOrEmpty(txtDeviceName.Text) ||
+ string.IsNullOrEmpty(txtInventoryNumber.Text) ||
+ cmbDeviceType.SelectedIndex == -1 ||
+ cmbDeviceState.SelectedIndex == -1)
+ {
+ MetroMessageBox.Show(this,
+ "Пожалуйста, заполните все обязательные поля",
+ "Ошибка",
+ MessageBoxButtons.OK,
+ MessageBoxIcon.Warning);
+ return null;
+ }
+
+ Device device = new Device
+ {
+ Name = txtDeviceName.Text,
+ InventoryNumber = txtInventoryNumber.Text,
+ Type = (DeviceType)Enum.Parse(typeof(DeviceType), cmbDeviceType.SelectedItem.ToString()),
+ Location = txtLocation.Text,
+ ResponsiblePerson = txtResponsiblePerson.Text,
+ State = (DeviceState)Enum.Parse(typeof(DeviceState), cmbDeviceState.SelectedItem.ToString()),
+ RegistrationDate = dtpRegistrationDate.Value
+ };
+
+ if (_selectedDevice != null)
+ device.Id = _selectedDevice.Id;
+
+ return device;
+ }
+
+ private void DgvDevices_SelectionChanged(object sender, EventArgs e)
+ {
+ if (dgvDevices.SelectedRows.Count > 0 && dgvDevices.SelectedRows[0].DataBoundItem is Device selectedDevice)
+ {
+ FillDeviceForm(selectedDevice);
+ }
+ }
+
+ private void btnAdd_Click(object sender, EventArgs e)
+ {
+ ClearDeviceForm();
+ }
+
+ private void btnEdit_Click(object sender, EventArgs e)
+ {
+ if (dgvDevices.SelectedRows.Count == 0)
+ {
+ MetroMessageBox.Show(this,
+ "Выберите устройство для редактирования",
+ "Информация",
+ MessageBoxButtons.OK,
+ MessageBoxIcon.Information);
+ return;
+ }
+
+ if (dgvDevices.SelectedRows[0].DataBoundItem is Device selectedDevice)
+ {
+ FillDeviceForm(selectedDevice);
+ }
+ }
+
+ private void btnDelete_Click(object sender, EventArgs e)
+ {
+ if (dgvDevices.SelectedRows.Count == 0)
+ {
+ MetroMessageBox.Show(this,
+ "Выберите устройство для удаления",
+ "Информация",
+ MessageBoxButtons.OK,
+ MessageBoxIcon.Information);
+ return;
+ }
+
+ if (dgvDevices.SelectedRows[0].DataBoundItem is Device selectedDevice)
+ {
+ if (MetroMessageBox.Show(this,
+ $"Вы действительно хотите удалить устройство \"{selectedDevice.Name}\"?",
+ "Подтверждение удаления",
+ MessageBoxButtons.YesNo,
+ MessageBoxIcon.Question) == DialogResult.Yes)
+ {
+ DbManager.DeleteDevice(selectedDevice.Id);
+ RefreshDevicesGrid();
+ ClearDeviceForm();
+ }
+ }
+ }
+
+ private void btnSave_Click(object sender, EventArgs e)
+ {
+ Device device = GetDeviceFromForm();
+ if (device == null) return;
+
+ if (_selectedDevice == null)
+ {
+ // Добавление нового устройства
+ DbManager.AddDevice(device);
+ }
+ else
+ {
+ // Обновление существующего устройства
+ DbManager.UpdateDevice(device);
+ }
+
+ RefreshDevicesGrid();
+ ClearDeviceForm();
+ }
+
+ private void btnFilter_Click(object sender, EventArgs e)
+ {
+ DeviceType? filterType = null;
+ if (cmbFilterType.SelectedIndex > 0)
+ {
+ filterType = (DeviceType)Enum.Parse(typeof(DeviceType), cmbFilterType.SelectedItem.ToString());
+ }
+
+ DeviceState? filterState = null;
+ if (cmbFilterState.SelectedIndex > 0)
+ {
+ filterState = (DeviceState)Enum.Parse(typeof(DeviceState), cmbFilterState.SelectedItem.ToString());
+ }
+
+ string location = txtFilterLocation.Text;
+ string searchText = txtSearch.Text;
+
+ var filteredDevices = DbManager.FilterDevices(filterType, filterState, location, searchText);
+ RefreshDevicesGrid(filteredDevices);
+ }
+
+ private void btnResetFilter_Click(object sender, EventArgs e)
+ {
+ cmbFilterType.SelectedIndex = 0;
+ cmbFilterState.SelectedIndex = 0;
+ txtFilterLocation.Text = "";
+ txtSearch.Text = "";
+ RefreshDevicesGrid();
+ }
+
+ private void btnExport_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ SaveFileDialog saveDialog = new SaveFileDialog
+ {
+ Filter = "CSV файлы (*.csv)|*.csv|Текстовые файлы (*.txt)|*.txt|Все файлы (*.*)|*.*",
+ Title = "Экспорт данных",
+ FileName = "Учет_техники_" + DateTime.Now.ToString("dd_MM_yyyy")
+ };
+
+ if (saveDialog.ShowDialog() == DialogResult.OK)
+ {
+ DbManager.ExportToCsv(saveDialog.FileName);
+ MetroMessageBox.Show(this,
+ "Данные успешно экспортированы",
+ "Экспорт",
+ MessageBoxButtons.OK,
+ MessageBoxIcon.Information);
+ }
+ }
+ catch (Exception ex)
+ {
+ MetroMessageBox.Show(this,
+ "Ошибка при экспорте данных: " + ex.Message,
+ "Ошибка",
+ MessageBoxButtons.OK,
+ MessageBoxIcon.Error);
+ }
+ }
+ }
+}
diff --git a/Form1.resx b/Form1.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/Form1.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/LoginForm.Designer.cs b/LoginForm.Designer.cs
new file mode 100644
index 0000000..04ce237
--- /dev/null
+++ b/LoginForm.Designer.cs
@@ -0,0 +1,129 @@
+using MetroFramework.Controls;
+using MetroFramework.Forms;
+
+namespace Учет_вещей
+{
+ partial class LoginForm
+ {
+ private System.ComponentModel.IContainer components = null;
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ private void InitializeComponent()
+ {
+ this.label1 = new MetroFramework.Controls.MetroLabel();
+ this.txtUsername = new MetroFramework.Controls.MetroTextBox();
+ this.label2 = new MetroFramework.Controls.MetroLabel();
+ this.txtPassword = new MetroFramework.Controls.MetroTextBox();
+ this.btnLogin = new MetroFramework.Controls.MetroButton();
+ this.btnCancel = new MetroFramework.Controls.MetroButton();
+ this.SuspendLayout();
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(25, 70);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(47, 19);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "Логин:";
+ //
+ // txtUsername
+ //
+ this.txtUsername.Location = new System.Drawing.Point(80, 70);
+ this.txtUsername.Name = "txtUsername";
+ this.txtUsername.Size = new System.Drawing.Size(171, 23);
+ this.txtUsername.TabIndex = 1;
+ this.txtUsername.WaterMark = "Имя пользователя";
+ this.txtUsername.UseSelectable = true;
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(25, 110);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(54, 19);
+ this.label2.TabIndex = 2;
+ this.label2.Text = "Пароль:";
+ //
+ // txtPassword
+ //
+ this.txtPassword.Location = new System.Drawing.Point(80, 110);
+ this.txtPassword.Name = "txtPassword";
+ this.txtPassword.PasswordChar = '●';
+ this.txtPassword.Size = new System.Drawing.Size(171, 23);
+ this.txtPassword.TabIndex = 3;
+ this.txtPassword.UseSystemPasswordChar = true;
+ this.txtPassword.WaterMark = "Пароль";
+ this.txtPassword.UseSelectable = true;
+ //
+ // btnLogin
+ //
+ this.btnLogin.Location = new System.Drawing.Point(60, 150);
+ this.btnLogin.Name = "btnLogin";
+ this.btnLogin.Size = new System.Drawing.Size(86, 32);
+ this.btnLogin.TabIndex = 4;
+ this.btnLogin.Text = "Войти";
+ this.btnLogin.UseCustomBackColor = true;
+ this.btnLogin.UseCustomForeColor = true;
+ this.btnLogin.BackColor = System.Drawing.Color.FromArgb(0, 174, 219);
+ this.btnLogin.ForeColor = System.Drawing.Color.White;
+ this.btnLogin.UseSelectable = true;
+ this.btnLogin.Click += new System.EventHandler(this.btnLogin_Click);
+ //
+ // btnCancel
+ //
+ this.btnCancel.Location = new System.Drawing.Point(160, 150);
+ this.btnCancel.Name = "btnCancel";
+ this.btnCancel.Size = new System.Drawing.Size(86, 32);
+ this.btnCancel.TabIndex = 5;
+ this.btnCancel.Text = "Отмена";
+ this.btnCancel.UseCustomBackColor = true;
+ this.btnCancel.BackColor = System.Drawing.Color.FromArgb(204, 204, 204);
+ this.btnCancel.UseSelectable = true;
+ this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
+ //
+ // LoginForm
+ //
+ this.AcceptButton = this.btnLogin;
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(280, 200);
+ this.Controls.Add(this.btnCancel);
+ this.Controls.Add(this.btnLogin);
+ this.Controls.Add(this.txtPassword);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.txtUsername);
+ this.Controls.Add(this.label1);
+ this.DisplayHeader = true;
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "LoginForm";
+ this.Padding = new System.Windows.Forms.Padding(20, 60, 20, 20);
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Авторизация";
+ this.Style = MetroFramework.MetroColorStyle.Blue;
+ this.Theme = MetroFramework.MetroThemeStyle.Light;
+ this.ResumeLayout(false);
+ this.PerformLayout();
+ }
+
+ #endregion
+
+ private MetroFramework.Controls.MetroLabel label1;
+ private MetroFramework.Controls.MetroTextBox txtUsername;
+ private MetroFramework.Controls.MetroLabel label2;
+ private MetroFramework.Controls.MetroTextBox txtPassword;
+ private MetroFramework.Controls.MetroButton btnLogin;
+ private MetroFramework.Controls.MetroButton btnCancel;
+ }
+}
diff --git a/LoginForm.cs b/LoginForm.cs
new file mode 100644
index 0000000..3a912f7
--- /dev/null
+++ b/LoginForm.cs
@@ -0,0 +1,61 @@
+using System;
+using System.Windows.Forms;
+using MetroFramework.Forms;
+
+namespace Учет_вещей
+{
+ public partial class LoginForm : MetroForm
+ {
+ public User CurrentUser { get; private set; }
+
+ public LoginForm()
+ {
+ InitializeComponent();
+
+ // Настройка темы и стиля
+ this.Theme = MetroFramework.MetroThemeStyle.Light;
+ this.Style = MetroFramework.MetroColorStyle.Blue;
+ this.Text = "Авторизация";
+ }
+
+ private void btnLogin_Click(object sender, EventArgs e)
+ {
+ string username = txtUsername.Text;
+ string password = txtPassword.Text;
+
+ if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
+ {
+ MetroFramework.MetroMessageBox.Show(this,
+ "Пожалуйста, заполните все поля",
+ "Ошибка",
+ MessageBoxButtons.OK,
+ MessageBoxIcon.Warning);
+ return;
+ }
+
+ CurrentUser = DbManager.Authenticate(username, password);
+
+ if (CurrentUser != null)
+ {
+ DialogResult = DialogResult.OK;
+ Close();
+ }
+ else
+ {
+ MetroFramework.MetroMessageBox.Show(this,
+ "Неверное имя пользователя или пароль",
+ "Ошибка авторизации",
+ MessageBoxButtons.OK,
+ MessageBoxIcon.Error);
+ txtPassword.Clear();
+ txtUsername.Focus();
+ }
+ }
+
+ private void btnCancel_Click(object sender, EventArgs e)
+ {
+ DialogResult = DialogResult.Cancel;
+ Close();
+ }
+ }
+}
diff --git a/LoginForm.resx b/LoginForm.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/LoginForm.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/Models.cs b/Models.cs
new file mode 100644
index 0000000..8385015
--- /dev/null
+++ b/Models.cs
@@ -0,0 +1,55 @@
+using System;
+
+namespace Учет_вещей
+{
+ // Перечисление для типов оборудования
+ public enum DeviceType
+ {
+ Компьютер,
+ Ноутбук,
+ Монитор,
+ Принтер,
+ Сканер,
+ МФУ,
+ Проектор,
+ Другое
+ }
+
+ // Перечисление для состояния техники
+ public enum DeviceState
+ {
+ Исправен,
+ Ремонт,
+ Списан
+ }
+
+ // Класс для хранения данных о технике
+ public class Device
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public string InventoryNumber { get; set; }
+ public DeviceType Type { get; set; }
+ public string Location { get; set; }
+ public string ResponsiblePerson { get; set; }
+ public DeviceState State { get; set; }
+ public DateTime RegistrationDate { get; set; }
+
+ public string TypeString => Type.ToString();
+ public string StateString => State.ToString();
+ }
+
+ // Класс для пользователей
+ public enum UserRole
+ {
+ User,
+ Admin
+ }
+
+ public class User
+ {
+ public string Username { get; set; }
+ public string Password { get; set; }
+ public UserRole Role { get; set; }
+ }
+}
diff --git a/Program.cs b/Program.cs
new file mode 100644
index 0000000..6d23aab
--- /dev/null
+++ b/Program.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Windows.Forms;
+
+namespace Учет_вещей
+{
+ static class Program
+ {
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+
+ // Инициализируем базу данных при запуске приложения
+ DbManager.InitializeDatabase();
+
+ Application.Run(new Form1());
+ }
+ }
+}
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..3e9b765
--- /dev/null
+++ b/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Общие сведения об этой сборке предоставляются следующим набором
+// набора атрибутов. Измените значения этих атрибутов для изменения сведений,
+// связанных со сборкой.
+[assembly: AssemblyTitle("Учет вещей")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Учет вещей")]
+[assembly: AssemblyCopyright("Copyright © 2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
+// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
+// COM, следует установить атрибут ComVisible в TRUE для этого типа.
+[assembly: ComVisible(false)]
+
+// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
+[assembly: Guid("434c186d-c95a-4abf-ac2c-b33cd21b0f50")]
+
+// Сведения о версии сборки состоят из указанных ниже четырех значений:
+//
+// Основной номер версии
+// Дополнительный номер версии
+// Номер сборки
+// Редакция
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..b0e71c0
--- /dev/null
+++ b/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// Этот код создан программным средством.
+// Версия среды выполнения: 4.0.30319.42000
+//
+// Изменения в этом файле могут привести к неправильному поведению и будут утрачены, если
+// код создан повторно.
+//
+//------------------------------------------------------------------------------
+
+namespace Учет_вещей.Properties
+{
+
+
+ ///
+ /// Класс ресурсов со строгим типом для поиска локализованных строк и пр.
+ ///
+ // Этот класс был автоматически создан при помощи StronglyTypedResourceBuilder
+ // класс с помощью таких средств, как ResGen или Visual Studio.
+ // Для добавления или удаления члена измените файл .ResX, а затем перезапустите ResGen
+ // с параметром /str или заново постройте свой VS-проект.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.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 ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Учет_вещей.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;
+ }
+ }
+ }
+}
diff --git a/Properties/Resources.resx b/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..f55acbe
--- /dev/null
+++ b/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Учет_вещей.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/Properties/Settings.settings b/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/packages.config b/packages.config
new file mode 100644
index 0000000..993d5a6
--- /dev/null
+++ b/packages.config
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Учет вещей.csproj b/Учет вещей.csproj
new file mode 100644
index 0000000..1783611
--- /dev/null
+++ b/Учет вещей.csproj
@@ -0,0 +1,133 @@
+
+
+
+
+
+ Debug
+ AnyCPU
+ {434C186D-C95A-4ABF-AC2C-B33CD21B0F50}
+ WinExe
+ Учет_вещей
+ Учет вещей
+ v4.7.2
+ 512
+ true
+ true
+
+
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll
+
+
+ packages\EntityFramework.6.4.4\lib\net45\EntityFramework.SqlServer.dll
+
+
+ packages\MetroModernUI.1.4.0.0\lib\net\MetroFramework.dll
+
+
+ packages\MetroModernUI.1.4.0.0\lib\net\MetroFramework.Design.dll
+
+
+ packages\MetroModernUI.1.4.0.0\lib\net\MetroFramework.Fonts.dll
+
+
+
+
+
+ packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.119.0\lib\net46\System.Data.SQLite.dll
+
+
+ packages\System.Data.SQLite.EF6.1.0.119.0\lib\net46\System.Data.SQLite.EF6.dll
+
+
+ packages\System.Data.SQLite.Linq.1.0.119.0\lib\net46\System.Data.SQLite.Linq.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ Form1.cs
+
+
+ Form
+
+
+ LoginForm.cs
+
+
+
+
+
+ Form1.cs
+
+
+ LoginForm.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+
+ Данный проект ссылается на пакеты NuGet, отсутствующие на этом компьютере. Используйте восстановление пакетов NuGet, чтобы скачать их. Дополнительную информацию см. по адресу: http://go.microsoft.com/fwlink/?LinkID=322105. Отсутствует следующий файл: {0}.
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Учет вещей.sln b/Учет вещей.sln
new file mode 100644
index 0000000..e284396
--- /dev/null
+++ b/Учет вещей.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.13.35828.75 d17.13
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Учет вещей", "Учет вещей.csproj", "{434C186D-C95A-4ABF-AC2C-B33CD21B0F50}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {434C186D-C95A-4ABF-AC2C-B33CD21B0F50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {434C186D-C95A-4ABF-AC2C-B33CD21B0F50}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {434C186D-C95A-4ABF-AC2C-B33CD21B0F50}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {434C186D-C95A-4ABF-AC2C-B33CD21B0F50}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {4C9ECF4C-F9F0-4D09-AFFF-0E7E5B855495}
+ EndGlobalSection
+EndGlobal