Merge pull request 'fixes' (#13) from fixes into main

Reviewed-on: #13
main
SYED MUSTUFA AHMED NAQVI 2026-05-23 06:04:49 +00:00
commit 4c6d29f598
7 changed files with 38 additions and 6 deletions

View File

@ -262,6 +262,20 @@ public class AppDbContext : DbContext
cmd.ExecuteNonQuery();
}
if (columns.Count > 0 && !columns.Contains("grade_type", StringComparer.OrdinalIgnoreCase))
{
using var cmd = conn.CreateCommand();
cmd.CommandText = "ALTER TABLE lunch_order_transactions ADD COLUMN grade_type TEXT DEFAULT ''";
cmd.ExecuteNonQuery();
}
if (columns.Count > 0 && !columns.Contains("Designation", StringComparer.OrdinalIgnoreCase))
{
using var cmd = conn.CreateCommand();
cmd.CommandText = "ALTER TABLE lunch_order_transactions ADD COLUMN Designation TEXT DEFAULT ''";
cmd.ExecuteNonQuery();
}
// Remove deprecated column if it exists (older installs).
RemoveEmployeeDbIdColumnIfPresent(conn, columns);
}

View File

@ -26,4 +26,6 @@ public class HrmsEmployeeInfo
/// <summary>Site from employee_rfid_tag.location_site_id; used for menu lookup (lunch_menu_week).</summary>
public string LocationSiteId { get; set; } = string.Empty;
public string GradeType { get; set; } = string.Empty;
/// <summary>employee.position_title (job title / designation).</summary>
public string PositionTitle { get; set; } = string.Empty;
}

View File

@ -47,4 +47,6 @@ public class ScanRecord
/// <summary>Total price for this scan's meal menu.</summary>
public double TotalPrice { get; set; }
public string grade_type { get; set; } = string.Empty;
/// <summary>employee.position_title at scan time (designation).</summary>
public string Designation { get; set; } = string.Empty;
}

View File

@ -38,7 +38,8 @@ public class EmployeeLookupService : IEmployeeLookupService
d.title AS department_title,
d.department_type,
r.location_site_id AS location_site_id,
r.grade_type AS grade_type
r.grade_type AS grade_type,
e.position_title AS position_title
FROM employee_rfid_tag r
JOIN employee e ON e.id = r.parent_document_id
LEFT JOIN department d ON d.id = e.department_id
@ -70,7 +71,8 @@ public class EmployeeLookupService : IEmployeeLookupService
DepartmentTitle = GetString(reader, 9),
DepartmentType = GetString(reader, 10),
LocationSiteId = GetString(reader, 11),
GradeType = GetString(reader, 12)
GradeType = GetString(reader, 12),
PositionTitle = GetString(reader, 13)
};
}

View File

@ -35,6 +35,12 @@ public static class HrmsMenuItemForMapping
return "NON_MANAGEMENT";
}
/// <summary>Human-readable grade label for Excel export (Management / Non Management).</summary>
public static string ToExportGradeLabel(string? gradeType)
{
return FromGradeType(gradeType) == "MANAGEMENT" ? "Management" : "Non Management";
}
private static string ToCompactAlphaNum(string? s)
{
if (string.IsNullOrWhiteSpace(s))

View File

@ -418,7 +418,8 @@ public class RfidService : IRfidService
MealLabel = mealLabel,
MealItems = mealItemsDisplay,
TotalPrice = totalPrice,
grade_type = employee.GradeType ?? string.Empty
grade_type = employee.GradeType ?? string.Empty,
Designation = employee.PositionTitle ?? string.Empty
};
db.LunchOrderTransactions.Add(record);
db.SaveChanges();

View File

@ -933,11 +933,12 @@ public partial class ScannerDashboardViewModel : ObservableObject
private static string BuildCsvFromScanRecords(IReadOnlyList<ScanRecord> records)
{
var sb = new StringBuilder();
sb.AppendLine("Id,CardId,ScanTime,IsSynced,SiteId,DeviceId,IpAddress,EmployeeId,EmployeeName,Department,Meal,Price");
sb.AppendLine("Id,CardId,ScanTime,IsSynced,SiteId,DeviceId,IpAddress,EmployeeId,EmployeeName,Department,GradeType,Designation,Meal,Price");
foreach (var r in records)
{
var localScanTime = r.ScanTime.ToLocalTime(); sb.Append(r.Id);
var localScanTime = r.ScanTime.ToLocalTime();
var gradeLabel = HrmsMenuItemForMapping.ToExportGradeLabel(r.grade_type);
sb.Append(r.Id);
sb.Append(',');
sb.Append(ToExcelText(r.CardId));
sb.Append(',');
@ -957,6 +958,10 @@ public partial class ScannerDashboardViewModel : ObservableObject
sb.Append(',');
sb.Append(EscapeCsv(r.Department ?? string.Empty));
sb.Append(',');
sb.Append(EscapeCsv(gradeLabel));
sb.Append(',');
sb.Append(EscapeCsv(r.Designation ?? string.Empty));
sb.Append(',');
sb.Append(EscapeCsv(r.MealItems ?? string.Empty));
sb.Append(',');
sb.Append(r.TotalPrice.ToString("0.##", CultureInfo.InvariantCulture));