def get_need(need_id): need = Need.get(need_id) if not need: return api_error('Need not found') if current_user.id != need.alert.user_id: return api_error('Permission denied') return jsonify(need.to_advocate_json())
def get_need(need_id): need = Need.get(need_id) if not need: return api_error('Need not found') if not current_user.is_admin and current_user.id != need.alert.user_id: return api_error('Permission denied') return jsonify(need.to_advocate_json())
def mark_need_resolved(need_id): """ Resolve a need and close an alert if necessary. Send out a message stating the alert was closed as well. """ need = Need.get(need_id) # Check validity of need_id if not need: return api_error('Need not found') if not current_user.is_admin and current_user.id != need.alert.user_id: return api_error('Permission denied') if need.resolved: return api_error('Need already resolved!') # validate the form form = ResolveNeedForm(need=need) if not form.validate_on_submit(): return api_error(form.errors) # Update Need with form data, including setting resolved to True. need.resolved = True need.resolved_at = datetime.utcnow() need.resolve_notes = form.notes.data need.resolve_message = form.message.data for provision in need.provisions: provision.selected = provision.id in form.provisions.data need.save() # Check if alert is resolved, notify those involved resolve_need(need) return '', 200
def respond_to_alert(provider, needs_provided, alert): """ Send a response from a provider to an advocate. """ advocate = alert.user body = provider.email if provider.phone_number: body += ", %s" % provider.phone_number response = Response(user=provider, alert=alert) response.save() services_provided = [] for provision in needs_provided: need = Need.get(provision["need_id"]) need_provided = NeedProvided(need=need, response=response, message=provision["message"]) need_provided.save() services_provided.append("%s: %s\n" % (need.service.name, provision["message"])) body += (" is availible for:\n\n%s") % ("\n".join(services_provided)) queue_send_message.apply_async( kwargs=dict(email=advocate.email, number=advocate.phone_number, subject="15th Night Alert Response", body=body) ) return response
def respond_to_alert(provider, needs_provided, alert): """ Send a response from a provider to an advocate. """ advocate = alert.user body = provider.email if provider.phone_number: body += ", %s" % provider.phone_number response = Response(user=provider, alert=alert) response.save() services_provided = [] for provision in needs_provided: need = Need.get(provision['need_id']) need_provided = NeedProvided(need=need, response=response, message=provision['message']) need_provided.save() services_provided.append('%s: %s\n' % (need.service.name, provision['message'])) body += (" is availible for:\n\n%s") % ("\n".join(services_provided)) queue_send_message.apply_async( kwargs=dict(email=advocate.email, number=advocate.phone_number, subject='15th Night Alert Response', body=body)) return response
def send_out_alert(alert_form): """ Send out an alert to providers. """ alert = Alert( description=alert_form.description.data, gender=alert_form.gender.data, age=alert_form.age.data, user=current_user, ) alert.save() need_ids = alert_form.needs.data for service in Service.get_by_ids(need_ids): need = Need(alert=alert, service=service) need.save() providers = User.providers_with_services(need_ids) for provider in providers: needs_provided = [ need_ for need_ in provider.services if need_.id in need_ids ] gender = alert.get_gender() needs = ", ".join( [need_provided.name for need_provided in needs_provided]) body = ('New 15th night alert!\n' '%d y/o%s\n' 'Needs: %s\n' 'Desc: %s\n' 'Respond at %sr/%s') % ( alert.age, gender, needs, alert_form.description.data, url_for('index', _external=True), str(alert.id) ) provider_notified = ProviderNotified( provider=provider, alert=alert, needs=Need.get_by_ids([need_id.id for need_id in needs_provided]) ) # TODO: test provider_notified.save() queue_send_message.apply_async( kwargs=dict( email=provider.email, number=provider.phone_number, subject='15th Night Alert', body=body ) )
def send_out_alert(alert_form): """ Send out an alert to providers. """ alert = Alert( description=alert_form.description.data, gender=alert_form.gender.data, age=alert_form.age.data, user=current_user, ) alert.save() need_ids = alert_form.needs.data for service in Service.get_by_ids(need_ids): need = Need(alert=alert, service=service) need.save() providers = User.providers_with_services(need_ids) for provider in providers: needs_provided = [ need_ for need_ in provider.services if need_.id in need_ids ] gender = alert.get_gender() needs = ", ".join( [need_provided.name for need_provided in needs_provided]) body = ('New 15th night alert!\n' '%d y/o%s\n' 'Needs: %s\n' 'Desc: %s\n' 'Respond at %sr/%s') % ( alert.age, gender, needs, alert_form.description.data, url_for('index', _external=True), str(alert.id)) provider_notified = ProviderNotified( provider=provider, alert=alert, needs=Need.get_by_ids([need_id.id for need_id in needs_provided])) # TODO: test provider_notified.save() queue_send_message.apply_async( kwargs=dict(email=provider.email, number=provider.phone_number, subject='15th Night Alert', body=body))
def send_out_alert(alert_form): """ Send out an alert to providers. """ alert = Alert( description=alert_form.description.data, gender=alert_form.gender.data, age=alert_form.age.data, user=current_user, ) alert.save() need_ids = alert_form.needs.data for service in Service.get_by_ids(need_ids): need = Need(alert=alert, service=service) need.save() providers = User.providers_with_services(need_ids) for provider in providers: needs_provided = [need for need in provider.services if need.id in need_ids] gender = " " + alert.gender if alert.gender != "unspecified" else "" needs = ", ".join([need.name for need in needs_provided]) body = ("New 15th night alert!\n" "%d y/o%s\n" "Needs: %s\n" "Desc: %s\n" "Respond at %s/r/%s") % ( alert.age, gender, needs, alert_form.description.data, HOST_NAME, str(alert.id), ) provider_notified = ProviderNotified( provider=provider, alert=alert, needs=Need.get_by_ids([need.id for need in needs_provided]) ) # TODO: test provider_notified.save() queue_send_message.apply_async( kwargs=dict(email=provider.email, number=provider.phone_number, subject="15th Night Alert", body=body) )
def resolve_need(need_id): need = Need.get(need_id) if not need: return api_error('Need not found') if current_user.id != need.alert.user_id: return api_error('Permission denied') if need.resolved: return api_error('Need already resolved!') form = ResolveNeedForm(need=need) if not form.validate_on_submit(): return api_error(form.errors) need.resolved = True need.resolved_at = datetime.utcnow() need.resolve_notes = form.notes.data need.resolve_message = form.message.data for provision in need.provisions: provision.selected = provision.id in form.provisions.data send_out_resolution(need) need.save() return '', 200