示例#1
0
def new():
    pcfg = {"title": "New contact"}

    form = ContactsForm()

    if form.validate_on_submit():
        a = Contact()
        a.callsign = form.callsign.data
        a.gridsquare = form.gridsquare.data

        if not current_user.locator or not form.gridsquare.data:
            flash("Missing locator_qso or locator_user", "error")
            return redirect(url_for("bp_contacts.contacts"))

        if not is_valid_qth(current_user.locator, 6) or not is_valid_qth(
                form.gridsquare.data, 6):
            flash("One of the supplied QTH is not valid", "error")
            return redirect(url_for("bp_contacts.contacts"))

        _f = qth_to_coords(current_user.locator,
                           6)  # precision, latitude, longitude
        _t = qth_to_coords(form.gridsquare.data,
                           6)  # precision, latitude, longitude

        a.latitude = _t["latitude"]
        a.longitude = _t["longitude"]
        a.distance = distance.haversine_km(_f["latitude"], _f["longitude"],
                                           _t["latitude"], _t["longitude"])
        a.bearing = bearing.initial_compass_bearing(_f["latitude"],
                                                    _f["longitude"],
                                                    _t["latitude"],
                                                    _t["longitude"])
        a.bearing_star = geo_bearing_star(a.bearing)

        a.user_id = current_user.id

        db.session.add(a)
        db.session.commit()
        flash("Success updating contact: {0}".format(a.callsign), "success")
        return redirect(url_for("bp_contacts.contacts"))

    logbooks = (db.session.query(Logbook.id, Logbook.name, func.count(
        Log.id)).join(Log).filter(Logbook.user_id == current_user.id).group_by(
            Logbook.id).all())
    return render_template("contacts/new.jinja2",
                           pcfg=pcfg,
                           form=form,
                           logbooks=logbooks)