Repository navigation
validuntil gets lost during approval #496
Description
Is this a regression?
Yes
Severity
🔴 Critical – blocks key functionality
Please provide the branch(es) you discovered this issue in
v93
Environment Details
9.3 v93-348245
Please provide a minimal set of steps to reproduce the issue
- Have a product with an approval workflow where some user needs to approve (for better visibility I recommend having 2 approval steps, each having a user to approve)
- Request this product with a valid until date (e.g. 25.06.2026)
- Login as 1st approver
- go the the pending requests view
- click on approve of the just requested product, the sidesheet opens.
- notice that the valid until date is shown as requested before. Do not click into the input element or change anything.
- click on approve to submit the approval
- login as 2nd approver and repeat steps 4 + 5
- notice that valid until date is empty now
Description
Requests will loose its previously set valid until date during approval.
This leads to very bad data situations, as it's impossible to check if this modification was done by the approver or by this bug.
From my point of view this is critical. If you think of audits etc...
The problem came in with commit #483 and is related to the changes in imxweb/projects/qer/src/lib/itshopapprove/workflow-action/workflow-action.service.ts:
if (request.canSetValidUntil(itShopConfig) && actionParameters.validUntil) {
const until = actionParameters.validUntil.column.GetValue();
if (until) {
request.ValidUntil.value = addTimeNowToDate(until);
} else {
// The value was removed, so set it to null in order to not send an invalid date to the backend
await request.ValidUntil.Column.PutValue(null);
}
I verified this by removing the lines added by the commit. Primary
await request.ValidUntil.Column.PutValue(null);
I'm pretty sure that the same applies to the valid from date, but I did not test it.
Based on my analysis the root cause for this is, actionParameters.validUntil is only used if you approve more than 1 object at the same time and use the "common editor" at the top of the sidebar.
In other cases the changes are directly performed on the object "request".
Describe what you expected to happen versus what actually happened
I would expect that if the approver doesn't touch the given valid until date, that this date is kept.
Relevant logs or console output
Add a screenshot(s) if that helps illustrate the problem
Initial Request

1st approver approves without editing anything

2nd approver finds the valid until date to be empty

Suggested Fix
No response
Anything else?
No response
Before submitting...
- I have searched for existing issues that match this one on github and on the community support page
- I have included all necessary details to reproduce this issue
Activity
asattler commentedon Jun 4, 2026
I've tried to think of a solution for the issue.
From my point of view the code change done with the mentioned commit is wrong. It doesn't cover the designed UI.
For single approvals the WorkflowSingleActionComponent is used. It does not use the actionParameters, so the result of
const until = actionParameters.validUntil.column.GetValue();is always null.You could e.g. check in the if-clauses for a multiselection by
requests.length > 1, so that you don't run into the code for that.But also multi-approvals are broken by the original fix.
Using the WorkflowMultiActionComponent you can either change the ValidUntil for all selected requests, or modify each one-by-one.
This means that actionParameters is needed, but
actionParameters.validUntil.column.GetValue();can again be null without the intention to empty this for all selected requests.So I think the original problem (to clear the date for all selected items) needs a new solution, the implemented one breaks everything else...
[-]validuntil gets lost during approval if not changed by approver[/-][+]validuntil gets lost during approval[/+]kovtib commentedon Jun 5, 2026
Thanks @asattler, we already have an internal ticket for this error and we are working on it.
kovtib commentedon Jun 5, 2026
/link-devops 709042
github-actions commentedon Jun 5, 2026
✅ DevOps work item #709042 linked and label added by @kovtib. Closing this issue - keep an eye out for branch syncing to resolve this work item.
asattler commentedon Jun 22, 2026
Hi @kovtib, I've seen your commited fix. But unfortunately it doesn't work (or to be clear: the bulk-edit will not work).
In the workflow-action.service.ts the case of the 1st character for the control is mixed. It needs to be lowercase to match the formgroup. so the piece of code nevers runs.
When the typo is fixed and you re-run your tests you will notice that the problem wasn't solved. Still you're unsetting the validUntil-Dates which where individually configured during request.
As mentioned initially from a UX-perspective having an empty-field for the "bulk operation" should not reset individually configured values. I think you need to implement some kind of "remove individual configurd values" or similiar to avoid overwriting those by accident.
kovtib commentedon Jun 23, 2026
Hi @asattler,
I work on this issue. It will be fixed in the next github sync.
kovtib commentedon Jul 2, 2026
@asattler Fixed in v93.
asattler commentedon Jul 2, 2026
Hi @kovtib , thanks for working on this.
I just reviewed the code. Isn't there still a mix of the first character?
workflow-multi-action.component.html (small "v" in "validUntil"
workflow-action.service.ts (capital "V" in "ValidUntil", also in the surrounding lines)
Also I can't find a solution for the multi-approvals. For this, at least what I see, you still clear individual configured values.
See my previous post:
BR
Andreas
kovtib commentedon Jul 3, 2026
@asattler you are right. I updated the addControl validUntil and validFrom events.
asattler commentedon Jul 7, 2026
@kovtib Thanks :)
Can you also give feedback to my concerns about the multi-approvals? As mentioned this is also not working as users will expect.
kovtib commentedon Jul 8, 2026
@asattler
Only the single approval workflow updates the validUntil column with null:
asattler commentedon Jul 11, 2026
Thanks @kovtib, seems like I didn't read the code properly :)