- Nuovi Passi da completare: Leggere le Linee Guida e accettare le condizioni

- Aggiunti i Video e confermare di averli visti
 - In "La tua Lavagna" sono stati aggiunti come requisiti: (Accetto le Linee Guida e Vedo il Video di AYNI)
 - Aggiunto bottone "Invita Persone": apre la pagina dove c'è il messaggio da inviare alle persone.
 - La nuova pagina di registrazione https://test.gifteconomy.app/signup/paoloar77, comprende ora il testo delle Linee Guida + i Video, ed in fondo i campi per registrarsi.
This commit is contained in:
Paolo Arena
2020-02-07 22:08:01 +01:00
parent b15edbe5d2
commit 7d8c130ce6
27 changed files with 714 additions and 321 deletions

View File

@@ -1,4 +1,10 @@
export const shared_consts = {
Accepted: {
CHECK_READ_GUIDELINES: 1,
CHECK_SEE_VIDEO_PRINCIPI: 2,
},
ALL_SAW_AND_ACCEPTED: 3,
FILTER_EXTRALIST_NOT_REGISTERED: 1,
FILTER_EXTRALIST_NOT_CONTACTED: 2,

View File

@@ -19,7 +19,7 @@ export default class CCopyBtn extends Vue {
}
public copytoclip() {
tools.copyStringToClipboard(this, this.texttocopy)
tools.copyStringToClipboard(this, this.texttocopy, true)
}
}

View File

@@ -190,7 +190,7 @@ export default class CGallery extends MixinBase {
public copytoclipboard(rec) {
const filename = this.getfullname(rec)
tools.copyStringToClipboard(this, filename)
tools.copyStringToClipboard(this, filename, true)
}
public async deleteFile(rec) {

View File

@@ -18,6 +18,7 @@ import { tools } from '../../store/Modules/tools'
import { lists } from '../../store/Modules/lists'
import { validations } from './CMyDashboard-validate'
import { validationMixin } from 'vuelidate'
import { shared_consts } from '../../common/shared_vuejs'
@Component({
mixins: [validationMixin],
@@ -76,15 +77,29 @@ export default class CMyDashboard extends MixinUsers {
info: '',
},
{
icon: 'fas fa-video',
textlang: 'steps.zoom_partecipa',
icon: 'fas fa-file-signature',
textlang: 'steps.linee_guida',
textadd(user) {
return ''
},
isok(user) {
if (user)
if (user.profile)
return user.profile.saw_zoom_presentation
return tools.isBitActive(user.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES)
return false
},
info: '',
},
{
icon: 'fas fa-tv',
textlang: 'steps.video_intro',
textadd(user) {
return ''
},
isok(user) {
if (user)
if (user.profile)
return tools.isBitActive(user.profile.saw_and_accepted, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI)
return false
},
info: '',

View File

@@ -57,6 +57,17 @@
</div>
</CTitleBanner>
<div class="row justify-center q-ma-sm">
<q-btn push
rounded
color="primary"
size="md"
:label="$t('pages.invita')"
icon="fas fa-user-plus"
to="/invite">
</q-btn>
</div>
<CTitleBanner v-if="invitatinotreg" class="shadow-2 rounded-borders" :title="$t('dashboard.downnotreg')"
bgcolor="bg-grey"
clcolor="text-white"
@@ -170,7 +181,8 @@
</div>
</CTitleBanner>
<CTitleBanner v-if="ismydownline(seluser) && (seluser.numinvitati <= 0)" class="shadow-2 rounded-borders text-center"
<CTitleBanner v-if="ismydownline(seluser) && (seluser.numinvitati <= 0)"
class="shadow-2 rounded-borders text-center"
:title="$t('reg.cancella_invitato')"
bgcolor="bg-negative"
clcolor="text-white"

View File

@@ -56,7 +56,7 @@
</q-btn>
</div>
<div v-if="static_data.functionality.ENABLE_REGISTRATION" align="center" style="margin-top:10px;">
<q-btn flat rounded size="md" color="primary" to="/signup">{{$t('reg.submit')}}
<q-btn flat rounded size="md" color="primary" to="/signup" :label="$t('reg.submit')">
</q-btn>
</div>

View File

@@ -167,8 +167,7 @@
</div>
<div class="wrapper">
<q-btn rounded size="lg" color="positive" @click="submitOk" :disabled='!allowSubmit'>
{{$t('reg.submit')}}
<q-btn rounded size="lg" color="positive" @click="submitOk" :disabled='!allowSubmit' :label="$t('reg.submit')">
</q-btn>
</div>
</div>

View File

@@ -68,6 +68,10 @@ export default class CSignUpNotevole extends MixinBase {
this.$v.$reset()
this.signup.aportador_solidario = this.$route.params.invited
if (!this.signup.aportador_solidario)
this.signup.aportador_solidario = tools.getCookie(tools.APORTADOR_SOLIDARIO, this.signup.aportador_solidario)
if (!this.signup.aportador_solidario) {
this.signup.aportador_solidario = tools.APORTADOR_NONE
}

View File

@@ -202,8 +202,7 @@
<br>
<div class="text-center">
<q-btn rounded size="sm" color="positive" @click="showdisclaimer = true">
{{$t('privacy_policy')}}
<q-btn rounded size="sm" color="positive" @click="showdisclaimer = true" :label="$t('privacy_policy')">
</q-btn>
</div>
@@ -229,8 +228,7 @@
</div>
<div class="wrapper">
<q-btn rounded size="lg" color="positive" @click="submitOk" :disabled='!allowSubmit'>
{{$t('reg.submit')}}
<q-btn rounded size="lg" color="positive" @click="submitOk" :disabled='!allowSubmit' :label="$t('reg.submit')">
</q-btn>
</div>
</div>

View File

@@ -13,16 +13,21 @@ import { CVerifyEmail } from '../CVerifyTelegram'
import { CCopyBtn } from '../CCopyBtn'
import { CVideo } from '../CVideo'
import { CRequisiti } from '../CRequisiti'
import { shared_consts } from '../../common/shared_vuejs'
import { CGuidelines } from '../CGuidelines'
import { CVideoPromo } from '../CVideoPromo'
@Component({
components: { CTitleBanner, CMyFieldDb, CMyInnerPage, CVerifyTelegram, CVerifyEmail, CCopyBtn, CVideo, CRequisiti }
components: { CTitleBanner, CMyFieldDb, CMyInnerPage, CVerifyTelegram, CVerifyEmail, CCopyBtn, CVideo, CRequisiti, CGuidelines, CVideoPromo }
})
export default class CStatus extends MixinBase {
@Prop({ required: false, default: false }) public dense: boolean
public $v
public $t: any
public step = 1
public NUMSTEP_START = 3
public step = 0
public steptodo = 0
public NUMSTEP_OBBLIGATORI = 9
get numpayment() {
if (UserStore.state.my.profile)
@@ -33,15 +38,86 @@ export default class CStatus extends MixinBase {
}
public arrsteps = [
// {
// title: 'steps.chat_biblio',
// descr: 'steps.chat_biblio_long',
// page: '',
// funccheck(index) {
// return true
// },
// funccheck_error(index) {
// return false
// }
// },
{
title: 'steps.chat_biblio',
descr: 'steps.chat_biblio_long',
title: 'reg.email',
descr: '',
page: '',
icon: 'mail',
funccheck(index) {
return true
return UserStore.state.my.verified_email
},
funccheck_error(index) {
return false
return true
},
funcok() {
return 'pages.statusreg.verified'
},
funcko() {
return 'pages.statusreg.nonverified'
}
},
{
title: 'reg.telegram',
descr: '',
page: '',
icon: 'fab fa-telegram',
funccheck(index) {
return UserStore.state.my.profile.teleg_id > 0
},
funccheck_error(index) {
return true
},
funcok() {
return 'pages.statusreg.verified'
},
funcko() {
return 'pages.statusreg.nonverified'
},
},
{
title: 'steps.linee_guida',
descr: '',
page: '',
funccheck(index) {
return tools.isBitActive(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES)
},
funccheck_error(index) {
return true
},
funcok() {
return ''
},
funcko() {
return ''
}
},
{
title: 'steps.video_intro',
descr: '',
page: '',
funccheck(index) {
return tools.isBitActive(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI)
},
funccheck_error(index) {
return true
},
funcok() {
return ''
},
funcko() {
return ''
}
},
{
@@ -53,7 +129,13 @@ export default class CStatus extends MixinBase {
},
funccheck_error(index) {
return true
}
},
funcok() {
return ''
},
funcko() {
return ''
},
},
{
title: 'steps.dream',
@@ -69,6 +151,12 @@ export default class CStatus extends MixinBase {
funccheck_error(index) {
return true
},
funcok() {
return ''
},
funcko() {
return ''
},
},
{
title: 'steps.paymenttype',
@@ -91,6 +179,12 @@ export default class CStatus extends MixinBase {
funccheck_error(index) {
return true
},
funcok() {
return ''
},
funcko() {
return ''
},
},
{
title: 'steps.sharemovement',
@@ -103,6 +197,12 @@ export default class CStatus extends MixinBase {
funccheck_error(index) {
return true
},
funcok() {
return ''
},
funcko() {
return ''
},
},
{
title: 'steps.enter_prog',
@@ -114,6 +214,12 @@ export default class CStatus extends MixinBase {
funccheck_error(index) {
return false
},
funcok() {
return ''
},
funcko() {
return ''
},
},
{
title: 'steps.collaborate',
@@ -125,6 +231,12 @@ export default class CStatus extends MixinBase {
funccheck_error(index) {
return false
},
funcok() {
return ''
},
funcko() {
return ''
},
},
{
title: 'steps.dono',
@@ -136,6 +248,12 @@ export default class CStatus extends MixinBase {
funccheck_error(index) {
return false
},
funcok() {
return ''
},
funcko() {
return ''
},
},
{
title: 'steps.support',
@@ -147,6 +265,12 @@ export default class CStatus extends MixinBase {
funccheck_error(index) {
return false
},
funcok() {
return ''
},
funcko() {
return ''
},
},
{
title: 'steps.ricevo_dono',
@@ -158,45 +282,40 @@ export default class CStatus extends MixinBase {
funccheck_error(index) {
return false
},
funcok() {
return ''
},
funcko() {
return ''
},
},
/*
sharemovement: 'Condivido il movimento',
sharemovement_long: 'Condivido il movimento con almeno 2 amici e li guido alla registrazione e agli zoom',
enter_prog: 'entro in Programmazione',
enter_prog_long: 'entro in programmazione, e vengo aggiunto al Mandala, ed entro così nella chat corrispondente.',
collaborate: 'Collaborazione',
collaborate_long: 'Continuo a collaborare con il miei compagni, per arrivare al giorno della programmazione dove si attiverà il mio Mandala',
dono: 'Dono',
dono_long: 'Faccio il mio dono al proprietario della Bigliettera',
support: 'Sostengo il movimento',
support_long: 'Continuo a sostenere il movimento partecipando attivamente! Organizzando zoom e partecipando, sostenendo, informando, aiutando e diffondendo',
ricevo_dono: 'Ricevo il mio dono e CELEBRO',
ricevo_dono_long: 'Ricevo il mio dono e CELEBRO',
*/
]
public setstep() {
if (this.isEmailVerified) {
this.step = 2
if (this.TelegVerificato) {
this.step = 3
for (let indstep = 0; indstep < this.arrsteps.length; indstep++) {
if (this.arrsteps[indstep].funccheck(indstep)) {
this.step++
}
}
// if (this.numpayment > 0) {
// this.step = 4
// }
this.step = 0
for (let indstep = 0; indstep < this.arrsteps.length; indstep++) {
if (this.arrsteps[indstep].funccheck(indstep)) {
this.step++
} else {
return
}
}
// console.log('step', this.step)
}
public mounted() {
public setsteptodo() {
this.steptodo = 0
for (let indstep = 0; indstep < this.arrsteps.length; indstep++) {
if (this.arrsteps[indstep].funccheck(indstep)) {
this.steptodo++
} else {
return
}
}
}
public created() {
this.setstep()
this.setsteptodo()
}
get TelegVerificato() {
@@ -207,18 +326,11 @@ export default class CStatus extends MixinBase {
return UserStore.state.my.verified_email
}
get emailtext() {
if (this.isEmailVerified)
return `Email ` + this.$t('pages.statusreg.verified')
else
return `Email ` + this.$t('pages.statusreg.nonverified')
}
get telegramtext() {
if (this.TelegVerificato)
return `Telegram ` + this.$t('pages.statusreg.verified')
return this.$t('reg.telegram') + ' ' + this.$t('pages.statusreg.verified')
else
return `Telegram ` + this.$t('pages.statusreg.nonverified')
return this.$t('reg.telegram') + ' ' + this.$t('pages.statusreg.nonverified')
}
get paymenttext() {
@@ -226,7 +338,7 @@ export default class CStatus extends MixinBase {
}
get getlaststep() {
return this.arrsteps.length + this.NUMSTEP_START - 1
return this.arrsteps.length - 1
}
public getnuminvitati() {
@@ -240,7 +352,7 @@ export default class CStatus extends MixinBase {
public getnuminvitati_attivi() {
if (UserStore.state.my)
if (UserStore.state.my.calcstat)
// console.log('numinvitati', UserStore.state.my.calcstat)
// console.log('numinvitati', UserStore.state.my.calcstat)
return UserStore.state.my.calcstat.numinvitati_attivi
return 0
@@ -249,6 +361,9 @@ export default class CStatus extends MixinBase {
public gettextstep(step) {
let tit = this.$t(step.title)
if (step.funcok())
tit += ' ' + this.$t(step.funcok())
if (step.title === 'steps.sharemovement') {
tit += ' (' + this.getnuminvitati_attivi() + ' / ' + this.getnuminvitati() + ' invitati Attivi)'
} else if (step.title === 'steps.paymenttype') {
@@ -263,7 +378,7 @@ export default class CStatus extends MixinBase {
}
public copylink() {
tools.copyStringToClipboard(this, this.getRefLink)
tools.copyStringToClipboard(this, this.getRefLink, true)
}
public getiferror(checkerror, value) {
@@ -300,12 +415,12 @@ export default class CStatus extends MixinBase {
return 'https://t.me/joinchat/AL2qKExZKvenLgpVhOyefQ'
}
public geticonstep(title) {
if (title === 'steps.chat_biblio') {
return 'settings'
} else {
public geticonstep(mystep) {
if (!!mystep.icon)
return mystep.icon
else
return 'check-circle'
}
}
public geticoncolor(title) {
@@ -349,6 +464,48 @@ export default class CStatus extends MixinBase {
return false
}
get percstep() {
return (this.getstep / this.NUMSTEP_OBBLIGATORI)
}
get getstep() {
let mystep = 0
for (let indstep = 0; indstep < this.arrsteps.length; indstep++) {
if (this.arrsteps[indstep].funccheck(indstep)) {
mystep++
}
}
return mystep
}
get progressstep() {
return this.$t(this.arrsteps[this.steptodo].title)
}
get strpercstep() {
return 'Completati ' + (this.getstep + 1) + ' passi su ' + this.NUMSTEP_OBBLIGATORI
}
get stepcompleti() {
return this.getstep + 1 === this.NUMSTEP_OBBLIGATORI
}
public scrolltostep(mystep) {
this.step = mystep
if (mystep > 0 )
mystep -= 1
const element = document.getElementById('step' + mystep)
tools.scrollToElement(element)
}
public nextstep(index) {
this.step = index + 1
this.setsteptodo()
setTimeout(() => {
this.scrolltostep(this.step)
}, 500)
}
}

View File

@@ -1,44 +1,68 @@
<template>
<div>
<CTitleBanner class="text-center" title="Guida passo passo" bgcolor="bg-primary" clcolor="text-white"
<CTitleBanner class="text-center" :title="$t('home.guida_passopasso')" bgcolor="bg-primary" clcolor="text-white"
mystyle="" myclass="myshad" :canopen="true">
<div class="q-pa-xs">
<q-stepper
v-model="step"
vertical
header-nav
done-color="green"
active-color="blue"
inactive-color="grey"
animated
<q-stepper
v-model="step"
vertical
header-nav
done-color="green"
active-color="blue"
inactive-color="grey"
animated
>
<!--
<q-step
id="step1"
:name="1"
:title="emailtext"
icon="mail"
:done="isEmailVerified"
:error="!isEmailVerified"
:error-icon="geterricon(true)"
>
<q-stepper-navigation v-if="isEmailVerified">
<q-btn @click="step = 2" color="primary" :label="$t('dialog.avanti')"></q-btn>
</q-stepper-navigation>
</q-step>
<q-step
id="step2"
:name="2"
:title="telegramtext"
icon="fab fa-telegram"
:done="TelegVerificato"
:error="!TelegVerificato"
:error-icon="geterricon(true)"
>
<q-stepper-navigation>
<q-btn v-if="TelegVerificato" @click="step = 3" color="primary" :label="$t('dialog.avanti')"></q-btn>
<q-btn flat @click="step = 1" color="primary" :label="$t('dialog.indietro')" class="q-ml-sm"></q-btn>
</q-stepper-navigation>
</q-step>
-->
<q-step
v-for="(mystep, index) in arrsteps"
:id="`step`+(index)"
:key="mystep.title"
:name="index"
:title="gettextstep(mystep)"
:icon="geticonstep(mystep)"
:done-color="geticoncolor(mystep.title)"
:done="mystep.funccheck(index)"
:error="getiferror(mystep.funccheck_error(index), mystep.funccheck(index))"
:error-icon="geterricon(mystep.funccheck(index))"
>
<q-step
:name="1"
:title="emailtext"
icon="mail"
:done="isEmailVerified"
:error="!isEmailVerified"
:error-icon="geterricon(true)"
>
<div v-if="mystep.title === 'reg.email'">
<CVerifyEmail>
</CVerifyEmail>
<q-stepper-navigation v-if="isEmailVerified">
<q-btn @click="step = 2" color="primary" :label="$t('dialog.avanti')"></q-btn>
</q-stepper-navigation>
</q-step>
<q-step
:name="2"
:title="telegramtext"
icon="fab fa-telegram"
:done="TelegVerificato"
:error="!TelegVerificato"
:error-icon="geterricon(true)"
>
</div>
<div v-else-if="mystep.title === 'reg.telegram'">
<q-chip v-if="TelegVerificato" color="positive" text-color="white" icon="fab fa-telegram">
{{ telegramtext }}
</q-chip>
@@ -57,214 +81,252 @@
<br>
</div>
</div>
<div v-else-if="mystep.title === 'steps.linee_guida'">
<CGuidelines :showconditions="true">
<q-stepper-navigation>
<q-btn v-if="TelegVerificato" @click="step = 3" color="primary" :label="$t('dialog.avanti')"></q-btn>
<q-btn flat @click="step = 1" color="primary" :label="$t('dialog.indietro')" class="q-ml-sm"></q-btn>
</q-stepper-navigation>
</q-step>
<q-step
v-for="(mystep, index) in arrsteps"
:key="mystep.title"
:name="NUMSTEP_START + index"
:title="gettextstep(mystep)"
:icon="geticonstep(mystep.title)"
:done-color="geticoncolor(mystep.title)"
:done="mystep.funccheck(index)"
:error="getiferror(mystep.funccheck_error(index), mystep.funccheck(index))"
:error-icon="geterricon(mystep.funccheck(index))"
>
<div v-if="mystep.title === 'steps.paymenttype'">
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
</div>
</CGuidelines>
</div>
<div v-else-if="mystep.title === 'steps.video_intro'">
<CVideoPromo :showconditions="true">
<CTitleBanner class="q-pa-xs" :title="$t('steps.paymenttype_paypal')" bgcolor="bg-primary"
clcolor="text-white"
myclass="myshad" canopen="true" :visible="false">
</CVideoPromo>
<CVideo myvideokey="RqsWDlpnN3k">
</CVideo>
<q-btn class="q-ma-md" size="md" type="a" href="https://www.paypal.com/"
target="_blank" rounded color="primary" icon="info" :label="$t('steps.paymenttype_paypal_link')">
</q-btn>
</CTitleBanner>
<CTitleBanner class="q-pa-xs" :title="$t('steps.paymenttype_revolut')" bgcolor="bg-primary"
clcolor="text-white"
myclass="myshad" canopen="true" :visible="false">
<CVideo myvideokey="">
</CVideo>
<q-btn class="q-ma-md" size="md" type="a" href="https://www.revolut.com/"
target="_blank" rounded color="primary" icon="info"
:label="$t('steps.paymenttype_revolut_link')">
</q-btn>
</CTitleBanner>
<div>
<CMyFieldDb :title="$t('reg.paymenttype')"
table="users"
mykey="profile"
mysubkey="paymenttypes"
:type="tools.FieldType.multiselect"
jointable="paymenttypes">
</CMyFieldDb>
<CMyFieldDb v-if="isselectPaypal" :title="$t('reg.email_paypal')"
table="users"
mykey="profile"
mysubkey="email_paypal"
:type="tools.FieldType.string">
</CMyFieldDb>
</div>
</div>
<div v-else-if="mystep.title === 'steps.paymenttype'">
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
</div>
<div v-else-if="mystep.title === 'steps.dream'">
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
</div>
<CMyFieldDb :title="$t('reg.my_dream')"
<CTitleBanner class="q-pa-xs" :title="$t('steps.paymenttype_paypal')" bgcolor="bg-primary"
clcolor="text-white"
myclass="myshad" canopen="true" :visible="false">
<CVideo myvideokey="RqsWDlpnN3k">
</CVideo>
<q-btn class="q-ma-md" size="md" type="a" href="https://www.paypal.com/"
target="_blank" rounded color="primary" icon="info" :label="$t('steps.paymenttype_paypal_link')">
</q-btn>
<CTitleBanner class="q-pa-xs" :title="$t('steps.paymenttype_paypal_carta_conto')" bgcolor="bg-primary"
clcolor="text-white"
myclass="myshad" canopen="true" :visible="true">
<CVideo myvideokey="wRNBmQrsnes">
</CVideo>
</CTitleBanner>
</CTitleBanner>
<CTitleBanner class="q-pa-xs" :title="$t('steps.paymenttype_revolut')" bgcolor="bg-primary"
clcolor="text-white"
myclass="myshad" canopen="true" :visible="false">
<CVideo myvideokey="nST5iHM2LbE">
</CVideo>
<q-btn class="q-ma-md" size="md" type="a" href="https://www.revolut.com/"
target="_blank" rounded color="primary" icon="info"
:label="$t('steps.paymenttype_revolut_link')">
</q-btn>
</CTitleBanner>
<div>
<CMyFieldDb :title="$t('reg.paymenttype')"
table="users"
mykey="profile"
mysubkey="my_dream"
:type="tools.FieldType.string"
>
mysubkey="paymenttypes"
:type="tools.FieldType.multiselect"
jointable="paymenttypes">
</CMyFieldDb>
<CMyFieldDb v-if="isselectPaypal" :title="$t('reg.email_paypal')"
table="users"
mykey="profile"
mysubkey="email_paypal"
:type="tools.FieldType.string">
</CMyFieldDb>
</div>
<div v-else-if="mystep.title === 'steps.chat_biblio'">
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
</div>
<br><strong>Entra in Chat BiblioBacheca, cliccando qui:</strong>
<div class="landing__footer-icons row flex-center margin_buttons">
<a v-if="!!TelegramBiblio" :href="TelegramBiblio" target="_blank">
<i aria-hidden="true" class="q-icon fab fa-telegram icon_contact links"></i></a>
</div>
</div>
<div v-else-if="mystep.title === 'steps.zoom'">
</div>
<div v-else-if="mystep.title === 'steps.dream'">
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
</div>
<CMyFieldDb :title="$t('reg.my_dream')"
table="users"
mykey="profile"
mysubkey="my_dream"
:type="tools.FieldType.string"
>
</CMyFieldDb>
</div>
<div v-else-if="mystep.title === 'steps.chat_biblio'">
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
</div>
<br><strong>Entra in Chat BiblioBacheca, cliccando qui:</strong>
<CRequisiti :statebool="VistoZoom" :msgTrue="$t('steps.zoom_si_partecipato')"
:msgFalse="$t('steps.zoom_no_partecipato')">
</CRequisiti>
<div class="landing__footer-icons row flex-center margin_buttons">
<a v-if="!!TelegramBiblio" :href="TelegramBiblio" target="_blank">
<i aria-hidden="true" class="q-icon fab fa-telegram icon_contact links"></i></a>
</div>
</div>
<div v-else-if="mystep.title === 'steps.zoom'">
<CRequisiti :statebool="VistoZoom" :msgTrue="$t('steps.zoom_si_partecipato')"
:msgFalse="$t('steps.zoom_no_partecipato')">
</CRequisiti>
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
</div>
<CTitleBanner class="q-pa-xs" :title="$t('steps.zoom_what')" bgcolor="bg-primary"
clcolor="text-white"
myclass="myshad" canopen="true" :visible="false">
<div>
<CVideo myvideokey="2yHhNktRDjg">
</CVideo>
<h3>ISTRUZIONI ZOOM</h3>
<ul style="text-align: left; font-size:0.75rem;">
<li>1. Scarica l'app (<a href="https://play.google.com/store/apps/details?id=us.zoom.videomeetings"
target="_blank">store</a> o <a href="https://zoom.us/support/download"
target="_blank">da PC</a>)
</li>
<li>2. Inserisci il tuo Nome e Cognome per essere riconosciuto</li>
<li>3. Clicca "join meeting"</li>
<li>4. Clicca "call in device" altrimenti non potrai sentire 🔊</li>
<li>5. Clicca il microfono per Attivarlo o Silenziarlo.</li>
</ul>
<div class="text-h6"><strong>In più avrai:</strong></div>
<ul style="text-align: left; font-size:0.75rem;">
<li>Tasto per togliere il video (📹) ❌</li>
<li>Tasto 'Share': per condividere contenuti condivisi</li>
<li>Tasto 'Partecipants' in cui sulla sinistra, in basso, troverai la CHAT.</li>
<li>Tasto 'More': troverai Raise Hands per fare le domande.</li>
</ul>
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
</div>
<CTitleBanner class="q-pa-xs" :title="$t('steps.zoom_what')" bgcolor="bg-primary"
clcolor="text-white"
myclass="myshad" canopen="true" :visible="false">
<div>
</CTitleBanner>
<h3>ISTRUZIONI ZOOM</h3>
</div>
<div v-else-if="mystep.title === 'steps.sharemovement'">
<ul style="text-align: left; font-size:0.75rem;">
<li>1. Scarica l'app (<a href="https://play.google.com/store/apps/details?id=us.zoom.videomeetings"
target="_blank">store</a> o <a href="https://zoom.us/support/download"
target="_blank">da PC</a>)
</li>
<li>2. Inserisci il tuo Nome e Cognome per essere riconosciuto</li>
<li>3. Clicca "join meeting"</li>
<li>4. Clicca "call in device" altrimenti non potrai sentire 🔊</li>
<li>5. Clicca il microfono per Attivarlo o Silenziarlo.</li>
</ul>
<CRequisiti :statebool="getnuminvitati() >= 2" :msgTrue="$t('steps.sharemovement_hai_invitato')"
:msgFalse="$t('steps.sharemovement_devi_invitare_almeno_2')">
</CRequisiti>
<CRequisiti v-if="getnuminvitati() > 0" :statebool="getnuminvitati_attivi() >= 2"
:msgTrue="$t('steps.sharemovement_invitati_attivi_si')"
:msgFalse="$t('steps.sharemovement_invitati_attivi_no')">
</CRequisiti>
<div class="text-h6"><strong>In più avrai:</strong></div>
<ul style="text-align: left; font-size:0.75rem;">
<li>Tasto per togliere il video (📹) ❌</li>
<li>Tasto 'Share': per condividere contenuti condivisi</li>
<li>Tasto 'Partecipants' in cui sulla sinistra, in basso, troverai la CHAT.</li>
<li>Tasto 'More': troverai Raise Hands per fare le domande.</li>
</ul>
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
</div>
<div class="row justify-center q-ma-sm">
<q-btn push
rounded
color="primary"
size="md"
:label="$t('pages.invita')"
icon="fas fa-user-plus"
to="/invite">
</q-btn>
</div>
<CCopyBtn :title="$t('reg.reflink')" :texttocopy="getRefLink">
</CCopyBtn>
<CCopyBtn :title="$t('reg.linkzoom')" :texttocopy="tools.getLinkZoom()">
</CCopyBtn>
<q-btn class="q-mb-md" rounded size="md" color="primary" to="/dashboard"
:label="$t('pages.dashboard')"></q-btn>
</div>
<div v-else-if="mystep.title === 'steps.enter_prog'">
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
</div>
<CRequisiti :statebool="CompletatoRequisiti" :msgTrue="$t('steps.enter_prog_requisiti_ok')"
:msgFalse="$t('steps.enter_prog_completa_requisiti')">
</CRequisiti>
<CRequisiti :statebool="CompletatoRequisiti" :msgTrue="$t('steps.enter_prog_status')"
:msgFalse="$t('steps.enter_prog_status')">
</CRequisiti>
</div>
<div v-else>
<div v-if="mystep.page">
<CMyInnerPage :path=mystep.page>
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
</div>
</CTitleBanner>
</CMyInnerPage>
</div>
<div v-else-if="mystep.title === 'steps.sharemovement'">
</div>
<CRequisiti :statebool="getnuminvitati() >= 2" :msgTrue="$t('steps.sharemovement_hai_invitato')"
:msgFalse="$t('steps.sharemovement_devi_invitare_almeno_2')">
</CRequisiti>
<CRequisiti v-if="getnuminvitati() > 0" :statebool="getnuminvitati_attivi() >= 2"
:msgTrue="$t('steps.sharemovement_invitati_attivi_si')"
:msgFalse="$t('steps.sharemovement_invitati_attivi_no')">
</CRequisiti>
<q-stepper-navigation>
<q-btn v-if="index < getlaststep" @click="nextstep(index)"
color="primary" :label="$t('dialog.avanti')" class="q-ml-sm"></q-btn>
<q-btn flat @click="step = index - 1" color="primary" :label="$t('dialog.indietro')"
class="q-ml-sm"></q-btn>
</q-stepper-navigation>
</q-step>
<!--<q-step-->
<!--:name="getlaststep"-->
<!--:title="$t('dialog.finish')"-->
<!--icon="check-circle"-->
<!--:done="step > getlaststep"-->
<!--&gt;-->
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
</div>
<CCopyBtn :title="$t('reg.reflink')" :texttocopy="getRefLink">
</CCopyBtn>
<CCopyBtn :title="$t('reg.linkzoom')" :texttocopy="tools.getLinkZoom()">
</CCopyBtn>
<q-btn class="q-mb-md" rounded size="md" color="primary" to="/dashboard"
:label="$t('pages.dashboard')"></q-btn>
</div>
<div v-else-if="mystep.title === 'steps.enter_prog'">
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
</div>
<CRequisiti :statebool="CompletatoRequisiti" :msgTrue="$t('steps.enter_prog_requisiti_ok')"
:msgFalse="$t('steps.enter_prog_completa_requisiti')">
</CRequisiti>
<CRequisiti :statebool="CompletatoRequisiti" :msgTrue="$t('steps.enter_prog_status')"
:msgFalse="$t('steps.enter_prog_status')">
</CRequisiti>
</div>
<div v-else>
<div v-if="mystep.page">
<CMyInnerPage :path=mystep.page>
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
</div>
</CMyInnerPage>
</div>
</div>
<q-stepper-navigation>
<q-btn v-if="NUMSTEP_START + index < getlaststep" @click="step = NUMSTEP_START + index + 1"
color="primary" :label="$t('dialog.avanti')" class="q-ml-sm"></q-btn>
<q-btn flat @click="step = NUMSTEP_START + index - 1" color="primary" :label="$t('dialog.indietro')"
class="q-ml-sm"></q-btn>
</q-stepper-navigation>
</q-step>
<!--<q-step-->
<!--:name="getlaststep"-->
<!--:title="$t('dialog.finish')"-->
<!--icon="check-circle"-->
<!--:done="step > getlaststep"-->
<!--&gt;-->
<!--<q-stepper-navigation>-->
<!--<q-btn flat @click="step = getlaststep - 1" color="primary" :label="$t('dialog.indietro')" class="q-ml-sm"></q-btn>-->
<!--</q-stepper-navigation>-->
<!--</q-step>-->
</q-stepper>
</div>
<!--<q-stepper-navigation>-->
<!--<q-btn flat @click="step = getlaststep - 1" color="primary" :label="$t('dialog.indietro')" class="q-ml-sm"></q-btn>-->
<!--</q-stepper-navigation>-->
<!--</q-step>-->
</q-stepper>
</CTitleBanner>
<q-page-sticky expand position="top" v-if="!stepcompleti">
<q-toolbar class="bg-yellow-7 glossy text-white">
<q-toolbar-title @click="scrolltostep(steptodo)">
<div class="flex flex-center">
<q-linear-progress size="20px" :value="percstep" color="green" class="q-pa-xs q-mb-xs bg-red">
<div class="absolute-center flex flex-center">
<q-badge color="white" text-color="grey-8" style="opacity: 0.9; font-size: 0.85rem;" :label="strpercstep"></q-badge>
</div>
</q-linear-progress>
</div>
<div class="flex flex-center">
<q-badge color="white" text-color="green" :label="progressstep" class="wrap"
style="font-size: 0.85rem; height:20px; font-weight: bold;"></q-badge>
</div>
</q-toolbar-title>
<q-btn round dense icon="arrow_forward" @click="scrolltostep(steptodo)"></q-btn>
</q-toolbar>
</q-page-sticky>
</div>
</template>

View File

@@ -11,13 +11,14 @@
<CCardState :mytext="$t('pages.statusreg.giainlista')" :isperc="true" :myval="datastat.num_reg_lista"
:myperc="perc_reg" :textadd="` / ` + datastat.num_tot_lista"></CCardState>
<div class="q-pa-xs ">
<CCardStat mytext="Partecipato in Zoom" :myval="datastat.num_part_zoom"></CCardStat>
<CCardStat mytext="Hanno scritto il Sogno" :myval="datastat.num_users_dream"></CCardStat>
<CCardStat v-if="emailnonverif" mytext="Email non Verificate" :myval="emailnonverif"
<CCardStat :mytext="$t('stat.accepted')" :myval="datastat.num_part_accepted"></CCardStat>
<CCardStat :mytext="$t('stat.zoom')" :myval="datastat.num_part_zoom"></CCardStat>
<CCardStat :mytext="$t('stat.dream')" :myval="datastat.num_users_dream"></CCardStat>
<CCardStat v-if="emailnonverif" :mytext="$t('stat.email_not_verif')" :myval="emailnonverif"
mycol="negative"></CCardStat>
<CCardStat v-if="telegnonattivi" mytext="Telegram Non Attivi" :myval="telegnonattivi"
<CCardStat v-if="telegnonattivi" :mytext="$t('stat.telegram_non_attivi')" :myval="telegnonattivi"
mycol="negative"></CCardStat>
<CCardStat v-if="datastat.num_teleg_pending > 0" mytext="Telegram Pendenti"
<CCardStat v-if="datastat.num_teleg_pending > 0" :mytext="$t('stat.telegram_pendenti')"
:myval="datastat.num_teleg_pending" mycol="negative"></CCardStat>
</div>

View File

@@ -34,9 +34,9 @@ export default class CTitleBanner extends Vue {
@Prop({ required: false, default: true }) public visible: boolean
@Prop({ required: false, default: false }) public canopen: boolean
public myvisible: boolean = true
public myvisible: boolean = false
public mounted() {
public created() {
this.myvisible = this.visible
}

View File

@@ -19,7 +19,7 @@
</q-banner>
<q-slide-transition>
<div v-show="myvisible" class="rounded-borders">
<div v-if="myvisible" class="rounded-borders">
<slot></slot>
</div>
</q-slide-transition>

View File

@@ -53,3 +53,5 @@ export * from './CUserBadge'
export * from './CMyDashboard'
export * from './CLegenda'
export * from './CRequisito'
export * from './CGuidelines'
export * from './CVideoPromo'

View File

@@ -37,9 +37,17 @@ export default class MixinBase extends MixinMetaTags {
}
public getValDb(keystr, serv, def?, table?, subkey?) {
return tools.getValDb(keystr, serv, def, table, subkey)
}
public getValDbLang(keystr, serv, def?, table?, subkey?) {
let ris = tools.getValDb(keystr + '_' + tools.getLocale(), serv, def, table, subkey)
if (ris === def)
ris = tools.getValDb(keystr + '_it', serv, def, table, subkey)
return ris
}
public async setValDb(key, value, type, serv: boolean, table?, subkey?) {
// console.log('setValDb', key, value, serv, table, subkey)

View File

@@ -330,6 +330,7 @@ export interface IFunctionality {
SHOW_ONLY_POLICY?: boolean
SHOW_MESSAGES?: boolean
BOOKING_EVENTS?: boolean
ENABLE_REG_AYNI?: boolean
}
export interface IParamsQuery {

View File

@@ -14,6 +14,7 @@ export interface INotData {
num_teleg_attivo?: number
num_teleg_pending?: number
num_part_zoom?: number
num_part_accepted?: number
num_users_dream?: number
arr_nations?: string
lastsreg?: IUserFields[]

View File

@@ -23,6 +23,7 @@ export interface IUserProfile {
paymenttypes?: IPaymentType[]
manage_telegram?: boolean
saw_zoom_presentation?: boolean
saw_and_accepted?: boolean
}
export interface IPaymentType {
@@ -93,7 +94,6 @@ export interface IUserState {
isManager?: boolean
isTeacher?: boolean
usersList?: IUserFields[]
permissionsList?: IPerm[]
countusers?: number
lastparamquery?: any
}

View File

@@ -197,10 +197,10 @@
jointable="templemail">
</CMyFieldDb>
<q-btn :loading="myloading2" rounded outline @click="createNewsletter(1, myloading2)"
<q-btn :loading="myloading2" rounded outline @click="createNewsletter(3, myloading2)"
color="primary"
icon="fas fa-file-alt">
<span class="q-px-sm">Crea Nuovo Invio Newsletter Schedulato tra 1 minuto</span>
<span class="q-px-sm">Crea Nuovo Invio Newsletter Schedulato tra 3 minuti</span>
<template v-slot:loading>
<q-spinner-hourglass class="on-left"/>
Creazione Newsletter...

View File

@@ -6,6 +6,7 @@ import { CMyPage } from '../../../components/CMyPage/index'
import { fieldsTable } from '@src/store/Modules/fieldsTable'
import { shared_consts } from '@src/common/shared_vuejs'
import { tools } from '../../../store/Modules/tools'
import { static_data } from '../../../db/static_data'
@Component({
components: { CGridTableRec, CMyPage }
@@ -48,4 +49,13 @@ export default class UsersList extends Vue {
get db_fieldsTable() {
return fieldsTable
}
get userlist() {
if (static_data.functionality.ENABLE_REG_AYNI) {
return this.db_fieldsTable.colTableUsers
} else {
return this.db_fieldsTable.colTableUsersBase
}
}
}

View File

@@ -2,7 +2,7 @@
<CMyPage img="" :title="$t('otherpages.admin.userlist')" keywords="" description="Lista Utenti">
<CGridTableRec prop_mytable="users"
prop_mytitle="Lista Utenti"
:prop_mycolumns="db_fieldsTable.colTableUsers"
:prop_mycolumns="userlist"
prop_colkey="_id"
nodataLabel="Nessun Utente"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato"

View File

@@ -2,6 +2,9 @@ import msg_website from '../db/i18n_website'
const msgglobal = {
it: {
home: {
guida_passopasso: 'Guida Passo Passo'
},
grid: {
editvalues: 'Modifica Valori',
addrecord: 'Aggiungi Riga',
@@ -45,22 +48,39 @@ const msgglobal = {
sendmsg: {
write: 'scrive'
},
stat: {
zoom: 'Partecipato in Zoom',
accepted: 'Accettato Linee Guida + Video',
dream: 'Hanno scritto il Sogno',
email_not_verif: 'Email non Verificate',
telegram_non_attivi: 'Telegram Non Attivi',
telegram_pendenti: 'Telegram Pendenti',
},
steps: {
video_intro_1: '1. Benvenuti in AYNI',
video_intro_2: '2. Nascita di AYNI',
video_intro_3: '3. Differenze tra Billettera Classica e AYNI',
video_intro_4: '4. Come faccio a far parte di AYNI',
read_guidelines: 'Ho letto ed Accetto queste condizioni scritte qui sopra',
saw_video_intro: 'Dichiaro di aver visto almeno il Video \'4. Come faccio a far parte di AYNI\'',
chat_biblio: 'Entra nella Chat AYNI BiblioBacheca',
chat_biblio_long: 'Occorre entrare in questa Chat per ricevere le ultime notizie e rimanere in contatto con noi',
paymenttype: 'Modalità di Pagamento',
paymenttype_long: 'Scegli <strong>almeno 2 Modalità di Pagamento</strong>, per scambiarsi i doni.<br><br>I <strong>metodi di Pagamento Super-Consigliati</strong> sono: <ul><li><strong>Paypal</strong> è indispensabile in quanto quasi tutti lo utilizzano ed è un\'ottima soluzione perchè potrai collegargli le tue carte di credito/debito.</li><li><strong>Revolut</strong>: La Carta Revolut è un conto Inglese (fuori dalla UE), pertanto è più libera e semplice da utilizzare anche tramite il cellulare</strong></li>',
paymenttype_long: 'Scegli <strong>almeno 2 Modalità di Pagamento</strong>, per scambiarsi i doni.<br><br>I <strong>metodi di Pagamento sono: <ul><li><strong>Paypal</strong> (in AYNI è <strong>obbligatoria</strong>) perchè è un sistema molto diffuso in tutta Europa (il trasferimento e gratuito) e si possono collegare le carte prepagate, le carte di credito e il conto corrente <strong>SENZA COMMISSIONI</strong>. In questo modo non dovrai condividere i numeri delle tue carte o del c/c ma solo la mail che avrai usato in fase di iscrizione su Paypal. Disponibile l\'app per il cellulare.</li><li><strong>Revolut</strong>: la Carta Prepagata Revolut con IBAN Inglese (fuori UE) completamente gratuita, più libera e semplice da utilizzare. Disponibile l\'app per il cellulare.</li>',
paymenttype_paypal: 'Come Aprire un conto Paypal (in 2 minuti)',
paymenttype_paypal_carta_conto: 'Come associare una carta di Credito/Debito o un Conto Bancario su PayPal',
paymenttype_paypal_link: 'Apri il Conto con Paypal',
paymenttype_revolut: 'Come Aprire il conto con Revolut (in 2 minuti)',
paymenttype_revolut_link: 'Apri il Conto con Revolut',
entra_zoom: 'Entra in Zoom',
linee_guida: 'Accetto le Linee Guida',
video_intro: 'Vedo il Video di AYNI',
zoom: 'Partecipo agli Zoom (Video Conferenza)',
zoom_si_partecipato: 'Hai partecipato ad almeno 1 Zoom',
zoom_partecipa: 'Partecipato ad almeno 1 Zoom',
zoom_no_partecipato: 'Attualmente non hai ancora partecipato ad uno Zoom (è un requisito per poter entrare)',
zoom_long: 'Si richiede di partecipare ad almeno 1 Zoom, ma è consigliato prendere parte al movimento in maniera più attiva.<br><br><strong>Partecipando agli Zoom lo Staff di AYNI registrerà le presenze e verrai così abilitato.</strong>',
zoom_what:'Che cos\'è Zoom e come funziona?',
zoom_what:'Tutorial come installare Zoom',
sharemovement_devi_invitare_almeno_2: 'Ancora non hai invitato 2 persone',
sharemovement_hai_invitato: 'Hai invitato almeno 2 persone',
sharemovement_invitati_attivi_si: 'Hai almeno 2 persone invitate Attive',
@@ -74,7 +94,7 @@ const msgglobal = {
enter_prog_long: 'Sottisfatti i requisiti richiesti entrerai in Programmazione, verrai aggiunto alla Bigliettera e nella chat di gruppo corrispondente.<br>',
collaborate: 'Collaborazione',
collaborate_long: 'Continuo a collaborare con i miei compagni per arrivare al giorno della programmazione dove si attiverà la mia Bigliettera.',
dream: 'Scrivi il tuo Sogno',
dream: 'Scrivo il mio Sogno',
dream_long: 'Scrivi qui il Sogno per il quale sei entrato in Ayni e che desideri realizzare.<br>Sarà condiviso a quello di tutti gli altri per sognare insieme !',
dono: 'Dono',
dono_long: 'Faccio il mio dono nella data di partenza della mia Bigliettera',
@@ -163,7 +183,7 @@ const msgglobal = {
options: 'Opzioni',
},
dashboard: {
downline: 'Persone che hai Invitato',
downline: 'Invitati',
downnotreg: 'Invitati non Registrati',
notreg: 'Non Registrato',
numinvitati: 'Numero di Invitati',
@@ -188,6 +208,10 @@ const msgglobal = {
you: 'Tu',
cancella_invitato: 'Elimina Invitato',
regala_invitato: 'Regala Invitato',
messaggio_invito: 'Messaggio di Invito',
messaggio_invito_msg: 'Invia questo messaggio a tutti coloro a cui vuoi condividere questo Movimento !',
msginvito: 'Ciao,<br>Vorrei invitarti a conoscere questo Movimento di Economia Solidale<br>Questo è il video Introduttivo:<br>{videointro}<br><br>Qui trovi la pagina sul sito di spiegazione {paginaspiegazione}<br><br>Ogni 3-4 giorni alla settimana vengono organizzati delle Conferenze, tramite Zoom:<br>{linkzoom}<br> e così potrai conoscere lo Staff e fare eventuali domande.',
videointro: 'Video Introduttivo',
invitato_regalato: 'Invitato Regalato',
legenda: 'Legenda',
aportador_solidario: 'Chi ti ha Invitato',
@@ -211,13 +235,15 @@ const msgglobal = {
email_paypal: 'Email Paypal',
country_pay: 'Paese di Destinazione Pagamenti',
username_telegram: 'Username Telegram',
telegram: 'Telegram BOT',
telegram: 'Chat Telegram \'AYNI BOT\'',
teleg_id: 'Telegram ID',
teleg_auth:'Codice Autorizzazione',
click_per_copiare:'Cliccaci sopra per copiarlo sugli appunti',
copia_messaggio:'Copia Messaggio',
teleg_torna_sul_bot:'1) Copia il codice cliccando sul bottone qui sopra<br>2) torna su Ayni BOT cliccando qui sotto 👇 ed incolla (o scrivi) il codice',
teleg_checkcode: 'Codice Telegram',
my_dream: 'Il mio Sogno',
saw_and_accepted: 'Condizioni',
saw_zoom_presentation: 'Ha visto Zoom',
manage_telegram: 'Gestori Telegram',
paymenttype: 'Modalità di Pagamenti Disponbili',
@@ -491,6 +517,9 @@ const msgglobal = {
cookies: 'Usiamo i Cookie per una migliore prestazione web.'
},
es: {
home: {
guida_passopasso: 'Guía paso a paso'
},
grid: {
editvalues: 'Cambiar valores',
addrecord: 'Agregar fila',
@@ -576,6 +605,7 @@ const msgglobal = {
go_login: 'Vuelve al Login',
incorrect_input: 'Entrada correcta.',
link_sent: 'Ahora lea su correo electrónico y confirme el registro',
se_non_ricevo: 'Si no recibes el correo electrónico, intenta comprobar el spam o ponte en contacto con nosotros.',
title_unsubscribe: 'Anular suscripción al boletín',
title_unsubscribe_done: 'Suscripción completada con éxito',
}
@@ -600,12 +630,18 @@ const msgglobal = {
options: 'Opciones',
},
dashboard: {
downline: 'Personas que has invitado',
downline: 'Invitados',
},
reg: {
verified_email: 'Correo electrónico verificado',
reg_lista_prec: 'Por favor, introduzca el nombre, apellido y número de teléfono móvil que dejó en el pasado cuando se registró en el Chat! <br>De esta manera el sistema le reconocerá y mantendrá la posición de la lista.',
nuove_registrazioni: 'Si se trata de un NUEVO registro, debe ponerse en contacto con la persona que le ha INVITADO, que le dejará el LINK CORRECTO para hacer el registro bajo él/ella',
you: 'Tu',
cancella_invitato: 'Eliminar Invitado',
regala_invitato: 'Dar Invitado',
messaggio_invito: 'Mensaje de invitación',
messaggio_invito_msg: 'Copie el mensaje que aparece a continuación y compártalo con todos aquellos con los que desee compartir este Movimiento !',
msginvito: 'Hola,<br>Me gustaría invitarlos a conocer este Movimiento de Economía Solidaria<br>Este es el video introductorio {videointro} <br>Aquí pueden encontrar la página en el sitio web con los otros videos {paginavideo} <br>Cada 3-4 días de la semana se organizan conferencias, a través de Zoom, {linkzoom} y así pueden conocer al Staff y hacer cualquier pregunta.',
aportador_solidario: 'Aportador Solidario',
aportador_solidario_nome_completo:'A.S. Nombre',
aportador_solidario_ind_order:'A.S.Ind',
@@ -647,6 +683,7 @@ const msgglobal = {
onlyadult: "Confirmo que soy mayor de edad",
submit: "Registrarse",
title_verif_reg: "Verifica registro",
reg_ok: "Registro exitoso",
verificato: "Verificado",
non_verificato: "No Verificado",
forgetpassword: "¿Olvidaste tu contraseña?",
@@ -889,6 +926,9 @@ const msgglobal = {
cookies: 'Utilizamos cookies para un mejor rendimiento web.'
},
fr: {
home: {
guida_passopasso: 'Étape Guida'
},
grid: {
editvalues: 'Changer les valeurs',
addrecord: 'Ajouter une ligne',
@@ -974,6 +1014,7 @@ const msgglobal = {
go_login: 'Retour à la connexion',
incorrect_input: 'Entrée correcte.',
link_sent: 'Maintenant, lisez votre email et confirmez votre inscription',
se_non_ricevo: 'Si vous ne recevez pas le courriel, essayez de vérifier dans le spam, ou contactez nous',
title_unsubscribe: 'Se désabonner de la newsletter',
title_unsubscribe_done: 'Abonnement terminé avec succès',
}
@@ -998,12 +1039,14 @@ const msgglobal = {
options: 'Options',
},
dashboard: {
downline: 'Les personnes que vous avez invitées',
downline: 'invités',
},
reg: {
you: 'Tu',
cancella_invitato: 'Supprimer invité',
regala_invitato: 'Donner invité',
messaggio_invito: 'Message d\'invitation',
messaggio_invito_msg: 'Copia il messaggio qui sotto e condividilo a tutti coloro a cui vuoi condividere questo Movimento !',
aportador_solidario: 'Contributeur de solidarité',
aportador_solidario_nome_completo:'A.S. Nom',
aportador_solidario_ind_order:'A.S.Ind',
@@ -1044,6 +1087,7 @@ const msgglobal = {
onlyadult: "Je confirme que je suis majeur",
submit: "S'inscrire",
title_verif_reg: "Vérifier l'inscription",
reg_ok: "Enregistrement réussi",
verificato: "Vérifié",
non_verificato: "Non vérifié",
forgetpassword: "Vous avez oublié votre mot de passe?",
@@ -1286,6 +1330,9 @@ const msgglobal = {
cookies: 'Nous utilisons des cookies pour améliorer les performances Web.'
},
enUs: {
home: {
guida_passopasso: 'Step By Step Guide'
},
grid: {
editvalues: 'Edit Values',
addrecord: 'Add Row',
@@ -1371,6 +1418,7 @@ const msgglobal = {
go_login: 'Back to Login',
incorrect_input: 'Incorrect input.',
link_sent: 'Now read your email and confirm registration',
se_non_ricevo: 'If you do not receive the email, try checking in the spam, or contact us',
title_unsubscribe: 'Unsubscribe to the newsletter',
title_unsubscribe_done: 'Subscription completed successfully',
}
@@ -1395,12 +1443,17 @@ const msgglobal = {
options: 'Options',
},
dashboard: {
downline: 'People you\'ve invited',
downline: 'Guests',
},
reg: {
verified_email: 'Email Verified',
reg_lista_prec: 'Please enter the First Name, Last Name and mobile phone number you left in the past when you signed up for the Chat! <br>This way the system will recognize you and keep the position of the list',
nuove_registrazioni: 'If this is a NEW registration, you must contact the person who INVITED you, who will leave you the CORRECT LINK to do the Registration under him/her',
you: 'You',
cancella_invitato: 'Delete Invited',
regala_invitato: 'Give invited',
messaggio_invito: 'Invitation Message',
messaggio_invito_msg: 'Copia il messaggio qui sotto e condividilo a tutti coloro a cui vuoi condividere questo Movimento !',
aportador_solidario: 'Solidarity Contributor',
aportador_solidario_nome_completo:'A.S. Name',
aportador_solidario_ind_order:'A.S.Ind',
@@ -1441,6 +1494,7 @@ const msgglobal = {
onlyadult: "I confirm that I'm at least 18 years old",
submit: "Submit",
title_verif_reg: "Verify Registration",
reg_ok: "Successful Registration",
verificato: "Verified",
non_verificato: "Not Verified",
forgetpassword: "Forget Password?",
@@ -1682,6 +1736,9 @@ const msgglobal = {
cookies: 'We use cookies for better web performance.'
},
de: {
home: {
guida_passopasso: 'Step By Step Guide'
},
grid: {
editvalues: 'Edit Values',
addrecord: 'Add Row',
@@ -1767,6 +1824,7 @@ const msgglobal = {
go_login: 'Back to Login',
incorrect_input: 'Incorrect input.',
link_sent: 'Now read your email and confirm registration',
se_non_ricevo: 'If you do not receive the email, try checking in the spam, or contact us',
title_unsubscribe: 'Disiscrizione alla newsletter',
title_unsubscribe_done: 'Disiscrizione completata correttamente',
}
@@ -1794,9 +1852,14 @@ const msgglobal = {
downline: 'People you\'ve invited',
},
reg: {
verified_email: 'Email Verified',
reg_lista_prec: 'Please enter the First Name, Last Name and mobile phone number you left in the past when you signed up for the Chat! <br>This way the system will recognize you and keep the position of the list',
nuove_registrazioni: 'If this is a NEW registration, you must contact the person who INVITED you, who will leave you the CORRECT LINK to do the Registration under him/her',
you: 'You',
cancella_invitato: 'Delete Invited',
regala_invitato: 'Give invited',
messaggio_invito: 'Invitation Message',
messaggio_invito_msg: 'Copia il messaggio qui sotto e condividilo a tutti coloro a cui vuoi condividere questo Movimento !',
aportador_solidario: 'Solidarity Contributor',
aportador_solidario_nome_completo:'A.S. Name',
aportador_solidario_ind_order:'A.S.Ind',
@@ -1838,6 +1901,7 @@ const msgglobal = {
onlyadult: "I confirm that I'm at least 18 years old",
submit: "Submit",
title_verif_reg: "Verify Registration",
reg_ok: "Successful Registration",
verificato: "Verified",
non_verificato: "Not Verified",
forgetpassword: "Forget Password?",

View File

@@ -207,8 +207,6 @@ namespace Getters {
return MessageStore.state.last_msgs
else if (table === 'settings')
return UserStore.state.settings
else if (table === 'permissions')
return UserStore.state.permissionsList
else
return null
@@ -665,10 +663,6 @@ namespace Actions {
UserStore.mutations.setusersList(res.data.usersList)
}
if (res.data.permissionsList) {
UserStore.state.permissionsList = res.data.permissionsList
}
if (res.data.last_msgs) {
MessageStore.state.last_msgs = [...res.data.last_msgs]
}

View File

@@ -40,6 +40,7 @@ export const DefaultUser: IUserFields = {
img: '',
teleg_id: 0,
saw_zoom_presentation: false,
saw_and_accepted: false,
},
downline: [],
calcstat: DefaultCalc,
@@ -61,6 +62,7 @@ export const DefaultProfile: IUserProfile = {
my_dream: '',
manage_telegram: false,
saw_zoom_presentation: false,
saw_and_accepted: false,
paymenttypes: []
}
@@ -76,7 +78,6 @@ const state: IUserState = {
isAdmin: false,
isManager: false,
usersList: [],
permissionsList: [],
countusers: 0,
lastparamquery: {}
}

View File

@@ -346,14 +346,11 @@ export const fieldsTable = {
}
},
getColByTable(table) {
if (table === 'permissions') {
return ['value', 'label']
}
},
getTableJoinByName(table) {
if (table === 'permissions')
return [shared_consts.Permissions.Admin, shared_consts.Permissions.Manager, shared_consts.Permissions.Teacher]
else if (table === 'accepted')
return [shared_consts.Accepted.CHECK_READ_GUIDELINES, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI]
else if (table === 'fieldstype')
return tools.FieldTypeArr
else
@@ -405,6 +402,21 @@ export const fieldsTable = {
AddCol(DuplicateRec),
],
colTableUsersBase: [
AddCol({ name: 'ind_order', label_trans: 'reg.ind_order' }),
AddCol({ name: 'date_reg', label_trans: 'reg.date_reg', fieldtype: tools.FieldType.date }),
AddCol({ name: 'username', label_trans: 'reg.username_short' }),
AddCol({ name: 'name', label_trans: 'reg.name' }),
AddCol({ name: 'surname', label_trans: 'reg.surname' }),
AddCol({ name: 'email', label_trans: 'reg.email' }),
AddCol({ name: 'verified_email', label_trans: 'reg.verified_email', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'profile.nationality', field: 'profile', subfield: 'nationality', label_trans: 'reg.nationality' }),
AddCol({ name: 'profile.cell', field: 'profile', subfield: 'cell', label_trans: 'reg.cell' }),
AddCol({ name: 'perm', label_trans: 'reg.perm', fieldtype: tools.FieldType.binary, jointable: 'permissions' }),
AddCol(DeleteRec),
AddCol(DuplicateRec),
],
// IColGridTable
colTableUsers: [
// AddCol({ name: '_id', label_trans: 'reg.id' }),
@@ -422,6 +434,7 @@ export const fieldsTable = {
AddCol({ name: 'aportador_solidario', label_trans: 'reg.aportador_solidario' }),
AddCol({ name: 'verified_email', label_trans: 'reg.verified_email', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'profile.saw_zoom_presentation', field: 'profile', subfield: 'saw_zoom_presentation', label_trans: 'reg.saw_zoom_presentation', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'profile.saw_and_accepted', field: 'profile', subfield: 'saw_and_accepted', label_trans: 'reg.saw_and_accepted', fieldtype: tools.FieldType.binary, jointable: 'accepted' }),
AddCol({ name: 'profile.my_dream', field: 'profile', subfield: 'my_dream', label_trans: 'reg.my_dream' }),
AddCol({ name: 'profile.nationality', field: 'profile', subfield: 'nationality', label_trans: 'reg.nationality' }),
AddCol({ name: 'profile.intcode_cell', field: 'profile', subfield: 'intcode_cell', label_trans: 'reg.intcode_cell' }),
@@ -558,6 +571,15 @@ export const fieldsTable = {
colicon: 'icon',
noshow: true,
},
{
value: 'accepted',
label: 'Condizioni',
columns: colTablePermission,
colkey: 'value',
collabel: 'label',
colicon: 'icon',
noshow: true,
},
{
value: 'fieldstype',
label: 'Tipi di Campi',

View File

@@ -34,11 +34,12 @@ import { shared_consts } from '@src/common/shared_vuejs'
import { dom } from 'quasar'
const printf = require('util').format;
const printf = require('util').format
const { height, width } = dom
import Cookies from 'js-cookie'
import { forEachComment } from 'tslint'
const TokenKey = 'Admin-Token'
@@ -1461,7 +1462,7 @@ export const tools = {
id: par.param1._id,
table: tools.TABUSER,
fieldsvalue: { aportador_solidario: par.param2 },
notifBot: {}
notifBot: null
}
if (par.param3) {
@@ -1496,6 +1497,25 @@ export const tools = {
}
},
async saveFieldToServer(myself: any, table, id, mydata) {
const mydatatosave = {
id,
table,
fieldsvalue: mydata,
notifBot: null
}
GlobalStore.actions.saveFieldValue(mydatatosave).then((ris) => {
if (ris) {
tools.showPositiveNotif(myself.$q, myself.$t('db.recupdated'))
} else {
tools.showNegativeNotif(myself.$q, myself.$t('db.recfailed'))
}
})
},
async askConfirm($q: any, mytitle, mytext, ok, cancel, myself: any, table, funcok: number, funccancel: number, par: IParamDialog) {
return $q.dialog({
message: mytext,
@@ -2824,7 +2844,11 @@ export const tools = {
},
SetBit(myval, bit) {
myval = myval | bit
myval |= bit
return myval
},
UnSetBit(myval, bit) {
myval &= ~bit
return myval
},
getUnique(arr, comp) {
@@ -3151,13 +3175,21 @@ export const tools = {
return mystr.replace(/\s+/g, '')
},
copyStringToClipboard(mythis, mystr) {
copyStringToClipboard(mythis, mystr, show) {
copyToClipboard(mystr).then(() => {
tools.showNotif(mythis.$q, mythis.$t('dialog.copyclipboard') + ' \'' + mystr + '\'')
let msg = mythis.$t('dialog.copyclipboard')
if (show)
msg += ' \'' + mystr + '\''
tools.showNotif(mythis.$q, msg)
})
},
getlinkhref(mylink, text) {
return '<a href="' + mylink + '" target="_blank">' + text + '</a>'
},
getNationsByNationality(nat, code) {
if (nat === 'IT') {
return 'Italy'
@@ -3216,8 +3248,12 @@ export const tools = {
return 'https://zoom.us/j/' + id
},
myprintf( ) {
myprintf(val, params: any[]) {
params.forEach((par) => {
val = val.replace('{' + par.strin + '}', par.strout)
})
return val
}
// getLocale() {