コード例 #1
0
 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;
 }