сделала
This commit is contained in:
parent
5ec407fa6d
commit
1bd9dce5f8
@ -1,4 +1,6 @@
|
|||||||
namespace COP
|
using DocumentFormat.OpenXml.Spreadsheet;
|
||||||
|
|
||||||
|
namespace COP
|
||||||
{
|
{
|
||||||
public partial class UserCheckedListBox : UserControl
|
public partial class UserCheckedListBox : UserControl
|
||||||
{
|
{
|
||||||
@ -28,27 +30,16 @@
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
string checkedItems = "";
|
return string.Join(";", checkedListBox.CheckedItems.Cast<string>());
|
||||||
for (int i = 0; i < checkedListBox.Items.Count; i++)
|
|
||||||
{
|
|
||||||
if (checkedListBox.GetItemChecked(i))
|
|
||||||
{
|
|
||||||
checkedItems += checkedListBox.Items[i].ToString() + " ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (checkedListBox.CheckedItems != null)
|
|
||||||
return checkedItems;
|
|
||||||
else
|
|
||||||
return "";
|
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
for (int i = 0; i < checkedListBox.Items.Count; i++)
|
if (!string.IsNullOrEmpty(value))
|
||||||
{
|
{
|
||||||
if (checkedListBox.Items[i].ToString() == value)
|
string[] selectedValues = value.Split(';');
|
||||||
|
for (int i = 0; i < checkedListBox.Items.Count; i++)
|
||||||
{
|
{
|
||||||
checkedListBox.SetItemChecked(i, true);
|
checkedListBox.SetItemChecked(i, selectedValues.Contains(checkedListBox.Items[i].ToString()) || checkedListBox.GetItemChecked(i));
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
120
COP/UserCheckedListBox.resx
Normal file
120
COP/UserCheckedListBox.resx
Normal 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>
|
1
TestComponents/FormTestComponents.Designer.cs
generated
1
TestComponents/FormTestComponents.Designer.cs
generated
@ -49,7 +49,6 @@
|
|||||||
//
|
//
|
||||||
this.userCheckedListBox.Location = new System.Drawing.Point(0, -1);
|
this.userCheckedListBox.Location = new System.Drawing.Point(0, -1);
|
||||||
this.userCheckedListBox.Name = "userCheckedListBox";
|
this.userCheckedListBox.Name = "userCheckedListBox";
|
||||||
this.userCheckedListBox.SelectedValue = "";
|
|
||||||
this.userCheckedListBox.Size = new System.Drawing.Size(150, 150);
|
this.userCheckedListBox.Size = new System.Drawing.Size(150, 150);
|
||||||
this.userCheckedListBox.TabIndex = 0;
|
this.userCheckedListBox.TabIndex = 0;
|
||||||
this.userCheckedListBox.SelectedValueChanged += new System.EventHandler(this.UserCheckedListBox_SelectedValueChanged);
|
this.userCheckedListBox.SelectedValueChanged += new System.EventHandler(this.UserCheckedListBox_SelectedValueChanged);
|
||||||
|
@ -9,11 +9,9 @@ namespace UniversityBusinessLogic.BusinessLogics
|
|||||||
{
|
{
|
||||||
public class DirectionLogic : IDirectionLogic
|
public class DirectionLogic : IDirectionLogic
|
||||||
{
|
{
|
||||||
private readonly ILogger _logger;
|
|
||||||
private readonly IDirectionStorage _directionStorage;
|
private readonly IDirectionStorage _directionStorage;
|
||||||
public DirectionLogic(ILogger<DirectionLogic> logger, IDirectionStorage directionStorage)
|
public DirectionLogic(IDirectionStorage directionStorage)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
|
||||||
_directionStorage = directionStorage;
|
_directionStorage = directionStorage;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,7 +26,7 @@ namespace UniversityBusinessLogic.BusinessLogics
|
|||||||
{
|
{
|
||||||
throw new Exception("Такое направление уже существует");
|
throw new Exception("Такое направление уже существует");
|
||||||
}
|
}
|
||||||
if (model.Id != null)
|
if (model.Id.HasValue)
|
||||||
{
|
{
|
||||||
_directionStorage.Update(model);
|
_directionStorage.Update(model);
|
||||||
}
|
}
|
||||||
@ -36,73 +34,29 @@ namespace UniversityBusinessLogic.BusinessLogics
|
|||||||
{
|
{
|
||||||
_directionStorage.Insert(model);
|
_directionStorage.Insert(model);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public bool Delete(DirectionBindingModel model)
|
|
||||||
{
|
|
||||||
CheckModel(model, false);
|
|
||||||
_logger.LogInformation("Delete. Id:{Id}", model.Id);
|
|
||||||
if (_directionStorage.Delete(model) == null)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("Delete operation failed");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public DirectionViewModel? ReadElement(DirectionBindingModel model)
|
public void Delete(DirectionBindingModel model)
|
||||||
{
|
{
|
||||||
if (model == null)
|
var element = _directionStorage.GetElement(new DirectionBindingModel { Id = model.Id });
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(model));
|
|
||||||
}
|
|
||||||
_logger.LogInformation("ReadElement. Name:{Name}. Id:{ Id}", model.Name, model.Id);
|
|
||||||
var element = _directionStorage.GetElement(model);
|
|
||||||
if (element == null)
|
if (element == null)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("ReadElement element not found");
|
throw new Exception("Направление не найдено");
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
_logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
|
_directionStorage.Delete(model);
|
||||||
return element;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DirectionViewModel>? ReadList(DirectionBindingModel? model)
|
public List<DirectionViewModel> Read(DirectionBindingModel model)
|
||||||
{
|
|
||||||
_logger.LogInformation("ReadList. Name:{Name}. Id:{ Id}", model?.Name, model?.Id);
|
|
||||||
var list = model == null ? _directionStorage.GetFullList() : _directionStorage.GetFilteredList(model);
|
|
||||||
if (list == null)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("ReadList return null list");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CheckModel(DirectionBindingModel model, bool withParams = true)
|
|
||||||
{
|
{
|
||||||
if (model == null)
|
if (model == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(model));
|
return _directionStorage.GetFullList();
|
||||||
}
|
}
|
||||||
if (!withParams)
|
if (!string.IsNullOrEmpty(model.Name))
|
||||||
{
|
{
|
||||||
return;
|
return new List<DirectionViewModel> { _directionStorage.GetElement(model) };
|
||||||
}
|
|
||||||
if (string.IsNullOrEmpty(model.Name))
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException("Нет названия направления", nameof(model.Name));
|
|
||||||
}
|
|
||||||
_logger.LogInformation("Direction. Name:{Name}. Id: {Id} ", model.Name, model.Id);
|
|
||||||
var element = _directionStorage.GetElement(new DirectionBindingModel
|
|
||||||
{
|
|
||||||
Name = model.Name
|
|
||||||
});
|
|
||||||
if (element != null && element.Id != model.Id)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("Направление с таким названием уже есть");
|
|
||||||
}
|
}
|
||||||
|
return _directionStorage.GetFilteredList(model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,113 +9,56 @@ namespace UniversityBusinessLogic.BusinessLogics
|
|||||||
{
|
{
|
||||||
public class StudentLogic : IStudentLogic
|
public class StudentLogic : IStudentLogic
|
||||||
{
|
{
|
||||||
private readonly ILogger _logger;
|
|
||||||
private readonly IStudentStorage _studentStorage;
|
private readonly IStudentStorage _studentStorage;
|
||||||
public StudentLogic(ILogger<StudentLogic> logger, IStudentStorage studentStorage)
|
public StudentLogic(IStudentStorage studentStorage)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
|
||||||
_studentStorage = studentStorage;
|
_studentStorage = studentStorage;
|
||||||
}
|
}
|
||||||
public bool Create(StudentBindingModel model)
|
public void CreateOrUpdate(StudentBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model);
|
var element = _studentStorage.GetElement(
|
||||||
model.DirectionName = model.DirectionName.Trim();
|
new StudentBindingModel
|
||||||
if (_studentStorage.Insert(model) == null)
|
{
|
||||||
{
|
FIO = model.FIO,
|
||||||
_logger.LogWarning("Insert operation failed");
|
Email = model.Email,
|
||||||
return false;
|
PhotoFilePath = model.PhotoFilePath,
|
||||||
}
|
DirectionName = model.DirectionName,
|
||||||
return true;
|
});
|
||||||
}
|
|
||||||
|
|
||||||
public bool Delete(StudentBindingModel model)
|
|
||||||
{
|
|
||||||
CheckModel(model, false);
|
|
||||||
_logger.LogInformation("Delete. Id:{Id}", model.Id);
|
|
||||||
if (_studentStorage.Delete(model) == null)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("Delete operation failed");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public StudentViewModel? ReadElement(StudentSearchModel model)
|
|
||||||
{
|
|
||||||
if (model == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(model));
|
|
||||||
}
|
|
||||||
_logger.LogInformation("ReadElement. FIO:{FIO}. Id:{ Id}", model.FIO, model.Id);
|
|
||||||
var element = _studentStorage.GetElement(model);
|
|
||||||
if (element == null)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("ReadElement element not found");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
_logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
|
|
||||||
return element;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<StudentViewModel>? ReadList(StudentSearchModel? model)
|
|
||||||
{
|
|
||||||
_logger.LogInformation("ReadList. FIO:{FIO}. Id:{ Id}", model?.FIO, model?.Id);
|
|
||||||
var list = model == null ? _studentStorage.GetFullList() : _studentStorage.GetFilteredList(model);
|
|
||||||
if (list == null)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("ReadList return null list");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Update(StudentBindingModel model)
|
|
||||||
{
|
|
||||||
CheckModel(model);
|
|
||||||
if (_studentStorage.Update(model) == null)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("Update operation failed");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CheckModel(StudentBindingModel model, bool withParams = true)
|
|
||||||
{
|
|
||||||
if (model == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(model));
|
|
||||||
}
|
|
||||||
if (!withParams)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (string.IsNullOrEmpty(model.FIO))
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException("Нет ФИО студента", nameof(model.FIO));
|
|
||||||
}
|
|
||||||
if (string.IsNullOrEmpty(model.PhotoFilePath))
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException("Нет пути к фото", nameof(model.PhotoFilePath));
|
|
||||||
}
|
|
||||||
if (string.IsNullOrEmpty(model.Email))
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException("Нет электронной почты", nameof(model.Email));
|
|
||||||
}
|
|
||||||
if (string.IsNullOrEmpty(model.DirectionName))
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException("Нет направления", nameof(model.DirectionName));
|
|
||||||
}
|
|
||||||
_logger.LogInformation("Student. FIO:{FIO}. PhotoFilePath:{PhotoFilePath}. Email:{Email}. DirectionName:{DirectionName}. Id: {Id} ", model.FIO, model.PhotoFilePath, model.Email, model.DirectionName, model.Id);
|
|
||||||
var element = _studentStorage.GetElement(new StudentSearchModel
|
|
||||||
{
|
|
||||||
FIO = model.FIO
|
|
||||||
});
|
|
||||||
if (element != null && element.Id != model.Id)
|
if (element != null && element.Id != model.Id)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Студент с таким ФИО уже есть");
|
throw new Exception("Студент с таким именем уже существует.");
|
||||||
}
|
}
|
||||||
|
if (model.Id.HasValue)
|
||||||
|
{
|
||||||
|
_studentStorage.Update(model);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_studentStorage.Insert(model);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Delete(StudentBindingModel model)
|
||||||
|
{
|
||||||
|
var element = _studentStorage.GetElement(new StudentBindingModel { Id = model.Id });
|
||||||
|
if (element == null)
|
||||||
|
{
|
||||||
|
throw new Exception("Студент не найден");
|
||||||
|
}
|
||||||
|
_studentStorage.Delete(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<StudentViewModel> Read(StudentBindingModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return _studentStorage.GetFullList();
|
||||||
|
}
|
||||||
|
if (model.Id.HasValue)
|
||||||
|
{
|
||||||
|
return new List<StudentViewModel> { _studentStorage.GetElement(model) };
|
||||||
|
}
|
||||||
|
return _studentStorage.GetFilteredList(model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
namespace UniversityContracts.BindingModels
|
namespace UniversityContracts.BindingModels
|
||||||
{
|
{
|
||||||
public class DirectionBindingModel : IDirectionModel
|
public class DirectionBindingModel
|
||||||
{
|
{
|
||||||
public int Id { get; set; }
|
public int? Id { get; set; }
|
||||||
public string Name { get; set; } = string.Empty;
|
public string Name { get; set; } = string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
namespace UniversityContracts.BindingModels
|
namespace UniversityContracts.BindingModels
|
||||||
{
|
{
|
||||||
public class StudentBindingModel : IStudentModel
|
public class StudentBindingModel
|
||||||
{
|
{
|
||||||
public int Id { get; set; }
|
public int? Id { get; set; }
|
||||||
public string FIO { get; set; } = string.Empty;
|
public string FIO { get; set; }
|
||||||
public string PhotoFilePath { get; set; } = string.Empty;
|
public string PhotoFilePath { get; set; }
|
||||||
public string Email { get; set; } = string.Empty;
|
public string Email { get; set; }
|
||||||
public string DirectionName { get; set; } = string.Empty;
|
public string DirectionName { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,9 +6,8 @@ namespace UniversityContracts.BusinessLogicsContracts
|
|||||||
{
|
{
|
||||||
public interface IDirectionLogic
|
public interface IDirectionLogic
|
||||||
{
|
{
|
||||||
List<DirectionViewModel>? ReadList(DirectionBindingModel? model);
|
List<DirectionViewModel> Read(DirectionBindingModel model);
|
||||||
DirectionViewModel? ReadElement(DirectionBindingModel model);
|
|
||||||
bool Delete(DirectionBindingModel model);
|
|
||||||
void CreateOrUpdate(DirectionBindingModel model);
|
void CreateOrUpdate(DirectionBindingModel model);
|
||||||
|
void Delete(DirectionBindingModel model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,10 +6,8 @@ namespace UniversityContracts.BusinessLogicsContracts
|
|||||||
{
|
{
|
||||||
public interface IStudentLogic
|
public interface IStudentLogic
|
||||||
{
|
{
|
||||||
List<StudentViewModel>? ReadList(StudentSearchModel? model);
|
List<StudentViewModel> Read(StudentBindingModel model);
|
||||||
StudentViewModel? ReadElement(StudentSearchModel model);
|
void CreateOrUpdate(StudentBindingModel model);
|
||||||
bool Create(StudentBindingModel model);
|
void Delete(StudentBindingModel model);
|
||||||
bool Update(StudentBindingModel model);
|
|
||||||
bool Delete(StudentBindingModel model);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,10 @@
|
|||||||
{
|
{
|
||||||
public class StudentSearchModel
|
public class StudentSearchModel
|
||||||
{
|
{
|
||||||
public int? Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string? FIO { get; set; }
|
public string FIO { get; set; }
|
||||||
|
public string Email { get; set; }
|
||||||
|
public string PhotoFilePath { get; set; }
|
||||||
|
public string DirectionName { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using UniversityContracts.BindingModels;
|
using UniversityContracts.BindingModels;
|
||||||
using UniversityContracts.SearchModels;
|
|
||||||
using UniversityContracts.ViewModels;
|
using UniversityContracts.ViewModels;
|
||||||
|
|
||||||
namespace UniversityContracts.StoragesContracts
|
namespace UniversityContracts.StoragesContracts
|
||||||
@ -8,9 +7,9 @@ namespace UniversityContracts.StoragesContracts
|
|||||||
{
|
{
|
||||||
List<DirectionViewModel> GetFullList();
|
List<DirectionViewModel> GetFullList();
|
||||||
List<DirectionViewModel> GetFilteredList(DirectionBindingModel model);
|
List<DirectionViewModel> GetFilteredList(DirectionBindingModel model);
|
||||||
DirectionViewModel? GetElement(DirectionBindingModel model);
|
DirectionViewModel GetElement(DirectionBindingModel model);
|
||||||
DirectionViewModel? Insert(DirectionBindingModel model);
|
void Insert(DirectionBindingModel model);
|
||||||
DirectionViewModel? Update(DirectionBindingModel model);
|
void Update(DirectionBindingModel model);
|
||||||
DirectionViewModel? Delete(DirectionBindingModel model);
|
void Delete(DirectionBindingModel model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,10 +7,10 @@ namespace UniversityContracts.StoragesContracts
|
|||||||
public interface IStudentStorage
|
public interface IStudentStorage
|
||||||
{
|
{
|
||||||
List<StudentViewModel> GetFullList();
|
List<StudentViewModel> GetFullList();
|
||||||
List<StudentViewModel> GetFilteredList(StudentSearchModel model);
|
List<StudentViewModel> GetFilteredList(StudentBindingModel model);
|
||||||
StudentViewModel? GetElement(StudentSearchModel model);
|
StudentViewModel? GetElement(StudentBindingModel model);
|
||||||
StudentViewModel? Insert(StudentBindingModel model);
|
void Insert(StudentBindingModel model);
|
||||||
StudentViewModel? Update(StudentBindingModel model);
|
void Update(StudentBindingModel model);
|
||||||
StudentViewModel? Delete(StudentBindingModel model);
|
void Delete(StudentBindingModel model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,14 +5,14 @@ namespace UniversityContracts.ViewModels
|
|||||||
{
|
{
|
||||||
public class StudentViewModel : IStudentModel
|
public class StudentViewModel : IStudentModel
|
||||||
{
|
{
|
||||||
public int Id { get; set; }
|
public int? Id { get; set; }
|
||||||
[DisplayName("ФИО студента")]
|
[DisplayName("ФИО студента")]
|
||||||
public string FIO { get; set; } = string.Empty;
|
public string FIO { get; set; }
|
||||||
[DisplayName("Путь к фото")]
|
[DisplayName("Путь к фото")]
|
||||||
public string PhotoFilePath { get; set; } = string.Empty;
|
public string PhotoFilePath { get; set; }
|
||||||
[DisplayName("Электронная почта")]
|
[DisplayName("Электронная почта")]
|
||||||
public string Email { get; set; } = string.Empty;
|
public string Email { get; set; }
|
||||||
[DisplayName("Направление")]
|
[DisplayName("Направление")]
|
||||||
public string DirectionName { get; set; } = string.Empty;
|
public string DirectionName { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
namespace UniversityDataModels.Models
|
namespace UniversityDataModels.Models
|
||||||
{
|
{
|
||||||
public interface IStudentModel : IId
|
public interface IStudentModel
|
||||||
{
|
{
|
||||||
string FIO { get; }
|
string FIO { get; }
|
||||||
string PhotoFilePath { get; }
|
string PhotoFilePath { get; }
|
||||||
|
@ -1,80 +1,116 @@
|
|||||||
using UniversityContracts.BindingModels;
|
using UniversityContracts.BindingModels;
|
||||||
using UniversityContracts.SearchModels;
|
|
||||||
using UniversityContracts.StoragesContracts;
|
using UniversityContracts.StoragesContracts;
|
||||||
using UniversityContracts.ViewModels;
|
using UniversityContracts.ViewModels;
|
||||||
|
using UniversityDatabaseImplement;
|
||||||
using UniversityDatabaseImplement.Models;
|
using UniversityDatabaseImplement.Models;
|
||||||
|
|
||||||
namespace UniversityDatabaseImplement.Implements
|
namespace UniversityUniversityDatabaseImplement.Implements
|
||||||
{
|
{
|
||||||
public class DirectionStorage : IDirectionStorage
|
public class DirectionStorage : IDirectionStorage
|
||||||
{
|
{
|
||||||
|
public void Delete(DirectionBindingModel model)
|
||||||
|
{
|
||||||
|
var context = new UniversityDatabase();
|
||||||
|
var direction = context.Directions.FirstOrDefault(rec => rec.Id == model.Id);
|
||||||
|
if (direction != null)
|
||||||
|
{
|
||||||
|
context.Directions.Remove(direction);
|
||||||
|
context.SaveChanges();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new Exception("Направление не найдено");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public DirectionViewModel GetElement(DirectionBindingModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
using var context = new UniversityDatabase();
|
||||||
|
|
||||||
|
var direction = context.Directions
|
||||||
|
.ToList()
|
||||||
|
.FirstOrDefault(rec => rec.Id == model.Id || rec.Name == model.Name);
|
||||||
|
return direction != null ? CreateModel(direction) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public List<DirectionViewModel> GetFilteredList(DirectionBindingModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
using var context = new UniversityDatabase();
|
||||||
|
return context.Directions
|
||||||
|
.Where(rec => rec.Name.Contains(model.Name))
|
||||||
|
.Select(CreateModel)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
public List<DirectionViewModel> GetFullList()
|
public List<DirectionViewModel> GetFullList()
|
||||||
{
|
{
|
||||||
using var context = new UniversityDatabase();
|
using var context = new UniversityDatabase();
|
||||||
return context.Directions
|
return context.Directions
|
||||||
.Select(x => x.GetViewModel)
|
.Select(CreateModel)
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
public List<DirectionViewModel> GetFilteredList(DirectionBindingModel model)
|
|
||||||
|
public void Insert(DirectionBindingModel model)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(model.Name))
|
var context = new UniversityDatabase();
|
||||||
|
var transaction = context.Database.BeginTransaction();
|
||||||
|
try
|
||||||
{
|
{
|
||||||
return new();
|
context.Directions.Add(CreateModel(model, new Direction()));
|
||||||
}
|
|
||||||
using var context = new UniversityDatabase();
|
|
||||||
return context.Directions
|
|
||||||
.Select(x => x.GetViewModel)
|
|
||||||
.ToList();
|
|
||||||
}
|
|
||||||
public DirectionViewModel? GetElement(DirectionBindingModel model)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
using var context = new UniversityDatabase();
|
|
||||||
return context.Directions
|
|
||||||
.FirstOrDefault(x => (!string.IsNullOrEmpty(model.Name) &&
|
|
||||||
x.Name == model.Name) ||
|
|
||||||
(model.Id.HasValue && x.Id == model.Id))
|
|
||||||
?.GetViewModel;
|
|
||||||
}
|
|
||||||
public DirectionViewModel? Insert(DirectionBindingModel model)
|
|
||||||
{
|
|
||||||
using var context = new UniversityDatabase();
|
|
||||||
var newDirection = Direction.Create(model);
|
|
||||||
if (newDirection == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
context.Directions.Add(newDirection);
|
|
||||||
context.SaveChanges();
|
|
||||||
return newDirection.GetViewModel;
|
|
||||||
}
|
|
||||||
public DirectionViewModel? Update(DirectionBindingModel model)
|
|
||||||
{
|
|
||||||
using var context = new UniversityDatabase();
|
|
||||||
var direction = context.Directions.FirstOrDefault(rec => rec.Id == model.Id);
|
|
||||||
if (direction == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
direction.Update(model);
|
|
||||||
context.SaveChanges();
|
|
||||||
return direction.GetViewModel;
|
|
||||||
}
|
|
||||||
public DirectionViewModel? Delete(DirectionBindingModel model)
|
|
||||||
{
|
|
||||||
using var context = new UniversityDatabase();
|
|
||||||
var element = context.Directions
|
|
||||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
|
||||||
if (element != null)
|
|
||||||
{
|
|
||||||
context.Directions.Remove(element);
|
|
||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
return element.GetViewModel;
|
transaction.Commit();
|
||||||
}
|
}
|
||||||
return null;
|
catch
|
||||||
|
{
|
||||||
|
transaction.Rollback();
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Update(DirectionBindingModel model)
|
||||||
|
{
|
||||||
|
var context = new UniversityDatabase();
|
||||||
|
var transaction = context.Database.BeginTransaction();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var direction = context.Directions.FirstOrDefault(rec => rec.Id == model.Id);
|
||||||
|
if (direction == null)
|
||||||
|
{
|
||||||
|
throw new Exception("Направление не найдено");
|
||||||
|
}
|
||||||
|
CreateModel(model, direction);
|
||||||
|
context.SaveChanges();
|
||||||
|
transaction.Commit();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
transaction.Rollback();
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Direction CreateModel(DirectionBindingModel model, Direction direction)
|
||||||
|
{
|
||||||
|
direction.Name = model.Name;
|
||||||
|
return direction;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static DirectionViewModel CreateModel(Direction direction)
|
||||||
|
{
|
||||||
|
return new DirectionViewModel
|
||||||
|
{
|
||||||
|
Id = direction.Id,
|
||||||
|
Name = direction.Name
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,81 +1,119 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using UniversityContracts.BindingModels;
|
||||||
using UniversityContracts.BindingModels;
|
|
||||||
using UniversityContracts.SearchModels;
|
|
||||||
using UniversityContracts.StoragesContracts;
|
using UniversityContracts.StoragesContracts;
|
||||||
using UniversityContracts.ViewModels;
|
using UniversityContracts.ViewModels;
|
||||||
|
using UniversityDatabaseImplement;
|
||||||
using UniversityDatabaseImplement.Models;
|
using UniversityDatabaseImplement.Models;
|
||||||
|
|
||||||
namespace UniversityDatabaseImplement.Implements
|
namespace UniversityUniversityDatabaseImplement.Implements
|
||||||
{
|
{
|
||||||
public class StudentStorage : IStudentStorage
|
public class StudentStorage : IStudentStorage
|
||||||
{
|
{
|
||||||
|
public void Delete(StudentBindingModel model)
|
||||||
|
{
|
||||||
|
var context = new UniversityDatabase();
|
||||||
|
var student = context.Students.FirstOrDefault(rec => rec.Id == model.Id);
|
||||||
|
if (student != null)
|
||||||
|
{
|
||||||
|
context.Students.Remove(student);
|
||||||
|
context.SaveChanges();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new Exception("Студент не найден");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public StudentViewModel GetElement(StudentBindingModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
using var context = new UniversityDatabase();
|
||||||
|
var student = context.Students
|
||||||
|
.ToList()
|
||||||
|
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||||
|
return student != null ? CreateModel(student) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<StudentViewModel> GetFilteredList(StudentBindingModel model)
|
||||||
|
{
|
||||||
|
var context = new UniversityDatabase();
|
||||||
|
return context.Students
|
||||||
|
.Where(student => student.FIO.Contains(model.FIO))
|
||||||
|
.ToList()
|
||||||
|
.Select(CreateModel)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
public List<StudentViewModel> GetFullList()
|
public List<StudentViewModel> GetFullList()
|
||||||
{
|
{
|
||||||
using var context = new UniversityDatabase();
|
using var context = new UniversityDatabase();
|
||||||
return context.Students
|
return context.Students
|
||||||
.Select(x => x.GetViewModel)
|
.ToList()
|
||||||
|
.Select(CreateModel)
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
public List<StudentViewModel> GetFilteredList(StudentSearchModel model)
|
|
||||||
|
public void Insert(StudentBindingModel model)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(model.FIO))
|
var context = new UniversityDatabase();
|
||||||
|
var transaction = context.Database.BeginTransaction();
|
||||||
|
try
|
||||||
{
|
{
|
||||||
return new();
|
context.Students.Add(CreateModel(model, new Student()));
|
||||||
}
|
|
||||||
using var context = new UniversityDatabase();
|
|
||||||
return context.Students
|
|
||||||
.Select(x => x.GetViewModel)
|
|
||||||
.ToList();
|
|
||||||
}
|
|
||||||
public StudentViewModel? GetElement(StudentSearchModel model)
|
|
||||||
{
|
|
||||||
if (!model.Id.HasValue)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
using var context = new UniversityDatabase();
|
|
||||||
return context.Students
|
|
||||||
.FirstOrDefault(x => (!string.IsNullOrEmpty(model.FIO) &&
|
|
||||||
x.FIO == model.FIO) ||
|
|
||||||
(model.Id.HasValue && x.Id == model.Id))
|
|
||||||
?.GetViewModel;
|
|
||||||
}
|
|
||||||
public StudentViewModel? Insert(StudentBindingModel model)
|
|
||||||
{
|
|
||||||
using var context = new UniversityDatabase();
|
|
||||||
var newStudent = Student.Create(model);
|
|
||||||
if (newStudent == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
context.Students.Add(newStudent);
|
|
||||||
context.SaveChanges();
|
|
||||||
return newStudent.GetViewModel;
|
|
||||||
}
|
|
||||||
public StudentViewModel? Update(StudentBindingModel model)
|
|
||||||
{
|
|
||||||
using var context = new UniversityDatabase();
|
|
||||||
var student = context.Students.FirstOrDefault(rec => rec.Id == model.Id);
|
|
||||||
if (student == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
student.Update(model);
|
|
||||||
context.SaveChanges();
|
|
||||||
return student.GetViewModel;
|
|
||||||
}
|
|
||||||
public StudentViewModel? Delete(StudentBindingModel model)
|
|
||||||
{
|
|
||||||
using var context = new UniversityDatabase();
|
|
||||||
var element = context.Students
|
|
||||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
|
||||||
if (element != null)
|
|
||||||
{
|
|
||||||
context.Students.Remove(element);
|
|
||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
return element.GetViewModel;
|
transaction.Commit();
|
||||||
}
|
}
|
||||||
return null;
|
catch
|
||||||
|
{
|
||||||
|
transaction.Rollback();
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Update(StudentBindingModel model)
|
||||||
|
{
|
||||||
|
var context = new UniversityDatabase();
|
||||||
|
var transaction = context.Database.BeginTransaction();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var student = context.Students.FirstOrDefault(rec => rec.Id == model.Id);
|
||||||
|
if (student == null)
|
||||||
|
{
|
||||||
|
throw new Exception("Студент не найден");
|
||||||
|
}
|
||||||
|
CreateModel(model, student);
|
||||||
|
context.SaveChanges();
|
||||||
|
transaction.Commit();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
transaction.Rollback();
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Student CreateModel(StudentBindingModel model, Student student)
|
||||||
|
{
|
||||||
|
student.FIO = model.FIO;
|
||||||
|
student.PhotoFilePath = model.PhotoFilePath;
|
||||||
|
student.Email = model.Email;
|
||||||
|
student.DirectionName = model.DirectionName;
|
||||||
|
|
||||||
|
return student;
|
||||||
|
}
|
||||||
|
|
||||||
|
private StudentViewModel CreateModel(Student student)
|
||||||
|
{
|
||||||
|
return new StudentViewModel
|
||||||
|
{
|
||||||
|
Id = student.Id,
|
||||||
|
FIO = student.FIO,
|
||||||
|
PhotoFilePath = student.PhotoFilePath,
|
||||||
|
Email = student.Email,
|
||||||
|
DirectionName = student.DirectionName,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ using UniversityDatabaseImplement;
|
|||||||
namespace UniversityDatabaseImplement.Migrations
|
namespace UniversityDatabaseImplement.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(UniversityDatabase))]
|
[DbContext(typeof(UniversityDatabase))]
|
||||||
[Migration("20231027233645_InitialCreate")]
|
[Migration("20231108231603_InitialCreate")]
|
||||||
partial class InitialCreate
|
partial class InitialCreate
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
@ -1,48 +1,12 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using UniversityDataModels.Models;
|
using UniversityDataModels.Models;
|
||||||
using UniversityContracts.BindingModels;
|
|
||||||
using UniversityContracts.ViewModels;
|
|
||||||
|
|
||||||
namespace UniversityDatabaseImplement.Models
|
namespace UniversityDatabaseImplement.Models
|
||||||
{
|
{
|
||||||
public class Direction : IDirectionModel
|
public class Direction
|
||||||
{
|
{
|
||||||
public int Id { get; private set; }
|
public int Id { get; set; }
|
||||||
[Required]
|
[Required]
|
||||||
public string Name { get; private set; } = string.Empty;
|
public string Name { get; set; } = string.Empty;
|
||||||
|
|
||||||
public static Direction? Create(DirectionBindingModel model)
|
|
||||||
{
|
|
||||||
if (model == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return new Direction()
|
|
||||||
{
|
|
||||||
Id = model.Id,
|
|
||||||
Name = model.Name
|
|
||||||
};
|
|
||||||
}
|
|
||||||
public static Direction Create(DirectionViewModel model)
|
|
||||||
{
|
|
||||||
return new Direction()
|
|
||||||
{
|
|
||||||
Id = model.Id,
|
|
||||||
Name = model.Name
|
|
||||||
};
|
|
||||||
}
|
|
||||||
public void Update(DirectionBindingModel model)
|
|
||||||
{
|
|
||||||
if (model == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Name = model.Name;
|
|
||||||
}
|
|
||||||
public DirectionViewModel GetViewModel => new()
|
|
||||||
{
|
|
||||||
Id = Id,
|
|
||||||
Name = Name
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,66 +1,16 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using UniversityDataModels.Models;
|
|
||||||
using UniversityContracts.BindingModels;
|
|
||||||
using UniversityContracts.ViewModels;
|
|
||||||
|
|
||||||
namespace UniversityDatabaseImplement.Models
|
namespace UniversityDatabaseImplement.Models
|
||||||
{
|
{
|
||||||
public class Student : IStudentModel
|
public class Student
|
||||||
{
|
{
|
||||||
public int Id { get; private set; }
|
public int Id { get; set; }
|
||||||
[Required]
|
[Required]
|
||||||
public string FIO { get; private set; } = string.Empty;
|
public string FIO { get; set; }
|
||||||
[Required]
|
[Required]
|
||||||
public string Email { get; private set; } = string.Empty;
|
public string Email { get; set; }
|
||||||
[Required]
|
[Required]
|
||||||
public string PhotoFilePath { get; private set; } = string.Empty;
|
public string PhotoFilePath { get; set; }
|
||||||
[Required]
|
[Required]
|
||||||
public string DirectionName { get; private set; } = string.Empty;
|
public string DirectionName { get; set; }
|
||||||
|
|
||||||
public static Student? Create(StudentBindingModel model)
|
|
||||||
{
|
|
||||||
if (model == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return new Student()
|
|
||||||
{
|
|
||||||
Id = model.Id,
|
|
||||||
FIO = model.FIO,
|
|
||||||
Email = model.Email,
|
|
||||||
PhotoFilePath = model.PhotoFilePath,
|
|
||||||
DirectionName = model.DirectionName
|
|
||||||
};
|
|
||||||
}
|
|
||||||
public static Student Create(StudentViewModel model)
|
|
||||||
{
|
|
||||||
return new Student()
|
|
||||||
{
|
|
||||||
Id = model.Id,
|
|
||||||
FIO = model.FIO,
|
|
||||||
Email = model.Email,
|
|
||||||
PhotoFilePath = model.PhotoFilePath,
|
|
||||||
DirectionName = model.DirectionName
|
|
||||||
};
|
|
||||||
}
|
|
||||||
public void Update(StudentBindingModel model)
|
|
||||||
{
|
|
||||||
if (model == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
FIO = model.FIO;
|
|
||||||
Email = model.Email;
|
|
||||||
PhotoFilePath = model.PhotoFilePath;
|
|
||||||
DirectionName = model.DirectionName;
|
|
||||||
}
|
|
||||||
public StudentViewModel GetViewModel => new()
|
|
||||||
{
|
|
||||||
Id = Id,
|
|
||||||
FIO = FIO,
|
|
||||||
Email = Email,
|
|
||||||
PhotoFilePath = PhotoFilePath,
|
|
||||||
DirectionName = DirectionName
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ namespace UniversityView
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var list = _logic.ReadList(null);
|
var list = _logic.Read(null);
|
||||||
_list.Clear();
|
_list.Clear();
|
||||||
foreach (var item in list)
|
foreach (var item in list)
|
||||||
{
|
{
|
||||||
|
4
UniversityView/FormMain.Designer.cs
generated
4
UniversityView/FormMain.Designer.cs
generated
@ -40,6 +40,7 @@
|
|||||||
this.создатьДокументСДиаграммойToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.создатьДокументСДиаграммойToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.excelComponent = new COP.ExcelComponent(this.components);
|
this.excelComponent = new COP.ExcelComponent(this.components);
|
||||||
this.gistogramPdfComponent = new WinFormsControlLibrary.GistogramPdfComponent3(this.components);
|
this.gistogramPdfComponent = new WinFormsControlLibrary.GistogramPdfComponent3(this.components);
|
||||||
|
this.componentWord = new COPWinForms.ComponentWord2(this.components);
|
||||||
this.contextMenuStrip.SuspendLayout();
|
this.contextMenuStrip.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
@ -65,7 +66,7 @@
|
|||||||
this.создатьДокументСТаблицейToolStripMenuItem,
|
this.создатьДокументСТаблицейToolStripMenuItem,
|
||||||
this.создатьДокументСДиаграммойToolStripMenuItem});
|
this.создатьДокументСДиаграммойToolStripMenuItem});
|
||||||
this.contextMenuStrip.Name = "contextMenuStrip";
|
this.contextMenuStrip.Name = "contextMenuStrip";
|
||||||
this.contextMenuStrip.Size = new System.Drawing.Size(296, 180);
|
this.contextMenuStrip.Size = new System.Drawing.Size(296, 158);
|
||||||
//
|
//
|
||||||
// создатьToolStripMenuItem
|
// создатьToolStripMenuItem
|
||||||
//
|
//
|
||||||
@ -150,5 +151,6 @@
|
|||||||
private ToolStripMenuItem справочникиToolStripMenuItem;
|
private ToolStripMenuItem справочникиToolStripMenuItem;
|
||||||
private COP.ExcelComponent excelComponent;
|
private COP.ExcelComponent excelComponent;
|
||||||
private WinFormsControlLibrary.GistogramPdfComponent3 gistogramPdfComponent;
|
private WinFormsControlLibrary.GistogramPdfComponent3 gistogramPdfComponent;
|
||||||
|
private COPWinForms.ComponentWord2 componentWord;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,5 @@
|
|||||||
using COP.Info;
|
using COP.Info;
|
||||||
|
using COPWinForms;
|
||||||
using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing;
|
using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing;
|
||||||
using DocumentFormat.OpenXml.Spreadsheet;
|
using DocumentFormat.OpenXml.Spreadsheet;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
@ -6,9 +7,13 @@ using System.Windows.Forms;
|
|||||||
using UniversityBusinessLogic.BusinessLogics;
|
using UniversityBusinessLogic.BusinessLogics;
|
||||||
using UniversityContracts.BindingModels;
|
using UniversityContracts.BindingModels;
|
||||||
using UniversityContracts.BusinessLogicsContracts;
|
using UniversityContracts.BusinessLogicsContracts;
|
||||||
|
using UniversityContracts.SearchModels;
|
||||||
|
using UniversityContracts.ViewModels;
|
||||||
using WinFormsControlLibrary;
|
using WinFormsControlLibrary;
|
||||||
using static COP.ExcelComponent;
|
using static COP.ExcelComponent;
|
||||||
|
using static COPWinForms.ComponentWord2;
|
||||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;
|
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;
|
||||||
|
using LegendPosition = WinFormsControlLibrary.LegendPosition;
|
||||||
|
|
||||||
namespace UniversityView
|
namespace UniversityView
|
||||||
{
|
{
|
||||||
@ -32,7 +37,7 @@ namespace UniversityView
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
tableOfValues.ClearRows();
|
tableOfValues.ClearRows();
|
||||||
var list = _studentLogic.ReadList(null);
|
var list = _studentLogic.Read(null);
|
||||||
if (list != null)
|
if (list != null)
|
||||||
{
|
{
|
||||||
tableOfValues.SetCellValueFromList(list);
|
tableOfValues.SetCellValueFromList(list);
|
||||||
@ -65,6 +70,7 @@ namespace UniversityView
|
|||||||
{
|
{
|
||||||
var columnConfigs = new List<GridColumnConfig>
|
var columnConfigs = new List<GridColumnConfig>
|
||||||
{
|
{
|
||||||
|
new GridColumnConfig { HeaderText = "Id", Width = 100, Visible = false, PropertyName = "Id" },
|
||||||
new GridColumnConfig { HeaderText = "ФИО", Width = 100, Visible = true, PropertyName = "FIO" },
|
new GridColumnConfig { HeaderText = "ФИО", Width = 100, Visible = true, PropertyName = "FIO" },
|
||||||
new GridColumnConfig { HeaderText = "Направление", Width = 80, Visible = true, PropertyName = "DirectionName" },
|
new GridColumnConfig { HeaderText = "Направление", Width = 80, Visible = true, PropertyName = "DirectionName" },
|
||||||
new GridColumnConfig { HeaderText = "Электронная почта", Width = 80, Visible = true, PropertyName = "Email" },
|
new GridColumnConfig { HeaderText = "Электронная почта", Width = 80, Visible = true, PropertyName = "Email" },
|
||||||
@ -75,19 +81,46 @@ namespace UniversityView
|
|||||||
|
|
||||||
private void ИзменитьToolStripMenuItem_Click(object sender, EventArgs e)
|
private void ИзменитьToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
var service = Program.ServiceProvider?.GetService(typeof(FormStudent));
|
||||||
|
if (service is FormStudent form)
|
||||||
|
{
|
||||||
|
if (tableOfValues.SelectedRowIndex != -1)
|
||||||
|
{
|
||||||
|
var selectedStudent = tableOfValues.GetSelectedObject<StudentSearchModel>();
|
||||||
|
form.Id = Convert.ToInt32(selectedStudent.Id);
|
||||||
|
if (form.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MessageBox.Show("Выберите студента для редактирования");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void УдалитьToolStripMenuItem_Click(object sender, EventArgs e)
|
private void УдалитьToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
DialogResult dialogResult = MessageBox.Show("Удалить выбранный элемент?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
|
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
||||||
if (dialogResult == DialogResult.Yes)
|
{
|
||||||
_studentLogic.Delete(new StudentBindingModel { Id = tableOfValues.SelectedRowIndex });
|
var selectedStudent = tableOfValues.GetSelectedObject<StudentSearchModel>();
|
||||||
LoadData();
|
int id = Convert.ToInt32(selectedStudent.Id);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_studentLogic.Delete(new StudentBindingModel { Id = id });
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void СоздатьПростойДокументToolStripMenuItem_Click(object sender, EventArgs e)
|
private void СоздатьПростойДокументToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
var list = _studentLogic.ReadList(null);
|
var list = _studentLogic.Read(null);
|
||||||
List<ImageInfo> images = new();
|
List<ImageInfo> images = new();
|
||||||
using var dialog = new SaveFileDialog
|
using var dialog = new SaveFileDialog
|
||||||
{
|
{
|
||||||
@ -118,13 +151,62 @@ namespace UniversityView
|
|||||||
|
|
||||||
private void СоздатьДокументСТаблицейToolStripMenuItem_Click(object sender, EventArgs e)
|
private void СоздатьДокументСТаблицейToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
var list = _studentLogic.Read(null);
|
||||||
|
List<StudentBindingModel> data = new();
|
||||||
|
List<int[]> mergedColumns = new()
|
||||||
|
{
|
||||||
|
new int[] { 1, 2 }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
List<ColumnDefinition> columnDefinitions = new()
|
||||||
|
{
|
||||||
|
new ColumnDefinition { Header = "Идентификатор", PropertyName = "Id", Width = 11 },
|
||||||
|
new ColumnDefinition { Header = "Личные данные", PropertyName = "PersonalData", Width = 11 },
|
||||||
|
new ColumnDefinition { Header = "Личные данные", PropertyName = "PersonalData1", Width = 11 },
|
||||||
|
new ColumnDefinition { Header = "Направление", PropertyName = "DirectionName", Width = 21 }
|
||||||
|
};
|
||||||
|
|
||||||
|
List<ColumnDefinition> columnDefinitions2 = new()
|
||||||
|
{
|
||||||
|
new ColumnDefinition { Header = "Идентификатор", PropertyName = "Id", Width = 11 },
|
||||||
|
new ColumnDefinition { Header = "ФИО", PropertyName = "FIO", Width = 11 },
|
||||||
|
new ColumnDefinition { Header = "Электронная почта", PropertyName = "Email", Width = 70 },
|
||||||
|
new ColumnDefinition { Header = "Направление", PropertyName = "DirectionName", Width = 21 }
|
||||||
|
};
|
||||||
|
|
||||||
|
using var dialog = new SaveFileDialog
|
||||||
|
{
|
||||||
|
Filter = "docx|*.docx"
|
||||||
|
};
|
||||||
|
|
||||||
|
if (dialog.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (list != null)
|
||||||
|
{
|
||||||
|
foreach (var item in list)
|
||||||
|
{
|
||||||
|
data.Add(new StudentBindingModel() { Id = item.Id, FIO = item.FIO, Email = item.Email, DirectionName = item.DirectionName});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TableWord<StudentBindingModel> tableWord = new(dialog.FileName, "Таблица со студентами", columnDefinitions, columnDefinitions2, data, mergedColumns);
|
||||||
|
componentWord.CreateTable(tableWord);
|
||||||
|
MessageBox.Show("Сохарнено успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
MessageBox.Show(ex.Message, "Ошибка",
|
||||||
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void СоздатьДокументСДиаграммойToolStripMenuItem_Click(object sender, EventArgs e)
|
private void СоздатьДокументСДиаграммойToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
var listStudents = _studentLogic.ReadList(null);
|
var listStudents = _studentLogic.Read(null);
|
||||||
var listDirections = _directionLogic.ReadList(null);
|
var listDirections = _directionLogic.Read(null);
|
||||||
List<(string, int)> data = new();
|
List<(string, int)> data = new();
|
||||||
List<HistogramData> gistData = new();
|
List<HistogramData> gistData = new();
|
||||||
using var dialog = new SaveFileDialog
|
using var dialog = new SaveFileDialog
|
||||||
|
@ -66,4 +66,7 @@
|
|||||||
<metadata name="gistogramPdfComponent.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="gistogramPdfComponent.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>309, 17</value>
|
<value>309, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
<metadata name="componentWord.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>499, 17</value>
|
||||||
|
</metadata>
|
||||||
</root>
|
</root>
|
@ -1,7 +1,11 @@
|
|||||||
using Microsoft.Extensions.Logging;
|
using DocumentFormat.OpenXml.Office2010.Excel;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using NPOI.OpenXmlFormats.Spreadsheet;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
|
using UniversityBusinessLogic.BusinessLogics;
|
||||||
using UniversityContracts.BindingModels;
|
using UniversityContracts.BindingModels;
|
||||||
using UniversityContracts.BusinessLogicsContracts;
|
using UniversityContracts.BusinessLogicsContracts;
|
||||||
|
using UniversityContracts.ViewModels;
|
||||||
|
|
||||||
namespace UniversityView
|
namespace UniversityView
|
||||||
{
|
{
|
||||||
@ -14,6 +18,8 @@ namespace UniversityView
|
|||||||
BindingList<DirectionBindingModel> _list;
|
BindingList<DirectionBindingModel> _list;
|
||||||
private int? _id;
|
private int? _id;
|
||||||
public int Id { set { _id = value; } }
|
public int Id { set { _id = value; } }
|
||||||
|
private string? _item;
|
||||||
|
private string itemChecked { set { _item = value; } }
|
||||||
List<string> directions = new();
|
List<string> directions = new();
|
||||||
public FormStudent(ILogger<FormStudent> logger, IStudentLogic studentLogic, IDirectionLogic directionLogic)
|
public FormStudent(ILogger<FormStudent> logger, IStudentLogic studentLogic, IDirectionLogic directionLogic)
|
||||||
{
|
{
|
||||||
@ -52,19 +58,15 @@ namespace UniversityView
|
|||||||
_logger.LogInformation("Сохранение студента");
|
_logger.LogInformation("Сохранение студента");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var model = new StudentBindingModel
|
_studentLogic.CreateOrUpdate(new StudentBindingModel
|
||||||
{
|
{
|
||||||
Id = _id ?? 0,
|
Id = _id,
|
||||||
FIO = textBoxFIO.Text,
|
FIO = textBoxFIO.Text,
|
||||||
Email = componenttBox1.TextBoxValue,
|
|
||||||
PhotoFilePath = imagePath,
|
PhotoFilePath = imagePath,
|
||||||
|
Email = componenttBox1.TextBoxValue,
|
||||||
DirectionName = userCheckedListBox1.SelectedValue
|
DirectionName = userCheckedListBox1.SelectedValue
|
||||||
};
|
}); ;
|
||||||
var operationResult = _id.HasValue ? _studentLogic.Update(model) : _studentLogic.Create(model);
|
|
||||||
if (!operationResult)
|
|
||||||
{
|
|
||||||
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
|
|
||||||
}
|
|
||||||
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
DialogResult = DialogResult.OK;
|
DialogResult = DialogResult.OK;
|
||||||
Close();
|
Close();
|
||||||
@ -85,6 +87,29 @@ namespace UniversityView
|
|||||||
private void FormStudent_Load(object sender, EventArgs e)
|
private void FormStudent_Load(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
LoadData();
|
LoadData();
|
||||||
|
if (_id.HasValue)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
StudentViewModel? view = _studentLogic.Read(new StudentBindingModel { Id = _id.Value })?[0];
|
||||||
|
if (view != null)
|
||||||
|
{
|
||||||
|
textBoxFIO.Text = view.FIO;
|
||||||
|
componenttBox1.TextBoxValue = view.Email;
|
||||||
|
imagePath = view.PhotoFilePath;
|
||||||
|
string[] dirs = view.DirectionName.Split(";");
|
||||||
|
foreach (var dir in dirs)
|
||||||
|
{
|
||||||
|
userCheckedListBox1.SelectedValue = dir;
|
||||||
|
}
|
||||||
|
pictureBox.Image = Image.FromFile(imagePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LoadData()
|
private void LoadData()
|
||||||
@ -92,7 +117,7 @@ namespace UniversityView
|
|||||||
_logger.LogInformation("Загрузка направлений");
|
_logger.LogInformation("Загрузка направлений");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var list = _directionLogic.ReadList(null);
|
var list = _directionLogic.Read(null);
|
||||||
userCheckedListBox1.ClearList();
|
userCheckedListBox1.ClearList();
|
||||||
directions.Clear();
|
directions.Clear();
|
||||||
_list.Clear();
|
_list.Clear();
|
||||||
|
@ -5,7 +5,7 @@ using System;
|
|||||||
using UniversityBusinessLogic.BusinessLogics;
|
using UniversityBusinessLogic.BusinessLogics;
|
||||||
using UniversityContracts.BusinessLogicsContracts;
|
using UniversityContracts.BusinessLogicsContracts;
|
||||||
using UniversityContracts.StoragesContracts;
|
using UniversityContracts.StoragesContracts;
|
||||||
using UniversityDatabaseImplement.Implements;
|
using UniversityUniversityDatabaseImplement.Implements;
|
||||||
|
|
||||||
namespace UniversityView
|
namespace UniversityView
|
||||||
{
|
{
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.1" />
|
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.1" />
|
||||||
<PackageReference Include="NLog" Version="5.2.5" />
|
<PackageReference Include="NLog" Version="5.2.5" />
|
||||||
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.5" />
|
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.5" />
|
||||||
<PackageReference Include="winformscontrollibrary" Version="1.0.0" />
|
<PackageReference Include="WinFormsControlLibrary" Version="1.0.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
Loading…
Reference in New Issue
Block a user