diff --git a/docs/bozza.txt b/docs/bozza.txt index 87564049..0cc14a48 100644 --- a/docs/bozza.txt +++ b/docs/bozza.txt @@ -3,3 +3,26 @@ caret-square-down caret-down user-minus + + + + + + + Note: {{ eventsel.title }} + + + + + + + + + + diff --git a/src/common/shared_vuejs.ts b/src/common/shared_vuejs.ts index 9a03b9fe..25992012 100755 --- a/src/common/shared_vuejs.ts +++ b/src/common/shared_vuejs.ts @@ -85,6 +85,9 @@ export const shared_consts = { DELETE: 2170, ADDADMIN: 2180, REMOVEADMIN: 2185, + SENDCOINS_REQ: 2200, + SENDCOINS_ACCEPT: 2210, + SENDCOINS_REFUSE: 2220, }, PUBTOSHARE: { @@ -938,6 +941,7 @@ export const shared_consts = { ID_CIRCUIT_REMOVED: 64, ID_CIRCUIT_ADDED_ADMIN: 128, ID_CIRCUIT_REMOVED_ADMIN: 256, + ID_CIRCUIT_SENDCOINSREQ: 512, TYPEDIR_BOOKING: 6, diff --git a/src/components/CSendCoins/CSendCoins.scss b/src/components/CSendCoins/CSendCoins.scss new file mode 100755 index 00000000..8b6ae01f --- /dev/null +++ b/src/components/CSendCoins/CSendCoins.scss @@ -0,0 +1,66 @@ +$heightBtn: 100%; +$grayshadow: #555; + +.text-subtitle-carica { + font-size: 1rem; + font-weight: 400; + line-height: 1.75rem; + letter-spacing: .00937em; + text-shadow: .1rem .1rem .1rem $grayshadow; +} + +.text-subtitle-certificato { + font-size: 0.75rem; + line-height: 1rem; +} + +@media (max-width: 718px) { + // PER VERSIONE MOBILE + .text-subtitle-carica { + font-size: 1rem; + } +} + +.op { + text-align: center !important; + font-size: 1rem; + font-weight: 400; + line-height: 1.75rem; + letter-spacing: .00937em; + text-shadow: .1rem .1rem .1rem $grayshadow; + + &__cell { + font-size: 1rem; + color: red; + } + + &__email { + font-size: 1rem; + color: #3b5998; + } + + &__email a { + text-decoration: none; + } + + &__facebook a { + font-size: 1rem; + text-decoration: none; + } + + &__storia { + margin-top: 1rem; + margin-bottom: 1rem; + text-align: justify; + } +} + +.myimg { + border-radius: 300px !important; +} + +.q-img { + &__image { + border-radius: 300px !important; + } +} diff --git a/src/components/CSendCoins/CSendCoins.ts b/src/components/CSendCoins/CSendCoins.ts new file mode 100755 index 00000000..b3bcf88d --- /dev/null +++ b/src/components/CSendCoins/CSendCoins.ts @@ -0,0 +1,101 @@ +import { computed, defineComponent, onMounted, PropType, ref, watch } from 'vue' + +import { ICircuit, IOperators, ISendCoin, ISpecialField, IUserFields } from '../../model' +import { tools } from '@store/Modules/tools' +import { useUserStore } from '@store/UserStore' +import { useCircuitStore } from '@store/CircuitStore' +import { useQuasar } from 'quasar' + +export default defineComponent({ + name: 'CSendCoins', + emits: ['close'], + props: { + showprop: { + type: Boolean, + default: false, + }, + to_user: { + type: Object as PropType, + required: true, + }, + }, + + setup(props, { emit }) { + const $q = useQuasar() + const show = ref(false) + const userStore = useUserStore() + const circuitStore = useCircuitStore() + + + const from_username = ref(userStore.my.username) + const circuitsel = ref('') + const qty = ref(1) + const causal = ref('') + const bothcircuits = ref([]) + + const circuitloaded = ref(undefined) + + + watch(() => circuitsel.value, (newval, oldval) => { + circuitloaded.value = circuitStore.listcircuits.find((rec: ICircuit) => rec.name === newval) + }) + + watch(() => props.showprop, (newval, oldval) => { + console.log('props.showprop', props.showprop, newval) + show.value = newval + }) + + function mounted() { + + + // .... + + bothcircuits.value = userStore.IsMyCircuitByUser(props.to_user) + + if (bothcircuits.value.length === 1) { + circuitsel.value = bothcircuits.value[0] + } + + circuitloaded.value = circuitStore.listcircuits.find((rec: ICircuit) => rec.name === circuitsel.value) + + show.value = true + } + + function hide() { + emit('close', true) + } + + function sendCoin() { + console.log('sendcoin', qty.value, props.to_user.username) + + if (props.to_user.username && qty.value && circuitloaded.value) { + const myrecsendcoin: ISendCoin = { + qty: qty.value, + dest: props.to_user.username, + circuitname: circuitsel.value, + causal: causal.value, + symbol: circuitloaded.value.symbol, + } + console.log('myrecsendcoin', myrecsendcoin) + if (circuitloaded.value) { + tools.sendCoinsByCircuit($q, circuitloaded.value, myrecsendcoin) + } + } + } + + onMounted(mounted) + + return { + tools, + show, + bothcircuits, + from_username, + circuitsel, + circuitloaded, + qty, + hide, + sendCoin, + causal, + } + }, +}) diff --git a/src/components/CSendCoins/CSendCoins.vue b/src/components/CSendCoins/CSendCoins.vue new file mode 100755 index 00000000..9dc3bb74 --- /dev/null +++ b/src/components/CSendCoins/CSendCoins.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/src/components/CSendCoins/index.ts b/src/components/CSendCoins/index.ts new file mode 100755 index 00000000..193996df --- /dev/null +++ b/src/components/CSendCoins/index.ts @@ -0,0 +1 @@ +export {default as CSendCoins} from './CSendCoins.vue' diff --git a/src/components/index.ts b/src/components/index.ts index 8b25d9ec..812c0517 100755 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -60,3 +60,4 @@ export * from './CFundRaising' export * from './CKeyAndValue' export * from './CNotifSettings' // export * from './CPreloadImages' +export * from './CSendCoins' diff --git a/src/layouts/toolbar/notifPopover/notifPopover.vue b/src/layouts/toolbar/notifPopover/notifPopover.vue index d07041f8..81c02fab 100755 --- a/src/layouts/toolbar/notifPopover/notifPopover.vue +++ b/src/layouts/toolbar/notifPopover/notifPopover.vue @@ -152,6 +152,27 @@ /> + + +
+ + +
+
{{ tools.timeAgo(notif.datenotif) }} diff --git a/src/model/GlobalStore.ts b/src/model/GlobalStore.ts index f38f24ba..5faf69e5 100755 --- a/src/model/GlobalStore.ts +++ b/src/model/GlobalStore.ts @@ -246,6 +246,10 @@ export interface IMetaTags { description?: string } +export interface ICircuitState { + listcircuits: ICircuit[] +} + export interface IGlobalState { finishLoading: boolean conta: number @@ -895,8 +899,16 @@ export interface IMyCircuit { date: Date } +export interface ISendCoin { + circuitname: string + qty: number + dest: string + causal: string + symbol: string +} + export interface ICircuit { - _id: number + Num: number groupnameId: string name: string path: string @@ -932,6 +944,7 @@ export interface ICircuit { export interface IAccount { username: string circuitId: number + circuit: ICircuit name: string deperibile?: boolean importo_iniziale?: number diff --git a/src/model/MessageStore.ts b/src/model/MessageStore.ts index 581c6ca3..88af05b1 100755 --- a/src/model/MessageStore.ts +++ b/src/model/MessageStore.ts @@ -64,6 +64,7 @@ export const NotifDefault: INotif = { deleted: false, status: StatusMessage.None, extrafield: '', + extrarec: '', } export interface IMessage { @@ -98,6 +99,7 @@ export interface INotif { idrec?: string deleted?: boolean extrafield?: string + extrarec?: any } export interface IChat { diff --git a/src/model/UserStore.ts b/src/model/UserStore.ts index da286d55..01c66a87 100755 --- a/src/model/UserStore.ts +++ b/src/model/UserStore.ts @@ -105,6 +105,7 @@ export interface IUserProfile { asked_circuits: any[] refused_circuits: any[] manage_mycircuits: ICircuit[] + useraccounts: IAccount[] } export interface IPaymentType { diff --git a/src/statics/lang/it.js b/src/statics/lang/it.js index 385bc46c..70b577c9 100755 --- a/src/statics/lang/it.js +++ b/src/statics/lang/it.js @@ -1147,6 +1147,15 @@ const msg_it = { domanda_removeadminofcircuit: 'Rimuovere {username} dall\' incarico di Amministratore del CIrcuito {circuitname} ?', domanda_refuse_circuit: 'Rifiutare la richiesta di {username} per entrare nel Circuito {circuitname}?', refusedcircuit: 'Rifiutato a {username} la richiesta di entrare nel Circuito', + sendcoins: 'Invia Monete', + sendcoinsto: 'Invia {qty} {coin} a {dest}', + question_sendcoinsto: 'Inviare {qty} {coin} a {dest}?', + coins_sendrequest_sent: 'Richiesta d\'invio monete avvenuto', + coins_sendrequest_failed: 'Richiesta d\'invio monete non avvenuta, riprovare', + coins_accepted: 'Monete accettate', + coins_refused: 'Monete rifiutate', + accept_coins: 'Accetta Monete', + refuse_coins: 'Rifiuta Monete', }, account: { diff --git a/src/store/CircuitStore.ts b/src/store/CircuitStore.ts index 3dbf586b..d5b29b54 100755 --- a/src/store/CircuitStore.ts +++ b/src/store/CircuitStore.ts @@ -1,7 +1,7 @@ import { defineStore } from 'pinia' import { - ICircuit, + ICircuit, ICircuitState, IGlobalState, } from '@src/model' import { tools } from '@store/Modules/tools' import translate from '@src/globalroutines/util' @@ -20,7 +20,7 @@ import { costanti } from '@costanti' import globalroutines from '../globalroutines/index' export const useCircuitStore = defineStore('CircuitStore', { - state: () => ({ + state: (): ICircuitState => ({ listcircuits: [] }), @@ -29,6 +29,7 @@ export const useCircuitStore = defineStore('CircuitStore', { }, actions: { + getImgByCircuit(circ: ICircuit): string { try { diff --git a/src/store/Modules/tools.ts b/src/store/Modules/tools.ts index bfb0c1ab..673c706b 100644 --- a/src/store/Modules/tools.ts +++ b/src/store/Modules/tools.ts @@ -12,7 +12,7 @@ import { ITodo, IUserFields, Privacy, - TipoVisu, IGroup, IMySkill, IMyBacheca, IImgGallery, IMsgGlobParam, IUserExport, ISpecialField, IAccount, IMyCircuit, + TipoVisu, IGroup, IMySkill, IMyBacheca, IImgGallery, IMsgGlobParam, IUserExport, ISpecialField, IAccount, IMyCircuit, ISendCoin, } from '@model' import { addToDate } from '@quasar/quasar-ui-qcalendar' @@ -4784,6 +4784,29 @@ export const tools = { }) }, + + acceptCoins($q: any, username: string, recsendcoin: ISendCoin) { + + const userStore = useUserStore() + userStore.setCircuitCmd($q, t, username, recsendcoin.circuitname, shared_consts.CIRCUITCMD.SENDCOINS_ACCEPT, 0, recsendcoin) + .then((res: any) => { + if (res) { + tools.showPositiveNotif($q, t('circuit.coins_accepted')) + } + }) + }, + + refuseCoins($q: any, username: string, recsendcoin: ISendCoin) { + + const userStore = useUserStore() + userStore.setCircuitCmd($q, t, username, recsendcoin.circuitname, shared_consts.CIRCUITCMD.SENDCOINS_REFUSE, recsendcoin) + .then((res: any) => { + if (res) { + tools.showPositiveNotif($q, t('circuit.coins_refused')) + } + }) + }, + refuseReqGroup($q: any, username: string, groupnameDest: string) { const userStore = useUserStore() @@ -4863,7 +4886,7 @@ export const tools = { const mygrp = userStore.my.profile.manage_mygroups.find((rec: IMyGroup) => rec.groupname === groupnameDest) console.log('mygrp', mygrp) if (mygrp && mygrp.admins) { - mygrp.admins = [...mygrp.admins, {username, date: new Date}] + mygrp.admins = [...mygrp.admins, { username, date: new Date }] console.log('mygrp.admins', mygrp.admins) tools.showPositiveNotif($q, t('db.addedtoadmin', { username })) } @@ -5236,6 +5259,39 @@ export const tools = { }) }, + sendCoinsByCircuit($q: any, circuit: ICircuit, sendcoinrec: ISendCoin) { + + const userStore = useUserStore() + + const username = userStore.my.username + + let msg = '' + msg = t('circuit.question_sendcoinsto', { coin: circuit.symbol, dest: sendcoinrec.dest, qty: sendcoinrec.qty }) + + $q.dialog({ + message: msg, + ok: { + label: t('dialog.yes'), + push: true + }, + cancel: { + label: t('dialog.cancel') + }, + title: t('db.domanda') + }).onOk(() => { + + userStore.setCircuitCmd($q, t, username, sendcoinrec.circuitname, shared_consts.CIRCUITCMD.SENDCOINS_REQ, true, sendcoinrec) + .then((res: any) => { + if (res) { + tools.showPositiveNotif($q, t('circuit.coins_sendrequest_sent')) + + } else { + tools.showNegativeNotif($q, t('db.coins_sendrequest_failed')) + } + }) + }) + }, + cancelReqCircuit($q: any, username: string, circuitname: string) { const userStore = useUserStore() $q.dialog({ @@ -5315,7 +5371,7 @@ export const tools = { const mycircuit = userStore.my.profile.manage_mycircuits.find((rec: ICircuit) => rec.name === circuitname) console.log('mycircuit', mycircuit) if (mycircuit && mycircuit.admins) { - mycircuit.admins = [...mycircuit.admins, {username, date: new Date}] + mycircuit.admins = [...mycircuit.admins, { username, date: new Date }] console.log('mycircuit.admins', mycircuit.admins) tools.showPositiveNotif($q, t('db.addedtoadmin', { username })) } @@ -5362,7 +5418,7 @@ export const tools = { if (res) { if (userStore.my.profile.manage_mycircuits) { userStore.my.profile.manage_mycircuits = userStore.my.profile.manage_mycircuits.filter((rec: ICircuit) => rec.name !== circuitname) - tools.showPositiveNotif($q, t('circuit.deleted', { circuitname } )) + tools.showPositiveNotif($q, t('circuit.deleted', { circuitname })) } } }) @@ -6151,7 +6207,7 @@ export const tools = { VUE_APP_BACKEND_API_URL: window?.appConfig?.VUE_APP_BACKEND_API_URL || process.env.VUE_APP_BACKEND_API_URL } - return config[name]; + return config[name] }, getArrSector(table: string, rec: any) { @@ -6160,7 +6216,7 @@ export const tools = { else if ((table === toolsext.TABMYBACHECAS) || (table === toolsext.TABMYSKILLS)) return rec.sector else if (table === toolsext.TABMYGROUPS) - return [{descr: rec.sector}] + return [{ descr: rec.sector }] else if (table === toolsext.TABMYHOSPS) return [] @@ -6178,8 +6234,35 @@ export const tools = { return [] - } + }, + findCommonElements(arr1: any, arr2: any) { + return arr1.some((item: any) => arr2.includes(item)) + }, + + // Function to return commonElements + getCommon(arr1: any, arr2: any, field: string): any[] { + arr1.sort((a: any, b: any) => b[field] - a[field]) // Sort both the arrays + arr2.sort((a: any, b: any) => b[field] - a[field]) + let common = [] // Array to contain common elements + let i = 0, j = 0 // i points to arr1 and j to arr2 + // Break if one of them runs out + while (i < arr1.length && j < arr2.length) { + + if (arr1[i][field] == arr2[j][field]) { // If both are same, add it to result + common.push(arr1[i][field]) + i++ + j++ + } else if (arr1[i][field] < arr2[j][field]) { // Increment the smaller value so that + i++ // it could be matched with the larger + } // element + else { + j++ + } + } + + return common + }, // getLocale() { // if (navigator.languages && navigator.languages.length > 0) { // return navigator.languages[0] diff --git a/src/store/UserStore.ts b/src/store/UserStore.ts index 0b2ee033..7571e99f 100755 --- a/src/store/UserStore.ts +++ b/src/store/UserStore.ts @@ -4,7 +4,7 @@ import { ICircuit, IMyCircuit, IFriends, IMsgGlobParam, ISigninOptions, - ISignupOptions, IUserFields, IUserNotifType, IUserProfile, IUserState, + ISignupOptions, IUserFields, IUserNotifType, IUserProfile, IUserState, IAccount, } from '@src/model' import { tools } from '@store/Modules/tools' import translate from '@src/globalroutines/util' @@ -68,6 +68,7 @@ export const DefaultUser: IUserFields = { asked_circuits: [], refused_circuits: [], manage_mycircuits: [], + useraccounts: [], }, cart: { userId: '', @@ -125,6 +126,7 @@ export const DefaultProfile: IUserProfile = { asked_circuits: [], refused_circuits: [], manage_mycircuits: [], + useraccounts: [], } export const useUserStore = defineStore('UserStore', { @@ -305,6 +307,16 @@ export const useUserStore = defineStore('UserStore', { }, + IsMyCircuitByUser(user: IUserFields): any[] { + + return tools.getCommon(this.my.profile.mycircuits, user.profile.mycircuits, 'circuitname') + }, + + + getAccountByCircuitName(circuitname: string): any { + return this.my.profile.useraccounts.find((rec: IAccount) => rec.circuit.name === circuitname) + }, + IsRefusedCircuitByName(circuitname: string): boolean { if (this.my.profile.refused_circuits) return this.my.profile.refused_circuits.findIndex((rec: ICircuit) => rec.name === circuitname) >= 0 @@ -1210,8 +1222,8 @@ export const useUserStore = defineStore('UserStore', { }, - async setCircuitCmd($q: any, t: any, usernameOrig: string, circuitname: string, cmd: number, value: any) { - return Api.SendReq('/users/circuits/cmd', 'POST', { usernameOrig, circuitname, cmd, value }) + async setCircuitCmd($q: any, t: any, usernameOrig: string, circuitname: string, cmd: number, value: any, extrarec?: any) { + return Api.SendReq('/users/circuits/cmd', 'POST', { usernameOrig, circuitname, cmd, value, extrarec }) .then((res) => { this.updateTables = true return res.data diff --git a/src/store/globalStore.ts b/src/store/globalStore.ts index 1353d5f4..164a2760 100644 --- a/src/store/globalStore.ts +++ b/src/store/globalStore.ts @@ -31,6 +31,7 @@ import translate from '@src/globalroutines/util' import { useTodoStore } from '@store/Todos' import { useMessageStore } from './MessageStore' import { useNotifStore } from '@store/NotifStore' +import { useCircuitStore } from '@store/CircuitStore' const stateConnDefault = 'online' @@ -1311,6 +1312,7 @@ export const useGlobalStore = defineStore('GlobalStore', { async loadSite() { const userStore = useUserStore() const calendarStore = useCalendarStore() + const circuitStore = useCircuitStore() // console.log('calendarStore: loadAfterLogin') // Load local data const showall = userStore.isAdmin || userStore.isManager ? '1' : '0' @@ -1332,6 +1334,8 @@ export const useGlobalStore = defineStore('GlobalStore', { calendarStore.wheres = (res.data.wheres) ? res.data.wheres : [] calendarStore.contribtype = (res.data.contribtype) ? res.data.contribtype : [] + circuitStore.listcircuits = (res.data.listcircuits) ? res.data.listcircuits : [] + this.settings = (res.data.settings) ? [...res.data.settings] : [] this.disciplines = (res.data.disciplines) ? [...res.data.disciplines] : [] this.paymenttypes = (res.data.paymenttypes) ? [...res.data.paymenttypes] : [] @@ -1356,6 +1360,7 @@ export const useGlobalStore = defineStore('GlobalStore', { this.mygroups = (res.data.mygroups) ? [...res.data.mygroups] : [] this.adtypes = (res.data.adtypes) ? [...res.data.adtypes] : [] this.adtypegoods = (res.data.adtypegoods) ? [...res.data.adtypegoods] : [] + circuitStore.listcircuits = (res.data.listcircuits) ? [...res.data.listcircuits] : [] // console.log('res.data.cart', res.data.cart) @@ -1670,7 +1675,7 @@ export const useGlobalStore = defineStore('GlobalStore', { myserv = window.location.host if (process.env.DEBUGGING) { - myserv = 'http://192.168.1.54:3000' + myserv = ' http://192.168.1.102:3000'; // 'http://192.168.1.54:3000' } if (!myserv) { diff --git a/src/views/user/mycircuit/mycircuit.ts b/src/views/user/mycircuit/mycircuit.ts index 7e9567e6..96306da2 100755 --- a/src/views/user/mycircuit/mycircuit.ts +++ b/src/views/user/mycircuit/mycircuit.ts @@ -16,7 +16,7 @@ import { useI18n } from '@/boot/i18n' import { toolsext } from '@store/Modules/toolsext' import { useQuasar } from 'quasar' import { costanti } from '@costanti' -import { ICity, IFriends, ICircuit, ISearchList, IUserFields } from 'model' +import { ICity, IFriends, ICircuit, ISearchList, IUserFields, IAccount } from 'model' import { shared_consts } from '@/common/shared_vuejs' import { colmyUserPeople, colmyUserCircuit } from '@store/Modules/fieldsTable' import { useNotifStore } from '@store/NotifStore' @@ -42,6 +42,7 @@ export default defineComponent({ const showPic = ref(false) const circuit = ref({}) + const account = ref({}) const mystatus = ref(0) const users_in_circuit = ref([]) @@ -81,6 +82,9 @@ export default defineComponent({ users_in_circuit.value = [] } + if (circuit.value) + account.value = userStore.getAccountByCircuitName(circuit.value.name) + mystatus.value = status loading.value = false @@ -146,14 +150,14 @@ export default defineComponent({ function extraparams_rich() { return { querytype: shared_consts.QUERYTYPE_CIRCUIT, - myid: circuit.value ? circuit.value._id : '', + myid: circuit.value ? circuit.value.Num : '', } } function extraparams_refused() { return { querytype: shared_consts.QUERYTYPE_REFUSED_USER_CIRCUIT, - myid: circuit.value ? circuit.value._id : '', + myid: circuit.value ? circuit.value.Num : '', } } @@ -175,6 +179,7 @@ export default defineComponent({ tools, costanti, circuit, + account, shared_consts, getImgCircuit, checkifShow, diff --git a/src/views/user/mycircuit/mycircuit.vue b/src/views/user/mycircuit/mycircuit.vue index f23568f8..e414d51b 100755 --- a/src/views/user/mycircuit/mycircuit.vue +++ b/src/views/user/mycircuit/mycircuit.vue @@ -3,7 +3,7 @@
-

Non hai i permessi per accedere al Gruppo.
+

Non hai i permessi per accedere al Circuito.
Occorre prima registrarsi alla App

@@ -39,6 +39,10 @@ {{ $t('db.youarerefusedcircuit') }}
+
+ Saldo: {{ account.saldo}} + +
[]) const showPic = ref(false) const caricato = ref(false) + const showsendCoinTo = ref(false) const myuser = ref(null) @@ -184,6 +186,7 @@ export default defineComponent({ caricato, listgroupsfiltered, idnotif, + showsendCoinTo, } } }) diff --git a/src/views/user/myprofile/myprofile.vue b/src/views/user/myprofile/myprofile.vue index d04ebba2..f3aa67a4 100755 --- a/src/views/user/myprofile/myprofile.vue +++ b/src/views/user/myprofile/myprofile.vue @@ -151,6 +151,18 @@ :href="getLinkUserTelegram()" target="__blank"> +
+
+ + +
+ showsendCoinTo: {{ showsendCoinTo}} +
+ + + +

Utente {{ username }} non trovato