наработки по студентам
This commit is contained in:
parent
61a84b6b68
commit
2acaecbf8d
1453
DepartmentPortal/Common/DatabaseCore/Migrations/20210430050931_UpdateStudnet2.Designer.cs
generated
Normal file
1453
DepartmentPortal/Common/DatabaseCore/Migrations/20210430050931_UpdateStudnet2.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
1450
DepartmentPortal/Common/DatabaseCore/Migrations/20210430051530_UpdateStudnet3.Designer.cs
generated
Normal file
1450
DepartmentPortal/Common/DatabaseCore/Migrations/20210430051530_UpdateStudnet3.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -748,7 +748,6 @@ namespace DatabaseCore.Migrations
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("Email")
|
||||
.IsRequired()
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("FirstName")
|
||||
@ -780,7 +779,6 @@ namespace DatabaseCore.Migrations
|
||||
.HasColumnType("varbinary(max)");
|
||||
|
||||
b.Property<Guid?>("StudentGroupId")
|
||||
.IsRequired()
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<int>("StudentState")
|
||||
@ -1265,9 +1263,7 @@ namespace DatabaseCore.Migrations
|
||||
{
|
||||
b.HasOne("DatabaseCore.Models.Department.StudentGroup", "StudentGroup")
|
||||
.WithMany("Students")
|
||||
.HasForeignKey("StudentGroupId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
.HasForeignKey("StudentGroupId");
|
||||
|
||||
b.HasOne("DatabaseCore.Models.Security.User", "User")
|
||||
.WithMany("Students")
|
||||
|
@ -25,7 +25,6 @@ namespace DatabaseCore.Models.Department
|
||||
public Guid UserId { get; set; }
|
||||
|
||||
[DataMember]
|
||||
[Required]
|
||||
[MapConfiguration("StudentGroupId")]
|
||||
public Guid? StudentGroupId { get; set; }
|
||||
|
||||
@ -54,7 +53,6 @@ namespace DatabaseCore.Models.Department
|
||||
public string Patronymic { get; set; }
|
||||
|
||||
[DataMember]
|
||||
[Required]
|
||||
[MapConfiguration("Email")]
|
||||
public string Email { get; set; }
|
||||
|
||||
|
@ -103,7 +103,7 @@ namespace ModuleTools.BusinessLogics
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<E> CreateAsync(S model)
|
||||
public virtual async Task<E> CreateAsync(S model)
|
||||
{
|
||||
Errors.Clear();
|
||||
try
|
||||
@ -133,7 +133,7 @@ namespace ModuleTools.BusinessLogics
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<E> UpdateAsync(S model)
|
||||
public virtual async Task<E> UpdateAsync(S model)
|
||||
{
|
||||
Errors.Clear();
|
||||
try
|
||||
@ -163,7 +163,7 @@ namespace ModuleTools.BusinessLogics
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> DeleteAsync(G model)
|
||||
public virtual async Task<bool> DeleteAsync(G model)
|
||||
{
|
||||
Errors.Clear();
|
||||
try
|
||||
@ -193,7 +193,7 @@ namespace ModuleTools.BusinessLogics
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<E> RestoreAsync(G model)
|
||||
public virtual async Task<E> RestoreAsync(G model)
|
||||
{
|
||||
Errors.Clear();
|
||||
try
|
||||
|
@ -1,5 +1,6 @@
|
||||
using ModuleTools.Attributes;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Reflection;
|
||||
|
||||
namespace ModuleTools.BusinessLogics
|
||||
@ -69,6 +70,11 @@ namespace ModuleTools.BusinessLogics
|
||||
value = value.ToString();
|
||||
break;
|
||||
}
|
||||
else if (prop == "Count")
|
||||
{
|
||||
value = (value as ICollection)?.Count;
|
||||
break;
|
||||
}
|
||||
var bindingProperty = value.GetType().GetProperty(prop);
|
||||
if (bindingProperty != null)
|
||||
{
|
||||
|
@ -16,6 +16,8 @@ namespace DepartmentBusinessLogic.BindingModels
|
||||
public Guid? StudentId { get; set; }
|
||||
|
||||
public Guid? StudentGroupId { get; set; }
|
||||
|
||||
public OrderStudentMoveType? OrderStudentMoveType { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -1,8 +1,12 @@
|
||||
using DepartmentBusinessLogic.BindingModels;
|
||||
using DepartmentBusinessLogic.Enums;
|
||||
using DepartmentBusinessLogic.Interfaces;
|
||||
using DepartmentBusinessLogic.ViewModels;
|
||||
using ModuleTools.BusinessLogics;
|
||||
using ModuleTools.Enums;
|
||||
using SecurityBusinessLogic.BindingModels;
|
||||
using SecurityBusinessLogic.BusinessLogics;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DepartmentBusinessLogic.BusinessLogics
|
||||
{
|
||||
@ -12,5 +16,146 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
public class OrderStudentRecordBusinessLogic : GenericBusinessLogic<OrderStudentRecordGetBindingModel, OrderStudentRecordSetBindingModel, OrderStudentRecordListViewModel, OrderStudentRecordViewModel>
|
||||
{
|
||||
public OrderStudentRecordBusinessLogic(IOrderStudentRecordService service) : base(service, "Приказы", AccessOperation.Приказы) { }
|
||||
|
||||
public override async Task<OrderStudentRecordViewModel> CreateAsync(OrderStudentRecordSetBindingModel model)
|
||||
{
|
||||
var result = await base.CreateAsync(model);
|
||||
if (result != null)
|
||||
{
|
||||
var studentLogic = DependencyManager.Instance.Resolve<StudentBusinessLogic>();
|
||||
var userLogic = DependencyManager.Instance.Resolve<UserBusinessLogic>();
|
||||
var student = await studentLogic.GetElementAsync(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 = await studentLogic.UpdateAsync(st);
|
||||
if (student == null)
|
||||
{
|
||||
Errors.AddRange(studentLogic.Errors);
|
||||
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить группу у студента {studentName}"));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if (student.Description != model.Info)
|
||||
{
|
||||
st.Description = model.Info;
|
||||
student = await studentLogic.UpdateAsync(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 = await studentLogic.UpdateAsync(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 = await studentLogic.UpdateAsync(st);
|
||||
if (student == null)
|
||||
{
|
||||
Errors.AddRange(studentLogic.Errors);
|
||||
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if (result.OrderStudentMoveType == OrderStudentMoveType.ВосстановитьИзАкадема && student.StudentState != StudentState.Учится)
|
||||
{
|
||||
st.StudentState = StudentState.Учится;
|
||||
student = await studentLogic.UpdateAsync(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 = await studentLogic.UpdateAsync(st);
|
||||
if (student == null)
|
||||
{
|
||||
Errors.AddRange(studentLogic.Errors);
|
||||
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
|
||||
return null;
|
||||
}
|
||||
var delete = await studentLogic.DeleteAsync(new StudentGetBindingModel { Id = student.Id });
|
||||
if (!delete)
|
||||
{
|
||||
Errors.AddRange(studentLogic.Errors);
|
||||
Errors.Add(("Ошибка удаления студента", $"Не удалось удалить студента {studentName}"));
|
||||
return null;
|
||||
}
|
||||
delete = await userLogic.DeleteAsync(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 = await studentLogic.UpdateAsync(st);
|
||||
if (student == null)
|
||||
{
|
||||
Errors.AddRange(studentLogic.Errors);
|
||||
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if (result.OrderStudentMoveType == OrderStudentMoveType.УбратьПоПереводу && student.StudentState != StudentState.Ушел)
|
||||
{
|
||||
st.StudentState = StudentState.Ушел;
|
||||
student = await studentLogic.UpdateAsync(st);
|
||||
if (student == null)
|
||||
{
|
||||
Errors.AddRange(studentLogic.Errors);
|
||||
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
@ -107,7 +107,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
// авторизация
|
||||
|
||||
// получение списка студентов
|
||||
HttpResponseMessage response = await client.GetAsync($"{address.Value}/univer_Testing/hs/Ulstu_StudentsInfo/v1/GetCurrentStudentsOfDepartment");
|
||||
HttpResponseMessage response = await client.GetAsync($"{address.Value}/univer/hs/Ulstu_StudentsInfo/v1/GetCurrentStudentsOfDepartment");
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
Errors.Add(("Ошибка получения данных", "Не удалось получить список студентов с сервера"));
|
||||
@ -206,15 +206,32 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
continue;
|
||||
}
|
||||
|
||||
var userName = $"{student.lastName}{(student.firstName.IsNotEmpty() ? $" {student.firstName[0]}." : string.Empty)}{(student.patronymicName.IsNotEmpty() ? $"{student.patronymicName[0]}." : string.Empty)}";
|
||||
var result = await _userLogic.GetListAsync(new UserGetBindingModel { UserNameForSearch = userName });
|
||||
|
||||
var newuser = await _userLogic.CreateAsync(new UserSetBindingModel
|
||||
var user = await _userLogic.GetElementAsync(new UserGetBindingModel
|
||||
{
|
||||
Login = userName,
|
||||
Password = student.recordBookName
|
||||
Login = student.recordBookName
|
||||
});
|
||||
if (newuser == null)
|
||||
if (user == null)
|
||||
{
|
||||
if (_userLogic.Errors.Count > 0)
|
||||
{
|
||||
var errors = _userLogic.Errors;
|
||||
errors.Add(("Ошибка получения пользователя под студента", $"Не удалось получить пользователя под студента {student.lastName} {student.firstName} {student.patronymicName}"));
|
||||
await _recordLogic.CreateAsync(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 = await _userLogic.CreateAsync(new UserSetBindingModel
|
||||
{
|
||||
Login = student.recordBookName,
|
||||
Password = userName
|
||||
});
|
||||
|
||||
if (user == null)
|
||||
{
|
||||
var errors = _userLogic.Errors;
|
||||
errors.Add(("Ошибка создания пользователя под студента", $"Не удалось создать пользователя под студента {student.lastName} {student.firstName} {student.patronymicName}"));
|
||||
@ -225,17 +242,18 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
});
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
var newStudent = await _studentLogic.CreateAsync(new StudentSetBindingModel
|
||||
{
|
||||
Iduniv = student.iduniv,
|
||||
NumberOfBook = student.recordBookName,
|
||||
UserId = newuser.Id,
|
||||
UserId = user.Id,
|
||||
FirstName = student.firstName,
|
||||
LastName = student.lastName,
|
||||
Patronymic = student.patronymicName,
|
||||
StudentState = StudentState.Неопределен,
|
||||
Description = student.presenatationOfRecordBook
|
||||
Description = string.Empty
|
||||
});
|
||||
|
||||
if (newStudent == null)
|
||||
@ -257,10 +275,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
});
|
||||
|
||||
await SyncStudentOrders(history, newStudent, groups.List, client, address.Value);
|
||||
|
||||
studentFromServer.CurrentStudentsList.Remove(student);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -275,7 +290,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
/// <returns></returns>
|
||||
private async Task 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 = await client.GetAsync($"{address}/univer/hs/Ulstu_StudentsInfo/v1/GetStudentOrdersByIdAndRecordBook?iduniv={student.Iduniv}&recordBookName={student.NumberOfBook}&allOrders=sppd");
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
Errors.Add(("Ошибка получения данных", "Не удалось получить список приказов по студенту"));
|
||||
@ -289,19 +304,53 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
var syncOrders = JsonSerializer.Deserialize<StudentOrderListSyncModel>(response.Content.ReadAsStringAsync().Result);
|
||||
foreach (var syncOrder in syncOrders.StudentOrders)
|
||||
{
|
||||
if (syncOrder.markOfApprove.ToLower() != "true")
|
||||
{
|
||||
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
|
||||
{
|
||||
OrderSyncHistoryId = history.Id,
|
||||
Information = $"Приказ {syncOrder.clericNumber} от {syncOrder.clericDate} ({syncOrder.orderTypeName}) по студенту {student} не утврежден "
|
||||
});
|
||||
continue;
|
||||
}
|
||||
if (syncOrder.clericNumber.IsEmpty())
|
||||
{
|
||||
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
|
||||
{
|
||||
OrderSyncHistoryId = history.Id,
|
||||
Information = $"Приказ без номера от {syncOrder.clericDate} ({student})"
|
||||
});
|
||||
continue;
|
||||
}
|
||||
if (syncOrder.clericDate.IsEmpty())
|
||||
{
|
||||
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
|
||||
{
|
||||
OrderSyncHistoryId = history.Id,
|
||||
Information = $"Приказ {syncOrder.clericNumber} - неизвестная дата ({student})"
|
||||
});
|
||||
continue;
|
||||
}
|
||||
var orderType = GetOrderType(syncOrder.orderTypeName);
|
||||
|
||||
// пропускаем приказы, которые нас не интересуют
|
||||
if (orderType == OrderType.Неопределено)
|
||||
{
|
||||
if (syncOrder.orderTypeName != "Корректировка" && syncOrder.orderTypeName != "Назначение стипендии" &&
|
||||
syncOrder.orderTypeName != "Утверждение тем курсовых работ" && syncOrder.orderTypeName != "Утверждение тем работ"
|
||||
&& syncOrder.orderTypeName != "Смена ФИО")
|
||||
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
|
||||
{
|
||||
OrderSyncHistoryId = history.Id,
|
||||
Information = $"Приказ {syncOrder.clericNumber} неопределенного типа {syncOrder.orderTypeName}"
|
||||
});
|
||||
continue;
|
||||
}
|
||||
|
||||
// пытаемся найти приказ
|
||||
var order = await _orderLogic.GetElementAsync(new OrderGetBindingModel
|
||||
{
|
||||
OrderNumber = syncOrder.clericNumber,
|
||||
OrderDate = Convert.ToDateTime(syncOrder.clericDate)
|
||||
OrderNumber = syncOrder.clericNumber
|
||||
});
|
||||
if (order == null)
|
||||
{
|
||||
@ -325,24 +374,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? studentGroupToId = null;
|
||||
string info = string.Empty;
|
||||
@ -355,7 +386,8 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
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;
|
||||
}
|
||||
@ -367,23 +399,22 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
if (syncOrder.orderSubTypeName == "Распределение по группам")
|
||||
{
|
||||
orderStudentMoveType = OrderStudentMoveType.Распределить;
|
||||
info = $"Распределение студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}";
|
||||
info = $"Распределение студента {student} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
|
||||
}
|
||||
// внутренний перевод
|
||||
else if (studentGroupFromId.HasValue && studentGroupToId.HasValue)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
orderStudentMoveType = OrderStudentMoveType.УбратьПоПереводу;
|
||||
info = $"Перевод студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} на другую кафедру";
|
||||
info = $"Перевод студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} на другую кафедру";
|
||||
}
|
||||
break;
|
||||
case "Зачисление в вуз вне приемной кампании":
|
||||
@ -400,16 +431,20 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
break;
|
||||
case "Перевод на следующий курс":
|
||||
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;
|
||||
//case "Завершение обучения": // уточнить приказ
|
||||
// orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному;
|
||||
// info = $"Отчисление студента {student} в связи с окончанием обучения";
|
||||
// break;
|
||||
case "Уход в академический отпуск":
|
||||
// дата
|
||||
DateTime? date = null;
|
||||
if (syncOrder.dateEnd.IsNotEmpty())
|
||||
{
|
||||
date = Convert.ToDateTime(syncOrder.dateEnd);
|
||||
}
|
||||
orderStudentMoveType = OrderStudentMoveType.ОтправитьВАкадем;
|
||||
info = $"Уход в АО студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)}";
|
||||
info = $"Уход в АО студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} до {date?.ToShortDateString() ?? string.Empty}";
|
||||
break;
|
||||
case "Продление академического отпуска":
|
||||
orderStudentMoveType = OrderStudentMoveType.ПродлитьАкадем;
|
||||
@ -417,32 +452,50 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
break;
|
||||
case "Восстановление из академического отпуска":
|
||||
orderStudentMoveType = OrderStudentMoveType.ВосстановитьИзАкадема;
|
||||
info = $"Выход из АО студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}";
|
||||
info = $"Выход из АО студента {student} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
|
||||
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 "Отчисление по невыходу из академа": // уточнить приказ
|
||||
// orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНевыходСАкадема;
|
||||
// info = $"Отчисление студента {student} по невыходу из академа";
|
||||
// break;
|
||||
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;
|
||||
case "Восстановление":
|
||||
orderStudentMoveType = OrderStudentMoveType.Восстановить;
|
||||
info = $"Восстановление отчисленного студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}";
|
||||
info = $"Восстановление отчисленного студента {student} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
|
||||
break;
|
||||
}
|
||||
|
||||
if (orderStudentMoveType == OrderStudentMoveType.Неопределено)
|
||||
{
|
||||
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
|
||||
{
|
||||
OrderSyncHistoryId = history.Id,
|
||||
Information = $"Неизветсный приказ {syncOrder.orderTypeName} ({syncOrder.reason}) по студенту {student}"
|
||||
});
|
||||
continue;
|
||||
}
|
||||
|
||||
// ищем в приказе запись по студенту
|
||||
var studentOrder = await _orderStudentRecordLogic.GetElementAsync(new OrderStudentRecordGetBindingModel
|
||||
{
|
||||
OrderId = order.Id,
|
||||
StudentId = student.Id,
|
||||
OrderStudentMoveType = orderStudentMoveType
|
||||
});
|
||||
|
||||
// если такой приказ по студенту уже есть, просто пропускаем
|
||||
if (studentOrder != null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@ -469,191 +522,6 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
continue;
|
||||
}
|
||||
|
||||
var st = Mapper.MapToClass<StudentViewModel, StudentSetBindingModel>(student, true);
|
||||
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,
|
||||
|
@ -9,6 +9,10 @@
|
||||
|
||||
public string clericDate { get; set; }
|
||||
|
||||
public string markOfDeletion { get; set; }
|
||||
|
||||
public string markOfApprove { get; set; }
|
||||
|
||||
public string orderTypeName { get; set; }
|
||||
|
||||
public string orderSubTypeName { get; set; }
|
||||
@ -16,5 +20,11 @@
|
||||
public string groupNameBefore { get; set; }
|
||||
|
||||
public string groupNameAfter { get; set; }
|
||||
|
||||
public string dateStart { get; set; }
|
||||
|
||||
public string dateEnd { get; set; }
|
||||
|
||||
public string reason { get; set; }
|
||||
}
|
||||
}
|
@ -27,11 +27,11 @@ namespace DepartmentBusinessLogic.ViewModels
|
||||
|
||||
[ViewModelControlElementProperty("Из группы", ControlType.ControlGuid, MustHaveValue = false, ReadOnly = false, ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlStudentGroupList, DepartmentWindowsDesktop")]
|
||||
[MapConfiguration("StudentGroupFromId")]
|
||||
public Guid StudentGroupFromId { get; set; }
|
||||
public Guid? StudentGroupFromId { get; set; }
|
||||
|
||||
[ViewModelControlElementProperty("В группу", ControlType.ControlGuid, MustHaveValue = false, ReadOnly = false, ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlStudentGroupList, DepartmentWindowsDesktop")]
|
||||
[MapConfiguration("StudentGroupToId")]
|
||||
public Guid StudentGroupToId { get; set; }
|
||||
public Guid? StudentGroupToId { get; set; }
|
||||
|
||||
[ViewModelControlElementProperty("Тип приказа", ControlType.ControlEnum, MustHaveValue = true)]
|
||||
[MapConfiguration("OrderStudentMoveType")]
|
||||
|
@ -1,6 +1,7 @@
|
||||
using ModuleTools.Attributes;
|
||||
using ModuleTools.Enums;
|
||||
using ModuleTools.ViewModels;
|
||||
using System;
|
||||
|
||||
namespace DepartmentBusinessLogic.ViewModels
|
||||
{
|
||||
@ -17,14 +18,11 @@ namespace DepartmentBusinessLogic.ViewModels
|
||||
ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlOrderSyncHistoryRecordList, DepartmentWindowsDesktop")]
|
||||
public class OrderSyncHistoryViewModel : ElementViewModel
|
||||
{
|
||||
[ViewModelControlListProperty("Дата", ColumnWidth = 100, DefaultCellStyleFormat = "dd.MM.yyyy")]
|
||||
[ViewModelControlElementProperty("Дата", ControlType.ControlDateTime, MustHaveValue = true, ReadOnly = true)]
|
||||
[MapConfiguration("SyncDate")]
|
||||
public string SyncDate { get; set; }
|
||||
public DateTime SyncDate { get; set; }
|
||||
|
||||
[ViewModelControlListProperty("События")]
|
||||
[ViewModelControlElementProperty("События", ControlType.ControlText, MustHaveValue = true, ReadOnly = true, Width = 300, Height = 500)]
|
||||
[MapConfiguration("History")]
|
||||
public string History { get; set; }
|
||||
[ViewModelControlListProperty("Дата")]
|
||||
public string SyncDateTitle => $"Синхронизация данных от {SyncDate.ToString("dd.MM.yyyy HH:mm")}";
|
||||
}
|
||||
}
|
@ -14,11 +14,9 @@ namespace DepartmentBusinessLogic.ViewModels
|
||||
/// <summary>
|
||||
/// Элемент учебная группа
|
||||
/// </summary>
|
||||
[ViewModelControlElementClass(HaveDependenceEntities = true, Width = 800, Height = 500)]
|
||||
[ViewModelControlElementClass(HaveDependenceEntities = true, Width = 1000, Height = 900)]
|
||||
[ViewModelControlElementDependenceEntity(Title = "Студенты", Order = 1, ParentPropertyName = "StudentGroupId",
|
||||
ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlStudentList, DepartmentWindowsDesktop")]
|
||||
[ViewModelControlElementDependenceEntity(Title = "Приказы", Order = 1, ParentPropertyName = "StudentGroupId",
|
||||
ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlOrderStudentRecordList, DepartmentWindowsDesktop")]
|
||||
public class StudentGroupViewModel : ElementViewModel
|
||||
{
|
||||
[ViewModelControlElementProperty("Направление", ControlType.ControlGuid, MustHaveValue = true, ReadOnly = false, ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlEducationDirectionList, DepartmentWindowsDesktop")]
|
||||
@ -51,6 +49,10 @@ namespace DepartmentBusinessLogic.ViewModels
|
||||
[MapConfiguration("GroupNumber")]
|
||||
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")]
|
||||
[MapConfiguration("LecturerId")]
|
||||
public Guid? LecturerId { get; set; }
|
||||
|
@ -51,7 +51,7 @@ namespace DepartmentDatabaseImplementation.Implementations
|
||||
|
||||
protected override bool AdditionalCheckForSingleGet(OrderGetBindingModel model)
|
||||
{
|
||||
if (model.OrderDate.HasValue && model.OrderNumber.IsNotEmpty())
|
||||
if (model.OrderNumber.IsNotEmpty())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@ -60,9 +60,9 @@ namespace DepartmentDatabaseImplementation.Implementations
|
||||
|
||||
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);
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ namespace DepartmentDatabaseImplementation.Implementations
|
||||
|
||||
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;
|
||||
}
|
||||
@ -58,9 +58,9 @@ namespace DepartmentDatabaseImplementation.Implementations
|
||||
|
||||
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);
|
||||
}
|
||||
|
@ -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 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);
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ namespace DepartmentWindowsDesktop.EntityControls
|
||||
Title = "Приказы";
|
||||
ControlId = new Guid("1aa8cf1f-96b0-47aa-bd20-d1563d840534");
|
||||
AccessOperation = AccessOperation.Приказы;
|
||||
ControlViewEntityElement = new ControlOrderElement();
|
||||
ControlViewEntityElement = new ControlOrderStudentRecordElement();
|
||||
_genericControlViewEntityList = this;
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@ namespace DepartmentWindowsDesktop.EntityControls
|
||||
Title = "Синхронизация Приказов";
|
||||
ControlId = new Guid("7b857c17-405e-40fb-961f-7fe74fddf84e");
|
||||
AccessOperation = AccessOperation.СинхронизацияПриказов;
|
||||
ControlViewEntityElement = new ControlPostElement();
|
||||
ControlViewEntityElement = new ControlOrderSyncHistoryElement();
|
||||
_genericControlViewEntityList = this;
|
||||
}
|
||||
|
||||
@ -59,6 +59,10 @@ namespace DepartmentWindowsDesktop.EntityControls
|
||||
{
|
||||
DialogHelper.MessageException(_businessLogic.Errors, "Ошибки при синхронизации");
|
||||
}
|
||||
else
|
||||
{
|
||||
DialogHelper.MessageInformation("Завершено успешно", "Синхронизация приказов");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -24,7 +24,7 @@ namespace DepartmentWindowsDesktop.EntityControls
|
||||
Title = "Записи Синхронизации Приказов";
|
||||
ControlId = new Guid("8d18e9fa-f056-47c8-b83d-f06f6bf553c2");
|
||||
AccessOperation = AccessOperation.СинхронизацияПриказов;
|
||||
ControlViewEntityElement = new ControlPostElement();
|
||||
ControlViewEntityElement = new ControlOrderSyncHistoryRecordElement();
|
||||
_genericControlViewEntityList = this;
|
||||
}
|
||||
|
||||
|
@ -53,33 +53,27 @@ namespace DepartmentWindowsDesktop.EntityControls
|
||||
{
|
||||
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 result = await logic.GetListAsync(new UserGetBindingModel { UserNameForSearch = userName });
|
||||
if (result != null)
|
||||
var user = await logic.GetElementAsync(new UserGetBindingModel { Login = model.NumberOfBook });
|
||||
if (user == null)
|
||||
{
|
||||
if (result.List.Count > 1)
|
||||
{
|
||||
DialogHelper.MessageException("Существует несколько пользователей с такой сигнатурой", "Ошибка");
|
||||
return;
|
||||
}
|
||||
if (result.List.Count == 1)
|
||||
{
|
||||
model.UserId = result.List[0].Id;
|
||||
}
|
||||
else
|
||||
{
|
||||
var newuser = await logic.CreateAsync(new UserSetBindingModel
|
||||
{
|
||||
Login = userName,
|
||||
Password = model.NumberOfBook,
|
||||
Avatar = model.Photo
|
||||
});
|
||||
if (newuser == null)
|
||||
if (logic.Errors.Count > 0)
|
||||
{
|
||||
DialogHelper.MessageException(logic.Errors, "Ошибка при создании пользователя");
|
||||
return;
|
||||
}
|
||||
model.UserId = newuser.Id;
|
||||
user = await logic.CreateAsync(new UserSetBindingModel
|
||||
{
|
||||
Login = model.NumberOfBook,
|
||||
Password = userName,
|
||||
Avatar = model.Photo
|
||||
});
|
||||
if (user == null)
|
||||
{
|
||||
DialogHelper.MessageException(logic.Errors, "Ошибка при создании пользователя");
|
||||
return;
|
||||
}
|
||||
}
|
||||
model.UserId = user.Id;
|
||||
var controls = tabPageMain.Controls.Find($"ControlUserId", true);
|
||||
if (controls != null)
|
||||
{
|
||||
@ -87,7 +81,6 @@ namespace DepartmentWindowsDesktop.EntityControls
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сброс пароля пользователя
|
||||
|
@ -11,6 +11,8 @@ namespace SecurityBusinessLogic.BindingModels
|
||||
public class UserGetBindingModel : GetBindingModel
|
||||
{
|
||||
public string UserNameForSearch { get; set; }
|
||||
|
||||
public string Login { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -74,5 +74,23 @@ namespace SecurityDatabaseImplementation.Implementations
|
||||
protected override IQueryable<User> IncludingWhenReading(IQueryable<User> query) => query;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user