Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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)
Beispiel #4
0
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
Beispiel #5
0
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)
Beispiel #6
0
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
            )
        )
Beispiel #7
0
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
Beispiel #8
0
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))
Beispiel #9
0
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)
Beispiel #10
0
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
Beispiel #11
0
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)
        )
Beispiel #12
0
 def __init__(self, *args, **kwargs):
     super(AlertForm, self).__init__(*args, **kwargs)
     self.needs.choices = [
         (service.id, service.name) for service in Service.all()
     ]
Beispiel #13
0
 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.')
Beispiel #14
0
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)
Beispiel #15
0
 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.')
Beispiel #16
0
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)
Beispiel #17
0
 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)
Beispiel #18
0
 def __init__(self, *args, **kwargs):
     super(UpdateProfileForm, self).__init__(*args, **kwargs)
     self.services.choices = [(service.id, service.name)
                              for service in Service.all()]
Beispiel #19
0
def get_services():
    """
    Gets the list of services.
    """
    # TODO: pagination
    return jsonify(Service.all())
Beispiel #20
0
 def __init__(self, *args, **kwargs):
     super(UpdateProfileForm, self).__init__(*args, **kwargs)
     self.services.choices = [
         (service.id, service.name) for service in Service.all()
     ]
Beispiel #21
0
def get_service(service_id):
    """
    Gets a service.
    """
    return jsonify(Service.get(service_id))
Beispiel #22
0
 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)
Beispiel #23
0
 def __init__(self, *args, **kwargs):
     super(AlertForm, self).__init__(*args, **kwargs)
     self.needs.choices = [(service.id, service.name)
                           for service in Service.all()]