- Import emails from a list to a DB

- Create Template Emails
- Options Email
This commit is contained in:
Paolo Arena
2019-12-04 02:04:54 +01:00
parent 895df43074
commit 8268a09897
20 changed files with 619 additions and 165 deletions

View File

@@ -1,4 +1,4 @@
import { ICfgServer, IConfig, IGlobalState, IListRoutes, IMenuList, StateConnection } from 'model'
import { ICfgServer, IConfig, IGlobalState, IListRoutes, IMenuList, ISettings, StateConnection } from 'model'
import { storeBuilder } from './Store/Store'
import Vue from 'vue'
@@ -68,6 +68,9 @@ const state: IGlobalState = {
type: 0,
_id: 0
},
serv_settings: [],
templemail: [],
opzemail: [],
settings: [],
disciplines: [],
autoplaydisc: 8000,
@@ -171,6 +174,10 @@ namespace Getters {
return GlobalStore.state.disciplines
else if (table === tools.TABNEWSLETTER)
return GlobalStore.state.newstosent
else if (table === tools.TABTEMPLEMAIL)
return GlobalStore.state.templemail
else if (table === tools.TABOPZEMAIL)
return GlobalStore.state.opzemail
else if (table === tools.TABMAILINGLIST)
return GlobalStore.state.mailinglist
else if (table === 'bookings')
@@ -188,13 +195,24 @@ namespace Getters {
}, 'getListByTable')
const getValueSettingsByKey = b.read((mystate: IGlobalState) => (key): any => {
const myrec = mystate.settings.find((rec) => rec.key === key)
const getrecSettingsByKey = b.read((mystate: IGlobalState) => (key, serv): ISettings => {
if (serv)
return mystate.serv_settings.find((rec) => rec.key === key)
else
return mystate.settings.find((rec) => rec.key === key)
}, 'getrecSettingsByKey')
const getValueSettingsByKey = b.read((mystate: IGlobalState) => (key, serv): any => {
const myrec = getters.getrecSettingsByKey(key, serv)
if (!!myrec) {
if (myrec.type === tools.FieldType.date)
return myrec.value_date
if (myrec.type === tools.FieldType.number)
else if (myrec.type === tools.FieldType.number)
return myrec.value_num
else if (myrec.type === tools.FieldType.boolean)
return myrec.value_bool
else
return myrec.value_str
} else {
@@ -246,6 +264,10 @@ namespace Getters {
return getValueSettingsByKey()
},
get getrecSettingsByKey() {
return getrecSettingsByKey()
},
get t() {
return t()
},
@@ -353,6 +375,31 @@ namespace Mutations {
}
}
function setValueSettingsByKey(mystate: IGlobalState, { key, value, serv }) {
// Update the Server
// Update in Memory
let myrec = null
if (serv)
myrec = mystate.serv_settings.find((rec) => rec.key === key)
else
myrec = mystate.settings.find((rec) => rec.key === key)
if (!!myrec) {
if (myrec.type === tools.FieldType.date)
myrec.value_date = value
else if (myrec.type === tools.FieldType.number)
myrec.value_num = value
else if (myrec.type === tools.FieldType.boolean)
myrec.value_bool = value
else
myrec.value_str = value
console.log('setValueSettingsByKey value', value, 'myrec', myrec)
}
}
export const mutations = {
setConta: b.commit(setConta),
setleftDrawerOpen: b.commit(setleftDrawerOpen),
@@ -364,7 +411,8 @@ namespace Mutations {
setPaoArray_Delete: b.commit(setPaoArray_Delete),
NewArray: b.commit(NewArray),
setShowType: b.commit(setShowType),
UpdateValuesInMemory: b.commit(UpdateValuesInMemory)
UpdateValuesInMemory: b.commit(UpdateValuesInMemory),
setValueSettingsByKey: b.commit(setValueSettingsByKey)
}
}
@@ -717,13 +765,14 @@ namespace Actions {
}
async function sendEmailTest(context) {
async function sendEmailTest(context, { previewonly }) {
const usertosend = {
locale: tools.getLocale()
locale: tools.getLocale(),
previewonly
}
console.log(usertosend)
return await Api.SendReq('/signup_news/testemail', 'POST', usertosend)
return await Api.SendReq('/news/testemail', 'POST', usertosend)
.then((res) => {
return res
})

View File

@@ -419,6 +419,57 @@ namespace Actions {
})
}
async function unsubscribe(context, paramquery) {
return await Api.SendReq('/news/unsubscribe', 'POST', paramquery)
.then((res) => {
// console.log("RITORNO 2 ");
// mutations.setServerCode(myres);
if (res.data.code === serv_constants.RIS_UNSUBSCRIBED_OK) {
console.log('DESOTTOSCRITTO ALLA NEWSLETTER !!')
} else {
console.log('Risultato di unsubscribe: ', res.data.code)
}
return { code: res.data.code, msg: res.data.msg }
}).catch((error) => {
return UserStore.getters.getServerCode
})
}
async function importemail(context, paramquery) {
return await Api.SendReq('/news/import', 'POST', paramquery)
.then((res) => {
// console.log("RITORNO 2 ");
// mutations.setServerCode(myres);
return res
}).catch((error) => {
return { numtot: 0, numadded: 0, numalreadyexisted: 0}
})
}
async function newsletterload(context, paramquery) {
return await Api.SendReq('/news/load', 'POST', paramquery)
.then((res) => {
console.log('res', res)
return res.data
}).catch((error) => {
return null
})
}
async function newsletter_setactivate(context, paramquery) {
return await Api.SendReq('/news/setactivate', 'POST', paramquery)
.then((res) => {
console.log('res', res)
return res.data
}).catch((error) => {
return null
})
}
async function signup(context, authData: ISignupOptions) {
console.log('SIGNUP')
@@ -743,7 +794,11 @@ namespace Actions {
resetpwd: b.dispatch(resetpwd),
signin: b.dispatch(signin),
signup: b.dispatch(signup),
vreg: b.dispatch(vreg)
vreg: b.dispatch(vreg),
unsubscribe: b.dispatch(unsubscribe),
importemail: b.dispatch(importemail),
newsletterload: b.dispatch(newsletterload),
newsletter_setactivate: b.dispatch(newsletter_setactivate),
}
}

View File

@@ -2,7 +2,7 @@ import { IColGridTable } from '../../model'
import { lists } from './lists'
import { tools } from '@src/store/Modules/tools'
import { shared_consts } from '@src/common/shared_vuejs'
import { GlobalStore } from '@store'
import { GlobalStore, UserStore } from '@store'
const DeleteRec = {
name: 'deleterec',
@@ -17,6 +17,19 @@ const DeleteRec = {
visuonlyEditVal: true
}
const DuplicateRec = {
name: 'copyrec',
label_trans: 'event.duplicate',
align: 'right',
field: tools.NOFIELD,
sortable: false,
icon: 'fas fa-copy',
action: lists.MenuAction.DUPLICATE_RECTABLE,
askaction: 'db.duplicatedrecord',
visuonlyEditVal: true,
visible: true
}
function AddCol(params: IColGridTable) {
return {
name: params.name,
@@ -40,20 +53,31 @@ function AddCol(params: IColGridTable) {
}
}
const colTableWhere = [
AddCol({ name: 'code', label_trans: 'where.code' }),
AddCol({ name: 'placename', label_trans: 'cal.where' }),
AddCol({ name: 'whereicon', label_trans: 'where.whereicon' }),
AddCol(DeleteRec)
export const colopzemail = [
AddCol({ name: 'key', label_trans: 'col.key' }),
AddCol({ name: 'label_it', label_trans: 'col.label' }),
AddCol(DeleteRec),
AddCol(DuplicateRec)
]
const colcontribtype = [
AddCol({ name: 'label', label_trans: 'proj.longdescr' }),
AddCol({ name: 'showprice', label_trans: 'event.showprice', fieldtype: tools.FieldType.boolean }),
AddCol(DeleteRec)
export const coltemplemail = [
AddCol({ name: 'subject', label_trans: 'templemail.subject' }),
AddCol({ name: 'testoheadermail', label_trans: 'templemail.testoheadermail', fieldtype: tools.FieldType.html }),
AddCol({ name: 'content', label_trans: 'templemail.content', fieldtype: tools.FieldType.html }),
AddCol({ name: 'img', label_trans: 'templemail.img' }),
AddCol({ name: 'content2', label_trans: 'templemail.content2', fieldtype: tools.FieldType.html }),
AddCol({ name: 'img2', label_trans: 'templemail.img2' }),
AddCol({
name: 'options',
label_trans: 'templemail.options',
fieldtype: tools.FieldType.multiselect,
jointable: 'opzemail'
}),
AddCol(DeleteRec),
AddCol(DuplicateRec)
]
const colnewstosent = [
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 }),
@@ -65,6 +89,20 @@ const colnewstosent = [
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(DeleteRec),
AddCol(DuplicateRec)
]
const colTableWhere = [
AddCol({ name: 'code', label_trans: 'where.code' }),
AddCol({ name: 'placename', label_trans: 'cal.where' }),
AddCol({ name: 'whereicon', label_trans: 'where.whereicon' }),
AddCol(DeleteRec)
]
const colcontribtype = [
AddCol({ name: 'label', label_trans: 'proj.longdescr' }),
AddCol({ name: 'showprice', label_trans: 'event.showprice', fieldtype: tools.FieldType.boolean }),
AddCol(DeleteRec)
]
@@ -86,16 +124,8 @@ const coldisciplines = [
fieldtype: tools.FieldType.multiselect,
jointable: 'operators'
}),
AddCol(DeleteRec)
]
const colsettings = [
AddCol({ name: 'key', label_trans: 'col.label' }),
AddCol({ name: 'type', label_trans: 'col.type', fieldtype: tools.FieldType.select, jointable: 'fieldstype' }),
AddCol({ name: 'value_str', label_trans: 'col.value', fieldtype: tools.FieldType.string }),
AddCol({ name: 'value_date', label_trans: 'cal.data', fieldtype: tools.FieldType.date }),
AddCol({ name: 'value_num', label_trans: 'cal.num', fieldtype: tools.FieldType.number }),
AddCol(DeleteRec)
AddCol(DeleteRec),
AddCol(DuplicateRec)
]
const colTablePermission = [
@@ -108,7 +138,7 @@ 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({ name: 'lastid_newstosent', label_trans: 'reg.lastid_newstosent', fieldtype: tools.FieldType.string }),
AddCol(DeleteRec)
]
@@ -128,7 +158,9 @@ const colTableOperator = [
AddCol({ name: 'webpage', label_trans: 'op.webpage' }),
AddCol({ name: 'days_working', label_trans: 'op.days_working' }),
AddCol({ name: 'facebook', label_trans: 'op.facebook' }),
AddCol(DeleteRec)]
AddCol(DeleteRec),
AddCol(DuplicateRec)
]
const colTableEvents = [
AddCol({ name: '_id', label_trans: 'event._id' }),
@@ -169,21 +201,24 @@ const colTableEvents = [
AddCol({ name: 'dupId', label_trans: 'event.dupId' }),
AddCol({ name: 'modified', label_trans: 'event.modified', fieldtype: tools.FieldType.boolean }),
AddCol(DeleteRec),
AddCol({
name: 'copyrec',
label_trans: 'event.duplicate',
align: 'right',
field: tools.NOFIELD,
sortable: false,
icon: 'fas fa-copy',
action: lists.MenuAction.DUPLICATE_RECTABLE,
askaction: 'db.duplicatedrecord',
visuonlyEditVal: true,
required: true,
visible: true
})
AddCol(DuplicateRec)
]
export const fields = {
colSettings: [
AddCol({ name: 'key', label_trans: 'col.label' }),
AddCol({ name: 'type', label_trans: 'col.type', fieldtype: tools.FieldType.select, jointable: 'fieldstype' }),
AddCol({ name: 'value_str', label_trans: 'col.value', fieldtype: tools.FieldType.string }),
AddCol({ name: 'value_date', label_trans: 'cal.data', fieldtype: tools.FieldType.date }),
AddCol({ name: 'value_num', label_trans: 'cal.num', fieldtype: tools.FieldType.number }),
AddCol({ name: 'value_bool', label_trans: 'cal.bool', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'serv', label_trans: 'cal.serv', fieldtype: tools.FieldType.boolean }),
AddCol(DeleteRec),
AddCol(DuplicateRec)
]
}
export const fieldsTable = {
getArrStrByValueBinary(mythis, col: IColGridTable, val) {
const arr = this.getArrByValueBinary(mythis, col, val)
@@ -299,6 +334,20 @@ export const fieldsTable = {
else
return ''
},
// IColGridTable
colTableUsers: [
AddCol({ name: 'username', label_trans: 'reg.username' }),
AddCol({ name: 'name', label_trans: 'reg.name' }),
AddCol({ name: 'surname', label_trans: 'reg.surname' }),
AddCol({ name: 'email', label_trans: 'reg.email' }),
AddCol({ name: 'cell', label_trans: 'reg.cell' }),
AddCol({ name: 'profile.img', field: 'profile', subfield: 'img', label_trans: 'reg.img', sortable: false }),
AddCol({ name: 'date_reg', label_trans: 'reg.date_reg', fieldtype: tools.FieldType.date }),
AddCol({ name: 'perm', label_trans: 'reg.perm', fieldtype: tools.FieldType.binary, jointable: 'permissions' }),
AddCol(DeleteRec)
],
tablesList: [
{
value: 'operators',
@@ -335,6 +384,7 @@ export const fieldsTable = {
colkey: 'typol_code',
collabel: 'label'
},
{
value: 'newstosent',
label: 'Newsletter da Inviare',
@@ -342,6 +392,21 @@ export const fieldsTable = {
colkey: '_id',
collabel: 'label'
},
{
value: 'templemail',
label: 'Template Email',
columns: coltemplemail,
colkey: '_id',
collabel: 'subject'
},
{
value: 'opzemail',
label: 'Opzioni Email',
columns: colopzemail,
colkey: 'key',
collabel: (rec) => rec.label_it,
onlyAdmin: true
},
{
value: 'mailinglist',
label: 'MailingList',
@@ -366,34 +431,15 @@ export const fieldsTable = {
{
value: 'settings',
label: 'Impostazioni',
columns: colsettings,
columns: fields.colSettings,
colkey: 'key',
collabel: 'key'
}
],
// IColGridTable
colTableUsers: [
AddCol({ name: 'username', label_trans: 'reg.username' }),
AddCol({ name: 'name', label_trans: 'reg.name' }),
AddCol({ name: 'surname', label_trans: 'reg.surname' }),
AddCol({ name: 'email', label_trans: 'reg.email' }),
AddCol({ name: 'cell', label_trans: 'reg.cell' }),
AddCol({ name: 'profile.img', field: 'profile', subfield: 'img', label_trans: 'reg.img', sortable: false }),
AddCol({ name: 'date_reg', label_trans: 'reg.date_reg', fieldtype: tools.FieldType.date }),
AddCol({ name: 'perm', label_trans: 'reg.perm', fieldtype: tools.FieldType.binary, jointable: 'permissions' }),
AddCol(DeleteRec),
AddCol({
name: 'copyrec',
label_trans: 'event.duplicate',
align: 'right',
field: tools.NOFIELD,
sortable: false,
icon: 'fas fa-copy',
action: lists.MenuAction.DUPLICATE_RECTABLE,
askaction: 'db.duplicatedrecord',
visuonlyEditVal: true,
visible: true
})
]
}
export const func = {
gettablesList() {
return fieldsTable.tablesList.filter((rec) => (rec.onlyAdmin === UserStore.state.isAdmin) || (!rec.onlyAdmin))
}
}

View File

@@ -5,18 +5,22 @@ export const serv_constants = {
RIS_CODE_ERR: -99,
RIS_CODE_EMAIL_ALREADY_VERIFIED: -5,
RIS_CODE_EMAIL_VERIFIED: 1,
RIS_CODE_ERR_UNAUTHORIZED: -30,
RIS_CODE_LOGIN_ERR_GENERIC: -20,
RIS_CODE_LOGIN_ERR_GENERIC: -20,
RIS_CODE_LOGIN_ERR: -10,
RIS_CODE_OK: 1,
RIS_CODE_LOGIN_OK: 1,
RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN: 403,
RIS_SUBSCRIBED_OK: 1,
RIS_SUBSCRIBED_ALREADYEXIST: 2,
RIS_SUBSCRIBED_ERR: -1
RIS_SUBSCRIBED_ERR: -1,
RIS_SUBSCRIBED_STR: 'subscribed',
RIS_UNSUBSCRIBED_OK: 5,
RIS_UNSUBSCRIBED_STR: 'unsubscribed',
RIS_UNSUBSCRIBED_NOT_EXIST: -5,
}

View File

@@ -67,6 +67,8 @@ export const tools = {
TABEVENTS: 'myevents',
TABNEWSLETTER: 'newstosent',
TABMAILINGLIST: 'mailinglist',
TABTEMPLEMAIL: 'templemail',
TABOPZEMAIL: 'opzemail',
MAX_CHARACTERS: 60,
projects: 'projects',
@@ -135,6 +137,7 @@ export const tools = {
number: 64,
typeinrec: 128,
multiselect: 256,
password: 512,
},
FieldTypeArr: [
@@ -1380,7 +1383,6 @@ export const tools = {
|| ((!elem.onlyAdmin) && (!elem.onlyManager))
},
executefunc(myself: any, table, func: number, par: IParamDialog) {
if (func === lists.MenuAction.DELETE) {
console.log('param1', par.param1)
@@ -1856,6 +1858,22 @@ export const tools = {
return ''
},
getstrDateTimeAll(mytimestamp) {
// console.log('getstrDate', mytimestamp)
if (!!mytimestamp)
return date.formatDate(mytimestamp, 'DD/MM/YYYY HH:mm:ss')
else
return ''
},
getstrTimeAll(mytimestamp) {
// console.log('getstrDate', mytimestamp)
if (!!mytimestamp)
return date.formatDate(mytimestamp, 'HH:mm:ss')
else
return ''
},
getstrDateTimeShort(mytimestamp) {
// console.log('getstrDate', mytimestamp)
if (!!mytimestamp)
@@ -2615,7 +2633,7 @@ export const tools = {
const mydata = {
table,
data
data,
}
return await
@@ -2719,13 +2737,13 @@ export const tools = {
else
return 'primary'
},
getCookie(mytok, oldval?) {
getCookie(mytok, def?) {
const ris = Cookies.get(mytok)
console.log('getCookie', ris)
if (!!ris) {
return ris
} else {
return oldval
return def
}
},
@@ -2766,7 +2784,7 @@ export const tools = {
if (!numbercell)
return ''
let mynum = numbercell.replace(/\-/g, '')
const intcode = GlobalStore.getters.getValueSettingsByKey('INT_CODE')
const intcode = GlobalStore.getters.getValueSettingsByKey('INT_CODE', false)
if (numbercell.substring(0, 1) !== '+')
mynum = intcode + mynum
else