/** * Индексная страница * * @param $args array mixed * @return void */ function index($args = array()) { $this->tpl->assign('category', get_tree_select()); /** @deprecated */ $this->tpl->assign('accounts', $this->user->getUserAccounts()); /** @deprecated */ $this->tpl->assign('dateFrom', date('d.m.Y', time() - 60 * 60 * 24 * 7)); // За неделю от сегодня $this->tpl->assign('dateTo', date('d.m.Y')); // До сегодня $this->tpl->assign('name_page', 'operations/operation'); }
/** * Конвертирует сумму операции * * @param int $fromAccount * @param int $toAccount * @param float $amount * @param float $convert * @return float */ function _convertAmount($fromAccount, $toAccount, $amount, $convert) { $accounts = $this->_user->getUserAccounts(); // Если не указана сконвертированная сумма (в ПДА такое может быть) if ($convert) { return abs($convert); } if (!isset($accounts[$fromAccount]) || !isset($accounts[$toAccount])) { return false; } $curFromId = $accounts[$fromAccount]['account_currency_id']; $curTargetId = $accounts[$toAccount]['account_currency_id']; // Если перевод мультивалютный if ($curFromId != $curTargetId) { if ($convert == 0) { $currensys = $this->_user->getUserCurrency(); // приводим сумму к пром. валюте $convert = $amount / $currensys[$curTargetId]['value']; // .. и к валюте целевого счёта $convert = $convert * $currensys[$curFromId]['value']; } } $convert = $convert ? $convert : $amount; return abs($convert); }
public function tryRedirectToStartPage($forceRedirect) { //проверим, что еще не перекидывали, //чтобы дать залогиненному возможность заходить, например, на главную //с которой тоже идет редирект $redirectToStartFlagName = "REDIRECTED_TO_START_PAGE_ALREADY"; if (!isset($_COOKIE[$redirectToStartFlagName]) || $forceRedirect) { setcookie($redirectToStartFlagName, 1, 0, COOKIE_PATH, COOKIE_DOMEN, COOKIE_HTTPS); header("Location: " . $this->user->getStartUri()); exit; } }
/** * Сравнение расходов за периоды, Сравнение доходов за периоды * * @param int $type Тип операции. 0 - Расход, 1 - Доход * @param string mysqldate $date1 Дата начала первого периода в формате "YYYY-MM-DD" * @param string mysql date $date2 Дата окончания первого периода в формате "YYYY-MM-DD" * @param string mysql date $date3 Дата начала второго периода в формате "YYYY-MM-DD" * @param string mysql date $date4 Дата окончания второго периода в формате "YYYY-MM-DD" * @param int | string $accounts Счёт в виде числа, или несколько чисел разделённых запятой * @param int $currencyId Ид валюты в которой выводить результат * @return array */ function CompareForPeriods($type, $date1 = '', $date2 = '', $date3 = '', $date4 = '', $accounts = '', $currencyId = 0) { $queryString = "SELECT\n c.cat_name,\n c.cat_id,\n a.account_currency_id as cur_id,\n sum(abs(op.money)) as su,\n p.per\n FROM operation op\n INNER JOIN accounts a\n ON a.account_id=op.account_id\n INNER JOIN category c\n ON c.cat_id=op.cat_id\n INNER JOIN (\n SELECT ? AS begin_date, ? AS end_date, 1 AS per\n UNION ALL\n SELECT ? AS begin_date, ? AS end_date, 2 AS per\n ) p\n ON op.date between p.begin_date AND p.end_date\n WHERE\n op.`type`= ?\n AND op.user_id= ? AND op.accepted=1\n AND op.deleted_at IS NULL\n AND a.deleted_at IS NULL\n AND c.deleted_at IS NULL\n AND a.account_id IN({$accounts})\n GROUP BY c.cat_id, a.account_currency_id, p.per"; $rows = $this->_db->query($queryString, $date1, $date2, $date3, $date4, $type, $this->_user->getId()); $result = array(); foreach ($rows as $value) { $money = new myMoney(abs($value['su']), $value['cur_id']); $tempId = $value['per'] . $value['cat_id']; $result[$tempId] = $value; unset($result[$tempId]['cur_id']); unset($result[$tempId]['su']); if (isset($result[$tempId]['su'])) { $result[$tempId]['su'] += $this->ex->convert($money, $currencyId)->getAmount(); } else { $result[$tempId]['su'] = $this->ex->convert($money, $currencyId)->getAmount(); } } return array($result); }
/** * Тест перевода на долговой счёт */ public function testDebtTransfer() { $this->_prepareOperation(); // Долговой счёт $options = array('user_id' => $this->userId, 'account_name' => 'Debt account', 'account_currency_id' => myMoney::RUR, 'account_type_id' => Account_Collection::ACCOUNT_TYPE_CREDIT); $account = CreateObjectHelper::makeAccount($options); $toAccountId = $account['account_id']; $options = array('user_id' => $this->userId, 'system_category_id' => Category_Model::DEBT_SYSTEM_CATEGORY_ID); $debtCategoryId = CreateObjectHelper::createCategory($options); $this->user->init(); $this->user->save(); $operation = new Operation_Model($this->user); // Перевели 100 рублей с рублёвого на долларовый $opId = $operation->addTransfer(100, 0, 0, '2010-01-01', $this->accountId, $toAccountId, 'Комментарий', array('тег 1')); $dateFrom = '2009-12-29'; $dateTo = '2010-01-02'; $list = $operation->getOperationList($dateFrom, $dateTo); $this->assertEquals($debtCategoryId, $list[0]['cat_id'], 'Expected only 1 transfer operation'); }
/** * Записывает в базу * * @param oldUser $user * @param string $type 'amt' или 'book' * @param string $info Расширенная информация * @return bool */ public static function write(oldUser $user, $type, $info = '') { $sql = "INSERT INTO logs(`user_id`, `type`, `dt`, `info`) VALUES(?, ?, NOW(), ?)"; return (bool) Core::getInstance()->db->query($sql, $user->getId(), $type, $info); }
/** * Удаляем служебную почту по просьбе пользователя * @param oldUser $user * @return bool */ public function deleteServiceMail(oldUser $user) { $sql = "UPDATE users u SET user_service_mail = '' WHERE id = ?"; // @TODO Дёргать АПИ у аутсорсеров для физического удаления ящика return (bool) $this->db->query($sql, $user->getId()); }
/** * Удалить счёт * * @param oldUser $user * @param array $param */ public function delete(oldUser $user, $param) { $fin = new Targets_Model(); $noFinTarget = $fin->countTargetsOnAccount($param['id']); // если ноль значит удаляем if ($noFinTarget > 0) { return 'cel'; } return Account_Model::delete($user->getId(), $param['id']); }
/** * Возвращает количество операций по ID категории * * @param oldUser $user Ссылка на объект пользователя * @param int $categoryId Ид категории которую нужно удалить * @return int Количество операций по категории пользователя */ function getCountOperationByCategory(oldUser $user, $categoryId = 0) { $sql = "SELECT COUNT(id) FROM operation WHERE cat_id IN (\n SELECT cat_id FROM category WHERE user_id=? AND (cat_id=? OR cat_parent=?))"; return (int) $this->db->selectCell($sql, $user->getId(), $categoryId, $categoryId); }
/** * Редактирует дату операции * @param oldUser $user * @param int $id * @param mysql date $date * @return bool */ public static function editDate(oldUser $user, $id, $date) { $sql = "UPDATE operation SET `date`= ? WHERE id =? AND user_id=?;"; return Core::getInstance()->db->query($sql, $date, $id, $user->getId()); }