コード例 #1
0
 /**
  * Сравнение расходов за периоды, Сравнение доходов за периоды
  *
  * @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);
 }
コード例 #2
0
 /**
  * Удаляет все операции по указанной категории
  *
  * @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);
 }
コード例 #3
0
 /**
  * Проверка корректности подсчёта баланса
  */
 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');
 }
コード例 #4
0
 public function CurrentUserIsAuthorized()
 {
     return !is_null($this->user) && $this->user->getId() > 0;
 }
コード例 #5
0
ファイル: Logs.php プロジェクト: ru-easyfinance/EasyFinance
 /**
  * Записывает в базу
  *
  * @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);
 }
コード例 #6
0
 /**
  * Удаляем служебную почту по просьбе пользователя
  * @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());
 }
コード例 #7
0
 /**
  * Удалить счёт
  *
  * @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']);
 }
コード例 #8
0
 /**
  * Возвращает количество операций по 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);
 }
コード例 #9
0
ファイル: Model.php プロジェクト: ru-easyfinance/EasyFinance
 /**
  * Редактирует дату операции
  * @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());
 }