A couple of previous posts explained the standard way of working with quotations and its level of flexibility. In rare cases, it could need you to modify the standard calculations. In this article, we will analyse options and constrains of doing such tasks in Quote product. Most popular requirement that would come your way could be implementing automated tax (or GST) system. Natively TAX is just an editable field in quote product.
Consider the pricing pane of the quote product form.
Three fields I put within the green squares are editable fields. These are the editable fields with their schema names and types.
Name
|
Schema Name
|
Type
|
Quantity
|
quantity
|
Decimal
|
Manual Discount
|
manualdiscountamount
|
Currency
|
Tax
|
tax
|
Currency
|
These are the field that can’t be edited with their schema names and types.
Name
|
Schema Name
|
Type
|
Price per unit
|
priceperunit
|
Currency
|
Volume Discount
|
volumediscountamount |
Currency
|
Amount
|
baseamount
|
Currency
|
Extended Amount
|
extendedamount
|
Currency
|
Considerations for plug-in development
Obviously we need to develop our own plug-ins to enhance/modify the current calculations. Now consider my research result on plugin behaviour in this regard.
|
Create
|
Update
|
Pre stage
|
Post stage
|
Pre stage
|
Post stage
|
Editable fields
(of first table)
|
Available, can modify
|
Available, can modify
|
Modified field available and others can be retrieved, can modify *
|
Modified field available and others can be retrieved, can modify*
|
Other field
(of second table)
|
Not available, cannot modify
|
Not available, cannot modify
|
Can be retrieved, cannot modify.
|
Can be retrieved, cannot modify.
|
* If you modify the same entity in Update event make sure you avoid infinite loops.
Essence of this result is
we can only play around with Quantity, Manual Discount and Tax. Good news is any time you change those fields; calculations are done accordingly to newly changed values of those fields. In other terms “Extended amount” get the correct value regardless of where you change those fields.
It implies CRM does its own calculations after the plug-in engine has completed its performances. In fact,
you should not/ cannot amend other fields such as Price per Unit, Volume Discount, Amount and Extended Amount.
Some points to think
1) If you want to introduce an auto tax calculation method, it’s possible. Better have the logic for both create and modify event plug-ins.
2) If you consider the fact that we have two fields (namely Tax and Manual discount) to play around; tax is being added and Manual discount is being subtracted from total automatically. So whatever the
additions and subtractions you need can be pushed to the current calculation mechanism if you are creative enough. Think a bit.
3) There is a chance your logic needs fields which are unavailable in plug-in context such as Price per Unit, Volume Discount and Amount. In that case, you are still able to retrieve first two fields from
Price List and
Discount List entities respectively and Calculate Amount. Read my
1st and
2nd parts of this article for better understanding.
4) One would also think of give up the native total fields and introduce new custom fields, WHICH IS NOT RECOMMONDED AT ALL. This means you are rewriting your own calculation logic for entire quoting including quote product and quote. That will also push you to
introduce your own recalculation button in Quote header. Also you are again facing problems when quote values are transferred to Order entity in a later stage. Personally, I don’t see any reason to go in to this mess.
1st part of this article:
Sales process – Part 1 – Product Catalog2nd part of this article:
Sales process – Part 2 – Quoting4th part of this article:
Sales process – Part 4 – Modifying calculation of quote