Esempio n. 1
0
    def modify_balances(self, data, session, curs=None):
        balances_ids = data['ids']
        currency_f = CurrencyFilter({}, {}, None)
        currencies = currency_f.filter_objs(curs)
        currencies_id_idx = build_index(currencies, 'id')

        balance_f = BalanceFilter(session, {'ids': balances_ids}, {}, None)
        balances = balance_f.filter_objs(curs)

        # Setting users ids for logging
        users_ids = [balance.user_id for balance in balances]
        data['users_ids'] = users_ids

        # Handling different currencies for different balances
        new_overdraft_limit = data.pop('new_overdraft_limit', None)
        def loader():
            if new_overdraft_limit is not None:
                for b in balances:
                    d = {'new_overdraft_limit': new_overdraft_limit}
                    amount_fields = ['new_overdraft_limit']
                    currency = currencies_id_idx[b.currency_id]
                    d = decimal_texts_to_cents(d, currency, amount_fields)
                    b.overdraft_limit = d['new_overdraft_limit']
            return balances

        self.update_objs(curs, data, loader)
        return response_ok()
Esempio n. 2
0
    def modify_balances(self, data, session, curs=None):
        balances_ids = data['ids']
        currency_f = CurrencyFilter({}, {}, None)
        currencies = currency_f.filter_objs(curs)
        currencies_id_idx = build_index(currencies, 'id')

        balance_f = BalanceFilter(session, {'ids': balances_ids}, {}, None)
        balances = balance_f.filter_objs(curs)

        # Setting users ids for logging
        users_ids = [balance.user_id for balance in balances]
        data['users_ids'] = users_ids

        # Handling different currencies for different balances
        new_overdraft_limit = data.pop('new_overdraft_limit', None)

        def loader():
            if new_overdraft_limit is not None:
                for b in balances:
                    d = {'new_overdraft_limit': new_overdraft_limit}
                    amount_fields = ['new_overdraft_limit']
                    currency = currencies_id_idx[b.currency_id]
                    d = decimal_texts_to_cents(d, currency, amount_fields)
                    b.overdraft_limit = d['new_overdraft_limit']
            return balances

        self.update_objs(curs, data, loader)
        return response_ok()
Esempio n. 3
0
 def _get_active_balance(self, session, curs, data, log_user_id=True, for_update=True):
     balance_f = BalanceFilter(session, {'id': data['balance_id']}, {}, None)
     balance = balance_f.filter_one_obj(curs, for_update=for_update)
     if log_user_id:
         # setting user_id for correct action logging
         data['user_id'] = balance.user_id
     if not balance.is_active:
         raise BalanceDisabled()
     else:
         return balance
Esempio n. 4
0
 def _get_active_balance(self,
                         session,
                         curs,
                         data,
                         log_user_id=True,
                         for_update=True):
     balance_f = BalanceFilter(session, {'id': data['balance_id']}, {},
                               None)
     balance = balance_f.filter_one_obj(curs, for_update=for_update)
     if log_user_id:
         # setting user_id for correct action logging
         data['user_id'] = balance.user_id
     if not balance.is_active:
         raise BalanceDisabled()
     else:
         return balance
Esempio n. 5
0
    def get_balances(self, data, session, curs=None):
        f_params = data['filter_params']
        self._f_param_currecncy_code_to_id(curs, f_params)

        balance_f = BalanceFilter(session, f_params, data['paging_params'],
                                  data.get('ordering_params'))
        return self._get_balances(curs, balance_f)
Esempio n. 6
0
    def test_add_balance(self, curs=None):
        sess = self.login_actor()
        user_id = 4444

        # not used currency
        req = {'session_id': sess.session_id, 'user_id': user_id, 'currency_code': 'RUB'}
        self.assertRaises(RequestProcessingError, self.add_balance, **req)

        self.set_used_currencies(sess, ['RUB', 'BZD'])

        # correct balance creation
        req = {'session_id': sess.session_id, 'user_id': user_id, 'currency_code': 'RUB'}
        resp = self.add_balance(**req)
        self.check_response_ok(resp)
        balance_f = BalanceFilter(sess, {'id': resp['id']}, {}, {})
        balance = balance_f.filter_one_obj(curs)
        self.assertEquals(True, balance.is_active)
        self.assertEquals(sess.environment_id, balance.environment_id)
        self.assertEquals(0, balance.overdraft_limit)
        self.assertEquals(0, balance.real_amount)
        self.assertEquals(0, balance.virtual_amount)
        self.assertEquals(0, balance.locked_amount)

        req = {'session_id': sess.session_id, 'user_id': user_id, 'currency_code': 'BZD',
            'overdraft_limit': '102.30'}
        resp = self.add_balance(**req)
        self.check_response_ok(resp)
        balance_f = BalanceFilter(sess, {'id': resp['id']}, {}, {})
        balance = balance_f.filter_one_obj(curs)
        self.assertEquals(True, balance.is_active)
        self.assertEquals(sess.environment_id, balance.environment_id)
        self.assertEquals(10230, balance.overdraft_limit)
        self.assertEquals(0, balance.real_amount)
        self.assertEquals(0, balance.virtual_amount)
        self.assertEquals(0, balance.locked_amount)

        # wrong currency code
        req = {'session_id': sess.session_id, 'user_id': user_id, 'currency_code': 'XXX'}
        self.assertRaises(RequestProcessingError, self.add_balance, **req)

        # adding duplicate balance
        req = {'session_id': sess.session_id, 'user_id': user_id, 'currency_code': 'RUB'}
        self.assertRaises(RequestProcessingError, self.add_balance, **req)
Esempio n. 7
0
 def get_balances_self(self, data, session, curs=None):
     balance_f = BalanceFilter(session, {'user_id': session.user_id}, {},
                               ['-currency_id'])
     return self._get_balances(curs, balance_f)