Синхронизация студентов, доработка
This commit is contained in:
parent
df73a0d314
commit
074fc405ed
@ -128,6 +128,10 @@ namespace CoreDatabase
|
||||
}
|
||||
if (entity.IsDeleted)
|
||||
{
|
||||
if (model.IgnoreDeleted)
|
||||
{
|
||||
return OperationResultModel.Success(Mapper.MapToClass<T, E>(entity, model.HaveRight));
|
||||
}
|
||||
return OperationResultModel.Error("Error:", "Элемент удален", ResultServiceStatusCode.WasDelete);
|
||||
}
|
||||
return OperationResultModel.Success(Mapper.MapToClass<T, E>(entity, model.HaveRight));
|
||||
|
@ -32,5 +32,10 @@ namespace ToolsModule.ManagmentEntity
|
||||
/// Иной признак, по которму отбираем записи (для списка)
|
||||
/// </summary>
|
||||
public string PageName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Игнорировать признак убдаленности записи и все равно ее возвращать
|
||||
/// </summary>
|
||||
public bool IgnoreDeleted { get; set; } = false;
|
||||
}
|
||||
}
|
@ -26,7 +26,7 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
|
||||
{
|
||||
var studentLogic = DependencyManager.Instance.Resolve<IStudentLogic>();
|
||||
var userLogic = DependencyManager.Instance.Resolve<IUserLogic>();
|
||||
var student = studentLogic.GetElement(new StudentGetBindingModel { Id = result.StudentId });
|
||||
var student = model.StudentModel;
|
||||
if (student == null)
|
||||
{
|
||||
Errors.AddRange(studentLogic.Errors);
|
||||
@ -36,28 +36,17 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
|
||||
// изменять студента
|
||||
var st = Mapper.MapToClass<StudentViewModel, StudentSetBindingModel>(student, true);
|
||||
var studentName = student.ToString();
|
||||
|
||||
bool haveChages = false;
|
||||
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;
|
||||
}
|
||||
haveChages = true;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
haveChages = true;
|
||||
}
|
||||
|
||||
if ((result.OrderStudentMoveType == OrderStudentMoveType.ЗачислитьПоПриказу ||
|
||||
@ -69,6 +58,7 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
|
||||
{
|
||||
st.StudentState = StudentState.Учится;
|
||||
student = studentLogic.Update(st);
|
||||
haveChages = false;
|
||||
if (student == null)
|
||||
{
|
||||
Errors.AddRange(studentLogic.Errors);
|
||||
@ -83,6 +73,7 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
|
||||
{
|
||||
st.StudentState = StudentState.Академ;
|
||||
student = studentLogic.Update(st);
|
||||
haveChages = false;
|
||||
if (student == null)
|
||||
{
|
||||
Errors.AddRange(studentLogic.Errors);
|
||||
@ -95,6 +86,7 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
|
||||
{
|
||||
st.StudentState = StudentState.Учится;
|
||||
student = studentLogic.Update(st);
|
||||
haveChages = false;
|
||||
if (student == null)
|
||||
{
|
||||
Errors.AddRange(studentLogic.Errors);
|
||||
@ -112,6 +104,7 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
|
||||
{
|
||||
st.StudentState = result.OrderStudentMoveType == OrderStudentMoveType.ОтчислитьПоЗавершению ? StudentState.Завершил : StudentState.Отчислен;
|
||||
student = studentLogic.Update(st);
|
||||
haveChages = false;
|
||||
if (student == null)
|
||||
{
|
||||
Errors.AddRange(studentLogic.Errors);
|
||||
@ -136,8 +129,23 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
|
||||
|
||||
if (result.OrderStudentMoveType == OrderStudentMoveType.Восстановить && student.StudentState != StudentState.Учится)
|
||||
{
|
||||
var deletedStudent = studentLogic.Restore(new StudentGetBindingModel { NumberOfBook = student.NumberOfBook });
|
||||
if (deletedStudent == null)
|
||||
{
|
||||
Errors.AddRange(studentLogic.Errors);
|
||||
Errors.Add(("Ошибка при восстановлении студента", $"Не удалось восстановить студента {studentName}"));
|
||||
return null;
|
||||
}
|
||||
var deletedUser = userLogic.Restore(new UserGetBindingModel { Id = deletedStudent.UserId });
|
||||
if (deletedUser == null)
|
||||
{
|
||||
Errors.AddRange(userLogic.Errors);
|
||||
Errors.Add(("Ошибка при восстановлении пользователя студента", $"Не удалось восстановить пользователя студента {studentName}"));
|
||||
return null;
|
||||
}
|
||||
st.StudentState = StudentState.Учится;
|
||||
student = studentLogic.Update(st);
|
||||
haveChages = false;
|
||||
if (student == null)
|
||||
{
|
||||
Errors.AddRange(studentLogic.Errors);
|
||||
@ -150,12 +158,38 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
|
||||
{
|
||||
st.StudentState = StudentState.Ушел;
|
||||
student = studentLogic.Update(st);
|
||||
haveChages = false;
|
||||
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 (haveChages)
|
||||
{
|
||||
student = studentLogic.Update(st);
|
||||
if (student == null)
|
||||
{
|
||||
Errors.AddRange(studentLogic.Errors);
|
||||
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить данные у студента {studentName}"));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
@ -122,7 +122,7 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
|
||||
// новые студенты и восстановленцы
|
||||
foreach (var student in studentFromServer.CurrentStudentsList)
|
||||
{
|
||||
var deletedStudent = TryRestoreStudent(student);
|
||||
var deletedStudent = _studentLogic.GetElement(new StudentGetBindingModel { NumberOfBook = student.recordBookName, IgnoreDeleted = true });
|
||||
if (deletedStudent != null)
|
||||
{
|
||||
await SyncStudentOrders(deletedStudent, groups.List, client, address.Value);
|
||||
@ -241,29 +241,6 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
|
||||
return client;
|
||||
}
|
||||
|
||||
private StudentViewModel TryRestoreStudent(StudentSyncModel student)
|
||||
{
|
||||
var deletedStudent = _studentLogic.GetElement(new StudentGetBindingModel { NumberOfBook = student.recordBookName });
|
||||
if (deletedStudent == null && _studentLogic.Errors.FirstOrDefault(x => x.Message == "Элемент удален") != default)
|
||||
{
|
||||
// восстановленец
|
||||
deletedStudent = _studentLogic.Restore(new StudentGetBindingModel { NumberOfBook = student.recordBookName });
|
||||
if (deletedStudent == null)
|
||||
{
|
||||
SaveErrors(_studentLogic.Errors, "Ошибка при восстановлении студента", $"Не удалось восстановить студента {student.lastName} {student.firstName} {student.patronymicName}");
|
||||
return null;
|
||||
}
|
||||
var deletedUser = _userLogic.Restore(new UserGetBindingModel { Id = deletedStudent.UserId });
|
||||
if (deletedUser == null)
|
||||
{
|
||||
SaveErrors(_userLogic.Errors, "Ошибка при восстановлении пользователя студента", $"Не удалось восстановить пользователя студента {student.lastName} {student.firstName} {student.patronymicName}");
|
||||
return null;
|
||||
}
|
||||
return deletedStudent;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private UserViewModel WorkWithUser(StudentSyncModel student)
|
||||
{
|
||||
var userName = $"{student.lastName}{(student.firstName.IsNotEmpty() ? $" {student.firstName[0]}." : string.Empty)}{(student.patronymicName.IsNotEmpty() ? $"{student.patronymicName[0]}." : string.Empty)}";
|
||||
@ -453,6 +430,8 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
|
||||
continue;
|
||||
}
|
||||
|
||||
SetYearFinish(student, studentGroupTo, order, orderStudentMoveType);
|
||||
|
||||
// создаем, если не нашли
|
||||
var studentOrder = _orderStudentRecordLogic.Create(new OrderStudentRecordSetBindingModel
|
||||
{
|
||||
@ -461,7 +440,8 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
|
||||
Info = info,
|
||||
OrderStudentMoveType = orderStudentMoveType,
|
||||
StudentGroupFromId = studentGroupFrom?.Id,
|
||||
StudentGroupToId = studentGroupTo?.Id
|
||||
StudentGroupToId = studentGroupTo?.Id,
|
||||
StudentModel = student
|
||||
});
|
||||
if (studentOrder == null)
|
||||
{
|
||||
@ -469,8 +449,6 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
|
||||
continue;
|
||||
}
|
||||
|
||||
SetYearFinish(student, studentGroupTo, order, studentOrder);
|
||||
|
||||
SaveLog($"Добавили запись к приказу {order.OrderNumber} по студенту {student} с формулировкой {info}");
|
||||
|
||||
if (orderStudentMoveType == OrderStudentMoveType.ОтчислитьВСвязиСПереводом ||
|
||||
@ -595,14 +573,14 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
|
||||
}
|
||||
}
|
||||
|
||||
private void SetYearFinish(StudentViewModel student, StudentGroupViewModel group, OrderViewModel order, OrderStudentRecordViewModel studentOrder)
|
||||
private void SetYearFinish(StudentViewModel student, StudentGroupViewModel group, OrderViewModel order, OrderStudentMoveType studentOrderType)
|
||||
{
|
||||
if (student == null || studentOrder == null)
|
||||
if (student == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
int year = DateTime.Now.Year;
|
||||
switch (studentOrder.OrderStudentMoveType)
|
||||
switch (studentOrderType)
|
||||
{
|
||||
// у студента не меняется год зачисления
|
||||
case OrderStudentMoveType.ПродлитьАкадем:
|
||||
@ -617,7 +595,6 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
|
||||
case OrderStudentMoveType.ОтчислитьПоСобственному:
|
||||
case OrderStudentMoveType.УбратьПоПереводу:
|
||||
student.EnrollmentYearId = null;
|
||||
UpdateStudent(student);
|
||||
return;
|
||||
// проблема с разными направлениями групп на разных курсах
|
||||
case OrderStudentMoveType.ПеревестиНаСтаршийКурс:
|
||||
@ -700,27 +677,6 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
|
||||
}
|
||||
|
||||
student.EnrollmentYearId = yearEnrollment.Id;
|
||||
UpdateStudent(student);
|
||||
}
|
||||
|
||||
private void UpdateStudent(StudentViewModel student)
|
||||
{
|
||||
if (student == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var updateStudent = _studentLogic.GetElement(new StudentGetBindingModel { Id = student.Id });
|
||||
if (updateStudent == null)
|
||||
{
|
||||
SaveErrors(_studentLogic.Errors, "Ошибка обновления данных студента", $"Не удалось найти данные студента {student.LastName} {student.FirstName} {student.Patronymic}");
|
||||
return;
|
||||
}
|
||||
updateStudent.EnrollmentYearId = student.EnrollmentYearId;
|
||||
updateStudent = _studentLogic.Update(Mapper.MapToClass<StudentViewModel, StudentSetBindingModel>(updateStudent, true));
|
||||
if (updateStudent == null)
|
||||
{
|
||||
SaveErrors(_studentLogic.Errors, "Ошибка обновления данных студента", $"Не удалось обновить данные студента {student?.LastName} {student?.FirstName} {student?.Patronymic}");
|
||||
}
|
||||
}
|
||||
|
||||
private void SaveErrors(List<(string Title, string Message)> errors, string title, string message)
|
||||
|
@ -1,5 +1,6 @@
|
||||
using CoreModels.Enums.Department;
|
||||
using CoreModels.ModelsDepartment;
|
||||
using DepartmentContract.ViewModels;
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using ToolsModule.ManagmentEntity;
|
||||
@ -39,5 +40,7 @@ namespace DepartmentContract.BindingModels
|
||||
public OrderStudentMoveType OrderStudentMoveType { get; set; }
|
||||
|
||||
public string Info { get; set; }
|
||||
|
||||
public StudentViewModel StudentModel { get; set; }
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user