2022-03-18 22:08:29 +04:00
using CoreModels.Enums.Department ;
2021-04-27 15:14:35 +04:00
using DepartmentBusinessLogic.HelperModels ;
2022-03-19 22:48:13 +04:00
using DepartmentContract.BindingModels ;
using DepartmentContract.Logics.IGenericEntityLogic ;
using DepartmentContract.Services.IGenericEntityService ;
using DepartmentContract.ViewModels ;
using SecurityContract.BindingModels ;
using SecurityContract.Logics.IGenericEntityLogic ;
using SecurityContract.ViewModels ;
2021-04-27 15:14:35 +04:00
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Net.Http ;
using System.Net.Http.Headers ;
using System.Text ;
using System.Text.Json ;
2022-03-18 10:22:34 +04:00
using System.Threading.Tasks ;
2022-03-20 10:10:44 +04:00
using ToolsModule.ManagmentDependency ;
using ToolsModule.ManagmentEntity ;
using ToolsModule.ManagmentExtension ;
2022-03-29 13:33:32 +04:00
using ToolsModule.ManagmentMapping ;
2022-03-20 10:10:44 +04:00
using ToolsModule.ManagmentSecurity ;
2021-04-27 15:14:35 +04:00
2022-03-19 22:48:13 +04:00
namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
2021-04-27 15:14:35 +04:00
{
2022-03-15 22:02:13 +04:00
/// <summary>
/// Логика работы с историями синхронизации приказов
/// </summary>
2022-03-19 22:48:13 +04:00
public class OrderSyncHistoryBusinessLogic : GenericBusinessLogic < OrderSyncHistoryGetBindingModel , OrderSyncHistorySetBindingModel , OrderSyncHistoryListViewModel , OrderSyncHistoryViewModel > , IOrderSyncHistoryLogic
2022-03-18 10:22:34 +04:00
{
2022-03-19 22:48:13 +04:00
private IOrderSyncHistoryRecordLogic _recordLogic ;
2022-03-18 10:22:34 +04:00
2022-03-19 22:48:13 +04:00
private IEnviromentSettingLogic _enviromentSettingLogic ;
2022-03-18 10:22:34 +04:00
2022-03-19 22:48:13 +04:00
private IStudentGroupLogic _groupsLogic ;
2022-03-18 10:22:34 +04:00
2022-03-19 22:48:13 +04:00
private IStudentLogic _studentLogic ;
2022-03-18 10:22:34 +04:00
2022-03-19 22:48:13 +04:00
private IUserLogic _userLogic ;
2022-03-18 10:22:34 +04:00
2022-03-19 22:48:13 +04:00
private IUserRoleLogic _userRoleLogic ;
2022-03-18 20:09:15 +04:00
2022-03-19 22:48:13 +04:00
private IRoleLogic _roleLogic ;
2022-03-18 20:09:15 +04:00
2022-03-19 22:48:13 +04:00
private IOrderLogic _orderLogic ;
2022-03-18 10:22:34 +04:00
2022-03-19 22:48:13 +04:00
private IOrderStudentRecordLogic _orderStudentRecordLogic ;
2022-03-18 10:22:34 +04:00
2022-03-29 13:33:32 +04:00
private OrderSyncHistoryViewModel _history ;
2022-03-18 10:22:34 +04:00
public OrderSyncHistoryBusinessLogic ( IOrderSyncHistoryService service ) : base ( service , "Синхронизация Приказов" , AccessOperation . С и н х р о н и з а ц и я П р и к а з о в ) { }
public async Task < bool > SyncOrders ( )
{
2022-03-18 20:09:15 +04:00
InitLogics ( ) ;
2022-03-29 13:33:32 +04:00
if ( ! CreateHistory ( ) )
2022-03-18 10:22:34 +04:00
{
return false ;
}
2022-03-29 13:33:32 +04:00
var address = GetAddress ( ) ;
2022-03-19 11:53:10 +04:00
if ( address = = null )
2022-03-18 10:22:34 +04:00
{
return false ;
}
2022-03-29 13:33:32 +04:00
var client = GetClinet ( address ) ;
2022-03-18 20:09:15 +04:00
if ( client = = null )
2022-03-18 10:22:34 +04:00
{
return false ;
}
// получение списка студентов
2022-03-29 13:33:32 +04:00
var response = await client . GetAsync ( $"{address.Value}/univer/hs/Ulstu_StudentsInfo/v1/GetCurrentStudentsOfDepartment" ) ;
2022-03-18 10:22:34 +04:00
if ( ! response . IsSuccessStatusCode )
{
2022-03-29 13:33:32 +04:00
SaveLog ( "Н е удалось получить список студентов с сервера" ) ;
2022-03-18 10:22:34 +04:00
return false ;
}
var studentFromServer = JsonSerializer . Deserialize < StudentListSyncModel > ( await response . Content . ReadAsStringAsync ( ) ) ;
2022-03-29 13:33:32 +04:00
if ( studentFromServer = = null | | studentFromServer . CurrentStudentsList = = null )
{
SaveLog ( "Н е удалось распознать список приказов по студенту" ) ;
return false ;
}
2022-03-18 10:22:34 +04:00
if ( studentFromServer . CurrentStudentsList . Count = = 0 )
{
2022-03-29 13:33:32 +04:00
SaveLog ( "Полученный список студентов пустой" ) ;
return false ;
2022-03-18 10:22:34 +04:00
}
var groups = _groupsLogic . GetList ( new StudentGroupGetBindingModel ( ) ) ;
if ( groups = = null | | groups . List = = null )
{
2022-03-29 13:33:32 +04:00
SaveErrors ( _groupsLogic . Errors , "Ошибка получения данных" , "Н е удалось получить список групп с базы" ) ;
2022-03-18 10:22:34 +04:00
return false ;
}
var students = _studentLogic . GetList ( new StudentGetBindingModel ( ) ) ;
if ( students = = null | | students . List = = null )
{
2022-03-29 13:33:32 +04:00
SaveErrors ( _studentLogic . Errors , "Ошибка получения данных" , "Н е удалось получить список студентов с базы" ) ;
2022-03-18 10:22:34 +04:00
return false ;
}
foreach ( var student in students . List )
{
var studentSync = studentFromServer . CurrentStudentsList . FirstOrDefault ( x = > x . recordBookName = = student . NumberOfBook ) ;
// студент не найден, значит он ушел с кафедры, выясняем почему
if ( studentSync = = null )
{
2022-03-29 13:33:32 +04:00
await SyncStudentOrders ( student , groups . List , client , address . Value ) ;
2022-03-18 10:22:34 +04:00
}
// не совпадение групп
else if ( student . StudentGroupName ! = studentSync . groupName )
{
2022-03-29 13:33:32 +04:00
await SyncStudentOrders ( student , groups . List , client , address . Value ) ;
2022-03-18 10:22:34 +04:00
}
studentFromServer . CurrentStudentsList . Remove ( studentSync ) ;
}
// новые студенты и восстановленцы
foreach ( var student in studentFromServer . CurrentStudentsList )
{
2022-04-28 11:35:15 +04:00
var deletedStudent = _studentLogic . GetElement ( new StudentGetBindingModel { NumberOfBook = student . recordBookName , IgnoreDeleted = true } ) ;
2022-03-29 13:33:32 +04:00
if ( deletedStudent ! = null )
2022-03-18 10:22:34 +04:00
{
2022-03-29 13:33:32 +04:00
await SyncStudentOrders ( deletedStudent , groups . List , client , address . Value ) ;
2022-03-18 20:09:15 +04:00
continue ;
2022-03-18 10:22:34 +04:00
}
2022-03-29 13:33:32 +04:00
var newStudent = CreateNewStudent ( student ) ;
if ( newStudent ! = null )
2022-03-18 10:22:34 +04:00
{
2022-03-29 13:33:32 +04:00
SaveLog ( $"Добавлен студент {newStudent}" ) ;
await SyncStudentOrders ( newStudent , groups . List , client , address . Value ) ;
2022-03-18 10:22:34 +04:00
}
}
return true ;
}
2022-03-19 11:53:10 +04:00
public async Task < bool > SyncStudentOrders ( Guid studentId )
{
InitLogics ( ) ;
2022-03-29 13:33:32 +04:00
if ( ! CreateHistory ( ) )
2022-03-19 11:53:10 +04:00
{
return false ;
}
2022-03-29 13:33:32 +04:00
SaveLog ( "Синхронизация приказов по студенту" ) ;
2022-03-19 11:53:10 +04:00
2022-03-29 13:33:32 +04:00
var address = GetAddress ( ) ;
2022-03-19 11:53:10 +04:00
if ( address = = null )
{
return false ;
}
2022-03-29 13:33:32 +04:00
var client = GetClinet ( address ) ;
2022-03-19 11:53:10 +04:00
if ( client = = null )
{
return false ;
}
var groups = _groupsLogic . GetList ( new StudentGroupGetBindingModel ( ) ) ;
if ( groups = = null | | groups . List = = null )
{
2022-03-29 13:33:32 +04:00
SaveErrors ( _groupsLogic . Errors , "Ошибка получения данных" , "Н е удалось получить список групп с базы" ) ;
2022-03-19 11:53:10 +04:00
return false ;
}
var student = _studentLogic . GetElement ( new StudentGetBindingModel { Id = studentId } ) ;
if ( student = = null )
{
2022-03-29 13:33:32 +04:00
SaveErrors ( _studentLogic . Errors , "Ошибка получения данных" , "Н е удалось получить студента с базы" ) ;
2022-03-19 11:53:10 +04:00
return false ;
}
2022-03-29 13:33:32 +04:00
await SyncStudentOrders ( student , groups . List , client , address . Value ) ;
2022-03-19 11:53:10 +04:00
return true ;
}
2022-03-18 20:09:15 +04:00
private void InitLogics ( )
{
2022-03-19 22:48:13 +04:00
_recordLogic = DependencyManager . Instance . Resolve < IOrderSyncHistoryRecordLogic > ( ) ;
_enviromentSettingLogic = DependencyManager . Instance . Resolve < IEnviromentSettingLogic > ( ) ;
_groupsLogic = DependencyManager . Instance . Resolve < IStudentGroupLogic > ( ) ;
_studentLogic = DependencyManager . Instance . Resolve < IStudentLogic > ( ) ;
_orderLogic = DependencyManager . Instance . Resolve < IOrderLogic > ( ) ;
_orderStudentRecordLogic = DependencyManager . Instance . Resolve < IOrderStudentRecordLogic > ( ) ;
_userLogic = DependencyManager . Instance . Resolve < IUserLogic > ( ) ;
_userRoleLogic = DependencyManager . Instance . Resolve < IUserRoleLogic > ( ) ;
_roleLogic = DependencyManager . Instance . Resolve < IRoleLogic > ( ) ;
2022-03-18 20:09:15 +04:00
}
2022-03-29 13:33:32 +04:00
private bool CreateHistory ( )
{
_history = Create ( new OrderSyncHistorySetBindingModel { SyncDate = DateTime . Now } ) ;
if ( _history = = null )
{
Errors . Add ( ( "Ошибка создание истории" , "Н е удалось создать историю" ) ) ;
return false ;
}
return true ;
}
private EnviromentSettingViewModel GetAddress ( )
2022-03-19 11:53:10 +04:00
{
var address = _enviromentSettingLogic . GetList ( new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderIpAddress" } ) ? . List ? . FirstOrDefault ( ) ;
if ( address = = null | | address . Value . IsEmpty ( ) )
{
2022-03-29 13:33:32 +04:00
SaveErrors ( _enviromentSettingLogic . Errors , "Ошибка получения данных" , "Н е удалось получить адрес сервера для получения приказов по студентам" ) ;
2022-03-19 11:53:10 +04:00
return null ;
}
return address ;
}
2022-03-29 13:33:32 +04:00
private HttpClient GetClinet ( EnviromentSettingViewModel address )
{
var username = _enviromentSettingLogic . GetList ( new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderUserName" } ) ? . List ? . FirstOrDefault ( ) ;
if ( username = = null | | username . Value . IsEmpty ( ) )
{
SaveErrors ( _enviromentSettingLogic . Errors , "Ошибка получения данных" , "Н е удалось получить имя пользователя для получения приказов по студентам" ) ;
return null ;
}
var password = _enviromentSettingLogic . GetList ( new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderPassword" } ) ? . List ? . FirstOrDefault ( ) ;
if ( password = = null | | password . Value . IsEmpty ( ) )
{
SaveErrors ( _enviromentSettingLogic . Errors , "Ошибка получения данных" , "Н е удалось получить пароль для получения приказов по студентам" ) ;
return null ;
}
var client = new HttpClient
{
BaseAddress = new Uri ( address . Value )
} ;
client . DefaultRequestHeaders . Accept . Clear ( ) ;
client . DefaultRequestHeaders . Accept . Add ( new MediaTypeWithQualityHeaderValue ( "application/json" ) ) ;
client . DefaultRequestHeaders . Authorization = new AuthenticationHeaderValue ( "Basic" , Convert . ToBase64String ( Encoding . UTF8 . GetBytes ( $"{username.Value}:{password.Value}" ) ) ) ;
return client ;
}
private UserViewModel WorkWithUser ( StudentSyncModel student )
{
var userName = $"{student.lastName}{(student.firstName.IsNotEmpty() ? $" { student . firstName [ 0 ] } . " : string.Empty)}{(student.patronymicName.IsNotEmpty() ? $" { student . patronymicName [ 0 ] } . " : string.Empty)}" ;
var user = _userLogic . GetOrCreateUser ( new UserGetBindingModel
{
Login = student . recordBookName
} , userName ) ;
if ( user = = null )
{
if ( _userLogic . Errors . Count > 0 )
{
SaveErrors ( _userLogic . Errors , "Ошибка получения пользователя под студента" , $"Н е удалось получить пользователя под студента {student.lastName} {student.firstName} {student.patronymicName}" ) ;
return null ;
}
}
var role = _roleLogic . GetElement ( new RoleGetBindingModel { RoleName = "Студент" } ) ;
if ( role = = null )
{
if ( _roleLogic . Errors . Count > 0 )
{
SaveErrors ( _roleLogic . Errors , "Ошибка получения роли студента" , $"Н е удалось получить роль под студента {student.lastName} {student.firstName} {student.patronymicName}" ) ;
return null ;
}
}
var link = _userRoleLogic . GetElement ( new UserRoleGetBindingModel { RoleId = role . Id , UserId = user . Id } ) ;
if ( link = = null )
{
var manager = DependencyManager . Instance . Resolve < ISecurityManager > ( ) ;
_userRoleLogic . Create ( new UserRoleSetBindingModel { RoleId = role . Id , UserId = user . Id , UserIdForAccess = manager ? . User } ) ;
if ( _userRoleLogic . Errors . Count > 0 )
{
SaveErrors ( _userRoleLogic . Errors , "Ошибка создания привязки студента к роли" , $"Н е удалось привязать студента {student.lastName} {student.firstName} {student.patronymicName} к роли" ) ;
return null ;
}
}
return user ;
}
private StudentViewModel CreateNewStudent ( StudentSyncModel student )
{
var user = WorkWithUser ( student ) ;
if ( user = = null )
{
return null ;
}
var newStudent = _studentLogic . Create ( new StudentSetBindingModel
{
Iduniv = student . iduniv ,
NumberOfBook = student . recordBookName ,
UserId = user . Id ,
FirstName = student . firstName ,
LastName = student . lastName ,
Patronymic = student . patronymicName ,
StudentState = StudentState . Н е о п р е д е л е н ,
Description = string . Empty
} ) ;
if ( newStudent = = null )
{
SaveErrors ( _studentLogic . Errors , "Ошибка добавления студента" , $"Н е удалось добавить студента {student.lastName} {student.firstName} {student.patronymicName}" ) ;
return null ;
}
return newStudent ;
}
2022-03-18 10:22:34 +04:00
/// <summary>
/// Синхронизация приказов по студенту
/// </summary>
/// <param name="history"></param>
/// <param name="student"></param>
/// <param name="groups"></param>
/// <param name="client"></param>
/// <param name="address"></param>
/// <returns></returns>
2022-03-29 13:33:32 +04:00
private async Task SyncStudentOrders ( StudentViewModel student , List < StudentGroupViewModel > groups , HttpClient client , string address )
2022-03-18 10:22:34 +04:00
{
var response = await client . GetAsync ( $"{address}/univer/hs/Ulstu_StudentsInfo/v1/GetStudentOrdersByIdAndRecordBook?iduniv={student.Iduniv}&recordBookName={student.NumberOfBook}&allOrders=sppd" ) ;
if ( ! response . IsSuccessStatusCode )
{
2022-03-29 13:33:32 +04:00
SaveLog ( "Н е удалось получить список приказов по студенту" ) ;
2022-03-18 10:22:34 +04:00
return ;
}
var syncOrders = JsonSerializer . Deserialize < StudentOrderListSyncModel > ( await response . Content . ReadAsStringAsync ( ) ) ;
2022-03-29 13:33:32 +04:00
if ( syncOrders = = null | | syncOrders . StudentOrders = = null )
{
SaveLog ( "Н е удалось распознать список приказов по студенту" ) ;
return ;
}
2022-03-18 10:22:34 +04:00
foreach ( var syncOrder in syncOrders . StudentOrders )
{
2022-03-18 20:09:15 +04:00
if ( syncOrder . orderTypeName = = "Утверждение тем курсовых работ" | |
syncOrder . orderTypeName = = "Утверждение тем В К Р " | |
syncOrder . orderTypeName = = "Назначение стипендии" )
{
continue ;
}
2022-03-18 10:22:34 +04:00
if ( syncOrder . markOfApprove . ToLower ( ) ! = "true" )
{
2022-03-29 13:33:32 +04:00
SaveLog ( $"Приказ {syncOrder.clericNumber} от {syncOrder.clericDate} ({syncOrder.orderTypeName}) по студенту {student} не утврежден" ) ;
2022-03-18 10:22:34 +04:00
continue ;
}
if ( syncOrder . clericNumber . IsEmpty ( ) )
{
2022-03-29 13:33:32 +04:00
SaveLog ( $"Приказ без номера от {syncOrder.clericDate} ({student})" ) ;
2022-03-18 10:22:34 +04:00
continue ;
}
if ( syncOrder . clericDate . IsEmpty ( ) )
{
2022-03-29 13:33:32 +04:00
SaveLog ( $"Приказ {syncOrder.clericNumber} - неизвестная дата ({student})" ) ;
2022-03-18 10:22:34 +04:00
continue ;
}
var orderType = GetOrderType ( syncOrder . orderTypeName ) ;
// пропускаем приказы, которые нас не интересуют
2022-03-18 20:09:15 +04:00
if ( orderType = = OrderType . И г н о р и р о в а т ь )
{
continue ;
}
2022-03-18 10:22:34 +04:00
if ( orderType = = OrderType . Н е о п р е д е л е н о )
{
2022-03-29 13:33:32 +04:00
if ( syncOrder . orderTypeName ! = "Корректировка" & & syncOrder . orderTypeName ! = "Смена ФИО" )
{
SaveLog ( $"Приказ {syncOrder.clericNumber} неопределенного типа {syncOrder.orderTypeName}" ) ;
}
2022-03-18 10:22:34 +04:00
continue ;
}
// пытаемся найти приказ
var order = _orderLogic . GetElement ( new OrderGetBindingModel
{
2022-03-29 13:33:32 +04:00
OrderNumber = syncOrder . clericNumber ,
OrderDate = Convert . ToDateTime ( syncOrder . clericDate ) . Date ,
OrderType = orderType
2022-03-18 10:22:34 +04:00
} ) ;
if ( order = = null )
{
// если не нашли - пытаемся создать
order = _orderLogic . Create ( new OrderSetBindingModel
{
OrderNumber = syncOrder . clericNumber ,
2022-03-29 13:33:32 +04:00
OrderDate = Convert . ToDateTime ( syncOrder . clericDate ) . Date ,
2022-03-18 10:22:34 +04:00
OrderType = orderType
} ) ;
if ( order = = null )
{
2022-03-29 13:33:32 +04:00
SaveErrors ( _orderLogic . Errors , "Ошибка добавления приказа" , $"Н е удалось добавить приказ {syncOrder.clericNumber} {syncOrder.clericDate}" ) ;
2022-03-18 10:22:34 +04:00
continue ;
}
}
2022-03-29 13:33:32 +04:00
StudentGroupViewModel studentGroupFrom = null ;
StudentGroupViewModel studentGroupTo = null ;
2022-03-18 10:22:34 +04:00
if ( syncOrder . groupNameBefore . IsNotEmpty ( ) )
{
2022-03-29 13:33:32 +04:00
syncOrder . groupNameBefore = syncOrder . groupNameBefore . Replace ( "пбд" , "бд" ) ;
studentGroupFrom = groups . FirstOrDefault ( x = > x . GroupName = = syncOrder . groupNameBefore | | x . ToString ( ) = = syncOrder . groupNameBefore ) ;
2022-03-18 10:22:34 +04:00
}
if ( syncOrder . groupNameAfter . IsNotEmpty ( ) )
{
2022-03-29 13:33:32 +04:00
syncOrder . groupNameAfter = syncOrder . groupNameAfter . Replace ( "пбд" , "бд" ) ;
studentGroupTo = groups . FirstOrDefault ( x = > x . GroupName = = syncOrder . groupNameAfter | | x . ToString ( ) = = syncOrder . groupNameAfter ) ;
2022-03-18 10:22:34 +04:00
}
// игнорируем приказы, не связанные с нашими группами
2022-03-29 13:33:32 +04:00
if ( studentGroupFrom = = null & & syncOrder . groupNameBefore . IsNotEmpty ( ) & & studentGroupTo = = null & & syncOrder . groupNameAfter . IsNotEmpty ( ) )
2022-03-18 10:22:34 +04:00
{
continue ;
}
2022-03-29 13:33:32 +04:00
var orderStudentMoveType = GetOrderStudentMoveType ( student , syncOrder , studentGroupFrom , studentGroupTo , out string info ) ;
2022-03-18 10:22:34 +04:00
if ( orderStudentMoveType = = OrderStudentMoveType . Н е о п р е д е л е н о )
{
2022-03-29 13:33:32 +04:00
SaveLog ( $"Неизветсный приказ {syncOrder.orderTypeName} ({syncOrder.reason}) по студенту {student}" ) ;
2022-03-18 10:22:34 +04:00
continue ;
}
// ищем в приказе запись по студенту
2022-03-18 20:09:15 +04:00
var exsistStudentOrder = _orderStudentRecordLogic . GetElement ( new OrderStudentRecordGetBindingModel
2022-03-18 10:22:34 +04:00
{
OrderId = order . Id ,
StudentId = student . Id ,
OrderStudentMoveType = orderStudentMoveType
} ) ;
// если такой приказ по студенту уже есть, просто пропускаем
2022-03-18 20:09:15 +04:00
if ( exsistStudentOrder ! = null )
2022-03-18 10:22:34 +04:00
{
continue ;
}
2022-04-28 11:35:15 +04:00
SetYearFinish ( student , studentGroupTo , order , orderStudentMoveType ) ;
2022-03-18 10:22:34 +04:00
// создаем, если не нашли
2022-03-18 20:09:15 +04:00
var studentOrder = _orderStudentRecordLogic . Create ( new OrderStudentRecordSetBindingModel
2022-03-18 10:22:34 +04:00
{
OrderId = order . Id ,
StudentId = student . Id ,
Info = info ,
OrderStudentMoveType = orderStudentMoveType ,
2022-03-29 13:33:32 +04:00
StudentGroupFromId = studentGroupFrom ? . Id ,
2022-04-28 11:35:15 +04:00
StudentGroupToId = studentGroupTo ? . Id ,
StudentModel = student
2022-03-18 10:22:34 +04:00
} ) ;
if ( studentOrder = = null )
{
2022-03-29 13:33:32 +04:00
SaveErrors ( _orderStudentRecordLogic . Errors , "Ошибка добавления записи приказа по студенту" , $"Н е удалось добавить запись приказа {syncOrder.orderSubTypeName} по студенту {student}" ) ;
2022-03-18 10:22:34 +04:00
continue ;
}
2022-03-29 13:33:32 +04:00
SaveLog ( $"Добавили запись к приказу {order.OrderNumber} по студенту {student} с формулировкой {info}" ) ;
2022-03-18 10:22:34 +04:00
if ( orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь В С в я з и С П е р е в о д о м | |
orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь З а Н е в ы х о д С А к а д е м а | |
orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь З а Н е у с п е в а м о с т ь | |
orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь П о З а в е р ш е н и ю | |
orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь П о С о б с т в е н н о м у )
{
return ;
}
}
}
2022-03-29 13:33:32 +04:00
private static OrderType GetOrderType ( string orderTitle ) = > orderTitle switch
2022-03-18 20:09:15 +04:00
{
2022-03-29 13:33:32 +04:00
"Зачисление в вуз вне приемной кампании" = > OrderType . З а ч и с л е н и е С т у д е н т о в ,
"Зачисление в вуз" = > OrderType . З а ч и с л е н и е С т у д е н т о в ,
"Перевод из другого вуза" = > OrderType . З а ч и с л е н и е С т у д е н т о в ,
"Перевод" = > OrderType . П е р е в о д ,
"Перевод на следующий курс" = > OrderType . Д в и ж е н и е С т у д е н т о в ,
"Завершение обучения" = > OrderType . О т ч и с л е н и е ,
"Уход в академический отпуск" = > OrderType . Д в и ж е н и е С т у д е н т о в ,
"Продление академического отпуска" = > OrderType . Д в и ж е н и е С т у д е н т о в ,
"Восстановление из академического отпуска" = > OrderType . Д в и ж е н и е С т у д е н т о в ,
"Отчисление" = > OrderType . О т ч и с л е н и е ,
"Восстановление" = > OrderType . П е р е в о д ,
"Выпуск" = > OrderType . Д в и ж е н и е С т у д е н т о в ,
"Утверждение тем В К Р " = > OrderType . И г н о р и р о в а т ь ,
_ = > OrderType . Н е о п р е д е л е н о ,
} ;
2022-03-18 20:09:15 +04:00
2022-03-29 13:33:32 +04:00
private static OrderStudentMoveType GetOrderStudentMoveType ( StudentViewModel student , StudentOrderSyncModel syncOrder , StudentGroupViewModel studentGroupFrom ,
StudentGroupViewModel studentGroupTo , out string info )
{
switch ( syncOrder . orderTypeName )
2022-03-18 20:09:15 +04:00
{
2022-03-29 13:33:32 +04:00
case "Перевод" :
if ( syncOrder . orderSubTypeName = = "Распределение по группам" )
{
info = $"Распределение студента {student} в группу {studentGroupTo}" ;
return OrderStudentMoveType . Р а с п р е д е л и т ь ;
}
if ( studentGroupFrom ! = null & & studentGroupTo ! = null )
{
info = $"Перевод студента {student} из группы {studentGroupFrom} в группу {studentGroupTo}" ;
return OrderStudentMoveType . П е р е в е с т и Н а Д р у г о е Н а п р а в л е н и е К а ф е д р ы ;
}
if ( studentGroupFrom = = null & & studentGroupTo ! = null )
{
info = $"Перевод студента {student} c группы {syncOrder.groupNameBefore} другой кафедры в группу {studentGroupTo}" ;
return OrderStudentMoveType . П р и н я т ь П о П е р е в о д у ;
}
if ( studentGroupFrom ! = null & & studentGroupTo = = null )
{
info = $"Перевод студента {student} из группы {studentGroupFrom} на другую кафедру в группу {syncOrder.groupNameAfter}" ;
return OrderStudentMoveType . У б р а т ь П о П е р е в о д у ;
}
if ( syncOrder . reason = = "на другой факультет" )
{
info = $"Отчисление студента {student} из группы {studentGroupFrom} в связи с переводом" ;
return OrderStudentMoveType . О т ч и с л и т ь В С в я з и С П е р е в о д о м ;
}
info = string . Empty ;
return OrderStudentMoveType . Н е о п р е д е л е н о ;
case "Зачисление в вуз вне приемной кампании" :
info = $"Зачисление студента {student} по приказу" ;
return OrderStudentMoveType . З а ч и с л и т ь П о П р и к а з у ;
case "Зачисление в вуз" :
info = $"Зачисление студента {student} по приказу" ;
return OrderStudentMoveType . З а ч и с л и т ь П о П р и к а з у ;
case "Перевод из другого вуза" :
info = $"Перевод студента {student} с другого вуза" ;
return OrderStudentMoveType . П р и н я т ь П о П е р е в о д у с Д р у г о г о В у з а ;
case "Перевод на следующий курс" :
info = $"Перевод студента {student} из группы {studentGroupFrom} на следующий курс в группу {studentGroupTo}" ;
return OrderStudentMoveType . П е р е в е с т и Н а С т а р ш и й К у р с ;
case "Уход в академический отпуск" :
DateTime ? date = null ;
if ( syncOrder . dateEnd . IsNotEmpty ( ) )
{
date = Convert . ToDateTime ( syncOrder . dateEnd ) ;
}
info = $"Уход в А О студента {student} из группы {studentGroupFrom} до {date?.ToShortDateString() ?? string.Empty}" ;
return OrderStudentMoveType . О т п р а в и т ь В А к а д е м ;
case "Продление академического отпуска" :
info = $"Продление А О студента {student}" ;
return OrderStudentMoveType . П р о д л и т ь А к а д е м ;
case "Восстановление из академического отпуска" :
info = $"Выход из А О студента {student} в группу {studentGroupTo}" ;
return OrderStudentMoveType . В о с с т а н о в и т ь И з А к а д е м а ;
case "Отчисление" :
switch ( syncOrder . reason )
{
case "за невыполнение учебного плана" :
info = $"Отчисление студента {student} из группы {studentGroupFrom} за неуспеваемость" ;
return OrderStudentMoveType . О т ч и с л и т ь З а Н е у с п е в а м о с т ь ;
case "по собственному желанию" :
info = $"Отчисление студента {student} из группы {studentGroupFrom} по собственному желанию" ;
return OrderStudentMoveType . О т ч и с л и т ь П о С о б с т в е н н о м у ;
case "в связи с невыходом из академического отпуска" :
info = $"Отчисление студента {student} из группы {studentGroupFrom} в связи с невыходм из академического отпуска" ;
return OrderStudentMoveType . О т ч и с л и т ь З а Н е в ы х о д С А к а д е м а ;
case "за невыполнение обязанностей по добросовестному освоению образовательной программы и выполнению учебного плана" :
info = $"Отчисление студента {student} из группы {studentGroupFrom} за неуспеваемость" ;
return OrderStudentMoveType . О т ч и с л и т ь З а Н е у с п е в а м о с т ь ;
case "в связи с переводом в ___" :
info = $"Отчисление студента {student} из группы {studentGroupFrom} в связи с переводом" ;
return OrderStudentMoveType . О т ч и с л и т ь В С в я з и С П е р е в о д о м ;
default :
info = string . Empty ;
return OrderStudentMoveType . Н е о п р е д е л е н о ;
}
case "Восстановление" :
info = $"Восстановление отчисленного студента {student} в группу {studentGroupTo}" ;
return OrderStudentMoveType . В о с с т а н о в и т ь ;
case "Выпуск" :
info = $"Завершение обучения студента {student}" ;
return OrderStudentMoveType . О т ч и с л и т ь П о З а в е р ш е н и ю ;
default :
info = string . Empty ;
return OrderStudentMoveType . Н е о п р е д е л е н о ;
2022-03-18 20:09:15 +04:00
}
2022-03-29 13:33:32 +04:00
}
2022-03-18 20:09:15 +04:00
2022-04-28 11:35:15 +04:00
private void SetYearFinish ( StudentViewModel student , StudentGroupViewModel group , OrderViewModel order , OrderStudentMoveType studentOrderType )
2022-03-29 13:33:32 +04:00
{
2022-04-28 11:35:15 +04:00
if ( student = = null )
2022-03-18 20:09:15 +04:00
{
2022-03-29 13:33:32 +04:00
return ;
}
int year = DateTime . Now . Year ;
2022-04-28 11:35:15 +04:00
switch ( studentOrderType )
2022-03-29 13:33:32 +04:00
{
// у студента не меняется год зачисления
case OrderStudentMoveType . П р о д л и т ь А к а д е м :
case OrderStudentMoveType . О т ч и с л и т ь П о З а в е р ш е н и ю :
return ;
// студент уходит с текущего года обучения, сбрасываем е г о
case OrderStudentMoveType . Н е о п р е д е л е н о :
case OrderStudentMoveType . О т п р а в и т ь В А к а д е м :
case OrderStudentMoveType . О т ч и с л и т ь В С в я з и С П е р е в о д о м :
case OrderStudentMoveType . О т ч и с л и т ь З а Н е в ы х о д С А к а д е м а :
case OrderStudentMoveType . О т ч и с л и т ь З а Н е у с п е в а м о с т ь :
case OrderStudentMoveType . О т ч и с л и т ь П о С о б с т в е н н о м у :
case OrderStudentMoveType . У б р а т ь П о П е р е в о д у :
student . EnrollmentYearId = null ;
return ;
// проблема с разными направлениями групп на разных курсах
case OrderStudentMoveType . П е р е в е с т и Н а С т а р ш и й К у р с :
if ( student . EnrollmentYearId . HasValue )
{
return ;
}
if ( group = = null | | order = = null )
{
return ;
}
year = order . OrderDate . Year ;
switch ( group . AcademicCourse )
{
case AcademicCourse . К у р с _1 :
break ;
case AcademicCourse . К у р с _2 :
year - - ;
break ;
case AcademicCourse . К у р с _3 :
year - = 2 ;
break ;
case AcademicCourse . К у р с _4 :
year - = 3 ;
break ;
}
break ;
// может быть зачисление проводилось без указания группы, тогда группа определится при распределении
case OrderStudentMoveType . Р а с п р е д е л и т ь :
if ( student . EnrollmentYearId . HasValue )
{
return ;
}
if ( group = = null | | order = = null )
{
return ;
}
year = order . OrderDate . Year ;
break ;
case OrderStudentMoveType . З а ч и с л и т ь П о П р и к а з у :
if ( group = = null | | order = = null )
{
return ;
}
year = order . OrderDate . Year ;
break ;
case OrderStudentMoveType . П р и н я т ь П о П е р е в о д у :
case OrderStudentMoveType . П р и н я т ь П о П е р е в о д у с Д р у г о г о В у з а :
case OrderStudentMoveType . В о с с т а н о в и т ь :
case OrderStudentMoveType . В о с с т а н о в и т ь И з А к а д е м а :
case OrderStudentMoveType . П е р е в е с т и Н а Д р у г о е Н а п р а в л е н и е К а ф е д р ы :
if ( group = = null | | order = = null )
{
return ;
}
year = order . OrderDate . Month < 8 ? order . OrderDate . Year - 1 : order . OrderDate . Year ;
switch ( group . AcademicCourse )
{
case AcademicCourse . К у р с _1 :
break ;
case AcademicCourse . К у р с _2 :
year - - ;
break ;
case AcademicCourse . К у р с _3 :
year - = 2 ;
break ;
case AcademicCourse . К у р с _4 :
year - = 3 ;
break ;
}
break ;
2022-03-18 20:09:15 +04:00
}
2022-03-29 13:33:32 +04:00
var logic = DependencyManager . Instance . Resolve < IEnrollmentYearLogic > ( ) ;
var yearEnrollment = logic . GetElement ( new EnrollmentYearGetBindingModel { EducationDirectionId = group . EducationDirectionId , Year = year } ) ;
if ( yearEnrollment = = null )
2022-03-18 20:09:15 +04:00
{
2022-03-29 13:33:32 +04:00
SaveErrors ( logic . Errors , "Ошибка установки года выпуска студента" , $"Н е удалось найти год выпуска студента {student.LastName} {student.FirstName} {student.Patronymic}" ) ;
return ;
}
2022-03-18 20:09:15 +04:00
2022-03-29 13:33:32 +04:00
student . EnrollmentYearId = yearEnrollment . Id ;
}
private void SaveErrors ( List < ( string Title , string Message ) > errors , string title , string message )
{
if ( _history = = null )
2022-03-18 20:09:15 +04:00
{
2022-03-29 13:33:32 +04:00
return ;
2022-03-18 20:09:15 +04:00
}
2022-03-29 13:33:32 +04:00
Errors = errors ? ? new List < ( string Title , string Message ) > ( ) ;
Errors . Add ( ( title , message ) ) ;
SaveLog ( string . Join ( Environment . NewLine , Errors . Select ( x = > x . Message ) ) ) ;
2022-03-18 20:09:15 +04:00
}
2022-03-29 13:33:32 +04:00
private void SaveLog ( string info )
2022-03-18 10:22:34 +04:00
{
2022-03-29 13:33:32 +04:00
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = _history . Id ,
Information = info
} ) ;
}
2022-03-18 10:22:34 +04:00
}
2021-04-27 15:14:35 +04:00
}