DepartmentProject/DepartmentPortal/Department/DepartmentBusinessLogic/BusinessLogics/OrderStudentRecordBusinessLogic.cs

161 lines
7.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}