+ {card.rule_key || props.model.model_name}
+
+ - {t( - 'Select one or more alerts and close them with one click. The underlying financial settlement record remains available for safe retry and audit.' - )} -
-+ {t( + 'Batch-close ordinary alerts after review. Task-finalization alerts require a root administrator to enter the exact provider-backed quota before they can close.' + )} +
+- {t('Generated at {{time}}', { - time: formatTimestampToDate(props.data.generated_at), - })} -
- + onSelectedTargetsChange={replaceSelectedTargets} + onReviewTargets={reviewTargets} + onCompleteManualTask={setManualTaskItem} + /> ++ {t('Generated at {{time}}', { + time: formatTimestampToDate(props.data.generated_at), + })} +
+ + ) + } + + return ( + <> + {content} + {manualTaskDialog} + > ) } diff --git a/web/default/src/features/smart-ops/components/billing-settlement-table.tsx b/web/default/src/features/smart-ops/components/billing-settlement-table.tsx index 7ad5c40a..8cfbb64a 100644 --- a/web/default/src/features/smart-ops/components/billing-settlement-table.tsx +++ b/web/default/src/features/smart-ops/components/billing-settlement-table.tsx @@ -64,20 +64,75 @@ function settlementReferences( return references } +interface BillingSettlementActionsCellProps { + item: BillingSettlementReconciliationItem + reviewPending: boolean + canCompleteManualTask: boolean + onReviewTargets: (targets: BillingSettlementReviewTarget[]) => void + onCompleteManualTask: (item: BillingSettlementReconciliationItem) => void +} + +function BillingSettlementActionsCell( + props: BillingSettlementActionsCellProps +): ReactElement { + const { t } = useTranslation() + + if (props.item.requires_manual_completion) { + return ( +