/** * @param array $opts - массив опций для генерации отчета: * $opts = array ( * "filename" => Имя файла для генерации (default: file.rtf) * "tpl" => Обработчик данных отчета * "time" => Опция позволяет добавить дату и время генерации в название файла (default: false) * ) * * @param array $data - массив данных, по которым получаем отчет * @param string $optfile - имя файла настроек для генератора RTF (default: rtf_config.inc) * @return bool - выводит false в случае неудачи */ public static function generate($opts, $data, $optfile = 'rtf_config.inc') { $result = false; $opts = (array) $opts; $data = (array) $data; $opts = array("filename" => array_key_exists("filename", $opts) ? $opts["filename"] : "file.rtf", "tpl" => array_key_exists("tpl", $opts) ? $opts["tpl"] : "", "time" => array_key_exists("time", $opts) ? $opts["time"] : false); $finfo = pathinfo($opts["filename"]); $name = $finfo["filename"]; if ($opts["time"]) { $cur_date = toZendDate('now'); $name .= "_" . $cur_date->get(getTimeFormat('datetimef')); } $opts["filename"] = $name . "." . $finfo["extension"]; $tpl = ucfirst(strtolower($opts["tpl"])); $postfix = isEtpGazprom() ? 'Gaz' : 'Etp'; $class = 'Model_Docs_' . $postfix . "_" . $tpl; try { if (class_exists($class)) { $template = new $class($data); $template->prepare(); self::renderTpl($opts["filename"], $template, $optfile); } return $result; } catch (ResponseException $e) { return array('success' => false, 'message' => $e->getMessage()); } }
protected function prepareTransactions($transactions, Zend_Date $start_from, Zend_Date $start_till) { $start_till = clone $start_till; $start_till->addDay(1); $prepared = array(); $total_debet = 0; $total_credit = 0; $deposit_from_correct = 0; $deposit_till_correct = 0; foreach ($transactions as $tr) { $date = toZendDate($tr['date']); if (in_array($date->compare($start_from), array(0, 1)) && in_array($date->compare($start_till), array(-1, 0))) { $doc = ""; $debet = 0; $credit = 0; $colored = false; switch ($tr['operation_type']) { case 'money_deposit': if ($tr['fee_revert']) { $doc = "Возврат платы за участие " . $tr['act_number']; $colored = true; } else { $doc = "Оплата п\\п" . $tr['number']; } $credit = (double) $tr['sum']; $total_credit += $credit; break; case 'service_fee': $doc = "Списание " . $tr['act_number']; $debet = (double) $tr['sum']; $total_debet += $debet; break; case 'money_back': $doc = "Возврат на р\\с" . $tr['bank_account']; $debet = (double) $tr['sum']; $total_debet += $debet; break; } $data = array('date' => $date, 'doc' => $doc, 'debet' => $debet, 'credit' => $credit, 'colored' => $colored); $prepared[] = $data; } else { if ($date->compare($start_from) == -1) { $deposit_from_correct += (double) $tr['sum']; } if ($date->compare($start_till) == 1) { $deposit_till_correct += (double) $tr['sum']; } } // Теперь отредактируем интервалы из-за транзакций пополнения, которые попали из других интервалов $tr_date = toZendDate($tr['tr_date']); if ($tr_date->compare($start_from) == -1) { // Уменьшение нижней границы $deposit_from_correct -= (double) $tr['sum']; } if ($tr_date->compare($start_till) == 1) { // Увеличение верхней границы $deposit_till_correct -= (double) $tr['sum']; } } return array('transactions' => $prepared, 'total_debet' => $total_debet, 'total_credit' => $total_credit, 'deposit_from_correct' => $deposit_from_correct, 'deposit_till_correct' => $deposit_till_correct); }