From ad8f335d6cfa18b6df550e06cd5f2bf8363ea809 Mon Sep 17 00:00:00 2001 From: Paolo Arena Date: Wed, 18 Dec 2019 16:23:50 +0100 Subject: [PATCH] RootGen (moved) --- src/rootgen/admin/eventlist/eventlist.scss | 58 ++ src/rootgen/admin/eventlist/eventlist.ts | 153 ++++++ src/rootgen/admin/eventlist/eventlist.vue | 114 ++++ src/rootgen/admin/gallery/gallery.scss | 0 src/rootgen/admin/gallery/gallery.ts | 29 + src/rootgen/admin/gallery/gallery.vue | 22 + src/rootgen/admin/newsletter/newsletter.scss | 6 + src/rootgen/admin/newsletter/newsletter.ts | 243 +++++++++ src/rootgen/admin/newsletter/newsletter.vue | 543 +++++++++++++++++++ src/rootgen/admin/pages/pages.scss | 0 src/rootgen/admin/pages/pages.ts | 48 ++ src/rootgen/admin/pages/pages.vue | 27 + src/rootgen/admin/tablesList/tablesList.scss | 0 src/rootgen/admin/tablesList/tablesList.ts | 21 + src/rootgen/admin/tablesList/tablesList.vue | 16 + src/rootgen/admin/uploader/uploader.scss | 0 src/rootgen/admin/uploader/uploader.ts | 27 + src/rootgen/admin/uploader/uploader.vue | 40 ++ src/rootgen/admin/usersList/index.ts | 1 + src/rootgen/admin/usersList/usersList.scss | 0 src/rootgen/admin/usersList/usersList.ts | 17 + src/rootgen/admin/usersList/usersList.vue | 18 + 22 files changed, 1383 insertions(+) create mode 100644 src/rootgen/admin/eventlist/eventlist.scss create mode 100644 src/rootgen/admin/eventlist/eventlist.ts create mode 100644 src/rootgen/admin/eventlist/eventlist.vue create mode 100644 src/rootgen/admin/gallery/gallery.scss create mode 100644 src/rootgen/admin/gallery/gallery.ts create mode 100644 src/rootgen/admin/gallery/gallery.vue create mode 100644 src/rootgen/admin/newsletter/newsletter.scss create mode 100644 src/rootgen/admin/newsletter/newsletter.ts create mode 100644 src/rootgen/admin/newsletter/newsletter.vue create mode 100644 src/rootgen/admin/pages/pages.scss create mode 100644 src/rootgen/admin/pages/pages.ts create mode 100644 src/rootgen/admin/pages/pages.vue create mode 100644 src/rootgen/admin/tablesList/tablesList.scss create mode 100644 src/rootgen/admin/tablesList/tablesList.ts create mode 100644 src/rootgen/admin/tablesList/tablesList.vue create mode 100644 src/rootgen/admin/uploader/uploader.scss create mode 100644 src/rootgen/admin/uploader/uploader.ts create mode 100644 src/rootgen/admin/uploader/uploader.vue create mode 100644 src/rootgen/admin/usersList/index.ts create mode 100644 src/rootgen/admin/usersList/usersList.scss create mode 100644 src/rootgen/admin/usersList/usersList.ts create mode 100644 src/rootgen/admin/usersList/usersList.vue diff --git a/src/rootgen/admin/eventlist/eventlist.scss b/src/rootgen/admin/eventlist/eventlist.scss new file mode 100644 index 0000000..fad1fdd --- /dev/null +++ b/src/rootgen/admin/eventlist/eventlist.scss @@ -0,0 +1,58 @@ +.listaev { + color: black; + font-size: 0.75rem; + font-weight: 400; + line-height: 1.25rem; + letter-spacing: 0.03333em; + + &__date { + font-weight: bold; + color: #2ba0fd; + font-size: 1rem; + } + + &__title { + color: red; + font-weight: 700; + letter-spacing: 0.066em; + } + + &__details { + color: black; + } + + &__tdimg { + width: 150px; + height: 150px; + } + + &__table { + margin: 10px; + border-radius: 1rem; + padding: 2px; + } + + &__align_center_mobile { + text-align: left; + @media (max-width: 718px) { + text-align: center; + display: flex; + } + } + + &__img { + padding: 0.5rem !important; + float: left; + width: 150px; + height: 150px; + border-radius: 1rem; + + @media (max-width: 718px) { + // PER VERSIONE MOBILE + float: none; + text-align: center; + margin: 0 auto; + } + } + +} diff --git a/src/rootgen/admin/eventlist/eventlist.ts b/src/rootgen/admin/eventlist/eventlist.ts new file mode 100644 index 0000000..11d5557 --- /dev/null +++ b/src/rootgen/admin/eventlist/eventlist.ts @@ -0,0 +1,153 @@ +import Vue from 'vue' +import { Component } from 'vue-property-decorator' +import { tools } from '@src/store/Modules/tools' +import { func_tools } from '@src/store/Modules/toolsext' +import { CalendarStore, UserStore } from '@store' +import { CTitle } from '../../../components/CTitle/index' +import { CMyPage } from '../../../components/CMyPage/index' +import { IBookedEvent, ICalendarState, IEvents, ITodo, ITodosState, IUserState, IUserFields } from '@src/model' +import { Getter } from 'vuex-class' +import { lists } from '@src/store/Modules/lists' +import MixinUsers from '@src/mixins/mixin-users' +import MixinOperator from '@src/mixins/mixin-operator' + +const namespace = 'CalendarModule' + +@Component({ + mixins: [MixinUsers, MixinOperator], + name: 'EventList', + components: { CTitle, CMyPage } +}) +export default class Eventlist extends Vue { + public $t: any + public $q + public showpeople: boolean = false + public eventsel: IEvents = null + public showPrev = false + public numrec = 0 + + @Getter('getEventsBookedByIdEvent', { namespace }) + public getEventsBookedByIdEvent: (state: ICalendarState, id, showall) => IBookedEvent[] + + @Getter('getNumParticipants', { namespace }) + public getNumParticipants: (state: ICalendarState, event: IEvents, showall) => number + + public getNameSurnameByUserId(userid) { + return UserStore.getters.getNameSurnameByUserId(userid) + } + + public getEventList() { + const eventsloc = [] + + const datenow = tools.addDays(tools.getDateNow(), -1) + + let numevent = 0 + + CalendarStore.state.eventlist.forEach((myevent) => { + // console.log(' ciclo i = ', i, CalendarStore.state.eventlist[i]) + // let dateEvent = new Date(myevent.date + ' 00:00:00') + const dateEvent = new Date(myevent.dateTimeEnd) + + let add = true + + if (!this.showall) { + add = CalendarStore.getters.getNumParticipants(myevent, this.showall) > 0 + } + + if (add) { + + if (this.showPrev) { + if (dateEvent < datenow) { + eventsloc.push(myevent) + numevent++ + } + } else { + if (dateEvent >= datenow) { + eventsloc.push(myevent) + numevent++ + } + } + + } + + }) + + this.numrec = numevent + + if (this.showPrev) { + eventsloc.reverse() + } + + return eventsloc + } + + public getNumEvent() { + const eventsloc = [] + + const datenow = tools.addDays(tools.getDateNow(), -1) + + let numevent = 0 + + CalendarStore.state.eventlist.forEach((myevent) => { + // console.log(' ciclo i = ', i, CalendarStore.state.eventlist[i]) + // let dateEvent = new Date(myevent.date + ' 00:00:00') + const dateEvent = new Date(myevent.dateTimeEnd) + + let add = true + + if (!this.showall) { + add = CalendarStore.getters.getNumParticipants(myevent, this.showall) > 0 + } + + if (add) { + if (this.showPrev) { + if (dateEvent < datenow) + numevent++ + } else { + if (dateEvent >= datenow) + numevent++ + } + } + }) + + this.numrec = numevent + + return eventsloc + } + + get func_tools() { + return func_tools + } + + get tools() { + return tools + } + + get mythis() { + return this + } + + get mostra() { + return this.$route.name + } + + get showall() { + return this.$route.name === 'otherpages.admin.usereventlist' + } + + get gettitle() { + if (this.showall) + return this.$t('otherpages.admin.usereventlist') + else + return this.$t('otherpages.admin.eventlist') + } + + get lists() { + return lists + } + + public mounted() { + this.getNumEvent() + } + +} diff --git a/src/rootgen/admin/eventlist/eventlist.vue b/src/rootgen/admin/eventlist/eventlist.vue new file mode 100644 index 0000000..8ab5722 --- /dev/null +++ b/src/rootgen/admin/eventlist/eventlist.vue @@ -0,0 +1,114 @@ + + + diff --git a/src/rootgen/admin/gallery/gallery.scss b/src/rootgen/admin/gallery/gallery.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/rootgen/admin/gallery/gallery.ts b/src/rootgen/admin/gallery/gallery.ts new file mode 100644 index 0000000..7954d7b --- /dev/null +++ b/src/rootgen/admin/gallery/gallery.ts @@ -0,0 +1,29 @@ +import Vue from 'vue' +import { Component, Prop } from 'vue-property-decorator' +import { GlobalStore, UserStore } from '@store' + +import { tools } from '../../../../../associazioneShen/src/store/Modules/tools' +import { static_data } from '../../../../../associazioneShen/src/db/static_data' +import { Screen } from 'quasar' + +import { colgallery } from 'store/Modules/fieldsTable' + +import { CImgText } from '../../../../../associazioneShen/src/components/CImgText/index' +import { CCard, CGridTableRec, CMyPage, CTitleBanner } from '@components' +import MixinMetaTags from '../../../../../associazioneShen/src/mixins/mixin-metatags' +import MixinBase from 'mixins/mixin-base' + +@Component({ + mixins: [MixinBase], + components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec } +}) +export default class Gallery extends Vue { + + get getcolgallery() { + return colgallery + } + + get static_data() { + return static_data + } +} diff --git a/src/rootgen/admin/gallery/gallery.vue b/src/rootgen/admin/gallery/gallery.vue new file mode 100644 index 0000000..ae17ddc --- /dev/null +++ b/src/rootgen/admin/gallery/gallery.vue @@ -0,0 +1,22 @@ + + + diff --git a/src/rootgen/admin/newsletter/newsletter.scss b/src/rootgen/admin/newsletter/newsletter.scss new file mode 100644 index 0000000..659ef43 --- /dev/null +++ b/src/rootgen/admin/newsletter/newsletter.scss @@ -0,0 +1,6 @@ +.mlvalue { + margin: 5px 5px; + font-weight: bold; + font-size: 1rem; + +} diff --git a/src/rootgen/admin/newsletter/newsletter.ts b/src/rootgen/admin/newsletter/newsletter.ts new file mode 100644 index 0000000..7038b08 --- /dev/null +++ b/src/rootgen/admin/newsletter/newsletter.ts @@ -0,0 +1,243 @@ +import Vue from 'vue' +import { Component, Watch } from 'vue-property-decorator' +import { tools } from 'store/Modules/tools' +import { func_tools } from 'store/Modules/toolsext' +import { CTitle } from '../../../../../associazioneShen/src/components/CTitle/index' +import { CMyPage } from '../../../../../associazioneShen/src/components/CMyPage/index' +import MixinBase from 'mixins/mixin-base' +import { CalendarStore, GlobalStore, UserStore } from '@store' +import { CGridTableRec, CMyFieldDb, CTitleBanner } from '@components' +import { colnewstosent, coltemplemail, colopzemail, colmailinglist } from 'store/Modules/fieldsTable' +import { DefaultNewsState, INewsState } from 'model/index' +import translate from 'globalroutines/util' +import { getCookie } from 'utils/auth' + +const namespace = 'CalendarModule' + +@Component({ + name: 'newsletter', + components: { CTitle, CMyPage, CGridTableRec, CTitleBanner, CMyFieldDb }, + mixins: [] +}) +export default class Newsletter extends MixinBase { + public $t: any + public $q + public myloadingload: boolean = false + public myloading: boolean = false + public myloadingprew: boolean = false + public myloading2: boolean = false + public myloading3: boolean = false + public myloading4: boolean = false + public myloadingState: boolean = false + public myloadingImport: boolean = false + public mailinglist_imported: string = '' + public myrisimport: string = '' + public errimport: boolean = false + public okimport: boolean = false + public newsstate: INewsState = DefaultNewsState + public percsubscribed: number = 0.0 + public polling = null + public tab: string = '' + public emailtextheader: string = '' + public eseguipolling: boolean = false + + public async mounted() { + await this.load() + this.tab = tools.getCookie('formnews', 'check') + this.emailtextheader = this.getValDb('EMAIL_TEXT', true) + + } + + public async checkifpolling() { + if (this.eseguipolling) { + // Is Still sending email, so, every minutes, check the status + if (!this.polling) { + console.log('esegui POLLING....') + this.polling = setInterval(() => { + this.load() + }, 15000) + } + } + } + + @Watch('$route.params.idparam') + public changetab() { + this.tab = this.$route.params.idparam + } + + public async createNewsletter(minuti, loading) { + loading = true + // Crea nuovo record tra N minuti + const mynews = { + idapp: process.env.APP_ID, + label: 'Newsletter creata il ' + tools.getstrDateTimeAll(tools.getDateNow()), + activate: true, + datetoSent: tools.addMinutes(tools.getDateNow(), minuti), + templemail_str: GlobalStore.getters.gettemplemailbyId(this.getValDb('TEMPLEMAIL_ID', true)) + } + await tools.createNewRecord(this, 'newstosent', mynews).then((myrecris) => { + // reload data + this.load() + loading = false + }) + } + + public beforeDestroy() { + clearInterval(this.polling) + } + + public async load() { + console.log('load') + this.myloadingload = true + const mydata = { + locale: tools.getLocale() + } + const myris = await UserStore.actions.newsletterload(mydata) + this.newsstate = myris.newsstate + GlobalStore.state.serv_settings = myris.serv_settings + GlobalStore.state.templemail = myris.templemail + GlobalStore.state.opzemail = myris.opzemail + + // console.log('newsstate') + // console.table('GlobalStore.state.serv_settings', GlobalStore.state.serv_settings) + + this.percsubscribed = this.newsstate.totsubscribed / this.newsstate.totemail + + if (this.newsstate.lastnewstosent) + this.eseguipolling = this.eseguipolling || this.newsstate.lastnewstosent.starting_job && !this.newsstate.lastnewstosent.finish_job + + if (this.newsstate.nextnewstosent) + this.eseguipolling = this.eseguipolling || true + + console.log('this.eseguipolling', this.eseguipolling) + this.myloadingload = false + + this.checkifpolling() + } + + public async DisableNewsletter() { + return await this.setActiveDisactiveNewsletter(false) + } + public async EnableNewsletter() { + return await this.setActiveDisactiveNewsletter(true) + } + + public async setActiveDisactiveNewsletter(activate) { + let mytext = '' + const mytitle = 'Newsletter' + if (activate) + mytext = 'Procedo a far Ripartire la newsletter?' + else + mytext = 'Procedo a fermare l\'Invio della newsletter?' + + this.$q.dialog({ + message: mytext, + ok: { + label: translate('dialog.yes'), + push: true + }, + title: mytitle, + cancel: true, + persistent: false + }).onOk(async () => { + + this.myloadingState = true + const mydata = { + _id: this.newsstate.lastnewstosent._id, + locale: tools.getLocale(), + activate + } + this.newsstate = await UserStore.actions.newsletter_setactivate(mydata) + this.myloadingState = false + + }) + + } + + get emailtest() { + return this.getValDb('EMAIL_TEST', true) + } + + public async sendNewsletterTest(previewonly) { + if (previewonly) + this.myloadingprew = true + else + this.myloading = true + + const res = await GlobalStore.actions.sendEmailTest({previewonly}) + + if (res) + tools.showPositiveNotif(this.$q, 'Email di Test Inviata') + else { + tools.showNegativeNotif(this.$q, 'Email di Test Non Inviata') + } + + if (previewonly) + this.myloadingprew = false + else + this.myloading = false + } + + public changetabnews(value, oldval) { + console.log('changetabnews') + tools.setCookie('formnews', value) + } + + get getcolnewstosent() { + return colnewstosent + } + + get getcolmailinglist() { + return colmailinglist + } + + get getcoltemplemail() { + return coltemplemail + } + get getcolopzemail() { + return colopzemail + } + + public async importMailinglist() { + this.myloadingImport = true + this.errimport = false + this.okimport = false + + const mydata = { + strdataemail: this.mailinglist_imported, + locale: tools.getLocale(), + settomailchimp: this.getValDb('MAILCHIMP_ON', true, false) + } + + const res = await UserStore.actions.importemail(mydata) + + let esistiti = '' + if (res.data.numalreadyexisted > 0) + esistiti = ` ${res.data.numalreadyexisted} email già esistenti` + + if (res.data.numadded > 0) { + this.okimport = true + this.myrisimport = `(${res.data.numadded} / ${res.data.numtot}) email importate !` + esistiti + } else { + this.errimport = true + this.myrisimport = `Nessuna email importata (trovate ${res.data.numtot})` + esistiti + } + + this.myloadingImport = false + } + + get progresslabsubscribed() { + return (this.percsubscribed * 100).toFixed(0) + '%' + } + + public percsent(next) { + let rec = this.newsstate.lastnewstosent + if (next) + rec = this.newsstate.nextnewstosent + + let val = rec.numemail_sent / rec.numemail_tot * 100 + if (val > 100) + val = 100 + return val.toFixed(2) + } +} diff --git a/src/rootgen/admin/newsletter/newsletter.vue b/src/rootgen/admin/newsletter/newsletter.vue new file mode 100644 index 0000000..fa5f007 --- /dev/null +++ b/src/rootgen/admin/newsletter/newsletter.vue @@ -0,0 +1,543 @@ + + + diff --git a/src/rootgen/admin/pages/pages.scss b/src/rootgen/admin/pages/pages.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/rootgen/admin/pages/pages.ts b/src/rootgen/admin/pages/pages.ts new file mode 100644 index 0000000..2177c98 --- /dev/null +++ b/src/rootgen/admin/pages/pages.ts @@ -0,0 +1,48 @@ +import Vue from 'vue' +import { Component, Prop } from 'vue-property-decorator' +import { GlobalStore, UserStore } from '@store' + +import { tools } from '../../../store/Modules/tools' +import { toolsext } from '../../../store/Modules/toolsext' +import { static_data } from '../../../db/static_data' +import { Screen } from 'quasar' + +import { colmypage } from '@src/store/Modules/fieldsTable' + +import { CImgText } from '../../../components/CImgText/index' +import { CCard, CGridTableRec, CMyPage, CTitleBanner } from '@components' +import MixinMetaTags from '../../../mixins/mixin-metatags' +import MixinBase from '@src/mixins/mixin-base' + +@Component({ + mixins: [MixinBase], + components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec } +}) +export default class Pages extends MixinMetaTags { + public pagination = { + sortBy: 'name', + descending: false, + page: 2, + rowsPerPage: 5 + // rowsNumber: xx if getting data from a server + } + + public selected = [] + public dataPages = [] + + get getcolmypage() { + return colmypage + } + + public meta() { + return tools.metafunc(this) + } + + get getdataPages() { + return GlobalStore.state.mypage + } + + get static_data() { + return static_data + } +} diff --git a/src/rootgen/admin/pages/pages.vue b/src/rootgen/admin/pages/pages.vue new file mode 100644 index 0000000..24e0970 --- /dev/null +++ b/src/rootgen/admin/pages/pages.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/rootgen/admin/tablesList/tablesList.scss b/src/rootgen/admin/tablesList/tablesList.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/rootgen/admin/tablesList/tablesList.ts b/src/rootgen/admin/tablesList/tablesList.ts new file mode 100644 index 0000000..e5de3cd --- /dev/null +++ b/src/rootgen/admin/tablesList/tablesList.ts @@ -0,0 +1,21 @@ +import Vue from 'vue' +import { Component } from 'vue-property-decorator' + +import { CGridTableRec } from '@components' +import { CMyPage } from '../../../components/CMyPage/index' +import { fieldsTable, func } from '@src/store/Modules/fieldsTable' + +@Component({ + components: { CGridTableRec, CMyPage } +}) + +export default class TablesList extends Vue { + + get db_fieldsTable() { + return fieldsTable + } + + get gettablesList() { + return func.gettablesList() + } +} diff --git a/src/rootgen/admin/tablesList/tablesList.vue b/src/rootgen/admin/tablesList/tablesList.vue new file mode 100644 index 0000000..610acc3 --- /dev/null +++ b/src/rootgen/admin/tablesList/tablesList.vue @@ -0,0 +1,16 @@ + + + + diff --git a/src/rootgen/admin/uploader/uploader.scss b/src/rootgen/admin/uploader/uploader.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/rootgen/admin/uploader/uploader.ts b/src/rootgen/admin/uploader/uploader.ts new file mode 100644 index 0000000..53141ac --- /dev/null +++ b/src/rootgen/admin/uploader/uploader.ts @@ -0,0 +1,27 @@ +import Vue from 'vue' +import { Component, Prop } from 'vue-property-decorator' +import { GlobalStore, UserStore } from '@store' + +import { tools } from '../../../store/Modules/tools' +import { toolsext } from '../../../store/Modules/toolsext' +import { static_data } from '../../../db/static_data' +import { Screen } from 'quasar' + +import { colmypage } from '../../../store/Modules/fieldsTable' + +import { CImgText } from '../../../components/CImgText/index' +import { CCard, CGridTableRec, CMyPage, CTitleBanner } from '@components' +import MixinBase from '../../../mixins/mixin-base' +import { IMyPage } from '../../../model/GlobalStore' +import Api from '@api' + +@Component({ + mixins: [MixinBase], + components: { CImgText, CCard, CMyPage, CTitleBanner } +}) +export default class Uploader extends Vue { + + get static_data() { + return static_data + } +} diff --git a/src/rootgen/admin/uploader/uploader.vue b/src/rootgen/admin/uploader/uploader.vue new file mode 100644 index 0000000..8bc2209 --- /dev/null +++ b/src/rootgen/admin/uploader/uploader.vue @@ -0,0 +1,40 @@ + + + diff --git a/src/rootgen/admin/usersList/index.ts b/src/rootgen/admin/usersList/index.ts new file mode 100644 index 0000000..72d402b --- /dev/null +++ b/src/rootgen/admin/usersList/index.ts @@ -0,0 +1 @@ +export {default as usersList} from './usersList.vue' diff --git a/src/rootgen/admin/usersList/usersList.scss b/src/rootgen/admin/usersList/usersList.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/rootgen/admin/usersList/usersList.ts b/src/rootgen/admin/usersList/usersList.ts new file mode 100644 index 0000000..f434d4f --- /dev/null +++ b/src/rootgen/admin/usersList/usersList.ts @@ -0,0 +1,17 @@ +import Vue from 'vue' +import { Component } from 'vue-property-decorator' + +import { CGridTableRec } from '@components' +import { CMyPage } from '../../../components/CMyPage/index' +import { fieldsTable } from '@src/store/Modules/fieldsTable' + +@Component({ + components: { CGridTableRec, CMyPage } +}) + +export default class UsersList extends Vue { + + get db_fieldsTable() { + return fieldsTable + } +} diff --git a/src/rootgen/admin/usersList/usersList.vue b/src/rootgen/admin/usersList/usersList.vue new file mode 100644 index 0000000..ff26be2 --- /dev/null +++ b/src/rootgen/admin/usersList/usersList.vue @@ -0,0 +1,18 @@ + + + +