TABLE OF CONTENTS



Refund Creation & Processing Improvements

We have enhanced refund creation and processing in order to allow our customers to scale their operations.


Why this feature is so important:

Previously the Refund process was only available from the ‘Refund’ button on the payment record, only allowing users to process a single refund at a time.

Customers are increasingly likely to want to automate this process to accommodate larger volumes of refund transactions, either within a flow or other process within Salesforce, to be able to create the Refund records and then send them to their PSP for processing with minimal clicks from users.


How it works:

  • Refund Records can now be created directly in Salesforce which means that you can create them using a flow, manually or via a batch class.
  • When creating a refund record you must populate the following fields:  
    • Payment  - lookup to the payment record to which the refund relates and with a status of ‘collected from customer’
    • Payment method - this must be the same as the original payment method on the payment
    • Amount - this cannot be more than the original payment amount - you can partially refund, but not process more than was originally taken
    • In order to process a Refund, the following must be true on the record:
    • Status equals “New” or ”Failed” 
    • The Refund Date should be today or less than today 
    • The associated Payment record should have the status ‘Collected From Customer’
  • Processing Refunds  can be done in the following ways’:
    • From the payment record to which the refund relates
    • From the refund tab by selecting the required records (up to 200 at a time)
    • Directly from the refund record
    • Via a batch class
    • Via a scheduled job  






Set Up:

You must assign the Refund permissions to anyone in your organisation that requires it.

Permission Set

Details

Asperato Refund

Refund - Read, Create, Edit



If you are upgrading from previous versions of Asperato One, you must add the picklist value ‘New’ to the Refund_Stage__c field on the asp_Refund__c object and mark this value as ‘default’.  Ideally it should be at the top of the list so you may need to reorder your values for this picklist.

You will also need to add the button ‘Process Refund’ to the List View layout for the same object and on the Refund Page the ‘Process Refund’ button is in ‘Mobile & Lightning Quick Actions’


Optional Set Up for Automation:


If you want to schedule the Refund job to process refund records automatically, or even create and process refund records automatically, then you can choose to do the following steps.


The apex job to process Refunds is a separate job to the existing Asperato Repeat Payments scheduled job. It will need to be created and scheduled separately.


Scheduling the refund job to process all refund records with a status of ‘New’ can be done in one of the following two ways:


Schedule from within Apex Classes > Schedule Apex:

Job Name: AspertoRefundsJob

Apex Class: ProcessRefundsSchedule

Select Frequency as required

If you require the job to run more than once a day, schedule from within Developer Console using the apex code below (set your own cron expression as per frequency required)

String cronExpression ='0 0 * * * ?'; 

String refundsJob = System.schedule('Asperato Refunds Job', cronExpression, new

asp04.ProcessRefundsSchedule());

System.debug(' Asperato ONE repeat payment job scheduled with id ' +

refundsJob);



The following code can be used to create and process Refund records via the batch class. 


This is done by using the Payment id and Amount, then processing the Refund records which are in the status ‘New’. To Select Refund records via the batch job with a status of ‘Failed’ the record id of the failed records must be passed directly into the batch, they won’t be picked up automatically.  Failed records can alternatively be submitted via the List View or via the Record itself once the reason for failure has been addressed.


The Refund records will only be picked up with the Refund Date is today or less, and the Payment Status is ‘Collected from Customer’ 




Map<Id, Decimal> paymentIdsToRefundAmountMap = new Map<Id, Decimal>();

paymentIdsToRefundAmountMap.put(payment.Id, 20);

BatchSendRefundByPayment refundBatch= new

BatchSendRefundByPayment(paymentIdsToRefundAmountMap);

Database.executeBatch(refundBatch);






Using a batch class to process Refunds can be done with the following code (the same conditions apply to this as with processing refunds in other ways)




BatchSendRefunds refundBatch = new BatchSendRefunds(new List<Id>

{refundPayment.Id});

//Change the id from List of Refund Ids

Database.executeBatch(refundBatch);



Process Payments Now

Automated Payments can now be processed using a button click, rather than waiting for the scheduled job.


Why this feature is so important:

Processing automated payments (payments with an authorisation attached) could previously be scheduled to be run but could never be run 'on demand'.  In this release we have added this ability so that you can be more flexible with when and how your automated payment collections are processed.


How it works:

You can process payment collections with an authorisation quickly and without waiting for the scheduled job to run by using the 'Process Payments Now' button on the Payments List View.  Simply select the required payments from the list view and then hit the button to process.


In order to be eligible to be processed using this button the same criteria applies as for the 'Repeat Payment Scheduled Job', the Payment must have an 'In Force' Authorisation attached to it, be in a status of 'awaiting submission' and have a date of today or earlier.


Set Up:

To use the 'Process Payments Now' button, on upgrade, please navigate to Set Up --> Object Manager --> Payment (asp04__Payment__c) --> List View Buttons --> edit and then select 'Process Payments Now' to be included on the list view.




Update 'Pay Now' and 'Add Payment Method' Images

Why this feature is important:

Providing your customers with an image for ‘Pay Now’ and ‘Add Payment Method’ which is unique to your business allows you to personalise your customer’s journey where you need to.

 

How it works:

In previous releases we have provided an out of the box image for Pay Now and Add Payment Method on the Payment and Authorisation records respectively.  This could be amended but it required creating a new field to do this so we have simplified that process for you by allowing you to upload your own image more easily.


This image is displayed on the Authorisation and Payment Records in the field ‘Authorisation Image’ and ‘Pay Now Image’. Simply decide how you want to expose this image to your end customers for them to create Authorisation and Payment details with minimal clicks.


Amending the Pay Now Image:

  • To use your own image, all you need to do is navigate to Set Up → Static Resources, and add your own image/s called AuthImage and/or PayNowImage. The naming must exactly match these or it will not work. The size of the image is 150 wide and the height will be taken from the image you upload - so bear that in mind for correct rendering of any images.

  • Then go to SetUp → Custom Settings → Asperato ONE settings and check the ‘Use Custom Auth Image’ checkbox.

  • Your custom image will now be displayed on the Authorisation or Payment Record


Packaged Reports and Dashboard Changes

In our previous 2.19 release, we created some packaged dynamic dashboards.  In this release, we have moved those to a separate package so that people running dynamic dashboards already in their org will not hit the org limits of 5 dashboards when installing core Asperato One.


  • Failed Collections

  • Failed/Successful Collections

  • Card Details expiring in the next 3 months

  • Failed Payments*

  • Failed/Successful Payments*

Note * these reports will only have data within them if Outbound Payments is being used within the organisation


NOTE:

If you have more than 5 dynamic dashboards in your organisation already, when you come to install the new extension package you will need to mark existing ones as static dashboards in order to install this.  


You can contact our support team for the installation link for this package



Outbound (Supplier/Vendor) Payments


Asperato have built an Outbound Payments Feature in conjunction with FinancialForce to automate the payments to third party suppliers/ vendors, or expense payments to staff. This functionality drops the reliance on downloading and uploading bank format files, instead making payments directly to your vendors via APIs from within Salesforce. In versions 2.18.1 through to 2.20, this is available to FinancialForce customers using the FinancialForce and Asperato Integration package.


We are looking for Early Adopters at this stage to upgrade to this exciting new feature and provide feedback. We’re also interested in speaking to customers wishing to use this feature outside of FinancialForce, for example to automate expense payments or payable invoices from another on platform software.


If you are interested in being an early adopter or understanding more about what this feature entails contact jodi@asperato.com.


For FinancialForce Customers - go to our Getting Started Guide for help and guidance.



Bug Fixes



  • Permission Set Issue for Standard User - In versions 2.18.1 and 2.19 there was an issue with the Permission Set: Asperato Standard User which meant that users with this permission set were unable to process payments against authorisations without hitting an error.  We have fixed that in 2.20 and so users with the Asperato Standard Permission set can now do this.


How to upgrade to R2.20

Upgrade to the latest version 2.20.4 from AppExchange


Or with link here: https://login.salesforce.com/packaging/installPackage.apexp?p0=04t1n0000021l09


The below table is a summary of manual upgrade steps required from version 2.19 to 2.20 (you may need to scroll across in the image depending on your screen size)



Add picklist values :-
ObjectFieldAdd /RemoveValueMark as Default?
Refund__cRefund_Stage__cAddNewTRUE
Add button on List view
ObjectList view Button Name
Payment__cProcess_Payments_Now
Refund__cProcess_Refund
Change in Layout :-
ObjectPage layoutAdd /RemoveFieldMarked required?
Payment__cPayment Outbound LayoutRemovePayment_Route_Options__cFALSE
Refund__cRefund LayoutAmount__cTRUE
Refund__cRefund LayoutPayment_Date__cTRUE
Refund__cRefund LayoutPayment__cTRUE
Refund__cRefund LayoutAddFirst_Name__cFALSE
Refund__cRefund LayoutAddLast_Name__cFALSE
Refund__cRefund LayoutAddCompany_Name__cFALSE
Refund__cRefund LayoutRemoveDirect_Debit_Error_Code__cFALSE
Refund__cRefund LayoutAddPayment_Route__cTRUE
Refund__cRefund LayoutAddActual_Refund_Date__cFALSERead only
Add Button on detail view
ObjectPage layoutMobile & Lightning Action
Refund__cRefund LayoutProcess_Refund_On_Detail
Refund__cRefund LayoutEdit (Standard Button)



Other Considerations

  • If you are running a package older than 2.16 then refer release notes for all the releases in between to know the configurations for features released in between up to release 2.17

  • Record Type Changes - in version 2.18.1 we made some changes to introduce two new Record Types of Inbound and Outbound to our Payment and Authorisation Objects.  The current collections functionality is now classed as a record type of Inbound.  



--------------------------------------------------------------------------------------------------------

Contacts/Support