Esempio n. 1
0
    def create(self, validated_data):
        validated_data['drink'].save()
        if validated_data['drink'].price<=0:
            raise api_utils.BadRequest("CANT NOT ORDER DRINK UNDER $0!")

        if validated_data['drink'].status==Drink.CONST_STATUS_BLOCKED:
            raise api_utils.BadRequest("THIS DRINK HAS BEEN BLOCKED AT THE MOMENT, PLEASE RELOAD")

        ret = Tab(**validated_data)
        tab = Tab.objects.filter(drink=ret.drink, user=ret.user, order__isnull=True)
        if not tab:
            if not check_available(ret):
                raise api_utils.BadRequest("NOT ENOUGH INGREDIENT FOR {} QUANTITY,PLEASE RELOAD!".format(ret))
            garnishes = self.initial_data.get('garnishes')
            if garnishes:
                garnishes = DrinkGarnish.objects.filter(drink=ret.drink,garnish__in=ast.literal_eval(garnishes))
                garnishes = list(garnishes)
                ret.garnishes.add(*garnishes)
        else:
            temp = ret
            ret = tab.first()
            if not check_available(temp):
                raise api_utils.BadRequest("NOT ENOUGH INGREDIENT FOR ADD MORE {} QUANTITY,PLEASE RELOAD".format(ret))
            ret.quantity +=temp.quantity
            ret.save()
        return ret
Esempio n. 2
0
    def update(self, instance, validated_data):
        ret = super(DrinkSerializer, self).update(instance, validated_data)
        if self.initial_data.has_key('category'):
            ret.category.clear()

            categories = self.initial_data.get('category')
            categories = categories.split(",")
            for category in categories:
                try:
                    ret.category.add(DrinkCategory.objects.get(id=category))
                except Exception as e:
                    raise api_utils.BadRequest(e[0])

        if self.initial_data.has_key('ingredients'):

            ingredients = self.initial_data.getlist('ingredients')
            total_percent = 0
            for ingredient in ingredients:
                ingredient = ast.literal_eval(ingredient)
                if ingredient['unit'] < 1:
                    total_percent += ingredient['ratio']

            if total_percent > 100:
                raise api_utils.BadRequest("OVER 100%")
            # Save new data
            ret.ingredients.all().delete()
            for ingredient in ingredients:
                ingredient = ast.literal_eval(ingredient)
                ingre = DrinkIngredient(drink=ret,
                                        ingredient=Ingredient.objects.get(
                                            id=ingredient['ingredient']),
                                        ratio=ingredient['ratio'],
                                        unit=ingredient['unit'])
                ingre.save()

            # Direct unit
            ingredients = ret.ingredients.exclude(unit__in=[
                DrinkIngredient.CONST_UNIT_PART,
                DrinkIngredient.CONST_UNIT_PERCENT
            ])
            total_ml = 0
            for ingredient in ingredients:
                ingredient.ratio_ml = ingredient.change_to_ml()
                ingredient.save()
                total_ml += ingredient.ratio_ml
            glass = ret.glass.change_to_ml - total_ml
            # Percent unit
            ingredients = ret.ingredients.filter(
                unit=DrinkIngredient.CONST_UNIT_PERCENT)
            if glass > 0:
                for ingredient in ingredients:
                    ingredient.ratio_ml = ingredient.change_to_ml(glass=glass)
                    ingredient.save()
            else:
                ingredients = ret.ingredients.filter(
                    unit=DrinkIngredient.CONST_UNIT_PERCENT).update(ratio_ml=0)
            # Part unit
            glass = glass * (100 - total_percent) / 100
            ingredients = ret.ingredients.filter(
                unit=DrinkIngredient.CONST_UNIT_PART)
            total_part = ret.total_part

            if glass > 0 and total_part > 0:
                for ingredient in ingredients:
                    ingredient.ratio_ml = ingredient.change_to_ml(
                        total_part=total_part, glass=glass)
                    ingredient.save()
            else:
                ingredients = ret.ingredients.filter(
                    unit=DrinkIngredient.CONST_UNIT_PART).update(ratio_ml=0)

        # Garnish
        if self.initial_data.has_key('garnishes'):
            ret.garnishes.all().delete()

            garnishes = self.initial_data.getlist('garnishes')
            if garnishes:
                for garnish in garnishes:
                    garnish = ast.literal_eval(garnish)
                    try:
                        garn = DrinkGarnish(
                            drink=ret,
                            garnish=Garnish.objects.get(id=garnish['garnish']),
                            ratio=garnish['ratio'],
                        )
                        garn.save()
                    except Exception as e:
                        raise api_utils.BadRequest(e[0])
        ret.save()
        return ret
Esempio n. 3
0
def drink_add_on(self, ret=None):
    categories = self.initial_data.get('category', None)
    if categories:
        categories = categories.split(",")
        for category in categories:
            try:
                ret.category.add(DrinkCategory.objects.get(id=category))
            except Exception as e:
                ret.delete()
                raise e
    if (self._context['request'].user.is_superuser
            and self.initial_data.has_key('image_background')):
        # data is array
        ingredients = self.initial_data.getlist('ingredients', None)
    else:
        # data is string array
        ingredients = ast.literal_eval(self.initial_data['ingredients'])
    tempdict = dict()

    if ingredients:
        total_percent = 0
        for ingredient in ingredients:
            if not type(ingredient) == type(tempdict):
                ingredient = ast.literal_eval(ingredient)
            if ingredient['unit'] < 1:
                total_percent += ingredient['ratio']
        if total_percent > 100:
            ret.delete()
            raise api_utils.BadRequest("OVER 100%")
        for ingredient in ingredients:
            if not type(ingredient) == type(tempdict):
                ingredient = ast.literal_eval(ingredient)
            try:
                ingre = DrinkIngredient(drink=ret,
                                        ingredient=Ingredient.objects.get(
                                            id=ingredient['ingredient']),
                                        ratio=ingredient['ratio'],
                                        unit=ingredient['unit'])
                ingre.save()
            except Exception as e:
                DrinkIngredient.objects.filter(drink=ret).delete()
                ret.delete()
                raise e

        # Direct unit
            ingredients = ret.ingredients.exclude(unit__in=[
                DrinkIngredient.CONST_UNIT_PART,
                DrinkIngredient.CONST_UNIT_PERCENT
            ])
            total_ml = 0
            for ingredient in ingredients:
                ingredient.ratio_ml = ingredient.change_to_ml()
                ingredient.save()
                total_ml += ingredient.ratio_ml
            glass = ret.glass.change_to_ml - total_ml
            # Percent unit
            ingredients = ret.ingredients.filter(
                unit=DrinkIngredient.CONST_UNIT_PERCENT)
            if glass > 0:
                for ingredient in ingredients:
                    ingredient.ratio_ml = ingredient.change_to_ml(glass=glass)
                    ingredient.save()
            else:
                ingredients = ret.ingredients.filter(
                    unit=DrinkIngredient.CONST_UNIT_PERCENT).update(ratio_ml=0)
            # Part unit
            glass = glass * (100 - total_percent) / 100
            ingredients = ret.ingredients.filter(
                unit=DrinkIngredient.CONST_UNIT_PART)
            total_part = ret.total_part

            if glass > 0 and total_part > 0:
                for ingredient in ingredients:
                    ingredient.ratio_ml = ingredient.change_to_ml(
                        total_part=total_part, glass=glass)
                    ingredient.save()
            else:
                ingredients = ret.ingredients.filter(
                    unit=DrinkIngredient.CONST_UNIT_PART).update(ratio_ml=0)
    else:
        ret.delete()
        raise api_utils.BadRequest("NOT INCLUDE ANY INGREDIENT, ADD ONE!")
    garnishes = self.initial_data.getlist('garnishes', None)
    if garnishes:
        for garnish in garnishes:
            garnish = ast.literal_eval(garnish)
            try:
                garn = DrinkGarnish(
                    drink=ret,
                    garnish=Garnish.objects.get(id=garnish['garnish']),
                    ratio=garnish['ratio'],
                )
                garn.save()
            except Exception as e:
                DrinkIngredient.objects.filter(drink=ret).delete()
                DrinkGarnish.objects.filter(drink=ret).delete()
                ret.delete()
                raise e
    return ret