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)
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()
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)
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
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)