Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
4648353
feat: add reject report level
truph01 Mar 11, 2026
12b845a
Merge branch 'main' into feat/82794
truph01 Mar 11, 2026
8aaab46
fix: prettier
truph01 Mar 11, 2026
ea64d8a
fix: lint
truph01 Mar 11, 2026
0cab84e
Merge branch 'Expensify:main' into feat/82794
truph01 Mar 12, 2026
393c69c
fix: update param
truph01 Mar 12, 2026
5979899
fix: update isRejectedReport
truph01 Mar 12, 2026
74e8711
fix: update translation
truph01 Mar 12, 2026
c0498c1
fix: update trans
truph01 Mar 12, 2026
2f6b863
fix: update trans
truph01 Mar 12, 2026
049d53f
fix: reason page UI
truph01 Mar 12, 2026
b6a3a2b
Merge branch 'Expensify:main' into feat/82794
truph01 Mar 13, 2026
d82e964
fix: add multiline
truph01 Mar 13, 2026
a040edb
fix: remove getCurrentUserDisplayNameOrEmail()
truph01 Mar 13, 2026
c032ad8
fix: add actorAccountID param
truph01 Mar 13, 2026
1433bd0
fix: remove useMemo
truph01 Mar 13, 2026
33df5eb
fix: add test
truph01 Mar 13, 2026
2cba861
Merge branch 'Expensify:main' into feat/82794
truph01 Mar 16, 2026
6cf46c6
fix: RejectExpenseReportPage minor style
truph01 Mar 16, 2026
5bc7627
Merge branch 'Expensify:main' into feat/82794
truph01 Mar 17, 2026
239b6c2
Merge branch 'Expensify:main' into feat/82794
truph01 Mar 19, 2026
e099a9d
fix: update reason input
truph01 Mar 19, 2026
ba5a405
Merge branch 'Expensify:main' into feat/82794
truph01 Mar 21, 2026
2481011
fix: lint
truph01 Mar 21, 2026
f2431d1
fix: lint
truph01 Mar 21, 2026
d044e3f
fix: prettier
truph01 Mar 21, 2026
7dbb338
fix: remove useMemo, useCallback
truph01 Mar 21, 2026
4b5e4f4
fix: add missing translations
truph01 Mar 21, 2026
47fdead
fix: all comments
truph01 Mar 21, 2026
4dbdc70
fix: add delegate restrict
truph01 Mar 21, 2026
dea199f
fix: lint
truph01 Mar 21, 2026
6743bfb
fix: remove targetAccountID and update reportID param to report
truph01 Mar 22, 2026
5cced69
fix: use getLoginByAccountID
truph01 Mar 22, 2026
086ae72
fix: use previousApprover.email directly
truph01 Mar 22, 2026
23f9201
fix: use getLoginByAccountID
truph01 Mar 22, 2026
7ee2809
fix: prettier
truph01 Mar 22, 2026
d668a98
fix: add onBeforeSubmit
truph01 Mar 22, 2026
14fc062
fix: add error message when rejecting fail
truph01 Mar 22, 2026
0268b7e
fix: bypassing case
truph01 Mar 22, 2026
f371acb
fix: use buildOptimisticNextStep parellel
truph01 Mar 22, 2026
66ce756
fix: update next step when rejecting to previous approver
truph01 Mar 22, 2026
d8b2092
fix: lint
truph01 Mar 22, 2026
48380eb
fix: conflicts
truph01 Mar 23, 2026
c0403d3
fix: conflicts
truph01 Mar 23, 2026
b8e01e0
fix: lint
truph01 Mar 23, 2026
86ea7d0
fix: keep showing reject action in fail
truph01 Mar 23, 2026
90dc422
fix: add translations
truph01 Mar 24, 2026
8003bad
Merge branch 'Expensify:main' into feat/82794
truph01 Mar 25, 2026
92912c5
Merge branch 'Expensify:main' into feat/82794
truph01 Mar 26, 2026
601ba7e
fix: navigation issue
truph01 Mar 26, 2026
0c9dcc4
Merge branch 'Expensify:main' into feat/82794
truph01 Mar 26, 2026
0614866
Merge branch 'Expensify:main' into feat/82794
truph01 Mar 27, 2026
129a490
Merge branch 'Expensify:main' into feat/82794
truph01 Mar 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -619,6 +619,7 @@
"reimbursible",
"Reimbursments",
"REJECTEDTRANSACTION",
"REJECTEDTOSUBMITTER",
"remotedesktop",
"remotesync",
"removeHiddenElems",
Expand Down
1 change: 1 addition & 0 deletions src/CONST/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1720,6 +1720,7 @@ const CONST = {
WAITING_FOR_PAYMENT: 'waitingForPayment',
WAITING_TO_EXPORT: 'waitingToExport',
SUBMITTING_TO_SELF: 'submittingToSelf',
REJECTED_REPORT: 'rejectedReport',
},
ICONS: {
HOURGLASS: 'hourglass',
Expand Down
3 changes: 3 additions & 0 deletions src/ONYXKEYS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -915,6 +915,8 @@ const ONYXKEYS = {
MONEY_REQUEST_HOLD_FORM_DRAFT: 'moneyHoldReasonFormDraft',
MONEY_REQUEST_REJECT_FORM: 'moneyRejectReasonForm',
MONEY_REQUEST_REJECT_FORM_DRAFT: 'moneyRejectReasonFormDraft',
REPORT_REJECT_FORM: 'reportRejectForm',
REPORT_REJECT_FORM_DRAFT: 'reportRejectFormDraft',
MONEY_REQUEST_COMPANY_INFO_FORM: 'moneyRequestCompanyInfoForm',
MONEY_REQUEST_COMPANY_INFO_FORM_DRAFT: 'moneyRequestCompanyInfoFormDraft',
MONEY_REQUEST_TIME_FORM: 'moneyRequestTimeForm',
Expand Down Expand Up @@ -1116,6 +1118,7 @@ type OnyxFormValuesMapping = {
[ONYXKEYS.FORMS.MONEY_REQUEST_SUBRATE_FORM]: FormTypes.MoneyRequestSubrateForm;
[ONYXKEYS.FORMS.MONEY_REQUEST_HOLD_FORM]: FormTypes.MoneyRequestHoldReasonForm;
[ONYXKEYS.FORMS.MONEY_REQUEST_REJECT_FORM]: FormTypes.MoneyRequestRejectReasonForm;
[ONYXKEYS.FORMS.REPORT_REJECT_FORM]: FormTypes.ReportRejectForm;
[ONYXKEYS.FORMS.MONEY_REQUEST_COMPANY_INFO_FORM]: FormTypes.MoneyRequestCompanyInfoForm;
[ONYXKEYS.FORMS.NEW_CONTACT_METHOD_FORM]: FormTypes.NewContactMethodForm;
[ONYXKEYS.FORMS.WAYPOINT_FORM]: FormTypes.WaypointForm;
Expand Down
4 changes: 4 additions & 0 deletions src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3966,6 +3966,10 @@ const ROUTES = {
route: 'reject/reason/:transactionID',
getRoute: (transactionID: string, reportID: string, backTo?: string) => `reject/reason/${transactionID}?reportID=${reportID}&backTo=${backTo}` as const,
},
REJECT_EXPENSE_REPORT: {
route: 'reports/reject/:reportID',
getRoute: (reportID: string) => `reports/reject/${reportID}` as const,
},
SCHEDULE_CALL_BOOK: {
route: 'r/:reportID/schedule-call/book',
getRoute: (reportID: string) => `r/${reportID}/schedule-call/book` as const,
Expand Down
1 change: 1 addition & 0 deletions src/SCREENS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,7 @@ const SCREENS = {
CREATE: 'Money_Request_Create',
HOLD: 'Money_Request_Hold_Reason',
REJECT: 'Money_Request_Reject_Reason',
REPORT_REJECT: 'Money_Request_Report_Reject',
STEP_CONFIRMATION: 'Money_Request_Step_Confirmation',
STEP_CONFIRMATION_VERIFY_ACCOUNT: 'Money_Request_Step_Confirmation_Verify_Account',
START: 'Money_Request_Start',
Expand Down
20 changes: 19 additions & 1 deletion src/components/Form/FormProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,9 @@ type FormProviderProps<TFormID extends OnyxFormKey = OnyxFormKey> = FormProps<TF
*/
keyboardSubmitBehavior?: ValueOf<typeof CONST.KEYBOARD_SUBMIT_BEHAVIOR>;

/** Callback fired synchronously when the user presses submit, before validation runs */
onBeforeSubmit?: () => void;

/** Reference to the outer element */
ref?: ForwardedRef<FormRef>;
};
Expand All @@ -132,6 +135,7 @@ function FormProvider({
shouldPreventDefaultFocusOnPressSubmit = false,
shouldHideFixErrorsAlert = false,
keyboardSubmitBehavior = CONST.KEYBOARD_SUBMIT_BEHAVIOR.DISMISS_THEN_SUBMIT,
onBeforeSubmit,
ref,
...rest
}: FormProviderProps) {
Expand Down Expand Up @@ -270,6 +274,8 @@ function FormProvider({
return;
}

onBeforeSubmit?.();

// Prepare values before submitting
const trimmedStringValues = shouldTrimValues ? prepareValues(inputValues) : inputValues;

Expand Down Expand Up @@ -300,7 +306,19 @@ function FormProvider({
} else {
onSubmit(trimmedStringValues);
}
}, [enabledWhenOffline, formState?.isLoading, inputValues, isLoading, network?.isOffline, onSubmit, onValidate, shouldTrimValues, hasServerError, keyboardSubmitBehavior]),
}, [
enabledWhenOffline,
formState?.isLoading,
inputValues,
isLoading,
network?.isOffline,
onSubmit,
onValidate,
shouldTrimValues,
hasServerError,
keyboardSubmitBehavior,
onBeforeSubmit,
]),
1000,
{leading: true, trailing: false},
);
Expand Down
9 changes: 2 additions & 7 deletions src/components/MoneyReportHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2154,15 +2154,10 @@ function MoneyReportHeader({reportID: reportIDProp, shouldDisplayBackButton = fa
return;
}

if (dismissedRejectUseExplanation) {
if (requestParentReportAction) {
rejectMoneyRequestReason(requestParentReportAction);
}
} else {
setRejectModalAction(CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.REJECT);
if (moneyRequestReport?.reportID) {
Navigation.navigate(ROUTES.REJECT_EXPENSE_REPORT.getRoute(moneyRequestReport.reportID));
}
},
shouldShow: transactions.length === 1,
},
[CONST.REPORT.SECONDARY_ACTIONS.ADD_EXPENSE]: {
text: translate('iou.addExpense'),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,20 @@ function ExpenseReportListItem<TItem extends ListItem>({
const hasAnyVisibleViolations = reportItem?.hasVisibleViolations || hasSyncedMissingAttendeesViolation;

const getDescription = useMemo(() => {
if (reportItem?.isRejectedReport) {
return (
<View style={[styles.flexRow, styles.alignItemsCenter, styles.mt2]}>
<Icon
src={expensifyIcons.DotIndicator}
fill={theme.danger}
additionalStyles={[styles.mr1]}
width={12}
height={12}
/>
<Text style={[styles.textMicro, styles.textDanger]}>{translate('iou.rejectReport.rejectedReportMessage')}</Text>
</View>
);
}
if (!hasAnyVisibleViolations || !shouldShowViolationDescription) {
return;
}
Expand All @@ -216,6 +230,7 @@ function ExpenseReportListItem<TItem extends ListItem>({
</View>
);
}, [
reportItem?.isRejectedReport,
hasAnyVisibleViolations,
shouldShowViolationDescription,
styles.flexRow,
Expand Down
3 changes: 3 additions & 0 deletions src/components/Search/SearchList/ListItem/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,9 @@ type TransactionGroupListItemType = ListItem & {

/** Whether the report has visible violations for user */
hasVisibleViolations?: boolean;

/** Whether the report was rejected (REJECTED or REJECTEDTOSUBMITTER) */
isRejectedReport?: boolean;
};

type ExpenseReportListItemType = TransactionReportGroupListItemType;
Expand Down
76 changes: 49 additions & 27 deletions src/languages/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1557,6 +1557,18 @@ const translations: TranslationDeepObject<typeof en> = {
markedAsResolved: 'hat den Ablehnungsgrund als gelöst markiert',
},
},
rejectReport: {
title: 'Bericht ablehnen',
description: 'Erläutern Sie, warum Sie diesen Bericht nicht genehmigen werden:',
rejectReason: 'Ablehnungsgrund',
selectTarget: 'Wählen Sie das Mitglied aus, an das dieser Bericht zur Überprüfung zurückgewiesen werden soll:',
lastApprover: 'Letzte*r Genehmigende*r',
submitter: 'Einreicher',
rejectedReportMessage: 'Dieser Bericht wurde abgelehnt.',
rejectedNextStep: 'Dieser Bericht wurde abgelehnt. Wir warten darauf, dass Sie die Probleme beheben und ihn manuell erneut einreichen.',
selectMemberError: 'Wählen Sie ein Mitglied aus, an das dieser Bericht zurückgewiesen werden soll.',
couldNotReject: 'Der Bericht konnte nicht abgelehnt werden. Bitte versuchen Sie es erneut.',
},
moveExpenses: 'Zum Bericht verschieben',
moveExpensesError: 'Sie können Pauschalspesen nicht in Berichte anderer Arbeitsbereiche verschieben, da die Pauschalsätze je nach Arbeitsbereich unterschiedlich sein können.',
changeApprover: {
Expand Down Expand Up @@ -1681,107 +1693,117 @@ const translations: TranslationDeepObject<typeof en> = {
[CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: ({actor, actorType}: NextStepParams) => {
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warten darauf, dass <strong>du</strong> Ausgaben hinzufügst.`;
return `Warte darauf, dass <strong>Sie</strong> Spesen hinzufügen.`;
case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER:
return `Warten auf <strong>${actor}</strong>, um Ausgaben hinzuzufügen.`;
return `Warten darauf, dass <strong>${actor}</strong> Ausgaben hinzufügt.`;
case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN:
return `Warten auf eine*n Admin, der Ausgaben hinzufügt.`;
return `Warten auf eine:n Admin, der Ausgaben hinzufügt.`;
}
},
[CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: ({actor, actorType}: NextStepParams) => {
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warte darauf, dass <strong>du</strong> Spesen einreichst.`;
return `Wartet darauf, dass <strong>Sie</strong> Spesen einreichen.`;
case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER:
return `Warten darauf, dass <strong>${actor}</strong> Spesen einreicht.`;
return `Warten darauf, dass <strong>${actor}</strong> Ausgaben einreicht.`;
case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN:
return `Warten darauf, dass ein Admin Spesen einreicht.`;
}
},
[CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (_: NextStepParams) => `Keine weiteren Schritte erforderlich!`,
[CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (_: NextStepParams) => `Kein weiterer Handlungsbedarf!`,
[CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: ({actor, actorType}: NextStepParams) => {
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warten darauf, dass <strong>du</strong> ein Bankkonto hinzufügst.`;
return `Warten darauf, dass <strong>Sie</strong> ein Bankkonto hinzufügen.`;
case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER:
return `Warten auf <strong>${actor}</strong>, um ein Bankkonto hinzuzufügen.`;
return `Warten darauf, dass <strong>${actor}</strong> ein Bankkonto hinzufügt.`;
case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN:
return `Warten auf eine:n Admin, um ein Bankkonto hinzuzufügen.`;
return `Warten Sie darauf, dass ein Admin ein Bankkonto hinzufügt.`;
}
},
[CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ({actor, actorType, eta, etaType}: NextStepParams) => {
let formattedETA = '';
if (eta) {
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` am ${eta}. eines jeden Monats` : ` ${eta}`;
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? `am ${eta} eines jeden Monats` : ` ${eta}`;
}
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warte, bis <strong>deine</strong> Ausgaben automatisch eingereicht werden${formattedETA}.`;
return `Warten darauf, dass <strong>Ihre</strong> Ausgaben automatisch eingereicht werden${formattedETA}.`;
case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER:
return `Warten, bis die Ausgaben von <strong>${actor}</strong> automatisch eingereicht werden${formattedETA}.`;
return `Es wird darauf gewartet, dass die Ausgaben von <strong>${actor}</strong> automatisch eingereicht werden${formattedETA}.`;
case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN:
return `Warten, bis die Spesen eines Admins automatisch eingereicht werden${formattedETA}.`;
return `Es wird darauf gewartet, dass die Ausgaben eines Admins automatisch eingereicht werden${formattedETA}.`;
}
},
[CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: ({actor, actorType}: NextStepParams) => {
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warten auf <strong>dich</strong>, um die Probleme zu beheben.`;
return `Warten auf <strong>Sie</strong>, um die Probleme zu beheben.`;
case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER:
return `Warte darauf, dass <strong>${actor}</strong> die Probleme behebt.`;
return `Warten darauf, dass <strong>${actor}</strong> die Probleme behebt.`;
case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN:
return `Warten auf eine*n Admin, um die Probleme zu beheben.`;
}
},
[CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: ({actor, actorType}: NextStepParams) => {
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warte darauf, dass <strong>du</strong> Spesen genehmigst.`;
return `Es wird darauf gewartet, dass <strong>Sie</strong> Spesen genehmigen.`;
case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER:
return `Warten auf die Genehmigung der Ausgaben durch <strong>${actor}</strong>.`;
case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN:
return `Warte darauf, dass eine Admin-Person Spesen genehmigt.`;
return `Warten auf Genehmigung der Ausgaben durch eine Adminperson.`;
}
},
[CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: ({actor, actorType}: NextStepParams) => {
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warte darauf, dass <strong>du</strong> diesen Bericht exportierst.`;
return `Warte darauf, dass <strong>Sie</strong> diesen Bericht exportieren.`;
case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER:
return `Warten auf <strong>${actor}</strong>, um diesen Bericht zu exportieren.`;
return `Warten darauf, dass <strong>${actor}</strong> diesen Bericht exportiert.`;
case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN:
return `Warten auf eine*n Admin, um diesen Bericht zu exportieren.`;
return `Warten auf eine Administratorin oder einen Administrator, um diesen Bericht zu exportieren.`;
}
},
[CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: ({actor, actorType}: NextStepParams) => {
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warte auf <strong>dich</strong>, um Spesen zu bezahlen.`;
return `Wartet darauf, dass <strong>Sie</strong> Spesen bezahlen.`;
case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER:
return `Warten auf <strong>${actor}</strong>, um Auslagen zu bezahlen.`;
case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN:
return `Warten darauf, dass ein Admin Spesen bezahlt.`;
return `Warten darauf, dass eine Adminperson Spesen bezahlt.`;
}
},
[CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_POLICY_BANK_ACCOUNT]: ({actor, actorType}: NextStepParams) => {
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warten darauf, dass <strong>du</strong> die Einrichtung eines Geschäftskontos abschließt.`;
return `Warten darauf, dass <strong>Sie</strong> die Einrichtung eines Geschäftskontos abschließen.`;
case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER:
return `Warten darauf, dass <strong>${actor}</strong> die Einrichtung eines Geschäftskontos abschließt.`;
case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN:
return `Warten, bis ein Admin die Einrichtung eines Geschäftskontos abgeschlossen hat.`;
return `Warten auf eine Administration, um das Einrichten eines geschäftlichen Bankkontos abzuschließen.`;
}
},
[CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_PAYMENT]: ({eta, etaType}: NextStepParams) => {
let formattedETA = '';
if (eta) {
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` bis ${eta}` : ` ${eta}`;
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? `bis ${eta}` : ` ${eta}`;
}
return `Warte, bis die Zahlung abgeschlossen ist${formattedETA}.`;
return `Warten, bis die Zahlung abgeschlossen ist${formattedETA}.`;
},
[CONST.NEXT_STEP.MESSAGE_KEY.SUBMITTING_TO_SELF]: (_: NextStepParams) =>
`Ups! Sie scheinen diesen Bericht an <strong>sich selbst</strong> einzureichen. Die Genehmigung eigener Berichte ist in Ihrem Arbeitsbereich <strong>verboten</strong>. Bitte reichen Sie diesen Bericht bei einer anderen Person ein oder wenden Sie sich an Ihre Admin, um die empfangende Person zu ändern.`,
`Ups! Sie scheinen diesen Bericht bei <strong>sich selbst</strong> einzureichen. Die Genehmigung eigener Berichte ist in Ihrem Workspace <strong>verboten</strong>. Bitte reichen Sie diesen Bericht bei jemand anderem ein oder kontaktieren Sie Ihre Admin, um die Person zu ändern, an die Sie Berichte einreichen.`,
[CONST.NEXT_STEP.MESSAGE_KEY.REJECTED_REPORT]: ({actor, actorType}: NextStepParams) => {
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Dieser Bericht wurde abgelehnt. Es wird darauf gewartet, dass <strong>Sie</strong> die Probleme beheben und ihn manuell erneut einreichen.`;
case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER:
return `Dieser Bericht wurde abgelehnt. Es wird darauf gewartet, dass <strong>${actor}</strong> die Probleme behebt und den Bericht manuell erneut einreicht.`;
case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN:
return `Dieser Bericht wurde abgelehnt. Es wird darauf gewartet, dass ein Admin die Probleme behebt und ihn manuell erneut einreicht.`;
}
},
},
eta: {
[CONST.NEXT_STEP.ETA_KEY.SHORTLY]: 'in Kürze',
Expand Down
Loading
Loading