- Aggiunto Step: i 7 Requisiti degli invitati.

- Aggiornata la Lavagna (anche sul BOT).
 - Zoom solo 3 visibili.
This commit is contained in:
Paolo Arena
2020-02-12 20:41:57 +01:00
parent ba21d228b3
commit ffb660e157
32 changed files with 766 additions and 418 deletions

View File

@@ -1,9 +1,14 @@
.lista {
.lista, .lista li {
text-align: left;
font-size: 0.75rem;
font-size: 1rem;
}
.lista-small li {
text-align: left;
font-size: 0.85rem;
}
.step{
font-size: 1.15rem;
font-weight: bold;

View File

@@ -20,16 +20,22 @@ export default class CGuidelines extends MixinBase {
public $t: any
public $q
public msg: string = ''
public myguideline: boolean = false
get static_data() {
return static_data
}
get accetta_guideline() {
return tools.isBitActive(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES)
public created() {
this.aggiorna_guideline()
}
set accetta_guideline(value) {
public aggiorna_guideline() {
this.myguideline = tools.isBitActive(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES)
}
public changeval(value) {
console.log('PRIMA saw_and_accepted', UserStore.state.my.profile.saw_and_accepted)
if (value)
UserStore.state.my.profile.saw_and_accepted = tools.SetBit(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES)
else
@@ -38,6 +44,9 @@ export default class CGuidelines extends MixinBase {
const mydata = {
'profile.saw_and_accepted': UserStore.state.my.profile.saw_and_accepted
}
this.aggiorna_guideline()
console.log('DOPO saw_and_accepted', UserStore.state.my.profile.saw_and_accepted)
tools.saveFieldToServer(this, 'users', UserStore.state.my._id, mydata)
}

View File

@@ -3,125 +3,179 @@
<CTitleBanner title="AYNI GIFT*ECOnomy"></CTitleBanner>
<CImgText src="">
<p class="cltexth3 text-green-8 q-ma-sm"><span class="boldhigh">Movimento di ECOnomia Solidale</span></p>
<p class="cltexth3 text-green-8 q-ma-sm"><span
class="boldhigh">Movimento di ECOnomia Solidale ~ AYNI GIFT*ECOnomy</span></p>
<p>
Ayni è un movimento di economia solidale. Si basa sul concetto del <strong>regalo</strong>: <strong>io
regalo</strong> e ricevo in modo libero
ed abbondante. È una struttura pensata e creata per permettere alle persone di aiutarsi e sostenersi fra di
loro, in modo da realizzare i propri sogni. È un progetto serio che richiede, a chi ne fa parte, di
<strong>Ayni</strong> è un movimento di economia solidale. Si basa sulla pratica del <strong>regalo</strong>,
del <strong>donare come risorsa e come
ricchezza! Dare e donare mi apre al ricevere, crea relazioni basate sullaiuto e la gratitudine</strong>, non
sul profitto.</p>
<p>
<strong>Ayni</strong> è pensata e creata per permettere alle persone di aiutarsi e sostenersi fra di loro, in
modo da realizzare
i propri sogni e i propri progetti di vita. È un progetto serio che richiede, a chi ne vuol far parte, di
comprendere che questo non è un sistema per guadagnare o un classico fondo di investimento, ma un modo per
recuperare quel fattore umano di aiuto reciproco attraverso il continuo sostegno dei nuovi membri supportati
da chi ha già fatto esperienza in movimenti di Economia Solidale, che la civiltà moderna capitalista
(occidentale) ci sta facendo perdere.</p>
recuperare quel fattore umano di aiuto reciproco attraverso il continuo sostegno e accompagnamento dei nuovi
membri supportati da chi ha già fatto esperienza in questo e in altri movimenti di Economia Solidale, attraverso
il fare Rete, creando così <strong>relazioni e esperienze di Valore, generando Ricchezza Reale</strong>.</p>
<p class="text-center"><strong>Strumenti necessari per far parte di AYNI</strong></p>
<ul class="lista">
<li>Cellulare e/o computer</li>
<li>App Telegram</li>
<li>App Zoom (per Video Conferenze)</li>
</ul>
<p class="cltexth3 text-red q-ma-lg">Cosa devi fare per poter entrare in Ayni?</p>
<p class="cltexth3 text-red q-ma-lg">Cosa devi fare per poter entrare in <strong>Ayni</strong>?</p>
<p class="cltexth3 text-blue q-ma-lg">Fase 1: Accoglienza</p>
<ul class="lista">
<li>Qualcuno ti ha invitato e ti ha dato il link di accesso al sito <strong>AYNI GIFT*ECOnomy.</strong></li>
<li>Entri nella chat Telegram <strong>PowerList</strong>, che ti supporterà nella ricerca degli invitati,
attraverso
lesperienza e laiuto di chi ha già fatto il cammino.
<li>Qualcuno ti ha invitato e ti ha dato il link di accesso al sito <strong>AYNI GIFT*ECOnomy.</strong> e ti sei
iscritto.
</li>
<li>Quando avrai trovato i tuoi invitati, potrai a tua volta sostenere i nuovi arrivati in chat.</li>
<li>Entri nella chat Telegram <strong>Ayni-BiblioBacheca</strong> che è una chat di informazioni in cui verranno
postate
giornalmente notizie e novità sul movimento.
<li>Entri nella chat Telegram <strong>Ayni EMPOWER</strong>, luogo dove ci incontriamo, accogliamo i nuovi
invitati, e ci aiutiamo a sostenere e ad espandere la nostra visione e il movimento.
</li>
<li>Nella chat Telegram <strong>Ayni Help & Support</strong> potrai entrare ogni volta che avrai domande o
dubbi, troverai lo
Staff di Ayni ad aiutarti.
<li>
Entri nel Canale Telegram <strong>AYNI BIBLIO</strong> che è un canale di informazioni in cui vengono postati
comunicati,
notizie e novità sul movimento.
</li>
<li>
Infine abbiamo Telegram <strong>AYNI HELP</strong> dove puoi entrare ogni volta che dovessero sorgerti domande
o dubbi,
trovando un aiuto pratico a tua disposizione.
</li>
</ul>
<p class="cltexth3 text-blue q-ma-lg">Fase 2: Completamento dei requisiti richiesti</p>
<ol class="lista">
<li>Leggere le Linee Guida ed accettare tutte le condizioni richieste.</li>
<li>Vedere i Video Introduttivi al Movimento.</li>
<li>Assistere ad uno <strong>Zoom di Benvenuto</strong> in cui potrai parlare direttamente con gli
Amministratori e porre
tutte le tue domande.
<li>Leggere ed accettare le nostre Linee Guida e Guardare i Video Introduttivi al Movimento.</li>
<li>Assistere ad uno <strong>Zoom di Benvenuto</strong> (Video-Conferenza) in cui potrai conoscere il movimento, parlare
direttamente con i membri dello Staff, risolvere e chiarire eventuali dubbi.
</li>
<li>Scrivere <strong>il tuo Sogno</strong> per il quale sei entrato in Ayni e che desideri realizzare.</li>
<li>Attivare almeno <strong>2 metodi di pagamento</strong>, uno per il tuo paese di residenza ed uno per
transazioni
allestero.<br>
PayPal è obbiligatorio, il trasferimento e gratuito e si possono collegare carte e conti correnti.<br>
Sono consigliati il Conto Revolut o N26 per le transazioni estere.
<li>Scrivere <strong>il tuo Sogno</strong>: qual è la cosa o il progetto che vorresti realizzare e che il tuo
Cuore desidera ardentemente?
</li>
<li>Trovare a tua volta <strong>almeno 2 invitati</strong> (<strong>consigliati 3</strong>) invitando più
persone ad assistere agli Zoom di
Benvenuto ed assisterli nella registrazione sul sito <strong>AYNI GIFT*ECOnomy</strong>.
<li>Attivare almeno <strong>2 metodi di pagamento</strong>.
<strong>PayPal</strong> è obbligatorio (occorrono 2 minuti per attivarlo).
Ti consente trasferimenti gratuiti in area Euro e puoi collegarci carte e conti
correnti. I tuoi dati sono al sicuro e non condivisi con il ricevente.
Sono consigliati il conto <strong>Revolut</strong> o <strong>N26</strong> come seconda opzione e <strong>Western Union</strong>, Xoom o TransferWise nei casi di
regali extraeuropei.
</li>
<li>Invitare, invitare, invitare. Accompagnare le persone ad un Zoom di Benvenuto e assisterli nella
registrazione al sito. Il movimento è un organismo vivente di cui ora anche tu fai parte. Per ciò ti viene
richiesto di coinvolgere attivamente almeno 2 persone, <strong>ne consigliamo 3 in su</strong>, non penso solo a
me, ma anche agli altri che ne fanno parte, garantendo e <strong>sostenendo così la solidarietà</strong> dello stesso.
</li>
</ol>
<p class="cltexth3 text-blue q-ma-lg">Fase 3: Programmazione della Billettera</p>
<p class="cltexth3 text-blue q-ma-lg">Fase 3: Programmazione e Attivazione della Billettera</p>
<p>Ti verrà comunicato con anticipo la data in cui entrerai nella tua Billettera, il nominativo del Sognatore
a cui dovrai versare il tuo dono di 33 ed i suoi estremi di pagamento.</p>
<br>
<p class="cltexth3 text-green-8 q-ma-lg"><span class="boldhigh">Ora il tuo viaggio comincia !!!</span></p>
<p class="text-center"><strong>Comè composta strutturalmente una Billettera AYNI?</strong></p>
<p>La sequenza dei passaggi in AYNI è programmata in anticipo, così da</p>
<p>In AYNI La sequenza dei passaggi è programmata in anticipo, in modo da:</p>
<ul class="lista">
<li>garantire che tutto il processo si svolga nei 3 passi previsti</li>
<li>fare in modo di realizzare il processo in maniera semplice e automatizzata.</li>
<li>garantire che i 3 passi del processo si svolgano nei tempi e nella forma previsti.</li>
<li>realizzare e concludere il processo in maniera semplice, godibile e semi-automatizzata.</li>
</ul>
<p class="cltexth4 text-blue q-ma-lg">I 3 passi</p>
<p>Dal momento in cui conosco il giorno della partenza della mia bigliettera, i seguenti passi da compiere
saranno questi:</p>
<p class="step">Passo 1:</p>
<p class="grass">Entro nella chat Telegram come Donatore:</p>
<p>Il mio compito è fare il dono di 33 al Sognatore.</p>
<p class="step">Passo 2:</p>
<p class="grass">Apro una chat Telegram e divento Mediatore:</p>
<p>il mio compito è quello di assicurarmi che tutti i Donatori facciano il Dono al Sognatore.
Il sistema invierà in automatico le istruzioni per fare il Dono, il Mediatore interverrà se ci saranno
eventuali problematiche con i metodi di pagamento scelti.</p>
<p class="step">Passo 3:</p>
<p class="grass">Apro una chat Telegram e divento Sognatore:</p>
<p>Il mio compito è quello di ricevere i Doni da tutti i Donatori, aprirmi allabbondanza e celebrare.
<p>La tua Billetera verrà programmata e tu entrerai in una chat coi tuoi compagni di viaggio. Allo stesso tempo,
ti verrà comunicata la data in cui la billetera sarà attivata e in cui potrai donare i 33 e il nominativo e i
dati del Sognatore a cui fare il tuo dono.
Conoscerai, inoltre, le date di ciascuno dei 3 passi.
</p>
<br>
<p style="font-size: 1rem;"><strong>Donatore</strong>: Colui che effettua il Dono di 33.<br>
<strong>Mediatore</strong>: E lintermediario tra i Donatori e il Sognatore.<br>
<strong>Sognatore</strong>: Colui che riceve i Doni.<br>
<p class="clBorderImportant" style="border-color: grey">
Le date di programmazione e dei passi sono intese come <em>previsioni di attivazione e di completamento</em>.
Nel caso
il flusso di persone e di invitati non consentisse di mantenere e realizzare quanto programmato nei tempi e
forma previsti, le date verranno riprogrammate per permettere il completamento di tutti e non lasciare che il
viaggio possa interrompersi.
</p>
<p>Nel fare esperienza dei 3 passi incontreremo e transiteremo in 3 personaggi:</p>
<p style=""><strong>Donatore</strong>: Colui che effettua il Dono di 33.<br>
<strong>Mediatore</strong>: È il ponte, colui che mette in relazione Donatori e Sognatore.<br>
<strong>Sognatore</strong>: Colui che manifesta il suo sogno ricevendo i Doni.<br>
</p>
<CTitleBanner title="Visualizza in Anteprima I 3 Passi (clicca qui)" bgcolor="bg-green-5" canopen="true" :visible="false" imgpreview="statics/images/passo_1.jpg">
<p>Dal momento in cui conosco il giorno della partenza della mia bigliettera, i passi da compiere
saranno questi:</p>
<div class="text-center">
<q-img src="statics/images/passo_1.jpg" class="img"></q-img>
</div>
<p class="grass">Entro nella chat Telegram come Donatore:</p>
<p>La chat è formata da 8 donatori e un mediatore.<br>
Il mio compito è di regalare 33 al Sognatore (il mediatore mi guiderà nel processo).<br>
Il dono lo farò nella data di attivazione della billetera e del passo 1.</p>
<div class="text-center">
<q-img src="statics/images/passo_2.jpg" class="img"></q-img>
</div>
<p class="grass">Apro una chat Telegram e divento Mediatore:</p>
<p>La chat è formata da 8 donatori (che aiuterò ad entrare in chat) e da me, il Mediatore.<br>
Il mio compito è quello di assicurarmi che tutti i Donatori facciano il Dono al Sognatore.
Il sistema invierà in automatico le istruzioni per fare il Dono, il Mediatore (io) verificherà e accompagnerà
il
processo.<br>
Il passo 2, di norma, è attivato 4 giorni dopo il passo 1.</p>
<!--Contemporaneamente sono ancora attivo nella chat dove sono entrato nel passo 1 (stessa chat e stesse persone),
dove ora i ruoli sono ora cambiati, ovvero ci sono 8 mediatori (di cui uno sono io) e un Sognatore (il sognatore a
cui i donatori stanno facendo il dono).-->
<div class="text-center">
<q-img src="statics/images/passo_3.jpg" class="img"></q-img>
</div>
<p class="grass">Divento Sognatore:</p>
<p>La chat dove sono Sognatore è la stessa e con le stesse persone aperta nel passo 2 (dove io ero Mediatore) e
anche qui cambiano i ruoli, ovvero ora ci sono 8 mediatori e io, il Sognatore.<br>
Il mio compito è quello di aprirmi a ricevere i Doni da ciascun Donatore, completarmi e celebrare
lAbbondanza.
<br>
Il passo 3, di norma, è attivato 4 giorni dopo il passo 2.<br>
<br>
</p>
</CTitleBanner>
<p class="text-blue-10 q-ma-lg clBorderImportant text-center" style="font-size: 1.15rem;">La Chat Automatica
<strong>AYNI BOT</strong> mi invierà
tutte le istruzioni che dovrò compiere,
al momento opportuno!</p>
<p class="cltexth2 text-green-8 q-ma-lg"><span class="boldhigh">Bene... Ora mettiti comodo, il tuo viaggio è cominciato!</span>
</p>
<div v-if="showconditions">
<p>&nbsp;</p>
<CTitleBanner title="Condizioni da Accettare:"></CTitleBanner>
<ul class="lista">
<CTitleBanner title="Condizioni da Accettare:" bgcolor="bg-red-5"></CTitleBanner>
<ul class="lista-small">
<li>dichiaro di aver letto e ben compreso le linee guida del movimento AYNI</li>
<li>dichiaro di aver ben compreso gli impegni che prendo iscrivendomi a AYNI (portare 2 persone, ragalo 33 ) e di
<li>dichiaro di aver ben compreso gli impegni che prendo iscrivendomi a AYNI (portare 2 persone, ragalo 33 )
e di
aver compreso che senza non verrò inserito in programmazione.
</li>
<li>dichiaro di aver ben compreso che <strong>non è un fondo di investimento e che il mio regalo è a fondo perduto</strong>
<li>dichiaro di aver ben compreso che <strong>non è un fondo di investimento e che il mio regalo è a fondo
perduto</strong>
</li>
<li>dichiaro di aver ben compreso che devo <strong>partecipare almeno ad uno ZOOM</strong> (Video-Conferenza On Line)</li>
<li>dichiaro di aver ben compreso che devo <strong>partecipare almeno ad uno ZOOM</strong> (Video-Conferenza
On Line)
</li>
<li>dichiaro di aver ben compreso che per la mia sicurezza devo aprire un <strong>conto Paypal</strong> per consegnare il regalo.
<li>dichiaro di aver ben compreso che per la mia sicurezza devo aprire un <strong>conto Paypal</strong> per
consegnare il regalo.
</li>
</ul>
<q-checkbox
class="bg-grey-4"
v-model="accetta_guideline"
v-model="myguideline"
color="primary"
@input="changeval"
:label="$t('steps.read_guidelines')">
</q-checkbox>

View File

@@ -16,14 +16,11 @@ import { CRequisito } from '../CRequisito'
import translate from '../../globalroutines/util'
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'
import { CMyRequirement } from '../CMyRequirement'
@Component({
mixins: [validationMixin],
validations,
components: { CProfile, CTitleBanner, CMyFieldDb, CCopyBtn, CUserBadge, CLegenda, CRequisito }
components: { CProfile, CTitleBanner, CMyFieldDb, CCopyBtn, CUserBadge, CLegenda, CRequisito, CMyRequirement }
})
export default class CMyDashboard extends MixinUsers {
@@ -45,122 +42,6 @@ export default class CMyDashboard extends MixinUsers {
@Prop({ required: true }) public username
public arrrequisiti = [
{
icon: 'email',
textlang: 'reg.verified_email',
textadd(user) {
return ''
},
isok(user) {
if (user)
return user.verified_email
else
return false
},
info: '',
},
{
icon: 'fab fa-telegram',
textlang: 'reg.telegram',
textadd(user) {
return ''
},
isok(user) {
if (user)
if (user.profile)
return user.profile.teleg_id > 0
return false
},
info: '',
},
{
icon: 'fas fa-file-signature',
textlang: 'steps.linee_guida',
textadd(user) {
return ''
},
isok(user) {
if (user)
if (user.profile)
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: '',
},
{
icon: 'fas fa-heart',
textlang: 'steps.dream',
textadd(user) {
return ''
},
isok(user) {
if (user)
if (user.profile.my_dream)
return user.profile.my_dream.length > 20
else
return false
},
info: '',
},
{
icon: 'far fa-credit-card',
textlang: 'steps.paymenttype',
textadd(user) {
return ''
},
isok(user) {
let ispaypal = false
if (user) {
if (!!user.profile.paymenttypes) {
if (user.profile.paymenttypes.includes('paypal')) {
if (user.profile.email_paypal) {
ispaypal = true
}
}
if (!!user.profile)
if (!!user.profile.paymenttypes) {
const ris = (user.profile.paymenttypes.length >= 2) && ispaypal
return ris
}
}
}
return false
},
info: '',
},
{
icon: 'fas fa-users',
textlang: 'dashboard.numinvitati',
textadd(user) {
return ' (' + user.numinvitatiattivi + ' / ' + user.numinvitati + ')'
},
isok(user) {
if (user) {
return user.numinvitatiattivi >= 2
}
},
info: '',
},
]
@Watch('UserStore.state.my.dashboard')
public changedash() {
console.log('changedash')
@@ -209,85 +90,4 @@ export default class CMyDashboard extends MixinUsers {
this.seluser = user
}
public isextralist(user) {
return !!user.cell_complete
}
public ismyinvited_notreg(user) {
return this.dashboard.downnotreg.find((rec) => rec.ind_order === user.ind_order)
}
public ismydownline(user) {
return this.dashboard.downline.find((rec) => rec.username === user.username)
}
public async deleteUserFromExtraList(user) {
await tools.askConfirm(this.$q, translate('reg.cancella_invitato'), translate('reg.cancella_invitato') + ' ' + user.name + ' ' + user.surname + '?', translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.DELETE_EXTRALIST, 0, {
param1: user,
param2: true
})
}
public async deleteUserFromUsersList(user) {
await tools.askConfirm(this.$q, translate('reg.cancella_invitato'), translate('reg.cancella_invitato') + ' ' + user.name + ' ' + user.surname + '?', translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.DELETE_USERLIST, 0, {
param1: user,
param2: true
})
}
public async RegalaInvitato(user, aportador_solidario, notifBottxt) {
let notiftxt = ''
if (this.notifBot)
notiftxt = notifBottxt
await tools.askConfirm(this.$q, translate('reg.regala_invitato'), translate('reg.regala_invitato') + ' ' + user.name + ' ' + user.surname + ' a ' + aportador_solidario + ' ?', translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.REGALA_INVITATO, 0, {
param1: user,
param2: aportador_solidario,
param3: notiftxt
})
}
public errorMsg(cosa: string, item: any) {
try {
if (!item.$error) {
return ''
}
if (item.required !== undefined) {
if (!item.required) {
return this.$t('reg.err.required')
}
} else if (cosa === 'aportador_solidario') {
// console.log(item);
if (!item.aportadorexist) {
// console.log('!item.aportadorexist !')
return this.$t('reg.err.aportador_regalare_not_exist')
}
}
return ''
} catch (error) {
// console.log("ERR : " + error);
}
}
get allowSubmit() {
let error = this.$v.$error || this.$v.$invalid
error = error || (this.aportador_solidario === this.seluser.aportador_solidario)
return !error
}
get getnotifBotTxt() {
return this.$t('dashboard.ricevuto_dono', {
invitato: this.seluser.name + ' ' + this.seluser.surname,
mittente: this.dashboard.myself.username
})
}
}

View File

@@ -3,6 +3,13 @@
<CTitleBanner class="q-pa-xs" :title="$t('pages.dashboard')" bgcolor="bg-info" clcolor="text-white"
mystyle=" " myclass="myshad">
<div v-if="!!dashboard.myself.name">
<CMyRequirement :myseluser="dashboard.myself" :mydashboard="dashboard">
</CMyRequirement>
</div>
<CTitleBanner class="shadow-2" :title="$t('reg.aportador_solidario')" bgcolor="bg-accent"
clcolor="text-white"
@@ -111,6 +118,7 @@
bgcolor="bg-primary"
clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true">
<p class="q-ml-sm">Clicca sul nome dell'invitato per vedere lo stato dei suoi Requisiti.</p>
<q-list bordered class="rounded-borders row justify-between">
<CLegenda icon="fab fa-telegram" :text="`Telegram ` + $t('pages.statusreg.verified')"></CLegenda>
<CLegenda icon="fas fa-video" :text="$t('pages.statusreg.seezoom')"></CLegenda>
@@ -122,102 +130,17 @@
<br>
<q-dialog v-model="showuserinfo">
<q-card v-if="seluser" :style="`min-width: `+ tools.myheight_dialog() + `px;`">
<q-toolbar class="bg-primary text-white">
<q-card v-if="seluser" :style="`min-width: `+ tools.myheight_dialog() + `px;` ">
<q-toolbar class="bg-primary text-white" style="min-height: 30px;">
<q-toolbar-title>
Info:
{{$t('reg.requirement')}}
</q-toolbar-title>
<q-btn flat round color="white" icon="close" v-close-popup></q-btn>
</q-toolbar>
<q-card-section class="inset-shadow">
<CTitleBanner class="shadow-2 rounded-borders" :title="seluser.name + ` ` + seluser.surname"
bgcolor="bg-primary"
clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true">
<q-card-section class="inset-shadow" style="padding: 4px !important;">
<CMyRequirement :myseluser="seluser" :mydashboard="dashboard" :notitle="false">
<div v-if="!ismyinvited_notreg(seluser)" class="text-center">
<div v-if="!isextralist(seluser)">
<div v-for="req of arrrequisiti">
<CRequisito :icon="req.icon" :text="$t(req.textlang) + req.textadd(seluser)" :isok="req.isok(seluser)"
:info="req.info"></CRequisito>
</div>
</div>
<div v-if="ismydownline(seluser)">
<CTitleBanner class="shadow-2 rounded-borders" :title="$t('reg.regala_invitato')"
bgcolor="bg-positive"
clcolor="text-white"
:visible="false"
mystyle=" " myclass="myshad" :canopen="true">
<div class="column q-gutter-sm justify-center text-center">
<q-input
bg-color="lightblue"
v-model="aportador_solidario"
rounded outlined
@blur="$v.aportador_solidario.$touch"
:error="$v.aportador_solidario.$error"
:error-message="errorMsg('aportador_solidario', $v.aportador_solidario)"
maxlength="20"
debounce="1000"
:label="$t('reg.username_regala_invitato')">
<template v-slot:prepend>
<q-icon name="person"/>
</template>
</q-input>
<q-toggle v-model="notifBot" :label="$t('dashboard.sendnotification')"/>
<q-btn class="q-ma-sm" rounded color="positive" text-color="white" icon="fas fa-gift"
:label="$t('reg.regala_invitato')"
:disabled='!allowSubmit'
@click="RegalaInvitato(seluser, aportador_solidario, getnotifBotTxt)"></q-btn>
</div>
</CTitleBanner>
<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"
:visible="false"
mystyle=" " myclass="myshad" :canopen="true">
<q-btn rounded text-color="red" icon="delete"
:label="$t('reg.cancella_invitato')"
@click="deleteUserFromUsersList(seluser)"></q-btn>
</CTitleBanner>
</div>
</div>
<div v-else>
<div class="column justify-center q-gutter-sm q-pa-sm">
<CRequisito icon="fas fa-user" :text="$t('dashboard.notreg')" :isok="false"
info=""></CRequisito>
<CTitleBanner class="shadow-2 rounded-borders text-center"
:title="$t('reg.cancella_invitato')"
bgcolor="bg-negative"
clcolor="text-white"
:visible="false"
mystyle=" " myclass="myshad" :canopen="true">
<q-btn rounded text-color="red" icon="delete" :label="$t('reg.cancella_invitato')"
@click="deleteUserFromExtraList(seluser)"></q-btn>
</CTitleBanner>
</div>
</div>
</CTitleBanner>
</CMyRequirement>
</q-card-section>
</q-card>
</q-dialog>

View File

@@ -0,0 +1,293 @@
import { Component, Prop, Watch } from 'vue-property-decorator'
import { UserStore } from '../../store/Modules'
import { DefaultUser } from '@src/store/Modules/UserStore'
import MixinUsers from '../../mixins/mixin-users'
import { CProfile } from '../CProfile'
import { CTitleBanner } from '../CTitleBanner'
import { CMyFieldDb } from '../CMyFieldDb'
import { CCopyBtn } from '../CCopyBtn'
import { CUserBadge } from '../CUserBadge'
import { CLegenda } from '../CLegenda'
import { IDashboard, IUserProfile } from '../../model'
import { IUserFields } from '../../model/UserStore'
import { CRequisito } from '../CRequisito'
import translate from '../../globalroutines/util'
import { tools } from '../../store/Modules/tools'
import { lists } from '../../store/Modules/lists'
import { validations } from './CMyRequirement-validate'
import { validationMixin } from 'vuelidate'
import { shared_consts } from '../../common/shared_vuejs'
@Component({
mixins: [validationMixin],
validations,
components: { CProfile, CTitleBanner, CMyFieldDb, CCopyBtn, CUserBadge, CLegenda, CRequisito }
})
export default class CMyRequirement extends MixinUsers {
@Prop({ required: true }) public myseluser
@Prop({ required: true }) public mydashboard
@Prop({ required: false, default: false }) public notitle
public $t
public $v
public $q
public notifBot: boolean = true
public aportador_solidario: string = ''
public seluser: IUserFields = DefaultUser
public dashboard: IDashboard = {
myself: DefaultUser,
aportador: DefaultUser,
numpeople_aportador: 0,
downline: [],
downnotreg: [],
downbyuser: []
}
@Watch('mydashboard')
public changedash() {
console.log('changedash')
this.dashboard = this.mydashboard
}
@Watch('myusersel')
public changemyusersel() {
console.log('myseluser')
this.seluser = this.myseluser
}
public arrrequisiti = [
{
icon: 'email',
textlang: 'reg.verified_email',
textadd(user) {
return ''
},
isok(user) {
if (user)
return user.verified_email
else
return false
},
info: '',
},
{
icon: 'fab fa-telegram',
textlang: 'reg.telegram',
textadd(user) {
return ''
},
isok(user) {
if (user)
if (user.profile)
return user.profile.teleg_id > 0
return false
},
info: '',
},
{
icon: 'fas fa-file-signature',
textlang: 'steps.linee_guida',
textadd(user) {
return ''
},
isok(user) {
if (user)
if (user.profile)
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: '',
},
{
icon: 'fas fa-video',
textlang: 'steps.zoom',
textadd(user) {
return ''
},
isok(user) {
if (user) {
return user.profile.saw_zoom_presentation
}
},
info: '',
},
{
icon: 'fas fa-heart',
textlang: 'steps.dream',
textadd(user) {
return ''
},
isok(user) {
if (user)
if (user.profile.my_dream)
return user.profile.my_dream.length > 20
else
return false
},
info: '',
},
{
icon: 'far fa-credit-card',
textlang: 'steps.paymenttype',
textadd(user) {
return ''
},
isok(user) {
let ispaypal = false
if (user) {
if (!!user.profile.paymenttypes) {
if (user.profile.paymenttypes.includes('paypal')) {
if (user.profile.email_paypal) {
ispaypal = true
}
}
if (!!user.profile)
if (!!user.profile.paymenttypes) {
const ris = (user.profile.paymenttypes.length >= 1) && ispaypal
return ris
}
}
}
return false
},
info: '',
},
{
icon: 'fas fa-users',
textlang: 'steps.sharemovement',
textadd(user) {
return ''
},
isok(user) {
if (user) {
return user.numinvitati >= 2
}
},
info: '',
},
{
icon: 'fas fa-users',
textlang: 'dashboard.inv_attivi',
textadd(user) {
return ' (' + user.numinvitatiattivi + ')'
},
isok(user) {
if (user) {
return user.numinvitatiattivi >= 2
}
},
info: '',
},
]
get mythis() {
return this
}
public created() {
this.dashboard = this.mydashboard
this.seluser = this.myseluser
}
public isextralist(user) {
return !!user.cell_complete
}
public ismyinvited_notreg(user) {
return this.dashboard.downnotreg.find((rec) => rec.ind_order === user.ind_order)
}
public ismydownline(user) {
return this.dashboard.downline.find((rec) => rec.username === user.username)
}
public async deleteUserFromExtraList(user) {
await tools.askConfirm(this.$q, translate('reg.cancella_invitato'), translate('reg.cancella_invitato') + ' ' + user.name + ' ' + user.surname + '?', translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.DELETE_EXTRALIST, 0, {
param1: user,
param2: true
})
}
public async deleteUserFromUsersList(user) {
await tools.askConfirm(this.$q, translate('reg.cancella_invitato'), translate('reg.cancella_invitato') + ' ' + user.name + ' ' + user.surname + '?', translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.DELETE_USERLIST, 0, {
param1: user,
param2: true
})
}
public async RegalaInvitato(user, aportador_solidario, notifBottxt) {
let notiftxt = ''
if (this.notifBot)
notiftxt = notifBottxt
await tools.askConfirm(this.$q, translate('reg.regala_invitato'), translate('reg.regala_invitato') + ' ' + user.name + ' ' + user.surname + ' a ' + aportador_solidario + ' ?', translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.REGALA_INVITATO, 0, {
param1: user,
param2: aportador_solidario,
param3: notiftxt
})
}
public errorMsg(cosa: string, item: any) {
try {
if (!item.$error) {
return ''
}
if (item.required !== undefined) {
if (!item.required) {
return this.$t('reg.err.required')
}
} else if (cosa === 'aportador_solidario') {
// console.log(item);
if (!item.aportadorexist) {
// console.log('!item.aportadorexist !')
return this.$t('reg.err.aportador_regalare_not_exist')
}
}
return ''
} catch (error) {
// console.log("ERR : " + error);
}
}
get allowSubmit() {
let error = this.$v.$error || this.$v.$invalid
error = error || (this.aportador_solidario === this.seluser.aportador_solidario)
return !error
}
get getnotifBotTxt() {
return this.$t('dashboard.ricevuto_dono', {
invitato: this.seluser.name + ' ' + this.seluser.surname,
mittente: this.dashboard.myself.username
})
}
}

View File

@@ -0,0 +1,98 @@
<template>
<div>
<CTitleBanner class="shadow-2 rounded-borders" :title="$t('reg.requirement') + ` - ` + seluser.name + ` ` + seluser.surname + ``"
bgcolor="bg-primary"
clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true">
<div v-if="!ismyinvited_notreg(seluser)" class="text-center">
<div v-if="!isextralist(seluser)">
<div v-for="(req, index) of arrrequisiti">
<CRequisito :icon="req.icon" :text="(index + 1) + `. ` + $t(req.textlang) + req.textadd(seluser)" :isok="req.isok(seluser)"
:info="req.info"></CRequisito>
</div>
</div>
<div v-if="ismydownline(seluser)">
<CTitleBanner class="shadow-2 rounded-borders" :title="$t('reg.regala_invitato')"
bgcolor="bg-positive"
clcolor="text-white"
:visible="false"
mystyle=" " myclass="myshad" :canopen="true">
<div class="column q-gutter-sm justify-center text-center">
<q-input
bg-color="lightblue"
v-model="aportador_solidario"
rounded outlined
@blur="$v.aportador_solidario.$touch"
:error="$v.aportador_solidario.$error"
:error-message="errorMsg('aportador_solidario', $v.aportador_solidario)"
maxlength="20"
debounce="1000"
:label="$t('reg.username_regala_invitato')">
<template v-slot:prepend>
<q-icon name="person"/>
</template>
</q-input>
<q-toggle v-model="notifBot" :label="$t('dashboard.sendnotification')"/>
<q-btn class="q-ma-sm" rounded color="positive" text-color="white" icon="fas fa-gift"
:label="$t('reg.regala_invitato')"
:disabled='!allowSubmit'
@click="RegalaInvitato(seluser, aportador_solidario, getnotifBotTxt)"></q-btn>
</div>
</CTitleBanner>
<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"
:visible="false"
mystyle=" " myclass="myshad" :canopen="true">
<q-btn rounded text-color="red" icon="delete"
:label="$t('reg.cancella_invitato')"
@click="deleteUserFromUsersList(seluser)"></q-btn>
</CTitleBanner>
</div>
</div>
<div v-else>
<div class="column justify-center q-gutter-sm q-pa-sm">
<CRequisito icon="fas fa-user" :text="$t('dashboard.notreg')" :isok="false"
info=""></CRequisito>
<CTitleBanner class="shadow-2 rounded-borders text-center"
:title="$t('reg.cancella_invitato')"
bgcolor="bg-negative"
clcolor="text-white"
:visible="false"
mystyle=" " myclass="myshad" :canopen="true">
<q-btn rounded text-color="red" icon="delete" :label="$t('reg.cancella_invitato')"
@click="deleteUserFromExtraList(seluser)"></q-btn>
</CTitleBanner>
</div>
</div>
</CTitleBanner>
</div>
</template>
<script lang="ts" src="./CMyRequirement.ts">
</script>
<style lang="scss" scoped>
@import './CMyRequirement.scss';
</style>

View File

@@ -0,0 +1 @@
export {default as CMyRequirement} from './CMyRequirement.vue'

View File

@@ -22,7 +22,7 @@ export default class CNextZoom extends MixinBase {
public $t
get listacalzoom() {
return GlobalStore.state.calzoom
return GlobalStore.state.calzoom.slice(-3)
}
get nextconf() {

View File

@@ -25,6 +25,8 @@ import { static_data } from '../../db/static_data'
})
export default class CSignIn extends Vue {
@Prop({required: true}) public showregbutt: boolean
public $v
public loading: boolean
public $t: any

View File

@@ -28,6 +28,7 @@
v-model="signin.password"
type="password"
rounded outlined dense
v-on:keyup.enter="submit()"
@blur="$v.signin.password.$touch"
:error="$v.signin.password.$error"
:error-message="`${errorMsg('password', $v.signin.password)}`"
@@ -37,9 +38,6 @@
</template>
</q-input>
<div class="text-center" style="margin-bottom: 10px;">
<a :href="getlinkforgetpwd()" style="color:gray;">{{$t('reg.forgetpassword')}}</a>
</div>
<!--<q-card class="flex flex-center">-->
@@ -55,10 +53,15 @@
:disable="$v.$error || iswaitingforRes">{{$t('login.enter')}}
</q-btn>
</div>
<div v-if="static_data.functionality.ENABLE_REGISTRATION" align="center" style="margin-top:10px;">
<div v-if="static_data.functionality.ENABLE_REGISTRATION && showregbutt" align="center" style="margin-top:10px;">
<q-btn flat rounded size="md" color="primary" to="/signup" :label="$t('reg.submit')">
</q-btn>
</div>
<br>
<div class="text-center" style="margin-bottom: 10px;">
<a :href="getlinkforgetpwd()" style="color:gray;">{{$t('reg.forgetpassword')}}</a>
</div>
</div>
</form>

View File

@@ -69,14 +69,17 @@ export default class CSignUpNotevole extends MixinBase {
this.signup.aportador_solidario = this.$route.params.invited
console.log('1) aportador_solidario', this.signup.aportador_solidario)
if (!this.signup.aportador_solidario)
this.signup.aportador_solidario = tools.getCookie(tools.APORTADOR_SOLIDARIO, this.signup.aportador_solidario)
if (!this.signup.aportador_solidario) {
if (!this.signup.aportador_solidario || this.signup.aportador_solidario === 'undefined') {
this.signup.aportador_solidario = tools.APORTADOR_NONE
}
this.$v.signup.aportador_solidario.$touch()
console.log('this.signup.aportador_solidario', this.signup.aportador_solidario)
}
// @Watch('signup.already_registered')

View File

@@ -28,6 +28,7 @@ export default class CStatus extends MixinBase {
public step = 0
public steptodo = 0
public NUMSTEP_OBBLIGATORI = 9
public my_dream: string = ''
get numpayment() {
if (UserStore.state.my.profile)
@@ -143,7 +144,7 @@ export default class CStatus extends MixinBase {
page: '/mydream',
funccheck(index) {
if (UserStore.state.my.profile.my_dream)
if (UserStore.state.my.profile.my_dream.length > 20)
if (UserStore.state.my.profile.my_dream.length > 10)
return true
return false
@@ -171,7 +172,7 @@ export default class CStatus extends MixinBase {
}
if (UserStore.state.my.profile)
if (UserStore.state.my.profile.paymenttypes)
return (UserStore.state.my.profile.paymenttypes.length >= 2) && ispaypal
return (UserStore.state.my.profile.paymenttypes.length >= 1) && ispaypal
}
return false
@@ -190,6 +191,24 @@ export default class CStatus extends MixinBase {
title: 'steps.sharemovement',
descr: 'steps.sharemovement_long',
page: '/sharemovement',
funccheck(index) {
if (UserStore.state.my.calcstat)
return UserStore.state.my.calcstat.numinvitati >= 2
},
funccheck_error(index) {
return true
},
funcok() {
return ''
},
funcko() {
return ''
},
},
{
title: 'dashboard.inv_attivi',
descr: 'steps.inv_attivi_long',
page: '',
funccheck(index) {
if (UserStore.state.my.calcstat)
return UserStore.state.my.calcstat.numinvitati_attivi >= 2
@@ -316,6 +335,19 @@ export default class CStatus extends MixinBase {
public created() {
this.setstep()
this.setsteptodo()
this.my_dream = UserStore.state.my.profile.my_dream
}
public change_mydream() {
if (UserStore.state.my.profile.my_dream !== this.my_dream) {
UserStore.state.my.profile.my_dream = this.my_dream
const mydata = {
'profile.my_dream': UserStore.state.my.profile.my_dream
}
tools.saveFieldToServer(this, 'users', UserStore.state.my._id, mydata)
}
}
get TelegVerificato() {
@@ -358,14 +390,14 @@ export default class CStatus extends MixinBase {
return 0
}
public gettextstep(step) {
let tit = this.$t(step.title)
public gettextstep(step, index) {
let tit = (index + 1) + '. ' + 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)'
tit += ' (' + this.getnuminvitati() + ' ' + this.$t('dashboard.downline') + ')'
} else if (step.title === 'steps.paymenttype') {
tit += this.paymenttext
}
@@ -458,7 +490,7 @@ export default class CStatus extends MixinBase {
}
if (UserStore.state.my.profile)
if (UserStore.state.my.profile.paymenttypes)
return (UserStore.state.my.profile.paymenttypes.length >= 2) && ispaypal
return (UserStore.state.my.profile.paymenttypes.length >= 1) && ispaypal
}
return false
@@ -483,11 +515,11 @@ export default class CStatus extends MixinBase {
}
get strpercstep() {
return 'Completati ' + (this.getstep + 1) + ' passi su ' + this.NUMSTEP_OBBLIGATORI
return 'Completati ' + (this.getstep) + ' passi su ' + this.NUMSTEP_OBBLIGATORI
}
get stepcompleti() {
return this.getstep + 1 === this.NUMSTEP_OBBLIGATORI
return this.getstep === this.NUMSTEP_OBBLIGATORI
}
public scrolltostep(mystep) {

View File

@@ -49,7 +49,7 @@
:id="`step`+(index)"
:key="mystep.title"
:name="index"
:title="gettextstep(mystep)"
:title="gettextstep(mystep, index)"
:icon="geticonstep(mystep)"
:done-color="geticoncolor(mystep.title)"
:done="mystep.funccheck(index)"
@@ -160,6 +160,15 @@
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
</div>
<q-input v-model="my_dream" :label="$t('steps.dream')+' (min. 10 caratteri):'"
type="textarea" debounce="1000"
input-class="myinput-area-big"
autogrow
@input="change_mydream"
></q-input>
<!--
<CMyFieldDb :title="$t('reg.my_dream')"
table="users"
mykey="profile"
@@ -167,6 +176,7 @@
:type="tools.FieldType.string"
>
</CMyFieldDb>
-->
</div>
<div v-else-if="mystep.title === 'steps.chat_biblio'">
<div v-if="mystep.descr">
@@ -227,11 +237,9 @@
<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-btn class="q-mb-md" rounded size="md" color="primary" to="/dashboard"
:label="$t('pages.dashboard')"></q-btn>
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
@@ -257,9 +265,23 @@
</CCopyBtn>
</div>
<div v-else-if="mystep.title === 'dashboard.inv_attivi'">
<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-btn class="q-mb-md" rounded size="md" color="primary" to="/dashboard"
:label="$t('pages.dashboard')"></q-btn>
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
</div>
</div>
<div v-else-if="mystep.title === 'steps.enter_prog'">
@@ -311,19 +333,19 @@
<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-mt-xs">
<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 size="lg" :value="percstep" color="green" class="q-pa-xs q-mb-xs bg-red">
</q-linear-progress>
</div>
<div class="flex flex-center">
<q-badge color="white" text-color="green" :label="progressstep" class="wrap"
<div class="flex flex-center q-mb-xs">
<q-badge color="white" text-color="blue" :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-btn round dense icon="arrow_forward" color="blue" @click="scrolltostep(steptodo)"></q-btn>
</q-toolbar>
</q-page-sticky>

View File

@@ -33,6 +33,7 @@ export default class CTitleBanner extends Vue {
@Prop({ required: false, default: '' }) public icon: string
@Prop({ required: false, default: true }) public visible: boolean
@Prop({ required: false, default: false }) public canopen: boolean
@Prop({ required: false, default: '' }) public imgpreview: string
public myvisible: boolean = false

View File

@@ -22,6 +22,9 @@
<div v-if="myvisible" class="rounded-borders">
<slot></slot>
</div>
<div v-if="imgpreview" class="text-center cursor-pointer clBorderSteps" style="opacity: 0.5;" @click="myvisible = !myvisible">
<q-img :src="imgpreview" class="img"></q-img>
</div>
</q-slide-transition>
</div>

View File

@@ -20,6 +20,7 @@
<!--<q-item-label caption lines="1">{{ user.email }}</q-item-label>-->
</q-item-section>
<q-item-section side>
<div class="row q-gutter-xs justify-center items-center">
<q-btn v-if="isextralist(user)" fab-mini

View File

@@ -3,7 +3,6 @@
font-size: 0.75rem;
}
.step{
font-size: 1.15rem;
font-weight: bold;

View File

@@ -21,16 +21,21 @@ export default class CVideoPromo extends MixinBase {
public $t: any
public $q
public msg: string = ''
public accetta_saw_video: boolean = false
get static_data() {
return static_data
}
get accetta_saw_video() {
return tools.isBitActive(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI)
public created() {
this.aggiorna()
}
set accetta_saw_video(value) {
public aggiorna() {
this.accetta_saw_video = tools.isBitActive(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI)
}
public changeval(value) {
if (value)
UserStore.state.my.profile.saw_and_accepted = tools.SetBit(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI)
else

View File

@@ -8,7 +8,7 @@
clcolor="text-white"
myclass="myshad" canopen="true" :visible="true">
<CVideo myvideokey="dbscY8jWDMM">
<CVideo myvideokey="85zU-2A-Rxs">
</CVideo>
</CTitleBanner>
@@ -42,6 +42,7 @@
<q-checkbox
class="bg-grey-4"
v-model="accetta_saw_video"
@input="changeval"
color="primary"
:label="$t('steps.saw_video_intro')">

View File

@@ -154,10 +154,10 @@
<!--<span class="text-white" v-if="Verificato"> {{$t('reg.verificato')}} </span>-->
<!--<span class="text-white background-red" v-else> {{$t('reg.non_verificato')}} </span>-->
<div v-if="isLogged" id="user-actions" class="text-center">
<q-btn round color="primary" icon="person" to="/profile"></q-btn>
<div v-if="isLogged" id="user-actions" class="column justify-center q-gutter-sm q-ma-sm center-150" >
<q-btn rounded color="primary" icon="person" to="/profile">{{$t('pages.profile')}}</q-btn>
<!--<q-btn round color="warning" icon="lock"></q-btn>-->
<q-btn round color="secondary" icon="exit_to_app" @click='logoutHandler'></q-btn>
<q-btn rounded color="negative" icon="exit_to_app" @click='logoutHandler'>{{$t('login.exit')}}</q-btn>
</div>
</div>

View File

@@ -55,3 +55,4 @@ export * from './CLegenda'
export * from './CRequisito'
export * from './CGuidelines'
export * from './CVideoPromo'
export * from './CMyRequirement'

View File

@@ -75,7 +75,7 @@ const msgglobal = {
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: 'Partecipo ad almeno 1 Zoom',
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)',
@@ -84,14 +84,15 @@ const msgglobal = {
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',
sharemovement_invitati_attivi_no: '<strong>Nota Bene:</strong>Le persone che hai invitato, per essere Attive, devono essere verificati Telegram ed aver <strong>partecipato ad almeno 1 Zoom</strong>',
sharemovement: 'Condivido questo Movimento Economico Solidale',
sharemovement_invitati_attivi_no: '<strong>Nota Bene:</strong>Le persone che hai invitato, per essere <strong>Attive</strong>, devono aver <strong>completato tutti i primi 7 Requisiti</strong> (vedi la tua <strong>Lavagna</strong> per capire cosa gli manca)',
sharemovement: 'Invito almeno 2 persone',
sharemovement_long: 'Condividi il Movimento AYNI con almeno 2 amici (<strong>consigliate 3 persone</strong>) e invitali a partecipare agli Zoom di Benvenuto per entrare a far parte di questa grande Famiglia &#128516 .<br>',
inv_attivi_long: '',
enter_prog_status: '<strong>NOTA BENE:</strong> La Programmazione partirà appena possibile dopo che tutti si saranno registrati su questa piattaforma.<br>Comunicheremo noi le date in cui ognuno potrà partire ed effettuare così il proprio dono.<br>',
enter_prog_completa_requisiti: 'Completa tutti i requisiti richiesti, per poter entrare in programmazione.',
enter_prog_requisiti_ok: 'Hai completato tutti i requisiti per poter accedere alla Programmazione',
enter_prog: 'Entro in Programmazione',
enter_prog_long: 'Sottisfatti i requisiti richiesti entrerai in Programmazione, verrai aggiunto alla Bigliettera e nella chat di gruppo corrispondente.<br>',
enter_prog_long: 'Soddisfatti 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: 'Scrivo il mio Sogno',
@@ -143,7 +144,7 @@ const msgglobal = {
authentication: {
telegram: {
open: 'Clicca qui per aprire il BOT Telegram e segui le istruzioni',
ifclose: 'Se non si apre cliccando sul bottone oppure l\'avevi eliminato, cerca \'AYNI BOT\' nella ricerca di Telegram e premi Start',
ifclose: 'Se non si apre Telegram cliccando sul bottone oppure l\'avevi eliminato, vai su Telegram e cerca \'AYNI BOT\' dall\'icona della lente, poi premi Start e segui le istruzioni.',
openbot: 'Apri \'AYNI BOT\' su Telegram',
},
login: {
@@ -186,7 +187,8 @@ const msgglobal = {
downline: 'Invitati',
downnotreg: 'Invitati non Registrati',
notreg: 'Non Registrato',
numinvitati: 'Numero di Invitati',
inv_attivi: 'Invitati con i 7 Requisiti',
numinvitati: 'Almeno 2 Invitati',
telefono_wa: 'Contatta su Whatsapp chi non si è registrato',
sendnotification: 'Invia Notifica al Destinatario su Telegram BOT',
ricevuto_dono: 'Hai ricevuto in Regalo un Invitato {invitato} da parte di {mittente} !'
@@ -250,12 +252,13 @@ const msgglobal = {
selected:'Selezionati',
img: 'Immagine',
date_reg: 'Data Reg.',
requirement:'Requisiti',
perm: 'Permessi',
username: 'Username (Pseudonimo)',
username_short: 'Username',
name: 'Nome',
surname: 'Cognome',
username_login: 'Nome Utente o email',
username_login: 'Username o email',
password: 'Password',
repeatPassword: 'Ripeti password',
terms: "Accetto i termini della privacy",
@@ -278,7 +281,7 @@ const msgglobal = {
email_not_exist: 'l\'Email non è presente in archivio, verificare se è corretta',
duplicate_email: 'l\'Email è già stata registrata',
user_already_exist: 'La registrazione con questi dati (nome, cognome e cellulare) è stata già effettuata. Per accedere al sito, cliccare sul bottone LOGIN dalla HomePage.',
user_extralist_not_found: 'Utente in archivio non trovato, inserire il Nome, Cognome e numero di cellulare inviato in precedenza',
user_extralist_not_found: 'Utente in archivio non trovato, inserire il Nome, Cognome e numero di cellulare comunicato nella lista nel 2019. Se questa è una nuova registrazione, dovete registrarvi tramite il LINK di chi vi sta invitando.',
user_not_this_aportador: 'Stai utilizzando un link di una persona diversa dal tuo invitato originale.',
duplicate_username: 'L\'Username è stato già utilizzato',
aportador_not_exist: 'L\'Username di chi ti ha invitato non è presente. Contattaci.',
@@ -307,7 +310,8 @@ const msgglobal = {
login: {
page_title: 'Login',
incorso: 'Login in corso',
enter: 'Login',
enter: 'Accedi',
esci: 'Esci',
errato: "Username o password errata. Riprovare",
completato: 'Login effettuato!',
needlogin: 'E\' necessario effettuare il login prima di continuare'
@@ -671,6 +675,7 @@ const msgglobal = {
manage_telegram: 'Gestori Telegram',
img: 'File image',
date_reg: 'Fecha Reg.',
requirement:'Requisitos',
perm: 'Permisos',
username: 'Username (Apodo)',
username_short: 'Username',
@@ -720,6 +725,7 @@ const msgglobal = {
page_title: 'Login',
incorso: 'Login en curso',
enter: 'Entra',
esci: 'Salir',
errato: "Nombre de usuario, correo o contraseña incorrectos. inténtelo de nuevo",
completato: 'Login realizado!',
needlogin: 'Debes iniciar sesión antes de continuar',
@@ -1075,6 +1081,7 @@ const msgglobal = {
manage_telegram: 'Gestori Telegram',
img: 'Fichier image',
date_reg: 'Date Inscript.',
requirement:'Exigences',
perm: 'Autorisations',
username: 'Username (Surnom)',
username_short: 'Username',
@@ -1124,6 +1131,7 @@ const msgglobal = {
page_title: 'Login',
incorso: 'Connexion en cours',
enter: 'Entrez',
esci: 'Sortir',
errato: "Nom d'utilisateur, email ou mot de passe incorrect. réessayer",
completato: 'Connexion faite!',
needlogin: 'Vous devez vous connecter avant de continuer',
@@ -1482,6 +1490,7 @@ const msgglobal = {
manage_telegram: 'Gestori Telegram',
img: 'File Image',
date_reg: 'Reg. Date',
requirement:'Requirements',
perm: 'Permissions',
username_login: 'Username or email',
username: 'Username (Pseudonym)',
@@ -1530,6 +1539,7 @@ const msgglobal = {
login: {
incorso: 'Login...',
enter: 'Login',
esci: 'Logout',
errato: "Username or password wrong. Please retry again",
completato: 'Login successfully!',
needlogin: 'You must login before continuing',
@@ -1889,6 +1899,7 @@ const msgglobal = {
manage_telegram: 'Gestori Telegram',
img: 'File Image',
date_reg: 'Reg. Date',
requirement:'Requirements',
perm: 'Permissions',
username_login: 'Username or email',
username: 'Username (Pseudonym)',
@@ -1938,6 +1949,7 @@ const msgglobal = {
page_title: 'Login',
incorso: 'Login...',
enter: 'Login',
esci: 'Logout',
errato: "Username or password wrong. Please retry again",
completato: 'Login successfully!',
needlogin: 'You must login before continuing',

View File

@@ -703,8 +703,8 @@ namespace Actions {
}
const usertosend = {
username: authData.username,
password: authData.password,
username: authData.username.trim(),
password: authData.password.trim(),
lang: state.lang,
subs: sub,
options

View File

@@ -1542,7 +1542,7 @@ export const tools = {
},
showNegativeNotif(q: any, msg) {
tools.showNotif(q, msg, { color: 'negative', icon: 'notifications' }, 8000)
tools.showNotif(q, msg, { color: 'negative', icon: 'notifications' }, 10000)
},
showNeutralNotif(q: any, msg) {
@@ -3164,6 +3164,10 @@ export const tools = {
return 'fa-flag-ro'
else if (lang === 'CL')
return 'fa-flag-cl'
else if (lang === 'PL')
return 'fa-flag-pl'
else if (lang === 'EG')
return 'fa-flag-eg'
return ''
} catch (e) {
@@ -3235,6 +3239,10 @@ export const tools = {
return 'Romania'
} else if (nat === 'CL') {
return 'Chile'
} else if (nat === 'PL') {
return 'Poland'
} else if (nat === 'EG') {
return 'Egypt'
}
},

9
src/store/store-flag.d.ts vendored Normal file
View File

@@ -0,0 +1,9 @@
// THIS FEATURE-FLAG FILE IS AUTOGENERATED,
// REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING
import "quasar/dist/types/feature-flag";
declare module "quasar/dist/types/feature-flag" {
interface QuasarFeatureFlags {
store: true;
}
}

View File

@@ -1,6 +1,7 @@
<template>
<q-page padding class="signin">
<CSignIn :mythis="mythis"
:showregbutt="true"
@loginOk="loginOk"
@loginInCorso="loginInCorso"
@checkErrors="checkErrors"

View File

@@ -0,0 +1,5 @@
.signin {
width: 100%;
margin: 0 auto;
max-width: 450px;
}

View File

@@ -0,0 +1,39 @@
import Vue from 'vue'
import { Component, Prop, Watch } from 'vue-property-decorator'
import { CSignIn } from '../../../components/CSignIn'
import { toolsext } from '../../../store/Modules/toolsext'
import { UserStore } from '../../../store/Modules'
import globalroutines from '../../../globalroutines/index'
import { tools } from '../../../store/Modules/tools'
// import {Loading, QSpinnerFacebook, QSpinnerGears} from 'quasar'
@Component({
components: { CSignIn }
})
export default class Signin_noreg extends Vue {
public $v
public $q
public loginOk() {
tools.loginOk(this, true)
}
public loginInCorso() {
tools.loginInCorso(this)
}
public checkErrors(riscode) {
tools.SignIncheckErrors(this, riscode, true)
}
public showNotif(msgcode) {
tools.showNotif(this.$q, this.$t(msgcode))
}
get mythis() {
return this
}
}

View File

@@ -0,0 +1,18 @@
<template>
<q-page padding class="signin">
<CSignIn :mythis="mythis"
@loginOk="loginOk"
@loginInCorso="loginInCorso"
:showregbutt="false"
@checkErrors="checkErrors"
@showNotif="showNotif">
</CSignIn>
</q-page>
</template>
<script lang="ts" src="./signin_noreg.ts">
</script>
<style lang="scss" scoped>
@import './signin_noreg.scss';
</style>