You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Due for payment 2026-11-02] Bulk edit company card transaction start dates #101355
@JmillsExpensify and I were discussing recent customer feedback about bulk adjusting company card start date and think this is a quick win worth adding.
Details
Today, admins can update a transaction start date for one assigned company card from its details page. They can choose a custom date or From the beginning.
Updating this date already triggers a re-scrape for that card. Transactions before the selected date are excluded, and transactions already stored for the card are deduplicated.
We are not changing that existing import, date-filtering, or deduplication behavior in this issue. Just adding an entry point to adjust this for multiple cards at once using the existing logic.
The Company cards bulk-actions menu already shows card-specific actions only when every selected card is assigned. If any selected card is unassigned, it hides those actions while keeping generic actions such as Export as CSV available.
Bulk action: add an Update transaction start date action to that menu, using the same assigned-cards-only eligibility rule.
Transaction start date page: selecting the action opens the existing transaction-start-date page with copy clarifying that the chosen date will apply to all selected cards. I think that is sufficient versus showing all the selected cards on this page. Updated body copy:
Choose a transaction start date for all selected cards. We'll sync transactions from that date onwards, excluding those we already imported.
Bulk update: saving sends a new command that accepts multiple card IDs and applies the existing per-card transaction-start-date behavior to every selected card.
Success toast: after the update succeeds, show a success growl on the company card page as feedback.
If we wanted to do something more subtle, we could growl for success? cc @Expensify/design for thoughts on that, not sure if we do that elsewhere or not:
Nice, looking really great. I'm not aware of any existing growls/toasts in newdot today (and codex agrees). That said, I agree this would be a very ideal place to use one, so down to get toasty if everyone is good with the new pattern. Otherwise, the success page looks great too.
changed the title [-]Bulk edit company card transaction start dates[/-][+][Due for payment 2026-11-02] Bulk edit company card transaction start dates[/+]on Oct 27, 2026
[Contributor] The offending PR and associated issue have been commented on, pointing out the bug it caused and why, so the author and reviewers can learn from the mistake.
Link to the comment on the PR: N/A - new feature
[Contributor] If the regression was CRITICAL (e.g. interrupts a core flow) A discussion in #expensify-open-source has been started about whether any other steps should be taken (e.g. updating the PR review checklist) in order to catch this type of bug sooner.
Link to discussion: N/A
[Contributor] If it was decided to create a regression test for the bug, please propose the regression test steps using the template below to ensure the same bug will not reach production again.
Regression Test Proposal
Precondition:
Your workspace has Company Cards with several cards assigned to you.
Test:
Go to Company Cards > Select some cards > Update transacton card date.
It was demoted, since the behavior was correct, it just felt strange from a UX perspective(#104957 (comment)):
Yes, I agree. We can even close this issue, since the Growl only shows when the request is successful and the request was actually successful. Currently, our API requests work in a queue, but the optimistic data is applied immediately after the action.
At first, we weren't quite sure what to do, so we just removed Growl(#104957), but later decided that the way it works now suits us, so we reverted it(#105140).
Therefore, it was decided to simply do nothing about the existing issue:
Yeah, I'm not super concerned about this case. I think it's very possible no real customers will ever experience this because removing a feed is an extremely rare action. If we close this issue for now, are you guys still thinking that we should get rid of the growl, or that it's going to cause a bunch of issues?
From a UX perspective, I feel like it works quite well.
Proposed amount: N/A - I'll let the CME determine an appropriate amount based on the scope and impact of this work.
Why the work exceeded the issue: The scope of the issue stayed the same throughout, but it was large from the start: a new bulk action, a new page flow, a new multi-card API command and a success toast, all delivered in one frontend PR. The size of the change, not any shift in requirements, is what pushed the effort past the job price.
Regressions caused by this PR: N/A
Optional
Files touched: The PR changes 51 files, with 758 lines added and 167 removed.
Activity
melvin-bot commentedon Sep 16, 2026
Triggered auto assignment to Design team member for new feature review - @shawnborton (
NewFeature)joekaufmanexpensify commentedon Sep 16, 2026
@shawnborton would you be able to help put together a quick set of mocks for this bulk flow before we proceed?
shawnborton commentedon Sep 17, 2026
Figma here.
Here is the flow you are requesting:
If we wanted to do something more subtle, we could growl for success? cc @Expensify/design for thoughts on that, not sure if we do that elsewhere or not:
shawnborton commentedon Sep 17, 2026
(Feel free to make edits/copy changes directly in the Figma!)
dannymcclain commentedon Sep 17, 2026
Mocks look good and IMO this is an ideal place to use a toast for a success message. 🍞
joekaufmanexpensify commentedon Sep 17, 2026
Nice, looking really great. I'm not aware of any existing growls/toasts in newdot today (and codex agrees). That said, I agree this would be a very ideal place to use one, so down to get toasty if everyone is good with the new pattern. Otherwise, the success page looks great too.
dubielzyk-expensify commentedon Sep 17, 2026
Looks good to me too. Agree with Danny it's a perfect use of toast 👍
We've just started using it. There should be a PR already using it if not already merged.
shawnborton commentedon Sep 18, 2026
Sweet, let's do 🍞 then!
joekaufmanexpensify commentedon Sep 18, 2026
Nice, sounds great. I will update the OP with the mocks and get this going. 👍
42 remaining items
melvin-bot commentedon Oct 27, 2026
@hungvu193 — to hire @Eskalifer1 on Upwork, add the External label so a job is created and the offer is sent automatically.
[-]Bulk edit company card transaction start dates[/-][+][Due for payment 2026-11-02] Bulk edit company card transaction start dates[/+]melvin-bot commentedon Nov 1, 2026
Triggered auto assignment to @mallenexpensify (
Awaiting Payment)melvin-bot commentedon Nov 1, 2026
Payment Summary
Resolving PRs:
Add bulk update start date for Company Card #102121
Contributor: @hungvu193 does not require payment (Contractor)
Assignee: @Eskalifer1 requires payment (Needs manual offer from BZ)
BugZero Checklist (@mallenexpensify)
Eskalifer1 commentedon Nov 2, 2026
Contributor+ Checklist:
[Contributor] The offending PR and associated issue have been commented on, pointing out the bug it caused and why, so the author and reviewers can learn from the mistake.
Link to the comment on the PR: N/A - new feature
[Contributor] If the regression was CRITICAL (e.g. interrupts a core flow) A discussion in #expensify-open-source has been started about whether any other steps should be taken (e.g. updating the PR review checklist) in order to catch this type of bug sooner.
Link to discussion: N/A
[Contributor] If it was decided to create a regression test for the bug, please propose the regression test steps using the template below to ensure the same bug will not reach production again.
Regression Test Proposal
Precondition:
Test:
Do we agree 👍 or 👎
Eskalifer1 commentedon Nov 2, 2026
Note about regressions:
We had one regression mention here: #101355 (comment)
It was demoted, since the behavior was correct, it just felt strange from a UX perspective(#104957 (comment)):
We decided that we should implement in-app notifications (Growl) for a successful action in a separate issue dedicated specifically to this, rather than as part of this issue(https://expensify.slack.com/archives/C01GTK53T8Q/p1792980628220839):
At first, we weren't quite sure what to do, so we just removed
Growl(#104957), but later decided that the way it works now suits us, so we reverted it(#105140).Therefore, it was decided to simply do nothing about the existing issue:
And issue was closed(#104950 (comment)):
Eskalifer1 commentedon Nov 2, 2026
Price increase request
Mandatory
Proposed amount: N/A - I'll let the CME determine an appropriate amount based on the scope and impact of this work.
Why the work exceeded the issue: The scope of the issue stayed the same throughout, but it was large from the start: a new bulk action, a new page flow, a new multi-card API command and a success toast, all delivered in one frontend PR. The size of the change, not any shift in requirements, is what pushed the effort past the job price.
Regressions caused by this PR: N/A
Optional
Files touched: The PR changes 51 files, with 758 lines added and 167 removed.