Merge branch 'Feature/MainProjectWithCommonAndBase' of https://github.com/kotcheshir73/DepartmentProject into Feature/StudentProgress

This commit is contained in:
kotcheshir73 2022-03-16 12:48:04 +04:00
commit ec9ff8c28a
34 changed files with 3966 additions and 950 deletions

View File

@ -8,18 +8,17 @@ using ModuleTools.Models;
using ModuleTools.ViewModels; using ModuleTools.ViewModels;
using System; using System;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
namespace DatabaseCore namespace DatabaseCore
{ {
public abstract class AbstractGenerticEntityService<G, S, T, L, E> : IGenerticEntityService<G, S> public abstract class AbstractGenerticEntityService<G, S, T, L, E> : IGenerticEntityService<G, S>
where G : GetBindingModel where G : GetBindingModel
where S : SetBindingModel where S : SetBindingModel
where T : BaseEntity where T : BaseEntity
where L : ListViewModel<E>, new() where L : ListViewModel<E>, new()
where E : ElementViewModel where E : ElementViewModel
{ {
public async Task<OperationResultModel> CreateAsync(S model) public OperationResultModel Create(S model)
{ {
using var context = DatabaseManager.GetContext; using var context = DatabaseManager.GetContext;
@ -33,8 +32,8 @@ namespace DatabaseCore
if (exsistEntity == null) if (exsistEntity == null)
{ {
var entity = Mapper.MapToClass<S, T>(model, true); var entity = Mapper.MapToClass<S, T>(model, true);
await context.Set<T>().AddAsync(entity); context.Set<T>().Add(entity);
await context.SaveChangesAsync(); context.SaveChanges();
return OperationResultModel.Success(Mapper.MapToClass<T, E>(entity, true)); return OperationResultModel.Success(Mapper.MapToClass<T, E>(entity, true));
} }
else else
@ -43,7 +42,7 @@ namespace DatabaseCore
{ {
exsistEntity = Mapper.MapToClass(model, exsistEntity, true); exsistEntity = Mapper.MapToClass(model, exsistEntity, true);
exsistEntity.IsDeleted = false; exsistEntity.IsDeleted = false;
await context.SaveChangesAsync(); context.SaveChanges();
return OperationResultModel.Success(Mapper.MapToClass<T, E>(exsistEntity, true)); return OperationResultModel.Success(Mapper.MapToClass<T, E>(exsistEntity, true));
} }
else else
@ -53,13 +52,13 @@ namespace DatabaseCore
} }
} }
public async Task<OperationResultModel> DeleteAsync(G model) public OperationResultModel Delete(G model)
{ {
using var context = DatabaseManager.GetContext; using var context = DatabaseManager.GetContext;
using var transaction = context.Database.BeginTransaction(); using var transaction = context.Database.BeginTransaction();
try try
{ {
var entity = await context.Set<T>().FirstOrDefaultAsync(x => x.Id == model.Id); var entity = context.Set<T>().FirstOrDefault(x => x.Id == model.Id);
if (entity == null) if (entity == null)
{ {
return OperationResultModel.Error("Error:", "Элемент не найден", ResultServiceStatusCode.NotFound); return OperationResultModel.Error("Error:", "Элемент не найден", ResultServiceStatusCode.NotFound);
@ -78,22 +77,22 @@ namespace DatabaseCore
entity.IsDeleted = true; entity.IsDeleted = true;
entity.DateDelete = DateTime.Now; entity.DateDelete = DateTime.Now;
await context.SaveChangesAsync(); context.SaveChanges();
AdditionalDeleting(context, entity, model); AdditionalDeleting(context, entity, model);
await transaction.CommitAsync(); transaction.Commit();
} }
catch (Exception) catch (Exception)
{ {
await transaction.RollbackAsync(); transaction.Rollback();
throw; throw;
} }
return OperationResultModel.Success(true); return OperationResultModel.Success(true);
} }
public async Task<OperationResultModel> RestoreAsync(G model) public OperationResultModel Restore(G model)
{ {
if (model.Id.HasValue || AdditionalCheckForSingleGet(model)) if (model.Id.HasValue || AdditionalCheckForSingleGet(model))
{ {
@ -110,14 +109,14 @@ namespace DatabaseCore
} }
entity.IsDeleted = false; entity.IsDeleted = false;
await context.SaveChangesAsync(); context.SaveChanges();
return OperationResultModel.Success(Mapper.MapToClass<T, E>(entity, true)); return OperationResultModel.Success(Mapper.MapToClass<T, E>(entity, true));
} }
return OperationResultModel.Error("Error:", "Элемент не найден", ResultServiceStatusCode.NotFound); return OperationResultModel.Error("Error:", "Элемент не найден", ResultServiceStatusCode.NotFound);
} }
public async Task<OperationResultModel> ReadAsync(G model) public OperationResultModel Read(G model)
{ {
int countPages = 0; int countPages = 0;
using var context = DatabaseManager.GetContext; using var context = DatabaseManager.GetContext;
@ -146,27 +145,23 @@ namespace DatabaseCore
query = IncludingWhenReading(query); query = IncludingWhenReading(query);
return await Task.Run(() => if (model.PageNumber.HasValue && model.PageSize.HasValue)
{ {
countPages = (int)Math.Ceiling((double)query.Count() / model.PageSize.Value);
query = query
.Skip(model.PageSize.Value * model.PageNumber.Value)
.Take(model.PageSize.Value);
}
var result = new L
{
MaxCount = countPages,
List = query.Select(x => Mapper.MapToClass<T, E>(x, model.HaveRight)).ToList()
};
if (model.PageNumber.HasValue && model.PageSize.HasValue) return OperationResultModel.Success(result);
{
countPages = (int)Math.Ceiling((double)query.Count() / model.PageSize.Value);
query = query
.Skip(model.PageSize.Value * model.PageNumber.Value)
.Take(model.PageSize.Value);
}
var result = new L
{
MaxCount = countPages,
List = query.Select(x => Mapper.MapToClass<T, E>(x, model.HaveRight)).ToList()
};
return OperationResultModel.Success(result);
});
} }
public async Task<OperationResultModel> UpdateAsync(S model) public OperationResultModel Update(S model)
{ {
using var context = DatabaseManager.GetContext; using var context = DatabaseManager.GetContext;
@ -193,7 +188,7 @@ namespace DatabaseCore
} }
entity = Mapper.MapToClass(model, entity, true); entity = Mapper.MapToClass(model, entity, true);
await context.SaveChangesAsync(); context.SaveChanges();
return OperationResultModel.Success(Mapper.MapToClass<T, E>(entity, true)); return OperationResultModel.Success(Mapper.MapToClass<T, E>(entity, true));
} }

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,31 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace DatabaseCore.Migrations
{
public partial class UpdateStudnet2 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "Email",
table: "Students",
type: "nvarchar(max)",
nullable: true,
oldClrType: typeof(string),
oldType: "nvarchar(max)");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "Email",
table: "Students",
type: "nvarchar(max)",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "nvarchar(max)",
oldNullable: true);
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,56 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
namespace DatabaseCore.Migrations
{
public partial class UpdateStudnet3 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Students_StudentGroups_StudentGroupId",
table: "Students");
migrationBuilder.AlterColumn<Guid>(
name: "StudentGroupId",
table: "Students",
type: "uniqueidentifier",
nullable: true,
oldClrType: typeof(Guid),
oldType: "uniqueidentifier");
migrationBuilder.AddForeignKey(
name: "FK_Students_StudentGroups_StudentGroupId",
table: "Students",
column: "StudentGroupId",
principalTable: "StudentGroups",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Students_StudentGroups_StudentGroupId",
table: "Students");
migrationBuilder.AlterColumn<Guid>(
name: "StudentGroupId",
table: "Students",
type: "uniqueidentifier",
nullable: false,
defaultValue: new Guid("00000000-0000-0000-0000-000000000000"),
oldClrType: typeof(Guid),
oldType: "uniqueidentifier",
oldNullable: true);
migrationBuilder.AddForeignKey(
name: "FK_Students_StudentGroups_StudentGroupId",
table: "Students",
column: "StudentGroupId",
principalTable: "StudentGroups",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
}
}

View File

@ -796,7 +796,6 @@ namespace DatabaseCore.Migrations
.HasColumnType("nvarchar(max)"); .HasColumnType("nvarchar(max)");
b.Property<string>("Email") b.Property<string>("Email")
.IsRequired()
.HasColumnType("nvarchar(max)"); .HasColumnType("nvarchar(max)");
b.Property<string>("FirstName") b.Property<string>("FirstName")
@ -828,7 +827,6 @@ namespace DatabaseCore.Migrations
.HasColumnType("varbinary(max)"); .HasColumnType("varbinary(max)");
b.Property<Guid?>("StudentGroupId") b.Property<Guid?>("StudentGroupId")
.IsRequired()
.HasColumnType("uniqueidentifier"); .HasColumnType("uniqueidentifier");
b.Property<int>("StudentState") b.Property<int>("StudentState")
@ -1332,9 +1330,7 @@ namespace DatabaseCore.Migrations
{ {
b.HasOne("DatabaseCore.Models.Department.StudentGroup", "StudentGroup") b.HasOne("DatabaseCore.Models.Department.StudentGroup", "StudentGroup")
.WithMany("Students") .WithMany("Students")
.HasForeignKey("StudentGroupId") .HasForeignKey("StudentGroupId");
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("DatabaseCore.Models.Security.User", "User") b.HasOne("DatabaseCore.Models.Security.User", "User")
.WithMany("Students") .WithMany("Students")

View File

@ -26,7 +26,6 @@ namespace DatabaseCore.Models.Department
public Guid UserId { get; set; } public Guid UserId { get; set; }
[DataMember] [DataMember]
[Required]
[MapConfiguration("StudentGroupId")] [MapConfiguration("StudentGroupId")]
public Guid? StudentGroupId { get; set; } public Guid? StudentGroupId { get; set; }
@ -55,7 +54,6 @@ namespace DatabaseCore.Models.Department
public string Patronymic { get; set; } public string Patronymic { get; set; }
[DataMember] [DataMember]
[Required]
[MapConfiguration("Email")] [MapConfiguration("Email")]
public string Email { get; set; } public string Email { get; set; }

View File

@ -18,396 +18,396 @@ using System.Xml.Linq;
namespace DesktopTools.Controls namespace DesktopTools.Controls
{ {
public partial class GenericControlEntityElement<G, S, L, E, BL> : MainControlViewEntityElement, IControlViewEntityElement public partial class GenericControlEntityElement<G, S, L, E, BL> : MainControlViewEntityElement, IControlViewEntityElement
where G : GetBindingModel, new() where G : GetBindingModel, new()
where S : SetBindingModel, new() where S : SetBindingModel, new()
where L : ListViewModel<E> where L : ListViewModel<E>
where E : ElementViewModel where E : ElementViewModel
where BL : GenericBusinessLogic<G, S, L, E> where BL : GenericBusinessLogic<G, S, L, E>
{ {
/// <summary> /// <summary>
/// Объект бизнес-логики для получения данных /// Объект бизнес-логики для получения данных
/// </summary> /// </summary>
protected readonly BL _businessLogic; protected readonly BL _businessLogic;
/// <summary> /// <summary>
/// Методы для реализации в generic-контроле /// Методы для реализации в generic-контроле
/// </summary> /// </summary>
protected IGenericControlEntityElement _genericControlViewEntityElement; protected IGenericControlEntityElement _genericControlViewEntityElement;
/// <summary> /// <summary>
/// Признак налиичия изменений /// Признак налиичия изменений
/// </summary> /// </summary>
private bool _haveChages = false; private bool _haveChages = false;
/// <summary> /// <summary>
/// Ширина контрола по умолчанию /// Ширина контрола по умолчанию
/// </summary> /// </summary>
private readonly int _defaultControlWidth = 350; private readonly int _defaultControlWidth = 350;
protected E _element = null; protected E _element = null;
/// <summary> /// <summary>
/// Событие, вызываемое при закрытии контрола /// Событие, вызываемое при закрытии контрола
/// </summary> /// </summary>
private event Action<Guid> CloseElementEvent; private event Action<Guid> CloseElementEvent;
/// <summary> /// <summary>
/// События установки одинаковой ширины для заголовков контролов /// События установки одинаковой ширины для заголовков контролов
/// </summary> /// </summary>
private event Action<int> SetTitleWidth; private event Action<int> SetTitleWidth;
/// <summary> /// <summary>
/// Событие установки значения /// Событие установки значения
/// </summary> /// </summary>
private event Action<object> SetValues; private event Action<object> SetValues;
/// <summary> /// <summary>
/// Событие сброса значения в исходное состояние /// Событие сброса значения в исходное состояние
/// </summary> /// </summary>
private event Action DropValues; private event Action DropValues;
/// <summary> /// <summary>
/// Событие проверки заполненности контрола /// Событие проверки заполненности контрола
/// </summary> /// </summary>
private event Func<bool> CheckValues; private event Func<bool> CheckValues;
/// <summary> /// <summary>
/// Событие получения значения из контрола /// Событие получения значения из контрола
/// </summary> /// </summary>
private event Action<object> GetValues; private event Action<object> GetValues;
private E Element private E Element
{ {
get { return _element; } get { return _element; }
set set
{ {
try try
{ {
_element = value; _element = value;
if (_element != null) if (_element != null)
{ {
SetValues?.Invoke(_element); SetValues?.Invoke(_element);
if (tabControl.Visible) if (tabControl.Visible)
{ {
foreach (TabPage page in tabControl.TabPages) foreach (TabPage page in tabControl.TabPages)
{ {
if (page.Name == tabPageMain.Name) if (page.Name == tabPageMain.Name)
{ {
continue; continue;
} }
if (page.Controls[0] is IControlChildEntity cntrl) if (page.Controls[0] is IControlChildEntity cntrl)
{ {
cntrl.ParentId = _element.Id; cntrl.ParentId = _element.Id;
cntrl.Open(new ControlOpenModel { OpenMode = ControlOpenMode.Child }); cntrl.Open(new ControlOpenModel { OpenMode = ControlOpenMode.Child });
} }
} }
} }
} }
_haveChages = false; _haveChages = false;
} }
catch (Exception ex) catch (Exception ex)
{ {
DialogHelper.MessageException(ex.Message, $"{Title}. Ошибка при установки значений"); DialogHelper.MessageException(ex.Message, $"{Title}. Ошибка при установки значений");
} }
} }
} }
public GenericControlEntityElement() public GenericControlEntityElement()
{ {
InitializeComponent(); InitializeComponent();
InitEvents(); InitEvents();
_businessLogic = DependencyManager.Instance.Resolve<BL>(); _businessLogic = DependencyManager.Instance.Resolve<BL>();
_controlViewEntityElement = this; _controlViewEntityElement = this;
} }
public async void OpenControl(ControlOpenModel model) public void OpenControl(ControlOpenModel model)
{ {
if (model.CloseElement != null) if (model.CloseElement != null)
{ {
CloseElementEvent += model.CloseElement; CloseElementEvent += model.CloseElement;
} }
if (panelContainer.Controls.Count == 0) if (panelContainer.Controls.Count == 0)
{ {
try try
{ {
Configurate(GetConfig()); Configurate(GetConfig());
} }
catch (Exception ex) catch (Exception ex)
{ {
DialogHelper.MessageException(ex.Message, $"{Title}. Ошибка при конфигурации"); DialogHelper.MessageException(ex.Message, $"{Title}. Ошибка при конфигурации");
} }
} }
if (model.ElementId.HasValue) if (model.ElementId.HasValue)
{ {
Element = await _businessLogic.GetElementAsync(new G { Id = model.ElementId }); Element = _businessLogic.GetElement(new G { Id = model.ElementId });
if (Element == null) if (Element == null)
{ {
DialogHelper.MessageException(_businessLogic.Errors, $"{Title}. Ошибки при получении элемента"); DialogHelper.MessageException(_businessLogic.Errors, $"{Title}. Ошибки при получении элемента");
} }
} }
Dock = DockStyle.Fill; Dock = DockStyle.Fill;
} }
public IControl GetInstanceControl() => _genericControlViewEntityElement?.GetInstanceGenericControl(); public IControl GetInstanceControl() => _genericControlViewEntityElement?.GetInstanceGenericControl();
public string SaveControlToXml() => new XElement("Control", public string SaveControlToXml() => new XElement("Control",
new XAttribute("Type", GetType().FullName), new XAttribute("Type", GetType().FullName),
new XAttribute("ControlId", ControlId), new XAttribute("ControlId", ControlId),
new XAttribute("Title", Title)).ToString(); new XAttribute("Title", Title)).ToString();
public void LoadControlFromXml(string xml) public void LoadControlFromXml(string xml)
{ {
var control = XElement.Parse(xml).Element("Control"); var control = XElement.Parse(xml).Element("Control");
ControlId = new Guid(control.Attribute("ControlId").Value.ToString()); ControlId = new Guid(control.Attribute("ControlId").Value.ToString());
Title = control.Attribute("Title").Value.ToString(); Title = control.Attribute("Title").Value.ToString();
} }
private void InitEvents() private void InitEvents()
{ {
toolStripButtonSave.Click += async (object sender, EventArgs e) => { await SaveAsync(); }; toolStripButtonSave.Click += (object sender, EventArgs e) => { Save(); };
toolStripButtonReload.Click += (object sender, EventArgs e) => toolStripButtonReload.Click += (object sender, EventArgs e) =>
{ {
if (DialogHelper.MessageQuestion("Отменить все внесенные изменения?") == DialogResult.Yes) if (DialogHelper.MessageQuestion("Отменить все внесенные изменения?") == DialogResult.Yes)
{ {
try try
{ {
DropValues?.Invoke(); DropValues?.Invoke();
} }
catch (Exception ex) catch (Exception ex)
{ {
DialogHelper.MessageException(ex.Message, $"{Title}. Ошибка при сбросе значений"); DialogHelper.MessageException(ex.Message, $"{Title}. Ошибка при сбросе значений");
} }
} }
}; };
toolStripButtonClose.Click += async (object sender, EventArgs e) => toolStripButtonClose.Click += (object sender, EventArgs e) =>
{ {
if (_haveChages && DialogHelper.MessageQuestion("Имеется несохраненные данные, вы действительно хотите закрыть элемент?", "Закрытие элемента") == DialogResult.Yes) if (_haveChages && DialogHelper.MessageQuestion("Имеется несохраненные данные, вы действительно хотите закрыть элемент?", "Закрытие элемента") == DialogResult.Yes)
{ {
if (!(await SaveAsync())) if (!Save())
{ {
return; return;
} }
} }
CloseElementEvent?.Invoke(ControlId); CloseElementEvent?.Invoke(ControlId);
Dispose(); Dispose();
}; };
} }
private void Configurate(ControlViewEntityElementConfiguration config) private void Configurate(ControlViewEntityElementConfiguration config)
{ {
// Загрузка подпунктов в контекстное меню и в пункт меню "Действие" // Загрузка подпунктов в контекстное меню и в пункт меню "Действие"
if (config.ControlOnMoveElem != null) if (config.ControlOnMoveElem != null)
{ {
foreach (var elem in config.ControlOnMoveElem) foreach (var elem in config.ControlOnMoveElem)
{ {
ToolStripMenuItem item = new() { Text = elem.Value.Title, Name = elem.Key }; ToolStripMenuItem item = new() { Text = elem.Value.Title, Name = elem.Key };
item.Click += elem.Value.Event; item.Click += elem.Value.Event;
toolStripSplitButtonActions.DropDownItems.Add(item); toolStripSplitButtonActions.DropDownItems.Add(item);
ToolStripMenuItem itemContext = new() { Text = elem.Value.Title, Name = elem.Key }; ToolStripMenuItem itemContext = new() { Text = elem.Value.Title, Name = elem.Key };
itemContext.Click += elem.Value.Event; itemContext.Click += elem.Value.Event;
contextMenuStripElement.Items.Add(itemContext); contextMenuStripElement.Items.Add(itemContext);
} }
} }
// либо скрытие пункта, если не предусмотренно подпунктов // либо скрытие пункта, если не предусмотренно подпунктов
else else
{ {
toolStripSplitButtonActions.Visible = false; toolStripSplitButtonActions.Visible = false;
toolStripSeparator1.Visible = false; toolStripSeparator1.Visible = false;
} }
var attributeClass = typeof(E).GetCustomAttribute<ViewModelControlElementClassAttribute>(); var attributeClass = typeof(E).GetCustomAttribute<ViewModelControlElementClassAttribute>();
if (attributeClass == null) if (attributeClass == null)
{ {
return; return;
} }
tabControl.Visible = attributeClass.HaveDependenceEntities; tabControl.Visible = attributeClass.HaveDependenceEntities;
panelContainer.Visible = !attributeClass.HaveDependenceEntities; panelContainer.Visible = !attributeClass.HaveDependenceEntities;
Width = attributeClass.Width != 0 ? attributeClass.Width : _defaultControlWidth; Width = attributeClass.Width != 0 ? attributeClass.Width : _defaultControlWidth;
int positionY = 5; int positionY = 5;
int positionX = 5; int positionX = 5;
int interval = 15; int interval = 15;
int titleWidth = 0; int titleWidth = 0;
foreach (var property in typeof(E).GetProperties()) foreach (var property in typeof(E).GetProperties())
{ {
var attribute = property.GetCustomAttribute<ViewModelControlElementPropertyAttribute>(); var attribute = property.GetCustomAttribute<ViewModelControlElementPropertyAttribute>();
if (attribute != null) if (attribute != null)
{ {
AbstractBaseControl control = null; AbstractBaseControl control = null;
switch (attribute.ControlType) switch (attribute.ControlType)
{ {
case ControlType.ControlString: case ControlType.ControlString:
control = new BaseControlString(property.Name, attribute.MustHaveValue, attribute.ReadOnly, attribute.MaxLength); control = new BaseControlString(property.Name, attribute.MustHaveValue, attribute.ReadOnly, attribute.MaxLength);
break; break;
case ControlType.ControlText: case ControlType.ControlText:
control = new BaseControlText(property.Name, attribute.MustHaveValue, attribute.ReadOnly, attribute.MaxLength, attribute.Height); control = new BaseControlText(property.Name, attribute.MustHaveValue, attribute.ReadOnly, attribute.MaxLength, attribute.Height);
break; break;
case ControlType.ControlInt: case ControlType.ControlInt:
control = new BaseControlInt(property.Name, attribute.MustHaveValue, attribute.ReadOnly, attribute.MinValue, attribute.MaxValue); control = new BaseControlInt(property.Name, attribute.MustHaveValue, attribute.ReadOnly, attribute.MinValue, attribute.MaxValue);
break; break;
case ControlType.ControlDecimal: case ControlType.ControlDecimal:
control = new BaseControlDecimal(property.Name, attribute.MustHaveValue, attribute.ReadOnly, attribute.MinValue, control = new BaseControlDecimal(property.Name, attribute.MustHaveValue, attribute.ReadOnly, attribute.MinValue,
attribute.MaxValue, attribute.DecimalPlaces); attribute.MaxValue, attribute.DecimalPlaces);
break; break;
case ControlType.ControlBool: case ControlType.ControlBool:
control = new BaseControlBool(property.Name, attribute.MustHaveValue, attribute.ReadOnly); control = new BaseControlBool(property.Name, attribute.MustHaveValue, attribute.ReadOnly);
break; break;
case ControlType.ControlDateTime: case ControlType.ControlDateTime:
control = new BaseControlDateTime(property.Name, attribute.MustHaveValue, attribute.ReadOnly, attribute.MinDate, control = new BaseControlDateTime(property.Name, attribute.MustHaveValue, attribute.ReadOnly, attribute.MinDate,
attribute.MaxDate, attribute.CustomDateFormat); attribute.MaxDate, attribute.CustomDateFormat);
break; break;
case ControlType.ControlImage: case ControlType.ControlImage:
control = new BaseControlImage(property.Name, attribute.MustHaveValue, attribute.ReadOnly, attribute.Width, attribute.Height); control = new BaseControlImage(property.Name, attribute.MustHaveValue, attribute.ReadOnly, attribute.Width, attribute.Height);
break; break;
case ControlType.ControlEnum: case ControlType.ControlEnum:
control = new BaseControlEnum(property.Name, attribute.MustHaveValue, attribute.ReadOnly, property.PropertyType); control = new BaseControlEnum(property.Name, attribute.MustHaveValue, attribute.ReadOnly, property.PropertyType);
break; break;
case ControlType.ControlGuid: case ControlType.ControlGuid:
if (attribute.ControlTypeObject.IsNotEmpty() && Type.GetType(attribute.ControlTypeObject) != null) if (attribute.ControlTypeObject.IsNotEmpty() && Type.GetType(attribute.ControlTypeObject) != null)
{ {
control = new BaseControlGuid(property.Name, attribute.MustHaveValue, attribute.ReadOnly, control = new BaseControlGuid(property.Name, attribute.MustHaveValue, attribute.ReadOnly,
DependencyManager.Instance.Resolve(Type.GetType(attribute.ControlTypeObject)) as IControlEntitySelectable, DependencyManager.Instance.Resolve(Type.GetType(attribute.ControlTypeObject)) as IControlEntitySelectable,
property.Name == ParentPropertyName ? ParentId : null); property.Name == ParentPropertyName ? ParentId : null);
} }
break; break;
} }
if (control == null) if (control == null)
{ {
continue; continue;
} }
var widthTitle = control.SetTitle(attribute.DisplayName); var widthTitle = control.SetTitle(attribute.DisplayName);
if (widthTitle > titleWidth) if (widthTitle > titleWidth)
{ {
titleWidth = widthTitle; titleWidth = widthTitle;
} }
control.OnValueChangeEvent += () => { _haveChages = true; }; control.OnValueChangeEvent += () => { _haveChages = true; };
SetValues += control.SetValue; SetValues += control.SetValue;
DropValues += control.DropValue; DropValues += control.DropValue;
CheckValues += control.CheckValue; CheckValues += control.CheckValue;
SetTitleWidth += control.SetTitleWidth; SetTitleWidth += control.SetTitleWidth;
GetValues += control.GetValue; GetValues += control.GetValue;
control.Location = new System.Drawing.Point(positionX, positionY); control.Location = new System.Drawing.Point(positionX, positionY);
control.Width = Width - positionX * 2 - (tabControl.Visible ? 10 : 0); control.Width = Width - positionX * 2 - (tabControl.Visible ? 10 : 0);
control.Anchor = AnchorStyles.Top | AnchorStyles.Left; control.Anchor = AnchorStyles.Top | AnchorStyles.Left;
if (panelContainer.Visible) if (panelContainer.Visible)
{ {
control.Anchor |= AnchorStyles.Right; control.Anchor |= AnchorStyles.Right;
} }
positionY += control.Height + interval; positionY += control.Height + interval;
if (panelContainer.Visible) if (panelContainer.Visible)
{ {
panelContainer.Controls.Add(control); panelContainer.Controls.Add(control);
} }
if (tabControl.Visible) if (tabControl.Visible)
{ {
tabPageMain.Controls.Add(control); tabPageMain.Controls.Add(control);
} }
} }
} }
SetTitleWidth(titleWidth); SetTitleWidth(titleWidth);
Height = attributeClass.Height != 0 ? attributeClass.Height : positionY; Height = attributeClass.Height != 0 ? attributeClass.Height : positionY;
if (attributeClass.HaveDependenceEntities) if (attributeClass.HaveDependenceEntities)
{ {
var attrDependences = typeof(E).GetCustomAttributes<ViewModelControlElementDependenceEntityAttribute>(); var attrDependences = typeof(E).GetCustomAttributes<ViewModelControlElementDependenceEntityAttribute>();
if (attrDependences != null) if (attrDependences != null)
{ {
foreach (var attr in attrDependences) foreach (var attr in attrDependences)
{ {
if (DependencyManager.Instance.Resolve(Type.GetType(attr.ControlTypeObject)) is IControlChildEntity control) if (DependencyManager.Instance.Resolve(Type.GetType(attr.ControlTypeObject)) is IControlChildEntity control)
{ {
var cntrl = control.GetInstance() as IControlChildEntity; var cntrl = control.GetInstance() as IControlChildEntity;
cntrl.ParentPropertyName = attr.ParentPropertyName; cntrl.ParentPropertyName = attr.ParentPropertyName;
//cntrl.Open(null); //cntrl.Open(null);
var tabPage = new TabPage var tabPage = new TabPage
{ {
Location = new System.Drawing.Point(4, 24), Location = new System.Drawing.Point(4, 24),
Name = "tabPage", Name = "tabPage",
Padding = new Padding(3), Padding = new Padding(3),
Size = new System.Drawing.Size(122, 99), Size = new System.Drawing.Size(122, 99),
TabIndex = 0, TabIndex = 0,
Text = attr.Title, Text = attr.Title,
UseVisualStyleBackColor = true UseVisualStyleBackColor = true
}; };
tabPage.Controls.Add(cntrl as UserControl); tabPage.Controls.Add(cntrl as UserControl);
tabControl.TabPages.Add(tabPage); tabControl.TabPages.Add(tabPage);
if (attr.IsActive) if (attr.IsActive)
{ {
tabPage.Select(); tabPage.Select();
} }
} }
} }
} }
} }
} }
private async Task<bool> SaveAsync() private bool Save()
{ {
if (CheckValues.GetInvocationList().Select(x => (bool)x.DynamicInvoke()).ToList().Any(x => !x)) if (CheckValues.GetInvocationList().Select(x => (bool)x.DynamicInvoke()).ToList().Any(x => !x))
{ {
return false; return false;
} }
var model = Element == null ? new S() : Mapper.MapToClass<E, S>(Element, true); var model = Element == null ? new S() : Mapper.MapToClass<E, S>(Element, true);
try try
{ {
GetValues(model); GetValues(model);
} }
catch (Exception ex) catch (Exception ex)
{ {
DialogHelper.MessageException(ex.Message, "Ошибка при получении значений"); DialogHelper.MessageException(ex.Message, "Ошибка при получении значений");
} }
if (model != null) if (model != null)
{ {
if (Element == null) if (Element == null)
{ {
Element = await _businessLogic.CreateAsync(model); Element = _businessLogic.Create(model);
} }
else else
{ {
Element = await _businessLogic.UpdateAsync(model); Element = _businessLogic.Update(model);
} }
if (Element == null) if (Element == null)
{ {
DialogHelper.MessageException(_businessLogic.Errors, "Ошибки при сохранении элемента"); DialogHelper.MessageException(_businessLogic.Errors, "Ошибки при сохранении элемента");
return false; return false;
} }
_haveChages = false; _haveChages = false;
DialogHelper.MessageInformation("Сохранение прошло успешно", "Сообщение"); DialogHelper.MessageInformation("Сохранение прошло успешно", "Сообщение");
return true; return true;
} }
return false; return false;
} }
private ControlViewEntityElementConfiguration GetConfig() => _genericControlViewEntityElement?.GetConfigControl(); private ControlViewEntityElementConfiguration GetConfig() => _genericControlViewEntityElement?.GetConfigControl();
protected bool FillModel(S model) protected bool FillModel(S model)
{ {
if (CheckValues.GetInvocationList().Select(x => (bool)x.DynamicInvoke()).ToList().Any(x => !x)) if (CheckValues.GetInvocationList().Select(x => (bool)x.DynamicInvoke()).ToList().Any(x => !x))
{ {
return false; return false;
} }
try try
{ {
GetValues(model); GetValues(model);
return true; return true;
} }
catch (Exception ex) catch (Exception ex)
{ {
DialogHelper.MessageException(ex.Message, "Ошибка при получении значений"); DialogHelper.MessageException(ex.Message, "Ошибка при получении значений");
} }
return false; return false;
} }
} }
} }

View File

@ -12,13 +12,12 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using System.Xml.Linq; using System.Xml.Linq;
namespace DesktopTools.Controls namespace DesktopTools.Controls
{ {
public partial class GenericControlEntityList<G, S, L, E, BL> : MainControlViewEntityList, IControlViewEntityList public partial class GenericControlEntityList<G, S, L, E, BL> : MainControlViewEntityList, IControlViewEntityList
where G : GetBindingModel, new() where G : GetBindingModel, new()
where S : SetBindingModel, new() where S : SetBindingModel, new()
where L : ListViewModel<E> where L : ListViewModel<E>
@ -68,7 +67,7 @@ namespace DesktopTools.Controls
} }
#region IControlViewEntityList #region IControlViewEntityList
public async void OpenControl(ControlOpenModel model) public void OpenControl(ControlOpenModel model)
{ {
_openMode = model.OpenMode; _openMode = model.OpenMode;
if (model.CloseList != null) if (model.CloseList != null)
@ -93,13 +92,13 @@ namespace DesktopTools.Controls
} }
if (!model.LazyLoading) if (!model.LazyLoading)
{ {
await LoadListAsync(); LoadList();
} }
} }
public IControl GetInstanceControl() => _genericControlViewEntityList?.GetInstanceGenericControl(); public IControl GetInstanceControl() => _genericControlViewEntityList?.GetInstanceGenericControl();
public string GetTitleFromIdControl(Guid id) => _businessLogic.GetElementAsync(new G { Id = id }).Result?.ToString(); public string GetTitleFromIdControl(Guid id) => _businessLogic.GetElement(new G { Id = id })?.ToString();
public string SaveControlToXml() => new XElement("Control", public string SaveControlToXml() => new XElement("Control",
new XAttribute("Type", GetType().FullName), new XAttribute("Type", GetType().FullName),
@ -114,7 +113,7 @@ namespace DesktopTools.Controls
new XElement("Value", ((toolStripComboBoxPageNames.SelectedItem as PageNamesForPaginationModel)?.Value ?? "-"))), new XElement("Value", ((toolStripComboBoxPageNames.SelectedItem as PageNamesForPaginationModel)?.Value ?? "-"))),
new XElement("ParentId", ParentId?.ToString() ?? "-"))).ToString(); new XElement("ParentId", ParentId?.ToString() ?? "-"))).ToString();
public async void LoadControlFromXml(string xml) public void LoadControlFromXml(string xml)
{ {
var control = XElement.Parse(xml); var control = XElement.Parse(xml);
ControlId = new Guid(control.Attribute("ControlId").Value.ToString()); ControlId = new Guid(control.Attribute("ControlId").Value.ToString());
@ -142,7 +141,7 @@ namespace DesktopTools.Controls
{ {
ParentId = new Guid(config.Element("ParentId").Value.ToString()); ParentId = new Guid(config.Element("ParentId").Value.ToString());
} }
await LoadListAsync(); LoadList();
} }
#endregion #endregion
@ -290,10 +289,10 @@ namespace DesktopTools.Controls
{ {
toolStripButtonAdd.Click += (object sender, EventArgs e) => { AddElement(); }; toolStripButtonAdd.Click += (object sender, EventArgs e) => { AddElement(); };
toolStripButtonUpd.Click += (object sender, EventArgs e) => { UpdElement(); }; toolStripButtonUpd.Click += (object sender, EventArgs e) => { UpdElement(); };
toolStripButtonDel.Click += async (object sender, EventArgs e) => { await DelElementAsync(); }; toolStripButtonDel.Click += (object sender, EventArgs e) => { DelElement(); };
toolStripButtonSearch.Click += (object sender, EventArgs e) => { panelSearch.Visible = !panelSearch.Visible; }; toolStripButtonSearch.Click += (object sender, EventArgs e) => { panelSearch.Visible = !panelSearch.Visible; };
toolStripButtonRef.Click += async (object sender, EventArgs e) => { await LoadListAsync(); }; toolStripButtonRef.Click += (object sender, EventArgs e) => { LoadList(); };
toolStripButtonSelect.Click += async (object sender, EventArgs e) => { await SelectElement(); }; toolStripButtonSelect.Click += (object sender, EventArgs e) => { SelectElement(); };
toolStripButtonClose.Click += (object sender, EventArgs e) => toolStripButtonClose.Click += (object sender, EventArgs e) =>
{ {
CloseListEvent?.Invoke(ControlId); CloseListEvent?.Invoke(ControlId);
@ -301,10 +300,10 @@ namespace DesktopTools.Controls
Dispose(); Dispose();
}; };
buttonSearch.Click += async (object sender, EventArgs e) => { await LoadListAsync(); }; buttonSearch.Click += (object sender, EventArgs e) => { LoadList(); };
buttonCancelSearch.Click += async (object sender, EventArgs e) => { panelSearch.Visible = false; await LoadListAsync(); }; buttonCancelSearch.Click += (object sender, EventArgs e) => { panelSearch.Visible = false; LoadList(); };
dataGridViewList.KeyDown += async (object sender, KeyEventArgs e) => dataGridViewList.KeyDown += (object sender, KeyEventArgs e) =>
{ {
switch (e.KeyCode) switch (e.KeyCode)
{ {
@ -323,41 +322,41 @@ namespace DesktopTools.Controls
case Keys.Delete: case Keys.Delete:
if (toolStripButtonDel.Visible) if (toolStripButtonDel.Visible)
{ {
await DelElementAsync(); DelElement();
} }
break; break;
} }
}; };
dataGridViewList.CellDoubleClick += async (object sender, DataGridViewCellEventArgs e) => dataGridViewList.CellDoubleClick += (object sender, DataGridViewCellEventArgs e) =>
{ {
if (_openMode == ControlOpenMode.Select && dataGridViewList.SelectedRows.Count > 0) if (_openMode == ControlOpenMode.Select && dataGridViewList.SelectedRows.Count > 0)
{ {
await SelectElement(); SelectElement();
} }
UpdElement(); UpdElement();
}; };
toolStripButtonPrev.Click += async (object sender, EventArgs e) => toolStripButtonPrev.Click += (object sender, EventArgs e) =>
{ {
if (int.TryParse(toolStripTextBoxPage.Text, out int page)) if (int.TryParse(toolStripTextBoxPage.Text, out int page))
{ {
toolStripTextBoxPage.Text = (page - 1).ToString(); toolStripTextBoxPage.Text = (page - 1).ToString();
await LoadListAsync(); LoadList();
} }
}; };
toolStripButtonNext.Click += async (object sender, EventArgs e) => toolStripButtonNext.Click += (object sender, EventArgs e) =>
{ {
if (int.TryParse(toolStripTextBoxPage.Text, out int page)) if (int.TryParse(toolStripTextBoxPage.Text, out int page))
{ {
toolStripTextBoxPage.Text = (page + 1).ToString(); toolStripTextBoxPage.Text = (page + 1).ToString();
await LoadListAsync(); LoadList();
} }
}; };
toolStripTextBoxPage.KeyDown += async (object sender, KeyEventArgs e) => toolStripTextBoxPage.KeyDown += (object sender, KeyEventArgs e) =>
{ {
if (e.KeyData == Keys.Enter) if (e.KeyData == Keys.Enter)
{ {
await LoadListAsync(); LoadList();
} }
}; };
@ -369,12 +368,12 @@ namespace DesktopTools.Controls
/// </summary> /// </summary>
/// <param name="sender"></param> /// <param name="sender"></param>
/// <param name="e"></param> /// <param name="e"></param>
private async void ToolStripComboBoxPageNamesSelectedIndexChanged(object sender, EventArgs e) => await LoadListAsync(); private void ToolStripComboBoxPageNamesSelectedIndexChanged(object sender, EventArgs e) => LoadList();
/// <summary> /// <summary>
/// Вызов события загрузки данных на datagrid /// Вызов события загрузки данных на datagrid
/// </summary> /// </summary>
private async Task LoadListAsync() private void LoadList()
{ {
var cursor = Cursor.Current; var cursor = Cursor.Current;
@ -440,7 +439,7 @@ namespace DesktopTools.Controls
} }
} }
} }
data = await _businessLogic.GetListAsync(model); data = _businessLogic.GetList(model);
if (data == null && _businessLogic.Errors.Count > 0) if (data == null && _businessLogic.Errors.Count > 0)
{ {
DialogHelper.MessageException(_businessLogic.Errors, $"{Title}. Ошибки при получении данных"); DialogHelper.MessageException(_businessLogic.Errors, $"{Title}. Ошибки при получении данных");
@ -463,14 +462,14 @@ namespace DesktopTools.Controls
{ {
Cursor.Current = cursor; Cursor.Current = cursor;
} }
FillDataOnGridAsync(data?.List, selectedGuids); FillDataOnGrid(data?.List, selectedGuids);
} }
/// <summary> /// <summary>
/// Заполнение таблицы /// Заполнение таблицы
/// </summary> /// </summary>
/// <param name="data"></param> /// <param name="data"></param>
private void FillDataOnGridAsync(List<E> data, List<Guid> selectedGuids) private void FillDataOnGrid(List<E> data, List<Guid> selectedGuids)
{ {
if (data == null) if (data == null)
{ {
@ -513,7 +512,7 @@ namespace DesktopTools.Controls
/// <summary> /// <summary>
/// Вызов события при удалении элемента /// Вызов события при удалении элемента
/// </summary> /// </summary>
private async Task DelElementAsync() private void DelElement()
{ {
if (MessageBox.Show("Удалить выбранные записи?", "Подтверждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) if (MessageBox.Show("Удалить выбранные записи?", "Подтверждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{ {
@ -523,7 +522,7 @@ namespace DesktopTools.Controls
Cursor.Current = Cursors.WaitCursor; Cursor.Current = Cursors.WaitCursor;
foreach (DataGridViewRow selected in dataGridViewList.SelectedRows) foreach (DataGridViewRow selected in dataGridViewList.SelectedRows)
{ {
await _businessLogic.DeleteAsync(new G { Id = new Guid(selected.Cells[0].Value.ToString()) }); _businessLogic.Delete(new G { Id = new Guid(selected.Cells[0].Value.ToString()) });
} }
} }
catch (Exception ex) catch (Exception ex)
@ -540,7 +539,7 @@ namespace DesktopTools.Controls
finally finally
{ {
Cursor.Current = cursor; Cursor.Current = cursor;
await LoadListAsync(); LoadList();
} }
} }
} }
@ -548,12 +547,12 @@ namespace DesktopTools.Controls
/// <summary> /// <summary>
/// Вызов события при выборе элемента /// Вызов события при выборе элемента
/// </summary> /// </summary>
private async Task SelectElement() private void SelectElement()
{ {
try try
{ {
SelectedId = new Guid(dataGridViewList.SelectedRows[0].Cells[0].Value.ToString()); SelectedId = new Guid(dataGridViewList.SelectedRows[0].Cells[0].Value.ToString());
SelectedText = (await _businessLogic.GetElementAsync(new G { Id = SelectedId }))?.ToString(); SelectedText = _businessLogic.GetElement(new G { Id = SelectedId })?.ToString();
CloseSelectEvent?.Invoke(true); CloseSelectEvent?.Invoke(true);
Dispose(); Dispose();
} }
@ -581,7 +580,10 @@ namespace DesktopTools.Controls
{ {
if (toolStripComboBoxPageNames.SelectedItem is PageNamesForPaginationModel key) if (toolStripComboBoxPageNames.SelectedItem is PageNamesForPaginationModel key)
{ {
control.ParentId = new Guid(key.Key.ToString()); if (key.Key.GetType().Name == "Guid")
{
control.ParentId = new Guid(key.Key.ToString());
}
control.ParentPropertyName = toolStripComboBoxPageNames.Tag?.ToString(); control.ParentPropertyName = toolStripComboBoxPageNames.Tag?.ToString();
} }
} }
@ -596,9 +598,9 @@ namespace DesktopTools.Controls
{ {
OpenMode = ControlOpenMode.List, OpenMode = ControlOpenMode.List,
ElementId = id, ElementId = id,
CloseElement = async (Guid id) => CloseElement = (Guid id) =>
{ {
await LoadListAsync(); LoadList();
form.Close(); form.Close();
} }
}); });

View File

@ -3,18 +3,17 @@ using ModuleTools.Enums;
using ModuleTools.Interfaces; using ModuleTools.Interfaces;
using ModuleTools.ViewModels; using ModuleTools.ViewModels;
using System; using System;
using System.Threading.Tasks;
namespace ModuleTools.BusinessLogics namespace ModuleTools.BusinessLogics
{ {
/// <summary> /// <summary>
/// Базовый класс для логики сущности /// Базовый класс для логики сущности
/// </summary> /// </summary>
/// <typeparam name="G"></typeparam> /// <typeparam name="G"></typeparam>
/// <typeparam name="S"></typeparam> /// <typeparam name="S"></typeparam>
/// <typeparam name="L"></typeparam> /// <typeparam name="L"></typeparam>
/// <typeparam name="E"></typeparam> /// <typeparam name="E"></typeparam>
public class GenericBusinessLogic<G, S, L, E> : CoreBusinessLogic public class GenericBusinessLogic<G, S, L, E> : CoreBusinessLogic
where G : GetBindingModel where G : GetBindingModel
where S : SetBindingModel where S : SetBindingModel
where L : ListViewModel<E> where L : ListViewModel<E>
@ -42,7 +41,7 @@ namespace ModuleTools.BusinessLogics
/// </summary> /// </summary>
/// <param name="model"></param> /// <param name="model"></param>
/// <returns></returns> /// <returns></returns>
public async Task<L> GetListAsync(G model) public L GetList(G model)
{ {
Errors.Clear(); Errors.Clear();
try try
@ -52,7 +51,7 @@ namespace ModuleTools.BusinessLogics
{ {
throw new MethodAccessException("Нет прав на получение списка"); throw new MethodAccessException("Нет прав на получение списка");
} }
var result = await Service.ReadAsync(model); var result = Service.Read(model);
if (!result.IsSucceeded) if (!result.IsSucceeded)
{ {
Errors.AddRange(result.Errors); Errors.AddRange(result.Errors);
@ -73,7 +72,7 @@ namespace ModuleTools.BusinessLogics
/// </summary> /// </summary>
/// <param name="model"></param> /// <param name="model"></param>
/// <returns></returns> /// <returns></returns>
public async Task<E> GetElementAsync(G model) public E GetElement(G model)
{ {
Errors.Clear(); Errors.Clear();
try try
@ -83,7 +82,7 @@ namespace ModuleTools.BusinessLogics
{ {
throw new MethodAccessException("Нет прав на получение списка"); throw new MethodAccessException("Нет прав на получение списка");
} }
var result = await Service.ReadAsync(model); var result = Service.Read(model);
if (!result.IsSucceeded) if (!result.IsSucceeded)
{ {
Errors.AddRange(result.Errors); Errors.AddRange(result.Errors);
@ -103,7 +102,7 @@ namespace ModuleTools.BusinessLogics
/// </summary> /// </summary>
/// <param name="model"></param> /// <param name="model"></param>
/// <returns></returns> /// <returns></returns>
public async Task<E> CreateAsync(S model) public virtual E Create(S model)
{ {
Errors.Clear(); Errors.Clear();
try try
@ -112,7 +111,7 @@ namespace ModuleTools.BusinessLogics
{ {
return null; return null;
} }
var result = await Service.CreateAsync(model); var result = Service.Create(model);
if (!result.IsSucceeded) if (!result.IsSucceeded)
{ {
Errors.AddRange(result.Errors); Errors.AddRange(result.Errors);
@ -133,7 +132,7 @@ namespace ModuleTools.BusinessLogics
/// </summary> /// </summary>
/// <param name="model"></param> /// <param name="model"></param>
/// <returns></returns> /// <returns></returns>
public async Task<E> UpdateAsync(S model) public virtual E Update(S model)
{ {
Errors.Clear(); Errors.Clear();
try try
@ -142,7 +141,7 @@ namespace ModuleTools.BusinessLogics
{ {
return null; return null;
} }
var result = await Service.UpdateAsync(model); var result = Service.Update(model);
if (!result.IsSucceeded) if (!result.IsSucceeded)
{ {
Errors.AddRange(result.Errors); Errors.AddRange(result.Errors);
@ -163,7 +162,7 @@ namespace ModuleTools.BusinessLogics
/// </summary> /// </summary>
/// <param name="model"></param> /// <param name="model"></param>
/// <returns></returns> /// <returns></returns>
public async Task<bool> DeleteAsync(G model) public virtual bool Delete(G model)
{ {
Errors.Clear(); Errors.Clear();
try try
@ -172,7 +171,7 @@ namespace ModuleTools.BusinessLogics
{ {
return false; return false;
} }
var result = await Service.DeleteAsync(model); var result = Service.Delete(model);
if (!result.IsSucceeded) if (!result.IsSucceeded)
{ {
Errors.AddRange(result.Errors); Errors.AddRange(result.Errors);
@ -193,7 +192,7 @@ namespace ModuleTools.BusinessLogics
/// </summary> /// </summary>
/// <param name="model"></param> /// <param name="model"></param>
/// <returns></returns> /// <returns></returns>
public async Task<E> RestoreAsync(G model) public virtual E Restore(G model)
{ {
Errors.Clear(); Errors.Clear();
try try
@ -202,7 +201,7 @@ namespace ModuleTools.BusinessLogics
{ {
return null; return null;
} }
var result = await Service.RestoreAsync(model); var result = Service.Restore(model);
if (!result.IsSucceeded) if (!result.IsSucceeded)
{ {
Errors.AddRange(result.Errors); Errors.AddRange(result.Errors);

View File

@ -1,5 +1,6 @@
using ModuleTools.Attributes; using ModuleTools.Attributes;
using System; using System;
using System.Collections;
using System.Reflection; using System.Reflection;
namespace ModuleTools.BusinessLogics namespace ModuleTools.BusinessLogics
@ -64,11 +65,16 @@ namespace ModuleTools.BusinessLogics
var props = customAttribute.PropertyNameFromModel.Split('.'); var props = customAttribute.PropertyNameFromModel.Split('.');
foreach (var prop in props) foreach (var prop in props)
{ {
if(prop == "ToString") if (prop == "ToString")
{ {
value = value.ToString(); value = value.ToString();
break; break;
} }
else if (prop == "Count")
{
value = (value as ICollection)?.Count;
break;
}
var bindingProperty = value.GetType().GetProperty(prop); var bindingProperty = value.GetType().GetProperty(prop);
if (bindingProperty != null) if (bindingProperty != null)
{ {

View File

@ -1,13 +1,12 @@
using ModuleTools.BindingModels; using ModuleTools.BindingModels;
using ModuleTools.Models; using ModuleTools.Models;
using System.Threading.Tasks;
namespace ModuleTools.Interfaces namespace ModuleTools.Interfaces
{ {
/// <summary> /// <summary>
/// Описание логики для хранилища сущности /// Описание логики для хранилища сущности
/// </summary> /// </summary>
public interface IGenerticEntityService<G, S> public interface IGenerticEntityService<G, S>
where G : GetBindingModel where G : GetBindingModel
where S : SetBindingModel where S : SetBindingModel
{ {
@ -16,34 +15,34 @@ namespace ModuleTools.Interfaces
/// </summary> /// </summary>
/// <param name="model"></param> /// <param name="model"></param>
/// <returns></returns> /// <returns></returns>
Task<OperationResultModel> ReadAsync(G model); OperationResultModel Read(G model);
/// <summary> /// <summary>
/// Создание новой сущности /// Создание новой сущности
/// </summary> /// </summary>
/// <param name="model"></param> /// <param name="model"></param>
/// <returns></returns> /// <returns></returns>
Task<OperationResultModel> CreateAsync(S model); OperationResultModel Create(S model);
/// <summary> /// <summary>
/// Изменение сущности /// Изменение сущности
/// </summary> /// </summary>
/// <param name="model"></param> /// <param name="model"></param>
/// <returns></returns> /// <returns></returns>
Task<OperationResultModel> UpdateAsync(S model); OperationResultModel Update(S model);
/// <summary> /// <summary>
/// Удаление сущности /// Удаление сущности
/// </summary> /// </summary>
/// <param name="model"></param> /// <param name="model"></param>
/// <returns></returns> /// <returns></returns>
Task<OperationResultModel> DeleteAsync(G model); OperationResultModel Delete(G model);
/// <summary> /// <summary>
/// Восстановление сущности /// Восстановление сущности
/// </summary> /// </summary>
/// <param name="model"></param> /// <param name="model"></param>
/// <returns></returns> /// <returns></returns>
Task<OperationResultModel> RestoreAsync(G model); OperationResultModel Restore(G model);
} }
} }

View File

@ -16,6 +16,8 @@ namespace DepartmentBusinessLogic.BindingModels
public Guid? StudentId { get; set; } public Guid? StudentId { get; set; }
public Guid? StudentGroupId { get; set; } public Guid? StudentGroupId { get; set; }
public OrderStudentMoveType? OrderStudentMoveType { get; set; }
} }
/// <summary> /// <summary>

View File

@ -1,16 +1,160 @@
using DepartmentBusinessLogic.BindingModels; using DepartmentBusinessLogic.BindingModels;
using DepartmentBusinessLogic.Enums;
using DepartmentBusinessLogic.Interfaces; using DepartmentBusinessLogic.Interfaces;
using DepartmentBusinessLogic.ViewModels; using DepartmentBusinessLogic.ViewModels;
using ModuleTools.BusinessLogics; using ModuleTools.BusinessLogics;
using ModuleTools.Enums; using ModuleTools.Enums;
using SecurityBusinessLogic.BindingModels;
using SecurityBusinessLogic.BusinessLogics;
namespace DepartmentBusinessLogic.BusinessLogics namespace DepartmentBusinessLogic.BusinessLogics
{ {
/// <summary> /// <summary>
/// Логика работы с записями приказов /// Логика работы с записями приказов
/// </summary> /// </summary>
public class OrderStudentRecordBusinessLogic : GenericBusinessLogic<OrderStudentRecordGetBindingModel, OrderStudentRecordSetBindingModel, OrderStudentRecordListViewModel, OrderStudentRecordViewModel> public class OrderStudentRecordBusinessLogic : GenericBusinessLogic<OrderStudentRecordGetBindingModel, OrderStudentRecordSetBindingModel, OrderStudentRecordListViewModel, OrderStudentRecordViewModel>
{ {
public OrderStudentRecordBusinessLogic(IOrderStudentRecordService service) : base(service, "Приказы", AccessOperation.Приказы) { } public OrderStudentRecordBusinessLogic(IOrderStudentRecordService service) : base(service, "Приказы", AccessOperation.Приказы) { }
public override OrderStudentRecordViewModel Create(OrderStudentRecordSetBindingModel model)
{
var result = base.Create(model);
if (result != null)
{
var studentLogic = DependencyManager.Instance.Resolve<StudentBusinessLogic>();
var userLogic = DependencyManager.Instance.Resolve<UserBusinessLogic>();
var student = studentLogic.GetElement(new StudentGetBindingModel { Id = result.StudentId });
if (student == null)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка при получении студента", $"Не удалось получить студента"));
return null;
}
// изменять студента
var st = Mapper.MapToClass<StudentViewModel, StudentSetBindingModel>(student, true);
var studentName = student.ToString();
if (student.StudentGroupId != result.StudentGroupToId)
{
st.StudentGroupId = result.StudentGroupToId;
student = studentLogic.Update(st);
if (student == null)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить группу у студента {studentName}"));
return null;
}
}
if (student.Description != model.Info)
{
st.Description = model.Info;
student = studentLogic.Update(st);
if (student == null)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить описание у студента {studentName}"));
return null;
}
}
if ((result.OrderStudentMoveType == OrderStudentMoveType.ЗачислитьПоПриказу ||
result.OrderStudentMoveType == OrderStudentMoveType.ПринятьПоПереводу ||
result.OrderStudentMoveType == OrderStudentMoveType.ПринятьПоПереводусДругогоВуза ||
result.OrderStudentMoveType == OrderStudentMoveType.ПеревестиНаДругоеНаправлениеКафедры)
&& student.StudentState != StudentState.Учится)
{
st.StudentState = StudentState.Учится;
student = studentLogic.Update(st);
if (student == null)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
return null;
}
}
if ((result.OrderStudentMoveType == OrderStudentMoveType.ОтправитьВАкадем ||
result.OrderStudentMoveType == OrderStudentMoveType.ПродлитьАкадем)
&& student.StudentState != StudentState.Академ)
{
st.StudentState = StudentState.Академ;
student = studentLogic.Update(st);
if (student == null)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
return null;
}
}
if (result.OrderStudentMoveType == OrderStudentMoveType.ВосстановитьИзАкадема && student.StudentState != StudentState.Учится)
{
st.StudentState = StudentState.Учится;
student = studentLogic.Update(st);
if (student == null)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
return null;
}
}
if ((result.OrderStudentMoveType == OrderStudentMoveType.ОтчислитьВСвязиСПереводом ||
result.OrderStudentMoveType == OrderStudentMoveType.ОтчислитьЗаНевыходСАкадема ||
result.OrderStudentMoveType == OrderStudentMoveType.ОтчислитьЗаНеуспевамость ||
result.OrderStudentMoveType == OrderStudentMoveType.ОтчислитьПоСобственному ||
result.OrderStudentMoveType == OrderStudentMoveType.ОтчислитьПоЗавершению) &&
student.StudentState != StudentState.Отчислен)
{
st.StudentState = result.OrderStudentMoveType == OrderStudentMoveType.ОтчислитьПоЗавершению ? StudentState.Завершил : StudentState.Отчислен;
student = studentLogic.Update(st);
if (student == null)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
return null;
}
var delete = studentLogic.Delete(new StudentGetBindingModel { Id = student.Id });
if (!delete)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка удаления студента", $"Не удалось удалить студента {studentName}"));
return null;
}
delete = userLogic.Delete(new UserGetBindingModel { Id = student.UserId });
if (!delete)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка удаления пользователя по студенту", $"Не удалось удалить пользователя по студенту {studentName}"));
return null;
}
}
if (result.OrderStudentMoveType == OrderStudentMoveType.Восстановить && student.StudentState != StudentState.Учится)
{
st.StudentState = StudentState.Учится;
student = studentLogic.Update(st);
if (student == null)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
return null;
}
}
if (result.OrderStudentMoveType == OrderStudentMoveType.УбратьПоПереводу && student.StudentState != StudentState.Ушел)
{
st.StudentState = StudentState.Ушел;
student = studentLogic.Update(st);
if (student == null)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
return null;
}
}
}
return result;
}
} }
} }

View File

@ -15,14 +15,13 @@ using System.Net.Http;
using System.Net.Http.Headers; using System.Net.Http.Headers;
using System.Text; using System.Text;
using System.Text.Json; using System.Text.Json;
using System.Threading.Tasks;
namespace DepartmentBusinessLogic.BusinessLogics namespace DepartmentBusinessLogic.BusinessLogics
{ {
/// <summary> /// <summary>
/// Логика работы с историями синхронизации приказов /// Логика работы с историями синхронизации приказов
/// </summary> /// </summary>
public class OrderSyncHistoryBusinessLogic : GenericBusinessLogic<OrderSyncHistoryGetBindingModel, OrderSyncHistorySetBindingModel, OrderSyncHistoryListViewModel, OrderSyncHistoryViewModel> public class OrderSyncHistoryBusinessLogic : GenericBusinessLogic<OrderSyncHistoryGetBindingModel, OrderSyncHistorySetBindingModel, OrderSyncHistoryListViewModel, OrderSyncHistoryViewModel>
{ {
private OrderSyncHistoryRecordBusinessLogic _recordLogic; private OrderSyncHistoryRecordBusinessLogic _recordLogic;
@ -40,9 +39,9 @@ namespace DepartmentBusinessLogic.BusinessLogics
public OrderSyncHistoryBusinessLogic(IOrderSyncHistoryService service) : base(service, "Синхронизация Приказов", AccessOperation.СинхронизацияПриказов) { } public OrderSyncHistoryBusinessLogic(IOrderSyncHistoryService service) : base(service, "Синхронизация Приказов", AccessOperation.СинхронизацияПриказов) { }
public async Task<bool> SyncOrders() public bool SyncOrders()
{ {
var history = await CreateAsync(new OrderSyncHistorySetBindingModel { SyncDate = DateTime.Now }); var history = Create(new OrderSyncHistorySetBindingModel { SyncDate = DateTime.Now });
if (history == null) if (history == null)
{ {
Errors.Add(("Ошибка создание истории", "Не удалось создать историю")); Errors.Add(("Ошибка создание истории", "Не удалось создать историю"));
@ -57,12 +56,12 @@ namespace DepartmentBusinessLogic.BusinessLogics
_orderStudentRecordLogic = DependencyManager.Instance.Resolve<OrderStudentRecordBusinessLogic>(); _orderStudentRecordLogic = DependencyManager.Instance.Resolve<OrderStudentRecordBusinessLogic>();
_userLogic = DependencyManager.Instance.Resolve<UserBusinessLogic>(); _userLogic = DependencyManager.Instance.Resolve<UserBusinessLogic>();
var address = (await _enviromentSettingLogic.GetListAsync(new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderIpAddress" }))?.List?.FirstOrDefault(); var address = _enviromentSettingLogic.GetList(new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderIpAddress" })?.List?.FirstOrDefault();
if (address == null || address.Value.IsEmpty()) if (address == null || address.Value.IsEmpty())
{ {
Errors = _enviromentSettingLogic.Errors; Errors = _enviromentSettingLogic.Errors;
Errors.Add(("Ошибка получения данных", "Не удалось получить адрес серверая для получения приказов по студентам")); Errors.Add(("Ошибка получения данных", "Не удалось получить адрес серверая для получения приказов по студентам"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message)) Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message))
@ -70,12 +69,12 @@ namespace DepartmentBusinessLogic.BusinessLogics
return false; return false;
} }
var username = (await _enviromentSettingLogic.GetListAsync(new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderUserName" }))?.List?.FirstOrDefault(); var username = _enviromentSettingLogic.GetList(new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderUserName" })?.List?.FirstOrDefault();
if (username == null || username.Value.IsEmpty()) if (username == null || username.Value.IsEmpty())
{ {
Errors = _enviromentSettingLogic.Errors; Errors = _enviromentSettingLogic.Errors;
Errors.Add(("Ошибка получения данных", "Не удалось получить имя пользователя для получения приказов по студентам")); Errors.Add(("Ошибка получения данных", "Не удалось получить имя пользователя для получения приказов по студентам"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message)) Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message))
@ -83,12 +82,12 @@ namespace DepartmentBusinessLogic.BusinessLogics
return false; return false;
} }
var password = (await _enviromentSettingLogic.GetListAsync(new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderPassword" }))?.List?.FirstOrDefault(); var password = _enviromentSettingLogic.GetList(new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderPassword" })?.List?.FirstOrDefault();
if (password == null || password.Value.IsEmpty()) if (password == null || password.Value.IsEmpty())
{ {
Errors = _enviromentSettingLogic.Errors; Errors = _enviromentSettingLogic.Errors;
Errors.Add(("Ошибка получения данных", "Не удалось получить пароль для получения приказов по студентам")); Errors.Add(("Ошибка получения данных", "Не удалось получить пароль для получения приказов по студентам"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message)) Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message))
@ -107,11 +106,11 @@ namespace DepartmentBusinessLogic.BusinessLogics
// авторизация // авторизация
// получение списка студентов // получение списка студентов
HttpResponseMessage response = await client.GetAsync($"{address.Value}/univer_Testing/hs/Ulstu_StudentsInfo/v1/GetCurrentStudentsOfDepartment"); HttpResponseMessage response = client.GetAsync($"{address.Value}/univer/hs/Ulstu_StudentsInfo/v1/GetCurrentStudentsOfDepartment").Result;
if (!response.IsSuccessStatusCode) if (!response.IsSuccessStatusCode)
{ {
Errors.Add(("Ошибка получения данных", "Не удалось получить список студентов с сервера")); Errors.Add(("Ошибка получения данных", "Не удалось получить список студентов с сервера"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message)) Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message))
@ -121,7 +120,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
var studentFromServer = JsonSerializer.Deserialize<StudentListSyncModel>(response.Content.ReadAsStringAsync().Result); var studentFromServer = JsonSerializer.Deserialize<StudentListSyncModel>(response.Content.ReadAsStringAsync().Result);
if (studentFromServer.CurrentStudentsList.Count == 0) if (studentFromServer.CurrentStudentsList.Count == 0)
{ {
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
Information = "Полученный список студентов пустой" Information = "Полученный список студентов пустой"
@ -129,12 +128,12 @@ namespace DepartmentBusinessLogic.BusinessLogics
return true; return true;
} }
var groups = await _groupsLogic.GetListAsync(new StudentGroupGetBindingModel()); var groups = _groupsLogic.GetList(new StudentGroupGetBindingModel());
if (groups == null || groups.List == null) if (groups == null || groups.List == null)
{ {
Errors = _groupsLogic.Errors; Errors = _groupsLogic.Errors;
Errors.Add(("Ошибка получения данных", "Не удалось получить список групп")); Errors.Add(("Ошибка получения данных", "Не удалось получить список групп"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message)) Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message))
@ -142,12 +141,12 @@ namespace DepartmentBusinessLogic.BusinessLogics
return false; return false;
} }
var students = await _studentLogic.GetListAsync(new StudentGetBindingModel()); var students = _studentLogic.GetList(new StudentGetBindingModel());
if (students == null || students.List == null) if (students == null || students.List == null)
{ {
Errors = _studentLogic.Errors; Errors = _studentLogic.Errors;
Errors.Add(("Ошибка получения данных", "Не удалось получить список студентов")); Errors.Add(("Ошибка получения данных", "Не удалось получить список студентов"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message)) Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message))
@ -161,12 +160,12 @@ namespace DepartmentBusinessLogic.BusinessLogics
// студент не найден, значит он ушел с кафедры, выясняем почему // студент не найден, значит он ушел с кафедры, выясняем почему
if (studentSync == null) if (studentSync == null)
{ {
await SyncStudentOrders(history, student, groups.List, client, address.Value); SyncStudentOrders(history, student, groups.List, client, address.Value);
} }
// не совпадение групп // не совпадение групп
else if (student.StudentGroupName != studentSync.groupName) else if (student.StudentGroupName != studentSync.groupName)
{ {
await SyncStudentOrders(history, student, groups.List, client, address.Value); SyncStudentOrders(history, student, groups.List, client, address.Value);
} }
studentFromServer.CurrentStudentsList.Remove(studentSync); studentFromServer.CurrentStudentsList.Remove(studentSync);
@ -174,75 +173,93 @@ namespace DepartmentBusinessLogic.BusinessLogics
// новые студенты и восстановленцы // новые студенты и восстановленцы
foreach (var student in studentFromServer.CurrentStudentsList) foreach (var student in studentFromServer.CurrentStudentsList)
{ {
var deletedStudent = await _studentLogic.GetElementAsync(new StudentGetBindingModel { NumberOfBook = student.recordBookName }); var deletedStudent = _studentLogic.GetElement(new StudentGetBindingModel { NumberOfBook = student.recordBookName });
if (deletedStudent == null && _studentLogic.Errors.FirstOrDefault(x => x.Message == "Элемент удален") != default) if (deletedStudent == null && _studentLogic.Errors.FirstOrDefault(x => x.Message == "Элемент удален") != default)
{ {
// восстановленец // восстановленец
deletedStudent = await _studentLogic.RestoreAsync(new StudentGetBindingModel { NumberOfBook = student.recordBookName }); deletedStudent = _studentLogic.Restore(new StudentGetBindingModel { NumberOfBook = student.recordBookName });
if (deletedStudent == null) if (deletedStudent == null)
{ {
var errors = _studentLogic.Errors; var errors = _studentLogic.Errors;
errors.Add(("Ошибка при восстановлении студента", $"Не удалось восстановить студента {student.lastName} {student.firstName} {student.patronymicName}")); errors.Add(("Ошибка при восстановлении студента", $"Не удалось восстановить студента {student.lastName} {student.firstName} {student.patronymicName}"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message)) Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
}); });
continue; continue;
} }
var deletedUser = await _userLogic.RestoreAsync(new UserGetBindingModel { Id = deletedStudent.UserId }); var deletedUser = _userLogic.Restore(new UserGetBindingModel { Id = deletedStudent.UserId });
if (deletedUser == null) if (deletedUser == null)
{ {
var errors = _userLogic.Errors; var errors = _userLogic.Errors;
errors.Add(("Ошибка при восстановлении пользователя студента", $"Не удалось восстановить пользователя студента {student.lastName} {student.firstName} {student.patronymicName}")); errors.Add(("Ошибка при восстановлении пользователя студента", $"Не удалось восстановить пользователя студента {student.lastName} {student.firstName} {student.patronymicName}"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message)) Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
}); });
continue; continue;
} }
await SyncStudentOrders(history, deletedStudent, groups.List, client, address.Value); SyncStudentOrders(history, deletedStudent, groups.List, client, address.Value);
continue; continue;
} }
var userName = $"{student.lastName}{(student.firstName.IsNotEmpty() ? $" {student.firstName[0]}." : string.Empty)}{(student.patronymicName.IsNotEmpty() ? $"{student.patronymicName[0]}." : string.Empty)}"; var user = _userLogic.GetElement(new UserGetBindingModel
var result = await _userLogic.GetListAsync(new UserGetBindingModel { UserNameForSearch = userName });
var newuser = await _userLogic.CreateAsync(new UserSetBindingModel
{ {
Login = userName, Login = student.recordBookName
Password = student.recordBookName
}); });
if (newuser == null) if (user == null)
{ {
var errors = _userLogic.Errors; if (_userLogic.Errors.Count > 0)
errors.Add(("Ошибка создания пользователя под студента", $"Не удалось создать пользователя под студента {student.lastName} {student.firstName} {student.patronymicName}"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, var errors = _userLogic.Errors;
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message)) errors.Add(("Ошибка получения пользователя под студента", $"Не удалось получить пользователя под студента {student.lastName} {student.firstName} {student.patronymicName}"));
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
});
continue;
}
var userName = $"{student.lastName}{(student.firstName.IsNotEmpty() ? $" {student.firstName[0]}." : string.Empty)}{(student.patronymicName.IsNotEmpty() ? $"{student.patronymicName[0]}." : string.Empty)}";
user = _userLogic.Create(new UserSetBindingModel
{
Login = student.recordBookName,
Password = userName
}); });
continue;
if (user == null)
{
var errors = _userLogic.Errors;
errors.Add(("Ошибка создания пользователя под студента", $"Не удалось создать пользователя под студента {student.lastName} {student.firstName} {student.patronymicName}"));
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
});
continue;
}
} }
var newStudent = await _studentLogic.CreateAsync(new StudentSetBindingModel var newStudent = _studentLogic.Create(new StudentSetBindingModel
{ {
Iduniv = student.iduniv, Iduniv = student.iduniv,
NumberOfBook = student.recordBookName, NumberOfBook = student.recordBookName,
UserId = newuser.Id, UserId = user.Id,
FirstName = student.firstName, FirstName = student.firstName,
LastName = student.lastName, LastName = student.lastName,
Patronymic = student.patronymicName, Patronymic = student.patronymicName,
StudentState = StudentState.Неопределен, StudentState = StudentState.Неопределен,
Description = student.presenatationOfRecordBook Description = string.Empty
}); });
if (newStudent == null) if (newStudent == null)
{ {
var errors = _studentLogic.Errors; var errors = _studentLogic.Errors;
errors.Add(("Ошибка добавления студента", $"Не удалось добавить студента {student.lastName} {student.firstName} {student.patronymicName}")); errors.Add(("Ошибка добавления студента", $"Не удалось добавить студента {student.lastName} {student.firstName} {student.patronymicName}"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message)) Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
@ -250,17 +267,14 @@ namespace DepartmentBusinessLogic.BusinessLogics
continue; continue;
} }
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
Information = $"Добавлен студент {newStudent}" Information = $"Добавлен студент {newStudent}"
}); });
await SyncStudentOrders(history, newStudent, groups.List, client, address.Value); SyncStudentOrders(history, newStudent, groups.List, client, address.Value);
studentFromServer.CurrentStudentsList.Remove(student);
} }
return true; return true;
} }
@ -273,13 +287,13 @@ namespace DepartmentBusinessLogic.BusinessLogics
/// <param name="client"></param> /// <param name="client"></param>
/// <param name="address"></param> /// <param name="address"></param>
/// <returns></returns> /// <returns></returns>
private async Task SyncStudentOrders(OrderSyncHistoryViewModel history, StudentViewModel student, List<StudentGroupViewModel> groups, HttpClient client, string address) private void SyncStudentOrders(OrderSyncHistoryViewModel history, StudentViewModel student, List<StudentGroupViewModel> groups, HttpClient client, string address)
{ {
HttpResponseMessage response = await client.GetAsync($"{address}/univer_Testing/hs/Ulstu_StudentsInfo/v1/GetStudentOrdersByIdAndRecordBook?iduniv={student.Iduniv}&recordBookName={student.NumberOfBook}&allOrders=sppd"); HttpResponseMessage response = client.GetAsync($"{address}/univer/hs/Ulstu_StudentsInfo/v1/GetStudentOrdersByIdAndRecordBook?iduniv={student.Iduniv}&recordBookName={student.NumberOfBook}&allOrders=sppd").Result;
if (!response.IsSuccessStatusCode) if (!response.IsSuccessStatusCode)
{ {
Errors.Add(("Ошибка получения данных", "Не удалось получить список приказов по студенту")); Errors.Add(("Ошибка получения данных", "Не удалось получить список приказов по студенту"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message)) Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message))
@ -289,24 +303,58 @@ namespace DepartmentBusinessLogic.BusinessLogics
var syncOrders = JsonSerializer.Deserialize<StudentOrderListSyncModel>(response.Content.ReadAsStringAsync().Result); var syncOrders = JsonSerializer.Deserialize<StudentOrderListSyncModel>(response.Content.ReadAsStringAsync().Result);
foreach (var syncOrder in syncOrders.StudentOrders) foreach (var syncOrder in syncOrders.StudentOrders)
{ {
if (syncOrder.markOfApprove.ToLower() != "true")
{
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = $"Приказ {syncOrder.clericNumber} от {syncOrder.clericDate} ({syncOrder.orderTypeName}) по студенту {student} не утврежден "
});
continue;
}
if (syncOrder.clericNumber.IsEmpty())
{
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = $"Приказ без номера от {syncOrder.clericDate} ({student})"
});
continue;
}
if (syncOrder.clericDate.IsEmpty())
{
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = $"Приказ {syncOrder.clericNumber} - неизвестная дата ({student})"
});
continue;
}
var orderType = GetOrderType(syncOrder.orderTypeName); var orderType = GetOrderType(syncOrder.orderTypeName);
// пропускаем приказы, которые нас не интересуют // пропускаем приказы, которые нас не интересуют
if (orderType == OrderType.Неопределено) if (orderType == OrderType.Неопределено)
{ {
if (syncOrder.orderTypeName != "Корректировка" && syncOrder.orderTypeName != "Назначение стипендии" &&
syncOrder.orderTypeName != "Утверждение тем курсовых работ" && syncOrder.orderTypeName != "Утверждение тем работ"
&& syncOrder.orderTypeName != "Смена ФИО")
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = $"Приказ {syncOrder.clericNumber} неопределенного типа {syncOrder.orderTypeName}"
});
continue; continue;
} }
// пытаемся найти приказ // пытаемся найти приказ
var order = await _orderLogic.GetElementAsync(new OrderGetBindingModel var order = _orderLogic.GetElement(new OrderGetBindingModel
{ {
OrderNumber = syncOrder.clericNumber, OrderNumber = syncOrder.clericNumber
OrderDate = Convert.ToDateTime(syncOrder.clericDate)
}); });
if (order == null) if (order == null)
{ {
// если не нашли - пытаемся создать // если не нашли - пытаемся создать
order = await _orderLogic.CreateAsync(new OrderSetBindingModel order = _orderLogic.Create(new OrderSetBindingModel
{ {
OrderNumber = syncOrder.clericNumber, OrderNumber = syncOrder.clericNumber,
OrderDate = Convert.ToDateTime(syncOrder.clericDate), OrderDate = Convert.ToDateTime(syncOrder.clericDate),
@ -316,7 +364,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
{ {
var errors = _orderLogic.Errors; var errors = _orderLogic.Errors;
errors.Add(("Ошибка добавления приказа", $"Не удалось добавить приказ {syncOrder.clericNumber} {syncOrder.clericDate}")); errors.Add(("Ошибка добавления приказа", $"Не удалось добавить приказ {syncOrder.clericNumber} {syncOrder.clericDate}"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message)) Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
@ -325,24 +373,6 @@ namespace DepartmentBusinessLogic.BusinessLogics
} }
} }
// ищем в приказе запись по студенту
var studentOrder = await _orderStudentRecordLogic.GetElementAsync(new OrderStudentRecordGetBindingModel
{
OrderId = order.Id,
StudentId = student.Id
});
// если такой приказ по студенту уже есть, просто пропускаем
if (studentOrder != null)
{
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = $"Нерспознанный приказ {syncOrder.orderTypeName} для студента {student}"
});
continue;
}
Guid? studentGroupFromId = null; Guid? studentGroupFromId = null;
Guid? studentGroupToId = null; Guid? studentGroupToId = null;
string info = string.Empty; string info = string.Empty;
@ -355,7 +385,8 @@ namespace DepartmentBusinessLogic.BusinessLogics
studentGroupToId = groups.FirstOrDefault(x => x.ToString() == syncOrder.groupNameAfter)?.Id; studentGroupToId = groups.FirstOrDefault(x => x.ToString() == syncOrder.groupNameAfter)?.Id;
} }
// игнорируем приказы, не связанные с нашими группами // игнорируем приказы, не связанные с нашими группами
if (!studentGroupFromId.HasValue && !studentGroupToId.HasValue) if (!studentGroupFromId.HasValue && syncOrder.groupNameBefore.IsNotEmpty()
&& !studentGroupToId.HasValue && syncOrder.groupNameAfter.IsNotEmpty())
{ {
continue; continue;
} }
@ -367,23 +398,22 @@ namespace DepartmentBusinessLogic.BusinessLogics
if (syncOrder.orderSubTypeName == "Распределение по группам") if (syncOrder.orderSubTypeName == "Распределение по группам")
{ {
orderStudentMoveType = OrderStudentMoveType.Распределить; orderStudentMoveType = OrderStudentMoveType.Распределить;
info = $"Распределение студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}"; info = $"Распределение студента {student} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
} }
// внутренний перевод
else if (studentGroupFromId.HasValue && studentGroupToId.HasValue) else if (studentGroupFromId.HasValue && studentGroupToId.HasValue)
{ {
orderStudentMoveType = OrderStudentMoveType.ПеревестиНаДругоеНаправлениеКафедры; orderStudentMoveType = OrderStudentMoveType.ПеревестиНаДругоеНаправлениеКафедры;
info = $"Перевод студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} в группу {groups.First(x => x.Id == studentGroupToId)}"; info = $"Перевод студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
} }
else if (!studentGroupFromId.HasValue && studentGroupToId.HasValue) else if (!studentGroupFromId.HasValue && studentGroupToId.HasValue)
{ {
orderStudentMoveType = OrderStudentMoveType.ПринятьПоПереводу; orderStudentMoveType = OrderStudentMoveType.ПринятьПоПереводу;
info = $"Перевод студента {student} c группы {syncOrder.groupNameBefore} другой кафедры в группу {groups.First(x => x.Id == studentGroupToId)}"; info = $"Перевод студента {student} c группы {syncOrder.groupNameBefore} другой кафедры в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
} }
else if (studentGroupFromId.HasValue && !studentGroupToId.HasValue) else if (studentGroupFromId.HasValue && !studentGroupToId.HasValue)
{ {
orderStudentMoveType = OrderStudentMoveType.УбратьПоПереводу; orderStudentMoveType = OrderStudentMoveType.УбратьПоПереводу;
info = $"Перевод студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} на другую кафедру"; info = $"Перевод студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} на другую кафедру";
} }
break; break;
case "Зачисление в вуз вне приемной кампании": case "Зачисление в вуз вне приемной кампании":
@ -400,16 +430,20 @@ namespace DepartmentBusinessLogic.BusinessLogics
break; break;
case "Перевод на следующий курс": case "Перевод на следующий курс":
orderStudentMoveType = OrderStudentMoveType.ПеревестиНаСтаршийКурс; orderStudentMoveType = OrderStudentMoveType.ПеревестиНаСтаршийКурс;
info = $"Перевод студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} на следующий курс в группу {groups.First(x => x.Id == studentGroupToId)}"; info = $"Перевод студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} на следующий курс в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
break; break;
//case "Завершение обучения": // уточнить приказ //case "Завершение обучения": // уточнить приказ
// orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному; // orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному;
// info = $"Отчисление студента {student} в связи с окончанием обучения"; // info = $"Отчисление студента {student} в связи с окончанием обучения";
// break; // break;
case "Уход в академический отпуск": case "Уход в академический отпуск":
// дата DateTime? date = null;
if (syncOrder.dateEnd.IsNotEmpty())
{
date = Convert.ToDateTime(syncOrder.dateEnd);
}
orderStudentMoveType = OrderStudentMoveType.ОтправитьВАкадем; orderStudentMoveType = OrderStudentMoveType.ОтправитьВАкадем;
info = $"Уход в АО студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)}"; info = $"Уход в АО студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} до {date?.ToShortDateString() ?? string.Empty}";
break; break;
case "Продление академического отпуска": case "Продление академического отпуска":
orderStudentMoveType = OrderStudentMoveType.ПродлитьАкадем; orderStudentMoveType = OrderStudentMoveType.ПродлитьАкадем;
@ -417,38 +451,56 @@ namespace DepartmentBusinessLogic.BusinessLogics
break; break;
case "Восстановление из академического отпуска": case "Восстановление из академического отпуска":
orderStudentMoveType = OrderStudentMoveType.ВосстановитьИзАкадема; orderStudentMoveType = OrderStudentMoveType.ВосстановитьИзАкадема;
info = $"Выход из АО студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}"; info = $"Выход из АО студента {student} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
break; break;
//case "Отчисление по собственному": // уточнить приказ
// orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному;
// info = $"Отчисление студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} по собственному желанию";
// break;
//case "Отчисление за неуспеваемость": // уточнить приказ
// orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНеуспевамость;
// info = $"Отчисление студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} за неуспеваемость";
// break;
//case "Отчисление по невыходу из академа": // уточнить приказ //case "Отчисление по невыходу из академа": // уточнить приказ
// orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНевыходСАкадема; // orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНевыходСАкадема;
// info = $"Отчисление студента {student} по невыходу из академа"; // info = $"Отчисление студента {student} по невыходу из академа";
// break; // break;
case "Отчисление": case "Отчисление":
{ if (syncOrder.reason == "за невыполнение учебного плана")
{
orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНеуспевамость;
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} за неуспеваемость";
}
if (syncOrder.reason == "по собственному желанию")
{
orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному;
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} по собственному желанию";
} }
break; break;
case "Восстановление": case "Восстановление":
orderStudentMoveType = OrderStudentMoveType.Восстановить; orderStudentMoveType = OrderStudentMoveType.Восстановить;
info = $"Восстановление отчисленного студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}"; info = $"Восстановление отчисленного студента {student} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
break; break;
} }
if (orderStudentMoveType == OrderStudentMoveType.Неопределено) if (orderStudentMoveType == OrderStudentMoveType.Неопределено)
{
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = $"Неизветсный приказ {syncOrder.orderTypeName} ({syncOrder.reason}) по студенту {student}"
});
continue;
}
// ищем в приказе запись по студенту
var studentOrder = _orderStudentRecordLogic.GetElement(new OrderStudentRecordGetBindingModel
{
OrderId = order.Id,
StudentId = student.Id,
OrderStudentMoveType = orderStudentMoveType
});
// если такой приказ по студенту уже есть, просто пропускаем
if (studentOrder != null)
{ {
continue; continue;
} }
// создаем, если не нашли // создаем, если не нашли
studentOrder = await _orderStudentRecordLogic.CreateAsync(new OrderStudentRecordSetBindingModel studentOrder = _orderStudentRecordLogic.Create(new OrderStudentRecordSetBindingModel
{ {
OrderId = order.Id, OrderId = order.Id,
StudentId = student.Id, StudentId = student.Id,
@ -461,7 +513,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
{ {
var errors = _orderStudentRecordLogic.Errors; var errors = _orderStudentRecordLogic.Errors;
errors.Add(("Ошибка добавления записи приказа по студенту", $"Не удалось добавить запись приказа {syncOrder.orderSubTypeName} по студенту {student}")); errors.Add(("Ошибка добавления записи приказа по студенту", $"Не удалось добавить запись приказа {syncOrder.orderSubTypeName} по студенту {student}"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message)) Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
@ -469,192 +521,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
continue; continue;
} }
var st = Mapper.MapToClass<StudentViewModel, StudentSetBindingModel>(student, true); _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
var studentName = student.ToString();
if (student.StudentGroupId != studentGroupToId)
{
st.StudentGroupId = studentGroupToId;
student = await _studentLogic.UpdateAsync(st);
if (student == null)
{
var errors = _studentLogic.Errors;
errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить группу у студента {studentName}"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
});
continue;
}
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = $"У студента {student} сменилась группа на {student.StudentGroupName}"
});
}
if ((orderStudentMoveType == OrderStudentMoveType.ЗачислитьПоПриказу || orderStudentMoveType == OrderStudentMoveType.ПринятьПоПереводу
|| orderStudentMoveType == OrderStudentMoveType.ПринятьПоПереводусДругогоВуза || orderStudentMoveType == OrderStudentMoveType.ПеревестиНаДругоеНаправлениеКафедры)
&& student.StudentState != StudentState.Учится)
{
st.StudentState = StudentState.Учится;
student = await _studentLogic.UpdateAsync(st);
if (student == null)
{
var errors = _studentLogic.Errors;
errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
});
continue;
}
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = $"У студента {student} сменился статус на {StudentState.Учится}"
});
}
if ((orderStudentMoveType == OrderStudentMoveType.ОтправитьВАкадем || orderStudentMoveType == OrderStudentMoveType.ПродлитьАкадем)
&& student.StudentState != StudentState.Академ)
{
st.StudentState = StudentState.Академ;
student = await _studentLogic.UpdateAsync(st);
if (student == null)
{
var errors = _studentLogic.Errors;
errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
});
continue;
}
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = $"У студента {student} сменился статус на {StudentState.Академ}"
});
}
if (orderStudentMoveType == OrderStudentMoveType.ВосстановитьИзАкадема && student.StudentState != StudentState.Учится)
{
st.StudentState = StudentState.Учится;
student = await _studentLogic.UpdateAsync(st);
if (student == null)
{
var errors = _studentLogic.Errors;
errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
});
continue;
}
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = $"У студента {student} сменился статус на {StudentState.Учится}"
});
}
if ((orderStudentMoveType == OrderStudentMoveType.ОтчислитьВСвязиСПереводом || orderStudentMoveType == OrderStudentMoveType.ОтчислитьЗаНевыходСАкадема
|| orderStudentMoveType == OrderStudentMoveType.ОтчислитьЗаНеуспевамость || orderStudentMoveType == OrderStudentMoveType.ОтчислитьПоСобственному
|| orderStudentMoveType == OrderStudentMoveType.ОтчислитьПоЗавершению) && student.StudentState != StudentState.Отчислен)
{
st.StudentState = orderStudentMoveType == OrderStudentMoveType.ОтчислитьПоЗавершению ? StudentState.Завершил : StudentState.Отчислен;
student = await _studentLogic.UpdateAsync(st);
if (student == null)
{
var errors = _studentLogic.Errors;
errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
});
continue;
}
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = $"У студента {student} сменился статус на {(orderStudentMoveType == OrderStudentMoveType.ОтчислитьПоЗавершению ? StudentState.Завершил : StudentState.Отчислен)}"
});
var result = await _studentLogic.DeleteAsync(new StudentGetBindingModel { Id = student.Id });
if (!result)
{
var errors = _userLogic.Errors;
errors.Add(("Ошибка удаления студента", $"Не удалось удалить студента {studentName}"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
});
continue;
}
result = await _userLogic.DeleteAsync(new UserGetBindingModel { Id = student.UserId });
if (!result)
{
var errors = _userLogic.Errors;
errors.Add(("Ошибка удаления пользователя по студенту", $"Не удалось удалить пользователя по студенту {studentName}"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
});
continue;
}
}
if (orderStudentMoveType == OrderStudentMoveType.Восстановить && student.StudentState != StudentState.Учится)
{
st.StudentState = StudentState.Учится;
student = await _studentLogic.UpdateAsync(st);
if (student == null)
{
var errors = _studentLogic.Errors;
errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
});
continue;
}
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = $"У студента {student} сменился статус на {StudentState.Учится}"
});
}
if (orderStudentMoveType == OrderStudentMoveType.УбратьПоПереводу && student.StudentState != StudentState.Ушел)
{
st.StudentState = StudentState.Ушел;
student = await _studentLogic.UpdateAsync(st);
if (student == null)
{
var errors = _studentLogic.Errors;
errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
});
continue;
}
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = $"У студента {student} сменился статус на {StudentState.Ушел}"
});
}
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
Information = $"Добавили запись к приказу {order.OrderNumber} по студенту {student} с формулировкой {info}" Information = $"Добавили запись к приказу {order.OrderNumber} по студенту {student} с формулировкой {info}"

View File

@ -9,6 +9,10 @@
public string clericDate { get; set; } public string clericDate { get; set; }
public string markOfDeletion { get; set; }
public string markOfApprove { get; set; }
public string orderTypeName { get; set; } public string orderTypeName { get; set; }
public string orderSubTypeName { get; set; } public string orderSubTypeName { get; set; }
@ -16,5 +20,11 @@
public string groupNameBefore { get; set; } public string groupNameBefore { get; set; }
public string groupNameAfter { get; set; } public string groupNameAfter { get; set; }
public string dateStart { get; set; }
public string dateEnd { get; set; }
public string reason { get; set; }
} }
} }

View File

@ -27,11 +27,11 @@ namespace DepartmentBusinessLogic.ViewModels
[ViewModelControlElementProperty("Из группы", ControlType.ControlGuid, MustHaveValue = false, ReadOnly = false, ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlStudentGroupList, DepartmentWindowsDesktop")] [ViewModelControlElementProperty("Из группы", ControlType.ControlGuid, MustHaveValue = false, ReadOnly = false, ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlStudentGroupList, DepartmentWindowsDesktop")]
[MapConfiguration("StudentGroupFromId")] [MapConfiguration("StudentGroupFromId")]
public Guid StudentGroupFromId { get; set; } public Guid? StudentGroupFromId { get; set; }
[ViewModelControlElementProperty("В группу", ControlType.ControlGuid, MustHaveValue = false, ReadOnly = false, ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlStudentGroupList, DepartmentWindowsDesktop")] [ViewModelControlElementProperty("В группу", ControlType.ControlGuid, MustHaveValue = false, ReadOnly = false, ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlStudentGroupList, DepartmentWindowsDesktop")]
[MapConfiguration("StudentGroupToId")] [MapConfiguration("StudentGroupToId")]
public Guid StudentGroupToId { get; set; } public Guid? StudentGroupToId { get; set; }
[ViewModelControlElementProperty("Тип приказа", ControlType.ControlEnum, MustHaveValue = true)] [ViewModelControlElementProperty("Тип приказа", ControlType.ControlEnum, MustHaveValue = true)]
[MapConfiguration("OrderStudentMoveType")] [MapConfiguration("OrderStudentMoveType")]

View File

@ -1,6 +1,7 @@
using ModuleTools.Attributes; using ModuleTools.Attributes;
using ModuleTools.Enums; using ModuleTools.Enums;
using ModuleTools.ViewModels; using ModuleTools.ViewModels;
using System;
namespace DepartmentBusinessLogic.ViewModels namespace DepartmentBusinessLogic.ViewModels
{ {
@ -17,14 +18,11 @@ namespace DepartmentBusinessLogic.ViewModels
ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlOrderSyncHistoryRecordList, DepartmentWindowsDesktop")] ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlOrderSyncHistoryRecordList, DepartmentWindowsDesktop")]
public class OrderSyncHistoryViewModel : ElementViewModel public class OrderSyncHistoryViewModel : ElementViewModel
{ {
[ViewModelControlListProperty("Дата", ColumnWidth = 100, DefaultCellStyleFormat = "dd.MM.yyyy")]
[ViewModelControlElementProperty("Дата", ControlType.ControlDateTime, MustHaveValue = true, ReadOnly = true)] [ViewModelControlElementProperty("Дата", ControlType.ControlDateTime, MustHaveValue = true, ReadOnly = true)]
[MapConfiguration("SyncDate")] [MapConfiguration("SyncDate")]
public string SyncDate { get; set; } public DateTime SyncDate { get; set; }
[ViewModelControlListProperty("События")] [ViewModelControlListProperty("Дата")]
[ViewModelControlElementProperty("События", ControlType.ControlText, MustHaveValue = true, ReadOnly = true, Width = 300, Height = 500)] public string SyncDateTitle => $"Синхронизация данных от {SyncDate.ToString("dd.MM.yyyy HH:mm")}";
[MapConfiguration("History")]
public string History { get; set; }
} }
} }

View File

@ -14,11 +14,9 @@ namespace DepartmentBusinessLogic.ViewModels
/// <summary> /// <summary>
/// Элемент учебная группа /// Элемент учебная группа
/// </summary> /// </summary>
[ViewModelControlElementClass(HaveDependenceEntities = true, Width = 800, Height = 500)] [ViewModelControlElementClass(HaveDependenceEntities = true, Width = 1000, Height = 900)]
[ViewModelControlElementDependenceEntity(Title = "Студенты", Order = 1, ParentPropertyName = "StudentGroupId", [ViewModelControlElementDependenceEntity(Title = "Студенты", Order = 1, ParentPropertyName = "StudentGroupId",
ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlStudentList, DepartmentWindowsDesktop")] ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlStudentList, DepartmentWindowsDesktop")]
[ViewModelControlElementDependenceEntity(Title = "Приказы", Order = 1, ParentPropertyName = "StudentGroupId",
ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlOrderStudentRecordList, DepartmentWindowsDesktop")]
public class StudentGroupViewModel : ElementViewModel public class StudentGroupViewModel : ElementViewModel
{ {
[ViewModelControlElementProperty("Направление", ControlType.ControlGuid, MustHaveValue = true, ReadOnly = false, ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlEducationDirectionList, DepartmentWindowsDesktop")] [ViewModelControlElementProperty("Направление", ControlType.ControlGuid, MustHaveValue = true, ReadOnly = false, ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlEducationDirectionList, DepartmentWindowsDesktop")]
@ -51,6 +49,10 @@ namespace DepartmentBusinessLogic.ViewModels
[MapConfiguration("GroupNumber")] [MapConfiguration("GroupNumber")]
public int GroupNumber { get; set; } public int GroupNumber { get; set; }
[ViewModelControlListProperty("Количество студентов")]
[MapConfiguration("Students.Count", IsDifficle = true)]
public int StudentCount { get; set; }
[ViewModelControlElementProperty("Куратор", ControlType.ControlGuid, MustHaveValue = false, ReadOnly = false, ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlLecturerList, DepartmentWindowsDesktop")] [ViewModelControlElementProperty("Куратор", ControlType.ControlGuid, MustHaveValue = false, ReadOnly = false, ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlLecturerList, DepartmentWindowsDesktop")]
[MapConfiguration("LecturerId")] [MapConfiguration("LecturerId")]
public Guid? LecturerId { get; set; } public Guid? LecturerId { get; set; }

View File

@ -51,7 +51,7 @@ namespace DepartmentDatabaseImplementation.Implementations
protected override bool AdditionalCheckForSingleGet(OrderGetBindingModel model) protected override bool AdditionalCheckForSingleGet(OrderGetBindingModel model)
{ {
if (model.OrderDate.HasValue && model.OrderNumber.IsNotEmpty()) if (model.OrderNumber.IsNotEmpty())
{ {
return true; return true;
} }
@ -60,9 +60,9 @@ namespace DepartmentDatabaseImplementation.Implementations
protected override Order GetSingleRecord(IQueryable<Order> list, OrderGetBindingModel model) protected override Order GetSingleRecord(IQueryable<Order> list, OrderGetBindingModel model)
{ {
if (model.OrderDate.HasValue && model.OrderNumber.IsNotEmpty()) if (model.OrderNumber.IsNotEmpty())
{ {
return list.FirstOrDefault(x => x.OrderDate == model.OrderDate && x.OrderNumber == model.OrderNumber); return list.FirstOrDefault(x => x.OrderNumber == model.OrderNumber);
} }
return base.GetSingleRecord(list, model); return base.GetSingleRecord(list, model);
} }

View File

@ -49,7 +49,7 @@ namespace DepartmentDatabaseImplementation.Implementations
protected override bool AdditionalCheckForSingleGet(OrderStudentRecordGetBindingModel model) protected override bool AdditionalCheckForSingleGet(OrderStudentRecordGetBindingModel model)
{ {
if (model.OrderId.HasValue && model.StudentId.HasValue) if (model.OrderId.HasValue && model.StudentId.HasValue && model.OrderStudentMoveType.HasValue)
{ {
return true; return true;
} }
@ -58,9 +58,9 @@ namespace DepartmentDatabaseImplementation.Implementations
protected override OrderStudentRecord GetSingleRecord(IQueryable<OrderStudentRecord> list, OrderStudentRecordGetBindingModel model) protected override OrderStudentRecord GetSingleRecord(IQueryable<OrderStudentRecord> list, OrderStudentRecordGetBindingModel model)
{ {
if (model.OrderId.HasValue && model.StudentId.HasValue) if (model.OrderId.HasValue && model.StudentId.HasValue && model.OrderStudentMoveType.HasValue)
{ {
return list.FirstOrDefault(x => x.OrderId == model.OrderId && x.StudentId == model.StudentId); return list.FirstOrDefault(x => x.OrderId == model.OrderId && x.StudentId == model.StudentId && x.OrderStudentMoveType == (int)model.OrderStudentMoveType);
} }
return base.GetSingleRecord(list, model); return base.GetSingleRecord(list, model);
} }

View File

@ -9,26 +9,25 @@ using ModuleTools.Enums;
using ModuleTools.Models; using ModuleTools.Models;
using System; using System;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
namespace DepartmentDatabaseImplementation.Implementations namespace DepartmentDatabaseImplementation.Implementations
{ {
/// <summary> /// <summary>
/// Реализация IOrderSyncHistoryRecordService /// Реализация IOrderSyncHistoryRecordService
/// </summary> /// </summary>
public class OrderSyncHistoryRecordService : IOrderSyncHistoryRecordService public class OrderSyncHistoryRecordService : IOrderSyncHistoryRecordService
{ {
public async Task<OperationResultModel> CreateAsync(OrderSyncHistoryRecordSetBindingModel model) public OperationResultModel Create(OrderSyncHistoryRecordSetBindingModel model)
{ {
using var context = DatabaseManager.GetContext; using var context = DatabaseManager.GetContext;
var entity = Mapper.MapToClass<OrderSyncHistoryRecordSetBindingModel, OrderSyncHistoryRecord>(model, true); var entity = Mapper.MapToClass<OrderSyncHistoryRecordSetBindingModel, OrderSyncHistoryRecord>(model, true);
await context.OrderSyncHistoryRecords.AddAsync(entity); context.OrderSyncHistoryRecords.Add(entity);
await context.SaveChangesAsync(); context.SaveChanges();
return OperationResultModel.Success(Mapper.MapToClass<OrderSyncHistoryRecord, OrderSyncHistoryRecordViewModel>(entity, true)); return OperationResultModel.Success(Mapper.MapToClass<OrderSyncHistoryRecord, OrderSyncHistoryRecordViewModel>(entity, true));
} }
public async Task<OperationResultModel> DeleteAsync(OrderSyncHistoryRecordGetBindingModel model) public OperationResultModel Delete(OrderSyncHistoryRecordGetBindingModel model)
{ {
using var context = DatabaseManager.GetContext; using var context = DatabaseManager.GetContext;
var entity = context.OrderSyncHistoryRecords.FirstOrDefault(x => x.Id == model.Id); var entity = context.OrderSyncHistoryRecords.FirstOrDefault(x => x.Id == model.Id);
@ -37,12 +36,12 @@ namespace DepartmentDatabaseImplementation.Implementations
return OperationResultModel.Error("Error:", "Элемент не найден", ResultServiceStatusCode.NotFound); return OperationResultModel.Error("Error:", "Элемент не найден", ResultServiceStatusCode.NotFound);
} }
context.OrderSyncHistoryRecords.Remove(entity); context.OrderSyncHistoryRecords.Remove(entity);
await context.SaveChangesAsync(); context.SaveChanges();
return OperationResultModel.Success(true); return OperationResultModel.Success(true);
} }
public async Task<OperationResultModel> ReadAsync(OrderSyncHistoryRecordGetBindingModel model) public OperationResultModel Read(OrderSyncHistoryRecordGetBindingModel model)
{ {
int countPages = 0; int countPages = 0;
using var context = DatabaseManager.GetContext; using var context = DatabaseManager.GetContext;
@ -69,31 +68,28 @@ namespace DepartmentDatabaseImplementation.Implementations
query = query.Include(x => x.OrderSyncHistory); query = query.Include(x => x.OrderSyncHistory);
return await Task.Run(() => if (model.PageNumber.HasValue && model.PageSize.HasValue)
{ {
if (model.PageNumber.HasValue && model.PageSize.HasValue) countPages = (int)Math.Ceiling((double)query.Count() / model.PageSize.Value);
{ query = query
countPages = (int)Math.Ceiling((double)query.Count() / model.PageSize.Value); .Skip(model.PageSize.Value * model.PageNumber.Value)
query = query .Take(model.PageSize.Value);
.Skip(model.PageSize.Value * model.PageNumber.Value) }
.Take(model.PageSize.Value); var result = new OrderSyncHistoryRecordListViewModel
} {
var result = new OrderSyncHistoryRecordListViewModel MaxCount = countPages,
{ List = query.Select(x => Mapper.MapToClass<OrderSyncHistoryRecord, OrderSyncHistoryRecordViewModel>(x, model.HaveRight)).ToList()
MaxCount = countPages, };
List = query.Select(x => Mapper.MapToClass<OrderSyncHistoryRecord, OrderSyncHistoryRecordViewModel>(x, model.HaveRight)).ToList()
};
return OperationResultModel.Success(result); return OperationResultModel.Success(result);
});
} }
public Task<OperationResultModel> RestoreAsync(OrderSyncHistoryRecordGetBindingModel model) public OperationResultModel Restore(OrderSyncHistoryRecordGetBindingModel model)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public async Task<OperationResultModel> UpdateAsync(OrderSyncHistoryRecordSetBindingModel model) public OperationResultModel Update(OrderSyncHistoryRecordSetBindingModel model)
{ {
using var context = DatabaseManager.GetContext; using var context = DatabaseManager.GetContext;
@ -104,7 +100,7 @@ namespace DepartmentDatabaseImplementation.Implementations
} }
entity = Mapper.MapToClass(model, entity, true); entity = Mapper.MapToClass(model, entity, true);
await context.SaveChangesAsync(); context.SaveChanges();
return OperationResultModel.Success(Mapper.MapToClass<OrderSyncHistoryRecord, OrderSyncHistoryRecordViewModel>(entity, true)); return OperationResultModel.Success(Mapper.MapToClass<OrderSyncHistoryRecord, OrderSyncHistoryRecordViewModel>(entity, true));
} }

View File

@ -8,26 +8,25 @@ using ModuleTools.Enums;
using ModuleTools.Models; using ModuleTools.Models;
using System; using System;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
namespace DepartmentDatabaseImplementation.Implementations namespace DepartmentDatabaseImplementation.Implementations
{ {
/// <summary> /// <summary>
/// Реализация IOrderSyncHistoryService /// Реализация IOrderSyncHistoryService
/// </summary> /// </summary>
public class OrderSyncHistoryService : IOrderSyncHistoryService public class OrderSyncHistoryService : IOrderSyncHistoryService
{ {
public async Task<OperationResultModel> CreateAsync(OrderSyncHistorySetBindingModel model) public OperationResultModel Create(OrderSyncHistorySetBindingModel model)
{ {
using var context = DatabaseManager.GetContext; using var context = DatabaseManager.GetContext;
var entity = Mapper.MapToClass<OrderSyncHistorySetBindingModel, OrderSyncHistory>(model, true); var entity = Mapper.MapToClass<OrderSyncHistorySetBindingModel, OrderSyncHistory>(model, true);
await context.OrderSyncHistories.AddAsync(entity); context.OrderSyncHistories.Add(entity);
await context.SaveChangesAsync(); context.SaveChanges();
return OperationResultModel.Success(Mapper.MapToClass<OrderSyncHistory, OrderSyncHistoryViewModel>(entity, true)); return OperationResultModel.Success(Mapper.MapToClass<OrderSyncHistory, OrderSyncHistoryViewModel>(entity, true));
} }
public async Task<OperationResultModel> DeleteAsync(OrderSyncHistoryGetBindingModel model) public OperationResultModel Delete(OrderSyncHistoryGetBindingModel model)
{ {
using var context = DatabaseManager.GetContext; using var context = DatabaseManager.GetContext;
using var transaction = context.Database.BeginTransaction(); using var transaction = context.Database.BeginTransaction();
@ -40,24 +39,24 @@ namespace DepartmentDatabaseImplementation.Implementations
} }
context.OrderSyncHistories.Remove(entity); context.OrderSyncHistories.Remove(entity);
await context.SaveChangesAsync(); context.SaveChanges();
var records = context.OrderSyncHistoryRecords.Where(x => x.OrderSyncHistoryId == model.Id); var records = context.OrderSyncHistoryRecords.Where(x => x.OrderSyncHistoryId == model.Id);
context.OrderSyncHistoryRecords.RemoveRange(records); context.OrderSyncHistoryRecords.RemoveRange(records);
await context.SaveChangesAsync(); context.SaveChanges();
await transaction.CommitAsync(); transaction.Commit();
} }
catch (Exception) catch (Exception)
{ {
await transaction.RollbackAsync(); transaction.Rollback();
throw; throw;
} }
return OperationResultModel.Success(true); return OperationResultModel.Success(true);
} }
public async Task<OperationResultModel> ReadAsync(OrderSyncHistoryGetBindingModel model) public OperationResultModel Read(OrderSyncHistoryGetBindingModel model)
{ {
int countPages = 0; int countPages = 0;
using var context = DatabaseManager.GetContext; using var context = DatabaseManager.GetContext;
@ -77,31 +76,28 @@ namespace DepartmentDatabaseImplementation.Implementations
query = query.OrderByDescending(x => x.SyncDate); query = query.OrderByDescending(x => x.SyncDate);
return await Task.Run(() => if (model.PageNumber.HasValue && model.PageSize.HasValue)
{ {
if (model.PageNumber.HasValue && model.PageSize.HasValue) countPages = (int)Math.Ceiling((double)query.Count() / model.PageSize.Value);
{ query = query
countPages = (int)Math.Ceiling((double)query.Count() / model.PageSize.Value); .Skip(model.PageSize.Value * model.PageNumber.Value)
query = query .Take(model.PageSize.Value);
.Skip(model.PageSize.Value * model.PageNumber.Value) }
.Take(model.PageSize.Value); var result = new OrderSyncHistoryListViewModel
} {
var result = new OrderSyncHistoryListViewModel MaxCount = countPages,
{ List = query.Select(x => Mapper.MapToClass<OrderSyncHistory, OrderSyncHistoryViewModel>(x, model.HaveRight)).ToList()
MaxCount = countPages, };
List = query.Select(x => Mapper.MapToClass<OrderSyncHistory, OrderSyncHistoryViewModel>(x, model.HaveRight)).ToList()
};
return OperationResultModel.Success(result); return OperationResultModel.Success(result);
});
} }
public Task<OperationResultModel> RestoreAsync(OrderSyncHistoryGetBindingModel model) public OperationResultModel Restore(OrderSyncHistoryGetBindingModel model)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public async Task<OperationResultModel> UpdateAsync(OrderSyncHistorySetBindingModel model) public OperationResultModel Update(OrderSyncHistorySetBindingModel model)
{ {
using var context = DatabaseManager.GetContext; using var context = DatabaseManager.GetContext;
@ -112,7 +108,7 @@ namespace DepartmentDatabaseImplementation.Implementations
} }
entity = Mapper.MapToClass(model, entity, true); entity = Mapper.MapToClass(model, entity, true);
await context.SaveChangesAsync(); context.SaveChanges();
return OperationResultModel.Success(Mapper.MapToClass<OrderSyncHistory, OrderSyncHistoryViewModel>(entity, true)); return OperationResultModel.Success(Mapper.MapToClass<OrderSyncHistory, OrderSyncHistoryViewModel>(entity, true));
} }

View File

@ -57,7 +57,7 @@ namespace DepartmentDatabaseImplementation.Implementations
protected override StudentGroup GetUniqueEntity(StudentGroupSetBindingModel model, DbContext context) => context.Set<StudentGroup>().FirstOrDefault(x => x.EducationDirectionId == model.EducationDirectionId && x.AcademicCourse == (int)model.AcademicCourse && x.GroupNumber == model.GroupNumber && x.Id != model.Id); protected override StudentGroup GetUniqueEntity(StudentGroupSetBindingModel model, DbContext context) => context.Set<StudentGroup>().FirstOrDefault(x => x.EducationDirectionId == model.EducationDirectionId && x.AcademicCourse == (int)model.AcademicCourse && x.GroupNumber == model.GroupNumber && x.Id != model.Id);
protected override IQueryable<StudentGroup> IncludingWhenReading(IQueryable<StudentGroup> query) => query.Include(x => x.EducationDirection).Include(x => x.Lecturer); protected override IQueryable<StudentGroup> IncludingWhenReading(IQueryable<StudentGroup> query) => query.Include(x => x.EducationDirection).Include(x => x.Lecturer).Include(x => x.Students);
protected override IQueryable<StudentGroup> OrderingWhenReading(IQueryable<StudentGroup> query) => query.OrderBy(x => x.EducationDirection.Cipher).ThenBy(x => x.AcademicCourse).ThenBy(x => x.GroupNumber); protected override IQueryable<StudentGroup> OrderingWhenReading(IQueryable<StudentGroup> query) => query.OrderBy(x => x.EducationDirection.Cipher).ThenBy(x => x.AcademicCourse).ThenBy(x => x.GroupNumber);
} }

View File

@ -12,52 +12,55 @@ using System.Linq;
namespace DepartmentWindowsDesktop.EntityControls namespace DepartmentWindowsDesktop.EntityControls
{ {
/// <summary> /// <summary>
/// Реализация контрола для списка дисциплин /// Реализация контрола для списка дисциплин
/// </summary> /// </summary>
public partial class ControlDisciplineList : public partial class ControlDisciplineList :
GenericControlEntityList<DisciplineGetBindingModel, DisciplineSetBindingModel, DisciplineListViewModel, DisciplineViewModel, DisciplineBusinessLogic>, GenericControlEntityList<DisciplineGetBindingModel, DisciplineSetBindingModel, DisciplineListViewModel, DisciplineViewModel, DisciplineBusinessLogic>,
IGenericControlEntityList IGenericControlEntityList
{ {
private readonly DisciplineBlockBusinessLogic _disciplineBlockBusinessLogic; private readonly DisciplineBlockBusinessLogic _disciplineBlockBusinessLogic;
public ControlDisciplineList() public ControlDisciplineList()
{ {
InitializeComponent(); InitializeComponent();
_disciplineBlockBusinessLogic = DependencyManager.Instance.Resolve<DisciplineBlockBusinessLogic>(); _disciplineBlockBusinessLogic = DependencyManager.Instance.Resolve<DisciplineBlockBusinessLogic>();
Title = "Дисциплины"; Title = "Дисциплины";
ControlId = new Guid("1731f50b-b20b-44c4-aa56-b335764fae7a"); ControlId = new Guid("1731f50b-b20b-44c4-aa56-b335764fae7a");
AccessOperation = AccessOperation.Дисциплины; AccessOperation = AccessOperation.Дисциплины;
ControlViewEntityElement = new ControlDisciplineElement(); ControlViewEntityElement = new ControlDisciplineElement();
_genericControlViewEntityList = this; _genericControlViewEntityList = this;
FillSearchPanel(); FillSearchPanel();
} }
public IControl GetInstanceGenericControl() => new ControlDisciplineList() { ControlId = Guid.NewGuid() }; public IControl GetInstanceGenericControl() => new ControlDisciplineList() { ControlId = Guid.NewGuid() };
public ControlViewEntityListConfiguration GetConfigControl() => new() public ControlViewEntityListConfiguration GetConfigControl()
{ {
PaginationOn = true, return new ControlViewEntityListConfiguration()
PageNamesForPagination = _disciplineBlockBusinessLogic.GetListAsync(new DisciplineBlockGetBindingModel()).Result?.List?.Select(x => {
new PageNamesForPaginationModel PaginationOn = true,
{ PageNamesForPagination = _disciplineBlockBusinessLogic.GetList(new DisciplineBlockGetBindingModel())?.List?.Select(x =>
Key = x.Id, new PageNamesForPaginationModel
Value = x.Title {
})?.ToList(), Key = x.Id,
ParentPropertyName = "DisciplineBlockId" Value = x.Title
}; })?.ToList(),
ParentPropertyName = "DisciplineBlockId"
};
}
private void FillSearchPanel() private void FillSearchPanel()
{ {
var control = new BaseControlString("DisciplineNameForSearch", false, false, 0) var control = new BaseControlString("DisciplineNameForSearch", false, false, 0)
{ {
Location = new System.Drawing.Point(10, 10), Location = new System.Drawing.Point(10, 10),
Size = new System.Drawing.Size(400, 23), Size = new System.Drawing.Size(400, 23),
Name = "SearchDisciplineName", Name = "SearchDisciplineName",
TabIndex = 0 TabIndex = 0
}; };
control.SetTitleWidth(control.SetTitle("Название:")); control.SetTitleWidth(control.SetTitle("Название:"));
panelSearchControls.Controls.Add(control); panelSearchControls.Controls.Add(control);
} }
} }
} }

View File

@ -13,14 +13,13 @@ using SecurityBusinessLogic.BusinessLogics;
using SecurityBusinessLogic.ViewModels; using SecurityBusinessLogic.ViewModels;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks;
namespace DepartmentWindowsDesktop.EntityControls namespace DepartmentWindowsDesktop.EntityControls
{ {
/// <summary> /// <summary>
/// Реализация контрола для сотрудника /// Реализация контрола для сотрудника
/// </summary> /// </summary>
public partial class ControlEmployeeElement : public partial class ControlEmployeeElement :
GenericControlEntityElement<EmployeeGetBindingModel, EmployeeSetBindingModel, EmployeeListViewModel, EmployeeViewModel, EmployeeBusinessLogic>, GenericControlEntityElement<EmployeeGetBindingModel, EmployeeSetBindingModel, EmployeeListViewModel, EmployeeViewModel, EmployeeBusinessLogic>,
IGenericControlEntityElement IGenericControlEntityElement
{ {
@ -38,22 +37,22 @@ namespace DepartmentWindowsDesktop.EntityControls
{ {
ControlOnMoveElem = new Dictionary<string, (string Title, EventHandler Event)> ControlOnMoveElem = new Dictionary<string, (string Title, EventHandler Event)>
{ {
{ "ToolStripMenuItemAddUser", ("Добавить пользователя", async (object sender, EventArgs e) => { await AddUserAsync(); }) }, { "ToolStripMenuItemAddUser", ("Добавить пользователя", (object sender, EventArgs e) => { AddUser(); }) },
{ "ToolStripMenuItemPasswordReset", ("Сброс пароля пользователя", async (object sender, EventArgs e) => { await PasswordResetAsync(); }) } { "ToolStripMenuItemPasswordReset", ("Сброс пароля пользователя", (object sender, EventArgs e) => { PasswordReset(); }) }
} }
}; };
/// <summary> /// <summary>
/// Поиск пользователя под учетку, либо добавление нового, если не найдено /// Поиск пользователя под учетку, либо добавление нового, если не найдено
/// </summary> /// </summary>
private async Task AddUserAsync() private void AddUser()
{ {
var model = new EmployeeSetBindingModel(); var model = new EmployeeSetBindingModel();
if (FillModel(model)) if (FillModel(model))
{ {
var logic = DependencyManager.Instance.Resolve<UserBusinessLogic>(); var logic = DependencyManager.Instance.Resolve<UserBusinessLogic>();
var userName = $"{model.LastName}{(model.FirstName.IsNotEmpty() ? $" {model.FirstName[0]}." : string.Empty)}{(model.Patronymic.IsNotEmpty() ? $"{model.Patronymic[0]}." : string.Empty)}"; var userName = $"{model.LastName}{(model.FirstName.IsNotEmpty() ? $" {model.FirstName[0]}." : string.Empty)}{(model.Patronymic.IsNotEmpty() ? $"{model.Patronymic[0]}." : string.Empty)}";
var result = await logic.GetListAsync(new UserGetBindingModel { UserNameForSearch = userName }); var result = logic.GetList(new UserGetBindingModel { UserNameForSearch = userName });
if (result != null) if (result != null)
{ {
if (result.List.Count > 1) if (result.List.Count > 1)
@ -67,7 +66,7 @@ namespace DepartmentWindowsDesktop.EntityControls
} }
else else
{ {
var newuser = await logic.CreateAsync(new UserSetBindingModel var newuser = logic.Create(new UserSetBindingModel
{ {
Login = userName, Login = userName,
Password = model.DateBirth.ToShortDateString(), Password = model.DateBirth.ToShortDateString(),
@ -92,7 +91,7 @@ namespace DepartmentWindowsDesktop.EntityControls
/// <summary> /// <summary>
/// Сброс пароля пользователя /// Сброс пароля пользователя
/// </summary> /// </summary>
private async Task PasswordResetAsync() private void PasswordReset()
{ {
if (_element == null) if (_element == null)
{ {
@ -102,14 +101,14 @@ namespace DepartmentWindowsDesktop.EntityControls
if (FillModel(model)) if (FillModel(model))
{ {
var logic = DependencyManager.Instance.Resolve<UserBusinessLogic>(); var logic = DependencyManager.Instance.Resolve<UserBusinessLogic>();
var user = await logic.GetElementAsync(new UserGetBindingModel { Id = _element.UserId }); var user = logic.GetElement(new UserGetBindingModel { Id = _element.UserId });
if (user == null) if (user == null)
{ {
DialogHelper.MessageException(logic.Errors, "Ошибка при получении пользователя"); DialogHelper.MessageException(logic.Errors, "Ошибка при получении пользователя");
return; return;
} }
user.Password = model.DateBirth.ToShortDateString(); user.Password = model.DateBirth.ToShortDateString();
user = await logic.UpdateAsync(Mapper.MapToClass<UserViewModel, UserSetBindingModel>(user, true)); user = logic.Update(Mapper.MapToClass<UserViewModel, UserSetBindingModel>(user, true));
if (user == null) if (user == null)
{ {
DialogHelper.MessageException(logic.Errors, "Ошибка при получении пользователя"); DialogHelper.MessageException(logic.Errors, "Ошибка при получении пользователя");

View File

@ -13,14 +13,13 @@ using SecurityBusinessLogic.BusinessLogics;
using SecurityBusinessLogic.ViewModels; using SecurityBusinessLogic.ViewModels;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks;
namespace DepartmentWindowsDesktop.EntityControls namespace DepartmentWindowsDesktop.EntityControls
{ {
/// <summary> /// <summary>
/// Реализация контрола для преподавателя /// Реализация контрола для преподавателя
/// </summary> /// </summary>
public partial class ControlLecturerElement : public partial class ControlLecturerElement :
GenericControlEntityElement<LecturerGetBindingModel, LecturerSetBindingModel, LecturerListViewModel, LecturerViewModel, LecturerBusinessLogic>, GenericControlEntityElement<LecturerGetBindingModel, LecturerSetBindingModel, LecturerListViewModel, LecturerViewModel, LecturerBusinessLogic>,
IGenericControlEntityElement IGenericControlEntityElement
{ {
@ -38,22 +37,22 @@ namespace DepartmentWindowsDesktop.EntityControls
{ {
ControlOnMoveElem = new Dictionary<string, (string Title, EventHandler Event)> ControlOnMoveElem = new Dictionary<string, (string Title, EventHandler Event)>
{ {
{ "ToolStripMenuItemAddUser", ("Добавить пользователя", async (object sender, EventArgs e) => { await AddUserAsunc(); }) }, { "ToolStripMenuItemAddUser", ("Добавить пользователя", (object sender, EventArgs e) => { AddUser(); }) },
{ "ToolStripMenuItemPasswordReset", ("Сброс пароля пользователя", async (object sender, EventArgs e) => { await PasswordResetAsync(); }) } { "ToolStripMenuItemPasswordReset", ("Сброс пароля пользователя", (object sender, EventArgs e) => { PasswordReset(); }) }
} }
}; };
/// <summary> /// <summary>
/// Поиск пользователя под учетку, либо добавление нового, если не найдено /// Поиск пользователя под учетку, либо добавление нового, если не найдено
/// </summary> /// </summary>
private async Task AddUserAsunc() private void AddUser()
{ {
var model = new LecturerSetBindingModel(); var model = new LecturerSetBindingModel();
if (FillModel(model)) if (FillModel(model))
{ {
var logic = DependencyManager.Instance.Resolve<UserBusinessLogic>(); var logic = DependencyManager.Instance.Resolve<UserBusinessLogic>();
var userName = $"{model.LastName}{(model.FirstName.IsNotEmpty() ? $" {model.FirstName[0]}." : string.Empty)}{(model.Patronymic.IsNotEmpty() ? $"{model.Patronymic[0]}." : string.Empty)}"; var userName = $"{model.LastName}{(model.FirstName.IsNotEmpty() ? $" {model.FirstName[0]}." : string.Empty)}{(model.Patronymic.IsNotEmpty() ? $"{model.Patronymic[0]}." : string.Empty)}";
var result = await logic.GetListAsync(new UserGetBindingModel { UserNameForSearch = userName }); var result = logic.GetList(new UserGetBindingModel { UserNameForSearch = userName });
if (result != null) if (result != null)
{ {
if (result.List.Count > 1) if (result.List.Count > 1)
@ -67,7 +66,7 @@ namespace DepartmentWindowsDesktop.EntityControls
} }
else else
{ {
var newuser = await logic.CreateAsync(new UserSetBindingModel var newuser = logic.Create(new UserSetBindingModel
{ {
Login = userName, Login = userName,
Password = model.DateBirth.ToShortDateString(), Password = model.DateBirth.ToShortDateString(),
@ -92,7 +91,7 @@ namespace DepartmentWindowsDesktop.EntityControls
/// <summary> /// <summary>
/// Сброс пароля пользователя /// Сброс пароля пользователя
/// </summary> /// </summary>
private async Task PasswordResetAsync() private void PasswordReset()
{ {
if (_element == null) if (_element == null)
{ {
@ -102,14 +101,14 @@ namespace DepartmentWindowsDesktop.EntityControls
if (FillModel(model)) if (FillModel(model))
{ {
var logic = DependencyManager.Instance.Resolve<UserBusinessLogic>(); var logic = DependencyManager.Instance.Resolve<UserBusinessLogic>();
var user = await logic.GetElementAsync(new UserGetBindingModel { Id = _element.UserId }); var user = logic.GetElement(new UserGetBindingModel { Id = _element.UserId });
if (user == null) if (user == null)
{ {
DialogHelper.MessageException(logic.Errors, "Ошибка при получении пользователя"); DialogHelper.MessageException(logic.Errors, "Ошибка при получении пользователя");
return; return;
} }
user.Password = model.DateBirth.ToShortDateString(); user.Password = model.DateBirth.ToShortDateString();
user = await logic.UpdateAsync(Mapper.MapToClass<UserViewModel, UserSetBindingModel>(user, true)); user = logic.Update(Mapper.MapToClass<UserViewModel, UserSetBindingModel>(user, true));
if (user == null) if (user == null)
{ {
DialogHelper.MessageException(logic.Errors, "Ошибка при получении пользователя"); DialogHelper.MessageException(logic.Errors, "Ошибка при получении пользователя");

View File

@ -22,7 +22,7 @@ namespace DepartmentWindowsDesktop.EntityControls
Title = "Приказы"; Title = "Приказы";
ControlId = new Guid("1aa8cf1f-96b0-47aa-bd20-d1563d840534"); ControlId = new Guid("1aa8cf1f-96b0-47aa-bd20-d1563d840534");
AccessOperation = AccessOperation.Приказы; AccessOperation = AccessOperation.Приказы;
ControlViewEntityElement = new ControlOrderElement(); ControlViewEntityElement = new ControlOrderStudentRecordElement();
_genericControlViewEntityList = this; _genericControlViewEntityList = this;
} }

View File

@ -9,14 +9,13 @@ using DesktopTools.Models;
using ModuleTools.Enums; using ModuleTools.Enums;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks;
namespace DepartmentWindowsDesktop.EntityControls namespace DepartmentWindowsDesktop.EntityControls
{ {
/// <summary> /// <summary>
/// Реализация контрола для списка историй синхронизации приказов /// Реализация контрола для списка историй синхронизации приказов
/// </summary> /// </summary>
public partial class ControlOrderSyncHistoryList : public partial class ControlOrderSyncHistoryList :
GenericControlEntityList<OrderSyncHistoryGetBindingModel, OrderSyncHistorySetBindingModel, OrderSyncHistoryListViewModel, OrderSyncHistoryViewModel, OrderSyncHistoryBusinessLogic>, GenericControlEntityList<OrderSyncHistoryGetBindingModel, OrderSyncHistorySetBindingModel, OrderSyncHistoryListViewModel, OrderSyncHistoryViewModel, OrderSyncHistoryBusinessLogic>,
IGenericControlEntityList IGenericControlEntityList
{ {
@ -26,7 +25,7 @@ namespace DepartmentWindowsDesktop.EntityControls
Title = "Синхронизация Приказов"; Title = "Синхронизация Приказов";
ControlId = new Guid("7b857c17-405e-40fb-961f-7fe74fddf84e"); ControlId = new Guid("7b857c17-405e-40fb-961f-7fe74fddf84e");
AccessOperation = AccessOperation.СинхронизацияПриказов; AccessOperation = AccessOperation.СинхронизацияПриказов;
ControlViewEntityElement = new ControlPostElement(); ControlViewEntityElement = new ControlOrderSyncHistoryElement();
_genericControlViewEntityList = this; _genericControlViewEntityList = this;
} }
@ -44,7 +43,7 @@ namespace DepartmentWindowsDesktop.EntityControls
}, },
ControlOnMoveElem = new() ControlOnMoveElem = new()
{ {
{ "ToolStripMenuItemSyncOrders", ("Синхронизировать студентов", async (object sender, EventArgs e) => { await SyncOrders(); }) } { "ToolStripMenuItemSyncOrders", ("Синхронизировать студентов", (object sender, EventArgs e) => { SyncOrders(); }) }
} }
}; };
@ -52,13 +51,17 @@ namespace DepartmentWindowsDesktop.EntityControls
/// Синхронизация приказов /// Синхронизация приказов
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
private async Task SyncOrders() private void SyncOrders()
{ {
var flag = await _businessLogic.SyncOrders(); var flag = _businessLogic.SyncOrders();
if (!flag) if (!flag)
{ {
DialogHelper.MessageException(_businessLogic.Errors, "Ошибки при синхронизации"); DialogHelper.MessageException(_businessLogic.Errors, "Ошибки при синхронизации");
} }
else
{
DialogHelper.MessageInformation("Завершено успешно", "Синхронизация приказов");
}
} }
} }
} }

View File

@ -24,7 +24,7 @@ namespace DepartmentWindowsDesktop.EntityControls
Title = "Записи Синхронизации Приказов"; Title = "Записи Синхронизации Приказов";
ControlId = new Guid("8d18e9fa-f056-47c8-b83d-f06f6bf553c2"); ControlId = new Guid("8d18e9fa-f056-47c8-b83d-f06f6bf553c2");
AccessOperation = AccessOperation.СинхронизацияПриказов; AccessOperation = AccessOperation.СинхронизацияПриказов;
ControlViewEntityElement = new ControlPostElement(); ControlViewEntityElement = new ControlOrderSyncHistoryRecordElement();
_genericControlViewEntityList = this; _genericControlViewEntityList = this;
} }

View File

@ -13,14 +13,13 @@ using SecurityBusinessLogic.BusinessLogics;
using SecurityBusinessLogic.ViewModels; using SecurityBusinessLogic.ViewModels;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks;
namespace DepartmentWindowsDesktop.EntityControls namespace DepartmentWindowsDesktop.EntityControls
{ {
/// <summary> /// <summary>
/// Реализация контрола для студента /// Реализация контрола для студента
/// </summary> /// </summary>
public partial class ControlStudentElement : public partial class ControlStudentElement :
GenericControlEntityElement<StudentGetBindingModel, StudentSetBindingModel, StudentListViewModel, StudentViewModel, StudentBusinessLogic>, GenericControlEntityElement<StudentGetBindingModel, StudentSetBindingModel, StudentListViewModel, StudentViewModel, StudentBusinessLogic>,
IGenericControlEntityElement IGenericControlEntityElement
{ {
@ -38,61 +37,54 @@ namespace DepartmentWindowsDesktop.EntityControls
{ {
ControlOnMoveElem = new Dictionary<string, (string Title, EventHandler Event)> ControlOnMoveElem = new Dictionary<string, (string Title, EventHandler Event)>
{ {
{ "ToolStripMenuItemAddUser", ("Добавить пользователя", async (object sender, EventArgs e) => { await AddUserAsync(); }) }, { "ToolStripMenuItemAddUser", ("Добавить пользователя", (object sender, EventArgs e) => { AddUser(); }) },
{ "ToolStripMenuItemPasswordReset", ("Сброс пароля пользователя", async (object sender, EventArgs e) => { await PasswordResetAsync(); }) } { "ToolStripMenuItemPasswordReset", ("Сброс пароля пользователя", (object sender, EventArgs e) => { PasswordReset(); }) }
} }
}; };
/// <summary> /// <summary>
/// Поиск пользователя под учетку, либо добавление нового, если не найдено /// Поиск пользователя под учетку, либо добавление нового, если не найдено
/// </summary> /// </summary>
private async Task AddUserAsync() private void AddUser()
{ {
var model = new StudentSetBindingModel(); var model = new StudentSetBindingModel();
if (FillModel(model)) if (FillModel(model))
{ {
var logic = DependencyManager.Instance.Resolve<UserBusinessLogic>(); var logic = DependencyManager.Instance.Resolve<UserBusinessLogic>();
var userName = $"{model.LastName}{(model.FirstName.IsNotEmpty() ? $" {model.FirstName[0]}." : string.Empty)}{(model.Patronymic.IsNotEmpty() ? $"{model.Patronymic[0]}." : string.Empty)}"; var userName = $"{model.LastName}{(model.FirstName.IsNotEmpty() ? $" {model.FirstName[0]}." : string.Empty)}{(model.Patronymic.IsNotEmpty() ? $"{model.Patronymic[0]}." : string.Empty)}";
var result = await logic.GetListAsync(new UserGetBindingModel { UserNameForSearch = userName }); var user = logic.GetElement(new UserGetBindingModel { Login = model.NumberOfBook });
if (result != null) if (user == null)
{ {
if (result.List.Count > 1) if (logic.Errors.Count > 0)
{ {
DialogHelper.MessageException("Существует несколько пользователей с такой сигнатурой", "Ошибка"); DialogHelper.MessageException(logic.Errors, "Ошибка при создании пользователя");
return; return;
} }
if (result.List.Count == 1) user = logic.Create(new UserSetBindingModel
{ {
model.UserId = result.List[0].Id; Login = model.NumberOfBook,
} Password = userName,
else Avatar = model.Photo
});
if (user == null)
{ {
var newuser = await logic.CreateAsync(new UserSetBindingModel DialogHelper.MessageException(logic.Errors, "Ошибка при создании пользователя");
{ return;
Login = userName,
Password = model.NumberOfBook,
Avatar = model.Photo
});
if (newuser == null)
{
DialogHelper.MessageException(logic.Errors, "Ошибка при создании пользователя");
return;
}
model.UserId = newuser.Id;
}
var controls = tabPageMain.Controls.Find($"ControlUserId", true);
if (controls != null)
{
(controls[0] as AbstractBaseControl).SetValue(model);
} }
} }
model.UserId = user.Id;
var controls = tabPageMain.Controls.Find($"ControlUserId", true);
if (controls != null)
{
(controls[0] as AbstractBaseControl).SetValue(model);
}
} }
} }
/// <summary> /// <summary>
/// Сброс пароля пользователя /// Сброс пароля пользователя
/// </summary> /// </summary>
private async Task PasswordResetAsync() private void PasswordReset()
{ {
if (_element == null) if (_element == null)
{ {
@ -102,14 +94,14 @@ namespace DepartmentWindowsDesktop.EntityControls
if (FillModel(model)) if (FillModel(model))
{ {
var logic = DependencyManager.Instance.Resolve<UserBusinessLogic>(); var logic = DependencyManager.Instance.Resolve<UserBusinessLogic>();
var user = await logic.GetElementAsync(new UserGetBindingModel { Id = _element.UserId }); var user = logic.GetElement(new UserGetBindingModel { Id = _element.UserId });
if (user == null) if (user == null)
{ {
DialogHelper.MessageException(logic.Errors, "Ошибка при получении пользователя"); DialogHelper.MessageException(logic.Errors, "Ошибка при получении пользователя");
return; return;
} }
user.Password = model.NumberOfBook; user.Password = model.NumberOfBook;
user = await logic.UpdateAsync(Mapper.MapToClass<UserViewModel, UserSetBindingModel>(user, true)); user = logic.Update(Mapper.MapToClass<UserViewModel, UserSetBindingModel>(user, true));
if (user == null) if (user == null)
{ {
DialogHelper.MessageException(logic.Errors, "Ошибка при получении пользователя"); DialogHelper.MessageException(logic.Errors, "Ошибка при получении пользователя");

View File

@ -11,6 +11,8 @@ namespace SecurityBusinessLogic.BindingModels
public class UserGetBindingModel : GetBindingModel public class UserGetBindingModel : GetBindingModel
{ {
public string UserNameForSearch { get; set; } public string UserNameForSearch { get; set; }
public string Login { get; set; }
} }
/// <summary> /// <summary>

View File

@ -17,7 +17,7 @@ namespace SecurityDatabaseImplementation.Implementations
/// Реализация IUserService /// Реализация IUserService
/// </summary> /// </summary>
public class UserService : public class UserService :
AbstractGenerticEntityService<UserGetBindingModel, UserSetBindingModel, User, UserListViewModel, UserViewModel>, AbstractGenerticEntityService<UserGetBindingModel, UserSetBindingModel, User, UserListViewModel, UserViewModel>,
IUserService IUserService
{ {
protected override OperationResultModel AdditionalCheckingWhenAdding(DbContext context, UserSetBindingModel model) protected override OperationResultModel AdditionalCheckingWhenAdding(DbContext context, UserSetBindingModel model)
@ -74,5 +74,23 @@ namespace SecurityDatabaseImplementation.Implementations
protected override IQueryable<User> IncludingWhenReading(IQueryable<User> query) => query; protected override IQueryable<User> IncludingWhenReading(IQueryable<User> query) => query;
protected override IQueryable<User> OrderingWhenReading(IQueryable<User> query) => query.OrderBy(x => x.UserName); protected override IQueryable<User> OrderingWhenReading(IQueryable<User> query) => query.OrderBy(x => x.UserName);
protected override bool AdditionalCheckForSingleGet(UserGetBindingModel model)
{
if (model.Login.IsNotEmpty())
{
return true;
}
return base.AdditionalCheckForSingleGet(model);
}
protected override User GetSingleRecord(IQueryable<User> list, UserGetBindingModel model)
{
if (model.Login.IsNotEmpty())
{
return list.FirstOrDefault(x => x.UserName == model.Login);
}
return base.GetSingleRecord(list, model);
}
} }
} }

View File

@ -39,7 +39,7 @@ namespace SecurityWindowsDesktop.EntityControls
public ControlViewEntityListConfiguration GetConfigControl() => new() public ControlViewEntityListConfiguration GetConfigControl() => new()
{ {
PaginationOn = true, PaginationOn = true,
PageNamesForPagination = _roleBusinessLogic.GetListAsync(new RoleGetBindingModel()).Result?.List?.Select(x => PageNamesForPagination = _roleBusinessLogic.GetList(new RoleGetBindingModel())?.List?.Select(x =>
new PageNamesForPaginationModel new PageNamesForPaginationModel
{ {
Key = x.Id, Key = x.Id,