diff --git a/src/CONST/index.ts b/src/CONST/index.ts index 4cccb01a3d075..118278fb9821d 100755 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -1367,6 +1367,7 @@ const CONST = { UPDATE_MANUAL_APPROVAL_THRESHOLD: 'POLICYCHANGELOG_UPDATE_MANUAL_APPROVAL_THRESHOLD', UPDATE_MAX_EXPENSE_AMOUNT: 'POLICYCHANGELOG_UPDATE_MAX_EXPENSE_AMOUNT', UPDATE_MAX_EXPENSE_AMOUNT_NO_RECEIPT: 'POLICYCHANGELOG_UPDATE_MAX_EXPENSE_AMOUNT_NO_RECEIPT', + UPDATE_MAX_EXPENSE_AGE: 'POLICYCHANGELOG_UPDATE_MAX_EXPENSE_AGE', UPDATE_MULTIPLE_TAGS_APPROVER_RULES: 'POLICYCHANGELOG_UPDATE_MULTIPLE_TAGS_APPROVER_RULES', UPDATE_NAME: 'POLICYCHANGELOG_UPDATE_NAME', UPDATE_DESCRIPTION: 'POLICYCHANGELOG_UPDATE_DESCRIPTION', @@ -3341,6 +3342,7 @@ const CONST = { CONTROL: 'control', }, DEFAULT_MAX_EXPENSE_AGE: 90, + DISABLED_MAX_EXPENSE_AGE: 10000000000, DEFAULT_MAX_EXPENSE_AMOUNT: 200000, DEFAULT_MAX_AMOUNT_NO_RECEIPT: 2500, DEFAULT_TAG_LIST: { diff --git a/src/languages/de.ts b/src/languages/de.ts index c8b2bc7bc24de..dcb5ecbe73c43 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -6497,11 +6497,6 @@ Fordere Spesendetails wie Belege und Beschreibungen an, lege Limits und Standard deleteReportField: (fieldType: string, fieldName?: string) => `${fieldType}-Berichts­feld „${fieldName}“ entfernt`, preventSelfApproval: ({oldValue, newValue}: UpdatedPolicyPreventSelfApprovalParams) => `„Verhinderung der Selbstgenehmigung“ aktualisiert auf „${newValue === 'true' ? 'Aktiviert' : 'Deaktiviert'}“ (zuvor „${oldValue === 'true' ? 'Aktiviert' : 'Deaktiviert'}“)`, - updateMaxExpenseAmountNoReceipt: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `den maximalen Belegbetrag für erforderliche Ausgaben auf ${newValue} geändert (zuvor ${oldValue})`, - updateMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `den maximalen Spesenbetrag für Verstöße auf ${newValue} geändert (zuvor ${oldValue})`, - updateMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `„Maximales Spesenalter (Tage)“ aktualisiert auf „${newValue}“ (zuvor „${oldValue === 'false' ? CONST.POLICY.DEFAULT_MAX_EXPENSE_AGE : oldValue}“)`, updateMonthlyOffset: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => { if (!oldValue) { return `Das Datum für die monatliche Berichtseinreichung auf „${newValue}“ festlegen`; @@ -6654,6 +6649,16 @@ Fordere Spesendetails wie Belege und Beschreibungen an, lege Limits und Standard } } }, + setReceiptRequiredAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `Pflichtbelegbetrag auf „${newValue}“ festlegen`, + changedReceiptRequiredAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => + `Betrag für erforderliche Belege auf „${newValue}“ geändert (zuvor „${oldValue}“)`, + removedReceiptRequiredAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `erforderlichen Belegbetrag entfernt (zuvor „${oldValue}“)`, + setMaxExpenseAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `maximale Ausgabenhöhe auf „${newValue}“ festlegen`, + changedMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `maximalen Ausgabenbetrag auf „${newValue}“ geändert (zuvor „${oldValue}“)`, + removedMaxExpenseAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `maximaler Ausgabenbetrag entfernt (zuvor „${oldValue}“)`, + setMaxExpenseAge: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `maximales Spesenalter auf „${newValue}“ Tage festlegen`, + changedMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `Maximales Ausgabenalter auf „${newValue}“ Tage geändert (zuvor „${oldValue}“)`, + removedMaxExpenseAge: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `Maximales Spesenalter entfernt (zuvor „${oldValue}“ Tage)`, changedCustomReportNameFormula: ({newValue, oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `benutzerdefinierte Berichtsnamensformel in „${newValue}“ geändert (zuvor „${oldValue}“)`, changedReimburser: ({newReimburser, previousReimburser}: UpdatedPolicyReimburserParams) => diff --git a/src/languages/en.ts b/src/languages/en.ts index 7637d9a3b5554..b8f6b2991e0e3 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -6380,12 +6380,15 @@ const translations = { deleteReportField: (fieldType: string, fieldName?: string) => `removed ${fieldType} Report Field "${fieldName}"`, preventSelfApproval: ({oldValue, newValue}: UpdatedPolicyPreventSelfApprovalParams) => `updated "Prevent self-approval" to "${newValue === 'true' ? 'Enabled' : 'Disabled'}" (previously "${oldValue === 'true' ? 'Enabled' : 'Disabled'}")`, - updateMaxExpenseAmountNoReceipt: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `changed the maximum receipt required expense amount to ${newValue} (previously ${oldValue})`, - updateMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `changed the maximum expense amount for violations to ${newValue} (previously ${oldValue})`, - updateMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `updated "Max expense age (days)" to "${newValue}" (previously "${oldValue === 'false' ? CONST.POLICY.DEFAULT_MAX_EXPENSE_AGE : oldValue}")`, + setReceiptRequiredAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set receipt required amount to "${newValue}"`, + changedReceiptRequiredAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed receipt required amount to "${newValue}" (previously "${oldValue}")`, + removedReceiptRequiredAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed receipt required amount (previously "${oldValue}")`, + setMaxExpenseAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set max expense amount to "${newValue}"`, + changedMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed max expense amount to "${newValue}" (previously "${oldValue}")`, + removedMaxExpenseAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed max expense amount (previously "${oldValue}")`, + setMaxExpenseAge: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set max expense age to "${newValue}" days`, + changedMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed max expense age to "${newValue}" days (previously "${oldValue}")`, + removedMaxExpenseAge: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed max expense age (previously "${oldValue}" days)`, updateMonthlyOffset: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => { if (!oldValue) { return `set the monthly report submission date to "${newValue}"`; diff --git a/src/languages/es.ts b/src/languages/es.ts index c3cb5d99ed3f3..7a93665054c41 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -6119,10 +6119,17 @@ ${amount} para ${merchant} - ${date}`, deleteReportField: (fieldType, fieldName) => `eliminó el campo de informe ${fieldType} "${fieldName}"`, preventSelfApproval: ({oldValue, newValue}) => `actualizó "Evitar la autoaprobación" a "${newValue === 'true' ? 'Habilitada' : 'Deshabilitada'}" (previamente "${oldValue === 'true' ? 'Habilitada' : 'Deshabilitada'}")`, - updateMaxExpenseAmountNoReceipt: ({oldValue, newValue}) => `cambió el monto máximo de gasto requerido sin recibo a ${newValue} (previamente ${oldValue})`, - updateMaxExpenseAmount: ({oldValue, newValue}) => `cambió el monto máximo de gasto para violaciones a ${newValue} (previamente ${oldValue})`, - updateMaxExpenseAge: ({oldValue, newValue}) => - `actualizó "Antigüedad máxima de gastos (días)" a "${newValue}" (previamente "${oldValue === 'false' ? CONST.POLICY.DEFAULT_MAX_EXPENSE_AGE : oldValue}")`, + setReceiptRequiredAmount: ({newValue}) => `estableció el importe requerido del recibo en "${newValue}"`, + changedReceiptRequiredAmount: ({oldValue, newValue}) => `cambió el importe requerido del recibo a "${newValue}" (antes "${oldValue}")`, + removedReceiptRequiredAmount: ({oldValue}) => `eliminó el importe requerido del recibo (antes "${oldValue}")`, + + setMaxExpenseAmount: ({newValue}) => `estableció el importe máximo del gasto en "${newValue}"`, + changedMaxExpenseAmount: ({oldValue, newValue}) => `cambió el importe máximo del gasto a "${newValue}" (antes "${oldValue}")`, + removedMaxExpenseAmount: ({oldValue}) => `eliminó el importe máximo del gasto (antes "${oldValue}")`, + + setMaxExpenseAge: ({newValue}) => `estableció la antigüedad máxima del gasto en "${newValue}" días`, + changedMaxExpenseAge: ({oldValue, newValue}) => `cambió la antigüedad máxima del gasto a "${newValue}" días (antes "${oldValue}")`, + removedMaxExpenseAge: ({oldValue}) => `eliminó la antigüedad máxima del gasto (anteriormente "${oldValue}" días)`, updateDefaultBillable: ({oldValue, newValue}) => `actualizó "Volver a facturar gastos a clientes" a "${newValue}" (previamente "${oldValue}")`, updateDefaultReimbursable: ({oldValue, newValue}) => `actualizó "Valor predeterminado para gastos en efectivo" a "${newValue}" (previamente "${oldValue}")`, updateMonthlyOffset: ({oldValue, newValue}) => { diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 9a4ec692ed9e3..e0ed752099d33 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -6507,12 +6507,6 @@ Exigez des informations de dépense comme les reçus et les descriptions, défin deleteReportField: (fieldType: string, fieldName?: string) => `${fieldType} de rapport "${fieldName}" supprimé`, preventSelfApproval: ({oldValue, newValue}: UpdatedPolicyPreventSelfApprovalParams) => `mis à jour « Empêcher l’auto-approbation » en « ${newValue === 'true' ? 'Activé' : 'Désactivé'} » (auparavant « ${oldValue === 'true' ? 'Activé' : 'Désactivé'} »)`, - updateMaxExpenseAmountNoReceipt: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `a modifié le montant maximal d’une dépense nécessitant un reçu à ${newValue} (auparavant ${oldValue})`, - updateMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `a modifié le montant maximal d’une dépense pour les violations à ${newValue} (auparavant ${oldValue})`, - updateMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `« Ancienneté maximale de la dépense (jours) » mise à jour sur « ${newValue} » (précédemment « ${oldValue === 'false' ? CONST.POLICY.DEFAULT_MAX_EXPENSE_AGE : oldValue} »)`, updateMonthlyOffset: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => { if (!oldValue) { return `définir la date de soumission du rapport mensuel sur « ${newValue} »`; @@ -6668,6 +6662,16 @@ Exigez des informations de dépense comme les reçus et les descriptions, défin previousForwardsTo ? `a modifié le flux d’approbation pour ${approver} afin de ne plus transférer les rapports approuvés (auparavant transférés à ${previousForwardsTo})` : `a modifié le flux d'approbation pour ${approver} afin de ne plus transférer les rapports approuvés`, + setReceiptRequiredAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `définir le montant requis du reçu sur « ${newValue} »`, + changedReceiptRequiredAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `montant requis du reçu modifié à « ${newValue} » (précédemment « ${oldValue} »)`, + removedReceiptRequiredAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `montant requis du reçu supprimé (précédemment « ${oldValue} »)`, + setMaxExpenseAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `définir le montant maximal de la dépense sur « ${newValue} »`, + changedMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `montant maximal de dépense modifié en « ${newValue} » (précédemment « ${oldValue} »)`, + removedMaxExpenseAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `montant maximal de dépense supprimé (précédemment « ${oldValue} »)`, + setMaxExpenseAge: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `définir l’ancienneté maximale de la dépense sur « ${newValue} » jours`, + changedMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => + `nombre maximal de jours avant une dépense modifiée à « ${newValue} » jours (auparavant « ${oldValue} »)`, + removedMaxExpenseAge: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `âge maximum des dépenses supprimé (auparavant « ${oldValue} » jours)`, changedReimburser: ({newReimburser, previousReimburser}: UpdatedPolicyReimburserParams) => previousReimburser ? `a modifié le payeur autorisé en « ${newReimburser} » (auparavant « ${previousReimburser} »)` : `a modifié le payeur autorisé en « ${newReimburser} »`, }, diff --git a/src/languages/it.ts b/src/languages/it.ts index 7267ff29f59e0..f6713dafc3235 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -6480,12 +6480,6 @@ Richiedi dettagli di spesa come ricevute e descrizioni, imposta limiti e valori deleteReportField: (fieldType: string, fieldName?: string) => `campo di report ${fieldType} "${fieldName}" rimosso`, preventSelfApproval: ({oldValue, newValue}: UpdatedPolicyPreventSelfApprovalParams) => `aggiornato "Impedisci auto-approvazione" in "${newValue === 'true' ? 'Abilitato' : 'Disabilitato'}" (precedentemente "${oldValue === 'true' ? 'Abilitato' : 'Disabilitato'}")`, - updateMaxExpenseAmountNoReceipt: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `ha modificato l’importo massimo per cui è richiesta la ricevuta a ${newValue} (in precedenza ${oldValue})`, - updateMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `ha modificato l’importo massimo della spesa per violazioni a ${newValue} (in precedenza ${oldValue})`, - updateMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `aggiornato "Età massima spesa (giorni)" a "${newValue}" (in precedenza "${oldValue === 'false' ? CONST.POLICY.DEFAULT_MAX_EXPENSE_AGE : oldValue}")`, updateMonthlyOffset: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => { if (!oldValue) { return `imposta la data di invio del report mensile su "${newValue}"`; @@ -6639,6 +6633,15 @@ Richiedi dettagli di spesa come ricevute e descrizioni, imposta limiti e valori } } }, + setReceiptRequiredAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set receipt required amount to "${newValue}"`, + changedReceiptRequiredAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed receipt required amount to "${newValue}" (previously "${oldValue}")`, + removedReceiptRequiredAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed receipt required amount (previously "${oldValue}")`, + setMaxExpenseAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set max expense amount to "${newValue}"`, + changedMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed max expense amount to "${newValue}" (previously "${oldValue}")`, + removedMaxExpenseAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed max expense amount (previously "${oldValue}")`, + setMaxExpenseAge: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set max expense age to "${newValue}" days`, + changedMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed max expense age to "${newValue}" days (previously "${oldValue}")`, + removedMaxExpenseAge: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed max expense age (previously "${oldValue}" days)`, changedCustomReportNameFormula: ({newValue, oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `ha modificato la formula del nome del report personalizzato in "${newValue}" (precedentemente "${oldValue}")`, changedReimburser: ({newReimburser, previousReimburser}: UpdatedPolicyReimburserParams) => diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 2de48223ad318..1e0f1465b5e01 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -6435,10 +6435,6 @@ ${reportName} deleteReportField: (fieldType: string, fieldName?: string) => `${fieldType} レポートフィールド「${fieldName}」を削除しました`, preventSelfApproval: ({oldValue, newValue}: UpdatedPolicyPreventSelfApprovalParams) => `「自分自身での承認を防ぐ」を「${newValue === 'true' ? '有効' : '無効'}」(以前は「${oldValue === 'true' ? '有効' : '無効'}」)に更新しました`, - updateMaxExpenseAmountNoReceipt: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `最大領収書必須経費金額を${newValue}に変更しました(以前は${oldValue})`, - updateMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `違反となる経費の上限金額を${newValue}(以前は${oldValue})に変更しました`, - updateMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `「最大経費期間(日数)」を「${newValue}」(以前は「${oldValue === 'false' ? CONST.POLICY.DEFAULT_MAX_EXPENSE_AGE : oldValue}」)に更新しました`, updateMonthlyOffset: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => { if (!oldValue) { return `月次レポートの提出日を「${newValue}」に設定してください`; @@ -6586,6 +6582,15 @@ ${reportName} } } }, + setReceiptRequiredAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set receipt required amount to "${newValue}"`, + changedReceiptRequiredAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed receipt required amount to "${newValue}" (previously "${oldValue}")`, + removedReceiptRequiredAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed receipt required amount (previously "${oldValue}")`, + setMaxExpenseAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set max expense amount to "${newValue}"`, + changedMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed max expense amount to "${newValue}" (previously "${oldValue}")`, + removedMaxExpenseAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed max expense amount (previously "${oldValue}")`, + setMaxExpenseAge: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set max expense age to "${newValue}" days`, + changedMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed max expense age to "${newValue}" days (previously "${oldValue}")`, + removedMaxExpenseAge: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed max expense age (previously "${oldValue}" days)`, changedCustomReportNameFormula: ({newValue, oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `カスタムレポート名の数式を「${newValue}」(以前は「${oldValue}」)に変更しました`, changedReimburser: ({newReimburser, previousReimburser}: UpdatedPolicyReimburserParams) => diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 3d5fbcf93e7c7..ff93ef78706ef 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -6469,12 +6469,6 @@ Vraag verplichte uitgavedetails zoals bonnetjes en beschrijvingen, stel limieten deleteReportField: (fieldType: string, fieldName?: string) => `heeft ${fieldType}-rapportveld "${fieldName}" verwijderd`, preventSelfApproval: ({oldValue, newValue}: UpdatedPolicyPreventSelfApprovalParams) => `heeft "Zelfgoedkeuring voorkomen" bijgewerkt naar "${newValue === 'true' ? 'Ingeschakeld' : 'Uitgeschakeld'}" (voorheen "${oldValue === 'true' ? 'Ingeschakeld' : 'Uitgeschakeld'}")`, - updateMaxExpenseAmountNoReceipt: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `het maximale bedrag voor bonnetjesplichtige uitgaven gewijzigd naar ${newValue} (voorheen ${oldValue})`, - updateMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `het maximale onkostbedrag voor overtredingen gewijzigd naar ${newValue} (voorheen ${oldValue})`, - updateMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `"Maximale onkostenduur (dagen)" bijgewerkt naar "${newValue}" (voorheen "${oldValue === 'false' ? CONST.POLICY.DEFAULT_MAX_EXPENSE_AGE : oldValue}")`, updateMonthlyOffset: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => { if (!oldValue) { return `stel de maandelijkse rapportindieningsdatum in op "${newValue}"`; @@ -6630,6 +6624,15 @@ Vraag verplichte uitgavedetails zoals bonnetjes en beschrijvingen, stel limieten previousForwardsTo ? `heeft de goedkeuringsworkflow voor ${approver} gewijzigd zodat goedgekeurde rapporten niet meer worden doorgestuurd (voorheen doorgestuurd naar ${previousForwardsTo})` : `heeft de goedkeuringsworkflow voor ${approver} gewijzigd zodat goedgekeurde rapporten niet meer worden doorgestuurd`, + setReceiptRequiredAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set receipt required amount to "${newValue}"`, + changedReceiptRequiredAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed receipt required amount to "${newValue}" (previously "${oldValue}")`, + removedReceiptRequiredAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed receipt required amount (previously "${oldValue}")`, + setMaxExpenseAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set max expense amount to "${newValue}"`, + changedMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed max expense amount to "${newValue}" (previously "${oldValue}")`, + removedMaxExpenseAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed max expense amount (previously "${oldValue}")`, + setMaxExpenseAge: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set max expense age to "${newValue}" days`, + changedMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed max expense age to "${newValue}" days (previously "${oldValue}")`, + removedMaxExpenseAge: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed max expense age (previously "${oldValue}" days)`, changedReimburser: ({newReimburser, previousReimburser}: UpdatedPolicyReimburserParams) => previousReimburser ? `heeft de gemachtigde betaler gewijzigd in "${newReimburser}" (voorheen "${previousReimburser}")` diff --git a/src/languages/pl.ts b/src/languages/pl.ts index bf662880e1c7c..dee93876af4f1 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -6456,12 +6456,6 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i deleteReportField: (fieldType: string, fieldName?: string) => `usunięto pole raportu ${fieldType} „${fieldName}”`, preventSelfApproval: ({oldValue, newValue}: UpdatedPolicyPreventSelfApprovalParams) => `zaktualizowano „Uniemożliwiaj samodzielne zatwierdzanie” na „${newValue === 'true' ? 'Włączone' : 'Wyłączone'}” (wcześniej „${oldValue === 'true' ? 'Włączone' : 'Wyłączone'}”)`, - updateMaxExpenseAmountNoReceipt: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `zmienił maksymalną kwotę wydatku wymagającą paragonu na ${newValue} (wcześniej ${oldValue})`, - updateMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `zmieniono maksymalną kwotę wydatku dla naruszeń na ${newValue} (wcześniej ${oldValue})`, - updateMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `zaktualizowano „Maksymalny wiek wydatku (dni)” na „${newValue}” (poprzednio „${oldValue === 'false' ? CONST.POLICY.DEFAULT_MAX_EXPENSE_AGE : oldValue}”)`, updateMonthlyOffset: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => { if (!oldValue) { return `ustaw comiesięczną datę przesyłania raportu na „${newValue}”`; @@ -6615,6 +6609,15 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i previousForwardsTo ? `zmieniono proces zatwierdzania dla ${approver}, aby przestać przekazywać zatwierdzone raporty (wcześniej przekazywane do ${previousForwardsTo})` : `zmieniono przepływ zatwierdzania dla ${approver}, aby nie przekazywać dalej zatwierdzonych raportów`, + setReceiptRequiredAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set receipt required amount to "${newValue}"`, + changedReceiptRequiredAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed receipt required amount to "${newValue}" (previously "${oldValue}")`, + removedReceiptRequiredAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed receipt required amount (previously "${oldValue}")`, + setMaxExpenseAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set max expense amount to "${newValue}"`, + changedMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed max expense amount to "${newValue}" (previously "${oldValue}")`, + removedMaxExpenseAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed max expense amount (previously "${oldValue}")`, + setMaxExpenseAge: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set max expense age to "${newValue}" days`, + changedMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed max expense age to "${newValue}" days (previously "${oldValue}")`, + removedMaxExpenseAge: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed max expense age (previously "${oldValue}" days)`, changedReimburser: ({newReimburser, previousReimburser}: UpdatedPolicyReimburserParams) => previousReimburser ? `zmieniono upoważnionego płatnika na „${newReimburser}” (wcześniej „${previousReimburser}”)` diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 9fd676b0c7ba2..5ee2a3e7e70b4 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -6458,12 +6458,6 @@ Exija detalhes de despesas como recibos e descrições, defina limites e padrõe deleteReportField: (fieldType: string, fieldName?: string) => `removeu o Campo de Relatório de ${fieldType} "${fieldName}"`, preventSelfApproval: ({oldValue, newValue}: UpdatedPolicyPreventSelfApprovalParams) => `atualizado "Evitar autoaprovação" para "${newValue === 'true' ? 'Ativado' : 'Desativado'}" (anteriormente "${oldValue === 'true' ? 'Ativado' : 'Desativado'}")`, - updateMaxExpenseAmountNoReceipt: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `alterou o valor máximo de despesa que exige recibo para ${newValue} (antes ${oldValue})`, - updateMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `alterou o valor máximo de despesa para violações para ${newValue} (anteriormente ${oldValue})`, - updateMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `atualizado "Idade máxima da despesa (dias)" para "${newValue}" (anteriormente "${oldValue === 'false' ? CONST.POLICY.DEFAULT_MAX_EXPENSE_AGE : oldValue}")`, updateMonthlyOffset: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => { if (!oldValue) { return `defina a data de envio do relatório mensal para "${newValue}"`; @@ -6617,6 +6611,15 @@ Exija detalhes de despesas como recibos e descrições, defina limites e padrõe } } }, + setReceiptRequiredAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set receipt required amount to "${newValue}"`, + changedReceiptRequiredAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed receipt required amount to "${newValue}" (previously "${oldValue}")`, + removedReceiptRequiredAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed receipt required amount (previously "${oldValue}")`, + setMaxExpenseAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set max expense amount to "${newValue}"`, + changedMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed max expense amount to "${newValue}" (previously "${oldValue}")`, + removedMaxExpenseAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed max expense amount (previously "${oldValue}")`, + setMaxExpenseAge: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set max expense age to "${newValue}" days`, + changedMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed max expense age to "${newValue}" days (previously "${oldValue}")`, + removedMaxExpenseAge: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed max expense age (previously "${oldValue}" days)`, changedCustomReportNameFormula: ({newValue, oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `alterou a fórmula do nome do relatório personalizado para "${newValue}" (anteriormente "${oldValue}")`, changedReimburser: ({newReimburser, previousReimburser}: UpdatedPolicyReimburserParams) => diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 77e56f69205c7..dd16d15864724 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -6329,10 +6329,6 @@ ${reportName} deleteReportField: (fieldType: string, fieldName?: string) => `已移除 ${fieldType} 报告字段“${fieldName}”`, preventSelfApproval: ({oldValue, newValue}: UpdatedPolicyPreventSelfApprovalParams) => `已将“Prevent self-approval”更新为“${newValue === 'true' ? '已启用' : '已禁用'}”(先前为“${oldValue === 'true' ? '已启用' : '已禁用'}”)`, - updateMaxExpenseAmountNoReceipt: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `将需要收据的报销金额上限更改为 ${newValue}(之前为 ${oldValue})`, - updateMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `将违规的最高报销金额更改为 ${newValue}(之前为 ${oldValue})`, - updateMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => - `已将“费用最长期限(天)”更新为“${newValue}”(之前为“${oldValue === 'false' ? CONST.POLICY.DEFAULT_MAX_EXPENSE_AGE : oldValue}”)`, updateMonthlyOffset: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => { if (!oldValue) { return `将月度报表提交日期设置为“${newValue}”`; @@ -6475,6 +6471,15 @@ ${reportName} } } }, + setReceiptRequiredAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `set receipt required amount to "${newValue}"`, + changedReceiptRequiredAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `changed receipt required amount to "${newValue}" (previously "${oldValue}")`, + removedReceiptRequiredAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `removed receipt required amount (previously "${oldValue}")`, + setMaxExpenseAmount: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `将最大报销金额设置为“${newValue}”`, + changedMaxExpenseAmount: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `将最高报销金额更改为“${newValue}”(之前为“${oldValue}”)`, + removedMaxExpenseAmount: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `已移除最高报销金额(原为“${oldValue}”)`, + setMaxExpenseAge: ({newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `将最高报销天数设置为“${newValue}”天`, + changedMaxExpenseAge: ({oldValue, newValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `将最大报销天数更改为“${newValue}”天(之前为“${oldValue}”)`, + removedMaxExpenseAge: ({oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `移除最大报销时限(之前为“${oldValue}”天)`, changedCustomReportNameFormula: ({newValue, oldValue}: UpdatedPolicyFieldWithNewAndOldValueParams) => `将自定义报表名称公式更改为“${newValue}”(之前为“${oldValue}”)`, changedReimburser: ({newReimburser, previousReimburser}: UpdatedPolicyReimburserParams) => previousReimburser ? `将授权付款人更改为“${newReimburser}”(原为“${previousReimburser}”)` : `已将授权付款人更改为“${newReimburser}”`, diff --git a/src/libs/OptionsListUtils/index.ts b/src/libs/OptionsListUtils/index.ts index 04ce7ea18f5bd..923dd8b993ec1 100644 --- a/src/libs/OptionsListUtils/index.ts +++ b/src/libs/OptionsListUtils/index.ts @@ -47,6 +47,8 @@ import { getMessageOfOldDotReportAction, getOneTransactionThreadReportID, getOriginalMessage, + getPolicyChangeLogMaxExpenseAgeMessage, + getPolicyChangeLogMaxExpenseAmountMessage, getRenamedAction, getReportActionActorAccountID, getReportActionHtml, @@ -813,6 +815,14 @@ function getLastMessageTextForReport({ // eslint-disable-next-line @typescript-eslint/no-deprecated lastMessageTextFromReport = getDynamicExternalWorkflowRoutedMessage(lastReportAction, translateLocal); } + if (isActionOfType(lastReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AMOUNT)) { + // eslint-disable-next-line @typescript-eslint/no-deprecated + lastMessageTextFromReport = getPolicyChangeLogMaxExpenseAmountMessage(translateLocal, lastReportAction); + } + if (isActionOfType(lastReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AGE)) { + // eslint-disable-next-line @typescript-eslint/no-deprecated + lastMessageTextFromReport = getPolicyChangeLogMaxExpenseAgeMessage(translateLocal, lastReportAction); + } // we do not want to show report closed in LHN for non archived report so use getReportLastMessage as fallback instead of lastMessageText from report if (reportID && !isReportArchived && report.lastActionType === CONST.REPORT.ACTIONS.TYPE.CLOSED) { diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index 9eadb48976a08..d27f09edce994 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -2915,11 +2915,27 @@ function getWorkspaceUpdateFieldMessage(translate: LocalizedTranslate, action: R }); } - if (updatedField && updatedField === CONST.POLICY.EXPENSE_REPORT_RULES.MAX_EXPENSE_AGE && typeof oldValue === 'string' && typeof newValue === 'string') { - return translate('workspaceActions.updateMaxExpenseAge', { - oldValue, - newValue, - }); + if ( + updatedField && + updatedField === CONST.POLICY.EXPENSE_REPORT_RULES.MAX_EXPENSE_AGE && + ((typeof oldValue === 'string' && typeof newValue === 'string') || (typeof oldValue === 'number' && typeof newValue === 'number')) + ) { + const isDisabled = (value: string | number): boolean => { + return value === String(CONST.POLICY.DISABLED_MAX_EXPENSE_AGE) || value === CONST.POLICY.DISABLED_MAX_EXPENSE_AGE || value === 'false'; + }; + const oldIsDisabled = isDisabled(oldValue); + const newIsDisabled = isDisabled(newValue); + const oldFormatted = oldIsDisabled ? '' : String(oldValue); + const newFormatted = newIsDisabled ? '' : String(newValue); + + if (oldIsDisabled && !newIsDisabled) { + return translate('workspaceActions.setMaxExpenseAge', {oldValue: oldFormatted, newValue: newFormatted}); + } + + if (!oldIsDisabled && newIsDisabled) { + return translate('workspaceActions.removedMaxExpenseAge', {oldValue: oldFormatted, newValue: newFormatted}); + } + return translate('workspaceActions.changedMaxExpenseAge', {oldValue: oldFormatted, newValue: newFormatted}); } if ( updatedField && @@ -3148,10 +3164,20 @@ function getPolicyChangeLogMaxExpenseAmountNoReceiptMessage(translate: Localized getOriginalMessage(action as ReportAction) ?? {}; if (typeof oldMaxExpenseAmountNoReceipt === 'number' && typeof newMaxExpenseAmountNoReceipt === 'number') { - return translate('workspaceActions.updateMaxExpenseAmountNoReceipt', { - oldValue: convertToDisplayString(oldMaxExpenseAmountNoReceipt, currency), - newValue: convertToDisplayString(newMaxExpenseAmountNoReceipt, currency), - }); + const oldIsDisabled = oldMaxExpenseAmountNoReceipt === CONST.DISABLED_MAX_EXPENSE_VALUE; + const newIsDisabled = newMaxExpenseAmountNoReceipt === CONST.DISABLED_MAX_EXPENSE_VALUE; + const oldValue = oldIsDisabled ? '' : convertToDisplayString(oldMaxExpenseAmountNoReceipt, currency); + const newValue = newIsDisabled ? '' : convertToDisplayString(newMaxExpenseAmountNoReceipt, currency); + + if (oldIsDisabled && !newIsDisabled) { + return translate('workspaceActions.setReceiptRequiredAmount', {oldValue, newValue}); + } + + if (!oldIsDisabled && newIsDisabled) { + return translate('workspaceActions.removedReceiptRequiredAmount', {oldValue, newValue}); + } + + return translate('workspaceActions.changedReceiptRequiredAmount', {oldValue, newValue}); } return getReportActionText(action); @@ -3162,10 +3188,43 @@ function getPolicyChangeLogMaxExpenseAmountMessage(translate: LocalizedTranslate getOriginalMessage(action as ReportAction) ?? {}; if (typeof oldMaxExpenseAmount === 'number' && typeof newMaxExpenseAmount === 'number') { - return translate('workspaceActions.updateMaxExpenseAmount', { - oldValue: convertToDisplayString(oldMaxExpenseAmount, currency), - newValue: convertToDisplayString(newMaxExpenseAmount, currency), - }); + const oldIsDisabled = oldMaxExpenseAmount === CONST.DISABLED_MAX_EXPENSE_VALUE; + const newIsDisabled = newMaxExpenseAmount === CONST.DISABLED_MAX_EXPENSE_VALUE; + const oldValue = oldIsDisabled ? '' : convertToDisplayString(oldMaxExpenseAmount, currency); + const newValue = newIsDisabled ? '' : convertToDisplayString(newMaxExpenseAmount, currency); + + if (oldIsDisabled && !newIsDisabled) { + return translate('workspaceActions.setMaxExpenseAmount', {oldValue, newValue}); + } + + if (!oldIsDisabled && newIsDisabled) { + return translate('workspaceActions.removedMaxExpenseAmount', {oldValue, newValue}); + } + + return translate('workspaceActions.changedMaxExpenseAmount', {oldValue, newValue}); + } + + return getReportActionText(action); +} + +function getPolicyChangeLogMaxExpenseAgeMessage(translate: LocalizedTranslate, action: ReportAction): string { + const {oldMaxExpenseAge, newMaxExpenseAge} = getOriginalMessage(action as ReportAction) ?? {}; + + if (typeof oldMaxExpenseAge === 'number' && typeof newMaxExpenseAge === 'number') { + const oldIsDisabled = oldMaxExpenseAge === CONST.POLICY.DISABLED_MAX_EXPENSE_AGE; + const newIsDisabled = newMaxExpenseAge === CONST.POLICY.DISABLED_MAX_EXPENSE_AGE; + const oldValue = oldIsDisabled ? '' : String(oldMaxExpenseAge); + const newValue = newIsDisabled ? '' : String(newMaxExpenseAge); + + if (oldIsDisabled && !newIsDisabled) { + return translate('workspaceActions.setMaxExpenseAge', {oldValue, newValue}); + } + + if (!oldIsDisabled && newIsDisabled) { + return translate('workspaceActions.removedMaxExpenseAge', {oldValue, newValue}); + } + + return translate('workspaceActions.changedMaxExpenseAge', {oldValue, newValue}); } return getReportActionText(action); @@ -3785,6 +3844,7 @@ export { getWorkspaceFrequencyUpdateMessage, getPolicyChangeLogMaxExpenseAmountNoReceiptMessage, getPolicyChangeLogMaxExpenseAmountMessage, + getPolicyChangeLogMaxExpenseAgeMessage, getPolicyChangeLogDefaultBillableMessage, getPolicyChangeLogDefaultTitleMessage, getPolicyChangeLogDefaultTitleEnforcedMessage, diff --git a/src/libs/ReportNameUtils.ts b/src/libs/ReportNameUtils.ts index c9b15e8e6bf3d..160354f99dcaa 100644 --- a/src/libs/ReportNameUtils.ts +++ b/src/libs/ReportNameUtils.ts @@ -44,6 +44,8 @@ import { getPolicyChangeLogDefaultReimbursableMessage, getPolicyChangeLogDefaultTitleEnforcedMessage, getPolicyChangeLogDefaultTitleMessage, + getPolicyChangeLogMaxExpenseAgeMessage, + getPolicyChangeLogMaxExpenseAmountMessage, getPolicyChangeLogMaxExpenseAmountNoReceiptMessage, getRenamedAction, getReportActionMessage as getReportActionMessageFromActionsUtils, @@ -446,6 +448,14 @@ function computeReportNameBasedOnReportAction(parentReportAction?: ReportAction, // eslint-disable-next-line @typescript-eslint/no-deprecated return getPolicyChangeLogDefaultReimbursableMessage(translateLocal, parentReportAction); } + if (isActionOfType(parentReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AMOUNT)) { + // eslint-disable-next-line @typescript-eslint/no-deprecated + return getPolicyChangeLogMaxExpenseAmountMessage(translateLocal, parentReportAction); + } + if (isActionOfType(parentReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AGE)) { + // eslint-disable-next-line @typescript-eslint/no-deprecated + return getPolicyChangeLogMaxExpenseAgeMessage(translateLocal, parentReportAction); + } if (isActionOfType(parentReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_DEFAULT_TITLE_ENFORCED)) { // eslint-disable-next-line @typescript-eslint/no-deprecated return getPolicyChangeLogDefaultTitleEnforcedMessage(translateLocal, parentReportAction); diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index 2c00bc38705e3..84db1eded2bc2 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -203,6 +203,8 @@ import { getPolicyChangeLogDefaultReimbursableMessage, getPolicyChangeLogDefaultTitleEnforcedMessage, getPolicyChangeLogDefaultTitleMessage, + getPolicyChangeLogMaxExpenseAgeMessage, + getPolicyChangeLogMaxExpenseAmountMessage, getPolicyChangeLogMaxExpenseAmountNoReceiptMessage, getReimburserUpdateMessage, getRenamedAction, @@ -5689,7 +5691,14 @@ function getReportName( if (isActionOfType(parentReportAction, CONST.REPORT.ACTIONS.TYPE.MOVED_TRANSACTION)) { return Parser.htmlToText(getMovedTransactionMessage(parentReportAction)); } - + if (isActionOfType(parentReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AMOUNT)) { + // eslint-disable-next-line @typescript-eslint/no-deprecated + return getPolicyChangeLogMaxExpenseAmountMessage(translateLocal, parentReportAction); + } + if (isActionOfType(parentReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AGE)) { + // eslint-disable-next-line @typescript-eslint/no-deprecated + return getPolicyChangeLogMaxExpenseAgeMessage(translateLocal, parentReportAction); + } if (isActionOfType(parentReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AMOUNT_NO_RECEIPT)) { // eslint-disable-next-line @typescript-eslint/no-deprecated return getPolicyChangeLogMaxExpenseAmountNoReceiptMessage(translateLocal, parentReportAction); diff --git a/src/libs/SidebarUtils.ts b/src/libs/SidebarUtils.ts index d9897958966d7..82b1de80684e0 100644 --- a/src/libs/SidebarUtils.ts +++ b/src/libs/SidebarUtils.ts @@ -48,6 +48,7 @@ import { getPolicyChangeLogDefaultTitleMessage, getPolicyChangeLogDeleteMemberMessage, getPolicyChangeLogEmployeeLeftMessage, + getPolicyChangeLogMaxExpenseAgeMessage, getPolicyChangeLogMaxExpenseAmountMessage, getPolicyChangeLogMaxExpenseAmountNoReceiptMessage, getPolicyChangeLogUpdateEmployee, @@ -919,6 +920,8 @@ function getOptionData({ result.alternateText = getPolicyChangeLogMaxExpenseAmountNoReceiptMessage(translate, lastAction); } else if (lastAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AMOUNT) { result.alternateText = getPolicyChangeLogMaxExpenseAmountMessage(translate, lastAction); + } else if (lastAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AGE) { + result.alternateText = getPolicyChangeLogMaxExpenseAgeMessage(translate, lastAction); } else if (lastAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_DEFAULT_BILLABLE) { result.alternateText = getPolicyChangeLogDefaultBillableMessage(translate, lastAction); } else if (lastAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_DEFAULT_REIMBURSABLE) { diff --git a/src/pages/home/report/ContextMenu/ContextMenuActions.tsx b/src/pages/home/report/ContextMenu/ContextMenuActions.tsx index 61ae34f752c7f..017607b741343 100644 --- a/src/pages/home/report/ContextMenu/ContextMenuActions.tsx +++ b/src/pages/home/report/ContextMenu/ContextMenuActions.tsx @@ -53,6 +53,7 @@ import { getPolicyChangeLogDefaultTitleEnforcedMessage, getPolicyChangeLogDefaultTitleMessage, getPolicyChangeLogDeleteMemberMessage, + getPolicyChangeLogMaxExpenseAgeMessage, getPolicyChangeLogMaxExpenseAmountMessage, getPolicyChangeLogMaxExpenseAmountNoReceiptMessage, getPolicyChangeLogUpdateEmployee, @@ -758,6 +759,8 @@ const ContextMenuActions: ContextMenuAction[] = [ Clipboard.setString(getPolicyChangeLogMaxExpenseAmountNoReceiptMessage(translate, reportAction)); } else if (reportAction.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AMOUNT) { Clipboard.setString(getPolicyChangeLogMaxExpenseAmountMessage(translate, reportAction)); + } else if (reportAction.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AGE) { + Clipboard.setString(getPolicyChangeLogMaxExpenseAgeMessage(translate, reportAction)); } else if (reportAction.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_DEFAULT_BILLABLE) { Clipboard.setString(getPolicyChangeLogDefaultBillableMessage(translate, reportAction)); } else if (reportAction.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_DEFAULT_REIMBURSABLE) { diff --git a/src/pages/home/report/PureReportActionItem.tsx b/src/pages/home/report/PureReportActionItem.tsx index 172fd5f1c900f..a4151ca808fc7 100644 --- a/src/pages/home/report/PureReportActionItem.tsx +++ b/src/pages/home/report/PureReportActionItem.tsx @@ -90,6 +90,7 @@ import { getPolicyChangeLogDefaultTitleEnforcedMessage, getPolicyChangeLogDefaultTitleMessage, getPolicyChangeLogDeleteMemberMessage, + getPolicyChangeLogMaxExpenseAgeMessage, getPolicyChangeLogMaxExpenseAmountMessage, getPolicyChangeLogMaxExpenseAmountNoReceiptMessage, getPolicyChangeLogUpdateEmployee, @@ -1486,6 +1487,8 @@ function PureReportActionItem({ children = ; } else if (isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AMOUNT)) { children = ; + } else if (isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AGE)) { + children = ; } else if (isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_DEFAULT_BILLABLE)) { children = ; } else if (isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_DEFAULT_REIMBURSABLE)) { diff --git a/src/types/onyx/OriginalMessage.ts b/src/types/onyx/OriginalMessage.ts index 3bee8474ef840..b677fc1356610 100644 --- a/src/types/onyx/OriginalMessage.ts +++ b/src/types/onyx/OriginalMessage.ts @@ -455,6 +455,12 @@ type OriginalMessagePolicyChangeLog = { /** New value for max expense amount for violations */ newMaxExpenseAmount?: number; + /** Old value for max expense age (days) */ + oldMaxExpenseAge?: number; + + /** New value for max expense age (days) */ + newMaxExpenseAge?: number; + /** Old default billable value */ oldDefaultBillable?: string; diff --git a/tests/unit/ReportActionsUtilsTest.ts b/tests/unit/ReportActionsUtilsTest.ts index 9c513195db2c0..83981925989a7 100644 --- a/tests/unit/ReportActionsUtilsTest.ts +++ b/tests/unit/ReportActionsUtilsTest.ts @@ -16,6 +16,9 @@ import { getCreatedReportForUnapprovedTransactionsMessage, getOneTransactionThreadReportID, getOriginalMessage, + getPolicyChangeLogMaxExpenseAgeMessage, + getPolicyChangeLogMaxExpenseAmountMessage, + getPolicyChangeLogMaxExpenseAmountNoReceiptMessage, getReportActionActorAccountID, getSendMoneyFlowAction, isIOUActionMatchingTransactionList, @@ -2319,6 +2322,144 @@ describe('ReportActionsUtils', () => { }); }); + describe('getPolicyChangeLogMaxExpenseAmountMessage', () => { + it('should return set message when setting from disabled to a value', () => { + const action = { + actionName: CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AMOUNT, + reportActionID: '1', + created: '', + originalMessage: { + oldMaxExpenseAmount: CONST.POLICY.DISABLED_MAX_EXPENSE_AGE, + newMaxExpenseAmount: 10000, + currency: 'USD', + }, + } as ReportAction; + const result = getPolicyChangeLogMaxExpenseAmountMessage(translateLocal, action); + expect(result).toBe('set max expense amount to "$100.00"'); + }); + + it('should return removed message when setting to disabled', () => { + const action = { + actionName: CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AMOUNT, + reportActionID: '1', + created: '', + originalMessage: { + oldMaxExpenseAmount: 10000, + newMaxExpenseAmount: CONST.POLICY.DISABLED_MAX_EXPENSE_AGE, + currency: 'USD', + }, + } as ReportAction; + const result = getPolicyChangeLogMaxExpenseAmountMessage(translateLocal, action); + expect(result).toBe('removed max expense amount (previously "$100.00")'); + }); + + it('should return changed message when changing from one value to another', () => { + const action = { + actionName: CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AMOUNT, + reportActionID: '1', + created: '', + originalMessage: { + oldMaxExpenseAmount: 10000, + newMaxExpenseAmount: 50000, + currency: 'USD', + }, + } as ReportAction; + const result = getPolicyChangeLogMaxExpenseAmountMessage(translateLocal, action); + expect(result).toBe('changed max expense amount to "$500.00" (previously "$100.00")'); + }); + }); + + describe('getPolicyChangeLogMaxExpenseAgeMessage', () => { + it('should return set message when setting from disabled to a value', () => { + const action = { + actionName: CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AGE, + reportActionID: '1', + created: '', + originalMessage: { + oldMaxExpenseAge: CONST.POLICY.DISABLED_MAX_EXPENSE_AGE, + newMaxExpenseAge: 30, + }, + } as ReportAction; + const result = getPolicyChangeLogMaxExpenseAgeMessage(translateLocal, action); + expect(result).toBe('set max expense age to "30" days'); + }); + + it('should return removed message when setting to disabled', () => { + const action = { + actionName: CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AGE, + reportActionID: '1', + created: '', + originalMessage: { + oldMaxExpenseAge: 30, + newMaxExpenseAge: CONST.POLICY.DISABLED_MAX_EXPENSE_AGE, + }, + } as ReportAction; + const result = getPolicyChangeLogMaxExpenseAgeMessage(translateLocal, action); + expect(result).toBe('removed max expense age (previously "30" days)'); + }); + + it('should return changed message when changing from one value to another', () => { + const action = { + actionName: CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AGE, + reportActionID: '1', + created: '', + originalMessage: { + oldMaxExpenseAge: 30, + newMaxExpenseAge: 60, + }, + } as ReportAction; + const result = getPolicyChangeLogMaxExpenseAgeMessage(translateLocal, action); + expect(result).toBe('changed max expense age to "60" days (previously "30")'); + }); + }); + + describe('getPolicyChangeLogMaxExpenseAmountNoReceiptMessage', () => { + it('should return set message when setting from disabled to a value', () => { + const action = { + actionName: CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AMOUNT_NO_RECEIPT, + reportActionID: '1', + created: '', + originalMessage: { + oldMaxExpenseAmountNoReceipt: CONST.POLICY.DISABLED_MAX_EXPENSE_AGE, + newMaxExpenseAmountNoReceipt: 2500, + currency: 'USD', + }, + } as ReportAction; + const result = getPolicyChangeLogMaxExpenseAmountNoReceiptMessage(translateLocal, action); + expect(result).toBe('set receipt required amount to "$25.00"'); + }); + + it('should return removed message when setting to disabled', () => { + const action = { + actionName: CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AMOUNT_NO_RECEIPT, + reportActionID: '1', + created: '', + originalMessage: { + oldMaxExpenseAmountNoReceipt: 2500, + newMaxExpenseAmountNoReceipt: CONST.POLICY.DISABLED_MAX_EXPENSE_AGE, + currency: 'USD', + }, + } as ReportAction; + const result = getPolicyChangeLogMaxExpenseAmountNoReceiptMessage(translateLocal, action); + expect(result).toBe('removed receipt required amount (previously "$25.00")'); + }); + + it('should return changed message when changing from one value to another', () => { + const action = { + actionName: CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_MAX_EXPENSE_AMOUNT_NO_RECEIPT, + reportActionID: '1', + created: '', + originalMessage: { + oldMaxExpenseAmountNoReceipt: 2500, + newMaxExpenseAmountNoReceipt: 7500, + currency: 'USD', + }, + } as ReportAction; + const result = getPolicyChangeLogMaxExpenseAmountNoReceiptMessage(translateLocal, action); + expect(result).toBe('changed receipt required amount to "$75.00" (previously "$25.00")'); + }); + }); + describe('getCompanyAddressUpdateMessage', () => { it('should return "set" message when setting address for first time', () => { const action = {