aggiornamento Ordini GAS filtri
This commit is contained in:
@@ -47,6 +47,8 @@ export default defineComponent({
|
||||
const $q = useQuasar()
|
||||
|
||||
const orderQuantity = ref(<number | undefined>undefined);
|
||||
const weight = ref(<number | undefined>undefined);
|
||||
const price = ref(<number | undefined>undefined);
|
||||
const orderQuantityPreordered = ref(<number | undefined>undefined);
|
||||
const orderTotalPriceProduct = ref(<number | undefined>undefined);
|
||||
|
||||
@@ -64,6 +66,26 @@ export default defineComponent({
|
||||
enableChangeTotalPrice.value = false
|
||||
});
|
||||
|
||||
watch(weight, (newValue: any) => {
|
||||
if (order.value.product) {
|
||||
if (!newValue)
|
||||
order.value.product.productInfo.weight = 0
|
||||
else
|
||||
order.value.product.productInfo.weight = parseFloat(newValue);
|
||||
}
|
||||
enableChangeTotalPrice.value = false
|
||||
});
|
||||
|
||||
watch(price, (newValue: any) => {
|
||||
if (order.value) {
|
||||
if (!newValue)
|
||||
order.value.price = 0
|
||||
else
|
||||
order.value.price = parseFloat(newValue);
|
||||
}
|
||||
enableChangeTotalPrice.value = false
|
||||
});
|
||||
|
||||
watch(orderQuantityPreordered, (newValue: any) => {
|
||||
if (!newValue)
|
||||
order.value.quantitypreordered = 0
|
||||
@@ -137,7 +159,7 @@ export default defineComponent({
|
||||
|
||||
function isApplicatoSconto() {
|
||||
const totalipotetico = order.value.product!.price * (order.value.quantity + order.value.quantitypreordered)
|
||||
if (totalipotetico > order.value.TotalPriceProduct) {
|
||||
if (totalipotetico.toFixed(2) > order.value.TotalPriceProduct.toFixed(2)) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
@@ -164,6 +186,8 @@ export default defineComponent({
|
||||
|
||||
function mounted() {
|
||||
endload.value = false
|
||||
weight.value = props.order.product?.productInfo.weight
|
||||
price.value = props.order.price
|
||||
if (props.order.quantity !== 0) {
|
||||
orderQuantity.value = props.order.quantity
|
||||
enableQty.value = true
|
||||
@@ -195,6 +219,8 @@ export default defineComponent({
|
||||
t,
|
||||
updateOrder,
|
||||
orderQuantity,
|
||||
weight,
|
||||
price,
|
||||
orderQuantityPreordered,
|
||||
enableQty,
|
||||
enableQtyPreordered,
|
||||
|
||||
@@ -1,10 +1,18 @@
|
||||
<template>
|
||||
<div v-if="order && order.product && order.product.productInfo" class="q-pa-xs q-gutter-xs">
|
||||
<div
|
||||
v-if="order && order.product && order.product.productInfo"
|
||||
class="q-pa-xs q-gutter-xs"
|
||||
>
|
||||
order: {{order}}
|
||||
<div v-if="order.product">
|
||||
<q-item>
|
||||
<q-item-section top thumbnail class="q-ml-none">
|
||||
<img
|
||||
v-if="order.product && order.product.productInfo && order.product.productInfo.img"
|
||||
v-if="
|
||||
order.product &&
|
||||
order.product.productInfo &&
|
||||
order.product.productInfo.img
|
||||
"
|
||||
:src="`` + order.product.productInfo.img"
|
||||
:alt="order.product.productInfo.name"
|
||||
:class="myimgclass()"
|
||||
@@ -18,6 +26,7 @@
|
||||
</div>
|
||||
{{ order.product.productInfo.name }}
|
||||
</q-item-label>
|
||||
|
||||
<q-item-label caption>
|
||||
<div
|
||||
class="text-black text-h8"
|
||||
@@ -32,6 +41,28 @@
|
||||
)
|
||||
}}
|
||||
</div>
|
||||
<div class="row q-mb-xs no-wrap items-center centeritems">
|
||||
<q-input
|
||||
v-if="editmode"
|
||||
v-model="weight"
|
||||
autofocus
|
||||
debounce="500"
|
||||
borderless
|
||||
rounded
|
||||
dense
|
||||
:label="t('products.weight')"
|
||||
></q-input>
|
||||
<q-input
|
||||
v-if="editmode"
|
||||
v-model="price"
|
||||
autofocus
|
||||
debounce="500"
|
||||
borderless
|
||||
rounded
|
||||
dense
|
||||
:label="t('products.price')"
|
||||
></q-input>
|
||||
</div>
|
||||
<div class="row q-mb-xs no-wrap items-center centeritems">
|
||||
<q-btn
|
||||
v-if="showall && !nomodif"
|
||||
@@ -91,7 +122,8 @@
|
||||
@click="
|
||||
updateOrder({
|
||||
quantitypreordered: order.quantitypreordered,
|
||||
quantity: order.quantity,
|
||||
quantity: order.quantity,
|
||||
price: order.price,
|
||||
})
|
||||
"
|
||||
>
|
||||
@@ -132,8 +164,13 @@
|
||||
: 0
|
||||
}}
|
||||
</span>
|
||||
<span v-if="tools.isManager() && order.TotalPriceProduct !== order.TotalPriceProductCalc"
|
||||
:class="isApplicatoSconto() ? 'ordine_scontato_nuovo' : ''">
|
||||
<span
|
||||
v-if="
|
||||
tools.isManager() &&
|
||||
order.TotalPriceProduct.toFixed(2) !== order.TotalPriceProductCalc.toFixed(2)
|
||||
"
|
||||
:class="isApplicatoSconto() ? 'ordine_scontato_nuovo' : ''"
|
||||
>
|
||||
(Calc: €
|
||||
{{
|
||||
order.TotalPriceProductCalc
|
||||
@@ -148,16 +185,20 @@
|
||||
>€
|
||||
{{
|
||||
(
|
||||
(order.price * order.quantity) +
|
||||
(order.price * order.quantitypreordered)
|
||||
order.price * order.quantity +
|
||||
order.price * order.quantitypreordered
|
||||
).toFixed(2)
|
||||
}}</span
|
||||
>)</span
|
||||
>
|
||||
</span>
|
||||
<span v-if="isApplicatoSconto() && !editmode" class="ordine_scritta_sconto">{{
|
||||
$t('ecomm.sconto_applicato', { risparmio: getRisparmio() })
|
||||
}}</span>
|
||||
<span
|
||||
v-if="isApplicatoSconto() && !editmode"
|
||||
class="ordine_scritta_sconto"
|
||||
>{{
|
||||
$t('ecomm.sconto_applicato', { risparmio: getRisparmio() })
|
||||
}}</span
|
||||
>
|
||||
</div>
|
||||
</q-item-label>
|
||||
</q-item-section>
|
||||
|
||||
@@ -8,6 +8,8 @@ const msg_website_enUs = {
|
||||
products: {
|
||||
quantity: 'Quantità',
|
||||
quantityAvailable: 'Disponibili',
|
||||
stockQty: 'In Magazzino',
|
||||
stockBloccatiQty: 'Bloccati In Magazzino',
|
||||
weight: 'Peso',
|
||||
stars: 'Voto',
|
||||
color: 'Colore',
|
||||
@@ -36,6 +38,7 @@ const msg_website_enUs = {
|
||||
productslist: 'Lista Prodotti',
|
||||
collabora: 'Collabora',
|
||||
storehouses: 'Magazzino',
|
||||
providers: 'Fornitori',
|
||||
departments: 'Uffici',
|
||||
orders: 'Ordini Ricevuti',
|
||||
orders2: 'Ordini Ricevuti',
|
||||
|
||||
@@ -8,6 +8,7 @@ const msg_website_es = {
|
||||
products: {
|
||||
quantity: 'Quantità',
|
||||
quantityAvailable: 'Disponibili',
|
||||
stockQty: 'In Magazzino',
|
||||
weight: 'Peso',
|
||||
stars: 'Voto',
|
||||
color: 'Colore',
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
const msg_website_it = {
|
||||
ws: {
|
||||
sitename: 'Riso',
|
||||
siteshortname: 'RISO',
|
||||
description: 'Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.',
|
||||
keywords: 'riso, piattaforma di scambio, rete italiana scambio orizzontale, riso app, riso piattaforma, scambio e baratto, momenta RIS',
|
||||
sitename: 'Più che Buono',
|
||||
siteshortname: 'Più che Buono',
|
||||
description: '',
|
||||
keywords: '',
|
||||
},
|
||||
hours: {
|
||||
descr: 'Descrizione',
|
||||
@@ -16,23 +16,35 @@ const msg_website_it = {
|
||||
pages: {
|
||||
home: 'Home',
|
||||
profile: 'Profilo',
|
||||
install_site: 'Installa Sito',
|
||||
profile2: 'ProfiloU',
|
||||
mypage2: 'mypage2',
|
||||
myservice2: 'myservice2',
|
||||
myhosps2: 'myhosps2',
|
||||
mygood2: 'mygood2',
|
||||
catalogo: 'Catalogo',
|
||||
fundraising: 'Sostieni il Progetto',
|
||||
notifs: 'Configura le Notifiche',
|
||||
unsubscribe: 'Disiscriviti',
|
||||
unsubscribe_user: 'Disiscriviti User',
|
||||
test: 'Test',
|
||||
projects: 'Progetti',
|
||||
report: 'Report Ore',
|
||||
producer: 'Produttore',
|
||||
orderinfo: 'Ordini Effettuati',
|
||||
products: 'Prodotti',
|
||||
cash: 'Cassa',
|
||||
productInfos: 'Info Prodotti',
|
||||
listinoprodotti: 'Listino Prodotti',
|
||||
productslist: 'Lista Prodotti',
|
||||
collabora: 'Collabora',
|
||||
categories: 'Categorie',
|
||||
storehouses: 'Magazzino',
|
||||
providers: 'Fornitori',
|
||||
catprods: 'Categorie',
|
||||
subcatprods: 'Sotto-Categorie',
|
||||
gasordine: 'Gas Ordine',
|
||||
scontisticas: 'Scontistica',
|
||||
departments: 'Uffici',
|
||||
orders: 'Ordini Ricevuti',
|
||||
orders2: 'Ordini Ricevuti',
|
||||
@@ -121,9 +133,11 @@ const msg_website_it = {
|
||||
only_residenti: 'Solo Residenti',
|
||||
only_consiglio: 'Solo Consiglieri',
|
||||
color: 'Colore',
|
||||
gasordini: 'Gas Ordini',
|
||||
gestoreordini: 'Gestore Ordini',
|
||||
},
|
||||
msg: {
|
||||
myAppName: 'Riso',
|
||||
myAppName: 'Più che Buono',
|
||||
myAppDescription: 'Il primo Vero Social Libero, Equo e Solidale, dove Vive Consapevolezza e Aiuto Comunitario. Gratuito',
|
||||
underconstruction: 'App in costruzione...',
|
||||
myDescriz: '',
|
||||
|
||||
@@ -7,30 +7,6 @@ import {
|
||||
import { func } from '@store/Modules/fieldsTable'
|
||||
|
||||
|
||||
// const SHOW_PROJINTHEMENU = false
|
||||
//
|
||||
// let arrlistafavourite = []
|
||||
// let arrlistaprojtutti = []
|
||||
// let arrlistaprojmiei = []
|
||||
// if (SHOW_PROJINTHEMENU) {
|
||||
// arrlistaprojtutti = Projects.getters.listaprojects(RouteNames.projectsall)
|
||||
// arrlistaprojmiei = Projects.getters.listaprojects(RouteNames.myprojects)
|
||||
// arrlistafavourite = Projects.getters.listaprojects(RouteNames.favouriteprojects)
|
||||
// }
|
||||
// PROGETTI -> FAVORITI :
|
||||
|
||||
// if (arrlistafavourite.length > 0) {
|
||||
// arrMenu.push({
|
||||
// icon: 'favorite_border',
|
||||
// nametranslate: 'pages.' + RouteNames.favouriteprojects,
|
||||
// urlroute: RouteNames.favouriteprojects,
|
||||
// level_parent: 0.0,
|
||||
// level_child: 0.5,
|
||||
// routes2: arrlistafavourite,
|
||||
// idelem: ''
|
||||
// })
|
||||
// }
|
||||
|
||||
const firstPage = {
|
||||
active: true,
|
||||
order: 5,
|
||||
@@ -57,56 +33,57 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
/*{
|
||||
active: true,
|
||||
order: 400,
|
||||
path: '/test',
|
||||
materialIcon: 'fas fa-test',
|
||||
name: 'mypages.test',
|
||||
component: () => import('@/views/testServer/testServer.vue'),
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
order: 20,
|
||||
path: '/events',
|
||||
materialIcon: 'fas fa-bullhorn',
|
||||
name: 'mypages.events',
|
||||
component: () => import('@/root/eventi/eventi.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},*/
|
||||
{
|
||||
active: true,
|
||||
order: 12,
|
||||
path: '/goods',
|
||||
materialIcon: 'fas fa-tshirt',
|
||||
name: 'mypages.goods',
|
||||
component: () => import('@/root/goods/goods.vue'),
|
||||
active: site.confpages && site.confpages.showProfile,
|
||||
order: 120,
|
||||
path: '/myprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile',
|
||||
component: () => import('@/views/user/myprofile/myprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 15,
|
||||
path: '/services',
|
||||
materialIcon: 'fas fa-house-user',
|
||||
name: 'mypages.services',
|
||||
component: () => import('@/root/services/services.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 15,
|
||||
path: '/provapao',
|
||||
materialIcon: 'fas fa-house-user',
|
||||
name: 'mypages.provapao',
|
||||
component: () => import('@/root/provapao/provapao.vue'),
|
||||
order: 120,
|
||||
path: '/install_site',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.install_site',
|
||||
component: () => import('@/views/admin/install_site/install_site.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 15,
|
||||
path: '/hosps',
|
||||
materialIcon: 'fas fa-bed',
|
||||
name: 'mypages.hosp',
|
||||
component: () => import('@/root/hosp/hosp.vue'),
|
||||
active: site.confpages && site.confpages.showProfile,
|
||||
order: 120,
|
||||
path: '/editprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile3',
|
||||
component: () => import('@/views/user/editprofile/editprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: site.confpages && site.confpages.showiscrittiMenu,
|
||||
order: 130,
|
||||
path: '/friends',
|
||||
materialIcon: 'fas fa-user-friends',
|
||||
name: 'mypages.iscritti',
|
||||
component: () => import('@/views/user/myfriends/myfriends.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -121,50 +98,8 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 20,
|
||||
path: '/events',
|
||||
materialIcon: 'fas fa-bullhorn',
|
||||
name: 'mypages.events',
|
||||
component: () => import('@/root/eventi/eventi.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 120,
|
||||
path: '/myprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile',
|
||||
component: () => import('@/views/user/myprofile/myprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 120,
|
||||
path: '/editprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile3',
|
||||
component: () => import('@/views/user/editprofile/editprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 130,
|
||||
path: '/friends',
|
||||
materialIcon: 'fas fa-user-friends',
|
||||
name: 'mypages.iscritti',
|
||||
component: () => import('@/views/user/myfriends/myfriends.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
onlyAdmin: true,
|
||||
onlyManager: true,
|
||||
},
|
||||
{
|
||||
active: site.confpages && site.confpages.enableGroups,
|
||||
@@ -176,6 +111,8 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: false,
|
||||
onlyAdmin: true,
|
||||
onlyManager: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
|
||||
0
src/rootgen/admin/gestoreordini_old/gestoreordini.scss
Executable file
0
src/rootgen/admin/gestoreordini_old/gestoreordini.scss
Executable file
167
src/rootgen/admin/gestoreordini_old/gestoreordini.ts
Executable file
167
src/rootgen/admin/gestoreordini_old/gestoreordini.ts
Executable file
@@ -0,0 +1,167 @@
|
||||
import { defineComponent, onMounted, ref } from 'vue'
|
||||
|
||||
import { CImgText } from '../../../components/CImgText/index'
|
||||
import { CCard } from '@/components/CCard'
|
||||
import { CMyPage } from '@/components/CMyPage'
|
||||
import { CTitleBanner } from '@/components/CTitleBanner'
|
||||
import { CGridTableRec } from '@/components/CGridTableRec'
|
||||
|
||||
import { colTableGestoreOrdini } from '@src/store/Modules/fieldsTable'
|
||||
import MixinMetaTags from '@/mixins/mixin-metatags'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'Gestoreordini',
|
||||
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec },
|
||||
setup() {
|
||||
|
||||
const { setmeta } = MixinMetaTags()
|
||||
const filtroOrdini = ref(<any[]>[])
|
||||
const idGasordine = ref('')
|
||||
|
||||
function mounted() {
|
||||
let queryord = []
|
||||
|
||||
filtroOrdini.value = []
|
||||
|
||||
if (idGasordine.value) {
|
||||
const gasordine = {
|
||||
$match: {
|
||||
idGasordine: idGasordine.value
|
||||
},
|
||||
}
|
||||
queryord.push(gasordine)
|
||||
}
|
||||
|
||||
|
||||
const query = [
|
||||
{
|
||||
$lookup: {
|
||||
from: 'products',
|
||||
localField: 'idProduct',
|
||||
foreignField: '_id',
|
||||
as: 'product',
|
||||
},
|
||||
},
|
||||
{
|
||||
$unwind: {
|
||||
path: '$product',
|
||||
preserveNullAndEmptyArrays: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: 'productinfos',
|
||||
localField: 'product.idProductInfo',
|
||||
foreignField: '_id',
|
||||
as: 'productInfo',
|
||||
},
|
||||
},
|
||||
{
|
||||
$unwind: {
|
||||
path: '$productInfo',
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: 'gasordines',
|
||||
localField: 'idGasordine',
|
||||
foreignField: '_id',
|
||||
as: 'gasordine',
|
||||
},
|
||||
},
|
||||
{
|
||||
$unwind: {
|
||||
path: '$gasordine',
|
||||
preserveNullAndEmptyArrays: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
$match: {
|
||||
$or: [
|
||||
{
|
||||
'gasordine.active': true,
|
||||
},
|
||||
{
|
||||
gasordine: {
|
||||
$exists: false,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
$match: {
|
||||
$or: [
|
||||
{
|
||||
quantity: {
|
||||
$gt: 0,
|
||||
},
|
||||
},
|
||||
{
|
||||
quantitypreordered: {
|
||||
$gt: 0,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
$group: {
|
||||
_id: '$product._id',
|
||||
name: {
|
||||
$first: '$productInfo.name',
|
||||
},
|
||||
weight: {
|
||||
$first: '$productInfo.weight',
|
||||
},
|
||||
price_acquistato: {
|
||||
$first: '$product.price_acquistato',
|
||||
},
|
||||
totalQuantity: {
|
||||
$sum: {
|
||||
$add: [
|
||||
'$quantity',
|
||||
'$quantitypreordered',
|
||||
],
|
||||
},
|
||||
},
|
||||
totalPrice_acquistato: {
|
||||
$sum: {
|
||||
$multiply: [
|
||||
'$product.price_acquistato',
|
||||
{
|
||||
$add: [
|
||||
'$quantity',
|
||||
'$quantitypreordered',
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
count: {
|
||||
$sum: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$sort: {
|
||||
name: 1,
|
||||
},
|
||||
}
|
||||
]
|
||||
|
||||
queryord.push(query)
|
||||
|
||||
filtroOrdini.value = queryord
|
||||
|
||||
}
|
||||
|
||||
onMounted(mounted)
|
||||
|
||||
return {
|
||||
colTableGestoreOrdini,
|
||||
setmeta,
|
||||
filtroOrdini,
|
||||
}
|
||||
}
|
||||
})
|
||||
33
src/rootgen/admin/gestoreordini_old/gestoreordini.vue
Executable file
33
src/rootgen/admin/gestoreordini_old/gestoreordini.vue
Executable file
@@ -0,0 +1,33 @@
|
||||
<template>
|
||||
<CMyPage title="Info Prodotti" imgbackground="images/prodotti.jpg" sizes="max-height: 120px">
|
||||
<span>{{
|
||||
setmeta({
|
||||
title: 'Info Prodotti',
|
||||
description: '',
|
||||
keywords: '',
|
||||
})
|
||||
}}
|
||||
</span>
|
||||
|
||||
|
||||
<div class="q-ma-sm q-gutter-sm q-pa-xs">
|
||||
<CTitleBanner title="Info Prodotti"></CTitleBanner>
|
||||
<CGridTableRec
|
||||
prop_mytable="orders"
|
||||
prop_mytitle="Gestore Ordini"
|
||||
:prop_mycolumns="colTableGestoreOrdini"
|
||||
:filtercustom="filtroOrdini"
|
||||
prop_colkey="name"
|
||||
nodataLabel="Nessun Ordine"
|
||||
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
|
||||
|
||||
</CGridTableRec>
|
||||
</div>
|
||||
</CMyPage>
|
||||
</template>
|
||||
<script lang="ts" src="./gestoreordini.ts">
|
||||
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
@import 'gestoreordini.scss';
|
||||
</style>
|
||||
@@ -98,6 +98,20 @@ function getRoutesEcomm(site: ISites) {
|
||||
onlyManager: true,
|
||||
onlyEditor: true
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 30,
|
||||
path: '/admin/ecommerce/gestoreordini',
|
||||
materialIcon: 'fas fa-lemon',
|
||||
name: 'pages.gestoreordini',
|
||||
component: () => import('@/views/admin/gestoreordini/gestoreordini.vue'),
|
||||
inmenu: true,
|
||||
submenu: true,
|
||||
level_parent: 0,
|
||||
level_child: 0.5,
|
||||
onlyManager: true,
|
||||
onlyEditor: true
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 30,
|
||||
|
||||
@@ -2018,6 +2018,19 @@ export const colTableIscrittiArcadei = [
|
||||
AddCol(DuplicateRec),
|
||||
]
|
||||
|
||||
export const colTableGestoreOrdini = [
|
||||
AddCol({ name: 'name', label_trans: 'products.name' }),
|
||||
AddCol({ name: 'totalQty', label_trans: 'orderscart.totalQty', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({ name: 'totalQtyPreordered', label_trans: 'orderscart.totalQtyPreordered', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({ name: 'price', label_trans: 'order.price', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({ name: 'quantity', label_trans: 'order.quantity', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({ name: 'quantitypreordered', label_trans: 'order.quantitypreordered', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({ name: 'TotalPriceProduct', label_trans: 'orderscart.TotalPriceProduct', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({ name: 'TotalPriceProduct_Sell', label_trans: 'orderscart.TotalPriceProduct_Sell', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({ name: 'TotalPriceProductCalc', label_trans: 'orderscart.TotalPriceProductCalc', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({ name: 'status', label_trans: 'orderscart.status', fieldtype: costanti.FieldType.number }),
|
||||
]
|
||||
|
||||
export const colTableProductInfos = [
|
||||
AddCol({ name: 'code', label_trans: 'products.code', required: true }),
|
||||
AddCol({ name: 'codice_EAN', label_trans: 'products.codice_EAN' }),
|
||||
|
||||
@@ -67,6 +67,7 @@ export const tools = {
|
||||
|
||||
COOK_SEARCH: 'SEARCH_',
|
||||
COOK_SELCART: 'SELCART_',
|
||||
COOK_SELGAS: 'SELGAS',
|
||||
COOK_TAB_CIRCUIT: 'TAB_CIRC',
|
||||
COOK_COSA_PRODOTTI: 'PROD_N',
|
||||
|
||||
@@ -8297,6 +8298,7 @@ export const tools = {
|
||||
mystr = unitrec ? (short ? unitrec.short : unitrec.label) : ''
|
||||
return mystr
|
||||
},
|
||||
|
||||
|
||||
getWeightByUnit(unit: number, short: boolean, weight: number | undefined) {
|
||||
let unitrec = shared_consts.Units_Of_Measure_ListBox.find((rec: any) => rec.value === unit)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { IBaseOrder, ICart, IOrder, IOrderCart, IProduct, IProductsState, IProductInfo, ICatProd, IUserShort } from 'model'
|
||||
import { IBaseOrder, ICart, IOrder, IOrderCart, IProduct, IProductsState, IProductInfo, ICatProd, IUserShort, IGasordine } from 'model'
|
||||
|
||||
import { Api } from '@api'
|
||||
import { serv_constants } from '@src/store/Modules/serv_constants'
|
||||
@@ -195,42 +195,52 @@ export const useProducts = defineStore('Products', {
|
||||
return state.cart
|
||||
},
|
||||
|
||||
getOrdersAllCart: (state: IProductsState) => (): IOrderCart[] => {
|
||||
return state.orders
|
||||
getOrdersAllCart: (state: IProductsState) => (idGasordine: string): IOrderCart[] => {
|
||||
return state.orders.filter((rec: IOrderCart) => {
|
||||
if ((idGasordine && !rec.items?.some(item => item.order.idGasordine === idGasordine))) {
|
||||
return false; // Skip records not matching gasordine condition
|
||||
}
|
||||
return true
|
||||
})
|
||||
},
|
||||
|
||||
getNumOrders: (state: IProductsState) => (): number => {
|
||||
return state.orders.length
|
||||
},
|
||||
|
||||
getOrdersCart: (state: IProductsState) => (tipoord: number, hasGasordine: any): IOrderCart[] | undefined => {
|
||||
if (tipoord === shared_consts.OrderStat.IN_CORSO.value)
|
||||
return state.orders.filter((rec: IOrderCart) => ((rec.status ? rec.status : 0) <= shared_consts.OrderStatus.CHECKOUT_SENT)
|
||||
&& (hasGasordine ? rec.items?.some(item => item.order.idGasordine) : true))
|
||||
else if (tipoord === shared_consts.OrderStat.PREPARED.value)
|
||||
return state.orders.filter((rec: IOrderCart) => (rec.status === shared_consts.OrderStatus.PREPARED)
|
||||
&& (hasGasordine ? rec.items?.some(item => item.order.idGasordine) : true))
|
||||
else if (tipoord === shared_consts.OrderStat.CONFERMATI.value)
|
||||
return state.orders.filter((rec: IOrderCart) => (rec.status === shared_consts.OrderStatus.ORDER_CONFIRMED)
|
||||
&& (hasGasordine ? rec.items?.some(item => item.order.idGasordine) : true))
|
||||
else if (tipoord === shared_consts.OrderStat.PAGATI.value)
|
||||
return state.orders.filter((rec: IOrderCart) => (rec.status === shared_consts.OrderStatus.PAYED)
|
||||
&& (hasGasordine ? rec.items?.some(item => item.order.idGasordine) : true))
|
||||
else if (tipoord === shared_consts.OrderStat.DELIVERED.value)
|
||||
return state.orders.filter((rec: IOrderCart) => (rec.status === shared_consts.OrderStatus.DELIVERED)
|
||||
&& (hasGasordine ? rec.items?.some(item => item.order.idGasordine) : true))
|
||||
else if (tipoord === shared_consts.OrderStat.SHIPPED.value)
|
||||
return state.orders.filter((rec: IOrderCart) => (rec.status === shared_consts.OrderStatus.SHIPPED)
|
||||
&& (hasGasordine ? rec.items?.some(item => item.order.idGasordine) : true))
|
||||
else if (tipoord === shared_consts.OrderStat.RECEIVED.value)
|
||||
return state.orders.filter((rec: IOrderCart) => (rec.status === shared_consts.OrderStatus.RECEIVED)
|
||||
&& (hasGasordine ? rec.items?.some(item => item.order.idGasordine) : true))
|
||||
else if (tipoord === shared_consts.OrderStat.COMPLETATI.value)
|
||||
return state.orders.filter((rec: IOrderCart) => (rec.status === shared_consts.OrderStatus.COMPLETED)
|
||||
&& (hasGasordine ? rec.items?.some(item => item.order.idGasordine) : true))
|
||||
else if (tipoord === shared_consts.OrderStat.CANCELLATI.value)
|
||||
return state.orders.filter((rec: IOrderCart) => (rec.status === shared_consts.OrderStatus.CANCELED)
|
||||
&& (hasGasordine ? rec.items?.some(item => item.order.idGasordine) : true))
|
||||
getOrdersCart: (state: IProductsState) => (tipoord: number, hasGasordine: any, idGasordine: string): IOrderCart[] | undefined => {
|
||||
return state.orders.filter((rec: IOrderCart) => {
|
||||
if (idGasordine && !rec.items?.some(item => item.order.idGasordine === idGasordine)) {
|
||||
return false; // Skip records not matching gasordine condition
|
||||
}
|
||||
|
||||
if (hasGasordine && !rec.items?.some(item => item.order.idGasordine)) {
|
||||
return false; // Skip records not matching gasordine condition
|
||||
}
|
||||
|
||||
switch (tipoord) {
|
||||
case shared_consts.OrderStat.IN_CORSO.value:
|
||||
return !rec.status || rec.status <= shared_consts.OrderStatus.CHECKOUT_SENT;
|
||||
case shared_consts.OrderStat.PREPARED.value:
|
||||
return rec.status === shared_consts.OrderStatus.PREPARED;
|
||||
case shared_consts.OrderStat.CONFERMATI.value:
|
||||
return rec.status === shared_consts.OrderStatus.ORDER_CONFIRMED;
|
||||
case shared_consts.OrderStat.PAGATI.value:
|
||||
return rec.status === shared_consts.OrderStatus.PAYED;
|
||||
case shared_consts.OrderStat.DELIVERED.value:
|
||||
return rec.status === shared_consts.OrderStatus.DELIVERED;
|
||||
case shared_consts.OrderStat.SHIPPED.value:
|
||||
return rec.status === shared_consts.OrderStatus.SHIPPED;
|
||||
case shared_consts.OrderStat.RECEIVED.value:
|
||||
return rec.status === shared_consts.OrderStatus.RECEIVED;
|
||||
case shared_consts.OrderStat.COMPLETATI.value:
|
||||
return rec.status === shared_consts.OrderStatus.COMPLETED;
|
||||
case shared_consts.OrderStat.CANCELLATI.value:
|
||||
return rec.status === shared_consts.OrderStatus.CANCELED;
|
||||
default:
|
||||
return false; // Invalid tipoord
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
existProductInCart: (state: IProductsState) => (idproduct: string): boolean => {
|
||||
@@ -627,6 +637,23 @@ export const useProducts = defineStore('Products', {
|
||||
})
|
||||
},
|
||||
|
||||
async getGestoreOrdini({ idGasordine }: { idGasordine: string }) {
|
||||
const userStore = useUserStore()
|
||||
|
||||
let useractive = this.userActive._id
|
||||
if (!useractive)
|
||||
useractive = userStore.my._id;
|
||||
|
||||
return Api.SendReq('/cart/' + useractive + '/gestord', 'POST', { idGasordine })
|
||||
.then((res) => {
|
||||
if (res)
|
||||
return res.data.arrout
|
||||
else
|
||||
return []
|
||||
|
||||
})
|
||||
},
|
||||
|
||||
async addToCart({ product, order, addqty }: { product: IProduct, order: IOrder, addqty: boolean }) {
|
||||
|
||||
const userStore = useUserStore()
|
||||
@@ -882,7 +909,7 @@ export const useProducts = defineStore('Products', {
|
||||
|
||||
|
||||
if (qta >= 0) {
|
||||
let totalPrice = this.cart.totalPrice ? this.cart.totalPrice.toFixed(2): 0
|
||||
let totalPrice = this.cart.totalPrice ? this.cart.totalPrice.toFixed(2) : 0
|
||||
let tot = totalPrice + ' €'
|
||||
msg = t('ecomm.prod_sul_carrello', { strprod, qty: qta, tot })
|
||||
}
|
||||
@@ -1075,9 +1102,60 @@ export const useProducts = defineStore('Products', {
|
||||
})
|
||||
},
|
||||
|
||||
|
||||
getStrInfoOrder(t: any, order: IOrder) {
|
||||
let mystr = ''
|
||||
let qtyrisult: any
|
||||
|
||||
if (order.product) {
|
||||
let qtystr = ''
|
||||
let qtynum = 0
|
||||
if (order.quantity > 0)
|
||||
qtynum += order.quantity;
|
||||
if (order.quantitypreordered > 0)
|
||||
qtynum += order.quantitypreordered;
|
||||
|
||||
if (order.product.productInfo.sfuso && order.product.productInfo.weight)
|
||||
qtyrisult = qtynum * order.product.productInfo.weight;
|
||||
else
|
||||
qtyrisult = qtynum + ' x ' + order.product.productInfo.weight;
|
||||
|
||||
qtystr += qtyrisult + ' ' + tools.getUnitsMeasure(order.product.productInfo.unit, true, order.product.productInfo.weight);
|
||||
|
||||
if (order.quantitypreordered > 0)
|
||||
qtystr += ' Pre-Ordinati';
|
||||
|
||||
mystr += '✅ [' + qtystr + '] ' + order.product.productInfo.name + ' a ' + order.price + '€ ' + (order.after_price ? order.after_price : '') + '<br>Totale = ' + order.TotalPriceProduct + '€';
|
||||
|
||||
}
|
||||
return mystr
|
||||
},
|
||||
|
||||
getGasordines() {
|
||||
const globalStore = useGlobalStore()
|
||||
|
||||
const myarr: any = [{
|
||||
id: 0,
|
||||
label: 'Tutti',
|
||||
value: ''
|
||||
}]
|
||||
let ind = 1
|
||||
globalStore.gasordines.forEach((gasordine: IGasordine) => {
|
||||
myarr.push(
|
||||
{
|
||||
id: ind,
|
||||
label: gasordine.name,
|
||||
value: gasordine._id
|
||||
})
|
||||
|
||||
ind++
|
||||
})
|
||||
|
||||
return myarr
|
||||
},
|
||||
|
||||
|
||||
},
|
||||
|
||||
|
||||
|
||||
})
|
||||
|
||||
|
||||
@@ -642,6 +642,14 @@
|
||||
></q-btn>
|
||||
<br />
|
||||
</div>
|
||||
<div class="row">
|
||||
<q-btn
|
||||
label="Genera CSV Ordine Prodotti"
|
||||
color="primary"
|
||||
@click="EseguiFunz('GeneraCSVOrdineProdotti')"
|
||||
></q-btn>
|
||||
<br />
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" src="./dbop.ts">
|
||||
</script>
|
||||
|
||||
41
src/views/admin/gestoreordini/gestoreordini.scss
Executable file
41
src/views/admin/gestoreordini/gestoreordini.scss
Executable file
@@ -0,0 +1,41 @@
|
||||
$heightBtn: 100%;
|
||||
|
||||
.card .product-image {
|
||||
height: 300px;
|
||||
}
|
||||
|
||||
.mycol{
|
||||
color:gray;
|
||||
}
|
||||
|
||||
|
||||
.q-item__label--caption{
|
||||
color: blue;
|
||||
}
|
||||
|
||||
.ordstat{
|
||||
text-align: center;
|
||||
border: 1px solid #8778cb;
|
||||
border-radius: 10px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.confermato {
|
||||
font-weight: bold;
|
||||
color: green;
|
||||
}
|
||||
|
||||
.note {
|
||||
font-style: italic;
|
||||
color:blue;
|
||||
}
|
||||
.totali {
|
||||
font-weight: bold;
|
||||
color: blue;
|
||||
font-size: 1rem;
|
||||
}
|
||||
.totaliacq {
|
||||
font-weight: bold;
|
||||
color: red;
|
||||
font-size: 1rem;
|
||||
}
|
||||
236
src/views/admin/gestoreordini/gestoreordini.ts
Executable file
236
src/views/admin/gestoreordini/gestoreordini.ts
Executable file
@@ -0,0 +1,236 @@
|
||||
import { defineComponent, onMounted, ref, watch } from 'vue'
|
||||
import { tools } from '@store/Modules/tools'
|
||||
import { useUserStore } from '@store/UserStore'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { useGlobalStore } from '@store/globalStore'
|
||||
import { useProducts } from '@store/Products'
|
||||
import { useI18n } from '@/boot/i18n'
|
||||
import { toolsext } from '@store/Modules/toolsext'
|
||||
import { useQuasar } from 'quasar'
|
||||
import { costanti } from '@costanti'
|
||||
import { shared_consts } from '@src/common/shared_vuejs'
|
||||
// import MixinBase from '@src/mixins/mixin-base'
|
||||
import { serv_constants } from '@store/Modules/serv_constants'
|
||||
import { fieldsTable } from '@store/Modules/fieldsTable'
|
||||
|
||||
import { CSingleCart } from '../../../components/CSingleCart'
|
||||
import { CTitleBanner, CMyFieldDb } from '@components'
|
||||
import { ICart, IOrder, IOrderCart } from '@src/model'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'gestoreordini',
|
||||
components: { CSingleCart, CTitleBanner, CMyFieldDb },
|
||||
props: {},
|
||||
setup() {
|
||||
const userStore = useUserStore()
|
||||
const globalStore = useGlobalStore()
|
||||
const productStore = useProducts()
|
||||
const $router = useRouter()
|
||||
const $q = useQuasar()
|
||||
const { t } = useI18n()
|
||||
|
||||
const mygestord = ref(<any[] | undefined>[])
|
||||
const myarrrec = ref(<any>{})
|
||||
const myoldrec = ref(<any>{})
|
||||
const templemail = ref('')
|
||||
|
||||
const storeGasordine = ref(<any>'')
|
||||
|
||||
const cosa = ref(0)
|
||||
const arrout = ref(<any[]>[])
|
||||
|
||||
const initialPagination = ref({
|
||||
sortBy: 'desc',
|
||||
descending: false,
|
||||
rowsPerPage: 10,
|
||||
// rowsNumber: xx if getting data from a server
|
||||
})
|
||||
|
||||
const conferma_carrello = ref(false)
|
||||
const conferma_ordine = ref(false)
|
||||
const endload = ref(false)
|
||||
|
||||
const taborders = ref(shared_consts.OrderStat.IN_CORSO.value)
|
||||
const columns = ref(<any>[
|
||||
{
|
||||
name: 'name',
|
||||
required: true,
|
||||
align: 'left',
|
||||
label: 'Nome Prodotto',
|
||||
field: 'nameSurname',
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
name: 'weight',
|
||||
required: true,
|
||||
label: 'Peso',
|
||||
field: 'weight',
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
name: 'price_acquistato',
|
||||
required: true,
|
||||
label: 'Prezzo (P)',
|
||||
field: 'price_acquistato',
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
name: 'totalQuantity',
|
||||
required: true,
|
||||
label: 'Qty',
|
||||
field: 'totalQuantity',
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
name: 'totalPrice_acquistato',
|
||||
required: true,
|
||||
label: 'Totale (P)',
|
||||
field: 'totalPrice_acquistato',
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
name: 'totalPrice',
|
||||
required: true,
|
||||
label: 'Totale (C)',
|
||||
field: 'totalPrice',
|
||||
sortable: true
|
||||
},
|
||||
])
|
||||
|
||||
watch(() => cosa.value, (newval, oldval) => {
|
||||
|
||||
})
|
||||
watch(() => storeGasordine.value, (newval, oldval) => {
|
||||
tools.setCookie(tools.COOK_SELGAS, storeGasordine.value)
|
||||
updateorders()
|
||||
})
|
||||
|
||||
function getCols(props: any) {
|
||||
return props.cols.filter((col: any) => col.name !== 'desc')
|
||||
}
|
||||
|
||||
async function getGestoreOrd() {
|
||||
const hasGasordine: any = (cosa.value === shared_consts.PROD.TUTTI) ? undefined : (cosa.value === shared_consts.PROD.GAS)
|
||||
const ris = await productStore.getGestoreOrdini({ idGasordine: storeGasordine.value })
|
||||
|
||||
return ris
|
||||
}
|
||||
|
||||
async function getGestoreOrdWithTotals() {
|
||||
const orderscart = await getGestoreOrd();
|
||||
|
||||
if (orderscart) {
|
||||
// Calculate totals
|
||||
const totals = {
|
||||
name: 'TOTALI',
|
||||
weight: '',
|
||||
totalQuantity: orderscart.reduce((total: number, rec: any) => total + rec.totalQuantity, 0),
|
||||
totalPrice_acquistato: orderscart.reduce((total: number, rec: any) => total + rec.totalPrice_acquistato, 0),
|
||||
totalPrice: orderscart.reduce((total: number, rec: any) => total + rec.totalPrice, 0),
|
||||
};
|
||||
|
||||
let rowsWithTotals: any = [...orderscart];
|
||||
|
||||
if (tools.isManager()) {
|
||||
// Combine orders and totals
|
||||
rowsWithTotals.push(totals);
|
||||
}
|
||||
|
||||
return rowsWithTotals;
|
||||
} else {
|
||||
return []
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
async function updateorders() {
|
||||
mygestord.value = await getGestoreOrd()
|
||||
if (mygestord.value) {
|
||||
for (const gestord of mygestord.value) {
|
||||
myarrrec.value[gestord._id] = Object.keys(gestord)
|
||||
}
|
||||
}
|
||||
|
||||
arrout.value = await getGestoreOrdWithTotals()
|
||||
|
||||
}
|
||||
|
||||
async function mounted() {
|
||||
|
||||
storeGasordine.value = tools.getCookie(tools.COOK_SELGAS, '')
|
||||
|
||||
await userStore.newsletterload(false)
|
||||
await productStore.loadProducts()
|
||||
|
||||
taborders.value = -1
|
||||
|
||||
await updateorders()
|
||||
|
||||
if (taborders.value === -1)
|
||||
taborders.value = shared_consts.OrderStat.IN_CORSO.value
|
||||
|
||||
endload.value = true
|
||||
}
|
||||
|
||||
function CanBeShipped() {
|
||||
return productStore.cart.items!.filter((rec) => rec.order.product!.canBeShipped).length
|
||||
}
|
||||
|
||||
function CanBeBuyOnline() {
|
||||
return productStore.cart.items!.filter((rec) => rec.order.product!.canBeBuyOnline).length
|
||||
}
|
||||
|
||||
function getnumsteps() {
|
||||
let numsteps = 1
|
||||
|
||||
if (CanBeShipped())
|
||||
numsteps++
|
||||
if (CanBeBuyOnline())
|
||||
numsteps++
|
||||
|
||||
return numsteps
|
||||
}
|
||||
|
||||
function docheckout() {
|
||||
|
||||
// Può essere spedito?
|
||||
|
||||
if (CanBeShipped()) {
|
||||
// mostra form di spedizione
|
||||
}
|
||||
|
||||
if (CanBeBuyOnline()) {
|
||||
// mostra form di acquisto Online
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
onMounted(mounted)
|
||||
|
||||
return {
|
||||
userStore,
|
||||
costanti,
|
||||
tools,
|
||||
toolsext,
|
||||
shared_consts,
|
||||
globalStore,
|
||||
columns,
|
||||
taborders,
|
||||
getGestoreOrd,
|
||||
updateorders,
|
||||
getCols,
|
||||
endload,
|
||||
getGestoreOrdWithTotals,
|
||||
productStore,
|
||||
t,
|
||||
initialPagination,
|
||||
cosa,
|
||||
templemail,
|
||||
fieldsTable,
|
||||
arrout,
|
||||
storeGasordine,
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
117
src/views/admin/gestoreordini/gestoreordini.vue
Executable file
117
src/views/admin/gestoreordini/gestoreordini.vue
Executable file
@@ -0,0 +1,117 @@
|
||||
<template>
|
||||
<q-page>
|
||||
<CTitleBanner title="Ordini"></CTitleBanner>
|
||||
<q-spinner v-if="!endload" color="primary" size="3em" :thickness="2" />
|
||||
|
||||
<div class="q-gutter-md text-center">
|
||||
<q-btn-toggle
|
||||
v-model="cosa"
|
||||
push
|
||||
rounded
|
||||
glossy
|
||||
toggle-color="purple"
|
||||
:options="[
|
||||
{ value: shared_consts.PROD.TUTTI, slot: 'tutti' },
|
||||
{ value: shared_consts.PROD.BOTTEGA, slot: 'bottega' },
|
||||
{ value: shared_consts.PROD.GAS, slot: 'gas' },
|
||||
]"
|
||||
>
|
||||
<template v-slot:tutti>
|
||||
<div class="row items-center no-wrap">
|
||||
<div class="text-center">
|
||||
{{ t('gas.tutti') }}
|
||||
</div>
|
||||
<q-icon right name="fas fa-user-friends" />
|
||||
</div>
|
||||
</template>
|
||||
<template v-slot:gas>
|
||||
<div class="row items-center no-wrap">
|
||||
<div class="text-center">
|
||||
{{ t('gas.ordina_sul_gas') }}
|
||||
</div>
|
||||
<q-icon right name="fas fa-user-friends" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template v-slot:bottega>
|
||||
<div class="row items-center no-wrap">
|
||||
<div class="text-center">
|
||||
{{ t('gas.bottega') }}
|
||||
</div>
|
||||
<q-icon right name="fas fa-store" />
|
||||
</div>
|
||||
</template>
|
||||
</q-btn-toggle>
|
||||
</div>
|
||||
|
||||
<div v-if="endload" class="panel">
|
||||
<q-select
|
||||
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
|
||||
outlined
|
||||
v-model="storeGasordine"
|
||||
:options="productStore.getGasordines()"
|
||||
:label="t('products.gasordine') + `:`"
|
||||
emit-value
|
||||
map-options
|
||||
>
|
||||
</q-select>
|
||||
|
||||
<div class="q-pa-sm" v-if="arrout">
|
||||
<q-table
|
||||
:columns="columns"
|
||||
row-key="numorder"
|
||||
:pagination="initialPagination"
|
||||
:rows="arrout"
|
||||
>
|
||||
<template v-slot:body="props">
|
||||
<q-tr :props="props">
|
||||
<q-td key="name" :props="props">
|
||||
<span v-if="props.row.name"> {{ props.row.name }}</span>
|
||||
</q-td>
|
||||
<q-td key="weight" :props="props">
|
||||
<span v-if="props.row.weight">
|
||||
{{ props.row.weight }}
|
||||
{{ tools.getUnitsMeasure(props.row.unit, true) }}</span
|
||||
>
|
||||
</q-td>
|
||||
<q-td key="price_acquistato" :props="props">
|
||||
<span v-if="props.row.price_acquistato">
|
||||
{{ props.row.price_acquistato.toFixed(2) }} €
|
||||
</span>
|
||||
</q-td>
|
||||
<q-td key="totalQuantity" :props="props">
|
||||
<span v-if="props.row.totalQuantity">
|
||||
|
||||
{{ props.row.totalQuantity }}</span
|
||||
>
|
||||
</q-td>
|
||||
<q-td key="totalPrice_acquistato" :props="props">
|
||||
<span v-if="props.row.totalPrice_acquistato">
|
||||
<span :class="props.row.name !== 'TOTALI' ? '' : 'totaliacq'">
|
||||
{{ props.row.totalPrice_acquistato.toFixed(2) }} €
|
||||
</span
|
||||
>
|
||||
</span>
|
||||
</q-td>
|
||||
<q-td key="totalPrice" :props="props">
|
||||
<span v-if="props.row.totalPrice">
|
||||
<span :class="props.row.name !== 'TOTALI' ? '' : 'totali'">
|
||||
{{ props.row.totalPrice.toFixed(2) }} €
|
||||
</span
|
||||
>
|
||||
</span>
|
||||
</q-td>
|
||||
</q-tr>
|
||||
</template>
|
||||
</q-table>
|
||||
</div>
|
||||
</div>
|
||||
</q-page>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./gestoreordini.ts">
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './gestoreordini';
|
||||
</style>
|
||||
1
src/views/admin/gestoreordini/index.ts
Executable file
1
src/views/admin/gestoreordini/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export {default as gestoreordini} from './orderInfo.vue'
|
||||
@@ -36,6 +36,8 @@ export default defineComponent({
|
||||
|
||||
const cosa = ref(0)
|
||||
|
||||
const arrout = ref(<any[]>[])
|
||||
|
||||
const initialPagination = ref({
|
||||
sortBy: 'desc',
|
||||
descending: false,
|
||||
@@ -47,6 +49,8 @@ export default defineComponent({
|
||||
const conferma_ordine = ref(false)
|
||||
const endload = ref(false)
|
||||
|
||||
const storeGasordine = ref(<any>'')
|
||||
|
||||
const taborders = ref(shared_consts.OrderStat.IN_CORSO.value)
|
||||
const statusnow = ref(0)
|
||||
const arrnumstatus = ref(<any[]>[])
|
||||
@@ -165,7 +169,16 @@ export default defineComponent({
|
||||
])
|
||||
|
||||
watch(() => cosa.value, (newval, oldval) => {
|
||||
updateorders(true)
|
||||
})
|
||||
|
||||
watch(() => taborders.value, (newval, oldval) => {
|
||||
updateorders(false)
|
||||
})
|
||||
|
||||
watch(() => storeGasordine.value, (newval, oldval) => {
|
||||
tools.setCookie(tools.COOK_SELGAS, storeGasordine.value)
|
||||
updateorders(true)
|
||||
})
|
||||
|
||||
// const { setValDb, getValDb } = MixinBase()
|
||||
@@ -176,7 +189,7 @@ export default defineComponent({
|
||||
|
||||
function getOrdersCart(): IOrderCart[] | undefined {
|
||||
const hasGasordine: any = (cosa.value === shared_consts.PROD.TUTTI) ? undefined : (cosa.value === shared_consts.PROD.GAS)
|
||||
const ris = productStore.getOrdersCart(taborders.value, hasGasordine)
|
||||
const ris = productStore.getOrdersCart(taborders.value, hasGasordine, storeGasordine.value)
|
||||
|
||||
return ris
|
||||
}
|
||||
@@ -184,7 +197,7 @@ export default defineComponent({
|
||||
function getOrdersCartWithTotals(): any[] {
|
||||
const orderscart = getOrdersCart();
|
||||
|
||||
if (orderscart) {
|
||||
if (orderscart && taborders.value > 0) {
|
||||
// Calculate totals
|
||||
const totals = {
|
||||
created_at: new Date(),
|
||||
@@ -216,10 +229,12 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
function getAllOrdersCart() {
|
||||
return productStore.getOrdersAllCart()
|
||||
return productStore.getOrdersAllCart(storeGasordine.value)
|
||||
}
|
||||
|
||||
function updateorders() {
|
||||
function updateorders(updatetab: boolean) {
|
||||
arrout.value = []
|
||||
|
||||
myorderscart.value = getOrdersCart()
|
||||
if (myorderscart.value) {
|
||||
for (const orderscart of myorderscart.value) {
|
||||
@@ -227,19 +242,22 @@ export default defineComponent({
|
||||
}
|
||||
}
|
||||
|
||||
const allorders = getAllOrdersCart()
|
||||
for (const status of [15, 2, 3, 4, 5, 6, 7, 8, 10]) {
|
||||
arrnumstatus.value[status] = allorders.filter((rec) => (rec.status === status)).reduce((sum, item) => sum + 1, 0)
|
||||
if (updatetab) {
|
||||
const allorders = getAllOrdersCart()
|
||||
for (const status of [15, 2, 3, 4, 5, 6, 7, 8, 10]) {
|
||||
arrnumstatus.value[status] = allorders.filter((rec) => (rec.status === status)).reduce((sum, item) => sum + 1, 0)
|
||||
}
|
||||
|
||||
selectfirstavailable()
|
||||
}
|
||||
|
||||
selectfirstavailable()
|
||||
|
||||
|
||||
arrout.value = getOrdersCartWithTotals()
|
||||
|
||||
}
|
||||
|
||||
function selectfirstavailable() {
|
||||
|
||||
taborders.value = -1
|
||||
Object.keys(arrnumstatus.value).forEach((stat: any) => {
|
||||
if (arrnumstatus.value[stat] > 0) {
|
||||
if (taborders.value === -1)
|
||||
@@ -250,12 +268,14 @@ export default defineComponent({
|
||||
|
||||
async function mounted() {
|
||||
|
||||
taborders.value = -1
|
||||
storeGasordine.value = tools.getCookie(tools.COOK_SELGAS, '')
|
||||
|
||||
await userStore.newsletterload(false)
|
||||
await productStore.loadProducts()
|
||||
|
||||
taborders.value = -1
|
||||
|
||||
updateorders()
|
||||
updateorders(true)
|
||||
|
||||
if (taborders.value === -1)
|
||||
taborders.value = shared_consts.OrderStat.IN_CORSO.value
|
||||
@@ -328,7 +348,7 @@ export default defineComponent({
|
||||
|
||||
if (statusnow.value === status) {
|
||||
order.status = statusnow.value
|
||||
updateorders()
|
||||
updateorders(true)
|
||||
tools.showPositiveNotif($q, 'Ordine ' + statusStr)
|
||||
}
|
||||
// change_field('status')
|
||||
@@ -398,6 +418,8 @@ export default defineComponent({
|
||||
sendMailTest,
|
||||
templemail,
|
||||
fieldsTable,
|
||||
storeGasordine,
|
||||
arrout,
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -43,18 +43,41 @@
|
||||
</template>
|
||||
</q-btn-toggle>
|
||||
</div>
|
||||
|
||||
|
||||
<div v-if="endload" class="panel">
|
||||
<q-tabs v-model="taborders" inline-label class="text-blue">
|
||||
<span v-for="(stat, index) of shared_consts.OrderStat" :key="index">
|
||||
<q-tab v-if="arrnumstatus[stat.value] > 0" :class="stat.color" :name="stat.value" :icon="stat.icon"
|
||||
:label="`(` + arrnumstatus[stat.value] + `) ` + stat.label" />
|
||||
<q-tab
|
||||
v-if="arrnumstatus[stat.value] > 0"
|
||||
:class="stat.color"
|
||||
:name="stat.value"
|
||||
:icon="stat.icon"
|
||||
:label="`(` + arrnumstatus[stat.value] + `) ` + stat.label"
|
||||
/>
|
||||
</span>
|
||||
</q-tabs>
|
||||
|
||||
<q-select
|
||||
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
|
||||
outlined
|
||||
v-model="storeGasordine"
|
||||
:options="productStore.getGasordines()"
|
||||
:label="t('products.gasordine') + `:`"
|
||||
emit-value
|
||||
map-options
|
||||
>
|
||||
</q-select>
|
||||
|
||||
<div class="q-pa-sm">
|
||||
<q-table :grid="$q.screen.lt.sm" :hide-header="$q.screen.lt.sm" :columns="columns" row-key="numorder"
|
||||
:pagination="initialPagination" :rows="getOrdersCartWithTotals()">
|
||||
<q-table
|
||||
v-if="taborders > 0"
|
||||
:grid="$q.screen.lt.sm"
|
||||
:hide-header="$q.screen.lt.sm"
|
||||
:columns="columns"
|
||||
row-key="numorder"
|
||||
:pagination="initialPagination"
|
||||
:rows="arrout"
|
||||
>
|
||||
<template v-if="$q.screen.lt.sm" v-slot:item="props">
|
||||
<div class="q-pa-xs col-xs-12 col-sm-6 col-md-4">
|
||||
<q-card class="my-card-shadow yes_shadow">
|
||||
@@ -64,13 +87,21 @@
|
||||
<q-item-label>{{ col.label }}</q-item-label>
|
||||
</q-item-section>
|
||||
<q-item-section side>
|
||||
<q-item-label v-if="col.name === 'created_at'" caption>{{ tools.getstrDateTime(col.value) }}
|
||||
<q-item-label v-if="col.name === 'created_at'" caption
|
||||
>{{ tools.getstrDateTime(col.value) }}
|
||||
</q-item-label>
|
||||
<q-item-label v-else-if="col.name === 'nameSurname'" caption>
|
||||
<q-item-label
|
||||
v-else-if="col.name === 'nameSurname'"
|
||||
caption
|
||||
>
|
||||
<span v-if="props.row.user">
|
||||
<span :class="props.row.user.name !== 'TOTALI' ? '' : 'totali'
|
||||
">{{ tools.getNomeUtenteByRecUser(props.row.user) }}
|
||||
</span></span>
|
||||
<span
|
||||
:class="
|
||||
props.row.user.name !== 'TOTALI' ? '' : 'totali'
|
||||
"
|
||||
>{{ tools.getNomeUtenteByRecUser(props.row.user) }}
|
||||
</span></span
|
||||
>
|
||||
</q-item-label>
|
||||
<q-item-label v-else-if="col.name === 'items'" caption>
|
||||
<div
|
||||
@@ -85,33 +116,53 @@
|
||||
item.order.product.productInfo
|
||||
"
|
||||
>
|
||||
{{ productStore.getStrInfoOrder(t, item.order) }}
|
||||
{{ item.order.product.productInfo.name }} ({{
|
||||
productStore.getQuantityByOrder(t, item.order)
|
||||
}})<br />
|
||||
</div>
|
||||
</div>
|
||||
</q-item-label>
|
||||
<q-item-label v-else-if="col.name === 'totalPrice'" caption>
|
||||
<q-item-label
|
||||
v-else-if="col.name === 'totalPrice'"
|
||||
caption
|
||||
>
|
||||
{{ props.row.totalPrice }} €
|
||||
</q-item-label>
|
||||
<q-item-label v-else-if="col.name === 'totalPriceCalc'" caption>
|
||||
<q-item-label
|
||||
v-else-if="col.name === 'totalPriceCalc'"
|
||||
caption
|
||||
>
|
||||
{{ props.row.totalPriceCalc }} €
|
||||
</q-item-label>
|
||||
<q-item-label v-else-if="col.name === 'status'" caption>
|
||||
{{ shared_consts.getStatusStr(props.row.status) }}
|
||||
</q-item-label>
|
||||
<q-item-label v-else-if="col.name === 'comandi'" caption>
|
||||
<div v-if="tools.isManager() &&
|
||||
props.row.user.name !== 'TOTALI'
|
||||
" class="q-pa-sm">
|
||||
<div
|
||||
v-if="
|
||||
tools.isManager() &&
|
||||
props.row.user.name !== 'TOTALI'
|
||||
"
|
||||
class="q-pa-sm"
|
||||
>
|
||||
<q-btn-dropdown rounded dense label="Azioni">
|
||||
<q-list class="text-primary">
|
||||
<q-item v-for="(
|
||||
<q-item
|
||||
v-for="(
|
||||
cmd, index
|
||||
) of shared_consts.OrderCmdStr" :key="index" clickable v-close-popup
|
||||
@click="clickFunz(props.row, cmd.value)">
|
||||
) of shared_consts.OrderCmdStr"
|
||||
:key="index"
|
||||
clickable
|
||||
v-close-popup
|
||||
@click="clickFunz(props.row, cmd.value)"
|
||||
>
|
||||
<q-item-section avatar>
|
||||
<q-avatar :icon="cmd.icon" :color="cmd.color" text-color="white" />
|
||||
<q-avatar
|
||||
:icon="cmd.icon"
|
||||
:color="cmd.color"
|
||||
text-color="white"
|
||||
/>
|
||||
</q-item-section>
|
||||
<q-item-section>
|
||||
<q-item-label>{{ cmd.label }}</q-item-label>
|
||||
@@ -121,8 +172,11 @@
|
||||
</q-btn-dropdown>
|
||||
</div>
|
||||
</q-item-label>
|
||||
|
||||
<q-item-label v-else-if="col.name === 'apri' && props.row._id" caption>
|
||||
|
||||
<q-item-label
|
||||
v-else-if="col.name === 'apri' && props.row._id"
|
||||
caption
|
||||
>
|
||||
<div class="q-pa-sm">
|
||||
<q-btn
|
||||
size="sm"
|
||||
@@ -158,13 +212,25 @@
|
||||
</div>
|
||||
</q-td>
|
||||
<q-td key="comandi" :props="props">
|
||||
<div v-if="tools.isManager() && props.row.user.name !== 'TOTALI'" class="q-pa-sm">
|
||||
<div
|
||||
v-if="tools.isManager() && props.row.user.name !== 'TOTALI'"
|
||||
class="q-pa-sm"
|
||||
>
|
||||
<q-btn-dropdown rounded dense label="Azioni">
|
||||
<q-list class="text-primary">
|
||||
<q-item v-for="(cmd, index) of shared_consts.OrderCmdStr" :key="index" clickable v-close-popup
|
||||
@click="clickFunz(props.row, cmd.value)">
|
||||
<q-item
|
||||
v-for="(cmd, index) of shared_consts.OrderCmdStr"
|
||||
:key="index"
|
||||
clickable
|
||||
v-close-popup
|
||||
@click="clickFunz(props.row, cmd.value)"
|
||||
>
|
||||
<q-item-section avatar>
|
||||
<q-avatar :icon="cmd.icon" :color="cmd.color" text-color="white" />
|
||||
<q-avatar
|
||||
:icon="cmd.icon"
|
||||
:color="cmd.color"
|
||||
text-color="white"
|
||||
/>
|
||||
</q-item-section>
|
||||
<q-item-section>
|
||||
<q-item-label>{{ cmd.label }}</q-item-label>
|
||||
@@ -176,19 +242,22 @@
|
||||
</q-td>
|
||||
<q-td key="numorder" :props="props">
|
||||
<span v-if="props.row.numorder">
|
||||
n. {{ props.row.numorder }}</span>
|
||||
n. {{ props.row.numorder }}</span
|
||||
>
|
||||
</q-td>
|
||||
<q-td key="nameSurname" :props="props">
|
||||
<span v-if="props.row.user">
|
||||
<span :class="props.row.user.name !== 'TOTALI' ? '' : 'totali'">{{
|
||||
tools.getNomeUtenteByRecUser(props.row.user) }}
|
||||
</span></span>
|
||||
<span
|
||||
:class="props.row.user.name !== 'TOTALI' ? '' : 'totali'"
|
||||
>{{ tools.getNomeUtenteByRecUser(props.row.user) }}
|
||||
</span></span
|
||||
>
|
||||
</q-td>
|
||||
<q-td key="created_at" :props="props">
|
||||
{{ tools.getstrDateTime(props.row.created_at) }}
|
||||
<span v-if="taborders === shared_consts.OrderStat.COMPLETATI">
|
||||
<br />Consegnato il:<br />{{
|
||||
tools.getstrDateTime(props.row.date_consegnato)
|
||||
tools.getstrDateTime(props.row.date_consegnato)
|
||||
}}
|
||||
</span>
|
||||
</q-td>
|
||||
@@ -202,7 +271,7 @@
|
||||
"
|
||||
>
|
||||
{{ item.order.product.productInfo.name }} ({{
|
||||
productStore.getQuantityByOrder($t, item.order)
|
||||
productStore.getQuantityByOrder($t, item.order)
|
||||
}})<br />
|
||||
</div>
|
||||
</div>
|
||||
@@ -217,12 +286,14 @@
|
||||
</div>
|
||||
</q-td>
|
||||
<q-td key="totalPrice" :props="props">
|
||||
<span :class="props.row.user.name !== 'TOTALI' ? '' : 'totali'">{{ props.row.totalPrice }} €</span>
|
||||
<span :class="props.row.user.name !== 'TOTALI' ? '' : 'totali'"
|
||||
>{{ props.row.totalPrice }} €</span
|
||||
>
|
||||
</q-td>
|
||||
<q-td key="status" :props="props">
|
||||
<span :class="props.row.status">{{
|
||||
shared_consts.getStatusStr(props.row.status)
|
||||
}}</span>
|
||||
}}</span>
|
||||
<br />
|
||||
<div v-if="props.row.confermato" class="ordstat">
|
||||
{{ tools.getstrDateTime(props.row.date_confermato) }}:
|
||||
|
||||
Reference in New Issue
Block a user