Support Online Payments for Unpaid and Partially Paid Invoices

Invoices list goods or services provided and the amount due for them, and can be unpaid, partially paid, or paid. They are often required by organizations in workflows like cheque requisitions which ask an accounting department to pay an amount owed. Currently CiviCRM supports invoices for amounts owing as well as previously paid via the Contact Dashboard. But there are several improvements required.

  1. CiviCRM does not natively have a way to process a credit card or other immediate online payment to pay for an existing “pay later” contribution either in the backend or front-end.

    1. Build front-end and back-end processes for paying existing invoices online (this is simpler than the 2012 spec).

      1. Front-end: The contact dashboard already displays links to PDF invoices; extend that by creating a link to pay any open invoices (balance due) online.

        Clicking the Pay Now button will bring up the contribution page defined as the default invoice payment page on the CiviContribute Component Settings page:

        A validation will be made to ensure a payment processor is defined for the selected contribution page, and that it is enabled. A validation is added to Edit Contribution Page to ensure that if the page is defined as Default invoice payment page, then it is invalid to remove the last payment processor from the page. (Please verify that there is a validation to prevent a payment processor from being disabled if it is in use on a contribution page like the Default invoice payment page.)  

        When a Pay Now button on a Contact Dashboard is clicked, the Default invoice payment page is loaded:

        1. Discounts, premiums, recurring payments and pledge sections of the page will be disabled.
        2. The price set part of the page will be replaced with a frozen (ie non-editable) listing of the existing line items for the contribution, membership, or event registration, including taxes, with discounts applied. 
        3. Option A: The total payment amount could be frozen.

        4. Option B: Partial payments could be supported.

      2. Back-end: On the New Contribution form, near the top right there a link submit credit card contribution. The differences between the Create contribution form in the two cases provide a pattern for how this could be done on the edit form with minimal effort (though perhaps not optimal usability):

    1. As an additional feature, the ability to pay for outstanding online will need to accommodate partial payments (where the user has partial amount due on the invoice total). 

  1. Create a process to auto-generate membership invoices for the coming year. (lower priority for core integration)

(Background:Contribution records are created in one of two ways -- either by processing a online transaction (typically a credit card, but also PayPal, direct debit / ACH), or through a pay later contribution that gets a Pending (pay later) status and is typically paid through an offline means (checks, also certain types of EFTs outside of North American). Both ways are supported in the back-office for staff and on public facing pages for users. The former supports actions such as an individual becoming a member for the first time, where the membership record and transaction are created through the application form. Such pay immediate transactions are handled the same using cash method and accrual method of accounting. Pay Later transactions are currently recorded in CiviCRM as accounts receivable amounts, which is used in the accrual method of accounting but not the cash basis.)

Better Handling of Refunds, Partial Payments, Multiple/Split Payments

Currently refunds must be handled through a two-step process: process the refund through the payment processor and then record the refund in CiviCRM. Partial payment processing is provided for events but has some shortcomings. Partial payments for memberships is not currently available.