Click per mandare un messaggio al Destinatario dei RIS, se non è entrato ancora in RIS ITALIA.

This commit is contained in:
Surya Paolo
2023-11-19 23:40:50 +01:00
parent 0642375eaf
commit 446b555b46
20 changed files with 335 additions and 18 deletions

View File

@@ -17,6 +17,23 @@ export const shared_consts = {
}, },
LIMIT_NOTIF_FOR_USER: 200, LIMIT_NOTIF_FOR_USER: 200,
CallFunz: {
SOSTITUISCI: 345,
AGGIUNGI_NUOVO_IMBARCO: 380,
CANCELLA_IMBARCO: 385,
DAMMI_PRIMO_UTENTE_LIBERO: 390,
GET_VALBYTABLE: 400,
SET_VALBYTABLE: 410,
ZOOM_GIA_PARTECIPATO: 510,
REGISTRATION: 6,
RICHIESTA_GRUPPO: 10,
RICHIESTA_AMICIZIA: 15,
RICHIESTA_HANDSHAKE: 16,
RICHIESTA_CIRCUIT: 20,
RICHIESTA_FIDO: 25,
ENTRA_RIS_ITALIA: 30,
},
ELEMTYPE: { ELEMTYPE: {
TITLE: 5, TITLE: 5,
MARGINI: 6, MARGINI: 6,

View File

@@ -0,0 +1,42 @@
.text-cls{
font-weight: bold;
}
.my-text {
font-size: 1rem;
font-weight: bold;
line-height: 1.5rem;
letter-spacing: 0.0125em;
}
.my-text_3 {
font-size: 1rem;
font-weight: bold;
line-height: 1.5rem;
letter-spacing: 0.0125em;
}
.my-text-small {
font-size: 1rem;
line-height: 1rem;
letter-spacing: 0.0125em;
}
.mybox_3 {
min-width: 100px;
min-height: 100px;
width: 100%;
}
.mybox {
min-width: 112px;
min-height: 112px;
width: 100%;
}
.mybox_small {
min-width: 110px;
width: 100%;
}

View File

@@ -0,0 +1,57 @@
import { defineComponent, ref, computed, PropType, toRef, onMounted } from 'vue'
import { useUserStore } from '@store/UserStore'
import { useCircuitStore } from '@store/CircuitStore'
import { useRouter } from 'vue-router'
import { useGlobalStore } from '@store/globalStore'
import { useI18n } from '@/boot/i18n'
import { tools } from '@store/Modules/tools'
import { IAccount, ICircuit, IMyGroup, IOperators, ISendCoin, ISpecialField, IUserFields } from '../../model'
import { useQuasar } from 'quasar'
export default defineComponent({
name: 'CCheckCircuitsEnabled',
components: {},
props: {
to_user: {
type: Object as PropType<IUserFields>,
required: false,
default: null
},
to_group: {
type: Object as PropType<IMyGroup>,
required: false,
default: null,
},
to_contocom: {
type: String,
required: false,
default: '',
},
},
setup(props, { emit }) {
const $q = useQuasar()
const { t } = useI18n()
const userStore = useUserStore()
const circuitStore = useCircuitStore()
const $router = useRouter()
const globalStore = useGlobalStore()
const non_hai_circuito_nazionale = ref(false)
const destin_non_ha_circuito_naz = ref(false)
function load() {
non_hai_circuito_nazionale.value = !circuitStore.sonoDentroAlCircuitoNazionale()
destin_non_ha_circuito_naz.value = !circuitStore.EDentroAlCircuitoNazionale(props.to_user)
}
onMounted(load)
return {
userStore,
tools,
non_hai_circuito_nazionale,
destin_non_ha_circuito_naz,
$q,
}
}
})

View File

@@ -0,0 +1,49 @@
<template>
<div class="q-ma-xs q-pa-xs row">
<div v-if="non_hai_circuito_nazionale" class="q-py-sm">
<q-banner rounded class="bg-red text-white" style="text-align: center">
{{ $t('circuit.non_hai_circuito_nazionale') }}
<br />
</q-banner>
<div class="text-center">
<q-btn
glossy
size="md"
:label="$t('circuit.ask_italia')"
icon="fas fa-key"
color="green"
text-color="white"
rounded
:to="tools.updateLink('/circuit/ris_italia')"
></q-btn>
</div>
</div>
<div v-if="destin_non_ha_circuito_naz" class="q-py-sm">
<q-banner rounded class="bg-red text-white" style="text-align: center">
{{ $t('circuit.destin_non_ha_circuito_naz') }}
<br />
</q-banner>
<div class="text-center">
<q-btn
glossy
size="md"
:label="$t('circuit.invia_msg_dest', {name: to_user.username})"
icon="fas fa-paper-plane"
color="blue"
text-color="white"
rounded
@click="tools.SendMsgRisItalia($q, to_user.username)"
></q-btn>
</div>
</div>
</div>
</template>
<script lang="ts" src="./CCheckCircuitsEnabled.ts">
</script>
<style lang="scss" scoped>
@import './CCheckCircuitsEnabled.scss';
</style>

View File

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

View File

@@ -19,6 +19,11 @@ export default defineComponent({
showBtnActivities: { showBtnActivities: {
type: Boolean, type: Boolean,
required: true, required: true,
},
sendRIS: {
type: Number,
required: false,
default: 0,
} }
}, },
components: { CLabel, CSendCoins }, components: { CLabel, CSendCoins },

View File

@@ -68,10 +68,11 @@
</q-btn> </q-btn>
</div> </div>
</div> </div>
<div v-if="showsendCoinTo"> <div v-if="showsendCoinTo || sendRIS > 0">
<CSendCoins <CSendCoins
:showprop="showsendCoinTo" :showprop="showsendCoinTo"
:to_user="myuser" :to_user="myuser"
:sendRIS="sendRIS"
@close="showsendCoinTo = false" @close="showsendCoinTo = false"
> >
</CSendCoins> </CSendCoins>

View File

@@ -62,7 +62,7 @@ export default defineComponent({
const globalStore = useGlobalStore() const globalStore = useGlobalStore()
const circuit = ref(<ICircuit | IMyCircuit | null>null) const circuit = ref(<IMyCircuit | ICircuit | null>null)
const account = computed(() => circuit.value ? userStore.getAccountByCircuitId(circuit.value._id) : null ) const account = computed(() => circuit.value ? userStore.getAccountByCircuitId(circuit.value._id) : null )
const qtarem = computed(() => account.value ? circuitStore.getRemainingCoinsToSend(account.value) : 0) const qtarem = computed(() => account.value ? circuitStore.getRemainingCoinsToSend(account.value) : 0)

View File

@@ -387,7 +387,7 @@
<q-item <q-item
clickable clickable
v-close-popup v-close-popup
v-if="saldo === 0" v-if="saldo === 0 || !saldo"
@click=" @click="
tools.removeFromMyCircuits( tools.removeFromMyCircuits(
$q, $q,

View File

@@ -9,6 +9,7 @@ import { useQuasar } from 'quasar'
import { useI18n } from '@/boot/i18n' import { useI18n } from '@/boot/i18n'
import { CMyUserOnlyView } from '@/components/CMyUserOnlyView' import { CMyUserOnlyView } from '@/components/CMyUserOnlyView'
import { CMyGroupOnlyView } from '@/components/CMyGroupOnlyView' import { CMyGroupOnlyView } from '@/components/CMyGroupOnlyView'
import { CCheckCircuitsEnabled } from '@/components/CCheckCircuitsEnabled'
import { costanti } from '@costanti' import { costanti } from '@costanti'
export default defineComponent({ export default defineComponent({
@@ -48,8 +49,13 @@ export default defineComponent({
required: false, required: false,
default: null, default: null,
}, },
sendRIS: {
type: Number,
required: false,
default: 1,
}, },
components: { CSaldo, CMyUserOnlyView, CMyGroupOnlyView }, },
components: { CSaldo, CMyUserOnlyView, CMyGroupOnlyView, CCheckCircuitsEnabled },
setup(props, { emit }) { setup(props, { emit }) {
const $q = useQuasar() const $q = useQuasar()
@@ -257,7 +263,9 @@ export default defineComponent({
if (props.circuitname) { if (props.circuitname) {
circuitsel.value = props.circuitname circuitsel.value = props.circuitname
} else { } else {
circuitsel.value = tools.getCookie(tools.CIRCUIT_USE, bothcircuits.value[0]) const circcookie = tools.getCookie(tools.CIRCUIT_USE, bothcircuits.value[0])
if (circcookie && bothcircuits.value.findIndex((circ: ICircuit) => circ.name === circcookie) >= 0)
circuitsel.value = circcookie
} }
if (bothcircuits.value && bothcircuits.value.find((name: any) => name !== circuitsel.value)) { if (bothcircuits.value && bothcircuits.value.find((name: any) => name !== circuitsel.value)) {
circuitsel.value = bothcircuits.value[0] circuitsel.value = bothcircuits.value[0]
@@ -265,6 +273,10 @@ export default defineComponent({
qty.value = props.qtydefault qty.value = props.qtydefault
if (props.sendRIS) {
qty.value = props.sendRIS
}
await aggiorna() await aggiorna()
showpage.value = true showpage.value = true

View File

@@ -12,6 +12,12 @@
<q-btn flat round color="white" icon="close" v-close-popup></q-btn> <q-btn flat round color="white" icon="close" v-close-popup></q-btn>
</q-bar> </q-bar>
<q-card-section class="q-px-xs inset-shadow"> <q-card-section class="q-px-xs inset-shadow">
<CCheckCircuitsEnabled
:to_user="to_user"
:to_group="to_group"
>
</CCheckCircuitsEnabled>
<q-select <q-select
v-if="!circuitname" v-if="!circuitname"
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'" :behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
@@ -132,7 +138,7 @@
> >
</CMyGroupOnlyView> </CMyGroupOnlyView>
<CMyGroupOnlyView <CMyGroupOnlyView
v-if="circuitloaded && to_contocom" v-if="circuitloaded && !!circuitloaded._id && to_contocom"
:mygrp="{ groupname: to_contocom }" :mygrp="{ groupname: to_contocom }"
:visu="costanti.USER_GROUPS" :visu="costanti.USER_GROUPS"
:circuitname="circuitloaded.name" :circuitname="circuitloaded.name"
@@ -144,7 +150,7 @@
<q-spinner-tail size="6em" color="primary" /> <q-spinner-tail size="6em" color="primary" />
</q-inner-loading> </q-inner-loading>
<div v-if="circuitloaded"> <div v-if="circuitloaded && !!circuitloaded._id">
<q-banner <q-banner
v-if="!circuitloaded.transactionsEnabled" v-if="!circuitloaded.transactionsEnabled"
rounded rounded
@@ -230,10 +236,12 @@
> >
</q-input> </q-input>
</q-card-section> </q-card-section>
<q-card-actions align="center"> <q-card-actions align="center">
<q-btn <q-btn
v-if=" v-if="
circuitloaded && circuitloaded &&
!!circuitloaded._id &&
(qtyRef (qtyRef
? !( ? !(
qtyRef.hasError || qtyRef.hasError ||

View File

@@ -151,6 +151,7 @@ export interface IUserProfile {
stepTutorial: number stepTutorial: number
noNameSurname: boolean noNameSurname: boolean
noCircuit: boolean noCircuit: boolean
noCircIta: boolean
noFoto: boolean noFoto: boolean
reaction: IReaction[] reaction: IReaction[]
// bookmark: IBookmark[] // bookmark: IBookmark[]

View File

@@ -1220,6 +1220,11 @@ const msg_it = {
}, },
circuit: { circuit: {
apri: 'Entra !', apri: 'Entra !',
invia_msg_dest: 'Invia la richiesta a {name}',
non_hai_circuito_nazionale: 'Per poter inviare dei RIS ad una persona di un altro territorio, è necessario entrare sul "Circuito RIS Italia"',
destin_non_ha_circuito_naz: 'Il tuo Destinatario non fa parte del tuo territorio, pertanto occorre che acceda al Circuito RIS Italia',
beforeentertolocalcircuit: 'Prima di entrare nel Circuito Nazionale occorre accedere in quello della tua Provincia',
non_entrato: 'Per far parte di questo Circuito devi chiedere di Entrare!', non_entrato: 'Per far parte di questo Circuito devi chiedere di Entrare!',
link_chat: 'Chat {name}', link_chat: 'Chat {name}',
link_group: 'Gruppo Telegram', link_group: 'Gruppo Telegram',
@@ -1291,6 +1296,7 @@ const msg_it = {
remove_as_admin: 'Rimuovi come Admin del Circuito', remove_as_admin: 'Rimuovi come Admin del Circuito',
remove_from_mycircuit: 'Rimuovi dal Circuito', remove_from_mycircuit: 'Rimuovi dal Circuito',
ask: 'Entra nel Circuito', ask: 'Entra nel Circuito',
ask_italia: 'Apri Circuito RIS Italia',
exit: 'Esci dal Circuito', exit: 'Esci dal Circuito',
accept: 'Accetta la richiesta', accept: 'Accetta la richiesta',
exit_circuit: 'Esci dal Circuito', exit_circuit: 'Esci dal Circuito',

View File

@@ -2,7 +2,7 @@ import { defineStore } from 'pinia'
import { import {
IAccount, IAccount,
ICircuit, ICircuitState, IGlobalState, IGroupShort, IMyCircuit, IMyGroup, ICircuit, ICircuitState, IGlobalState, IGroupShort, IMyCircuit, IMyGroup, IUserFields
} from '@src/model' } from '@src/model'
import { tools } from '@store/Modules/tools' import { tools } from '@store/Modules/tools'
import translate from '@src/globalroutines/util' import translate from '@src/globalroutines/util'
@@ -52,6 +52,48 @@ export const useCircuitStore = defineStore('CircuitStore', {
return 0 return 0
}, },
sonoDentroAlCircuitoNazionale() {
const userStore = useUserStore()
const circNazionali: any = this.listcircuits.filter((circ: any) => circ.showAlways)
for (const circ of circNazionali) {
const trovato = userStore.my.profile.mycircuits.findIndex((mycirc: any) => mycirc.circuitname === circ.name) >= 0
if (trovato){
return true
}
}
return false
},
EDentroAlCircuitoNazionale(user: IUserFields) {
const circNazionali: any = this.listcircuits.filter((circ: any) => circ.showAlways)
for (const circ of circNazionali) {
const trovato = user.profile.mycircuits.findIndex((mycirc: any) => mycirc.circuitname === circ.name) >= 0
if (trovato){
return true
}
}
return false
},
isCircuitNational(circuitname: string): boolean {
return this.listcircuits.findIndex((rec: ICircuit) => rec.name === circuitname && rec.showAlways) >= 0
},
IsNationalAndNotEnterInLocal(circuitname: string): boolean {
const userStore = useUserStore()
return this.isCircuitNational(circuitname) && userStore.my.profile.mycircuits.length <= 0
},
getCircuitClass(circuit: ICircuit) { getCircuitClass(circuit: ICircuit) {
if (circuit.status === shared_consts.CIRCUIT_STATUS.FASE3_MONETA_ABILITATA) if (circuit.status === shared_consts.CIRCUIT_STATUS.FASE3_MONETA_ABILITATA)
return 'circuito_abilitato' return 'circuito_abilitato'
@@ -61,6 +103,7 @@ export const useCircuitStore = defineStore('CircuitStore', {
return 'circuito_in_creazione' return 'circuito_in_creazione'
}, },
getColorCircuitClass(circuit: ICircuit) { getColorCircuitClass(circuit: ICircuit) {
if (circuit.status === shared_consts.CIRCUIT_STATUS.FASE3_MONETA_ABILITATA) if (circuit.status === shared_consts.CIRCUIT_STATUS.FASE3_MONETA_ABILITATA)
return 'green' return 'green'

View File

@@ -6117,6 +6117,22 @@ export const tools = {
}) })
}) })
}, },
SendMsgRisItalia($q: any, usernameDest: string) {
const userStore = useUserStore()
const username = userStore.my.username
userStore.setSendCmd($q, t, username, usernameDest, shared_consts.CallFunz.ENTRA_RIS_ITALIA, null)
.then((res: any) => {
if (res && res.result) {
this.updateMyData(res)
tools.showPositiveNotif($q, res.popupOnApp)
}
})
},
setRequestGroup($q: any, username: string, groupnameDest: string, value: boolean) { setRequestGroup($q: any, username: string, groupnameDest: string, value: boolean) {
const userStore = useUserStore() const userStore = useUserStore()

View File

@@ -100,6 +100,7 @@ export const DefaultUser: IUserFields = {
stepTutorial: 0, stepTutorial: 0,
noNameSurname: false, noNameSurname: false,
noCircuit: false, noCircuit: false,
noCircIta: false,
noFoto: false, noFoto: false,
asked_circuits: [], asked_circuits: [],
refused_circuits: [], refused_circuits: [],
@@ -168,6 +169,7 @@ export const DefaultProfile: IUserProfile = {
stepTutorial: 0, stepTutorial: 0,
noNameSurname: false, noNameSurname: false,
noCircuit: false, noCircuit: false,
noCircIta: false,
noFoto: false, noFoto: false,
asked_circuits: [], asked_circuits: [],
refused_circuits: [], refused_circuits: [],
@@ -500,7 +502,7 @@ export const useUserStore = defineStore('UserStore', {
} }
// se non ho neanche 1 circuito in comune, metto il mio preferito // se non ho neanche 1 circuito in comune, metto il mio preferito
if (arrfinale.length <= 0) { /*if (arrfinale.length <= 0) {
const circuit = circuitStore.getCircuitByProvince(this.my.profile.resid_province) const circuit = circuitStore.getCircuitByProvince(this.my.profile.resid_province)
if (circuit) if (circuit)
arrfinale.push(circuit.name) arrfinale.push(circuit.name)
@@ -510,7 +512,7 @@ export const useUserStore = defineStore('UserStore', {
} }
} }
} else { } else {
} } */
console.log('arrout', arrfinale) console.log('arrout', arrfinale)
@@ -953,6 +955,17 @@ export const useUserStore = defineStore('UserStore', {
return await this.execDbOpUser({ mydata }) return await this.execDbOpUser({ mydata })
} }
}, },
async savenoCircIta(val: boolean) {
const mydata = {
_id: this.my._id,
dbop: 'noCircIta',
value: val,
}
if (this.my.profile.noCircIta !== val) {
this.my.profile.noCircIta = val
return await this.execDbOpUser({ mydata })
}
},
async savenoFoto(val: boolean) { async savenoFoto(val: boolean) {
const mydata = { const mydata = {
_id: this.my._id, _id: this.my._id,
@@ -1626,6 +1639,21 @@ export const useUserStore = defineStore('UserStore', {
}, },
async setSendCmd($q: any, t: any, usernameOrig: string, usernameDest: string, cmd: number, value: any) {
return Api.SendReq('/users/sendcmd', 'POST', { usernameOrig, usernameDest, cmd, value })
.then((res) => {
this.updateTables = true
// const notifStore = useNotifStore()
// notifStore.updateNotification = true
return res.data
}).catch((error) => {
tools.showNegativeNotif($q, t('db.recfailed'))
return {}
})
},
async setCircuitCmd($q: any, t: any, usernameOrig: string, circuitname: string, cmd: number, value: any, extrarec?: any) { async setCircuitCmd($q: any, t: any, usernameOrig: string, circuitname: string, cmd: number, value: any, extrarec?: any) {
return await Api.SendReq('/users/circuits/cmd', 'POST', { usernameOrig, circuitname, cmd, value, extrarec }) return await Api.SendReq('/users/circuits/cmd', 'POST', { usernameOrig, circuitname, cmd, value, extrarec })
.then((res) => { .then((res) => {
@@ -1849,6 +1877,8 @@ export const useUserStore = defineStore('UserStore', {
let yes = true let yes = true
if (this.my.profile && this.my.profile.mycircuits) {
// Check if I have at least 1 Circuit // Check if I have at least 1 Circuit
yes = yes && (this.my.profile.mycircuits.length > 0) yes = yes && (this.my.profile.mycircuits.length > 0)
@@ -1856,6 +1886,7 @@ export const useUserStore = defineStore('UserStore', {
// Check if myuser has at least 1 Circuit // Check if myuser has at least 1 Circuit
yes = yes && (myuser.profile.mycircuits.length > 0) yes = yes && (myuser.profile.mycircuits.length > 0)
} }
}
return yes return yes
}, },

View File

@@ -312,6 +312,29 @@
><br /> ><br />
</q-banner> </q-banner>
<q-banner
v-if="circuitStore.IsNationalAndNotEnterInLocal(circuit.name)"
rounded
class="bg-red text-white"
style="text-align: center"
>
<template v-slot:avatar>
<q-icon
class="vertical-align center"
name="fas fa-info"
color="red"
size="sm"
/>
</template>
<em style="font-weight: bold">{{
$t('circuit.beforeentertolocalcircuit')
}}</em
><br />
</q-banner>
<div class="centermydiv q-mt-md"> <div class="centermydiv q-mt-md">
<q-btn <q-btn
v-if=" v-if="
@@ -319,6 +342,7 @@
!userStore.IsAskedCircuitByName(circuit.name) && !userStore.IsAskedCircuitByName(circuit.name) &&
!userStore.IsRefusedCircuitByName(circuit.name) !userStore.IsRefusedCircuitByName(circuit.name)
" "
:disable="circuitStore.IsNationalAndNotEnterInLocal(circuit.name)"
icon="fas fa-user-plus" icon="fas fa-user-plus"
color="primary" color="primary"
:label="$t('circuit.ask')" :label="$t('circuit.ask')"
@@ -337,7 +361,7 @@
<q-item <q-item
clickable clickable
v-close-popup v-close-popup
v-if="saldo === 0" v-if="saldo === 0 || !saldo"
@click=" @click="
tools.removeFromMyCircuits( tools.removeFromMyCircuits(
$q, $q,

View File

@@ -58,6 +58,8 @@ export default defineComponent({
const idnotif = computed(() => $route.query.idnotif ? $route.query.idnotif.toString() : '') const idnotif = computed(() => $route.query.idnotif ? $route.query.idnotif.toString() : '')
const isDebugOn = computed(() => tools.isDebugOn()) const isDebugOn = computed(() => tools.isDebugOn())
const sendRIS = computed(() => !!$route.query.sendris ? $route.query.sendris : 0)
const $router = useRouter() const $router = useRouter()
const filtroutente = ref(<any[]>[]) const filtroutente = ref(<any[]>[])
const showPic = ref(false) const showPic = ref(false)
@@ -210,6 +212,7 @@ export default defineComponent({
globalStore, globalStore,
getLinkWebSite, getLinkWebSite,
gotoPage, gotoPage,
sendRIS,
} }
} }
}) })

View File

@@ -641,6 +641,7 @@
<CContactUser <CContactUser
:myuser="userStore.userprofile" :myuser="userStore.userprofile"
:showBtnActivities="true" :showBtnActivities="true"
:sendRIS="sendRIS"
/> />
</div> </div>