commit
4c6d29f598
|
|
@ -262,6 +262,20 @@ public class AppDbContext : DbContext
|
||||||
cmd.ExecuteNonQuery();
|
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).
|
// Remove deprecated column if it exists (older installs).
|
||||||
RemoveEmployeeDbIdColumnIfPresent(conn, columns);
|
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>
|
/// <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 LocationSiteId { get; set; } = string.Empty;
|
||||||
public string GradeType { 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>
|
/// <summary>Total price for this scan's meal menu.</summary>
|
||||||
public double TotalPrice { get; set; }
|
public double TotalPrice { get; set; }
|
||||||
public string grade_type { get; set; } = string.Empty;
|
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.title AS department_title,
|
||||||
d.department_type,
|
d.department_type,
|
||||||
r.location_site_id AS location_site_id,
|
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
|
FROM employee_rfid_tag r
|
||||||
JOIN employee e ON e.id = r.parent_document_id
|
JOIN employee e ON e.id = r.parent_document_id
|
||||||
LEFT JOIN department d ON d.id = e.department_id
|
LEFT JOIN department d ON d.id = e.department_id
|
||||||
|
|
@ -70,7 +71,8 @@ public class EmployeeLookupService : IEmployeeLookupService
|
||||||
DepartmentTitle = GetString(reader, 9),
|
DepartmentTitle = GetString(reader, 9),
|
||||||
DepartmentType = GetString(reader, 10),
|
DepartmentType = GetString(reader, 10),
|
||||||
LocationSiteId = GetString(reader, 11),
|
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";
|
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)
|
private static string ToCompactAlphaNum(string? s)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(s))
|
if (string.IsNullOrWhiteSpace(s))
|
||||||
|
|
|
||||||
|
|
@ -418,7 +418,8 @@ public class RfidService : IRfidService
|
||||||
MealLabel = mealLabel,
|
MealLabel = mealLabel,
|
||||||
MealItems = mealItemsDisplay,
|
MealItems = mealItemsDisplay,
|
||||||
TotalPrice = totalPrice,
|
TotalPrice = totalPrice,
|
||||||
grade_type = employee.GradeType ?? string.Empty
|
grade_type = employee.GradeType ?? string.Empty,
|
||||||
|
Designation = employee.PositionTitle ?? string.Empty
|
||||||
};
|
};
|
||||||
db.LunchOrderTransactions.Add(record);
|
db.LunchOrderTransactions.Add(record);
|
||||||
db.SaveChanges();
|
db.SaveChanges();
|
||||||
|
|
|
||||||
|
|
@ -933,11 +933,12 @@ public partial class ScannerDashboardViewModel : ObservableObject
|
||||||
private static string BuildCsvFromScanRecords(IReadOnlyList<ScanRecord> records)
|
private static string BuildCsvFromScanRecords(IReadOnlyList<ScanRecord> records)
|
||||||
{
|
{
|
||||||
var sb = new StringBuilder();
|
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)
|
foreach (var r in records)
|
||||||
{
|
{
|
||||||
|
var localScanTime = r.ScanTime.ToLocalTime();
|
||||||
var localScanTime = r.ScanTime.ToLocalTime(); sb.Append(r.Id);
|
var gradeLabel = HrmsMenuItemForMapping.ToExportGradeLabel(r.grade_type);
|
||||||
|
sb.Append(r.Id);
|
||||||
sb.Append(',');
|
sb.Append(',');
|
||||||
sb.Append(ToExcelText(r.CardId));
|
sb.Append(ToExcelText(r.CardId));
|
||||||
sb.Append(',');
|
sb.Append(',');
|
||||||
|
|
@ -957,6 +958,10 @@ public partial class ScannerDashboardViewModel : ObservableObject
|
||||||
sb.Append(',');
|
sb.Append(',');
|
||||||
sb.Append(EscapeCsv(r.Department ?? string.Empty));
|
sb.Append(EscapeCsv(r.Department ?? string.Empty));
|
||||||
sb.Append(',');
|
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(EscapeCsv(r.MealItems ?? string.Empty));
|
||||||
sb.Append(',');
|
sb.Append(',');
|
||||||
sb.Append(r.TotalPrice.ToString("0.##", CultureInfo.InvariantCulture));
|
sb.Append(r.TotalPrice.ToString("0.##", CultureInfo.InvariantCulture));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue