using CoreModels.Enums.Department; using DepartmentBusinessLogic.BindingModels; using DepartmentBusinessLogic.Enums; using DepartmentBusinessLogic.Interfaces; using DepartmentBusinessLogic.ViewModels; using ModuleTools.BusinessLogics; using ModuleTools.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; } } }