[pricelist][calculation] stable version of new view
This commit is contained in:
		
							parent
							
								
									8c321fb8ca
								
							
						
					
					
						commit
						e90dc4c306
					
				| 
						 | 
					@ -8,9 +8,7 @@
 | 
				
			||||||
    dense
 | 
					    dense
 | 
				
			||||||
    :filter="search"
 | 
					    :filter="search"
 | 
				
			||||||
    :filter-method="filter"
 | 
					    :filter-method="filter"
 | 
				
			||||||
    :grid="grid"
 | 
					    grid
 | 
				
			||||||
    :style="grid ? '' : 'max-height: 80vh;'"
 | 
					 | 
				
			||||||
    :virtual-scroll="!grid"
 | 
					 | 
				
			||||||
    :rows-per-page-options="[0]"
 | 
					    :rows-per-page-options="[0]"
 | 
				
			||||||
  >
 | 
					  >
 | 
				
			||||||
    <template #header="props">
 | 
					    <template #header="props">
 | 
				
			||||||
| 
						 | 
					@ -47,10 +45,9 @@
 | 
				
			||||||
          option-value="name"
 | 
					          option-value="name"
 | 
				
			||||||
          options-cover
 | 
					          options-cover
 | 
				
			||||||
        />
 | 
					        />
 | 
				
			||||||
        <q-btn label="grid" @click="grid = !grid" />
 | 
					 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </template>
 | 
					    </template>
 | 
				
			||||||
    <template #body="drinks_props">
 | 
					    <!--<template #body="drinks_props">
 | 
				
			||||||
      <q-tr :props="drinks_props">
 | 
					      <q-tr :props="drinks_props">
 | 
				
			||||||
        <q-td auto-width>
 | 
					        <q-td auto-width>
 | 
				
			||||||
          <q-btn
 | 
					          <q-btn
 | 
				
			||||||
| 
						 | 
					@ -354,14 +351,10 @@
 | 
				
			||||||
          />
 | 
					          />
 | 
				
			||||||
        </q-td>
 | 
					        </q-td>
 | 
				
			||||||
        <q-td key="receipt" :props="drinks_props">
 | 
					        <q-td key="receipt" :props="drinks_props">
 | 
				
			||||||
          <build-manual
 | 
					
 | 
				
			||||||
            :steps="drinks_props.row.receipt"
 | 
					 | 
				
			||||||
            @deleteStep="deleteStep($event, drinks_props.row)"
 | 
					 | 
				
			||||||
            @addStep="addStep($event, drinks_props.row)"
 | 
					 | 
				
			||||||
          />
 | 
					 | 
				
			||||||
        </q-td>
 | 
					        </q-td>
 | 
				
			||||||
      </q-tr>
 | 
					      </q-tr>
 | 
				
			||||||
    </template>
 | 
					    </template>-->
 | 
				
			||||||
    <template #item="props">
 | 
					    <template #item="props">
 | 
				
			||||||
      <div class="q-pa-xs col-xs-12 col-sm-6 col-md-4">
 | 
					      <div class="q-pa-xs col-xs-12 col-sm-6 col-md-4">
 | 
				
			||||||
        <q-card>
 | 
					        <q-card>
 | 
				
			||||||
| 
						 | 
					@ -452,19 +445,15 @@
 | 
				
			||||||
              />
 | 
					              />
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
          </q-card-section>
 | 
					          </q-card-section>
 | 
				
			||||||
          <q-card-section v-if="props.row.volumes.length > 0">
 | 
					          <q-card-section v-if="props.row.volumes.length > 0 && notLoading">
 | 
				
			||||||
            <drink-price-volumes v-model="props.row.volumes" />
 | 
					            <drink-price-volumes :model-value="props.row.volumes" />
 | 
				
			||||||
          </q-card-section>
 | 
					          </q-card-section>
 | 
				
			||||||
        </q-card>
 | 
					        </q-card>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </template>
 | 
					    </template>
 | 
				
			||||||
  </q-table>
 | 
					  </q-table>
 | 
				
			||||||
  <q-dialog :model-value="editDrink !== undefined" persistent>
 | 
					  <q-dialog :model-value="editDrink !== undefined" persistent>
 | 
				
			||||||
    <drink-modify
 | 
					    <drink-modify :drink="editDrink" @save="editing_drink" @cancel="editDrink = undefined" />
 | 
				
			||||||
      :drink="editDrink"
 | 
					 | 
				
			||||||
      @save="editDrink = undefined"
 | 
					 | 
				
			||||||
      @cancel="editDrink = undefined"
 | 
					 | 
				
			||||||
    />
 | 
					 | 
				
			||||||
  </q-dialog>
 | 
					  </q-dialog>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -482,6 +471,7 @@ import DrinkModify from './DrinkModify.vue';
 | 
				
			||||||
import { filter, Search } from '../utils/filter';
 | 
					import { filter, Search } from '../utils/filter';
 | 
				
			||||||
import { Notify } from 'quasar';
 | 
					import { Notify } from 'quasar';
 | 
				
			||||||
import { sort } from '../utils/sort';
 | 
					import { sort } from '../utils/sort';
 | 
				
			||||||
 | 
					import { DeleteObjects } from 'src/plugins/pricelist/utils/utils';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default defineComponent({
 | 
					export default defineComponent({
 | 
				
			||||||
  name: 'CalculationTable',
 | 
					  name: 'CalculationTable',
 | 
				
			||||||
| 
						 | 
					@ -489,8 +479,6 @@ export default defineComponent({
 | 
				
			||||||
    SearchInput,
 | 
					    SearchInput,
 | 
				
			||||||
    MinPriceSetting,
 | 
					    MinPriceSetting,
 | 
				
			||||||
    NewDrink,
 | 
					    NewDrink,
 | 
				
			||||||
    BuildManual,
 | 
					 | 
				
			||||||
    DrinkPriceVolumesTable,
 | 
					 | 
				
			||||||
    DrinkPriceVolumes,
 | 
					    DrinkPriceVolumes,
 | 
				
			||||||
    DrinkModify,
 | 
					    DrinkModify,
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -710,25 +698,36 @@ export default defineComponent({
 | 
				
			||||||
      void store.delete_drink_picture(drink);
 | 
					      void store.delete_drink_picture(drink);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function addStep(event: string, drink: Drink) {
 | 
					 | 
				
			||||||
      console.log(event, drink.receipt);
 | 
					 | 
				
			||||||
      drink.receipt?.push(event);
 | 
					 | 
				
			||||||
      updateDrink(drink);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    function deleteStep(event: number, drink: Drink) {
 | 
					 | 
				
			||||||
      console.log(event, drink.receipt);
 | 
					 | 
				
			||||||
      drink.receipt?.splice(event, 1);
 | 
					 | 
				
			||||||
      updateDrink(drink);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const search = ref<Search>({
 | 
					    const search = ref<Search>({
 | 
				
			||||||
      value: '',
 | 
					      value: '',
 | 
				
			||||||
      key: '',
 | 
					      key: '',
 | 
				
			||||||
      label: '',
 | 
					      label: '',
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    const grid = ref(true);
 | 
					 | 
				
			||||||
    const editDrink = ref();
 | 
					    const editDrink = ref();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async function editing_drink(drink: Drink, toDeleteObjects: DeleteObjects) {
 | 
				
			||||||
 | 
					      notLoading.value = false;
 | 
				
			||||||
 | 
					      for (const ingredient of toDeleteObjects.ingredients) {
 | 
				
			||||||
 | 
					        await store.deleteIngredient(ingredient);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      for (const price of toDeleteObjects.prices) {
 | 
				
			||||||
 | 
					        await store.deletePrice(price);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      for (const volume of toDeleteObjects.volumes) {
 | 
				
			||||||
 | 
					        await store.deleteVolume(volume, drink);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      console.log(drink);
 | 
				
			||||||
 | 
					      await store.updateDrink(drink);
 | 
				
			||||||
 | 
					      editDrink.value = undefined;
 | 
				
			||||||
 | 
					      notLoading.value = true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function get_volumes(drink_id: number) {
 | 
				
			||||||
 | 
					      return store.drinks.find((a) => a.id === drink_id)?.volumes;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const notLoading = ref(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
      drinks: computed(() => store.drinks),
 | 
					      drinks: computed(() => store.drinks),
 | 
				
			||||||
      pagination,
 | 
					      pagination,
 | 
				
			||||||
| 
						 | 
					@ -743,15 +742,15 @@ export default defineComponent({
 | 
				
			||||||
      drinkPic,
 | 
					      drinkPic,
 | 
				
			||||||
      savePicture,
 | 
					      savePicture,
 | 
				
			||||||
      deletePicture,
 | 
					      deletePicture,
 | 
				
			||||||
      addStep,
 | 
					 | 
				
			||||||
      deleteStep,
 | 
					 | 
				
			||||||
      console,
 | 
					      console,
 | 
				
			||||||
      search,
 | 
					      search,
 | 
				
			||||||
      filter,
 | 
					      filter,
 | 
				
			||||||
      search_keys,
 | 
					      search_keys,
 | 
				
			||||||
      grid,
 | 
					 | 
				
			||||||
      tags: computed(() => store.tags),
 | 
					      tags: computed(() => store.tags),
 | 
				
			||||||
      editDrink,
 | 
					      editDrink,
 | 
				
			||||||
 | 
					      editing_drink,
 | 
				
			||||||
 | 
					      get_volumes,
 | 
				
			||||||
 | 
					      notLoading,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,16 +6,16 @@
 | 
				
			||||||
    animated
 | 
					    animated
 | 
				
			||||||
    swipeable
 | 
					    swipeable
 | 
				
			||||||
    control-color="primary"
 | 
					    control-color="primary"
 | 
				
			||||||
    navigation
 | 
					 | 
				
			||||||
    arrows
 | 
					    arrows
 | 
				
			||||||
  >
 | 
					  >
 | 
				
			||||||
    <q-carousel-slide v-for="volume in volumes" :key="volume.id" :name="volume.id">
 | 
					    <q-carousel-slide v-for="volume in volumes" :key="volume.id" :name="volume.id">
 | 
				
			||||||
 | 
					      <div class="full-width row">
 | 
				
			||||||
        <q-input
 | 
					        <q-input
 | 
				
			||||||
          v-model.number="volume.volume"
 | 
					          v-model.number="volume.volume"
 | 
				
			||||||
        class="q-pa-sm"
 | 
					          class="q-pa-sm col-10"
 | 
				
			||||||
        :outlined="!editable"
 | 
					          :outlined="!editable || !volume_can_edit"
 | 
				
			||||||
        :filled="editable"
 | 
					          :filled="editable && volume_can_edit"
 | 
				
			||||||
        :readonly="!editable"
 | 
					          :readonly="!editable || !volume_can_edit"
 | 
				
			||||||
          dense
 | 
					          dense
 | 
				
			||||||
          label="Inhalt"
 | 
					          label="Inhalt"
 | 
				
			||||||
          mask="#.###"
 | 
					          mask="#.###"
 | 
				
			||||||
| 
						 | 
					@ -24,6 +24,12 @@
 | 
				
			||||||
          min="0"
 | 
					          min="0"
 | 
				
			||||||
          step="0.001"
 | 
					          step="0.001"
 | 
				
			||||||
        />
 | 
					        />
 | 
				
			||||||
 | 
					        <div v-if="deleteable && editable" class="q-pa-sm col-2 text-right">
 | 
				
			||||||
 | 
					          <q-btn round icon="mdi-delete" size="sm" color="negative" @click="deleteVolume">
 | 
				
			||||||
 | 
					            <q-tooltip> Abgabe entfernen </q-tooltip>
 | 
				
			||||||
 | 
					          </q-btn>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
      <div class="full-width row q-gutter-sm q-pa-sm justify-around">
 | 
					      <div class="full-width row q-gutter-sm q-pa-sm justify-around">
 | 
				
			||||||
        <div v-for="(min_price, index) in volume.min_prices" :key="index">
 | 
					        <div v-for="(min_price, index) in volume.min_prices" :key="index">
 | 
				
			||||||
          <q-badge class="text-body1" color="primary"> {{ min_price.percentage }}% </q-badge>
 | 
					          <q-badge class="text-body1" color="primary"> {{ min_price.percentage }}% </q-badge>
 | 
				
			||||||
| 
						 | 
					@ -33,13 +39,11 @@
 | 
				
			||||||
      <div class="q-pa-sm">
 | 
					      <div class="q-pa-sm">
 | 
				
			||||||
        <div v-for="(price, index) in volume.prices" :key="price.id">
 | 
					        <div v-for="(price, index) in volume.prices" :key="price.id">
 | 
				
			||||||
          <div class="fit row justify-around q-py-sm">
 | 
					          <div class="fit row justify-around q-py-sm">
 | 
				
			||||||
            <div v-if="!editable" class="text-body1 col-xs-12 col-md-3">
 | 
					            <div v-if="!editable" class="text-body1 col-3">{{ price.price.toFixed(2) }}€</div>
 | 
				
			||||||
              {{ price.price.toFixed(2) }}€
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
            <q-input
 | 
					            <q-input
 | 
				
			||||||
              v-else
 | 
					              v-else
 | 
				
			||||||
              v-model.number="price.price"
 | 
					              v-model.number="price.price"
 | 
				
			||||||
              class="col-xs-12 col-md-3"
 | 
					              class="col-3"
 | 
				
			||||||
              type="number"
 | 
					              type="number"
 | 
				
			||||||
              min="0"
 | 
					              min="0"
 | 
				
			||||||
              step="0.01"
 | 
					              step="0.01"
 | 
				
			||||||
| 
						 | 
					@ -47,50 +51,77 @@
 | 
				
			||||||
              filled
 | 
					              filled
 | 
				
			||||||
              dense
 | 
					              dense
 | 
				
			||||||
              label="Preis"
 | 
					              label="Preis"
 | 
				
			||||||
 | 
					              @update:model-value="change"
 | 
				
			||||||
            />
 | 
					            />
 | 
				
			||||||
            <div class="text-body1 col-xs-12 col-md-2">
 | 
					            <div class="text-body1 col-2">
 | 
				
			||||||
              <q-toggle
 | 
					              <q-toggle
 | 
				
			||||||
                v-model="price.public"
 | 
					                v-model="price.public"
 | 
				
			||||||
                :disable="!editable"
 | 
					                :disable="!editable"
 | 
				
			||||||
                checked-icon="mdi-earth"
 | 
					                checked-icon="mdi-earth"
 | 
				
			||||||
                unchecked-icon="mdi-earth-off"
 | 
					                unchecked-icon="mdi-earth-off"
 | 
				
			||||||
 | 
					                @update:model-value="change"
 | 
				
			||||||
              />
 | 
					              />
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <div v-if="!editable" class="text-body1 col-xs-12 col-md-5">
 | 
					            <div v-if="!editable" class="text-body1 col-5">
 | 
				
			||||||
              {{ price.description }}
 | 
					              {{ price.description }}
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <q-input
 | 
					            <q-input
 | 
				
			||||||
              v-else
 | 
					              v-else
 | 
				
			||||||
              v-model="price.description"
 | 
					              v-model="price.description"
 | 
				
			||||||
              class="col-xs-12 col-md-5"
 | 
					              class="col-5"
 | 
				
			||||||
              filled
 | 
					              filled
 | 
				
			||||||
              dense
 | 
					              dense
 | 
				
			||||||
              label="Beschreibung"
 | 
					              label="Beschreibung"
 | 
				
			||||||
 | 
					              @update:model-value="change"
 | 
				
			||||||
            />
 | 
					            />
 | 
				
			||||||
 | 
					            <div v-if="editable" class="col-1">
 | 
				
			||||||
 | 
					              <q-btn round icon="mdi-delete" color="negative" size="xs" @click="deletePrice(price)">
 | 
				
			||||||
 | 
					                <q-tooltip> Preis entfernen </q-tooltip>
 | 
				
			||||||
 | 
					              </q-btn>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <q-separator v-if="index < volume.prices.length - 1" />
 | 
					          <q-separator v-if="index < volume.prices.length - 1" />
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div v-if="editable" class="full-width row justify-end text-right">
 | 
				
			||||||
 | 
					          <q-btn round icon="mdi-plus" size="sm" color="primary">
 | 
				
			||||||
 | 
					            <q-tooltip> Preis hinzufügen </q-tooltip>
 | 
				
			||||||
 | 
					            <q-menu anchor="center middle" self="center middle">
 | 
				
			||||||
 | 
					              <new-price @save="addPrice" />
 | 
				
			||||||
 | 
					            </q-menu>
 | 
				
			||||||
 | 
					          </q-btn>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      <div class="q-pa-sm">
 | 
					      <div class="q-pa-sm">
 | 
				
			||||||
        <ingredients
 | 
					        <ingredients
 | 
				
			||||||
          v-model="volume.ingredients"
 | 
					          v-model="volume.ingredients"
 | 
				
			||||||
          :editable="editable"
 | 
					          :editable="editable"
 | 
				
			||||||
          @update="updateVolume(volume)"
 | 
					          @update="updateVolume(volume)"
 | 
				
			||||||
 | 
					          @delete-ingredient="deleteIngredient"
 | 
				
			||||||
        />
 | 
					        />
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </q-carousel-slide>
 | 
					    </q-carousel-slide>
 | 
				
			||||||
  </q-carousel>
 | 
					  </q-carousel>
 | 
				
			||||||
 | 
					  <div class="full-width row justify-center q-pa-sm">
 | 
				
			||||||
 | 
					    <div class="q-px-sm">
 | 
				
			||||||
      <q-btn-toggle v-model="volume" :options="options" />
 | 
					      <q-btn-toggle v-model="volume" :options="options" />
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div v-if="editable" class="q-px-sm">
 | 
				
			||||||
 | 
					      <q-btn class="q-px-sm" round icon="mdi-plus" color="primary" size="sm" @click="newVolume">
 | 
				
			||||||
 | 
					        <q-tooltip> Abgabe hinzufügen </q-tooltip>
 | 
				
			||||||
 | 
					      </q-btn>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script lang="ts">
 | 
					<script lang="ts">
 | 
				
			||||||
import { computed, defineComponent, PropType, ref, onBeforeMount, unref } from 'vue';
 | 
					import { computed, defineComponent, PropType, ref, onBeforeMount } from 'vue';
 | 
				
			||||||
import { DrinkPriceVolume } from 'src/plugins/pricelist/store';
 | 
					import { DrinkPriceVolume } from 'src/plugins/pricelist/store';
 | 
				
			||||||
import Ingredients from 'src/plugins/pricelist/components/CalculationTable/Ingredients.vue';
 | 
					import Ingredients from 'src/plugins/pricelist/components/CalculationTable/Ingredients.vue';
 | 
				
			||||||
 | 
					import NewPrice from 'src/plugins/pricelist/components/CalculationTable/NewPrice.vue';
 | 
				
			||||||
import { calc_volume, clone } from '../../utils/utils';
 | 
					import { calc_volume, clone } from '../../utils/utils';
 | 
				
			||||||
export default defineComponent({
 | 
					export default defineComponent({
 | 
				
			||||||
  name: 'DrinkPriceVolume',
 | 
					  name: 'DrinkPriceVolume',
 | 
				
			||||||
  components: { Ingredients },
 | 
					  components: { Ingredients, NewPrice },
 | 
				
			||||||
  props: {
 | 
					  props: {
 | 
				
			||||||
    modelValue: {
 | 
					    modelValue: {
 | 
				
			||||||
      type: Array as PropType<Array<DrinkPriceVolume>>,
 | 
					      type: Array as PropType<Array<DrinkPriceVolume>>,
 | 
				
			||||||
| 
						 | 
					@ -103,6 +134,10 @@ export default defineComponent({
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  emits: {
 | 
					  emits: {
 | 
				
			||||||
    'update:modelValue': (val: Array<DrinkPriceVolume>) => val,
 | 
					    'update:modelValue': (val: Array<DrinkPriceVolume>) => val,
 | 
				
			||||||
 | 
					    update: (val: number) => val,
 | 
				
			||||||
 | 
					    'delete-volume': (val: DrinkPriceVolume) => val,
 | 
				
			||||||
 | 
					    'delete-price': (val: FG.DrinkPrice) => val,
 | 
				
			||||||
 | 
					    'delete-ingredient': (val: FG.Ingredient) => val,
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  setup(props, { emit }) {
 | 
					  setup(props, { emit }) {
 | 
				
			||||||
    onBeforeMount(() => {
 | 
					    onBeforeMount(() => {
 | 
				
			||||||
| 
						 | 
					@ -123,10 +158,13 @@ export default defineComponent({
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      set: (val: number | undefined) => (_volume.value = val),
 | 
					      set: (val: number | undefined) => (_volume.value = val),
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					    const edit_volume = computed(() => {
 | 
				
			||||||
 | 
					      return volumes.value.find((a) => a.id === volume.value);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
    const options = computed<Array<{ label: string; value: number }>>(() => {
 | 
					    const options = computed<Array<{ label: string; value: number }>>(() => {
 | 
				
			||||||
      const retVal: Array<{ label: string; value: number }> = [];
 | 
					      const retVal: Array<{ label: string; value: number }> = [];
 | 
				
			||||||
      volumes.value.forEach((volume: DrinkPriceVolume) => {
 | 
					      volumes.value.forEach((volume: DrinkPriceVolume) => {
 | 
				
			||||||
        retVal.push({ label: `${<number>volume.volume}L`, value: volume.id });
 | 
					        retVal.push({ label: `${(<number>volume.volume).toFixed(3)}L`, value: volume.id });
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
      return retVal;
 | 
					      return retVal;
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
| 
						 | 
					@ -138,10 +176,101 @@ export default defineComponent({
 | 
				
			||||||
        console.log('updateVolume old', volumes.value[index]);
 | 
					        console.log('updateVolume old', volumes.value[index]);
 | 
				
			||||||
        volumes.value[index].volume = calc_volume(_volume);
 | 
					        volumes.value[index].volume = calc_volume(_volume);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      emit('update:modelValue', unref(volumes));
 | 
					      change();
 | 
				
			||||||
 | 
					      setTimeout(() => {
 | 
				
			||||||
 | 
					        emit('update', index);
 | 
				
			||||||
 | 
					      }, 50);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return { volumes, volume, options, updateVolume };
 | 
					    const volume_can_edit = computed(() => {
 | 
				
			||||||
 | 
					      if (edit_volume.value) {
 | 
				
			||||||
 | 
					        return !edit_volume.value.ingredients.some((ingredient) => ingredient.drink_ingredient);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return true;
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const newVolumeId = ref(-1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function newVolume() {
 | 
				
			||||||
 | 
					      const new_volume: DrinkPriceVolume = {
 | 
				
			||||||
 | 
					        id: newVolumeId.value,
 | 
				
			||||||
 | 
					        _volume: 0,
 | 
				
			||||||
 | 
					        volume: 0,
 | 
				
			||||||
 | 
					        prices: [],
 | 
				
			||||||
 | 
					        ingredients: [],
 | 
				
			||||||
 | 
					        min_prices: [],
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      newVolumeId.value--;
 | 
				
			||||||
 | 
					      volumes.value.push(new_volume);
 | 
				
			||||||
 | 
					      change();
 | 
				
			||||||
 | 
					      _volume.value = volumes.value[volumes.value.length - 1].id;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function deleteVolume() {
 | 
				
			||||||
 | 
					      if (edit_volume.value) {
 | 
				
			||||||
 | 
					        if (edit_volume.value.id > 0) {
 | 
				
			||||||
 | 
					          emit('delete-volume', edit_volume.value);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        const index = volumes.value.findIndex((a) => a.id === edit_volume.value?.id);
 | 
				
			||||||
 | 
					        if (index > -1) {
 | 
				
			||||||
 | 
					          _volume.value = volumes.value[0].id;
 | 
				
			||||||
 | 
					          volumes.value.splice(index, 1);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const deleteable = computed(() => {
 | 
				
			||||||
 | 
					      if (edit_volume.value) {
 | 
				
			||||||
 | 
					        const has_ingredients = edit_volume.value.ingredients.length > 0;
 | 
				
			||||||
 | 
					        const has_prices = edit_volume.value.prices.length > 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return !(has_ingredients || has_prices);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return true;
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function addPrice(price: FG.DrinkPrice) {
 | 
				
			||||||
 | 
					      if (edit_volume.value) {
 | 
				
			||||||
 | 
					        edit_volume.value.prices.push(price);
 | 
				
			||||||
 | 
					        change();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function deletePrice(price: FG.DrinkPrice) {
 | 
				
			||||||
 | 
					      if (edit_volume.value) {
 | 
				
			||||||
 | 
					        const index = edit_volume.value.prices.findIndex((a) => a.id === price.id);
 | 
				
			||||||
 | 
					        if (index > -1) {
 | 
				
			||||||
 | 
					          if (edit_volume.value.prices[index].id > 0) {
 | 
				
			||||||
 | 
					            emit('delete-price', edit_volume.value.prices[index]);
 | 
				
			||||||
 | 
					            change();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          edit_volume.value.prices.splice(index, 1);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function deleteIngredient(ingredient: FG.Ingredient) {
 | 
				
			||||||
 | 
					      emit('delete-ingredient', ingredient);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function change() {
 | 
				
			||||||
 | 
					      emit('update:modelValue', volumes.value);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      volumes,
 | 
				
			||||||
 | 
					      volume,
 | 
				
			||||||
 | 
					      options,
 | 
				
			||||||
 | 
					      updateVolume,
 | 
				
			||||||
 | 
					      volume_can_edit,
 | 
				
			||||||
 | 
					      newVolume,
 | 
				
			||||||
 | 
					      deleteable,
 | 
				
			||||||
 | 
					      addPrice,
 | 
				
			||||||
 | 
					      deletePrice,
 | 
				
			||||||
 | 
					      deleteVolume,
 | 
				
			||||||
 | 
					      deleteIngredient,
 | 
				
			||||||
 | 
					      change,
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -67,13 +67,13 @@
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
        </q-td>
 | 
					        </q-td>
 | 
				
			||||||
        <q-td key="prices" :props="props">
 | 
					        <q-td key="prices" :props="props">
 | 
				
			||||||
          <price-table
 | 
					          <!--<price-table
 | 
				
			||||||
            :columns="column_prices"
 | 
					            :columns="column_prices"
 | 
				
			||||||
            :rows="props.row.prices"
 | 
					            :rows="props.row.prices"
 | 
				
			||||||
            :row="props.row"
 | 
					            :row="props.row"
 | 
				
			||||||
            :visible-columns="visibleColumns"
 | 
					            :visible-columns="visibleColumns"
 | 
				
			||||||
            @updateDrink="updateDrink"
 | 
					            @updateDrink="updateDrink"
 | 
				
			||||||
          />
 | 
					          />-->
 | 
				
			||||||
        </q-td>
 | 
					        </q-td>
 | 
				
			||||||
      </q-tr>
 | 
					      </q-tr>
 | 
				
			||||||
      <q-tr v-show="props.expand" :props="props">
 | 
					      <q-tr v-show="props.expand" :props="props">
 | 
				
			||||||
| 
						 | 
					@ -108,8 +108,7 @@
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script lang="ts">
 | 
					<script lang="ts">
 | 
				
			||||||
import { Drink, DrinkPriceVolume, usePricelistStore } from '../../store';
 | 
					import { Drink, DrinkPriceVolume } from '../../store';
 | 
				
			||||||
import PriceTable from 'src/plugins/pricelist/components/CalculationTable/PriceTable.vue';
 | 
					 | 
				
			||||||
import Ingredients from 'src/plugins/pricelist/components/CalculationTable/Ingredients.vue';
 | 
					import Ingredients from 'src/plugins/pricelist/components/CalculationTable/Ingredients.vue';
 | 
				
			||||||
import NewVolume from 'src/plugins/pricelist/components/CalculationTable/DrinkPriceVolumeTable/NewVolume.vue';
 | 
					import NewVolume from 'src/plugins/pricelist/components/CalculationTable/DrinkPriceVolumeTable/NewVolume.vue';
 | 
				
			||||||
import { PropType, defineComponent } from 'vue';
 | 
					import { PropType, defineComponent } from 'vue';
 | 
				
			||||||
| 
						 | 
					@ -134,7 +133,7 @@ const columns = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default defineComponent({
 | 
					export default defineComponent({
 | 
				
			||||||
  name: 'DrinkPriceVolumsTable',
 | 
					  name: 'DrinkPriceVolumsTable',
 | 
				
			||||||
  components: { PriceTable, Ingredients, NewVolume },
 | 
					  components: { Ingredients, NewVolume },
 | 
				
			||||||
  props: {
 | 
					  props: {
 | 
				
			||||||
    visibleColumns: {
 | 
					    visibleColumns: {
 | 
				
			||||||
      type: Array,
 | 
					      type: Array,
 | 
				
			||||||
| 
						 | 
					@ -155,7 +154,7 @@ export default defineComponent({
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  emits: { updateDrink: () => true },
 | 
					  emits: { updateDrink: () => true },
 | 
				
			||||||
  setup(_, { emit }) {
 | 
					  setup(_, { emit }) {
 | 
				
			||||||
    const store = usePricelistStore();
 | 
					    //const store = usePricelistStore();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function addVolume(volume: DrinkPriceVolume, drink: Drink) {
 | 
					    function addVolume(volume: DrinkPriceVolume, drink: Drink) {
 | 
				
			||||||
      drink.volumes.push(volume);
 | 
					      drink.volumes.push(volume);
 | 
				
			||||||
| 
						 | 
					@ -165,8 +164,9 @@ export default defineComponent({
 | 
				
			||||||
    function updateDrink() {
 | 
					    function updateDrink() {
 | 
				
			||||||
      emit('updateDrink');
 | 
					      emit('updateDrink');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    function deleteVolume(volume: FG.DrinkPriceVolume, drink: FG.Drink) {
 | 
					    function deleteVolume() {
 | 
				
			||||||
      store.deleteVolume(volume, drink);
 | 
					      //store.deleteVolume(volume, drink);
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    const column_prices = [
 | 
					    const column_prices = [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -191,8 +191,9 @@ export default defineComponent({
 | 
				
			||||||
      volume.ingredients.push(ingredient);
 | 
					      volume.ingredients.push(ingredient);
 | 
				
			||||||
      updateDrink();
 | 
					      updateDrink();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    function deleteIngredient(ingredient: FG.Ingredient, volume: DrinkPriceVolume) {
 | 
					    function deleteIngredient() {
 | 
				
			||||||
      store.deleteIngredient(ingredient, volume);
 | 
					      //store.deleteIngredient(ingredient, volume);
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return { addVolume, updateDrink, deleteVolume, column_prices, addIngredient, deleteIngredient };
 | 
					    return { addVolume, updateDrink, deleteVolume, column_prices, addIngredient, deleteIngredient };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -90,13 +90,16 @@
 | 
				
			||||||
            size="xs"
 | 
					            size="xs"
 | 
				
			||||||
            color="negative"
 | 
					            color="negative"
 | 
				
			||||||
            @click="deleteIngredient(ingredient)"
 | 
					            @click="deleteIngredient(ingredient)"
 | 
				
			||||||
          />
 | 
					          >
 | 
				
			||||||
 | 
					            <q-tooltip> Zutat entfernen </q-tooltip>
 | 
				
			||||||
 | 
					          </q-btn>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      <q-separator />
 | 
					      <q-separator />
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <div v-if="editable" class="full-width row justify-end q-py-xs">
 | 
					    <div v-if="editable" class="full-width row justify-end q-py-xs">
 | 
				
			||||||
      <q-btn size="sm" icon-right="mdi-plus" color="positive" label="Zutat hinzufügen">
 | 
					      <q-btn size="sm" round icon="mdi-plus" color="primary">
 | 
				
			||||||
 | 
					        <q-tooltip> Neue Zutat hinzufügen </q-tooltip>
 | 
				
			||||||
        <q-menu anchor="center middle" self="center middle">
 | 
					        <q-menu anchor="center middle" self="center middle">
 | 
				
			||||||
          <div class="full-width row justify-around q-gutter-sm q-pa-sm">
 | 
					          <div class="full-width row justify-around q-gutter-sm q-pa-sm">
 | 
				
			||||||
            <div class="col">
 | 
					            <div class="col">
 | 
				
			||||||
| 
						 | 
					@ -166,6 +169,7 @@ export default defineComponent({
 | 
				
			||||||
  emits: {
 | 
					  emits: {
 | 
				
			||||||
    'update:modelValue': (val: Array<FG.Ingredient>) => val,
 | 
					    'update:modelValue': (val: Array<FG.Ingredient>) => val,
 | 
				
			||||||
    update: () => true,
 | 
					    update: () => true,
 | 
				
			||||||
 | 
					    'delete-ingredient': (val: FG.Ingredient) => val,
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  setup(props, { emit }) {
 | 
					  setup(props, { emit }) {
 | 
				
			||||||
    onBeforeMount(() => {
 | 
					    onBeforeMount(() => {
 | 
				
			||||||
| 
						 | 
					@ -218,6 +222,9 @@ export default defineComponent({
 | 
				
			||||||
    function deleteIngredient(ingredient: FG.Ingredient) {
 | 
					    function deleteIngredient(ingredient: FG.Ingredient) {
 | 
				
			||||||
      const index = edit_ingredients.value.findIndex((a) => a.id === ingredient.id);
 | 
					      const index = edit_ingredients.value.findIndex((a) => a.id === ingredient.id);
 | 
				
			||||||
      if (index > -1) {
 | 
					      if (index > -1) {
 | 
				
			||||||
 | 
					        if (edit_ingredients.value[index].id > 0) {
 | 
				
			||||||
 | 
					          emit('delete-ingredient', edit_ingredients.value[index]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        edit_ingredients.value.splice(index, 1);
 | 
					        edit_ingredients.value.splice(index, 1);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      emit('update:modelValue', unref(edit_ingredients));
 | 
					      emit('update:modelValue', unref(edit_ingredients));
 | 
				
			||||||
| 
						 | 
					@ -238,7 +245,7 @@ export default defineComponent({
 | 
				
			||||||
    function update() {
 | 
					    function update() {
 | 
				
			||||||
      setTimeout(() => {
 | 
					      setTimeout(() => {
 | 
				
			||||||
        emit('update');
 | 
					        emit('update');
 | 
				
			||||||
      }, 500);
 | 
					      }, 50);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,59 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div class="row justify-around q-pa-sm">
 | 
				
			||||||
 | 
					    <q-input
 | 
				
			||||||
 | 
					      v-model.number="newPrice.price"
 | 
				
			||||||
 | 
					      dense
 | 
				
			||||||
 | 
					      filled
 | 
				
			||||||
 | 
					      class="q-px-sm"
 | 
				
			||||||
 | 
					      type="number"
 | 
				
			||||||
 | 
					      label="Preis"
 | 
				
			||||||
 | 
					      suffix="€"
 | 
				
			||||||
 | 
					      min="0"
 | 
				
			||||||
 | 
					      step="0.1"
 | 
				
			||||||
 | 
					    />
 | 
				
			||||||
 | 
					    <q-input
 | 
				
			||||||
 | 
					      v-model="newPrice.description"
 | 
				
			||||||
 | 
					      dense
 | 
				
			||||||
 | 
					      filled
 | 
				
			||||||
 | 
					      class="q-px-sm"
 | 
				
			||||||
 | 
					      label="Beschreibung"
 | 
				
			||||||
 | 
					      clearable
 | 
				
			||||||
 | 
					    />
 | 
				
			||||||
 | 
					    <q-toggle v-model="newPrice.public" dense class="q-px-sm" label="Öffentlich" />
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					  <div class="row justify-between q-pa-sm">
 | 
				
			||||||
 | 
					    <q-btn v-close-popup label="Abbrechen" @click="cancelAddPrice" />
 | 
				
			||||||
 | 
					    <q-btn v-close-popup label="Speichern" color="primary" @click="addPrice(row)" />
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script lang="ts">
 | 
				
			||||||
 | 
					import { defineComponent, ref } from 'vue';
 | 
				
			||||||
 | 
					export default defineComponent({
 | 
				
			||||||
 | 
					  name: 'NewPrice',
 | 
				
			||||||
 | 
					  emits: {
 | 
				
			||||||
 | 
					    save: (val: FG.DrinkPrice) => val,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  setup(_, { emit }) {
 | 
				
			||||||
 | 
					    const emptyPrice: FG.DrinkPrice = {
 | 
				
			||||||
 | 
					      id: -1,
 | 
				
			||||||
 | 
					      price: 0,
 | 
				
			||||||
 | 
					      description: '',
 | 
				
			||||||
 | 
					      public: true,
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    const newPrice = ref(emptyPrice);
 | 
				
			||||||
 | 
					    function addPrice() {
 | 
				
			||||||
 | 
					      emit('save', newPrice.value);
 | 
				
			||||||
 | 
					      cancelAddPrice();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    function cancelAddPrice() {
 | 
				
			||||||
 | 
					      setTimeout(() => {
 | 
				
			||||||
 | 
					        newPrice.value = emptyPrice;
 | 
				
			||||||
 | 
					      }, 200);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return { newPrice, addPrice, cancelAddPrice };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style scoped></style>
 | 
				
			||||||
| 
						 | 
					@ -1,218 +0,0 @@
 | 
				
			||||||
<template>
 | 
					 | 
				
			||||||
  <q-table
 | 
					 | 
				
			||||||
    v-model:pagination="pagination"
 | 
					 | 
				
			||||||
    dense
 | 
					 | 
				
			||||||
    hide-header
 | 
					 | 
				
			||||||
    :columns="columns"
 | 
					 | 
				
			||||||
    :rows="rows"
 | 
					 | 
				
			||||||
    :visible-columns="visibleColumns"
 | 
					 | 
				
			||||||
    flat
 | 
					 | 
				
			||||||
    virtual-scroll
 | 
					 | 
				
			||||||
    :rows-per-page-options="[0]"
 | 
					 | 
				
			||||||
  >
 | 
					 | 
				
			||||||
    <!--
 | 
					 | 
				
			||||||
    style="max-height: 130px" -->
 | 
					 | 
				
			||||||
    <template #body="prices_props">
 | 
					 | 
				
			||||||
      <q-tr :props="prices_props">
 | 
					 | 
				
			||||||
        <q-td key="price" :props="prices_props">
 | 
					 | 
				
			||||||
          {{ prices_props.row.price.toFixed(2) }}€
 | 
					 | 
				
			||||||
          <q-popup-edit
 | 
					 | 
				
			||||||
            v-slot="scope"
 | 
					 | 
				
			||||||
            v-model="prices_props.row.price"
 | 
					 | 
				
			||||||
            buttons
 | 
					 | 
				
			||||||
            label-cancel="Abbrechen"
 | 
					 | 
				
			||||||
            label-set="Speichern"
 | 
					 | 
				
			||||||
            @update:modelValue="updateDrink"
 | 
					 | 
				
			||||||
          >
 | 
					 | 
				
			||||||
            <q-input
 | 
					 | 
				
			||||||
              v-model.number="scope.value"
 | 
					 | 
				
			||||||
              type="number"
 | 
					 | 
				
			||||||
              label="Preis"
 | 
					 | 
				
			||||||
              dense
 | 
					 | 
				
			||||||
              filled
 | 
					 | 
				
			||||||
              autofocus
 | 
					 | 
				
			||||||
              min="0"
 | 
					 | 
				
			||||||
              step="0.1"
 | 
					 | 
				
			||||||
              suffix="€"
 | 
					 | 
				
			||||||
              @keyup.enter="scope.set"
 | 
					 | 
				
			||||||
            /> </q-popup-edit
 | 
					 | 
				
			||||||
        ></q-td>
 | 
					 | 
				
			||||||
        <q-td key="description" :props="prices_props">
 | 
					 | 
				
			||||||
          {{ prices_props.row.description }}
 | 
					 | 
				
			||||||
          <q-popup-edit
 | 
					 | 
				
			||||||
            v-slot="scope"
 | 
					 | 
				
			||||||
            v-model="prices_props.row.description"
 | 
					 | 
				
			||||||
            buttons
 | 
					 | 
				
			||||||
            label="Beschreibung"
 | 
					 | 
				
			||||||
            label-cancel="Abbrechen"
 | 
					 | 
				
			||||||
            label-set="Speichern"
 | 
					 | 
				
			||||||
            @update:modelValue="updateDrink"
 | 
					 | 
				
			||||||
          >
 | 
					 | 
				
			||||||
            <q-input
 | 
					 | 
				
			||||||
              v-model="scope.value"
 | 
					 | 
				
			||||||
              dense
 | 
					 | 
				
			||||||
              autofocus
 | 
					 | 
				
			||||||
              filled
 | 
					 | 
				
			||||||
              clearable
 | 
					 | 
				
			||||||
              @keyup.enter="scope.set"
 | 
					 | 
				
			||||||
            />
 | 
					 | 
				
			||||||
          </q-popup-edit>
 | 
					 | 
				
			||||||
        </q-td>
 | 
					 | 
				
			||||||
        <q-td key="public" :props="prices_props">
 | 
					 | 
				
			||||||
          <q-toggle v-model="prices_props.row.public" dense @update:modelValue="updateDrink" />
 | 
					 | 
				
			||||||
        </q-td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <q-td>
 | 
					 | 
				
			||||||
          <q-btn
 | 
					 | 
				
			||||||
            color="negative"
 | 
					 | 
				
			||||||
            padding="xs"
 | 
					 | 
				
			||||||
            round
 | 
					 | 
				
			||||||
            size="xs"
 | 
					 | 
				
			||||||
            icon="mdi-delete"
 | 
					 | 
				
			||||||
            @click="deletePrice(prices_props.row, row)"
 | 
					 | 
				
			||||||
          />
 | 
					 | 
				
			||||||
        </q-td>
 | 
					 | 
				
			||||||
      </q-tr>
 | 
					 | 
				
			||||||
    </template>
 | 
					 | 
				
			||||||
    <template #bottom>
 | 
					 | 
				
			||||||
      <div class="full-width row justify-end">
 | 
					 | 
				
			||||||
        <q-btn size="xs" icon-right="add" color="positive" label="Preis hinzufügen">
 | 
					 | 
				
			||||||
          <q-menu anchor="center middle" self="center middle">
 | 
					 | 
				
			||||||
            <div class="row justify-around q-pa-sm">
 | 
					 | 
				
			||||||
              <q-input
 | 
					 | 
				
			||||||
                v-model.number="newPrice.price"
 | 
					 | 
				
			||||||
                dense
 | 
					 | 
				
			||||||
                filled
 | 
					 | 
				
			||||||
                class="q-px-sm"
 | 
					 | 
				
			||||||
                type="number"
 | 
					 | 
				
			||||||
                label="Preis"
 | 
					 | 
				
			||||||
                suffix="€"
 | 
					 | 
				
			||||||
                min="0"
 | 
					 | 
				
			||||||
                step="0.1"
 | 
					 | 
				
			||||||
              />
 | 
					 | 
				
			||||||
              <q-input
 | 
					 | 
				
			||||||
                v-model="newPrice.description"
 | 
					 | 
				
			||||||
                dense
 | 
					 | 
				
			||||||
                filled
 | 
					 | 
				
			||||||
                class="q-px-sm"
 | 
					 | 
				
			||||||
                label="Beschreibung"
 | 
					 | 
				
			||||||
                clearable
 | 
					 | 
				
			||||||
              />
 | 
					 | 
				
			||||||
              <q-toggle v-model="newPrice.public" dense class="q-px-sm" label="Öffentlich" />
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
            <div class="row justify-between q-pa-sm">
 | 
					 | 
				
			||||||
              <q-btn v-close-popup label="Abbrechen" @click="cancelAddPrice" />
 | 
					 | 
				
			||||||
              <q-btn v-close-popup label="Speichern" color="primary" @click="addPrice(row)" />
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
          </q-menu>
 | 
					 | 
				
			||||||
        </q-btn>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
    </template>
 | 
					 | 
				
			||||||
    <template #no-data class="justify-end">
 | 
					 | 
				
			||||||
      <div class="full-width row justify-end">
 | 
					 | 
				
			||||||
        <q-btn size="xs" icon-right="add" color="positive" label="Preis hinzufügen">
 | 
					 | 
				
			||||||
          <q-menu anchor="center middle" self="center middle">
 | 
					 | 
				
			||||||
            <div class="row justify-around q-pa-sm">
 | 
					 | 
				
			||||||
              <q-input
 | 
					 | 
				
			||||||
                v-model.number="newPrice.price"
 | 
					 | 
				
			||||||
                dense
 | 
					 | 
				
			||||||
                filled
 | 
					 | 
				
			||||||
                class="q-px-sm"
 | 
					 | 
				
			||||||
                type="number"
 | 
					 | 
				
			||||||
                label="Preis"
 | 
					 | 
				
			||||||
                suffix="€"
 | 
					 | 
				
			||||||
                min="0"
 | 
					 | 
				
			||||||
                step="0.1"
 | 
					 | 
				
			||||||
              />
 | 
					 | 
				
			||||||
              <q-input
 | 
					 | 
				
			||||||
                v-model="newPrice.description"
 | 
					 | 
				
			||||||
                dense
 | 
					 | 
				
			||||||
                filled
 | 
					 | 
				
			||||||
                class="q-px-sm"
 | 
					 | 
				
			||||||
                label="Beschreibung"
 | 
					 | 
				
			||||||
                clearable
 | 
					 | 
				
			||||||
              />
 | 
					 | 
				
			||||||
              <q-toggle v-model="newPrice.public" dense class="q-px-sm" label="Öffentlich" />
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
            <div class="row justify-between q-pa-sm">
 | 
					 | 
				
			||||||
              <q-btn v-close-popup label="Abbrechen" @click="cancelAddPrice" />
 | 
					 | 
				
			||||||
              <q-btn v-close-popup label="Speichern" color="primary" @click="addPrice(row)" />
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
          </q-menu>
 | 
					 | 
				
			||||||
        </q-btn>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
    </template>
 | 
					 | 
				
			||||||
  </q-table>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script lang="ts">
 | 
					 | 
				
			||||||
import { defineComponent, ref } from 'vue';
 | 
					 | 
				
			||||||
import { DrinkPriceVolume, usePricelistStore } from '../../store';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default defineComponent({
 | 
					 | 
				
			||||||
  name: 'PriceTable',
 | 
					 | 
				
			||||||
  props: {
 | 
					 | 
				
			||||||
    columns: {
 | 
					 | 
				
			||||||
      type: Array,
 | 
					 | 
				
			||||||
      required: true,
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    rows: {
 | 
					 | 
				
			||||||
      type: Array,
 | 
					 | 
				
			||||||
      required: true,
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    row: {
 | 
					 | 
				
			||||||
      type: Object /*as PropType<DrinkPriceVolume>*/,
 | 
					 | 
				
			||||||
      required: true,
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    visibleColumns: {
 | 
					 | 
				
			||||||
      type: Array,
 | 
					 | 
				
			||||||
      required: true,
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  emits: { updateDrink: () => true },
 | 
					 | 
				
			||||||
  setup(props, { emit }) {
 | 
					 | 
				
			||||||
    const store = usePricelistStore();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const emptyPrice: FG.DrinkPrice = {
 | 
					 | 
				
			||||||
      id: -1,
 | 
					 | 
				
			||||||
      price: 0,
 | 
					 | 
				
			||||||
      description: '',
 | 
					 | 
				
			||||||
      public: true,
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    const newPrice = ref(emptyPrice);
 | 
					 | 
				
			||||||
    function addPrice(volume: DrinkPriceVolume) {
 | 
					 | 
				
			||||||
      volume.prices.push(newPrice.value);
 | 
					 | 
				
			||||||
      updateDrink();
 | 
					 | 
				
			||||||
      cancelAddPrice();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    function updateDrink() {
 | 
					 | 
				
			||||||
      emit('updateDrink');
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    function cancelAddPrice() {
 | 
					 | 
				
			||||||
      setTimeout(() => {
 | 
					 | 
				
			||||||
        newPrice.value = emptyPrice;
 | 
					 | 
				
			||||||
      }, 200);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    function deletePrice(price: FG.DrinkPrice, volume: FG.DrinkPriceVolume) {
 | 
					 | 
				
			||||||
      console.log(price, volume);
 | 
					 | 
				
			||||||
      store.deletePrice(price, volume);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const pagination = ref({
 | 
					 | 
				
			||||||
      rowsPerPage: (<DrinkPriceVolume>props.row).prices.length,
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      newPrice,
 | 
					 | 
				
			||||||
      addPrice,
 | 
					 | 
				
			||||||
      cancelAddPrice,
 | 
					 | 
				
			||||||
      updateDrink,
 | 
					 | 
				
			||||||
      deletePrice,
 | 
					 | 
				
			||||||
      pagination,
 | 
					 | 
				
			||||||
      console,
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<style scoped></style>
 | 
					 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,36 @@
 | 
				
			||||||
    <q-card-section>
 | 
					    <q-card-section>
 | 
				
			||||||
      <div class="text-h6">Getränk Bearbeiten</div>
 | 
					      <div class="text-h6">Getränk Bearbeiten</div>
 | 
				
			||||||
    </q-card-section>
 | 
					    </q-card-section>
 | 
				
			||||||
 | 
					    <q-card-section>
 | 
				
			||||||
 | 
					      <q-select
 | 
				
			||||||
 | 
					        v-model="edit_drink.tags"
 | 
				
			||||||
 | 
					        multiple
 | 
				
			||||||
 | 
					        :options="tags"
 | 
				
			||||||
 | 
					        label="Tags"
 | 
				
			||||||
 | 
					        option-label="name"
 | 
				
			||||||
 | 
					        filled
 | 
				
			||||||
 | 
					        dense
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <template #selected-item="item">
 | 
				
			||||||
 | 
					          <q-chip
 | 
				
			||||||
 | 
					            removable
 | 
				
			||||||
 | 
					            :tabindex="item.tabindex"
 | 
				
			||||||
 | 
					            :style="`background-color: ${item.opt.color}`"
 | 
				
			||||||
 | 
					            @remove="item.removeAtIndex(item.index)"
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
 | 
					            {{ item.opt.name }}
 | 
				
			||||||
 | 
					          </q-chip>
 | 
				
			||||||
 | 
					        </template>
 | 
				
			||||||
 | 
					        <template #option="item">
 | 
				
			||||||
 | 
					          <q-item v-bind="item.itemProps" v-on="item.itemEvents">
 | 
				
			||||||
 | 
					            <q-chip :style="`background-color: ${item.opt.color}`">
 | 
				
			||||||
 | 
					              <q-avatar v-if="item.selected" icon="mdi-check" color="positive" text-color="white" />
 | 
				
			||||||
 | 
					              {{ item.opt.name }}
 | 
				
			||||||
 | 
					            </q-chip>
 | 
				
			||||||
 | 
					          </q-item>
 | 
				
			||||||
 | 
					        </template>
 | 
				
			||||||
 | 
					      </q-select>
 | 
				
			||||||
 | 
					    </q-card-section>
 | 
				
			||||||
    <q-card-section>
 | 
					    <q-card-section>
 | 
				
			||||||
      <div class="fit row">
 | 
					      <div class="fit row">
 | 
				
			||||||
        <q-input
 | 
					        <q-input
 | 
				
			||||||
| 
						 | 
					@ -50,9 +80,15 @@
 | 
				
			||||||
      <drink-price-volumes
 | 
					      <drink-price-volumes
 | 
				
			||||||
        v-model="edit_drink.volumes"
 | 
					        v-model="edit_drink.volumes"
 | 
				
			||||||
        editable
 | 
					        editable
 | 
				
			||||||
        @update:modelValue="updateVolume"
 | 
					        @update="updateVolume"
 | 
				
			||||||
 | 
					        @delete-volume="deleteVolume"
 | 
				
			||||||
 | 
					        @delete-price="deletePrice"
 | 
				
			||||||
 | 
					        @delete-ingredient="deleteIngredient"
 | 
				
			||||||
      />
 | 
					      />
 | 
				
			||||||
    </q-card-section>
 | 
					    </q-card-section>
 | 
				
			||||||
 | 
					    <q-card-section>
 | 
				
			||||||
 | 
					      <build-manual :steps="edit_drink.receipt" @deleteStep="deleteStep" @addStep="addStep" />
 | 
				
			||||||
 | 
					    </q-card-section>
 | 
				
			||||||
    <q-card-actions class="justify-around">
 | 
					    <q-card-actions class="justify-around">
 | 
				
			||||||
      <q-btn label="Abbrechen" @click="cancel" />
 | 
					      <q-btn label="Abbrechen" @click="cancel" />
 | 
				
			||||||
      <q-btn label="Speichern" color="primary" @click="save" />
 | 
					      <q-btn label="Speichern" color="primary" @click="save" />
 | 
				
			||||||
| 
						 | 
					@ -60,37 +96,90 @@
 | 
				
			||||||
  </q-card>
 | 
					  </q-card>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
<script lang="ts">
 | 
					<script lang="ts">
 | 
				
			||||||
import { defineComponent, PropType, ref, onBeforeMount } from 'vue';
 | 
					import { defineComponent, PropType, ref, onBeforeMount, computed } from 'vue';
 | 
				
			||||||
import { Drink } from '../store';
 | 
					import { Drink, DrinkPriceVolume, usePricelistStore } from '../store';
 | 
				
			||||||
import DrinkPriceVolumes from './CalculationTable/DrinkPriceVolumes.vue';
 | 
					import DrinkPriceVolumes from './CalculationTable/DrinkPriceVolumes.vue';
 | 
				
			||||||
import { clone } from '../utils/utils';
 | 
					import { clone, calc_min_prices, DeleteObjects } from '../utils/utils';
 | 
				
			||||||
 | 
					import BuildManual from 'src/plugins/pricelist/components/CalculationTable/BuildManual.vue';
 | 
				
			||||||
export default defineComponent({
 | 
					export default defineComponent({
 | 
				
			||||||
  name: 'DrinkModify',
 | 
					  name: 'DrinkModify',
 | 
				
			||||||
  components: { DrinkPriceVolumes },
 | 
					  components: { BuildManual, DrinkPriceVolumes },
 | 
				
			||||||
  props: {
 | 
					  props: {
 | 
				
			||||||
    drink: {
 | 
					    drink: {
 | 
				
			||||||
      type: Object as PropType<Drink>,
 | 
					      type: Object as PropType<Drink>,
 | 
				
			||||||
      required: true,
 | 
					      required: true,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  emits: { save: () => true, cancel: () => true },
 | 
					  emits: {
 | 
				
			||||||
 | 
					    save: (drink: Drink, toDeleteObjects: DeleteObjects) => drink && toDeleteObjects,
 | 
				
			||||||
 | 
					    cancel: () => true,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
  setup(props, { emit }) {
 | 
					  setup(props, { emit }) {
 | 
				
			||||||
    onBeforeMount(() => {
 | 
					    onBeforeMount(() => {
 | 
				
			||||||
      //edit_drink.value = <Drink>JSON.parse(JSON.stringify(props.drink));
 | 
					      //edit_drink.value = <Drink>JSON.parse(JSON.stringify(props.drink));
 | 
				
			||||||
      edit_drink.value = clone(props.drink);
 | 
					      edit_drink.value = clone(props.drink);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const store = usePricelistStore();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const toDeleteObjects = ref<DeleteObjects>({
 | 
				
			||||||
 | 
					      prices: [],
 | 
				
			||||||
 | 
					      volumes: [],
 | 
				
			||||||
 | 
					      ingredients: [],
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const edit_drink = ref<Drink>();
 | 
					    const edit_drink = ref<Drink>();
 | 
				
			||||||
    function save() {
 | 
					    function save() {
 | 
				
			||||||
      emit('save');
 | 
					      emit('save', <Drink>edit_drink.value, toDeleteObjects.value);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    function cancel() {
 | 
					    function cancel() {
 | 
				
			||||||
      emit('cancel');
 | 
					      emit('cancel');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    function updateVolume(test: Drink) {
 | 
					    function updateVolume(index: number) {
 | 
				
			||||||
      console.log(test);
 | 
					      if (index > -1 && edit_drink.value) {
 | 
				
			||||||
 | 
					        edit_drink.value.volumes[index].min_prices = calc_min_prices(
 | 
				
			||||||
 | 
					          edit_drink.value.volumes[index],
 | 
				
			||||||
 | 
					          edit_drink.value.cost_per_volume,
 | 
				
			||||||
 | 
					          store.min_prices
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    return { edit_drink, save, cancel, updateVolume };
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function deletePrice(price: FG.DrinkPrice) {
 | 
				
			||||||
 | 
					      toDeleteObjects.value.prices.push(price);
 | 
				
			||||||
 | 
					      console.log('toDelete', toDeleteObjects.value);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function deleteVolume(volume: DrinkPriceVolume) {
 | 
				
			||||||
 | 
					      toDeleteObjects.value.volumes.push(volume);
 | 
				
			||||||
 | 
					      console.log('toDelete', toDeleteObjects.value);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function deleteIngredient(ingredient: FG.Ingredient) {
 | 
				
			||||||
 | 
					      toDeleteObjects.value.ingredients.push(ingredient);
 | 
				
			||||||
 | 
					      console.log('toDelete', toDeleteObjects.value);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function addStep(event: string) {
 | 
				
			||||||
 | 
					      edit_drink.value?.receipt?.push(event);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function deleteStep(event: number) {
 | 
				
			||||||
 | 
					      edit_drink.value?.receipt?.splice(event, 1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      edit_drink,
 | 
				
			||||||
 | 
					      save,
 | 
				
			||||||
 | 
					      cancel,
 | 
				
			||||||
 | 
					      updateVolume,
 | 
				
			||||||
 | 
					      deletePrice,
 | 
				
			||||||
 | 
					      deleteIngredient,
 | 
				
			||||||
 | 
					      deleteVolume,
 | 
				
			||||||
 | 
					      addStep,
 | 
				
			||||||
 | 
					      deleteStep,
 | 
				
			||||||
 | 
					      tags: computed(() => store.tags),
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -146,8 +146,8 @@ export const usePricelistStore = defineStore({
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    deletePrice(price: FG.DrinkPrice, volume: FG.DrinkPriceVolume) {
 | 
					    async deletePrice(price: FG.DrinkPrice) {
 | 
				
			||||||
      api
 | 
					      /*api
 | 
				
			||||||
        .delete(`pricelist/prices/${price.id}`)
 | 
					        .delete(`pricelist/prices/${price.id}`)
 | 
				
			||||||
        .then(() => {
 | 
					        .then(() => {
 | 
				
			||||||
          const index = volume.prices.findIndex((a) => a.id == price.id);
 | 
					          const index = volume.prices.findIndex((a) => a.id == price.id);
 | 
				
			||||||
| 
						 | 
					@ -155,21 +155,18 @@ export const usePricelistStore = defineStore({
 | 
				
			||||||
            volume.prices.splice(index, 1);
 | 
					            volume.prices.splice(index, 1);
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        .catch((err) => console.warn(err));
 | 
					        .catch((err) => console.warn(err));*/
 | 
				
			||||||
 | 
					      await api.delete(`pricelist/prices/${price.id}`);
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    deleteVolume(volume: FG.DrinkPriceVolume, drink: FG.Drink) {
 | 
					    async deleteVolume(volume: DrinkPriceVolume, drink: Drink) {
 | 
				
			||||||
      api
 | 
					      await api.delete(`pricelist/volumes/${volume.id}`);
 | 
				
			||||||
        .delete(`pricelist/volumes/${volume.id}`)
 | 
					 | 
				
			||||||
        .then(() => {
 | 
					 | 
				
			||||||
      const index = drink.volumes.findIndex((a) => a.id === volume.id);
 | 
					      const index = drink.volumes.findIndex((a) => a.id === volume.id);
 | 
				
			||||||
      if (index > -1) {
 | 
					      if (index > -1) {
 | 
				
			||||||
        drink.volumes.splice(index, 1);
 | 
					        drink.volumes.splice(index, 1);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
        .catch((err) => console.warn(err));
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    deleteIngredient(ingredient: FG.Ingredient, volume: DrinkPriceVolume) {
 | 
					    async deleteIngredient(ingredient: FG.Ingredient) {
 | 
				
			||||||
      api
 | 
					      /*api
 | 
				
			||||||
        .delete(`pricelist/ingredients/${ingredient.id}`)
 | 
					        .delete(`pricelist/ingredients/${ingredient.id}`)
 | 
				
			||||||
        .then(() => {
 | 
					        .then(() => {
 | 
				
			||||||
          const index = volume.ingredients.findIndex((a) => a.id === ingredient.id);
 | 
					          const index = volume.ingredients.findIndex((a) => a.id === ingredient.id);
 | 
				
			||||||
| 
						 | 
					@ -178,6 +175,8 @@ export const usePricelistStore = defineStore({
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        .catch((err) => console.warn(err));
 | 
					        .catch((err) => console.warn(err));
 | 
				
			||||||
 | 
					       */
 | 
				
			||||||
 | 
					      await api.delete(`pricelist/ingredients/${ingredient.id}`);
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    async setDrink(drink: FG.Drink) {
 | 
					    async setDrink(drink: FG.Drink) {
 | 
				
			||||||
      const { data } = await api.post<FG.Drink>('pricelist/drinks', {
 | 
					      const { data } = await api.post<FG.Drink>('pricelist/drinks', {
 | 
				
			||||||
| 
						 | 
					@ -192,10 +191,8 @@ export const usePricelistStore = defineStore({
 | 
				
			||||||
      calc_all_min_prices(this.drinks, this.min_prices);
 | 
					      calc_all_min_prices(this.drinks, this.min_prices);
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    async updateDrink(drink: Drink) {
 | 
					    async updateDrink(drink: Drink) {
 | 
				
			||||||
      console.log(drink);
 | 
					 | 
				
			||||||
      const { data } = await api.put<FG.Drink>(`pricelist/drinks/${drink.id}`, {
 | 
					      const { data } = await api.put<FG.Drink>(`pricelist/drinks/${drink.id}`, {
 | 
				
			||||||
        ...drink,
 | 
					        ...drink,
 | 
				
			||||||
        cost_per_volume: drink._cost_per_volume,
 | 
					 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
      const index = this.drinks.findIndex((a) => a.id === data.id);
 | 
					      const index = this.drinks.findIndex((a) => a.id === data.id);
 | 
				
			||||||
      if (index > -1) {
 | 
					      if (index > -1) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -72,4 +72,11 @@ function clone<T>(o: T): T {
 | 
				
			||||||
  return <T>JSON.parse(JSON.stringify(o));
 | 
					  return <T>JSON.parse(JSON.stringify(o));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface DeleteObjects {
 | 
				
			||||||
 | 
					  prices: Array<FG.DrinkPrice>;
 | 
				
			||||||
 | 
					  volumes: Array<DrinkPriceVolume>;
 | 
				
			||||||
 | 
					  ingredients: Array<FG.Ingredient>;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					export { DeleteObjects };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export { calc_volume, calc_cost_per_volume, calc_all_min_prices, calc_min_prices, clone };
 | 
					export { calc_volume, calc_cost_per_volume, calc_all_min_prices, calc_min_prices, clone };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue