Добавление форм по учету времени

This commit is contained in:
Pipiaka 2024-11-12 16:17:11 +04:00
parent 68715a92d9
commit 8e14ffaef6
13 changed files with 744 additions and 18 deletions

View File

@ -37,6 +37,7 @@
operationsToolStripMenuItem = new ToolStripMenuItem();
vacationsToolStripMenuItem = new ToolStripMenuItem();
typeJobsРаботуToolStripMenuItem = new ToolStripMenuItem();
workTimeToolStripMenuItem = new ToolStripMenuItem();
reportsToolStripMenuItem = new ToolStripMenuItem();
menuStrip1.SuspendLayout();
SuspendLayout();
@ -60,35 +61,35 @@
//
// PostsToolStripMenuItem
//
PostsToolStripMenuItem.Name = "postsToolStripMenuItem";
PostsToolStripMenuItem.Size = new Size(224, 26);
PostsToolStripMenuItem.Name = "PostsToolStripMenuItem";
PostsToolStripMenuItem.Size = new Size(170, 26);
PostsToolStripMenuItem.Text = "Должности";
PostsToolStripMenuItem.Click += PostsToolStripMenuItem_Click;
//
// ClientsToolStripMenuItem
//
ClientsToolStripMenuItem.Name = "clientsToolStripMenuItem";
ClientsToolStripMenuItem.Size = new Size(224, 26);
ClientsToolStripMenuItem.Name = "ClientsToolStripMenuItem";
ClientsToolStripMenuItem.Size = new Size(170, 26);
ClientsToolStripMenuItem.Text = "Клиенты";
ClientsToolStripMenuItem.Click += ClientsToolStripMenuItem_Click;
//
// ProductsToolStripMenuItem
//
ProductsToolStripMenuItem.Name = "productsToolStripMenuItem";
ProductsToolStripMenuItem.Size = new Size(224, 26);
ProductsToolStripMenuItem.Name = "ProductsToolStripMenuItem";
ProductsToolStripMenuItem.Size = new Size(170, 26);
ProductsToolStripMenuItem.Text = "Проекты";
ProductsToolStripMenuItem.Click += ProductsToolStripMenuItem_Click;
//
// EmployeesToolStripMenuItem
//
EmployeesToolStripMenuItem.Name = "employeesToolStripMenuItem";
EmployeesToolStripMenuItem.Size = new Size(224, 26);
EmployeesToolStripMenuItem.Name = "EmployeesToolStripMenuItem";
EmployeesToolStripMenuItem.Size = new Size(170, 26);
EmployeesToolStripMenuItem.Text = "Работник";
EmployeesToolStripMenuItem.Click += EmployeesToolStripMenuItem_Click;
//
// operationsToolStripMenuItem
//
operationsToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { vacationsToolStripMenuItem, typeJobsРаботуToolStripMenuItem });
operationsToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { vacationsToolStripMenuItem, typeJobsРаботуToolStripMenuItem, workTimeToolStripMenuItem });
operationsToolStripMenuItem.Name = "operationsToolStripMenuItem";
operationsToolStripMenuItem.Size = new Size(95, 24);
operationsToolStripMenuItem.Text = "Операции";
@ -102,11 +103,18 @@
//
// typeJobsРаботуToolStripMenuItem
//
typeJobsРаботуToolStripMenuItem.Name = "typeJobsToolStripMenuItem";
typeJobsРаботуToolStripMenuItem.Name = "typeJobsРаботуToolStripMenuItem";
typeJobsРаботуToolStripMenuItem.Size = new Size(227, 26);
typeJobsРаботуToolStripMenuItem.Text = "Добавит работу";
typeJobsРаботуToolStripMenuItem.Click += TypeJobsToolStripMenuItem_Click;
//
// workTimeToolStripMenuItem
//
workTimeToolStripMenuItem.Name = "workTimeToolStripMenuItem";
workTimeToolStripMenuItem.Size = new Size(227, 26);
workTimeToolStripMenuItem.Text = "Учет времени";
workTimeToolStripMenuItem.Click += WorkTimeToolStripMenuItem_Click;
//
// reportsToolStripMenuItem
//
reportsToolStripMenuItem.Name = "reportsToolStripMenuItem";
@ -143,5 +151,6 @@
private ToolStripMenuItem typeJobsРаботуToolStripMenuItem;
private ToolStripMenuItem reportsToolStripMenuItem;
private ToolStripMenuItem EmployeesToolStripMenuItem;
private ToolStripMenuItem workTimeToolStripMenuItem;
}
}

View File

@ -90,5 +90,18 @@ namespace Accounting_Time_It_Company
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void WorkTimeToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormWorkTimes>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

View File

@ -47,7 +47,9 @@ namespace Accounting_Time_It_Company.Forms
throw new Exception("Имеются незаполненные поля");
}
_typeJobRepositories.CreateTypeJob(CreateTypeJob(0));
_typeJobRepositories.CreateTypeJob(TypeJob.CreateOperation(0, (int)comboBoxProduct.SelectedIndex!, textBoxDescriptoin.Text,
(int)numericUpDownAllowanceForJob.Value, (int)comboBoxDevelop.SelectedIndex!,
(int)comboBoxManager.SelectedIndex!));
Close();
}
@ -58,9 +60,5 @@ namespace Accounting_Time_It_Company.Forms
}
private void ButtonCansle_Click(object sender, EventArgs e) => Close();
private TypeJob CreateTypeJob(int id) => TypeJob.CreateOperation(id, (int)comboBoxProduct.SelectedIndex!, textBoxDescriptoin.Text,
(int)numericUpDownAllowanceForJob.Value, (int)comboBoxDevelop.SelectedIndex!,
(int)comboBoxManager.SelectedIndex!);
}
}

View File

@ -35,7 +35,7 @@ namespace Accounting_Time_It_Company.Forms
throw new Exception("Имеются незаполненные поля");
}
_vacationRepositories.CreateVacation(CreateVacation(0));
_vacationRepositories.CreateVacation(Vacation.CreateOpeartion(0, (int)comboBoxEmployee.SelectedIndex!, dateTimePickerStartDate.Value, dateTimePickerEndDate.Value));
Close();
}
@ -46,7 +46,5 @@ namespace Accounting_Time_It_Company.Forms
}
private void ButtonCansle_Click(object sender, EventArgs e) => Close();
private Vacation CreateVacation(int id) => Vacation.CreateOpeartion(id, (int)comboBoxEmployee.SelectedIndex!, dateTimePickerStartDate.Value, dateTimePickerEndDate.Value);
}
}

View File

@ -0,0 +1,170 @@
namespace Accounting_Time_It_Company.Forms
{
partial class FormWorkTime
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
comboBoxTypeJob = new ComboBox();
labelTypeJob = new Label();
comboBoxEmployee = new ComboBox();
labelEmployee = new Label();
labelDate = new Label();
dateTimePickerDate = new DateTimePicker();
labelHour = new Label();
numericUpDownHour = new NumericUpDown();
buttonCansle = new Button();
buttonSave = new Button();
((System.ComponentModel.ISupportInitialize)numericUpDownHour).BeginInit();
SuspendLayout();
//
// comboBoxTypeJob
//
comboBoxTypeJob.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxTypeJob.FormattingEnabled = true;
comboBoxTypeJob.Location = new Point(139, 6);
comboBoxTypeJob.Name = "comboBoxTypeJob";
comboBoxTypeJob.Size = new Size(203, 28);
comboBoxTypeJob.TabIndex = 4;
//
// labelTypeJob
//
labelTypeJob.AutoSize = true;
labelTypeJob.Location = new Point(12, 9);
labelTypeJob.Name = "labelTypeJob";
labelTypeJob.Size = new Size(60, 20);
labelTypeJob.TabIndex = 3;
labelTypeJob.Text = "Задача:";
//
// comboBoxEmployee
//
comboBoxEmployee.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxEmployee.FormattingEnabled = true;
comboBoxEmployee.Location = new Point(139, 40);
comboBoxEmployee.Name = "comboBoxEmployee";
comboBoxEmployee.Size = new Size(203, 28);
comboBoxEmployee.TabIndex = 6;
//
// labelEmployee
//
labelEmployee.AutoSize = true;
labelEmployee.Location = new Point(12, 43);
labelEmployee.Name = "labelEmployee";
labelEmployee.Size = new Size(77, 20);
labelEmployee.TabIndex = 5;
labelEmployee.Text = "Работник:";
//
// labelDate
//
labelDate.AutoSize = true;
labelDate.Location = new Point(12, 79);
labelDate.Name = "labelDate";
labelDate.Size = new Size(64, 20);
labelDate.TabIndex = 8;
labelDate.Text = "Начало:";
//
// dateTimePickerDate
//
dateTimePickerDate.Location = new Point(139, 74);
dateTimePickerDate.Name = "dateTimePickerDate";
dateTimePickerDate.Size = new Size(203, 27);
dateTimePickerDate.TabIndex = 7;
//
// labelHour
//
labelHour.AutoSize = true;
labelHour.Location = new Point(12, 111);
labelHour.Name = "labelHour";
labelHour.Size = new Size(110, 20);
labelHour.TabIndex = 9;
labelHour.Text = "Часов работы:";
//
// numericUpDownHour
//
numericUpDownHour.Location = new Point(139, 107);
numericUpDownHour.Maximum = new decimal(new int[] { 1000, 0, 0, 0 });
numericUpDownHour.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
numericUpDownHour.Name = "numericUpDownHour";
numericUpDownHour.Size = new Size(203, 27);
numericUpDownHour.TabIndex = 10;
numericUpDownHour.Value = new decimal(new int[] { 1, 0, 0, 0 });
//
// buttonCansle
//
buttonCansle.Location = new Point(248, 166);
buttonCansle.Name = "buttonCansle";
buttonCansle.Size = new Size(94, 29);
buttonCansle.TabIndex = 26;
buttonCansle.Text = "Отмена";
buttonCansle.UseVisualStyleBackColor = true;
buttonCansle.Click += ButtonCansle_Click;
//
// buttonSave
//
buttonSave.Location = new Point(139, 166);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(94, 29);
buttonSave.TabIndex = 25;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += ButtonSave_Click;
//
// FormWorkTime
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(358, 206);
Controls.Add(buttonCansle);
Controls.Add(buttonSave);
Controls.Add(numericUpDownHour);
Controls.Add(labelHour);
Controls.Add(labelDate);
Controls.Add(dateTimePickerDate);
Controls.Add(comboBoxEmployee);
Controls.Add(labelEmployee);
Controls.Add(comboBoxTypeJob);
Controls.Add(labelTypeJob);
Name = "FormWorkTime";
Text = "Учет времени";
((System.ComponentModel.ISupportInitialize)numericUpDownHour).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private ComboBox comboBoxTypeJob;
private Label labelTypeJob;
private ComboBox comboBoxEmployee;
private Label labelEmployee;
private Label labelDate;
private DateTimePicker dateTimePickerDate;
private Label labelHour;
private NumericUpDown numericUpDownHour;
private Button buttonCansle;
private Button buttonSave;
}
}

View File

@ -0,0 +1,56 @@
using Accounting_Time_It_Company.Entities.Enums;
using Accounting_Time_It_Company.Entities;
using Accounting_Time_It_Company.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 Accounting_Time_It_Company.Forms
{
public partial class FormWorkTime : Form
{
private readonly IWorkTimeRepositories _workTimeRepositories;
public FormWorkTime(IWorkTimeRepositories workTimeRepositories, ITypeJobRepositories typeJobRepositories, IEmployeeRepositories employeeRepositories)
{
InitializeComponent();
_workTimeRepositories = workTimeRepositories ?? throw new ArgumentNullException(nameof(workTimeRepositories));
comboBoxTypeJob.DataSource = typeJobRepositories.ReadTypeJobs();
comboBoxTypeJob.DisplayMember = "Description";
comboBoxTypeJob.ValueMember = "Id";
comboBoxEmployee.DataSource = employeeRepositories.ReadEmployees();
comboBoxEmployee.DisplayMember = "Name";
comboBoxEmployee.ValueMember = "Id";
}
private void ButtonSave_Click(object sender, EventArgs e)
{
try
{
if (comboBoxEmployee.SelectedIndex < 0 ||
comboBoxTypeJob.SelectedIndex < 0)
{
throw new Exception("Имеются незаполненные поля");
}
_workTimeRepositories.CreateWorkTime(WorkTime.CreateOperation(0, (int)comboBoxEmployee.SelectedValue!, dateTimePickerDate.Value, (int)numericUpDownHour.Value));
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonCansle_Click(object sender, EventArgs e) => Close();
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,112 @@
namespace Accounting_Time_It_Company.Forms
{
partial class FormWorkTimes
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
buttonDelete = new Button();
buttonAdd = new Button();
panel1 = new Panel();
dataGridViewData = new DataGridView();
panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit();
SuspendLayout();
//
// buttonDelete
//
buttonDelete.BackgroundImage = Properties.Resources.Delete;
buttonDelete.BackgroundImageLayout = ImageLayout.Stretch;
buttonDelete.Location = new Point(8, 159);
buttonDelete.Name = "buttonDelete";
buttonDelete.Size = new Size(94, 94);
buttonDelete.TabIndex = 2;
buttonDelete.UseVisualStyleBackColor = true;
buttonDelete.Click += ButtonDelete_Click;
//
// buttonAdd
//
buttonAdd.BackgroundImage = Properties.Resources.Add;
buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
buttonAdd.Location = new Point(8, 59);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(94, 94);
buttonAdd.TabIndex = 0;
buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += ButtonAdd_Click;
//
// panel1
//
panel1.Controls.Add(buttonDelete);
panel1.Controls.Add(buttonAdd);
panel1.Dock = DockStyle.Right;
panel1.Location = new Point(686, 0);
panel1.Name = "panel1";
panel1.Size = new Size(114, 450);
panel1.TabIndex = 8;
//
// dataGridViewData
//
dataGridViewData.AllowUserToAddRows = false;
dataGridViewData.AllowUserToDeleteRows = false;
dataGridViewData.AllowUserToResizeColumns = false;
dataGridViewData.AllowUserToResizeRows = false;
dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridViewData.Dock = DockStyle.Fill;
dataGridViewData.Location = new Point(0, 0);
dataGridViewData.MultiSelect = false;
dataGridViewData.Name = "dataGridViewData";
dataGridViewData.ReadOnly = true;
dataGridViewData.RowHeadersVisible = false;
dataGridViewData.RowHeadersWidth = 51;
dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridViewData.Size = new Size(800, 450);
dataGridViewData.TabIndex = 9;
//
// FormWorkTimes
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450);
Controls.Add(panel1);
Controls.Add(dataGridViewData);
Name = "FormWorkTimes";
Text = "Учеты времени";
Load += FormWorkTimes_Load;
panel1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit();
ResumeLayout(false);
}
#endregion
private Button buttonDelete;
private Button buttonAdd;
private Panel panel1;
private DataGridView dataGridViewData;
}
}

View File

@ -0,0 +1,88 @@
using Accounting_Time_It_Company.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 Accounting_Time_It_Company.Forms
{
public partial class FormWorkTimes : Form
{
private readonly IUnityContainer _container;
private readonly IWorkTimeRepositories _workTimeRepositories;
public FormWorkTimes(IUnityContainer container, IWorkTimeRepositories workTimeRepositories)
{
InitializeComponent();
_container = container ?? throw new ArgumentNullException(nameof(container));
_workTimeRepositories = workTimeRepositories ?? throw new ArgumentNullException(nameof(workTimeRepositories));
}
private void FormWorkTimes_Load(object sender, EventArgs e)
{
try
{
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonAdd_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormWorkTime>().ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonDelete_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return;
}
try
{
_workTimeRepositories.DeleteWorkTime(findId);
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridViewData.DataSource = _workTimeRepositories.ReadWorkTimes();
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;
if (dataGridViewData.SelectedRows.Count < 1)
{
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["Id"].Value);
return true;
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -27,6 +27,7 @@ namespace Accounting_Time_It_Company
container.RegisterType<IProductRepositories, ProductRepositories>();
container.RegisterType<ITypeJobRepositories, TypeJobRepositories>();
container.RegisterType<IVacationRepositories, VacationRepositories>();
container.RegisterType<IWorkTimeRepositories, WorkTimeRepositories>();
return container;
}
}

View File

@ -0,0 +1,17 @@
using Accounting_Time_It_Company.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Accounting_Time_It_Company.Repositories;
public interface IWorkTimeRepositories
{
IEnumerable<WorkTime> ReadWorkTimes(DateTime? DateFrom = null, DateTime? DateTo = null, int? typeJobId = null, int? developId = null);
void CreateWorkTime(WorkTime workTimeReplenishment);
void DeleteWorkTime(int id);
}

View File

@ -0,0 +1,24 @@
using Accounting_Time_It_Company.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Accounting_Time_It_Company.Repositories.Implementations;
internal class WorkTimeRepositories : IWorkTimeRepositories
{
public void CreateWorkTime(WorkTime workTimeReplenishment)
{
}
public void DeleteWorkTime(int id)
{
}
public IEnumerable<WorkTime> ReadWorkTimes(DateTime? DateFrom = null, DateTime? DateTo = null, int? typeJobId = null, int? developId = null)
{
return [];
}
}