Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Current »

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;
	}
}

  • No labels