скинхронизация списка приказо студента
This commit is contained in:
parent
2ccbccd6d4
commit
513c14b73d
@ -1,17 +1,15 @@
|
|||||||
using ToolsModule.Attributes;
|
using System;
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace ToolsModule.BindingModels
|
namespace ToolsModule.BindingModels
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Сохранение записи по идентификатору
|
/// Сохранение записи по идентификатору
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class SetBindingModel : AccessBindingModel
|
public class SetBindingModel : AccessBindingModel
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Идентификатор записи
|
/// Идентификатор записи
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[MapConfiguration("Id")]
|
|
||||||
public Guid Id { get; set; } = Guid.NewGuid();
|
public Guid Id { get; set; } = Guid.NewGuid();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -63,6 +63,7 @@ namespace ToolsModule.BusinessLogics
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Errors.Add(("Ошибка получения", ex.Message));
|
Errors.Add(("Ошибка получения", ex.Message));
|
||||||
|
Errors.Add(("Ошибка получения (Stack)", ex.StackTrace));
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -93,6 +94,7 @@ namespace ToolsModule.BusinessLogics
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Errors.Add(("Ошибка получения", ex.Message));
|
Errors.Add(("Ошибка получения", ex.Message));
|
||||||
|
Errors.Add(("Ошибка получения (Stack)", ex.StackTrace));
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -123,6 +125,7 @@ namespace ToolsModule.BusinessLogics
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Errors.Add(("Ошибка создания", ex.Message));
|
Errors.Add(("Ошибка создания", ex.Message));
|
||||||
|
Errors.Add(("Ошибка создания (Stack)", ex.StackTrace));
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -153,6 +156,7 @@ namespace ToolsModule.BusinessLogics
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Errors.Add(("Ошибка изменения", ex.Message));
|
Errors.Add(("Ошибка изменения", ex.Message));
|
||||||
|
Errors.Add(("Ошибка изменения (Stack)", ex.StackTrace));
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -183,6 +187,7 @@ namespace ToolsModule.BusinessLogics
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Errors.Add(("Ошибка удаления", ex.Message));
|
Errors.Add(("Ошибка удаления", ex.Message));
|
||||||
|
Errors.Add(("Ошибка удаления (Stack)", ex.StackTrace));
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -212,7 +217,8 @@ namespace ToolsModule.BusinessLogics
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Errors.Add(("Ошибка удаления", ex.Message));
|
Errors.Add(("Ошибка восстановления", ex.Message));
|
||||||
|
Errors.Add(("Ошибка восстановления (Stack)", ex.StackTrace));
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ namespace ToolsModule.BusinessLogics
|
|||||||
/// <param name="obj"></param>
|
/// <param name="obj"></param>
|
||||||
/// <param name="newObject"></param>
|
/// <param name="newObject"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static To MapToClass<From, To>(From obj, To newObject, bool haveRigth) where To : class => FillObject(obj, newObject, haveRigth);
|
public static To MapToClass<From, To>(From obj, To newObject, bool haveRigth) where To : class => FillObject(obj, newObject, haveRigth, true);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Заполнение объекта
|
/// Заполнение объекта
|
||||||
@ -39,24 +39,29 @@ namespace ToolsModule.BusinessLogics
|
|||||||
/// <param name="obj"></param>
|
/// <param name="obj"></param>
|
||||||
/// <param name="newObject"></param>
|
/// <param name="newObject"></param>
|
||||||
/// <param name="haveRigth"></param>
|
/// <param name="haveRigth"></param>
|
||||||
|
/// <param name="exsistRecord"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private static To FillObject<From, To>(From obj, To newObject, bool haveRigth)
|
private static To FillObject<From, To>(From obj, To newObject, bool haveRigth, bool exsistRecord = false)
|
||||||
where To : class
|
where To : class
|
||||||
{
|
{
|
||||||
if (obj == null)
|
if (obj == null)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newObject == null)
|
if (newObject == null)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
var typeFrom = typeof(From);
|
var typeFrom = typeof(From);
|
||||||
var typeTo = typeof(To);
|
var typeTo = typeof(To);
|
||||||
var properties = typeTo.GetProperties().Where(x => x.CanWrite);
|
var properties = typeTo.GetProperties().Where(x => x.CanWrite);
|
||||||
foreach (var property in properties)
|
foreach (var property in properties)
|
||||||
{
|
{
|
||||||
|
if (property.Name == "Id" && exsistRecord)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
var checkRight = property.GetCustomAttribute<CheckRigthForMapAttribute>();
|
var checkRight = property.GetCustomAttribute<CheckRigthForMapAttribute>();
|
||||||
if (!haveRigth && checkRight != null)
|
if (!haveRigth && checkRight != null)
|
||||||
{
|
{
|
||||||
|
@ -57,16 +57,9 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var address = _enviromentSettingLogic.GetList(new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderIpAddress" })?.List?.FirstOrDefault();
|
var address = GetAddress(history);
|
||||||
if (address == null || address.Value.IsEmpty())
|
if (address == null)
|
||||||
{
|
{
|
||||||
Errors = _enviromentSettingLogic.Errors;
|
|
||||||
Errors.Add(("Ошибка получения данных", "Не удалось получить адрес сервера для получения приказов по студентам"));
|
|
||||||
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
|
|
||||||
{
|
|
||||||
OrderSyncHistoryId = history.Id,
|
|
||||||
Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message))
|
|
||||||
});
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,8 +69,6 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// авторизация
|
|
||||||
|
|
||||||
// получение списка студентов
|
// получение списка студентов
|
||||||
HttpResponseMessage response = await client.GetAsync($"{address.Value}/univer/hs/Ulstu_StudentsInfo/v1/GetCurrentStudentsOfDepartment");
|
HttpResponseMessage response = await client.GetAsync($"{address.Value}/univer/hs/Ulstu_StudentsInfo/v1/GetCurrentStudentsOfDepartment");
|
||||||
if (!response.IsSuccessStatusCode)
|
if (!response.IsSuccessStatusCode)
|
||||||
@ -217,6 +208,63 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<bool> SyncStudentOrders(Guid studentId)
|
||||||
|
{
|
||||||
|
InitLogics();
|
||||||
|
|
||||||
|
var history = Create(new OrderSyncHistorySetBindingModel { SyncDate = DateTime.Now });
|
||||||
|
if (history == null)
|
||||||
|
{
|
||||||
|
Errors.Add(("Ошибка создание истории", "Не удалось создать историю"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
|
||||||
|
{
|
||||||
|
OrderSyncHistoryId = history.Id,
|
||||||
|
Information = $"Синхронизация приказов по студенту"
|
||||||
|
});
|
||||||
|
|
||||||
|
var address = GetAddress(history);
|
||||||
|
if (address == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var client = GetClinet(history, address);
|
||||||
|
if (client == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var groups = _groupsLogic.GetList(new StudentGroupGetBindingModel());
|
||||||
|
if (groups == null || groups.List == null)
|
||||||
|
{
|
||||||
|
Errors = _groupsLogic.Errors;
|
||||||
|
Errors.Add(("Ошибка получения данных", "Не удалось получить список групп с базы"));
|
||||||
|
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
|
||||||
|
{
|
||||||
|
OrderSyncHistoryId = history.Id,
|
||||||
|
Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message))
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var student = _studentLogic.GetElement(new StudentGetBindingModel { Id = studentId });
|
||||||
|
if (student == null)
|
||||||
|
{
|
||||||
|
Errors = _studentLogic.Errors;
|
||||||
|
Errors.Add(("Ошибка получения данных", "Не удалось получить студента"));
|
||||||
|
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
|
||||||
|
{
|
||||||
|
OrderSyncHistoryId = history.Id,
|
||||||
|
Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message))
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
await SyncStudentOrders(history, student, groups.List, client, address.Value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private void InitLogics()
|
private void InitLogics()
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -231,6 +279,23 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
|||||||
_roleLogic = DependencyManager.Instance.Resolve<RoleBusinessLogic>();
|
_roleLogic = DependencyManager.Instance.Resolve<RoleBusinessLogic>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private EnviromentSettingViewModel GetAddress(OrderSyncHistoryViewModel history)
|
||||||
|
{
|
||||||
|
var address = _enviromentSettingLogic.GetList(new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderIpAddress" })?.List?.FirstOrDefault();
|
||||||
|
if (address == null || address.Value.IsEmpty())
|
||||||
|
{
|
||||||
|
Errors = _enviromentSettingLogic.Errors;
|
||||||
|
Errors.Add(("Ошибка получения данных", "Не удалось получить адрес сервера для получения приказов по студентам"));
|
||||||
|
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
|
||||||
|
{
|
||||||
|
OrderSyncHistoryId = history.Id,
|
||||||
|
Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message))
|
||||||
|
});
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Синхронизация приказов по студенту
|
/// Синхронизация приказов по студенту
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -374,10 +439,15 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
|||||||
info = $"Перевод студента {student} c группы {syncOrder.groupNameBefore} другой кафедры в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
|
info = $"Перевод студента {student} c группы {syncOrder.groupNameBefore} другой кафедры в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
|
||||||
}
|
}
|
||||||
else if (studentGroupFromId.HasValue && !studentGroupToId.HasValue)
|
else if (studentGroupFromId.HasValue && !studentGroupToId.HasValue)
|
||||||
{
|
{
|
||||||
orderStudentMoveType = OrderStudentMoveType.УбратьПоПереводу;
|
orderStudentMoveType = OrderStudentMoveType.УбратьПоПереводу;
|
||||||
info = $"Перевод студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} на другую кафедру";
|
info = $"Перевод студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} на другую кафедру";
|
||||||
}
|
}
|
||||||
|
if (syncOrder.reason == "на другой факультет")
|
||||||
|
{
|
||||||
|
orderStudentMoveType = OrderStudentMoveType.ОтчислитьВСвязиСПереводом;
|
||||||
|
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} в связи с переводом";
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case "Зачисление в вуз вне приемной кампании":
|
case "Зачисление в вуз вне приемной кампании":
|
||||||
orderStudentMoveType = OrderStudentMoveType.ЗачислитьПоПриказу;
|
orderStudentMoveType = OrderStudentMoveType.ЗачислитьПоПриказу;
|
||||||
@ -395,10 +465,6 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
|||||||
orderStudentMoveType = OrderStudentMoveType.ПеревестиНаСтаршийКурс;
|
orderStudentMoveType = OrderStudentMoveType.ПеревестиНаСтаршийКурс;
|
||||||
info = $"Перевод студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} на следующий курс в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
|
info = $"Перевод студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} на следующий курс в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
|
||||||
break;
|
break;
|
||||||
//case "Завершение обучения": // уточнить приказ
|
|
||||||
// orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному;
|
|
||||||
// info = $"Отчисление студента {student} в связи с окончанием обучения";
|
|
||||||
// break;
|
|
||||||
case "Уход в академический отпуск":
|
case "Уход в академический отпуск":
|
||||||
DateTime? date = null;
|
DateTime? date = null;
|
||||||
if (syncOrder.dateEnd.IsNotEmpty())
|
if (syncOrder.dateEnd.IsNotEmpty())
|
||||||
@ -416,20 +482,29 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
|||||||
orderStudentMoveType = OrderStudentMoveType.ВосстановитьИзАкадема;
|
orderStudentMoveType = OrderStudentMoveType.ВосстановитьИзАкадема;
|
||||||
info = $"Выход из АО студента {student} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
|
info = $"Выход из АО студента {student} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
|
||||||
break;
|
break;
|
||||||
//case "Отчисление по невыходу из академа": // уточнить приказ
|
|
||||||
// orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНевыходСАкадема;
|
|
||||||
// info = $"Отчисление студента {student} по невыходу из академа";
|
|
||||||
// break;
|
|
||||||
case "Отчисление":
|
case "Отчисление":
|
||||||
if (syncOrder.reason == "за невыполнение учебного плана")
|
switch(syncOrder.reason)
|
||||||
{
|
{
|
||||||
orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНеуспевамость;
|
case "за невыполнение учебного плана":
|
||||||
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} за неуспеваемость";
|
orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНеуспевамость;
|
||||||
}
|
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} за неуспеваемость";
|
||||||
if (syncOrder.reason == "по собственному желанию")
|
break;
|
||||||
{
|
case "по собственному желанию":
|
||||||
orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному;
|
orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному;
|
||||||
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} по собственному желанию";
|
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} по собственному желанию";
|
||||||
|
break;
|
||||||
|
case "в связи с невыходом из академического отпуска":
|
||||||
|
orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНевыходСАкадема;
|
||||||
|
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} в связи с невыходм из академического отпуска";
|
||||||
|
break;
|
||||||
|
case "за невыполнение обязанностей по добросовестному освоению образовательной программы и выполнению учебного плана":
|
||||||
|
orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНеуспевамость;
|
||||||
|
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} за неуспеваемость";
|
||||||
|
break;
|
||||||
|
case "в связи с переводом в ___":
|
||||||
|
orderStudentMoveType = OrderStudentMoveType.ОтчислитьВСвязиСПереводом;
|
||||||
|
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} в связи с переводом";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "Восстановление":
|
case "Восстановление":
|
||||||
@ -614,9 +689,6 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
|||||||
"Продление академического отпуска" => OrderType.ДвижениеСтудентов,
|
"Продление академического отпуска" => OrderType.ДвижениеСтудентов,
|
||||||
"Восстановление из академического отпуска" => OrderType.ДвижениеСтудентов,
|
"Восстановление из академического отпуска" => OrderType.ДвижениеСтудентов,
|
||||||
"Отчисление" => OrderType.Отчисление,
|
"Отчисление" => OrderType.Отчисление,
|
||||||
"Отчисление (за невыполнение обязанностей по добросовестному освоению образовательной программы и выполнению учебного плана)" => OrderType.Отчисление,
|
|
||||||
"Отчисление (в связи с переводом в ___)" => OrderType.Отчисление,
|
|
||||||
"Отчисление (в связи с невыходом из академического отпуска)" => OrderType.Отчисление,
|
|
||||||
"Восстановление" => OrderType.Перевод,
|
"Восстановление" => OrderType.Перевод,
|
||||||
"Выпуск" => OrderType.ДвижениеСтудентов,
|
"Выпуск" => OrderType.ДвижениеСтудентов,
|
||||||
"Утверждение тем ВКР" => OrderType.Игнорировать,
|
"Утверждение тем ВКР" => OrderType.Игнорировать,
|
||||||
|
@ -6,6 +6,9 @@ using ToolsDesktop.Interfaces;
|
|||||||
using ToolsDesktop.Models;
|
using ToolsDesktop.Models;
|
||||||
using ToolsModule.Enums;
|
using ToolsModule.Enums;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ToolsDesktop.Helpers;
|
||||||
|
using ToolsModule.BusinessLogics;
|
||||||
|
|
||||||
namespace DepartmentWindowsDesktop.EntityControls
|
namespace DepartmentWindowsDesktop.EntityControls
|
||||||
{
|
{
|
||||||
@ -30,7 +33,33 @@ namespace DepartmentWindowsDesktop.EntityControls
|
|||||||
|
|
||||||
public ControlViewEntityListConfiguration GetConfigControl() => new()
|
public ControlViewEntityListConfiguration GetConfigControl() => new()
|
||||||
{
|
{
|
||||||
PaginationOn = false
|
PaginationOn = false,
|
||||||
|
ControlOnMoveElem = new()
|
||||||
|
{
|
||||||
|
{ "ToolStripMenuItemSyncOrders", ("Синхронизировать приказы студента", async (object sender, EventArgs e) => { await SyncOrders(); }) }
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Синхронизация приказов
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
private async Task SyncOrders()
|
||||||
|
{
|
||||||
|
if (!ParentId.HasValue)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var orderSyncHistoryBusinessLogic = DependencyManager.Instance.Resolve<OrderSyncHistoryBusinessLogic>();
|
||||||
|
var flag = await orderSyncHistoryBusinessLogic.SyncStudentOrders(ParentId.Value);
|
||||||
|
if (!flag)
|
||||||
|
{
|
||||||
|
DialogHelper.MessageException(_businessLogic.Errors, "Ошибки при синхронизации");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DialogHelper.MessageInformation("Завершено успешно", "Синхронизация приказов");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user