예제 #1
0
def get_warehouse_settings(session: helpers.extend.session,
                           user: hug.directives.user, response, id: int):
    """Gets a warehouse"""
    warehouse = helpers.get(
        "warehouse", session,
        queries.with_viewer_role(queries.user_warehouse(session, user, id)))
    return helpers.response.from_json(warehouse.settings)
예제 #2
0
def update_warehouse(session: helpers.extend.session,
                     user: hug.directives.user, response, id: int, name):
    """Updates a warehouse"""
    return helpers.update(
        "warehouse", session,
        queries.with_editor_role(queries.user_warehouse(session, user, id)),
        {"name": name})
예제 #3
0
def list_articles(session: helpers.extend.session, user: hug.directives.user, response, warehouse_id: int=None):
    """ Lists warehouse locations """
    if warehouse_id is not None:
        return helpers.do_in_warehouse("article",
            queries.with_viewer_role(queries.user_warehouse(session, user, warehouse_id)),
            lambda warehouse: session.query(Article).filter_by(warehouse=warehouse).all())
    else:
        return helpers.response.error("no_location_or_warehouse_specified", falcon.HTTP_400)
예제 #4
0
def create_tag(session: helpers.extend.session, user: hug.directives.user,
               response, warehouse_id: int, name):
    """Creates a tag"""
    return helpers.do_in_warehouse(
        "tag",
        queries.with_editor_role(
            queries.user_warehouse(session, user, warehouse_id)),
        lambda warehouse: Tag(warehouse=warehouse, name=name))
예제 #5
0
def update_warehouse_settings(session: helpers.extend.session,
                              user: hug.directives.user, response, id: int,
                              body):
    """Gets a warehouse"""
    helpers.update(
        "warehouse", session,
        queries.with_editor_role(queries.user_warehouse(session, user, id)),
        {"settings": json.dumps(body)})
    return body
예제 #6
0
def create_location(session: helpers.extend.session, user: hug.directives.user,
                    response, warehouse_id: int, name):
    """Creates a location"""
    if len(name) == 0:
        return helpers.response.error("location_name_mandatory",
                                      falcon.HTTP_400)
    return helpers.do_in_warehouse(
        "location",
        queries.with_editor_role(
            queries.user_warehouse(session, user, warehouse_id)),
        lambda warehouse: Location(warehouse=warehouse, name=name))
예제 #7
0
def create_article(session: helpers.extend.session, user: hug.directives.user, response, warehouse_id: int, reference_id: int, quantity: int, expiry: fields.Date(allow_none=True)=None, location_id: fields.Int(allow_none=True)=None, tags=None):
    """Creates a article"""
    db_tags = queries.get_tags_from_ids(session, user, warehouse_id, tags)
    if db_tags == None:
        return response.error("invalid_tag_ids", falcon.HTTP_400)
    try:
        warehouse = queries.with_editor_role(queries.user_warehouse(session, user, warehouse_id)).one()
        location = queries.with_editor_role(queries.user_location(session, user, location_id)).one() if location_id else None
        reference = queries.with_editor_role(queries.user_reference(session, user, reference_id)).one()
        if warehouse.id != reference.warehouse.id or (location is not None and warehouse.id != location.warehouse.id):
            return helpers.response.error("bad_referenece_and_or_location", falcon.HTTP_400)
        article = Article(warehouse=warehouse, location=location, reference=reference, quantity=quantity, expiry=expiry, tags=db_tags)
        return article
    except NoResultFound:
        return helpers.response.error("warehouse_location_or_reference_not_found", falcon.HTTP_401)
예제 #8
0
def list_references(session: helpers.extend.session,
                    user: hug.directives.user,
                    response,
                    warehouse_id: int,
                    name=None):
    """ Lists warehouse references """
    def filter(warehouse):
        query = session.query(Reference).filter_by(warehouse=warehouse)
        if name:
            query = query.filter_by(name=name)
        return query.all()

    return helpers.do_in_warehouse(
        "reference",
        queries.with_viewer_role(
            queries.user_warehouse(session, user, warehouse_id)), filter)
예제 #9
0
def create_reference(session: helpers.extend.session,
                     user: hug.directives.user,
                     response,
                     warehouse_id: int,
                     name,
                     categories=None,
                     target_quantity: fields.Int(allow_none=True) = None):
    """Creates a reference"""
    if len(name) == 0:
        return helpers.response.error("reference_name_mandatory",
                                      falcon.HTTP_400)
    db_categories = queries.get_categories_from_ids(session, user,
                                                    warehouse_id, categories)
    if db_categories == None:
        return response.error("invalid_category_ids", falcon.HTTP_400)
    return helpers.do_in_warehouse(
        "reference",
        queries.with_editor_role(
            queries.user_warehouse(session, user, warehouse_id)),
        lambda warehouse: Reference(warehouse=warehouse,
                                    name=name,
                                    categories=db_categories,
                                    target_quantity=target_quantity))
예제 #10
0
def delete_warehouse(session: helpers.extend.session,
                     user: hug.directives.user, response, id: int):
    """Deletes a warehouse"""
    return helpers.delete(
        "warehouse", session,
        queries.with_owner_role(queries.user_warehouse(session, user, id)))
예제 #11
0
def get_warehouse(session: helpers.extend.session, user: hug.directives.user,
                  response, id: int):
    """Gets a warehouse"""
    return helpers.get(
        "warehouse", session,
        queries.with_viewer_role(queries.user_warehouse(session, user, id)))