Files
myprojplanet_vite/src/components/CMyCircuit/CMyCircuit.ts

323 lines
13 KiB
TypeScript
Raw Normal View History

2025-03-01 14:14:43 +01:00
import type { PropType } from 'vue';
import { computed, defineComponent, onMounted, ref, watch } from 'vue';
import { useUserStore } from '@store/UserStore';
import { useCircuitStore } from '@store/CircuitStore';
2022-09-14 11:31:48 +02:00
2025-03-01 14:14:43 +01:00
import type { ICircuit, IMyCircuit, IMyGroup } from 'model';
import { IImgGallery, IUserFields, IUserProfile, IFriends, IAccount } from 'model';
import { costanti } from '@costanti';
import { shared_consts } from '@src/common/shared_vuejs';
import { tools } from '@tools';
import { useQuasar } from 'quasar';
import { useI18n } from 'vue-i18n';
import { useRoute, useRouter } from 'vue-router';
import { CUserNonVerif } from '@src/components/CUserNonVerif';
import { CSaldo } from '@src/components/CSaldo';
import { CTitleBanner } from '@src/components/CTitleBanner';
import { toolsext } from '@store/Modules/toolsext';
import { useGlobalStore } from '@store/globalStore';
import { userPanel } from 'app/src/rootgen/admin/userPanel';
2022-08-26 03:32:50 +02:00
export default defineComponent({
name: 'CMyCircuit',
emits: ['setCmd'],
2025-03-01 14:14:43 +01:00
components: { CUserNonVerif, CSaldo, CTitleBanner },
2022-08-26 03:32:50 +02:00
props: {
mycircuit: {
type: Object as PropType<ICircuit | null>,
required: false,
default: null,
},
circuitname: {
type: String,
required: false,
default: null,
},
prop_groupnameSel: {
type: Object as PropType<IMyGroup | null>,
required: false,
default: null,
},
2022-08-26 03:32:50 +02:00
visu: {
type: Number,
required: true,
},
noaut: {
type: Boolean,
required: false,
default: false,
2023-04-12 16:29:30 +02:00
},
username: {
type: String,
required: false,
default: '',
},
myuser: {
type: Object as PropType<IUserFields | null>,
required: false,
default: null,
},
2022-08-26 03:32:50 +02:00
},
setup(props, { emit }) {
const userStore = useUserStore();
const circuitStore = useCircuitStore();
const $q = useQuasar();
const { t } = useI18n();
const $router = useRouter();
const $route = useRoute();
2022-08-26 03:32:50 +02:00
const globalStore = useGlobalStore();
2022-08-26 03:32:50 +02:00
const circuit = ref(<IMyCircuit | ICircuit | null>null);
const account = computed(() => {
if (groupnameSel.value) {
return userStore.getAccountGroupByCircuitId(circuit.value._id, groupnameSel.value);
} else {
return circuit.value ? userStore.getAccountByCircuitId(circuit.value._id) : null;
}
});
2022-10-21 21:25:54 +02:00
const qtarem = computed(() =>
account.value ? circuitStore.getRemainingCoinsToSend(account.value) : 0
);
const saldo_pend = computed(() => (account.value ? account.value.saldo_pend : 0));
const saldo = computed(() => (account.value ? account.value.saldo : 0));
2022-09-14 11:31:48 +02:00
const fidoConcessoUtente = computed(() =>
circuitStore.getFidoConcessoByUsername(
props.myuser,
circuit.value._id,
groupnameSel.value ? '' : props.username,
groupnameSel.value ? groupnameSel.value.groupname : ''
)
);
2022-08-26 03:32:50 +02:00
const table = ref(shared_consts.TABLES_CIRCUITS);
const showingtooltip = ref(false);
const showrules = ref(false);
const requestToEnterCircuit = ref(false);
const groupnameSel = ref(<IMyGroup | null>null);
2022-08-26 03:32:50 +02:00
watch(
() => props.mycircuit,
(newval, oldval) => {
mounted();
}
);
2022-08-26 03:32:50 +02:00
2025-03-01 14:14:43 +01:00
function getNameCircuit() {
if (circuit.value) {
if (tools.existProp(circuit.value, 'name')) {
return tools.getProp(circuit.value, 'name');
2025-03-01 14:14:43 +01:00
} else if (tools.existProp(circuit.value, 'circuitname')) {
return tools.getProp(circuit.value, 'circuitname');
2025-03-01 14:14:43 +01:00
}
}
return '';
2025-03-01 14:14:43 +01:00
}
2022-08-26 03:32:50 +02:00
function mounted() {
groupnameSel.value = props.prop_groupnameSel;
2022-08-26 03:32:50 +02:00
if (!props.mycircuit) {
if (props.circuitname) {
circuit.value = null;
2022-08-26 03:32:50 +02:00
}
} else {
if (props.mycircuit) {
circuit.value = props.mycircuit;
2022-08-26 03:32:50 +02:00
}
}
2025-03-01 14:14:43 +01:00
if (circuit.value) {
const rectofind = circuitStore.listcircuits.find(
(circ: ICircuit) => circ.name === getNameCircuit()
);
if (rectofind) {
2023-01-06 15:51:58 +01:00
// console.log('rectofind', rectofind)
circuit.value = rectofind;
}
}
2022-08-26 03:32:50 +02:00
}
function getImgCircuit(circuit: ICircuit) {
return userStore.getImgByCircuit(circuit);
2022-08-26 03:32:50 +02:00
}
function naviga(path: string) {
$router.push(path);
2022-08-26 03:32:50 +02:00
}
function setCmd(cmd: number, myusername: string, value: any = '') {
emit('setCmd', cmd, myusername, value);
2022-08-26 03:32:50 +02:00
}
function myusername() {
return userStore.my.username;
2022-08-26 03:32:50 +02:00
}
2023-08-27 23:56:18 +02:00
function getRegulation(reg: string) {
let name = 'Provinciale';
2023-08-27 23:56:18 +02:00
if (!reg) {
name = getNameCircuit();
2023-08-27 23:56:18 +02:00
}
// Trasforma il vecchio HTML in uno moderno
return transformRegulationHTML(name);
2023-08-27 23:56:18 +02:00
}
function transformRegulationHTML(circuitName: string): string {
return `
<div class="regulation-content">
<div class="reg-header">
<h1>${circuitName}</h1>
</div>
<div class="reg-section">
<h2 class="section-title">Costituzione e scopo Comunitario</h2>
<p class="section-content">
La Comunità Territoriale "RIS ${circuitName}" spontanea (da ora "la Comunità") costituisce un circuito di scambio
tra i partecipanti, ciascuno dei quali dovrà indicare i beni e servizi che offre alla Comunità stessa in RIS.
Il circuito funziona come dettagliato qui di seguito.
</p>
</div>
<div class="reg-section">
<h2 class="section-title">Circuito di scambio</h2>
<p class="section-content">
La Comunità ha avviato un sistema di scambio di beni e servizi tra utenti, in cui il valore delle transazioni
si misura utilizzando una unità di conto denominata <strong>RIS</strong>, convenzionalmente considerata pari a 1 euro.
</p>
<p class="section-content">
Gli scambi tra utenti avvengono liberamente, dopo aver concordato il valore tra le parti.
</p>
<p class="section-content">
Tutti gli utenti partecipanti al circuito iniziano con un conto vuoto, cioè pari a 0 RIS.
</p>
<p class="section-content">
L'utente pagante che ha un conto RIS vuoto o con quantità non sufficiente a perfezionare lo scambio può utilizzare
la Fiducia Concessa andando in debito fino al limite massimo a lui permesso, denominato "fiducia concessa".
Un equivalente valore in RIS a credito sarà conseguentemente iscritto sul conto del ricevente.
</p>
<p class="section-content">
In ogni momento nel circuito la somma di tutte le esposizioni in positivo saranno perfettamente bilanciate dalla
somma di tutte le esposizioni in negativo, dimostrando così che ciascun detentore di un saldo positivo abbia
garantita la solvibilità del proprio credito. Ciascun detentore di un saldo negativo concorda che la sua
esposizione funge da garanzia della quantità di RIS equivalenti circolanti nel circuito e che può essere chiamato
a regolarizzare con equivalente pagamento in euro *, entro un lasso di tempo ragionevolmente adeguato, nel caso in cui:
</p>
<ul class="section-list">
<li>la Comunità, in accordo con il Gruppo Tecnico, deliberi il rientro di alcune posizioni con decisione motivata;</li>
<li>l'utente decida di uscire per motivi personali;</li>
<li>il circuito chiuda, per decisione deliberata o per motivi di forza maggiore.</li>
</ul>
<div class="highlight-box">
<strong>* Nota importante:</strong>
La regolarizzazione può avvenire con equivalente valore in beni e servizi, oppure, in ultima istanza,
con pagamento in euro.
</div>
</div>
<div class="reg-section">
<h2 class="section-title">Il Gruppo Tecnico</h2>
<p class="section-content">
La Comunità costituisce il Gruppo Tecnico di Gestione degli Scambi (da ora "Gruppo Tecnico"), partecipante esso
stesso agli scambi tramite uno o più delegati autorizzati. Il Gruppo Tecnico è l'organo che supporta la comunità
nella gestione degli scambi e quant'altro sia necessario all'ottimale svolgimento dello scopo comunitario.
</p>
<p class="section-content"><strong>In particolare ha il compito di:</strong></p>
<ul class="section-list">
<li>approvare le richieste di adesione, dopo aver verificato che il richiedente faccia parte della Comunità;</li>
<li>tenere aggiornato l'elenco dei partecipanti al circuito;</li>
<li>stabilire la soglia di massimo scoperto e massimo attivo, collettivo e individuale;</li>
<li>valutare la sostenibilità di eventuali stanziamenti di finanziamenti;</li>
<li>introdurre tassazioni sulle transazioni o una tantum;</li>
<li>adottare o meno il Deperimento dei conti inoperosi (riferimento sistema Si.Cre.Na.C.C.) e modularne i parametri di applicazione;</li>
<li>deliberare la chiusura del circuito;</li>
<li>deliberare la destinazione delle riserve comunitarie depositate sui Conti della Comunità per: finanziare opere varie;
corrispondere salari o agire con interventi di sussistenza a partecipanti in stato di necessità; rilevare lo stato
debitorio all'interno del circuito di utenti in difficoltà economica, irreperibili o venuti a mancare; attuare
interventi ritenuti utili, necessari o meritevoli;</li>
<li>redigere, emendare ed adeguare alle eventuali necessità il presente Regolamento.</li>
</ul>
<p class="section-content">
Il Gruppo Tecnico è formato da candidati scelti dalla Comunità sulla base delle competenze e dovrà sottoporre
all'approvazione della Comunità stessa resoconti periodici delle sue attività.
</p>
</div>
<div class="reg-section">
<h2 class="section-title">Sistemi di contabilizzazione</h2>
<p class="section-content">
I conti RIS e le transazioni conseguenti agli scambi sono registrati attraverso la piattaforma <strong>riso.app</strong>,
dove i partecipanti comunicano i beni e servizi proposti alla Comunità. Tutti i partecipanti possono visualizzare
in ogni momento la situazione del circuito.
</p>
<p class="section-content">
La Comunità, in accordo con il Gruppo Tecnico, può decidere di utilizzare altri strumenti di contabilizzazione,
che dovranno, in ogni caso, permettere l'inserimento delle singole transazioni effettuate tra gli utenti e la
visualizzazione da parte di ogni partecipante. Saranno dunque inseriti nel nuovo strumento tutti gli utenti
partecipanti con l'ultimo saldo rilevato al momento della transizione.
</p>
</div>
<div class="reg-section">
<h2 class="section-title">Conto Comunitario</h2>
<p class="section-content">
La Comunità può decidere di aprire uno o più Conti all'interno del circuito, che saranno gestiti dal Gruppo Tecnico,
allo scopo di interagire con i conti degli altri utenti e quindi recepire eventuali proventi da tassazioni o
finanziare iniziative autorizzate. I Conti Comunitari sono i conti della Comunità.
</p>
<p class="section-content">
Un conto a credito rappresenta una riserva monetaria da re-immettere nel circuito per finanziare opere o attività
di beneficio comune; un conto a debito rappresenta il "debito pubblico" della Comunità.
</p>
<p class="section-content">
I conti comunitari sono sottoposti alle stesse regole degli altri conti (conto vuoto, possibilità di scoperto di conto, ecc.).
Ogni operazione straordinaria viene deliberata appositamente, mentre l'ordinaria amministrazione può essere autorizzata
in via continuativa.
</p>
</div>
<div class="reg-section">
<h2 class="section-title">Riferimenti</h2>
<p class="section-content">
Per una migliore comprensione dei meccanismi che sottostanno allo scambio nel qui presentato circuito, si rimanda
alla lettura del testo disponibile gratuitamente su <strong>https://sicrenacc.info</strong>, da cui è stata tratta
libera ispirazione e condivisione dei principi generali del Sistema di Credito Naturale.
</p>
</div>
</div>
`;
}
onMounted(mounted);
2022-08-26 03:32:50 +02:00
return {
circuit,
2023-08-27 23:56:18 +02:00
getRegulation,
2022-08-26 03:32:50 +02:00
costanti,
getImgCircuit,
naviga,
setCmd,
shared_consts,
userStore,
tools,
table,
myusername,
2022-09-14 11:31:48 +02:00
circuitStore,
t,
account,
qtarem,
saldo,
saldo_pend,
2022-10-21 21:25:54 +02:00
globalStore,
showingtooltip,
showrules,
requestToEnterCircuit,
groupnameSel,
fidoConcessoUtente,
};
2022-08-26 03:32:50 +02:00
},
});