/** * Сравнение расходов за периоды, Сравнение доходов за периоды * * @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); }
/** * Удаляет все операции по указанной категории * * @param oldUser $user * @param int $catId */ function deleteOperationsByCategory(oldUser $user, $catId) { $sql = "SELECT id FROM operation WHERE user_id = ? AND cat_id = ?"; $operations = $this->db->selectCol($sql, $user->getId(), $catId); if (count($operations) > 0) { $this->db->query("BEGIN;"); foreach ($operations as $opId) { $this->deleteOperation($opId); } $this->db->query("COMMIT;"); } return (int) count($operations); }
/** * Проверка корректности подсчёта баланса */ public function testStat() { $login = '******' . mktime(); $pass = '******'; $options = array('user_login' => $login, 'user_pass' => sha1($pass), 'user_active' => 1, 'user_new' => 0, 'user_currency_default' => myMoney::UAH); CreateObjectHelper::makeUser($options); $user = new oldUser($login, $pass); // Счета $options = array('user_id' => $user->getId(), 'account_name' => 'USD Account For stat test', 'account_currency_id' => myMoney::USD); $account = CreateObjectHelper::makeAccount($options); $operation = new Operation_Model($user); $options = array('user_id' => $user->getId()); $catId = CreateObjectHelper::createCategory($options); $dateFrom = '2009-12-29'; $dateTo = '2010-01-02'; $rate = sfConfig::get('ex')->getRate(myMoney::UAH, myMoney::USD); $usdSpent = 100; $uahSpent = $usdSpent / $rate; $opId = $operation->add(Operation::TYPE_EXPENSE, $usdSpent, '2010-01-01', $catId, 'Комментарий', $account['account_id'], array('тег 1')); $stat = $operation->getOperationList($dateFrom, $dateTo, null, null, -1, null, null, null, true); $this->assertEquals(round($uahSpent, 2), round(abs($stat), 2), 'Expected 100 dollars have been spent'); }
public function CurrentUserIsAuthorized() { return !is_null($this->user) && $this->user->getId() > 0; }
/** * Записывает в базу * * @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()); }