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
SYED MUSTUFA AHMED NAQVI 2026-04-02 10:34:52 +05:00
parent 4cdac8b4be
commit 0e171af1fa
3 changed files with 47 additions and 27 deletions

View File

@ -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);
}
}

View File

@ -237,7 +237,7 @@ public class MenuLookupService : IMenuLookupService
AND mi.item_for = @itemFor AND mi.item_for = @itemFor
ORDER BY mi.item_name;"; ORDER BY mi.item_name;";
var itemFor = GetItemForFromGradeType(gradeType); var itemFor = HrmsMenuItemForMapping.FromGradeType(gradeType);
await using var conn = new MySqlConnection(connectionString); await using var conn = new MySqlConnection(connectionString);
await conn.OpenAsync(cancellationToken).ConfigureAwait(false); await conn.OpenAsync(cancellationToken).ConfigureAwait(false);
@ -265,19 +265,6 @@ public class MenuLookupService : IMenuLookupService
return list; 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) private static string GetString(MySqlDataReader reader, int ordinal)
{ {
if (reader.IsDBNull(ordinal)) return string.Empty; if (reader.IsDBNull(ordinal)) return string.Empty;

View File

@ -212,7 +212,7 @@ public class SyncService : ISyncService
if (lunchOrderId > 0) if (lunchOrderId > 0)
{ {
var mealItems = SplitMealItems(record.MealItems); var mealItems = SplitMealItems(record.MealItems);
var itemFor = GradeTypeToItemFor(record.grade_type); var itemFor = HrmsMenuItemForMapping.FromGradeType(record.grade_type);
foreach (var itemName in mealItems) 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) private static IReadOnlyList<string> SplitMealItems(string? mealItems)
{ {
if (string.IsNullOrWhiteSpace(mealItems)) if (string.IsNullOrWhiteSpace(mealItems))