- Sending Newsletter, others settings.

This commit is contained in:
Paolo Arena
2019-12-04 18:21:17 +01:00
parent 6f2e4f891e
commit 4dddff5df1
10 changed files with 257 additions and 87 deletions

View File

@@ -8,7 +8,7 @@
<CFacebookFrame myclass="text-center" :fbimage="getValDb('FBPAGE_IMG', false)"
:urlfbpage="getValDb('FBPAGE_FRAME')" :title="getValDb('FBPAGE_TITLE', false)">
:urlfbpage="getValDb('FBPAGE_FRAME', false)" :title="getValDb('FBPAGE_TITLE', false)">
</CFacebookFrame>
@@ -65,7 +65,7 @@
<div class="mycontacts_text">
<i v-if="getValDb('MAIN_EMAIL', false)" aria-hidden="true"
class="q-icon fas fa-envelope q-mx-sm"></i>
<a :href="`mailto:` + getValDb('MAIN_EMAIL', false)" class="links">{{ getValDb('MAIN_EMAIL')
<a :href="`mailto:` + getValDb('MAIN_EMAIL', false)" class="links">{{ getValDb('MAIN_EMAIL', false)
}}</a><br>
<div style="margin-bottom: 20px;"></div>
<div v-for="rec in getarrValDb('CONTACTS_EMAIL_CELL', false)"

View File

@@ -14,31 +14,66 @@
:header-class="getmymenuclass(myitemmenu)"
active-class="my-menu-active">
<q-expansion-item v-for="(child2, index) in myitemmenu.routes2"
:key="index"
:to="getroute(child2)"
:header-inset-level="child2.level_child"
:duration="300"
:icon="child2.materialIcon"
active-class="my-menu-active"
expand-icon-class="my-menu-icon-none"
class="item item-link drawer-closer cursor-pointer my-menu"
:label="tools.getLabelByItem(child2, mythis)">
<q-expansion-item v-if="!!child2.routes2" v-for="(child3, index) in child2.routes2"
:key="index"
:to="getroute(child3)"
:header-inset-level="child3.level_child"
:duration="300"
:icon="child3.materialIcon"
:expand-icon="child3.icon"
expand-icon-class="my-menu-separat"
active-class="my-menu-active"
class="item item-link drawer-closer cursor-pointer my-menu"
:label="tools.getLabelByItem(child3, mythis)">
<div v-for="(child2, index) in myitemmenu.routes2" :key="index">
<q-expansion-item
v-if="!child2.routes2"
:to="getroute(child2)"
:header-inset-level="child2.level_child"
:duration="300"
:icon="child2.materialIcon"
active-class="my-menu-active"
expand-icon-class="my-menu-icon-none"
class="item item-link drawer-closer cursor-pointer my-menu"
:label="tools.getLabelByItem(child2, mythis)">
<q-expansion-item v-if="!!child2.routes2" v-for="(child3, index) in child2.routes2"
:key="index"
:to="getroute(child3)"
:header-inset-level="child3.level_child"
:duration="300"
:icon="child3.materialIcon"
:expand-icon="child3.icon"
expand-icon-class="my-menu-separat"
active-class="my-menu-active"
class="item item-link drawer-closer cursor-pointer my-menu"
:label="tools.getLabelByItem(child3, mythis)">
</q-expansion-item>
</q-expansion-item>
</q-expansion-item>
<q-expansion-item
v-else
:header-inset-level="child2.level_parent"
:content-inset-level="child2.level_parent"
:label="tools.getLabelByItem(child2, mythis)"
:icon="child2.materialIcon"
expand-icon-class="my-menu-separat"
:header-class="getmymenuclass(child2)"
active-class="my-menu-active">
<div v-for="(child3, index) in child2.routes2" :key="index">
<q-expansion-item
:to="getroute(child3)"
:header-inset-level="child3.level_child"
:duration="300"
:icon="child3.materialIcon"
active-class="my-menu-active"
expand-icon-class="my-menu-icon-none"
class="item item-link drawer-closer cursor-pointer my-menu"
:label="tools.getLabelByItem(child3, mythis)">
<q-expansion-item v-if="!!child3.routes2" v-for="(child3, index) in child3.routes2"
:key="index"
:to="getroute(child3)"
:header-inset-level="child3.level_child"
:duration="300"
:icon="child3.materialIcon"
:expand-icon="child3.icon"
expand-icon-class="my-menu-separat"
active-class="my-menu-active"
class="item item-link drawer-closer cursor-pointer my-menu"
:label="tools.getLabelByItem(child3, mythis)">
</q-expansion-item>
</q-expansion-item>
</div>
</q-expansion-item>
</div>
</q-expansion-item>
</div>
<div v-else>
@@ -55,24 +90,6 @@
header-class="my-menu"
active-class="my-menu-active">
</q-expansion-item>
<!--
<q-item
clickable
v-ripple
exact
:to="myitemmenu.route"
active-class="my-menu-active">
<q-item-section avatar class="my-menu-icon">
<q-icon :name="myitemmenu.materialIcon"/>
</q-item-section>
<q-item-section class="my-menu">
{{$t(myitemmenu.name)}}
</q-item-section>
</q-item>
-->
</div>
</q-slide-transition>
</div>

View File

@@ -34,7 +34,10 @@ export default class MixinBase extends Vue {
public getValDb(keystr, serv, def?) {
const ris = GlobalStore.getters.getValueSettingsByKey(keystr, serv)
if (ris === '')
return def
if (def !== undefined)
return def
else
return ''
else
return ris
}

View File

@@ -27,6 +27,7 @@ export interface ICfgData {
}
export interface ITemplEmail {
_id?: string
subject?: string
content?: string
options?: ISettings[]
@@ -52,6 +53,7 @@ export interface INewsToSent {
_id: string
idapp?: string
label?: string
templemail_str?: string
numemail_tot?: number
numemail_sent?: number
datetoSent?: Date

View File

@@ -316,7 +316,14 @@ const msgglobal = {
deleted: 'Eliminato',
duplicate: 'Duplica',
notempty: 'Il campo non può essere vuoto',
modified: 'Modificato'
modified: 'Modificato',
showinhome: 'Mostra nella Home',
showinnewsletter: 'Mostra nella Newsletter',
color: 'Colore del titolo',
},
disc: {
typol_code: 'Codice Tipologia',
order: 'Ordinamento',
},
newsletter: {
title: 'Desideri ricevere la nostra Newsletter?',
@@ -331,6 +338,27 @@ const msgglobal = {
acceptlicense: 'Accetto la licenza e i termini',
license: 'Devi prima accettare la licenza e i termini',
submitted: 'Iscritto',
menu: 'Newsletter1',
template: 'Modelli Email',
sendemail: 'Invia',
check: 'Controlla',
sent: 'Già Inviate',
mailinglist: 'Lista Contatti',
settings: 'Impostazioni',
serversettings: 'Server',
others: 'Altro',
templemail: 'Modello Email',
datetoSent: 'DataOra Invio',
activate: 'Attivato',
numemail_tot: 'Email Totali',
numemail_sent: 'Email Inviate',
datestartJob: 'Inizio Invio',
datefinishJob: 'Fine Invio',
lastemailsent_Job: 'Ultima Inviata',
starting_job: 'Invio Iniziato',
finish_job: 'Invio Terminato',
error_job: 'Info Errori',
statesub: 'Sottoscritto',
},
privacy_policy:'Privacy Policy',
cookies: 'Usiamo i Cookie per una migliore prestazione web.'
@@ -639,7 +667,14 @@ const msgglobal = {
deleted: 'Eliminado',
duplicate: 'Duplica',
notempty: 'El campo no puede estar vacío.',
modified: 'Modificado'
modified: 'Modificado',
showinhome: 'Mostrar en la Home',
showinnewsletter: 'Mostrar en el boletín',
color: 'Titulo Color',
},
disc: {
typol_code: 'Código Tipologìa',
order: 'Clasificación',
},
newsletter: {
title: '¿Desea recibir nuestro boletín informativo?',
@@ -653,7 +688,28 @@ const msgglobal = {
typesomething: 'Llenar el campo',
acceptlicense: 'Acepto la licencia y los términos',
license: 'Necesitas aceptar la licencia y los términos primero',
submitted: 'Subscrito'
submitted: 'Subscrito',
menu: 'Newsletter1',
template: 'Plantillas de Email',
sendemail: 'Enviar',
check: 'Verificar',
sent: 'Ya eniado',
mailinglist: 'Lista de contactos',
settings: 'Configuración',
serversettings: 'Servidor',
others: 'Otro',
templemail: 'Plantilla de Email',
datetoSent: 'Fecha y Ora de Envio',
activate: 'Activado',
numemail_tot: 'Email Total',
numemail_sent: 'Email Enviados',
datestartJob: 'Inicio Envio',
datefinishJob: 'Fin Envio',
lastemailsent_Job: 'Ùltimo enviado',
starting_job: 'Comenzó a enviar',
finish_job: 'Envio terminado',
error_job: 'Info Error',
statesub: 'Subscribir',
},
privacy_policy:'Política de privacidad',
cookies: 'Utilizamos cookies para un mejor rendimiento web.'
@@ -961,7 +1017,14 @@ const msgglobal = {
deleted: 'Supprimé',
duplicate: 'Duplique',
notempty: 'Le champ ne peut pas être vide',
modified: 'modifié'
modified: 'modifié',
showinhome: 'Montrer à la Home',
showinnewsletter: 'Afficher dans la Newsletter',
color: 'Couleur du titre',
},
disc: {
typol_code: 'Type de code',
order: 'Ordre',
},
newsletter: {
title: 'Souhaitez-vous recevoir notre newsletter?',
@@ -975,7 +1038,28 @@ const msgglobal = {
typesomething: 'Remplir le champ',
acceptlicense: 'J\'accepte la licence et les termes',
license: 'Vous devez d\'abord accepter la licence et les termes',
submitted: 'Abonné'
submitted: 'Abonné',
menu: 'Newsletter1',
template: 'Modeles Email',
sendemail: 'Envoyer',
check: 'Chèque',
sent: 'Dèjà envoyé',
mailinglist: 'Leste de contacts',
settings: 'Paramèters',
serversettings: 'Serveur',
others: 'Autres',
templemail: 'Model Email',
datetoSent: 'Date et heure d\'envoi',
activate: 'Activé',
numemail_tot: 'Total Email',
numemail_sent: 'Emails envoyés',
datestartJob: 'Inizio Invio',
datefinishJob: 'Fin envoi',
lastemailsent_Job: 'Dernier envoyé',
starting_job: 'Envoyé',
finish_job: 'Envoy Terminé',
error_job: 'info d\'erreur',
statesub: 'Abonné',
},
privacy_policy:'Politique de confidentialité',
cookies: 'Nous utilisons des cookies pour améliorer les performances Web.'
@@ -1282,7 +1366,14 @@ const msgglobal = {
deleted: 'Deleted',
duplicate: 'Duplicate',
notempty: 'Field cannot be empty',
modified: 'Modified'
modified: 'Modified',
showinhome: 'Show in Home',
showinnewsletter: 'Show in the Newsletter',
color: 'Title Color',
},
disc: {
typol_code: 'Tipology Code',
order: 'Order',
},
newsletter: {
title: 'Would you like to receive our Newsletter?',
@@ -1296,7 +1387,28 @@ const msgglobal = {
typesomething: 'Please type something',
acceptlicense: 'I accept the license and terms',
license: 'You need to accept the license and terms first',
submitted: 'Subscribed'
submitted: 'Subscribed',
menu: 'Newsletter1',
template: 'Template Email',
sendemail: 'Send',
check: 'Check',
sent: 'Already Sent',
mailinglist: 'Mailing List',
settings: 'Settings',
serversettings: 'Server',
others: 'Others',
templemail: 'Templates Email',
datetoSent: 'DateTime Send',
activate: 'Activate',
numemail_tot: 'Email Total',
numemail_sent: 'Email Sent',
datestartJob: 'Start Job',
datefinishJob: 'End Job',
lastemailsent_Job: 'Last Sent',
starting_job: 'Job started',
finish_job: 'Sent terminated',
error_job: 'Info Error',
statesub: 'Subscribed',
},
privacy_policy:'Privacy Policy',
cookies: 'We use cookies for better web performance.'
@@ -1605,7 +1717,14 @@ const msgglobal = {
deleted: 'Deleted',
duplicate: 'Duplicate',
notempty: 'Field cannot be empty',
modified: 'Modified'
modified: 'Modified',
showinhome: 'Show in Home',
showinnewsletter: 'Show in the Newsletter',
color: 'Title Color',
},
disc: {
typol_code: 'Tipology Code',
order: 'Order',
},
newsletter: {
title: 'Would you like to receive our Newsletter?',
@@ -1619,7 +1738,28 @@ const msgglobal = {
typesomething: 'Please type something',
acceptlicense: 'I accept the license and terms',
license: 'You need to accept the license and terms first',
submitted: 'Subscribed'
submitted: 'Subscribed',
menu: 'Newsletter1',
template: 'Template Email',
sendemail: 'Send',
check: 'Check',
sent: 'Already Sent',
mailinglist: 'Mailing List',
settings: 'Settings',
serversettings: 'Server',
others: 'Others',
templemail: 'Templates Email',
datetoSent: 'DateTime Send',
activate: 'Activate',
numemail_tot: 'Email Total',
numemail_sent: 'Email Sent',
datestartJob: 'Start Job',
datefinishJob: 'End Job',
lastemailsent_Job: 'Last Sent',
starting_job: 'Job started',
finish_job: 'Sent terminated',
error_job: 'Info Error',
statesub: 'Subscribed',
},
privacy_policy:'Privacy Policy',
cookies: 'Wir verwenden Cookies für eine bessere Webleistung.'

View File

@@ -51,7 +51,8 @@ export const removeAuthHeaders = () => {
async function Request(type: string, path: string, payload: any): Promise<Types.AxiosSuccess | Types.AxiosError> {
let ricevuto = false
try {
console.log('Axios Request', path, type, tools.notshowPwd(payload))
if (tools.isDebug())
console.log('Axios Request', path, type, tools.notshowPwd(payload))
let response: AxiosResponse
if (type === 'post' || type === 'put' || type === 'patch') {
response = await axiosInstance[type](path, payload, {

View File

@@ -221,6 +221,11 @@ namespace Getters {
}, 'getValueSettingsByKey')
const gettemplemailbyId = b.read((mystate: IGlobalState) => (templid): string => {
const myrec = mystate.templemail.find((rec) => rec._id === templid)
return (!!myrec) ? myrec.subject : ''
}, 'gettemplemailbyId')
export const getters = {
get testpao1_getter_contatore() {
return testpao1_getter_contatore()
@@ -268,6 +273,10 @@ namespace Getters {
return getrecSettingsByKey()
},
get gettemplemailbyId() {
return gettemplemailbyId()
},
get t() {
return t()
},

View File

@@ -709,7 +709,8 @@ namespace Actions {
await Projects.actions.dbLoad({ checkPending: true, onlyiffirsttime: true })
GlobalStore.state.finishLoading = true
console.log('finishLoading', GlobalStore.state.finishLoading)
if (tools.isDebug())
console.log('finishLoading', GlobalStore.state.finishLoading)
// document.dispatchEvent(new Event('custom-post-render-event'))

View File

@@ -53,6 +53,15 @@ function AddCol(params: IColGridTable) {
}
}
export const colmailinglist = [
AddCol({ name: 'name', label_trans: 'reg.name' }),
AddCol({ name: 'surname', label_trans: 'reg.surname' }),
AddCol({ name: 'email', label_trans: 'reg.email' }),
AddCol({ name: 'statesub', label_trans: 'newsletter.statesub', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'lastid_newstosent', label_trans: 'reg.lastid_newstosent', fieldtype: tools.FieldType.string }),
AddCol(DeleteRec)
]
export const colopzemail = [
AddCol({ name: 'key', label_trans: 'col.key' }),
AddCol({ name: 'label_it', label_trans: 'col.label' }),
@@ -76,19 +85,20 @@ export const coltemplemail = [
AddCol(DeleteRec),
AddCol(DuplicateRec)
]
// SHOW_LAST_N_EV
export const colnewstosent = [
AddCol({ name: 'label', label_trans: 'event.title' }),
AddCol({ name: 'datetoSent', label_trans: 'news.datetoSent', fieldtype: tools.FieldType.date }),
AddCol({ name: 'activate', label_trans: 'news.activate', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'numemail_tot', label_trans: 'news.numemail_tot', fieldtype: tools.FieldType.number }),
AddCol({ name: 'numemail_sent', label_trans: 'news.numemail_sent', fieldtype: tools.FieldType.number }),
AddCol({ name: 'datestartJob', label_trans: 'news.datestartJob', fieldtype: tools.FieldType.date }),
AddCol({ name: 'datefinishJob', label_trans: 'news.datefinishJob', fieldtype: tools.FieldType.date }),
AddCol({ name: 'lastemailsent_Job', label_trans: 'news.lastemailsent_Job', fieldtype: tools.FieldType.date }),
AddCol({ name: 'starting_job', label_trans: 'news.starting_job', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'finish_job', label_trans: 'news.finish_job', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'error_job', label_trans: 'news.error_job', fieldtype: tools.FieldType.string }),
AddCol({ name: 'templemail_str', label_trans: 'newsletter.templemail' }),
AddCol({ name: 'datetoSent', label_trans: 'newsletter.datetoSent', fieldtype: tools.FieldType.date }),
AddCol({ name: 'activate', label_trans: 'newsletter.activate', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'numemail_tot', label_trans: 'newsletter.numemail_tot', fieldtype: tools.FieldType.number }),
AddCol({ name: 'numemail_sent', label_trans: 'newsletter.numemail_sent', fieldtype: tools.FieldType.number }),
AddCol({ name: 'datestartJob', label_trans: 'newsletter.datestartJob', fieldtype: tools.FieldType.date }),
AddCol({ name: 'datefinishJob', label_trans: 'newsletter.datefinishJob', fieldtype: tools.FieldType.date }),
AddCol({ name: 'lastemailsent_Job', label_trans: 'newsletter.lastemailsent_Job', fieldtype: tools.FieldType.date }),
AddCol({ name: 'starting_job', label_trans: 'newsletter.starting_job', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'finish_job', label_trans: 'newsletter.finish_job', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'error_job', label_trans: 'newsletter.error_job', fieldtype: tools.FieldType.string }),
AddCol(DeleteRec),
AddCol(DuplicateRec)
]
@@ -134,13 +144,6 @@ const colTablePermission = [
AddCol(DeleteRec)
]
const colmailinglist = [
AddCol({ name: 'name', label_trans: 'reg.name' }),
AddCol({ name: 'surname', label_trans: 'reg.surname' }),
AddCol({ name: 'email', label_trans: 'reg.email' }),
AddCol({ name: 'lastid_newstosent', label_trans: 'reg.lastid_newstosent', fieldtype: tools.FieldType.string }),
AddCol(DeleteRec)
]
const colTableOperator = [
AddCol({ name: 'username', label_trans: 'reg.username' }),

View File

@@ -2669,12 +2669,15 @@ export const tools = {
return mywidth
} else {
let myw = mywidth + ((this.getwidth(mythis) - mywidth) * 0.4)
console.log('this.getwidth(mythis) = ', this.getwidth(mythis))
let myw = mywidth + ((this.getwidth(mythis) - mywidth) * 0.6)
console.log('myw1 = ', myw)
if (myw > maxwidth)
myw = maxwidth
if (myw > this.getwidth(mythis) - 20)
myw = this.getwidth(mythis) - 20
console.log('myw = ', myw)
return myw
}
},
@@ -2684,18 +2687,6 @@ export const tools = {
return myw * (myheight / mywidth)
},
getheightscale(mythis, myheight, maxheight) {
if (this.isMobile()) {
return myheight
} else {
let myh = myheight + ((this.getheight(mythis) - myheight) * 0.3)
if (myh > maxheight)
myh = maxheight
return myh
}
},
isIsoDate(str) {
if (!/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/.test(str)) return false
const d = new Date(str)
@@ -2829,6 +2820,9 @@ export const tools = {
isObject(anything) {
//Object.create(null) instanceof Object → false
return Object(anything) === anything
},
isDebug() {
return process.env.DEV
}
// getLocale() {