dev/financial#6 Fix creating of template contribution when it has custom data #21470
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
https://lab.civicrm.org/dev/financial/-/issues/6
UPDATE: The original issue seems to be fixed between 5.44-5.45 - CiviCRM no longer crashes with a "data already exists" DB error. BUT it still doesn't do the right thing because any hook that tries to insert custom data on create gets ignored and the original values are used instead.
I've updated the test to demonstrate that a hook can insert custom data on a "Contribution.create" and the inserted data will end up in the database and not the copied custom data from the original.
It is good practise to insert entity+custom data in the same API call and this PR changes that to be the case, also uses API4 for a bit more modern-ness.
If there is an extension installed that automatically calculates custom data for a contribution on "create" this can cause CiviCRM to crash because:
Before
$contribution->copyCustomFields()
runs which then triggers a database exception because the data already exists.After
Technical Details
Explained above.
Comments
@jaapjansma Are you able to review this one? It is a bug with the template contribution create.