Example #1
0
def update_bid():
    """Update a bid"""
    data = {
        'email': request.json.get('email'),
        'password': request.json.get('password'),
        'amount': request.json.get('amount'),
        'bid_id': request.json.get('bid_id'),
    }
    check_valid(UpdateBidSchema().validate(data))

    user = Users.get_user(data['email'], data['password'])
    bid = Bids.get_bid(data['email'], data['bid_id'])
    project = Projects.get_project(bid.project_id, 0)

    total_bids = 0
    current_amnt = float(bid.amount)
    new_amnt = float(request.json['amount'])

    for item in project.bids_received:
        total_bids = total_bids + float(item.amount)

    total_bids = total_bids - current_amnt + new_amnt
    if float(project.contract_value) < total_bids:
        return jsonify({
            "msg": "The amount added is too much. Reduce it by {}".format(
                (total_bids - float(project.contract_value)))}), 400

    bid.amount = new_amnt
    bid.date = datetime.date.today()
    bid.save()

    return jsonify({
        'message': 'Updated Bid.',
        'data': bid.serialize(),
        }), 200
Example #2
0
def create_project():
    """Create a project"""
    data = {
        'email': request.json.get('email'),
        'password': request.json.get('password'),
        'name': request.json.get('name'),
        'description': request.json.get('description'),
        'contract_value': request.json.get('value'),
        'percentage_return': request.json.get('return'),
        'end_date': request.json.get('end_date'),
    }
    check_valid(CreateProjectSchema().validate(data))

    user = Users.get_user(data['email'], data['password'])
    project = Projects(
        name=data['name'], description=data['description'],
        contract_value=data['contract_value'],
        percentage_return=data['percentage_return'],
        start_date=datetime.date.today(), end_date=data['end_date'],
        user_email=user.email)
    project.save()

    data['project_id'] = project.id

    return jsonify({
        'message': 'Project Created Successfully.',
        'data': data,
        }), 201
Example #3
0
def bid_to_project():
    """Bid to fund a project"""
    data = {
        'email': request.json.get('email'),
        'password': request.json.get('password'),
        'amount': request.json.get('amount'),
        'project_id': request.json.get('project_id'),
    }
    check_valid(BidSchema().validate(data))

    data['amount'] = float(data['amount'])
    user = Users.get_user(data['email'], data['password'])
    project = Projects.get_project(
        request.json['project_id'], data['amount'])

    bid = Bids(
        amount=data['amount'], date=datetime.date.today(),
        user_email=user.email, project_id=project.id,)
    bid.save()

    data['user_email'] = user.email
    data['project_id'] = project.id
    data['bid_id'] = bid.id
    data['potential_profit_margin'] = "{0:.2f}".format(
        float(project.percentage_return) / 100 * data['amount'])

    return jsonify({
        'message': 'Bid Created Successfully.',
        'data': data,
        }), 201
Example #4
0
def my_projects():
    """Get single user's projects"""
    data = {
        'email': request.json.get('email'),
        'password': request.json.get('password'),
    }
    check_valid(EmailPasswordSchema().validate(data))

    user = Users.get_user(data['email'], data['password'])
    projects = Projects.query.filter_by(user_email=user.email)
    res = list()
    for item in projects:
        if item.active is False:
            continue
        res.append(Projects.serialize(item))

    return jsonify({'data': res}), 200
Example #5
0
def delete_projects():
    """Delete a project"""
    data = {
        'email': request.json.get('email'),
        'password': request.json.get('password'),
        'project_id': request.json.get('project_id'),
    }
    check_valid(DeleteProjectSchema().validate(data))

    user = Users.get_user(data['email'], data['password'])
    project = Projects.query.filter_by(
        user_email=user.email, id=data['project_id']).first()
    if project is None:
        return jsonify({'msg': "Access Denied"}), 401
    project.delete()

    return jsonify({'msg': "Deleted"}), 200
Example #6
0
def update_projects():
    """Update a single project"""
    changes = {
        "name": request.json.get('name'),
        "description": request.json.get('description'),
        "contract_value": request.json.get('value'),
        "percentage_return": request.json.get('percentage_return'),
        "end_date": request.json.get('end_date'),
    }
    data = changes.copy()
    data.update({
        'email': request.json.get('email'),
        'password': request.json.get('password'),
        'project_id': request.json.get('project_id'),
    })
    check_valid(UpdateProjectSchema().validate(data))

    user = Users.get_user(data['email'], data['password'])
    projects = Projects.query.filter_by(
        user_email=user.email, id=data['project_id']).first()

    total_bids = 0
    if projects:
        for item in projects.bids_received:
            total_bids = total_bids + float(item.amount)

        if changes['contract_value'] is not None and \
                float(changes['contract_value']) < total_bids:
            return jsonify({
                "msg": "Cannot reduce amount below total bids ({})".format(
                    total_bids)}), 400

        for key in changes:
            if changes[key] is None:
                continue
            setattr(projects, key, changes[key])
        projects.save()

        return jsonify({
            'msg': "Success",
            'data': projects.serialize()
            }), 200
    return jsonify({'msg': "Access Denied."}), 401
Example #7
0
def my_bids():
    """Get my bid"""
    data = {
        'email': request.json.get('email'),
        'password': request.json.get('password'),
    }
    err = EmailPasswordSchema().validate(data)
    if err:
        return jsonify(err), 400
    user = Users.get_user(request.json['email'], request.json['password'])
    bid = Bids.query.filter_by(user_email=user.email).all()

    res = []
    for item in bid:
        item = item.serialize()
        project = Projects.query.filter_by(id=item['project']).first()
        project = project.serialize()
        project.pop('bids')
        item['project'] = project
        res.append(item)

    return jsonify({'data': res}), 200
Example #8
0
def delete_bid():
    """Delete a bid"""
    data = {
        'email': request.json.get('email'),
        'password': request.json.get('password'),
        'bid_id': request.json.get('bid_id'),
    }
    err = DeleteBidSchema().validate(data)
    if err:
        return jsonify(err), 400
    user = Users.get_user(data['email'], data['password'])

    bid = Bids.query.filter_by(
        user_email=user.email, id=data['bid_id']).first()
    if not bid:
        return jsonify({'msg': "This bid was not found"}), 404

    # Retrieve project to check whether project still active
    project = Projects.get_project(bid.project_id, 0)

    bid.delete()

    return jsonify({'msg': "Bid Deleted"}), 200