#6321 - Negative ticket #158
|
@ -72,4 +72,15 @@ function copyValueText() {
|
|||
.info {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.image {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-content: center;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
& > .q-btn .value {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -29,6 +29,7 @@ globals:
|
|||
saveAndContinue: Guardar y continuar
|
||||
remove: Eliminar
|
||||
reset: Restaurar
|
||||
refresh: Actualizar
|
||||
close: Cerrar
|
||||
cancel: Cancelar
|
||||
clone: Clonar
|
||||
|
|
|
@ -5,15 +5,19 @@ import VnPaginate from 'components/ui/VnPaginate.vue';
|
|||
import ItemDescriptorProxy from 'src/pages/Item/Card/ItemDescriptorProxy.vue';
|
||||
import FetchedTags from 'components/ui/FetchedTags.vue';
|
||||
import { useSession } from 'src/composables/useSession';
|
||||
|
||||
import VnLv from 'src/components/ui/VnLv.vue';
|
||||
const MATCH_VALUES = [5, 6, 7, 8];
|
||||
const { t } = useI18n();
|
||||
const session = useSession();
|
||||
jgallego marked this conversation as resolved
Outdated
|
||||
|
||||
const primaryColor = 'red';
|
||||
const colorSpacer = '#ecf0f1';
|
||||
const gradientStyle = computed(() => {
|
||||
return `linear-gradient(to right, ${primaryColor} ${compatibility.value}, ${colorSpacer} 10%)`;
|
||||
});
|
||||
const compatibilityItem = (value) => `${100 * (value / MATCH_VALUES.length)}%`;
|
||||
const gradientStyle = (value) =>
|
||||
`linear-gradient(to right, ${primaryColor} ${compatibilityItem(
|
||||
value
|
||||
)}, ${colorSpacer} 10%)`;
|
||||
|
||||
const $props = defineProps({
|
||||
item: {
|
||||
type: Object,
|
||||
|
@ -29,26 +33,24 @@ const $props = defineProps({
|
|||
const proposalSelected = ref([]);
|
||||
const quantity = ref(-1);
|
||||
const token = session.getTokenMultimedia();
|
||||
const index = ref(0);
|
||||
const currentTicket = computed(() => $props.tickets[index.value]);
|
||||
// const index = ref(0);
|
||||
// const currentTicket = computed(() => $props.tickets[index.value]);
|
||||
const showProposalDialog = ref(false);
|
||||
const defaultColumnAttrs = {
|
||||
align: 'left',
|
||||
sortable: true,
|
||||
};
|
||||
const compatibility = ref(null);
|
||||
// const compatibility = ref(null);
|
||||
// const compatibility = computed(() => `linear-gradient(to right,red 10%, white 10%);`);
|
||||
const statusConditionalValue = (row) => {
|
||||
const values = [5, 6, 7, 8];
|
||||
const total = values.reduce((acc, i) => acc + row[`match${i}`], 0);
|
||||
const STATUS_VALUES = { 1: 'white', 2: '$secondary', 3: 'positive', 4: 'warning' };
|
||||
const status = STATUS_VALUES[total];
|
||||
compatibility.value = `${100 * (total / values.length)}%`;
|
||||
return { status, total, compatibility };
|
||||
const total = MATCH_VALUES.reduce((acc, i) => acc + row[`match${i}`], 0);
|
||||
// const STATUS_VALUES = { 1: 'white', 2: '$secondary', 3: 'positive', 4: 'warning' };
|
||||
// const status = STATUS_VALUES[total];
|
||||
// const compatibility = `${100 * (total / values.length)}%`;
|
||||
jsegarra marked this conversation as resolved
Outdated
jgallego
commented
a tablas a tablas
|
||||
return total;
|
||||
};
|
||||
// const conditionalValue = (tag) => (tag === 1 ? 'match' : 'not-match');
|
||||
const conditionalValuePrice = (price) =>
|
||||
price > currentTicket.value.price * 1.3 ? 'match' : 'not-match';
|
||||
const conditionalValuePrice = (price) => (price > 1.3 ? 'match' : 'not-match');
|
||||
// const changeTicket = (type, _index = 0) => {
|
||||
// const value = type ? 1 : -1;
|
||||
// const nextIndex = index.value + value + _index;
|
||||
|
@ -75,6 +77,7 @@ const columns = computed(() => [
|
|||
label: t('Compatibildiad'),
|
||||
name: 'status',
|
||||
field: statusConditionalValue,
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
...defaultColumnAttrs,
|
||||
|
@ -84,7 +87,7 @@ const columns = computed(() => [
|
|||
},
|
||||
|
||||
{
|
||||
align: 'center',
|
||||
align: 'left',
|
||||
sortable: true,
|
||||
label: t('proposal.longName'),
|
||||
name: 'longName',
|
||||
|
@ -124,11 +127,11 @@ const columns = computed(() => [
|
|||
field: 'value8',
|
||||
classes: ({ match8 }) => conditionalValue(match8),
|
||||
},*/
|
||||
{
|
||||
...defaultColumnAttrs,
|
||||
label: t('proposal.tags'),
|
||||
name: 'tags',
|
||||
},
|
||||
// {
|
||||
// ...defaultColumnAttrs,
|
||||
// label: t('proposal.tags'),
|
||||
// name: 'tags',
|
||||
// },
|
||||
|
||||
{
|
||||
...defaultColumnAttrs,
|
||||
|
@ -171,6 +174,8 @@ async function confirm() {
|
|||
<QDialog ref="dialogRef" @hide="onDialogHide" v-model="showProposalDialog" full-width>
|
||||
<QCard class="q-pa-lg">
|
||||
<QCardSection class="row items-center q-pb-none">
|
||||
<VnLv class="image">
|
||||
<template #label>
|
||||
<QImg
|
||||
:src="`/api/Images/catalog/50x50/${item.id}/download?access_token=${token}`"
|
||||
spinner-color="primary"
|
||||
|
@ -180,23 +185,27 @@ async function confirm() {
|
|||
class="image remove-bg"
|
||||
:alt="'asdads'"
|
||||
/>
|
||||
|
||||
<span class="text-h6">{{ item.longName }}</span>
|
||||
<span class="text"
|
||||
><sub>{{ item.longName }}</sub></span
|
||||
>
|
||||
</template>
|
||||
<template #value>
|
||||
<QBtn flat class="link text-blue">
|
||||
{{ item.longName }}
|
||||
<ItemDescriptorProxy :id="item.id" />
|
||||
jsegarra marked this conversation as resolved
jgallego
commented
30 ? 30 ?
jsegarra
commented
Lo habia reemplazado arroba y faltaba esta Lo habia reemplazado arroba y faltaba esta
|
||||
</QBtn>
|
||||
<FetchedTags class="q-ml-md" :item="item" :max-length="5" />
|
||||
</template>
|
||||
</VnLv>
|
||||
<QSpace />
|
||||
<QBtn icon="close" flat round dense v-close-popup />
|
||||
</QCardSection>
|
||||
<QCardSection class="row items-center justify-center column items-stretch">
|
||||
<span class="text-h6 text-grey">
|
||||
<!-- {{ currentTicket }} -->
|
||||
{{
|
||||
<!-- {{
|
||||
jgallego marked this conversation as resolved
Outdated
jgallego
commented
numeros en el codigo no en tablas, que es este 30? numeros en el codigo no en tablas, que es este 30?
jsegarra
commented
Gestionado en una columna de TicketConfig Gestionado en una columna de TicketConfig
|
||||
t('proposal.title', {
|
||||
ticketFk: currentTicket.ticketFk,
|
||||
saleFk: currentTicket.saleFk,
|
||||
})
|
||||
}}
|
||||
}} -->
|
||||
</span>
|
||||
</QCardSection>
|
||||
<QCardSection class="row items-center justify-center column items-stretch">
|
||||
|
@ -251,7 +260,7 @@ async function confirm() {
|
|||
</QTr> -->
|
||||
</template>
|
||||
<template #body-cell-longName="{ row, value }">
|
||||
<QTd align="right" class="text-primary">
|
||||
<QTd align="left" class="text-primary">
|
||||
<QTooltip>
|
||||
{{ row.id }}
|
||||
</QTooltip>
|
||||
|
@ -262,30 +271,28 @@ async function confirm() {
|
|||
height="50px"
|
||||
width="50px"
|
||||
class="image remove-bg"
|
||||
:alt="'asdads'"
|
||||
/>
|
||||
:alt="'asdads'" />
|
||||
<QBtn flat color="blue" dense>{{ value }}</QBtn>
|
||||
|
||||
<ItemDescriptorProxy :id="row.id" />
|
||||
</QTd>
|
||||
<FetchedTags :item="row" :max-length="5"
|
||||
/></QTd>
|
||||
</template>
|
||||
<template #body-cell-status="{ value }">
|
||||
<QTd class="col" align="center">
|
||||
<div
|
||||
:style="{ background: gradientStyle }"
|
||||
:style="{ background: gradientStyle(value) }"
|
||||
class="compatibility"
|
||||
>
|
||||
<QTooltip>
|
||||
{{ value }}
|
||||
{{ compatibilityItem(value) }}
|
||||
</QTooltip>
|
||||
</div>
|
||||
</QTd>
|
||||
</template>
|
||||
<template #body-cell-tags="{ row }">
|
||||
<QTd class="col" align="center"
|
||||
><FetchedTags :item="row" :max-length="5"
|
||||
/></QTd>
|
||||
</template>
|
||||
<!-- <template #body-cell-tags="{ row }">
|
||||
<QTd class="col" align="center"> </QTd>
|
||||
</template> -->
|
||||
|
||||
<template #body-cell-price2="{ row, value }">
|
||||
<QTd
|
||||
|
|
|
@ -88,6 +88,7 @@ itemType:
|
|||
worker: Trabajador
|
||||
category: Reino
|
||||
temperature: Temperatura
|
||||
itemProposal: Artículos similares
|
||||
proposal:
|
||||
title: Items de sustitución para los tickets seleccionados
|
||||
itemFk: Item
|
||||
|
|
|
@ -0,0 +1,113 @@
|
|||
<script setup>
|
||||
import { ref, toRefs } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import axios from 'axios';
|
||||
import useNotify from 'src/composables/useNotify';
|
||||
import { useValidator } from 'src/composables/useValidator';
|
||||
import VnRow from 'components/ui/VnRow.vue';
|
||||
import VnSelect from 'components/common/VnSelect.vue';
|
||||
import VnInputDate from 'components/common/VnInputDate.vue';
|
||||
import FetchData from 'src/components/FetchData.vue';
|
||||
import { watch } from 'vue';
|
||||
import { onMounted } from 'vue';
|
||||
const { t } = useI18n();
|
||||
const columns = [
|
||||
{
|
||||
name: 'name',
|
||||
required: true,
|
||||
label: 'Dessert (100g serving)',
|
||||
align: 'left',
|
||||
field: (row) => row.name,
|
||||
format: (val) => `${val}`,
|
||||
sortable: true,
|
||||
},
|
||||
];
|
||||
|
||||
const rows = [
|
||||
{
|
||||
name: 'Frozen Yogurt',
|
||||
calories: 159,
|
||||
fat: 6.0,
|
||||
carbs: 24,
|
||||
protein: 4.0,
|
||||
sodium: 87,
|
||||
calcium: '14%',
|
||||
iron: '1%',
|
||||
},
|
||||
];
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<QBtn color="primary" icon="show_chart">
|
||||
<QPopupProxy ref="popupProxyRef" style="max-width: none">
|
||||
<QCard class="column q-pa-md">
|
||||
<span class="text-body1 q-mb-sm">{{ t('Campaign consumption') }}</span>
|
||||
<VnRow class="q-gutter-md q-mb-md" style="min-width: 70vw">
|
||||
<QCard class="column q-pa-md vn-one">
|
||||
<VnRow class="row q-gutter-md q-mb-md">
|
||||
<span class="text-body1 q-mb-sm"
|
||||
>Lineas a transferir</span
|
||||
></VnRow
|
||||
>
|
||||
<QTable
|
||||
flat
|
||||
bordered
|
||||
title="Treats"
|
||||
:rows="rows"
|
||||
:columns="columns"
|
||||
row-key="name"
|
||||
/>
|
||||
</QCard>
|
||||
<QCard class="column q-pa-md vn-one">
|
||||
<VnRow class="row q-gutter-md q-mb-md">
|
||||
<span class="text-body1 q-mb-sm"
|
||||
>Ticket destinatario</span
|
||||
></VnRow
|
||||
>
|
||||
<QTable
|
||||
flat
|
||||
bordered
|
||||
title="Treats"
|
||||
:rows="rows"
|
||||
:columns="columns"
|
||||
row-key="name"
|
||||
/>
|
||||
</QCard>
|
||||
</VnRow>
|
||||
<!-- <div class="q-mt-lg row justify-end">
|
||||
<QBtn
|
||||
:label="t('globals.cancel')"
|
||||
color="primary"
|
||||
flat
|
||||
class="q-mr-md"
|
||||
v-close-popup
|
||||
/>
|
||||
<QBtn
|
||||
:label="t('globals.save')"
|
||||
type="submit"
|
||||
color="primary"
|
||||
@click="onSubmit()"
|
||||
/>
|
||||
</div> -->
|
||||
</QCard>
|
||||
</QPopupProxy>
|
||||
<QTooltip>{{ t('Campaign consumption') }}</QTooltip>
|
||||
</QBtn>
|
||||
</template>
|
||||
|
||||
<i18n>
|
||||
en:
|
||||
params:
|
||||
valentinesDay: Valentine's Day
|
||||
mothersDay: Mother's Day
|
||||
allSaints: All Saints' Day
|
||||
es:
|
||||
params:
|
||||
valentinesDay: Día de San Valentín
|
||||
mothersDay: Día de la Madre
|
||||
allSaints: Día de Todos los Santos
|
||||
Campaign consumption: Consumo campaña
|
||||
Campaign: Campaña
|
||||
From: Desde
|
||||
To: Hasta
|
||||
</i18n>
|
|
@ -8,7 +8,10 @@ import ChangeQuantityDialog from 'pages/Ticket/Negative/components/ChangeQuantit
|
|||
import ChangeStateDialog from 'pages/Ticket/Negative/components/ChangeStateDialog.vue';
|
||||
import ItemProposal from 'pages/Item/components/ItemProposal.vue';
|
||||
import { useVnConfirm } from 'composables/useVnConfirm';
|
||||
|
||||
import VnLv from 'src/components/ui/VnLv.vue';
|
||||
import FetchedTags from 'components/ui/FetchedTags.vue';
|
||||
import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
|
||||
import TickerSplit from '../Card/TicketSplit.vue';
|
||||
import VnPaginate from 'src/components/ui/VnPaginate.vue';
|
||||
import FetchData from 'src/components/FetchData.vue';
|
||||
import VnSelect from 'components/common/VnSelect.vue';
|
||||
|
@ -20,7 +23,6 @@ import { useStateStore } from 'stores/useStateStore';
|
|||
import { useDialogPluginComponent } from 'quasar';
|
||||
import { useSession } from 'src/composables/useSession';
|
||||
import ZoneDescriptorProxy from 'pages/Zone/Card/ZoneDescriptorProxy.vue';
|
||||
import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
|
||||
onMounted(() => {
|
||||
stateStore.rightDrawer = false;
|
||||
nextTick(() => {
|
||||
|
@ -353,8 +355,8 @@ const split = async () => {
|
|||
</QBtn></QBtnGroup
|
||||
>
|
||||
</Teleport> -->
|
||||
<Teleport to="#st-data" v-if="stateStore?.isSubToolbarShown()">
|
||||
<QSpace />
|
||||
<VnSubToolbar>
|
||||
<template #st-data>
|
||||
<QBtnGroup push style="column-gap: 1px">
|
||||
<QBtn
|
||||
icon="refresh"
|
||||
|
@ -386,9 +388,11 @@ const split = async () => {
|
|||
:disable="selectedRows.length < 2"
|
||||
>
|
||||
<QTooltip bottom anchor="bottom right">
|
||||
{{ t('negative.itemProposal') }}
|
||||
{{ t('globals.refresh') }}
|
||||
{{ t('negative.buttonsUpdate.itemProposal') }}
|
||||
</QTooltip>
|
||||
</QBtn>
|
||||
<TickerSplit></TickerSplit>
|
||||
<QBtn
|
||||
color="primary"
|
||||
@click="
|
||||
|
@ -406,21 +410,16 @@ const split = async () => {
|
|||
{{ t('globals.split') }}
|
||||
</QTooltip>
|
||||
</QBtn>
|
||||
<QBtn
|
||||
icon="vn:item"
|
||||
color="primary"
|
||||
:disable="selectedRows.length < 1"
|
||||
@click="showProposalDialog = true"
|
||||
>
|
||||
<QBtn icon="vn:item" color="primary" @click="showProposalDialog = true">
|
||||
<QTooltip bottom anchor="bottom right">
|
||||
{{ t('Item proposal') }}
|
||||
{{ t('itemProposal') }}
|
||||
</QTooltip>
|
||||
</QBtn>
|
||||
</QBtnGroup>
|
||||
<QCheckbox v-model="showFree" :label="t('negative.detail.showFree')" />
|
||||
</Teleport>
|
||||
</template>
|
||||
</VnSubToolbar>
|
||||
<QPage>
|
||||
<VnSubToolbar />
|
||||
<div class="full-width q-pa-md">
|
||||
<VnPaginate
|
||||
:data-key="URL_KEY"
|
||||
|
@ -431,8 +430,10 @@ const split = async () => {
|
|||
>
|
||||
<!-- :rows="rows" -->
|
||||
<template #body="{ rows }">
|
||||
<!-- <VnRow style="align-items: center">
|
||||
<div>
|
||||
{{ item }}
|
||||
|
||||
<VnLv class="image">
|
||||
<template #label>
|
||||
<QImg
|
||||
:src="`/api/Images/catalog/50x50/${entityId}/download?access_token=${token}`"
|
||||
spinner-color="primary"
|
||||
|
@ -442,8 +443,22 @@ const split = async () => {
|
|||
class="image remove-bg"
|
||||
:alt="'asdads'"
|
||||
/>
|
||||
|
||||
</template>
|
||||
<template #value>
|
||||
<QBtn flat class="link text-blue">
|
||||
{{ item.longName }}
|
||||
<ItemDescriptorProxy :id="entityId" />
|
||||
</QBtn>
|
||||
<FetchedTags class="q-ml-md" :item="item" :max-length="5" />
|
||||
</template>
|
||||
</VnLv>
|
||||
<!-- <ItemDescriptorProxy :id="entityId" />
|
||||
<span class="text-h6">{{ item.longName }}</span>
|
||||
<span class="text-h6"
|
||||
><sub>{{ item.longName }}</sub></span
|
||||
> -->
|
||||
<!-- <VnRow style="align-items: center">
|
||||
<div>
|
||||
</div>
|
||||
<QIcon name="arrow_right" size="lg" />
|
||||
<VnSelectDialog action-icon="call_split"></VnSelectDialog
|
||||
|
@ -552,13 +567,13 @@ const split = async () => {
|
|||
></QPage>
|
||||
<ChangeStateDialog
|
||||
ref="changeStateDialogRef"
|
||||
@hide="onDetailDialogHide"
|
||||
@hide="onDialogHide"
|
||||
v-model="showChangeStateDialog"
|
||||
:selected-rows="selectedRows"
|
||||
></ChangeStateDialog>
|
||||
<ChangeQuantityDialog
|
||||
ref="changeQuantityDialogRef"
|
||||
@hide="onDetailDialogHide"
|
||||
@hide="onDialogHide"
|
||||
v-model="showChangeQuantityDialog"
|
||||
:selected-rows="selectedRows"
|
||||
>
|
||||
|
|
Loading…
Reference in New Issue
configuracion a tablas
ya no hace falta