using CoreModels.Enums.Department;
using DepartmentBusinessLogic.BindingModels;
using DepartmentBusinessLogic.Interfaces;
using DepartmentBusinessLogic.ViewModels;
using ToolsModule.BusinessLogics;
using ToolsModule.Enums;
using SecurityBusinessLogic.BindingModels;
using SecurityBusinessLogic.BusinessLogics;
namespace DepartmentBusinessLogic.BusinessLogics
{
///
/// Логика работы с записями приказов
///
public class OrderStudentRecordBusinessLogic : GenericBusinessLogic
{
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();
var userLogic = DependencyManager.Instance.Resolve();
var student = studentLogic.GetElement(new StudentGetBindingModel { Id = result.StudentId });
if (student == null)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка при получении студента", $"Не удалось получить студента"));
return null;
}
// изменять студента
var st = Mapper.MapToClass(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;
}
}
}