forked from verdnatura/salix-front
Transfer
This commit is contained in:
parent
0666aeb166
commit
acc899b851
|
@ -17,6 +17,10 @@ const $props = defineProps({
|
|||
type: String,
|
||||
default: '',
|
||||
},
|
||||
clearable: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
});
|
||||
|
||||
const { t } = useI18n();
|
||||
|
@ -84,7 +88,7 @@ const inputRules = [
|
|||
<QIcon
|
||||
name="close"
|
||||
size="xs"
|
||||
v-if="hover && value && !$attrs.disabled"
|
||||
v-if="hover && value && !$attrs.disabled && $props.clearable"
|
||||
@click="value = null"
|
||||
></QIcon>
|
||||
<QIcon v-if="info" name="info">
|
||||
|
|
|
@ -13,6 +13,7 @@ import ItemPicture from 'src/components/ui/ItemPicture.vue';
|
|||
import RightMenu from 'src/components/common/RightMenu.vue';
|
||||
import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
|
||||
import TicketSaleMoreActions from './TicketSaleMoreActions.vue';
|
||||
import TicketTransfer from './TicketTransfer.vue';
|
||||
|
||||
import { useStateStore } from 'stores/useStateStore';
|
||||
import { useSession } from 'composables/useSession';
|
||||
|
@ -47,6 +48,10 @@ const selectedSales = ref([]);
|
|||
const mana = ref(null);
|
||||
const manaCode = ref('mana');
|
||||
const ticketState = computed(() => store.data?.ticketState?.state?.code);
|
||||
const transfer = ref({
|
||||
lastActiveTickets: [],
|
||||
sales: [],
|
||||
});
|
||||
|
||||
const columns = computed(() => [
|
||||
{
|
||||
|
@ -370,6 +375,27 @@ const removeSales = async () => {
|
|||
|
||||
const insertRow = () => sales.value.push({ ...DEFAULT_EDIT });
|
||||
|
||||
const setTransferParams = async () => {
|
||||
try {
|
||||
const checkedSales = JSON.parse(JSON.stringify(selectedSales.value));
|
||||
transfer.value = {
|
||||
lastActiveTickets: [],
|
||||
sales: checkedSales,
|
||||
};
|
||||
|
||||
const params = { ticketId: store.data.id };
|
||||
const { data } = await axios.get(
|
||||
`clients/${store.data.clientFk}/lastActiveTickets`,
|
||||
{
|
||||
params,
|
||||
}
|
||||
);
|
||||
transfer.value.lastActiveTickets = data;
|
||||
} catch (err) {
|
||||
console.error('Error setting transfer params', err);
|
||||
}
|
||||
};
|
||||
|
||||
onMounted(async () => {
|
||||
stateStore.rightDrawer = true;
|
||||
await getConfig();
|
||||
|
@ -458,6 +484,19 @@ onUnmounted(() => (stateStore.rightDrawer = false));
|
|||
>
|
||||
<QTooltip>{{ t('Remove lines') }}</QTooltip>
|
||||
</QBtn>
|
||||
<QBtn
|
||||
color="primary"
|
||||
icon="vn:splitline"
|
||||
:disable="!isTicketEditable || !selectedSales.length"
|
||||
@click="setTransferParams()"
|
||||
>
|
||||
<QTooltip>{{ t('Transfer lines') }}</QTooltip>
|
||||
<TicketTransfer
|
||||
:transfer="transfer"
|
||||
:ticket="store.data"
|
||||
@refresh-data="resetChanges()"
|
||||
/>
|
||||
</QBtn>
|
||||
</QBtnGroup>
|
||||
</template>
|
||||
</VnSubToolbar>
|
||||
|
@ -720,4 +759,5 @@ es:
|
|||
You are going to delete lines of the ticket: Vas a eliminar lineas del ticket
|
||||
Add item: Añadir artículo
|
||||
Select lines to see the options: Selecciona líneas para ver las opciones
|
||||
Transfer lines: Transferir líneas
|
||||
</i18n>
|
||||
|
|
|
@ -0,0 +1,195 @@
|
|||
<script setup>
|
||||
import { ref, computed, onMounted } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useRouter } from 'vue-router';
|
||||
|
||||
import VnInput from 'src/components/common/VnInput.vue';
|
||||
|
||||
import { toDateFormat } from 'src/filters/date.js';
|
||||
import axios from 'axios';
|
||||
|
||||
const $props = defineProps({
|
||||
mana: {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
newPrice: {
|
||||
type: Number,
|
||||
default: 0,
|
||||
},
|
||||
transfer: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
ticket: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
});
|
||||
|
||||
const emit = defineEmits(['refreshData']);
|
||||
|
||||
const router = useRouter();
|
||||
const { t } = useI18n();
|
||||
const QPopupProxyRef = ref(null);
|
||||
|
||||
const _transfer = ref(null);
|
||||
|
||||
const transferLinesColumns = computed(() => [
|
||||
{
|
||||
label: t('ticketSale.id'),
|
||||
name: 'itemFk',
|
||||
field: 'itemFk',
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
label: t('ticketSale.item'),
|
||||
name: 'item',
|
||||
field: 'concept',
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
label: t('ticketSale.quantity'),
|
||||
name: 'quantity',
|
||||
field: 'quantity',
|
||||
align: 'left',
|
||||
},
|
||||
]);
|
||||
|
||||
const destinationTicketColumns = computed(() => [
|
||||
{
|
||||
label: t('ticketSale.id'),
|
||||
name: 'id',
|
||||
field: 'id',
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
label: t('ticketSale.shipped'),
|
||||
name: 'item',
|
||||
field: 'shipped',
|
||||
align: 'left',
|
||||
format: (val) => toDateFormat(val),
|
||||
},
|
||||
{
|
||||
label: t('ticketSale.agency'),
|
||||
name: 'agency',
|
||||
field: 'agencyName',
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
label: t('ticketSale.address'),
|
||||
name: 'address',
|
||||
field: 'address',
|
||||
align: 'left',
|
||||
},
|
||||
]);
|
||||
|
||||
const transferSales = async (ticketId) => {
|
||||
const params = {
|
||||
ticketId: ticketId,
|
||||
sales: $props.transfer.sales,
|
||||
};
|
||||
|
||||
const { data } = await axios.post(
|
||||
`tickets/${$props.ticket.id}/transferSales`,
|
||||
params
|
||||
);
|
||||
|
||||
if (data && data.id === $props.ticket.id) emit('refreshData');
|
||||
else router.push({ name: 'TicketSale', params: { id: data.id } });
|
||||
};
|
||||
|
||||
onMounted(() => (_transfer.value = $props.transfer));
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<QPopupProxy ref="QPopupProxyRef">
|
||||
<QCard class="q-px-md" style="display: flex">
|
||||
<QTable
|
||||
v-if="transfer.sales"
|
||||
:rows="transfer.sales"
|
||||
:columns="transferLinesColumns"
|
||||
:title="t('Sales to transfer')"
|
||||
row-key="id"
|
||||
:pagination="{ rowsPerPage: 0 }"
|
||||
class="full-width q-mt-md"
|
||||
:no-data-label="t('globals.noResults')"
|
||||
>
|
||||
<template #body-cell-quantity="{ row }">
|
||||
<QTd @click.stop>
|
||||
<VnInput
|
||||
v-model.number="row.quantity"
|
||||
:clearable="false"
|
||||
@keyup.enter="changeQuantity(row)"
|
||||
@blur="changeQuantity(row)"
|
||||
@focus="edit.oldQuantity = row.quantity"
|
||||
style="max-width: 60px"
|
||||
/>
|
||||
</QTd>
|
||||
</template>
|
||||
</QTable>
|
||||
<QSeparator vertical spaced />
|
||||
<div class="col">
|
||||
<QTable
|
||||
v-if="transfer.lastActiveTickets"
|
||||
:rows="transfer.lastActiveTickets"
|
||||
:columns="destinationTicketColumns"
|
||||
:title="t('Destination ticket')"
|
||||
row-key="id"
|
||||
:pagination="{ rowsPerPage: 0 }"
|
||||
class="full-width q-mt-md"
|
||||
:no-data-label="t('globals.noResults')"
|
||||
>
|
||||
<template #body-cell-address="{ row }">
|
||||
<QTd @click.stop>
|
||||
<span>
|
||||
{{ row.nickname }}
|
||||
{{ row.name }}
|
||||
{{ row.street }}
|
||||
{{ row.postalCode }}
|
||||
{{ row.city }}
|
||||
</span>
|
||||
<QTooltip>
|
||||
{{ row.nickname }}
|
||||
{{ row.name }}
|
||||
{{ row.street }}
|
||||
{{ row.postalCode }}
|
||||
{{ row.city }}
|
||||
</QTooltip>
|
||||
</QTd>
|
||||
</template>
|
||||
</QTable>
|
||||
<QForm class="q-mt-lg">
|
||||
<VnInput
|
||||
v-model.number="_transfer.ticketId"
|
||||
:label="t('Transfer to ticket')"
|
||||
:clearable="false"
|
||||
>
|
||||
<template #append>
|
||||
<QBtn
|
||||
icon="keyboard_arrow_right"
|
||||
color="primary"
|
||||
@click="transferSales(_transfer.ticketId)"
|
||||
style="width: 30px"
|
||||
/>
|
||||
</template>
|
||||
</VnInput>
|
||||
<QBtn
|
||||
:label="t('New ticket')"
|
||||
color="primary"
|
||||
class="full-width q-my-lg"
|
||||
@click="transferSales()"
|
||||
/>
|
||||
</QForm>
|
||||
</div>
|
||||
</QCard>
|
||||
</QPopupProxy>
|
||||
</template>
|
||||
|
||||
<i18n>
|
||||
es:
|
||||
Sales to transfer: Líneas a transferir
|
||||
Destination ticket: Ticket destinatario
|
||||
Transfer to ticket: Transferir a ticket
|
||||
New ticket: Nuevo ticket
|
||||
</i18n>
|
|
@ -19,3 +19,6 @@ ticketSale:
|
|||
ok: Ok
|
||||
state: State
|
||||
more: More
|
||||
shipped: Shipped
|
||||
agency: Agency
|
||||
address: Address
|
||||
|
|
|
@ -21,3 +21,6 @@ ticketSale:
|
|||
ok: Ok
|
||||
state: Estado
|
||||
more: Más
|
||||
shipped: F. Envío
|
||||
agency: Agencia
|
||||
address: Consignatario
|
||||
|
|
Loading…
Reference in New Issue