WIP
This commit is contained in:
@@ -76,9 +76,9 @@ public class ExpenseService : IExpenseService
|
||||
.OrderByDescending(e => e.ExpenseDate).ThenByDescending(e => e.Id)
|
||||
.Skip((page - 1) * pageSize).Take(pageSize).ToListAsync();
|
||||
|
||||
var minNames = await _db.Ministries.AsNoTracking().ToDictionaryAsync(m => m.Id, m => m.Name_en);
|
||||
var grpNames = await _db.ExpenseCategoryGroups.AsNoTracking().ToDictionaryAsync(g => g.Id, g => g.Name_en);
|
||||
var subNames = await _db.ExpenseSubCategories.AsNoTracking().ToDictionaryAsync(s => s.Id, s => s.Name_en);
|
||||
var minNames = await _db.Ministries.AsNoTracking().ToDictionaryAsync(m => m.Id, m => $"{m.Name_en} / {m.Name_zh}");
|
||||
var grpNames = await _db.ExpenseCategoryGroups.AsNoTracking().ToDictionaryAsync(g => g.Id, g => $"{g.Name_en} / {g.Name_zh}");
|
||||
var subNames = await _db.ExpenseSubCategories.AsNoTracking().ToDictionaryAsync(s => s.Id, s => $"{s.Name_en} / {s.Name_zh}");
|
||||
var memberIds = rows.Where(r => r.MemberId != null).Select(r => r.MemberId!.Value).ToHashSet();
|
||||
var memNames = await _db.Members.AsNoTracking().Where(m => memberIds.Contains(m.Id))
|
||||
.ToDictionaryAsync(m => m.Id, m => $"{m.FirstName_en} {m.LastName_en}");
|
||||
@@ -134,14 +134,18 @@ public class ExpenseService : IExpenseService
|
||||
if (r.Type == "VendorPayment")
|
||||
{
|
||||
if (!isFinance) throw new InvalidOperationException("Only finance can create vendor payments.");
|
||||
e.Status = "Paid";
|
||||
e.PaidAt = DateTimeOffset.UtcNow; e.PaidBy = CurrentUserId;
|
||||
// Enters the approval queue: PendingApproval -> Approve -> Pay (issue check).
|
||||
e.Status = "PendingApproval";
|
||||
e.SubmittedBy = CurrentUserId; e.SubmittedAt = DateTimeOffset.UtcNow;
|
||||
e.MemberId = null;
|
||||
}
|
||||
else // StaffReimbursement
|
||||
{
|
||||
e.Status = "Draft";
|
||||
// Finance entering on behalf of a member goes straight to the approval queue;
|
||||
// a member's own self-service entry stays a Draft until they explicitly Submit it.
|
||||
e.Status = isFinance ? "PendingApproval" : "Draft";
|
||||
e.SubmittedBy = CurrentUserId;
|
||||
if (isFinance) e.SubmittedAt = DateTimeOffset.UtcNow;
|
||||
e.MemberId = isFinance ? r.MemberId : await CallerMemberIdAsync();
|
||||
e.VendorName = null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user