/**
  * Возвращает сформированный массив дат
  * @param Calendar_Event $event
  * @param string $period
  * @return array
  */
 private function _repeat(Calendar_Event $event, $period)
 {
     $datetime = new DateTime($event->getDate());
     $week = $event->getWeek();
     // Массив с датами события
     $arrayDays = array();
     $lastDate = strtotime($event->getLast());
     // Если мы идём до даты окончания
     if ($lastDate > 0) {
         // Устанавливаем максимальное число повторов
         $endRepeat = self::MAX_EVENTS;
     } else {
         $endRepeat = $event->getRepeat();
     }
     for ($i = 1; $i <= $endRepeat; $i++) {
         if ($lastDate > 0 && $datetime->format('U') > $lastDate) {
             return $arrayDays;
         }
         if (count($arrayDays) > self::MAX_EVENTS) {
             $this->_errors['repeat'] = "Максимальное количество повторений = " . self::MAX_EVENTS . " раз, у вас " . count($arrayDays);
             return false;
         }
         if ($period == 'week') {
             if ($week[$datetime->format('N') - 1] == 1) {
                 $arrayDays[] = $datetime->format('Y-m-d');
             }
             // День недели для выбранной даты, от 1 (пнд) до 7 (вск)
             $dwr = $datetime->format('N');
             // Перебираем по циклу неделю, на один день меньше
             for ($j = 0; $j < 6; $j++) {
                 $dw = $dwr + $j;
                 if ($dw > 6) {
                     $dw = $dw - 7;
                 }
                 if ($week[$dw] == 1) {
                     $arrayDays[] = date('Y-m-d', $datetime->format('U') + ($j + 1) * 86400);
                 }
             }
         } else {
             $arrayDays[] = $datetime->format('Y-m-d');
         }
         $datetime->modify("+1 " . $period);
     }
     return $arrayDays;
 }
Exemple #2
0
 /**
  * Добавляет рег. операции
  * @param oldUser $user
  * @param Calendar_Event $event
  * @param int $chain
  * @param array $arrayDays
  */
 private function createOperations(oldUser $user, Calendar_Event $event, $chain, $arrayDays)
 {
     // Создаём повторы события в виде неподтверждённых операций
     $operationsArray = array();
     foreach ($arrayDays as $value) {
         // @TODO Посмотреть, как можно адаптировать $event->__getArray()
         $operationsArray[] = array('type' => $event->getType(), 'account' => $event->getAccount(), 'amount' => $event->getAmount(), 'category' => $event->getCategory(), 'date' => $value, 'comment' => $event->getComment(), 'tags' => $event->getTags(), 'convert' => $event->getConvert(), 'close' => $event->getClose(), 'currency' => $event->getCurrency(), 'toAccount' => $event->getToAccount(), 'target' => $event->getTarget(), 'last' => $event->getLast(), 'time' => $event->getTime(), 'every' => $event->getEvery(), 'repeat' => $event->getRepeat(), 'week' => $event->getWeek(), 'accepted' => 0, 'chain' => $chain, 'mailEnabled' => $event->getMailEnabled(), 'mailDaysBefore' => $event->getMailDaysBefore(), 'mailHour' => $event->getMailHour(), 'mailMinutes' => $event->getMailMinutes(), 'smsEnabled' => $event->getSmsEnabled(), 'smsDaysBefore' => $event->getSmsDaysBefore(), 'smsHour' => $event->getSmsHour(), 'smsMinutes' => $event->getSmsMinutes());
     }
     $operation = new Operation_Model();
     // Расход и доход
     if ($event->getType() <= 1) {
         return $operation->addSome($operationsArray);
     } elseif ($event->getType() == 2) {
         return $operation->addSomeTransfer($operationsArray);
     }
 }