Merge pull request #3048 from smilerz/shoppinglist_fix

Shoppinglist fix
This commit is contained in:
vabene1111
2024-03-21 14:08:23 +01:00
committed by GitHub
3 changed files with 49 additions and 26 deletions

View File

@@ -75,26 +75,25 @@
<!-- --------------------------------------- shopping list table -->
<b-row v-for="c in shopping_list_store.get_entries_by_group" v-bind:key="c.id">
<b-col cols="12"
v-if="(c.count_unchecked > 0 || user_preference_store.device_settings.shopping_show_checked_entries) && (c.count_unchecked + c.count_checked) > 0 && (c.count_delayed_unchecked < c.count_unchecked ||user_preference_store.device_settings.shopping_show_delayed_entries )">
<b-button-group class="w-100 mt-1"
:class="{'flex-row-reverse': useUserPreferenceStore().user_settings.left_handed}">
v-if="(c.count_unchecked > 0 || user_preference_store.device_settings.shopping_show_checked_entries)
&& (c.count_unchecked + c.count_checked) > 0
&& (c.count_delayed_unchecked < c.count_unchecked || user_preference_store.device_settings.shopping_show_delayed_entries)"
>
<b-button-group class="w-100 mt-1" :class="{'flex-row-reverse': useUserPreferenceStore().user_settings.left_handed}">
<b-button variant="info" block class="btn btn-block text-left">
<span v-if="c.name === shopping_list_store.UNDEFINED_CATEGORY">{{
$t('Undefined')
}}</span>
<span v-if="c.name === shopping_list_store.UNDEFINED_CATEGORY">{{$t('Undefined')}}</span>
<span v-else>{{ c.name }}</span>
</b-button>
<b-button class="d-print-none "
:class="{'btn-success':(c.count_unchecked > 0), 'btn-warning': (c.count_unchecked <= 0)}"
@click="checkGroup(c, (c.count_unchecked > 0))">
<i class="fas fa-fw"
:class="{'fa-check':(c.count_unchecked > 0), 'fa-cart-plus':(c.count_unchecked <= 0) }"></i>
:class="{'btn-success':(c.count_unchecked > 0), 'btn-warning': (c.count_unchecked <= 0)}"
@click="checkGroup(c, (c.count_unchecked > 0))">
<i class="fas fa-fw" :class="{'fa-check':(c.count_unchecked > 0), 'fa-cart-plus':(c.count_unchecked <= 0) }"></i>
</b-button>
</b-button-group>
<span v-for="f in c.foods" v-bind:key="f.id">
<shopping-line-item :entries="f['entries']" class="mt-1"/>
</span>
<shopping-line-item :entries="f['entries']" class="mt-1"/>
</span>
</b-col>
</b-row>

View File

@@ -1,10 +1,10 @@
import {ApiApiFactory} from "@/utils/openapi/api"
import {StandardToasts} from "@/utils/utils"
import {defineStore} from "pinia"
import Vue from "vue"
import _ from 'lodash';
import {useUserPreferenceStore} from "@/stores/UserPreferenceStore";
import {ApiApiFactory} from "@/utils/openapi/api";
import {StandardToasts} from "@/utils/utils";
import _ from 'lodash';
import moment from "moment/moment";
import {defineStore} from "pinia";
import Vue from "vue";
const _STORE_ID = "shopping_list_store"
/*
@@ -60,6 +60,7 @@ export const useShoppingListStore = defineStore(_STORE_ID, {
let total_checked = 0
let total_unchecked_food = 0
let total_checked_food = 0
for (let i in structure) {
let count_unchecked = 0
let count_checked = 0
@@ -75,7 +76,7 @@ export const useShoppingListStore = defineStore(_STORE_ID, {
} else {
food_checked = false
count_unchecked++
if (structure[i]['foods'][fi]['entries'][ei].delay_until != null){
if (this.is_delayed(structure[i]['foods'][fi]['entries'][ei])){
count_delayed_unchecked++
}
}
@@ -171,7 +172,8 @@ export const useShoppingListStore = defineStore(_STORE_ID, {
}
}
return false
}
},
},
actions: {
/**
@@ -222,8 +224,7 @@ export const useShoppingListStore = defineStore(_STORE_ID, {
this.last_autosync = new Date().getTime();
let apiClient = new ApiApiFactory()
apiClient.listShoppingListEntrys(undefined, undefined, undefined, {
'query': {'last_autosync': previous_autosync}
apiClient.listShoppingListEntrys(undefined, undefined, undefined, {'query': {'last_autosync': previous_autosync}
}).then((r) => {
r.data.forEach((e) => {
// dont update stale client data
@@ -491,6 +492,17 @@ export const useShoppingListStore = defineStore(_STORE_ID, {
// can use localization in store
//StandardToasts.makeStandardToast(this, this.$t('NoMoreUndo'))
}
},
/**
* checks if the delay_until is in the future. If it is, the item is delayed
*/
is_delayed: function(entry) {
let delayed = false
if (entry.delay_until != null) {
const delay_until = new Date(entry.delay_until)
delayed = delay_until.getTime() > Date.now()
}
return delayed
}
},
})