shopping list fixes

This commit is contained in:
vabene1111 2020-09-29 11:41:10 +02:00
parent 73f13f56e1
commit 9f7106a325
2 changed files with 33 additions and 11 deletions

View File

@ -1,3 +1,5 @@
from decimal import Decimal
from django.contrib.auth.models import User from django.contrib.auth.models import User
from drf_writable_nested import WritableNestedModelSerializer, UniqueFieldsMixin from drf_writable_nested import WritableNestedModelSerializer, UniqueFieldsMixin
from rest_framework import serializers from rest_framework import serializers
@ -15,7 +17,10 @@ class CustomDecimalField(serializers.Field):
""" """
def to_representation(self, value): def to_representation(self, value):
return value.normalize() if isinstance(value, Decimal):
return value.normalize()
else:
return Decimal(value).normalize()
def to_internal_value(self, data): def to_internal_value(self, data):
if type(data) == int or type(data) == float: if type(data) == int or type(data) == float:

View File

@ -25,7 +25,8 @@
<h2>{% trans 'Shopping List' %}</h2> <h2>{% trans 'Shopping List' %}</h2>
</div> </div>
<div class="col col-mdd-3 text-right"> <div class="col col-mdd-3 text-right">
<b-form-checkbox switch size="lg" v-model="edit_mode">{% trans 'Edit' %}</b-form-checkbox> <b-form-checkbox switch size="lg" v-model="edit_mode"
@change="$forceUpdate()">{% trans 'Edit' %}</b-form-checkbox>
</div> </div>
</div> </div>
@ -112,7 +113,7 @@
<div class="row" style="margin-top: 8px"> <div class="row" style="margin-top: 8px">
<div class="col col-12"> <div class="col col-12">
<table class="table table-sm table-striped"> <table class="table table-sm table-striped">
<tr v-for="x in display_entries"> <tr v-for="x in display_entries" :key="x.id">
<td>[[x.amount]]</td> <td>[[x.amount]]</td>
<td>[[x.unit.name]]</td> <td>[[x.unit.name]]</td>
<td>[[x.food.name]]</td> <td>[[x.food.name]]</td>
@ -194,13 +195,27 @@
<div class="row" style="margin-top: 8px"> <div class="row" style="margin-top: 8px">
<div class="col col-md-12"> <div class="col col-md-12">
<table class="table table table-striped"> <table class="table">
<tr v-for="x in display_entries"> <tr v-for="x in display_entries">
<td><input type="checkbox" style="zoom:1.4;" v-model="x.checked" @change="entryChecked(x)"> <template v-if="!x.checked">
</td> <td><input type="checkbox" style="zoom:1.4;" v-model="x.checked"
<td>[[x.amount]]</td> @change="entryChecked(x)">
<td>[[x.unit.name]]</td> </td>
<td>[[x.food.name]]</td> <td>[[x.amount]]</td>
<td>[[x.unit.name]]</td>
<td>[[x.food.name]]</td>
</template>
</tr>
<tr v-for="x in display_entries" class="text-muted">
<template v-if="x.checked">
<td><input type="checkbox" style="zoom:1.4;" v-model="x.checked"
@change="entryChecked(x)">
</td>
<td>[[x.amount]]</td>
<td>[[x.unit.name]]</td>
<td>[[x.food.name]]</td>
</template>
</tr> </tr>
</table> </table>
</div> </div>
@ -415,6 +430,7 @@
console.log(response) console.log(response)
this.makeToast('{% trans 'Updated' %}', '{% trans 'Object created successfully!' %}', 'success') this.makeToast('{% trans 'Updated' %}', '{% trans 'Object created successfully!' %}', 'success')
this.loading = false this.loading = false
this.shopping_list = response.body this.shopping_list = response.body
this.shopping_list_id = this.shopping_list.id this.shopping_list_id = this.shopping_list.id
}).catch((err) => { }).catch((err) => {
@ -425,6 +441,7 @@
} else { } else {
this.$http.put("{% url 'api:shoppinglist-detail' shopping_list_id %}", this.shopping_list, {}).then((response) => { this.$http.put("{% url 'api:shoppinglist-detail' shopping_list_id %}", this.shopping_list, {}).then((response) => {
console.log(response) console.log(response)
this.shopping_list = response.body
this.makeToast('{% trans 'Updated' %}', '{% trans 'Changes saved successfully!' %}', 'success') this.makeToast('{% trans 'Updated' %}', '{% trans 'Changes saved successfully!' %}', 'success')
this.loading = false this.loading = false
}).catch((err) => { }).catch((err) => {
@ -438,12 +455,12 @@
}) })
}, },
entryChecked: function (entry) { entryChecked: function (entry) {
console.log("checked entry: ", entry)
this.shopping_list.entries.forEach((item) => { this.shopping_list.entries.forEach((item) => {
if (item.id === entry.id) { //TODO unwrap once same entries are merged if (item.id === entry.id) { //TODO unwrap once same entries are merged
item.checked = entry.checked item.checked = entry.checked
console.log('updating ', item)
this.$http.put("{% url 'api:shoppinglistentry-detail' 123456 %}".replace('123456', item.id), item, {}).then((response) => { this.$http.put("{% url 'api:shoppinglistentry-detail' 123456 %}".replace('123456', item.id), item, {}).then((response) => {
console.log("YEHAA", response)
}).catch((err) => { }).catch((err) => {
console.log(err) console.log(err)
this.makeToast('{% trans 'Error' %}', '{% trans 'There was an error updating a resource!' %}' + err.bodyText, 'danger') this.makeToast('{% trans 'Error' %}', '{% trans 'There was an error updating a resource!' %}' + err.bodyText, 'danger')