fixed merging and added shopping ignored ingredients

This commit is contained in:
vabene1111
2021-01-25 20:46:19 +01:00
parent c7dd5dd8bb
commit 36584346cb
2 changed files with 19 additions and 10 deletions

View File

@ -140,7 +140,7 @@ class UnitSerializer(UniqueFieldsMixin, serializers.ModelSerializer):
read_only_fields = ('id',) read_only_fields = ('id',)
class SupermarketCategorySerializer(UniqueFieldsMixin, serializers.ModelSerializer): class SupermarketCategorySerializer(UniqueFieldsMixin, WritableNestedModelSerializer):
def create(self, validated_data): def create(self, validated_data):
# since multi select tags dont have id's # since multi select tags dont have id's
@ -156,7 +156,7 @@ class SupermarketCategorySerializer(UniqueFieldsMixin, serializers.ModelSerializ
fields = ('id', 'name') fields = ('id', 'name')
class FoodSerializer(UniqueFieldsMixin, serializers.ModelSerializer): class FoodSerializer(UniqueFieldsMixin, WritableNestedModelSerializer):
supermarket_category = SupermarketCategorySerializer(read_only=True) supermarket_category = SupermarketCategorySerializer(read_only=True)
def create(self, validated_data): def create(self, validated_data):
@ -171,7 +171,6 @@ class FoodSerializer(UniqueFieldsMixin, serializers.ModelSerializer):
class Meta: class Meta:
model = Food model = Food
fields = ('id', 'name', 'recipe', 'ignore_shopping', 'supermarket_category') fields = ('id', 'name', 'recipe', 'ignore_shopping', 'supermarket_category')
read_only_fields = ('id',)
class IngredientSerializer(WritableNestedModelSerializer): class IngredientSerializer(WritableNestedModelSerializer):
@ -326,8 +325,8 @@ class ShoppingListRecipeSerializer(serializers.ModelSerializer):
class ShoppingListEntrySerializer(WritableNestedModelSerializer): class ShoppingListEntrySerializer(WritableNestedModelSerializer):
food = FoodSerializer(allow_null=True, read_only=True) food = FoodSerializer(allow_null=True)
unit = UnitSerializer(allow_null=True, read_only=True) unit = UnitSerializer(allow_null=True)
amount = CustomDecimalField() amount = CustomDecimalField()
class Meta: class Meta:
@ -335,7 +334,6 @@ class ShoppingListEntrySerializer(WritableNestedModelSerializer):
fields = ( fields = (
'id', 'list_recipe', 'food', 'unit', 'amount', 'order', 'checked' 'id', 'list_recipe', 'food', 'unit', 'amount', 'order', 'checked'
) )
read_only_fields = ('id',)
class ShoppingListEntryCheckedSerializer(serializers.ModelSerializer): class ShoppingListEntryCheckedSerializer(serializers.ModelSerializer):

View File

@ -361,8 +361,9 @@
this.shopping_list.entries.forEach(element => { this.shopping_list.entries.forEach(element => {
let item = {} let item = {}
Object.assign(item, element); Object.assign(item, element);
if (entries.filter(item => (item.food.id === element.food.id) && (item.unit.id === element.unit.id)).length > 0) {
let entry = entries.filter(item => item.food.id === element.food.id)[0] let entry = this.findMergeEntry(entries, item)
if (entry !== undefined) {
entry.amount += item.amount * this.servings_cache[item.list_recipe] entry.amount += item.amount * this.servings_cache[item.list_recipe]
entry.entries.push(item.id) entry.entries.push(item.id)
} else { } else {
@ -373,7 +374,6 @@
item.entries = [element.id] item.entries = [element.id]
entries.push(item) entries.push(item)
} }
}); });
return entries return entries
@ -416,6 +416,17 @@
this.searchUsers('') this.searchUsers('')
}, },
methods: { methods: {
findMergeEntry: function (entries, entry) {
return entries.find(item => {
if (entry.food.id === item.food.id) {
if (entry.unit === null && item.unit === null) {
return true
} else if (entry.unit.id === item.unit.id) {
return true
}
}
})
},
updateOnlineStatus(e) { updateOnlineStatus(e) {
const { const {
type type
@ -612,7 +623,7 @@
this.$http.get('{% url 'api:recipe-detail' 123456 %}'.replace('123456', recipe.id)).then((response) => { this.$http.get('{% url 'api:recipe-detail' 123456 %}'.replace('123456', recipe.id)).then((response) => {
for (let s of response.data.steps) { for (let s of response.data.steps) {
for (let i of s.ingredients) { for (let i of s.ingredients) {
if (!i.is_header && i.food !== null) { if (!i.is_header && i.food !== null && i.food.ignore_shopping === false) {
this.shopping_list.entries.push({ this.shopping_list.entries.push({
'list_recipe': slr.id, 'list_recipe': slr.id,
'food': i.food, 'food': i.food,