def create_service(): """ Create a service. Must be an admin. """ form = ServiceForm() if not form.validate_on_submit(): return api_error(form.errors) service = Service(name=form.name.data, description=form.description.data, category=Category.get(form.category.data)) service.save() return "", 201
def update_category(category_id): """ Update an category. """ category = Category.get(category_id) if not category: return api_error('Category not found', 404) form = CategoryForm( validate_unique_name=category.name != request.json.get('name') ) if not form.validate_on_submit(): return api_error(form.errors) category.name = form.name.data category.description = form.description.data if 'services' in request.json: services = request.json['services'] for data in services: service = Service.get(data['id']) service.sort_order = data['sort_order'] service.save() category.save() return '', 200
def update_user(user_id): """ Update an user account. """ user = User.get(user_id) if not user: return api_error('User not found', 404) form_kwargs = dict( validate_unique_email=user.email != request.json.get('email') ) if 'password' in request.json: form = FullUserForm(**form_kwargs) else: form = BaseUserForm(**form_kwargs) if not form.validate_on_submit(): return api_error(form.errors) services = [] if form.role.data == 'provider': user.services = Service.get_by_ids(form.services.data) user.email = form.email.data if 'password' in request.json: user.set_password(form.password.data) user.name = form.name.data user.organization = form.organization.data user.phone_number = form.phone_number.data user.role = form.role.data user.save() return jsonify(user)
def delete_service(service_id): """ Delete an service. """ service = Service.get(service_id) if not service: return api_error('Service not found', 404) service.delete() return '', 200
def update_profile(): """ Update logged in user's profile. """ form = UpdateProfileForm(request.json_multidict) if not form.validate_on_submit(): return api_error(form.errors) current_user.name = form.name.data current_user.organization = form.organization.data current_user.email = form.email.data current_user.phone_number = form.phone_number.data if current_user.is_provider: current_user.services = Service.get_by_ids(form.services.data) current_user.save() return jsonify(current_user)
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 update_service(service_id): """ Update an service. """ service = Service.get(service_id) if not service: return api_error("Service not found", 404) form = ServiceForm(validate_unique_name=service.name != request.json.get("name")) if not form.validate_on_submit(): return api_error(form.errors) service.name = form.name.data service.description = form.description.data service.category = Category.get(form.category.data) service.save() return "", 200
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 create_user(): """ Create an user account. """ form = FullUserForm() if not form.validate_on_submit(): return api_error(form.errors) services = [] if form.role.data == 'provider': services = Service.get_by_ids(form.services.data) user = User( name=form.name.data, organization=form.organization.data, email=form.email.data, password=form.password.data, phone_number=form.phone_number.data, role=form.role.data, services=services ) user.save() return jsonify(user)
def update_category(category_id): """ Update an category. """ category = Category.get(category_id) if not category: return api_error('Category not found', 404) form = CategoryForm( validate_unique_name=category.name != request.json.get('name')) if not form.validate_on_submit(): return api_error(form.errors) category.name = form.name.data category.description = form.description.data if 'services' in request.json: services = request.json['services'] for data in services: service = Service.get(data['id']) service.sort_order = data['sort_order'] service.save() category.save() return '', 200
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 __init__(self, *args, **kwargs): super(AlertForm, self).__init__(*args, **kwargs) self.needs.choices = [ (service.id, service.name) for service in Service.all() ]
def validate_name(self, field): if self.validate_unique_name and Service.get_by_name(field.data): raise ValidationError('This service name is already in use.')
def seed_services(): """Seed some categories and services.""" food = Category.get_by_name("Food") if not food: food = Category() food.name = "Food" food.description = "" food.save() food_delivery = Service.get_by_name("Delivery") if not food_delivery: food_delivery = Service() food_delivery.name = "Delivery" food_delivery.description = "Quick for those hungry children" food_delivery.category = food food_delivery.save() shelter = Category.get_by_name("Shelter") if not shelter: shelter = Category() shelter.name = "Shelter" shelter.description = "Housing for a limited time." shelter.save() shelter_one_night = Service.get_by_name("One night") if not shelter_one_night: shelter_one_night = Service() shelter_one_night.name = "One night" shelter_one_night.description = "A bed for the night" shelter_one_night.category = shelter shelter_one_night.save() clothing = Category.get_by_name("Clothing") if not clothing: clothing = Category() clothing.name = "Clothing", clothing.description = "Shirts, shoes, and all things." clothing.save() clothing_young = Service.get_by_name("0-5 clothing") if not clothing_young: clothing_young = Service() clothing_young.name = "0-5 clothing" clothing_young.description = "Clothing for chidren ages 0 to 5" clothing_young.category = clothing clothing_young.save() return (food_delivery, shelter_one_night, clothing_young)
def seed_services(): """Seed some categories and services.""" food = Category.get_by_name("Food") if not food: food = Category() food.name = "Food" food.description = "" food.save() food_delivery = Service.get_by_name("Delivery") if not food_delivery: food_delivery = Service() food_delivery.name = "Delivery" food_delivery.description = "Quick for those hungry children" food_delivery.category = food food_delivery.save() shelter = Category.get_by_name("Shelter") if not shelter: shelter = Category() shelter.name = "Shelter" shelter.description = "Housing for a limited time." shelter.save() shelter_one_night = Service.get_by_name("One night") if not shelter_one_night: shelter_one_night = Service() shelter_one_night.name = "One night" shelter_one_night.description = "A bed for the night" shelter_one_night.category = shelter shelter_one_night.save() clothing = Category.get_by_name("Clothing") if not clothing: clothing = Category() clothing.name = "Clothing" clothing.description = "Shirts, shoes, and all things." clothing.save() clothing_young = Service.get_by_name("0-5 clothing") if not clothing_young: clothing_young = Service() clothing_young.name = "0-5 clothing" clothing_young.description = "Clothing for chidren ages 0 to 5" clothing_young.category = clothing clothing_young.save() return (food_delivery, shelter_one_night, clothing_young)
def __init__(self, *args, **kwargs): super(BaseUserForm, self).__init__(*args, **kwargs) self.services.choices = [(service.id, service.name) for service in Service.all()] self.validate_unique_email = kwargs.get('validate_unique_email', True)
def __init__(self, *args, **kwargs): super(UpdateProfileForm, self).__init__(*args, **kwargs) self.services.choices = [(service.id, service.name) for service in Service.all()]
def get_services(): """ Gets the list of services. """ # TODO: pagination return jsonify(Service.all())
def __init__(self, *args, **kwargs): super(UpdateProfileForm, self).__init__(*args, **kwargs) self.services.choices = [ (service.id, service.name) for service in Service.all() ]
def get_service(service_id): """ Gets a service. """ return jsonify(Service.get(service_id))
def __init__(self, *args, **kwargs): super(BaseUserForm, self).__init__(*args, **kwargs) self.services.choices = [ (service.id, service.name) for service in Service.all() ] self.validate_unique_email = kwargs.get('validate_unique_email', True)
def __init__(self, *args, **kwargs): super(AlertForm, self).__init__(*args, **kwargs) self.needs.choices = [(service.id, service.name) for service in Service.all()]