Add Tag GL code column to expense tables#93146
Conversation
|
Hey, I noticed you changed If you want to automatically generate translations for other locales, an Expensify employee will have to:
Alternatively, if you are an external contributor, you can run the translation script locally with your own OpenAI API key. To learn more, try running: npx ts-node ./scripts/generateTranslations.ts --helpTypically, you'd want to translate only what you changed by running |
|
@ahmedGaber93 Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
|
@flaviadefaria can you psl help translations here? thanks!
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cf369fb7d2
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
…agsFilter ?? parentTagsFilter
🦜 Polyglot Parrot! 🦜Squawk! Looks like you added some shiny new English strings. Allow me to parrot them back to you in other tongues: View the translation diffdiff --git a/src/languages/de.ts b/src/languages/de.ts
index 004db83ddbf..b78a32ea526 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -510,6 +510,7 @@ const translations: TranslationDeepObject<typeof en> = {
avatar: 'Avatar',
editor: 'Editor',
restrictions: 'Beschränkungen',
+ tagGLCode: 'GL-Code taggen',
},
socials: {
podcast: 'Folgen Sie uns auf Podcast',
diff --git a/src/languages/es.ts b/src/languages/es.ts
index e4a328f60f1..63405a6b0ec 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -461,6 +461,7 @@ const translations: TranslationDeepObject<typeof en> = {
enterDigitLabel: ({digitIndex, totalDigits}: {digitIndex: number; totalDigits: number}) => `introducir dígito ${digitIndex} de ${totalDigits}`,
editor: 'Editor',
restrictions: 'Restricciones',
+ tagGLCode: 'Etiquetar código GL',
},
socials: {
podcast: 'Síguenos en Podcast',
@@ -1753,7 +1754,6 @@ const translations: TranslationDeepObject<typeof en> = {
}
},
[CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_MARK_AS_DONE]: (actor, actorType, _eta, _etaType) => {
- // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Esperando a que <strong>tú</strong> lo marques como listo.`;
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index e0730417322..ed47c95f768 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -1,6 +1,7 @@
/**
* _____ __ __
* / ___/__ ___ ___ _______ _/ /____ ___/ /
+ * / (_ / -_) _ \/ -_) __/ _ \`/ __/ -_) _ /
* \___/\__/_//_/\__/_/ \_,_/\__/\__/\_,_/
*
* This file was automatically generated. Please consider these alternatives before manually editing it:
@@ -509,6 +510,7 @@ const translations: TranslationDeepObject<typeof en> = {
avatar: 'Avatar',
editor: 'Éditeur',
restrictions: 'Restrictions',
+ tagGLCode: 'Taguer le code GL',
},
socials: {
podcast: 'Suivez-nous sur Podcast',
@@ -862,7 +864,7 @@ const translations: TranslationDeepObject<typeof en> = {
beginningOfChatHistory: (users: string) => `Cette discussion est avec ${users}.`,
beginningOfChatHistoryPolicyExpenseChat: (workspaceName: string, submitterDisplayName: string) =>
`C’est ici que <strong>${submitterDisplayName}</strong> soumettra des dépenses à <strong>${workspaceName}</strong>. Utilisez simplement le bouton +.`,
- beginningOfChatHistoryPolicyExpenseChatTrack: 'C\u2019est ici que vous suivrez vos dépenses',
+ beginningOfChatHistoryPolicyExpenseChatTrack: 'C’est ici que vous suivrez vos dépenses',
beginningOfChatHistorySelfDM: 'Ceci est votre espace personnel. Utilisez-le pour vos notes, tâches, brouillons et rappels.',
beginningOfChatHistorySystemDM: 'Bienvenue ! Procédons à la configuration.',
chatWithAccountManager: 'Discutez avec votre gestionnaire de compte ici',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 0bcfe100b1a..cb997878077 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -510,6 +510,7 @@ const translations: TranslationDeepObject<typeof en> = {
avatar: 'Avatar',
editor: 'Editor',
restrictions: 'Restrizioni',
+ tagGLCode: 'Tag codice GL',
},
socials: {
podcast: 'Seguici su Podcast',
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index a8aa877efee..f7a69da39c9 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -509,6 +509,7 @@ const translations: TranslationDeepObject<typeof en> = {
avatar: 'アバター',
editor: '編集者',
restrictions: '制限',
+ tagGLCode: 'GL コードにタグを付ける',
},
socials: {
podcast: 'ポッドキャストでフォロー',
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 03489a7baa6..a83e6a82d9c 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -509,6 +509,7 @@ const translations: TranslationDeepObject<typeof en> = {
avatar: 'Avatar',
editor: 'Editor',
restrictions: 'Beperkingen',
+ tagGLCode: 'GL-code labelen',
},
socials: {
podcast: 'Volg ons op Podcast',
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 4a435537338..37bab197aed 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -509,6 +509,7 @@ const translations: TranslationDeepObject<typeof en> = {
avatar: 'Avatar',
editor: 'Edytor',
restrictions: 'Ograniczenia',
+ tagGLCode: 'Oznacz kod GL',
},
socials: {
podcast: 'Śledź nas na Podcast',
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index efbc57066e8..5a14ce3edc2 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -508,6 +508,7 @@ const translations: TranslationDeepObject<typeof en> = {
avatar: 'Avatar',
editor: 'Editor',
restrictions: 'Restrições',
+ tagGLCode: 'Marcar código GL',
},
socials: {
podcast: 'Siga-nos no Podcast',
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 277fba54252..99454c103db 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -505,6 +505,7 @@ const translations: TranslationDeepObject<typeof en> = {
avatar: '头像',
editor: '编辑',
restrictions: '限制',
+ tagGLCode: '标记总账代码',
},
socials: {
podcast: '在播客上关注我们',
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
@ahmedGaber93 PR is ready to review. Though we need BE help asked here so that sorting for new Tag QL code works |
|
@ahmedGaber93 I think we are good to preceed. BE is deployed |
|
To be more precise, here is RCA: Symptom: Sorting by a column where every row is empty (Posted / Approved / Withdrawal ID) changes the row order, and ascending vs descending produce different orders. Expected: no effect, identical for both. Root cause: the transaction sort adds a secondary tie-breaker that re-sorts tied rows by Lines 3975 to 3986 in 241d30f
Why the report view is unaffected: its sort has no tie-breaker — it returns the primary Introduced by: commit Fix (FE): drop the |
|
@mukhrr Let's ignore this for now since it also reproduces on staging (#93146 (comment)), and the scope has become much bigger (we fix 3 issues on th PR) |
@mukhrr Not fixed yet, I am still able to reproduce Screen.Recording.2026-06-29.at.4.34.25.AM.mov |
@trjExpensify in that case, can you pls create another issue on this #93146 (comment) and assign me and @ahmedGaber93 ?! thanks! |
@ahmedGaber93 ah that's expected. You enabled "Group by Category" and sorting works inside each category |
|
@MelvinBot create an issue based on this comment, assign it to @mukhrr @ahmedGaber93 @JS00001 and @trjExpensify. |
|
@mukhrr You've got some merge conflicts |
|
Hmm.. the failing tests aren't related. |
|
🚧 deetergp has triggered a test Expensify/App build. You can view the workflow run here. |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/deetergp in version: 9.4.26-0 🚀
|
📝 Help site docs reviewYes — a help site update is needed. This PR adds a new Tag GL code column to the Spend Expenses and Reports tables (selectable via Display > Edit columns / the Columns icon). The help article Using Spend in New Expensify lists the available columns and already documents Category GL code, but not the new Tag GL code. I created a draft PR adding Tag GL code to that column list, using the exact UI label: 📄 Draft PR: #95084 What changedIn
Also added The other changes in this PR (Bug 1–3 column-alignment/visibility fixes, the Posted column fix) are UI-behavior bug fixes that don't change any documented steps, so no additional docs updates are required for them. The @mukhrr, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR |
|
🚀 Deployed to production by https://github.com/grgia in version: 9.4.27-2 🚀
Bundle Size Analysis (Sentry): |

Explanation of Change
Added Tag GL code column into Spend Expenses table and also fixed 3 bugs: missing Posted column even if selected, not proper aligning of table columns when all columns are enabled and keep selected columns visible in Expenses, Report and Report layout tables even if there are no related data.
Fixed Issues
$ #92692
PROPOSAL: #92692 (comment)
Tests
Engineering -> 1234.1234, 5678(levels without a GL code are skipped).Bug 1:
1.Enable all columns in Spend Expenses page
Bug 2:
Precondition:
• Have an expense with a card and posted data
Bug 3:
Verify all selected columns are visible
Verify that no errors appear in the JS console
Offline tests
QA Steps
The same as Tests
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
web specific
Android: mWeb Chrome
web specific
iOS: Native
web specific
iOS: mWeb Safari
web specificMacOS: Chrome / Safari
web.mp4