Example #1
0
    def put(self, transfer_account_id):
        put_data = request.get_json()

        transfer_account_id_list = put_data.get('transfer_account_id_list')
        approve = put_data.get('approve')

        transfer_account_name = put_data.get('transfer_account_name')

        payable_period_type = put_data.get('payable_period_type')
        payable_period_length = put_data.get('payable_period_length')
        payable_epoch = put_data.get('payable_epoch')

        if transfer_account_id:

            transfer_account = TransferAccount.query.get(transfer_account_id)

            if not transfer_account:
                response_object = {'message': 'Transfer account not found'}
                return make_response(jsonify(response_object)), 400

            if transfer_account_name and not transfer_account_name == transfer_account.name:
                transfer_account.name = transfer_account_name

            if payable_period_type and not payable_period_type == transfer_account.payable_period_type:
                transfer_account.payable_period_type = payable_period_type

            if payable_period_length and not payable_period_length == transfer_account.payable_period_length:
                transfer_account.payable_period_length = payable_period_length

            if payable_epoch and not payable_epoch == transfer_account.payable_epoch:
                transfer_account.payable_epoch = payable_epoch

            if not approve == transfer_account.is_approved and transfer_account.is_approved is not True:
                transfer_account.approve()

            db.session.commit()

            result = transfer_account_schema.dump(transfer_account)
            response_object = {
                'message': 'Successfully Edited Transfer Account.',
                'data': {
                    'transfer_account': result.data,
                }
            }
            return make_response(jsonify(response_object)), 201

        else:

            transfer_accounts = []
            response_list = []

            for transfer_account_id in transfer_account_id_list:

                transfer_account = TransferAccount.query.get(
                    transfer_account_id)
                if not transfer_account:
                    response_list.append({
                        'status':
                        400,
                        'message':
                        'Transfer account id {} not found'.format(
                            transfer_account_id)
                    })

                    continue

                if not transfer_account.is_approved and approve:
                    transfer_account.approve()

                transfer_accounts.append(transfer_account)

            db.session.commit()

            response_object = {
                'status': 'success',
                'message': 'Successfully Edited Transfer Accounts.',
                'data': {
                    'transfer_accounts':
                    transfer_accounts_schema.dump(transfer_accounts).data
                }
            }
            return make_response(jsonify(response_object)), 201
    def get(self, transfer_account_id):

        account_type_filter = request.args.get('account_type')
        result = None

        if transfer_account_id:
            transfer_account = TransferAccount.query.get(transfer_account_id)

            if transfer_account is None:
                response_object = {
                    'message':
                    'No such transfer account: {}'.format(transfer_account_id),
                }

                return make_response(jsonify(response_object)), 400

            if AccessControl.has_sufficient_tier(g.user.roles, 'ADMIN',
                                                 'admin'):
                result = transfer_account_schema.dump(transfer_account)
            elif AccessControl.has_any_tier(g.user.roles, 'ADMIN'):
                result = view_transfer_account_schema.dump(transfer_account)

            response_object = {
                'message': 'Successfully Loaded.',
                'data': {
                    'transfer_account': result.data,
                }
            }
            return make_response(jsonify(response_object)), 201

        else:

            search_string = request.args.get('search_string') or ''
            # HANDLE PARAM : params - Standard filter object. Exact same as the ones Metrics uses!
            encoded_filters = request.args.get('params')
            filters = process_transfer_filters(encoded_filters)
            # HANDLE PARAM : order
            # Valid orders types are: `ASC` and `DESC`
            # Default: DESC
            order_arg = request.args.get('order') or 'DESC'
            if order_arg.upper() not in ['ASC', 'DESC']:
                return {
                    'message':
                    'Invalid order value \'{}\'. Please use \'ASC\' or \'DESC\''
                    .format(order_arg)
                }
            order = asc if order_arg.upper() == 'ASC' else desc
            # HANDLE PARAM: sort_by
            # Valid orders types are: first_name, last_name, email, date_account_created, rank, balance, status
            # Default: rank
            sort_by_arg = request.args.get('sort_by') or 'rank'

            base_query = generate_search_query(
                search_string, filters, order,
                sort_by_arg).filter(TransferAccount.is_ghost != True)

            if account_type_filter == 'vendor':
                transfer_accounts_query = base_query.filter_by(is_vendor=True)
            elif account_type_filter == 'beneficiary':
                transfer_accounts_query = base_query.filter_by(
                    is_beneficiary=True)
            else:
                pass
                # Filter Contract, Float and Organisation Transfer Accounts
                transfer_accounts_query = (base_query.filter(
                    TransferAccount.account_type == TransferAccountType.USER))

            transfer_accounts, total_items, total_pages, new_last_fetched = paginate_query(
                transfer_accounts_query)

            if transfer_accounts is None:
                response_object = {
                    'message': 'No transfer accounts',
                }

                return make_response(jsonify(response_object)), 400

            if AccessControl.has_sufficient_tier(g.user.roles, 'ADMIN',
                                                 'admin'):
                result = transfer_accounts_schema.dump(transfer_accounts)
            elif AccessControl.has_any_tier(g.user.roles, 'ADMIN'):
                result = view_transfer_accounts_schema.dump(transfer_accounts)

            response_object = {
                'message':
                'Successfully Loaded.',
                'items':
                total_items,
                'pages':
                total_pages,
                'last_fetched':
                new_last_fetched,
                'query_time':
                datetime.datetime.utcnow().strftime("%m/%d/%Y, %H:%M:%S"),
                'data': {
                    'transfer_accounts': result.data
                }
            }
            return make_response(json.dumps(response_object), 200)
Example #3
0
    def get(self, transfer_account_id):

        # can_see_full_details = role in ['is_admin', 'is_view']
        #
        # if not (can_see_full_details):
        #     return less_detail

        account_type_filter = request.args.get('account_type')
        result = None

        if transfer_account_id:
            transfer_account = TransferAccount.query.get(transfer_account_id)

            if transfer_account is None:
                response_object = {
                    'message':
                    'No such transfer account: {}'.format(transfer_account_id),
                }

                return make_response(jsonify(response_object)), 400

            if g.user.is_admin:
                result = transfer_account_schema.dump(transfer_account)
            elif g.user.is_view:
                result = view_transfer_account_schema.dump(transfer_account)

            response_object = {
                'message': 'Successfully Loaded.',
                'data': {
                    'transfer_account': result.data,
                }
            }
            return make_response(jsonify(response_object)), 201

        else:
            if account_type_filter == 'vendor':
                transfer_accounts_query = TransferAccount.query.filter_by(
                    is_vendor=True)
            elif account_type_filter == 'beneficiary':
                transfer_accounts_query = TransferAccount.query.filter_by(
                    is_vendor=False)
            else:
                transfer_accounts_query = TransferAccount.query

            transfer_accounts, total_items, total_pages = paginate_query(
                transfer_accounts_query, TransferAccount)

            if transfer_accounts is None:
                response_object = {
                    'message': 'No transfer accounts',
                }

                return make_response(jsonify(response_object)), 400

            if g.user.is_admin:
                result = transfer_accounts_schema.dump(transfer_accounts)
            elif g.user.is_view:
                result = view_transfer_accounts_schema.dump(transfer_accounts)

            response_object = {
                'message': 'Successfully Loaded.',
                'items': total_items,
                'pages': total_pages,
                'data': {
                    'transfer_accounts': result.data
                }
            }
            return make_response(jsonify(response_object)), 201
    def get(self, transfer_account_id):

        account_type_filter = request.args.get('account_type')
        result = None

        if transfer_account_id:
            transfer_account = TransferAccount.query.get(transfer_account_id)

            if transfer_account is None:
                response_object = {
                    'message':
                    'No such transfer account: {}'.format(transfer_account_id),
                }

                return make_response(jsonify(response_object)), 400

            if AccessControl.has_sufficient_tier(g.user.roles, 'ADMIN',
                                                 'admin'):
                result = transfer_account_schema.dump(transfer_account)
            elif AccessControl.has_any_tier(g.user.roles, 'ADMIN'):
                result = view_transfer_account_schema.dump(transfer_account)

            response_object = {
                'message': 'Successfully Loaded.',
                'data': {
                    'transfer_account': result.data,
                }
            }
            return make_response(jsonify(response_object)), 201

        else:

            base_query = TransferAccount.query.filter(
                TransferAccount.is_ghost != True)

            if account_type_filter == 'vendor':
                transfer_accounts_query = base_query.filter_by(is_vendor=True)
            elif account_type_filter == 'beneficiary':
                transfer_accounts_query = base_query.filter_by(
                    is_beneficiary=True)
            else:
                pass
                # Filter Contract, Float and Organisation Transfer Accounts
                transfer_accounts_query = (base_query.filter(
                    TransferAccount.account_type == TransferAccountType.USER))

            transfer_accounts, total_items, total_pages, new_last_fetched = paginate_query(
                transfer_accounts_query)

            if transfer_accounts is None:
                response_object = {
                    'message': 'No transfer accounts',
                }

                return make_response(jsonify(response_object)), 400

            if AccessControl.has_sufficient_tier(g.user.roles, 'ADMIN',
                                                 'admin'):
                result = transfer_accounts_schema.dump(transfer_accounts)
            elif AccessControl.has_any_tier(g.user.roles, 'ADMIN'):
                result = view_transfer_accounts_schema.dump(transfer_accounts)

            response_object = {
                'message':
                'Successfully Loaded.',
                'items':
                total_items,
                'pages':
                total_pages,
                'last_fetched':
                new_last_fetched,
                'query_time':
                datetime.datetime.utcnow().strftime("%m/%d/%Y, %H:%M:%S"),
                'data': {
                    'transfer_accounts': result.data
                }
            }
            return make_response(json.dumps(response_object), 200)