скинхронизация списка приказо студента
This commit is contained in:
parent
2ccbccd6d4
commit
513c14b73d
@ -1,5 +1,4 @@
|
||||
using ToolsModule.Attributes;
|
||||
using System;
|
||||
using System;
|
||||
|
||||
namespace ToolsModule.BindingModels
|
||||
{
|
||||
@ -11,7 +10,6 @@ namespace ToolsModule.BindingModels
|
||||
/// <summary>
|
||||
/// Идентификатор записи
|
||||
/// </summary>
|
||||
[MapConfiguration("Id")]
|
||||
public Guid Id { get; set; } = Guid.NewGuid();
|
||||
}
|
||||
}
|
@ -63,6 +63,7 @@ namespace ToolsModule.BusinessLogics
|
||||
catch (Exception ex)
|
||||
{
|
||||
Errors.Add(("Ошибка получения", ex.Message));
|
||||
Errors.Add(("Ошибка получения (Stack)", ex.StackTrace));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -93,6 +94,7 @@ namespace ToolsModule.BusinessLogics
|
||||
catch (Exception ex)
|
||||
{
|
||||
Errors.Add(("Ошибка получения", ex.Message));
|
||||
Errors.Add(("Ошибка получения (Stack)", ex.StackTrace));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -123,6 +125,7 @@ namespace ToolsModule.BusinessLogics
|
||||
catch (Exception ex)
|
||||
{
|
||||
Errors.Add(("Ошибка создания", ex.Message));
|
||||
Errors.Add(("Ошибка создания (Stack)", ex.StackTrace));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -153,6 +156,7 @@ namespace ToolsModule.BusinessLogics
|
||||
catch (Exception ex)
|
||||
{
|
||||
Errors.Add(("Ошибка изменения", ex.Message));
|
||||
Errors.Add(("Ошибка изменения (Stack)", ex.StackTrace));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -183,6 +187,7 @@ namespace ToolsModule.BusinessLogics
|
||||
catch (Exception ex)
|
||||
{
|
||||
Errors.Add(("Ошибка удаления", ex.Message));
|
||||
Errors.Add(("Ошибка удаления (Stack)", ex.StackTrace));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -212,7 +217,8 @@ namespace ToolsModule.BusinessLogics
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Errors.Add(("Ошибка удаления", ex.Message));
|
||||
Errors.Add(("Ошибка восстановления", ex.Message));
|
||||
Errors.Add(("Ошибка восстановления (Stack)", ex.StackTrace));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ namespace ToolsModule.BusinessLogics
|
||||
/// <param name="obj"></param>
|
||||
/// <param name="newObject"></param>
|
||||
/// <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>
|
||||
/// Заполнение объекта
|
||||
@ -39,24 +39,29 @@ namespace ToolsModule.BusinessLogics
|
||||
/// <param name="obj"></param>
|
||||
/// <param name="newObject"></param>
|
||||
/// <param name="haveRigth"></param>
|
||||
/// <param name="exsistRecord"></param>
|
||||
/// <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
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (newObject == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var typeFrom = typeof(From);
|
||||
var typeTo = typeof(To);
|
||||
var properties = typeTo.GetProperties().Where(x => x.CanWrite);
|
||||
foreach (var property in properties)
|
||||
{
|
||||
if (property.Name == "Id" && exsistRecord)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var checkRight = property.GetCustomAttribute<CheckRigthForMapAttribute>();
|
||||
if (!haveRigth && checkRight != null)
|
||||
{
|
||||
|
@ -57,16 +57,9 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
return false;
|
||||
}
|
||||
|
||||
var address = _enviromentSettingLogic.GetList(new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderIpAddress" })?.List?.FirstOrDefault();
|
||||
if (address == null || address.Value.IsEmpty())
|
||||
var address = GetAddress(history);
|
||||
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;
|
||||
}
|
||||
|
||||
@ -76,8 +69,6 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
return false;
|
||||
}
|
||||
|
||||
// авторизация
|
||||
|
||||
// получение списка студентов
|
||||
HttpResponseMessage response = await client.GetAsync($"{address.Value}/univer/hs/Ulstu_StudentsInfo/v1/GetCurrentStudentsOfDepartment");
|
||||
if (!response.IsSuccessStatusCode)
|
||||
@ -217,6 +208,63 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
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()
|
||||
{
|
||||
|
||||
@ -231,6 +279,23 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
_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>
|
||||
@ -378,6 +443,11 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
orderStudentMoveType = OrderStudentMoveType.УбратьПоПереводу;
|
||||
info = $"Перевод студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} на другую кафедру";
|
||||
}
|
||||
if (syncOrder.reason == "на другой факультет")
|
||||
{
|
||||
orderStudentMoveType = OrderStudentMoveType.ОтчислитьВСвязиСПереводом;
|
||||
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} в связи с переводом";
|
||||
}
|
||||
break;
|
||||
case "Зачисление в вуз вне приемной кампании":
|
||||
orderStudentMoveType = OrderStudentMoveType.ЗачислитьПоПриказу;
|
||||
@ -395,10 +465,6 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
orderStudentMoveType = OrderStudentMoveType.ПеревестиНаСтаршийКурс;
|
||||
info = $"Перевод студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} на следующий курс в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
|
||||
break;
|
||||
//case "Завершение обучения": // уточнить приказ
|
||||
// orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному;
|
||||
// info = $"Отчисление студента {student} в связи с окончанием обучения";
|
||||
// break;
|
||||
case "Уход в академический отпуск":
|
||||
DateTime? date = null;
|
||||
if (syncOrder.dateEnd.IsNotEmpty())
|
||||
@ -416,20 +482,29 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
orderStudentMoveType = OrderStudentMoveType.ВосстановитьИзАкадема;
|
||||
info = $"Выход из АО студента {student} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
|
||||
break;
|
||||
//case "Отчисление по невыходу из академа": // уточнить приказ
|
||||
// orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНевыходСАкадема;
|
||||
// info = $"Отчисление студента {student} по невыходу из академа";
|
||||
// break;
|
||||
case "Отчисление":
|
||||
if (syncOrder.reason == "за невыполнение учебного плана")
|
||||
switch(syncOrder.reason)
|
||||
{
|
||||
case "за невыполнение учебного плана":
|
||||
orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНеуспевамость;
|
||||
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} за неуспеваемость";
|
||||
}
|
||||
if (syncOrder.reason == "по собственному желанию")
|
||||
{
|
||||
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;
|
||||
case "в связи с переводом в ___":
|
||||
orderStudentMoveType = OrderStudentMoveType.ОтчислитьВСвязиСПереводом;
|
||||
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} в связи с переводом";
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case "Восстановление":
|
||||
@ -614,9 +689,6 @@ namespace DepartmentBusinessLogic.BusinessLogics
|
||||
"Продление академического отпуска" => OrderType.ДвижениеСтудентов,
|
||||
"Восстановление из академического отпуска" => OrderType.ДвижениеСтудентов,
|
||||
"Отчисление" => OrderType.Отчисление,
|
||||
"Отчисление (за невыполнение обязанностей по добросовестному освоению образовательной программы и выполнению учебного плана)" => OrderType.Отчисление,
|
||||
"Отчисление (в связи с переводом в ___)" => OrderType.Отчисление,
|
||||
"Отчисление (в связи с невыходом из академического отпуска)" => OrderType.Отчисление,
|
||||
"Восстановление" => OrderType.Перевод,
|
||||
"Выпуск" => OrderType.ДвижениеСтудентов,
|
||||
"Утверждение тем ВКР" => OrderType.Игнорировать,
|
||||
|
@ -6,6 +6,9 @@ using ToolsDesktop.Interfaces;
|
||||
using ToolsDesktop.Models;
|
||||
using ToolsModule.Enums;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using ToolsDesktop.Helpers;
|
||||
using ToolsModule.BusinessLogics;
|
||||
|
||||
namespace DepartmentWindowsDesktop.EntityControls
|
||||
{
|
||||
@ -30,7 +33,33 @@ namespace DepartmentWindowsDesktop.EntityControls
|
||||
|
||||
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