Exemple #1
0
def addDishData(request):
    new_ingredients_response = []
    new_categories_response = []
    data = json.loads(request.body.decode("utf-8"))
    # print(json.dumps(data, indent=4, sort_keys=True)) ### TO BE REMOVED
    general_data = data["general"]
    ingredients_data = data["ingredients"]
    recipe_data = data["recipe"]
    categories_data = data["categories"]
    # check if password is correct
    if general_data["password"] != password:
        return JsonResponse({"result": "invalid pssword"})
    # validate data
    if not general_data["name"]:
        return JsonResponse({"result": "missing dish name"})
    if not ingredients_data["selected"]:
        return JsonResponse({"result": "ingredients weren't defined"})
    # create new dish
    dish = Dish(
        name=general_data["name"],
        type=general_data["type"],
        recipe=json.dumps(recipe_data),
        last_done_date=date(2000, 1, 1),
    )
    dish.save()
    # process new ingredients definitions
    if ingredients_data["added"]:
        all_ingredients = Ingredient.objects.values_list("name", flat=True)
        all_ingredient_names_set = set(all_ingredients)
        new_ingredients = ingredients_data["added"]
        new_ingredient_names_set = {i[0] for i in new_ingredients}
        new_ingredient_names_set -= all_ingredient_names_set
        if new_ingredient_names_set:
            for i in new_ingredients:
                if i[0] not in new_ingredient_names_set:
                    continue
                # find ingredient type
                try:
                    ingredient_type = IngredientType.objects.get(pk=i[1])
                except ObjectDoesNotExist:
                    continue
                # find ingredient unit
                try:
                    ingredient_unit = IngredientUnit.objects.get(pk=i[3])
                except ObjectDoesNotExist:
                    continue
                ingredient = Ingredient(
                    name=i[0], category_type=ingredient_type, default_quantity=i[2], default_unit=ingredient_unit
                )
                ingredient.save()
                new_ingredients_response.append({"id": ingredient.id, "name": ingredient.name})
    # add all dish ingredients
    order_index = 0
    for i in ingredients_data["selected"]:
        # find ingredient record
        try:
            ingredient = Ingredient.objects.get(name__iexact=i[0])
        except ObjectDoesNotExist:
            message = "missing {0} dish ingredient".format(i[0])
            return JsonResponse({"result": message})
        # find ingredient unit record
        try:
            ingredient_unit = IngredientUnit.objects.get(pk__iexact=i[2])
        except ObjectDoesNotExist:
            message = "missing {0} ingredient unit".format(i[2])
            return JsonResponse({"result": message})
        # add dish ingredient
        dish_ingredient = DishIngredient(
            dish=dish, ingredient=ingredient, quantity=i[1], unit=ingredient_unit, sequential_number=chr(order_index)
        )
        order_index += 1
        dish_ingredient.save()
    # process new category definitions
    if categories_data["added"]:
        all_categories = Category.objects.values_list("name", flat=True)
        all_categories_names_set = set(all_categories)
        new_categories_names_set = set(categories_data["added"])
        new_categories_names_set -= all_categories_names_set
        for category_name in new_categories_names_set:
            category = Category(name=category_name)
            category.save()
            new_categories_response.append({"id": category.id, "name": category.name})
    # add all dish categories
    if categories_data["selected"]:
        order_index = 0
        for category_name in categories_data["selected"]:
            # find category record
            try:
                category = Category.objects.get(name__iexact=category_name)
            except ObjectDoesNotExist:
                continue
            dish_category = DishCategory(dish=dish, category=category, sequential_number=chr(order_index))
            order_index += 1
    return JsonResponse(
        {"result": "ok", "new_ingredients": new_ingredients_response, "new_categories": new_categories_response}
    )