From c4402d976da740301850d23ec6268e888a3644a8 Mon Sep 17 00:00:00 2001 From: kotcheshir73 Date: Fri, 18 Mar 2022 11:16:29 +0400 Subject: [PATCH] =?UTF-8?q?=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=20=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B2=D0=BE=20view-=D0=BC=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D1=8C=20=D1=81=20=D0=B8=D1=81=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=D0=BC=20?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Models/Department/StudentGroup.cs | 8 +++++ .../Attributes/MapConfigurationAttribute.cs | 3 ++ .../ModuleTools/BusinessLogics/Mapper.cs | 33 +++++++++++++++++++ .../ViewModels/StudentGroupViewModels.cs | 10 ++++-- 4 files changed, 52 insertions(+), 2 deletions(-) diff --git a/DepartmentPortal/Common/DatabaseCore/Models/Department/StudentGroup.cs b/DepartmentPortal/Common/DatabaseCore/Models/Department/StudentGroup.cs index a1064e2..4060ef2 100644 --- a/DepartmentPortal/Common/DatabaseCore/Models/Department/StudentGroup.cs +++ b/DepartmentPortal/Common/DatabaseCore/Models/Department/StudentGroup.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; using System.Runtime.Serialization; using System.Text; @@ -59,5 +60,12 @@ namespace DatabaseCore.Models.Department public StudentGroup SecurityCheck(StudentGroup entity, bool allowFullData) => entity; public override string ToString() => $"{EducationDirection?.ShortName}-{AcademicCourse}{GroupNumber}"; + + //------------------------------------------------------------------------- + + public int GetStudnetsByState(int state) + { + return Students?.Where(x => x.StudentState == state)?.Count() ?? 0; + } } } \ No newline at end of file diff --git a/DepartmentPortal/Common/ModuleTools/Attributes/MapConfigurationAttribute.cs b/DepartmentPortal/Common/ModuleTools/Attributes/MapConfigurationAttribute.cs index ef1374d..63bc68a 100644 --- a/DepartmentPortal/Common/ModuleTools/Attributes/MapConfigurationAttribute.cs +++ b/DepartmentPortal/Common/ModuleTools/Attributes/MapConfigurationAttribute.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; namespace ModuleTools.Attributes { @@ -26,6 +27,8 @@ namespace ModuleTools.Attributes /// public bool AllowCopyWithoutRigth { get; set; } = true; + public Type[] MethodParams { get; set; } = null; + /// /// Настройка для полей сущности правил маппинга /// diff --git a/DepartmentPortal/Common/ModuleTools/BusinessLogics/Mapper.cs b/DepartmentPortal/Common/ModuleTools/BusinessLogics/Mapper.cs index ac92fcb..8b9ffd3 100644 --- a/DepartmentPortal/Common/ModuleTools/BusinessLogics/Mapper.cs +++ b/DepartmentPortal/Common/ModuleTools/BusinessLogics/Mapper.cs @@ -75,6 +75,39 @@ namespace ModuleTools.BusinessLogics value = (value as ICollection)?.Count; break; } + else if (prop == "Method") + { + int index = 0; + while (true) + { + if (props[index++] == "Method") + break; + if (index == props.Length) + { + break; + } + } + var methodName = props[index].Split('[')?[0]; + if (string.IsNullOrEmpty(methodName)) + { + break; + } + var parameters = props[index].Split(new char[] { '[' , ']'}, StringSplitOptions.RemoveEmptyEntries)?[1].Split(','); + var objs = new object[parameters.Length]; + for(int i = 0; i < parameters.Length; ++i) + { + var type = parameters[i].Split(':')[0]; + switch(type) + { + case "Enum": + objs[i] = (int)Enum.Parse(customAttribute.MethodParams[i], parameters[i].Split(':')[1]); + break; + } + } + value = typeFrom.InvokeMember(methodName, BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, value, objs); + break; + + } var bindingProperty = value.GetType().GetProperty(prop); if (bindingProperty != null) { diff --git a/DepartmentPortal/Department/DepartmentBusinessLogic/ViewModels/StudentGroupViewModels.cs b/DepartmentPortal/Department/DepartmentBusinessLogic/ViewModels/StudentGroupViewModels.cs index 56a4e5b..051ba0a 100644 --- a/DepartmentPortal/Department/DepartmentBusinessLogic/ViewModels/StudentGroupViewModels.cs +++ b/DepartmentPortal/Department/DepartmentBusinessLogic/ViewModels/StudentGroupViewModels.cs @@ -3,6 +3,7 @@ using ModuleTools.Attributes; using ModuleTools.Enums; using ModuleTools.ViewModels; using System; +using System.Collections.Generic; namespace DepartmentBusinessLogic.ViewModels { @@ -49,9 +50,14 @@ namespace DepartmentBusinessLogic.ViewModels [MapConfiguration("GroupNumber")] public int GroupNumber { get; set; } + [MapConfiguration("Method.GetStudnetsByState[Enum:Учится]", IsDifficle = true, MethodParams = new Type[] { typeof(StudentState) })] + public int StudentActualCount { get; set; } + + [MapConfiguration("Method.GetStudnetsByState[Enum:Академ]", IsDifficle = true, MethodParams = new Type[] { typeof(StudentState) })] + public int StudentAcademCount { get; set; } + [ViewModelControlListProperty("Количество студентов")] - [MapConfiguration("Students.Count", IsDifficle = true)] - public int StudentCount { get; set; } + public string StudentCount => $"{StudentActualCount + StudentAcademCount} ({StudentActualCount}, {StudentAcademCount})"; [ViewModelControlElementProperty("Куратор", ControlType.ControlGuid, MustHaveValue = false, ReadOnly = false, ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlLecturerList, DepartmentWindowsDesktop")] [MapConfiguration("LecturerId")]