Updated the grade mapping logic in HrmsMenuItemForMapping.cs to map Contractual and MTO/TE/Intern to MANAGEMENT and Unassigned (and empty values) to NON_MANAGEMENT.
The FromGradeType method in HrmsMenuItemForMapping was modified to handle the new mapping rules, ensuring that menu items and lunch order items align with the updated grade-to-menu mapping: Contractual and MTO/TE/Intern are now mapped to MANAGEMENT menu. Unassigned and empty values are mapped to NON_MANAGEMENT.pull/5/head
parent
4cdac8b4be
commit
0e171af1fa
|
|
@ -0,0 +1,45 @@
|
|||
namespace UtopiaCanteenSystem.Services;
|
||||
|
||||
/// <summary>
|
||||
/// Maps HRMS <c>employee_rfid_tag.grade_type</c> to <c>menu_item.item_for</c>.
|
||||
/// Menu rows only use MANAGEMENT / NON_MANAGEMENT; other grades must map to one of those.
|
||||
/// Contractual and MTO/TE/Intern use the management menu; Unassigned uses non-management.
|
||||
/// </summary>
|
||||
public static class HrmsMenuItemForMapping
|
||||
{
|
||||
/// <summary>
|
||||
/// Returns MANAGEMENT or NON_MANAGEMENT for menu queries. Never returns empty.
|
||||
/// </summary>
|
||||
public static string FromGradeType(string? gradeType)
|
||||
{
|
||||
var compact = ToCompactAlphaNum(gradeType);
|
||||
if (string.IsNullOrEmpty(compact))
|
||||
return "NON_MANAGEMENT";
|
||||
|
||||
if (compact == "management")
|
||||
return "MANAGEMENT";
|
||||
|
||||
if (compact == "nonmanagement")
|
||||
return "NON_MANAGEMENT";
|
||||
|
||||
if (compact == "contractual" || compact == "mtoteintern")
|
||||
return "MANAGEMENT";
|
||||
|
||||
if (compact == "unassigned")
|
||||
return "NON_MANAGEMENT";
|
||||
|
||||
if (compact.StartsWith("non", StringComparison.Ordinal) && compact.Contains("management", StringComparison.Ordinal))
|
||||
return "NON_MANAGEMENT";
|
||||
|
||||
// Any other label (e.g. future grade codes) — use non-management menu so items still resolve.
|
||||
return "NON_MANAGEMENT";
|
||||
}
|
||||
|
||||
private static string ToCompactAlphaNum(string? s)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(s))
|
||||
return string.Empty;
|
||||
var chars = s.Trim().ToLowerInvariant().Where(char.IsLetterOrDigit).ToArray();
|
||||
return new string(chars);
|
||||
}
|
||||
}
|
||||
|
|
@ -237,7 +237,7 @@ public class MenuLookupService : IMenuLookupService
|
|||
AND mi.item_for = @itemFor
|
||||
ORDER BY mi.item_name;";
|
||||
|
||||
var itemFor = GetItemForFromGradeType(gradeType);
|
||||
var itemFor = HrmsMenuItemForMapping.FromGradeType(gradeType);
|
||||
|
||||
await using var conn = new MySqlConnection(connectionString);
|
||||
await conn.OpenAsync(cancellationToken).ConfigureAwait(false);
|
||||
|
|
@ -265,19 +265,6 @@ public class MenuLookupService : IMenuLookupService
|
|||
|
||||
return list;
|
||||
}
|
||||
private static string GetItemForFromGradeType(string? gradeType)
|
||||
{
|
||||
var value = (gradeType ?? string.Empty).Trim().ToLowerInvariant();
|
||||
|
||||
return value switch
|
||||
{
|
||||
"management" => "MANAGEMENT",
|
||||
"nonmanagement" => "NON_MANAGEMENT",
|
||||
"non_management" => "NON_MANAGEMENT",
|
||||
_ => string.Empty
|
||||
};
|
||||
}
|
||||
|
||||
private static string GetString(MySqlDataReader reader, int ordinal)
|
||||
{
|
||||
if (reader.IsDBNull(ordinal)) return string.Empty;
|
||||
|
|
|
|||
|
|
@ -212,7 +212,7 @@ public class SyncService : ISyncService
|
|||
if (lunchOrderId > 0)
|
||||
{
|
||||
var mealItems = SplitMealItems(record.MealItems);
|
||||
var itemFor = GradeTypeToItemFor(record.grade_type);
|
||||
var itemFor = HrmsMenuItemForMapping.FromGradeType(record.grade_type);
|
||||
|
||||
foreach (var itemName in mealItems)
|
||||
{
|
||||
|
|
@ -335,18 +335,6 @@ public class SyncService : ISyncService
|
|||
}
|
||||
}
|
||||
|
||||
private static string GradeTypeToItemFor(string? gradeType)
|
||||
{
|
||||
var value = (gradeType ?? string.Empty).Trim().ToLowerInvariant();
|
||||
return value switch
|
||||
{
|
||||
"management" => "MANAGEMENT",
|
||||
"nonmanagement" => "NON_MANAGEMENT",
|
||||
"non_management" => "NON_MANAGEMENT",
|
||||
_ => string.Empty
|
||||
};
|
||||
}
|
||||
|
||||
private static IReadOnlyList<string> SplitMealItems(string? mealItems)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(mealItems))
|
||||
|
|
|
|||
Loading…
Reference in New Issue