Default Price Calculation

If you have not configured a custom price calculator class, GoMeddo will execute the default price calculation.

Executing the Default Calculation

You can apply the default price calculation in your own code by calling the following global static method:

B25.Util_PluginManager.applyDefaultPriceCalculation(B25.Util_PluginManager.ReservationPriceData data)

This can be useful when you do have your own custom price calculation, but want to fall back on the default calculation in some cases. For example, in your own calculate method, you can do the following:

public void calculate(B25.Util_PluginManager.ReservationPriceData data) { if (data.reservation.B25__Account__c == null) { B25.Util_PluginManager.applyDefaultPriceCalculation(data); return; } Account linkedAccount = [ SELECT Type FROM Account WHERE Id = :data.reservation.B25__Account__c ]; if (linkedAccount.Type == 'Installation Partner') { data.reservation.B25__Subtotal__c = 0; } else { B25.Util_PluginManager.applyDefaultPriceCalculation(data); } }

Default Calculation Logic

In case you’re curious what the default price calculation does exactly, we’ve got you covered. See below for the logic executed by GoMeddo.

public void calculate(B25.Util_PluginManager.ReservationPriceData dataObj) { // take the base price (for the resource) from the reservation Decimal basePrice = dataObj.reservation.B25__Base_Price__c == null ? 0 : dataObj.reservation.B25__Base_Price__c; // set a fall back calculation method if (dataObj.reservation.B25__Calculation_Method__c == null || !B25.Util_System.getBooleanSetting(B25.Util_System.Setting.USE_CAPACITY)) { dataObj.reservation.B25__Calculation_Method__c = 'PER_TIME_UNIT'; } // calculate the subtotal based on the calculation method if (dataObj.reservation.B25__Calculation_Method__c == 'PER_PERSON') { if (dataObj.reservation.B25__Quantity__c == null || dataObj.reservation.B25__Quantity__c < 1) { dataObj.reservation.B25__Quantity__c = 1; } dataObj.reservation.B25__Subtotal__c = basePrice * dataObj.reservation.B25__Quantity__c; } else { // check the duration of the reservation (as a rounded up number of pricing time units) Long nrOfMilis = 0; if (dataObj.reservation.B25__Start__c != null && dataObj.reservation.B25__End__c != null) { nrOfMilis = dataObj.reservation.B25__End__c.getTime() - dataObj.reservation.B25__Start__c.getTime(); } else if (dataObj.reservation.B25__StartLocal__c != null && dataObj.reservation.B25__EndLocal__c != null) { nrOfMilis = dataObj.reservation.B25__EndLocal__c.getTime() - dataObj.reservation.B25__StartLocal__c.getTime(); } Decimal nrOfMinutes = (nrOfMilis / 60000); Decimal nrOfTimeUnits = nrOfMinutes / B25.Util_System.getIntegerSetting(B25.Util_System.Setting.PRICING_TIME_UNIT); Integer roundedNrOfTimeUnits = Math.ceil(nrOfTimeUnits).intValue(); if (dataObj.reservation.B25__Calculation_Method__c == 'PER_TIME_UNIT') { dataObj.reservation.B25__Subtotal__c = basePrice * roundedNrOfTimeUnits; } else if (dataObj.reservation.B25__Calculation_Method__c == 'PER_PERSON_PER_TIME_UNIT') { if (dataObj.reservation.B25__Quantity__c == null || dataObj.reservation.B25__Quantity__c < 1) dataObj.reservation.B25__Quantity__c = 1; dataObj.reservation.B25__Subtotal__c = basePrice * dataObj.reservation.B25__Quantity__c * roundedNrOfTimeUnits; } } }