Work Flow
-
Staff create a PO
-
Staff adds one or more Direct Charges to the PO, using a new type of charge that can be paid against more than once. We’ll call these blanket charges.
-
E.g. "2015 Spanish Language Titles"
-
The amount entered is the anticipated total cost of all items.
-
To encumber taxes and fees that can also be paid against multiple times, add additional blanket charges to the PO for Taxes, etc.
-
A blanket charge is a po_item with a new flag enabled for "can pay more than once".
-
-
Staff activates PO to encumber funds.
-
When a collection of items arrives, staff creates a new invoice for the PO.
-
The invoice will show all charges (including blanket charges) linked to the PO.
-
The amount for each charge is entered in the billed/paid columns for each charge.
-
-
Staff saves the invoice
-
Each payment against a blanket charge (po_item) in the invoice is tracked as a new invoice_item, which links back to the original blanket charge (po_item).
-
This is new. Currently, if you invoice a po_item more than once, only the last payment is retained as an invoice_item.
-
-
The amount applied to each invoice item is subtracted from the encumbrance created by the original (po_item) Direct Charge.
-
This is new. Normally, creating an invoice_item linked to a po_item would result in the encumbered amount for the po_item being set $0.
-
-
-
When the final shipment for a blanket charge arrives, staff mark the charge as complete.
-
This causes any outstanding encumbered amount on the charge to be set to $0.
-
Once a charge is marked complete, it will no longer appear in new invoices created for the same PO.
-
At the UI level, this may just be a button/checkbox next to each blanket charge.
-
Alternate Approaches
We could mark PO’s as blanket POs instead of individual charges, forcing all charges to be treated as blanket charges. I avoided doing that for 2 reasons:
-
Additional work would be required to make lineitems on a blanket PO behave as expected and it’s not clear yet whether there’s a use case for that.
-
Blanket charges can be useful in a non-blanket order context. For Example, consider a PO with 5 lineitems and a single blanket Tax charge, which is encumbered and paid down over time as items for each of the 5 lineitems are received.
Code
-
Add ability to mark charges as blanket
ALTER TABLE acq.invoice_item_type ADD COLUMN blanket BOOLEAN NOT NULL DEFAULT FALSE;
-
Modify the invoice code to inspect the po_item.inv_item_type.blanket value.
-
Any payments against a blanket charge results in…
-
the creation of a new invoice_item, linking back to the original po_item.
-
the fund_debit linked to the po_item will have its amount reduced by the invoiced amount. IOW, the amount paid goes up by $X and the amount encumbered goes down by $X.
-