@@ -62,19 +62,23 @@
|
||||
</ng-template>
|
||||
</kendo-grid-column>
|
||||
|
||||
<kendo-grid-column title="Status" [width]="140">
|
||||
<kendo-grid-column title="Status" [width]="200">
|
||||
<ng-template kendoGridCellTemplate let-dataItem>
|
||||
<span [class]="statusClass(dataItem.status)">{{ dataItem.status }}</span>
|
||||
<div *ngIf="dataItem.reviewedByName && (dataItem.status === 'Approved' || dataItem.status === 'Paid')"
|
||||
class="review-meta">✓ Approved by {{ dataItem.reviewedByName }}<br>{{ dataItem.reviewedAt | date:'yyyy-MM-dd HH:mm' }}</div>
|
||||
<div *ngIf="dataItem.reviewedByName && dataItem.status === 'Rejected'" class="review-meta review-meta-reject">
|
||||
✗ Rejected by {{ dataItem.reviewedByName }}<br>{{ dataItem.reviewedAt | date:'yyyy-MM-dd HH:mm' }}
|
||||
<div *ngIf="dataItem.reviewNotes" class="review-reason">{{ dataItem.reviewNotes }}</div>
|
||||
</div>
|
||||
</ng-template>
|
||||
</kendo-grid-column>
|
||||
|
||||
<kendo-grid-column title="Actions" [width]="160">
|
||||
<ng-template kendoGridCellTemplate let-dataItem>
|
||||
<button *ngIf="canEdit(dataItem)" kendoButton fillMode="flat" (click)="openEdit(dataItem)">Edit</button>
|
||||
<ng-container *ngIf="canApproveOrReject(dataItem)">
|
||||
<button kendoButton themeColor="success" fillMode="flat" (click)="approve(dataItem)">Approve</button>
|
||||
<button kendoButton themeColor="error" fillMode="flat" (click)="openReject(dataItem)">Reject</button>
|
||||
</ng-container>
|
||||
<button *ngIf="canApproveOrReject(dataItem)" kendoButton themeColor="primary" fillMode="flat"
|
||||
(click)="openReview(dataItem)">Review</button>
|
||||
<button *ngIf="canPay(dataItem)" kendoButton themeColor="primary" fillMode="flat"
|
||||
(click)="openPay(dataItem)">Pay</button>
|
||||
<button *ngIf="dataItem.hasReceipt" kendoButton fillMode="flat" (click)="openReceipt(dataItem.id)"
|
||||
@@ -118,19 +122,10 @@
|
||||
</kendo-dialog-actions>
|
||||
</kendo-dialog>
|
||||
|
||||
<!-- Reject dialog -->
|
||||
<kendo-dialog *ngIf="rejectRow" title="Reject Expense" [width]="400" [maxWidth]="'95vw'" (close)="rejectRow = null">
|
||||
<div class="grid grid-cols-1 gap-3 p-2">
|
||||
<label class="flex flex-col gap-1">
|
||||
Review Notes
|
||||
<kendo-textbox [(ngModel)]="rejectNotes" placeholder="Optional notes for submitter"></kendo-textbox>
|
||||
</label>
|
||||
</div>
|
||||
<kendo-dialog-actions>
|
||||
<button kendoButton (click)="rejectRow = null">Cancel</button>
|
||||
<button kendoButton themeColor="error" (click)="confirmReject()">Reject</button>
|
||||
</kendo-dialog-actions>
|
||||
</kendo-dialog>
|
||||
<!-- Review dialog: detail + receipt preview, with Approve / Reject(reason) -->
|
||||
<app-expense-review-dialog *ngIf="reviewRow" [expenseId]="reviewRow.id"
|
||||
(approve)="onReviewApprove()" (reject)="onReviewReject($event)" (cancel)="closeReview()">
|
||||
</app-expense-review-dialog>
|
||||
|
||||
<!-- Transient save confirmation (sits above the open dialog during continuous entry) -->
|
||||
<div *ngIf="toast" class="save-toast">{{ toast }}</div>
|
||||
|
||||
Reference in New Issue
Block a user