7525-devToTest #419
|
@ -81,3 +81,10 @@ itemTags:
|
||||||
searchbar:
|
searchbar:
|
||||||
label: Search item
|
label: Search item
|
||||||
info: Search by item id
|
info: Search by item id
|
||||||
|
itemType:
|
||||||
|
shared:
|
||||||
|
code: Code
|
||||||
|
name: Name
|
||||||
|
worker: Worker
|
||||||
|
category: Category
|
||||||
|
temperature: Temperature
|
||||||
|
|
|
@ -81,3 +81,10 @@ itemTags:
|
||||||
searchbar:
|
searchbar:
|
||||||
label: Buscar artículo
|
label: Buscar artículo
|
||||||
info: Buscar por id de artículo
|
info: Buscar por id de artículo
|
||||||
|
itemType:
|
||||||
|
shared:
|
||||||
|
code: Código
|
||||||
|
name: Nombre
|
||||||
|
worker: Trabajador
|
||||||
|
category: Reino
|
||||||
|
temperature: Temperatura
|
||||||
|
|
|
@ -35,7 +35,7 @@ const searchBarDataKeys = {
|
||||||
base-url="Zones"
|
base-url="Zones"
|
||||||
:descriptor="ZoneDescriptor"
|
:descriptor="ZoneDescriptor"
|
||||||
searchbar-data-key="ZoneList"
|
searchbar-data-key="ZoneList"
|
||||||
searchbar-url="Zones/filter"
|
searchbar-url="Zones"
|
||||||
searchbar-label="Search zones"
|
searchbar-label="Search zones"
|
||||||
searchbar-info="You can search by zone reference"
|
searchbar-info="You can search by zone reference"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -6,8 +6,6 @@ import { toCurrency } from 'src/filters';
|
||||||
|
|
||||||
import VnPaginate from 'src/components/ui/VnPaginate.vue';
|
import VnPaginate from 'src/components/ui/VnPaginate.vue';
|
||||||
import ZoneSummary from 'src/pages/Zone/Card/ZoneSummary.vue';
|
import ZoneSummary from 'src/pages/Zone/Card/ZoneSummary.vue';
|
||||||
import VnSearchbar from 'src/components/ui/VnSearchbar.vue';
|
|
||||||
import ZoneFilterPanel from './ZoneFilterPanel.vue';
|
|
||||||
|
|
||||||
import { useSummaryDialog } from 'src/composables/useSummaryDialog';
|
import { useSummaryDialog } from 'src/composables/useSummaryDialog';
|
||||||
import { toTimeFormat } from 'src/filters/date';
|
import { toTimeFormat } from 'src/filters/date';
|
||||||
|
@ -71,35 +69,6 @@ const columns = computed(() => [
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const exprBuilder = (param, value) => {
|
|
||||||
switch (param) {
|
|
||||||
case 'name':
|
|
||||||
return {
|
|
||||||
name: { like: `%${value}%` },
|
|
||||||
};
|
|
||||||
case 'code':
|
|
||||||
return {
|
|
||||||
code: { like: `%${value}%` },
|
|
||||||
};
|
|
||||||
case 'agencyModeFk':
|
|
||||||
return {
|
|
||||||
agencyModeFk: value,
|
|
||||||
};
|
|
||||||
case 'search':
|
|
||||||
if (value) {
|
|
||||||
if (!isNaN(value)) {
|
|
||||||
return { id: value };
|
|
||||||
} else {
|
|
||||||
return {
|
|
||||||
name: {
|
|
||||||
like: `%${value}%`,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
async function clone(id) {
|
async function clone(id) {
|
||||||
const { data } = await axios.post(`Zones/${id}/clone`);
|
const { data } = await axios.post(`Zones/${id}/clone`);
|
||||||
notify(t('globals.dataSaved'), 'positive');
|
notify(t('globals.dataSaved'), 'positive');
|
||||||
|
@ -116,25 +85,6 @@ onMounted(() => (stateStore.rightDrawer = true));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<template v-if="stateStore.isHeaderMounted()">
|
|
||||||
<Teleport to="#searchbar">
|
|
||||||
<VnSearchbar
|
|
||||||
data-key="ZoneList"
|
|
||||||
url="Zones"
|
|
||||||
:filter="{
|
|
||||||
include: { relation: 'agencyMode', scope: { fields: ['name'] } },
|
|
||||||
}"
|
|
||||||
:expr-builder="exprBuilder"
|
|
||||||
:label="t('list.searchZone')"
|
|
||||||
:info="t('list.searchInfo')"
|
|
||||||
/>
|
|
||||||
</Teleport>
|
|
||||||
</template>
|
|
||||||
<QDrawer v-model="stateStore.rightDrawer" side="right" :width="256" show-if-above>
|
|
||||||
<QScrollArea class="fit text-grey-8">
|
|
||||||
<ZoneFilterPanel data-key="ZoneList" :expr-builder="exprBuilder" />
|
|
||||||
</QScrollArea>
|
|
||||||
</QDrawer>
|
|
||||||
<QPage class="column items-center q-pa-md">
|
<QPage class="column items-center q-pa-md">
|
||||||
<div class="vn-card-list">
|
<div class="vn-card-list">
|
||||||
<VnPaginate
|
<VnPaginate
|
||||||
|
|
|
@ -1,11 +1,72 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
import { useRoute } from 'vue-router';
|
||||||
import { useStateStore } from 'stores/useStateStore';
|
import { useStateStore } from 'stores/useStateStore';
|
||||||
import LeftMenu from 'src/components/LeftMenu.vue';
|
import LeftMenu from 'src/components/LeftMenu.vue';
|
||||||
|
import VnSearchbar from 'src/components/ui/VnSearchbar.vue';
|
||||||
|
import ZoneFilterPanel from './ZoneFilterPanel.vue';
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
const stateStore = useStateStore();
|
const stateStore = useStateStore();
|
||||||
|
const route = useRoute();
|
||||||
|
|
||||||
|
const exprBuilder = (param, value) => {
|
||||||
|
switch (param) {
|
||||||
|
case 'name':
|
||||||
|
return {
|
||||||
|
name: { like: `%${value}%` },
|
||||||
|
};
|
||||||
|
case 'code':
|
||||||
|
return {
|
||||||
|
code: { like: `%${value}%` },
|
||||||
|
};
|
||||||
|
case 'agencyModeFk':
|
||||||
|
return {
|
||||||
|
agencyModeFk: value,
|
||||||
|
};
|
||||||
|
case 'search':
|
||||||
|
if (value) {
|
||||||
|
if (!isNaN(value)) {
|
||||||
|
return { id: value };
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
name: {
|
||||||
|
like: `%${value}%`,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
<template v-if="stateStore.isHeaderMounted()">
|
||||||
|
<Teleport to="#searchbar">
|
||||||
|
<VnSearchbar
|
||||||
|
data-key="ZoneList"
|
||||||
|
url="Zones"
|
||||||
|
:filter="{
|
||||||
|
include: { relation: 'agencyMode', scope: { fields: ['name'] } },
|
||||||
|
}"
|
||||||
|
:expr-builder="exprBuilder"
|
||||||
|
:label="t('list.searchZone')"
|
||||||
|
:info="t('list.searchInfo')"
|
||||||
|
custom-route-redirect-name="ZoneSummary"
|
||||||
|
/>
|
||||||
|
</Teleport>
|
||||||
|
</template>
|
||||||
|
<QDrawer
|
||||||
|
v-if="route.name === 'ZoneList'"
|
||||||
|
v-model="stateStore.rightDrawer"
|
||||||
|
side="right"
|
||||||
|
:width="256"
|
||||||
|
show-if-above
|
||||||
|
>
|
||||||
|
<QScrollArea class="fit text-grey-8">
|
||||||
|
<ZoneFilterPanel data-key="ZoneList" :expr-builder="exprBuilder" />
|
||||||
|
</QScrollArea>
|
||||||
|
</QDrawer>
|
||||||
<QDrawer v-model="stateStore.leftDrawer" show-if-above :width="256">
|
<QDrawer v-model="stateStore.leftDrawer" show-if-above :width="256">
|
||||||
<QScrollArea class="fit text-grey-8">
|
<QScrollArea class="fit text-grey-8">
|
||||||
<LeftMenu />
|
<LeftMenu />
|
||||||
|
|
|
@ -1,53 +1,85 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, computed } from 'vue';
|
import { ref, computed, onMounted } from 'vue';
|
||||||
import ZoneFilterPanel from 'components/InvoiceOutNegativeFilter.vue';
|
|
||||||
import VnSubToolbar from 'components/ui/VnSubToolbar.vue';
|
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
|
import VnSubToolbar from 'components/ui/VnSubToolbar.vue';
|
||||||
|
import FetchData from 'components/FetchData.vue';
|
||||||
|
|
||||||
|
import { toDateFormat } from 'src/filters/date.js';
|
||||||
|
import { useWeekdayStore } from 'src/stores/useWeekdayStore';
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const arrayData = ref(null);
|
const weekdayStore = useWeekdayStore();
|
||||||
const rows = computed(() => arrayData.value.store.data);
|
|
||||||
|
const details = ref([]);
|
||||||
|
|
||||||
const columns = computed(() => [
|
const columns = computed(() => [
|
||||||
{
|
{
|
||||||
label: t('Province'),
|
label: t('upcomingDeliveries.province'),
|
||||||
//field: '',
|
name: 'province',
|
||||||
//name: '',
|
field: 'name',
|
||||||
align: 'left',
|
align: 'left',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('Closing'),
|
label: t('upcomingDeliveries.closing'),
|
||||||
//field: '',
|
name: 'closing',
|
||||||
//name: '',
|
field: 'hour',
|
||||||
align: 'left',
|
align: 'left',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('Id'),
|
label: t('upcomingDeliveries.id'),
|
||||||
//field: '',
|
name: 'id',
|
||||||
//name: '',
|
field: 'zoneFk',
|
||||||
align: 'left',
|
align: 'left',
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
function getWeekDay(jsonDate) {
|
const getWeekDayName = (date) => {
|
||||||
const weekDay = new Date(jsonDate).getDay();
|
const weekDay = new Date(date).getDay();
|
||||||
|
return t(`weekdays.${weekdayStore.weekdays[weekDay].code}`);
|
||||||
|
};
|
||||||
|
|
||||||
return this.days[weekDay].locale;
|
const getHeaderTitle = (date) => {
|
||||||
}
|
return `${getWeekDayName(date)} - ${toDateFormat(date)}`;
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => weekdayStore.initStore());
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<QDrawer v-model="stateStore.rightDrawer" side="right" :width="256" show-if-above>
|
<FetchData
|
||||||
<QScrollArea class="fit text-grey-8">
|
url="Zones/getUpcomingDeliveries"
|
||||||
<ZoneFilterPanel data-key="ZoneUpcoming" />
|
@on-fetch="(data) => (details = data)"
|
||||||
</QScrollArea>
|
auto-load
|
||||||
</QDrawer>
|
/>
|
||||||
<VnSubToolbar />
|
<VnSubToolbar />
|
||||||
<QPage class="column items-center q-pa-md">
|
<QPage class="column items-center q-pa-md">
|
||||||
<span>
|
<QCard class="full-width q-pa-md">
|
||||||
{{ t(`${getWeekDay(/*detail.shipped*/)}`) }} -
|
<div
|
||||||
{{ t /*'detail.shipped'*/() }}
|
v-for="(detail, index) in details"
|
||||||
|
:key="index"
|
||||||
|
class="full-width flex q-mb-lg"
|
||||||
|
>
|
||||||
|
<span class="header">
|
||||||
|
{{ getHeaderTitle(detail.shipped) }}
|
||||||
</span>
|
</span>
|
||||||
<QTable :columns="columns" :rows="rows" class="full-width q-mt-md"> </QTable>
|
<QTable flat :columns="columns" :rows="detail.lines" class="full-width" />
|
||||||
|
</div>
|
||||||
|
</QCard>
|
||||||
</QPage>
|
</QPage>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.header {
|
||||||
|
min-width: 100% !important;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding-left: 8px;
|
||||||
|
height: 35px;
|
||||||
|
border-bottom: 1px solid $primary;
|
||||||
|
background-color: var(--vn-page-color);
|
||||||
|
font-size: 19px;
|
||||||
|
font-weight: bold;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
|
@ -5,7 +5,7 @@ zone:
|
||||||
zoneCreate: Create zone
|
zoneCreate: Create zone
|
||||||
locations: Locations
|
locations: Locations
|
||||||
deliveryDays: Delivery days
|
deliveryDays: Delivery days
|
||||||
upcomingList: Upcoming deliveries
|
upcomingDeliveries: Upcoming deliveries
|
||||||
warehouses: Warehouses
|
warehouses: Warehouses
|
||||||
list:
|
list:
|
||||||
clone: Clone
|
clone: Clone
|
||||||
|
@ -64,3 +64,7 @@ warehouses:
|
||||||
deleteSubtitle: Are you sure you want to continue?
|
deleteSubtitle: Are you sure you want to continue?
|
||||||
warehouse: Warehouse
|
warehouse: Warehouse
|
||||||
add: Add
|
add: Add
|
||||||
|
upcomingDeliveries:
|
||||||
|
province: Province
|
||||||
|
closing: Closing
|
||||||
|
id: Id
|
||||||
|
|
|
@ -5,7 +5,7 @@ zone:
|
||||||
zoneCreate: Nueva zona
|
zoneCreate: Nueva zona
|
||||||
locations: Localizaciones
|
locations: Localizaciones
|
||||||
deliveryDays: Días de entrega
|
deliveryDays: Días de entrega
|
||||||
upcomingList: Próximos repartos
|
upcomingDeliveries: Próximos repartos
|
||||||
warehouses: Almacenes
|
warehouses: Almacenes
|
||||||
list:
|
list:
|
||||||
clone: Clonar
|
clone: Clonar
|
||||||
|
@ -66,3 +66,7 @@ warehouses:
|
||||||
deleteSubtitle: ¿Seguro que quieres continuar?
|
deleteSubtitle: ¿Seguro que quieres continuar?
|
||||||
warehouse: Almacén
|
warehouse: Almacén
|
||||||
add: Añadir
|
add: Añadir
|
||||||
|
upcomingDeliveries:
|
||||||
|
province: Provincia
|
||||||
|
closing: Cierre
|
||||||
|
id: Id
|
||||||
|
|
|
@ -11,7 +11,7 @@ export default {
|
||||||
component: RouterView,
|
component: RouterView,
|
||||||
redirect: { name: 'ZoneMain' },
|
redirect: { name: 'ZoneMain' },
|
||||||
menus: {
|
menus: {
|
||||||
main: ['ZoneList', 'ZoneDeliveryDays', 'ZoneUpcomingList'],
|
main: ['ZoneList', 'ZoneDeliveryDays', 'ZoneUpcomingDeliveries'],
|
||||||
card: ['ZoneBasicData', 'ZoneWarehouses', 'ZoneHistory', 'ZoneLocations'],
|
card: ['ZoneBasicData', 'ZoneWarehouses', 'ZoneHistory', 'ZoneLocations'],
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
|
@ -57,6 +57,24 @@ export default {
|
||||||
},
|
},
|
||||||
component: () => import('src/pages/Zone/ZoneCreate.vue'),
|
component: () => import('src/pages/Zone/ZoneCreate.vue'),
|
||||||
},
|
},
|
||||||
|
// {
|
||||||
|
// path: 'counter',
|
||||||
|
// name: 'ZoneCounter',
|
||||||
|
// meta: {
|
||||||
|
// title: 'zoneCounter',
|
||||||
|
// icon: 'add_circle',
|
||||||
|
// },
|
||||||
|
// component: () => import('src/pages/Zone/ZoneCounter.vue'),
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
name: 'ZoneUpcomingDeliveries',
|
||||||
|
path: 'upcoming-deliveries',
|
||||||
|
meta: {
|
||||||
|
title: 'upcomingDeliveries',
|
||||||
|
icon: 'vn:calendar',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Zone/ZoneUpcoming.vue'),
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue