email da inviare ai clienti ...

This commit is contained in:
Surya Paolo
2024-01-09 15:32:21 +01:00
parent 1021331f7c
commit 6dc74b5826
34 changed files with 1318 additions and 486 deletions

View File

@@ -10,14 +10,16 @@ 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 } from '@components'
import { CTitleBanner, CMyFieldDb } from '@components'
import { ICart, IOrder, IOrderCart } from '@src/model'
export default defineComponent({
name: 'OrderInfo',
components: { CSingleCart, CTitleBanner },
components: { CSingleCart, CTitleBanner, CMyFieldDb },
props: {},
setup() {
const userStore = useUserStore()
@@ -30,6 +32,7 @@ export default defineComponent({
const myorderscart = ref(<IOrderCart[] | undefined>[])
const myarrrec = ref(<any>{})
const myoldrec = ref(<any>{})
const templemail = ref('')
const cosa = ref(0)
@@ -48,6 +51,14 @@ export default defineComponent({
const statusnow = ref(0)
const arrnumstatus = ref(<any[]>[])
const columns = ref(<any>[
{
name: 'apri',
align: 'center',
required: false,
label: 'Apri',
field: 'apri',
sortable: false
},
{
name: 'numorder',
required: true,
@@ -89,6 +100,14 @@ export default defineComponent({
])
const columns_Admin = ref(<any>[
{
name: 'apri',
align: 'center',
required: false,
label: 'Apri',
field: 'apri',
sortable: false
},
{
name: 'numorder',
required: true,
@@ -146,7 +165,7 @@ export default defineComponent({
])
watch(() => cosa.value, (newval, oldval) => {
})
// const { setValDb, getValDb } = MixinBase()
@@ -158,7 +177,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)
return ris
}
@@ -170,9 +189,10 @@ export default defineComponent({
const totals = {
created_at: new Date(),
items: null,
user:{
user: {
name: 'TOTALI',
surname: '',
email: '',
},
status: 0,
// Add other properties as needed
@@ -227,6 +247,7 @@ export default defineComponent({
async function mounted() {
await userStore.newsletterload(false)
await productStore.loadProducts()
taborders.value = -1
@@ -312,6 +333,41 @@ export default defineComponent({
})
}
async function sendMailToAll() {
const orders = getOrdersCartWithTotals()
let res = null
let inviate = 0
for (const ord of orders) {
res = await productStore.sendMailToTheBuyer(ord._id, templemail.value, false)
if (res && res.emailsend)
inviate++
}
if (inviate > 0) {
tools.showPositiveNotif($q, t('orderscart.email_sent', { inviate }))
} else {
tools.showNegativeNotif($q, t('orderscart.email_not_send'))
}
}
async function sendMailTest() {
const orders = getOrdersCartWithTotals()
if (orders && orders.length > 0) {
const res = await productStore.sendMailToTheBuyer(orders[0]._id, templemail.value, true)
if (res && res.emailsend) {
tools.showPositiveNotif($q, t('reset.email_sent'))
} else {
tools.showNegativeNotif($q, t('orderscart.email_not_send'))
}
}
}
onMounted(mounted)
return {
@@ -320,6 +376,7 @@ export default defineComponent({
tools,
toolsext,
shared_consts,
globalStore,
columns,
taborders,
arrnumstatus,
@@ -334,6 +391,10 @@ export default defineComponent({
t,
initialPagination,
cosa,
sendMailToAll,
sendMailTest,
templemail,
fieldsTable,
}
}
})

View File

@@ -4,54 +4,64 @@
<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') }}
<br />
{{ t('gas.x_prodotti_gas', { qta: productStore.getNumQtaGas()+productStore.getNumQtaBottega() }) }}
</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') }}
<br />
{{ t('gas.x_prodotti_gas', { qta: productStore.getNumQtaGas() }) }}
</div>
<q-icon right name="fas fa-user-friends" />
</div>
</template>
<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') }}
<br />
{{
t('gas.x_prodotti_gas', {
qta:
productStore.getNumQtaGas() +
productStore.getNumQtaBottega(),
})
}}
</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') }}
<br />
{{
t('gas.x_prodotti_gas', { qta: productStore.getNumQtaGas() })
}}
</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') }}
<br />
{{
t('gas.x_prodotti_bottega', { qta: productStore.getNumQtaBottega() })
}}
</div>
<q-icon right name="fas fa-store" />
</div>
</template>
</q-btn-toggle>
</div>
˚
<template v-slot:bottega>
<div class="row items-center no-wrap">
<div class="text-center">
{{ t('gas.bottega') }}
<br />
{{
t('gas.x_prodotti_bottega', {
qta: productStore.getNumQtaBottega(),
})
}}
</div>
<q-icon right name="fas fa-store" />
</div>
</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">
@@ -105,7 +115,12 @@
:key="index"
>
<div
v-if="!!item && item.order && item.order.product && item.order.product.productInfo"
v-if="
!!item &&
item.order &&
item.order.product &&
item.order.product.productInfo
"
>
{{ item.order.product.productInfo.name }} ({{
productStore.getQuantityByOrder(t, item.order)
@@ -156,6 +171,17 @@
</q-btn-dropdown>
</div>
</q-item-label>
<q-item-label v-else-if="col.name === 'apri'" caption>
<div class="q-pa-sm">
<q-btn
size="sm"
dense
icon="fas fa-filter"
:label="t('ecomm.apriordine')"
:to="`/orderscart/{$idOrdersCart}`"
></q-btn>
</div>
</q-item-label>
<q-item-label v-else caption>{{
col.value
}}</q-item-label>
@@ -167,6 +193,18 @@
</template>
<template v-else v-slot:body="props">
<q-tr :props="props">
<q-td key="apri" :props="props">
<div class="q-pa-sm">
<q-btn
color="primary"
size="sm"
dense
icon="far fa-file-alt"
:label="t('ecomm.apriordine')"
:to="`/orderscart/${props.row._id}`"
></q-btn>
</div>
</q-td>
<q-td key="numorder" :props="props">
<span v-if="props.row.numorder">
&nbsp; n. {{ props.row.numorder }}</span
@@ -190,7 +228,13 @@
</q-td>
<q-td key="items" :props="props">
<div v-for="(item, index) of props.row.items" :key="index">
<div v-if="!!item.order && item.order.product && item.order.product.productInfo">
<div
v-if="
!!item.order &&
item.order.product &&
item.order.product.productInfo
"
>
{{ item.order.product.productInfo.name }} ({{
productStore.getQuantityByOrder($t, item.order)
}})<br />
@@ -212,7 +256,9 @@
<br />
<div v-if="props.row.confermato" class="ordstat">
{{ tools.getstrDateTime(props.row.date_confermato) }}:
<span class="ordstat confermato">{{ $t('ecomm.confermato') }}</span>
<span class="ordstat confermato">{{
$t('ecomm.confermato')
}}</span>
</div>
<div v-if="props.row.pagato" class="ordstat">
{{ tools.getstrDateTime(props.row.date_pagato) }}:
@@ -265,6 +311,45 @@
</q-table>
</div>
<!-- Emails -->
<div v-if="tools.isManager()" class="q-ma-sm q-pa-sm row">
<q-select
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
rounded
style="width: 300px"
outlined
v-model="templemail"
:options="globalStore.templemail"
:option-value="fieldsTable.getKeyByTable('templemail')"
:option-label="fieldsTable.getLabelByTable('templemail')"
label="Scegli il tipo di Email:"
emit-value
map-options
>
</q-select>
<CMyFieldDb
title="Email di Test"
mykey="EMAIL_TEST"
:serv="true"
:type="costanti.FieldType.string"
>
</CMyFieldDb>
<q-btn
color="primary"
icon="fas fa-check"
:label="t('orderscart.sendmail_test')"
@click="sendMailTest"
></q-btn>
<q-btn
color="positive"
icon="mail"
:label="t('orderscart.sendmail')"
@click="sendMailToAll"
></q-btn>
</div>
<!--
<div v-for="(ordercart, index) in getOrdersCart" :key="index">