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

160 lines
7.2 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 CoreModels.Enums.Department;
using DepartmentBusinessLogic.BindingModels;
using DepartmentBusinessLogic.Interfaces;
using DepartmentBusinessLogic.ViewModels;
using ModuleTools.BusinessLogics;
using ModuleTools.Enums;
using SecurityBusinessLogic.BindingModels;
using SecurityBusinessLogic.BusinessLogics;
namespace DepartmentBusinessLogic.BusinessLogics
{
/// <summary>
/// Логика работы с записями приказов
/// </summary>
public class OrderStudentRecordBusinessLogic : GenericBusinessLogic<OrderStudentRecordGetBindingModel, OrderStudentRecordSetBindingModel, OrderStudentRecordListViewModel, OrderStudentRecordViewModel>
{
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;
}
}
}