diff --git a/DepartmentPortal/Common/DatabaseCore/AbstractGenerticEntityService.cs b/DepartmentPortal/Common/DatabaseCore/AbstractGenerticEntityService.cs index 5e46b66..9c996b8 100644 --- a/DepartmentPortal/Common/DatabaseCore/AbstractGenerticEntityService.cs +++ b/DepartmentPortal/Common/DatabaseCore/AbstractGenerticEntityService.cs @@ -255,8 +255,19 @@ namespace DatabaseCore /// protected abstract IQueryable IncludingWhenReading(IQueryable query); + /// + /// Дополнительыне проверки, если требуется получать единичную запись но не по id + /// + /// + /// protected virtual bool AdditionalCheckForSingleGet(G model) => false; + /// + /// Получение единичной записи но не по id + /// + /// + /// + /// protected virtual T GetSingleRecord(IQueryable list, G model) => null; } } \ No newline at end of file diff --git a/DepartmentPortal/Department/DepartmentBusinessLogic/BusinessLogics/OrderSyncHistoryBusinessLogic.cs b/DepartmentPortal/Department/DepartmentBusinessLogic/BusinessLogics/OrderSyncHistoryBusinessLogic.cs index 388aa67..4bae380 100644 --- a/DepartmentPortal/Department/DepartmentBusinessLogic/BusinessLogics/OrderSyncHistoryBusinessLogic.cs +++ b/DepartmentPortal/Department/DepartmentBusinessLogic/BusinessLogics/OrderSyncHistoryBusinessLogic.cs @@ -289,7 +289,7 @@ namespace DepartmentBusinessLogic.BusinessLogics var syncOrders = JsonSerializer.Deserialize(response.Content.ReadAsStringAsync().Result); foreach (var syncOrder in syncOrders.StudentOrders) { - var orderType = GetOrderType(syncOrder.orderSubTypeName); + var orderType = GetOrderType(syncOrder.orderTypeName); // пропускаем приказы, которые нас не интересуют if (orderType == OrderType.Неопределено) @@ -335,6 +335,11 @@ namespace DepartmentBusinessLogic.BusinessLogics // если такой приказ по студенту уже есть, просто пропускаем if (studentOrder != null) { + await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel + { + OrderSyncHistoryId = history.Id, + Information = $"Нерспознанный приказ {syncOrder.orderTypeName} для студента {student}" + }); continue; } @@ -349,7 +354,7 @@ namespace DepartmentBusinessLogic.BusinessLogics { studentGroupToId = groups.FirstOrDefault(x => x.ToString() == syncOrder.groupNameAfter)?.Id; } - // если был переведенец к нам, то игнорируем приказы, не связанные с нашими группами + // игнорируем приказы, не связанные с нашими группами if (!studentGroupFromId.HasValue && !studentGroupToId.HasValue) { continue; @@ -361,66 +366,80 @@ namespace DepartmentBusinessLogic.BusinessLogics case "Перевод": if (syncOrder.orderSubTypeName == "Распределение по группам") { - orderStudentMoveType = OrderStudentMoveType.Распределение; + orderStudentMoveType = OrderStudentMoveType.Распределить; info = $"Распределение студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}"; } // внутренний перевод else if (studentGroupFromId.HasValue && studentGroupToId.HasValue) { - orderStudentMoveType = OrderStudentMoveType.ПереводВГруппу; + orderStudentMoveType = OrderStudentMoveType.ПеревестиНаДругоеНаправлениеКафедры; info = $"Перевод студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} в группу {groups.First(x => x.Id == studentGroupToId)}"; } else if (!studentGroupFromId.HasValue && studentGroupToId.HasValue) { - orderStudentMoveType = OrderStudentMoveType.ЗачислитьПоПереводу; - info = $"Зачисление переовдом студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}"; + orderStudentMoveType = OrderStudentMoveType.ПринятьПоПереводу; + info = $"Перевод студента {student} c группы {syncOrder.groupNameBefore} другой кафедры в группу {groups.First(x => x.Id == studentGroupToId)}"; } else if (studentGroupFromId.HasValue && !studentGroupToId.HasValue) { - orderStudentMoveType = OrderStudentMoveType.ОтчислитьВСвязиСПереводом; - info = $"Отчисление студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} в связи с переводом"; + orderStudentMoveType = OrderStudentMoveType.УбратьПоПереводу; + info = $"Перевод студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} на другую кафедру"; } break; case "Зачисление в вуз вне приемной кампании": - orderStudentMoveType = OrderStudentMoveType.Зачисление; - info = $"Зачисление студента {student}"; + orderStudentMoveType = OrderStudentMoveType.ЗачислитьПоПриказу; + info = $"Зачисление студента {student} по приказу"; + break; + case "Зачисление в вуз": + orderStudentMoveType = OrderStudentMoveType.ЗачислитьПоПриказу; + info = $"Зачисление студента {student} по приказу"; + break; + case "Перевод из другого вуза": + orderStudentMoveType = OrderStudentMoveType.ПринятьПоПереводусДругогоВуза; + info = $"Перевод студента {student} с другого вуза"; break; case "Перевод на следующий курс": - orderStudentMoveType = OrderStudentMoveType.ПереводНаКурс; + orderStudentMoveType = OrderStudentMoveType.ПеревестиНаСтаршийКурс; info = $"Перевод студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} на следующий курс в группу {groups.First(x => x.Id == studentGroupToId)}"; break; + //case "Завершение обучения": // уточнить приказ + // orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному; + // info = $"Отчисление студента {student} в связи с окончанием обучения"; + // break; case "Уход в академический отпуск": - orderStudentMoveType = OrderStudentMoveType.ВАкадем; + // дата + orderStudentMoveType = OrderStudentMoveType.ОтправитьВАкадем; info = $"Уход в АО студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)}"; break; case "Продление академического отпуска": - orderStudentMoveType = OrderStudentMoveType.ПродлАкадем; + orderStudentMoveType = OrderStudentMoveType.ПродлитьАкадем; info = $"Продление АО студента {student}"; break; case "Восстановление из академического отпуска": - orderStudentMoveType = OrderStudentMoveType.ИзАкадема; + orderStudentMoveType = OrderStudentMoveType.ВосстановитьИзАкадема; info = $"Выход из АО студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}"; break; - case "Восстановление": // уточнить приказ + //case "Отчисление по собственному": // уточнить приказ + // orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному; + // info = $"Отчисление студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} по собственному желанию"; + // break; + //case "Отчисление за неуспеваемость": // уточнить приказ + // orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНеуспевамость; + // info = $"Отчисление студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} за неуспеваемость"; + // break; + //case "Отчисление по невыходу из академа": // уточнить приказ + // orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНевыходСАкадема; + // info = $"Отчисление студента {student} по невыходу из академа"; + // break; + case "Отчисление": + { + + } + break; + case "Восстановление": orderStudentMoveType = OrderStudentMoveType.Восстановить; info = $"Восстановление отчисленного студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}"; break; - case "Отчисление по собственному": // уточнить приказ - orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному; - info = $"Отчисление студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} по собственному желанию"; - break; - case "Отчисление за неуспеваемость": // уточнить приказ - orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному; - info = $"Отчисление студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} за неуспеваемость"; - break; - case "Отчисление по невыходу из академа": // уточнить приказ - orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному; - info = $"Отчисление студента {student} по невыходу из академа"; - break; - case "Хавершение обучения": // уточнить приказ - orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному; - info = $"Отчисление студента {student} в связи с окончанием обучения"; - break; } if (orderStudentMoveType == OrderStudentMoveType.Неопределено) @@ -474,8 +493,9 @@ namespace DepartmentBusinessLogic.BusinessLogics }); } - if ((orderStudentMoveType == OrderStudentMoveType.Зачисление || orderStudentMoveType == OrderStudentMoveType.ЗачислитьПоПереводу - || orderStudentMoveType == OrderStudentMoveType.ПереводВГруппу) && student.StudentState != StudentState.Учится) + if ((orderStudentMoveType == OrderStudentMoveType.ЗачислитьПоПриказу || orderStudentMoveType == OrderStudentMoveType.ПринятьПоПереводу + || orderStudentMoveType == OrderStudentMoveType.ПринятьПоПереводусДругогоВуза || orderStudentMoveType == OrderStudentMoveType.ПеревестиНаДругоеНаправлениеКафедры) + && student.StudentState != StudentState.Учится) { st.StudentState = StudentState.Учится; student = await _studentLogic.UpdateAsync(st); @@ -497,7 +517,7 @@ namespace DepartmentBusinessLogic.BusinessLogics }); } - if ((orderStudentMoveType == OrderStudentMoveType.ВАкадем || orderStudentMoveType == OrderStudentMoveType.ПродлАкадем) + if ((orderStudentMoveType == OrderStudentMoveType.ОтправитьВАкадем || orderStudentMoveType == OrderStudentMoveType.ПродлитьАкадем) && student.StudentState != StudentState.Академ) { st.StudentState = StudentState.Академ; @@ -520,7 +540,7 @@ namespace DepartmentBusinessLogic.BusinessLogics }); } - if (orderStudentMoveType == OrderStudentMoveType.ИзАкадема && student.StudentState != StudentState.Учится) + if (orderStudentMoveType == OrderStudentMoveType.ВосстановитьИзАкадема && student.StudentState != StudentState.Учится) { st.StudentState = StudentState.Учится; student = await _studentLogic.UpdateAsync(st); @@ -612,6 +632,28 @@ namespace DepartmentBusinessLogic.BusinessLogics }); } + if (orderStudentMoveType == OrderStudentMoveType.УбратьПоПереводу && student.StudentState != StudentState.Ушел) + { + st.StudentState = StudentState.Ушел; + student = await _studentLogic.UpdateAsync(st); + if (student == null) + { + var errors = _studentLogic.Errors; + errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}")); + await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel + { + OrderSyncHistoryId = history.Id, + Information = string.Join(Environment.NewLine, errors.Select(x => x.Message)) + }); + continue; + } + await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel + { + OrderSyncHistoryId = history.Id, + Information = $"У студента {student} сменился статус на {StudentState.Ушел}" + }); + } + await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel { OrderSyncHistoryId = history.Id, @@ -631,9 +673,17 @@ namespace DepartmentBusinessLogic.BusinessLogics private static OrderType GetOrderType(string orderTitle) => orderTitle switch { + "Зачисление в вуз вне приемной кампании" => OrderType.ЗачислениеСтудентов, "Зачисление в вуз" => OrderType.ЗачислениеСтудентов, - "Распределение по группам" => OrderType.РаспределениеСтудентов, + "Перевод из другого вуза" => OrderType.ЗачислениеСтудентов, + "Перевод" => OrderType.Перевод, "Перевод на следующий курс" => OrderType.ДвижениеСтудентов, + "Завершение обучения" => OrderType.Отчисление, + "Уход в академический отпуск" => OrderType.ДвижениеСтудентов, + "Продление академического отпуска" => OrderType.ДвижениеСтудентов, + "Восстановление из академического отпуска" => OrderType.ДвижениеСтудентов, + "Отчисление" => OrderType.Отчисление, + "Восстановление" => OrderType.Перевод, _ => OrderType.Неопределено, }; } diff --git a/DepartmentPortal/Department/DepartmentBusinessLogic/Enums/OrderStudentMoveType.cs b/DepartmentPortal/Department/DepartmentBusinessLogic/Enums/OrderStudentMoveType.cs index 58d4b59..8ea1377 100644 --- a/DepartmentPortal/Department/DepartmentBusinessLogic/Enums/OrderStudentMoveType.cs +++ b/DepartmentPortal/Department/DepartmentBusinessLogic/Enums/OrderStudentMoveType.cs @@ -5,38 +5,86 @@ /// public enum OrderStudentMoveType { - Неопределено = -1, + Неопределено = -1, - Зачисление = 0, + /// + /// Студент зачисляется сразу на направление кафедры + /// + ЗачислитьПоПриказу = 0, - Распределение = 1, + /// + /// Распределение студента в группу + /// + Распределить = 1, - ПереводНаКурс = 3, + /// + /// Перевод на старший курс + /// + ПеревестиНаСтаршийКурс = 2, - ПереводВГруппу = 4, + /// + /// Отчисление студента в связи с завершением обучения + /// + ОтчислитьПоЗавершению = 3, - Движение = 2, + /// + /// Студент переводится с другой кафедры на нашу + /// + ПринятьПоПереводу = 5, - ИзАкадема = 5, + /// + /// Студент переводится с другого вуза на нашу кафедру + /// + ПринятьПоПереводусДругогоВуза = 6, - ВАкадем = 6, + /// + /// Переход с одного направления кафедоры на другое + /// + ПеревестиНаДругоеНаправлениеКафедры = 7, - ПродлАкадем = 13, + /// + /// Студент переводится с нашей кафедры на другую + /// + УбратьПоПереводу = 8, - ОтчислитьЗаНеуспевамость = 7, + /// + /// Уход в акакдем студента + /// + ОтправитьВАкадем = 10, - ОтчислитьВСвязиСПереводом = 8, + /// + /// Продление академа студента + /// + ПродлитьАкадем = 11, - ОтчислитьПоСобственному = 9, + /// + /// Выход из академа студента + /// + ВосстановитьИзАкадема = 12, - ЗачислитьПоПереводу = 10, + /// + /// Отчисление студента в связи с не выходом из академа + /// + ОтчислитьЗаНевыходСАкадема = 13, - Восстановить = 11, + /// + /// Уход студента в другой ВУЗ + /// + ОтчислитьВСвязиСПереводом = 20, - ОтчислитьПоЗавершению = 12, + /// + /// Отчисление студента за долги + /// + ОтчислитьЗаНеуспевамость = 21, - ОтчислитьЗаНевыходСАкадема = 14, + /// + /// Отчисление студента по собственному + /// + ОтчислитьПоСобственному = 22, - Перевод = 15 + /// + /// Восстановление студента после отчисления по собственному + /// + Восстановить = 23 } } \ No newline at end of file diff --git a/DepartmentPortal/Department/DepartmentBusinessLogic/Enums/OrderType.cs b/DepartmentPortal/Department/DepartmentBusinessLogic/Enums/OrderType.cs index c928369..fee74be 100644 --- a/DepartmentPortal/Department/DepartmentBusinessLogic/Enums/OrderType.cs +++ b/DepartmentPortal/Department/DepartmentBusinessLogic/Enums/OrderType.cs @@ -12,5 +12,9 @@ РаспределениеСтудентов = 1, ДвижениеСтудентов = 2, + + Перевод = 3, + + Отчисление = 4 } } \ No newline at end of file diff --git a/DepartmentPortal/Department/DepartmentBusinessLogic/Enums/StudentState.cs b/DepartmentPortal/Department/DepartmentBusinessLogic/Enums/StudentState.cs index 72a9501..18ef8ab 100644 --- a/DepartmentPortal/Department/DepartmentBusinessLogic/Enums/StudentState.cs +++ b/DepartmentPortal/Department/DepartmentBusinessLogic/Enums/StudentState.cs @@ -5,6 +5,8 @@ /// public enum StudentState { + Неопределен = -1, + Учится = 0, Академ = 1, @@ -13,6 +15,6 @@ Отчислен = 3, - Неопределен = -1 + Ушел = 4 } } \ No newline at end of file