Skip to end of metadata
Go to start of metadata
global class GoMeddoCustomPricingCalculations implements B25.Util_PluginManager.ReservationPrice {
public void calculate(B25.Util_PluginManager.ReservationPriceData data) {
B25.Util_PluginManager.applyDefaultPriceCalculation(data);
if (data.relatedRecords == null && data.reservation.Contact_Voucher_Code__c == null) {
return;
}
String voucherCode;
if (data.relatedRecords != null && data.relatedRecords.get('B25__ReservationContacts__r') != null) {
// reservation contacts configured
if (!data.relatedRecords.get('B25__ReservationContacts__r').isEmpty()) {
B25__ReservationContact__c reservationContact = (B25__ReservationContact__c) data.relatedRecords.get('B25__ReservationContacts__r')[0];
voucherCode = reservationContact.Voucher_Code__c;
}
} else if(data.reservation.Contact_Voucher_Code__c != null) {
// regular contacts configured
voucherCode = data.reservation.Contact_Voucher_Code__c;
}
if (voucherCode == null) {
return;
}
List<Configured_Voucher__c> matchingVouchers = [
SELECT
Id,
Name,
Discount_Amount__c,
Discount_Percent__c,
Is_Leading_Up_Voucher__c,
Leading_Up_Voucher_Validity__c,
Valid_From__c,
Valid_Until__c
FROM
Configured_Voucher__c
WHERE
Name = :voucherCode
AND Is_Active__c = true
AND (Discount_Amount__c != NULL OR Discount_Percent__c != NULL)
AND (Valid_From__c <= TODAY AND Valid_Until__c > TODAY)
WITH SECURITY_ENFORCED
];
if (matchingVouchers.isEmpty()) {
return;
}
Configured_Voucher__c matchingVoucher = matchingVouchers[0];
if (matchingVoucher.Is_Leading_Up_Voucher__c && Date.today().daysBetween(data.reservation.B25__Start__c.date()) > matchingVoucher.Leading_Up_Voucher_Validity__c) {
return;
}
performSubtotalUpdate(data, matchingVoucher);
}
private static void performSubtotalUpdate(B25.Util_PluginManager.ReservationPriceData data, Configured_Voucher__c matchingVoucher) {
if (matchingVoucher.Discount_Amount__c != null) {
Decimal updatedSubtotal = data.reservation.B25__Subtotal__c - matchingVoucher.Discount_Amount__c;
data.reservation.B25__Subtotal__c = updatedSubtotal < 0 ? 0 : updatedSubtotal;
} else {
Decimal amountToSubtract = data.reservation.B25__Subtotal__c - (data.reservation.B25__Subtotal__c * (matchingVoucher.Discount_Percent__c/100));
data.reservation.B25__Subtotal__c = amountToSubtract;
}
data.reservation.Voucher_Code__c = matchingVoucher.Name;
}
}