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