SubAccounts !

This commit is contained in:
Paolo Arena
2020-05-10 21:06:42 +02:00
parent efc97de202
commit 67b8e592c0
70 changed files with 8535 additions and 1128 deletions

6087
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -9,10 +9,11 @@ export default ({ app, store, Vue }) => {
// Vue.config.lang = process.env.LANG_DEFAULT; // Vue.config.lang = process.env.LANG_DEFAULT;
let mylang = tools.getItemLS(tools.localStorage.lang) let mylang = tools.getItemLS(tools.localStorage.lang)
console.log(`LANG LocalStorage ${mylang}`)
if ((navigator) && (mylang === '')) { if ((navigator) && (mylang === '')) {
mylang = navigator.language mylang = navigator.language
// console.log(`LANG NAVIGATOR ${mylang}`) console.log(`LANG NAVIGATOR ${mylang}`)
} }
mylang = tools.checkLangPassed(mylang) mylang = tools.checkLangPassed(mylang)

View File

@@ -1,3 +1,6 @@
import { translation } from '@src/store/Modules/translation'
import { Privacy } from '@src/model'
export const shared_consts = { export const shared_consts = {
Accepted: { Accepted: {
@@ -52,7 +55,13 @@ export const shared_consts = {
value: 8, value: 8,
label: 'dashboard.tutor', label: 'dashboard.tutor',
icon: 'fas fa-user-tie', icon: 'fas fa-user-tie',
color: 'blue' color: 'fuchsia'
},
Traduttrici: {
value: 16,
label: 'dashboard.traduttrici',
icon: 'fas fa-user-tie',
color: 'orange'
} }
}, },
@@ -61,6 +70,34 @@ export const shared_consts = {
Notify_ByPushNotification: 4 Notify_ByPushNotification: 4
}, },
TypeMsg: {
SEND_TO_ALL: 1,
},
TypeMsg_Actions: {
NORMAL: 0,
YESNO: 1,
OPZ1_2: 2,
},
selectActions: [
{
id: 0,
label: 'Normale',
value: 0
},
{
id: 1,
label: 'Si / No',
value: 1
},
{
id: 2,
label: 'Opzione 1 / Opzione 2',
value: 2
}
],
fieldsUserToChange() { fieldsUserToChange() {
return ['_id', 'username', 'email', 'name', 'surname', 'perm', 'date_reg', 'verified_email', 'img', 'ipaddr', 'lasttimeonline', 'profile', 'news_on'] return ['_id', 'username', 'email', 'name', 'surname', 'perm', 'date_reg', 'verified_email', 'img', 'ipaddr', 'lasttimeonline', 'profile', 'news_on']
} }

View File

@@ -3,7 +3,7 @@ import { Component, Prop, Watch } from 'vue-property-decorator'
import { tools } from '../../store/Modules/tools' import { tools } from '../../store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext' import { toolsext } from '@src/store/Modules/toolsext'
import { IOperators } from '../../model/GlobalStore' import { IOperators } from '../../model'
@Component({ @Component({
name: 'CBook', name: 'CBook',

View File

@@ -3,7 +3,7 @@ import { Component, Prop, Watch } from 'vue-property-decorator'
import { tools } from '../../store/Modules/tools' import { tools } from '../../store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext' import { toolsext } from '@src/store/Modules/toolsext'
import { IOperators } from '../../model/GlobalStore' import { IOperators } from '../../model'
@Component({ @Component({
name: 'CCard', name: 'CCard',

View File

@@ -31,31 +31,12 @@ $grayshadow: #555;
border-radius: 30px; border-radius: 30px;
} }
.my-card-shadow {
width: 100%;
max-width: 350px;
min-width: 300px;
padding-bottom: 20px;
margin-left: 0;
margin-right: 0;
margin-top: 1rem;
margin-bottom: 1rem;
border-radius: 30px;
transition: transform .2s ease-out;
}
.yes_shadow { .yes_shadow {
-webkit-box-shadow: 0 0 24px 0 rgba(0, 0, 0, 0.16); -webkit-box-shadow: 0 0 24px 0 rgba(0, 0, 0, 0.16);
box-shadow: 0 0 24px 0 rgba(0, 0, 0, 0.16); box-shadow: 0 0 24px 0 rgba(0, 0, 0, 0.16);
} }
.my-card-shadow:hover {
transition: transform .2s ease-in;
transform: scale(1.03);
}
.disc { .disc {
text-align: center !important; text-align: center !important;
font-size: 1rem; font-size: 1rem;

View File

@@ -10,8 +10,8 @@ import MixinBase from '@src/mixins/mixin-base'
}) })
export default class CCardState extends MixinBase { export default class CCardState extends MixinBase {
@Prop({ required: true, default: '' }) public mytext @Prop({ required: false, default: '' }) public mytext
@Prop({ required: true, default: 0 }) public myval @Prop({ required: false, default: 0 }) public myval
@Prop({ required: true, default: 0 }) public myperc @Prop({ required: true, default: 0 }) public myperc
@Prop({ required: false, default: '' }) public imgsrc @Prop({ required: false, default: '' }) public imgsrc
@Prop({ required: false, default: false }) public isperc @Prop({ required: false, default: false }) public isperc

View File

@@ -18,10 +18,10 @@
<div> <div>
{{ mytext }} {{ mytext }}
</div> </div>
<div class="mlvalue text-h5 text-blue boldhigh text-h5-short"> {{ myval }} {{ textadd }} <div v-if="myval" class="mlvalue text-h5 text-blue boldhigh text-h5-short"> {{ myval }} {{ textadd }}
</div> </div>
<div v-if="isperc" class="cltexth4"> <div v-if="isperc" class="cltexth5" :style="'fontsize:' + fontsize">
({{ myperc.toFixed(1) }} %) {{ myperc.toFixed(1) }}%
</div> </div>
</div> </div>
</q-circular-progress> </q-circular-progress>

View File

@@ -3,7 +3,7 @@ import { Component, Prop, Watch } from 'vue-property-decorator'
import { tools } from '../../store/Modules/tools' import { tools } from '../../store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext' import { toolsext } from '@src/store/Modules/toolsext'
import { IGallery, IImgGallery } from '../../model/GlobalStore' import { IGallery, IImgGallery } from '../../model'
import { CMyPage } from '../CMyPage' import { CMyPage } from '../CMyPage'
import GlobalModule from '../../store/Modules/GlobalStore' import GlobalModule from '../../store/Modules/GlobalStore'
import { GlobalStore } from '../../store/Modules' import { GlobalStore } from '../../store/Modules'

View File

@@ -71,6 +71,30 @@ export default class CGridTableRec extends Vue {
public selected = [] public selected = []
get isAdmin() {
return UserStore.state.isAdmin
}
get isManager() {
return UserStore.state.isManager
}
get isTutor() {
return UserStore.state.isTutor
}
get isTratuttrici() {
return UserStore.state.isTratuttrici
}
get disabilita() {
if ((this.mytable === 'users') && (this.isTutor)) {
return true
}
return false
}
get lists() { get lists() {
return lists return lists
} }
@@ -374,6 +398,7 @@ export default class CGridTableRec extends Vue {
this.canEdit = tools.getCookie(tools.CAN_EDIT, this.canEdit) === 'true' this.canEdit = tools.getCookie(tools.CAN_EDIT, this.canEdit) === 'true'
this.tablesel = tools.getCookie('tablesel', this.tablesel) this.tablesel = tools.getCookie('tablesel', this.tablesel)
} }
console.log('this.tablesel', this.tablesel)
if (this.tablesel === '') { if (this.tablesel === '') {
if (!!this.tablesList) if (!!this.tablesList)
@@ -382,6 +407,8 @@ export default class CGridTableRec extends Vue {
this.tablesel = this.mytable this.tablesel = this.mytable
} }
console.log('2) this.tablesel', this.tablesel)
this.changeTable(false) this.changeTable(false)
} }
@@ -442,8 +469,11 @@ export default class CGridTableRec extends Vue {
} }
public changeCol(newval) { public changeCol(newval) {
console.log('changecol', this.mytable)
if (!!this.mytable) {
tools.setCookie(this.mytable, this.colVisib.join('|')) tools.setCookie(this.mytable, this.colVisib.join('|'))
} }
}
public changeTable(mysel) { public changeTable(mysel) {
if (this.tablesel === undefined || this.tablesel === '') if (this.tablesel === undefined || this.tablesel === '')
@@ -489,7 +519,9 @@ export default class CGridTableRec extends Vue {
this.mytable = mytab.value this.mytable = mytab.value
} }
if (!!this.tablesList) {
tools.setCookie('tablesel', this.tablesel) tools.setCookie('tablesel', this.tablesel)
}
this.updatedcol() this.updatedcol()
@@ -521,8 +553,10 @@ export default class CGridTableRec extends Vue {
} }
public changefuncAct(newval) { public changefuncAct(newval) {
if (!this.disabilita) {
tools.setCookie(tools.CAN_EDIT, newval) tools.setCookie(tools.CAN_EDIT, newval)
} }
}
public clickrowcol(row, col) { public clickrowcol(row, col) {
if (!this.canEdit) { if (!this.canEdit) {

View File

@@ -52,7 +52,7 @@
<q-btn v-if="mytable" label="" color="primary" @click="refresh" icon="search"></q-btn> <q-btn v-if="mytable" label="" color="primary" @click="refresh" icon="search"></q-btn>
</template> </template>
</q-input> </q-input>
<q-toggle v-if="mytable" v-model="canEdit" :val="lists.MenuAction.CAN_EDIT_TABLE" class="q-mx-sm" <q-toggle v-if="mytable" v-model="canEdit" :disable="disabilita" :val="lists.MenuAction.CAN_EDIT_TABLE" class="q-mx-sm"
:label="$t('grid.editvalues')" @input="changefuncAct" :label="$t('grid.editvalues')" @input="changefuncAct"
></q-toggle> ></q-toggle>
@@ -117,6 +117,7 @@
v-if="colVisib.includes(col.field + col.subfield)"> v-if="colVisib.includes(col.field + col.subfield)">
<div :class="getclrow(props.row)"> <div :class="getclrow(props.row)">
<CMyPopupEdit :canEdit="canEdit" <CMyPopupEdit :canEdit="canEdit"
:disable="disabilita"
:col="col" :col="col"
:row.sync="props.row" :row.sync="props.row"
:field="col.field" :field="col.field"
@@ -172,6 +173,7 @@
<div class="q-ma-sm q-pa-sm colmodif col-grow rounded-borders " style="border: 1px solid #bbb" <div class="q-ma-sm q-pa-sm colmodif col-grow rounded-borders " style="border: 1px solid #bbb"
@click="colclicksel = mycol"> @click="colclicksel = mycol">
<CMyPopupEdit :canEdit="true" <CMyPopupEdit :canEdit="true"
:disable="disabilita"
view="field" view="field"
:col="mycol" :col="mycol"
:showall="true" :showall="true"

View File

@@ -133,8 +133,8 @@
Il mio compito è quello di assicurarmi che tutti i Donatori facciano il Dono al Sognatore. 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 Il sistema invierà in automatico le istruzioni per fare il Dono, il Mediatore (io) verificherà e
accompagnerà il processo.<br> accompagnerà il processo.
Il passo 2, di norma, è attivato 4 giorni dopo il passo 1.</p> </p>
<div class="text-center"> <div class="text-center">
<q-img src="statics/images/passo_3.jpg" class="img"></q-img> <q-img src="statics/images/passo_3.jpg" class="img"></q-img>
@@ -146,7 +146,7 @@
Il mio compito è quello di aprirmi a ricevere i Doni da ciascun Donatore, completarmi e Il mio compito è quello di aprirmi a ricevere i Doni da ciascun Donatore, completarmi e
celebrare celebrare
lAbbondanza.<br> lAbbondanza.<br>
Il passo 3, di norma, è attivato 4 giorni dopo il passo 2.<br><br> <br>
</p> </p>
</CTitleBanner> </CTitleBanner>
@@ -265,8 +265,7 @@
<p>Klepet sestavlja 8 donatorjev (ki jim bom pomagal vstopiti v klepet) tako jaz, kot posrednik.<br> <p>Klepet sestavlja 8 donatorjev (ki jim bom pomagal vstopiti v klepet) tako jaz, kot posrednik.<br>
Moja naloga je, da poskrbim, da bodo vsi donatorji sanjaču vplačali darilo. Sistem bo samodejno Moja naloga je, da poskrbim, da bodo vsi donatorji sanjaču vplačali darilo. Sistem bo samodejno
poslal navodila za način vplačila, Posrednik (jaz) bo postopek preveril in spremljal. poslal navodila za način vplačila, Posrednik (jaz) bo postopek preveril in spremljal.
<br> </p>
Korak 2 se običajno aktivira 4 dni po koraku 1.</p>
<div class="text-center"> <div class="text-center">
<q-img src="statics/images/passo_3.jpg" class="img"></q-img> <q-img src="statics/images/passo_3.jpg" class="img"></q-img>
@@ -275,9 +274,7 @@
<p>Klepet, kjer sem sanjač, je enak in z istimi ljudmi odprt v koraku 2 (kjer sem bil Mediator) in <p>Klepet, kjer sem sanjač, je enak in z istimi ljudmi odprt v koraku 2 (kjer sem bil Mediator) in
tudi tukaj se vloge spreminjajo, torej je zdaj 8 mediatorjev in jaz, sanjač. tudi tukaj se vloge spreminjajo, torej je zdaj 8 mediatorjev in jaz, sanjač.
Moja naloga je, da se odprem, da sprejmem vplačila od vsakega donatorja, se dopolnim in Moja naloga je, da se odprem, da sprejmem vplačila od vsakega donatorja, se dopolnim in
proslavim obilje.<br> proslavim obilje.
Korak 3 se običajno aktivira 4 dni po koraku 2.<br><br>
</p> </p>
</CTitleBanner> </CTitleBanner>
@@ -410,7 +407,6 @@
Mi trabajo es asegurarme de que todos los donantes le den el regalo al Soñador. Mi trabajo es asegurarme de que todos los donantes le den el regalo al Soñador.
El sistema enviará automáticamente instrucciones para hacer el Regalo, el Mediador El sistema enviará automáticamente instrucciones para hacer el Regalo, el Mediador
verificará y acompañará el proceso. verificará y acompañará el proceso.
El paso 2 se activa normalmente 4 días después del paso 1.
<div class="text-center"> <div class="text-center">
<q-img src="statics/images/passo_3.jpg" class="img"></q-img> <q-img src="statics/images/passo_3.jpg" class="img"></q-img>
@@ -570,7 +566,6 @@
O sistema enviará automaticamente instruções para fazer o Presente, o Mediador (I) irá verificar O sistema enviará automaticamente instruções para fazer o Presente, o Mediador (I) irá verificar
e e
irá acompanhar o processo.<br> irá acompanhar o processo.<br>
O passo 2 é normalmente activado 4 dias após o passo 1.
<div class="text-center"> <div class="text-center">
<q-img src="statics/images/passi_3.jpg" class="img"></q-img> <q-img src="statics/images/passi_3.jpg" class="img"></q-img>
@@ -581,7 +576,6 @@
e mesmo aqui os papéis mudam, ou seja, agora há 8 mediadores e eu, o Sonhador.<br> e mesmo aqui os papéis mudam, ou seja, agora há 8 mediadores e eu, o Sonhador.<br>
Minha tarefa é abrir-me para receber os Presentes de cada Doador, completar-me e celebrar Minha tarefa é abrir-me para receber os Presentes de cada Doador, completar-me e celebrar
a Abundância.<br> a Abundância.<br>
O passo 3 é normalmente activado 4 dias após o passo 2.<br>
</p> </p>
</CTitleBanner> </CTitleBanner>
@@ -716,7 +710,6 @@
Mon rôle consiste à m'assurer que tous les Donateurs fassent le Don au Rêveur. Le système Mon rôle consiste à m'assurer que tous les Donateurs fassent le Don au Rêveur. Le système
enverra automatiquement les instructions pour faire le Don, le Médiateur (moi) vérifiera et enverra automatiquement les instructions pour faire le Don, le Médiateur (moi) vérifiera et
accompagnera le processus.<br> accompagnera le processus.<br>
L'étape 2 est normalement activée 4 jours après l'étape 1.
<div class="text-center"> <div class="text-center">
@@ -728,7 +721,6 @@
moi, le Rêveur.<br> moi, le Rêveur.<br>
Ma tâche est de m'ouvrir pour recevoir les Dons de chaque Donateur, de compléter et de célébrer Ma tâche est de m'ouvrir pour recevoir les Dons de chaque Donateur, de compléter et de célébrer
l'Abondance.<br> l'Abondance.<br>
L'étape 3 est normalement activée 4 jours après l'étape 2.<br><br>.
</p> </p>
</CTitleBanner> </CTitleBanner>
@@ -864,7 +856,6 @@
My job is to make sure that all the Donors give the Gift to the Dreamer. The system will My job is to make sure that all the Donors give the Gift to the Dreamer. The system will
automatically send instructions to make the Gift, the Mediator (me) will verify and will automatically send instructions to make the Gift, the Mediator (me) will verify and will
accompany the process.<br> accompany the process.<br>
Step 2 is normally activated 4 days after step 1.
<div class="text-center"> <div class="text-center">
<q-img src="statics/images/passo_3.jpg" class="img"></q-img> <q-img src="statics/images/passo_3.jpg" class="img"></q-img>
@@ -874,7 +865,6 @@
Mediator) and here the roles change, there are now 8 mediators and me, the Dreamer. Mediator) and here the roles change, there are now 8 mediators and me, the Dreamer.
My task is to open myself to receive the Gifts from each Donor, complete myself and celebrate My task is to open myself to receive the Gifts from each Donor, complete myself and celebrate
the Abundance.<br> the Abundance.<br>
Step 3 is normally activated 4 days after step 2.
<br><br>. <br><br>.
</p> </p>

View File

@@ -0,0 +1,53 @@
.title-nave {
color: blue;
}
.titlenave{
width: 100px;
font-weight: bold;
text-align: center;
}
.cont_pos {
border: solid 2px #4198ef;
padding: 2px 8px;
margin: 2px 4px;
font-size: 1rem;
border-radius: 16px;
}
.cont_pos, .cont_pos_intest{
padding-left: 12px;
padding-right: 12px;
border-radius: 64px !important;
color: red;
}
.cont_pos_intest {
width: 37px;
font-size: 0.75rem;
}
.extra{
opacity: 1;
}
.passo{
font-weight: bold;
width: 100px;
}
.posizione_imbarco {
font-weight: bold;
font-size: 1rem;
color: blue;
text-align: -webkit-center;
}
.ins_invitante{
font-weight: bold;
}
.q-tab-panel {
padding: 8px;
}

View File

@@ -21,19 +21,43 @@ import { CMyRequirement } from '../CMyRequirement'
import { CRequisiti } from '../CRequisiti' import { CRequisiti } from '../CRequisiti'
import { CCardState } from '../CCardState' import { CCardState } from '../CCardState'
import { CMyNave } from '../CMyNave' import { CMyNave } from '../CMyNave'
import { validations } from './CMyDashboard-validate'
import { validationMixin } from 'vuelidate'
@Component({ @Component({
components: { CProfile, CTitleBanner, CMyFieldDb, CCopyBtn, CUserBadge, CLegenda, CRequisito, CMyRequirement, CRequisiti, CCardState, CMyNave } mixins: [validationMixin],
validations,
components: {
CProfile,
CTitleBanner,
CMyFieldDb,
CCopyBtn,
CUserBadge,
CLegenda,
CRequisito,
CMyRequirement,
CRequisiti,
CCardState,
CMyNave
},
}) })
export default class CMyDashboard extends MixinUsers { export default class CMyDashboard extends MixinUsers {
public $v public $v
public $q public $q
public myusername: string = '' public myusername: string = ''
public tab: string = 'requisiti'
public tabcosa: string = ''
public showuserinfo: boolean = false public showuserinfo: boolean = false
public shownuovoviaggio: boolean = false
public notifBot: boolean = true public notifBot: boolean = true
public loading: boolean = false
public seluser: IUserFields = null public seluser: IUserFields = null
public aportador_solidario: string = '' public aportador_solidario: string = ''
public invitante_username: string = ''
public showregalainv: boolean = false
public id_listaingr: number = -1
public ind_order_ingr: number = -1
public dashboard: IDashboard = { public dashboard: IDashboard = {
myself: DefaultUser, myself: DefaultUser,
aportador: DefaultUser, aportador: DefaultUser,
@@ -41,7 +65,11 @@ export default class CMyDashboard extends MixinUsers {
downline: [], downline: [],
downnotreg: [], downnotreg: [],
downbyuser: [], downbyuser: [],
arrposizioni: [] arrimbarchi: [],
arrposizioni: [],
navi_partenza: [],
lastnave: {},
arrusers: [],
} }
@Prop({ required: true }) public username @Prop({ required: true }) public username
@@ -50,6 +78,9 @@ export default class CMyDashboard extends MixinUsers {
public changedash() { public changedash() {
console.log('changedash') console.log('changedash')
this.dashboard = UserStore.state.my.dashboard this.dashboard = UserStore.state.my.dashboard
if (!!this.dashboard)
this.invitante_username = this.dashboard.myself.aportador_solidario
} }
get mythis() { get mythis() {
@@ -57,25 +88,51 @@ export default class CMyDashboard extends MixinUsers {
} }
public created() { public created() {
if (!!tools.getCookie(tools.TABBED_DASHBOARD)) {
this.tab = tools.getCookie(tools.TABBED_DASHBOARD)
}
this.update_username() this.update_username()
} }
public changetab(val) {
tools.setCookie(tools.TABBED_DASHBOARD, val)
console.log('setcook', val)
}
@Watch('this.username') @Watch('this.username')
public changeusername() { public changeusername() {
this.update_username() this.update_username()
} }
public aggiorna() {
this.dashboard = null
this.update_username()
this.showuserinfo = false
}
public async update_username() { public async update_username() {
// console.log('update_username') console.log('update_username')
this.loading = true
if (this.username === '') if (this.username === '')
this.myusername = this.getMyUsername() this.myusername = this.getMyUsername()
else else
this.myusername = this.username this.myusername = this.username
this.loading = true
await UserStore.actions.getDashboard({ username: this.myusername }).then((ris) => { await UserStore.actions.getDashboard({ username: this.myusername }).then((ris) => {
this.dashboard = ris this.dashboard = ris
if (!!this.dashboard)
this.invitante_username = this.dashboard.myself.aportador_solidario
console.log('this.invitante_username', this.invitante_username)
this.loading = false
}) })
this.showuserinfo = false
this.loading = false
} }
get getRefLink() { get getRefLink() {
@@ -89,23 +146,238 @@ export default class CMyDashboard extends MixinUsers {
return false return false
} }
public selectclick(user) { public selectclick(user, showregalainv, ind_order_ingr, id_listaingr) {
this.showuserinfo = true this.showuserinfo = true
this.seluser = user this.seluser = user
this.showregalainv = showregalainv
this.ind_order_ingr = ind_order_ingr
this.id_listaingr = id_listaingr
} }
get Completato7Req() { get Completato7Req() {
// return tools.Is7ReqOk(this.dashboard.myself) // return tools.Is7ReqOk(this.dashboard.myself)
return this.dashboard.myself.qualified return this.dashboard.myself.qualified
} }
get Completato9Req() { get Completato9Req() {
// return tools.Is9ReqOk(this.dashboard.myself) // return tools.Is9ReqOk(this.dashboard.myself)
if (!!this.dashboard)
return this.dashboard.myself.qualified && (this.dashboard.myself.numinvitatiattivi >= 2) return this.dashboard.myself.qualified && (this.dashboard.myself.numinvitatiattivi >= 2)
return false
} }
public HasNave() { public HasNave() {
return this.dashboard.arrposizioni.length > 0 return this.dashboard.arrposizioni.length > 0
} }
public getnavePartenzaByRigaCol(riga, col) {
for (const mynave of this.dashboard.navi_partenza) {
if (!!mynave) {
if ((mynave.riga === riga) && (mynave.col === col)) {
return mynave
}
}
}
return null
}
public datanave(mianave) {
// const mynavepart = this.getnavePartenzaByRigaCol(tools.getRiganave(mianave.riga), tools.getColnave(mianave.col))
if (!!mianave.nave_partenza) {
if (!!mianave.nave_partenza.date_start)
return tools.getstrshortDate(mianave.nave_partenza.date_start)
}
return ' --/-- '
}
public geticon(mianave) {
if (!mianave)
return ''
if (mianave.made_gift) {
return 'fas fa-gift'
}
}
public colordono(mianave) {
if (mianave.made_gift) {
return 'green'
} else {
return 'grey'
}
}
public getposizioneattuale(mianave, totali) {
const mynavedest = tools.getfirstnaveSognatore(mianave.riga, mianave.col)
const ris = tools.getnumnavi_finoa(mianave, mynavedest, this.dashboard.lastnave)
if (totali)
return mianave.riga + '.' + mianave.col + ' ' + ris.contaattuale + '/' + ris.totale
else
return ris.perc
}
public async NuovoImbarco(username, invitante_username) {
await tools.askConfirm(this.$q, translate('steps.nuovo_imbarco'), translate('dialog.continue'), translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.AGGIUNGI_NUOVO_IMBARCO, 0, {
param1: { username, invitante_username }
})
this.shownuovoviaggio = false
}
public addNuovoImbarco() {
this.NuovoImbarco(this.dashboard.myself.username, this.invitante_username)
}
public async cancellaImbarco(imbarco) {
await tools.askConfirm(this.$q, translate('dashboard.attenzione'), translate('steps.vuoi_cancellare_imbarco'), translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.CANCELLA_IMBARCO, 0, {
param1: { ind_order: imbarco.ind_order, username: imbarco.username },
param2: { num_tess: imbarco.num_tess }
})
}
public getnuminvitatistr(index, myuser) {
let inv = myuser.numinvitati
let invattivi = myuser.numinvitatiattivi
const step = (index - 1) * 2
inv -= step
invattivi -= step
if (inv < 0)
inv = 0
if (invattivi < 0)
invattivi = 0
if (inv > 2)
inv = 2
if (invattivi > 2)
invattivi = 2
return invattivi + '/' + inv
}
public getinvit(index, myuser, posiz) {
let inv = myuser.numinvitati
let invattivi = myuser.numinvitatiattivi
const step = (posiz.numNaviEntrato + index) * 2
inv -= step
// console.log('inv', inv, 'step = ', step)
invattivi -= step
if (inv < 0)
inv = 0
if (invattivi < 0)
invattivi = 0
if (inv > 2)
inv = 2
if (invattivi > 2)
invattivi = 2
return { invattivi, inv }
}
public getnuminv(index, myuser, posiz) {
const ris = this.getinvit(index, myuser, posiz)
return ris.inv
}
public getnuminvattivi(index, myuser, posiz) {
const ris = this.getinvit(index, myuser, posiz)
return ris.invattivi
}
public getnuminvperc(index, myuser, posiz) {
const ris = this.getinvit(index, myuser, posiz)
return ris.invattivi / 2 * 100
}
public getcolorinvitati(index, myuser, posiz) {
const ris = this.getinvit(index, myuser, posiz)
if (ris.invattivi === 1)
return 'blue'
if (ris.invattivi === 2)
return 'green'
if (ris.inv === 1)
return 'orange'
}
public getnumtessstr(num_tess, index) {
let str = index + 1 + '°'
if (num_tess % 2 === 0) {
str += ' (Gratis)'
}
return str
}
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 === 'invitante_username') {
// console.log(item);
if (!item.aportadorexist) {
// console.log('!item.aportadorexist !')
return this.$t('reg.err.invitante_username_not_exist')
}
}
return ''
} catch (error) {
// console.log("ERR : " + error);
}
}
get allowSubmit() {
let error = this.$v.$error || this.$v.$invalid
error = error || (this.invitante_username === this.dashboard.myself.username)
return !error
}
public imbarchipresenti() {
let presente = false;
for (const rec of this.dashboard.arrimbarchi) {
if (!rec.added)
presente = true
}
return presente
}
public getcolorbynave(mianave){
if (!!mianave.nave_partenza)
return mianave.nave_partenza.provvisoria ? 'gray' : 'green'
else
return 'green'
}
public change_mynote(mianave) {
const mydata = {
note: mianave.note
}
tools.saveFieldToServer(this, 'navi', mianave._id, mydata)
}
public getNaveSognatoreStr(mianave, index) {
const mynavedest = tools.getfirstnaveSognatore(mianave.riga, mianave.col)
return mynavedest.riga + '.' + parseInt(mynavedest.col, 10) + index
}
public getNaveMediatoreStr(mianave) {
return mianave.riga + '.' + mianave.col
}
} }

View File

@@ -1,46 +1,27 @@
<template> <template>
<div class="q-my-xs q-gutter-xs q-py-xs" v-if="myusername !== ''"> <div class="q-my-xs q-gutter-xs q-py-xs" v-if="myusername !== ''">
<CTitleBanner class="q-pa-xs text-center" :title="$t('pages.statoattuale')" bgcolor="bg-red" clcolor="text-white" <div>
mystyle=" " myclass="myshad"> <q-tabs
<div v-if="!!dashboard.myself.name"> v-model="tab"
dense
class="bg-blue text-white shadow-2"
indicator-color="white"
align="center"
narrow-indicator
@input="changetab"
>
<q-tab name="requisiti" icon="fas fa-check" :label="$t('reg.requirement')"></q-tab>
<q-tab name="invitati" icon="fas fa-users" :label="$t('dashboard.downline')"></q-tab>
<q-tab name="navi" icon="fas fa-ship" :label="$t('otherpages.admin.navi')"></q-tab>
<div v-if="!Completato9Req && !HasNave"> </q-tabs>
<CTitleBanner icon="person" :canopen="true" class="q-pa-xs text-center"
:title="$t('pages.posizione_in_programmazione')" bgcolor="bg-blue"
clcolor="text-white" mystyle=" " myclass="myshad">
<CRequisiti :statebool="Completato7Req" :msgTrue="$t('steps.enter_prog_requisiti_ok')"
:msgFalse="$t('steps.enter_prog_completa_requisiti')">
</CRequisiti>
</CTitleBanner>
</div>
<CTitleBanner icon="fas fa-gift" :canopen="true" class="q-pa-xs text-center"
:title="$t('pages.posizione_in_nave')" bgcolor="bg-green"
clcolor="text-white" mystyle=" " myclass="myshad">
<div v-if="!HasNave">
<CRequisiti :statebool="Completato9Req" :msgTrue="$t('steps.enter_nave_9req_ok')"
:color_ko="true"
:msgFalse="$t('steps.enter_nave_9req_ko')">
</CRequisiti>
</div>
<CMyNave v-for="(mianave, index) in dashboard.arrposizioni" :posizprop="mianave" :key="index"
:navi_partenzaprop="dashboard.navi_partenza" :listanavi="false">
</CMyNave>
</CTitleBanner>
</div>
</CTitleBanner>
<CTitleBanner class="q-pa-xs" :title="$t('pages.dashboard')" bgcolor="bg-info" clcolor="text-white"
mystyle=" " myclass="myshad">
<q-tab-panels v-model="tab" animated>
<q-tab-panel name="requisiti">
<div v-if="!!dashboard.myself.name"> <div v-if="!!dashboard.myself.name">
<CMyRequirement :myseluser="dashboard.myself" :mydashboard="dashboard"> <CMyRequirement :myseluser="dashboard.myself" :mydashboard="dashboard" @aggiorna="aggiorna">
</CMyRequirement> </CMyRequirement>
</div> </div>
@@ -50,6 +31,7 @@
mystyle=" " myclass="myshad" :canopen="true"> mystyle=" " myclass="myshad" :canopen="true">
<CUserBadge v-if="!!dashboard.aportador" :user="dashboard.aportador" :index="0" <CUserBadge v-if="!!dashboard.aportador" :user="dashboard.aportador" :index="0"
:showregalainv="false"
:numpeople="dashboard.numpeople_aportador" :numpeople="dashboard.numpeople_aportador"
mycolor="accent" @myclick="selectclick"> mycolor="accent" @myclick="selectclick">
@@ -64,6 +46,7 @@
mystyle=" " myclass="myshad" :canopen="true"> mystyle=" " myclass="myshad" :canopen="true">
<CUserBadge v-if="!!dashboard.myself" :user="dashboard.myself" :index="0" <CUserBadge v-if="!!dashboard.myself" :user="dashboard.myself" :index="0"
:showregalainv="false"
:numpeople="dashboard.downline.length" :numpeople="dashboard.downline.length"
@myclick="selectclick" @myclick="selectclick"
mycolor="blue"> mycolor="blue">
@@ -71,6 +54,8 @@
</CUserBadge> </CUserBadge>
</CTitleBanner> </CTitleBanner>
</q-tab-panel>
<q-tab-panel name="invitati">
<CTitleBanner class="shadow-2 rounded-borders" :title="$t('dashboard.downline')" bgcolor="bg-positive" <CTitleBanner class="shadow-2 rounded-borders" :title="$t('dashboard.downline')" bgcolor="bg-positive"
clcolor="text-white" clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true"> mystyle=" " myclass="myshad" :canopen="true">
@@ -78,13 +63,16 @@
<q-list bordered v-if="!!dashboard.downline && dashboard.downline.length > 0" class="rounded-borders"> <q-list bordered v-if="!!dashboard.downline && dashboard.downline.length > 0" class="rounded-borders">
<div v-for="(user, index) in dashboard.downline" :key="index"> <div v-for="(user, index) in dashboard.downline" :key="index">
<CUserBadge :yourinvite="true" :user="user" mycolor="positive" :index="index" <CUserBadge :yourinvite="true" :user="user" mycolor="positive" :index="index"
:showregalainv="false"
:numpeople="dashboard.downbyuser[user.username].length" :numpeople="dashboard.downbyuser[user.username].length"
@myclick="selectclick" @myclick="selectclick"
> >
</CUserBadge> </CUserBadge>
<div style="margin-left:10px;" v-for="(user2, index2) in dashboard.downbyuser[user.username]" :key="index2"> <div style="margin-left:10px;" v-for="(user2, index2) in dashboard.downbyuser[user.username]"
:key="index2">
<CUserBadge :yourinvite="false" :user="user2" mycolor="orange" :index="index2" <CUserBadge :yourinvite="false" :user="user2" mycolor="orange" :index="index2"
:showregalainv="false"
:numpeople="dashboard.downbyuser[user2.username].length" :numpeople="dashboard.downbyuser[user2.username].length"
@myclick="selectclick" @myclick="selectclick"
> >
@@ -109,23 +97,315 @@
</q-btn> </q-btn>
</div> </div>
<!--<CTitleBanner v-if="invitatinotreg" class="shadow-2 rounded-borders" :title="$t('dashboard.downnotreg')" <CTitleBanner class="shadow-2 rounded-borders" :title="$t('reg.legenda')"
bgcolor="bg-grey" bgcolor="bg-primary"
clcolor="text-white" clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true"> mystyle=" " myclass="myshad" :canopen="true">
<p class="q-ml-sm">{{ $t('dashboard.legenda_title')}}</p>
<q-list bordered v-if="!!dashboard.downnotreg" class="rounded-borders"> <q-list bordered class="rounded-borders justify-center q-pa-sm">
<div v-for="(user, index) in dashboard.downnotreg" :key="index"> <div class="row items-center q-pa-xs">
<CUserBadge :yourinvite="true" :user="user" mycolor="grey" :index="index" :numpeople="user.num_invitati" <CCardState :mytext="$t('pages.statusreg.req')" :myval="7" :myperc="(7 / 9) * 100" size="50px"
@myclick="selectclick"> size_mob="40px"
fontsize="0.75rem" myclass="my-card-small-stat" mycolor="orange">
</CUserBadge> </CCardState>
<div class="bg-blue text-white clBorderxs q-ml-sm">{{$t('pages.statusreg.req7')}}</div>
</div>
<div class="row items-center q-pa-xs">
<CCardState :mytext="$t('pages.statusreg.req')" :myval="9" :myperc="100" size="50px" size_mob="40px"
fontsize="0.75rem" myclass="my-card-small-stat" mycolor="green"></CCardState>
<div class="bg-blue text-white clBorderxs q-ml-sm">{{$t('pages.statusreg.req9', {sitename:
$t('ws.sitename')})}}
</div>
</div>
<div class="row items-center q-pa-xs">
<CCardState :mytext="$t('pages.statusreg.people')" :myval="2" :myperc="100" size="50px"
size_mob="40px"
fontsize="0.75rem" myclass="my-card-small-stat" mycolor="green"></CCardState>
<div class="bg-blue text-white clBorderxs q-ml-sm">{{$t('pages.statusreg.peoplelegend')}}</div>
</div>
<!--<CLegenda icon="fab fa-telegram" :text="`Telegram ` + $t('pages.statusreg.verified')"></CLegenda>
<CLegenda icon="fas fa-video" :text="$t('stat.zoom')"></CLegenda>
<CLegenda icon="fas fa-user-friends" :text="$t('dashboard.numinvitati')"></CLegenda>-->
<div class="row items-center q-pa-xs q-ml-sm">
<q-btn
fab-mini
icon="fab fa-whatsapp"
color="white" text-color="green"
size="sm">
</q-btn>
<div class="bg-blue text-white clBorderxs q-ml-sm">{{$t('dashboard.telefono_wa')}}</div>
</div> </div>
</q-list> </q-list>
</CTitleBanner>--> </CTitleBanner>
</q-tab-panel>
<q-tab-panel name="navi">
<div v-if="dashboard.myself.qualified">
<CTitleBanner icon="fas fa-gift" :canopen="true" class="q-pa-xs text-center"
:title="$t('pages.posizione_in_nave')" bgcolor="bg-green"
clcolor="text-white" mystyle=" " myclass="myshad">
<div v-if="!!dashboard.myself.name">
<div v-if="!HasNave">
<CRequisiti :statebool="Completato9Req" :msgTrue="$t('steps.enter_nave_9req_ok')"
:color_ko="true"
:msgFalse="$t('steps.enter_nave_9req_ko')">
</CRequisiti>
</div>
<div v-if="loading" class="text-center" style="height: 50px;">
<q-spinner-gears size="50px" color="primary"/>
</div>
<div class="row justify-center no-wrap">
<div class="col-1 cont_pos_intest">Num</div>
<div class="col-3 cont_intestaz ">{{$t('dashboard.nave')}}</div>
<div class="col-3 cont_intestaz " v-html="$t('dashboard.data_partenza')"></div>
<div class="col-3 cont_intestaz_small" v-html="$t('dashboard.doni_inviati')"></div>
<div class="col-2 cont_intestaz_small" v-html="$t('reg.note')"></div>
<!--<div class="col-3 cont_intestaz " v-html="$t('dashboard.tragitto')"></div>-->
<!--<div class="col-1 cont_intestaz ">Tot:</div>-->
</div>
<div v-for="(mianave, index) in dashboard.arrposizioni" :key="index"
class="q-pa-sm row items-start q-gutter-sm">
<q-card class="my-card-shadow yes_shadow">
<q-img
src="statics/images/nave.jpg"
style="width: 100%"
native-context-menu>
<div class="absolute-bottom text-subtitle1 text-center text-sobig">
{{ getnumtessstr(mianave.num_tess, index) }} - {{$t('dashboard.nave') + ' ' +
tools.getrigacolstr(mianave)}}
</div>
</q-img>
<div class="row justify-sm-start items-center rounded-borders">
<div class="row items-center justify-center q-ma-xs" style="width: 100%">
<q-chip class="glossy q-ma-md" :color="getcolorbynave(mianave)" text-color="white"
icon="fas fa-ship">
&nbsp;
{{ $t('dashboard.nave_in_partenza') + ' ' + datanave(mianave) }}
</q-chip>
</div>
<div class="row items-center justify-center q-ma-xs">
<div class="row items-center justify-around q-ma-xs no-wrap" style="width: 100%; font-weight: bold; font-size: 1rem">
<div>{{$t('dashboard.donatore')}}</div>
<div>{{$t('dashboard.mediatore')}}</div>
<div>{{$t('dashboard.sognatore')}}</div>
</div>
<div class="row items-center justify-around q-ma-xs no-wrap" style="width: 100%;">
<q-chip class="glossy q-ma-sm" color="red" text-color="white"
icon="fas fa-ship">
{{ tools.getrigacolstr(mianave) }}
</q-chip>
<q-chip class="glossy q-ma-sm" color="green" text-color="white"
icon="fas fa-ship">
{{ getNaveMediatoreStr(mianave)}}
</q-chip>
<q-chip class="glossy q-ma-sm" color="purple" text-color="white"
icon="fas fa-ship">
{{ getNaveSognatoreStr(mianave, 0)}}
</q-chip>
<!--<span v-for="index of 8">{{ getNaveSognatoreStr(mianave, index)}} - </span>-->
</div>
</div>
<div class="row items-center justify-center q-ma-xs" style="width: 100%;">
<q-list>
<q-item clickable>
<q-item-section avatar>
<q-icon :color="colordono(mianave)" inverted size="sm" name="fas fa-gift"
class="gift"></q-icon>
</q-item-section>
<q-item-section>
<q-item-label>
<div v-if="mianave.made_gift">{{ $t('dashboard.ho_effettuato_il_dono') }}</div>
</q-item-label>
</q-item-section>
</q-item>
</q-list>
</div>
</div>
<div class="row items-center justify-around q-ma-xs">
<q-input v-model="mianave.note" :label="$t('reg.note')"
debounce="1000"
style="width: 100%;"
@input="change_mynote(mianave)">
</q-input>
</div>
<div>
<CMyNave :posizprop="mianave" :key="index"
:navi_partenzaprop="dashboard.navi_partenza" :listanavi="false">
</CMyNave>
</div>
<!--<q-card-actions>
<q-btn flat>Action 1</q-btn>
<q-btn flat>Action 2</q-btn>
</q-card-actions>-->
</q-card>
<!--<div class="col-3">
<div>
<CCardState :isperc="true" size="50px" size_mob="40px" fontsize="0.75rem"
:myperc="getposizioneattuale(mianave)"></CCardState>
</div>
</div>-->
<!--<div class="col-1">
<div>
{{ getposizioneattuale(mianave, true) }}
</div>
</div>-->
</div>
<CTitleBanner class=""
v-if="imbarchipresenti()"
:title="$t('pages.posizione_in_programmazione')"
bgcolor="bg-primary"
clcolor="text-white"
mystyle="" myclass="myshad" canopen="true">
<div class="row justify-center items-center ">
<div class="col-2">
{{ $t('dashboard.num_tessitura') }}
</div>
<div class="col-3 ">
{{ $t('dashboard.posizione') }}
</div>
<div class="col-4 ">
{{ $t('dashboard.invitante') }}
</div>
<div class="col-2 ">
{{ $t('dashboard.downline') }}
</div>
<!--<div class="col-2">
{{ $t('dashboard.dono_da_effettuare') }}
</div>-->
<div class="col-1">
{{ $t('reg.elimina') }}
</div>
</div>
<div v-for="(mioimbarco, index) in dashboard.arrimbarchi" :key="index">
<div v-if="!mioimbarco.added" class="row justify-center items-center ">
<div class="col-2">
<div class="posizione_imbarco">{{ index }}</div>
</div>
<div class="col-3">
<div class="posizione_imbarco">{{ mioimbarco.posiz.posiz }} / {{
mioimbarco.posiz.totposiz }}
</div>
</div>
<div class="col-4">
<div class="posizione_imbarco">
<CUserBadge :yourinvite="false" :showsteps="false" :showregalainv="true"
:user="dashboard.arrusers[mioimbarco.invitante_username]" mycolor="orange"
:ind_order_ingr="mioimbarco.ind_order"
:id_listaingr="mioimbarco._id"
:index="index"
:numpeople="0"
@myclick="selectclick">
</CUserBadge>
</div>
</div>
<div class="col-2">
<div class="posizione_imbarco">
<CCardState :mytext="$t('pages.statusreg.people')"
:myval="getnuminvattivi(index, dashboard.myself, mioimbarco.posiz)+'/'+getnuminv(index, dashboard.myself, mioimbarco.posiz)"
:myperc="getnuminvperc(index, dashboard.myself, mioimbarco.posiz)" size="50px"
size_mob="40px"
fontsize="0.75rem" myclass="my-card-small-stat"
:mycolor="getcolorinvitati(index, dashboard.myself, mioimbarco.posiz)"></CCardState>
</div>
</div>
<!--<div class="col-2">
<div class="posizione_imbarco">33 </div>
</div>-->
<div class="col-1">
<div class="posizione_imbarco">
<q-btn flat round color="red" icon="fas fa-trash-alt" size="sm"
@click="cancellaImbarco(mioimbarco)"></q-btn>
</div>
</div>
</div>
</div>
<q-btn class="q-ma-md" rounded size="md"
icon="fas fa-info"
color="primary" @click="shownuovoviaggio=true"
:label="$t('steps.nuovo_imbarco')">
</q-btn>
<CRequisiti :statebool="true"
:msgTrue="$t('steps.enter_prog_msg') + '<br><strong>' + $t('steps.enter_prog_msg_2') + '</strong>'"
msgFalse="">
</CRequisiti>
</CTitleBanner> </CTitleBanner>
<!--<div>
<CMyNave v-for="(mianave, index) in dashboard.arrposizioni" :posizprop="mianave"
:key="index"
:navi_partenzaprop="dashboard.navi_partenza" :listanavi="false">
</CMyNave>
</div>-->
</div>
</CTitleBanner>
</div>
</q-tab-panel>
</q-tab-panels>
</div>
<div>
<div>
<div v-if="!Completato9Req && !HasNave">
<CTitleBanner icon="person" :canopen="true" class="q-pa-xs text-center"
:title="$t('pages.posizione_in_programmazione')" bgcolor="bg-blue"
clcolor="text-white" mystyle=" " myclass="myshad">
<CRequisiti :statebool="Completato7Req"
:msgTrue="$t('steps.enter_prog_requisiti_ok') + $t('steps.enter_prog_requisiti_ok')"
:msgFalse="$t('steps.enter_prog_completa_requisiti')">
</CRequisiti>
</CTitleBanner>
</div>
</div>
<div v-if="!!dashboard.myself.name">
<div v-if="dashboard.myself.deleted">
<span style="color: red;"> <h2><strong>UTENTE CANCELLATO (Nascosto: true) !</strong></h2></span>
</div>
<div v-if="dashboard.myself.sospeso">
<span style="color: blue;"> <h2><strong>UTENTE SOSPESO !</strong></h2></span>
</div>
</div>
<div v-if="loading" class="text-center" style="height: 50px;">
<q-spinner-gears size="50px" color="primary"/>
</div>
</div>
<!-- <!--
<CTitleBanner class="q-pa-xs" :title="$t('text.dashboard.madegift')" bgcolor="bg-info" clcolor="text-white" <CTitleBanner class="q-pa-xs" :title="$t('text.dashboard.madegift')" bgcolor="bg-info" clcolor="text-white"
mystyle=" " myclass="myshad"> mystyle=" " myclass="myshad">
@@ -148,42 +428,6 @@
</CCopyBtn> </CCopyBtn>
<CTitleBanner class="shadow-2 rounded-borders" :title="$t('reg.legenda')"
bgcolor="bg-primary"
clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true">
<p class="q-ml-sm">{{ $t('dashboard.legenda_title')}}</p>
<q-list bordered class="rounded-borders justify-center q-pa-sm">
<div class="row items-center q-pa-xs">
<CCardState :mytext="$t('pages.statusreg.req')" :myval="7" :myperc="(7 / 9) * 100" size="50px" size_mob="40px"
fontsize="0.75rem" myclass="my-card-small-stat" mycolor="orange">
</CCardState>
<div class="bg-blue text-white clBorderxs q-ml-sm">{{$t('pages.statusreg.req7')}}</div>
</div>
<div class="row items-center q-pa-xs">
<CCardState :mytext="$t('pages.statusreg.req')" :myval="9" :myperc="100" size="50px" size_mob="40px"
fontsize="0.75rem" myclass="my-card-small-stat" mycolor="green"></CCardState>
<div class="bg-blue text-white clBorderxs q-ml-sm">{{$t('pages.statusreg.req9', {sitename: $t('ws.sitename')})}}</div>
</div>
<div class="row items-center q-pa-xs">
<CCardState :mytext="$t('pages.statusreg.people')" :myval="2" :myperc="100" size="50px" size_mob="40px"
fontsize="0.75rem" myclass="my-card-small-stat" mycolor="green"></CCardState>
<div class="bg-blue text-white clBorderxs q-ml-sm">{{$t('pages.statusreg.peoplelegend')}}</div>
</div>
<!--<CLegenda icon="fab fa-telegram" :text="`Telegram ` + $t('pages.statusreg.verified')"></CLegenda>
<CLegenda icon="fas fa-video" :text="$t('stat.zoom')"></CLegenda>
<CLegenda icon="fas fa-user-friends" :text="$t('dashboard.numinvitati')"></CLegenda>-->
<div class="row items-center q-pa-xs q-ml-sm">
<q-btn
fab-mini
icon="fab fa-whatsapp"
color="white" text-color="green"
size="sm">
</q-btn>
<div class="bg-blue text-white clBorderxs q-ml-sm">{{$t('dashboard.telefono_wa')}}</div>
</div>
</q-list>
</CTitleBanner>
<br> <br>
<q-dialog v-model="showuserinfo"> <q-dialog v-model="showuserinfo">
@@ -195,12 +439,74 @@
<q-btn flat round color="white" icon="close" v-close-popup></q-btn> <q-btn flat round color="white" icon="close" v-close-popup></q-btn>
</q-toolbar> </q-toolbar>
<q-card-section class="inset-shadow" style="padding: 4px !important;"> <q-card-section class="inset-shadow" style="padding: 4px !important;">
<CMyRequirement :myseluser="seluser" :mydashboard="dashboard" :notitle="false"> <CMyRequirement :id_listaingr="id_listaingr" :myseluser="seluser" :showregalainv="showregalainv"
:mydashboard="dashboard" :notitle="false" @aggiorna="aggiorna"
:ind_order_ingr="ind_order_ingr">
</CMyRequirement> </CMyRequirement>
</q-card-section> </q-card-section>
</q-card> </q-card>
</q-dialog> </q-dialog>
<q-dialog v-model="shownuovoviaggio">
<q-card v-if="shownuovoviaggio" :style="`min-width: `+ tools.myheight_dialog() + `px;` ">
<q-toolbar class="bg-primary text-white" style="min-height: 30px;">
<q-toolbar-title>
{{ $t('steps.nuovo_imbarco') }}
</q-toolbar-title>
<q-btn flat round color="white" icon="close" v-close-popup @click="shownuovoviaggio=false"></q-btn>
</q-toolbar>
<q-card-section class="inset-shadow" style="padding: 4px !important;">
<CTitleBanner class="q-pa-xs text-center" :title="$t('steps.nuovo_imbarco')" bgcolor="bg-blue"
clcolor="text-white"
mystyle=" " myclass="myshad">
<div v-html="$t('steps.vuoi_entrare_nuova_nave')">
</div>
<br>
<div v-html="$t('steps.inserisci_invitante')" class="ins_invitante">
</div>
<br>
<div class="column q-gutter-sm justify-center text-center">
<q-input
bg-color="lightblue"
v-model="invitante_username"
rounded outlined
@blur="$v.invitante_username.$touch"
:error="$v.invitante_username.$error"
@keydown.space="(event) => event.preventDefault()"
:error-message="errorMsg('invitante_username', $v.invitante_username)"
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-md" rounded size="md"
icon="fas fa-ship"
:disabled='!allowSubmit'
color="positive" @click="addNuovoImbarco"
:label="$t('steps.nuovo_imbarco')">
</q-btn>
</div>
</CTitleBanner>
</q-card-section>
</q-card>
</q-dialog>
</div> </div>
</template> </template>

View File

@@ -74,10 +74,10 @@
.passo{ .passo{
font-weight: bold; font-weight: bold;
width: 100px; width: 110px;
} }
.passoint{ .passoint{
width: 90px; width: 100px;
} }
.gift{ .gift{

View File

@@ -11,8 +11,12 @@ import { lists } from '../../store/Modules/lists'
import translate from '../../globalroutines/util' import translate from '../../globalroutines/util'
import { CMyChipList } from '../CMyChipList' import { CMyChipList } from '../CMyChipList'
import { CVideo } from '../CVideo' import { CVideo } from '../CVideo'
import { validations } from './CMyNave-validate'
import { validationMixin } from 'vuelidate'
@Component({ @Component({
mixins: [validationMixin],
validations,
components: { CTitleBanner, CMyChipList, CVideo } components: { CTitleBanner, CMyChipList, CVideo }
}) })
@@ -23,6 +27,7 @@ export default class CMyNave extends MixinNave {
@Prop({ required: true }) public listanavi: boolean @Prop({ required: true }) public listanavi: boolean
public navi_partenza: any[] public navi_partenza: any[]
public $t public $t
public $v
public link_chat: string = '' public link_chat: string = ''
public cosa: string = 'tragitto' public cosa: string = 'tragitto'
public cosa2: string = 'donatore' public cosa2: string = 'donatore'
@@ -46,6 +51,7 @@ export default class CMyNave extends MixinNave {
public showmsguser: boolean = false public showmsguser: boolean = false
public seluser = null public seluser = null
public msg_tosend_user: string = '' public msg_tosend_user: string = ''
public username_sostituire: string = ''
public MyPagination: { public MyPagination: {
sortBy: string, sortBy: string,
descending: boolean, descending: boolean,
@@ -63,11 +69,10 @@ export default class CMyNave extends MixinNave {
sortable: true sortable: true
},*/ },*/
{ name: 'name', align: 'center', label: translate('reg.name'), field: 'name', sortable: true }, { name: 'name', align: 'center', label: translate('reg.name'), field: 'name', sortable: true },
{ name: 'surname', align: 'center', label: translate('reg.surname'), field: 'surname', sortable: true }, // { name: 'surname', align: 'center', label: translate('reg.surname'), field: 'surname', sortable: true },
{ name: 'posizione', align: 'center', label: 'Posizione', field: 'riga', sortable: true },
{ name: 'date_made_gift', align: 'center', label: 'Inviato', field: 'date_made_gift', sortable: true }, { name: 'date_made_gift', align: 'center', label: 'Inviato', field: 'date_made_gift', sortable: true },
{ name: 'tel', align: 'center', label: 'Tel', field: 'tel', sortable: true }, // { name: 'tel', align: 'center', label: 'Tel', field: 'tel', sortable: true },
{ name: 'made_gift', align: 'center', label: 'Confermato', field: 'made_gift', sortable: true }, { name: 'made_gift', align: 'center', label: 'Conferm.', field: 'made_gift', sortable: true },
] ]
public tragitto = [ public tragitto = [
@@ -318,10 +323,12 @@ export default class CMyNave extends MixinNave {
donatore: rec.name + ' ' + rec.surname + ' (' + this.$t('dashboard.posizione') + ' ' + rec.riga + '.' + rec.col + ')' donatore: rec.name + ' ' + rec.surname + ' (' + this.$t('dashboard.posizione') + ' ' + rec.riga + '.' + rec.col + ')'
}) })
tools.askConfirm(this.$q, msgtitle, msginvia + ' ' + '?', translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.DONO_RICEVUTO, 0, { tools.askConfirm(this.$q, msgtitle, msginvia + ' ' + '? (Pos ' + rec.riga + '.' + rec.col + ')', translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.DONO_RICEVUTO, 0, {
param1: { param1: {
_id: rec._id, _id: rec._id,
made_gift: true made_gift: true,
riga: rec.riga,
col: rec.col,
}, },
param2: rec.username, param2: rec.username,
param3: mymsg param3: mymsg
@@ -709,7 +716,7 @@ export default class CMyNave extends MixinNave {
let col = 0 let col = 0
let riga1don = 1 let riga1don = 1
let col1don = 1 let col1don = 1
let ind_order = -1; let ind_order = -1
if (this.listanavi) { if (this.listanavi) {
riga = this.nave.riga riga = this.nave.riga
col = this.nave.col col = this.nave.col
@@ -739,6 +746,12 @@ export default class CMyNave extends MixinNave {
this.loading = false this.loading = false
} }
public async update_nave() {
this.showmsguser = false
this.apri()
this.aggiorna()
}
public getstrinpartenza() { public getstrinpartenza() {
if (this.GiornoDelDonoArrivato) { if (this.GiornoDelDonoArrivato) {
return this.$t('dashboard.nave_partita') return this.$t('dashboard.nave_partita')
@@ -756,6 +769,7 @@ export default class CMyNave extends MixinNave {
} }
if (!!myrec) if (!!myrec)
if (!!myrec.donatore.navepersistente)
return tools.getstrDate(myrec.donatore.navepersistente.date_start) return tools.getstrDate(myrec.donatore.navepersistente.date_start)
return '' return ''
@@ -837,4 +851,47 @@ export default class CMyNave extends MixinNave {
this.InviaMsgAUserConfirm(msgobj, naveuser) this.InviaMsgAUserConfirm(msgobj, naveuser)
} }
get isAdmin() {
return UserStore.state.isAdmin
}
get isManager() {
return UserStore.state.isManager
}
get isTutor() {
return UserStore.state.isTutor
}
get isTratuttrici() {
return UserStore.state.isTratuttrici
}
get allowSubmit() {
let error = this.$v.$error || this.$v.$invalid
error = error || (this.username_sostituire === this.seluser.username_sostituire)
return !error
}
get getnotifBotTxt() {
return this.seluser.name + ' ' + this.seluser.surname + ' è stato sostituito con ' + this.username_sostituire
}
public async SostituisciUtente(user, usernamesost, notifBottxt) {
usernamesost = usernamesost.trim()
await tools.askConfirm(this.$q, 'Sostituisci', notifBottxt + ' ?', translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.SOSTITUISCI, 0, {
param1: user,
param2: { username: usernamesost, riga: user.riga, col: user.col },
param3: notifBottxt
})
}
public getnavestr(row) {
return tools.getRiganave(row.riga) + '.' + tools.getColnave(row.col)
}
} }

View File

@@ -1,19 +1,13 @@
<template> <template>
<div> <div>
<CTitleBanner v-if="true" class="" <CTitleBanner v-if="!!getpartenza()" class=""
:title="titolonave()" :title="titolonave()"
:bgcolor="getcolortitle()" :bgcolor="getcolortitle()"
clcolor="text-white" clcolor="text-white"
mystyle="" myclass="myshad" canopen="true" :visible="!listanavi" @apri="apri"> mystyle="" myclass="myshad" canopen="true" :visible="false" @apri="apri">
<q-inner-loading :showing="loading">
<q-spinner-tail size="2em" color="primary"/>
</q-inner-loading>
<div v-if="mediatore" class="flex flex-center column justify-center"> <div v-if="mediatore" class="flex flex-center column justify-center">
<div class="">
<!--IndPrimario: {{ nave.indprimario }} - IndOrder: {{ nave.ind_order }} -->
</div>
<CTitleBanner v-if="nave" class="" <CTitleBanner v-if="nave" class=""
:title="$t('dashboard.tragitto')" :title="$t('dashboard.tragitto')"
@@ -23,7 +17,7 @@
<q-chip class="glossy q-ma-sm" color="orange" text-color="white" icon="star"> <q-chip class="glossy q-ma-sm" color="orange" text-color="white" icon="star">
{{getposizione()}} {{getposizione()}}
</q-chip> </q-chip>
<div class="row justify-between no-wrap"> <div class="row items-center no-wrap">
<div class="cont_pos_intest">N</div> <div class="cont_pos_intest">N</div>
<div class="cont_intestaz q-mx-sm passoint" <div class="cont_intestaz q-mx-sm passoint"
@@ -68,7 +62,7 @@
clcolor="text-white" clcolor="text-white"
mystyle="" myclass="myshad" canopen="true"> mystyle="" myclass="myshad" canopen="true">
<br /> <br/>
<div class="q-ma-sm"> <div class="q-ma-sm">
<div class="column justify-center items-center q-gutter-md tutor"> <div class="column justify-center items-center q-gutter-md tutor">
<div class="title-nave clBorderSteps">{{gettitledonatore()}}</div> <div class="title-nave clBorderSteps">{{gettitledonatore()}}</div>
@@ -92,7 +86,8 @@
</div> </div>
<div class=""> <div class="">
<div class="mediatore text-uppercase">{{$t('dashboard.mediatore')}}:</div> <div class="mediatore text-uppercase">{{$t('dashboard.mediatore')}}:</div>
<div :class="`cont_mediatore cursor-pointer selezione ` + getclassSelect(nave.rec.donatore.recmediatore)" <div
:class="`cont_mediatore cursor-pointer selezione ` + getclassSelect(nave.rec.donatore.recmediatore)"
@click="clickseluser(nave.rec.donatore.recmediatore)"> @click="clickseluser(nave.rec.donatore.recmediatore)">
{{ nave.rec.donatore.recmediatore.name }} {{ {{ nave.rec.donatore.recmediatore.name }} {{
nave.rec.donatore.recmediatore.surname }} ({{ nave.rec.donatore.recmediatore.surname }} ({{
@@ -123,8 +118,10 @@
</div> </div>
<div class="donatore text-uppercase">{{$t('dashboard.donatori')}}:</div> <div class="donatore text-uppercase">{{$t('dashboard.donatori')}}:</div>
<div v-for="(donatore, index) in nave.rec.donatore.arrdonatori" :key="index"> <div v-for="(donatore, index) in nave.rec.donatore.arrdonatori" :key="index">
<div v-if="donatore" <div v-if="donatore"
:class="`cont_donatore row ` + getclassSelect(donatore)"> :class="`cont_donatore row ` + getclassSelect(donatore)"
@click="clickseluser(donatore)">
<div> <div>
{{ getindex(donatore, index + 1) }} - {{ donatore.name }} {{ {{ getindex(donatore, index + 1) }} - {{ donatore.name }} {{
donatore.surname }} ({{ donatore.surname }} ({{
@@ -162,7 +159,7 @@
<div v-if="!FattoDono" v-html="$t('dashboard.sonodonatore')"> <div v-if="!FattoDono" v-html="$t('dashboard.sonodonatore')">
</div> </div>
<div v-if="!FattoDono" class="text-evidente bordo_stondato"> <div v-if="!FattoDono && !donatore_navepers.provvisoria" class="text-evidente bordo_stondato">
<div>{{$t('dashboard.quando_eff_il_tuo_dono')}}: <strong>{{ getGiornoDelDono() <div>{{$t('dashboard.quando_eff_il_tuo_dono')}}: <strong>{{ getGiornoDelDono()
}}</strong><br> }}</strong><br>
@@ -198,7 +195,7 @@
</div> </div>
<div class="text-evidente bordo_stondato_blu"> <div class="text-evidente bordo_stondato_blu">
<div v-if="GiornoDelDonoArrivato"> <div v-if="GiornoDelDonoArrivato && !donatore_navepers.provvisoria">
<div v-if="!FattoDono" <div v-if="!FattoDono"
v-html="$t('dashboard.effettua_il_dono', {email: getemailPagamentoSognatore() })"> v-html="$t('dashboard.effettua_il_dono', {email: getemailPagamentoSognatore() })">
</div> </div>
@@ -254,7 +251,7 @@
clcolor="text-white" clcolor="text-white"
mystyle="" myclass="myshad" canopen="true" :visible="false"> mystyle="" myclass="myshad" canopen="true" :visible="false">
<br /> <br/>
<div class="q-ma-sm"> <div class="q-ma-sm">
<div class="column justify-center items-center q-gutter-md tutor"> <div class="column justify-center items-center q-gutter-md tutor">
<div class="title-nave clBorderSteps">{{gettitlemediatore()}}</div> <div class="title-nave clBorderSteps">{{gettitlemediatore()}}</div>
@@ -362,7 +359,7 @@
clcolor="text-white" clcolor="text-white"
mystyle="" myclass="myshad" canopen="true" :visible="false"> mystyle="" myclass="myshad" canopen="true" :visible="false">
<br /> <br/>
<div v-if="sonoSognatore" class="q-ma-sm"> <div v-if="sonoSognatore" class="q-ma-sm">
<div class="text-evidente bordo_stondato justify-between q-pa-xs-sm"> <div class="text-evidente bordo_stondato justify-between q-pa-xs-sm">
<div class=""> <div class="">
@@ -399,23 +396,15 @@
{{ props.row.index }} {{ props.row.index }}
</q-td>--> </q-td>-->
<q-td key="name" :props="props"> <q-td key="name" :props="props">
{{ props.row.name }} <q-btn v-if="!!props.row.profile" flat rounded color="blue"
</q-td> size="1rem"
<q-td key="surname" :props="props"> :label="props.row.name + ' ' + props.row.surname + ' (' + getnavestr(props.row) + ')"
{{ props.row.surname }}
</q-td>
<q-td key="posizione" :props="props">
{{ props.row.riga }}.{{ props.row.col }}
</q-td>
<q-td key="date_made_gift" :props="props">
{{ tools.getstrshortDateTime(props.row.date_made_gift) }}
</q-td>
<q-td key="tel" :props="props">
<q-btn flat rounded color="blue"
:label="props.row.profile.cell"
@click="clickseluser(props.row)"> @click="clickseluser(props.row)">
</q-btn> </q-btn>
</q-td> </q-td>
<q-td key="date_made_gift" :props="props">
{{ tools.getstrshortDayDateTime(props.row.date_made_gift) }}
</q-td>
<q-td key="made_gift" :props="props"> <q-td key="made_gift" :props="props">
<div class="row justify-center"> <div class="row justify-center">
@@ -434,8 +423,7 @@
text-color="white" text-color="white"
color="positive" color="positive"
icon="fas fa-gift"> icon="fas fa-gift">
{{ $t('dashboard.dono_ricevuto_2', {donatore: props.row.name }) {{ $t('dialog.ok') }}
}}
</q-chip> </q-chip>
</div> </div>
</q-td> </q-td>
@@ -460,6 +448,7 @@
<q-card-section class="inset-shadow" style="padding: 4px !important;"> <q-card-section class="inset-shadow" style="padding: 4px !important;">
<div class="row justify-center q-gutter-md"> <div class="row justify-center q-gutter-md">
<div> <div>
<div v-if="!!seluser.profile">
<div v-if="!!seluser.profile.cell" class="q-ma-sm text-center clBorderWarning"> <div v-if="!!seluser.profile.cell" class="q-ma-sm text-center clBorderWarning">
Whatsapp: {{seluser.profile.cell}} Whatsapp: {{seluser.profile.cell}}
<q-btn <q-btn
@@ -471,8 +460,10 @@
target="__blank"> target="__blank">
</q-btn> </q-btn>
</div> </div>
</div>
<div class="q-ma-sm text-center clBorderSteps"> <div class="q-ma-sm text-center clBorderSteps">
<div>TELEGRAM {{$t('ws.sitename')}} BOT {{$t('dialog.sendmsg')}} -> {{seluser.name }} {{ <div>TELEGRAM {{$t('ws.sitename')}} BOT {{$t('dialog.sendmsg')}} ->
{{seluser.name }} {{
seluser.surname }}: seluser.surname }}:
</div> </div>
<q-input type="textarea" <q-input type="textarea"
@@ -490,6 +481,41 @@
</div> </div>
</div> </div>
<div v-if="isManager || isTutor">
<CTitleBanner class="shadow-2 rounded-borders" title="Sostituisci"
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="username_sostituire"
rounded outlined
@blur="$v.username_sostituire.$touch"
:error="$v.username_sostituire.$error"
@keydown.space="(event) => event.preventDefault()"
maxlength="20"
debounce="1000"
label="Username Nuova Persona:">
<template v-slot:prepend>
<q-icon name="person"/>
</template>
</q-input>
<q-btn class="q-ma-sm" rounded color="positive" text-color="white"
icon="fas fa-gift"
label="Sostituisci"
:disabled='!allowSubmit'
@click="SostituisciUtente(seluser, username_sostituire, getnotifBotTxt)"></q-btn>
</div>
</CTitleBanner>
</div>
</div> </div>
</div> </div>
</q-card-section> </q-card-section>

View File

@@ -26,6 +26,7 @@ export default class CMyPopupEdit extends Vue {
@Prop({ required: false, default: false }) public showall @Prop({ required: false, default: false }) public showall
@Prop({ required: false, default: 'row' }) public view @Prop({ required: false, default: 'row' }) public view
@Prop({ required: false, default: '5' }) public minuteinterval @Prop({ required: false, default: '5' }) public minuteinterval
@Prop({ required: false, default: false }) public disable
public myvalue = '' public myvalue = ''
public myvalueprec = 'false' public myvalueprec = 'false'

View File

@@ -69,7 +69,7 @@
:opticon="db_fieldsTable.getIconByTable(col.jointable)"></CMyChipList> :opticon="db_fieldsTable.getIconByTable(col.jointable)"></CMyChipList>
</div> </div>
<div v-else-if="col.fieldtype === tools.FieldType.boolean"> <div v-else-if="col.fieldtype === tools.FieldType.boolean">
<q-toggle dark color="green" v-model="myvalue" :label="col.title" <q-toggle dark color="green" v-model="myvalue" :label="col.title" :disable="disable && col.name !== 'profile.saw_zoom_presentation'"
@input="Savedb"></q-toggle> @input="Savedb"></q-toggle>
</div> </div>
<div v-else-if="col.fieldtype === tools.FieldType.html"> <div v-else-if="col.fieldtype === tools.FieldType.html">

View File

@@ -28,8 +28,11 @@ import { shared_consts } from '../../common/shared_vuejs'
export default class CMyRequirement extends MixinUsers { export default class CMyRequirement extends MixinUsers {
@Prop({ required: true }) public myseluser @Prop({ required: true }) public myseluser
@Prop({ required: false, default: -1 }) public ind_order_ingr: number
@Prop({ required: false, default: -1 }) public id_listaingr: number
@Prop({ required: true }) public mydashboard @Prop({ required: true }) public mydashboard
@Prop({ required: false, default: false }) public notitle @Prop({ required: false, default: false }) public notitle
@Prop({ required: false, default: false }) public showregalainv
public $t public $t
public $v public $v
public $q public $q
@@ -160,8 +163,8 @@ export default class CMyRequirement extends MixinUsers {
} }
} }
if (!!user.profile) if (!!user.profile)
if (!!user.profile.paymenttypes) { if (!!user.profile.email_paypal) {
const ris = (user.profile.paymenttypes.length >= 1) && ispaypal const ris = (user.profile.email_paypal !== '') && ispaypal
return ris return ris
} }
@@ -212,12 +215,20 @@ export default class CMyRequirement extends MixinUsers {
} }
public async update_username() {
await UserStore.actions.getDashboard({ username: this.dashboard.myself.username }).then((ris) => {
this.dashboard = ris
this.$emit('aggiorna')
})
}
public isextralist(user) { public isextralist(user) {
return !!user.cell_complete return !!user.cell_complete
} }
public ismyinvited_notreg(user) { public ismyinvited_notreg(user) {
return this.dashboard.downnotreg.find((rec) => rec.ind_order === user.ind_order) // return this.dashboard.downnotreg.find((rec) => rec.ind_order === user.ind_order)
} }
public ismydownline(user) { public ismydownline(user) {
@@ -248,7 +259,20 @@ export default class CMyRequirement extends MixinUsers {
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, { 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, param1: user,
param2: aportador_solidario, param2: { aportador_solidario },
param3: notiftxt
})
}
public async RegalaInvitante(user, invitante_username, ind_order_ingr, id_listaingr, notifBottxt) {
let notiftxt = ''
invitante_username = invitante_username.trim()
if (this.notifBot)
notiftxt = notifBottxt
await tools.askConfirm(this.$q, translate('reg.regala_invitante'), translate('reg.regala_invitante') + ' ' + user.name + ' ' + user.surname + ' a ' + invitante_username + ' ?', translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.REGALA_INVITANTE, 0, {
param1: id_listaingr,
param2: { invitante_username, ind_order_ingr },
param3: notiftxt param3: notiftxt
}) })
} }
@@ -294,6 +318,13 @@ export default class CMyRequirement extends MixinUsers {
}) })
} }
get getnotifBotTxtInvitante() {
return this.$t('dashboard.ricevuto_dono', {
invitato: this.seluser.name + ' ' + this.seluser.surname,
mittente: this.dashboard.myself.username
})
}
get myclassreq() { get myclassreq() {
let mycl = 'text-center' let mycl = 'text-center'
mycl += (this.ismydownline) ? ' ' + 'background-color: green;' : '' mycl += (this.ismydownline) ? ' ' + 'background-color: green;' : ''
@@ -308,4 +339,16 @@ export default class CMyRequirement extends MixinUsers {
return '' return ''
} }
public isregalainvitante() {
return this.ind_order_ingr >= 0
}
public gettitleregala() {
if (this.isregalainvitante())
return this.$t('reg.regala_invitante')
else
return this.$t('reg.regala_invitato')
}
} }

View File

@@ -20,8 +20,31 @@
</div> </div>
<div v-if="ismydownline(seluser)"> <CTitleBanner class="shadow-2 rounded-borders"
<CTitleBanner class="shadow-2 rounded-borders" :title="$t('reg.regala_invitato')" :title="$t('steps.sharemovement') + ` - ` + seluser.name + ` ` + seluser.surname + ``"
bgcolor="bg-secondary"
clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true">
<div :class="myclassreq">
<div v-if="!isextralist(seluser)">
<div v-for="(req, index) of arrrequisiti_liberi">
<CRequisito :icon="req.icon" :text="$t(req.textlang, {botname: $t('ws.botname')}) + req.textadd(seluser)"
:icon_error="geticonerror(false)"
:no_check="true"
:isok="req.isok(seluser)"
:info="req.info"></CRequisito>
</div>
</div>
</div>
</CTitleBanner>
<div v-if="ismydownline(seluser) || showregalainv">
<CTitleBanner class="shadow-2 rounded-borders" :title="gettitleregala()"
bgcolor="bg-positive" bgcolor="bg-positive"
clcolor="text-white" clcolor="text-white"
:visible="false" :visible="false"
@@ -49,7 +72,12 @@
<q-toggle v-model="notifBot" :label="$t('dashboard.sendnotification')"/> <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" <q-btn v-if="isregalainvitante()" class="q-ma-sm" rounded color="positive" text-color="white" icon="fas fa-gift"
:label="$t('reg.regala_invitante')"
:disabled='!allowSubmit'
@click="RegalaInvitante(seluser, aportador_solidario, ind_order_ingr, id_listaingr, getnotifBotTxtInvitante)"></q-btn>
<q-btn v-else class="q-ma-sm" rounded color="positive" text-color="white" icon="fas fa-gift"
:label="$t('reg.regala_invitato')" :label="$t('reg.regala_invitato')"
:disabled='!allowSubmit' :disabled='!allowSubmit'
@click="RegalaInvitato(seluser, aportador_solidario, getnotifBotTxt)"></q-btn> @click="RegalaInvitato(seluser, aportador_solidario, getnotifBotTxt)"></q-btn>
@@ -72,27 +100,6 @@
</div> </div>
</div> </div>
<CTitleBanner class="shadow-2 rounded-borders"
:title="$t('steps.sharemovement') + ` - ` + seluser.name + ` ` + seluser.surname + ``"
bgcolor="bg-secondary"
clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true">
<div :class="myclassreq">
<div v-if="!isextralist(seluser)">
<div v-for="(req, index) of arrrequisiti_liberi">
<CRequisito :icon="req.icon" :text="$t(req.textlang, {botname: $t('ws.botname')}) + req.textadd(seluser)"
:icon_error="geticonerror(false)"
:no_check="true"
:isok="req.isok(seluser)"
:info="req.info"></CRequisito>
</div>
</div>
</div>
</CTitleBanner>
<!--<div v-else> <!--<div v-else>
<div class="column justify-center q-gutter-sm q-pa-sm"> <div class="column justify-center q-gutter-sm q-pa-sm">

View File

@@ -1,7 +1,8 @@
<template> <template>
<div> <div>
<div> <div>
<CTitleBanner class="q-pa-xs" :title="$t('pages.nextzoom')" bgcolor="bg-primary" clcolor="text-white" <CTitleBanner v-if="listacalzoom.length > 0" class="q-pa-xs" :title="$t('pages.nextzoom')"
bgcolor="bg-primary" clcolor="text-white"
mystyle="" myclass="myshad" canopen="true"> mystyle="" myclass="myshad" canopen="true">
@@ -9,17 +10,20 @@
<div class="row animazione justify-center q-gutter-md"> <div class="row animazione justify-center q-gutter-md">
<q-btn v-if="showzoom" size="md" type="a" :href="tools.getLinkZoom()" <q-btn v-if="showzoom" size="md" type="a" :href="tools.getLinkZoom()"
target="_blank" rounded color="white" text-color="primary" icon="fas fa-video" :label="$t('steps.entra_zoom')"> target="_blank" rounded color="white" text-color="primary" icon="fas fa-video"
:label="$t('steps.entra_zoom')">
</q-btn> </q-btn>
<transition-group name="fade" mode="out-in" <transition-group name="fade" mode="out-in"
appear appear
enter-active-class="animazione fadeIn" enter-active-class="animazione fadeIn"
leave-active-class="animazione fadeOut"> leave-active-class="animazione fadeOut">
<q-item v-for="(confer, index) in listacalzoom" :key="confer._id" class="q-mb-xs animated clBorderZoom q-pa-sm" v-ripple> <q-item v-for="(confer, index) in listacalzoom" :key="confer._id"
class="q-mb-xs animated clBorderZoom q-pa-sm" v-ripple>
<q-item-section avatar> <q-item-section avatar>
<q-avatar v-if="tools.geticon(confer.lang)" :class="tools.geticon(confer.lang)" size="sm"> <q-avatar v-if="tools.geticon(confer.lang)" :class="tools.geticon(confer.lang)"
size="sm">
</q-avatar> </q-avatar>
<q-avatar v-else color="primary" text-color="white" class="text-center"> <q-avatar v-else color="primary" text-color="white" class="text-center">
{{ tools.capitalize(confer.lang) }} {{ tools.capitalize(confer.lang) }}
@@ -28,7 +32,13 @@
<q-item-section class="text-center"> <q-item-section class="text-center">
<q-item-label class="title">{{ confer.title }}</q-item-label> <q-item-label class="title">{{ confer.title }}</q-item-label>
<q-item-label class="zoom_data">{{ tools.getstrDateMonthWeekTimeShort(confer.date_start) }}</q-item-label> <q-item-label class="text-center">
<q-icon v-if="confer.benvenuto" name="fas fa-check" size="md" color="blue"></q-icon>
<q-icon v-if="!!confer.icon" :name="confer.icon" size="md" inverted :color="confer.color"></q-icon>
</q-item-label>
<q-item-label class="zoom_data">{{
tools.getstrDateMonthWeekTimeShort(confer.date_start) }}
</q-item-label>
<q-item-label class="note"> <q-item-label class="note">
<q-chip <q-chip
style="background-color: lightblue !important;" style="background-color: lightblue !important;"

View File

@@ -12,7 +12,7 @@ import { validationMixin } from 'vuelidate'
import { Logo } from '../../components/logo' import { Logo } from '../../components/logo'
import { DefaultProfile } from '../../store/Modules/UserStore' import { DefaultProfile } from '../../store/Modules/UserStore'
import 'vue-country-code/dist/vue-country-code.css' // import 'vue-country-code/dist/vue-country-code.css'
import { serv_constants } from '@src/store/Modules/serv_constants' import { serv_constants } from '@src/store/Modules/serv_constants'
import VueCountryCode from 'vue-country-code' import VueCountryCode from 'vue-country-code'

View File

@@ -31,6 +31,8 @@
rounded outlined rounded outlined
@blur="$v.signup.username.$touch" @blur="$v.signup.username.$touch"
:error="$v.signup.username.$error" :error="$v.signup.username.$error"
@keydown.native.54="(event) => event.preventDefault()"
@keydown.native.52="(event) => event.preventDefault()"
@keydown.space="(event) => event.preventDefault()" @keydown.space="(event) => event.preventDefault()"
maxlength="20" maxlength="20"
debounce="1000" debounce="1000"

View File

@@ -12,7 +12,7 @@ import { validationMixin } from 'vuelidate'
import { Logo } from '../../components/logo' import { Logo } from '../../components/logo'
import { DefaultProfile } from '../../store/Modules/UserStore' import { DefaultProfile } from '../../store/Modules/UserStore'
import 'vue-country-code/dist/vue-country-code.css' // import 'vue-country-code/dist/vue-country-code.css'
import { serv_constants } from '@src/store/Modules/serv_constants' import { serv_constants } from '@src/store/Modules/serv_constants'
import VueCountryCode from 'vue-country-code' import VueCountryCode from 'vue-country-code'

View File

@@ -84,6 +84,8 @@
rounded outlined rounded outlined
@blur="$v.signup.username.$touch" @blur="$v.signup.username.$touch"
:error="$v.signup.username.$error" :error="$v.signup.username.$error"
@keydown.native.54="(event) => event.preventDefault()"
@keydown.native.52="(event) => event.preventDefault()"
@keydown.space="(event) => event.preventDefault()" @keydown.space="(event) => event.preventDefault()"
maxlength="20" maxlength="20"
debounce="1000" debounce="1000"

View File

@@ -12,7 +12,7 @@ import { validationMixin } from 'vuelidate'
import { Logo } from '../../components/logo' import { Logo } from '../../components/logo'
import { DefaultProfile } from '../../store/Modules/UserStore' import { DefaultProfile } from '../../store/Modules/UserStore'
import 'vue-country-code/dist/vue-country-code.css' // import 'vue-country-code/dist/vue-country-code.css'
import { serv_constants } from '@src/store/Modules/serv_constants' import { serv_constants } from '@src/store/Modules/serv_constants'
import VueCountryCode from 'vue-country-code' import VueCountryCode from 'vue-country-code'

View File

@@ -3,27 +3,10 @@
<div class="text-center"> <div class="text-center">
<p> <p>
<logo mystyle="height:200px;"></logo> <logo mystyle="height:200px;"></logo>
<CTitleBanner :title="gettitlereg"></CTitleBanner> <CTitleBanner :title="gettitlereg" :canopen="false"></CTitleBanner>
</p> </p>
</div> </div>
<q-banner
v-if="!nuovareg"
rounded
class="bg-primary text-white"
style="text-align: center; font-size:1rem;">
<span class="mybanner" v-html="$t('reg.reg_lista_prec')"></span>
</q-banner>
<br>
<q-banner
v-if="!nuovareg"
rounded
class="bg-warning text-black"
style="text-align: center; font-size:1rem;">
<span class="mybanner">{{ $t('reg.nuove_registrazioni')}}</span>
</q-banner>
<!--Prova URL : {{env('PROVA_PAOLO')}}--> <!--Prova URL : {{env('PROVA_PAOLO')}}-->
<div class="q-gutter-sm"> <div class="q-gutter-sm">
@@ -84,6 +67,8 @@
rounded outlined rounded outlined
@blur="$v.signup.username.$touch" @blur="$v.signup.username.$touch"
:error="$v.signup.username.$error" :error="$v.signup.username.$error"
@keydown.native.52="(event) => event.preventDefault()"
@keydown.native.54="(event) => event.preventDefault()"
@keydown.space="(event) => event.preventDefault()" @keydown.space="(event) => event.preventDefault()"
maxlength="20" maxlength="20"
debounce="1000" debounce="1000"

View File

@@ -466,10 +466,6 @@ export default class CStatus extends MixinBase {
} }
get TelegramBiblio() {
return 'https://t.me/joinchat/AL2qKExZKvenLgpVhOyefQ'
}
public geticonstep(mystep) { public geticonstep(mystep) {
if (!!mystep.icon) if (!!mystep.icon)
return mystep.icon return mystep.icon
@@ -552,7 +548,7 @@ export default class CStatus extends MixinBase {
} }
get progressstep() { get progressstep() {
return this.$t(this.arrsteps[this.steptodo].title) return this.$t(this.arrsteps[this.steptodo].title, {botname: this.$t('ws.botname')})
} }
get strpercstep() { get strpercstep() {

View File

@@ -77,7 +77,7 @@
<div v-else> <div v-else>
<br> <br>
<q-btn color="primary" icon="fab fa-telegram" <q-btn color="primary" icon="fab fa-telegram"
:label="$t('components.authentication.telegram.openbot')" :label="$t('components.authentication.telegram.openbot', {botname: $t('ws.botname')})"
type="a" type="a"
:href="getLinkBotTelegram" target="_blank"></q-btn> :href="getLinkBotTelegram" target="_blank"></q-btn>
<br> <br>
@@ -166,15 +166,15 @@
</div> </div>
<div v-else-if="mystep.title === 'steps.dream'"> <div v-else-if="mystep.title === 'steps.dream'">
<div v-if="mystep.descr"> <div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div> <div v-html="$t(mystep.descr, {sitename: $t('pages.sitename')})"></div>
</div> </div>
<q-input v-model="my_dream" :label="$t('steps.dream')+' (min. 10):'" <q-input v-model="my_dream" :label="$t('steps.dream')+' (min. 10):'"
type="textarea" debounce="1000" type="textarea" debounce="1000"
input-class="myinput-area-big" input-class="myinput-area-big"
autogrow autogrow
@input="change_mydream" @input="change_mydream">
></q-input> </q-input>
<!-- <!--
<CMyFieldDb :title="$t('reg.my_dream')" <CMyFieldDb :title="$t('reg.my_dream')"
@@ -186,18 +186,6 @@
</CMyFieldDb> </CMyFieldDb>
--> -->
</div> </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 v-else-if="mystep.title === 'steps.zoom'">
<CRequisiti :statebool="VistoZoom" :msgTrue="$t('steps.zoom_si_partecipato')" <CRequisiti :statebool="VistoZoom" :msgTrue="$t('steps.zoom_si_partecipato')"
@@ -205,7 +193,7 @@
</CRequisiti> </CRequisiti>
<div v-if="mystep.descr"> <div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div> <div v-html="$t(mystep.descr, {sitename: $t('pages.sitename')})"></div>
</div> </div>
<CTitleBanner class="q-pa-xs" :title="$t('steps.zoom_what')" bgcolor="bg-primary" <CTitleBanner class="q-pa-xs" :title="$t('steps.zoom_what')" bgcolor="bg-primary"
clcolor="text-white" clcolor="text-white"
@@ -216,13 +204,16 @@
</CVideo> </CVideo>
<div v-if="toolsext.isLang('it')"> <div v-if="toolsext.isLang('it')">
<h3>ISTRUZIONI ZOOM</h3> <h3>ISTRUZIONI ZOOM Cloud Meeting</h3>
<ul style="text-align: left; font-size:0.75rem;"> <ul style="text-align: left; font-size:0.75rem;">
<li>1. Scarica l'app (<a <li>1. Scarica l'app per: (<a
href="https://play.google.com/store/apps/details?id=us.zoom.videomeetings" 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">Android</a> o per
target="_blank">da PC</a>) <a href="https://apps.apple.com/us/app/zoom-cloud-meetings/id546505307" target="_blank">iPhone</a>
o per
<a href="https://zoom.us/support/download" target="_blank">PC Desktop</a>
)
</li> </li>
<li>2. Inserisci il tuo Nome e Cognome per essere riconosciuto</li> <li>2. Inserisci il tuo Nome e Cognome per essere riconosciuto</li>
<li>3. Clicca "join meeting"</li> <li>3. Clicca "join meeting"</li>
@@ -278,7 +269,7 @@
:label="$t('pages.dashboard')"></q-btn> :label="$t('pages.dashboard')"></q-btn>
<div v-if="mystep.descr"> <div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div> <div v-html="$t(mystep.descr, {sitename: $t('pages.sitename')})"></div>
</div> </div>
<div class="row justify-center q-ma-sm"> <div class="row justify-center q-ma-sm">
@@ -315,17 +306,17 @@
<div v-if="mystep.descr"> <div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div> <div v-html="$t(mystep.descr, {sitename: $t('pages.sitename')})"></div>
</div> </div>
</div> </div>
<div v-else-if="mystep.title === 'steps.enter_prog'"> <div v-else-if="mystep.title === 'steps.enter_prog'">
<div v-if="mystep.descr"> <div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div> <div v-html="$t(mystep.descr, {sitename: $t('pages.sitename')})"></div>
</div> </div>
<CRequisiti :statebool="CompletatoRequisiti" :msgTrue="$t('steps.enter_prog_requisiti_ok')" <CRequisiti :statebool="CompletatoRequisiti" :msgTrue="$t('steps.enter_prog_requisiti_ok') + $t('steps.enter_prog_requisiti_ok')"
:msgFalse="$t('steps.enter_prog_completa_requisiti')"> :msgFalse="$t('steps.enter_prog_completa_requisiti')">
</CRequisiti> </CRequisiti>
@@ -345,7 +336,7 @@
<div v-if="mystep.page"> <div v-if="mystep.page">
<CMyInnerPage :path=mystep.page> <CMyInnerPage :path=mystep.page>
<div v-if="mystep.descr"> <div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div> <div v-html="$t(mystep.descr, {sitename: $t('pages.sitename')})"></div>
</div> </div>
</CMyInnerPage> </CMyInnerPage>
</div> </div>

View File

@@ -27,9 +27,9 @@ export default class CStatusReg extends MixinBase {
public polling = null public polling = null
public numpolled: number = 0 public numpolled: number = 0
public datastat: INotData = { public datastat: INotData = {
num_tot_lista: 0,
num_reg_lista: 0,
num_reg: 0, num_reg: 0,
num_passeggeri: 0,
num_imbarcati: 0,
num_teleg_attivo: 0, num_teleg_attivo: 0,
email_non_verif: 0, email_non_verif: 0,
num_teleg_pending: 0, num_teleg_pending: 0,
@@ -39,7 +39,7 @@ export default class CStatusReg extends MixinBase {
public async checkifpolling() { public async checkifpolling() {
if (UserStore.state.my.profile) { if (UserStore.state.my.profile) {
if (!UserStore.state.my.verified_email || UserStore.state.my.profile.teleg_id <= 0) if (!UserStore.state.my.verified_email || (UserStore.state.my.profile.teleg_id <= 0 && (tools.appid() === tools.IDAPP_AYNI)))
this.NUMSEC_TO_POLLING = 10 this.NUMSEC_TO_POLLING = 10
} }
@@ -124,13 +124,6 @@ export default class CStatusReg extends MixinBase {
this.checkifpolling() this.checkifpolling()
} }
get perc_reg() {
if (this.datastat.num_tot_lista > 0)
return (this.datastat.num_reg_lista / this.datastat.num_tot_lista * 100)
else
return 0
}
public calcperc(val1, valmax ) { public calcperc(val1, valmax ) {
if (valmax > 0) if (valmax > 0)
return (val1 / valmax * 100) return (val1 / valmax * 100)
@@ -139,7 +132,7 @@ export default class CStatusReg extends MixinBase {
} }
get visustat() { get visustat() {
return this.datastat.num_reg > 0 || this.datastat.num_reg_lista > 0 return this.datastat.num_reg > 0
} }
get telegnonattivi() { get telegnonattivi() {

View File

@@ -7,28 +7,43 @@
<div class="flex flex-center"> <div class="flex flex-center">
<CCardState :mytext="$t('pages.statusreg.reg')" :myval="datastat.num_reg" :myperc="100"></CCardState> <CCardState :mytext="$t('pages.statusreg.reg')" :myval="datastat.num_reg"
<CCardState :mytext="$t('stat.requisiti')" :isperc="true" :myval="datastat.num_requisiti" :myperc="100"></CCardState>
<CCardState :mytext="$t('pages.statusreg.passeggeri')"
mycolor="blue"
size="150px"
size_mob="130px"
:myval="datastat.num_passeggeri"
:myperc="100"></CCardState>
<!--<CCardState :mytext="$t('statusreg.imbarcati')"
size="150px"
size_mob="130px"
mycolor="blue" :myval="datastat.num_imbarcati"
:myperc="100"></CCardState>-->
<!--<CCardState v-if="datastat.num_part_accepted > 1"
:mytext="$t('stat.requisiti')" :isperc="true" :myval="datastat.num_requisiti"
:myperc="calcperc(datastat.num_requisiti, datastat.num_reg) " :myperc="calcperc(datastat.num_requisiti, datastat.num_reg) "
mycolor="blue" mycolor="blue"
:textadd="` / ` + datastat.num_reg"></CCardState> :textadd="` / ` + datastat.num_reg"></CCardState>-->
<!--<CCardState :mytext="$t('pages.statusreg.giainlista')" :isperc="true" :myval="datastat.num_reg_lista"--> <div class="q-pa-xs" v-if="datastat.num_part_accepted > 1">
<!--:myperc="perc_reg" :textadd="` / ` + datastat.num_tot_lista"></CCardState>-->
<div class="q-pa-xs ">
<CCardStat :mytext="$t('stat.accepted')" :myval="datastat.num_part_accepted"></CCardStat> <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.zoom')" :myval="datastat.num_part_zoom"></CCardStat>
<CCardStat :mytext="$t('stat.dream')" :myval="datastat.num_users_dream"></CCardStat> <CCardStat :mytext="$t('stat.imbarcati')" :myval="datastat.num_imbarcati"></CCardStat>
<CCardStat :mytext="$t('stat.modalita_pagamento')" :myval="datastat.num_modalita_pagamento"></CCardStat> <!--<CCardStat :mytext="$t('stat.modalita_pagamento')"
<CCardStat :mytext="$t('stat.requisiti')" :myval="datastat.num_requisiti"></CCardStat> :myval="datastat.num_modalita_pagamento"></CCardStat>-->
<!--<CCardStat :mytext="$t('stat.requisiti')" :myval="datastat.num_requisiti"></CCardStat>-->
<!--<CCardStat :mytext="$t('stat.qualificati')" :myval="datastat.num_qualificati"></CCardStat>--> <!--<CCardStat :mytext="$t('stat.qualificati')" :myval="datastat.num_qualificati"></CCardStat>-->
<CCardStat v-if="emailnonverif" :mytext="$t('stat.email_not_verif')" :myval="emailnonverif" <!--<CCardStat v-if="emailnonverif" :mytext="$t('stat.email_not_verif')" :myval="emailnonverif"
mycol="negative"></CCardStat> mycol="negative"></CCardStat>
<CCardStat v-if="telegnonattivi" :mytext="$t('stat.telegram_non_attivi')" :myval="telegnonattivi" <CCardStat v-if="telegnonattivi" :mytext="$t('stat.telegram_non_attivi')"
:myval="telegnonattivi"
mycol="negative"></CCardStat> mycol="negative"></CCardStat>
<CCardStat v-if="datastat.num_teleg_pending > 0" :mytext="$t('stat.telegram_pendenti')" <CCardStat v-if="datastat.num_teleg_pending > 0" :mytext="$t('stat.telegram_pendenti')"
:myval="datastat.num_teleg_pending" mycol="negative"></CCardStat> :myval="datastat.num_teleg_pending" mycol="negative"></CCardStat>-->
</div> </div>
<div class="column animazione"> <div class="column animazione">
@@ -38,7 +53,8 @@
enter-active-class="animazione fadeIn" enter-active-class="animazione fadeIn"
leave-active-class="animazione fadeOut"> leave-active-class="animazione fadeOut">
<q-item v-for="(user, index) in lastsreg" :key="user.username" class="q-mb-xs animated" v-ripple> <q-item v-for="(user, index) in lastsreg" :key="user.username" class="q-mb-xs animated"
v-ripple>
<q-item-section avatar> <q-item-section avatar>
<q-avatar v-if="tools.geticon(user.profile.nationality)" <q-avatar v-if="tools.geticon(user.profile.nationality)"
@@ -51,13 +67,15 @@
</q-item-section> </q-item-section>
<q-item-section> <q-item-section>
<q-item-label>{{ user.name }} {{ tools.firstchars_onedot(user.surname, 1) }}</q-item-label> <q-item-label>{{ user.name }} {{ tools.firstchars_onedot(user.surname, 1) }}
</q-item-label>
<q-item-label caption lines="1">{{ user.username }}</q-item-label> <q-item-label caption lines="1">{{ user.username }}</q-item-label>
</q-item-section> </q-item-section>
<q-item-section side> <q-item-section side>
<q-item-label>{{ tools.getstrDateTimeShort(user.date_temp_reg) }}</q-item-label> <q-item-label>{{ tools.getstrDateTimeShort(user.date_temp_reg) }}</q-item-label>
<q-chip outline color="green" text-color="white" icon-right="fas fa-user-plus" size="xs"></q-chip> <q-chip outline color="green" text-color="white" icon-right="fas fa-user-plus"
size="xs"></q-chip>
</q-item-section> </q-item-section>
</q-item> </q-item>
</transition-group> </transition-group>
@@ -73,7 +91,11 @@
<CLineChart :mydata="datastat.reg_daily" :title="$t('stat.reg_daily')"> <CLineChart :mydata="datastat.reg_daily" :title="$t('stat.reg_daily')">
</CLineChart> </CLineChart>
<CLineChart :mydata="datastat.reg_daily" :title="$t('stat.reg_total')" :offset="datastat.numreg_untilday" :sum="true" <CLineChart :mydata="datastat.reg_weekly" :title="$t('stat.reg_weekly')">
</CLineChart>
<CLineChart :mydata="datastat.reg_daily" :title="$t('stat.reg_total')"
:offset="datastat.numreg_untilday" :sum="true"
:mycolors="['#0b0', '#666']"> :mycolors="['#0b0', '#666']">
</CLineChart> </CLineChart>

View File

@@ -23,6 +23,10 @@ export default class CUserBadge extends MixinBase {
@Prop({ required: true }) public user: IUserFields @Prop({ required: true }) public user: IUserFields
@Prop({ required: true }) public numpeople: number @Prop({ required: true }) public numpeople: number
@Prop({ required: true }) public mycolor: string @Prop({ required: true }) public mycolor: string
@Prop({ required: false, default: true }) public showsteps: boolean
@Prop({ required: false, default: true }) public showregalainv: boolean
@Prop({ required: false, default: -1 }) public ind_order_ingr: number
@Prop({ required: false, default: -1 }) public id_listaingr: number
public $v public $v
public $t: any public $t: any
@@ -47,10 +51,12 @@ export default class CUserBadge extends MixinBase {
} }
public getindorder(user) { public getindorder(user) {
if (!!user.ind_order) /*if (!!user.username)
return ' (' + user.ind_order + ')' return ' (' + user.ind_order + ')'
else else
return '' return ''
*/
return ''
} }
public getmoneycolor(user) { public getmoneycolor(user) {
@@ -92,7 +98,7 @@ export default class CUserBadge extends MixinBase {
} }
public execclick(user) { public execclick(user) {
this.$emit('myclick', user) this.$emit('myclick', user, this.showregalainv, this.ind_order_ingr, this.id_listaingr)
} }
public getnumreq(user) { public getnumreq(user) {

View File

@@ -1,7 +1,7 @@
<template> <template>
<div v-if="!!user"> <div v-if="!!user">
<q-item class="q-my-sm q-pa-sm myuserbadge shadow-5" clickable v-ripple @click="execclick(user)"> <q-item class="q-my-sm q-pa-sm myuserbadge shadow-5" clickable v-ripple @click="execclick(user)">
<q-item-section avatar> <q-item-section avatar v-if="showsteps">
<div class="row" style="margin-left: 4px;"> <div class="row" style="margin-left: 4px;">
<q-avatar v-if="yourinvite" :text-color="mycolor" size="md"> <q-avatar v-if="yourinvite" :text-color="mycolor" size="md">
{{ getnumber(user, index + 1) }}° {{ getnumber(user, index + 1) }}°
@@ -21,7 +21,7 @@
</q-item-section> </q-item-section>
<q-item-section side> <q-item-section side v-if="showsteps">
<div class="row q-gutter-xs justify-center items-center"> <div class="row q-gutter-xs justify-center items-center">
<div> <div>
<CCardState :mytext="$t('pages.statusreg.req')" :myval="getnumreq(user)" :myperc="getnumperc(user)" size="50px" size_mob="40px" fontsize="0.75rem" myclass="my-card-small-stat" :mycolor="getcolor(user)"></CCardState> <CCardState :mytext="$t('pages.statusreg.req')" :myval="getnumreq(user)" :myperc="getnumperc(user)" size="50px" size_mob="40px" fontsize="0.75rem" myclass="my-card-small-stat" :mycolor="getcolor(user)"></CCardState>

View File

@@ -304,3 +304,7 @@ canvas {
color: red; color: red;
background-color: red; background-color: red;
} }
.titlesite {
font-size: 1rem;
}

View File

@@ -65,6 +65,10 @@ export default class Header extends Vue {
return UserStore.state.isTutor return UserStore.state.isTutor
} }
get isTratuttrici() {
return UserStore.state.isTratuttrici
}
get conndata_changed() { get conndata_changed() {
return GlobalStore.state.connData return GlobalStore.state.connData
} }
@@ -182,7 +186,7 @@ export default class Header extends Vue {
if (this.static_data.functionality.SHOW_IF_IS_SERVER_CONNECTION) { if (this.static_data.functionality.SHOW_IF_IS_SERVER_CONNECTION) {
if (!!oldValue) { if (!!oldValue) {
tools.showNotif(this.$q, this.$t('connection') + ` disc__value}`, { tools.showNotif(this.$q, this.$t('connection') + ` {disc__value}`, {
color, color,
icon: 'wifi' icon: 'wifi'
}) })

View File

@@ -32,14 +32,15 @@
<q-btn ripple <q-btn ripple
size="md" size="md"
id="newvers" v-if="isNewVersionAvailable" color="secondary" rounded icon="refresh" id="newvers" v-if="isNewVersionAvailable" color="secondary" rounded icon="refresh"
class="btnNewVersShow" @click="RefreshApp()" :label="$t('notification.newVersionAvailable')"/> class="btnNewVersShow" @click="RefreshApp()" :label="$t('notification.newVersionAvailable')">
</q-btn>
<q-toolbar-title class="row items-center"> <q-toolbar-title class="row items-center">
<q-avatar> <q-avatar>
<img :src="imglogo" height="27" alt="Immagine Logo"> <img :src="imglogo" height="27" alt="Immagine Logo">
</q-avatar> </q-avatar>
<div class="q-mx-sm">{{getappname}}</div> <div class="q-mx-sm titlesite">{{getappname}}</div>
<div slot="subtitle">{{$t('msg.myDescriz')}} {{ getAppVersion() }}</div> <div slot="subtitle">{{$t('msg.myDescriz')}} {{ getAppVersion() }}</div>
</q-toolbar-title> </q-toolbar-title>
@@ -108,8 +109,7 @@
@click="rightDrawerOpen = !rightDrawerOpen"> @click="rightDrawerOpen = !rightDrawerOpen">
</q-btn> </q-btn>
<q-btn class="q-mx-xs" v-if="static_data.functionality.SHOW_USER_MENU && isLogged" round dense flat <q-btn class="q-mx-xs" v-if="static_data.functionality.SHOW_USER_MENU && isLogged" round dense flat
@click="rightDrawerOpen = !rightDrawerOpen"> @click="rightDrawerOpen = !rightDrawerOpen" :icon="getMyImgforIcon">
<CMyAvatar :myimg="getMyImg"></CMyAvatar>
</q-btn> </q-btn>
</q-toolbar> </q-toolbar>
@@ -145,6 +145,7 @@
v-if="isAdmin"> [Admin]</span> v-if="isAdmin"> [Admin]</span>
<span v-if="isManager"> [Manager]</span> <span v-if="isManager"> [Manager]</span>
<span v-if="isTutor"> [Tutor]</span> <span v-if="isTutor"> [Tutor]</span>
<span v-if="isTratuttrici"> [Trad]</span>
</div> </div>
<div v-else class="text-user text-italic bg-red"> <div v-else class="text-user text-italic bg-red">
{{ $t('user.loggati') }} {{ $t('user.loggati') }}

View File

@@ -1,5 +1,6 @@
import { toolsext } from '@src/store/Modules/toolsext' import { toolsext } from '@src/store/Modules/toolsext'
import messages from '../statics/i18n' import messages from '../statics/i18n'
import { tools } from '@src/store/Modules/tools'
function translate(params) { function translate(params) {
const msg = params.split('.') const msg = params.split('.')
@@ -12,6 +13,7 @@ function translate(params) {
msg.forEach((param) => { msg.forEach((param) => {
ris = ris[param] ris = ris[param]
}) })
} else { } else {
console.log('ERRORE IN TRANSLATE! ', params, ' NON ESISTE!') console.log('ERRORE IN TRANSLATE! ', params, ' NON ESISTE!')
return params return params

View File

@@ -6,7 +6,7 @@
<meta name="format-detection" content="telephone=no"> <meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no"> <meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" <meta name="viewport"
content="user-scalable=no, initial-scale=1, minimum-scale=1, width=device-width<% if (htmlWebpackPlugin.options.ctx.mode.cordova) { %>, viewport-fit=cover<% } %>"> content="user-scalable=no, initial-scale=1, minimum-scale=1, width=device-width<% if (htmlWebpackPlugin.options.ctx.mode.cordova || htmlWebpackPlugin.options.ctx.mode.capacitor) { %>, viewport-fit=cover<% } %>">
<link rel="icon" href="<%= htmlWebpackPlugin.files.publicPath %>statics/icons/favicon.ico" type="image/x-icon"> <link rel="icon" href="<%= htmlWebpackPlugin.files.publicPath %>statics/icons/favicon.ico" type="image/x-icon">
<link rel="icon" type="image/png" sizes="32x32" href="<%= htmlWebpackPlugin.files.publicPath %>statics/icons/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="32x32" href="<%= htmlWebpackPlugin.files.publicPath %>statics/icons/favicon-32x32.png">

View File

@@ -82,6 +82,8 @@ export default class MenuOne extends Vue {
menu += ' isManager' menu += ' isManager'
if (elem.onlyTutor) if (elem.onlyTutor)
menu += ' isTutor' menu += ' isTutor'
if (elem.onlyTraduttrici)
menu += ' isTraduttrici'
if (elem.extraclass) if (elem.extraclass)
menu += ' ' + elem.extraclass menu += ' ' + elem.extraclass

View File

@@ -57,6 +57,11 @@ export default class MixinUsers extends Vue {
return (ris !== '') ? 'statics/' + ris : '' return (ris !== '') ? 'statics/' + ris : ''
} }
get getMyImgforIcon() {
const ris = UserStore.getters.getImgByUsername(UserStore.state.my.username)
return (ris !== '') ? 'img:statics/' + ris : 'fas fa-user-circle'
}
get MenuCollapse() { get MenuCollapse() {
return GlobalStore.state.menuCollapse return GlobalStore.state.menuCollapse
// return true // return true

View File

@@ -16,6 +16,7 @@ export interface IConnData {
export interface ICfgServer { export interface ICfgServer {
chiave: string chiave: string
idapp: string
userId: string userId: string
valore: string valore: string
} }
@@ -203,6 +204,7 @@ export interface IListRoutes {
onlyif_logged?: boolean onlyif_logged?: boolean
onlyManager?: boolean onlyManager?: boolean
onlyTutor?: boolean onlyTutor?: boolean
onlyTraduttrici?: boolean
extraclass?: string extraclass?: string
meta?: any meta?: any
idelem?: string idelem?: string

View File

@@ -7,23 +7,21 @@ export interface ICheckUser {
} }
export interface INotData { export interface INotData {
num_tot_lista?: number
num_reg_lista?: number
num_reg?: number num_reg?: number
num_passeggeri?: number
num_imbarcati?: number
email_non_verif?: number email_non_verif?: number
num_teleg_attivo?: number num_teleg_attivo?: number
num_teleg_pending?: number num_teleg_pending?: number
num_part_zoom?: number num_part_zoom?: number
num_part_accepted?: number num_part_accepted?: number
num_qualificati?: number
num_requisiti?: number
num_modalita_pagamento?: number num_modalita_pagamento?: number
num_users_dream?: number
arr_nations?: string arr_nations?: string
lastsreg?: IUserFields[] lastsreg?: IUserFields[]
checkuser?: ICheckUser | any checkuser?: ICheckUser | any
numreg_untilday?: number numreg_untilday?: number
reg_daily?: string reg_daily?: string
reg_weekly?: string
} }
export interface INotevoleState { export interface INotevoleState {

View File

@@ -38,7 +38,11 @@ export interface IDashboard {
downline: any[], downline: any[],
downnotreg: any[], downnotreg: any[],
downbyuser: any[] downbyuser: any[]
arrimbarchi?: any[]
arrposizioni?: any[] arrposizioni?: any[]
navi_partenza?: any[]
lastnave?: any
arrusers?: any[]
} }
export interface ICalcStat { export interface ICalcStat {
@@ -48,6 +52,7 @@ export interface ICalcStat {
export interface IUserFields { export interface IUserFields {
_id?: string _id?: string
ind_order?: number
email?: string email?: string
username?: string username?: string
name?: string name?: string
@@ -57,7 +62,7 @@ export interface IUserFields {
perm?: number perm?: number
verified_email?: boolean verified_email?: boolean
aportador_solidario?: string aportador_solidario?: string
date_temp_reg?: Date
made_gift?: boolean made_gift?: boolean
tokens?: IToken[] tokens?: IToken[]
lasttimeonline?: Date lasttimeonline?: Date
@@ -97,6 +102,7 @@ export interface IUserState {
isAdmin?: boolean isAdmin?: boolean
isManager?: boolean isManager?: boolean
isTutor?: boolean isTutor?: boolean
isTraduttrici?: boolean
isTeacher?: boolean isTeacher?: boolean
usersList?: IUserFields[] usersList?: IUserFields[]
countusers?: number countusers?: number

View File

@@ -46,6 +46,10 @@ export default class Home extends Vue {
this.initprompt() this.initprompt()
} }
get mythis() {
return this
}
public mounted() { public mounted() {
let primo = true let primo = true
const mytime = 10000 const mytime = 10000

View File

@@ -83,7 +83,7 @@
class="enable-notifications shadow" class="enable-notifications shadow"
color="primary" rounded color="primary" rounded
size="md" size="md"
icon="notifications" @click="tools.askfornotification" icon="notifications" @click="tools.askfornotification(mythis)"
:label="$t('notification.ask')"/> :label="$t('notification.ask')"/>
<!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="primary" rounded size="lg" icon="notifications" @click="showNotificationExample" label="Send Notification"/>--> <!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="primary" rounded size="lg" icon="notifications" @click="showNotificationExample" label="Send Notification"/>-->
<!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="secondary" rounded size="lg" icon="notifications" @click="createPushSubscription" label="Create Push Subscription !"/>--> <!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="secondary" rounded size="lg" icon="notifications" @click="createPushSubscription" label="Create Push Subscription !"/>-->
@@ -170,7 +170,7 @@
class="enable-notifications shadow" class="enable-notifications shadow"
color="primary" rounded color="primary" rounded
size="md" size="md"
icon="notifications" @click="tools.askfornotification" icon="notifications" @click="tools.askfornotification(mythis)"
:label="$t('notification.ask')"/> :label="$t('notification.ask')"/>
<!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="primary" rounded size="lg" icon="notifications" @click="showNotificationExample" label="Send Notification"/>--> <!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="primary" rounded size="lg" icon="notifications" @click="showNotificationExample" label="Send Notification"/>-->
<!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="secondary" rounded size="lg" icon="notifications" @click="createPushSubscription" label="Create Push Subscription !"/>--> <!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="secondary" rounded size="lg" icon="notifications" @click="createPushSubscription" label="Create Push Subscription !"/>-->
@@ -261,7 +261,7 @@
class="enable-notifications shadow" class="enable-notifications shadow"
color="primary" rounded color="primary" rounded
size="md" size="md"
icon="notifications" @click="tools.askfornotification" icon="notifications" @click="tools.askfornotification(mythis)"
:label="$t('notification.ask')"/> :label="$t('notification.ask')"/>
<!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="primary" rounded size="lg" icon="notifications" @click="showNotificationExample" label="Send Notification"/>--> <!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="primary" rounded size="lg" icon="notifications" @click="showNotificationExample" label="Send Notification"/>-->
<!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="secondary" rounded size="lg" icon="notifications" @click="createPushSubscription" label="Create Push Subscription !"/>--> <!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="secondary" rounded size="lg" icon="notifications" @click="createPushSubscription" label="Create Push Subscription !"/>-->

View File

@@ -74,9 +74,9 @@ export default class Listadoninavi extends MixinBase {
{ name: 'mediatore', align: 'center', label: '🌀 Mediatore', field: '', sortable: true }, { name: 'mediatore', align: 'center', label: '🌀 Mediatore', field: '', sortable: true },
{ name: 'sognatore', align: 'center', label: 'Sognatore', field: '', sortable: true }, { name: 'sognatore', align: 'center', label: 'Sognatore', field: '', sortable: true },
{ name: 'donatori', align: 'center', label: 'Donatori', field: '', sortable: true }, { name: 'donatori', align: 'center', label: 'Donatori', field: '', sortable: true },
{ name: 'DoniConfermati', align: 'center', label: '🎁 OK', field: 'DoniConfermati', sortable: true },
{ name: 'DoniAttesaDiConferma', align: 'center', label: '🎁 Wait', field: 'DoniAttesaDiConferma', sortable: true }, { name: 'DoniAttesaDiConferma', align: 'center', label: '🎁 Wait', field: 'DoniAttesaDiConferma', sortable: true },
{ name: 'DoniMancanti', align: 'center', label: '🎁 Miss', field: 'DoniMancanti', sortable: true }, { name: 'DoniMancanti', align: 'center', label: '🎁 Miss', field: 'DoniMancanti', sortable: true },
{ name: 'DoniConfermati', align: 'center', label: '🎁 OK', field: 'DoniConfermati', sortable: true },
{ name: 'note_bot', align: 'left', label: 'Note Placca', field: 'note_bot', sortable: true }, { name: 'note_bot', align: 'left', label: 'Note Placca', field: 'note_bot', sortable: true },
{ name: 'note_interne', align: 'left', label: 'Note Interne', field: 'note_interne', sortable: true }, { name: 'note_interne', align: 'left', label: 'Note Interne', field: 'note_interne', sortable: true },
] ]
@@ -140,10 +140,12 @@ export default class Listadoninavi extends MixinBase {
donatore: rec.name + ' ' + rec.surname donatore: rec.name + ' ' + rec.surname
}) })
tools.askConfirm(this.$q, msgtitle, msginvia + ' ' + '?', translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.DONO_RICEVUTO, 0, { tools.askConfirm(this.$q, msgtitle, msginvia + ' ' + '? (Pos ' + rec.riga + '.' + rec.col + ')', translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.DONO_RICEVUTO, 0, {
param1: { param1: {
_id: rec._id, _id: rec._id,
made_gift: true made_gift: true,
riga: rec.riga,
col: rec.col,
}, },
param2: '', param2: '',
param3: '' param3: ''
@@ -172,7 +174,7 @@ export default class Listadoninavi extends MixinBase {
tools.askConfirm(this.$q, msgtitle, msgobj.msgpar1 + ' ' + '?', translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.INVIA_MSG_A_DONATORI, 0, { tools.askConfirm(this.$q, msgtitle, msgobj.msgpar1 + ' ' + '?', translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.INVIA_MSG_A_DONATORI, 0, {
param1: msgobj, param1: msgobj,
param2: navemediatore, param2: navemediatore
}) })
} }
@@ -183,7 +185,7 @@ export default class Listadoninavi extends MixinBase {
tools.askConfirm(this.$q, msgtitle, msgobj.msgpar1 + ' ' + '?', translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.INVIA_MSG_A_SINGOLO, 0, { tools.askConfirm(this.$q, msgtitle, msgobj.msgpar1 + ' ' + '?', translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.INVIA_MSG_A_SINGOLO, 0, {
param1: msgobj, param1: msgobj,
param2: navemediatore, param2: navemediatore
}) })
} }
@@ -196,7 +198,7 @@ export default class Listadoninavi extends MixinBase {
const msgobj = { const msgobj = {
tipomsg: tools.TipoMsg.SEND_MSG, tipomsg: tools.TipoMsg.SEND_MSG,
msgpar1: this.msg_tosend, msgpar1: this.msg_tosend,
inviareale: true, inviareale: true
} }
const navemediatore = this.selrec.donatore.recmediatore const navemediatore = this.selrec.donatore.recmediatore

View File

@@ -24,6 +24,7 @@
row-key="index"> row-key="index">
<template v-slot:body="props"> <template v-slot:body="props">
<q-tr :props="props"> <q-tr :props="props">
<q-td key="index" :props="props"> <q-td key="index" :props="props">
{{ props.row.index }} {{ props.row.index }}
</q-td> </q-td>
@@ -37,8 +38,8 @@
</q-td> </q-td>
<q-td key="date_gift_chat_open" :props="props"> <q-td key="date_gift_chat_open" :props="props">
<div v-if="!!props.row.rec">
<div> <div v-if="!!props.row.rec.donatore">
<div class="text-center cursor-pointer"> <div class="text-center cursor-pointer">
<a v-if="!!props.row.rec.donatore.navepersistente.link_chat" <a v-if="!!props.row.rec.donatore.navepersistente.link_chat"
:href="props.row.rec.donatore.navepersistente.link_chat" :href="props.row.rec.donatore.navepersistente.link_chat"
@@ -48,7 +49,8 @@
title="Link della Chat Telegram" buttons title="Link della Chat Telegram" buttons
@save="SaveField(props.row.rec.donatore.navepersistente, 'navepersistente', 'link_chat')"> @save="SaveField(props.row.rec.donatore.navepersistente, 'navepersistente', 'link_chat')">
<q-field> <q-field>
<q-input v-model="props.row.rec.donatore.navepersistente.link_chat"/> <q-input
v-model="props.row.rec.donatore.navepersistente.link_chat"/>
</q-field> </q-field>
</q-popup-edit> </q-popup-edit>
<div v-if="!props.row.rec.donatore.navepersistente.link_chat">---</div> <div v-if="!props.row.rec.donatore.navepersistente.link_chat">---</div>
@@ -61,22 +63,31 @@
</div> </div>
<div v-if="props.row.rec.donatore.recmediatore.sent_msg_howto_make_gift">(Link Inviato) <div v-if="!!props.row.rec.donatore.recmediatore">
<div v-if="props.row.rec.donatore.recmediatore.sent_msg_howto_make_gift">(Link
Inviato)
</div>
</div>
</div> </div>
</q-td> </q-td>
<q-td key="date_start" :props="props"> <q-td key="date_start" :props="props">
<div v-if="!!props.row.rec">
<div v-if="!!props.row.rec.donatore.navepersistente"> <div v-if="!!props.row.rec.donatore.navepersistente">
{{ tools.getstrshortDate(props.row.rec.donatore.navepersistente.date_start) }} {{ tools.getstrshortDate(props.row.rec.donatore.navepersistente.date_start) }}
</div> </div>
</div>
</q-td> </q-td>
<q-td key="provvisoria" :props="props"> <q-td key="provvisoria" :props="props">
<div v-if="!!props.row.rec">
<div v-if="!!props.row.rec.donatore.navepersistente"> <div v-if="!!props.row.rec.donatore.navepersistente">
<q-toggle dark color="green" <q-toggle dark color="green"
v-model="props.row.rec.donatore.navepersistente.provvisoria" v-model="props.row.rec.donatore.navepersistente.provvisoria"
@input="SaveField(props.row.rec.donatore.navepersistente, 'navepersistente', 'provvisoria')"></q-toggle> @input="SaveField(props.row.rec.donatore.navepersistente, 'navepersistente', 'provvisoria')"></q-toggle>
</div> </div>
</div>
</q-td> </q-td>
<q-td key="tutor" :props="props"> <q-td key="tutor" :props="props">
<div v-if="!!props.row.rec">
<div class="text-center"> <div class="text-center">
<div class="text-center cursor-pointer"> <div class="text-center cursor-pointer">
{{ props.row.tutor }} {{ props.row.tutor }}
@@ -90,7 +101,8 @@
<div v-if="!props.row.tutor">---</div> <div v-if="!props.row.tutor">---</div>
</div> </div>
<div v-if="props.row.rec.donatore.navepersistente.tutor_namesurname"> <div v-if="props.row.rec.donatore.navepersistente.tutor_namesurname">
<q-btn v-if="!!props.row.rec.donatore.navepersistente.tutor_namesurname" flat <q-btn v-if="!!props.row.rec.donatore.navepersistente.tutor_namesurname"
flat
rounded color="blue" rounded color="blue"
:label="props.row.rec.donatore.navepersistente.tutor_namesurname" :label="props.row.rec.donatore.navepersistente.tutor_namesurname"
@click="clickseluser({ username: props.row.rec.donatore.navepersistente.tutor, name: props.row.rec.donatore.navepersistente.tutor_namesurname })"> @click="clickseluser({ username: props.row.rec.donatore.navepersistente.tutor, name: props.row.rec.donatore.navepersistente.tutor_namesurname })">
@@ -98,44 +110,53 @@
</div> </div>
</div> </div>
</div>
</q-td> </q-td>
<q-td key="mediatore" :props="props"> <q-td key="mediatore" :props="props">
<div v-if="props.row.rec">
<q-btn v-if="!!props.row.rec.donatore.recmediatore" flat rounded color="blue" <q-btn v-if="!!props.row.rec.donatore.recmediatore" flat rounded color="blue"
:label="props.row.rec.donatore.recmediatore.name + ` ` + props.row.rec.donatore.recmediatore.surname" :label="props.row.rec.donatore.recmediatore.name + ` ` + props.row.rec.donatore.recmediatore.surname"
@click="clickseluser(props.row.rec.donatore.recmediatore)"> @click="clickseluser(props.row.rec.donatore.recmediatore)">
</q-btn> </q-btn>
</div>
</q-td> </q-td>
<q-td key="sognatore" :props="props"> <q-td key="sognatore" :props="props">
<div v-if="props.row.rec.donatore.recsognatori">
<q-btn v-if="!!props.row.rec.donatore.recsognatori[0]" flat rounded color="blue" <q-btn v-if="!!props.row.rec.donatore.recsognatori[0]" flat rounded color="blue"
:label="props.row.rec.donatore.recsognatori[0].name + ` ` + props.row.rec.donatore.recsognatori[0].surname" :label="props.row.rec.donatore.recsognatori[0].name + ` ` + props.row.rec.donatore.recsognatori[0].surname"
@click="clickseluser(props.row.rec.donatore.recsognatori[0])"> @click="clickseluser(props.row.rec.donatore.recsognatori[0])">
</q-btn> </q-btn>
</div>
</q-td> </q-td>
<q-td key="donatori" :props="props"> <q-td key="donatori" :props="props">
<div v-if="props.row.rec">
<q-btn v-if="EsistonoDonatori(props.row.rec)" flat rounded color="blue" <q-btn v-if="EsistonoDonatori(props.row.rec)" flat rounded color="blue"
:label="$t('dashboard.donatori')" :label="$t('dashboard.donatori')"
@click="clickdonatori(props.row.rec)"> @click="clickdonatori(props.row.rec)">
</q-btn> </q-btn>
</div>
</q-td> </q-td>
<q-td key="DoniConfermati" :props="props">
<div v-if="props.row.DoniConfermati > 0" class="DoniConfermati">
{{props.row.DoniConfermati }}
({{props.row.DoniTotali }})
</div>
</q-td>
<q-td key="DoniAttesaDiConferma" :props="props"> <q-td key="DoniAttesaDiConferma" :props="props">
<div v-if="props.row.DoniAttesaDiConferma > 0" class="DoniAttesaDiConferma">{{ <div v-if="props.row.DoniAttesaDiConferma > 0" class="DoniAttesaDiConferma">{{
props.row.DoniAttesaDiConferma }} props.row.DoniAttesaDiConferma }}
</div> </div>
</q-td> </q-td>
<q-td key="DoniMancanti" :props="props"> <q-td key="DoniMancanti" :props="props">
<div v-if="props.row.DoniMancanti > 0" class="DoniMancanti">{{ props.row.DoniMancanti <div v-if="props.row.DoniMancanti > 0" class="DoniMancanti">{{
props.row.DoniMancanti
}} }}
</div> </div>
</q-td> </q-td>
<q-td key="DoniConfermati" :props="props">
<div v-if="props.row.DoniConfermati > 0" class="DoniConfermati">{{
props.row.DoniConfermati }}
</div>
</q-td>
<q-td key="note_bot" :props="props"> <q-td key="note_bot" :props="props">
<div class="Note cursor-pointer"> <div v-if="!!props.row.rec.donatore" class="Note cursor-pointer">
<div v-if="props.row.rec.donatore.navepersistente.note_bot">{{ <div v-if="props.row.rec.donatore.navepersistente.note_bot">{{
props.row.rec.donatore.navepersistente.note_bot }} props.row.rec.donatore.navepersistente.note_bot }}
</div> </div>
@@ -152,7 +173,7 @@
</div> </div>
</q-td> </q-td>
<q-td key="note_interne" :props="props"> <q-td key="note_interne" :props="props">
<div class="Note cursor-pointer"> <div v-if="!!props.row.rec.donatore" class="Note cursor-pointer">
<div v-if="props.row.rec.donatore.navepersistente.note_interne">{{ <div v-if="props.row.rec.donatore.navepersistente.note_interne">{{
props.row.rec.donatore.navepersistente.note_interne }} props.row.rec.donatore.navepersistente.note_interne }}
</div> </div>
@@ -170,6 +191,7 @@
</q-popup-edit> </q-popup-edit>
</div> </div>
</q-td> </q-td>
</q-tr> </q-tr>
</template> </template>
</q-table> </q-table>
@@ -186,7 +208,7 @@
</q-toolbar> </q-toolbar>
<q-card-section class="inset-shadow" style="padding: 4px !important;"> <q-card-section class="inset-shadow" style="padding: 4px !important;">
<div class="row justify-center q-gutter-md"> <div class="row justify-center q-gutter-md">
<div> <div v-if="!!selrec.donatore">
<q-table <q-table
class="my-sticky-header-table" class="my-sticky-header-table"
dense dense

View File

@@ -12,6 +12,8 @@ const msg_de = {
tableslist: 'Tables', tableslist: 'Tables',
}, },
otherpages: { otherpages: {
modifprof: 'Modify Profile',
biografia: 'Biografia',
admin: { admin: {
menu: 'Administration', menu: 'Administration',
eventlist: 'Your Booking', eventlist: 'Your Booking',

View File

@@ -12,6 +12,8 @@ const msg_enUs = {
tableslist: 'Tables', tableslist: 'Tables',
}, },
otherpages: { otherpages: {
modifprof: 'Modify Profile',
biografia: 'Bio',
error404: 'error404', error404: 'error404',
error404def: 'error404def', error404def: 'error404def',
admin: { admin: {
@@ -50,6 +52,10 @@ const msg_enUs = {
reg_total: 'Total registrations', reg_total: 'Total registrations',
}, },
steps: { steps: {
nuovo_imbarco: 'Book another Trip',
vuoi_entrare_nuova_nave: 'If you confirm, when your ship is ready to sail, you will make a New Gift to repeat another Trip.<br>' +
'In this way you will help all ships to advance and grow the movement.',
vuoi_cancellare_imbarco: 'Are you sure you want to cancel this boarding on the AYNI ship?',
completed: 'Completed', completed: 'Completed',
passi_su: '{passo} steps out of {totpassi}', passi_su: '{passo} steps out of {totpassi}',
video_intro_1: '1. Welcome to {sitename}', video_intro_1: '1. Welcome to {sitename}',
@@ -71,7 +77,7 @@ const msg_enUs = {
zoom_partecipa: 'Participated in at least 1 Zoom', zoom_partecipa: 'Participated in at least 1 Zoom',
zoom_no_partecipato: 'You have not yet participated in a Zoom (it is a requirement to enter)', zoom_no_partecipato: 'You have not yet participated in a Zoom (it is a requirement to enter)',
zoom_long: 'You are required to participate in at least 1 Zoom, but it is recommended that you take part in the movement more actively.<br><br><strong>By participating in Zooms the Staff will record attendance and you will be enabled.</strong>', zoom_long: 'You are required to participate in at least 1 Zoom, but it is recommended that you take part in the movement more actively.<br><br><strong>By participating in Zooms the Staff will record attendance and you will be enabled.</strong>',
zoom_what: 'Tutorial how to install Zoom', zoom_what: 'Tutorial how to install Zoom Cloud Meeting',
// sharemovement_devi_invitare_almeno_2: 'You still haven\'t invited 2 people', // sharemovement_devi_invitare_almeno_2: 'You still haven\'t invited 2 people',
// sharemovement_hai_invitato: 'You invited at least 2 people', // sharemovement_hai_invitato: 'You invited at least 2 people',
sharemovement_invitati_attivi_si: 'You have at least 2 people invited Active', sharemovement_invitati_attivi_si: 'You have at least 2 people invited Active',
@@ -80,7 +86,8 @@ const msg_enUs = {
sharemovement_long: 'Share the {sitename} Movement and invite them to participate in the Welcome Zooms to become part of this great Family &#128516 .<br>.', sharemovement_long: 'Share the {sitename} Movement and invite them to participate in the Welcome Zooms to become part of this great Family &#128516 .<br>.',
inv_attivi_long: '', inv_attivi_long: '',
enter_prog_completa_requisiti: 'Complete all the requirements to enter the boarding list.', enter_prog_completa_requisiti: 'Complete all the requirements to enter the boarding list.',
enter_prog_requisiti_ok: 'You have completed all 7 requirements to enter the boarding list.<br>You will receive a message in the next few days as soon as your ship is ready!', enter_prog_requisiti_ok: 'You have completed all 7 requirements to enter the boarding list.<br>',
enter_prog_msg: 'You will receive a message in the next few days as soon as your ship is ready!',
enter_nave_9req_ok: 'CONGRATULATIONS! You have completed ALL 9 steps guide! Thank you for helping {sitename} to Expand! <br>You will be able to leave very soon with your Journey, making your gift and continuing towards the Dreamer.', enter_nave_9req_ok: 'CONGRATULATIONS! You have completed ALL 9 steps guide! Thank you for helping {sitename} to Expand! <br>You will be able to leave very soon with your Journey, making your gift and continuing towards the Dreamer.',
enter_nave_9req_ko: 'Remember that you can help the Movement grow and expand by sharing our journey with everyone!', enter_nave_9req_ko: 'Remember that you can help the Movement grow and expand by sharing our journey with everyone!',
enter_prog: 'I\'m going in Programming', enter_prog: 'I\'m going in Programming',
@@ -177,6 +184,8 @@ const msg_enUs = {
options: 'Options', options: 'Options',
}, },
dashboard: { dashboard: {
num_tessitura: 'Numero di Tessitura:',
attenzione: 'Attenzione',
downline: 'Guests', downline: 'Guests',
downnotreg: 'Non-registered Guests', downnotreg: 'Non-registered Guests',
notreg: 'Not Registered', notreg: 'Not Registered',
@@ -184,7 +193,7 @@ const msg_enUs = {
numinvitati: 'At least 2 guests', numinvitati: 'At least 2 guests',
telefono_wa: 'Contact on Whatsapp', telefono_wa: 'Contact on Whatsapp',
sendnotification: 'Send Notification to the Recipient on Telegram BOT', sendnotification: 'Send Notification to the Recipient on Telegram BOT',
ricevuto_dono: 'You received a Gift Invitation {invitato} from {mittente} !', ricevuto_dono: '😍🎊 You received a Gift Invitation {invitato} from {mittente} !',
nessun_invitante: 'No Inviting', nessun_invitante: 'No Inviting',
nessun_invitato: 'No_invited', nessun_invitato: 'No_invited',
legenda_title: 'Click on the name of the guest to see the status of his Requirements.', legenda_title: 'Click on the name of the guest to see the status of his Requirements.',

View File

@@ -12,6 +12,8 @@ const msg_es = {
tableslist: 'Tablas' tableslist: 'Tablas'
}, },
otherpages: { otherpages: {
modifprof: 'Editar Perfil',
biografia: 'Biografia',
error404: 'error404', error404: 'error404',
error404def: 'error404def', error404def: 'error404def',
admin: { admin: {
@@ -46,10 +48,15 @@ const msg_es = {
email_not_verif: 'Correo electrónico no verificado', email_not_verif: 'Correo electrónico no verificado',
telegram_non_attivi: 'Telegrama no activo', telegram_non_attivi: 'Telegrama no activo',
telegram_pendenti: 'Telegram Pendientes', telegram_pendenti: 'Telegram Pendientes',
reg_daily:'Registrazioni Giornaliere', reg_daily: 'Registros diarios',
reg_total: 'Registrazioni Totali', reg_weekly: 'Registros Semanales',
reg_total: 'Total de registros',
}, },
steps: { steps: {
nuovo_imbarco: 'Reserva otro viaje',
vuoi_entrare_nuova_nave: 'Si confirma, cuando su barco esté listo para zarpar, hará un nuevo regalo para repetir otro viaje..<br>' +
'De esta manera ayudarás a todas las naves a avanzar y hacer crecer el movimiento.',
vuoi_cancellare_imbarco: '¿Está seguro de que quiere cancelar el embarque en el barco de AYNI?',
completed: 'Completado', completed: 'Completado',
passi_su: '{passo} pasos de cada {totpassi}', passi_su: '{passo} pasos de cada {totpassi}',
video_intro_1: '1. Bienvenido a {sitename}', video_intro_1: '1. Bienvenido a {sitename}',
@@ -71,7 +78,7 @@ const msg_es = {
zoom_partecipa: "Participó al menos 1 Zoom", zoom_partecipa: "Participó al menos 1 Zoom",
zoom_no_partecipato: "Aún no ha participado en un Zoom (es un requisito para entrar)", zoom_no_partecipato: "Aún no ha participado en un Zoom (es un requisito para entrar)",
zoom_long: "Se requiere que participe en al menos 1 Zoom, pero se recomienda participar en el movimiento de una manera más activa.<br><br><strong>Al participar en los Zooms el Staff registrará la asistencia y usted estará habilitado.</strong>", zoom_long: "Se requiere que participe en al menos 1 Zoom, pero se recomienda participar en el movimiento de una manera más activa.<br><br><strong>Al participar en los Zooms el Staff registrará la asistencia y usted estará habilitado.</strong>",
zoom_what: "Tutoriales de cómo instalar Zoom", zoom_what: "Tutoriales de cómo instalar Zoom Cloud Meeting",
// sharemovement_devi_invitare_almeno_2: 'Todavía no has invitado a dos personas', // sharemovement_devi_invitare_almeno_2: 'Todavía no has invitado a dos personas',
// sharemovement_hai_invitato: 'Invitaste al menos a dos personas', // sharemovement_hai_invitato: 'Invitaste al menos a dos personas',
sharemovement_invitati_attivi_si: 'Tienes al menos 2 personas invitadas Activo', sharemovement_invitati_attivi_si: 'Tienes al menos 2 personas invitadas Activo',
@@ -80,7 +87,8 @@ const msg_es = {
sharemovement_long: 'Continúo trabajando con mis compañeros para llegar al día en que mi barco zarpe.<br>', sharemovement_long: 'Continúo trabajando con mis compañeros para llegar al día en que mi barco zarpe.<br>',
inv_attivi_long: '', inv_attivi_long: '',
enter_prog_completa_requisiti: 'Complete todos los requisitos para entrar en la lista de embarque.', enter_prog_completa_requisiti: 'Complete todos los requisitos para entrar en la lista de embarque.',
enter_prog_requisiti_ok: 'Ha completado los 7 requisitos para entrar en la lista de embarque.<br>¡Recibirá un mensaje en los próximos días tan pronto como su nave esté lista!', enter_prog_requisiti_ok: 'Ha completado los 7 requisitos para entrar en la lista de embarque.<br>',
enter_prog_msg: '¡Recibirá un mensaje en los próximos días tan pronto como su nave esté lista!',
enter_nave_9req_ok: '¡FELICIDADES! ¡Has completado los 9 pasos de la Guía! ¡Gracias por ayudar a {sitename} a expandirse! <br>Podrás salir muy pronto con tu viaje, haciendo tu regalo y continuando hacia el Soñador.', enter_nave_9req_ok: '¡FELICIDADES! ¡Has completado los 9 pasos de la Guía! ¡Gracias por ayudar a {sitename} a expandirse! <br>Podrás salir muy pronto con tu viaje, haciendo tu regalo y continuando hacia el Soñador.',
enter_nave_9req_ko: 'Recuerda que puedes ayudar a que el Movimiento crezca y se expanda compartiendo nuestro viaje con todos!', enter_nave_9req_ko: 'Recuerda que puedes ayudar a que el Movimiento crezca y se expanda compartiendo nuestro viaje con todos!',
enter_prog: 'Voy a entrar en Lista Programación', enter_prog: 'Voy a entrar en Lista Programación',
@@ -176,6 +184,8 @@ const msg_es = {
options: 'Opciones', options: 'Opciones',
}, },
dashboard: { dashboard: {
num_tessitura: 'Numero di Tessitura:',
attenzione: 'Atención',
downline: 'Invitados', downline: 'Invitados',
downnotreg: 'Invitados no Registrados', downnotreg: 'Invitados no Registrados',
notreg: 'No Registrado', notreg: 'No Registrado',
@@ -183,13 +193,14 @@ const msg_es = {
numinvitati: 'Al menos 2 invitados', numinvitati: 'Al menos 2 invitados',
telefono_wa: 'Contacto en Whatsapp', telefono_wa: 'Contacto en Whatsapp',
sendnotification: 'Enviar notificación al destinatario del telegrama BOT', sendnotification: 'Enviar notificación al destinatario del telegrama BOT',
ricevuto_dono: 'Usted recibió una invitación de regalo de {invitato} de {mittente} !', ricevuto_dono: '😍🎊 Usted recibió una invitación de regalo de {invitato} de {mittente} !',
nessun_invitante: 'No invitando', nessun_invitante: 'No invitando',
nessun_invitato: 'No_invitado', nessun_invitato: 'No_invitado',
legenda_title: 'Haga clic en el nombre del huésped para ver el estado de sus requisitos', legenda_title: 'Haga clic en el nombre del huésped para ver el estado de sus requisitos',
nave_in_partenza: 'que Sale el', nave_in_partenza: 'que Sale el',
nave_partita: 'partió en', nave_partita: 'partió en',
tutor: 'Tutor', tutor: 'Tutor',
traduttrici: 'Traduttrici',
sonomediatore: 'Cuando te conviertes en Mediador vienes contactado por un <strong>TUTOR</strong>, con él debes:<br><ol class="lista">' + sonomediatore: 'Cuando te conviertes en Mediador vienes contactado por un <strong>TUTOR</strong>, con él debes:<br><ol class="lista">' +
'<li>Abrir tu <strong>Gift Chat</strong> (tu como propietario, y el Tutor ' + '<li>Abrir tu <strong>Gift Chat</strong> (tu como propietario, y el Tutor ' +
'como administrador) con este nombre: <strong>{nomenave}</strong></li>' + 'como administrador) con este nombre: <strong>{nomenave}</strong></li>' +
@@ -207,13 +218,13 @@ const msg_es = {
nave: 'Nave', nave: 'Nave',
data_partenza: 'Fecha<br>Salida', data_partenza: 'Fecha<br>Salida',
doni_inviati: 'Regalos<br>enviados', doni_inviati: 'Regalos<br>enviados',
nome_dei_passaggi:'Nombre de los pasajes', nome_dei_passaggi: 'Nombre de los pasajes',
donatori:'Donantes', donatori: 'Donantes',
donatore:'Donante', donatore: 'Donante',
mediatore:'Mediador', mediatore: 'Mediador',
sognatore:'Soñador', sognatore: 'Soñador',
sognatori:'SOÑADOR', sognatori: 'SOÑADOR',
intermedio:'INTERMEDIO', intermedio: 'INTERMEDIO',
pos2: 'Interm. 2', pos2: 'Interm. 2',
pos3: 'Interm. 3', pos3: 'Interm. 3',
pos5: 'Interm. 5', pos5: 'Interm. 5',
@@ -306,6 +317,7 @@ const msg_es = {
selected: 'seleccionado', selected: 'seleccionado',
img: 'File image', img: 'File image',
date_reg: 'Fecha Reg.', date_reg: 'Fecha Reg.',
deleted: 'Cancellato',
requirement: 'Requisitos', requirement: 'Requisitos',
perm: 'Permisos', perm: 'Permisos',
username: 'Username (Apodo)', username: 'Username (Apodo)',

View File

@@ -12,6 +12,8 @@ const msg_fr = {
tableslist: 'Tables', tableslist: 'Tables',
}, },
otherpages: { otherpages: {
modifprof: 'Modifier le profil',
biografia: 'Biografia',
error404: 'error404', error404: 'error404',
error404def: 'error404def', error404def: 'error404def',
admin: { admin: {
@@ -47,9 +49,14 @@ const msg_fr = {
telegram_non_attivi: 'Telegram non actif', telegram_non_attivi: 'Telegram non actif',
telegram_pendenti: 'Telegram Pendants', telegram_pendenti: 'Telegram Pendants',
reg_daily: 'Enregistrements quotidiennes', reg_daily: 'Enregistrements quotidiennes',
reg_weekly: 'Enregistrements hebdomadaires',
reg_total: 'Total des enregistrements', reg_total: 'Total des enregistrements',
}, },
steps: { steps: {
nuovo_imbarco: 'Réserver un autre voyage',
vuoi_entrare_nuova_nave: 'Si vous confirmez, lorsque votre navire est prêt à naviguer, vous ferez un Nouveau Cadeau pour répéter un autre voyage.<br>' +
'De cette façon, vous aiderez tous les navires à aller de l\'avant et à développer le mouvement.',
vuoi_cancellare_imbarco: 'Êtes-vous sûr de vouloir annuler cet embarquement sur le navire AYNI ?',
completed: 'Complétée', completed: 'Complétée',
passi_su: '{passo} étapes sur {totpassi}', passi_su: '{passo} étapes sur {totpassi}',
video_intro_1: '1. Bienvenue à l\'{sitename}', video_intro_1: '1. Bienvenue à l\'{sitename}',
@@ -71,7 +78,7 @@ const msg_fr = {
zoom_partecipa: "A participé à au moins 1 Zoom", zoom_partecipa: "A participé à au moins 1 Zoom",
zoom_no_partecipato: "Vous n'avez pas encore participé à un Zoom (il est obligatoire d'entrer)", zoom_no_partecipato: "Vous n'avez pas encore participé à un Zoom (il est obligatoire d'entrer)",
zoom_long: "Vous devez participer à au moins un Zoom, mais il est recommandé de participer au mouvement de manière plus active. <br><br><strong>En participant aux Zooms, le personnel enregistrera votre présence et vous serez activé. </strong>", zoom_long: "Vous devez participer à au moins un Zoom, mais il est recommandé de participer au mouvement de manière plus active. <br><br><strong>En participant aux Zooms, le personnel enregistrera votre présence et vous serez activé. </strong>",
zoom_what: "Tutoriels d'installation de Zoom", zoom_what: "Tutoriels d'installation de Zoom Cloud Meeting",
// sharemovement_devi_invitare_almeno_2: 'Vous n\'avez toujours pas invité 2 personnes', // sharemovement_devi_invitare_almeno_2: 'Vous n\'avez toujours pas invité 2 personnes',
// sharemovement_hai_invitato: 'Vous avez invité au moins deux personnes', // sharemovement_hai_invitato: 'Vous avez invité au moins deux personnes',
sharemovement_invitati_attivi_si: 'Vous avez au moins 2 personnes invitées Active', sharemovement_invitati_attivi_si: 'Vous avez au moins 2 personnes invitées Active',
@@ -80,7 +87,8 @@ const msg_fr = {
sharemovement_long: 'Partagez le mouvement {sitename} et invitez-les à participer aux zooms de bienvenue pour faire partie de cette grande famille &#128516 .<br>.', sharemovement_long: 'Partagez le mouvement {sitename} et invitez-les à participer aux zooms de bienvenue pour faire partie de cette grande famille &#128516 .<br>.',
inv_attivi_long: '', inv_attivi_long: '',
enter_prog_completa_requisiti: 'Remplissez toutes les conditions pour figurer sur la liste d\'embarquement.', enter_prog_completa_requisiti: 'Remplissez toutes les conditions pour figurer sur la liste d\'embarquement.',
enter_prog_requisiti_ok: 'Vous avez rempli les 7 conditions pour figurer sur la liste d\'embarquement.<br>Vous recevrez un message dans les prochains jours dès que votre bateau sera prêt !', enter_prog_requisiti_ok: 'Vous avez rempli les 7 conditions pour figurer sur la liste d\'embarquement.<br>',
enter_prog_msg: 'Vous recevrez un message dans les prochains jours dès que votre bateau sera prêt !',
enter_nave_9req_ok: 'FÉLICITATIONS ! Vous avez suivi les 9 étapes du guide ! Merci d\'avoir aidé {sitename} à se développer ! <br> Vous pourrez bientôt partir avec votre Voyage, en faisant votre don et en continuant vers le Rêveur.', enter_nave_9req_ok: 'FÉLICITATIONS ! Vous avez suivi les 9 étapes du guide ! Merci d\'avoir aidé {sitename} à se développer ! <br> Vous pourrez bientôt partir avec votre Voyage, en faisant votre don et en continuant vers le Rêveur.',
enter_nave_9req_ko: 'N\'oubliez pas que vous pouvez aider le Mouvement à grandir et à s\'étendre en partageant notre voyage avec tout le monde !', enter_nave_9req_ko: 'N\'oubliez pas que vous pouvez aider le Mouvement à grandir et à s\'étendre en partageant notre voyage avec tout le monde !',
enter_prog: 'Je vais dans la Liste des Programmation', enter_prog: 'Je vais dans la Liste des Programmation',
@@ -175,6 +183,8 @@ const msg_fr = {
options: 'Options', options: 'Options',
}, },
dashboard: { dashboard: {
num_tessitura: 'Numero di Tessitura:',
attenzione: 'Attention',
downline: 'invités', downline: 'invités',
downnotreg: 'Invités non enregistrés', downnotreg: 'Invités non enregistrés',
notreg: 'Non enregistré', notreg: 'Non enregistré',
@@ -182,7 +192,7 @@ const msg_fr = {
numinvitati: 'Au moins 2 invités', numinvitati: 'Au moins 2 invités',
telefono_wa: 'Contact sur Whatsapp', telefono_wa: 'Contact sur Whatsapp',
sendnotification: 'Envoyer la notification au destinataire par télégramme BOT', sendnotification: 'Envoyer la notification au destinataire par télégramme BOT',
ricevuto_dono: 'Vous avez reçu une invitation-cadeau de {invitato} de {mittente} !', ricevuto_dono: '😍🎊 Vous avez reçu une invitation-cadeau de {invitato} de {mittente} !',
nessun_invitante: 'Pas d\'invitation', nessun_invitante: 'Pas d\'invitation',
nessun_invitato: 'Non_invité', nessun_invitato: 'Non_invité',
legenda_title: 'Cliquez sur le nom de l\'invité pour voir l\'état de ses besoins', legenda_title: 'Cliquez sur le nom de l\'invité pour voir l\'état de ses besoins',

View File

@@ -17,7 +17,15 @@ const msg_it = {
directory: 'Directory', directory: 'Directory',
list: 'Lista', list: 'Lista',
}, },
profile: {
chisei: 'Chi Sei? Raccontaci di te:',
iltuoimpegno: 'Quale è stato il tuo impegno per salvare il pianeta ad oggi?',
come_aiutare: 'Cosa vorresti fare per aiutare il pianeta?',
},
otherpages: { otherpages: {
sito_offline: 'Sito in Aggiornamento',
modifprof: 'Modifica Profilo',
biografia: 'Biografia',
update: 'Aggiornamento in Corso...', update: 'Aggiornamento in Corso...',
error404: 'error404', error404: 'error404',
error404def: 'error404def', error404def: 'error404def',
@@ -40,7 +48,8 @@ const msg_it = {
manage: { manage: {
menu: 'Gestione', menu: 'Gestione',
manager: 'Gestore', manager: 'Gestore',
nessuno: 'Nessuno' nessuno: 'Nessuno',
sendpushnotif: 'Invia Msg Push',
}, },
messages: { messages: {
menu: 'I tuoi Messaggi' menu: 'I tuoi Messaggi'
@@ -50,6 +59,7 @@ const msg_it = {
write: 'scrive' write: 'scrive'
}, },
stat: { stat: {
imbarcati: 'Imbarcati in Attesa',
qualificati: 'Qualificati con almeno 2 invitati', qualificati: 'Qualificati con almeno 2 invitati',
requisiti: 'Utenti con i 7 Requisiti', requisiti: 'Utenti con i 7 Requisiti',
zoom: 'Partecipato in Zoom', zoom: 'Partecipato in Zoom',
@@ -60,9 +70,16 @@ const msg_it = {
telegram_non_attivi: 'Telegram Non Attivi', telegram_non_attivi: 'Telegram Non Attivi',
telegram_pendenti: 'Telegram Pendenti', telegram_pendenti: 'Telegram Pendenti',
reg_daily:'Registrazioni Giornaliere', reg_daily:'Registrazioni Giornaliere',
reg_weekly:'Registrazioni Settimanali',
reg_total: 'Registrazioni Totali', reg_total: 'Registrazioni Totali',
}, },
steps: { steps: {
nuovo_imbarco: 'Prenota un altro Viaggio',
vuoi_entrare_nuova_nave: 'Se confermi, quando la tua Nave sarà pronta a salpare, farai un Nuovo Dono per ripetere un altro viaggio.<br>' +
'In questo modo aiuterai tutte le Navi ad avanzare e a far crescere il movimento.',
inserisci_invitante: 'Inserisci qui sotto l\'username della persona che vuoi aiutare, donandoti come suo Invitato:',
vuoi_cancellare_imbarco: 'Sicuro di voler cancellare questo imbarco in Nave AYNI?',
sei_stato_aggiunto: 'Sei stato aggiunto alla lista d\'imbarco! Nei prossimi giorni verrai aggiunto ad una Nuova Nave in partenza!',
completed: 'Completati', completed: 'Completati',
passi_su: '{passo} passi su {totpassi}', passi_su: '{passo} passi su {totpassi}',
video_intro_1: '1. Benvenuti in {sitename}', video_intro_1: '1. Benvenuti in {sitename}',
@@ -85,7 +102,7 @@ const msg_it = {
zoom_partecipa: '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_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 registrerà le presenze e verrai così abilitato.</strong>', 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 registrerà le presenze e verrai così abilitato.</strong>',
zoom_what: 'Tutorial come installare Zoom', zoom_what: 'Tutorial come installare Zoom Cloud Meeting',
// sharemovement_devi_invitare_almeno_2: 'Ancora non hai invitato 2 persone', // sharemovement_devi_invitare_almeno_2: 'Ancora non hai invitato 2 persone',
// sharemovement_hai_invitato: 'Hai invitato almeno 2 persone', // sharemovement_hai_invitato: 'Hai invitato almeno 2 persone',
sharemovement_invitati_attivi_si: 'Hai almeno 2 persone invitate Attive', sharemovement_invitati_attivi_si: 'Hai almeno 2 persone invitate Attive',
@@ -94,7 +111,9 @@ const msg_it = {
sharemovement_long: 'Condividi il Movimento {sitename} e invitali a partecipare agli Zoom di Benvenuto per entrare a far parte di questa grande Famiglia &#128516 .<br>', sharemovement_long: 'Condividi il Movimento {sitename} e invitali a partecipare agli Zoom di Benvenuto per entrare a far parte di questa grande Famiglia &#128516 .<br>',
inv_attivi_long: '', inv_attivi_long: '',
enter_prog_completa_requisiti: 'Completa tutti i requisiti richiesti, per poter entrare nella Lista d\'imbarco.', enter_prog_completa_requisiti: 'Completa tutti i requisiti richiesti, per poter entrare nella Lista d\'imbarco.',
enter_prog_requisiti_ok: 'Hai completato tutti i 7 requisiti per entrare nella Lista d\'Imbarco.<br>Riceverai un messaggio nei prossimi giorni appena la tua Nave sarà pronta!', enter_prog_requisiti_ok: 'Hai completato tutti i 7 requisiti per entrare nella Lista d\'Imbarco.<br>',
enter_prog_msg: 'Riceverai un messaggio nei prossimi giorni su AYNI BOT, appena la tua Nave sarà pronta!',
enter_prog_msg_2: 'Ricorda che più persone inviti e più sali di Posizione, per accedere alla prossima Nave!',
enter_nave_9req_ok: 'COMPLIMENTI! Hai Completato TUTTI i 9 Passi della Guida! Grazie per Aiutare {sitename} ad Espandersi!<br>Potrai molto presto partire con il tuo Viaggio, facendo il tuo dono e proseguendo verso il Sognatore', enter_nave_9req_ok: 'COMPLIMENTI! Hai Completato TUTTI i 9 Passi della Guida! Grazie per Aiutare {sitename} ad Espandersi!<br>Potrai molto presto partire con il tuo Viaggio, facendo il tuo dono e proseguendo verso il Sognatore',
enter_nave_9req_ko: 'Ricorda che puoi Aiutare a far Crescere ed Espandere il Movimento, Condividendo con chiunque questo nostro viaggio!', enter_nave_9req_ko: 'Ricorda che puoi Aiutare a far Crescere ed Espandere il Movimento, Condividendo con chiunque questo nostro viaggio!',
enter_prog: 'Entro nella Lista d\'Imbarco', enter_prog: 'Entro nella Lista d\'Imbarco',
@@ -191,6 +210,10 @@ const msg_it = {
options: 'Opzioni', options: 'Opzioni',
}, },
dashboard: { dashboard: {
invitante: 'Invitante',
dono_da_effettuare: 'Dono che dovrai effettuare',
num_tessitura: 'Numero di Tessitura:',
attenzione: 'Attenzione',
downline: 'Invitati', downline: 'Invitati',
downnotreg: 'Invitati non Registrati', downnotreg: 'Invitati non Registrati',
notreg: 'Non Registrato', notreg: 'Non Registrato',
@@ -198,13 +221,14 @@ const msg_it = {
numinvitati: 'Almeno 2 Invitati', numinvitati: 'Almeno 2 Invitati',
telefono_wa: 'Contatta su Whatsapp', telefono_wa: 'Contatta su Whatsapp',
sendnotification: 'Invia Notifica al Destinatario su Telegram BOT', sendnotification: 'Invia Notifica al Destinatario su Telegram BOT',
ricevuto_dono: 'Hai ricevuto in Regalo un Invitato {invitato} da parte di {mittente} !', ricevuto_dono: '😍🎊 Hai ricevuto in Regalo un Invitato {invitato} da parte di {mittente} !',
nessun_invitante: 'Nessun Invitante', nessun_invitante: 'Nessun Invitante',
nessun_invitato: 'Nessun Invitato', nessun_invitato: 'Nessun Invitato',
legenda_title: 'Clicca sul nome dell\'invitato per vedere lo stato dei suoi Requisiti.', legenda_title: 'Clicca sul nome dell\'invitato per vedere lo stato dei suoi Requisiti.',
nave_in_partenza: 'in Partenza il', nave_in_partenza: 'in Partenza il',
nave_partita: 'Partita il', nave_partita: 'Partita il',
tutor: 'Tutor', tutor: 'Tutor',
traduttrici: 'Traduttrici',
sonomediatore: 'Quando diventi Meditore vieni contattato da un <strong>TUTOR</strong>, con lui devi:<br><ol class="lista">' + sonomediatore: 'Quando diventi Meditore vieni contattato da un <strong>TUTOR</strong>, con lui devi:<br><ol class="lista">' +
'<li>Aprire la tua <strong>Gift Chat</strong> (tu come proprietario e il Tutor ' + '<li>Aprire la tua <strong>Gift Chat</strong> (tu come proprietario e il Tutor ' +
'come amministratore) con questo nome: <strong>{nomenave}</strong></li>' + 'come amministratore) con questo nome: <strong>{nomenave}</strong></li>' +
@@ -286,6 +310,7 @@ const msg_it = {
cancellami_2: 'ULTIMO AVVISO! Vuoi uscire Definitivamente da {sitename} ?', cancellami_2: 'ULTIMO AVVISO! Vuoi uscire Definitivamente da {sitename} ?',
account_cancellato: 'Il tuo Profilo è stato cancellato correttamente', account_cancellato: 'Il tuo Profilo è stato cancellato correttamente',
regala_invitato: 'Regala Invitato', regala_invitato: 'Regala Invitato',
regala_invitante: 'Imposta Invitante',
messaggio_invito: 'Messaggio di Invito', messaggio_invito: 'Messaggio di Invito',
messaggio_invito_msg: 'Invia questo messaggio a tutti coloro a cui vuoi condividere questo Movimento !', messaggio_invito_msg: 'Invia questo messaggio a tutti coloro a cui vuoi condividere questo Movimento !',
videointro: 'Video Introduttivo', videointro: 'Video Introduttivo',
@@ -329,8 +354,12 @@ const msg_it = {
date_reg: 'Data Reg.', date_reg: 'Data Reg.',
requirement: 'Requisiti', requirement: 'Requisiti',
perm: 'Permessi', perm: 'Permessi',
elimina: 'Elimina',
deleted: 'Nascosto',
sospeso: 'Sospeso',
username: 'Username (Pseudonimo)', username: 'Username (Pseudonimo)',
username_short: 'Username', username_short: 'Username',
username_main: 'Username Base',
name: 'Nome', name: 'Nome',
surname: 'Cognome', surname: 'Cognome',
username_login: 'Username o email', username_login: 'Username o email',
@@ -362,6 +391,7 @@ const msg_it = {
duplicate_username: 'L\'Username è stato già utilizzato', duplicate_username: 'L\'Username è stato già utilizzato',
aportador_not_exist: 'L\'Username di chi ti ha invitato non è presente. Contattaci.', aportador_not_exist: 'L\'Username di chi ti ha invitato non è presente. Contattaci.',
aportador_regalare_not_exist: 'Inserire l\'Username della persona che si vuole regalare l\'invitato', aportador_regalare_not_exist: 'Inserire l\'Username della persona che si vuole regalare l\'invitato',
invitante_username_not_exist: 'Inserire l\'Username della persona che fa da invitante',
sameaspassword: 'Le password devono essere identiche', sameaspassword: 'Le password devono essere identiche',
}, },
tips: { tips: {
@@ -433,7 +463,7 @@ const msg_it = {
titlegranted: 'Permesso Notifiche Abilitato!', titlegranted: 'Permesso Notifiche Abilitato!',
statusnot: 'Stato Notifiche', statusnot: 'Stato Notifiche',
titledenied: 'Permesso Notifiche Disabilitato!', titledenied: 'Permesso Notifiche Disabilitato!',
title_subscribed: 'Sottoscrizione a FreePlanet.app!', title_subscribed: 'Sottoscrizione a {sitename}!',
subscribed: 'Ora potrai ricevere i messaggi e le notifiche.', subscribed: 'Ora potrai ricevere i messaggi e le notifiche.',
newVersionAvailable: 'Aggiorna', newVersionAvailable: 'Aggiorna',
}, },

View File

@@ -18,6 +18,8 @@ const msg_pt = {
list: 'Lista', list: 'Lista',
}, },
otherpages: { otherpages: {
modifprof: 'Editar Perfil',
biografia: 'Biografia',
error404: 'error404', error404: 'error404',
error404def: 'error404def', error404def: 'error404def',
admin: { admin: {
@@ -57,9 +59,14 @@ const msg_pt = {
telegram_non_attivi: 'Telegrama Não Activo', telegram_non_attivi: 'Telegrama Não Activo',
telegram_pendenti: 'Telegram Pendants', telegram_pendenti: 'Telegram Pendants',
reg_daily: 'Inscrições diárias', reg_daily: 'Inscrições diárias',
reg_weekly:'Inscripciones semanales',
reg_total: 'Inscrições Total', reg_total: 'Inscrições Total',
}, },
steps: { steps: {
nuovo_imbarco: 'Reservar outra Viagem',
vuoi_entrare_nuova_nave: 'Se confirmar, quando o seu navio estiver pronto para navegar, fará um Novo Presente para repetir outra viagem..<br>' +
'Desta forma, ajudará todos os navios a avançar e a fazer crescer o movimento.',
vuoi_cancellare_imbarco: 'Tem a certeza de que quer cancelar este embarque no navio AYNI?',
completed: 'Completado', completed: 'Completado',
passi_su: '{passo} passos em {totpassi}', passi_su: '{passo} passos em {totpassi}',
video_intro_1: '1. Bem-vindo ao {sitename}', video_intro_1: '1. Bem-vindo ao {sitename}',
@@ -81,7 +88,7 @@ const msg_pt = {
zoom_partecipa: 'Participou em pelo menos 1 Zoom', zoom_partecipa: 'Participou em pelo menos 1 Zoom',
zoom_no_partecipato: 'Você ainda não participou de um Zoom (é um requisito para entrar)', zoom_no_partecipato: 'Você ainda não participou de um Zoom (é um requisito para entrar)',
zoom_long: 'É necessário participar em pelo menos 1 Zoom, mas é recomendável participar mais activamente no movimento.<br><br><strong> Ao participar nos Zooms o Staff registará a assistência e você estará habilitado.</strong>', zoom_long: 'É necessário participar em pelo menos 1 Zoom, mas é recomendável participar mais activamente no movimento.<br><br><strong> Ao participar nos Zooms o Staff registará a assistência e você estará habilitado.</strong>',
zoom_what: 'Tutorial de como instalar o Zoom', zoom_what: 'Tutorial de como instalar o Zoom Cloud Meeting',
// sharemovement_devi_invitare_almeno_2: 'Você ainda não convidou 2 pessoas', // sharemovement_devi_invitare_almeno_2: 'Você ainda não convidou 2 pessoas',
// sharemovement_hai_invitato: 'Você convidou pelo menos 2 pessoas', // sharemovement_hai_invitato: 'Você convidou pelo menos 2 pessoas',
sharemovement_invitati_attivi_si: 'Você tem pelo menos 2 pessoas convidadas Ativo', sharemovement_invitati_attivi_si: 'Você tem pelo menos 2 pessoas convidadas Ativo',
@@ -90,7 +97,8 @@ const msg_pt = {
sharemovement_long: 'Partilhe o Movimento {sitename} e convide-os a participar nos Zooms de Boas-vindas para fazer parte desta grande Família &#128516 .<br>', sharemovement_long: 'Partilhe o Movimento {sitename} e convide-os a participar nos Zooms de Boas-vindas para fazer parte desta grande Família &#128516 .<br>',
inv_attivi_long: '', inv_attivi_long: '',
enter_prog_completa_requisiti: 'Preencher todos os requisitos para entrar na lista de embarque.', enter_prog_completa_requisiti: 'Preencher todos os requisitos para entrar na lista de embarque.',
enter_prog_requisiti_ok: 'O usuário completou todos os 7 requisitos para entrar na lista de embarque.<br>Você receberá uma mensagem nos próximos dias, assim que o seu navio estiver pronto!', enter_prog_requisiti_ok: 'O usuário completou todos os 7 requisitos para entrar na lista de embarque.<br>',
enter_prog_msg: 'Você receberá uma mensagem nos próximos dias, assim que o seu navio estiver pronto!',
enter_nave_9req_ok: 'PARABÉNS! Você completou TODOS os 9 passos do Guia! Obrigado por ajudar a {sitename} a Expandir! <br>Você poderá partir muito em breve com a sua Jornada, fazendo o seu presente e continuando para o Sonhador.', enter_nave_9req_ok: 'PARABÉNS! Você completou TODOS os 9 passos do Guia! Obrigado por ajudar a {sitename} a Expandir! <br>Você poderá partir muito em breve com a sua Jornada, fazendo o seu presente e continuando para o Sonhador.',
enter_nave_9req_ko: 'Lembre-se que você pode ajudar o Movimento a crescer e expandir, compartilhando nossa jornada com todos!', enter_nave_9req_ko: 'Lembre-se que você pode ajudar o Movimento a crescer e expandir, compartilhando nossa jornada com todos!',
enter_prog: 'Vou em Lista Programação', enter_prog: 'Vou em Lista Programação',
@@ -186,6 +194,8 @@ const msg_pt = {
options: 'Opzioni', options: 'Opzioni',
}, },
dashboard: { dashboard: {
num_tessitura: 'Numero di Tessitura:',
attenzione: 'Atenção',
downline: 'Convidados', downline: 'Convidados',
downnotreg: 'Convidados não registados', downnotreg: 'Convidados não registados',
notreg: 'Não Registado', notreg: 'Não Registado',
@@ -193,7 +203,7 @@ const msg_pt = {
numinvitati: 'Pelo menos 2 convidados', numinvitati: 'Pelo menos 2 convidados',
telefono_wa: 'Contato no Whatsapp', telefono_wa: 'Contato no Whatsapp',
sendnotification: 'Enviar Notificação ao Destinatário no Telegrama BOT', sendnotification: 'Enviar Notificação ao Destinatário no Telegrama BOT',
ricevuto_dono: 'Você recebeu um convite de presente {invitato} de {mittente} !', ricevuto_dono: '😍🎊 Você recebeu um convite de presente {invitato} de {mittente} !',
nessun_invitante: 'Sem Convite', nessun_invitante: 'Sem Convite',
nessun_invitato: 'Sem Convidados', nessun_invitato: 'Sem Convidados',
legenda_title: 'Clique no nome do convidado para ver o status de seus Requisitos', legenda_title: 'Clique no nome do convidado para ver o status de seus Requisitos',

16
src/statics/lang/si.js Normal file → Executable file
View File

@@ -18,6 +18,8 @@ const msg_si = {
list: 'Lista', list: 'Lista',
}, },
otherpages: { otherpages: {
modifprof: 'Uredi pProfil',
biografia: 'Biografia',
update: 'Posodobitev v teku...', update: 'Posodobitev v teku...',
error404: 'error404', error404: 'error404',
error404def: 'error404def', error404def: 'error404def',
@@ -60,9 +62,14 @@ const msg_si = {
telegram_non_attivi: 'Telegram ni aktiven', telegram_non_attivi: 'Telegram ni aktiven',
telegram_pendenti: 'Čakajoči Telegram', telegram_pendenti: 'Čakajoči Telegram',
reg_daily: 'Dnevne registracije', reg_daily: 'Dnevne registracije',
reg_weekly:'Tedenske prijave',
reg_total: 'Skupne registracije', reg_total: 'Skupne registracije',
}, },
steps: { steps: {
nuovo_imbarco: 'Rezerviraj še eno potovanje',
vuoi_entrare_nuova_nave: 'Če potrdiš, ko bo tvoja Ladja pripravljena za izplutje, boš Ponovno Doniral in ponovil novo potovanje.<br>' +
'Na ta način boste pomagali vsem ladjam pri napredovanju in rasti gibanja',
vuoi_cancellare_imbarco: 'Ali ste prepričani, da želite izbrisati vaš vstop v Ladjo Ayni?',
completed: 'zaključen', completed: 'zaključen',
passi_su: '{passo} od {totpassi} koraki', passi_su: '{passo} od {totpassi} koraki',
video_intro_1: '1. Dobrodošli v {sitename}', video_intro_1: '1. Dobrodošli v {sitename}',
@@ -86,7 +93,7 @@ const msg_si = {
zoom_no_partecipato: 'Še niste sodelovali pri zoomu (zahteva, da lahko vstopite)', zoom_no_partecipato: 'Še niste sodelovali pri zoomu (zahteva, da lahko vstopite)',
zoom_long: 'Potrebno je sodelovati pri vsaj enem zoomu, vendar je priporočljivo, da se v gibanje vključite bolj aktivno. <br> <br>\n' + zoom_long: 'Potrebno je sodelovati pri vsaj enem zoomu, vendar je priporočljivo, da se v gibanje vključite bolj aktivno. <br> <br>\n' +
'<strong> Osebje bo s sodelovanjem v zoomih beležilo udeležbe in vam bo omogočeno. </strong>', '<strong> Osebje bo s sodelovanjem v zoomih beležilo udeležbe in vam bo omogočeno. </strong>',
zoom_what: 'Navodila, kako namestiti Zoom', zoom_what: 'Navodila, kako namestiti Zoom Cloud Meeting',
// sharemovement_devi_invitare_almeno_2: 'Nisi še vpisal 2-eh oseb', // sharemovement_devi_invitare_almeno_2: 'Nisi še vpisal 2-eh oseb',
// sharemovement_hai_invitato: 'Si vpisaj vsaj 2 osebi', // sharemovement_hai_invitato: 'Si vpisaj vsaj 2 osebi',
sharemovement_invitati_attivi_si: 'Imate vsaj 2 aktivna povabljena', sharemovement_invitati_attivi_si: 'Imate vsaj 2 aktivna povabljena',
@@ -95,7 +102,8 @@ const msg_si = {
sharemovement_long: 'Delite gibanje {sitename} in jih povabite, da sodelujejo v zoomih dobrodošlice, da postanejo del te velike družine &#128516 .<br>', sharemovement_long: 'Delite gibanje {sitename} in jih povabite, da sodelujejo v zoomih dobrodošlice, da postanejo del te velike družine &#128516 .<br>',
inv_attivi_long: '', inv_attivi_long: '',
enter_prog_completa_requisiti: 'Izpolnite vse potrebne zahteve, da lahko vstopite na seznam za vstop.', enter_prog_completa_requisiti: 'Izpolnite vse potrebne zahteve, da lahko vstopite na seznam za vstop.',
enter_prog_requisiti_ok: 'Izpolnili ste vseh 7 zahtev za vpis na vstopni seznam. <br> V naslednjih dneh boste takoj, ko bo vaša ladja pripravljena, prejeli sporočilo!', enter_prog_requisiti_ok: 'Izpolnili ste vseh 7 zahtev za vpis na vstopni seznam. <br>',
enter_prog_msg: 'V naslednjih dneh boste takoj, ko bo vaša ladja pripravljena, prejeli sporočilo!',
enter_nave_9req_ok: 'ČESTITKE! Izpolnili ste VSE 9 korakov! Hvala, ker ste pomagali {sitename} pri razširitvi! <br> Zelo kmalu boste lahko odšli na potovanje, si priskrbeli darilo in nadaljevali proti sanjaču ', enter_nave_9req_ok: 'ČESTITKE! Izpolnili ste VSE 9 korakov! Hvala, ker ste pomagali {sitename} pri razširitvi! <br> Zelo kmalu boste lahko odšli na potovanje, si priskrbeli darilo in nadaljevali proti sanjaču ',
enter_nave_9req_ko: 'Ne pozabite, da lahko pomagate rasti in razširiti gibanje, tako da svoje potovanje delite z drugimi!', enter_nave_9req_ko: 'Ne pozabite, da lahko pomagate rasti in razširiti gibanje, tako da svoje potovanje delite z drugimi!',
enter_prog: 'Vpišem se na Seznam vkrcavanja', enter_prog: 'Vpišem se na Seznam vkrcavanja',
@@ -183,6 +191,8 @@ const msg_si = {
loggati: 'Uporabnik ni prijavljen' loggati: 'Uporabnik ni prijavljen'
}, },
dashboard: { dashboard: {
num_tessitura: 'Numero di Tessitura:',
attenzione: 'Pozornosti',
downline: 'povabljen', downline: 'povabljen',
downnotreg: 'Neregistrirani gostje', downnotreg: 'Neregistrirani gostje',
notreg: 'Ni registrirano', notreg: 'Ni registrirano',
@@ -190,7 +200,7 @@ const msg_si = {
numinvitati: 'Z vsaj 2-emi povabljenici', numinvitati: 'Z vsaj 2-emi povabljenici',
telefono_wa: 'Pišite na Whatsapp', telefono_wa: 'Pišite na Whatsapp',
sendnotification: 'Obvestilo pošljite prejemniku na Telegram BOT', sendnotification: 'Obvestilo pošljite prejemniku na Telegram BOT',
ricevuto_dono: 'Prejeli ste darilo {invitato} kot darilo od {mittente} !', ricevuto_dono: '😍🎊 Prejeli ste darilo {invitato} kot darilo od {mittente} !',
nessun_invitante: 'Nobenega povabljenega', nessun_invitante: 'Nobenega povabljenega',
nessun_invitato: 'Ni gostov', nessun_invitato: 'Ni gostov',
legenda_title: 'Kliknite na povabljeno ime, da si ogledate stanje njihovih zahtev.', legenda_title: 'Kliknite na povabljeno ime, da si ogledate stanje njihovih zahtev.',

View File

@@ -80,7 +80,7 @@ const state: IGlobalState = {
gallery: [], gallery: [],
mailinglist: [], mailinglist: [],
mypage: [], mypage: [],
calzoom: [], calzoom: []
} }
async function getConfig(id) { async function getConfig(id) {
@@ -142,17 +142,17 @@ namespace Getters {
}, 'getPage') }, 'getPage')
const getmenu = b.read((state) => { const getmenu = b.read((mystate: IGlobalState) => {
// console.log('getmenu', cfgrouter.getmenu()) // console.log('getmenu', cfgrouter.getmenu())
state.menulinks = { mystate.menulinks = {
Dashboard: { Dashboard: {
routes: cfgrouter.getmenu(), routes: cfgrouter.getmenu(),
show: true show: true
} }
} }
return state.menulinks return mystate.menulinks
// console.log('state.menulinks', state.menulinks) // console.log('state.menulinks', state.menulinks)
@@ -309,7 +309,7 @@ namespace Getters {
get isNewVersionAvailable() { get isNewVersionAvailable() {
// console.log('state.cfgServer', state.cfgServer) // console.log('state.cfgServer', state.cfgServer)
const serversrec = state.cfgServer.find((x) => x.chiave === tools.SERVKEY_VERS) const serversrec = state.cfgServer.find((x) => (x.chiave === tools.SERVKEY_VERS) && (x.idapp === process.env.APP_ID))
// console.log('Record ', serversrec) // console.log('Record ', serversrec)
if (serversrec) { if (serversrec) {
console.log('Vers Server ', serversrec.valore, 'Vers locale:', process.env.APP_VERSION) console.log('Vers Server ', serversrec.valore, 'Vers locale:', process.env.APP_VERSION)
@@ -467,8 +467,6 @@ namespace Actions {
return return
} }
console.log('createPushSubscription: INIT')
if (!('PushManager' in window)) { if (!('PushManager' in window)) {
return return
} }
@@ -484,6 +482,8 @@ namespace Actions {
return swreg.pushManager.getSubscription() return swreg.pushManager.getSubscription()
}) })
.then((subscription) => { .then((subscription) => {
console.log('subscription = ', subscription)
mystate.wasAlreadySubscribed = !(subscription === null) mystate.wasAlreadySubscribed = !(subscription === null)
if (mystate.wasAlreadySubscribed) { if (mystate.wasAlreadySubscribed) {
@@ -511,11 +511,10 @@ namespace Actions {
// Calling the Server to Save in the MongoDB the Subscriber // Calling the Server to Save in the MongoDB the Subscriber
function saveNewSubscriptionToServer(context, newSub) { function saveNewSubscriptionToServer(context, newSub) {
console.log('saveNewSubscriptionToServer')
// If already subscribed, exit // If already subscribed, exit
if (true) { // if (true) {
return // return
} // }
if (!newSub) { if (!newSub) {
return return
@@ -528,12 +527,19 @@ namespace Actions {
// console.log('saveSubscriptionToServer: ', newSub) // console.log('saveSubscriptionToServer: ', newSub)
// console.log('context', context) // console.log('context', context)
console.log('saveNewSubscriptionToServer')
let options = null let options = null
let notreg = false
if (UserStore.getters.isTokenInvalid) {
notreg = true
}
// If is not already stored in DB, then show the message to the user. // If is not already stored in DB, then show the message to the user.
if (!state.wasAlreadySubscribed) { if (!state.wasAlreadySubscribed || notreg) {
options = { options = {
title: translate('notification.title_subscribed'), title: tools.translate('notification.title_subscribed', [{strin: 'sitename', strout: translate('ws.sitename')}]),
content: translate('notification.subscribed'), content: translate('notification.subscribed'),
openUrl: '/' openUrl: '/'
} }
@@ -686,6 +692,19 @@ namespace Actions {
} }
async function sendPushNotif(context, { params }) {
return await Api.SendReq('/push/send', 'POST', { params })
.then((res) => {
// console.table(res)
return res.data
})
.catch((error) => {
console.log('error sendPushNotif', error)
return null
})
}
async function loadTable(context, params: IParamsQuery) { async function loadTable(context, params: IParamsQuery) {
// console.log('loadTable', params) // console.log('loadTable', params)
@@ -732,6 +751,21 @@ namespace Actions {
}) })
} }
async function callFunz(context, { mydata }) {
// console.log('saveFieldValue', mydata)
return await Api.SendReq(`/callfunz`, 'PATCH', { data: mydata })
.then((res) => {
if (res) {
return (res.data.code === serv_constants.RIS_CODE_OK)
} else
return false
})
.catch((error) => {
return false
})
}
async function DeleteRec(context, { table, id }) { async function DeleteRec(context, { table, id }) {
console.log('DeleteRec', table, id) console.log('DeleteRec', table, id)
@@ -1034,12 +1068,32 @@ namespace Actions {
infooter: false infooter: false
} }
const sito_offline = {
active: true,
order: 20,
path: '/sito_offline',
materialIcon: 'home',
name: 'otherpages.sito_offline',
component: () => import('@/rootgen/sito_offline/sito_offline.vue'),
inmenu: true,
infooter: true
}
if (!tools.sito_online(false)) {
static_data.routes = [sito_offline, last]
} else {
static_data.routes = [...static_data.baseroutes, ...arrpagesroute, last] static_data.routes = [...static_data.baseroutes, ...arrpagesroute, last]
}
// Sort array // Sort array
static_data.routes = static_data.routes.sort((a, b) => a.order - b.order) static_data.routes = static_data.routes.sort((a, b) => a.order - b.order)
if (tools.sito_online(false)) {
router.addRoutes([...arrpagesroute, last]) router.addRoutes([...arrpagesroute, last])
} else {
router.addRoutes([sito_offline, last])
this.$router.replace('/sito_offline')
}
} }
async function sendFile(context, formdata) { async function sendFile(context, formdata) {
@@ -1063,6 +1117,8 @@ namespace Actions {
saveCfgServerKey: b.dispatch(saveCfgServerKey), saveCfgServerKey: b.dispatch(saveCfgServerKey),
checkUpdates: b.dispatch(checkUpdates), checkUpdates: b.dispatch(checkUpdates),
saveFieldValue: b.dispatch(saveFieldValue), saveFieldValue: b.dispatch(saveFieldValue),
callFunz: b.dispatch(callFunz),
sendPushNotif: b.dispatch(sendPushNotif),
loadTable: b.dispatch(loadTable), loadTable: b.dispatch(loadTable),
saveTable: b.dispatch(saveTable), saveTable: b.dispatch(saveTable),
DeleteRec: b.dispatch(DeleteRec), DeleteRec: b.dispatch(DeleteRec),

View File

@@ -63,6 +63,7 @@ namespace Actions {
state.datastat = res.data.datastat state.datastat = res.data.datastat
state.datastat.arr_nations = JSON.parse(state.datastat.arr_nations) state.datastat.arr_nations = JSON.parse(state.datastat.arr_nations)
state.datastat.reg_daily = JSON.parse(state.datastat.reg_daily) state.datastat.reg_daily = JSON.parse(state.datastat.reg_daily)
state.datastat.reg_weekly = JSON.parse(state.datastat.reg_weekly)
state.datastat.checkuser = JSON.parse(state.datastat.checkuser) state.datastat.checkuser = JSON.parse(state.datastat.checkuser)
return state.datastat return state.datastat

View File

@@ -79,6 +79,7 @@ const state: IUserState = {
isAdmin: false, isAdmin: false,
isManager: false, isManager: false,
isTutor: false, isTutor: false,
isTraduttrici: false,
usersList: [], usersList: [],
countusers: 0, countusers: 0,
lastparamquery: {} lastparamquery: {}
@@ -93,7 +94,8 @@ namespace Getters {
const isUserInvalid = b.read((mystate) => { const isUserInvalid = b.read((mystate) => {
try { try {
const ris = (mystate.my._id === undefined) || (mystate.my._id.trim() === '') || (mystate.my.tokens[0] === undefined) // const ris = (mystate.my._id === undefined) || (mystate.my._id.trim() === '') || (mystate.my.tokens[0] === undefined)
const ris = (mystate.my._id === undefined) || (mystate.my._id.trim() === '')
// console.log('state._id', state._id, 'ris', ris) // console.log('state._id', state._id, 'ris', ris)
return ris return ris
} catch (e) { } catch (e) {
@@ -101,6 +103,15 @@ namespace Getters {
} }
}, 'isUserInvalid') }, 'isUserInvalid')
const isTokenInvalid = b.read((mystate) => {
try {
const ris = (mystate.my.tokens.length <= 0)
return ris
} catch (e) {
return true
}
}, 'isTokenInvalid')
const lang = b.read((mystate) => { const lang = b.read((mystate) => {
if (state.lang !== '') { if (state.lang !== '') {
return state.lang return state.lang
@@ -225,6 +236,9 @@ namespace Getters {
get isUserInvalid() { get isUserInvalid() {
return isUserInvalid() return isUserInvalid()
}, },
get isTokenInvalid() {
return isTokenInvalid()
},
get lang() { get lang() {
return lang() return lang()
}, },
@@ -291,6 +305,7 @@ namespace Mutations {
mystate.isManager = tools.isBitActive(mystate.my.perm, shared_consts.Permissions.Manager.value) mystate.isManager = tools.isBitActive(mystate.my.perm, shared_consts.Permissions.Manager.value)
mystate.isTutor = tools.isBitActive(mystate.my.perm, shared_consts.Permissions.Tutor.value) mystate.isTutor = tools.isBitActive(mystate.my.perm, shared_consts.Permissions.Tutor.value)
mystate.isTeacher = tools.isBitActive(mystate.my.perm, shared_consts.Permissions.Teacher.value) mystate.isTeacher = tools.isBitActive(mystate.my.perm, shared_consts.Permissions.Teacher.value)
mystate.isTraduttrici = tools.isBitActive(mystate.my.perm, shared_consts.Permissions.Traduttrici.value)
// console.log('authUser', 'state.isAdmin', mystate.isAdmin) // console.log('authUser', 'state.isAdmin', mystate.isAdmin)
// console.table(mystate) // console.table(mystate)
@@ -492,7 +507,7 @@ namespace Actions {
lang: state.lang lang: state.lang
} }
return await Api.SendReq(`/setlang`, 'PATCH', { data: mydata }) return Api.SendReq(`/setlang`, 'PATCH', { data: mydata })
.then((res) => { .then((res) => {
if (res) { if (res) {
return (res.data.code === serv_constants.RIS_CODE_OK) return (res.data.code === serv_constants.RIS_CODE_OK)
@@ -706,7 +721,7 @@ namespace Actions {
if ('serviceWorker' in navigator) { if ('serviceWorker' in navigator) {
sub = await navigator.serviceWorker.ready sub = await navigator.serviceWorker.ready
.then((swreg) => { .then((swreg) => {
console.log('swreg') // console.log('swreg')
sub = swreg.pushManager.getSubscription() sub = swreg.pushManager.getSubscription()
return sub return sub
}) })
@@ -721,7 +736,7 @@ namespace Actions {
} }
const options = { const options = {
title: translate('notification.title_subscribed'), title: tools.translate('notification.title_subscribed', [{strin: 'sitename', strout: translate('ws.sitename')}]),
content: translate('notification.subscribed'), content: translate('notification.subscribed'),
openUrl: '/' openUrl: '/'
} }

View File

@@ -1,12 +1,12 @@
import { tools } from './tools'
import { IColGridTable } from '../../model' import { IColGridTable } from '../../model'
import { lists } from './lists' import { lists } from './lists'
import { tools } from '@src/store/Modules/tools'
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@src/common/shared_vuejs'
import { GlobalStore, UserStore } from '@store' import { GlobalStore, UserStore } from '@store'
const DeleteRec = { const DeleteRec = {
name: 'deleterec', name: 'deleterec',
label_trans: 'newsletter.reset', label_trans: 'reg.elimina',
align: 'right', align: 'right',
field: tools.NOFIELD, field: tools.NOFIELD,
sortable: false, sortable: false,
@@ -163,20 +163,20 @@ const colnavi = [
AddCol({ name: '_id', label_trans: 'others.value' }), AddCol({ name: '_id', label_trans: 'others.value' }),
AddCol({ name: 'riga', label_trans: 'reg.riga' }), AddCol({ name: 'riga', label_trans: 'reg.riga' }),
AddCol({ name: 'col', label_trans: 'reg.col' }), AddCol({ name: 'col', label_trans: 'reg.col' }),
AddCol({ name: 'indprimario', label_trans: 'indprimario' }),
AddCol({ name: 'ind_order', label_trans: 'ind_order' }), AddCol({ name: 'ind_order', label_trans: 'ind_order' }),
AddCol({ name: 'parent_id', label_trans: 'parent_id' }), AddCol({ name: 'created', label_trans: 'cal.data', fieldtype: tools.FieldType.date }),
// AddCol({ name: 'date_start', label_trans: 'date_start', fieldtype: tools.FieldType.date }), // AddCol({ name: 'date_start', label_trans: 'date_start', fieldtype: tools.FieldType.date }),
// AddCol({ name: 'date_gift_chat_open', label_trans: 'date_gift_chat_open', fieldtype: tools.FieldType.date }), // AddCol({ name: 'date_gift_chat_open', label_trans: 'date_gift_chat_open', fieldtype: tools.FieldType.date }),
// AddCol({ name: 'link_chat', label_trans: 'reg.link_chat' }), // AddCol({ name: 'link_chat', label_trans: 'reg.link_chat' }),
AddCol({ name: 'parent_id', label_trans: 'parent_id' }),
AddCol({ name: 'sent_msg_howto_make_gift', label_trans: 'sent_msg_howto_make_gift', fieldtype: tools.FieldType.boolean }), AddCol({ name: 'sent_msg_howto_make_gift', label_trans: 'sent_msg_howto_make_gift', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'made_gift', label_trans: 'reg.made_gift', fieldtype: tools.FieldType.boolean }),
// AddCol({ name: 'provvisoria', label_trans: 'reg.provvisoria', fieldtype: tools.FieldType.boolean }), // AddCol({ name: 'provvisoria', label_trans: 'reg.provvisoria', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'made_gift', label_trans: 'reg.made_gift', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'date_made_gift', label_trans: 'date_made_gift', fieldtype: tools.FieldType.date }), AddCol({ name: 'date_made_gift', label_trans: 'date_made_gift', fieldtype: tools.FieldType.date }),
AddCol({ name: 'received_gift', label_trans: 'received_gift', fieldtype: tools.FieldType.boolean }), // AddCol({ name: 'received_gift', label_trans: 'received_gift', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'date_received_gift', label_trans: 'date_received_gift', fieldtype: tools.FieldType.date }), // AddCol({ name: 'date_received_gift', label_trans: 'date_received_gift', fieldtype: tools.FieldType.date }),
AddCol({ name: 'num_tess', label_trans: 'num_tess', fieldtype: tools.FieldType.number }), AddCol({ name: 'num_tess', label_trans: 'num_tess', fieldtype: tools.FieldType.number }),
// AddCol({ name: 'note_bot', label_trans: 'note_bot', fieldtype: tools.FieldType.string }), AddCol({ name: 'note', label_trans: 'note', fieldtype: tools.FieldType.string }),
// AddCol({ name: 'note_interne', label_trans: 'note_interne', fieldtype: tools.FieldType.string }), // AddCol({ name: 'note_interne', label_trans: 'note_interne', fieldtype: tools.FieldType.string }),
// AddCol({ name: 'tutor', label_trans: 'tutor', fieldtype: tools.FieldType.string }), // AddCol({ name: 'tutor', label_trans: 'tutor', fieldtype: tools.FieldType.string }),
AddCol(DeleteRec), AddCol(DeleteRec),
@@ -199,12 +199,14 @@ const colnavepersistente = [
const collistaingresso = [ const collistaingresso = [
AddCol({ name: '_id', label_trans: 'others.value' }), AddCol({ name: '_id', label_trans: 'others.value' }),
AddCol({ name: 'indprimario', label_trans: 'indprimario' }),
AddCol({ name: 'ind_order', label_trans: 'ind_order' }), AddCol({ name: 'ind_order', label_trans: 'ind_order' }),
AddCol({ name: 'username', label_trans: 'reg.username_short' }),
AddCol({ name: 'invitante_username', label_trans: 'reg.aportador_solidario' }),
AddCol({ name: 'date_added', label_trans: 'date_added', fieldtype: tools.FieldType.date }), AddCol({ name: 'date_added', label_trans: 'date_added', fieldtype: tools.FieldType.date }),
AddCol({ name: 'added', label_trans: 'added', fieldtype: tools.FieldType.boolean }), AddCol({ name: 'added', label_trans: 'Aggiunto', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'num_tess', label_trans: 'num_tess', fieldtype: tools.FieldType.number }), AddCol({ name: 'num_tess', label_trans: 'num_tess', fieldtype: tools.FieldType.number }),
AddCol({ name: 'deleted', label_trans: 'deleted', fieldtype: tools.FieldType.boolean }), AddCol({ name: 'note', label_trans: 'reg.note', fieldtype: tools.FieldType.string }),
AddCol({ name: 'deleted', label_trans: 'reg.deleted', fieldtype: tools.FieldType.boolean }),
AddCol(DuplicateRec), AddCol(DuplicateRec),
AddCol(DeleteRec) AddCol(DeleteRec)
] ]
@@ -398,7 +400,7 @@ export const fieldsTable = {
getTableJoinByName(table) { getTableJoinByName(table) {
if (table === 'permissions') if (table === 'permissions')
return [shared_consts.Permissions.Admin, shared_consts.Permissions.Manager, shared_consts.Permissions.Teacher, shared_consts.Permissions.Tutor] return [shared_consts.Permissions.Admin, shared_consts.Permissions.Manager, shared_consts.Permissions.Teacher, shared_consts.Permissions.Tutor, shared_consts.Permissions.Traduttrici]
else if (table === 'accepted') else if (table === 'accepted')
return [shared_consts.Accepted.CHECK_READ_GUIDELINES, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI] return [shared_consts.Accepted.CHECK_READ_GUIDELINES, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI]
else if (table === 'fieldstype') else if (table === 'fieldstype')
@@ -446,6 +448,9 @@ export const fieldsTable = {
AddCol({ name: 'typeconf', label_trans: 'zoom.typeconf' }), AddCol({ name: 'typeconf', label_trans: 'zoom.typeconf' }),
AddCol({ name: 'date_start', label_trans: 'event.dateTimeStart', fieldtype: tools.FieldType.date }), AddCol({ name: 'date_start', label_trans: 'event.dateTimeStart', fieldtype: tools.FieldType.date }),
AddCol({ name: 'date_end', label_trans: 'event.dateTimeEnd' , fieldtype: tools.FieldType.date }), AddCol({ name: 'date_end', label_trans: 'event.dateTimeEnd' , fieldtype: tools.FieldType.date }),
AddCol({ name: 'benvenuto', label_trans: 'event.benvenuto' , fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'icon', label_trans: 'event.icon' , fieldtype: tools.FieldType.string }),
AddCol({ name: 'color', label_trans: 'event.color' , fieldtype: tools.FieldType.string }),
AddCol({ name: 'id_conf_zoom', label_trans: 'zoom.id_conf_zooom' }), AddCol({ name: 'id_conf_zoom', label_trans: 'zoom.id_conf_zooom' }),
AddCol({ name: 'note', label_trans: 'zoom.note' }), AddCol({ name: 'note', label_trans: 'zoom.note' }),
AddCol(DeleteRec), AddCol(DeleteRec),
@@ -453,7 +458,10 @@ export const fieldsTable = {
], ],
colTableUsersBase: [ colTableUsersBase: [
AddCol({ name: 'index', label_trans: 'reg.index' }),
AddCol({ name: 'ind_order', label_trans: 'reg.ind_order' }), AddCol({ name: 'ind_order', label_trans: 'reg.ind_order' }),
AddCol({ name: 'sospeso', label_trans: 'reg.sospeso', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'deleted', label_trans: 'reg.deleted', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'date_reg', label_trans: 'reg.date_reg', fieldtype: tools.FieldType.date }), AddCol({ name: 'date_reg', label_trans: 'reg.date_reg', fieldtype: tools.FieldType.date }),
AddCol({ name: 'username', label_trans: 'reg.username_short' }), AddCol({ name: 'username', label_trans: 'reg.username_short' }),
AddCol({ name: 'name', label_trans: 'reg.name' }), AddCol({ name: 'name', label_trans: 'reg.name' }),
@@ -470,37 +478,41 @@ export const fieldsTable = {
// IColGridTable // IColGridTable
colTableUsers: [ colTableUsers: [
AddCol({ name: '_id', label_trans: 'reg.id' }), AddCol({ name: '_id', label_trans: 'reg.id' }),
AddCol({ name: 'index', label_trans: 'reg.index', fieldtype: tools.FieldType.number }),
AddCol({ name: 'ind_order', label_trans: 'reg.ind_order' }), AddCol({ name: 'ind_order', label_trans: 'reg.ind_order' }),
AddCol({ name: 'date_reg', label_trans: 'reg.date_reg', fieldtype: tools.FieldType.date }), AddCol({ name: 'old_order', label_trans: 'old_order' }),
AddCol({ name: 'date_temp_reg', label_trans: 'reg.date_temp_reg', fieldtype: tools.FieldType.date }), AddCol({ name: 'sospeso', label_trans: 'reg.sospeso', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'deleted', label_trans: 'reg.deleted', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'username', label_trans: 'reg.username_short' }), AddCol({ name: 'username', label_trans: 'reg.username_short' }),
AddCol({ name: 'username_main', label_trans: 'reg.username_main' }),
AddCol({ name: 'name', label_trans: 'reg.name' }), AddCol({ name: 'name', label_trans: 'reg.name' }),
AddCol({ name: 'surname', label_trans: 'reg.surname' }), AddCol({ name: 'surname', label_trans: 'reg.surname' }),
AddCol({ name: 'email', label_trans: 'reg.email' }), AddCol({ name: 'email', label_trans: 'reg.email' }),
AddCol({ name: 'made_gift', label_trans: 'reg.made_gift', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'note', label_trans: 'reg.note' }),
AddCol({ name: 'aportador_solidario_ind_order', label_trans: 'reg.aportador_solidario_ind_order' }),
AddCol({ name: 'aportador_solidario_nome_completo', label_trans: 'reg.aportador_solidario_nome_completo' }),
AddCol({ name: 'aportador_solidario', label_trans: 'reg.aportador_solidario' }),
AddCol({ name: 'verified_email', label_trans: 'reg.verified_email', fieldtype: tools.FieldType.boolean }), AddCol({ name: 'verified_email', label_trans: 'reg.verified_email', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'profile.teleg_id', field: 'profile', subfield: 'teleg_id', label_trans: 'reg.teleg_id' }),
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.saw_zoom_presentation', field: 'profile', subfield: 'saw_zoom_presentation', label_trans: 'reg.saw_zoom_presentation', 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.my_dream', field: 'profile', subfield: 'my_dream', label_trans: 'reg.my_dream' }),
AddCol({ name: 'profile.email_paypal', field: 'profile', subfield: 'email_paypal', label_trans: 'reg.email_paypal' }),
AddCol({ name: 'profile.paymenttypes', field: 'profile', subfield: 'paymenttypes', label_trans: 'reg.paymenttype', fieldtype: tools.FieldType.multiselect, jointable: 'paymenttypes' }),
// AddCol({ name: 'made_gift', label_trans: 'reg.made_gift', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'note', label_trans: 'reg.note' }),
// AddCol({ name: 'aportador_solidario_ind_order', label_trans: 'reg.aportador_solidario_ind_order' }),
// AddCol({ name: 'aportador_solidario_nome_completo', label_trans: 'reg.aportador_solidario_nome_completo' }),
AddCol({ name: 'aportador_solidario', label_trans: 'reg.aportador_solidario' }),
AddCol({ name: 'profile.special_req', field: 'profile', subfield: 'special_req', label_trans: 'reg.special_req', fieldtype: tools.FieldType.boolean }), AddCol({ name: 'profile.special_req', field: 'profile', subfield: 'special_req', label_trans: 'reg.special_req', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'profile.vuole_ritessersi', field: 'profile', subfield: 'vuole_ritessersi', label_trans: 'reg.vuole_ritessersi', fieldtype: tools.FieldType.boolean }), AddCol({ name: 'profile.vuole_ritessersi', field: 'profile', subfield: 'vuole_ritessersi', label_trans: 'reg.vuole_ritessersi', 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: 'lang', field: 'lang', label_trans: 'reg.lang' }), AddCol({ name: 'lang', field: 'lang', label_trans: 'reg.lang' }),
AddCol({ name: 'profile.nationality', field: 'profile', subfield: 'nationality', label_trans: 'reg.nationality' }), 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' }), AddCol({ name: 'profile.intcode_cell', field: 'profile', subfield: 'intcode_cell', label_trans: 'reg.intcode_cell' }),
AddCol({ name: 'profile.iso2_cell', field: 'profile', subfield: 'iso2_cell', label_trans: 'reg.iso2_cell' }), AddCol({ name: 'profile.iso2_cell', field: 'profile', subfield: 'iso2_cell', label_trans: 'reg.iso2_cell' }),
AddCol({ name: 'profile.cell', field: 'profile', subfield: 'cell', label_trans: 'reg.cell' }), AddCol({ name: 'profile.cell', field: 'profile', subfield: 'cell', label_trans: 'reg.cell' }),
AddCol({ name: 'profile.email_paypal', field: 'profile', subfield: 'email_paypal', label_trans: 'reg.email_paypal' }),
AddCol({ name: 'profile.country_pay', field: 'profile', subfield: 'country_pay', label_trans: 'reg.country_pay' }), AddCol({ name: 'profile.country_pay', field: 'profile', subfield: 'country_pay', label_trans: 'reg.country_pay' }),
AddCol({ name: 'profile.teleg_id', field: 'profile', subfield: 'teleg_id', label_trans: 'reg.teleg_id' }),
AddCol({ name: 'profile.teleg_id_old', field: 'profile', subfield: 'teleg_id_old', label_trans: 'reg.teleg_id_old' }), AddCol({ name: 'profile.teleg_id_old', field: 'profile', subfield: 'teleg_id_old', label_trans: 'reg.teleg_id_old' }),
AddCol({ name: 'profile.teleg_checkcode', field: 'profile', subfield: 'teleg_checkcode', label_trans: 'reg.teleg_checkcode' }), AddCol({ name: 'profile.teleg_checkcode', field: 'profile', subfield: 'teleg_checkcode', label_trans: 'reg.teleg_checkcode' }),
AddCol({ name: 'profile.manage_telegram', field: 'profile', subfield: 'manage_telegram', label_trans: 'reg.manage_telegram', fieldtype: tools.FieldType.boolean }), AddCol({ name: 'profile.manage_telegram', field: 'profile', subfield: 'manage_telegram', label_trans: 'reg.manage_telegram', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'profile.paymenttypes', field: 'profile', subfield: 'paymenttypes', label_trans: 'reg.paymenttype', fieldtype: tools.FieldType.multiselect, jointable: 'paymenttypes' }),
AddCol({ name: 'profile.img', field: 'profile', subfield: 'img', label_trans: 'reg.img', sortable: false }), AddCol({ name: 'profile.img', field: 'profile', subfield: 'img', label_trans: 'reg.img', sortable: false }),
AddCol({ name: 'date_reg', label_trans: 'reg.date_reg', fieldtype: tools.FieldType.date }),
AddCol({ name: 'lasttimeonline', label_trans: 'reg.lasttimeonline', fieldtype: tools.FieldType.date }), AddCol({ name: 'lasttimeonline', label_trans: 'reg.lasttimeonline', fieldtype: tools.FieldType.date }),
// AddCol({ name: 'idapp', label_trans: 'reg.idapp', fieldtype: tools.FieldType.string }), // AddCol({ name: 'idapp', label_trans: 'reg.idapp', fieldtype: tools.FieldType.string }),
AddCol({ name: 'perm', label_trans: 'reg.perm', fieldtype: tools.FieldType.binary, jointable: 'permissions' }), AddCol({ name: 'perm', label_trans: 'reg.perm', fieldtype: tools.FieldType.binary, jointable: 'permissions' }),
@@ -510,9 +522,10 @@ export const fieldsTable = {
], ],
colTableUsersSIP: [ colTableUsersSIP: [
AddCol({ name: '_id', label_trans: 'reg.id' }), // AddCol({ name: '_id', label_trans: 'reg.id' }),
AddCol({ name: 'ind_order', label_trans: 'reg.ind_order' }), AddCol({ name: 'ind_order', label_trans: 'reg.ind_order' }),
AddCol({ name: 'date_reg', label_trans: 'reg.date_reg', fieldtype: tools.FieldType.date }), AddCol({ name: 'sospeso', label_trans: 'reg.sospeso', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'deleted', label_trans: 'reg.deleted', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'username', label_trans: 'reg.username_short' }), AddCol({ name: 'username', label_trans: 'reg.username_short' }),
AddCol({ name: 'name', label_trans: 'reg.name' }), AddCol({ name: 'name', label_trans: 'reg.name' }),
AddCol({ name: 'surname', label_trans: 'reg.surname' }), AddCol({ name: 'surname', label_trans: 'reg.surname' }),
@@ -534,8 +547,12 @@ export const fieldsTable = {
AddCol({ name: 'profile.teleg_id_old', field: 'profile', subfield: 'teleg_id_old', label_trans: 'reg.teleg_id_old' }), AddCol({ name: 'profile.teleg_id_old', field: 'profile', subfield: 'teleg_id_old', label_trans: 'reg.teleg_id_old' }),
AddCol({ name: 'profile.teleg_checkcode', field: 'profile', subfield: 'teleg_checkcode', label_trans: 'reg.teleg_checkcode' }), AddCol({ name: 'profile.teleg_checkcode', field: 'profile', subfield: 'teleg_checkcode', label_trans: 'reg.teleg_checkcode' }),
AddCol({ name: 'profile.manage_telegram', field: 'profile', subfield: 'manage_telegram', label_trans: 'reg.manage_telegram', fieldtype: tools.FieldType.boolean }), AddCol({ name: 'profile.manage_telegram', field: 'profile', subfield: 'manage_telegram', label_trans: 'reg.manage_telegram', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'profile.chisei', field: 'profile', subfield: 'chisei', label_trans: 'reg.chisei' }),
AddCol({ name: 'profile.iltuoimpegno', field: 'profile', subfield: 'iltuoimpegno', label_trans: 'reg.iltuoimpegno' }),
AddCol({ name: 'profile.come_aiutare', field: 'profile', subfield: 'come_aiutare', label_trans: 'reg.iltuoimpegno' }),
AddCol({ name: 'profile.paymenttypes', field: 'profile', subfield: 'paymenttypes', label_trans: 'reg.paymenttype', fieldtype: tools.FieldType.multiselect, jointable: 'paymenttypes' }), AddCol({ name: 'profile.paymenttypes', field: 'profile', subfield: 'paymenttypes', label_trans: 'reg.paymenttype', fieldtype: tools.FieldType.multiselect, jointable: 'paymenttypes' }),
AddCol({ name: 'profile.img', field: 'profile', subfield: 'img', label_trans: 'reg.img', sortable: false }), AddCol({ name: 'profile.img', field: 'profile', subfield: 'img', label_trans: 'reg.img', sortable: false }),
AddCol({ name: 'date_reg', label_trans: 'reg.date_reg', fieldtype: tools.FieldType.date }),
AddCol({ name: 'lasttimeonline', label_trans: 'reg.lasttimeonline', fieldtype: tools.FieldType.date }), AddCol({ name: 'lasttimeonline', label_trans: 'reg.lasttimeonline', fieldtype: tools.FieldType.date }),
// AddCol({ name: 'idapp', label_trans: 'reg.idapp', fieldtype: tools.FieldType.string }), // AddCol({ name: 'idapp', label_trans: 'reg.idapp', fieldtype: tools.FieldType.string }),
AddCol({ name: 'perm', label_trans: 'reg.perm', fieldtype: tools.FieldType.binary, jointable: 'permissions' }), AddCol({ name: 'perm', label_trans: 'reg.perm', fieldtype: tools.FieldType.binary, jointable: 'permissions' }),
@@ -625,7 +642,7 @@ export const fieldsTable = {
label: 'Lista Ingresso', label: 'Lista Ingresso',
columns: collistaingresso, columns: collistaingresso,
colkey: '_id', colkey: '_id',
collabel: 'indprimario', collabel: 'ind_order',
}, },
{ {
value: 'disciplines', value: 'disciplines',

View File

@@ -21,10 +21,14 @@ export const lists = {
DELETE_EXTRALIST: 330, DELETE_EXTRALIST: 330,
DELETE_USERLIST: 335, DELETE_USERLIST: 335,
REGALA_INVITATO: 340, REGALA_INVITATO: 340,
REGALA_INVITANTE: 342,
SOSTITUISCI: 345,
INVIA_MSG_A_DONATORI: 350, INVIA_MSG_A_DONATORI: 350,
INVIA_MSG_A_SINGOLO: 355, INVIA_MSG_A_SINGOLO: 355,
DONO_INVIATO: 360, DONO_INVIATO: 360,
DONO_RICEVUTO: 370, DONO_RICEVUTO: 370,
AGGIUNGI_NUOVO_IMBARCO: 380,
CANCELLA_IMBARCO: 385,
CAN_EDIT_TABLE: 400, CAN_EDIT_TABLE: 400,
SHOW_PREV_REC: 401 SHOW_PREV_REC: 401

View File

@@ -40,6 +40,7 @@ const { height, width } = dom
import Cookies from 'js-cookie' import Cookies from 'js-cookie'
import { forEachComment } from 'tslint' import { forEachComment } from 'tslint'
import messages from '@src/statics/i18n'
const TokenKey = 'Admin-Token' const TokenKey = 'Admin-Token'
@@ -51,6 +52,7 @@ export interface INotify {
export const tools = { export const tools = {
CAN_EDIT: 'q-ce', CAN_EDIT: 'q-ce',
TABBED_DASHBOARD: 't-db',
getprefCountries: ['it', 'si', 'us', 'es', 'pt', 'uk', 'fr', 'de', 'ch', 'br', 'sk'], getprefCountries: ['it', 'si', 'us', 'es', 'pt', 'uk', 'fr', 'de', 'ch', 'br', 'sk'],
@@ -58,6 +60,9 @@ export const tools = {
APORTADOR_SOLIDARIO: 'apsol', APORTADOR_SOLIDARIO: 'apsol',
IDAPP_AYNI: '7',
IDAPP_SIP: '9',
TipoMsg: { TipoMsg: {
SEND_LINK_CHAT_DONATORI: 1, SEND_LINK_CHAT_DONATORI: 1,
SEND_MSG: 2, SEND_MSG: 2,
@@ -83,6 +88,7 @@ export const tools = {
TABUSER: 'users', TABUSER: 'users',
TABNAVI: 'navi', TABNAVI: 'navi',
TABLISTAINGRESSO: 'listaingressos',
TABEVENTS: 'myevents', TABEVENTS: 'myevents',
TABEXTRALIST: 'extralist', TABEXTRALIST: 'extralist',
TABNEWSLETTER: 'newstosent', TABNEWSLETTER: 'newstosent',
@@ -1157,7 +1163,7 @@ export const tools = {
getItemLS(item) { getItemLS(item) {
let ris = localStorage.getItem(item) let ris = localStorage.getItem(item)
if ((ris == null) || (ris === '') || (ris === 'null')) { if ((ris == null) || (ris === '') || (ris === 'null') || !ris) {
ris = '' ris = ''
} }
@@ -1408,8 +1414,8 @@ export const tools = {
visumenu(elem) { // : IListRoutes visumenu(elem) { // : IListRoutes
let visu = ((elem.onlyAdmin && UserStore.state.isAdmin) || (elem.onlyManager && UserStore.state.isManager) let visu = ((elem.onlyAdmin && UserStore.state.isAdmin) || (elem.onlyManager && UserStore.state.isManager)
|| (elem.onlyTutor && UserStore.state.isTutor) || (elem.onlyTutor && UserStore.state.isTutor) || (elem.onlyTraduttrici && UserStore.state.isTraduttrici)
|| ((!elem.onlyAdmin) && (!elem.onlyManager) && (!elem.onlyTutor))) && elem.active || ((!elem.onlyAdmin) && (!elem.onlyManager) && (!elem.onlyTutor) && (!elem.onlyTraduttrici))) && elem.active
if (!tools.isLoggedToSystem()) { if (!tools.isLoggedToSystem()) {
if (elem.onlyif_logged) if (elem.onlyif_logged)
@@ -1466,21 +1472,116 @@ export const tools = {
}) })
} else if (func === lists.MenuAction.REGALA_INVITATO) { } else if (func === lists.MenuAction.REGALA_INVITATO) {
// console.log('param1', par.param1, 'id', par.param1._id) // console.log('param1', par.param1, 'id', par.param1._id)
const mydatatosave = { let mydatatosave = {
id: null,
username: '',
table: '',
fieldsvalue: {},
notifBot: {}
};
if (!!par.param1.invitante_username) {
mydatatosave = {
id: par.param1._id, id: par.param1._id,
username: par.param1.username,
table: tools.TABLISTAINGRESSO,
fieldsvalue: { invitante_username: par.param2.aportador_solidario },
notifBot: null
}
} else {
mydatatosave = {
id: par.param1._id,
username: '',
table: tools.TABUSER, table: tools.TABUSER,
fieldsvalue: { aportador_solidario: par.param2 }, fieldsvalue: { aportador_solidario: par.param2.aportador_solidario },
notifBot: null
}
}
console.log('** par.param1', par.param1)
console.log('** id', par.param1._id)
if (par.param3) {
mydatatosave.notifBot = { un: par.param2.aportador_solidario, txt: par.param3 }
}
GlobalStore.actions.saveFieldValue(mydatatosave).then((ris) => {
console.log('ris saveFieldValue', ris)
if (ris) {
tools.showPositiveNotif(myself.$q, myself.$t('reg.invitato_regalato') + ' "' + par.param1.name + ' ' + par.param1.surname + '"')
myself.update_username()
} else
tools.showNegativeNotif(myself.$q, myself.$t('db.recfailed'))
})
} else if (func === lists.MenuAction.REGALA_INVITANTE) {
// console.log('param1', par.param1, 'id', par.param1._id)
const mydatatosave = {
id: par.param1,
table: tools.TABLISTAINGRESSO,
fieldsvalue: { invitante_username: par.param2.invitante_username, ind_order_ingr: par.param2.ind_order_ingr },
notifBot: null notifBot: null
} }
if (par.param3) { if (par.param3) {
mydatatosave.notifBot = { un: par.param2, txt: par.param3 } mydatatosave.notifBot = { un: par.param2.invitante_username, txt: par.param3 }
} }
GlobalStore.actions.saveFieldValue(mydatatosave).then((ris) => { GlobalStore.actions.saveFieldValue(mydatatosave).then((ris) => {
console.log('ris saveFieldValue', ris)
if (ris) {
tools.showPositiveNotif(myself.$q, myself.$t('reg.invitato_regalato') + ' "' + par.param1.name + ' ' + par.param1.surname + '"')
myself.update_username()
} else
tools.showNegativeNotif(myself.$q, myself.$t('db.recfailed'))
})
} else if ((func === lists.MenuAction.AGGIUNGI_NUOVO_IMBARCO) || (func === lists.MenuAction.CANCELLA_IMBARCO)) {
const mydatatosave = {
username: par.param1.username,
invitante_username: '',
ind_order: -1,
myfunc: func,
data: par.param2,
notifBot: null
}
if (func === lists.MenuAction.CANCELLA_IMBARCO) {
mydatatosave.ind_order = par.param1.ind_order
}
if (func === lists.MenuAction.AGGIUNGI_NUOVO_IMBARCO) {
mydatatosave.invitante_username = par.param1.invitante_username
}
myself.loading = true
mydatatosave.notifBot = { un: par.param2, txt: par.param3 }
GlobalStore.actions.callFunz({ mydata: mydatatosave }).then((ris) => {
myself.loading = false
if (ris) { if (ris) {
myself.update_username() myself.update_username()
tools.showPositiveNotif(myself.$q, myself.$t('reg.invitato_regalato') + ' "' + par.param1.name + ' ' + par.param1.surname + '"') if (func === lists.MenuAction.AGGIUNGI_NUOVO_IMBARCO)
tools.showPositiveNotif(myself.$q, myself.$t('steps.sei_stato_aggiunto'))
else if (func === lists.MenuAction.CANCELLA_IMBARCO)
tools.showPositiveNotif(myself.$q, myself.$t('event.deleted'))
} else
tools.showNegativeNotif(myself.$q, myself.$t('db.recfailed'))
})
} else if (func === lists.MenuAction.SOSTITUISCI) {
// console.log('param1', par.param1, 'id', par.param1._id)
const mydatatosave = {
id: par.param1._id,
ind_order: par.param1.ind_order,
myfunc: func,
data: par.param2,
notifBot: null
}
mydatatosave.notifBot = { un: par.param2, txt: par.param3 }
GlobalStore.actions.callFunz({ mydata: mydatatosave }).then((ris) => {
if (ris) {
myself.update_nave()
tools.showPositiveNotif(myself.$q, par.param3 + '\n' + ' e inviato messaggio per aprire la Gift Chat!')
} else } else
tools.showNegativeNotif(myself.$q, myself.$t('db.recfailed')) tools.showNegativeNotif(myself.$q, myself.$t('db.recfailed'))
}) })
@@ -1552,7 +1653,7 @@ export const tools = {
const mydatatosave = { const mydatatosave = {
id: par.param1._id, id: par.param1._id,
table: tools.TABNAVI, table: tools.TABNAVI,
fieldsvalue: { made_gift: par.param1.made_gift }, fieldsvalue: { made_gift: par.param1.made_gift, riga: par.param1.riga, col: par.param1.col },
notifBot: null notifBot: null
} }
@@ -1591,6 +1692,7 @@ export const tools = {
async askConfirm($q: any, mytitle, mytext, ok, cancel, myself: any, table, funcok: number, funccancel: number, par: IParamDialog) { async askConfirm($q: any, mytitle, mytext, ok, cancel, myself: any, table, funcok: number, funccancel: number, par: IParamDialog) {
return $q.dialog({ return $q.dialog({
message: mytext, message: mytext,
html: true,
ok: { ok: {
label: ok, label: ok,
push: true push: true
@@ -1663,12 +1765,14 @@ export const tools = {
, ,
checkLangPassed(mylang) { checkLangPassed(mylang) {
// console.log('checkLangPassed') console.log('checkLangPassed ', mylang)
const mybrowserLang = Quasar.lang.isoName const mybrowserLang = Quasar.lang.isoName
if (mylang !== '') { if (mylang !== '') {
if ((mylang.toLowerCase() === 'enus') || (mylang.toLowerCase() === 'en-us')) { if ((mylang.toLowerCase() === 'enus') || (mylang.toLowerCase() === 'en-us') || (mylang.toLowerCase() === 'uk')
|| (mylang.toLowerCase() === 'uk-uk') || (mylang.toLowerCase() === 'en-uk') || (mylang.toLowerCase() === 'en-gb')
|| (mylang.toLowerCase() === 'gb-gb')) {
mylang = 'enUs' mylang = 'enUs'
} }
if ((mylang.toLowerCase() === 'es') || (mylang.toLowerCase() === 'es-es') || (mylang.toLowerCase() === 'eses')) { if ((mylang.toLowerCase() === 'es') || (mylang.toLowerCase() === 'es-es') || (mylang.toLowerCase() === 'eses')) {
@@ -1698,6 +1802,7 @@ export const tools = {
if (!mylang) { if (!mylang) {
mylang = process.env.LANG_DEFAULT mylang = process.env.LANG_DEFAULT
console.log('LANG DEFAULT: ', mylang)
} }
if (toolsext.getLocale(true) === '') { if (toolsext.getLocale(true) === '') {
@@ -1889,6 +1994,10 @@ export const tools = {
return UserStore.state.isTutor return UserStore.state.isTutor
}, },
isTraduttrici() {
return UserStore.state.isTraduttrici
},
getstrDate(mytimestamp) { getstrDate(mytimestamp) {
// console.log('getstrDate', mytimestamp) // console.log('getstrDate', mytimestamp)
if (!!mytimestamp) if (!!mytimestamp)
@@ -1913,6 +2022,14 @@ export const tools = {
return '' return ''
}, },
getstrshortDayDateTime(mytimestamp) {
// console.log('getstrDate', mytimestamp)
if (!!mytimestamp)
return date.formatDate(mytimestamp, 'DD HH:mm')
else
return ''
},
getstrTime(mytimestamp) { getstrTime(mytimestamp) {
// console.log('getstrDate', mytimestamp) // console.log('getstrDate', mytimestamp)
if (!!mytimestamp) if (!!mytimestamp)
@@ -2346,15 +2463,16 @@ export const tools = {
} }
, ,
askfornotification() { askfornotification(mythis) {
tools.showNotif(this.$q, this.$t('notification.waitingconfirm'), { color: 'positive', icon: 'notifications' }) console.log('askfornotification')
tools.showNotif(mythis.$q, mythis.$t('notification.waitingconfirm'), { color: 'positive', icon: 'notifications' })
Notification.requestPermission((result) => { Notification.requestPermission((result) => {
console.log('User Choice', result) console.log('User Choice', result)
if (result === 'granted') { if (result === 'granted') {
tools.showNotif(this.$q, this.$t('notification.confirmed'), { color: 'positive', icon: 'notifications' }) tools.showNotif(mythis.$q, mythis.$t('notification.confirmed'), { color: 'positive', icon: 'notifications' })
} else { } else {
tools.showNotif(this.$q, this.$t('notification.denied'), { color: 'negative', icon: 'notifications' }) tools.showNotif(mythis.$q, mythis.$t('notification.denied'), { color: 'negative', icon: 'notifications' })
// displayConfirmNotification(); // displayConfirmNotification();
} }
@@ -2843,7 +2961,7 @@ export const tools = {
tools.showNotif(mythis.$q, msg) tools.showNotif(mythis.$q, msg)
} else if (riscode === tools.OK) { } else if (riscode === tools.OK) {
mythis.$router.push('/regok') mythis.$router.push('/regok')
tools.showNotif(mythis.$q, mythis.$t('components.authentication.email_verification.link_sent', {botname: mythis.$t('ws.botname') }), { tools.showNotif(mythis.$q, mythis.$t('components.authentication.email_verification.link_sent', { botname: mythis.$t('ws.botname') }), {
color: 'green', color: 'green',
textColor: 'black' textColor: 'black'
}) })
@@ -3425,14 +3543,40 @@ export const tools = {
return val return val
}, },
translate(params, options?) {
const msg = params.split('.')
const lang = toolsext.getLocale()
const stringa = messages[lang]
let ris = stringa
if (!!ris) {
msg.forEach((param) => {
ris = ris[param]
})
if (!!options) {
ris = this.myprintf(ris, options)
}
} else {
console.log('ERRORE IN TRANSLATE! ', params, ' NON ESISTE!')
return params
}
return ris
},
isPayPalSel(user) { isPayPalSel(user) {
let ispaypal = false let ispaypal = false
if (user.profile.paymenttypes) { if (user.profile.paymenttypes) {
if (user.profile.paymenttypes.includes('paypal')) { if (user.profile.paymenttypes.includes('paypal')) {
if (user.email_paypal !== '') if (!!user.profile.email_paypal) {
if (user.profile.email_paypal !== '')
ispaypal = true ispaypal = true
} }
} }
}
return ispaypal return ispaypal
}, },
@@ -3455,6 +3599,109 @@ export const tools = {
return this.getnumrequisiti(user) === 7 return this.getnumrequisiti(user) === 7
}, },
getRiganave(riga) {
let ris = riga - 3
if (ris <= 1)
ris = 1
return ris
},
getColnave(col) {
let ris = Math.ceil(col / (2 * 4))
if (ris <= 1)
ris = 1
return ris
},
getrigacolstr(mianave) {
return this.getRiganave(mianave.riga) + '.' + this.getColnave(mianave.col)
},
getmaxcol(riga) {
return Math.pow(2, riga - 1)
},
getrigaNaveByPosiz(riga) {
let ris = riga + 3
if (ris <= 1)
ris = 1
return ris
},
getcolNaveByPosiz(col) {
let ris = Math.ceil(col * Math.pow(2, 3) / (2 * 4))
if (ris <= 1)
ris = 1
return ris
},
getfirstnaveSognatore(riga, col) {
const myriga = this.getrigaNaveByPosiz(riga)
const mycol = this.getcolNaveByPosiz(col)
return { riga: myriga, col: mycol }
},
getnumnavi_finoa(naveorig, navedest, lastnave) {
let contaattuale = 0
let contatot = 0
const indrigaattuale = lastnave.riga
const indcolattuale = lastnave.col
if (navedest.riga < indrigaattuale) {
return { perc: 100, totale: 0, contaattuale: 0 }
}
for (let indriga = naveorig.riga; indriga <= navedest.riga; indriga++) {
let startcol = 0
if (indriga === naveorig.riga) {
startcol = naveorig.col
}
let endcol = this.getmaxcol(indriga)
if (indriga === navedest.riga) {
endcol = navedest.col
}
if (indriga <= navedest.riga) {
contatot += (endcol - startcol)
}
if (indriga < indrigaattuale) {
contaattuale += (endcol - startcol)
} else if (indriga === indrigaattuale) {
contaattuale += indcolattuale
}
}
let perc = 0
if (contatot > 0)
perc = (contaattuale / contatot) * 100
if (perc > 100)
perc = 100
console.log('naveorig', naveorig.riga, '.', naveorig.col, 'dest', navedest.riga, ',', navedest.col)
console.log('lastnave', lastnave.riga, '.', lastnave.col)
console.log('contaattuale', contaattuale, 'contatot', contatot, 'perc', perc)
return { perc, totale: contatot, contaattuale }
},
sito_online(pertutti) {
let ris = true
const online = this.getValDb('SITO_ONLINE', false, true)
ris = UserStore.state.isAdmin && !pertutti ? true : online
// console.log('isadmin', UserStore.state.isAdmin)
return ris
}
// getLocale() { // getLocale() {
// if (navigator.languages && navigator.languages.length > 0) { // if (navigator.languages && navigator.languages.length > 0) {

View File

@@ -25,11 +25,12 @@ export default class CfgServer extends Vue {
field: 'chiave', field: 'chiave',
sortable: true sortable: true
}, },
{ name: 'idapp', label: 'idapp', field: 'idapp', sortable: true },
{ name: 'userid', label: 'UserId', field: 'userid', sortable: false }, { name: 'userid', label: 'UserId', field: 'userid', sortable: false },
{ name: 'valore', label: 'Valore', field: 'valore', sortable: false } { name: 'valore', label: 'Valore', field: 'valore', sortable: false }
] ]
public colVisib: ['chiave', 'userid', 'valore'] public colVisib: ['chiave', 'idapp', 'userid', 'valore']
public separator: 'horizontal' public separator: 'horizontal'
public filter: string = '' public filter: string = ''
public selected: any[] = [] public selected: any[] = []
@@ -57,8 +58,10 @@ export default class CfgServer extends Vue {
const mydata = { const mydata = {
chiave: this.keysel, chiave: this.keysel,
userId: this.userIdsel, userId: this.userIdsel,
valore: newVal valore: newVal,
idapp: process.env.APP_ID
} }
// Save on Server // Save on Server
GlobalStore.actions.saveCfgServerKey(mydata) GlobalStore.actions.saveCfgServerKey(mydata)
} }

View File

@@ -15,6 +15,14 @@
</q-field> </q-field>
</q-popup-edit> </q-popup-edit>
</q-td> </q-td>
<q-td key="idapp" :props="props">
{{ props.row.idapp }}
<q-popup-edit v-model="props.row.idapp" disable>
<q-field count>
<q-input v-model="props.row.idapp" />
</q-field>
</q-popup-edit>
</q-td>
<q-td key="userid" :props="props"> <q-td key="userid" :props="props">
{{ props.row.userId }} {{ props.row.userId }}
<q-popup-edit v-model="props.row.userId" disable> <q-popup-edit v-model="props.row.userId" disable>

View File

@@ -63,7 +63,7 @@ export default class Dbop extends Vue {
this.placca = ris.placca this.placca = ris.placca
} else if (miafunz === 'visuListaIngresso' || miafunz === 'visuListaIngressoNuovi' || miafunz === 'visuNaviUtentiEliminati' } else if (miafunz === 'visuListaIngresso' || miafunz === 'visuListaIngressoNuovi' || miafunz === 'visuNaviUtentiEliminati'
|| miafunz === 'visuListaNave' || miafunz === 'visuNave' || miafunz === 'creaNavi' || miafunz === 'visuListaNave' || miafunz === 'visuNave' || miafunz === 'creaNavi'
|| (miafunz === 'visuUtentiNonInNavi')) { || (miafunz === 'visuStat')) {
this.placca = ris.mystr this.placca = ris.mystr
} else { } else {
this.ris = ris this.ris = ris

View File

@@ -2,6 +2,17 @@
<div> <div>
<CTitleBanner title="Operazioni su DB:"></CTitleBanner> <CTitleBanner title="Operazioni su DB:"></CTitleBanner>
<div class="row justify-center q-gutter-sm q-list--bordered center_img" style="max-width: 600px"> <div class="row justify-center q-gutter-sm q-list--bordered center_img" style="max-width: 600px">
<CMyFieldDb title="SITO_ONLINE"
mykey="SITO_ONLINE"
:serv="false"
:type="tools.FieldType.boolean">
</CMyFieldDb>
<br>
<div class="row">
<q-btn label="Crea Utenti Test" color="primary" @click="EseguiFunz('creaUtentiTest')"></q-btn><br>
</div>
<!--<div class="row"> <!--<div class="row">
<q-btn label="Passa i codici Telefoni sul campo cell" color="primary" <q-btn label="Passa i codici Telefoni sul campo cell" color="primary"
@click="EseguiFunz('changeCellInt')"></q-btn> @click="EseguiFunz('changeCellInt')"></q-btn>
@@ -10,9 +21,6 @@
<q-btn label="Trasforma le email tutte in minuscolo" color="primary" <q-btn label="Trasforma le email tutte in minuscolo" color="primary"
@click="EseguiFunz('changeEmailLowerCase')"></q-btn> @click="EseguiFunz('changeEmailLowerCase')"></q-btn>
<br></div> <br></div>
<div class="row">
<q-btn label="Crea Utenti Test" color="primary" @click="EseguiFunz('creaUtentiTest')"></q-btn><br>
</div>
<div class="row"> <div class="row">
<q-btn label="IMPOSTARE A TUTTI PAYPAL" color="primary" @click="EseguiFunz('ImpostaATuttiPaypal')"></q-btn><br> <q-btn label="IMPOSTARE A TUTTI PAYPAL" color="primary" @click="EseguiFunz('ImpostaATuttiPaypal')"></q-btn><br>
</div> </div>
@@ -49,16 +57,16 @@
<q-btn label="Elimina Navi Provvisorie" color="negative" <q-btn label="Elimina Navi Provvisorie" color="negative"
@click="EseguiFunz('delNaviProvvisorie')"></q-btn> @click="EseguiFunz('delNaviProvvisorie')"></q-btn>
<q-btn label="Crea ListaIngresso" color="positive" @click="EseguiFunz('creaLista')"></q-btn> <!--<q-btn label="Crea ListaIngresso" color="positive" @click="EseguiFunz('creaLista')"></q-btn>-->
</div> </div>
<div class="q-pa-sm"> <div class="q-pa-sm row">
<CDateTime <CDateTime
:value.sync="date_start" :value.sync="date_start"
:label="$t('cal.eventstartdatetime')" :label="$t('cal.eventstartdatetime')"
:readonly="false"> :readonly="false">
</CDateTime> </CDateTime>
<q-input v-model="numpersone" type="number" autofocus label="Num Persone to Add" <q-input v-model="numpersone" type="number" autofocus label="Num Persone to Add"
style="width: 50px;"></q-input> style="width: 100px;"></q-input>
<q-btn label="Crea Navi" color="primary" @click="EseguiFunz('creaNavi')"></q-btn> <q-btn label="Crea Navi" color="primary" @click="EseguiFunz('creaNavi')"></q-btn>
</div> </div>
<div v-if="!incaricamento" class="row"> <div v-if="!incaricamento" class="row">
@@ -72,7 +80,7 @@
:serv="false" :serv="false"
:type="tools.FieldType.number"> :type="tools.FieldType.number">
</CMyFieldDb> </CMyFieldDb>
<CMyFieldDb title="Riga Doni" <!--<CMyFieldDb title="Riga Doni"
mykey="rigadoni" mykey="rigadoni"
:serv="false" :serv="false"
:type="tools.FieldType.number"> :type="tools.FieldType.number">
@@ -81,7 +89,7 @@
mykey="coldoni" mykey="coldoni"
:serv="false" :serv="false"
:type="tools.FieldType.number"> :type="tools.FieldType.number">
</CMyFieldDb> </CMyFieldDb>-->
<CMyFieldDb title="Visu_TEST" <CMyFieldDb title="Visu_TEST"
mykey="VISU_TEST" mykey="VISU_TEST"
:serv="false" :serv="false"
@@ -95,7 +103,7 @@
</div> </div>
<div class="row"> <div class="row">
<q-btn label="Statistiche" color="warning" @click="EseguiFunz('visuUtentiNonInNavi')"></q-btn> <q-btn label="Statistiche" color="warning" @click="EseguiFunz('visuStat')"></q-btn>
</div> </div>
@@ -119,6 +127,15 @@
<q-btn label="Visu Navi con utenti Eliminati" color="primary" <q-btn label="Visu Navi con utenti Eliminati" color="primary"
@click="EseguiFunz('visuNaviUtentiEliminati')"></q-btn> @click="EseguiFunz('visuNaviUtentiEliminati')"></q-btn>
<br> <br>
<div class="row">
<q-btn label="1) CONVERTI TUTTA LA STRUTTURA NEL NUOVO SISTEMA !" color="negative"
@click="EseguiFunz('creaTessituraeConv')"></q-btn>
<br>
</div>
<div class="row">
<q-btn label="2) CONVERTI Navi Num_Tess 3 e 5 in Record di ListaIngresso" color="negative" @click="EseguiFunz('convNaviTessinListaIngressoRec')"></q-btn><br>
</div>
<br>
<!--<div class="row"> <!--<div class="row">
<q-btn label="CHECK SE INSERIRE UTENTI IN Nave" color="primary" <q-btn label="CHECK SE INSERIRE UTENTI IN Nave" color="primary"
@click="EseguiFunz('checkInserimentiUtentiInNave')"></q-btn> @click="EseguiFunz('checkInserimentiUtentiInNave')"></q-btn>

View File

@@ -35,14 +35,14 @@ export default class Testp1 extends Vue {
console.log('DOPO this.paramcategory', this.paramcategory) console.log('DOPO this.paramcategory', this.paramcategory)
} }
created() { public created() {
this.mioobj = { this.mioobj = {
arr1: [{chiave: 'key1', userId: 'ALL', valore: 'val1'}], arr1: [{chiave: 'key1', idapp: '9', userId: 'ALL', valore: 'val1'}],
arr2: [{chiave: 'key2', userId: 'ALL', valore: 'val2'}] arr2: [{chiave: 'key2', idapp: '9', userId: 'ALL', valore: 'val2'}]
} }
} }
get getarr1 () { get getarr1() {
// return this.mioobj.arr1 // return this.mioobj.arr1
return this.mioobj['arr1'] return this.mioobj['arr1']
} }
@@ -59,36 +59,35 @@ export default class Testp1 extends Vue {
return GlobalStore.getters.testpao1_getter_array(GlobalStore.state.testp1.contatore) return GlobalStore.getters.testpao1_getter_array(GlobalStore.state.testp1.contatore)
} }
public TestBtnCambioaParamPassing () {
TestBtnCambioaParamPassing () {
this.paramcategory += 's' this.paramcategory += 's'
} }
TestBtn() { public TestBtn() {
GlobalStore.state.testp1.contatore++ GlobalStore.state.testp1.contatore++
} }
TestBtn2() { public TestBtn2() {
GlobalStore.state.testp1.mioarray.push({chiave: 'pippo2', userId: UserStore.state.my._id, valore: GlobalStore.state.testp1.contatore.toString() }) GlobalStore.state.testp1.mioarray.push({chiave: 'pippo2', idapp: process.env.APP_ID, userId: UserStore.state.my._id, valore: GlobalStore.state.testp1.contatore.toString() })
} }
TestBtnModify() { public TestBtnModify() {
// GlobalStore.state.testp1.mioarray[GlobalStore.state.testp1.mioarray.length - 1] = GlobalStore.state.testp1.mioarray[GlobalStore.state.testp1.mioarray.length - 1] + 1 // GlobalStore.state.testp1.mioarray[GlobalStore.state.testp1.mioarray.length - 1] = GlobalStore.state.testp1.mioarray[GlobalStore.state.testp1.mioarray.length - 1] + 1
GlobalStore.mutations.setPaoArray({chiave: 'pippo', userId: UserStore.state.my._id, valore: '20' } ) GlobalStore.mutations.setPaoArray({chiave: 'pippo', idapp: process.env.APP_ID, userId: UserStore.state.my._id, valore: '20' } )
} }
TestBtnCambiaTutto() { public TestBtnCambiaTutto() {
// GlobalStore.state.testp1.mioarray[GlobalStore.state.testp1.mioarray.length - 1] = GlobalStore.state.testp1.mioarray[GlobalStore.state.testp1.mioarray.length - 1] + 1 // GlobalStore.state.testp1.mioarray[GlobalStore.state.testp1.mioarray.length - 1] = GlobalStore.state.testp1.mioarray[GlobalStore.state.testp1.mioarray.length - 1] + 1
GlobalStore.mutations.NewArray([{chiave: 'nuovorec1', userId: UserStore.state.my._id, valore: '1' }, {chiave: 'nuovorec2', userId: UserStore.state.my._id, valore: '2' }] ) GlobalStore.mutations.NewArray([{chiave: 'nuovorec1', idapp: process.env.APP_ID, userId: UserStore.state.my._id, valore: '1' }, {chiave: 'nuovorec2', idapp: process.env.APP_ID, userId: UserStore.state.my._id, valore: '2' }] )
} }
TestBtnAction() { public TestBtnAction() {
GlobalStore.actions.prova() GlobalStore.actions.prova()
} }
TestBtnDelete() { public TestBtnDelete() {
// GlobalStore.state.testp1.mioarray[GlobalStore.state.testp1.mioarray.length - 1] = GlobalStore.state.testp1.mioarray[GlobalStore.state.testp1.mioarray.length - 1] + 1 // GlobalStore.state.testp1.mioarray[GlobalStore.state.testp1.mioarray.length - 1] = GlobalStore.state.testp1.mioarray[GlobalStore.state.testp1.mioarray.length - 1] + 1
GlobalStore.mutations.setPaoArray_Delete() GlobalStore.mutations.setPaoArray_Delete()
} }

View File

@@ -1,6 +1,13 @@
import Vue from 'vue' import Vue from 'vue'
import { Component, Prop, Watch } from 'vue-property-decorator'
export default class Signin_noreg extends Vue { import { CSigninNoreg } from '@components'
@Component({
components: { CSigninNoreg }
})
export default class SigninNoreg extends Vue {
public $v public $v
public $q public $q

View File

@@ -1,7 +1,7 @@
<template> <template>
<q-page padding class="signin"> <q-page padding class="signin">
<CSignInNoreg> <CSigninNoreg :showregbutt="false">
</CSignInNoreg> </CSigninNoreg>
</q-page> </q-page>
</template> </template>

View File

@@ -28,7 +28,7 @@ export default class Profile extends MixinBase {
public eliminaAccount() { public eliminaAccount() {
this.$q.dialog({ this.$q.dialog({
message: this.$t('reg.cancellami', {sitename: this.$t('ws.sitename')}), message: this.$t('reg.cancellami', { sitename: this.$t('ws.sitename') }),
cancel: { cancel: {
label: this.$t('dialog.cancel') label: this.$t('dialog.cancel')
}, },
@@ -39,7 +39,7 @@ export default class Profile extends MixinBase {
title: this.$t('pages.profile') title: this.$t('pages.profile')
}).onOk(async () => { }).onOk(async () => {
this.$q.dialog({ this.$q.dialog({
message: this.$t('reg.cancellami_2', {sitename: this.$t('ws.sitename')}), message: this.$t('reg.cancellami_2', { sitename: this.$t('ws.sitename') }),
cancel: { cancel: {
label: this.$t('dialog.cancel') label: this.$t('dialog.cancel')
}, },