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)