fixes #13
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Reference in New Issue