Exemplo n.º 1
0
 /**
  * Get pricing data for a given rate / subcriber.
  * @param int $volume The usage volume (seconds of call, count of SMS, bytes  of data)
  * @param string $usageType The type  of the usage (call/sms/data)
  * @param mixed $rate The rate of associated with the usage.
  * @param mixed $sub_balance the  subscriber that generated the usage.
  * @param Billrun_Plan $plan the subscriber's current plan
  * @return Array the 
  * @todo refactoring the if-else-if-else-if-else to methods
  */
 protected function getLinePricingData($volume, $usageType, $rate, $sub_balance, $plan)
 {
     $accessPrice = isset($rate['rates'][$usageType]['access']) ? $rate['rates'][$usageType]['access'] : 0;
     $ret = array();
     if ($plan->isRateInBasePlan($rate, $usageType)) {
         $planVolumeLeft = $plan->usageLeftInBasePlan($sub_balance, $rate, $usageType);
         $volumeToCharge = $volume - $planVolumeLeft;
         if ($volumeToCharge < 0) {
             $volumeToCharge = 0;
             $ret['in_plan'] = $volume;
             $accessPrice = 0;
         } else {
             if ($volumeToCharge > 0) {
                 if ($planVolumeLeft > 0) {
                     $ret['in_plan'] = $volume - $volumeToCharge;
                 }
                 $ret['over_plan'] = $volumeToCharge;
             }
         }
     } else {
         if ($plan->isRateInPlanGroup($rate, $usageType)) {
             $groupVolumeLeft = $plan->usageLeftInPlanGroup($sub_balance, $rate, $usageType);
             $volumeToCharge = $volume - $groupVolumeLeft;
             if ($volumeToCharge < 0) {
                 $volumeToCharge = 0;
                 $ret['in_group'] = $ret['in_plan'] = $volume;
                 $accessPrice = 0;
             } else {
                 if ($volumeToCharge > 0) {
                     if ($groupVolumeLeft > 0) {
                         $ret['in_group'] = $ret['in_plan'] = $volume - $volumeToCharge;
                     }
                     if ($plan->getPlanGroup() !== FALSE) {
                         // verify that after all calculations we are in group
                         $ret['over_group'] = $ret['over_plan'] = $volumeToCharge;
                     } else {
                         $ret['out_group'] = $ret['out_plan'] = $volumeToCharge;
                     }
                 }
             }
             if ($plan->getPlanGroup() !== FALSE) {
                 $ret['arategroup'] = $plan->getPlanGroup();
             }
         } else {
             // else if (dispatcher->chain_of_responsibilty)->isRateInPlugin {dispatcher->trigger->calc}
             $ret['out_plan'] = $volumeToCharge = $volume;
         }
     }
     $price = $accessPrice + self::getPriceByRate($rate, $usageType, $volumeToCharge);
     //Billrun_Factory::log()->log("Rate : ".print_r($typedRates,1),  Zend_Log::DEBUG);
     $ret[$this->pricingField] = $price;
     return $ret;
 }