Members, Circuits

This commit is contained in:
Paolo Arena
2022-10-21 21:25:54 +02:00
parent 9d40649af3
commit 6c306b36f3
73 changed files with 4424 additions and 93 deletions

View File

@@ -628,6 +628,32 @@ export const shared_consts = {
},
],
StatusCircuit: [
{
value: 0,
label: '',
hint: ''
},
{
value: 1,
label: 'Creazione Gruppo in corso',
hint: 'Prima di abilitare il circuito monetario RIS, è consigliato raggiungere un certo numero di partecipanti.',
icon: 'fas fa-users',
},
{
value: 2,
label: 'Sottoscrizione regolamento',
hint: 'I membri devono ora accettare il regolamento prima di attivare gli scambi in RIS',
icon: 'far fa-hourglass',
},
{
value: 3,
label: 'Circuito Abilitato',
hint: 'il Circuito è stato abilitato allo scambio di monete RIS',
icon: 'far fa-check-circle',
},
],
Permissions: {
Admin: {
value: 1,
@@ -1107,6 +1133,12 @@ export const shared_consts = {
},
],
CIRCUIT_STATUS: {
FASE0: 0,
FASE1_CREAZIONE_GRUPPO: 1,
FASE2_ORGANIZZAZIONE: 2,
FASE3_MONETA_ABILITATA: 3,
},
getStatusStr(status: number) {
const trovatorec = this.OrderStatusStr.find((rec) => rec.value === status)

View File

@@ -1089,6 +1089,7 @@ export default defineComponent({
subname: 1,
longdescr: 1,
regulation: 1,
numMembers: 1,
totCircolante: 1,
totTransato: 1,
systemUserId: 1,
@@ -1098,6 +1099,7 @@ export default defineComponent({
nome_valuta: 1,
fido_scoperto_default: 1,
deperimento: 1,
status: 1,
transactionsEnabled: 1,
qta_max_default: 1,
valuta_per_euro: 1,

View File

@@ -1880,6 +1880,9 @@ export default defineComponent({
visupagedialog.value = true
myrecdialog.value = id
return true
} else if (cmd === costanti.CMD_OPEN_PAGE) {
$router.push(tools.getPathByTableAndRec(mytable.value, id))
return true
}
let action = 0

View File

@@ -2,3 +2,4 @@
display: flex;
flex: 1;
}

View File

@@ -12,6 +12,7 @@ import { useRoute, useRouter } from 'vue-router'
import { CUserNonVerif } from '@/components/CUserNonVerif'
import { CSaldo } from '@/components/CSaldo'
import { toolsext } from '@store/Modules/toolsext'
import { useGlobalStore } from '@store/globalStore'
export default defineComponent({
name: 'CMyCircuit',
@@ -43,6 +44,8 @@ export default defineComponent({
const $router = useRouter()
const $route = useRoute()
const globalStore = useGlobalStore()
const circuit = ref(<ICircuit | null>null)
const account = computed(() => circuit.value ? userStore.getAccountByCircuitId(circuit.value._id) : null )
@@ -51,6 +54,8 @@ export default defineComponent({
const table = ref(toolsext.TABCIRCUITS)
const showingtooltip = ref(false)
watch(() => props.mycircuit, (newval, oldval) => {
mounted()
})
@@ -101,6 +106,8 @@ export default defineComponent({
account,
qtarem,
saldo,
globalStore,
showingtooltip,
}
},
})

View File

@@ -6,29 +6,54 @@
<q-avatar size="60px">
<q-img :src="getImgCircuit(circuit)" :alt="circuit.name" img-class="imgprofile" height="60px"/>
</q-avatar>
<div class=" q-ma-xs q-px-xs shadow-2 rounded-borders"><span class="q-mx-xs">{{ circuit.numMembers }}</span>
<q-icon name="fas fa-users" size="xs" color="blue"></q-icon>
</div>
</q-item-section>
<q-item-section @click="naviga(tools.getPathByTableAndRec(table, circuit))">
<q-item-label><strong>{{ circuit.name }}</strong> <span v-if="circuit.subname"> ({{ circuit.subname }})</span>
<q-item-section>
<q-item-label @click="naviga(tools.getPathByTableAndRec(table, circuit))"><strong>{{ circuit.name }}</strong> <span
v-if="circuit.subname"> ({{ circuit.subname }})</span>
</q-item-label>
<q-item-label v-if="circuit.longdescr" caption lines="3"><em>{{ circuit.longdescr }}</em></q-item-label>
<q-item-label v-if="!circuit.transactionsEnabled" caption lines="1">
<q-icon name="fas fa-lock">
</q-icon></q-item-label>
<q-item-label @click="naviga(tools.getPathByTableAndRec(table, circuit))" v-if="circuit.longdescr" caption lines="3"><em>{{ circuit.longdescr }}</em>
</q-item-label>
<q-item-label caption lines="1">
<q-chip
v-if="circuit.status !== undefined && circuit.status !== 0" :color="circuitStore.getColorCircuitClass(circuit)"
text-color="white"
size="md"
:icon="globalStore.getValueByTableSingle('statuscircuit', circuit.status, 'icon')">{{
globalStore.getValueByTableSingle('statuscircuit', circuit.status)
}}
<q-btn
class="q-ml-sm"
icon="fas fa-info" color="primary" text-color="white"
size="xs"
round
@click="showingtooltip = !showingtooltip">
<q-tooltip :offset="[10, 10]" v-model="showingtooltip">{{globalStore.getValueByTableSingle('statuscircuit', circuit.status, 'hint')}}</q-tooltip>
</q-btn>
</q-chip>
<q-item-label lines="1">
</q-item-label>
<q-item-label v-if="(!circuit.transactionsEnabled) && (circuit.status === shared_consts.CIRCUIT_STATUS.FASE3_MONETA_ABILITATA)" caption lines="1">
<q-icon v-if="!circuit.transactionsEnabled" name="fas fa-lock">
</q-icon>
<span class="text-red text-weight-bold">{{ $t('circuit.transaction_suspended') }}</span>
</q-item-label>
<q-item-label @click="naviga(tools.getPathByTableAndRec(table, circuit))" lines="1">
<CSaldo
:account="account"
:symbol="circuit.symbol"
:color="circuit.color"
:saldo="saldo"
:qtarem="qtarem"
>
>
</CSaldo>
</q-item-label>
</q-item-section>
<q-item-section side v-if="visu === costanti.USER_CIRCUITS">
<q-item-label>
<q-btn rounded :icon="userStore.IsMyCircuitByName(circuit.name) ? `fas fa-ellipsis-h` : `fas fa-user`">

View File

@@ -322,7 +322,7 @@ export default defineComponent({
function changevalRec(newval: any) {
if (col.value && col.value.allowchar === costanti.ALLOWCHAR_CODE) {
myvalue.value = tools.removespaces(newval)
myvalue.value = tools.removespaces_slash(newval)
}
// console.log('popypedit: changevalRec', newval)

View File

@@ -1,4 +1,6 @@
import { defineComponent, onMounted, PropType, ref, watch } from 'vue'
import { useCircuitStore } from '@store/CircuitStore'
import { useGlobalStore } from '@store/globalStore'
import { useUserStore } from '@store/UserStore'
import { IImgGallery, IUserFields, IUserProfile } from 'model'
import { costanti } from '@costanti'
@@ -31,11 +33,15 @@ export default defineComponent({
setup(props, { emit }) {
const userStore = useUserStore()
const circuitStore = useCircuitStore()
const globalStore = useGlobalStore()
// const $q = useQuasar()
const { t } = useI18n()
// const $router = useRouter()
const myrec = ref(<any | null>null)
const circuit = ref(<any | null>null)
const showingtooltip = ref(false)
watch(() => props.prop_myrec, (newval, oldval) => {
@@ -44,7 +50,7 @@ export default defineComponent({
function mounted() {
if (props.prop_myrec) {
myrec.value = props.prop_myrec
circuit.value = props.prop_myrec
}
}
@@ -60,7 +66,7 @@ export default defineComponent({
return {
t,
myrec,
circuit,
costanti,
// naviga,
setCmd,
@@ -70,6 +76,9 @@ export default defineComponent({
toolsext,
fieldsTable,
cmdExt,
globalStore,
circuitStore,
showingtooltip,
}
},
})

View File

@@ -2,45 +2,64 @@
<div class="q-py-xs centermydiv cardrec"
:style="`max-width: `+ (tools.getwidth($q) - 20) +`px; ` + ($q.screen.lt.sm ? (`min-width: `+ (tools.getwidth($q) - 20) +`px;`) : ``)">
<q-item v-if="myrec" clickable v-ripple class="shadow-2 q-btn--rounded bg-teal-1">
<q-item v-if="circuit" clickable v-ripple class="shadow-2 q-btn--rounded bg-teal-1">
<q-item-section v-if="myrec.photo" avatar
@click="cmdExt(costanti.CMD_SHOW_PAGE, myrec)">
<q-item-section v-if="circuit.photos" avatar
@click="cmdExt(costanti.CMD_OPEN_PAGE, circuit)">
<q-avatar size="60px">
<q-img :src="userStore.getImgByCircuit(myrec)" :alt="myrec.descr"
<q-img :src="userStore.getImgByCircuit(circuit)" :alt="circuit.descr"
img-class="imgprofile" height="60px"/>
</q-avatar>
<q-chip class="glossy" icon-right="fas fa-users" text-color="blue"><span style="font-size: 1rem;" class="q-mr-xs">{{circuit.numMembers}}</span></q-chip>
</q-item-section>
<q-item-section @click="cmdExt(costanti.CMD_SHOW_PAGE, myrec)">
<q-item-label v-if="myrec.name" lines="1" class="text_title">
<span class="text-weight-bold">{{ myrec.name }}</span>
</q-item-label>
<q-item-label v-if="myrec.subname" lines="1" class="text_title">
<span>{{ myrec.subname }}</span>
<span v-if="!myrec.transactionsEnabled"><q-icon name="fas fa-lock"></q-icon></span>
</q-item-label>
<q-item-label lines="3" v-if="myrec.longdescr">{{ myrec.longdescr }}<br>
</q-item-label>
<!--
<CCurrencyValue
:symbol="myrec.symbol"
:tips="t('account.saldo_tips')"
:color="myrec.color"
:value="myrec.account.saldo"
label="Saldo">
<q-item-section @click="cmdExt(costanti.CMD_OPEN_PAGE, circuit)">
</CCurrencyValue>
<q-item-label @click="naviga(tools.getPathByTableAndRec(table, circuit))"><strong>{{ circuit.name }}</strong> <span v-if="circuit.subname"> ({{ circuit.subname }})</span>
</q-item-label>
<q-item-label @click="naviga(tools.getPathByTableAndRec(table, circuit))" v-if="circuit.longdescr" caption lines="3"><em>{{ circuit.longdescr }}</em></q-item-label>
<q-item-label caption lines="1">
<q-chip
v-if="circuit.status !== undefined && circuit.status !== 0" :color="circuitStore.getColorCircuitClass(circuit)"
text-color="white"
size="md"
:icon="globalStore.getValueByTableSingle('statuscircuit', circuit.status, 'icon')">{{ globalStore.getValueByTableSingle('statuscircuit', circuit.status) }}
<q-btn
class="q-ml-sm"
icon="fas fa-info" color="primary" text-color="white"
size="xs"
round
@click="showingtooltip = !showingtooltip">
<q-tooltip :offset="[10, 10]" v-model="showingtooltip">{{globalStore.getValueByTableSingle('statuscircuit', circuit.status, 'hint')}}</q-tooltip>
</q-btn>
</q-chip>
</q-item-label>
<q-item-label v-if="(!circuit.transactionsEnabled) && (circuit.status === shared_consts.CIRCUIT_STATUS.FASE3_MONETA_ABILITATA)" caption lines="1">
<q-icon v-if="!circuit.transactionsEnabled" name="fas fa-lock">
</q-icon>
<span class="text-red text-weight-bold">{{ $t('circuit.transaction_suspended') }}</span>
</q-item-label>
<!--
<q-item-label v-if="circuit.name" lines="1" class="text_title">
<span class="text-weight-bold">{{ circuit.name }}</span>
</q-item-label>
<q-item-label v-if="circuit.subname" lines="1" class="text_title">
<span>{{ circuit.subname }}</span>
<span v-if="!circuit.transactionsEnabled"><q-icon name="fas fa-lock"></q-icon></span>
</q-item-label>
<q-item-label lines="3" v-if="circuit.longdescr">{{ circuit.longdescr }}<br>
</q-item-label>
-->
</q-item-section>
<q-item-section side v-if="tools.canModifyThisRec(myrec, table)">
<q-item-section side v-if="tools.canModifyThisRec(circuit, table)">
<q-item-label>
<q-btn rounded icon="fas fa-pencil-alt">
<q-menu>
<q-list style="min-width: 150px">
<q-item clickable v-close-popup
@click="cmdExt(costanti.CMD_MODIFY, myrec._id)">
@click="cmdExt(costanti.CMD_MODIFY, circuit._id)">
<q-item-section side>
<q-icon name="fas fa-pencil-alt"/>
</q-item-section>
@@ -48,7 +67,7 @@
</q-item>
</q-list>
<q-list style="min-width: 150px">
<q-item clickable v-close-popup @click="cmdExt(costanti.CMD_DELETE, myrec._id)">
<q-item clickable v-close-popup @click="cmdExt(costanti.CMD_DELETE, circuit._id)">
<q-item-section side>
<q-icon name="fas fa-trash-alt"/>
</q-item-section>

View File

@@ -5,7 +5,7 @@
<q-item v-if="myrec" clickable v-ripple class="shadow-2 q-btn--rounded bg-teal-1">
<q-item-section v-if="(shared_consts.TABLES_VISU_IMG.includes(table)) && (myrec.photos && myrec.photos.length > 0)" avatar
@click="cmdExt(costanti.CMD_SHOW_PAGE, myrec)">
@click="cmdExt(costanti.CMD_OPEN_PAGE, myrec)">
<q-avatar size="60px">
<q-img :src="tools.getFullFileName(myrec.photos, table, myrec.username, myrec.groupname)" :alt="myrec.descr"
img-class="imgprofile" height="60px"/>
@@ -22,7 +22,7 @@
</q-avatar>
</q-item-section>
<q-item-section @click="cmdExt(costanti.CMD_SHOW_PAGE, myrec)">
<q-item-section @click="cmdExt(costanti.CMD_OPEN_PAGE, myrec)">
<q-item-label class="full-width">
<span v-for="(rec, ind) of myrec.recCatGrp" :key="ind"> <q-chip
dense

View File

@@ -9,7 +9,7 @@
<template v-slot:avatar>
<q-icon name="fas fa-exclamation-triangle" color="yellow" size="xs"/>
</template>
<q-item clickable v-for="(notif, index) in lasts_notifs_req" :key="index">
<q-item v-for="(notif, index) in lasts_notifs_req" :key="index">
<!--<q-item-section avatar>
<q-avatar>
@@ -24,24 +24,26 @@
</q-item-section>
<q-item-section v-ripple>
<q-item-section>
<q-item-label lines="5" :class="(!notif.read) ? 'unread' : 'read'" @click="clickNotif(notif)">
<div v-html="getNotifText($t, notif, false)"></div>
</q-item-label>
<q-item-label caption lines="18"
v-if="notif.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS && notif.status === 0 && notif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ"
v-ripple>
>
<div class="row no-wrap justify-evenly q-pa-sm">
<q-btn
size="md"
icon="fas fa-coins"
:disable="notif.disablecoinclick"
color="positive" :label="$t('circuit.accept_coins_qty', {qty: notif.extrarec.qty, symbol: notif.extrarec.symbol})"
@click="tools.acceptCoins(q, notif.sender, notif)"
@click="notif.disablecoinclick = true; tools.acceptCoins(q, notif.sender, notif)"
/>
<q-btn
size="md"
:disable="notif.disablecoinclick"
color="negative" :label="$t('circuit.refuse_coins_qty', {qty: notif.extrarec.qty, symbol: notif.extrarec.symbol})"
@click="tools.refuseCoins(q, notif.sender, notif)"
@click="notif.disablecoinclick = true; tools.refuseCoins(q, notif.sender, notif)"
/>
</div>
</q-item-label>

View File

@@ -235,7 +235,7 @@ body.mobile .landing:before {
.home {
//background-color: rgb(250, 250, 250);
padding: 3.125rem;
padding: 2.125rem;
display: flex;
//flex-wrap: nowrap;
flex-direction: column;
@@ -244,7 +244,7 @@ body.mobile .landing:before {
}
.btn-start {
margin: 3.125rem;
margin: 1.125rem;
}
.shadow {
@@ -461,3 +461,7 @@ ul li::before {
margin-left: 5px;
}
}
.buttreg {
font-weight: bold;
}

View File

@@ -7,6 +7,7 @@ import { tools } from '@store/Modules/tools'
import { LandingFooter, Logo } from '@components'
import { CFundRaising } from '@/components/CFundRaising'
import { CShowContentPage } from '@/components/CShowContentPage'
import { static_data } from '@src/db/static_data'
export default defineComponent({
@@ -124,6 +125,7 @@ export default defineComponent({
openCreatePostModal,
slide,
tools,
static_data,
animare,
}
},

View File

@@ -37,7 +37,11 @@
</div>
<div>
<div v-if="!tools.isLogged()" style="margin: 5px; padding: 5px;" class="home">
<div v-if="!tools.isLogged()" style="margin: 5px; padding: 5px" class="home">
<q-btn
v-if="static_data.functionality.ENABLE_REGISTRATION && static_data.functionality.ENABLE_REG_BY_BOT"
type="a" rounded size="lg" color="primary" href="/bot" :label="$t('reg.submit')" class="buttreg">
</q-btn>
<q-btn
rounded size="lg" color="primary" @click="PagLogin"
class="btn-start">

View File

@@ -64,7 +64,14 @@
</div>
<div
v-if="static_data.functionality.ENABLE_REGISTRATION && showregbutt"
v-if="static_data.functionality.ENABLE_REGISTRATION && showregbutt && static_data.functionality.ENABLE_REG_BY_BOT"
style="margin-top:10px; text-align: center;">
Se non sei ancora Registrato:<br>
<q-btn type="a" rounded size="md" color="primary" href="/bot" :label="$t('reg.submit')">
</q-btn>
</div>
<div
v-else-if="static_data.functionality.ENABLE_REGISTRATION && showregbutt"
style="margin-top:10px; text-align: center;">
Se non sei ancora Registrato:<br>
<q-btn rounded size="md" color="primary" to="/signup" :label="$t('reg.submit')">

View File

@@ -28,16 +28,9 @@
<q-btn class="q-ma-sm" color="positive" icon="fas fa-home" label="Se sei già Registrato CLICCA QUI" to="/"></q-btn>
<q-banner
v-if="need_Telegram"
rounded
class="bg-warning text-black"
style="text-align: center;"
>
<span class="mybanner" v-html="t('pages.need_Telegram')"></span>
</q-banner>
<div v-if="need_Telegram" class="mybanner" v-html="t('pages.need_Telegram')"></div><br>
<div v-if="!isalreadyReg">
<div v-if="!isalreadyReg && !(visubuttBOT && need_Telegram)">
<CTitleBanner :title="$t('pages.SignUp')"></CTitleBanner>
</div>
@@ -45,6 +38,7 @@
</div>
</div>
<div v-if="visubuttBOT && need_Telegram" class="q-gutter-md">
<q-banner
rounded

View File

@@ -1136,3 +1136,27 @@ $heightBtn: 100%;
.feat-descr {
font-size: 1.15rem;
}
.circuito_abilitato {
background-color: green;
color: green;
margin-right: 4px;
padding: 2px;
font-weight: bold;
}
.circuito_fase_2 {
background-color: orange;
color: white;
margin-right: 4px;
padding: 2px;
font-weight: bold;
}
.circuito_in_creazione {
background-color: blue;
color: white;
margin-right: 4px;
padding: 2px;
font-weight: bold;
}

View File

@@ -51,11 +51,12 @@ const msg_website_it = {
presentazione2: 'Presentazione',
invita: 'Invita Persone',
SignUp: 'Modulo di Registrazione:',
need_Telegram: 'Per poter utilizzare la Piattaforma occorre avere Telegram installato.<br><a href="https://play.google.com/store/apps/details?id=org.telegram.messenger" target="_blank">Clicca qui per scaricarlo</a>',
Registrazione_Con_Bot: 'Per Registrarsi occorre prima verificarsi su Telegram sul <strong>BOT RISO</strong>',
need_Telegram: 'Per poter utilizzare la Piattaforma occorre avere <a href="https://play.google.com/store/apps/details?id=org.telegram.messenger" target="_blank">Telegram</a> installato<br>',
Registrazione_Con_Bot: '1) Copia questo username cliccandoci sopra:',
SignUpIscrizione: 'Diventa Socio CNM',
SignUp_alreadylista: 'Registrazione per quelli che erano già nella lista di Notevole (del 2019) !',
SignUp2: 'Registrazione',
SignUpBot: 'Registrati',
SignIn: 'Login',
status: 'Statistiche',
nextzoom: 'Conferenze',

View File

@@ -10,8 +10,9 @@ const functionality: IFunctionality = {
PWA: true,
SHOW_USER_MENU: true, // Cambiare con true
SHOW_PROFILE: true,
SHOW_REG_BUTTON: false,
SHOW_REG_BUTTON: true,
ENABLE_REGISTRATION: true,
ENABLE_REG_BY_BOT: true,
ENABLE_REG_NEED_TELEGRAM: true,
SHOW_NEWSLETTER: false,
SHOW_ONLY_POLICY: true,
@@ -780,6 +781,16 @@ const baseroutes: IListRoutes[] = [
infooter: false,
separator: false
},
{
active: functionality.ENABLE_REG_BY_BOT,
order: 1000,
path: '/bot',
materialIcon: 'how_to_reg',
name: 'pages.SignUpBot',
inmenu: functionality.ENABLE_REG_BY_BOT,
infooter: functionality.ENABLE_REG_BY_BOT,
separator: false
},
/*{
active: functionality.ENABLE_REGISTRATION && !functionality.ENABLE_REG_NEED_TELEGRAM,
order: 1000,

View File

@@ -167,6 +167,13 @@ export default function () {
} else if (notif.status === shared_consts.StatusNotifs.STATUS_FRIENDS_REFUSED) {
descr += '<br><em>' + $t('friends.refused') + '</em>'
}
} else if (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS) {
if (notif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ) {
// console.log('notif.extrarec', notif.extrarec)
if (notif.extrarec && notif.extrarec.hasOwnProperty('causal') && notif.extrarec.causal) {
descr += '( ' + $t('movement.causal') + ': ' + notif.extrarec.causal + ')'
}
}
} else if (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_GROUPS) {
if (notif.status === shared_consts.GroupsNotifs.STATUS_GROUPS_ACCEPTED) {
descr += '<br><em>' + $t('groups.accepted') + '</em>'
@@ -181,6 +188,7 @@ export default function () {
}
}
return descr
}

View File

@@ -486,6 +486,7 @@ export interface IParamDialog {
export interface IFunctionality {
PWA?: boolean
ENABLE_REGISTRATION?: boolean
ENABLE_REG_BY_BOT?: boolean
ENABLE_REG_NEED_TELEGRAM?: boolean
SHOW_REG_BUTTON?: boolean
SHOW_PROFILE?: boolean
@@ -935,6 +936,7 @@ export interface ICircuit {
data_costituz?: Date
deperimento: boolean
transactionsEnabled: boolean
status: number
freq_deper?: string
minuto_deper?: string
ora_deper?: string
@@ -947,6 +949,8 @@ export interface ICircuit {
date_updated?: Date
admins?: IFriends[]
createdBy?: string
regulation?: string
numMembers?: number
// --- Mem:
movements: IMovement[]
}
@@ -984,4 +988,6 @@ export interface IAccount {
qta_maxConcessa: number
importo_iniziale?: number
saldo: number
totTransato: number
regulation_ok: boolean
}

View File

@@ -254,7 +254,7 @@ const msg_it = {
open: 'Clicca sul bottone qui sotto, si aprirà una chat Telegram speciale (chiamata BOT)',
ifclose: 'poi premi "AVVIA" o "START" e segui le istruzioni indicate.',
openbot: 'Entra qui',
regbot: 'Registrati cliccando qui (si aprirà Telegram)',
regbot: '2) Clicca qui per Registrarti',
},
login: {
facebook: 'Facebook',
@@ -1187,6 +1187,7 @@ const msg_it = {
qta_remaining_to_send: 'Quantità massima inviabile {maxqta} {symbol}',
qta_not_valid: 'Quantità non valida',
qta_max_to_send: 'Quantità massima inviabile {maxqta} {symbol}',
transaction_suspended: 'Transazioni sospese',
},
account: {

View File

@@ -26,9 +26,7 @@ export const useCircuitStore = defineStore('CircuitStore', {
listcircuits: []
}),
getters: {
},
getters: {},
actions: {
getRemainingCoinsToSend(account: IAccount) {
@@ -52,6 +50,24 @@ export const useCircuitStore = defineStore('CircuitStore', {
return 0
},
getCircuitClass(circuit: ICircuit) {
if (circuit.status === shared_consts.CIRCUIT_STATUS.FASE3_MONETA_ABILITATA)
return 'circuito_abilitato'
else if (circuit.status === shared_consts.CIRCUIT_STATUS.FASE2_ORGANIZZAZIONE)
return 'circuito_fase_2'
else if (circuit.status === shared_consts.CIRCUIT_STATUS.FASE1_CREAZIONE_GRUPPO)
return 'circuito_in_creazione'
},
getColorCircuitClass(circuit: ICircuit) {
if (circuit.status === shared_consts.CIRCUIT_STATUS.FASE3_MONETA_ABILITATA)
return 'green'
else if (circuit.status === shared_consts.CIRCUIT_STATUS.FASE2_ORGANIZZAZIONE)
return 'orange'
else if (circuit.status === shared_consts.CIRCUIT_STATUS.FASE1_CREAZIONE_GRUPPO)
return 'red'
},
async loadCircuits() {
return Api.SendReq('/users/circuits', 'POST', null)
.then((res) => {

View File

@@ -212,6 +212,7 @@ export const costanti = {
CMD_DELETE: 1,
CMD_MODIFY: 2,
CMD_SHOW_PAGE: 3,
CMD_OPEN_PAGE: 4,
SHOW_ALL: 50,

View File

@@ -2605,6 +2605,12 @@ export const colTableCircuit = [
AddCol({ name: 'regulation', label_trans: 'circuit.regulation', fieldtype: costanti.FieldType.html, required: true }),
AddCol({ name: 'deperimento', label_trans: 'circuit.deperimento', fieldtype: costanti.FieldType.boolean, disable: true }),
AddCol({ name: 'transactionsEnabled', label_trans: 'circuit.transactionsEnabled', fieldtype: costanti.FieldType.boolean }),
AddCol({ name: 'status', label_trans: 'circuit.status',
fieldtype: costanti.FieldType.select,
jointable: 'statuscircuit',
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
}
),
AddCol({ name: 'data_costituz', label_trans: 'circuit.data_costituz', fieldtype: costanti.FieldType.date }),
AddCol({
name: 'photos',
@@ -2649,6 +2655,7 @@ export const colTableNotifCoins = [
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView,
}),
AddCol({ name: 'extrarec.qty', field: 'extrarec', subfield: 'qty', label_trans: 'movement.amount', fieldtype: costanti.FieldType.currency }),
AddCol({ name: 'extrarec.causal', field: 'extrarec', subfield: 'causal', label_trans: 'movement.causal', tipovisu: costanti.TipoVisu.TESTO_BORDATO }),
]
@@ -3016,6 +3023,15 @@ export const fieldsTable = {
colicon: 'icon',
noshow: true,
},
{
value: 'statuscircuit',
label: 'Stato Circuito',
columns: colTableGeneric,
colkey: 'value',
collabel: 'label',
colicon: 'icon',
noshow: true,
},
{
value: 'pub_to_share',
label: 'Visibilità',

View File

@@ -3717,6 +3717,16 @@ export const tools = {
return mystr.replace(/\s+/g, '')
},
removespaces_slash(mystr: string) {
mystr = mystr.replace(/\s+/g, '')
mystr = mystr.replace(/\//g, '')
mystr = mystr.replace(/:/g, '')
mystr = mystr.replace(/./g, '')
mystr = mystr.replace(/,/g, '')
mystr = mystr.replace(/'/g, '')
return mystr
},
copyStringToClipboard(myq: any, mystr: string, show: boolean) {
copyToClipboard(mystr).then(() => {
@@ -5899,6 +5909,7 @@ export const tools = {
color: '#ff5500',
deperimento: false,
transactionsEnabled: false,
status: shared_consts.CIRCUIT_STATUS.FASE1_CREAZIONE_GRUPPO,
symbol: 'RIS',
fido_scoperto_default: 100,
qta_max_default: 200,
@@ -5966,13 +5977,16 @@ export const tools = {
},
getFullFileName(arrimage: IImgGallery[], table: string, username: string, groupname: string) {
console.log('arrimage', arrimage)
if (shared_consts.TABLES_DIRECTORY_A_PARTE.includes(table)) {
return `upload/${table}/` + groupname + '/' + arrimage[0].imagefile
} else if (shared_consts.TABLES_DIRECTORY_SINGLE_IMG.includes(table)) {
return `upload/${table}/` + groupname + '/' + arrimage[0].imagefile
} else {
console.log('username', username, 'table', table)
if (arrimage && arrimage.length > 0) {
return 'upload/profile/' + username + '/' + table + '/' + arrimage[0].imagefile
return `upload/profile/${username}/${table}` + arrimage[0].imagefile
} else {
return ''
}

View File

@@ -1495,11 +1495,13 @@ export const useGlobalStore = defineStore('GlobalStore', {
}
},
getValueByTableSingle(table: string, val: any) {
getValueByTableSingle(table: string, val: any, lab?: any) {
if (table) {
const mylist = this.getTableJoinByName(table)
const key = fieldsTable.getKeyByTable(table)
const collab = fieldsTable.getLabelByTable(table)
let collab = lab
if (!lab)
collab = fieldsTable.getLabelByTable(table)
// console.table(mylist)
let risultato = ''
@@ -1622,6 +1624,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
else if (table === 'visibility') myarr = shared_consts.Visibility
else if (table === 'pub_to_share') myarr = shared_consts.Pub_to_Share
else if (table === 'visibilGroup') myarr = shared_consts.VisibilGroup
else if (table === 'statuscircuit') myarr = shared_consts.StatusCircuit
else if (table === 'lang') myarr = shared_consts.Lang
else if (table === 'regions') myarr = shared_consts.Regions
else if (table === 'shippings') myarr = shared_consts.Shippings

View File

@@ -7,7 +7,7 @@
Occorre prima registrarsi alla App </h3>
</div>
<div v-else-if="tools.isLogged()">
<div v-else-if="tools.isLogged() && path">
<h3>Circuito non Esistente</h3>
</div>
<div v-else>

View File

@@ -284,24 +284,24 @@
</div>
<div class="col-md-6 col-sm-6 q-ma-xs col-xs-12">
<CLabel
v-if="!!myuser.useraport"
:label="t('profile.aportador_him')"
>
<CMyUser
:mycontact="myuser.useraport"
:visu="costanti.FIND_PEOPLE"
@setCmd="tools.setCmd"
>
</CMyUser>
</CLabel>
</div>
</div>
</CTitleBanner>
</div>
<div class="col-md-6 col-sm-6 q-ma-xs col-xs-12">
<CLabel
v-if="!!myuser.useraport"
:label="t('profile.aportador_him')"
>
<CMyUser
:mycontact="myuser.useraport"
:visu="costanti.FIND_PEOPLE"
@setCmd="tools.setCmd"
>
</CMyUser>
</CLabel>
</div>
</div>