예제 #1
0
def utility():
    STATUS_CREATE = "create"
    STATUS_CHECK = "check"

    if not check_bronze_kyc_level():
        return redirect(url_for('kyc_incomplete'))

    utility_id = int(request.args.get("utility"))
    utility = Utility.from_id(db.session, utility_id)
    Utility.jsonify_bank_descriptions([utility])
    if request.method == "POST":
        bank_index = int(request.form.get("zbp_bank_index"))
        bank_desc = utility.bank_description_json[bank_index]
        status = request.form.get("zbp_state")
        email = request.form.get("zbp_email")
        amount = request.form.get("zbp_amount")
        utility_name = request.form.get("zbp_utility_name")
        values = request.form
        error = None
        if status == STATUS_CREATE:
            error = validate_email(email)
            if not error:
                error = validate_amount(amount)
            if not error:
                error = validate_values(bank_desc, values)
            if not error:
                status = STATUS_CHECK
        elif status == STATUS_CHECK:
            error = validate_email(email)
            if not error:
                error = validate_amount(amount)
            if not error:
                error = validate_values(bank_desc, values)
            if not error:
                details = bank_transaction_details(bank_desc, values)
                invoice, err = invoice_create(utility, details, email, amount,
                                              utility_name)
                if invoice:
                    return redirect(url_for("invoice", token=invoice.token))
                else:
                    error = "failed to create invoice ({})".format(err)
        return render_template("utility.html",
                               utility=utility,
                               selected_bank_name=bank_desc["name"],
                               status=status,
                               email=email,
                               amount=amount,
                               utility_name=utility_name,
                               values=values,
                               error=error)
    else:
        return render_template("utility.html",
                               utility=utility,
                               status=STATUS_CREATE,
                               values=werkzeug.MultiDict())
예제 #2
0
def register_new_utility():
    """ Register_new_utility.
    """

    if request.method == 'POST':
        utility_id = request.json['utility_id']
        utility = Utility().get(utility_id)
        utility.approval_count += 1
        if utility.approval_count >= 10:
            utility.registered = True
        utility.save()
예제 #3
0
def get_all_utilities():
    """ Returns all the utilities and renders them in utility template.
    """
    
    utilities = Utility().all()
    context = {}
    context['utilities'] = utilities
    return render_template('utilities.html', **context)
예제 #4
0
def add_utility():
    """Upload a utility
    """

    lat = request.form.get('lat')
    if lat == None:
        return jsonify('lat parameter is required'), 400

    try:
        lat = float(lat)
    except ValueError:
        return jsonify('lat needs to be double'), 400

    lon = request.form.get('lon')
    if lon == None:
        return jsonify('lon parameter is required'), 400

    try:
        lat = float(lat)
    except ValueError:
        return jsonify('lon needs to be double'), 400

    description = request.form.get('description')
    if description == None:
        return jsonify('description parameter is required'), 400

    file = request.files.get('image')
    if file == None:
        return jsonify('image parameter is required'), 400

    # Upload image to GCP
    id = str(uuid.uuid4())
    upload_to_gcp(id, file)

    u = Utility(
        id=id,
        type=0,
        lat=lat,
        lon=lon,
        description=description,
    )
    db.session.add(u)
    db.session.commit()

    return jsonify(u.to_json()), 200
예제 #5
0
def get_user_owned_utility():
    """ Returns User owned Utilities
    """

    user_id = flask_session.get('user_id')
    utilities = Utility().get_user_utility(user_id)
    context = dict(
        utilities=utilities
    )
    return render_template('owned_utilities.html', **context)
예제 #6
0
def utility_item(utility_id):
    """ Renders template to add new utility item.

    :param utility_id: id for the requested utility.
    :param type: int
    """

    utility = Utility().get(utility_id)
    context = {}
    context['utility'] = utility
    return render_template('add_utility_item.html', **context)
예제 #7
0
def add_new_utility():
    """ Adds a new utility to Xena's db.
    """
    
    user_id = flask_session.get('user_id')
    if request.method == 'POST':
        data = request.form
        new_utility = Utility(
            name=data['name'],
            description=data['description'],
            image=data['image'],
            user_utility_id=user_id,
            address=data['address']
        )
        new_utility.create()
        return redirect(
            url_for(
                'get_all_utilities'
            )
        )
예제 #8
0
def get_utility(utility_id):
    """ Returns data for a selected utility.

    :param utility_id: Id for the requested utility.
    :param type: int
    """

    utility = Utility().get(utility_id)
    context = dict(
        utility=utility
    )
    return render_template('show_utility.html', **context)
예제 #9
0
def get_unregistered_tran():
    """ Returns all the unregistered transactions to send for mining.
    """
    
    transactions = UtilityItemUser().get_unregistered_transactions()
    transactions_dict = {}
    i = 0
    for transaction in transactions:
        i += 1
        trans = {}
        trans['sender_id'] = transaction.user_id
        trans['transaction_id'] = transaction.id
        reciever_id = Utility().get_owner(transaction.utility_id)
        amount = UtilityItem().get_price(transaction.utility_item_id)
        trans['amount'] = amount
        trans['reciever'] = reciever_id
        transactions_dict['trans' + str(i)] = trans
    return jsonify(transactions_dict)
예제 #10
0
def main(username):
    if current_user.is_authenticated:
        # If a user is logged in from a past session but has no record in our
        #  database (was deleted), we log them out and consider them anonymous
        try:
            assert current_user.id
        except AssertionError:
            logout_user()
        else:
            current_user.update_usage()

    user = None
    key = username if redis.get("Q:" + username) else ""

    if not key:
        # note: 'current_user' is the user that is currently logged in.
        #       'user' is the user we are displaying data for.
        user = Users.get(username)
        if not user:
            flash("user '{}' is not registered with this app".format(username))
            return redirect(url_for('splash'))

    date1 = request.args.get("date1") or request.args.get("after", "")
    date2 = request.args.get("date2") or request.args.get("before", "")
    preset = request.args.get("preset", "")
    limit = request.args.get("limit", "")
    baselayer = request.args.getlist("baselayer")
    ids = request.args.get("id", "")
    group = "multi" if key else request.args.get("group", "")

    if not ids:
        if (not date1) and (not date2):
            if preset:
                try:
                    preset = int(preset)
                except ValueError:
                    flash("'{}' is not a valid preset".format(preset))
                    preset = 7
            elif limit:
                try:
                    limit = int(limit)
                except ValueError:
                    flash("'{}' is not a valid limit".format(limit))
                    limit = 1
            elif group:
                pass
            else:
                limit = 10

    c1 = request.args.get("c1", "")
    c2 = request.args.get("c2", "")
    sz = request.args.get("sz", "")

    lat = request.args.get("lat")
    lng = request.args.get("lng")
    zoom = request.args.get("zoom")
    autozoom = request.args.get("autozoom") in ["1", "true"]

    if (not lat) or (not lng):
        lat, lng = app.config["MAP_CENTER"]
        zoom = app.config["MAP_ZOOM"]
        autozoom = "1"

    if current_user.is_anonymous or (not current_user.is_admin()):
        event = {
            "ip": request.access_route[-1],
            "agent": vars(request.user_agent),
            "msg": Utility.href(request.url, request.full_path)
        }

        if not current_user.is_anonymous:
            event.update({
                "profile": current_user.profile,
                "cuid": current_user.id
            })

        EventLogger.new_event(**event)

    paused = request.args.get("paused") in ["1", "true"]
    return render_template('main.html',
                           user=user,
                           lat=lat,
                           lng=lng,
                           zoom=zoom,
                           ids=ids,
                           group=group,
                           key=key,
                           preset=preset,
                           date1=date1,
                           date2=date2,
                           limit=limit,
                           autozoom=autozoom,
                           paused=paused,
                           baselayer=baselayer,
                           c1=c1,
                           c2=c2,
                           sz=sz)
예제 #11
0
    'Central AC': [2023, 'Heating and Cooling'],
    'Range Oven': [2795, 'Kitchen'],
    'Dishwasher': [1172, 'Kitchen'],
    'Refrigerator': [366, 'Kitchen']
}

for name in supplemental_appl.keys():
    appliance = Appliance(name=name,
                          watts=supplemental_appl[name][0],
                          category=supplemental_appl[name][1])
    cleaned_appliances.append(appliance)

#Clean utility rate data from US
utility_rates = []
for val in wsheet_util.iter_rows(min_row=5, max_row=66, values_only=True):
    rate = Utility(location=val[0], rate=val[1])
    utility_rates.append(rate)

#Clean utility rate data from Canada
canada_list = [td.get_text() for td in canadian_util_rate_html.find_all('td')]
#strip '¢/kWh' from rates
canada_list_cleaned = [rate.strip('¢/kWh') for rate in canada_list]

#append Utility instances to utility_rates
for val in range(0, len(canada_list_cleaned), 2):
    rate = Utility(location=canada_list_cleaned[val],
                   rate=canada_list_cleaned[val + 1])
    utility_rates.append(rate)

#add cell phone and tablet appliances
cell_phone = Appliance(name="Cell Phone Charger",
예제 #12
0
def utilities():
    if not check_bronze_kyc_level():
        return redirect(url_for('kyc_incomplete'))

    utilities = Utility.all_alphabetical(db.session)
    return render_template('utilities.html', utilities=utilities)