예제 #1
0
 /**
  * Retrieve the dynamic parameters from discount.
  * Customer group, Site, Date from and Date to
  * If false is returned - discount can't be applied
  *
  * @param array $discount
  * @return array
  */
 protected function _getDiscountRules(array $discount)
 {
     $rules = array();
     $rulesMapping = array('group' => 'customer_group_id', 'site' => 'site_id', 'from_date' => 'time_from', 'to_date' => 'time_to');
     foreach ($rulesMapping as $discountKey => $ruleKey) {
         if (!isset($discount[$discountKey])) {
             switch ($ruleKey) {
                 case 'customer_group_id':
                     $rules[$ruleKey] = $this->getProductData('customer_group_ids');
                     break;
                 case 'site_id':
                     $rules[$ruleKey] = $this->getProductData('site_ids');
                     break;
                 case 'time_from':
                     $rules[$ruleKey] = array(Axis_Date::now()->getDate()->getTimestamp());
                     break;
                 case 'time_to':
                     $rules[$ruleKey] = array(Axis_Date::now()->getDate()->addYear(5)->getTimestamp());
                     break;
             }
             continue;
         }
         if (!is_array($discount[$discountKey])) {
             // time_from and time_to filters
             $date = new Axis_Date($discount[$discountKey], 'yyyy-MM-dd');
             if ('time_to' === $ruleKey) {
                 $date->set('23:59:59', Zend_Date::TIMES);
             }
             $discount[$discountKey] = array($date->getTimestamp());
         }
         if ('customer_group_id' === $ruleKey) {
             if (in_array(0, $discount[$discountKey])) {
                 // All groups value support
                 $customerGroupIds = $this->getProductData('customer_group_ids');
             } else {
                 $customerGroupIds = array_intersect($discount[$discountKey], $this->getProductData('customer_group_ids'));
             }
             $rules[$ruleKey] = $customerGroupIds;
         } else {
             $rules[$ruleKey] = $discount[$discountKey];
         }
     }
     return $rules;
 }
예제 #2
0
 protected function _prepareDataArray(array $data, Axis_Date $start, Axis_Date $end, $type = 'day')
 {
     $result = array();
     $start = Axis_Date::timestamp($start);
     $endTimestamp = $end->getTimestamp();
     switch (strtolower($type)) {
         case 'hour':
             $start->subMinute(1);
             while ($start->addMinute(1)->getTimestamp() < $endTimestamp) {
                 $result[$start->getTimestamp()] = 0;
             }
             break;
         case 'week':
             $start->subDay(1);
             while ($start->addDay(1)->getTimestamp() < $endTimestamp) {
                 $result[$start->getTimestamp()] = 0;
             }
             break;
         case 'month':
             $start->subDay(1);
             while ($start->addDay(1)->getTimestamp() < $endTimestamp) {
                 $result[$start->getTimestamp()] = 0;
             }
             break;
         case 'year':
             $start->subMonth(1);
             while ($start->addMonth(1)->getTimestamp() < $endTimestamp) {
                 $result[$start->getTimestamp()] = 0;
             }
             break;
         case 'day':
         default:
             $start->subHour(1);
             while ($start->addHour(1)->getTimestamp() < $endTimestamp) {
                 $result[$start->getTimestamp()] = 0;
             }
     }
     $timestamps = array_keys($result);
     asort($timestamps);
     foreach ($data as $time => $value) {
         $unixTime = strtotime($time);
         $id = null;
         foreach ($timestamps as $timestamp) {
             if ($timestamp > $unixTime) {
                 break;
             }
             $id = $timestamp;
         }
         if ($id && isset($result[$id])) {
             $result[$id] += $value;
         }
     }
     $date = Axis_Date::now();
     $data = array();
     foreach ($result as $time => $value) {
         $data[] = array('time' => $date->setTimestamp($time)->toPhpString('Y-m-d H:i:s'), 'value' => $value);
     }
     return $data;
 }