From ecbd9414c3e20289e9cf30c821b637a4ebed3d60 Mon Sep 17 00:00:00 2001 From: user Date: Wed, 2 Aug 2023 00:15:31 +0200 Subject: [PATCH 1/3] Update EnrollType.cs, PoliNetwork.Graduatorie.Common.csproj, EnrollUtil.cs, and 6 more files --- .../Objects/EnrollType.cs | 23 +++++++++++++++++ .../PoliNetwork.Graduatorie.Common.csproj | 4 +-- .../Utils/EnrollUtil.cs | 25 +++++++++++++++++++ .../Objects/RankingNS/RankingSummary.cs | 2 +- .../Objects/StudentResult.cs | 14 ++++++++--- .../Objects/Tables/Course/CourseTableStats.cs | 2 +- .../PoliNetwork.Graduatorie.Parser.csproj | 16 ++++++------ .../Utils/Transformer/ParserNS/Converter.cs | 12 +++++---- .../Utils/Transformer/ParserNS/Parser.cs | 11 ++++---- 9 files changed, 82 insertions(+), 27 deletions(-) create mode 100644 PoliNetwork.Graduatorie.Common/Objects/EnrollType.cs create mode 100644 PoliNetwork.Graduatorie.Common/Utils/EnrollUtil.cs diff --git a/PoliNetwork.Graduatorie.Common/Objects/EnrollType.cs b/PoliNetwork.Graduatorie.Common/Objects/EnrollType.cs new file mode 100644 index 000000000..79c483d0e --- /dev/null +++ b/PoliNetwork.Graduatorie.Common/Objects/EnrollType.cs @@ -0,0 +1,23 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; + +namespace PoliNetwork.Graduatorie.Common.Objects; + +[Serializable] +[JsonObject(MemberSerialization.Fields, NamingStrategyType = typeof(CamelCaseNamingStrategy))] +public class EnrollType +{ + public string? Course; + public string? Type; + public bool? CanEnroll; + + public int GetHashWithoutLastUpdate() + { + var i = "EnrollTypeNotNull".GetHashCode(); + i ^= this.Course?.GetHashCode() ?? "Course".GetHashCode(); + i ^= this.Type?.GetHashCode() ?? "Type".GetHashCode(); + i ^= this.CanEnroll?.GetHashCode() ?? "CanEnroll".GetHashCode(); + + return i; + } +} \ No newline at end of file diff --git a/PoliNetwork.Graduatorie.Common/PoliNetwork.Graduatorie.Common.csproj b/PoliNetwork.Graduatorie.Common/PoliNetwork.Graduatorie.Common.csproj index d5454c050..82b3830d4 100644 --- a/PoliNetwork.Graduatorie.Common/PoliNetwork.Graduatorie.Common.csproj +++ b/PoliNetwork.Graduatorie.Common/PoliNetwork.Graduatorie.Common.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/PoliNetwork.Graduatorie.Common/Utils/EnrollUtil.cs b/PoliNetwork.Graduatorie.Common/Utils/EnrollUtil.cs new file mode 100644 index 000000000..be2c756ec --- /dev/null +++ b/PoliNetwork.Graduatorie.Common/Utils/EnrollUtil.cs @@ -0,0 +1,25 @@ +using PoliNetwork.Graduatorie.Common.Objects; + +namespace PoliNetwork.Graduatorie.Common.Utils; + +public class EnrollUtil +{ + public static EnrollType GetEnrollType(string? rowCanEnrollInto, bool rowCanEnroll) + { + if (rowCanEnroll == false) + return new EnrollType() { CanEnroll = false, Course = null, Type = null }; + + if (string.IsNullOrEmpty(rowCanEnrollInto)) + return new EnrollType(){ CanEnroll = true, Course = null, Type = null}; + const string sep = " - "; + if (!rowCanEnrollInto.Contains(sep)) + { + return new EnrollType(){ CanEnroll = true, Course = rowCanEnrollInto, Type = null}; + } + + var s = rowCanEnrollInto.Split(sep); + var type = s.FirstOrDefault(x => !string.IsNullOrEmpty(x)); + var course = s.FirstOrDefault(x => !string.IsNullOrEmpty(x) && x != type); + return new EnrollType(){CanEnroll = true, Course = course, Type = type}; + } +} \ No newline at end of file diff --git a/PoliNetwork.Graduatorie.Parser/Objects/RankingNS/RankingSummary.cs b/PoliNetwork.Graduatorie.Parser/Objects/RankingNS/RankingSummary.cs index e36e71072..26b09dd83 100644 --- a/PoliNetwork.Graduatorie.Parser/Objects/RankingNS/RankingSummary.cs +++ b/PoliNetwork.Graduatorie.Parser/Objects/RankingNS/RankingSummary.cs @@ -39,7 +39,7 @@ public static RankingSummary From(Ranking ranking) var courseTableStatsList = ranking.ByCourse?.Select(x => x.GetStats()) .OrderBy(x => x.Title).ThenBy(x => x.Location).ToList(); - var howManyCanEnroll = byMeritRows?.Count(x => x.CanEnroll ?? false); + var howManyCanEnroll = byMeritRows?.Count(x => x.EnrollType?.CanEnroll ?? false); var groupBy = courseTableStatsList?.GroupBy(x => diff --git a/PoliNetwork.Graduatorie.Parser/Objects/StudentResult.cs b/PoliNetwork.Graduatorie.Parser/Objects/StudentResult.cs index cb013bc4c..8a9ef2a07 100644 --- a/PoliNetwork.Graduatorie.Parser/Objects/StudentResult.cs +++ b/PoliNetwork.Graduatorie.Parser/Objects/StudentResult.cs @@ -2,6 +2,8 @@ using Newtonsoft.Json; using Newtonsoft.Json.Serialization; +using PoliNetwork.Graduatorie.Common.Objects; +using PoliNetwork.Graduatorie.Parser.Utils.Transformer.ParserNS; #endregion @@ -12,8 +14,7 @@ namespace PoliNetwork.Graduatorie.Parser.Objects; public class StudentResult { public DateOnly? BirthDate; - public bool? CanEnroll; - public string? CanEnrollInto; + public EnrollType? EnrollType; public int? EnglishCorrectAnswers; public string? Id; public SortedDictionary? Ofa; // maybe change it @@ -22,17 +23,22 @@ public class StudentResult public decimal? Result; public SortedDictionary? SectionsResults; + public StudentResult() + { + //don't remove it + } + public int GetHashWithoutLastUpdate() { var i = "StudentResult".GetHashCode(); i ^= BirthDate?.GetHashCode() ?? "BirthDate".GetHashCode(); - i ^= CanEnroll?.GetHashCode() ?? "CanEnroll".GetHashCode(); - i ^= CanEnrollInto?.GetHashCode() ?? "CanEnrollInto".GetHashCode(); + i ^= EnrollType?.GetHashWithoutLastUpdate() ?? "EnrollType".GetHashCode(); i ^= EnglishCorrectAnswers?.GetHashCode() ?? "EnglishCorrectAnswers".GetHashCode(); i ^= Id?.GetHashCode() ?? "Id".GetHashCode(); i ^= PositionAbsolute?.GetHashCode() ?? "PositionAbsolute".GetHashCode(); i ^= PositionCourse?.GetHashCode() ?? "PositionCourse".GetHashCode(); i ^= Result?.GetHashCode() ?? "Result".GetHashCode(); + i ^= EnrollType?.GetHashCode() ?? "EnrollType".GetHashCode(); if (Ofa == null) i ^= "Ofa".GetHashCode(); else diff --git a/PoliNetwork.Graduatorie.Parser/Objects/Tables/Course/CourseTableStats.cs b/PoliNetwork.Graduatorie.Parser/Objects/Tables/Course/CourseTableStats.cs index 82e0c357a..d7172c11d 100644 --- a/PoliNetwork.Graduatorie.Parser/Objects/Tables/Course/CourseTableStats.cs +++ b/PoliNetwork.Graduatorie.Parser/Objects/Tables/Course/CourseTableStats.cs @@ -80,7 +80,7 @@ public static CourseTableStats From(CourseTable courseTable) if (howManyStudentsCount == 0 || courseTableRows is null) return stats; - var studentsWhoCanEnroll = courseTableRows.Where(x => x.CanEnroll ?? false).ToList(); + var studentsWhoCanEnroll = courseTableRows.Where(x => x.EnrollType?.CanEnroll ?? false).ToList(); var studentsWhoCanEnrollCount = studentsWhoCanEnroll.Count; var minValueToEnroll = studentsWhoCanEnrollCount > 0 ? studentsWhoCanEnroll.Min(x => x.Result) : null; diff --git a/PoliNetwork.Graduatorie.Parser/PoliNetwork.Graduatorie.Parser.csproj b/PoliNetwork.Graduatorie.Parser/PoliNetwork.Graduatorie.Parser.csproj index 0e871f625..396cee730 100644 --- a/PoliNetwork.Graduatorie.Parser/PoliNetwork.Graduatorie.Parser.csproj +++ b/PoliNetwork.Graduatorie.Parser/PoliNetwork.Graduatorie.Parser.csproj @@ -9,26 +9,26 @@ - - + + - + - + - + - - - + + + diff --git a/PoliNetwork.Graduatorie.Parser/Utils/Transformer/ParserNS/Converter.cs b/PoliNetwork.Graduatorie.Parser/Utils/Transformer/ParserNS/Converter.cs index 4164540be..75bd3124b 100644 --- a/PoliNetwork.Graduatorie.Parser/Utils/Transformer/ParserNS/Converter.cs +++ b/PoliNetwork.Graduatorie.Parser/Utils/Transformer/ParserNS/Converter.cs @@ -1,5 +1,6 @@ #region +using PoliNetwork.Graduatorie.Common.Utils; using PoliNetwork.Graduatorie.Parser.Objects; using PoliNetwork.Graduatorie.Parser.Objects.Tables.Course; using PoliNetwork.Graduatorie.Parser.Objects.Tables.Merit; @@ -13,21 +14,23 @@ public static class Converter public static StudentResult FromMeritTableToStudentResult(MeritTableRow row) { var rowCanEnroll = row.CanEnroll ?? false; + var rowCanEnrollInto = rowCanEnroll ? row.CanEnrollInto : null; return new StudentResult { Id = row.Id, Ofa = row.Ofa, Result = row.Result, BirthDate = null, - CanEnroll = rowCanEnroll, - CanEnrollInto = rowCanEnroll ? row.CanEnrollInto : null, PositionAbsolute = row.Position, PositionCourse = null, SectionsResults = null, - EnglishCorrectAnswers = null + EnglishCorrectAnswers = null, + EnrollType = EnrollUtil.GetEnrollType(rowCanEnrollInto, rowCanEnroll) }; } + + public static StudentResult FromCourseTableRowToStudentResult(CourseTableRow row, Table course) { var rowCanEnroll = row.CanEnroll ?? false; @@ -37,8 +40,7 @@ public static StudentResult FromCourseTableRowToStudentResult(CourseTableRow row Ofa = row.Ofa, Result = row.Result, BirthDate = row.BirthDate, - CanEnroll = rowCanEnroll, - CanEnrollInto = rowCanEnroll ? course.CourseTitle : null, + EnrollType = EnrollUtil.GetEnrollType(course.CourseTitle, rowCanEnroll), PositionAbsolute = null, PositionCourse = row.Position, SectionsResults = row.SectionsResults, diff --git a/PoliNetwork.Graduatorie.Parser/Utils/Transformer/ParserNS/Parser.cs b/PoliNetwork.Graduatorie.Parser/Utils/Transformer/ParserNS/Parser.cs index e6fc2cca3..e3a91d7ea 100644 --- a/PoliNetwork.Graduatorie.Parser/Utils/Transformer/ParserNS/Parser.cs +++ b/PoliNetwork.Graduatorie.Parser/Utils/Transformer/ParserNS/Parser.cs @@ -8,6 +8,7 @@ using PoliNetwork.Graduatorie.Common.Extensions; using PoliNetwork.Graduatorie.Common.Objects; using PoliNetwork.Graduatorie.Common.Objects.RankingNS; +using PoliNetwork.Graduatorie.Common.Utils; using PoliNetwork.Graduatorie.Common.Utils.HashNS; using PoliNetwork.Graduatorie.Parser.Objects; using PoliNetwork.Graduatorie.Parser.Objects.Json.Indexes.Specific; @@ -585,8 +586,7 @@ Table course Ofa = row.Ofa, Result = row.Result, BirthDate = row.BirthDate, - CanEnroll = canEnroll, - CanEnrollInto = canEnroll ? course.CourseTitle : null, + EnrollType = EnrollUtil.GetEnrollType(course.CourseTitle, canEnroll), PositionCourse = row.Position, SectionsResults = row.SectionsResults, EnglishCorrectAnswers = row.EnglishCorrectAnswers @@ -600,7 +600,7 @@ Table course return student; student.PositionAbsolute = meritRow.Position; - student.CanEnrollInto = canEnroll ? meritRow.CanEnrollInto : null; + student.EnrollType = EnrollUtil.GetEnrollType(meritRow.CanEnrollInto, canEnroll); return student; } @@ -623,8 +623,7 @@ IEnumerable courses var canEnroll = row.CanEnroll ?? false; var student = new StudentResult { - CanEnroll = canEnroll, - CanEnrollInto = canEnroll ? row.CanEnrollInto : null, + EnrollType = EnrollUtil.GetEnrollType(row.CanEnrollInto , canEnroll), Id = row.Id, PositionAbsolute = row.Position, Result = row.Result, @@ -651,7 +650,7 @@ IEnumerable courses return student; var finalRow = canEnroll - ? studentCoursesRows.Find(c => c?.CanEnroll ?? false) + ? studentCoursesRows.Find(c => c?.EnrollType?.CanEnroll ?? false) : studentCoursesRows.OrderBy(c => c?.PositionCourse).First(); if (finalRow == null) From 73a036ca15a806173e038169f409a7e5fff7abd6 Mon Sep 17 00:00:00 2001 From: user Date: Wed, 2 Aug 2023 00:18:17 +0200 Subject: [PATCH 2/3] Update EnrollType.cs, PoliNetwork.Graduatorie.Common.csproj, EnrollUtil.cs, and 4 more files --- .../Objects/EnrollType.cs | 12 ++++++++---- .../PoliNetwork.Graduatorie.Common.csproj | 4 ++-- .../Utils/EnrollUtil.cs | 16 +++++++++------- .../Objects/StudentResult.cs | 8 +------- .../PoliNetwork.Graduatorie.Parser.csproj | 16 ++++++++-------- .../Utils/Transformer/ParserNS/Converter.cs | 1 - .../Utils/Transformer/ParserNS/Parser.cs | 2 +- 7 files changed, 29 insertions(+), 30 deletions(-) diff --git a/PoliNetwork.Graduatorie.Common/Objects/EnrollType.cs b/PoliNetwork.Graduatorie.Common/Objects/EnrollType.cs index 79c483d0e..97671355c 100644 --- a/PoliNetwork.Graduatorie.Common/Objects/EnrollType.cs +++ b/PoliNetwork.Graduatorie.Common/Objects/EnrollType.cs @@ -1,22 +1,26 @@ +#region + using Newtonsoft.Json; using Newtonsoft.Json.Serialization; +#endregion + namespace PoliNetwork.Graduatorie.Common.Objects; [Serializable] [JsonObject(MemberSerialization.Fields, NamingStrategyType = typeof(CamelCaseNamingStrategy))] public class EnrollType { + public bool? CanEnroll; public string? Course; public string? Type; - public bool? CanEnroll; public int GetHashWithoutLastUpdate() { var i = "EnrollTypeNotNull".GetHashCode(); - i ^= this.Course?.GetHashCode() ?? "Course".GetHashCode(); - i ^= this.Type?.GetHashCode() ?? "Type".GetHashCode(); - i ^= this.CanEnroll?.GetHashCode() ?? "CanEnroll".GetHashCode(); + i ^= Course?.GetHashCode() ?? "Course".GetHashCode(); + i ^= Type?.GetHashCode() ?? "Type".GetHashCode(); + i ^= CanEnroll?.GetHashCode() ?? "CanEnroll".GetHashCode(); return i; } diff --git a/PoliNetwork.Graduatorie.Common/PoliNetwork.Graduatorie.Common.csproj b/PoliNetwork.Graduatorie.Common/PoliNetwork.Graduatorie.Common.csproj index 82b3830d4..d5454c050 100644 --- a/PoliNetwork.Graduatorie.Common/PoliNetwork.Graduatorie.Common.csproj +++ b/PoliNetwork.Graduatorie.Common/PoliNetwork.Graduatorie.Common.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/PoliNetwork.Graduatorie.Common/Utils/EnrollUtil.cs b/PoliNetwork.Graduatorie.Common/Utils/EnrollUtil.cs index be2c756ec..e3309d238 100644 --- a/PoliNetwork.Graduatorie.Common/Utils/EnrollUtil.cs +++ b/PoliNetwork.Graduatorie.Common/Utils/EnrollUtil.cs @@ -1,5 +1,9 @@ +#region + using PoliNetwork.Graduatorie.Common.Objects; +#endregion + namespace PoliNetwork.Graduatorie.Common.Utils; public class EnrollUtil @@ -7,19 +11,17 @@ public class EnrollUtil public static EnrollType GetEnrollType(string? rowCanEnrollInto, bool rowCanEnroll) { if (rowCanEnroll == false) - return new EnrollType() { CanEnroll = false, Course = null, Type = null }; - + return new EnrollType { CanEnroll = false, Course = null, Type = null }; + if (string.IsNullOrEmpty(rowCanEnrollInto)) - return new EnrollType(){ CanEnroll = true, Course = null, Type = null}; + return new EnrollType { CanEnroll = true, Course = null, Type = null }; const string sep = " - "; if (!rowCanEnrollInto.Contains(sep)) - { - return new EnrollType(){ CanEnroll = true, Course = rowCanEnrollInto, Type = null}; - } + return new EnrollType { CanEnroll = true, Course = rowCanEnrollInto, Type = null }; var s = rowCanEnrollInto.Split(sep); var type = s.FirstOrDefault(x => !string.IsNullOrEmpty(x)); var course = s.FirstOrDefault(x => !string.IsNullOrEmpty(x) && x != type); - return new EnrollType(){CanEnroll = true, Course = course, Type = type}; + return new EnrollType { CanEnroll = true, Course = course, Type = type }; } } \ No newline at end of file diff --git a/PoliNetwork.Graduatorie.Parser/Objects/StudentResult.cs b/PoliNetwork.Graduatorie.Parser/Objects/StudentResult.cs index 8a9ef2a07..af9d224d1 100644 --- a/PoliNetwork.Graduatorie.Parser/Objects/StudentResult.cs +++ b/PoliNetwork.Graduatorie.Parser/Objects/StudentResult.cs @@ -3,7 +3,6 @@ using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using PoliNetwork.Graduatorie.Common.Objects; -using PoliNetwork.Graduatorie.Parser.Utils.Transformer.ParserNS; #endregion @@ -14,8 +13,8 @@ namespace PoliNetwork.Graduatorie.Parser.Objects; public class StudentResult { public DateOnly? BirthDate; - public EnrollType? EnrollType; public int? EnglishCorrectAnswers; + public EnrollType? EnrollType; public string? Id; public SortedDictionary? Ofa; // maybe change it public int? PositionAbsolute; @@ -23,11 +22,6 @@ public class StudentResult public decimal? Result; public SortedDictionary? SectionsResults; - public StudentResult() - { - //don't remove it - } - public int GetHashWithoutLastUpdate() { var i = "StudentResult".GetHashCode(); diff --git a/PoliNetwork.Graduatorie.Parser/PoliNetwork.Graduatorie.Parser.csproj b/PoliNetwork.Graduatorie.Parser/PoliNetwork.Graduatorie.Parser.csproj index 396cee730..0e871f625 100644 --- a/PoliNetwork.Graduatorie.Parser/PoliNetwork.Graduatorie.Parser.csproj +++ b/PoliNetwork.Graduatorie.Parser/PoliNetwork.Graduatorie.Parser.csproj @@ -9,26 +9,26 @@ - - + + - + - + - + - - - + + + diff --git a/PoliNetwork.Graduatorie.Parser/Utils/Transformer/ParserNS/Converter.cs b/PoliNetwork.Graduatorie.Parser/Utils/Transformer/ParserNS/Converter.cs index 75bd3124b..05c3404ee 100644 --- a/PoliNetwork.Graduatorie.Parser/Utils/Transformer/ParserNS/Converter.cs +++ b/PoliNetwork.Graduatorie.Parser/Utils/Transformer/ParserNS/Converter.cs @@ -29,7 +29,6 @@ public static StudentResult FromMeritTableToStudentResult(MeritTableRow row) }; } - public static StudentResult FromCourseTableRowToStudentResult(CourseTableRow row, Table course) { diff --git a/PoliNetwork.Graduatorie.Parser/Utils/Transformer/ParserNS/Parser.cs b/PoliNetwork.Graduatorie.Parser/Utils/Transformer/ParserNS/Parser.cs index e3a91d7ea..ad41a5fe9 100644 --- a/PoliNetwork.Graduatorie.Parser/Utils/Transformer/ParserNS/Parser.cs +++ b/PoliNetwork.Graduatorie.Parser/Utils/Transformer/ParserNS/Parser.cs @@ -623,7 +623,7 @@ IEnumerable courses var canEnroll = row.CanEnroll ?? false; var student = new StudentResult { - EnrollType = EnrollUtil.GetEnrollType(row.CanEnrollInto , canEnroll), + EnrollType = EnrollUtil.GetEnrollType(row.CanEnrollInto, canEnroll), Id = row.Id, PositionAbsolute = row.Position, Result = row.Result, From a61fc7799afaf58181ccea4c6885a50ffa2f5b22 Mon Sep 17 00:00:00 2001 From: Lorenzo Corallo Date: Wed, 2 Aug 2023 00:54:38 +0200 Subject: [PATCH 3/3] fix(EnrollUtil): check if word is a type --- PoliNetwork.Graduatorie.Common/Utils/EnrollUtil.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/PoliNetwork.Graduatorie.Common/Utils/EnrollUtil.cs b/PoliNetwork.Graduatorie.Common/Utils/EnrollUtil.cs index e3309d238..3085663e5 100644 --- a/PoliNetwork.Graduatorie.Common/Utils/EnrollUtil.cs +++ b/PoliNetwork.Graduatorie.Common/Utils/EnrollUtil.cs @@ -15,13 +15,16 @@ public static EnrollType GetEnrollType(string? rowCanEnrollInto, bool rowCanEnro if (string.IsNullOrEmpty(rowCanEnrollInto)) return new EnrollType { CanEnroll = true, Course = null, Type = null }; + + string[] tester = {"assegnato", "prenotato"}; const string sep = " - "; - if (!rowCanEnrollInto.Contains(sep)) + if (!rowCanEnrollInto.Contains(sep) || !tester.Any(t => rowCanEnrollInto.ToLower().Contains(t))) return new EnrollType { CanEnroll = true, Course = rowCanEnrollInto, Type = null }; - var s = rowCanEnrollInto.Split(sep); - var type = s.FirstOrDefault(x => !string.IsNullOrEmpty(x)); - var course = s.FirstOrDefault(x => !string.IsNullOrEmpty(x) && x != type); + var s = rowCanEnrollInto.Split(sep).ToList(); + var type = s.FirstOrDefault(x => tester.Any(t => t == x.ToLower())); + s.Remove(type); + var course = String.Join(sep, s); return new EnrollType { CanEnroll = true, Course = course, Type = type }; } -} \ No newline at end of file +}