[pricelist] sync min_prices if changing

This commit is contained in:
Tim Gröger 2021-04-14 18:53:17 +02:00
parent 0626cf993f
commit 851c5a0588
5 changed files with 48 additions and 19 deletions

View File

@ -141,7 +141,11 @@
</div> </div>
</q-card-section> </q-card-section>
<q-card-section v-if="props.row.volumes.length > 0 && notLoading"> <q-card-section v-if="props.row.volumes.length > 0 && notLoading">
<drink-price-volumes :model-value="props.row.volumes" :public="public" :nodetails="nodetails" /> <drink-price-volumes
:model-value="props.row.volumes"
:public="public"
:nodetails="nodetails"
/>
</q-card-section> </q-card-section>
</q-card> </q-card>
</div> </div>
@ -276,7 +280,7 @@ export default defineComponent({
field: 'package_size', field: 'package_size',
sortable: true, sortable: true,
sort, sort,
public: false public: false,
}, },
{ {
name: 'cost_per_package', name: 'cost_per_package',
@ -327,7 +331,7 @@ export default defineComponent({
}, },
filterable: true, filterable: true,
sortable: false, sortable: false,
public: false public: false,
}, },
]; ];
const column_calc = [ const column_calc = [
@ -372,7 +376,11 @@ export default defineComponent({
}, },
}); });
const search_keys = computed(() => columns.filter((column) => column.filterable && ((props.public || props.nodetails) ? column.public : true))); const search_keys = computed(() =>
columns.filter(
(column) => column.filterable && (props.public || props.nodetails ? column.public : true)
)
);
const pagination = ref({ const pagination = ref({
sortBy: 'name', sortBy: 'name',

View File

@ -31,7 +31,7 @@ export default defineComponent({
name: 'BuildManual', name: 'BuildManual',
props: { props: {
steps: { steps: {
type: Array as PropType<Array<string>> || undefined, type: (Array as PropType<Array<string>>) || undefined,
required: true, required: true,
}, },
editable: { editable: {

View File

@ -7,11 +7,12 @@
swipeable swipeable
control-color="primary" control-color="primary"
arrows arrows
:keep-alive="false"
> >
<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"> <div class="full-width row">
<q-input <q-input
v-model.number="volume.volume" v-model.number="volume._volume"
class="q-pa-sm col-10" class="q-pa-sm col-10"
:outlined="!editable || !volume_can_edit" :outlined="!editable || !volume_can_edit"
:filled="editable && volume_can_edit" :filled="editable && volume_can_edit"
@ -23,6 +24,7 @@
suffix="L" suffix="L"
min="0" min="0"
step="0.001" step="0.001"
@update:model-value="updateVolume(volume)"
/> />
<div v-if="deleteable && editable" class="q-pa-sm col-2 text-right"> <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-btn round icon="mdi-delete" size="sm" color="negative" @click="deleteVolume">
@ -139,7 +141,7 @@ export default defineComponent({
nodetails: { nodetails: {
type: Boolean, type: Boolean,
default: false, default: false,
} },
}, },
emits: { emits: {
'update:modelValue': (val: Array<DrinkPriceVolume>) => val, 'update:modelValue': (val: Array<DrinkPriceVolume>) => val,
@ -179,10 +181,8 @@ export default defineComponent({
}); });
function updateVolume(_volume: DrinkPriceVolume) { function updateVolume(_volume: DrinkPriceVolume) {
console.log('updateVolume', _volume);
const index = volumes.value.findIndex((a) => a.id === _volume.id); const index = volumes.value.findIndex((a) => a.id === _volume.id);
if (index > -1) { if (index > -1) {
console.log('updateVolume old', volumes.value[index]);
volumes.value[index].volume = calc_volume(_volume); volumes.value[index].volume = calc_volume(_volume);
} }
change(); change();

View File

@ -122,9 +122,9 @@
/> />
</div> </div>
</q-card-section> </q-card-section>
<q-card-section> <q-card-section :key="key">
<drink-price-volumes <drink-price-volumes
v-model="edit_drink.volumes" v-model="edit_volumes"
editable editable
@update="updateVolume" @update="updateVolume"
@delete-volume="deleteVolume" @delete-volume="deleteVolume"
@ -172,8 +172,11 @@ export default defineComponent({
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);
edit_volumes.value = clone(props.drink.volumes);
}); });
const key = ref(0);
const store = usePricelistStore(); const store = usePricelistStore();
const toDeleteObjects = ref<DeleteObjects>({ const toDeleteObjects = ref<DeleteObjects>({
@ -183,7 +186,9 @@ export default defineComponent({
}); });
const edit_drink = ref<Drink>(); const edit_drink = ref<Drink>();
const edit_volumes = ref<Array<DrinkPriceVolume>>([]);
function save() { function save() {
(<Drink>edit_drink.value).volumes = edit_volumes.value;
emit('save', <Drink>edit_drink.value, toDeleteObjects.value, drinkPic.value, deletePic.value); emit('save', <Drink>edit_drink.value, toDeleteObjects.value, drinkPic.value, deletePic.value);
} }
@ -191,15 +196,25 @@ export default defineComponent({
emit('cancel'); emit('cancel');
} }
function updateVolume(index: number) { function updateVolume(index: number) {
if (index > -1 && edit_drink.value) { if (index > -1 && edit_volumes.value) {
edit_drink.value.volumes[index].min_prices = calc_min_prices( edit_volumes.value[index].min_prices = calc_min_prices(
edit_drink.value.volumes[index], edit_volumes.value[index],
edit_drink.value.cost_per_volume, //edit_drink.value.cost_per_volume,
cost_per_volume.value,
store.min_prices store.min_prices
); );
} }
} }
function updateVolumes() {
setTimeout(() => {
edit_volumes.value?.forEach((_, index) => {
updateVolume(index);
});
key.value++;
}, 50);
}
function deletePrice(price: FG.DrinkPrice) { function deletePrice(price: FG.DrinkPrice) {
toDeleteObjects.value.prices.push(price); toDeleteObjects.value.prices.push(price);
} }
@ -287,10 +302,14 @@ export default defineComponent({
const cost_per_volume = computed({ const cost_per_volume = computed({
get: () => { get: () => {
let retVal: number;
if (auto_cost_per_volume.value) { if (auto_cost_per_volume.value) {
return <number>calc_cost_per_volume(<Drink>edit_drink.value); retVal = <number>calc_cost_per_volume(<Drink>edit_drink.value);
} else {
retVal = <number>(<Drink>edit_drink.value).cost_per_volume;
} }
return <number>(<Drink>edit_drink.value).cost_per_volume; updateVolumes();
return retVal;
}, },
set: (val: number) => ((<Drink>edit_drink.value).cost_per_volume = val), set: (val: number) => ((<Drink>edit_drink.value).cost_per_volume = val),
}); });
@ -316,6 +335,8 @@ export default defineComponent({
delete_drink, delete_drink,
auto_cost_per_volume, auto_cost_per_volume,
cost_per_volume, cost_per_volume,
edit_volumes,
key,
}; };
}, },
}); });

View File

@ -6,7 +6,7 @@ import { defineComponent } from 'vue';
import CalculationTable from '../components/CalculationTable.vue'; import CalculationTable from '../components/CalculationTable.vue';
export default defineComponent({ export default defineComponent({
name: 'InnerPricelist', name: 'InnerPricelist',
components: {CalculationTable}, components: { CalculationTable },
setup() { setup() {
return {}; return {};
}, },