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;
let mylang = tools.getItemLS(tools.localStorage.lang)
console.log(`LANG LocalStorage ${mylang}`)
if ((navigator) && (mylang === '')) {
mylang = navigator.language
// console.log(`LANG NAVIGATOR ${mylang}`)
console.log(`LANG NAVIGATOR ${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 = {
Accepted: {
@@ -52,7 +55,13 @@ export const shared_consts = {
value: 8,
label: 'dashboard.tutor',
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
},
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() {
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 { toolsext } from '@src/store/Modules/toolsext'
import { IOperators } from '../../model/GlobalStore'
import { IOperators } from '../../model'
@Component({
name: 'CBook',

View File

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

View File

@@ -31,31 +31,12 @@ $grayshadow: #555;
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 {
-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);
}
.my-card-shadow:hover {
transition: transform .2s ease-in;
transform: scale(1.03);
}
.disc {
text-align: center !important;
font-size: 1rem;

View File

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

View File

@@ -1,36 +1,36 @@
<template>
<q-card :class="myclass +` text-center`" :style="mystyle">
<q-circular-progress
show-value
:font-size="fontsize"
:value="myperc"
:size="getsize"
:thickness="0.25"
:color="mycolor"
track-color="grey-3"
class="animated"
>
<q-card :class="myclass +` text-center`" :style="mystyle">
<q-circular-progress
show-value
:font-size="fontsize"
:value="myperc"
:size="getsize"
:thickness="0.25"
:color="mycolor"
track-color="grey-3"
class="animated"
>
<q-avatar v-if="imgsrc" size="60px">
<img :src="imgsrc">
</q-avatar>
<div class="column q-pa-sm text-center">
<div>
{{ mytext }}
</div>
<div class="mlvalue text-h5 text-blue boldhigh text-h5-short"> {{ myval }} {{ textadd }}
</div>
<div v-if="isperc" class="cltexth4">
({{ myperc.toFixed(1) }} %)
</div>
</div>
</q-circular-progress>
</q-card>
<q-avatar v-if="imgsrc" size="60px">
<img :src="imgsrc">
</q-avatar>
<div class="column q-pa-sm text-center">
<div>
{{ mytext }}
</div>
<div v-if="myval" class="mlvalue text-h5 text-blue boldhigh text-h5-short"> {{ myval }} {{ textadd }}
</div>
<div v-if="isperc" class="cltexth5" :style="'fontsize:' + fontsize">
{{ myperc.toFixed(1) }}%
</div>
</div>
</q-circular-progress>
</q-card>
</template>
<script lang="ts" src="./CCardState.ts">
</script>
<style lang="scss" scoped>
@import './CCardState.scss';
@import './CCardState.scss';
</style>

View File

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

View File

@@ -71,6 +71,30 @@ export default class CGridTableRec extends Vue {
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() {
return lists
}
@@ -374,6 +398,7 @@ export default class CGridTableRec extends Vue {
this.canEdit = tools.getCookie(tools.CAN_EDIT, this.canEdit) === 'true'
this.tablesel = tools.getCookie('tablesel', this.tablesel)
}
console.log('this.tablesel', this.tablesel)
if (this.tablesel === '') {
if (!!this.tablesList)
@@ -382,6 +407,8 @@ export default class CGridTableRec extends Vue {
this.tablesel = this.mytable
}
console.log('2) this.tablesel', this.tablesel)
this.changeTable(false)
}
@@ -442,7 +469,10 @@ export default class CGridTableRec extends Vue {
}
public changeCol(newval) {
tools.setCookie(this.mytable, this.colVisib.join('|'))
console.log('changecol', this.mytable)
if (!!this.mytable) {
tools.setCookie(this.mytable, this.colVisib.join('|'))
}
}
public changeTable(mysel) {
@@ -489,7 +519,9 @@ export default class CGridTableRec extends Vue {
this.mytable = mytab.value
}
tools.setCookie('tablesel', this.tablesel)
if (!!this.tablesList) {
tools.setCookie('tablesel', this.tablesel)
}
this.updatedcol()
@@ -521,7 +553,9 @@ export default class CGridTableRec extends Vue {
}
public changefuncAct(newval) {
tools.setCookie(tools.CAN_EDIT, newval)
if (!this.disabilita) {
tools.setCookie(tools.CAN_EDIT, newval)
}
}
public clickrowcol(row, col) {

View File

@@ -52,7 +52,7 @@
<q-btn v-if="mytable" label="" color="primary" @click="refresh" icon="search"></q-btn>
</template>
</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"
></q-toggle>
@@ -117,6 +117,7 @@
v-if="colVisib.includes(col.field + col.subfield)">
<div :class="getclrow(props.row)">
<CMyPopupEdit :canEdit="canEdit"
:disable="disabilita"
:col="col"
:row.sync="props.row"
: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"
@click="colclicksel = mycol">
<CMyPopupEdit :canEdit="true"
:disable="disabilita"
view="field"
:col="mycol"
:showall="true"

View File

@@ -133,8 +133,8 @@
Il mio compito è quello di assicurarmi che tutti i Donatori facciano il Dono al Sognatore.
Il sistema invierà in automatico le istruzioni per fare il Dono, il Mediatore (io) verificherà e
accompagnerà il processo.<br>
Il passo 2, di norma, è attivato 4 giorni dopo il passo 1.</p>
accompagnerà il processo.
</p>
<div class="text-center">
<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
celebrare
lAbbondanza.<br>
Il passo 3, di norma, è attivato 4 giorni dopo il passo 2.<br><br>
<br>
</p>
</CTitleBanner>
@@ -265,8 +265,7 @@
<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
poslal navodila za način vplačila, Posrednik (jaz) bo postopek preveril in spremljal.
<br>
Korak 2 se običajno aktivira 4 dni po koraku 1.</p>
</p>
<div class="text-center">
<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
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
proslavim obilje.<br>
Korak 3 se običajno aktivira 4 dni po koraku 2.<br><br>
proslavim obilje.
</p>
</CTitleBanner>
@@ -410,7 +407,6 @@
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
verificará y acompañará el proceso.
El paso 2 se activa normalmente 4 días después del paso 1.
<div class="text-center">
<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
e
irá acompanhar o processo.<br>
O passo 2 é normalmente activado 4 dias após o passo 1.
<div class="text-center">
<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>
Minha tarefa é abrir-me para receber os Presentes de cada Doador, completar-me e celebrar
a Abundância.<br>
O passo 3 é normalmente activado 4 dias após o passo 2.<br>
</p>
</CTitleBanner>
@@ -716,7 +710,6 @@
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
accompagnera le processus.<br>
L'étape 2 est normalement activée 4 jours après l'étape 1.
<div class="text-center">
@@ -728,7 +721,6 @@
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
l'Abondance.<br>
L'étape 3 est normalement activée 4 jours après l'étape 2.<br><br>.
</p>
</CTitleBanner>
@@ -864,7 +856,6 @@
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
accompany the process.<br>
Step 2 is normally activated 4 days after step 1.
<div class="text-center">
<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.
My task is to open myself to receive the Gifts from each Donor, complete myself and celebrate
the Abundance.<br>
Step 3 is normally activated 4 days after step 2.
<br><br>.
</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 { CCardState } from '../CCardState'
import { CMyNave } from '../CMyNave'
import { validations } from './CMyDashboard-validate'
import { validationMixin } from 'vuelidate'
@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 {
public $v
public $q
public myusername: string = ''
public tab: string = 'requisiti'
public tabcosa: string = ''
public showuserinfo: boolean = false
public shownuovoviaggio: boolean = false
public notifBot: boolean = true
public loading: boolean = false
public seluser: IUserFields = null
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 = {
myself: DefaultUser,
aportador: DefaultUser,
@@ -41,7 +65,11 @@ export default class CMyDashboard extends MixinUsers {
downline: [],
downnotreg: [],
downbyuser: [],
arrposizioni: []
arrimbarchi: [],
arrposizioni: [],
navi_partenza: [],
lastnave: {},
arrusers: [],
}
@Prop({ required: true }) public username
@@ -50,6 +78,9 @@ export default class CMyDashboard extends MixinUsers {
public changedash() {
console.log('changedash')
this.dashboard = UserStore.state.my.dashboard
if (!!this.dashboard)
this.invitante_username = this.dashboard.myself.aportador_solidario
}
get mythis() {
@@ -57,25 +88,51 @@ export default class CMyDashboard extends MixinUsers {
}
public created() {
if (!!tools.getCookie(tools.TABBED_DASHBOARD)) {
this.tab = tools.getCookie(tools.TABBED_DASHBOARD)
}
this.update_username()
}
public changetab(val) {
tools.setCookie(tools.TABBED_DASHBOARD, val)
console.log('setcook', val)
}
@Watch('this.username')
public changeusername() {
this.update_username()
}
public aggiorna() {
this.dashboard = null
this.update_username()
this.showuserinfo = false
}
public async update_username() {
// console.log('update_username')
console.log('update_username')
this.loading = true
if (this.username === '')
this.myusername = this.getMyUsername()
else
this.myusername = this.username
this.loading = true
await UserStore.actions.getDashboard({ username: this.myusername }).then((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() {
@@ -89,23 +146,238 @@ export default class CMyDashboard extends MixinUsers {
return false
}
public selectclick(user) {
public selectclick(user, showregalainv, ind_order_ingr, id_listaingr) {
this.showuserinfo = true
this.seluser = user
this.showregalainv = showregalainv
this.ind_order_ingr = ind_order_ingr
this.id_listaingr = id_listaingr
}
get Completato7Req() {
// return tools.Is7ReqOk(this.dashboard.myself)
return this.dashboard.myself.qualified
}
get Completato9Req() {
// return tools.Is9ReqOk(this.dashboard.myself)
return this.dashboard.myself.qualified && (this.dashboard.myself.numinvitatiattivi >= 2)
if (!!this.dashboard)
return this.dashboard.myself.qualified && (this.dashboard.myself.numinvitatiattivi >= 2)
return false
}
public HasNave() {
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,130 +1,410 @@
<template>
<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"
mystyle=" " myclass="myshad">
<div v-if="!!dashboard.myself.name">
<div>
<q-tabs
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>
</q-tabs>
<q-tab-panels v-model="tab" animated>
<q-tab-panel name="requisiti">
<div v-if="!!dashboard.myself.name">
<CMyRequirement :myseluser="dashboard.myself" :mydashboard="dashboard" @aggiorna="aggiorna">
</CMyRequirement>
</div>
<CTitleBanner class="shadow-2" :title="$t('reg.aportador_solidario')" bgcolor="bg-accent"
clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true">
<CUserBadge v-if="!!dashboard.aportador" :user="dashboard.aportador" :index="0"
:showregalainv="false"
:numpeople="dashboard.numpeople_aportador"
mycolor="accent" @myclick="selectclick">
</CUserBadge>
<div v-else class="q-pa-sm text-center">
{{ $t('dashboard.nessun_invitante')}}
</div>
</CTitleBanner>
<CTitleBanner class="shadow-2" :title="$t('reg.you')" bgcolor="bg-blue"
clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true">
<CUserBadge v-if="!!dashboard.myself" :user="dashboard.myself" :index="0"
:showregalainv="false"
:numpeople="dashboard.downline.length"
@myclick="selectclick"
mycolor="blue">
</CUserBadge>
</CTitleBanner>
</q-tab-panel>
<q-tab-panel name="invitati">
<CTitleBanner class="shadow-2 rounded-borders" :title="$t('dashboard.downline')" bgcolor="bg-positive"
clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true">
<q-list bordered v-if="!!dashboard.downline && dashboard.downline.length > 0" class="rounded-borders">
<div v-for="(user, index) in dashboard.downline" :key="index">
<CUserBadge :yourinvite="true" :user="user" mycolor="positive" :index="index"
:showregalainv="false"
:numpeople="dashboard.downbyuser[user.username].length"
@myclick="selectclick"
>
</CUserBadge>
<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"
:showregalainv="false"
:numpeople="dashboard.downbyuser[user2.username].length"
@myclick="selectclick"
>
</CUserBadge>
</div>
</div>
</q-list>
<div v-else class="q-pa-sm text-center">
{{ $t('dashboard.nessun_invitato')}}
</div>
</CTitleBanner>
<div class="row justify-center q-ma-sm">
<q-btn push
rounded
color="primary"
size="md"
:label="$t('pages.invita')"
icon="fas fa-user-plus"
to="/invite">
</q-btn>
</div>
<CTitleBanner 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>
</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>
<!--<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')"
<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>
<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">
<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>
<CMyRequirement :myseluser="dashboard.myself" :mydashboard="dashboard">
</CMyRequirement>
</div>
<CTitleBanner class="shadow-2" :title="$t('reg.aportador_solidario')" bgcolor="bg-accent"
clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true">
<CUserBadge v-if="!!dashboard.aportador" :user="dashboard.aportador" :index="0"
:numpeople="dashboard.numpeople_aportador"
mycolor="accent" @myclick="selectclick">
</CUserBadge>
<div v-else class="q-pa-sm text-center">
{{ $t('dashboard.nessun_invitante')}}
</div>
</CTitleBanner>
<CTitleBanner class="shadow-2" :title="$t('reg.you')" bgcolor="bg-blue"
clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true">
<CUserBadge v-if="!!dashboard.myself" :user="dashboard.myself" :index="0"
:numpeople="dashboard.downline.length"
@myclick="selectclick"
mycolor="blue">
</CUserBadge>
</CTitleBanner>
<CTitleBanner class="shadow-2 rounded-borders" :title="$t('dashboard.downline')" bgcolor="bg-positive"
clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true">
<q-list bordered v-if="!!dashboard.downline && dashboard.downline.length > 0" class="rounded-borders">
<div v-for="(user, index) in dashboard.downline" :key="index">
<CUserBadge :yourinvite="true" :user="user" mycolor="positive" :index="index"
:numpeople="dashboard.downbyuser[user.username].length"
@myclick="selectclick"
>
</CUserBadge>
<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"
:numpeople="dashboard.downbyuser[user2.username].length"
@myclick="selectclick"
>
</CUserBadge>
</div>
</div>
</q-list>
<div v-else class="q-pa-sm text-center">
{{ $t('dashboard.nessun_invitato')}}
</div>
</CTitleBanner>
<div class="row justify-center q-ma-sm">
<q-btn push
rounded
color="primary"
size="md"
:label="$t('pages.invita')"
icon="fas fa-user-plus"
to="/invite">
</q-btn>
<div v-if="loading" class="text-center" style="height: 50px;">
<q-spinner-gears size="50px" color="primary"/>
</div>
<!--<CTitleBanner v-if="invitatinotreg" class="shadow-2 rounded-borders" :title="$t('dashboard.downnotreg')"
bgcolor="bg-grey"
clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true">
<q-list bordered v-if="!!dashboard.downnotreg" class="rounded-borders">
<div v-for="(user, index) in dashboard.downnotreg" :key="index">
<CUserBadge :yourinvite="true" :user="user" mycolor="grey" :index="index" :numpeople="user.num_invitati"
@myclick="selectclick">
</div>
</CUserBadge>
</div>
</q-list>
</CTitleBanner>-->
</CTitleBanner>
<!--
<CTitleBanner class="q-pa-xs" :title="$t('text.dashboard.madegift')" bgcolor="bg-info" clcolor="text-white"
@@ -148,42 +428,6 @@
</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>
<q-dialog v-model="showuserinfo">
@@ -195,12 +439,74 @@
<q-btn flat round color="white" icon="close" v-close-popup></q-btn>
</q-toolbar>
<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>
</q-card-section>
</q-card>
</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>
</template>

View File

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

View File

@@ -11,8 +11,12 @@ import { lists } from '../../store/Modules/lists'
import translate from '../../globalroutines/util'
import { CMyChipList } from '../CMyChipList'
import { CVideo } from '../CVideo'
import { validations } from './CMyNave-validate'
import { validationMixin } from 'vuelidate'
@Component({
mixins: [validationMixin],
validations,
components: { CTitleBanner, CMyChipList, CVideo }
})
@@ -23,6 +27,7 @@ export default class CMyNave extends MixinNave {
@Prop({ required: true }) public listanavi: boolean
public navi_partenza: any[]
public $t
public $v
public link_chat: string = ''
public cosa: string = 'tragitto'
public cosa2: string = 'donatore'
@@ -46,6 +51,7 @@ export default class CMyNave extends MixinNave {
public showmsguser: boolean = false
public seluser = null
public msg_tosend_user: string = ''
public username_sostituire: string = ''
public MyPagination: {
sortBy: string,
descending: boolean,
@@ -63,11 +69,10 @@ export default class CMyNave extends MixinNave {
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: 'posizione', align: 'center', label: 'Posizione', field: 'riga', sortable: true },
// { name: 'surname', align: 'center', label: translate('reg.surname'), field: 'surname', 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: 'made_gift', align: 'center', label: 'Confermato', field: 'made_gift', sortable: true },
// { name: 'tel', align: 'center', label: 'Tel', field: 'tel', sortable: true },
{ name: 'made_gift', align: 'center', label: 'Conferm.', field: 'made_gift', sortable: true },
]
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 + ')'
})
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: {
_id: rec._id,
made_gift: true
made_gift: true,
riga: rec.riga,
col: rec.col,
},
param2: rec.username,
param3: mymsg
@@ -709,7 +716,7 @@ export default class CMyNave extends MixinNave {
let col = 0
let riga1don = 1
let col1don = 1
let ind_order = -1;
let ind_order = -1
if (this.listanavi) {
riga = this.nave.riga
col = this.nave.col
@@ -739,6 +746,12 @@ export default class CMyNave extends MixinNave {
this.loading = false
}
public async update_nave() {
this.showmsguser = false
this.apri()
this.aggiorna()
}
public getstrinpartenza() {
if (this.GiornoDelDonoArrivato) {
return this.$t('dashboard.nave_partita')
@@ -756,7 +769,8 @@ export default class CMyNave extends MixinNave {
}
if (!!myrec)
return tools.getstrDate(myrec.donatore.navepersistente.date_start)
if (!!myrec.donatore.navepersistente)
return tools.getstrDate(myrec.donatore.navepersistente.date_start)
return ''
}
@@ -837,4 +851,47 @@ export default class CMyNave extends MixinNave {
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)
}
}

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -69,7 +69,7 @@
:opticon="db_fieldsTable.getIconByTable(col.jointable)"></CMyChipList>
</div>
<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>
</div>
<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 {
@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: false, default: false }) public notitle
@Prop({ required: false, default: false }) public showregalainv
public $t
public $v
public $q
@@ -160,8 +163,8 @@ export default class CMyRequirement extends MixinUsers {
}
}
if (!!user.profile)
if (!!user.profile.paymenttypes) {
const ris = (user.profile.paymenttypes.length >= 1) && ispaypal
if (!!user.profile.email_paypal) {
const ris = (user.profile.email_paypal !== '') && ispaypal
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) {
return !!user.cell_complete
}
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) {
@@ -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, {
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
})
}
@@ -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() {
let mycl = 'text-center'
mycl += (this.ismydownline) ? ' ' + 'background-color: green;' : ''
@@ -308,4 +339,16 @@ export default class CMyRequirement extends MixinUsers {
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 v-if="ismydownline(seluser)">
<CTitleBanner class="shadow-2 rounded-borders" :title="$t('reg.regala_invitato')"
<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-if="ismydownline(seluser) || showregalainv">
<CTitleBanner class="shadow-2 rounded-borders" :title="gettitleregala()"
bgcolor="bg-positive"
clcolor="text-white"
:visible="false"
@@ -49,7 +72,12 @@
<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')"
:disabled='!allowSubmit'
@click="RegalaInvitato(seluser, aportador_solidario, getnotifBotTxt)"></q-btn>
@@ -72,27 +100,6 @@
</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 class="column justify-center q-gutter-sm q-pa-sm">

View File

@@ -1,55 +1,65 @@
<template>
<div>
<div>
<CTitleBanner class="q-pa-xs" :title="$t('pages.nextzoom')" bgcolor="bg-primary" clcolor="text-white"
mystyle="" myclass="myshad" canopen="true">
<div>
<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">
<div class="flex flex-center">
<div class="flex flex-center">
<div class="row animazione justify-center q-gutter-md">
<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')">
</q-btn>
<div class="row animazione justify-center q-gutter-md">
<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')">
</q-btn>
<transition-group name="fade" mode="out-in"
appear
enter-active-class="animazione fadeIn"
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>
<transition-group name="fade" mode="out-in"
appear
enter-active-class="animazione fadeIn"
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-section avatar>
<q-avatar v-if="tools.geticon(confer.lang)" :class="tools.geticon(confer.lang)" size="sm">
</q-avatar>
<q-avatar v-else color="primary" text-color="white" class="text-center">
{{ tools.capitalize(confer.lang) }}
</q-avatar>
</q-item-section>
<q-item-section avatar>
<q-avatar v-if="tools.geticon(confer.lang)" :class="tools.geticon(confer.lang)"
size="sm">
</q-avatar>
<q-avatar v-else color="primary" text-color="white" class="text-center">
{{ tools.capitalize(confer.lang) }}
</q-avatar>
</q-item-section>
<q-item-section class="text-center">
<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="note">
<q-chip
style="background-color: lightblue !important;"
text-color="black"
<q-item-section class="text-center">
<q-item-label class="title">{{ confer.title }}</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-chip
style="background-color: lightblue !important;"
text-color="black"
>{{ confer.note }}
</q-chip>
</q-item-label>
</q-item-section>
</q-item>
</transition-group>
</div>
>{{ confer.note }}
</q-chip>
</q-item-label>
</q-item-section>
</q-item>
</transition-group>
</div>
</div>
</CTitleBanner>
</div>
</CTitleBanner>
</div>
</div>
</template>
<script lang="ts" src="./CNextZoom.ts">
</script>
<style lang="scss" scoped>
@import './CNextZoom.scss';
@import './CNextZoom.scss';
</style>

View File

@@ -12,7 +12,7 @@ import { validationMixin } from 'vuelidate'
import { Logo } from '../../components/logo'
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 VueCountryCode from 'vue-country-code'

View File

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

View File

@@ -12,7 +12,7 @@ import { validationMixin } from 'vuelidate'
import { Logo } from '../../components/logo'
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 VueCountryCode from 'vue-country-code'

View File

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

View File

@@ -12,7 +12,7 @@ import { validationMixin } from 'vuelidate'
import { Logo } from '../../components/logo'
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 VueCountryCode from 'vue-country-code'

View File

@@ -3,27 +3,10 @@
<div class="text-center">
<p>
<logo mystyle="height:200px;"></logo>
<CTitleBanner :title="gettitlereg"></CTitleBanner>
<CTitleBanner :title="gettitlereg" :canopen="false"></CTitleBanner>
</p>
</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')}}-->
<div class="q-gutter-sm">
@@ -84,6 +67,8 @@
rounded outlined
@blur="$v.signup.username.$touch"
:error="$v.signup.username.$error"
@keydown.native.52="(event) => event.preventDefault()"
@keydown.native.54="(event) => event.preventDefault()"
@keydown.space="(event) => event.preventDefault()"
maxlength="20"
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) {
if (!!mystep.icon)
return mystep.icon
@@ -552,7 +548,7 @@ export default class CStatus extends MixinBase {
}
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() {

View File

@@ -77,7 +77,7 @@
<div v-else>
<br>
<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"
:href="getLinkBotTelegram" target="_blank"></q-btn>
<br>
@@ -166,15 +166,15 @@
</div>
<div v-else-if="mystep.title === 'steps.dream'">
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
<div v-html="$t(mystep.descr, {sitename: $t('pages.sitename')})"></div>
</div>
<q-input v-model="my_dream" :label="$t('steps.dream')+' (min. 10):'"
type="textarea" debounce="1000"
input-class="myinput-area-big"
autogrow
@input="change_mydream"
@input="change_mydream">
></q-input>
</q-input>
<!--
<CMyFieldDb :title="$t('reg.my_dream')"
@@ -186,18 +186,6 @@
</CMyFieldDb>
-->
</div>
<div v-else-if="mystep.title === 'steps.chat_biblio'">
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
</div>
<br><strong>Entra in Chat BiblioBacheca, cliccando qui:</strong>
<div class="landing__footer-icons row flex-center margin_buttons">
<a v-if="!!TelegramBiblio" :href="TelegramBiblio" target="_blank">
<i aria-hidden="true" class="q-icon fab fa-telegram icon_contact links"></i></a>
</div>
</div>
<div v-else-if="mystep.title === 'steps.zoom'">
<CRequisiti :statebool="VistoZoom" :msgTrue="$t('steps.zoom_si_partecipato')"
@@ -205,7 +193,7 @@
</CRequisiti>
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
<div v-html="$t(mystep.descr, {sitename: $t('pages.sitename')})"></div>
</div>
<CTitleBanner class="q-pa-xs" :title="$t('steps.zoom_what')" bgcolor="bg-primary"
clcolor="text-white"
@@ -216,13 +204,16 @@
</CVideo>
<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;">
<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"
target="_blank">store</a> o <a href="https://zoom.us/support/download"
target="_blank">da PC</a>)
target="_blank">Android</a> o per
<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>2. Inserisci il tuo Nome e Cognome per essere riconosciuto</li>
<li>3. Clicca "join meeting"</li>
@@ -278,7 +269,7 @@
:label="$t('pages.dashboard')"></q-btn>
<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 class="row justify-center q-ma-sm">
@@ -315,17 +306,17 @@
<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 v-else-if="mystep.title === 'steps.enter_prog'">
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
<div v-html="$t(mystep.descr, {sitename: $t('pages.sitename')})"></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')">
</CRequisiti>
@@ -345,7 +336,7 @@
<div v-if="mystep.page">
<CMyInnerPage :path=mystep.page>
<div v-if="mystep.descr">
<div v-html="$t(mystep.descr)"></div>
<div v-html="$t(mystep.descr, {sitename: $t('pages.sitename')})"></div>
</div>
</CMyInnerPage>
</div>

View File

@@ -27,9 +27,9 @@ export default class CStatusReg extends MixinBase {
public polling = null
public numpolled: number = 0
public datastat: INotData = {
num_tot_lista: 0,
num_reg_lista: 0,
num_reg: 0,
num_passeggeri: 0,
num_imbarcati: 0,
num_teleg_attivo: 0,
email_non_verif: 0,
num_teleg_pending: 0,
@@ -39,7 +39,7 @@ export default class CStatusReg extends MixinBase {
public async checkifpolling() {
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
}
@@ -124,13 +124,6 @@ export default class CStatusReg extends MixinBase {
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 ) {
if (valmax > 0)
return (val1 / valmax * 100)
@@ -139,7 +132,7 @@ export default class CStatusReg extends MixinBase {
}
get visustat() {
return this.datastat.num_reg > 0 || this.datastat.num_reg_lista > 0
return this.datastat.num_reg > 0
}
get telegnonattivi() {

View File

@@ -1,92 +1,114 @@
<template>
<div>
<div v-if="visustat">
<CTitleBanner class="q-pa-xs" :title="$t('pages.status')" bgcolor="bg-primary" clcolor="text-white"
mystyle="" myclass="myshad" canopen="true">
<div>
<div v-if="visustat">
<CTitleBanner class="q-pa-xs" :title="$t('pages.status')" bgcolor="bg-primary" clcolor="text-white"
mystyle="" myclass="myshad" canopen="true">
<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('stat.requisiti')" :isperc="true" :myval="datastat.num_requisiti"
:myperc="calcperc(datastat.num_requisiti, datastat.num_reg) "
mycolor="blue"
:textadd="` / ` + datastat.num_reg"></CCardState>
<CCardState :mytext="$t('pages.statusreg.reg')" :myval="datastat.num_reg"
:myperc="100"></CCardState>
<!--<CCardState :mytext="$t('pages.statusreg.giainlista')" :isperc="true" :myval="datastat.num_reg_lista"-->
<!--:myperc="perc_reg" :textadd="` / ` + datastat.num_tot_lista"></CCardState>-->
<CCardState :mytext="$t('pages.statusreg.passeggeri')"
mycolor="blue"
size="150px"
size_mob="130px"
:myval="datastat.num_passeggeri"
:myperc="100"></CCardState>
<div class="q-pa-xs ">
<CCardStat :mytext="$t('stat.accepted')" :myval="datastat.num_part_accepted"></CCardStat>
<CCardStat :mytext="$t('stat.zoom')" :myval="datastat.num_part_zoom"></CCardStat>
<CCardStat :mytext="$t('stat.dream')" :myval="datastat.num_users_dream"></CCardStat>
<CCardStat :mytext="$t('stat.modalita_pagamento')" :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 v-if="emailnonverif" :mytext="$t('stat.email_not_verif')" :myval="emailnonverif"
mycol="negative"></CCardStat>
<CCardStat v-if="telegnonattivi" :mytext="$t('stat.telegram_non_attivi')" :myval="telegnonattivi"
mycol="negative"></CCardStat>
<CCardStat v-if="datastat.num_teleg_pending > 0" :mytext="$t('stat.telegram_pendenti')"
:myval="datastat.num_teleg_pending" mycol="negative"></CCardStat>
</div>
<!--<CCardState :mytext="$t('statusreg.imbarcati')"
size="150px"
size_mob="130px"
mycolor="blue" :myval="datastat.num_imbarcati"
:myperc="100"></CCardState>-->
<div class="column animazione">
<div class="text-center">{{$t('pages.statusreg.newreg')}}</div>
<transition-group name="fade" mode="out-in"
appear
enter-active-class="animazione fadeIn"
leave-active-class="animazione fadeOut">
<!--<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) "
mycolor="blue"
:textadd="` / ` + datastat.num_reg"></CCardState>-->
<q-item v-for="(user, index) in lastsreg" :key="user.username" class="q-mb-xs animated" v-ripple>
<div class="q-pa-xs" v-if="datastat.num_part_accepted > 1">
<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.imbarcati')" :myval="datastat.num_imbarcati"></CCardStat>
<!--<CCardStat :mytext="$t('stat.modalita_pagamento')"
: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 v-if="emailnonverif" :mytext="$t('stat.email_not_verif')" :myval="emailnonverif"
mycol="negative"></CCardStat>
<CCardStat v-if="telegnonattivi" :mytext="$t('stat.telegram_non_attivi')"
:myval="telegnonattivi"
mycol="negative"></CCardStat>
<CCardStat v-if="datastat.num_teleg_pending > 0" :mytext="$t('stat.telegram_pendenti')"
:myval="datastat.num_teleg_pending" mycol="negative"></CCardStat>-->
</div>
<q-item-section avatar>
<q-avatar v-if="tools.geticon(user.profile.nationality)"
:class="tools.geticon(user.profile.nationality)">
<div class="column animazione">
<div class="text-center">{{$t('pages.statusreg.newreg')}}</div>
<transition-group name="fade" mode="out-in"
appear
enter-active-class="animazione fadeIn"
leave-active-class="animazione fadeOut">
</q-avatar>
<q-avatar v-else color="primary" text-color="white" class="text-center">
{{ tools.capitalize(user.profile.nationality) }}
</q-avatar>
</q-item-section>
<q-item v-for="(user, index) in lastsreg" :key="user.username" class="q-mb-xs animated"
v-ripple>
<q-item-section>
<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-section>
<q-item-section avatar>
<q-avatar v-if="tools.geticon(user.profile.nationality)"
:class="tools.geticon(user.profile.nationality)">
<q-item-section side>
<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-item-section>
</q-item>
</transition-group>
</div>
</q-avatar>
<q-avatar v-else color="primary" text-color="white" class="text-center">
{{ tools.capitalize(user.profile.nationality) }}
</q-avatar>
</q-item-section>
<CGeoChart :mydata="datastat.arr_nations">
<q-item-section>
<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-section>
</CGeoChart>
<div class="row text-center justify-center">
<CListNationality :mydata="datastat.arr_nations">
<q-item-section side>
<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-item-section>
</q-item>
</transition-group>
</div>
</CListNationality>
<CLineChart :mydata="datastat.reg_daily" :title="$t('stat.reg_daily')">
<CGeoChart :mydata="datastat.arr_nations">
</CLineChart>
<CLineChart :mydata="datastat.reg_daily" :title="$t('stat.reg_total')" :offset="datastat.numreg_untilday" :sum="true"
:mycolors="['#0b0', '#666']">
</CGeoChart>
<div class="row text-center justify-center">
<CListNationality :mydata="datastat.arr_nations">
</CLineChart>
</div>
</CListNationality>
<CLineChart :mydata="datastat.reg_daily" :title="$t('stat.reg_daily')">
</CLineChart>
<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']">
</CLineChart>
</div>
</div>
</CTitleBanner>
</div>
</CTitleBanner>
</div>
</div>
</template>
<script lang="ts" src="./CStatusReg.ts">
</script>
<style lang="scss" scoped>
@import './CStatusReg.scss';
@import './CStatusReg.scss';
</style>

View File

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

View File

@@ -1,7 +1,7 @@
<template>
<div v-if="!!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;">
<q-avatar v-if="yourinvite" :text-color="mycolor" size="md">
{{ getnumber(user, index + 1) }}°
@@ -21,7 +21,7 @@
</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>
<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;
background-color: red;
}
.titlesite {
font-size: 1rem;
}

View File

@@ -65,6 +65,10 @@ export default class Header extends Vue {
return UserStore.state.isTutor
}
get isTratuttrici() {
return UserStore.state.isTratuttrici
}
get conndata_changed() {
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 (!!oldValue) {
tools.showNotif(this.$q, this.$t('connection') + ` disc__value}`, {
tools.showNotif(this.$q, this.$t('connection') + ` {disc__value}`, {
color,
icon: 'wifi'
})

View File

@@ -32,14 +32,15 @@
<q-btn ripple
size="md"
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-avatar>
<img :src="imglogo" height="27" alt="Immagine Logo">
</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>
</q-toolbar-title>
@@ -108,8 +109,7 @@
@click="rightDrawerOpen = !rightDrawerOpen">
</q-btn>
<q-btn class="q-mx-xs" v-if="static_data.functionality.SHOW_USER_MENU && isLogged" round dense flat
@click="rightDrawerOpen = !rightDrawerOpen">
<CMyAvatar :myimg="getMyImg"></CMyAvatar>
@click="rightDrawerOpen = !rightDrawerOpen" :icon="getMyImgforIcon">
</q-btn>
</q-toolbar>
@@ -145,6 +145,7 @@
v-if="isAdmin"> [Admin]</span>
<span v-if="isManager"> [Manager]</span>
<span v-if="isTutor"> [Tutor]</span>
<span v-if="isTratuttrici"> [Trad]</span>
</div>
<div v-else class="text-user text-italic bg-red">
{{ $t('user.loggati') }}

View File

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

View File

@@ -6,7 +6,7 @@
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<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" 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'
if (elem.onlyTutor)
menu += ' isTutor'
if (elem.onlyTraduttrici)
menu += ' isTraduttrici'
if (elem.extraclass)
menu += ' ' + elem.extraclass

View File

@@ -57,6 +57,11 @@ export default class MixinUsers extends Vue {
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() {
return GlobalStore.state.menuCollapse
// return true

View File

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

View File

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

View File

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

View File

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

View File

@@ -83,7 +83,7 @@
class="enable-notifications shadow"
color="primary" rounded
size="md"
icon="notifications" @click="tools.askfornotification"
icon="notifications" @click="tools.askfornotification(mythis)"
: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="secondary" rounded size="lg" icon="notifications" @click="createPushSubscription" label="Create Push Subscription !"/>-->
@@ -170,7 +170,7 @@
class="enable-notifications shadow"
color="primary" rounded
size="md"
icon="notifications" @click="tools.askfornotification"
icon="notifications" @click="tools.askfornotification(mythis)"
: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="secondary" rounded size="lg" icon="notifications" @click="createPushSubscription" label="Create Push Subscription !"/>-->
@@ -261,7 +261,7 @@
class="enable-notifications shadow"
color="primary" rounded
size="md"
icon="notifications" @click="tools.askfornotification"
icon="notifications" @click="tools.askfornotification(mythis)"
: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="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: 'sognatore', align: 'center', label: 'Sognatore', 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: '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_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
})
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: {
_id: rec._id,
made_gift: true
made_gift: true,
riga: rec.riga,
col: rec.col,
},
param2: '',
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, {
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, {
param1: msgobj,
param2: navemediatore,
param2: navemediatore
})
}
@@ -196,7 +198,7 @@ export default class Listadoninavi extends MixinBase {
const msgobj = {
tipomsg: tools.TipoMsg.SEND_MSG,
msgpar1: this.msg_tosend,
inviareale: true,
inviareale: true
}
const navemediatore = this.selrec.donatore.recmediatore

View File

@@ -24,6 +24,7 @@
row-key="index">
<template v-slot:body="props">
<q-tr :props="props">
<q-td key="index" :props="props">
{{ props.row.index }}
</q-td>
@@ -37,105 +38,125 @@
</q-td>
<q-td key="date_gift_chat_open" :props="props">
<div v-if="!!props.row.rec">
<div v-if="!!props.row.rec.donatore">
<div class="text-center cursor-pointer">
<a v-if="!!props.row.rec.donatore.navepersistente.link_chat"
:href="props.row.rec.donatore.navepersistente.link_chat"
target="_blank">Link</a>
<div>
<div class="text-center cursor-pointer">
<a v-if="!!props.row.rec.donatore.navepersistente.link_chat"
:href="props.row.rec.donatore.navepersistente.link_chat"
target="_blank">Link</a>
<q-popup-edit v-model="props.row.rec.donatore.navepersistente.link_chat"
title="Link della Chat Telegram" buttons
@save="SaveField(props.row.rec.donatore.navepersistente, 'navepersistente', 'link_chat')">
<q-field>
<q-input
v-model="props.row.rec.donatore.navepersistente.link_chat"/>
</q-field>
</q-popup-edit>
<div v-if="!props.row.rec.donatore.navepersistente.link_chat">---</div>
</div>
<div v-if="!!props.row.rec.donatore.navepersistente">
{{
tools.getstrshortDate(props.row.rec.donatore.navepersistente.date_gift_chat_open)
}}
</div>
<q-popup-edit v-model="props.row.rec.donatore.navepersistente.link_chat"
title="Link della Chat Telegram" buttons
@save="SaveField(props.row.rec.donatore.navepersistente, 'navepersistente', 'link_chat')">
<q-field>
<q-input v-model="props.row.rec.donatore.navepersistente.link_chat"/>
</q-field>
</q-popup-edit>
<div v-if="!props.row.rec.donatore.navepersistente.link_chat">---</div>
</div>
<div v-if="!!props.row.rec.donatore.navepersistente">
{{
tools.getstrshortDate(props.row.rec.donatore.navepersistente.date_gift_chat_open)
}}
</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>
</q-td>
<q-td key="date_start" :props="props">
<div v-if="!!props.row.rec.donatore.navepersistente">
{{ tools.getstrshortDate(props.row.rec.donatore.navepersistente.date_start) }}
<div v-if="!!props.row.rec">
<div v-if="!!props.row.rec.donatore.navepersistente">
{{ tools.getstrshortDate(props.row.rec.donatore.navepersistente.date_start) }}
</div>
</div>
</q-td>
<q-td key="provvisoria" :props="props">
<div v-if="!!props.row.rec.donatore.navepersistente">
<q-toggle dark color="green"
v-model="props.row.rec.donatore.navepersistente.provvisoria"
@input="SaveField(props.row.rec.donatore.navepersistente, 'navepersistente', 'provvisoria')"></q-toggle>
<div v-if="!!props.row.rec">
<div v-if="!!props.row.rec.donatore.navepersistente">
<q-toggle dark color="green"
v-model="props.row.rec.donatore.navepersistente.provvisoria"
@input="SaveField(props.row.rec.donatore.navepersistente, 'navepersistente', 'provvisoria')"></q-toggle>
</div>
</div>
</q-td>
<q-td key="tutor" :props="props">
<div class="text-center">
<div class="text-center cursor-pointer">
{{ props.row.tutor }}
<q-popup-edit v-model="props.row.rec.donatore.navepersistente.tutor"
title="Username del Tutor" buttons
@save="SaveField(props.row.rec.donatore.navepersistente, 'navepersistente', 'tutor')">
<q-field>
<q-input v-model="props.row.rec.donatore.navepersistente.tutor"/>
</q-field>
</q-popup-edit>
<div v-if="!props.row.tutor">---</div>
</div>
<div v-if="props.row.rec.donatore.navepersistente.tutor_namesurname">
<q-btn v-if="!!props.row.rec.donatore.navepersistente.tutor_namesurname" flat
rounded color="blue"
: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 })">
</q-btn>
<div v-if="!!props.row.rec">
<div class="text-center">
<div class="text-center cursor-pointer">
{{ props.row.tutor }}
<q-popup-edit v-model="props.row.rec.donatore.navepersistente.tutor"
title="Username del Tutor" buttons
@save="SaveField(props.row.rec.donatore.navepersistente, 'navepersistente', 'tutor')">
<q-field>
<q-input v-model="props.row.rec.donatore.navepersistente.tutor"/>
</q-field>
</q-popup-edit>
<div v-if="!props.row.tutor">---</div>
</div>
<div v-if="props.row.rec.donatore.navepersistente.tutor_namesurname">
<q-btn v-if="!!props.row.rec.donatore.navepersistente.tutor_namesurname"
flat
rounded color="blue"
: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 })">
</q-btn>
</div>
</div>
</div>
</q-td>
<q-td key="mediatore" :props="props">
<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"
@click="clickseluser(props.row.rec.donatore.recmediatore)">
</q-btn>
<div v-if="props.row.rec">
<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"
@click="clickseluser(props.row.rec.donatore.recmediatore)">
</q-btn>
</div>
</q-td>
<q-td key="sognatore" :props="props">
<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"
@click="clickseluser(props.row.rec.donatore.recsognatori[0])">
</q-btn>
<div v-if="props.row.rec.donatore.recsognatori">
<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"
@click="clickseluser(props.row.rec.donatore.recsognatori[0])">
</q-btn>
</div>
</q-td>
<q-td key="donatori" :props="props">
<div v-if="props.row.rec">
<q-btn v-if="EsistonoDonatori(props.row.rec)" flat rounded color="blue"
:label="$t('dashboard.donatori')"
@click="clickdonatori(props.row.rec)">
</q-btn>
<q-btn v-if="EsistonoDonatori(props.row.rec)" flat rounded color="blue"
:label="$t('dashboard.donatori')"
@click="clickdonatori(props.row.rec)">
</q-btn>
</div>
</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">
<div v-if="props.row.DoniAttesaDiConferma > 0" class="DoniAttesaDiConferma">{{
props.row.DoniAttesaDiConferma }}
</div>
</q-td>
<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>
</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">
<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">{{
props.row.rec.donatore.navepersistente.note_bot }}
</div>
@@ -152,7 +173,7 @@
</div>
</q-td>
<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">{{
props.row.rec.donatore.navepersistente.note_interne }}
</div>
@@ -170,6 +191,7 @@
</q-popup-edit>
</div>
</q-td>
</q-tr>
</template>
</q-table>
@@ -186,7 +208,7 @@
</q-toolbar>
<q-card-section class="inset-shadow" style="padding: 4px !important;">
<div class="row justify-center q-gutter-md">
<div>
<div v-if="!!selrec.donatore">
<q-table
class="my-sticky-header-table"
dense

View File

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

View File

@@ -12,6 +12,8 @@ const msg_enUs = {
tableslist: 'Tables',
},
otherpages: {
modifprof: 'Modify Profile',
biografia: 'Bio',
error404: 'error404',
error404def: 'error404def',
admin: {
@@ -50,6 +52,10 @@ const msg_enUs = {
reg_total: 'Total registrations',
},
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',
passi_su: '{passo} steps out of {totpassi}',
video_intro_1: '1. Welcome to {sitename}',
@@ -71,7 +77,7 @@ const msg_enUs = {
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_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_hai_invitato: 'You invited at least 2 people',
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>.',
inv_attivi_long: '',
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_ko: 'Remember that you can help the Movement grow and expand by sharing our journey with everyone!',
enter_prog: 'I\'m going in Programming',
@@ -177,6 +184,8 @@ const msg_enUs = {
options: 'Options',
},
dashboard: {
num_tessitura: 'Numero di Tessitura:',
attenzione: 'Attenzione',
downline: 'Guests',
downnotreg: 'Non-registered Guests',
notreg: 'Not Registered',
@@ -184,7 +193,7 @@ const msg_enUs = {
numinvitati: 'At least 2 guests',
telefono_wa: 'Contact on Whatsapp',
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_invitato: 'No_invited',
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'
},
otherpages: {
modifprof: 'Editar Perfil',
biografia: 'Biografia',
error404: 'error404',
error404def: 'error404def',
admin: {
@@ -46,10 +48,15 @@ const msg_es = {
email_not_verif: 'Correo electrónico no verificado',
telegram_non_attivi: 'Telegrama no activo',
telegram_pendenti: 'Telegram Pendientes',
reg_daily:'Registrazioni Giornaliere',
reg_total: 'Registrazioni Totali',
reg_daily: 'Registros diarios',
reg_weekly: 'Registros Semanales',
reg_total: 'Total de registros',
},
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',
passi_su: '{passo} pasos de cada {totpassi}',
video_intro_1: '1. Bienvenido a {sitename}',
@@ -71,7 +78,7 @@ const msg_es = {
zoom_partecipa: "Participó al menos 1 Zoom",
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_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_hai_invitato: 'Invitaste al menos a dos personas',
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>',
inv_attivi_long: '',
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_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',
@@ -176,6 +184,8 @@ const msg_es = {
options: 'Opciones',
},
dashboard: {
num_tessitura: 'Numero di Tessitura:',
attenzione: 'Atención',
downline: 'Invitados',
downnotreg: 'Invitados no Registrados',
notreg: 'No Registrado',
@@ -183,13 +193,14 @@ const msg_es = {
numinvitati: 'Al menos 2 invitados',
telefono_wa: 'Contacto en Whatsapp',
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_invitato: 'No_invitado',
legenda_title: 'Haga clic en el nombre del huésped para ver el estado de sus requisitos',
nave_in_partenza: 'que Sale el',
nave_partita: 'partió en',
tutor: 'Tutor',
traduttrici: 'Traduttrici',
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 ' +
'como administrador) con este nombre: <strong>{nomenave}</strong></li>' +
@@ -207,13 +218,13 @@ const msg_es = {
nave: 'Nave',
data_partenza: 'Fecha<br>Salida',
doni_inviati: 'Regalos<br>enviados',
nome_dei_passaggi:'Nombre de los pasajes',
donatori:'Donantes',
donatore:'Donante',
mediatore:'Mediador',
sognatore:'Soñador',
sognatori:'SOÑADOR',
intermedio:'INTERMEDIO',
nome_dei_passaggi: 'Nombre de los pasajes',
donatori: 'Donantes',
donatore: 'Donante',
mediatore: 'Mediador',
sognatore: 'Soñador',
sognatori: 'SOÑADOR',
intermedio: 'INTERMEDIO',
pos2: 'Interm. 2',
pos3: 'Interm. 3',
pos5: 'Interm. 5',
@@ -306,6 +317,7 @@ const msg_es = {
selected: 'seleccionado',
img: 'File image',
date_reg: 'Fecha Reg.',
deleted: 'Cancellato',
requirement: 'Requisitos',
perm: 'Permisos',
username: 'Username (Apodo)',

View File

@@ -12,6 +12,8 @@ const msg_fr = {
tableslist: 'Tables',
},
otherpages: {
modifprof: 'Modifier le profil',
biografia: 'Biografia',
error404: 'error404',
error404def: 'error404def',
admin: {
@@ -47,9 +49,14 @@ const msg_fr = {
telegram_non_attivi: 'Telegram non actif',
telegram_pendenti: 'Telegram Pendants',
reg_daily: 'Enregistrements quotidiennes',
reg_weekly: 'Enregistrements hebdomadaires',
reg_total: 'Total des enregistrements',
},
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',
passi_su: '{passo} étapes sur {totpassi}',
video_intro_1: '1. Bienvenue à l\'{sitename}',
@@ -71,7 +78,7 @@ const msg_fr = {
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_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_hai_invitato: 'Vous avez invité au moins deux personnes',
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>.',
inv_attivi_long: '',
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_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',
@@ -175,6 +183,8 @@ const msg_fr = {
options: 'Options',
},
dashboard: {
num_tessitura: 'Numero di Tessitura:',
attenzione: 'Attention',
downline: 'invités',
downnotreg: 'Invités non enregistrés',
notreg: 'Non enregistré',
@@ -182,7 +192,7 @@ const msg_fr = {
numinvitati: 'Au moins 2 invités',
telefono_wa: 'Contact sur Whatsapp',
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_invitato: 'Non_invité',
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',
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: {
sito_offline: 'Sito in Aggiornamento',
modifprof: 'Modifica Profilo',
biografia: 'Biografia',
update: 'Aggiornamento in Corso...',
error404: 'error404',
error404def: 'error404def',
@@ -40,7 +48,8 @@ const msg_it = {
manage: {
menu: 'Gestione',
manager: 'Gestore',
nessuno: 'Nessuno'
nessuno: 'Nessuno',
sendpushnotif: 'Invia Msg Push',
},
messages: {
menu: 'I tuoi Messaggi'
@@ -50,6 +59,7 @@ const msg_it = {
write: 'scrive'
},
stat: {
imbarcati: 'Imbarcati in Attesa',
qualificati: 'Qualificati con almeno 2 invitati',
requisiti: 'Utenti con i 7 Requisiti',
zoom: 'Partecipato in Zoom',
@@ -60,9 +70,16 @@ const msg_it = {
telegram_non_attivi: 'Telegram Non Attivi',
telegram_pendenti: 'Telegram Pendenti',
reg_daily:'Registrazioni Giornaliere',
reg_weekly:'Registrazioni Settimanali',
reg_total: 'Registrazioni Totali',
},
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',
passi_su: '{passo} passi su {totpassi}',
video_intro_1: '1. Benvenuti in {sitename}',
@@ -85,7 +102,7 @@ const msg_it = {
zoom_partecipa: 'Partecipato ad almeno 1 Zoom',
zoom_no_partecipato: 'Attualmente non hai ancora partecipato ad uno Zoom (è un requisito per poter entrare)',
zoom_long: 'Si richiede di partecipare ad almeno 1 Zoom, ma è consigliato prendere parte al movimento in maniera più attiva.<br><br><strong>Partecipando agli Zoom lo Staff 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_hai_invitato: 'Hai invitato almeno 2 persone',
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>',
inv_attivi_long: '',
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_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',
@@ -191,6 +210,10 @@ const msg_it = {
options: 'Opzioni',
},
dashboard: {
invitante: 'Invitante',
dono_da_effettuare: 'Dono che dovrai effettuare',
num_tessitura: 'Numero di Tessitura:',
attenzione: 'Attenzione',
downline: 'Invitati',
downnotreg: 'Invitati non Registrati',
notreg: 'Non Registrato',
@@ -198,13 +221,14 @@ const msg_it = {
numinvitati: 'Almeno 2 Invitati',
telefono_wa: 'Contatta su Whatsapp',
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_invitato: 'Nessun Invitato',
legenda_title: 'Clicca sul nome dell\'invitato per vedere lo stato dei suoi Requisiti.',
nave_in_partenza: 'in Partenza il',
nave_partita: 'Partita il',
tutor: 'Tutor',
traduttrici: 'Traduttrici',
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 ' +
'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} ?',
account_cancellato: 'Il tuo Profilo è stato cancellato correttamente',
regala_invitato: 'Regala Invitato',
regala_invitante: 'Imposta Invitante',
messaggio_invito: 'Messaggio di Invito',
messaggio_invito_msg: 'Invia questo messaggio a tutti coloro a cui vuoi condividere questo Movimento !',
videointro: 'Video Introduttivo',
@@ -329,8 +354,12 @@ const msg_it = {
date_reg: 'Data Reg.',
requirement: 'Requisiti',
perm: 'Permessi',
elimina: 'Elimina',
deleted: 'Nascosto',
sospeso: 'Sospeso',
username: 'Username (Pseudonimo)',
username_short: 'Username',
username_main: 'Username Base',
name: 'Nome',
surname: 'Cognome',
username_login: 'Username o email',
@@ -362,6 +391,7 @@ const msg_it = {
duplicate_username: 'L\'Username è stato già utilizzato',
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',
invitante_username_not_exist: 'Inserire l\'Username della persona che fa da invitante',
sameaspassword: 'Le password devono essere identiche',
},
tips: {
@@ -433,7 +463,7 @@ const msg_it = {
titlegranted: 'Permesso Notifiche Abilitato!',
statusnot: 'Stato Notifiche',
titledenied: 'Permesso Notifiche Disabilitato!',
title_subscribed: 'Sottoscrizione a FreePlanet.app!',
title_subscribed: 'Sottoscrizione a {sitename}!',
subscribed: 'Ora potrai ricevere i messaggi e le notifiche.',
newVersionAvailable: 'Aggiorna',
},

View File

@@ -18,6 +18,8 @@ const msg_pt = {
list: 'Lista',
},
otherpages: {
modifprof: 'Editar Perfil',
biografia: 'Biografia',
error404: 'error404',
error404def: 'error404def',
admin: {
@@ -57,9 +59,14 @@ const msg_pt = {
telegram_non_attivi: 'Telegrama Não Activo',
telegram_pendenti: 'Telegram Pendants',
reg_daily: 'Inscrições diárias',
reg_weekly:'Inscripciones semanales',
reg_total: 'Inscrições Total',
},
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',
passi_su: '{passo} passos em {totpassi}',
video_intro_1: '1. Bem-vindo ao {sitename}',
@@ -81,7 +88,7 @@ const msg_pt = {
zoom_partecipa: 'Participou em pelo menos 1 Zoom',
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_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_hai_invitato: 'Você convidou pelo menos 2 pessoas',
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>',
inv_attivi_long: '',
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_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',
@@ -186,6 +194,8 @@ const msg_pt = {
options: 'Opzioni',
},
dashboard: {
num_tessitura: 'Numero di Tessitura:',
attenzione: 'Atenção',
downline: 'Convidados',
downnotreg: 'Convidados não registados',
notreg: 'Não Registado',
@@ -193,7 +203,7 @@ const msg_pt = {
numinvitati: 'Pelo menos 2 convidados',
telefono_wa: 'Contato no Whatsapp',
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_invitato: 'Sem Convidados',
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',
},
otherpages: {
modifprof: 'Uredi pProfil',
biografia: 'Biografia',
update: 'Posodobitev v teku...',
error404: 'error404',
error404def: 'error404def',
@@ -60,9 +62,14 @@ const msg_si = {
telegram_non_attivi: 'Telegram ni aktiven',
telegram_pendenti: 'Čakajoči Telegram',
reg_daily: 'Dnevne registracije',
reg_weekly:'Tedenske prijave',
reg_total: 'Skupne registracije',
},
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',
passi_su: '{passo} od {totpassi} koraki',
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_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>',
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_hai_invitato: 'Si vpisaj vsaj 2 osebi',
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>',
inv_attivi_long: '',
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_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',
@@ -183,6 +191,8 @@ const msg_si = {
loggati: 'Uporabnik ni prijavljen'
},
dashboard: {
num_tessitura: 'Numero di Tessitura:',
attenzione: 'Pozornosti',
downline: 'povabljen',
downnotreg: 'Neregistrirani gostje',
notreg: 'Ni registrirano',
@@ -190,7 +200,7 @@ const msg_si = {
numinvitati: 'Z vsaj 2-emi povabljenici',
telefono_wa: 'Pišite na Whatsapp',
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_invitato: 'Ni gostov',
legenda_title: 'Kliknite na povabljeno ime, da si ogledate stanje njihovih zahtev.',

View File

@@ -80,7 +80,7 @@ const state: IGlobalState = {
gallery: [],
mailinglist: [],
mypage: [],
calzoom: [],
calzoom: []
}
async function getConfig(id) {
@@ -142,17 +142,17 @@ namespace Getters {
}, 'getPage')
const getmenu = b.read((state) => {
const getmenu = b.read((mystate: IGlobalState) => {
// console.log('getmenu', cfgrouter.getmenu())
state.menulinks = {
mystate.menulinks = {
Dashboard: {
routes: cfgrouter.getmenu(),
show: true
}
}
return state.menulinks
return mystate.menulinks
// console.log('state.menulinks', state.menulinks)
@@ -309,7 +309,7 @@ namespace Getters {
get isNewVersionAvailable() {
// 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)
if (serversrec) {
console.log('Vers Server ', serversrec.valore, 'Vers locale:', process.env.APP_VERSION)
@@ -467,8 +467,6 @@ namespace Actions {
return
}
console.log('createPushSubscription: INIT')
if (!('PushManager' in window)) {
return
}
@@ -484,6 +482,8 @@ namespace Actions {
return swreg.pushManager.getSubscription()
})
.then((subscription) => {
console.log('subscription = ', subscription)
mystate.wasAlreadySubscribed = !(subscription === null)
if (mystate.wasAlreadySubscribed) {
@@ -511,11 +511,10 @@ namespace Actions {
// Calling the Server to Save in the MongoDB the Subscriber
function saveNewSubscriptionToServer(context, newSub) {
console.log('saveNewSubscriptionToServer')
// If already subscribed, exit
if (true) {
return
}
// if (true) {
// return
// }
if (!newSub) {
return
@@ -528,12 +527,19 @@ namespace Actions {
// console.log('saveSubscriptionToServer: ', newSub)
// console.log('context', context)
console.log('saveNewSubscriptionToServer')
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 (!state.wasAlreadySubscribed) {
if (!state.wasAlreadySubscribed || notreg) {
options = {
title: translate('notification.title_subscribed'),
title: tools.translate('notification.title_subscribed', [{strin: 'sitename', strout: translate('ws.sitename')}]),
content: translate('notification.subscribed'),
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) {
// 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 }) {
console.log('DeleteRec', table, id)
@@ -1034,12 +1068,32 @@ namespace Actions {
infooter: false
}
static_data.routes = [...static_data.baseroutes, ...arrpagesroute, last]
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]
}
// Sort array
static_data.routes = static_data.routes.sort((a, b) => a.order - b.order)
router.addRoutes([...arrpagesroute, last])
if (tools.sito_online(false)) {
router.addRoutes([...arrpagesroute, last])
} else {
router.addRoutes([sito_offline, last])
this.$router.replace('/sito_offline')
}
}
async function sendFile(context, formdata) {
@@ -1063,6 +1117,8 @@ namespace Actions {
saveCfgServerKey: b.dispatch(saveCfgServerKey),
checkUpdates: b.dispatch(checkUpdates),
saveFieldValue: b.dispatch(saveFieldValue),
callFunz: b.dispatch(callFunz),
sendPushNotif: b.dispatch(sendPushNotif),
loadTable: b.dispatch(loadTable),
saveTable: b.dispatch(saveTable),
DeleteRec: b.dispatch(DeleteRec),

View File

@@ -63,6 +63,7 @@ namespace Actions {
state.datastat = res.data.datastat
state.datastat.arr_nations = JSON.parse(state.datastat.arr_nations)
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)
return state.datastat

View File

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

View File

@@ -1,12 +1,12 @@
import { tools } from './tools'
import { IColGridTable } from '../../model'
import { lists } from './lists'
import { tools } from '@src/store/Modules/tools'
import { shared_consts } from '@src/common/shared_vuejs'
import { GlobalStore, UserStore } from '@store'
const DeleteRec = {
name: 'deleterec',
label_trans: 'newsletter.reset',
label_trans: 'reg.elimina',
align: 'right',
field: tools.NOFIELD,
sortable: false,
@@ -163,20 +163,20 @@ const colnavi = [
AddCol({ name: '_id', label_trans: 'others.value' }),
AddCol({ name: 'riga', label_trans: 'reg.riga' }),
AddCol({ name: 'col', label_trans: 'reg.col' }),
AddCol({ name: 'indprimario', label_trans: 'indprimario' }),
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_gift_chat_open', label_trans: 'date_gift_chat_open', fieldtype: tools.FieldType.date }),
// 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: 'made_gift', label_trans: 'reg.made_gift', 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: '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: '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: '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: 'tutor', label_trans: 'tutor', fieldtype: tools.FieldType.string }),
AddCol(DeleteRec),
@@ -199,12 +199,14 @@ const colnavepersistente = [
const collistaingresso = [
AddCol({ name: '_id', label_trans: 'others.value' }),
AddCol({ name: 'indprimario', label_trans: 'indprimario' }),
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: '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: '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(DeleteRec)
]
@@ -398,7 +400,7 @@ export const fieldsTable = {
getTableJoinByName(table) {
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')
return [shared_consts.Accepted.CHECK_READ_GUIDELINES, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI]
else if (table === 'fieldstype')
@@ -446,6 +448,9 @@ export const fieldsTable = {
AddCol({ name: 'typeconf', label_trans: 'zoom.typeconf' }),
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: '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: 'note', label_trans: 'zoom.note' }),
AddCol(DeleteRec),
@@ -453,7 +458,10 @@ export const fieldsTable = {
],
colTableUsersBase: [
AddCol({ name: 'index', label_trans: 'reg.index' }),
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: 'username', label_trans: 'reg.username_short' }),
AddCol({ name: 'name', label_trans: 'reg.name' }),
@@ -470,37 +478,41 @@ export const fieldsTable = {
// IColGridTable
colTableUsers: [
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: 'date_reg', label_trans: 'reg.date_reg', fieldtype: tools.FieldType.date }),
AddCol({ name: 'date_temp_reg', label_trans: 'reg.date_temp_reg', fieldtype: tools.FieldType.date }),
AddCol({ name: 'old_order', label_trans: 'old_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: 'username', label_trans: 'reg.username_short' }),
AddCol({ name: 'username_main', label_trans: 'reg.username_main' }),
AddCol({ name: 'name', label_trans: 'reg.name' }),
AddCol({ name: 'surname', label_trans: 'reg.surname' }),
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: '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.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.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: '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.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.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.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_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.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: 'date_reg', label_trans: 'reg.date_reg', 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: 'perm', label_trans: 'reg.perm', fieldtype: tools.FieldType.binary, jointable: 'permissions' }),
@@ -510,9 +522,10 @@ export const fieldsTable = {
],
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: '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: 'name', label_trans: 'reg.name' }),
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_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.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.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: 'idapp', label_trans: 'reg.idapp', fieldtype: tools.FieldType.string }),
AddCol({ name: 'perm', label_trans: 'reg.perm', fieldtype: tools.FieldType.binary, jointable: 'permissions' }),
@@ -625,7 +642,7 @@ export const fieldsTable = {
label: 'Lista Ingresso',
columns: collistaingresso,
colkey: '_id',
collabel: 'indprimario',
collabel: 'ind_order',
},
{
value: 'disciplines',

View File

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

View File

@@ -40,6 +40,7 @@ const { height, width } = dom
import Cookies from 'js-cookie'
import { forEachComment } from 'tslint'
import messages from '@src/statics/i18n'
const TokenKey = 'Admin-Token'
@@ -51,6 +52,7 @@ export interface INotify {
export const tools = {
CAN_EDIT: 'q-ce',
TABBED_DASHBOARD: 't-db',
getprefCountries: ['it', 'si', 'us', 'es', 'pt', 'uk', 'fr', 'de', 'ch', 'br', 'sk'],
@@ -58,6 +60,9 @@ export const tools = {
APORTADOR_SOLIDARIO: 'apsol',
IDAPP_AYNI: '7',
IDAPP_SIP: '9',
TipoMsg: {
SEND_LINK_CHAT_DONATORI: 1,
SEND_MSG: 2,
@@ -83,6 +88,7 @@ export const tools = {
TABUSER: 'users',
TABNAVI: 'navi',
TABLISTAINGRESSO: 'listaingressos',
TABEVENTS: 'myevents',
TABEXTRALIST: 'extralist',
TABNEWSLETTER: 'newstosent',
@@ -1157,7 +1163,7 @@ export const tools = {
getItemLS(item) {
let ris = localStorage.getItem(item)
if ((ris == null) || (ris === '') || (ris === 'null')) {
if ((ris == null) || (ris === '') || (ris === 'null') || !ris) {
ris = ''
}
@@ -1408,8 +1414,8 @@ export const tools = {
visumenu(elem) { // : IListRoutes
let visu = ((elem.onlyAdmin && UserStore.state.isAdmin) || (elem.onlyManager && UserStore.state.isManager)
|| (elem.onlyTutor && UserStore.state.isTutor)
|| ((!elem.onlyAdmin) && (!elem.onlyManager) && (!elem.onlyTutor))) && elem.active
|| (elem.onlyTutor && UserStore.state.isTutor) || (elem.onlyTraduttrici && UserStore.state.isTraduttrici)
|| ((!elem.onlyAdmin) && (!elem.onlyManager) && (!elem.onlyTutor) && (!elem.onlyTraduttrici))) && elem.active
if (!tools.isLoggedToSystem()) {
if (elem.onlyif_logged)
@@ -1465,22 +1471,117 @@ export const tools = {
tools.showNegativeNotif(myself.$q, myself.$t('db.recfailed'))
})
} else if (func === lists.MenuAction.REGALA_INVITATO) {
// console.log('param1', par.param1, 'id', par.param1._id)
let mydatatosave = {
id: null,
username: '',
table: '',
fieldsvalue: {},
notifBot: {}
};
if (!!par.param1.invitante_username) {
mydatatosave = {
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,
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._id,
table: tools.TABUSER,
fieldsvalue: { aportador_solidario: par.param2 },
id: par.param1,
table: tools.TABLISTAINGRESSO,
fieldsvalue: { invitante_username: par.param2.invitante_username, ind_order_ingr: par.param2.ind_order_ingr },
notifBot: null
}
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) => {
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) {
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
tools.showNegativeNotif(myself.$q, myself.$t('db.recfailed'))
})
@@ -1552,7 +1653,7 @@ export const tools = {
const mydatatosave = {
id: par.param1._id,
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
}
@@ -1591,6 +1692,7 @@ export const tools = {
async askConfirm($q: any, mytitle, mytext, ok, cancel, myself: any, table, funcok: number, funccancel: number, par: IParamDialog) {
return $q.dialog({
message: mytext,
html: true,
ok: {
label: ok,
push: true
@@ -1663,12 +1765,14 @@ export const tools = {
,
checkLangPassed(mylang) {
// console.log('checkLangPassed')
console.log('checkLangPassed ', mylang)
const mybrowserLang = Quasar.lang.isoName
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'
}
if ((mylang.toLowerCase() === 'es') || (mylang.toLowerCase() === 'es-es') || (mylang.toLowerCase() === 'eses')) {
@@ -1698,6 +1802,7 @@ export const tools = {
if (!mylang) {
mylang = process.env.LANG_DEFAULT
console.log('LANG DEFAULT: ', mylang)
}
if (toolsext.getLocale(true) === '') {
@@ -1889,6 +1994,10 @@ export const tools = {
return UserStore.state.isTutor
},
isTraduttrici() {
return UserStore.state.isTraduttrici
},
getstrDate(mytimestamp) {
// console.log('getstrDate', mytimestamp)
if (!!mytimestamp)
@@ -1913,6 +2022,14 @@ export const tools = {
return ''
},
getstrshortDayDateTime(mytimestamp) {
// console.log('getstrDate', mytimestamp)
if (!!mytimestamp)
return date.formatDate(mytimestamp, 'DD HH:mm')
else
return ''
},
getstrTime(mytimestamp) {
// console.log('getstrDate', mytimestamp)
if (!!mytimestamp)
@@ -2346,15 +2463,16 @@ export const tools = {
}
,
askfornotification() {
tools.showNotif(this.$q, this.$t('notification.waitingconfirm'), { color: 'positive', icon: 'notifications' })
askfornotification(mythis) {
console.log('askfornotification')
tools.showNotif(mythis.$q, mythis.$t('notification.waitingconfirm'), { color: 'positive', icon: 'notifications' })
Notification.requestPermission((result) => {
console.log('User Choice', result)
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 {
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();
}
@@ -2843,7 +2961,7 @@ export const tools = {
tools.showNotif(mythis.$q, msg)
} else if (riscode === tools.OK) {
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',
textColor: 'black'
})
@@ -3425,12 +3543,38 @@ export const tools = {
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) {
let ispaypal = false
if (user.profile.paymenttypes) {
if (user.profile.paymenttypes.includes('paypal')) {
if (user.email_paypal !== '')
ispaypal = true
if (!!user.profile.email_paypal) {
if (user.profile.email_paypal !== '')
ispaypal = true
}
}
}
return ispaypal
@@ -3455,6 +3599,109 @@ export const tools = {
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() {
// if (navigator.languages && navigator.languages.length > 0) {

View File

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

View File

@@ -15,6 +15,14 @@
</q-field>
</q-popup-edit>
</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">
{{ props.row.userId }}
<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
} else if (miafunz === 'visuListaIngresso' || miafunz === 'visuListaIngressoNuovi' || miafunz === 'visuNaviUtentiEliminati'
|| miafunz === 'visuListaNave' || miafunz === 'visuNave' || miafunz === 'creaNavi'
|| (miafunz === 'visuUtentiNonInNavi')) {
|| (miafunz === 'visuStat')) {
this.placca = ris.mystr
} else {
this.ris = ris

View File

@@ -2,6 +2,17 @@
<div>
<CTitleBanner title="Operazioni su DB:"></CTitleBanner>
<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">
<q-btn label="Passa i codici Telefoni sul campo cell" color="primary"
@click="EseguiFunz('changeCellInt')"></q-btn>
@@ -10,9 +21,6 @@
<q-btn label="Trasforma le email tutte in minuscolo" color="primary"
@click="EseguiFunz('changeEmailLowerCase')"></q-btn>
<br></div>
<div class="row">
<q-btn label="Crea Utenti Test" color="primary" @click="EseguiFunz('creaUtentiTest')"></q-btn><br>
</div>
<div class="row">
<q-btn label="IMPOSTARE A TUTTI PAYPAL" color="primary" @click="EseguiFunz('ImpostaATuttiPaypal')"></q-btn><br>
</div>
@@ -49,16 +57,16 @@
<q-btn label="Elimina Navi Provvisorie" color="negative"
@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 class="q-pa-sm">
<div class="q-pa-sm row">
<CDateTime
:value.sync="date_start"
:label="$t('cal.eventstartdatetime')"
:readonly="false">
</CDateTime>
<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>
</div>
<div v-if="!incaricamento" class="row">
@@ -72,7 +80,7 @@
:serv="false"
:type="tools.FieldType.number">
</CMyFieldDb>
<CMyFieldDb title="Riga Doni"
<!--<CMyFieldDb title="Riga Doni"
mykey="rigadoni"
:serv="false"
:type="tools.FieldType.number">
@@ -81,7 +89,7 @@
mykey="coldoni"
:serv="false"
:type="tools.FieldType.number">
</CMyFieldDb>
</CMyFieldDb>-->
<CMyFieldDb title="Visu_TEST"
mykey="VISU_TEST"
:serv="false"
@@ -95,7 +103,7 @@
</div>
<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>
@@ -119,6 +127,15 @@
<q-btn label="Visu Navi con utenti Eliminati" color="primary"
@click="EseguiFunz('visuNaviUtentiEliminati')"></q-btn>
<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">
<q-btn label="CHECK SE INSERIRE UTENTI IN Nave" color="primary"
@click="EseguiFunz('checkInserimentiUtentiInNave')"></q-btn>

View File

@@ -35,14 +35,14 @@ export default class Testp1 extends Vue {
console.log('DOPO this.paramcategory', this.paramcategory)
}
created() {
public created() {
this.mioobj = {
arr1: [{chiave: 'key1', userId: 'ALL', valore: 'val1'}],
arr2: [{chiave: 'key2', userId: 'ALL', valore: 'val2'}]
arr1: [{chiave: 'key1', idapp: '9', userId: 'ALL', valore: 'val1'}],
arr2: [{chiave: 'key2', idapp: '9', userId: 'ALL', valore: 'val2'}]
}
}
get getarr1 () {
get getarr1() {
// 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)
}
TestBtnCambioaParamPassing () {
public TestBtnCambioaParamPassing () {
this.paramcategory += 's'
}
TestBtn() {
public TestBtn() {
GlobalStore.state.testp1.contatore++
}
TestBtn2() {
GlobalStore.state.testp1.mioarray.push({chiave: 'pippo2', userId: UserStore.state.my._id, valore: GlobalStore.state.testp1.contatore.toString() })
public TestBtn2() {
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.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.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()
}
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.mutations.setPaoArray_Delete()
}

View File

@@ -1,6 +1,13 @@
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 $q

View File

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

View File

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