[REF] Move wrangling of Front end form contribution param for autoRenew back to form
authoreileen <emcnaughton@wikimedia.org>
Fri, 22 Nov 2019 07:23:48 +0000 (20:23 +1300)
committereileen <emcnaughton@wikimedia.org>
Fri, 22 Nov 2019 07:32:25 +0000 (20:32 +1300)
commitbdcbbfeaed0a0adf5384509c3dd311e5a7af1b55
tree13cc0cd1c50fcf6f1ea51d26b09d2cf0c8027422
parent0be5362c79e2ab710aa1b4ccdbd50a4d910c8704
[REF] Move wrangling of Front end form contribution param for autoRenew back to form

The processAmount function is really problematic because it's trying to do several disparate things & is called from
all over the place with unclear intent. From looking at it I see it does a few things. It reformats line items,
it does some obscure & likely flawed filtering, it generates a total cost & a tax cost and it generates a very
specifically formatted array of autoreneal properties,

The way I see this going is
1) Move the formatting of the autorenewal back to the calling form (this PR) & simplify it
2) Split out the foreach so it goes through once & formats - this can be shoved out to a separate function
- and then it goes through the formatted array & calculates total_amount & tax_amount - we should
have a wrapper function that just returns these & we might see that is most of what is needed
3) Move all that awful partial_payment_total stuff back to the event form. Note that we are working
to entirely remove that from here are it makes so much less than no sense.
4) Calculates amount_level text - that should have it's own function.

It worth noting all of this does very little intensive work - a DB lookup or 2 that  could be cached & an iteration
through a very small array so it would be fine to have 3 functions -
- getAmountTotal
- getTaxTotal
- getAmountText

that each go through the same process of generating a formatted array from price_x => 5 etc rather than trying
to pass the  array around for 'performance' or to 'save work'.

From previous refactorings I would suggest we add an Order class where by you set the price fields
& then you can call 'getLineItems' - but that is a few steps after this....
CRM/Contribute/Form/Contribution.php
CRM/Contribute/Form/Contribution/Confirm.php
CRM/Contribute/Form/Contribution/Main.php
CRM/Contribute/Form/ContributionBase.php
CRM/Event/Form/Registration/Confirm.php
CRM/Member/Form/Membership.php
CRM/Member/Form/MembershipRenewal.php
CRM/Price/BAO/PriceSet.php