feat: obi visualization

feat/issue-3/obi
Frédérik Benoist 2024-01-21 16:32:53 +01:00
parent 4ba95b3e88
commit d0841d9e6a
14 changed files with 361 additions and 147 deletions

View File

@ -12,10 +12,10 @@ const orderData = ref<Order>()
const orderTab = ref(null) const orderTab = ref(null)
const tabs = [ const tabs = [
{ title: 'General' }, { title: t('General') },
{ title: 'Preparation' }, { title: t('Preparation') },
{ title: 'Receipt' }, { title: t('Receipt') },
{ title: 'Flow' }, { title: t('Flow') },
] ]
const { data, error, execute: fetchOrder } = await useApi<Order>(`/obi/order/${route.params.id}`) const { data, error, execute: fetchOrder } = await useApi<Order>(`/obi/order/${route.params.id}`)
@ -80,7 +80,7 @@ handleData()
color="primary" color="primary"
@click="refreshData" @click="refreshData"
> >
Reload {{ t("Reload") }}
</VBtn> </VBtn>
</div> </div>
</div> </div>

View File

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { format } from 'date-fns' import { endOfMonth, format, startOfDay, startOfMonth, subDays, subMonths } from 'date-fns'
import { VDataTableServer } from 'vuetify/labs/VDataTable' import { VDataTableServer } from 'vuetify/labs/VDataTable'
import { paginationMeta } from '@api-utils/paginationMeta' import { paginationMeta } from '@api-utils/paginationMeta'
@ -8,10 +8,10 @@ const { t } = useI18n()
// Data table Headers // Data table Headers
const headers = [ const headers = [
{ title: 'Id', key: 'meta.id' }, { title: 'Id', key: 'meta.id' },
{ title: 'Order', key: 'common.orderId' }, { title: t('Order'), key: 'common.orderId' },
{ title: 'Date', key: 'common.transaction.transactionDate' }, { title: t('Date'), key: 'common.transaction.transactionDate' },
{ title: 'Status', key: 'common.statusData.code' }, { title: t('Status'), key: 'common.statusData.code' },
{ title: 'Type', key: 'common.transaction.transactionTypeDescription' }, { title: t('Type'), key: 'common.transaction.transactionTypeDescription' },
] ]
const selectedStatus = ref() const selectedStatus = ref()
@ -48,6 +48,9 @@ const page = ref(1)
const sortBy = ref('request_id') const sortBy = ref('request_id')
const orderBy = ref('desc') const orderBy = ref('desc')
const beginDate = ref<Date | null>(null)
const endDate = ref<Date | null>(null)
const sortByMapping = (sortby: string) => { const sortByMapping = (sortby: string) => {
const headerMapping: { [key: string]: string } = { const headerMapping: { [key: string]: string } = {
'meta.id': 'request_id', 'meta.id': 'request_id',
@ -80,6 +83,8 @@ const { data: ordersData } = await useApi<any>(createUrl('/obi/order',
orderBy, orderBy,
status: selectedStatus, status: selectedStatus,
type: selectedType, type: selectedType,
minDate: beginDate,
maxDate: endDate,
}, },
}, },
)) ))
@ -88,16 +93,44 @@ const widgetData = computed(() => ordersData.value.statistics)
const orders = computed(() => ordersData.value.orders) const orders = computed(() => ordersData.value.orders)
const totalOrder = computed(() => ordersData.value.total) const totalOrder = computed(() => ordersData.value.total)
const minDate = ref(new Date(2023, 1, 7)) watch(beginDate, newBeginDate => {
const maxDate = ref(new Date()) if (endDate.value && newBeginDate !== null && newBeginDate > endDate.value)
const dateRange = ref([minDate.value.getTime(), maxDate.value.getTime()]) endDate.value = newBeginDate
})
const updateDates = () => { watch(endDate, newEndDate => {
dateRange.value = dateRange.value.map(date => new Date(date).getTime()) if (beginDate.value && newEndDate !== null && newEndDate < beginDate.value)
beginDate.value = newEndDate
})
const selectLastMonth = () => {
beginDate.value = startOfMonth(subMonths(new Date(), 1))
endDate.value = endOfMonth(subMonths(new Date(), 1))
} }
const formattedStartDate = computed(() => format(new Date(dateRange.value[0]), 'dd/MM/yyyy')) const selectThisMonth = () => {
const formattedEndDate = computed(() => format(new Date(dateRange.value[1]), 'dd/MM/yyyy')) const today = new Date()
const firstDayOfMonth = startOfMonth(today)
const lastDayOfMonth = endOfMonth(today)
beginDate.value = firstDayOfMonth
endDate.value = today < lastDayOfMonth ? today : lastDayOfMonth
}
const selectLast7Days = () => {
beginDate.value = startOfDay(subDays(new Date(), 6))
endDate.value = startOfDay(new Date())
}
const selectToday = () => {
beginDate.value = startOfDay(new Date())
endDate.value = startOfDay(new Date())
}
const clearDates = () => {
beginDate.value = null
endDate.value = null
}
</script> </script>
<template> <template>
@ -120,7 +153,7 @@ const formattedEndDate = computed(() => format(new Date(dateRange.value[1]), 'dd
<VCol <VCol
cols="12" cols="12"
sm="6" sm="6"
md="3" md="2"
class="px-6" class="px-6"
> >
<div <div
@ -205,41 +238,65 @@ const formattedEndDate = computed(() => format(new Date(dateRange.value[1]), 'dd
/> />
</VCol> </VCol>
</VRow> </VRow>
<VRow> <VRow>
<!-- 👉 dates range --> <VCol
<VRangeSlider cols="12"
v-model="dateRange" sm="4"
:min="minDate.getTime()"
:max="maxDate.getTime()"
class="mb-4"
:thumb-label="false"
@change="updateDates"
> >
<template #prepend> <!-- 👉 Begin Date -->
<VTextField <AppDateTimePicker
v-model="formattedStartDate" v-model="beginDate"
hide-details :placeholder="$t('Date begin')"
single-line :config="{ altFormat: 'J M Y', altInput: true, dateFormat: 'Ymd' }"
type="String" />
variant="outlined" </VCol>
density="compact" <VCol
readonly cols="12"
style="inline-size: 120px" sm="4"
/> >
</template> <!-- 👉 End Date -->
<template #append> <AppDateTimePicker
<VTextField v-model="endDate"
v-model="formattedEndDate" :placeholder="$t('Date end')"
hide-details :config="{ altFormat: 'J M Y', altInput: true, dateFormat: 'Ymd' }"
single-line />
type="String" </VCol>
variant="outlined" <VCol
density="compact" cols="12"
readonly sm="4"
style="inline-size: 120px" >
/> <VBtn
</template> variant="text"
</VRangeSlider> @click="selectLastMonth"
>
{{ $t('Last month') }}
</VBtn>
<VBtn
variant="text"
@click="selectThisMonth"
>
{{ $t('This month') }}
</VBtn>
<VBtn
variant="text"
@click="selectLast7Days"
>
{{ $t('Last 7 days') }}
</VBtn>
<VBtn
variant="text"
@click="selectToday"
>
{{ $t('Today') }}
</VBtn>
<VBtn
variant="text"
@click="clearDates"
>
{{ $t('All') }}
</VBtn>
</VCol>
</VRow> </VRow>
</VCardText> </VCardText>
</VCard> </VCard>
@ -251,7 +308,7 @@ const formattedEndDate = computed(() => format(new Date(dateRange.value[1]), 'dd
<VTextField <VTextField
v-model="searchQuery" v-model="searchQuery"
density="compact" density="compact"
placeholder="Search" :placeholder="$t('Search')"
style=" max-inline-size: 200px; min-inline-size: 200px;" style=" max-inline-size: 200px; min-inline-size: 200px;"
/> />
@ -331,7 +388,7 @@ const formattedEndDate = computed(() => format(new Date(dateRange.value[1]), 'dd
v-bind="slotProps" v-bind="slotProps"
:icon="false" :icon="false"
> >
Previous {{ $t('$vuetify.pagination.ariaLabel.previous') }}
</VBtn> </VBtn>
</template> </template>
@ -342,7 +399,7 @@ const formattedEndDate = computed(() => format(new Date(dateRange.value[1]), 'dd
v-bind="slotProps" v-bind="slotProps"
:icon="false" :icon="false"
> >
Next {{ $t('$vuetify.pagination.ariaLabel.next') }}
</VBtn> </VBtn>
</template> </template>
</VPagination> </VPagination>
@ -352,14 +409,3 @@ const formattedEndDate = computed(() => format(new Date(dateRange.value[1]), 'dd
</VCard> </VCard>
</div> </div>
</template> </template>
<style lang="scss" scoped>
.customer-title:hover{
color: rgba(var(--v-theme-primary)) !important;
}
.product-widget{
border-block-end: 1px solid rgba(var(--v-theme-on-surface), var(--v-border-opacity));
padding-block-end: 1rem;
}
</style>

View File

@ -1,6 +1,7 @@
export const paginationMeta = <T extends { page: number; itemsPerPage: number }>(options: T, total: number) => { export const paginationMeta = <T extends { page: number; itemsPerPage: number }>(options: T, total: number) => {
const start = (options.page - 1) * options.itemsPerPage + 1 const start = (options.page - 1) * options.itemsPerPage + 1
const end = Math.min(options.page * options.itemsPerPage, total) const end = Math.min(options.page * options.itemsPerPage, total)
const { t } = useI18n()
return `Showing ${total === 0 ? 0 : start} to ${end} of ${total} entries` return `${t('Showing')} ${total === 0 ? 0 : start} ${t('to')} ${end} ${t('of')} ${total} ${t('entries')}`
} }

View File

@ -70,8 +70,57 @@
"Dates range error": "With a date range, a text of at least 5 characters must be specified", "Dates range error": "With a date range, a text of at least 5 characters must be specified",
"Close": "Close", "Close": "Close",
"Connect to invidual POS": "Connect to invidual POS", "Connect to invidual POS": "Connect to invidual POS",
"Orders list": "Orders list",
"Sign": "Sign", "Sign": "Sign",
"Order list": "قائمة الطلبات",
"Status": "الحالة",
"Type": "النوع",
"Last month": "الشهر الماضي",
"This month": "هذا الشهر",
"Last 7 days": "آخر 7 أيام",
"Today": "اليوم",
"All": "الكل",
"Date begin": "Date begin",
"Date end": "Date end",
"Order": "الطلب",
"showing": "Showing",
"to": "to",
"of": "of",
"entries": "entries",
"Consumed": "Consumed",
"Created": "Created",
"Qty": "Qty",
"General": "General",
"Preparation": "Preparation",
"Receipt": "Receipt",
"Order lines": "Order lines",
"Transaction date history": "Transaction date history",
"Creation date history": "Creation date history",
"Status order history": "Status order history",
"Order was": "Order was",
"Your order has been": "Your order has been",
"Order line was": "Order line was",
"successfully": "successfully",
"OMS": "OMS",
"OMS Partner": "OMS Partner",
"Transaction details": "Transaction details",
"Last status": "Last status",
"Added": "Added",
"Modified": "Modified",
"Transaction": "Transaction",
"Open order": "Open order",
"Origin request": "Origin request",
"Cust Id": "Cust Id",
"Ship for Pickup": "Ship for Pickup",
"Order transaction": "Order transaction",
"Order Details": "Order Details",
"Package": "Package",
"Tracking": "Tracking",
"Cd": "Cd",
"Weight": "Weight",
"N°Exp": "N°Exp",
"Carrier": "Carrier",
"URL": "URL",
"Restocking": "Restocking",
"---------------------------": "---------------------------", "---------------------------": "---------------------------",
"UI Elements": "عناصر واجهة المستخدم", "UI Elements": "عناصر واجهة المستخدم",
"Forms & Tables": "النماذج والجداول", "Forms & Tables": "النماذج والجداول",
@ -212,7 +261,6 @@
"Ecommerce": "التجارة الإلكترونية", "Ecommerce": "التجارة الإلكترونية",
"Product": "المنتج", "Product": "المنتج",
"Category": "الفئة", "Category": "الفئة",
"Order": "طلب",
"Details": "تفاصيل", "Details": "تفاصيل",
"Customer": "الزبون", "Customer": "الزبون",
"Manage Review": "إدارة المراجعة", "Manage Review": "إدارة المراجعة",

View File

@ -72,6 +72,55 @@
"Connect to invidual POS": "Connect to invidual POS", "Connect to invidual POS": "Connect to invidual POS",
"Orders list": "Orders list", "Orders list": "Orders list",
"Sign": "Sign", "Sign": "Sign",
"Status": "Status",
"Type": "Type",
"Last month": "Last month",
"This month": "This month",
"Last 7 days": "Last 7 days",
"Today": "Today",
"All": "All",
"Date begin": "Date begin",
"Date end": "Date end",
"Order": "Order",
"Showing": "Showing",
"to": "to",
"of": "of",
"entries": "entries",
"Consumed": "Consumed",
"Created": "Created",
"Qty": "Qty",
"Preparation": "Preparation",
"Receipt": "Réception",
"Order lines": "Order lines",
"Status history": "Status history",
"Transaction date history": "Transaction date history",
"Creation date history": "Creation date history",
"Status order history": "Status order history",
"Order was": "Order was",
"Order has been": "Order has been",
"Order line was": "Order line was",
"successfully": "successfully",
"OMS": "OMS",
"OMS Partner": "OMS Partner",
"Transaction details": "Transaction details",
"Last status": "Last status",
"Added": "Added",
"Modified": "Modified",
"Transaction": "Transaction",
"Open order": "Open order",
"Origin request": "Origin request",
"Cust Id": "Cust Id",
"Ship for Pickup": "Ship for Pickup",
"Order transaction": "Order transaction",
"Order Details": "Order Details",
"Package": "Package",
"Tracking": "Tracking",
"Cd": "Cd",
"Weight": "Weight",
"N°Exp": "N°Exp",
"Carrier": "Carrier",
"URL": "URL",
"Restocking": "Restocking",
"---------------------------": "---------------------------", "---------------------------": "---------------------------",
"UI Elements": "UI Elements", "UI Elements": "UI Elements",
"Forms & Tables": "Forms & Tables", "Forms & Tables": "Forms & Tables",
@ -218,7 +267,6 @@
"Swiper": "Swiper", "Swiper": "Swiper",
"Product": "Product", "Product": "Product",
"Category": "Category", "Category": "Category",
"Order": "Order",
"Details": "Details", "Details": "Details",
"Customer": "Customer", "Customer": "Customer",
"Manage Review": "Manage Review", "Manage Review": "Manage Review",

View File

@ -72,6 +72,56 @@
"Connect to invidual POS": "Connexion à une caisse individuelle", "Connect to invidual POS": "Connexion à une caisse individuelle",
"Orders list": "Liste des commandes", "Orders list": "Liste des commandes",
"Sign": "Enseigne", "Sign": "Enseigne",
"Order list": "Liste des commandes",
"Status": "Statut",
"Type": "Type",
"Last month": "Mois dernier",
"This month": "Ce mois",
"Last 7 days": "7 derniers jours",
"Today": "Aujourd'hui",
"All": "Tous",
"Date begin": "Date début",
"Date end": "Date fin",
"Order": "Commande",
"Showing": "Affichage",
"to": "à",
"of": "parmi",
"entries": "entrées",
"Consumed": "Consumed",
"Created": "Créé",
"Qty": "Qté",
"Preparation": "Preparation",
"Receipt": "Réception",
"Order lines": "Lignes de commande",
"Status history": "Histo. statuts",
"Transaction date history": "Histo. dates transaction",
"Creation date history": "Histo. dates création",
"Status order history": "Historique statuts commande",
"Order was": "Commande a été",
"Order has been": "Commande a été",
"Order line was": "Ligne a été",
"successfully": "avec succès",
"OMS": "OMS",
"OMS Partner": "Partenaire OMS",
"Transaction details": "Détails transaction",
"Last status": "Dernier statut",
"Added": "Ajouté",
"Modified": "Modifié",
"Transaction": "Transaction",
"Open order": "Commande",
"Origin request": "Origine",
"Cust Id": "Id client",
"Ship for Pickup": "Ship for Pickup",
"Order transaction": "Transaction commande",
"Order Details": "Details commande",
"Package": "Colis",
"Tracking": "Tracking",
"Cd": "Cd",
"Weight": "Poids",
"N°Exp": "N°Exp",
"Carrier": "Transport",
"URL": "URL",
"Restocking": "Restocking",
"---------------------------": "---------------------------", "---------------------------": "---------------------------",
"UI Elements": "ÉLÉMENTS DE L'UI", "UI Elements": "ÉLÉMENTS DE L'UI",
"Forms & Tables": "Formulaires et tableaux", "Forms & Tables": "Formulaires et tableaux",
@ -214,7 +264,6 @@
"Ecommerce": "Commerce électronique", "Ecommerce": "Commerce électronique",
"Product": "Produit", "Product": "Produit",
"Category": "Catégorie", "Category": "Catégorie",
"Order": "Ordre",
"Details": "Détails", "Details": "Détails",
"Customer": "Client", "Customer": "Client",
"Manage Review": "Gérer la revue", "Manage Review": "Gérer la revue",
@ -252,7 +301,7 @@
"dataFooter": { "dataFooter": {
"itemsPerPageText": "Objets par page:", "itemsPerPageText": "Objets par page:",
"itemsPerPageAll": "Tout", "itemsPerPageAll": "Tout",
"pageText": "{0}-{1} of {2}", "pageText": "{0}-{1} de {2}",
"firstPage": "Première page", "firstPage": "Première page",
"prevPage": "Page précédente", "prevPage": "Page précédente",
"nextPage": "Page suivante", "nextPage": "Page suivante",

View File

@ -6,10 +6,13 @@
/** /**
* you need to import the some interfaces * you need to import the some interfaces
*/ */
import ar from '@/plugins/i18n/locales/ar.json';
import en from '@/plugins/i18n/locales/en.json'; import en from '@/plugins/i18n/locales/en.json';
import fr from '@/plugins/i18n/locales/fr.json';
import 'vue-i18n'; import 'vue-i18n';
type LocaleMessage = typeof en type LocaleMessage = typeof en & typeof fr & typeof ar;
declare module 'vue-i18n' { declare module 'vue-i18n' {
export interface DefineLocaleMessage extends LocaleMessage { export interface DefineLocaleMessage extends LocaleMessage {

View File

@ -1,10 +1,13 @@
import { deepMerge } from '@antfu/utils' import { deepMerge } from '@antfu/utils'
import type { App } from 'vue' import type { App } from 'vue'
import { useI18n } from 'vue-i18n'
import { createVuetify } from 'vuetify' import { createVuetify } from 'vuetify'
import { VBtn } from 'vuetify/components/VBtn' import { VBtn } from 'vuetify/components/VBtn'
import { createVueI18nAdapter } from 'vuetify/locale/adapters/vue-i18n'
import defaults from './defaults' import defaults from './defaults'
import { icons } from './icons' import { icons } from './icons'
import { staticPrimaryColor, themes } from './theme' import { staticPrimaryColor, themes } from './theme'
import { getI18n } from '@/plugins/i18n/index'
// Styles // Styles
import { cookieRef } from '@/@layouts/stores/config' import { cookieRef } from '@/@layouts/stores/config'
@ -37,7 +40,9 @@ export default function (app: App) {
defaults, defaults,
icons, icons,
theme: optionTheme, theme: optionTheme,
locale: {
adapter: createVueI18nAdapter({ i18n: getI18n(), useI18n }),
},
}) })
app.use(vuetify) app.use(vuetify)

View File

@ -1,7 +1,7 @@
export const resolveOrderStatus = (status: string) => { export const resolveOrderStatus = (status: string) => {
if (status === 'received') if (status === 'received' || status === 'fulfilled')
return { text: status, color: 'success' } return { text: status, color: 'success' }
else if (status === 'fulfilled' || status === 'polled') else if (status === 'polled')
return { text: status, color: 'info' } return { text: status, color: 'info' }
else if (status === 'intransit polled') else if (status === 'intransit polled')
return { text: status, color: 'warning' } return { text: status, color: 'warning' }

View File

@ -7,6 +7,8 @@ import 'vue-json-pretty/lib/styles.css'
const props = defineProps<Props>() const props = defineProps<Props>()
const { t } = useI18n()
interface Props { interface Props {
orderData: Order orderData: Order
} }
@ -56,10 +58,10 @@ const openOmsOrderPage = (): void => {
<VCol cols="6"> <VCol cols="6">
<VCardText class="pa-4"> <VCardText class="pa-4">
<h6 class="text-lg text-no-wrap font-weight-medium"> <h6 class="text-lg text-no-wrap font-weight-medium">
Proximis {{ $t('OMS') }}
</h6> </h6>
<p class="mb-2"> <p class="mb-2">
OMS Partner {{ $t('OMS Partner') }}
</p> </p>
</VCardText> </VCardText>
</VCol> </VCol>
@ -81,7 +83,7 @@ const openOmsOrderPage = (): void => {
<div v-if="omsData"> <div v-if="omsData">
<VList class="card-list mt-0"> <VList class="card-list mt-0">
<div class="text-disabled text-uppercase text-sm"> <div class="text-disabled text-uppercase text-sm">
Transaction details {{ $t('Transaction details') }}
</div> </div>
<VListItem> <VListItem>
<div class="text-body-1 mt-2"> <div class="text-body-1 mt-2">
@ -95,7 +97,7 @@ const openOmsOrderPage = (): void => {
<VList class="card-list mt-2"> <VList class="card-list mt-2">
<VListItem> <VListItem>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">Last status:</span> <span class="font-weight-bold me-2">{{ $t('Last status') }}:</span>
<span> <span>
{{ omsData.oms.item.status }} {{ omsData.oms.item.status }}
</span> </span>
@ -105,7 +107,7 @@ const openOmsOrderPage = (): void => {
<VList class="card-list mt-2"> <VList class="card-list mt-2">
<VListItem> <VListItem>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">Added:</span> <span class="font-weight-bold me-2">{{ $t('Added') }}:</span>
<span> <span>
{{ format(omsData.oms.item.modificationDate, "EEEE d MMMM yyyy HH:mm:ss") }} {{ format(omsData.oms.item.modificationDate, "EEEE d MMMM yyyy HH:mm:ss") }}
</span> </span>
@ -125,7 +127,7 @@ const openOmsOrderPage = (): void => {
<VList class="card-list mt-2"> <VList class="card-list mt-2">
<VListItem> <VListItem>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">Modified:</span> <span class="font-weight-bold me-2">{{ $t('Modified') }}:</span>
<span> <span>
{{ format(omsData.oms.item.creationDate, "EEEE d MMMM yyyy HH:mm:ss") }} {{ format(omsData.oms.item.creationDate, "EEEE d MMMM yyyy HH:mm:ss") }}
</span> </span>
@ -147,7 +149,7 @@ const openOmsOrderPage = (): void => {
class="mt-0" class="mt-0"
@click="openOrderMessageDialog" @click="openOrderMessageDialog"
> >
Transaction {{ $t('Transaction') }}
</VBtn> </VBtn>
</VCardText> </VCardText>
</VCol> </VCol>
@ -162,7 +164,7 @@ const openOmsOrderPage = (): void => {
class="mt-0" class="mt-0"
@click="openOmsOrderPage" @click="openOmsOrderPage"
> >
Open order {{ $t('Open order') }}
</VBtn> </VBtn>
</VCardText> </VCardText>
</VCol> </VCol>
@ -191,7 +193,7 @@ const openOmsOrderPage = (): void => {
/> />
</VBtn> </VBtn>
<VToolbarTitle>Order transaction</VToolbarTitle> <VToolbarTitle>{{ t("Order transaction") }}</VToolbarTitle>
<VSpacer /> <VSpacer />
@ -200,7 +202,7 @@ const openOmsOrderPage = (): void => {
variant="text" variant="text"
@click="OrderMessageDialogVisible = false" @click="OrderMessageDialogVisible = false"
> >
Close {{ t("Close") }}
</VBtn> </VBtn>
</VToolbarItems> </VToolbarItems>
</VToolbar> </VToolbar>

View File

@ -20,12 +20,12 @@ interface Props {
<!-- 👉 Order Details --> <!-- 👉 Order Details -->
<VCardText> <VCardText>
<div class="text-disabled text-uppercase text-sm"> <div class="text-disabled text-uppercase text-sm">
Order Details {{ $t('Order Details') }}
</div> </div>
<VList class="card-list mt-2"> <VList class="card-list mt-2">
<VListItem> <VListItem>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">Origin request:</span> <span class="font-weight-bold me-2">{{ $t('Origin request') }}:</span>
<span> <span>
{{ props.orderData.common.requestingLocationCd }} / {{ props.orderData.common.requestingSystemCd }} {{ props.orderData.common.requestingLocationCd }} / {{ props.orderData.common.requestingSystemCd }}
</span> </span>
@ -33,7 +33,7 @@ interface Props {
</VListItem> </VListItem>
<VListItem> <VListItem>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">Cust Id:</span> <span class="font-weight-bold me-2">{{ $t('Cust Id') }}:</span>
<span> <span>
{{ props.orderData.common.customerId }} {{ props.orderData.common.customerId }}
</span> </span>
@ -41,7 +41,7 @@ interface Props {
</VListItem> </VListItem>
<VListItem> <VListItem>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">Date creation:</span> <span class="font-weight-bold me-2">{{ $t('Created') }}:</span>
<span> <span>
{{ format(props.orderData.common.fdateCreation, "EEEE d MMMM yyyy HH:mm:ss") }} {{ format(props.orderData.common.fdateCreation, "EEEE d MMMM yyyy HH:mm:ss") }}
</span> </span>
@ -49,7 +49,7 @@ interface Props {
</VListItem> </VListItem>
<VListItem> <VListItem>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">Ship for Pickup:</span> <span class="font-weight-bold me-2">{{ $t('Ship for Pickup') }}:</span>
<span> <span>
{{ props.orderData.common.shipforpickupLocationCd }} / {{ props.orderData.common.shipforpickupSystemCd }} {{ props.orderData.common.shipforpickupLocationCd }} / {{ props.orderData.common.shipforpickupSystemCd }}
</span> </span>
@ -57,7 +57,7 @@ interface Props {
</VListItem> </VListItem>
</VList> </VList>
<div class="text-disabled text-uppercase mt-4 text-sm"> <div class="text-disabled text-uppercase mt-4 text-sm">
Transaction {{ $t('Transaction') }}
</div> </div>
<VList class="card-list mt-2"> <VList class="card-list mt-2">
<VListItem> <VListItem>

View File

@ -19,7 +19,6 @@ const headers = computed(() => [
{ title: t('Date'), key: 'transactionDate' }, { title: t('Date'), key: 'transactionDate' },
{ title: t('Status'), key: 'status' }, { title: t('Status'), key: 'status' },
{ title: t('Consumed'), key: 'consumed' }, { title: t('Consumed'), key: 'consumed' },
{ title: t('Created'), key: 'fdateCreation' },
]) ])
</script> </script>
@ -29,7 +28,7 @@ const headers = computed(() => [
<VCardItem> <VCardItem>
<template #title> <template #title>
<h5 class="text-h5"> <h5 class="text-h5">
Order Lines {{ $t('Order lines') }}
</h5> </h5>
</template> </template>
</VCardItem> </VCardItem>
@ -52,43 +51,53 @@ const headers = computed(() => [
</VChip> </VChip>
</template> </template>
<template #item.status="{ item }">
<VChip
variant="outlined"
label
>
{{ item.status }}
</VChip>
</template>
<!-- Expanded Row Data --> <!-- Expanded Row Data -->
<template #expanded-row="slotProps"> <template #expanded-row="slotProps">
<td :colspan="headers.length"> <td :colspan="headers.length">
<VTable <VCardText>
density="compact" <VTimeline
class="text-no-wrap" truncate-line="both"
> align="start"
<thead> side="end"
<tr> line-color="primary"
<th class="text-uppercase"> density="compact"
Status history class="v-timeline-density-compact"
</th> >
<th class="text-uppercase"> <template
Transaction date history v-for="(historyItem, index) in slotProps.item.history"
</th> :key="index"
<th class="text-uppercase">
Creation date history
</th>
</tr>
</thead>
<tbody>
<tr
v-for="item in slotProps.item.history"
:key="item.statusId"
> >
<td> <VTimelineItem
{{ item.status }} dot-color="primary"
</td> size="x-small"
<td> >
{{ format(item.transactionDate, "EEEE d MMMM yyyy HH:mm:ss") }} <div class="d-flex justify-space-between align-center">
</td> <div class="app-timeline-title">
<td> <VChip
{{ format(item.fdateCreation, "EEEE d MMMM yyyy HH:mm:ss") }} variant="outlined"
</td> label
</tr> >
</tbody> {{ historyItem.status }}
</VTable> </VChip>
(Id#{{ historyItem.statusId }})
</div>
<div class="app-timeline-meta">
{{ format(historyItem.transactionDate, "EEEE d MMMM yyyy HH:mm:ss") }}
</div>
</div>
</VTimelineItem>
</template>
</VTimeline>
</VCardText>
</td> </td>
</template> </template>
@ -115,7 +124,7 @@ const headers = computed(() => [
</VCard> </VCard>
<!-- 👉 Order History --> <!-- 👉 Order History -->
<VCard title="Status order history"> <VCard :title="$t('Status order history')">
<VCardText> <VCardText>
<VTimeline <VTimeline
truncate-line="both" truncate-line="both"
@ -135,15 +144,18 @@ const headers = computed(() => [
> >
<div class="d-flex justify-space-between align-center"> <div class="d-flex justify-space-between align-center">
<div class="app-timeline-title"> <div class="app-timeline-title">
Order was {{ historyItem.status }} (Id: #{{ historyItem.statusId }}) <VChip
variant="outlined"
label
>
{{ historyItem.status }}
</VChip>
(Id#{{ historyItem.statusId }})
</div> </div>
<div class="app-timeline-meta"> <div class="app-timeline-meta">
{{ format(historyItem.transactionDate, "EEEE d MMMM yyyy HH:mm:ss") }} {{ format(historyItem.transactionDate, "EEEE d MMMM yyyy HH:mm:ss") }}
</div> </div>
</div> </div>
<p class="app-timeline-text mb-0">
Your order has been {{ historyItem.status }} successfully
</p>
</VTimelineItem> </VTimelineItem>
</template> </template>
</VTimeline> </VTimeline>

View File

@ -80,7 +80,7 @@ const panelStatus = ref(0)
<VList class="card-list mt-1"> <VList class="card-list mt-1">
<VListItem cla> <VListItem cla>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">N°Exp:</span> <span class="font-weight-bold me-2">{{ $t('N°Exp') }}:</span>
<span> <span>
{{ preparationLine.numeroExpedition }} {{ preparationLine.numeroExpedition }}
</span> </span>
@ -88,7 +88,7 @@ const panelStatus = ref(0)
</VListItem> </VListItem>
<VListItem cla> <VListItem cla>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">Cd:</span> <span class="font-weight-bold me-2">{{ $t('Cd') }}:</span>
<span> <span>
{{ preparationLine.fulfillmentSystemCd }} / {{ preparationLine.fulfillmentLocationCd }} {{ preparationLine.fulfillmentSystemCd }} / {{ preparationLine.fulfillmentLocationCd }}
</span> </span>
@ -96,7 +96,7 @@ const panelStatus = ref(0)
</VListItem> </VListItem>
<VListItem cla> <VListItem cla>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">Qty:</span> <span class="font-weight-bold me-2">{{ $t('Qty') }}:</span>
<span> <span>
{{ preparationLine.validatedFulfillQty }} / {{ preparationLine.fulfillQty }} {{ preparationLine.validatedFulfillQty }} / {{ preparationLine.fulfillQty }}
</span> </span>
@ -104,7 +104,7 @@ const panelStatus = ref(0)
</VListItem> </VListItem>
<VListItem> <VListItem>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">Carrier:</span> <span class="font-weight-bold me-2">{{ $t('Carrier') }}:</span>
<span> <span>
{{ preparationLine.carrier }} {{ preparationLine.carrier }}
</span> </span>
@ -112,7 +112,7 @@ const panelStatus = ref(0)
</VListItem> </VListItem>
<VListItem> <VListItem>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">Tracking:</span> <span class="font-weight-bold me-2">{{ $t('Tracking') }}:</span>
<span> <span>
{{ preparationLine.trackingCode }} {{ preparationLine.trackingCode }}
</span> </span>
@ -120,7 +120,7 @@ const panelStatus = ref(0)
</VListItem> </VListItem>
<VListItem> <VListItem>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">URL:</span> <span class="font-weight-bold me-2">{{ $t('URL') }}:</span>
<span> <span>
<a <a
v-if="preparationLine.trackingUrl" v-if="preparationLine.trackingUrl"
@ -133,7 +133,7 @@ const panelStatus = ref(0)
</VListItem> </VListItem>
<VListItem> <VListItem>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">Restocking:</span> <span class="font-weight-bold me-2">{{ $t('Restocking') }}:</span>
<span> <span>
{{ preparationLine.restockingCode }} {{ preparationLine.restockingCode }}
</span> </span>
@ -144,9 +144,9 @@ const panelStatus = ref(0)
v-bind="resolveOrderStatus(preparationLine.status)" v-bind="resolveOrderStatus(preparationLine.status)"
variant="tonal" variant="tonal"
label label
size="default" size="x-small"
/> />
{{ format(section.transactionDate, "EEEE d MMMM yyyy HH:mm:ss") }} {{ format(section.transactionDate, "dd/MM/yyyy HH:mm:ss") }}
</VListItem> </VListItem>
</VList> </VList>
</VCardText> </VCardText>

View File

@ -80,7 +80,7 @@ const panelStatus = ref(0)
<VList class="card-list mt-1"> <VList class="card-list mt-1">
<VListItem cla> <VListItem cla>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">Colis:</span> <span class="font-weight-bold me-2">{{ $t('Package') }}:</span>
<span> <span>
{{ receptionLine.colisId }} {{ receptionLine.colisId }}
</span> </span>
@ -88,7 +88,7 @@ const panelStatus = ref(0)
</VListItem> </VListItem>
<VListItem cla> <VListItem cla>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">Cd:</span> <span class="font-weight-bold me-2">{{ $t('Cd') }}:</span>
<span> <span>
{{ receptionLine.intransitSystemCd }} / {{ receptionLine.intransitLocationCd }} {{ receptionLine.intransitSystemCd }} / {{ receptionLine.intransitLocationCd }}
</span> </span>
@ -96,7 +96,7 @@ const panelStatus = ref(0)
</VListItem> </VListItem>
<VListItem cla> <VListItem cla>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">Qty:</span> <span class="font-weight-bold me-2">{{ $t('Qty') }}:</span>
<span> <span>
{{ receptionLine.validatedIntransitQty }} / {{ receptionLine.intransitQty }} {{ receptionLine.validatedIntransitQty }} / {{ receptionLine.intransitQty }}
</span> </span>
@ -104,7 +104,7 @@ const panelStatus = ref(0)
</VListItem> </VListItem>
<VListItem> <VListItem>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">Tracking:</span> <span class="font-weight-bold me-2">{{ $t('Tracking') }}:</span>
<span> <span>
{{ receptionLine.trackingNumber }} {{ receptionLine.trackingNumber }}
</span> </span>
@ -112,7 +112,7 @@ const panelStatus = ref(0)
</VListItem> </VListItem>
<VListItem> <VListItem>
<div class="text-body-1"> <div class="text-body-1">
<span class="font-weight-bold me-2">Weight:</span> <span class="font-weight-bold me-2">{{ $t('Weight') }}:</span>
<span> <span>
{{ receptionLine.orderLineShipWeight }} {{ receptionLine.orderLineShipWeight }}
</span> </span>
@ -123,9 +123,9 @@ const panelStatus = ref(0)
v-bind="resolveOrderStatus(receptionLine.status)" v-bind="resolveOrderStatus(receptionLine.status)"
variant="tonal" variant="tonal"
label label
size="default" size="x-small"
/> />
{{ format(section.transactionDate, "EEEE d MMMM yyyy HH:mm:ss") }} {{ format(section.transactionDate, "dd/MM/yyyy HH:mm:ss") }}
</VListItem> </VListItem>
</VList> </VList>
</VCardText> </VCardText>