added new data model
This commit is contained in:
@@ -1,14 +1,14 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useOrdersStore } from '@/stores/orders.store'
|
import { useOrdersStore } from '@/stores/orders.store'
|
||||||
import { storeToRefs } from 'pinia'
|
import { storeToRefs } from 'pinia'
|
||||||
import VueDatePicker from '@vuepic/vue-datepicker'
|
import VueDatePicker from '@vuepic/vue-datepicker'
|
||||||
import { useSiteControlStore } from '@/stores/siteControl.store'
|
import { useSiteControlStore } from '@/stores/siteControl.store'
|
||||||
import { onBeforeUnmount, onMounted, ref, watch } from 'vue'
|
import { computed, onBeforeUnmount, onMounted, ref } from 'vue'
|
||||||
import { useCategoriesStore } from '@/stores/categories.store'
|
import { useCategoriesStore } from '@/stores/categories.store'
|
||||||
import type { Product, Route, Order } from '@/main'
|
import type { Order, OrderProduct, Product } from '@/main'
|
||||||
import { useRoutesStore } from '@/stores/routes.store'
|
import { useRoutesStore } from '@/stores/routes.store'
|
||||||
|
|
||||||
const ordersStore = useOrdersStore();
|
const ordersStore = useOrdersStore()
|
||||||
const categoriesStore = useCategoriesStore();
|
const categoriesStore = useCategoriesStore();
|
||||||
const routeStore = useRoutesStore();
|
const routeStore = useRoutesStore();
|
||||||
|
|
||||||
@@ -17,73 +17,174 @@
|
|||||||
const searchDate = ref<Date>(new Date(Date.now()));
|
const searchDate = ref<Date>(new Date(Date.now()));
|
||||||
const confirmedOrders = ref<boolean>();
|
const confirmedOrders = ref<boolean>();
|
||||||
const isSummed = ref<boolean>(true);
|
const isSummed = ref<boolean>(true);
|
||||||
|
const nipGrouped = ref(false)
|
||||||
const isLoading = ref<boolean>(true);
|
const isLoading = ref<boolean>(true);
|
||||||
const summedProducts = ref<Array<Product>>([]);
|
const summedProducts = ref<Array<Product>>([]);
|
||||||
const products = ref<Array<Object>>();
|
const products = ref<Array<Object>>();
|
||||||
const ordersByRoute = ref<Map<string, Array<Order>>>();
|
const ordersByRoute = ref<Map<string, Array<Order>>>(new Map<string, Array<Order>>())
|
||||||
|
const orderByRouteAndNipRef = ref<Map<string, Map<number, {
|
||||||
|
orders: Order[];
|
||||||
|
products: OrderProduct[]
|
||||||
|
}>>>(new Map<string, Map<number, { orders: Order[]; products: OrderProduct[] }>>)
|
||||||
|
|
||||||
const watchSearchDate = watch(searchDate, async (oldSearchDate, newSeatchDate) => {
|
const orderNumbers = computed(() => {
|
||||||
if(oldSearchDate != newSeatchDate) {
|
const orders = orderByRouteAndNipRef.get(route.MZT_Nazwa1)?.get(order.MZN_PodNipE)
|
||||||
await fetchOrders();
|
?.orders ?? []
|
||||||
}
|
return orders.map(o => o.MZN_MZNID).join(', ')
|
||||||
});
|
})
|
||||||
|
|
||||||
const watchConfirmedOrders = watch(confirmedOrders, async (oldConfirmedOrders, newConfirmedOrders) => {
|
// const watchSearchDate = watch(searchDate, async (oldSearchDate, newSeatchDate) => {
|
||||||
if (oldConfirmedOrders != newConfirmedOrders) {
|
// if(oldSearchDate != newSeatchDate) {
|
||||||
await fetchOrders();
|
// await fetchOrders();
|
||||||
}
|
// }
|
||||||
})
|
// });
|
||||||
|
//
|
||||||
|
// const watchConfirmedOrders = watch(confirmedOrders, async (oldConfirmedOrders, newConfirmedOrders) => {
|
||||||
|
// if (oldConfirmedOrders != newConfirmedOrders) {
|
||||||
|
// await fetchOrders();
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
//
|
||||||
|
// async function fetchOrders() {
|
||||||
|
// isLoading.value=true;
|
||||||
|
// orders.value = await ordersStore.fetchOrdersByDateStartAndEnd(searchDate.value != undefined ? searchDate.value : new Date(Date.now()),
|
||||||
|
// searchDate.value != undefined ? searchDate.value : new Date(Date.now()),
|
||||||
|
// (confirmedOrders.value) ? false : null);
|
||||||
|
// const productsMap = await categoriesStore.sumProductsFromOrders(orders.value);
|
||||||
|
// summedProducts.value = [];
|
||||||
|
// for(const product of productsMap.values()) {
|
||||||
|
// if(product.SummedQuantity > 0) {
|
||||||
|
// summedProducts.value.push(product);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// await prepareProductsFromOrders();
|
||||||
|
// isLoading.value=false;
|
||||||
|
// }
|
||||||
|
|
||||||
async function fetchOrders() {
|
function addRoutes() {
|
||||||
isLoading.value=true;
|
for (const route of routes.value) {
|
||||||
orders.value = await ordersStore.fetchOrdersByDateStartAndEnd(searchDate.value != undefined ? searchDate.value : new Date(Date.now()),
|
ordersByRoute.value.set(route.MZT_Nazwa1, [])
|
||||||
searchDate.value != undefined ? searchDate.value : new Date(Date.now()),
|
|
||||||
(confirmedOrders.value) ? false : null);
|
|
||||||
const productsMap = await categoriesStore.sumProductsFromOrders(orders.value);
|
|
||||||
summedProducts.value = [];
|
|
||||||
for(const product of productsMap.values()) {
|
|
||||||
if(product.SummedQuantity > 0) {
|
|
||||||
summedProducts.value.push(product);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
await prepareProductsFromOrders();
|
ordersByRoute.value.set('brak', [])
|
||||||
isLoading.value=false;
|
}
|
||||||
|
|
||||||
|
function updateProducts(order: UnwrapRefSimple<Order> | UnwrapRefSimple<UnwrapRefSimple<Order>>) {
|
||||||
|
for (const product of order.MZamElem) {
|
||||||
|
const newProduct = {
|
||||||
|
'kod': product.MZE_TwrKod,
|
||||||
|
'nazwa': product.MZE_TwrNazwa,
|
||||||
|
'ilosc': Number(product.MZE_TwrIlosc).toFixed(2),
|
||||||
|
'jm': product.MZE_TwrJm,
|
||||||
|
'cena': Number(product.MZE_TwrCena).toFixed(2),
|
||||||
|
'suma': Number(Number(product.MZE_TwrCena) * Number(product.MZE_TwrIlosc)).toFixed(2)
|
||||||
|
}
|
||||||
|
order.products.push(newProduct)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function prepareProductsFromOrders() {
|
function prepareProductsFromOrders() {
|
||||||
products.value = [];
|
products.value = []
|
||||||
if(orders.value == undefined || routes.value == undefined) {
|
if (orders.value == undefined || routes.value == undefined) {
|
||||||
return;
|
return
|
||||||
}
|
}
|
||||||
ordersByRoute.value = new Map<string, Array<Order>>();
|
addRoutes()
|
||||||
for(const route of routes.value) {
|
for (const order of orders.value) {
|
||||||
ordersByRoute.value.set(route.MZT_Nazwa1, []);
|
order.products = []
|
||||||
}
|
updateProducts(order)
|
||||||
ordersByRoute.value.set("brak", []);
|
|
||||||
|
|
||||||
for(const order of orders.value) {
|
|
||||||
order.products = [];
|
|
||||||
for (const product of order.MZamElem) {
|
|
||||||
const newProduct = {
|
|
||||||
'kod': product.MZE_TwrKod,
|
|
||||||
'nazwa': product.MZE_TwrNazwa,
|
|
||||||
'ilosc': Number(product.MZE_TwrIlosc).toFixed(2),
|
|
||||||
'jm': product.MZE_TwrJm,
|
|
||||||
'cena': Number(product.MZE_TwrCena).toFixed(2),
|
|
||||||
'suma': Number(Number(product.MZE_TwrCena) * Number(product.MZE_TwrIlosc)).toFixed(2),
|
|
||||||
}
|
|
||||||
order.products.push(newProduct);
|
|
||||||
}
|
|
||||||
const routeName = routes.value.find( route => {
|
const routeName = routes.value.find( route => {
|
||||||
return route.MZT_MZTID == order.MZN_MZTID
|
return route.MZT_MZTID == order.MZN_MZTID
|
||||||
})?.MZT_Nazwa1;
|
})?.MZT_Nazwa1;
|
||||||
|
|
||||||
ordersByRoute.value.get(routeName != undefined ? routeName : "brak")?.push(order);
|
ordersByRoute.value.get(routeName != undefined ? routeName : "brak")?.push(order);
|
||||||
}
|
ordersByRoute.value.get(routeName != undefined ? routeName : 'brak')?.push(order)
|
||||||
console.log(orders.value);
|
|
||||||
console.log(ordersByRoute.value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log(orders.value)
|
||||||
|
console.log(ordersByRoute.value);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function groupByNip() {
|
||||||
|
const orderByRouteAndNip = new Map<string, Map<number, { orders: Order[]; products: OrderProduct[] }>>()
|
||||||
|
|
||||||
|
for (const [route, orders] of ordersByRoute.value) {
|
||||||
|
const ordersByNip = new Map<number, { orders: Order[]; products: OrderProduct[] }>()
|
||||||
|
|
||||||
|
for (const order of orders) {
|
||||||
|
if (!ordersByNip.has(order.MZN_PodNipE)) {
|
||||||
|
ordersByNip.set(order.MZN_PodNipE, { orders: [], products: [] })
|
||||||
|
}
|
||||||
|
const entry = ordersByNip.get(order.MZN_PodNipE)
|
||||||
|
entry.orders.push(order)
|
||||||
|
|
||||||
|
for (const element of order.MZamElem) {
|
||||||
|
const existingProduct = entry.products.find(p => p.MZE_TwrId === element.MZE_TwrId)
|
||||||
|
if (existingProduct) {
|
||||||
|
existingProduct.MZE_TwrCena =String(Number(existingProduct.MZE_TwrCena).toFixed(2))
|
||||||
|
existingProduct.MZE_TwrIlosc = String(
|
||||||
|
Number(Number(existingProduct.MZE_TwrIlosc) + Number(element.MZE_TwrIlosc)).toFixed(0)
|
||||||
|
)
|
||||||
|
existingProduct.suma = Number(Number(existingProduct.MZE_TwrIlosc) * Number(existingProduct.MZE_TwrCena)).toFixed(2)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
element.suma = Number(Number(element.MZE_TwrIlosc )*Number(element.MZE_TwrCena)).toFixed(2)
|
||||||
|
entry.products.push(element)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
orderByRouteAndNip.set(route, ordersByNip)
|
||||||
|
}
|
||||||
|
orderByRouteAndNipRef.value = orderByRouteAndNip
|
||||||
|
|
||||||
|
}/*
|
||||||
|
function groupByNip() {
|
||||||
|
const orderByRouteAndNip = new Map<string /!*route*!/, Map<number /!*nip*!/, Map<Array<Order>, Array<OrderProduct>>>>()//TODO moze tu dodać liste numerów orderów
|
||||||
|
Array.from(ordersByRoute.value).forEach(([route, orders]) => {
|
||||||
|
const ordersByNip = new Map<number, Array<Order>>()
|
||||||
|
const productsByNip = new Map<number, Array<OrderProduct>>()
|
||||||
|
const productsAndOrdersByNip = new Map<number, Map<Array<Order>, Array<OrderProduct>>>
|
||||||
|
orders.forEach((order) => {
|
||||||
|
if (!ordersByNip.has(order.MZN_PodNipE)) {
|
||||||
|
ordersByNip.set(order.MZN_PodNipE, [])
|
||||||
|
}
|
||||||
|
ordersByNip.get(order.MZN_PodNipE).push(order)
|
||||||
|
|
||||||
|
order.MZamElem.forEach(element => {
|
||||||
|
if (!productsByNip.has(order.MZN_PodNipE)) {
|
||||||
|
productsByNip.set(order.MZN_PodNipE, [])
|
||||||
|
}
|
||||||
|
|
||||||
|
const productList = productsByNip.get(order.MZN_PodNipE)
|
||||||
|
const currentElement = productList.find(iterator => iterator.MZE_TwrId === element.MZE_TwrId)
|
||||||
|
|
||||||
|
if (currentElement) {
|
||||||
|
currentElement.MZE_TwrIlosc = String(
|
||||||
|
Number.parseFloat(element.MZE_TwrIlosc) + Number.parseFloat(currentElement.MZE_TwrIlosc)
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
productList.push(element)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!productsAndOrdersByNip.has(order.MZN_PodNipE)) {
|
||||||
|
const tempMap = new Map<Array<Order>, Array<OrderProduct>>
|
||||||
|
tempMap.set(ordersByNip.get(order.MZN_PodNipE),productList)
|
||||||
|
productsAndOrdersByNip.set(order.MZN_PodNipE, tempMap)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
if (!orderByRouteAndNip.has(route)) {
|
||||||
|
orderByRouteAndNip.set(route, productsAndOrdersByNip)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
console.log(orderByRouteAndNip)
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
orders.value = await ordersStore.fetchOrdersByDay(searchDate.value, null);
|
orders.value = await ordersStore.fetchOrdersByDay(searchDate.value, null);
|
||||||
const productsMap = await categoriesStore.sumProductsFromOrders(orders.value);
|
const productsMap = await categoriesStore.sumProductsFromOrders(orders.value);
|
||||||
@@ -97,6 +198,7 @@
|
|||||||
await prepareProductsFromOrders();
|
await prepareProductsFromOrders();
|
||||||
console.log(products.value);
|
console.log(products.value);
|
||||||
isLoading.value=false;
|
isLoading.value=false;
|
||||||
|
groupByNip()
|
||||||
});
|
});
|
||||||
|
|
||||||
onBeforeUnmount( async function (){
|
onBeforeUnmount( async function (){
|
||||||
@@ -127,8 +229,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="box mt-3">
|
<div class="box mt-3">
|
||||||
<button class="button is-fullwidth mb-3" @click="isSummed=false">Rozdzielone zamówienia</button>
|
<button class="button is-fullwidth mb-3" @click="isSummed=false; nipGrouped=false">Rozdzielone zamówienia
|
||||||
<button class="button is-fullwidth mb-3" @click="isSummed=true">Zsumowane zamówienia</button>
|
</button>
|
||||||
|
<button class="button is-fullwidth mb-3" @click="isSummed=false; nipGrouped=true">Zamówienia pogrupowane po
|
||||||
|
NIP
|
||||||
|
</button>
|
||||||
|
<button class="button is-fullwidth mb-3" @click="isSummed=true; nipGrouped=false">Zsumowane zamówienia</button>
|
||||||
<button class="button is-fullwidth" v-print="'#printMe'">Drukuj</button>
|
<button class="button is-fullwidth" v-print="'#printMe'">Drukuj</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -150,7 +256,8 @@
|
|||||||
route.MZT_Nazwa1 + ' ' + ordersByRoute?.get(route.MZT_Nazwa1)[0].MZN_DataDos
|
route.MZT_Nazwa1 + ' ' + ordersByRoute?.get(route.MZT_Nazwa1)[0].MZN_DataDos
|
||||||
}}</h1>
|
}}</h1>
|
||||||
|
|
||||||
<div v-for="order of ordersByRoute.get(route.MZT_Nazwa1)" :key="order.MZN_MZNID" class="pb-4" style="display: block; page-break-inside: avoid;">
|
<div v-if="!nipGrouped" v-for="order of ordersByRoute.get(route.MZT_Nazwa1)" :key="order.MZN_MZNID"
|
||||||
|
class="pb-4" style="display: block; page-break-inside: avoid;">
|
||||||
<p class="is-size-6 px-2">NIP {{order.MZN_PodNipE}}</p>
|
<p class="is-size-6 px-2">NIP {{order.MZN_PodNipE}}</p>
|
||||||
<p class="is-size-6 px-2">{{order.MZN_PodNazwa1 + order.MZN_PodNazwa2 + order.MZN_PodNazwa3}}</p>
|
<p class="is-size-6 px-2">{{order.MZN_PodNazwa1 + order.MZN_PodNazwa2 + order.MZN_PodNazwa3}}</p>
|
||||||
<p class="is-size-5 px-2">ZAMÓWIENIE NR {{order.MZN_MZNID}}</p>
|
<p class="is-size-5 px-2">ZAMÓWIENIE NR {{order.MZN_MZNID}}</p>
|
||||||
@@ -167,6 +274,40 @@
|
|||||||
<p class="is-size-6 px-2">{{order.MZN_Uwagi}}</p>
|
<p class="is-size-6 px-2">{{order.MZN_Uwagi}}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div v-else-if="nipGrouped" v-for="( item, nip) of orderByRouteAndNipRef.get(route.MZT_Nazwa1)"
|
||||||
|
:key="order.MZN_MZNID" class="pb-4" style="display: block; page-break-inside: avoid;">
|
||||||
|
<p v-for="order in item.orders"> {{order.MZN_PodNipE}} </p>
|
||||||
|
<!-- <p class="is-size-6 px-2">NIP {{ item..MZN_PodNipE }}</p>
|
||||||
|
<p class="is-size-6 px-2">{{ order.MZN_PodNazwa1 + order.MZN_PodNazwa2 + order.MZN_PodNazwa3 }}</p>
|
||||||
|
<p class="is-size-5 px-2"
|
||||||
|
v-if="orderByRouteAndNipRef.get(route.MZT_Nazwa1)?.get(order.MZN_PodNipE)?.orders?.length">
|
||||||
|
ZAMÓWIENIA NR
|
||||||
|
<span
|
||||||
|
v-for="(orderByNip, index) in orderByRouteAndNipRef.get(route.MZT_Nazwa1).get(order.MZN_PodNipE).orders">{{ orderByNip.MZN_MZNID
|
||||||
|
}}
|
||||||
|
<span
|
||||||
|
v-if="index !== orderByRouteAndNipRef.get(route.MZT_Nazwa1).get(order.MZN_PodNipE).orders.length - 1">, </span>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
<DataTable :value="orderByRouteAndNipRef.get(route.MZT_Nazwa1).get(order.MZN_PodNipE).products"
|
||||||
|
class="mb-3" style="padding:0" scrollable>
|
||||||
|
<Column field="MZE_TwrKod" header="Indeks" frozen></Column>
|
||||||
|
<Column field="MZE_TwrNazwa" header="Nazwa" />
|
||||||
|
<Column field="MZE_TwrIlosc" header="Ilość" />
|
||||||
|
<Column field="MZE_TwrJm" header="JM" />
|
||||||
|
<Column field="MZE_TwrCena" header="Cena" />
|
||||||
|
<Column field="suma" header="Suma" />
|
||||||
|
</DataTable>
|
||||||
|
<div v-if="order.MZN_Uwagi != undefined">
|
||||||
|
<p class="is-size-6 px-2">Uwagi</p>
|
||||||
|
<p class="is-size-6 px-2">{{ order.MZN_Uwagi }}</p>
|
||||||
|
</div>-->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -194,7 +335,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|||||||
27
src/main.ts
27
src/main.ts
@@ -154,6 +154,32 @@ export interface Order {
|
|||||||
products: any
|
products: any
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface Order {
|
||||||
|
loading: boolean
|
||||||
|
MZN_Bufor: number,
|
||||||
|
MZN_Anulowane: number,
|
||||||
|
MZN_DataDos: string,
|
||||||
|
MZN_DataZam: string,
|
||||||
|
MZN_MZNID: number,
|
||||||
|
MZN_OpeID: number,
|
||||||
|
MZN_PodID: number,
|
||||||
|
MZN_PodKodPocztowy: string,
|
||||||
|
MZN_PodMiasto: string,
|
||||||
|
MZN_PodNazwa1: string,
|
||||||
|
MZN_PodNazwa2: string,
|
||||||
|
MZN_PodNazwa3: string,
|
||||||
|
MZN_PodNipE: string,
|
||||||
|
MZN_PodNrDomu: string,
|
||||||
|
MZN_PodUlica: string,
|
||||||
|
MZN_PodWojewodztwo: string,
|
||||||
|
MZN_TypDokumentu: number,
|
||||||
|
MZN_UUID: string,
|
||||||
|
MZN_Uwagi: string,
|
||||||
|
MZN_MZTID: number,
|
||||||
|
MZamElem: Array<OrderProduct>,
|
||||||
|
products: any
|
||||||
|
}
|
||||||
|
|
||||||
export interface OrderProduct {
|
export interface OrderProduct {
|
||||||
MZE_MZEID: number | undefined,
|
MZE_MZEID: number | undefined,
|
||||||
MZE_MZNID: number | undefined,
|
MZE_MZNID: number | undefined,
|
||||||
@@ -164,6 +190,7 @@ export interface OrderProduct {
|
|||||||
MZE_TwrNazwa: string,
|
MZE_TwrNazwa: string,
|
||||||
MZE_TwrKod: string,
|
MZE_TwrKod: string,
|
||||||
MZE_TwrStawka: string | undefined,
|
MZE_TwrStawka: string | undefined,
|
||||||
|
suma?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Route {
|
export interface Route {
|
||||||
|
|||||||
Reference in New Issue
Block a user