forked from verdnatura/salix-front
Create ticket future filter
This commit is contained in:
parent
f9fd1c1f90
commit
6197d283e4
|
@ -202,7 +202,7 @@ function formatValue(value) {
|
|||
|
||||
function sanitizer(params) {
|
||||
for (const [key, value] of Object.entries(params)) {
|
||||
if (typeof value == 'object') {
|
||||
if (value && typeof value === 'object') {
|
||||
const param = Object.values(value)[0];
|
||||
if (typeof param == 'string') params[key] = param.replaceAll('%', '');
|
||||
}
|
||||
|
|
|
@ -8,6 +8,8 @@ import VnSelect from 'src/components/common/VnSelect.vue';
|
|||
import TicketDescriptorProxy from 'src/pages/Ticket/Card/TicketDescriptorProxy.vue';
|
||||
import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
|
||||
import VnSearchbar from 'src/components/ui/VnSearchbar.vue';
|
||||
import RightMenu from 'src/components/common/RightMenu.vue';
|
||||
import TicketFutureFilter from './TicketFutureFilter.vue';
|
||||
|
||||
import { dashIfEmpty, toCurrency } from 'src/filters';
|
||||
import { useVnConfirm } from 'composables/useVnConfirm';
|
||||
|
@ -37,9 +39,9 @@ const exprBuilder = (param, value) => {
|
|||
return { liters: value };
|
||||
case 'lines':
|
||||
return { lines: value };
|
||||
case 'ipt':
|
||||
case 'iptColFilter':
|
||||
return { ipt: { like: `%${value}%` } };
|
||||
case 'futureIpt':
|
||||
case 'futureIptColFilter':
|
||||
return { futureIpt: { like: `%${value}%` } };
|
||||
case 'totalWithVat':
|
||||
return { totalWithVat: value };
|
||||
|
@ -83,6 +85,8 @@ const getInputEvents = (col) => {
|
|||
};
|
||||
};
|
||||
|
||||
const tickets = computed(() => store.data);
|
||||
|
||||
const ticketColumns = computed(() => [
|
||||
{
|
||||
label: t('futureTickets.problems'),
|
||||
|
@ -121,7 +125,7 @@ const ticketColumns = computed(() => [
|
|||
sortable: true,
|
||||
columnFilter: {
|
||||
component: VnSelect,
|
||||
filterParamKey: 'ipt',
|
||||
filterParamKey: 'iptColFilter',
|
||||
type: 'select',
|
||||
filterValue: null,
|
||||
event: getInputEvents,
|
||||
|
@ -214,7 +218,7 @@ const ticketColumns = computed(() => [
|
|||
sortable: true,
|
||||
columnFilter: {
|
||||
component: VnSelect,
|
||||
filterParamKey: 'futureIpt',
|
||||
filterParamKey: 'futureIptColFilter',
|
||||
type: 'select',
|
||||
filterValue: null,
|
||||
event: getInputEvents,
|
||||
|
@ -305,9 +309,14 @@ onMounted(async () => {
|
|||
</QBtn>
|
||||
</template>
|
||||
</VnSubToolbar>
|
||||
<RightMenu>
|
||||
<template #right-panel>
|
||||
<TicketFutureFilter data-key="FutureTickets" />
|
||||
</template>
|
||||
</RightMenu>
|
||||
<QPage class="column items-center q-pa-md">
|
||||
<QTable
|
||||
:rows="store.data"
|
||||
:rows="tickets"
|
||||
:columns="ticketColumns"
|
||||
row-key="id"
|
||||
selection="multiple"
|
||||
|
|
|
@ -0,0 +1,244 @@
|
|||
<script setup>
|
||||
import { ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import FetchData from 'components/FetchData.vue';
|
||||
import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue';
|
||||
import VnSelect from 'components/common/VnSelect.vue';
|
||||
import VnInputDate from 'src/components/common/VnInputDate.vue';
|
||||
import VnInput from 'src/components/common/VnInput.vue';
|
||||
|
||||
import axios from 'axios';
|
||||
import { onMounted } from 'vue';
|
||||
|
||||
const { t } = useI18n();
|
||||
const props = defineProps({
|
||||
dataKey: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
});
|
||||
|
||||
const warehousesOptions = ref([]);
|
||||
const itemPackingTypes = ref([]);
|
||||
const stateOptions = ref([]);
|
||||
|
||||
const getItemPackingTypes = async () => {
|
||||
try {
|
||||
const filter = {
|
||||
where: { isActive: true },
|
||||
};
|
||||
const { data } = await axios.get('ItemPackingTypes', {
|
||||
params: { filter: JSON.stringify(filter) },
|
||||
});
|
||||
itemPackingTypes.value = data.map((ipt) => ({
|
||||
description: t(ipt.description),
|
||||
code: ipt.code,
|
||||
}));
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
};
|
||||
|
||||
const getGroupedStates = async () => {
|
||||
try {
|
||||
const { data } = await axios.get('AlertLevels');
|
||||
stateOptions.value = data.map((state) => ({
|
||||
id: state.id,
|
||||
name: t(`futureTickets.${state.code}`),
|
||||
code: state.code,
|
||||
}));
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
};
|
||||
|
||||
onMounted(async () => {
|
||||
getItemPackingTypes();
|
||||
getGroupedStates();
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<FetchData
|
||||
url="Warehouses"
|
||||
@on-fetch="(data) => (warehousesOptions = data)"
|
||||
auto-load
|
||||
/>
|
||||
<VnFilterPanel
|
||||
:data-key="props.dataKey"
|
||||
:hidden-tags="['search']"
|
||||
:unremovable-params="['warehouseFk', 'originDated', 'futureDated']"
|
||||
>
|
||||
<template #tags="{ tag, formatFn }">
|
||||
<div class="q-gutter-x-xs">
|
||||
<strong>{{ t(`params.${tag.label}`) }}: </strong>
|
||||
<span>{{ formatFn(tag.value) }}</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #body="{ params, searchFn }">
|
||||
<QItem class="q-my-sm">
|
||||
<QItemSection>
|
||||
<VnInputDate
|
||||
v-model="params.originDated"
|
||||
:label="t('params.originDated')"
|
||||
is-outlined
|
||||
@update:model-value="searchFn()"
|
||||
/>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem class="q-my-sm">
|
||||
<QItemSection>
|
||||
<VnInputDate
|
||||
v-model="params.futureDated"
|
||||
:label="t('params.futureDated')"
|
||||
is-outlined
|
||||
@update:model-value="searchFn()"
|
||||
/>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem class="q-my-sm">
|
||||
<QItemSection>
|
||||
<VnInput
|
||||
:label="t('params.litersMax')"
|
||||
v-model="params.litersMax"
|
||||
is-outlined
|
||||
/>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem class="q-my-sm">
|
||||
<QItemSection>
|
||||
<VnInput
|
||||
:label="t('params.linesMax')"
|
||||
v-model="params.linesMax"
|
||||
is-outlined
|
||||
/>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem>
|
||||
<QItemSection>
|
||||
<VnSelect
|
||||
:label="t('params.ipt')"
|
||||
v-model="params.ipt"
|
||||
:options="itemPackingTypes"
|
||||
option-value="code"
|
||||
option-label="description"
|
||||
:info="t('iptInfo')"
|
||||
@update:model-value="searchFn()"
|
||||
dense
|
||||
outlined
|
||||
rounded
|
||||
>
|
||||
</VnSelect>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem>
|
||||
<QItemSection>
|
||||
<VnSelect
|
||||
:label="t('params.futureIpt')"
|
||||
v-model="params.futureIpt"
|
||||
:options="itemPackingTypes"
|
||||
option-value="code"
|
||||
option-label="description"
|
||||
:info="t('iptInfo')"
|
||||
@update:model-value="searchFn()"
|
||||
dense
|
||||
outlined
|
||||
rounded
|
||||
>
|
||||
</VnSelect>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem>
|
||||
<QItemSection>
|
||||
<VnSelect
|
||||
:label="t('params.state')"
|
||||
v-model="params.state"
|
||||
:options="stateOptions"
|
||||
option-value="code"
|
||||
option-label="name"
|
||||
@update:model-value="searchFn()"
|
||||
dense
|
||||
outlined
|
||||
rounded
|
||||
>
|
||||
</VnSelect>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem>
|
||||
<QItemSection>
|
||||
<VnSelect
|
||||
:label="t('params.futureState')"
|
||||
v-model="params.futureState"
|
||||
:options="stateOptions"
|
||||
option-value="code"
|
||||
option-label="name"
|
||||
@update:model-value="searchFn()"
|
||||
dense
|
||||
outlined
|
||||
rounded
|
||||
>
|
||||
</VnSelect>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
|
||||
<QItem>
|
||||
<QItemSection>
|
||||
<QCheckbox
|
||||
:label="t('params.problems')"
|
||||
v-model="params.problems"
|
||||
:toggle-indeterminate="false"
|
||||
@update:model-value="searchFn()"
|
||||
/>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem>
|
||||
<QItemSection>
|
||||
<VnSelect
|
||||
:label="t('params.warehouseFk')"
|
||||
v-model="params.warehouseFk"
|
||||
:options="warehousesOptions"
|
||||
option-value="id"
|
||||
option-label="name"
|
||||
@update:model-value="searchFn()"
|
||||
dense
|
||||
outlined
|
||||
rounded
|
||||
>
|
||||
</VnSelect>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
</VnFilterPanel>
|
||||
</template>
|
||||
|
||||
<i18n>
|
||||
en:
|
||||
iptInfo: IPT
|
||||
params:
|
||||
originDated: Origin date
|
||||
futureDated: Destination date
|
||||
futureIpt: Destination IPT
|
||||
ipt: Origin IPT
|
||||
warehouseFk: Warehouse
|
||||
litersMax: Max liters
|
||||
linesMax: Max lines
|
||||
state: Origin grouped state
|
||||
futureState: Destination grouped state
|
||||
problems: With problems
|
||||
es:
|
||||
Horizontal: Horizontal
|
||||
Vertical: Vertical
|
||||
iptInfo: Encajado
|
||||
params:
|
||||
originDated: Fecha origen
|
||||
futureDated: Fecha destino
|
||||
futureIpt: IPT destino
|
||||
ipt: IPT Origen
|
||||
warehouseFk: Almacén
|
||||
litersMax: Litros máx.
|
||||
linesMax: Líneas máx.
|
||||
state: Estado agrupado origen
|
||||
futureState: Estado agrupado destino
|
||||
problems: Con problemas
|
||||
</i18n>
|
|
@ -93,6 +93,11 @@ futureTickets:
|
|||
moveTicketSuccess: Tickets moved successfully!
|
||||
searchInfo: Search future tickets by date
|
||||
futureTicket: Future tickets
|
||||
FREE: Free
|
||||
ON_PREVIOUS: ON_PREVIOUS
|
||||
ON_PREPARATION: On preparation
|
||||
PACKED: Packed
|
||||
DELIVERED: Delivered
|
||||
expedition:
|
||||
id: Expedition
|
||||
item: Item
|
||||
|
|
|
@ -140,6 +140,11 @@ futureTickets:
|
|||
moveTicketSuccess: Tickets movidos correctamente
|
||||
searchInfo: Buscar tickets por fecha
|
||||
futureTicket: Tickets a futuro
|
||||
FREE: Libre
|
||||
ON_PREVIOUS: ON_PREVIOUS
|
||||
ON_PREPARATION: En preparación
|
||||
PACKED: Encajado
|
||||
DELIVERED: Servido
|
||||
ticketSale:
|
||||
id: Id
|
||||
visible: Visible
|
||||
|
|
Loading…
Reference in New Issue