protected function triggerBalanceRecalculation($eventID) { $shouldRecalculate = false; $volumeRuleTriggered = false; $activeRule = null; $is_active = RowManager_ActiveRuleManager::IS_FALSE; $is_calculated = RowManager_ActiveRuleManager::IS_TRUE; $eventPriceRules = new RowManager_PriceRuleManager(); $eventPriceRules->setEventID($eventID); $eventPriceRules->setPriceRuleType(RowManager_PriceRuleTypeManager::VOLUME_RULE); $ruleList = $eventPriceRules->getListIterator(); $ruleArray = $ruleList->getDataList(); // echo "rules <pre>".print_r($ruleArray,true)."</pre><BR>"; $ruleIDs = array(); reset($ruleArray); // cycle through volume rules foreach (array_keys($ruleArray) as $k) { $record = current($ruleArray); $volumeNeeded = $record['pricerules_value']; // echo "volume needed = ".$volumeNeeded."<BR>"; $activeRule = new RowManager_ActiveRuleManager($record['pricerules_id']); $is_active = $activeRule->getIsActive(); $is_calculated = $activeRule->getIsRecalculated(); // echo "active, calculated = ".$is_active.", ".$is_calculated."<BR>"; // if recalculation was not executed previously if (isset($is_calculated) && $is_calculated != '' && $is_calculated == RowManager_ActiveRuleManager::IS_FALSE) { $shouldRecalculate = true; break; } else { $is_calculated = RowManager_ActiveRuleManager::IS_TRUE; } if (isset($is_active) && $is_active == '') { $is_active = RowManager_ActiveRuleManager::IS_FALSE; } // get total registrations for the current event $totalRegs = 0; $total = array(); $summary = new RegSummaryTools(); $total = $summary->getCampusRegistrations($eventID, '', false, '', '', RowManager_RegistrationManager::STATUS_REGISTERED); // echo "totals <pre>".print_r($total,true)."</pre><BR>"; reset($total); foreach (array_keys($total) as $k) { $element = current($total); // check if this volume rule is triggered for current campus if ($element >= $volumeNeeded) { $volumeRuleTriggered = true; break; } next($total); } // echo "volume triggered = ".$volumeRuleTriggered; // if a volume rule was triggered for the first time if ($volumeRuleTriggered == true && $is_active == RowManager_ActiveRuleManager::IS_FALSE) { $setRecord = array(); $setRecord['is_active'] = RowManager_ActiveRuleManager::IS_TRUE; $setRecord['is_recalculated'] = RowManager_ActiveRuleManager::IS_FALSE; $activeRule->loadFromArray($setRecord); $activeRule->updateDBTable(); $volumeRuleTriggered = false; // reset value to default $shouldRecalculate = true; break; } else { if ($volumeRuleTriggered == false && $is_active == RowManager_ActiveRuleManager::IS_TRUE) { $setRecord = array(); $setRecord['is_active'] = RowManager_ActiveRuleManager::IS_FALSE; $setRecord['is_recalculated'] = RowManager_ActiveRuleManager::IS_FALSE; $activeRule->loadFromArray($setRecord); $activeRule->updateDBTable(); $shouldRecalculate = true; break; } else { if ($volumeRuleTriggered) { $volumeRuleTriggered = false; // reset value to default } else { // either way, don't need to recalculate // $shouldRecalculate = false; // do NOT set flag to FALSE because it may override setting to TRUE by prev. rule } } } next($ruleArray); } return $shouldRecalculate; }