コード例 #1
0
ファイル: inventories.py プロジェクト: r202-coe-psu/hh-apps
def create(stock_id):
    adder = current_user._get_current_object()
    schema = schemas.InventorySchema()

    stock = models.Stock.objects.with_id(stock_id)
    try:
        inventory_data = schema.load(request.get_json())
    except Exception as e:
        print(e)
        response_dict = request.get_json()
        response_dict.update(e.messages)
        response = render_json(response_dict)
        response.status_code = 400
        abort(response)

    data = inventory_data.data

    print('data:', data)
    data['adder'] = adder
    data['stock'] = stock

    item = None
    if data['item'] and len(data['item']) > 0:
        try:
            item = models.Item.objects.with_id(data['item'])
        except:
            pass
    elif len(data['item_upc']) > 0:
        item = models.Item.objects(upc=data['item_upc']).first()
        if not item:
            item = items.add_item(data['item_upc'])

    if not item:
        return abort(items.get_item_not_found_error())

    data['item'] = item
    data.pop('item_upc')

    inventory = models.Inventory(status='active',
                                 **data)
    nutrition = models.Nutrition.objects(item=item).first()

    if nutrition:
        inventory.serving_size_unit = nutrition.facts.serving_size_unit
        inventory.serving_size_quantity = nutrition.facts.serving_size_quantity
        inventory.total_serving_size = data['quantity'] * \
            nutrition.facts.servings_per_container
        inventory.available_serving_size = inventory.total_serving_size

    inventory.save()

    return render_json(schema.dump(inventory).data)
コード例 #2
0
ファイル: items.py プロジェクト: r202-coe-psu/hh-apps
def get(item_id):
    schema = schemas.ItemSchema()
    item = models.Item.objects(id=item_id).first()
    if not item:
        return abort(get_item_error_not_found())

    return render_json(schema.dump(item).data)
コード例 #3
0
ファイル: consumptions.py プロジェクト: r202-coe-psu/hh-apps
def list(stock_id):
    stock = models.Stock.objects.with_id(stock_id)
    consumptions = models.Consumption.objects(
            stock=stock).order_by('+consumed_data')

    schema = schemas.ConsumptionSchema(many=True)
    return render_json(schema.dump(consumptions).data)
コード例 #4
0
def get(stock_id):
    schema = schemas.StockSchema()
    owner = current_user
    stock = models.Stock.objects(id=stock_id, owner__id=owner.id).first()
    if not stock:
        return abort(get_stock_error_not_found())

    return render_json(schema.dump(stock).data)
コード例 #5
0
ファイル: inventories.py プロジェクト: r202-coe-psu/hh-apps
def list_items(stock_id):
    schema = schemas.ItemSchema(many=True)
    stock = models.Stock.objects.with_id(stock_id)

    inventories = models.Inventory.objects(stock=stock, status='active')
    items = set([inventory.item for inventory in inventories])

    return render_json(schema.dump(items).data)
コード例 #6
0
ファイル: items.py プロジェクト: r202-coe-psu/hh-apps
def delete(item_id):
    owner = current_user._get_current_object()
    item = models.Item.objects(id=item_id, owner=owner).first()
    if not item:
        return abort(get_item_error_not_found())

    item.delete()

    return render_json()
コード例 #7
0
def delete(stock_id):
    owner = current_user._get_current_object()
    stock = models.Stock.objects(id=stock_id, owner=owner).first()
    if not stock:
        return abort(get_stock_error_not_found())

    stock.delete()

    return render_json()
コード例 #8
0
ファイル: inventories.py プロジェクト: r202-coe-psu/hh-apps
def list(stock_id):
    schema = schemas.InventorySchema(many=True)
    stock = models.Stock.objects.with_id(stock_id)

    inventories = models.Inventory.objects(
            stock=stock,
            status='active',
            available_serving_size__gt=0)

    return render_json(schema.dump(inventories).data)
コード例 #9
0
ファイル: schemas.py プロジェクト: r202-coe-psu/hh-apps
def all():
    json_schema = JSONAPISchema()

    schema_list = schemas.__all__

    all_schemas = {}
    for schema in schema_list:
        all_schemas[schema.Meta.type_] = json_schema.dump(schema()).data

    return render_json(all_schemas)
コード例 #10
0
def create():
    schema = schemas.StockSchema()
    try:
        stock_data = schema.load(request.get_json())
    except Exception as e:
        print(e)
        response_dict = request.get_json()
        response_dict.update(e.messages)
        response = render_json(response_dict)
        response.status_code = 400
        abort(response)
    data = stock_data.data
    data['building'] = models.Building(id=data['building'])
    data['owner'] = models.User(id=current_user.id)

    stock = models.Stock(status='active', **data)
    stock.save()

    return render_json(schema.dump(stock).data)
コード例 #11
0
ファイル: items.py プロジェクト: r202-coe-psu/hh-apps
def get_upc(upc):

    schema = schemas.ItemSchema()
    item = models.Item.objects(upc=upc).first()
    if not item:
        item = add_item(upc)

    if not item:
        return abort(get_item_error_not_found())

    return render_json(schema.dump(item).data)
コード例 #12
0
def get_stock_error_not_found():
    response_dict = request.get_json()
    errors = [{
        'status': '404',
        'title': 'Stock not found',
        'detail': 'Stock not found'
    }]
    response_dict.update(errors=errors)
    response = render_json(response_dict)
    response.status_code = 404

    return response
コード例 #13
0
def list():
    schema = schemas.StockSchema(many=True)
    owner_id = current_user.id
    building_id = request.args.get('building-id', None)
    stocks = []

    if building_id:
        stocks = models.Stock.objects(owner__id=owner_id,
                                      building__id=building_id)
    else:
        stocks = models.Stock.objects(owner__id=owner_id)

    return render_json(schema.dump(stocks).data)
コード例 #14
0
ファイル: items.py プロジェクト: r202-coe-psu/hh-apps
def get_item_error_not_found():
    response_dict = request.get_json()
    errors = [{
        'status': '404',
        'title': 'Item not found',
        'detail': 'Item not found'
    }]
    if not response_dict:
        response_dict = {}
    response_dict.update(errors=errors)
    response = render_json(response_dict)
    response.status_code = 404

    return response
コード例 #15
0
    def user_loader_callback(identity):
        try:
            user = models.User.objects.with_id(identity)
        except Exception as e:
            errors = [
                        {
                            'status': '403',
                            'title':  'The user might not have the necessary permissions for a resource',
                            'detail': 'The user might not have the necessary permissions for a resource'
                        }
                    ]

            response_dict = dict(errors=errors)
            response = render_json(response_dict)
            response.status_code = 403
            abort(response)
        # print('user jwt', user)
        return user
コード例 #16
0
ファイル: inventories.py プロジェクト: r202-coe-psu/hh-apps
def consume(stock_id):
    stock = models.Stock.objects.with_id(stock_id)
    schema = schemas.InventoryConsumingItemSchema()

    consumer = current_user._get_current_object()

    try:
        consuming_data = schema.load(request.get_json()).data
    except Exception as e:
        print(e)
        response_dict = request.get_json()
        response_dict.update(e.messages)
        response = render_json(response_dict)
        response.status_code = 400
        abort(response)

    item = models.Item.objects.with_id(consuming_data['item'])
    inventories = models.Inventory.objects(
            stock=stock,
            item=item,
            status='active',
            available_serving_size__gt=0).order_by(
                    '-expired_date'
                    )
    consuming_size = consuming_data['consuming_size']

    for inventory in inventories:
        consumption = models.Consumption(
                item=item,
                stock=stock,
                consumer=consumer,
                inventory=inventory,
                consuming_unit=inventory.serving_size_unit
                )
        print('consumer:', consumer)
        if consuming_size <= inventory.available_serving_size:
            print('consume <=', inventory.id, consuming_size)
            inventory.available_serving_size -= consuming_size
            consumption.consuming_size = consuming_size
            consuming_size -= consuming_size

            if inventory.available_serving_size == 0:
                inventory.status = 'out of inventory'

        else:
            print('consume > ', inventory.id, inventory.available_serving_size)

            consumption.consuming_size = inventory.available_serving_size
            consuming_size -= inventory.available_serving_size
            inventory.available_serving_size = 0

        consumption.status = 'active'
        consumption.save()
        inventory.consumptions.append(consumption)
        inventory.save()

        if consuming_size == 0:
            break

    consuming_data['item'] = item
    consuming_data['id'] = None

    return render_json(schema.dump(consuming_data).data)
コード例 #17
0
ファイル: items.py プロジェクト: r202-coe-psu/hh-apps
def list():
    schema = schemas.ItemSchema(many=True)

    items = models.Item.objects(status='active')

    return render_json(schema.dump(items).data)