161 lines
7.4 KiB
C#
161 lines
7.4 KiB
C#
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
|
||
{
|
||
/// <summary>
|
||
/// Логика работы с записями приказов
|
||
/// </summary>
|
||
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;
|
||
}
|
||
}
|
||
} |