- Iscrizione Conacreis

- Ordini
- Carrello
This commit is contained in:
Paolo Arena
2021-04-30 01:32:44 +02:00
parent 30dbd9bb57
commit 0a0ed62e27
69 changed files with 1702 additions and 1243 deletions

View File

@@ -1,8 +1,8 @@
import moment from 'moment'
import 'moment/locale/fr'
moment.locale('fr')
import 'moment/locale/it'
moment.locale('it')
const monthsStrings = ['Janvier', 'Fevrier', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre']
const monthsStrings = ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre']
export class DateMoving {
public date: moment.Moment

View File

@@ -67,9 +67,9 @@ export const shared_consts = {
icon: 'fas fa-user-tie',
color: 'fuchsia'
},
Traduttrici: {
Editor: {
value: 16,
label: 'dashboard.traduttrici',
label: 'dashboard.Editor',
icon: 'fas fa-user-tie',
color: 'orange'
},
@@ -163,6 +163,14 @@ export const shared_consts = {
CANCELED: 10
},
OrderStatusView: [
2,
3,
4,
6,
10
],
OrderStatusStr: [
{
label: 'Nessuno',
@@ -173,7 +181,7 @@ export const shared_consts = {
value: 1
},
{
label: 'Ordine Inviato',
label: 'Ordine in Lavorazione',
value: 2
},
{

View File

@@ -16,6 +16,9 @@ export default class CDate extends Vue {
@Prop({ required: false, default: false }) public readonly!: boolean
@Prop({ required: false, default: false }) public disable!: boolean
@Prop({ required: false, default: '' }) public color!: string
@Prop({ required: false, default: false }) public rounded!: boolean
@Prop({ required: false, default: false }) public outlined!: boolean
@Prop({ required: false, default: true }) public dense!: boolean
public mystyleicon: string = 'font-size: 1.5rem;'
@@ -41,7 +44,7 @@ export default class CDate extends Vue {
const datavalida = tools.convertstrtoDate(value)
if (!!datavalida) {
this.valueInternal = datavalida
console.log('EMIT: changedate', datavalida)
console.log('EMIT: changedate', datavalida.toString())
this.$emit('input', this.getDate())
} else {
console.log(' DATA NON VALIDAAAAAAAAAAAAA ', value, datavalida)
@@ -50,7 +53,9 @@ export default class CDate extends Vue {
}
get getdatestring() {
return tools.getstrDate(this.valueInternal)
const mydate = tools.getstrDate(this.valueInternal)
console.log('getdatestring', mydate)
return mydate
}
get getdateyymmddstring() {
return tools.getstrYYMMDDDate(this.valueInternal)

View File

@@ -1,18 +1,22 @@
<template>
<q-input :class="data_class" :bg-color="color" :readonly="readonly" :disable="disable" debounce="1000" dense :value="getdatestring" stack-label :label="label" @input="changedate">
<template v-slot:append>
<q-icon name="event" class="cursor-pointer" :style="mystyleicon">
<q-popup-proxy v-if="!readonly" ref="datePicker">
<q-date :value="getdateyymmddstring" today-btn @input="changedate"></q-date>
</q-popup-proxy>
</q-icon>
</template>
</q-input>
<q-input :class="data_class" :bg-color="color" :readonly="readonly" :disable="disable" debounce="1000" :dense="dense"
:value="getdatestring" stack-label :label="label" @input="changedate" :rounded="rounded"
mask="##/##/####"
fill-mask
:outlined="outlined">
<template v-slot:append>
<q-icon name="event" class="cursor-pointer" :style="mystyleicon">
<q-popup-proxy v-if="!readonly" ref="datePicker">
<q-date :value="getdateyymmddstring" today-btn @input="changedate"></q-date>
</q-popup-proxy>
</q-icon>
</template>
</q-input>
</template>
<script lang="ts" src="./CDate.ts">
</script>
<style lang="scss" scoped>
@import './CDate.scss';
@import './CDate.scss';
</style>

View File

@@ -76,6 +76,7 @@ export default class CEventsCalendar extends MixinEvents {
numpeople: 1,
numpeopleLunch: 0,
numpeopleDinner: 0,
numpeopleDinnerShared: 0,
datebooked: tools.getDateNow(),
booked: false,
modified: false
@@ -347,6 +348,7 @@ export default class CEventsCalendar extends MixinEvents {
return (this.bookEventpage.bookedevent.numpeople !== this.bookEventForm.numpeople) ||
(this.bookEventpage.bookedevent.numpeopleLunch !== this.bookEventForm.numpeopleLunch) ||
(this.bookEventpage.bookedevent.numpeopleDinner !== this.bookEventForm.numpeopleDinner) ||
(this.bookEventpage.bookedevent.numpeopleDinnerShared !== this.bookEventForm.numpeopleDinnerShared) ||
(this.bookEventpage.bookedevent.msgbooking !== this.bookEventForm.msgbooking) ||
(this.bookEventpage.bookedevent.booked !== this.bookEventForm.booked)
}
@@ -470,6 +472,7 @@ export default class CEventsCalendar extends MixinEvents {
this.bookEventForm.numpeople = 1
this.bookEventForm.numpeopleLunch = 0
this.bookEventForm.numpeopleDinner = 0
this.bookEventForm.numpeopleDinnerShared = 0
this.bookEventForm.booked = true
this.bookEventpage.state = EState.Creating
@@ -696,6 +699,7 @@ export default class CEventsCalendar extends MixinEvents {
this.bookEventForm.numpeople = bookedevent.numpeople
this.bookEventForm.numpeopleLunch = bookedevent.numpeopleLunch
this.bookEventForm.numpeopleDinner = bookedevent.numpeopleDinner
this.bookEventForm.numpeopleDinnerShared = bookedevent.numpeopleDinnerShared
this.bookEventForm.infoevent = bookedevent.infoevent
this.bookEventForm.msgbooking = bookedevent.msgbooking
this.bookEventForm.booked = bookedevent.booked
@@ -750,6 +754,7 @@ export default class CEventsCalendar extends MixinEvents {
numpeople: self.bookEventForm.numpeople,
numpeopleLunch: self.bookEventForm.numpeopleLunch,
numpeopleDinner: self.bookEventForm.numpeopleDinner,
numpeopleDinnerShared: self.bookEventForm.numpeopleDinnerShared,
infoevent: tools.gettextevent(self, myevent),
msgbooking: self.bookEventForm.msgbooking,
booked: self.bookEventForm.booked,
@@ -758,6 +763,7 @@ export default class CEventsCalendar extends MixinEvents {
}
this.BookEvent(data).then((ris) => {
console.log('ris uscita di BookEvent', ris)
if (ris)
tools.showPositiveNotif(self.$q, self.$t('cal.booked') + ' ' + self.$t('cal.event') + ' "' + myevent.title + '"')
else

View File

@@ -1,6 +1,6 @@
<template>
<div class="landing">
<div v-if="!tools.IsLogged()">
<div v-if="!tools.IsLogged() && (!mysingleevent)">
<div class="centermydiv">
<q-banner class="bg-secondary text-white">
Il Calendario sarà visibile solo dopo aver effettuato l'accesso
@@ -210,6 +210,8 @@
:label="$t('event.lunchAvailable')"></q-checkbox>
<q-checkbox class="myflex wrap" dense v-model="eventForm.dinnerAvailable"
:label="$t('event.dinnerAvailable')"></q-checkbox>
<q-checkbox class="myflex wrap" dense v-model="eventForm.dinnerSharedAvailable"
:label="$t('event.dinnerSharedAvailable')"></q-checkbox>
<q-checkbox class="myflex wrap" dense v-model="eventForm.news"
:label="$t('event.news')"></q-checkbox>
<q-checkbox class="myflex wrap" dense v-model="eventForm.nobookable"
@@ -297,7 +299,7 @@
<q-card-section class="inset-shadow">
<q-img :src="getImgEvent(myevent)"
class="absolute-top"
style="height: 150px;"
style="height: 200px;"
:alt="myevent.title">
</q-img>
<div style="margin-top: 150px;">
@@ -350,7 +352,7 @@
<div v-if="myevent.dinnerAvailable" class="q-px-xs centermydiv" style="display: inline-flex; ">
<div style="display: inline-flex; " class="q-px-xs centermydiv">
<div class="itemprenota">{{ $t('cal.selnumpeopleDinner') }}</div>
<div class="q-gutter-xs " style="min-width: 140px; margin-left: 10px;">
<div class="q-gutter-xs " style="min-width: 180px; margin-left: 10px;">
<q-select
rounded outlined v-model="bookEventForm.numpeopleDinner"
:options="tools.SelectListNumPeople"
@@ -359,6 +361,18 @@
</div>
</div>
</div>
<div v-if="myevent.dinnerSharedAvailable" class="q-px-xs centermydiv" style="display: inline-flex; ">
<div style="display: inline-flex; " class="q-px-xs centermydiv">
<div class="itemprenota">{{ $t('cal.selnumpeopleDinnerShared') }}</div>
<div class="q-gutter-xs " style="min-width: 180px; margin-left: 10px;">
<q-select
rounded outlined v-model="bookEventForm.numpeopleDinnerShared"
:options="tools.SelectListNumPeople"
:label="$t('cal.DinnerShared')" emit-value map-options>
</q-select>
</div>
</div>
</div>
<q-input v-model="bookEventForm.msgbooking" :label="$t('cal.msgbooking')+':'"
type="textarea" debounce="500"

View File

@@ -1,922 +1,11 @@
<template>
<div>
<div v-if="toolsext.isLang('it')">
<CTitleBanner title="AYNI GIFT*ECOnomy"></CTitleBanner>
<CTitleBanner title=""></CTitleBanner>
<CImgText src="">
<p class="cltexth3 text-green-8 q-ma-sm"><span
class="boldhigh">Movimento di ECOnomia Solidale ~ AYNI GIFT*ECOnomy</span></p>
<p>
<strong>Ayni</strong> è un movimento di economia solidale. Si basa sulla pratica del
<strong>regalo</strong>,
del <strong>donare come risorsa e come ricchezza! Dare e donare mi apre al ricevere, crea relazioni
basate
sullaiuto e la gratitudine</strong>, non
sul profitto.</p>
<p>
<strong>Ayni</strong> è pensata e creata per permettere alle persone di aiutarsi e sostenersi fra di
loro, in
modo da realizzare i propri sogni e i propri progetti di vita. È un progetto serio che richiede, a
chi ne vuol
far parte, di
comprendere che questo non è un sistema per guadagnare o un classico fondo di investimento, ma un
modo per
recuperare quel fattore umano di aiuto reciproco attraverso il continuo sostegno e accompagnamento
dei nuovi
membri supportati da chi ha già fatto esperienza in questo e in altri movimenti di Economia
Solidale,
attraverso
il fare Rete, creando così <strong>relazioni e esperienze di Valore, generando Ricchezza
Reale</strong>.</p>
<p class="text-center"><strong>Strumenti necessari per far parte di AYNI</strong></p>
<ul class="lista text-center">
<li>Cellulare e/o computer</li>
<li>App Telegram</li>
</ul>
<p class="cltexth3 text-red q-ma-lg">Cosa devi fare per poter entrare in <strong>Ayni</strong>?</p>
<p class="cltexth3 text-blue q-ma-lg">Fase 1: Accoglienza</p>
<ul class="lista">
<li>Qualcuno ti ha invitato e ti ha dato il link di accesso al sito <strong>AYNI
GIFT*ECOnomy.</strong> e ti
sei iscritto.
</li>
<li>Entri nella chat Telegram <strong>Ayni EMPOWER</strong>, luogo dove ci incontriamo, accogliamo i
nuovi
invitati,
e ci aiutiamo a sostenere e ad espandere la nostra visione e il movimento.
</li>
<li>
Entri nel Canale Telegram <strong>AYNI BIBLIO</strong> che è un canale di informazioni in cui
vengono
postati
comunicati, notizie e novità sul movimento.
</li>
<li>
Infine abbiamo Telegram <strong>AYNI HELP</strong> dove puoi entrare ogni volta che dovessero
sorgerti
domande
o dubbi, trovando un aiuto pratico a tua disposizione.
</li>
</ul>
<p class="cltexth3 text-blue q-ma-lg">Fase 2: Completamento dei requisiti richiesti</p>
<ol class="lista">
<li>Leggere ed accettare le nostre Linee Guida e Guardare i Video Introduttivi al Movimento.</li>
<li>Attivare almeno <strong>2 metodi di pagamento</strong>.
<strong>Revolut, Payeer e Paypal (tramite MoneyBox)</strong> sono quelli maggiormente consigliati.<br>
</li>
</ol>
<p class="cltexth3 text-blue q-ma-lg">Fase 3: Lista d'imbarco e partenza della Nave</p>
<p>In AYNI La sequenza dei passaggi è programmata in anticipo, in modo da:</p>
<ul class="lista">
<li>garantire che i 3 passi del processo si svolgano nei tempi e nella forma previsti.</li>
<li>realizzare e concludere il processo in maniera semplice, godibile e semi-automatizzata.</li>
</ul>
<p>La tua Nave verrà programmata e tu entrerai in una chat coi tuoi compagni di viaggio. Allo stesso
tempo,
ti verrà comunicata la data in cui la tua Nave salperà, cioè quando potrai donare i 33€ e il
nominativo e i
dati del Sognatore a cui fare il tuo dono.
</p>
<p class="clBorderImportant" style="border-color: deepskyblue">
Le date di programmazione e dei passi sono intese come <em>previsioni di attivazione e di
completamento</em>.
Nel caso il flusso di persone e di invitati non consentisse di mantenere e realizzare quanto
programmato nei
tempi e forma previsti, le date verranno riprogrammate per permettere il completamento di tutti e
non lasciare
che il
viaggio possa interrompersi.
</p>
<p>Nel fare esperienza dei 3 passi incontreremo e transiteremo in 3 personaggi:</p>
<p style=""><strong>Donatore</strong>: Colui che effettua il Dono di 33€.<br>
<strong>Mediatore</strong>: È il ponte, colui che mette in relazione Donatori e Sognatore.<br>
<strong>Sognatore</strong>: Colui che manifesta il suo sogno ricevendo i Doni.<br>
</p>
<CTitleBanner title="Visualizza in Anteprima I 3 Passi (clicca qui)" bgcolor="bg-green-5" canopen="true"
:visible="false" imgpreview="statics/images/passo_1.jpg">
<p>Dal momento in cui conosco il giorno della partenza della mia Nave, i passi da compiere
saranno questi:</p>
<div class="text-center">
<q-img src="statics/images/passo_1.jpg" class="img"></q-img>
</div>
<p class="grass">Entro nella chat Telegram come Donatore:</p>
<p>La chat è formata da 8 donatori e un mediatore.<br>
Il mio compito è di regalare 33€ al Sognatore (il mediatore mi guiderà nel processo).<br>
Il dono lo farò nella data di attivazione della billetera e del passo 1.</p>
<div class="text-center">
<q-img src="statics/images/passo_2.jpg" class="img"></q-img>
</div>
<p class="grass">Apro una chat Telegram e divento Mediatore:</p>
<p>La chat è formata da 8 donatori (che aiuterò ad entrare in chat) e da me, il Mediatore.<br>
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.
</p>
<div class="text-center">
<q-img src="statics/images/passo_3.jpg" class="img"></q-img>
</div>
<p class="grass">Divento Sognatore:</p>
<p>La chat dove sono Sognatore è la stessa e con le stesse persone aperta nel passo 2 (dove io ero
Mediatore)
e anche qui cambiano i ruoli, ovvero ora ci sono 8 mediatori e io, il Sognatore.<br>
Il mio compito è quello di aprirmi a ricevere i Doni da ciascun Donatore, completarmi e
celebrare
lAbbondanza.<br>
<br>
</p>
</CTitleBanner>
<p class="text-blue-10 q-ma-lg clBorderImportant text-center" style="font-size: 1.15rem;">La Chat
Automatica
<strong>AYNI BOT</strong> mi invierà tutte le istruzioni che dovrò compiere, al momento opportuno!
</p>
<p class="cltexth2 text-green-8 q-ma-lg"><span class="boldhigh">Bene... Ora mettiti comodo, il tuo viaggio è cominciato!</span>
</p>
class="boldhigh">Movimento </span></p>
</CImgText>
</div>
<div v-else-if="toolsext.isLang('si')">
<CTitleBanner title="AYNI DARILO * ECOnomy"></CTitleBanner>
<CImgText src="">
<p class="cltexth3 text-green-8 q-ma-sm"><span
class="boldhigh">Gibanje Solidarna ECOnomia ~ AYNI DARILO * ECOnomy</span></p>
<p>
Ayni je gibanje solidarnostnega gospodarstva. Temelji na praksi darovanja, dajanja kot viru in
obilja! Dajanje me odpira do sprejemanja, ustvarja odnose, ki temeljijo na pomoči in hvaležnosti, ne
na dobičku.
</p>
<p>
Ayni je zasnovana in ustvarjena tako, da si ljudje medsebojno pomagajo in se podpirajo, da bi
dosegli svoje sanje in življenjske cilje. Gre za resen projekt, ki od tistih, ki želijo biti del
tega, zahteva, razumevanje, da ne gre za sistem zaslužka ali klasičen investicijski sklad, ampak
način, ki skozi medsebojno pomočjo, nenehno podporo in spremljavo novih članov, ki so podprti z
osebami, ki so to izkušnjo že sami doživeli v tem ali podobnem gibanju Solidarne Ekonomije in
ustvarili mreženje in ustvarili tako odnose, pridobili vredne izkušnje ter ustvarili resnično
obilje.</p>
<p class="text-center"><strong>Za vključitev v AYNI potrebujete:</strong></p>
<ul class="lista text-center">
<li>Mobilni telefon in / ali računalnik</li>
<li>Aplikacijo Telegram</li>
</ul>
<p class="cltexth3 text-red q-ma-lg">Kaj morate storiti, da lahko vstopite v Ayni?</p>
<p class="cltexth3 text-blue q-ma-lg">1. Faza: sprejem</p>
<ul class="lista">
<li>Nekdo vas je povabil in vam posredoval povezavo za dostop do spletnega mesta AYNI GIFT *
ECOnomy. in ste se prijavili.
</li>
<li>Vstopite v klepet Telegram Ayni EMPOWER, kraj, kjer se srečujemo, pozdravljamo nove člane, se
medsebojno podpiramo, širimo našo vizijo in gibanje.
</li>
<li>Vstopite v kanal Telegram AYNI BIBLIO, ki je informacijski kanal, na katerem so objavljena
sporočila za javnost, novice in novice o gibanju.
</li>
<li>
Končno imamo na voljo Telegram AYNI HELP, kamor lahko pišete in vprašate karkoli vas zanima ali
kakršnikoli dvom in poiščete praktično pomoč.
</li>
</ul>
<p class="cltexth3 text-blue q-ma-lg">2. Faza: Izpolnitev zahtevanih zahtev
</p>
<ol class="lista">
<li>Preberite in sprejmite naše smernice ter si pogledate uvodne video posnetke gibanja.</li>
<li>Aktivirajte vsaj 2 načina plačila.
<strong>Revolut, Payeer in Paypal (preko MoneyBoxa)</strong> so najbolj priporočljivi.<br>
</li>
</ol>
<p class="cltexth3 text-blue q-ma-lg">3. faza: Programiranje in aktiviranje ladjice</p>
<p>V AYNI Zaporedje korakov je vnaprej programirano, da:</p>
<ul class="lista">
<li>zagotovite, da se trije koraki postopka odvijajo po načrtih in v pričakovani obliki.</li>
<li>Izvedete in zaključite postopek na preprost, prijeten in polavtomatski način.
</li>
</ul>
<p>
Ko bo vaša ladjica na sporedu, boste v njo vstopili v klepet s sopotniki. Hkrati boste obveščeni
o datumu starta ladjice, kjer boste lahko podarili 33 evrov, ter izvedeli ime s podatke Sanjača,
ki mu izročite svoje darilo. Izvedeli boste tudi datume vseh treh korakov.
</p>
<p class="clBorderImportant" style="border-color: deepskyblue">
Datumi in koraki programiranja so mišljeni kot „napovedi aktiviranja in zaključka“. V primeru, da
pretok ljudi ne dovoli obdržati in izvesti načrtovanega v predvidenem roku in obliki, bodo datumi
prestavljeni, da se vsem omogoči dokončanje in se tako ne dovoli prekinitev potovanja.
</p>
<p>Pri procesu treh korakov se bomo srečali in prešli skozi 3 imena:</p>
<p style=""><strong>Donator</strong>: tisti, ki donira 33 €.<br>
<strong>Posrednik- Mediator</strong>: Most med tistim, ki povezuje donatorje in sanjača.<br>
<strong>Sanjač</strong>: Kdor svoje sanje manifestira s sprejemanjem Daril.<br>
</p>
<CTitleBanner title="Predogled 3 korakov (kliknite tukaj)" bgcolor="bg-green-5" canopen="true"
:visible="false" imgpreview="statics/images/passo_1.jpg">
<p>Od trenutka, ko bom izvedel dan odhoda svoje ladje, bodo naslednji koraki naslednji:</p>
<div class="text-center">
<q-img src="statics/images/passo_1.jpg" class="img"></q-img>
</div>
<p class="grass">V klepet Telegrama vstopim kot donator:</p>
<p>Klepet sestavlja 8 donatorjev in mediator-posrednik.<br>
Moja naloga je, da sanjaču vplačam 33 evrov (mediator me bo vodil v postopku).
Darilo bom izvedel na datum starta moje ladje In 1. koraka.</p>
<div class="text-center">
<q-img src="statics/images/passo_2.jpg" class="img"></q-img>
</div>
<p class="grass">Odprem telegramski klepet in postanem posrednik:</p>
<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.
</p>
<div class="text-center">
<q-img src="statics/images/passo_3.jpg" class="img"></q-img>
</div>
<p class="grass">Postanem sanjač:</p>
<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.
</p>
</CTitleBanner>
<p class="text-blue-10 q-ma-lg clBorderImportant text-center" style="font-size: 1.15rem;">Samodejni
klepet <strong>AYNI BOT</strong> mi bo ob pravem času poslal vsa navodila, ki jih bom moral
izpolniti!
</p>
<p class="cltexth2 text-green-8 q-ma-lg"><span class="boldhigh">No ... Zdaj se udobno opremite, vaše potovanje se je začelo!</span>
</p>
</CImgText>
</div>
<div v-else-if="toolsext.isLang('es')">
<CTitleBanner title="AYNI GIFT*ECOnomy"></CTitleBanner>
<CImgText src="">
<p class="cltexth3 text-green-8 q-ma-sm"><span
class="boldhigh">Economía Solidaria ~ AYNI GIFT*ECOnomía</span></p>.
<p>
<strong>Ayni</strong> es un movimiento de economía solidaria. Se basa en la práctica del
hacer un <strong>regalo</strong>,
de <strong> dar como recurso y como riqueza!</strong> Dar me abre a recibir, crea relaciones basadas
en la
ayuda y la gratitud, no en el beneficio.
</p>
<p>
<strong>Ayni</strong> está diseñado y creado para permitir a las personas ayudarse y apoyarse
mutuamente, para que puedan hacer realidad sus sueños y sus planes de vida. Es un proyecto serio que
requiere, por parte de aquellos a quienes les gustaría participar, de entender primero que nada, que
este no es un sistema para hacer dinero o un fondo de inversión clásico, sino una forma de recuperar
ese factor humano de ayuda mutua a través del apoyo y el acompañamiento continuo de los nuevos
miembros que vendràn guiados por quienes ya han tenido experiencia en este y otros movimientos de
Economía Solidaria, a través de La creación de redes, creando así relaciones y experiencias de
Valor, generando Riqueza Real.
</p>
<p class="text-center"><strong>Herramientas necesarias para formar parte de AYNI</strong></p>.
<ul class="text-center lista">
<li>Teléfono móvil y/o ordenador</li>
<li>Telegram de aplicación</li>
</ul>
<p class="cltexth3 text-red q-ma-lg">¿Qué tienes que hacer para entrar en <strong>Ayni</strong>?</p>
<p class="cltexth3 text-blue q-ma-lg">Paso 1: Recepción</p>
<ul class="lista">
<li>Alguien te invitó y te dio el enlace de acceso a la página web de AYNI GIFT*ECOnomy.
estás inscrito.
</li>
<li>Entra en el chat Telegram <strong>AYNI-EMPOWER</strong>, lugar donde nos encontramos, damos la
bienvenida a los nuevos invitados, y somos ayudados para ampliar nuestra visión del movimiento.
</li>
<li>
Entra en el canal de Telegram <strong>AYNI-BIBLIO</strong> que es un canal de información donde
puedes conseguir las publicaciones con comunicados, noticias y novedades sobre el movimiento.
</li>
<li>
Finalmente tenemos el Telegram <strong>AYNI-HELP</strong> donde puedes entrar cuando quieras
preguntar o tengas
dudas, encontrando ayuda práctica a su disposición.
</li>
</ul>
<p class="cltexth3 text-blue q-ma-lg">Paso 2: Cumplimiento de los requisitos</p>.
<ol class="lista">
<li>Lee y acepta nuestras directrices y ve los vídeos de introducción al movimiento.
<li>Activar por lo menos <strong>2 métodos de pago</strong>.
<strong>Revolut, Payeer y Paypal (a través de MoneyBox)</strong> son los más recomendados.<br>
</li>
</ol>
<p class="cltexth3 text-blue q-ma-lg">Paso 3: Programación y activación de mi Nave</p>.
<p>En AYNI La secuencia de pasos está programada de antemano, de modo que:</p>
<ul class="lista">
<li>Podemos garantizar que los 3 pasos del proceso se lleven a cabo en el tiempo y la forma
previstos.
</li>
<li>Realizamos y terminamos el proceso de una manera simple, agradable y semi-automática.</li>
</ul>
<p>Tu Nave será programada y entrarás en una chat con tus compañeros de viaje. Al mismo tiempo, se te
informará de la fecha en la que se activará tu Nave en la que podrás donar los 33 € y el nombre y el
los datos del Soñador para darle su regalo.
</p>
<p class="clBorderImportant" style="border-color: deepskyblue">
Las fechas de programación y los pasos se entienden como "<em>activación y predicciones de
finalización</em>".
En caso de que el flujo de personas e invitados no permita mantener y lograr lo que se ha programado
en el momento y de la forma esperada, las fechas se re programaran para permitir la finalización de
todos y no dejar que el viaje pueda ser interrumpido.
</p>
<p>En la experiencia de los 3 pasos nos encontraremos y pasaremos por 3 caracteres:</p>
<p style=""><strong>Donante</strong>: El que hace el regalo de 33 €.<br>
<strong>Mediador</strong>:Él es el puente, el que conecta a los donantes y al Soñador.<br>
<strong>Soñador</strong>: Aquel que manifiesta su sueño recibiendo los Regalos.<br>
</p>
<CTitleBanner title="Previsualización de los 3 pasos (click aquí)" bgcolor="bg-green-5" canopen="true"
:visible="false" imgpreview="statics/images/passo_1.jpg">
<p>Desde el momento en que sé el día de la salida de mi Nave, los pasos a seguir
serán estos:</p>
<div class="text-center">
<q-img src="statics/images/passo_1.jpg" class="img"></q-img>
</div>
<p class="grass">Entraré en el chat de Telegram como Donador:</p>
<p>El chat está formada por 8 Donantes y un mediador.
Mi tarea es dar 33 € al Soñador (el mediador me guiará en el proceso).
<br>
Daré el regalo en la fecha de activación de la Nave y el paso 1.
<div class="text-center">
<q-img src="statics/images/passo_2.jpg" class="img"></q-img>
</div>
<p class="grass">Abro un chat de Telegram y me convierto en Mediador:</p>
<p>El chat consiste en 8 donantes (a los que ayudaré a entrar en el chat) y yo.<br>
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.
<div class="text-center">
<q-img src="statics/images/passo_3.jpg" class="img"></q-img>
</div>
<p class="grass">Conviértete en un Soñador:</p>
<p>El chat donde soy Soñador es el mismo y con las mismas personas abierto en el paso 2 (donde fui
Mediador)
e incluso aquí los papeles cambian, es decir, ahora hay 8 Mediadores y yo, el Soñador.
Mi tarea es abrirme para recibir los regalos de cada donante, completarme y celebrar
la Abundancia.
El paso 3 se activa normalmente 4 días después del paso 2.<br><br>.
</p>
</CTitleBanner>
<p class="text-blue-10 q-ma-lg clBorderImportant text-center" style="font-size: 1.15rem;">El Chat
Automático
<strong>AYNI BOT</strong> me enviará todas las instrucciones que necesito hacer en el momento
adecuado.
</p>
<p class="cltexth2 text-green-8 q-ma-lg"><span class="boldhigh">Bueno... Ahora ponte cómodo, ¡tu viaje ha comenzado!</span>
</p>
</CImgText>
</div>
<div v-else-if="toolsext.isLang('pt')">
<CTitleBanner title="AYNI GIFT*ECOnomy"></CTitleBanner>
<CImgText src="">
<p class="cltexth3 text-green-8 q-ma-sm"><span
class="boldhigh">Movimento ECOnomy Solidarity ~ AYNI GIFT*ECOnomy</span></p>.
<p>
<strong>Ayni</strong> é um movimento de economia solidária. É baseado na prática de
<strong>presente</strong>,
de <strong>give como um recurso e como riqueza! Dar e dar me abre para receber, cria relacionamentos
baseados
em
sobre ajuda e gratidão</strong>, não
sobre o lucro.</p>
<p>
<strong>Ayni</strong> foi concebido e criado para permitir que as pessoas se ajudem e apoiem umas às
outras,
em
para que possas tornar os teus sonhos e os teus planos de vida realidade. É um projeto sério que
requer, para
aqueles que o querem
pertencer, a
entender que este não é um sistema para fazer dinheiro ou um fundo de investimento clássico, mas uma
forma de
recuperar esse factor humano de ajuda mútua através do contínuo apoio e acompanhamento do novo
membros apoiados por aqueles que já tiveram experiência neste e em outros movimentos de Economia
Solidária, através de
Trabalho em rede, criando assim relações <strong>relacionamentos e experiências de Valor, gerando
Riqueza
Real</strong>.</p>
<p class="text-center"><strong>Ferramentas necessárias para fazer parte do AYNI</strong></p>.
<ul class="text-center lista">
<li>Móvel telefone e/ou computador</li>
<li>Telegrama de aplicação</li>
</ul>
<p class="cltexth3 text-red q-ma-lg">O que você precisa fazer para entrar em <strong>Ayni</strong>?</p>
<p class="cltexth3 text-blue q-ma-lg">Passo 1: Recepção</p>
<ul class="lista">
<li>Algém o convidou e deu-lhe o link de acesso ao site <strong>AYNI GIFT*ECOnomy.</strong> e você
você está inscrito.
</li>
<li>Vá para o chat Telegrama <strong>Ayni EMPOWER</strong>, lugar onde nos encontramos, acolhemos
novas
pessoas
convidados,
e ajudar-nos a apoiar e expandir a nossa visão e movimento.
</li>
<li>
Entre no Canal de Telegrama <strong>BIBLIOTECA AYNI LIBRARY</strong> que é um canal de
informação onde você
pode obter
publicado
comunicados, notícias e notícias sobre o movimento.
</li>
<li>
Finalmente temos Telegrama <strong>AYNI HELP</strong> onde você pode entrar quando quiser
questões
ou dúvidas, encontrando ajuda prática à sua disposição.
</li>
</ul>
<p class="cltexth3 text-blue q-ma-lg">Passo 2: Conclusão dos requisitos</p>.
<ol class="lista">
<li>Ler e aceitar nossas Diretrizes e Assistir os Vídeos Introdutórios ao Movimento.
<li>Ativar pelo menos <strong>2 formas de pagamento</strong>.
<strong>Revolut, Payeer e Paypal (via MoneyBox)</strong> são os mais recomendados.<br>
</li>
</ol>
<p class="cltexth3 text-blue q-ma-lg">Passo 3: Programação e ativação do Navio</p>.
<p>Em AYNI A sequência de passos é programada com antecedência, de modo que:</p>
<ul class="lista">
<li>garantia de que as 3 etapas do processo ocorrem dentro do prazo e da forma prevista.</li>
<li>Fazer e terminar o processo de uma forma simples, agradável e semi-automática.</li>
</ul>
<p>Sua nave será programada e você entrará em uma conversa com seus colegas passageiros. Ao mesmo tempo,
você será informado da data em que seu navio navegará, ou seja, quando você poderá doar os 33 euros
e o nome e
dados do Sonhador para dar o seu presente.
</p>
<p class="clBorderImportant" style="border-color: deepskyblue">
As datas de programação e os passos são entendidos como '<em>previsão de ativação e conclusão</em>'.
No caso do fluxo de pessoas e convidados não permitir manter e alcançar o que foi programado no
tempos e
formulário esperado, as datas serão reprogramadas para permitir a conclusão de todos e não deixar o
a viagem pode ser interrompida.
</p>
<p>Na experiência dos 3 passos vamos nos encontrar e passar em 3 caracteres:</p>
<p style=""><strong>Doador</strong>: Aquele que faz o Presente de 33 €.<br>
<strong>Mediador</strong>: Ele é a ponte, aquele que liga os Doadores ao Sonhador.<br>
<strong>Dreamer</strong>: Aquele que manifesta o seu sonho ao receber os Presentes.<br>
</p>
<CTitleBanner title="Preview The 3 Steps (click here)" bgcolor="bg-green-5" canopen="true"
visible="false" imgpreview="statics/images/step_1.jpg">
<p>A partir do momento em que sei o dia da partida do meu bilhete, os passos a dar
serão estes:</p>
<div class="text-center">
<q-img src="statics/images/passi_1.jpg" class="img"></q-img>
</div>
<p class="grass">Entro no chat Telegrama como Doador:</p>
<p>A conversa consiste em 8 doadores e um mediador.<br>
A minha tarefa é dar 33 € ao Sonhador (o mediador irá guiar-me no processo).<br>
O presente será dado na data de ativação do boleto e no passo 1.
<div class="text-center">
<q-img src="statics/images/passi_2.jpg" class="img"></q-img>
</div>
<p class="grass">abro uma conversa por telegrama e torno-me Provedor de Justiça:</p>
<p>O chat consiste em 8 doadores (que eu ajudarei a entrar no chat) e eu, o Mediador.<br>
O meu trabalho é garantir que todos os Doadores façam o Presente para o Sonhador.
O sistema enviará automaticamente instruções para fazer o Presente, o Mediador (I) irá verificar
e
irá acompanhar o processo.<br>
<div class="text-center">
<q-img src="statics/images/passi_3.jpg" class="img"></q-img>
</div>
<p class="grass">Dreamer Become a Dreamer:</p>
<p>O chat onde eu sou o Dreamer é o mesmo e com as mesmas pessoas abertas no passo 2 (onde eu fui
mediador)
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>
</p>
</CTitleBanner>
<p class="text-blue-10 q-ma-lg clBorderImportant text-center" style="font-size: 1.15rem;">O Chat
Automático
<strong>AYNI BOT</strong> me enviará todas as instruções que preciso de fazer no momento apropriado!
<p class="cltexth2 text-green-8 q-ma-lg"><span class="boldhigh">Good... Agora fique à vontade, a sua viagem já começou!</span>
</p>
</CImgText>
</div>
<div v-else-if="toolsext.isLang('fr')">
<CTitleBanner title="AYNI GIFT*ECOnomy"></CTitleBanner>
.
<CImgText src="">
<p class="cltexth3 text-green-8 q-ma-sm"><span
class="boldhigh">Mouvement dĒCOnomie Solidaire ~AYNI GIFT*ECOnomy</span></p>.
<p>
<strong>Ayni</strong> est un mouvement d'économie solidaire. Il est basé sur la <strong>pratique du
don</strong>, de
lacte de donner comme ressource et comme richesse ! Donner et offrir m'ouvre à recevoir, crée des
relations basées sur le <strong>soutien et la gratitude</strong>, et non sur le profit.</p>
<p>
<strong>Ayni</strong> est pensée et créée pour permettre aux personnes de s'aider et de se soutenir
mutuellement, pour réaliser les propres rêves et les propres projets de vie. C'est un projet sérieux
qui nécessite, pour ceux qui veulent y participer, de comprendre qu'il ne s'agit pas d'un système
pour gagner de l'argent ou d'un fond d'investissement classique, mais d'un moyen qui invite à
récupérer le facteur humain d'entraide à travers le soutien et l'accompagnement continus des
nouveaux participants/es par ceux et celles qui ont déjà eu une expérience dans ce mouvement et dans
d'autres mouvements d'Ēconomie Solidaire, par le biais dune mise en réseau, créant ainsi des
relations et des expériences de <strong>Valeur, générant une Véritable Richesse</strong>.</p>
<br>
<p class="text-center"><strong>Les outils nécessaires pour faire partie de AYNI</strong></p>.
<ul class="text-center lista">
<li>Téléphone portable et/ou ordinateur</li>
<li>App Telegram</li>
</ul>
<p class="cltexth3 text-red q-ma-lg">Qu'est-ce qu'il faut faire pour entrer dans <strong>Ayni</strong>?
</p>
<p class="cltexth3 text-blue q-ma-lg">Etape 1: ACCUEIL</p>
<ul class="lista">
<li>Quelqu'un vous a invité et vous a donné le lien d'accès au site <strong>AYNI
GIFT*ECOnomy.</strong> et vous vous êtes inscrit.
</li>
<li>Entrez dans le chat Télégram <strong>Ayni-EMPOWER</strong>, lieu de rencontre, accueil de
nouvelles
personnes invitées, et nous aidons à soutenir et à élargir notre vision et notre mouvement.
</li>
<li>
Entrez dans le chat Télégram <strong>AYNI-BIBLIO</strong> qui est un canal d'informations
où sont publiés des communiqués, des nouvelles et des informations sur le mouvement.
</li>
<li>
Enfin, nous avons Télégram <strong>AYNI-HELP</strong> où vous pouvez entrer quand vous voulez
pour toutes demandes ou doutes, en trouvant une aide pratique à votre disposition-
</li>
</ul>
<p class="cltexth3 text-blue q-ma-lg">Étape 2: COMPLÉTER LES REQUIS DEMANDĒS</p>.
<ol class="lista">
<li>Lisez et acceptez nos lignes directrices et regardez les vidéos d'introduction au mouvement.
<li>Activer au moins 2 <strong>moyens de paiement</strong>
<strong>Revolut, Payeer et Paypal (via MoneyBox)</strong> sont les plus recommandés.<br>
</li>
</ol>
<p class="cltexth3 text-blue q-ma-lg">Etape 3: PROGRAMMATION ET ACTIVATION DE DES NAVIRES</p>.
<p>Dans AYNI La séquence des étapes est programmée à l'avance, de sorte à:</p>
<ul class="lista">
<li>garantir que les 3 passages du processus se déroulent dans les délais et sous la forme prévus
</li>
<li>réaliser et terminer le processus de manière simple, agréable et semi-automatique.</li>
</ul>
<p>Votre Navire sera programmé et vous entrerez en conversation avec vos compagnons de voyage. Dans le
même temps, vous serez informé(e) de la date à laquelle le navire sera activé et à laquelle vous
pourrez faire le Don des 33€, ainsi que le nom et les données du Rêveur/Rêveuse à qui faire votre
Don. Vous connaîtrez également les dates de chacune des 3 étapes.
</p>
<p class="clBorderImportant" style="border-color: deepskyblue">
Les dates de programmation et les étapes sont comprises comme <em>"prévisions dactivation et de
complètement"</em>. Au cas où le flux de personnes et d'invités ne permettrait pas de maintenir et
de
réaliser ce qui a été programmé dans les délais et forme prévus, les dates seront reprogrammées pour
permettre le complètement à toutes et tous et pour éviter que le voyage puisse être interrompu.
</p>
<p>Dans l'expérience des 3 étapes nous rencontrerons et interpréterons 3 personnages:</p>
<p style=""><strong>Donateur</strong>: Celui/celle qui fait le Don de 33€.<br>
<strong>Médiateur</strong>: Il/Elle est le pont, celui ou celle qui met en relation le Donateur et
le Rêveur.<br>
<strong>Rêveur</strong>: Celui/celle qui manifeste son rêve en recevant les Dons.<br>
</p>
<CTitleBanner title="Aperçu des 3 étapes (cliquez ici)" bgcolor="bg-green-5" canopen="true"
:visible="false" imgpreview="statics/images/passo_1.jpg">
<p>À partir du moment où je connais le jour du départ de mon navire, les étapes à suivre seront les
suivantes:</p>
<div class="text-center">
<q-img src="statics/images/passo_1.jpg" class="img"></q-img>
</div>
<p class="grass">J'entre dans le chat du télégramme en tant que Donateur/Donatrice:</p>
<p>Le chat est formé de 8 donateurs et d'un médiateur.<br>
Mon rôle consiste à donner 33 € au Rêveur (le Médiateur me guidera dans le processus).<br>
Je ferai le Don à la date de départ de mon navire et à l'étape 1.
<div class="text-center">
<q-img src="statics/images/passo_2.jpg" class="img"></q-img>
</div>
<p class="grass">J'ouvre un chat Telegram et deviens Médiateur/Médiatrice:</p>
<p>Le chat est formé de 8 Donateurs (que j'aiderai à entrer dans le chat) et moi, le Médiateur. <br>
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>
<div class="text-center">
<q-img src="statics/images/passo_3.jpg" class="img"></q-img>
</div>
<p class="grass">Je deviens Rêveur/Rêveuse:</p>
<p>Le chat où je suis Rêveur est le même et avec les mêmes personnes ouvert à l'étape 2 ( j'étais
Médiateur) et ici aussi les rôles changent, c'est-à-dire qu'il y a maintenant 8 médiateurs et
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>
</p>
</CTitleBanner>
<p class="text-blue-10 q-ma-lg clBorderImportant text-center" style="font-size : 1.15rem ;">La Chat
automatique AYNI BOT m'enverra toutes les instructions nécessaires que je devrai réaliser au moment
opportun !
<p class="cltexth2 text-green-8 q-ma-lg"><span class="boldhigh">Bien... Mettez-vous à l'aise, votre voyage a commencé
</span>
</p>
</CImgText>
</div>
<div v-else>
<CTitleBanner title="AYNI GIFT*ECOnomy"></CTitleBanner>
<CImgText src="">
<p class="cltexth3 text-green-8 q-ma-sm"><span
class="boldhigh">Movement ECOnomy Solidarity ~ AYNI GIFT*ECOnomy</span></p>.
<p>
<strong>Ayni</strong> is a solidarity economy movement. It is based on the practice of
<strong>gift</strong>,
<strong>give as a resource as well as abundance! Giving open me up to receiving, creates
relationships based on help and gratitude</strong>, not on profit.</p>
<p>
<strong>Ayni</strong> is designed and created to allow people to help and support each other, so you
can make your dreams and your life plans come true. It is a serious project that gives, for those
who want to be part of it, understanding that this is not a system for making money or a classic
investment fund, but a way to recover that human factor of mutual aid through the continuous support
and accompaniment of the new members supported by those who have already had experience in this and
other Solidarity Economy movements through Networking, thus creating <strong>relationships and
experiences of Value, generating Real abundance.</strong>.</p>
<div class="text-center">
<p class="text-center"><strong>Tools needed to be part of AYNI</strong></p>.
<ul class="lista center_img">
<li>Mobile phone and/or computer</li>
<li>App Telegram</li>
</ul>
</div>
<p class="cltexth3 text-red q-ma-lg">What do you have to do to get into <strong>Ayni</strong>?</p>
<p class="cltexth3 text-blue q-ma-lg">Step 1: Welcome</p>
<ul class="lista">
<li>Someone invited you and gave you the login link to <strong>AYNI GIFT*ECOnomy.</strong> and you
signed up.
</li>
<li>Go into the Telegram <strong>Ayni-EMPOWER</strong> chat, where we meet, welcome new guests,
and help us to support and expand our vision and movement.
</li>
<li>
Enter the Telegram Channel <strong>AYNI-BIBLIO</strong> which is an information channel in which
you post communications, news and news about the movement.
</li>
<li>
Finally we have Telegram <strong>AYNI-HELP</strong> where you can enter whenever questions or
doubts arise, finding practical help at your disposal.
</li>
</ul>
<p class="cltexth3 text-blue q-ma-lg">Step 2: Completion of requirements</p>
<ol class="lista">
<li>Read and accept our Guidelines and Watch the Introductory Videos to the Movement.
<li>Activate at least <strong>2 payment methods</strong> (is recommended).
<strong>Revolut, Payeer and Paypal (via MoneyBox)</strong> are the most recommended.<br>
</li>
</ol>
<p class="cltexth3 text-blue q-ma-lg">Step 3: Programming and Activation of the Ship</p>
<p>In AYNI The sequence of steps is programmed in advance, so that:</p>
<ul class="lista">
<li>guarantee that the 3 steps of the process take place on time and in the form provided.</li>
<li>make and finish the process in a simple, enjoyable and semi-automated way.</li>
</ul>
<p>Your Ship will be programmed and you'll enter a chat with your fellow travellers. At the same time,
you will be informed of the date at which your ship will be activated and donate
the 33 and the name and the data of the Dreamer to give your gift to.
</p>
<p class="clBorderImportant" style="border-color: deepskyblue">
The dates of programming and steps are understood as '<em>activation and completion predictions</em>'.
In case the flow of people and guests does not allow to maintain and achieve what has been
programmed in the times and form expected, the dates will be rescheduled to allow for completion of
all and not let the travel may be interrupted.
</p>
<p>In the experience of the 3 steps we will meet and pass in 3 characters:</p>
<p style=""><strong>Donor</strong>: He who makes the Gift of 33.<br>
<strong>Mediator</strong>: He is the bridge, the one who connects Donors and Dreamer.<br>
<strong>Dreamer</strong>: He who manifests his dream by receiving the Gifts.<br>
</p>
<CTitleBanner title="Preview The 3 Steps (click here)" bgcolor="bg-green-5" canopen="true"
:visible="false" imgpreview="statics/images/passo_1.jpg">
<p>From the moment I know the starting day, the steps to be taken will be these:</p>
<div class="text-center">
<q-img src="statics/images/passo_1.jpg" class="img"></q-img>
</div>
<p class="grass">I enter the Telegram chat as Donor:</p>
<p>The chat is formed by 8 donors and a mediator.<br>
My task is to give 33 to the Dreamer (the mediator will guide me in the process).<br>
The gift will be given on the date of activation of the Ship and step 1.
<div class="text-center">
<q-img src="statics/images/passo_2.jpg" class="img"></q-img>
</div>
<p class="grass">I open a Telegram chat and become Mediator:</p>
<p>The chat consists of 8 Donors (which I will help to enter the chat) and me, the Mediator.
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>
<div class="text-center">
<q-img src="statics/images/passo_3.jpg" class="img"></q-img>
</div>
<p class="grass">Dreamer Become a Dreamer:</p>
<p>The chat where I am Dreamer is the same and with the same people open in step 2 (where I was
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>
<br><br>.
</p>
</CTitleBanner>
<p class="text-blue-10 q-ma-lg clBorderImportant text-center" style="font-size: 1.15rem;">The Automatic
Chat <strong>AYNI BOT</strong> will send me all the instructions I need to do at the appropriate
time!
<p class="cltexth2 text-green-8 q-ma-lg"><span class="boldhigh">Good... Now make yourself comfortable, your journey has begun!
</span></p>
</CImgText>
</div>
<div>
<p>&nbsp;</p>
<div v-if="toolsext.isLang('it')">
<CTitleBanner title="Condizioni da Accettare:" bgcolor="bg-red-5"></CTitleBanner>
<ul class="lista-small">
<li>dichiaro di aver letto e ben compreso le linee guida del movimento AYNI</li>
<li>dichiaro di aver ben compreso l'impegno che prendo iscrivendomi a AYNI (facendo un regalo di 33
€)
e di aver compreso che senza non potrò proseguire il mio viaggio.
</li>
<li>Potrò avvalermi del diritto di recesso, entro 14 giorni dall'invio del dono, qualora non volessi
più continuare il mio viaggio.
</li>
<li>dichiaro di aver ben compreso che <strong>non è un fondo di investimento e che il mio regalo,
scaduti i 14 giorni del diritto di recesso, è a fondo perduto</strong>
</li>
</ul>
</div>
<div v-else-if="toolsext.isLang('si')">
<CTitleBanner title="Pogoji za sprejem:" bgcolor="bg-red-5"></CTitleBanner>
<ul class="lista-small">
<li>Izjavljam, da sem prebral in razumel smernice gibanja AYNI</li>
<li>Izjavljam, da sem popolnoma razumel zaveze, ki jih prevzemam z registracijo pri AYNI (z darilom
v višini 33 evrov) in da razumem, da brez vplačila ne bom mogel nadaljevati poti.
</li>
<li>Pravico do odstopanja bom lahko uveljavil v 14 dneh po pošiljanju darila, če ne želim več
nadaljevati poti
</li>
<li>Izjavljam, da sem dobro razumel, da ne gre za investicijski sklad in da je moje darilo po 14
dneh pravice do odstopa izgubljeno
</li>
</ul>
</div>
<div v-else-if="toolsext.isLang('es')">
<CTitleBanner title="Condiciones de aceptación:" bgcolor="bg-red-5"></CTitleBanner>
<ul class="lista-small">
<li>Declaro que he leído y comprendido bien las directrices del movimiento AYNI.</li>
<li>Declaro que he entendido bien los compromisos que hago al firmar para AYNI y haber entendido que
sin ella no seré incluido en la programación.
</li>
<li>Declaro que he comprendido bien que el <strong>no es un fondo de inversión y que mi regalo, una
vez que los 14 días del derecho de retiro hayan expirado, es no reembolsable</strong>.
</li>
<li>
Puedo ejercer mi derecho de retirada dentro de los 14 días siguientes al envío del regalo si no
deseo continuar mi viaje.
</li>
</ul>
</div>
<div v-else-if="toolsext.isLang('pt')">
<CTitleBanner title="Condições para Aceitar:" bgcolor="bg-red-5"></CTitleBanner>
<ul class="lista-small">
<li>Eu declaro que li e compreendi bem as orientações do movimento AYNI</li>
<li>Declaro que compreendi bem os compromissos que assumi ao inscrever-me no AYNI (trazer 2 pessoas,
presente
33 ) e ter entendido que sem isso não serei incluído na programação.
</li>
<li>Eu declaro que compreendi bem que <strong> não é um fundo de investimento e que a minha doação é
não
reembolsável</strong>
</li>
<li>
Posso exercer o meu direito de retirada no prazo de 14 dias após o envio do presente se não
quiser mais
continuar a minha viagem.
</li>
</ul>
</div>
<div v-else-if="toolsext.isLang('fr')">
<CTitleBanner title="Conditions d'acceptation:" bgcolor="bg-red-5"></CTitleBanner>
.
<ul class="lista-small">
<li>Je déclare avoir lu et bien compris les directives du mouvement AYNI;</li>
<li>Je déclare avoir bien compris les engagements que je prends en m'inscrivant à AYNI (Don de 33 €)
et que je comprends que sans cela je ne pourrai pas continuer mon voyage. Je pourrai bénéficier
du droit de rétraction, dans les 14 jours qui suivent lenvoie de mon Don si je ne souhaite plus
poursuivre mon voyage.
</li>
<li>Je déclare avoir bien compris qu'il ne s'agit pas d'un fonds d'investissement et que mon Don,
après 14 jours de la possibilité de rétraction, nest plus remboursable
</li>
<li>Je peux exercer mon droit de rétractation dans les 14 jours suivant l'envoi du cadeau si je ne
souhaite plus poursuivre mon voyage.
</li>
</ul>
</div>
<div v-else>
<CTitleBanner title="Conditions to Accept:" bgcolor="bg-red-5"></CTitleBanner>
<ul class="lista-small">
<li>I declare that I have read and well understood the guidelines of the AYNI movement</li>
<li>I declare that I have well understood the commitments I make by enrolling in AYNI and to have
understood that without it I will not be included in the programming.
</li>
<li>I declare that I have well understood that <strong>is not an investment fund and that my gift,
once the 14 days of the right of withdrawal have expired, is
permanent donation</strong>
</li>
<li>I can exercise my right of withdrawal within 14 days of sending the gift if I no longer wish to
continue my trip.
</li>
</ul>
</div>
<div v-if="showconditions">
<q-checkbox
class="bg-grey-4"

View File

@@ -68,7 +68,6 @@ export default class CHours extends MixinBase {
if (this.arrfilterand)
myarr = [...myarr, ...this.arrfilterand]
console.log('myarr', myarr)
return myarr
}

View File

@@ -1,50 +1,49 @@
<template>
<div>
<q-dialog v-model="showeditor">
<q-card :style="`min-width: `+ tools.myheight_dialog() + `px;` ">
<q-toolbar class="bg-primary text-white" style="min-height: 30px;">
<q-toolbar-title>
Editor
</q-toolbar-title>
<q-btn flat round color="white" icon="close" v-close-popup @click="showeditor=false"></q-btn>
</q-toolbar>
<q-card-section class="inset-shadow" style="padding: 4px !important;">
<q-card :style="`min-width: `+ tools.myheight_dialog() + `px;` ">
<q-toolbar class="bg-primary text-white" style="min-height: 30px;">
<q-toolbar-title>
Editor
</q-toolbar-title>
<q-btn flat round color="white" icon="close" v-close-popup @click="showeditor=false"></q-btn>
</q-toolbar>
<q-card-section class="inset-shadow" style="padding: 4px !important;">
<CTitleBanner :title="title"></CTitleBanner>
<form
autocorrect="off"
autocapitalize="off"
autocomplete="off"
spellcheck="false">
<CTitleBanner :title="title"></CTitleBanner>
<form
autocorrect="off"
autocapitalize="off"
autocomplete="off"
spellcheck="false">
<q-btn rounded size="sm" color="primary">
<q-icon name="colorize" class="cursor-pointer">
<q-popup-proxy>
<q-color v-model="mycolor" @change="setcolor"></q-color>
</q-popup-proxy>
</q-icon>
</q-btn>
<q-editor
ref="editor_ref"
toolbar-text-color="white"
toolbar-toggle-color="yellow-8"
toolbar-bg="primary"
:toolbar="toolbarcomp"
debounce="500"
:fonts="myfonts"
@input="changeval"
@paste.native="evt => pasteCapture(evt)"
@keyup.enter.stop
v-model="myvalue">
</q-editor>
</form>
</q-card-section>
<q-card-actions align="center">
<q-btn flat :label="$t('dialog.ok')" color="primary" @click="saveval"></q-btn>
<q-btn flat :label="$t('dialog.cancel')" color="primary" v-close-popup @click="annulla"></q-btn>
</q-card-actions>
</q-card>
<q-btn rounded size="sm" color="primary">
<q-icon name="colorize" class="cursor-pointer">
<q-popup-proxy>
<q-color v-model="mycolor" @change="setcolor"></q-color>
</q-popup-proxy>
</q-icon>
</q-btn>
<q-editor
ref="editor_ref"
toolbar-text-color="white"
toolbar-toggle-color="yellow-8"
toolbar-bg="primary"
:toolbar="toolbarcomp"
debounce="500"
:fonts="myfonts"
@input="changeval"
@paste.native="evt => pasteCapture(evt)"
@keyup.enter.stop
v-model="myvalue">
</q-editor>
</form>
</q-card-section>
<q-card-actions align="center">
<q-btn flat :label="$t('dialog.ok')" color="primary" @click="saveval"></q-btn>
<q-btn flat :label="$t('dialog.cancel')" color="primary" v-close-popup @click="annulla"></q-btn>
</q-card-actions>
</q-card>
</q-dialog>
</div>
</template>
@@ -52,5 +51,5 @@
</script>
<style lang="scss" scoped>
@import './CMyEditor.scss';
@import './CMyEditor.scss';
</style>

View File

@@ -156,7 +156,7 @@
<CMySelect label="Ore" :value.sync="myvalue"
optval="_id" optlab="label"
:useinput="false"
:options="tools.SelectHours">
o :options="tools.SelectHours">
</CMySelect>
</div>
<div v-else-if="type === tools.FieldType.binary">

View File

@@ -4,13 +4,10 @@ import { GlobalStore, UserStore } from '@store'
import { Footer } from '../../components/Footer'
// import VueScrollReveal from 'vue-scroll-reveal'
import { tools } from '@src/store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import { Screen } from 'quasar'
import { CImgTitle } from '../../components/CImgTitle/index'
import { CTitle } from '../../components/CTitle/index'
import MixinsMetaTags from '../../mixins/mixin-metatags'
import { IMyPage } from '@src/model'
@Component({
name: 'CMyPage',
@@ -18,7 +15,8 @@ import MixinsMetaTags from '../../mixins/mixin-metatags'
components: { Footer, CImgTitle, CTitle }
})
export default class CMyPage extends Vue {
@Prop({ required: true, default: '' }) public title: string
@Prop({ required: false, default: '' }) public title: string
@Prop({ required: false, default: '' }) public mypath: string
@Prop({ required: false, default: '' }) public img: string
@Prop({ required: false, default: '' }) public imgbackground: string
@Prop({ required: false, default: '' }) public sizes: string
@@ -26,6 +24,7 @@ export default class CMyPage extends Vue {
@Prop({ required: false, default: false }) public nofooter: boolean
public $t
public $q
public rec: IMyPage = null
// public metaInfo() {
// return {
@@ -40,8 +39,10 @@ export default class CMyPage extends Vue {
// }
// }
public mounted() {
public async mounted() {
// console.log('CMYPage title=', this.title)
// console.table(this.meta)
if (this.mypath !== '')
this.rec = await GlobalStore.actions.loadPage(this.mypath)
}
}

View File

@@ -1,21 +1,53 @@
<template>
<div>
<div>
<div v-if="mypath && !!rec">
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<div v-if="!!rec.img1" class="text-center">
<q-img :src="`statics/`+ rec.img1" class="img"></q-img>
</div>
<div v-if="!!rec.content" v-html="rec.content"></div>
<q-video v-if="!!rec.video1" :src="rec.video1" :ratio="rec.ratio1">
</q-video>
<div v-if="!!rec.img2" class="text-center">
<q-img :src="`statics/`+ rec.img2" class="img"></q-img>
</div>
<div v-if="!!rec.content2" v-html="rec.content2"></div>
<q-video v-if="!!rec.video2" :src="rec.video2" :ratio="rec.ratio2"></q-video>
<div v-if="!!rec.img3" class="text-center">
<q-img :src="`statics/`+ rec.img2" class="img"></q-img>
</div>
<div v-if="!!rec.content3" v-html="rec.content3"></div>
<q-video v-if="!!rec.video3" :src="rec.video3" :ratio="rec.ratio3"></q-video>
<div v-if="!!rec.content4" v-html="rec.content4"></div>
</div>
</div>
<div v-else>
<div v-if="!!title">
<CTitle v-if="imgbackground" :imgbackground="imgbackground"
:headtitle="title" :sizes="sizes" :styleadd="styleadd"></CTitle>
<div v-if="!imgbackground">
<CImgTitle v-if="img" :src="img" :title="title">
</CImgTitle>
<CImgTitle v-if="img" :src="img" :title="title">
</CImgTitle>
</div>
<slot></slot>
<div v-if="!nofooter">
<Footer></Footer>
<Footer></Footer>
</div>
</div>
</div>
</div>
</template>
<script lang="ts" src="./CMyPage.ts">
</script>
<style lang="scss" scoped>
@import './CMyPage.scss';
@import './CMyPage.scss';
</style>

View File

@@ -34,6 +34,7 @@ export default class CMyPopupEdit extends Vue {
public myvalueprec = 'false'
public countryname = ''
public visueditor: boolean = false
public showeditor: boolean = true
get tools() {
return tools

View File

@@ -236,10 +236,12 @@
<div v-if="col.fieldtype === tools.FieldType.html">
<CMyEditor v-if="visueditor" :value.sync="myvalue" :title="col.title" @keyup.enter.stop
@showandsave="Savedb" @annulla="visueditor=false">
<!--<q-dialog v-model="showeditor">-->
<CMyEditor v-if="visueditor" :value.sync="myvalue" :title="col.title" @keyup.enter.stop
@showandsave="Savedb" @annulla="visueditor=false">
</CMyEditor>
</CMyEditor>
<!--</q-dialog>-->
</div>
<q-popup-edit
v-if="canEdit && col.fieldtype !== tools.FieldType.html"

View File

@@ -61,11 +61,11 @@ $graytext: #555;
align-items: center;
}
&__img {
&__singleevimg {
padding: 0.25rem !important;
float: left;
width: 150px;
height: 150px;
width: 250px;
height: 250px;
border-radius: 1rem;
@media (max-width: 718px) {
@@ -73,6 +73,9 @@ $graytext: #555;
float: none;
text-align: center;
margin: 0 auto;
width: 200px;
height: 200px;
}
}

View File

@@ -6,7 +6,7 @@
<div class="listaev__align_chips q-ma-md">
<img :src="getImgEvent(myevent)"
@click="selectEvent(myevent)"
class="text-left padding_cell listaev__tdimg listaev__img cursor-pointer"
class="text-left padding_cell listaev__tdimg listaev__singleevimg cursor-pointer"
:style="getStyleByEvent(myevent, true)"
:alt="myevent.title">
<q-chip dense v-if="isAlreadyBooked(myevent)" class="cltexth4 chipbooked shadow-5 q-mb-md"

View File

@@ -110,7 +110,6 @@ export default class CProductCard extends MixinBase {
return !this.order.idStorehouse
}
@Watch('code')
public codechanged(value) {
console.log('change code')
@@ -124,7 +123,8 @@ export default class CProductCard extends MixinBase {
} else {
this.myproduct = this.product
}
// console.log('this.myproduct', this.myproduct)
console.log('this.myproduct', this.myproduct, 'this.product', this.product)
if (!!this.myproduct) {
if (this.myproduct.storehouses.length === 1) {
@@ -141,5 +141,9 @@ export default class CProductCard extends MixinBase {
return (this.complete) ? 'my-card-big' : 'my-card'
}
get getclimg() {
return (this.complete) ? 'myimgtitle centermydiv' : 'centermydiv'
}
}

View File

@@ -1,6 +1,6 @@
<template>
<q-card :class="getmycardcl" v-if="!!myproduct">
<img :src="`statics/` + myproduct.img" :alt="myproduct.name">
<q-img :src="`statics/` + myproduct.img" :alt="myproduct.name" :class="getclimg"></q-img>
<q-card-section>
<q-btn
@@ -20,7 +20,7 @@
</div>
<div v-if="complete" class="row items-center">
<div class="text-title text-grey-9">
<span class="text-grey-7">{{ myproduct.description }}</span>
<span class="text-grey-7" v-html="myproduct.description"></span>
</div>
</div>
<div>
@@ -43,7 +43,7 @@
<div class="row q-mb-sm no-wrap items-center centeritems">
<div class="text-price no-wrap">
{{ myproduct.price.toFixed(2) }}
<span v-if="!!myproduct.price"> {{ myproduct.price.toFixed(2) }}</span>
</div>
</div>
<div class="row q-mb-sm no-wrap items-center centeritems">
@@ -82,8 +82,10 @@
<q-btn icon="fas fa-cart-plus" color="primary" :disable="checkifCartDisable" rounded size="md"
label="Aggiungi al Carrello" @click="addtoCart">
</q-btn>
<!--
<q-btn :icon="iconWhishlist(myproduct)" flat color="primary" rounded label="Lista Desideri">
</q-btn>
-->
</q-card-actions>
</q-card>
</template>

View File

@@ -53,16 +53,19 @@
:disable="$v.$error || iswaitingforRes">{{$t('login.enter')}}
</q-btn>
</div>
<div v-if="static_data.functionality.ENABLE_REGISTRATION && showregbutt" align="center" style="margin-top:10px;">
<q-btn flat rounded size="md" color="primary" to="/signup" :label="$t('reg.submit')">
</q-btn>
</div>
<br>
<div class="text-center" style="margin-bottom: 10px;">
<a :href="getlinkforgetpwd()" style="color:gray;">{{$t('reg.forgetpassword')}}</a>
</div>
<div v-if="static_data.functionality.ENABLE_REGISTRATION && showregbutt" align="center" style="margin-top:10px;">
Se non sei ancora Registrato:<br>
<q-btn rounded size="md" color="primary" to="/signup" :label="$t('reg.submit')">
</q-btn>
</div>
</div>
</form>
</div>

View File

@@ -0,0 +1,47 @@
import { ISignupIscrizioneConacreisOptions } from 'model'
import { email, minLength, required, sameAs } from 'vuelidate/lib/validators'
export interface ISignupConacreis {
signup: ISignupIscrizioneConacreisOptions,
validationGroup: string[]
}
export const validations = {
signup: {
name: {
required
},
surname: {
required
},
email: {
email,
required
},
fiscalcode: {
required,
minLength: minLength(16)
},
residency_address: {
required
},
residency_city: {
required
},
residency_province: {
required
},
residency_zipcode: {
required
},
dateofbirth: {
required
},
cell_phone: {
required
},
terms: {
required
},
}
}

View File

@@ -0,0 +1,34 @@
.signup {
width: 100%;
margin: 0 auto;
max-width: 450px;
}
.wrapper {
display: flex;
align-items: center;
justify-content: center;
}
.clCellCode {
border-radius: 32px;
border-right: #2d2260;
height: 50px;
font-size: 1rem;
padding: 8px;
}
.clCell {
border-radius: 32px;
border-right: #2d2260;
height: 50px;
font-size: 1rem;
padding: 8px;
}
.vue-country-select{
border-radius: 32px;
}

View File

@@ -0,0 +1,189 @@
import Vue from 'vue'
import { Component, Prop, Watch } from 'vue-property-decorator'
import { UserStore } from '@store'
import { tools } from '../../store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import { ISignupIscrizioneConacreisOptions } from 'model'
import { validations, ISignupConacreis } from './CSignUpIscrizioneConacreis-validate'
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 { serv_constants } from '@src/store/Modules/serv_constants'
import VueCountryCode from 'vue-country-code'
import { registereduser } from '../../validation'
import MixinBase from '../../mixins/mixin-base'
import { CTitleBanner } from '../CTitleBanner'
import { CDate } from '../../components/CDate'
import { date } from 'quasar'
import { CMyPage } from '@src/components/CMyPage'
import MixinUsers from '@src/mixins/mixin-users'
Vue.use(VueCountryCode)
// import {Loading, QSpinnerFacebook, QSpinnerGears} from 'quasar'
@Component({
name: 'CSignUpIscrizioneConacreis',
mixins: [validationMixin],
validations,
components: { Logo, CTitleBanner, CDate, CMyPage }
})
export default class CSignUpIscrizioneConacreis extends MixinUsers {
public $v
public $q
public $t: any
public countryname: string = ''
public iamadult: boolean = false
public duplicate_email: boolean = false
public duplicate_username: boolean = false
public signup: ISignupIscrizioneConacreisOptions = {
accetta_carta_costituzionale_on: false,
newsletter_on: false,
terms: false
}
public created() {
if (!!this.getMyUsername()) {
this.signup.name = UserStore.state.my.name
this.signup.surname = this.mySurname.toString()
this.signup.email = this.Email
this.signup.cell_phone = this.myCell.toString()
}
this.$v.$reset()
}
get allowSubmit() {
const error = this.$v.$error || this.$v.$invalid
// console.log('v', this.$v, 'error', error, 'terms', this.signup.terms, 'carta', this.signup.accetta_carta_costituzionale_on)
return !error && this.signup.terms && this.signup.accetta_carta_costituzionale_on
}
public env() {
return process.env
}
public setDateOfBirth(param) {
console.log('param', param)
// this.signup.dateofbirth = tools.convertstrtoDate(arguments[0])
this.signup.dateofbirth = new Date(arguments[0])
}
public errorMsg(cosa: string, item: any) {
try {
if (!item.$error) {
return ''
}
console.log('item', item)
// console.log('errorMsg', cosa, item)
if (item.$params.email && !item.email) {
return this.$t('reg.err.email')
}
// console.log('item', item)
if (item.minLength !== undefined) {
if (!item.minLength) {
return this.$t('reg.err.atleast') + ` ${item.$params.minLength.min} ` + this.$t('reg.err.char')
}
}
if (item.complexity !== undefined) {
if (!item.complexity) {
return this.$t('reg.err.complexity')
}
}
// if (!item.maxLength) { return this.$t('reg.err.notmore') + ` ${item.$params.maxLength.max} ` + this.$t('reg.err.char') }
if (item.required !== undefined) {
if (!item.required) {
return this.$t('reg.err.required')
}
}
// console.log(' ....avanti')
if (cosa === 'email') {
// console.log("EMAIL " + item.isUnique);
// console.log(item);
if (!item.isUnique) {
return this.$t('reg.err.duplicate_email')
}
} else if (cosa === 'username') {
// console.log(item);
console.log('username')
console.log(item.$error)
if (!item.isUnique) {
return this.$t('reg.err.duplicate_username')
}
} else if ((cosa === 'name') || (cosa === 'surname')) {
// console.log(item);
}
return ''
} catch (error) {
// console.log("ERR : " + error);
}
}
public submitOk() {
this.$v.signup.$touch()
this.signup.email = tools.removespaces(this.signup.email)
this.signup.email = this.signup.email.toLowerCase()
this.signup.residency_country = tools.CapitalizeAllWords(this.signup.residency_country)
this.signup.residency_address = tools.CapitalizeAllWords(this.signup.residency_address)
this.signup.residency_city = tools.CapitalizeAllWords(this.signup.residency_city)
this.signup.residency_province = this.signup.residency_province.toUpperCase()
this.duplicate_email = false
this.duplicate_username = false
if (!this.signup.terms) {
tools.showNotif(this.$q, this.$t('reg.err.terms'))
return
}
if (!this.signup.accetta_carta_costituzionale_on) {
tools.showNotif(this.$q, this.$t('reg.err.accetta_carta_costituzionale_on'))
return
}
if (this.$v.signup.$error) {
tools.showNotif(this.$q, this.$t('reg.err.errore_generico'))
return
}
this.signup.name = tools.CapitalizeAllWords(this.signup.name)
this.signup.surname = tools.CapitalizeAllWords(this.signup.surname)
this.signup.annoTesseramento = 2021
this.$q.loading.show({ message: this.$t('reg.iscrizioneincorso') })
console.log(this.signup)
return UserStore.actions.iscrivitiConacreis(tools.clone(this.signup))
.then((ris) => {
if (tools.SignUpcheckErrors(this, ris.code, ris.msg))
this.$q.loading.hide()
}).catch((error) => {
console.log('ERROR = ' + error)
this.$q.loading.hide()
})
}
public selectcountry({ name, iso2, dialCode }) {
// console.log(name, iso2, dialCode)
this.signup.residency_country = iso2
this.countryname = name
}
}

View File

@@ -0,0 +1,233 @@
<template>
<div>
<div class="text-center">
<logo></logo>
<CTitleBanner :title="$t('pages.SignUpIscrizione')" :canopen="true" :visible="false">
<div class="q-gutter-xs">
<q-input
v-model="signup.name"
rounded outlined
@blur="$v.signup.name.$touch"
:error="$v.signup.name.$error"
maxlength="30"
:error-message="errorMsg('name', $v.signup.name)"
:label="$t('reg.name')">
<template v-slot:prepend>
<q-icon name="person"/>
</template>
</q-input>
<q-input
v-model="signup.surname"
rounded outlined
@blur="$v.signup.surname.$touch"
:error="$v.signup.surname.$error"
maxlength="30"
:error-message="errorMsg('surname', $v.signup.surname)"
:label="$t('reg.surname')">
<template v-slot:prepend>
<q-icon name="person"/>
</template>
</q-input>
<q-input
v-model="signup.email"
rounded outlined
@blur="$v.signup.email.$touch"
:error="$v.signup.email.$error"
:error-message="errorMsg('email', $v.signup.email)"
maxlength="50"
debounce="1000"
:label="$t('reg.email')">
<template v-slot:prepend>
<q-icon name="email"/>
</template>
</q-input>
<q-input
v-model="signup.fiscalcode"
rounded outlined
@blur="$v.signup.fiscalcode.$touch"
:error="$v.signup.fiscalcode.$error"
maxlength="20"
mask="AAAAAA##A##A###A"
debounce="1000"
:error-message="errorMsg('fiscalcode', $v.signup.fiscalcode)"
:label="$t('reg.fiscalcode')">
<template v-slot:prepend>
<q-icon name="person"/>
</template>
</q-input>
<q-input
v-model="signup.residency_address"
rounded outlined
@blur="$v.signup.residency_address.$touch"
:error="$v.signup.residency_address.$error"
maxlength="60"
debounce="1000"
:error-message="errorMsg('residency_address', $v.signup.residency_address)"
:label="$t('reg.residency_address')">
<template v-slot:prepend>
<q-icon name="person"/>
</template>
</q-input>
<q-input
v-model="signup.residency_city"
rounded outlined
@blur="$v.signup.residency_city.$touch"
:error="$v.signup.residency_city.$error"
maxlength="60"
debounce="1000"
:error-message="errorMsg('residency_address', $v.signup.residency_city)"
:label="$t('reg.residency_city')">
<template v-slot:prepend>
<q-icon name="person"/>
</template>
</q-input>
<q-input
v-model="signup.residency_province"
rounded outlined
@blur="$v.signup.residency_province.$touch"
:error="$v.signup.residency_province.$error"
maxlength="3"
debounce="1000"
:error-message="errorMsg('residency_address', $v.signup.residency_province)"
:label="$t('reg.residency_province')">
<template v-slot:prepend>
<q-icon name="person"/>
</template>
</q-input>
<q-input
v-model="signup.residency_zipcode"
rounded outlined
@blur="$v.signup.residency_zipcode.$touch"
:error="$v.signup.residency_zipcode.$error"
maxlength="10"
debounce="1000"
:error-message="errorMsg('residency_zipcode', $v.signup.residency_zipcode)"
:label="$t('reg.residency_zipcode')">
<template v-slot:prepend>
<q-icon name="person"/>
</template>
</q-input>
<q-input
v-model="signup.dateofbirth"
debounce="1000"
@blur="$v.signup.dateofbirth.$touch"
:error="$v.signup.dateofbirth.$error"
:error-message="errorMsg('dateofbirth', $v.signup.dateofbirth)"
stack-label
:label="$t('reg.dateofbirth')"
rounded
type="date"
mask="date"
fill-mask
outlined>
</q-input>
<!--<CDate :mydate="signup.dateofbirth" @input="setDateOfBirth(arguments[0])"
:rounded="true" :outlined="true"
:dense="false"
:label="$t('reg.dateofbirth')">
</CDate>-->
<q-input
v-model="countryname"
:readonly="true"
rounded outlined
debounce="1000"
:label="$t('reg.nationality')">
<template v-slot:prepend>
<vue-country-code
@onSelect="selectcountry"
:preferredCountries="tools.getprefCountries"
:dropdownOptions="{ disabledDialCode: true }"
>
</vue-country-code>
</template>
</q-input>
<!--<div v-if="!tools.isMobile()"><br></div>-->
<vue-tel-input
v-model="signup.cell_phone"
:placeholder="$t('reg.cell')"
maxlength="20"
debounce="1000"
:enabledCountryCode="true"
inputClasses="clCell"
wrapperClasses="clCellCode">
</vue-tel-input>
<p class="q-ml-md text-center">
Leggi
<span class="underline"> <router-link to="/il-nostro-progetto" custom v-slot="{ navigate }">
<span class="footer_link" @click="navigate" @keypress.enter="navigate" role="link">Il Nostro Progetto</span>
</router-link></span>
</p>
<q-checkbox
v-model="signup.accetta_carta_costituzionale_on"
color="secondary">
<span v-html="$t('reg.accetta_carta_costituzionale_on')"></span>
</q-checkbox>
<q-checkbox
v-model="signup.terms"
color="secondary"
@blur="$v.signup.terms.$touch"
:error="$v.signup.terms.$error"
:error-message="`${errorMsg('terms', $v.signup.terms)}`"
:label="$t('reg.terms')">
</q-checkbox>
<div class="wrapper">
<q-btn rounded size="lg" color="positive" @click="submitOk" :disabled='!allowSubmit'
:label="$t('reg.iscriviti')">
</q-btn>
</div>
<br>
</div>
</CTitleBanner>
<br>
</div>
</div>
</template>
<script lang="ts" src="./CSignUpIscrizioneConacreis.ts">
</script>
<style lang="scss" scoped>
@import './CSignUpIscrizioneConacreis.scss';
</style>

View File

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

View File

@@ -3,7 +3,7 @@
<CSignIn :mythis="mythis"
@loginOk="loginOk"
@loginInCorso="loginInCorso"
:showregbutt="false"
:showregbutt="showregbutt"
@checkErrors="checkErrors"
@showNotif="showNotif">
</CSignIn>

View File

@@ -10,27 +10,12 @@
myclass="myshad" canopen="true" :visible="true">
<div v-if="showconditions">
<div v-if="toolsext.isLang('fr')">
<CVideo myvideokey="GZR0ncSaG8s"></CVideo>
</div>
<div v-else>
<CVideo myvideokey="DWfQzbOCK3s"></CVideo>
</div>
<CVideo myvideokey="DWfQzbOCK3s"></CVideo>
</div>
<div v-else>
<div v-if="toolsext.isLang('si')">
<CVideo myvideokey="5vJ-xSdoUmk"></CVideo>
<div v-if="toolsext.isLang('it')">
<CVideo myvideokey=""></CVideo>
</div>
<div v-else-if="toolsext.isLang('it')">
<CVideo myvideokey="GU93sIBG6yM"></CVideo>
</div>
<div v-else-if="toolsext.isLang('hr')">
<CVideo myvideokey="zBksb1vdddw"></CVideo>
</div>
<div v-else>
<CVideo myvideokey="16VpLhir7xg"></CVideo>
</div>
</div>
</CTitleBanner>

View File

@@ -213,9 +213,6 @@ canvas {
display: none !important;
}
.underline {
text-decoration: underline;
}
.toolbar {
min-height: 43px;

View File

@@ -71,6 +71,9 @@ export default class Header extends Vue {
get isSocioResidente() {
return UserStore.state.my.profile.socioresidente
}
get isConsiglio() {
return UserStore.state.my.profile.consiglio
}
get getcolormenu() {
return this.isSocio ? 'green-7' : 'white'
@@ -379,7 +382,7 @@ export default class Header extends Vue {
})
}
get static_data(){
get static_data() {
return static_data
}
@@ -412,8 +415,8 @@ export default class Header extends Vue {
}
get getnumOrdersCart() {
// const arrorderscart = Products.state.orders.filter((rec) => rec.status < shared_consts.OrderStatus.RECEIVED)
const arrorderscart = Products.state.orders
const arrorderscart = Products.state.orders.filter((rec) => rec.status < shared_consts.OrderStatus.RECEIVED)
// const arrorderscart = Products.state.orders
if (!!arrorderscart) {
return arrorderscart.length
}

View File

@@ -183,9 +183,10 @@
<div v-if="isLogged && isAdmin" class="text-weight-bold text-user bg-red q-px-xs">Admin</div>
<div v-if="isSocio" class="text-weight-bold text-user q-px-xs">Socio</div>
<div v-if="isSocioResidente" class="text-weight-bold text-user q-px-xs bg-amber">Residente</div>
<div v-if="isConsiglio" class="text-weight-bold text-user q-px-xs bg-deep-orange-10">Consiglio</div>
<div v-if="isManager" class="text-weight-bold text-user bg-blue q-px-xs">Segreteria</div>
<div v-if="isTutor" class="text-weight-bold text-user q-px-xs">Tutor</div>
<div v-if="isTratuttrici" class="text-weight-bold text-user q-px-xs">Traduttrici</div>
<div v-if="isTratuttrici" class="text-weight-bold text-user q-px-xs">Editor</div>
</div>
<div v-if="!isLogged" class="text-user text-italic bg-red">
{{ $t('user.loggati') }}
@@ -208,8 +209,9 @@
</div>
<div style="margin-top:120px;"></div>
<div v-show="!isLogged">
<div class="q-ma-md" style="">
<CSigninNoreg :showregbutt="static_data.functionality.SHOW_REG_BUTTON">
<CSigninNoreg :showregbutt="true">
</CSigninNoreg>
</div>

View File

@@ -26,6 +26,7 @@ export * from './CSignIn'
export * from './CSignUp'
export * from './CSignUpNotevole'
export * from './CSignUpSIP'
export * from './CSignUpIscrizioneConacreis'
export * from './CEventsCalendar'
export * from './CMySingleEvent'
export * from './CDate'

View File

@@ -2,10 +2,12 @@ import indexdb from './indexdb'
import { GlobalStore } from '../store/Modules'
export default async (context, cmd, table, data = null, id = '') => {
const descr = data !== null ? data.descr : ''
// const descr = data !== null ? data.descr : ''
// console.log('globalroutines', cmd, table, descr, id)
return await indexdb(context, cmd, table, data, id)
return indexdb(context, cmd, table, data, id)
.then((ris) => {
console.log('GlobalStore.state.connData', GlobalStore.state.connData)
setTimeout(() => {
GlobalStore.state.connData.uploading_indexeddb = 0
GlobalStore.state.connData.downloading_indexeddb = 0

View File

@@ -89,41 +89,46 @@ function testfunc2() {
export default async (context, cmd, table, datakey = null, id = '') => {
// console.log('TABLE', table, 'cmd', cmd)
if (cmd === 'loadapp') {
// ****** LOAD APP AL CARICAMENTO ! *******
return saveConfigIndexDb(context)
try {
// console.log('TABLE', table, 'cmd', cmd)
if (cmd === 'loadapp') {
// ****** LOAD APP AL CARICAMENTO ! *******
return saveConfigIndexDb(context)
} else if (cmd === 'write') {
if (GlobalStore) {
GlobalStore.state.connData.uploading_indexeddb = 1
} else if (cmd === 'write') {
if (GlobalStore) {
GlobalStore.state.connData.uploading_indexeddb = 1
}
return await storage.setdata(table, datakey)
} else if (cmd === 'updatefromIndexedDbToState') {
return await readfromIndexDbToState(context, table)
} else if (cmd === 'readall') {
if (GlobalStore) {
GlobalStore.state.connData.downloading_indexeddb = 1
console.log('getalldata table', table)
}
return await storage.getalldata(table)
} else if (cmd === 'count') {
return await storage.count(table)
} else if (cmd === 'read') {
if (GlobalStore) {
GlobalStore.state.connData.downloading_indexeddb = 1
}
return await storage.getdata(table, id)
} else if (cmd === 'delete') {
if (GlobalStore) {
GlobalStore.state.connData.uploading_indexeddb = 1
}
return await storage.deletedata(table, id)
} else if (cmd === 'clearalldata') {
if (GlobalStore) {
GlobalStore.state.connData.uploading_indexeddb = 1
}
return await storage.clearalldata(table)
} else if (cmd === 'log') {
consolelogpao(table)
}
return await storage.setdata(table, datakey)
} else if (cmd === 'updatefromIndexedDbToState') {
return await readfromIndexDbToState(context, table)
} else if (cmd === 'readall') {
if (GlobalStore) {
GlobalStore.state.connData.downloading_indexeddb = 1
}
return await storage.getalldata(table)
} else if (cmd === 'count') {
return await storage.count(table)
} else if (cmd === 'read') {
if (GlobalStore) {
GlobalStore.state.connData.downloading_indexeddb = 1
}
return await storage.getdata(table, id)
} else if (cmd === 'delete') {
if (GlobalStore) {
GlobalStore.state.connData.uploading_indexeddb = 1
}
return await storage.deletedata(table, id)
} else if (cmd === 'clearalldata') {
if (GlobalStore) {
GlobalStore.state.connData.uploading_indexeddb = 1
}
return await storage.clearalldata(table)
} else if (cmd === 'log') {
consolelogpao(table)
} catch (e) {
console.error('error INDEXdb', e);
}
}

View File

@@ -17,14 +17,15 @@ export let idbKeyval = (() => {
openreq.onupgradeneeded = () => {
// First time setup: create an empty object store
for (let mytab of ApiTables.MainTables) {
openreq.result.createObjectStore(mytab, { keyPath: '_id' });
openreq.result.createObjectStore(mytab, { keyPath: 'BOMID', autoIncrement: true });
for (let mymeth of ApiTables.allMethod) {
const tab = mymeth + mytab
openreq.result.createObjectStore(tab, { keyPath: '_id' });
openreq.result.createObjectStore(tab, { keyPath: 'BOMID', autoIncrement: true });
}
}
for (let mytab of ApiTables.OtherTables) {
openreq.result.createObjectStore(mytab, { keyPath: '_id' });
console.log('mytab', mytab);
openreq.result.createObjectStore(mytab, { keyPath: 'BOMID', autoIncrement: true });
}
};

View File

@@ -85,12 +85,14 @@ export default class MenuOne extends Vue {
menu += ' isManager'
if (elem.onlySocioResidente)
menu += ' isSocioResidente'
if (elem.onlyConsiglio)
menu += ' isConsiglio'
if (elem.onlyDepartment)
menu += ' isDepartment'
if (elem.onlyTutor)
menu += ' isTutor'
if (elem.onlyTraduttrici)
menu += ' isTraduttrici'
if (elem.onlyEditor)
menu += ' isEditor'
}

View File

@@ -96,6 +96,10 @@ export default class MixinUsers extends Vue {
return UserStore.state.my.surname
}
get myCell() {
return UserStore.state.my.profile.cell
}
get Verificato() {
return UserStore.state.my.verified_email
}

View File

@@ -26,6 +26,7 @@ export interface IEvents {
nobookable?: boolean
lunchAvailable?: boolean
dinnerAvailable?: boolean
dinnerSharedAvailable?: boolean
lunchType?: number
dinnerType?: number
lunchPrice?: number
@@ -45,6 +46,7 @@ export interface IBookedEvent {
numpeople: number
numpeopleLunch?: number
numpeopleDinner?: number
numpeopleDinnerShared?: number
infoevent: string
msgbooking: string
datebooked?: Date

View File

@@ -69,18 +69,46 @@ export interface IMyPage {
path?: string
keywords?: string
description?: string
img1?: string
content?: string
video1?: string
img2?: string
content2?: string
video2?: string
img3?: string
content3?: string
video3?: string
content4?: string
active?: boolean
inmenu?: boolean
color?: string
onlyif_logged?: boolean
only_residenti?: boolean
only_consiglio?: boolean
submenu?: boolean
l_par?: number,
l_child?: number,
infooter?: boolean
}
export interface ISites {
_id?: string
attiva?: boolean
idapp?: string
name?: string
adminemail?: string
manageremail?: string
replyTo?: string
host?: string
portapp?: string
dir?: string
email_from?: string
email_pwd?: string
telegram_key?: string
telegram_bot_name?: string
pathreg_add?: string
}
export interface INewsToSent {
_id: string
idapp?: string
@@ -228,10 +256,12 @@ export interface IListRoutes {
onlyif_logged?: boolean
onlyManager?: boolean
onlySocioResidente?: boolean
onlyConsiglio?: boolean
onlyNotSoci?: boolean
onlyDepartment?: boolean
onlyTutor?: boolean
color?: string
onlyTraduttrici?: boolean
onlyEditor?: boolean
extraclass?: string
meta?: any
idelem?: string

View File

@@ -1,5 +1,6 @@
export interface IProduct {
_id?: any
active?: boolean
idProducer?: string,
idStorehouses?: string[],
producer?: IProducer,
@@ -111,9 +112,11 @@ export interface IOrderCart {
totalPrice?: number
department?: string
items?: IBaseOrder[]
nameSurname?: string
status?: number
note?: string
modify_at?: Date
completed_at?: Date
}
export interface IShareWithUs {

View File

@@ -123,7 +123,7 @@ export interface IUserState {
isDepartment?: boolean
isTutor?: boolean
isZoomeri?: boolean
isTraduttrici?: boolean
isEditor?: boolean
isTeacher?: boolean
usersList?: IUserFields[]
countusers?: number

View File

@@ -13,3 +13,30 @@ export interface ISignupOptions {
profile?: IUserProfile
// already_registered: boolean
}
export interface ISignupIscrizioneConacreisOptions {
userId?: string
name?: string
surname?: string
email?: string
fiscalcode?: string
residency_address?: string
residency_city?: string
residency_province?: string
residency_country?: string
residency_zipcode?: string
dateofbirth?: Date
cell_phone?: string
newsletter_on?: boolean
accetta_carta_costituzionale_on?: boolean
iscrizione_compilata?: boolean
annoTesseramento?: number
motivazioni?: string
competenze_professionalita?: string
cosa_potrei_offrire?: string
cosa_vorrei_ricevere?: string
altre_comunicazioni?: string
come_ci_hai_conosciuto?: string
terms?: boolean
note?: string
}

View File

@@ -51,7 +51,7 @@ export default class Eventlist extends Vue {
let add = true
if (!this.showall) {
add = CalendarStore.getters.getNumParticipants(myevent, this.showall, 0) > 0
add = CalendarStore.getters.getNumParticipants(myevent, this.showall, tools.peopleWhere.participants) > 0
}
if (add) {
@@ -78,7 +78,7 @@ export default class Eventlist extends Vue {
eventsloc.reverse()
}
return eventsloc
return eventsloc.filter((rec) => rec.title !== '')
}
public getNumEvent() {
@@ -96,7 +96,7 @@ export default class Eventlist extends Vue {
let add = true
if (!this.showall) {
add = CalendarStore.getters.getNumParticipants(myevent, this.showall, 0) > 0
add = CalendarStore.getters.getNumParticipants(myevent, this.showall, tools.peopleWhere.participants) > 0
}
if (add) {

View File

@@ -29,6 +29,9 @@
<th v-if="showall">
{{ $t('cal.selnumpeopleDinner') }}
</th>
<th v-if="showall">
{{ $t('cal.selnumpeopleDinnerShared') }}
</th>
<th>{{ $t('cal.peoplebooked') }}</th>
</thead>
@@ -46,16 +49,20 @@
</div>
</td>
<td v-if="showall">
<div class="text-center">{{ getNumParticipants(event, showall, '') }}</div>
<div class="text-center">{{ getNumParticipants(event, showall, tools.peopleWhere.participants) }}</div>
</td>
<td v-if="showall">
<div class="text-center">{{ getNumParticipants(event, showall, 'lunch') }}</div>
<div class="text-center">{{ getNumParticipants(event, showall, tools.peopleWhere.lunch) }}</div>
</td>
<td v-if="showall">
<div class="text-center">{{ getNumParticipants(event, showall, 'dinner') }}</div>
<div class="text-center">{{ getNumParticipants(event, showall, tools.peopleWhere.dinner) }}</div>
</td>
<td v-if="showall">
<div class="text-center">{{ getNumParticipants(event, showall, tools.peopleWhere.dinnerShared) }}</div>
</td>
<td class="text-center">
<q-btn v-if="getNumParticipants(event, showall) > 0"
<q-btn v-if="getNumParticipants(event, showall, tools.peopleWhere.participants) > 0"
dense
round
@click="showpeople = true; eventsel = event"
@@ -79,7 +86,7 @@
<thead>
<th>Data</th>
<th>Messaggio</th>
<th>Num</th>
<th>Partec</th>
<th>Azione</th>
</thead>
@@ -96,13 +103,10 @@
{{ eventbook.msgbooking }}
</td>
<td class="text-center">
{{ eventbook.numpeople }}
</td>
<td class="text-center">
{{ eventbook.numpeopleLunch }}
</td>
<td class="text-center">
{{ eventbook.numpeopleDinner }}
<span v-if="eventbook.numpeople > 0">Partecipanti: {{ eventbook.numpeople }}<br></span>
<span v-if="eventbook.numpeopleLunch > 0">Pranzo: {{ eventbook.numpeopleLunch }}<br></span>
<span v-if="eventbook.numpeopleDinner > 0">Cena: {{ eventbook.numpeopleDinner }}<br></span>
<span v-if="eventbook.numpeopleDinnerShared > 0">Cena Condivisa: {{ eventbook.numpeopleDinnerShared }}<br></span>
</td>
<td class="text-center">
<q-btn flat round color="red" icon="fas fa-trash-alt" size="sm"

View File

@@ -0,0 +1,40 @@
import { Component, Prop } from 'vue-property-decorator'
import { tools } from '../../../store/Modules/tools'
import { static_data } from '../../../db/static_data'
import { colTableIscrittiConacreis } from '@src/store/Modules/fieldsTable'
import { CImgText } from '../../../components/CImgText/index'
import { CCard, CGridTableRec, CMyPage, CTitleBanner } from '@components'
import MixinMetaTags from '../../../mixins/mixin-metatags'
import MixinBase from '@src/mixins/mixin-base'
@Component({
mixins: [MixinBase],
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec }
})
export default class SitesPage extends MixinMetaTags {
public pagination = {
sortBy: 'name',
descending: false,
page: 2,
rowsPerPage: 5
// rowsNumber: xx if getting data from a server
}
public selected = []
public dataPages = []
get getcolIscrittiConacreis() {
return colTableIscrittiConacreis
}
public meta() {
return tools.metafunc(this)
}
get static_data() {
return static_data
}
}

View File

@@ -0,0 +1,28 @@
<template>
<CMyPage title="Iscritti Conacreis" imgbackground="../../statics/images/iscritti_conacreis.jpg" sizes="max-height: 120px">
<span>{{ setmeta({
title: 'Iscritti Conacreis',
description: "",
keywords: '' } ) }}
</span>
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<CTitleBanner title="Iscritti Conacreis"></CTitleBanner>
<CGridTableRec prop_mytable="iscritticonacreis"
prop_mytitle="Iscritti Conacreis"
:prop_mycolumns="getcolIscrittiConacreis"
prop_colkey="name"
nodataLabel="Nessun Iscritto Conacreis"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
</CGridTableRec>
</div>
</CMyPage>
</template>
<script lang="ts" src="./iscritticonacreis.ts">
</script>
<style lang="scss" scoped>
@import 'iscritticonacreis.scss';
</style>

View File

View File

@@ -0,0 +1,44 @@
import Vue from 'vue'
import { Component, Prop } from 'vue-property-decorator'
import { GlobalStore, UserStore } from '@store'
import { tools } from '../../../store/Modules/tools'
import { toolsext } from '../../../store/Modules/toolsext'
import { static_data } from '../../../db/static_data'
import { Screen } from 'quasar'
import { colTableSites } from '@src/store/Modules/fieldsTable'
import { CImgText } from '../../../components/CImgText/index'
import { CCard, CGridTableRec, CMyPage, CTitleBanner } from '@components'
import MixinMetaTags from '../../../mixins/mixin-metatags'
import MixinBase from '@src/mixins/mixin-base'
@Component({
mixins: [MixinBase],
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec }
})
export default class SitesPage extends MixinMetaTags {
public pagination = {
sortBy: 'name',
descending: false,
page: 2,
rowsPerPage: 5
// rowsNumber: xx if getting data from a server
}
public selected = []
public dataPages = []
get getcolSites() {
return colTableSites
}
public meta() {
return tools.metafunc(this)
}
get static_data() {
return static_data
}
}

View File

@@ -0,0 +1,28 @@
<template>
<CMyPage title="Siti" imgbackground="../../statics/images/siti.jpg" sizes="max-height: 120px">
<span>{{ setmeta({
title: 'Siti',
description: "",
keywords: '' } ) }}
</span>
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<CTitleBanner title="Siti Web"></CTitleBanner>
<CGridTableRec prop_mytable="sites"
prop_mytitle="Lista Siti"
:prop_mycolumns="getcolSites"
prop_colkey="name"
nodataLabel="Nessun Sito"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
</CGridTableRec>
</div>
</CMyPage>
</template>
<script lang="ts" src="./sites.ts">
</script>
<style lang="scss" scoped>
@import 'sites.scss';
</style>

View File

@@ -219,7 +219,7 @@ const msg_es = {
nave_in_chiusura: 'Cierre Gift Chat',
nave_partita: 'partió en',
tutor: 'Tutor',
traduttrici: 'Traduttrici',
Editor: 'Editor',
/*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:<br><strong>{nomenave}</strong></li>' +

View File

@@ -40,6 +40,7 @@ const msg_it = {
eventlist: 'Le tue Prenotazioni',
usereventlist: 'Prenotazioni Utenti',
userlist: 'Lista Utenti',
iscritticonacreis: "Iscritti Conacreis",
zoomlist: 'Calendario Zoom',
extralist: 'Lista Extra',
dbop: 'Db Operations',
@@ -186,6 +187,7 @@ const msg_it = {
login: {
facebook: 'Facebook'
},
iscrizione_ok: 'Iscrizione Avvenuta Correttamente',
email_verification: {
title: 'Inizia la tua registrazione',
introduce_email: 'inserisci la tua email',
@@ -247,7 +249,7 @@ const msg_it = {
nave_in_chiusura: 'Chiusura Gift Chat',
nave_partita: 'Partita il',
tutor: 'Tutor',
traduttrici: 'Traduttrici',
Editor: 'Editor',
zoomeri: 'Zoomeri',
/* 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 ' +
@@ -324,6 +326,7 @@ const msg_it = {
reg: {
socio: 'Socio',
socioresidente: 'Residente',
consiglio: 'Consiglio',
volta: 'volta',
volte: 'volte',
registered: 'Registrato',
@@ -364,10 +367,11 @@ const msg_it = {
made_gift: 'Dono',
note: 'Note',
incorso: 'Registrazione in corso...',
iscrizioneincorso: 'Iscrizione in corso...',
richiesto: 'Campo Richiesto',
email: 'Email',
intcode_cell: 'Prefisso Int.',
cell: 'Cellulare Telegram',
cell: 'Cellulare',
cellreg: 'Cellulare con cui ti eri registrato',
nationality: 'Nazionalità',
email_paypal: 'Email Paypal',
@@ -422,6 +426,16 @@ const msg_it = {
resp: "Responsabile",
viceResp: "Vice Rrsponsabile",
userslist: "Lista Persone",
fiscalcode: "Codice Fiscale",
residency_address: "Indirizzo di Residenza",
residency_city: "Città di Residenza",
residency_province: "Provincia",
residency_zipcode: "CAP",
dateofbirth: "Data di Nascita",
newsletter_on: "Aggiungimi alla Newsletter",
accetta_carta_costituzionale_on: "Ho letto ed Approvo il Progetto",
iscriviti: "Iscriviti",
err: {
required: 'è richiesto',
email: 'inserire una email valida',
@@ -442,6 +456,7 @@ const msg_it = {
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',
accetta_carta_costituzionale_on: 'Occorre accettare la sintesi della Carta Costituzionale',
},
tips: {
email: 'inserisci la tua email',
@@ -470,7 +485,7 @@ const msg_it = {
errato: "Username o password errata. Riprovare",
subaccount: "Questo account è stato accorpato con il vostro Principale. Eseguire l'accesso utilizzando l'username (o email) del PRIMO account.",
completato: 'Login effettuato!',
needlogin: 'E\' necessario effettuare il login prima di continuare'
needlogin: 'E\' necessario registrarsi al sito ed effettuare l\'Accesso con i propri dati'
},
reset: {
title_reset_pwd: "Reimposta la tua Password",
@@ -594,8 +609,10 @@ const msg_it = {
selnumpeople: 'Partecipanti',
Lunch: 'Pranzo',
Dinner: 'Cena',
DinnerShared: 'Cena Condivisa',
selnumpeopleLunch: 'Persone a Pranzo',
selnumpeopleDinner: 'Persone a Cena',
selnumpeopleDinnerShared: 'Persone a Cena Condivisa',
selnumpeople_short: 'Num',
msgbooking: 'Messaggio da inviare',
showpdf: 'Vedi PDF',
@@ -640,6 +657,7 @@ const msg_it = {
internal: 'Evento Interno',
lunchAvailable: 'Disponibilità di Pranzare',
dinnerAvailable: 'Disponibilità di Cenare',
dinnerSharedAvailable: 'Disponibilità di Cenare Condivisa',
lunchType: 'Tipo di Pranzo',
dinnerType: 'Tipo di Cena',
lunchPrezzo: 'Contributo Pranzo',

View File

@@ -6,7 +6,7 @@ import { serv_constants } from '@src/store/Modules/serv_constants'
import { tools } from '@src/store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
export const OtherTables = ['categories', 'config', 'swmsg']
export const OtherTables = ['config', 'swmsg']
// export const MainTables = ['todos', 'projects']
export const MainTables = []
export const allMethod = ['sync_post_', 'sync_patch_', 'delete_', 'hide_']

View File

@@ -769,6 +769,38 @@ namespace Actions {
})
}
async function loadPage(context, path: string) {
path = path.substring(1)
const mypage = GlobalStore.getters.getPage('/' + path)
// Controlla se l'ho già caricato
if (!!mypage && !!mypage.content) {
return mypage
}
console.log('loadPage', path)
return await Api.SendReq('/getpage', 'POST', { path })
.then((res) => {
// console.table(res)
if (res) {
const index = GlobalStore.state.mypage.findIndex((rec) => rec.path === path)
if (index >= 0) {
GlobalStore.state.mypage[index] = res.data.mypage
}
return res.data.mypage
} else {
return null
}
})
.catch((error) => {
console.log('error loadTable', error)
UserStore.mutations.setErrorCatch(error)
return null
})
}
async function saveTable(context, mydata: object) {
// console.log('saveTable', mydata)
@@ -1228,11 +1260,13 @@ namespace Actions {
component: () => import('@/root/mypage/mypage.vue'),
inmenu: page.inmenu,
onlySocioResidente: page.only_residenti,
onlyConsiglio: page.only_consiglio,
color: page.color,
infooter: page.infooter,
onlyif_logged: page.onlyif_logged,
level_child: page.l_child,
level_parent: page.l_par
level_parent: page.l_par,
submenu: page.submenu
})
}
}
@@ -1316,6 +1350,7 @@ namespace Actions {
askFunz: b.dispatch(askFunz),
sendPushNotif: b.dispatch(sendPushNotif),
loadTable: b.dispatch(loadTable),
loadPage: b.dispatch(loadPage),
saveTable: b.dispatch(saveTable),
DeleteRec: b.dispatch(DeleteRec),
DeleteFile: b.dispatch(DeleteFile),

View File

@@ -73,11 +73,22 @@ namespace Getters {
return state.cart
}, 'getCart')
const getOrdersAllCart = b.read((stateparamf: IProductsState) => (): IOrderCart[] => {
return state.orders
}, 'getOrdersAllCart')
const getOrdersCart = b.read((stateparamf: IProductsState) => (tipoord: string): IOrderCart[] => {
console.log('state.orders', state.orders)
if (tipoord === 'incorso')
return state.orders.filter((rec) => rec.status <= shared_consts.OrderStatus.CHECKOUT_SENT)
else
return state.orders.filter((rec) => rec.status < shared_consts.OrderStatus.RECEIVED && rec.status > shared_consts.OrderStatus.CHECKOUT_SENT)
else if (tipoord === 'confermati')
return state.orders.filter((rec) => rec.status === shared_consts.OrderStatus.ORDER_CONFIRMED)
else if (tipoord === 'pagati')
return state.orders.filter((rec) => rec.status === shared_consts.OrderStatus.PAYED)
else if (tipoord === 'completati')
return state.orders.filter((rec) => rec.status === shared_consts.OrderStatus.RECEIVED)
else if (tipoord === 'cancellati')
return state.orders.filter((rec) => rec.status === shared_consts.OrderStatus.CANCELED)
}, 'getOrdersCart')
const existProductInCart = b.read((stateparamf: IProductsState) => (idproduct): boolean => {
@@ -93,6 +104,7 @@ namespace Getters {
const objproduct: IProduct = {
// _id: tools.getDateNow().toISOString(), // Create NEW
active: false,
idProducer: '',
idStorehouses: [],
producer: null,
@@ -130,6 +142,9 @@ namespace Getters {
get getOrdersCart() {
return getOrdersCart()
},
get getOrdersAllCart() {
return getOrdersAllCart()
},
get existProductInCart() {
return existProductInCart()
},
@@ -365,12 +380,35 @@ namespace Actions {
return ris
}
async function UpdateOrderStatus(context, { order_id, status }) {
if (!static_data.functionality.ENABLE_ECOMMERCE)
return null
// console.log('addSubQtyToItem', 'userid=', UserStore.state.my._id, order)
let ris = null
ris = await Api.SendReq('/cart/' + UserStore.state.my._id + '/orderstatus', 'POST', { order_id, status })
.then((res) => {
return res.data.status
})
.catch((error) => {
console.log('error UpdateOrderStatus', error)
UserStore.mutations.setErrorCatch(error)
return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, tools.ERR_GENERICO, error)
})
return ris
}
export const actions = {
loadProduct: b.dispatch(loadProduct),
loadProducts: b.dispatch(loadProducts),
addToCart: b.dispatch(addToCart),
addSubQtyToItem: b.dispatch(addSubQtyToItem),
UpdateStatusCart: b.dispatch(UpdateStatusCart),
UpdateOrderStatus: b.dispatch(UpdateOrderStatus),
removeFromCart: b.dispatch(removeFromCart),
loadOrders: b.dispatch(loadOrders),
}

View File

@@ -54,12 +54,24 @@ namespace Getters {
return mystate.bookedevent.find((bookedevent) => (bookedevent.id_bookedevent === myevent._id) && (bookedevent.userId === UserStore.state.my._id) && ((isconfirmed && bookedevent.booked) || (!isconfirmed)))
}, 'findEventBooked')
const getNumParticipants = b.read((mystate: ICalendarState) => (myevent: IEvents, showall, tipo) => {
const myarr = mystate.bookedevent.filter((bookedevent) => (bookedevent.id_bookedevent === myevent._id) && (bookedevent.booked) && (showall || (!showall && bookedevent.userId === UserStore.state.my._id) ) && ((tipo === '') || ((tipo === 'lunch' && bookedevent.numpeopleLunch) || (tipo === 'dinner' && bookedevent.numpeopleDinner) )))
if (myarr)
return myarr.reduce((sum, bookedevent) => sum + bookedevent.numpeople, 0)
else
const getNumParticipants = b.read((mystate: ICalendarState) => (myevent: IEvents, showall, tipo = 0): number => {
const myarr = mystate.bookedevent.filter((bookedevent) => (bookedevent.id_bookedevent === myevent._id) && (bookedevent.booked) && (showall || (!showall && bookedevent.userId === UserStore.state.my._id) ) && ( ((tipo === tools.peopleWhere.participants) && bookedevent.numpeople) || ((tipo === tools.peopleWhere.lunch && bookedevent.numpeopleLunch) || (tipo === tools.peopleWhere.dinner && bookedevent.numpeopleDinner) || (tipo === tools.peopleWhere.dinnerShared && bookedevent.numpeopleDinnerShared) )))
if (myarr.length > 0) {
let ris = null
if (tipo === tools.peopleWhere.participants) {
ris = myarr.reduce((sum, bookedevent) => sum + bookedevent.numpeople, 0)
}else if (tipo === tools.peopleWhere.lunch) {
ris = myarr.reduce((sum, bookedevent) => sum + bookedevent.numpeopleLunch, 0)
}else if (tipo === tools.peopleWhere.dinner) {
ris = myarr.reduce((sum, bookedevent) => sum + bookedevent.numpeopleDinner, 0)
}else if (tipo === tools.peopleWhere.dinnerShared) {
ris = myarr.reduce((sum, bookedevent) => sum + bookedevent.numpeopleDinnerShared, 0)
}
return ris
} else {
return 0
}
}, 'getNumParticipants')
const getEventsBookedByIdEvent = b.read((mystate: ICalendarState) => (idevent, showall) => {
@@ -67,8 +79,7 @@ namespace Getters {
}, 'getEventsBookedByIdEvent')
const getWhereRec = b.read((mystate: ICalendarState) => (wherecode) => {
const whererec = mystate.wheres.find((mywhere) => mywhere.code === wherecode)
return (whererec)
return mystate.wheres.find((mywhere) => mywhere.code === wherecode)
}, 'getWhereRec')
@@ -159,6 +170,7 @@ namespace Actions {
numpeople: bookevent.numpeople,
numpeopleLunch: bookevent.numpeopleLunch,
numpeopleDinner: bookevent.numpeopleDinner,
numpeopleDinnerShared: bookevent.numpeopleDinnerShared,
msgbooking: bookevent.msgbooking,
datebooked: bookevent.datebooked,
userId: UserStore.state.my._id,
@@ -172,9 +184,10 @@ namespace Actions {
const param = getparambyevent(bookevent)
return await Api.SendReq('/booking', 'POST', param)
return Api.SendReq('/booking', 'POST', param)
.then((res) => {
if (res.status === 200) {
console.log('datares', res.data);
if (res.data.code === serv_constants.RIS_CODE_OK) {
bookevent._id = res.data.id
if (bookevent.modified) {

View File

@@ -1,5 +1,13 @@
import Api from '@api'
import { ISignupOptions, ISigninOptions, IUserState, IUserFields, IUserProfile, ICalcStat } from 'model'
import {
ISignupOptions,
ISigninOptions,
IUserState,
IUserFields,
IUserProfile,
ICalcStat,
ISignupIscrizioneConacreisOptions
} from 'model'
import { ILinkReg, IResult, IIdToken, IToken } from 'model/other'
import { storeBuilder } from './Store/Store'
import router from '@router'
@@ -107,7 +115,7 @@ const state: IUserState = {
isDepartment: false,
isTutor: false,
isZoomeri: false,
isTraduttrici: false,
isEditor: false,
usersList: [],
countusers: 0,
lastparamquery: {}
@@ -345,7 +353,7 @@ namespace Mutations {
mystate.isZoomeri = tools.isBitActive(mystate.my.perm, shared_consts.Permissions.Zoomeri.value)
mystate.isDepartment = tools.isBitActive(mystate.my.perm, shared_consts.Permissions.Department.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)
mystate.isEditor = tools.isBitActive(mystate.my.perm, shared_consts.Permissions.Editor.value)
// console.log('authUser', 'state.isAdmin', mystate.isAdmin)
// console.table(mystate)
@@ -764,6 +772,30 @@ namespace Actions {
})
}
async function iscrivitiConacreis(context, authData: ISignupIscrizioneConacreisOptions) {
console.log('iscrivitiConacreis')
// console.log("PASSW: " + authData.password);
Mutations.mutations.setServerCode(tools.CALLING)
authData.userId = UserStore.state.my._id
return Api.SendReq('/iscritti_conacreis', 'POST', authData)
.then((res) => {
if (res.status === 200) {
return { code: serv_constants.RIS_ISCRIZIONE_OK, msg: '' }
} else {
return { code: tools.ERR_GENERICO, msg: '' }
}
}).catch((error) => {
console.log('Err', error)
UserStore.mutations.setErrorCatch(error)
return { code: UserStore.getters.getServerCode, msg: UserStore.getters.getMsg }
})
}
async function signin(context, authData: ISigninOptions) {
// console.log('LOGIN signin')
@@ -791,7 +823,10 @@ namespace Actions {
}
const options = {
title: tools.translate('notification.title_subscribed', [{strin: 'sitename', strout: translate('ws.sitename')}]),
title: tools.translate('notification.title_subscribed', [{
strin: 'sitename',
strout: translate('ws.sitename')
}]),
content: translate('notification.subscribed'),
openUrl: '/'
}
@@ -1068,6 +1103,7 @@ namespace Actions {
resetpwd: b.dispatch(resetpwd),
signin: b.dispatch(signin),
signup: b.dispatch(signup),
iscrivitiConacreis: b.dispatch(iscrivitiConacreis),
vreg: b.dispatch(vreg),
unsubscribe: b.dispatch(unsubscribe),
importemail: b.dispatch(importemail),

View File

@@ -97,7 +97,19 @@ export const colmsg_templates = [
export const colmypage = [
AddCol({ name: 'title', label_trans: 'pages.title' }),
AddCol({ name: 'img1', label_trans: 'pages.img1' }),
AddCol({ name: 'content', label_trans: 'pages.contentfield', fieldtype: tools.FieldType.html }),
AddCol({ name: 'video1', label_trans: 'pages.video1' }),
AddCol({ name: 'ratio1', label_trans: 'pages.ratio1' }),
AddCol({ name: 'img2', label_trans: 'pages.img2' }),
AddCol({ name: 'content2', label_trans: 'pages.content2', fieldtype: tools.FieldType.html }),
AddCol({ name: 'video2', label_trans: 'pages.video2' }),
AddCol({ name: 'ratio2', label_trans: 'pages.ratio2' }),
AddCol({ name: 'img3', label_trans: 'pages.img3' }),
AddCol({ name: 'content3', label_trans: 'pages.content3', fieldtype: tools.FieldType.html }),
AddCol({ name: 'video3', label_trans: 'pages.video3' }),
AddCol({ name: 'ratio3', label_trans: 'pages.ratio3' }),
AddCol({ name: 'content4', label_trans: 'pages.content4', fieldtype: tools.FieldType.html }),
AddCol({ name: 'lang', label_trans: 'pages.lang' }),
AddCol({ name: 'path', label_trans: 'pages.path' }),
AddCol({ name: 'icon', label_trans: 'pages.icon' }),
@@ -108,6 +120,7 @@ export const colmypage = [
AddCol({ name: 'color', label_trans: 'pages.color', fieldtype: tools.FieldType.string }),
AddCol({ name: 'onlyif_logged', label_trans: 'pages.onlyif_logged', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'only_residenti', label_trans: 'pages.only_residenti', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'only_consiglio', label_trans: 'pages.only_consiglio', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'imgback', label_trans: 'pages.imgback', fieldtype: tools.FieldType.string }),
AddCol({ name: 'active', label_trans: 'pages.active', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'inmenu', label_trans: 'pages.inmenu', fieldtype: tools.FieldType.boolean }),
@@ -205,8 +218,8 @@ export const colTableHours = [
// AddCol({ name: 'todoId', label_trans: 'hours.todoId' }),
AddCol({ name: 'date', label_trans: 'hours.date', fieldtype: tools.FieldType.onlydate }),
AddCol({ name: 'hours', label_trans: 'hours.hours', fieldtype: tools.FieldType.hours }),
AddCol({ name: 'time_start', label_trans: 'hours.time_start', fieldtype: tools.FieldType.number }),
AddCol({ name: 'time_end', label_trans: 'hours.time_end', fieldtype: tools.FieldType.number }),
// AddCol({ name: 'time_start', label_trans: 'hours.time_start', fieldtype: tools.FieldType.number }),
// AddCol({ name: 'time_end', label_trans: 'hours.time_end', fieldtype: tools.FieldType.number }),
AddCol({ name: 'descr', label_trans: 'hours.note' }),
AddCol({ name: 'username', label_trans: 'reg.username_short', notShowInNewRec: true }),
AddCol(DeleteRec),
@@ -247,10 +260,56 @@ export const colTableStorehouse = [
AddCol(DuplicateRec)
]
export const colTableSites = [
AddCol({ name: 'active', label_trans: 'sites.active', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'idapp', label_trans: 'sites.idapp', fieldtype: tools.FieldType.string }),
AddCol({ name: 'name', label_trans: 'sites.name', fieldtype: tools.FieldType.string }),
AddCol({ name: 'adminemail', label_trans: 'sites.adminemail', fieldtype: tools.FieldType.string }),
AddCol({ name: 'manageremail', label_trans: 'sites.manageremail', fieldtype: tools.FieldType.string }),
AddCol({ name: 'replyTo', label_trans: 'sites.replyTo', fieldtype: tools.FieldType.string }),
AddCol({ name: 'host', label_trans: 'sites.host', fieldtype: tools.FieldType.string }),
AddCol({ name: 'portapp', label_trans: 'sites.portapp', fieldtype: tools.FieldType.string }),
AddCol({ name: 'dir', label_trans: 'sites.dir', fieldtype: tools.FieldType.string }),
AddCol({ name: 'email_from', label_trans: 'sites.email_from', fieldtype: tools.FieldType.string }),
AddCol({ name: 'email_pwd', label_trans: 'sites.email_pwd', fieldtype: tools.FieldType.string }),
AddCol({ name: 'telegram_key', label_trans: 'sites.telegram_key', fieldtype: tools.FieldType.string }),
AddCol({ name: 'telegram_bot_name', label_trans: 'sites.telegram_bot_name', fieldtype: tools.FieldType.string }),
AddCol({ name: 'pathreg_add', label_trans: 'sites.pathreg_add', fieldtype: tools.FieldType.string }),
AddCol(DeleteRec),
AddCol(DuplicateRec)
]
export const colTableIscrittiConacreis = [
AddCol({ name: 'name', label_trans: 'reg.name', fieldtype: tools.FieldType.string }),
AddCol({ name: 'surname', label_trans: 'reg.surname', fieldtype: tools.FieldType.string }),
AddCol({ name: 'email', label_trans: 'reg.email', fieldtype: tools.FieldType.string }),
AddCol({ name: 'fiscalcode', label_trans: 'reg.fiscalcode', fieldtype: tools.FieldType.string }),
AddCol({ name: 'residency_address', label_trans: 'reg.residency_address', fieldtype: tools.FieldType.string }),
AddCol({ name: 'residency_city', label_trans: 'reg.residency_city', fieldtype: tools.FieldType.string }),
AddCol({ name: 'residency_province', label_trans: 'reg.residency_province', fieldtype: tools.FieldType.string }),
AddCol({ name: 'residency_country', label_trans: 'reg.residency_country', fieldtype: tools.FieldType.string }),
AddCol({ name: 'residency_zipcode', label_trans: 'reg.residency_zipcode', fieldtype: tools.FieldType.string }),
AddCol({ name: 'dateofbirth', label_trans: 'reg.dateofbirth', fieldtype: tools.FieldType.onlydate }),
AddCol({ name: 'cell_phone', label_trans: 'reg.cell_phone', fieldtype: tools.FieldType.string }),
AddCol({ name: 'newsletter_on', label_trans: 'reg.newsletter_on', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'iscrizione_compilata', label_trans: 'reg.iscrizione_compilata', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'dateofreg', label_trans: 'reg.dateofreg', fieldtype: tools.FieldType.onlydate }),
AddCol({ name: 'codiceConacreis', label_trans: 'reg.codiceConacreis', fieldtype: tools.FieldType.string }),
AddCol({ name: 'annoTesseramento', label_trans: 'reg.annoTesseramento', fieldtype: tools.FieldType.number }),
AddCol({ name: 'motivazioni', label_trans: 'reg.motivazioni', fieldtype: tools.FieldType.string }),
AddCol({ name: 'competenze_professionalita', label_trans: 'reg.competenze_professionalita', fieldtype: tools.FieldType.string }),
AddCol({ name: 'cosa_potrei_offrire', label_trans: 'reg.cosa_potrei_offrire', fieldtype: tools.FieldType.string }),
AddCol({ name: 'cosa_vorrei_ricevere', label_trans: 'reg.cosa_vorrei_ricevere', fieldtype: tools.FieldType.string }),
AddCol({ name: 'altre_comunicazioni', label_trans: 'reg.altre_comunicazioni', fieldtype: tools.FieldType.string }),
AddCol({ name: 'come_ci_hai_conosciuto', label_trans: 'reg.come_ci_hai_conosciuto', fieldtype: tools.FieldType.string }),
AddCol({ name: 'note', label_trans: 'reg.note', fieldtype: tools.FieldType.string })
]
export const colTableProducts = [
AddCol({ name: 'active', label_trans: 'products.active', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'code', label_trans: 'products.code' }),
AddCol({ name: 'name', label_trans: 'products.name' }),
AddCol({ name: 'description', label_trans: 'products.description' }),
AddCol({ name: 'description', label_trans: 'products.description', fieldtype: tools.FieldType.html }),
AddCol({ name: 'icon', label_trans: 'products.icon' }),
AddCol({ name: 'img', label_trans: 'products.img' }),
// AddCol({ name: 'idProducer', label_trans: 'products.idProducer' }),
@@ -592,7 +651,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, shared_consts.Permissions.Traduttrici, shared_consts.Permissions.Zoomeri, shared_consts.Permissions.Department]
return [shared_consts.Permissions.Admin, shared_consts.Permissions.Manager, shared_consts.Permissions.Teacher, shared_consts.Permissions.Tutor, shared_consts.Permissions.Editor, shared_consts.Permissions.Zoomeri, shared_consts.Permissions.Department]
else if (table === 'accepted')
return [shared_consts.Accepted.CHECK_READ_GUIDELINES, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI]
else if (table === 'fieldstype')
@@ -841,16 +900,15 @@ export const fieldsTable = {
colTableUsersCNM: [
// AddCol({ name: '_id', label_trans: 'reg.id' }),
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: 'sospeso', label_trans: 'reg.sospeso', 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' }),
AddCol({ name: 'email', label_trans: 'reg.email' }),
AddCol({ name: 'made_gift', label_trans: 'reg.made_gift', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'verified_email', label_trans: 'reg.verified_email', fieldtype: tools.FieldType.boolean }),
// AddCol({ name: 'made_gift', label_trans: 'reg.made_gift', fieldtype: tools.FieldType.boolean }),
AddCol({ name: 'note', label_trans: 'reg.note' }),
// 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.resplist',
field: 'profile',
@@ -872,24 +930,9 @@ export const fieldsTable = {
label_trans: 'reg.special_req',
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',
@@ -897,7 +940,7 @@ export const fieldsTable = {
subfield: 'email_paypal',
label_trans: 'reg.email_paypal'
}),
AddCol({
/*AddCol({
name: 'profile.payeer_id',
field: 'profile',
subfield: 'payeer_id',
@@ -914,14 +957,9 @@ export const fieldsTable = {
field: 'profile',
subfield: 'revolut',
label_trans: 'revolut'
}),
}), */
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',
@@ -949,13 +987,20 @@ export const fieldsTable = {
label_trans: 'reg.socioresidente',
fieldtype: tools.FieldType.boolean
}),
AddCol({ name: 'profile.chisei', field: 'profile', subfield: 'chisei', label_trans: 'reg.chisei' }),
AddCol({
name: 'profile.iltuoimpegno',
name: 'profile.consiglio',
field: 'profile',
subfield: 'iltuoimpegno',
label_trans: 'reg.iltuoimpegno'
subfield: 'consiglio',
label_trans: 'reg.consiglio',
fieldtype: tools.FieldType.boolean
}),
AddCol({ name: 'profile.chisei', field: 'profile', subfield: 'chisei', label_trans: 'reg.chisei' }),
AddCol({ name: 'profile.motivazioni', field: 'profile', subfield: 'motivazioni', label_trans: 'reg.motivazioni' }),
AddCol({ name: 'profile.competenze_professionalita', field: 'profile', subfield: 'competenze_professionalita', label_trans: 'reg.competenze_professionalita' }),
AddCol({ name: 'profile.cosa_offrire', field: 'profile', subfield: 'cosa_offrire', label_trans: 'reg.cosa_offrire' }),
AddCol({ name: 'profile.cosa_ricevere', field: 'profile', subfield: 'cosa_ricevere', label_trans: 'reg.cosa_ricevere' }),
AddCol({ name: 'profile.altre_comunicazioni', field: 'profile', subfield: 'altre_comunicazioni', label_trans: 'reg.altre_comunicazioni' }),
AddCol({ name: 'profile.come_ci_hai_conosciuto', field: 'profile', subfield: 'come_ci_hai_conosciuto', label_trans: 'reg.come_ci_hai_conosciuto' }),
AddCol({
name: 'profile.come_aiutare',
field: 'profile',
@@ -976,6 +1021,7 @@ export const fieldsTable = {
// AddCol({ name: 'idapp', label_trans: 'reg.idapp', fieldtype: tools.FieldType.string }),
AddCol({ name: 'perm', label_trans: 'reg.perm', fieldtype: tools.FieldType.binary, jointable: 'permissions' }),
AddCol({ name: 'ipaddr', label_trans: 'reg.ipaddr' }),
AddCol({ name: 'deleted', label_trans: 'reg.deleted', fieldtype: tools.FieldType.boolean }),
AddCol(DeleteRec),
AddCol(DuplicateRec)
],

View File

@@ -22,6 +22,7 @@ export const serv_constants = {
RIS_CODE_OK: 1,
RIS_CODE_LOGIN_OK: 1,
RIS_ISCRIZIONE_OK: 5,
RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN: 403,
RIS_CODE_TOKEN_RESETPASSWORD_NOT_FOUND: -23,

View File

@@ -56,7 +56,7 @@ export const tools = {
TABBED_HOME: 't-home',
TABBED_NAVE: 't-nave',
getprefCountries: ['it', 'si', 'us', 'es', 'pt', 'uk', 'fr', 'de', 'ch', 'br', 'sk'],
getprefCountries: ['it', 'es', 'us'],
APORTADOR_NONE: '------',
@@ -139,6 +139,13 @@ export const tools = {
languageid: 5,
peopleWhere: {
participants: 1,
lunch: 2,
dinner: 3,
dinnerShared: 4
},
SERVKEY_VERS: 'vers',
localStorage: {
@@ -274,6 +281,26 @@ export const tools = {
label: '8',
value: 8
},
{
id: 90,
label: '9',
value: 9
},
{
id: 100,
label: '10',
value: 10
},
{
id: 110,
label: '11',
value: 11
},
{
id: 120,
label: '12',
value: 12
},
],
SelectListNumPeople: [
@@ -1608,10 +1635,13 @@ export const tools = {
visumenu(elem) { // : IListRoutes
let visu = ((elem.onlyAdmin && UserStore.state.isAdmin) || (elem.onlyManager && UserStore.state.isManager)
|| (elem.onlySocioResidente && UserStore.state.my.profile.socioresidente)
|| (elem.onlyTutor && UserStore.state.isTutor) || (elem.onlyTraduttrici && UserStore.state.isTraduttrici)
|| (elem.onlyConsiglio && UserStore.state.my.profile.consiglio)
|| (elem.onlyNotSoci && !UserStore.state.my.profile.socio)
|| (elem.onlyTutor && UserStore.state.isTutor)
|| (elem.onlyEditor && UserStore.state.isEditor)
|| (elem.onlyDepartment && UserStore.state.isDepartment)
|| ((!elem.onlyAdmin) && (!elem.onlyManager) && (!elem.onlyTutor) && (!elem.onlyTraduttrici) && (!elem.onlyDepartment)
&& (!elem.onlySocioResidente))) && elem.active
|| ((!elem.onlyAdmin) && (!elem.onlyManager) && (!elem.onlyTutor) && (!elem.onlyEditor) && (!elem.onlyDepartment)
&& (!elem.onlySocioResidente) && (!elem.onlyConsiglio) && (!elem.onlyNotSoci))) && elem.active
if (!tools.isLoggedToSystem()) {
if (elem.onlyif_logged)
@@ -1997,7 +2027,7 @@ export const tools = {
},
showNeutralNotif(q: any, msg) {
tools.showNotif(q, msg, { color: 'info', icon: 'notifications' })
tools.showNotif(q, msg, { color: 'info', icon: 'notifications' }, 10000)
},
showNotif(q: any, msg, data ?: INotify | null, time?) {
@@ -2277,6 +2307,14 @@ export const tools = {
return !!UserStore.state.my.profile ? UserStore.state.my.profile.socioresidente : false
},
isConsiglio() {
return !!UserStore.state.my.profile ? UserStore.state.my.profile.consiglio : false
},
isSocio() {
return !!UserStore.state.my.profile ? UserStore.state.my.profile.socio : false
},
isResp() {
return UserStore.state.my.profile.resplist
},
@@ -2301,8 +2339,8 @@ export const tools = {
return UserStore.state.isZoomeri
},
isTraduttrici() {
return UserStore.state.isTraduttrici
isEditor() {
return UserStore.state.isEditor
},
getstrDate(mytimestamp) {
@@ -2313,6 +2351,15 @@ export const tools = {
return ''
},
getstrDateLong(mytimestamp) {
// console.log('getstrDate', mytimestamp)
const dayofweek = this.getDayOfWeek(mytimestamp)
if (!!mytimestamp)
return dayofweek + ' ' + date.formatDate(mytimestamp, 'DD/MM/YYYY')
else
return ''
},
getstrshortDate(mytimestamp) {
// console.log('getstrDate', mytimestamp)
if (!!mytimestamp)
@@ -2406,18 +2453,18 @@ export const tools = {
// is same day?
if (tools.getstrDate(myevent.dateTimeStart) === tools.getstrDate(myevent.dateTimeEnd)) {
if (withhtml) {
mystr += `<span class="cal__where-content">${tools.getstrDate(myevent.dateTimeStart)}</span>
mystr += `<span class="cal__where-content">${tools.getstrDateLong(myevent.dateTimeStart)}</span>
<span class="cal__hours-content">${mythis.$t('cal.starttime')} ${tools.getstrTime(myevent.dateTimeStart)}
${mythis.$t('cal.endtime')} ${tools.getstrTime(myevent.dateTimeEnd)}`
} else {
mystr = `${tools.getstrDate(myevent.dateTimeStart)}
mystr = `${tools.getstrDateLong(myevent.dateTimeStart)}
${mythis.$t('cal.starttime')} ${tools.getstrTime(myevent.dateTimeStart)}
${mythis.$t('cal.endtime')} ${tools.getstrTime(myevent.dateTimeEnd)}`
}
} else {
mystr = `<span class="cal__where-content">${tools.getstrDate(myevent.dateTimeStart)}</span>
mystr = `<span class="cal__where-content">${tools.getstrDateLong(myevent.dateTimeStart)}</span>
<span class="cal__hours-content">${mythis.$t('cal.starttime')} ${tools.getstrTime(myevent.dateTimeStart)} </span>
${mythis.$t('cal.enddate')} ${tools.getstrDate(myevent.dateTimeEnd)}
${mythis.$t('cal.enddate')} ${tools.getstrDateLong(myevent.dateTimeEnd)}
<span class="cal__hours-content">${mythis.$t('cal.endtime')} ${tools.getstrTime(myevent.dateTimeEnd)} </span>`
}
@@ -2550,6 +2597,8 @@ export const tools = {
return null
}
console.log('mystrdate', mystrdate)
const pattern = /(\d{2})\/(\d{2})\/(\d{4})/
const strdate = mystrdate.replace(pattern, '$3-$2-$1')
let mydate = null
@@ -2616,10 +2665,10 @@ export const tools = {
return false
},
getDayOfWeek(date) {
const dayOfWeek = new Date(date).getDay()
getDayOfWeek(mydate) {
const dayOfWeek = new Date(mydate).getDay()
let lang = this.getLocale()
const mylang = this.getLocale()
const myday = {
it: ['Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'],
@@ -2631,7 +2680,7 @@ export const tools = {
si: ['Nedelja', 'Ponedeljek', 'Torek', 'Sreda', 'četrtek', 'Petek', 'Sobota'],
}
return isNaN(dayOfWeek) ? '' : myday[lang][dayOfWeek].substring(0, 3)
return isNaN(dayOfWeek) ? '' : myday[mylang][dayOfWeek].substring(0, 3)
},
isSunday(mydate) {
@@ -3216,8 +3265,10 @@ export const tools = {
try {
if (riscode === tools.OK) {
tools.showNotif(mythis.$q, mythis.$t('login.completato'), { color: 'positive', icon: 'check' })
console.log('mythis.$router.name', mythis.$router.name)
if (ispageLogin) {
mythis.$router.push('/')
if (mythis.$router.name !== '/')
mythis.$router.push('/')
}
} else if (riscode === serv_constants.RIS_CODE_LOGIN_ERR) {
@@ -3310,6 +3361,12 @@ export const tools = {
color: 'green',
textColor: 'black'
})
} else if (riscode === serv_constants.RIS_ISCRIZIONE_OK) {
mythis.$router.push('/')
tools.showNotif(mythis.$q, mythis.$t('components.authentication.iscrizione_ok', { botname: mythis.$t('ws.botname') }), {
color: 'green',
textColor: 'black'
})
} else {
tools.showNotif(mythis.$q, 'Errore num ' + riscode)
}

View File

@@ -35,7 +35,7 @@ export const func_tools = {
// timeZone: 'UTC'
})
try {
console.log('mydate', mydate, DateFormatter)
// console.log('mydate', mydate, DateFormatter)
if (DateFormatter) {
const date1 = new Date(mydate)
return DateFormatter.format(date1)

View File

@@ -36,6 +36,7 @@ export default class CheckOut extends MixinBase {
public mycart: ICart = {}
public myrec: any[]
public note: string = ''
public statusnow: number = shared_consts.OrderStatus.NONE
public conferma_carrello: boolean = false
public conferma_ordine: boolean = false
@@ -50,6 +51,14 @@ export default class CheckOut extends MixinBase {
return cart.items || null
}
get getNumItems() {
const cart = Products.getters.getCart()
if (!!cart.items)
return cart.items.length || 0
else
return 0
}
get getCart() {
return Products.getters.getCart()
}
@@ -88,13 +97,20 @@ export default class CheckOut extends MixinBase {
}
}
public mounted() {
public async mounted() {
// Products.actions.loadCart()
this.load()
}
public async load() {
this.mycart = this.getCart
this.myrec = Object.keys(this.mycart)
this.note = this.mycart.note
if (this.mycart)
this.statusnow = await Products.actions.UpdateStatusCart({ cart_id: this.mycart._id, status })
console.log('myrec', this.myrec)
// Products.actions.loadCart()
}
public CanBeShipped() {
@@ -146,10 +162,13 @@ export default class CheckOut extends MixinBase {
title: 'Ordine'
}).onOk(async () => {
const status = shared_consts.OrderStatus.CHECKOUT_SENT
const statusnow = await Products.actions.UpdateStatusCart({ cart_id: this.mycart._id, status })
this.statusnow = await Products.actions.UpdateStatusCart({ cart_id: this.mycart._id, status })
if (statusnow === status) {
if (this.statusnow === status) {
tools.showPositiveNotif(this.$q, 'Ordine Confermato')
setTimeout(() => {
this.$router.push('/orderinfo')
}, 2000)
}
// this.change_field('status')
// this.change_field('status')

View File

@@ -15,7 +15,7 @@
class="text-subtitle1 q-mr-sm "> {{ myTotalPrice }}</span>
</div>
<q-input v-model="note" style="max-width: 400px;" label="Note aggiuntive:"
<q-input v-if="getNumItems > 0" v-model="note" style="max-width: 400px;" label="Scrivi qui per eventuali note o chiarimenti:"
filled dense
debounce="1000"
autogrow
@@ -26,7 +26,7 @@
</div>
<q-stepper-navigation>
<q-btn rounded icon="fas fa-shopping-cart" color="green" label="Completa l'Ordine" class="q-mb-sm"
<q-btn v-if="statusnow < shared_consts.OrderStatus.CHECKOUT_SENT" rounded icon="fas fa-shopping-cart" color="green" label="Completa l'Ordine" class="q-mb-sm"
:disabled="myTotalQty < 1"
@click="completeOrder"></q-btn>
</q-stepper-navigation>

View File

@@ -3,3 +3,12 @@ $heightBtn: 100%;
.card .product-image {
height: 300px;
}
.mycol{
color:gray;
}
.q-item__label--caption{
color: blue;
}

View File

@@ -40,6 +40,9 @@ export default class OrderInfo extends MixinBase {
public conferma_ordine: boolean = false
public taborders: string = 'incorso'
public filter: string = ''
public statusnow: number = 0
public arrnumstatus: any = []
public columns = [
{
name: 'numorder',
@@ -49,6 +52,14 @@ export default class OrderInfo extends MixinBase {
field: 'numorder',
sortable: true
},
{
name: 'nameSurname',
required: true,
align: 'left',
label: 'Nome',
field: 'nameSurname',
sortable: true
},
{
name: 'created_at',
required: true,
@@ -90,6 +101,10 @@ export default class OrderInfo extends MixinBase {
return Products.getters.getOrdersCart(this.taborders)
}
get getAllOrdersCart() {
return Products.getters.getOrdersAllCart()
}
public change_field(myorderid, fieldname) {
if (this.myarrrec[myorderid][fieldname] !== this[fieldname]) {
this.myarrrec[myorderid][fieldname] = this[fieldname]
@@ -102,12 +117,42 @@ export default class OrderInfo extends MixinBase {
tools.saveFieldToServer(this, 'orderscart', myorderid, mydata, aggiorna)
}
}
public mounted() {
public updateorders() {
this.myorderscart = this.getOrdersCart
for (const ordercart of this.myorderscart) {
this.myarrrec[ordercart._id] = Object.keys(ordercart)
}
const allorders = this.getAllOrdersCart
for (const status of [
2,
3,
4,
6,
10
]) {
this.arrnumstatus[status] = allorders.filter((rec) => (rec.status === status)).reduce((sum, item) => sum + 1, 0)
}
}
public mounted() {
this.updateorders()
console.log('arrnumstatus;')
console.log(this.arrnumstatus)
this.columns = [...this.columns,
{
name: 'comandi',
align: 'center',
required: false,
label: 'Comandi',
field: 'comandi',
sortable: false
}]
}
public CanBeShipped() {
@@ -146,4 +191,37 @@ export default class OrderInfo extends MixinBase {
return 0
}
public clickFunz(order, status) {
if (status === shared_consts.OrderStatus.ORDER_CONFIRMED) {
// Conferma Ordine
}
const statusStr = shared_consts.getStatusStr(status)
this.$q.dialog({
message: 'Impostare l\'ordine n. ' + order.numorder + ' ' + statusStr + ' ?',
ok: {
label: this.$t('dialog.yes'),
push: true
},
cancel: {
label: this.$t('dialog.cancel')
},
title: 'Ordine'
}).onOk(async () => {
this.statusnow = await Products.actions.UpdateOrderStatus({ order_id: order._id, status })
if (this.statusnow === status) {
order.status = this.statusnow
this.updateorders()
tools.showPositiveNotif(this.$q, 'Ordine ' + statusStr)
}
// this.change_field('status')
// this.change_field('status')
})
}
}

View File

@@ -7,23 +7,70 @@
inline-label
class="text-blue"
>
<q-tab name="incorso" icon="fas fa-tasks" label="Ordini in Corso"/>
<q-tab name="recenti" icon="fas fa-calendar" label="Ordini Recenti"/>
<q-tab class="text-black" v-if="this.arrnumstatus[2] > 0" name="incorso" icon="fas fa-tasks" :label="`(` + this.arrnumstatus[2] +`) in Corso`"/>
<q-tab class="text-blue" v-if="this.arrnumstatus[3] > 0" name="confermati" icon="fas fa-calendar" :label="`(` + this.arrnumstatus[3] +`) Confermati`"/>
<q-tab class="text-green" v-if="this.arrnumstatus[4] > 0" name="pagati" icon="fas fa-calendar" :label="`(` + this.arrnumstatus[4] +`) Pagati`"/>
<q-tab class="text-blue-grey-8" v-if="this.arrnumstatus[6] > 0" name="completati" icon="fas fa-check" :label="`(` + this.arrnumstatus[6] +`) Completati`"/>
<q-tab class="text-red" v-if="this.arrnumstatus[10] > 0" name="cancellati" icon="delete" :label="`(` + this.arrnumstatus[10] +`) Cancellati`"/>
</q-tabs>
<div class="q-pa-sm">
<q-table
:grid="$q.screen.lt.sm"
:hide-header="$q.screen.lt.sm"
:columns="columns"
row-key="numorder"
:data="getOrdersCart">
<template v-slot:body="props">
<template v-if="$q.screen.lt.sm" v-slot:item="props">
<div class="q-pa-xs col-xs-12 col-sm-6 col-md-4">
<q-card class="my-card-shadow yes_shadow">
<q-list dense>
<q-item v-for="col in props.cols.filter(col => col.name !== 'desc')" :key="col.name">
<q-item-section>
<q-item-label>{{ col.label }}</q-item-label>
</q-item-section>
<q-item-section side>
<q-item-label v-if="col.name === 'created_at'" caption>{{
tools.getstrDateTime(col.value)
}}
<span v-if="taborders === 'completati'">
<br>Completato il: {{ tools.getstrDateTime(props.row.completed_at) }}
</span>
</q-item-label>
<q-item-label v-else-if="col.name === 'items'" caption>
<div v-for="item of props.row.items">
<div v-if="!!item.order.product">
{{ item.order.product.name }} ({{ item.order.quantity }})<br>
</div>
</div>
</q-item-label>
<q-item-label v-else-if="col.name === 'totalPrice'" caption>
{{ props.row.totalPrice }}
</q-item-label>
<q-item-label v-else-if="col.name === 'status'" caption>
{{ shared_consts.getStatusStr(props.row.status) }}
</q-item-label>
<q-item-label v-else caption>{{ col.value }}</q-item-label>
</q-item-section>
</q-item>
</q-list>
</q-card>
</div>
</template>
<template v-else v-slot:body="props">
<q-tr :props="props">
<q-td key="numorder" :props="props">
&nbsp; n. {{ props.row.numorder }}
</q-td>
<q-td key="nameSurname" :props="props">
{{ props.row.nameSurname }}
</q-td>
<q-td key="created_at" :props="props">
{{ tools.getstrDateTime(props.row.created_at) }}
{{ tools.getstrDateTime(props.row.created_at) }}
<span v-if="taborders === 'completati'">
<br>Completato il:<br>{{ tools.getstrDateTime(props.row.completed_at) }}
</span>
</q-td>
<q-td key="items" :props="props">
<div v-for="item of props.row.items">
@@ -37,7 +84,62 @@
{{ props.row.totalPrice }}
</q-td>
<q-td key="status" :props="props">
{{ shared_consts.getStatusStr(props.row.status) }}
<span :class="props.row.status">{{ shared_consts.getStatusStr(props.row.status) }}</span>
</q-td>
<q-td key="comandi" :props="props">
<div v-if="tools.isManager()" class="q-pa-sm">
<q-btn-dropdown rounded dense label="Azioni">
<q-list class="text-primary">
<q-item clickable v-close-popup
@click="clickFunz(props.row, shared_consts.OrderStatus.ORDER_CONFIRMED)">
<q-item-section avatar>
<q-avatar icon="fas fa-list-ol" color="grey" text-color="white"/>
</q-item-section>
<q-item-section>
<q-item-label>Inviato</q-item-label>
</q-item-section>
</q-item>
<q-item clickable v-close-popup
@click="clickFunz(props.row, shared_consts.OrderStatus.ORDER_CONFIRMED)">
<q-item-section avatar>
<q-avatar icon="fas fa-calendar-check" color="secondary" text-color="white"/>
</q-item-section>
<q-item-section>
<q-item-label>Confermato</q-item-label>
</q-item-section>
</q-item>
<q-item clickable v-close-popup @click="clickFunz(props.row, shared_consts.OrderStatus.PAYED)"
color="blue">
<q-item-section avatar>
<q-avatar icon="money" color="positive" text-color="white"/>
</q-item-section>
<q-item-section>
<q-item-label>Pagato</q-item-label>
</q-item-section>
</q-item>
<q-item clickable v-close-popup @click="clickFunz(props.row, shared_consts.OrderStatus.RECEIVED)"
color="blue">
<q-item-section avatar>
<q-avatar icon="fas fa-check" color="primary" text-color="white"/>
</q-item-section>
<q-item-section>
<q-item-label>Completato</q-item-label>
</q-item-section>
</q-item>
<q-item clickable v-close-popup @click="clickFunz(props.row, shared_consts.OrderStatus.CANCELED)"
color="blue">
<q-item-section avatar>
<q-avatar icon="delete" color="negative" text-color="white"/>
</q-item-section>
<q-item-section>
<q-item-label>Cancellato</q-item-label>
</q-item-section>
</q-item>
</q-list>
</q-btn-dropdown>
</div>
</q-td>
</q-tr>
</template>

View File

@@ -0,0 +1,12 @@
.signup {
width: 100%;
margin: 0 auto;
max-width: 450px;
}
.wrapper {
display: flex;
align-items: center;
justify-content: center;
}

View File

@@ -0,0 +1,28 @@
import Vue from 'vue'
import { Component, Prop, Watch } from 'vue-property-decorator'
import { UserStore } from '@store'
import { tools } from '../../../store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import { CSignUpIscrizioneConacreis } from '../../../components/CSignUpIscrizioneConacreis'
import { CMyPage } from '../../../components/CMyPage'
import { Footer } from '../../../components/Footer'
import { CTitleBanner } from '../../../components/CTitleBanner'
@Component({
components: { CSignUpIscrizioneConacreis, CMyPage, Footer, CTitleBanner }
})
export default class Iscrizioneconacreis extends Vue {
public $t: any
public adult: boolean = false
public created() {
// if (!tools.getCookie(tools.APORTADOR_SOLIDARIO, ''))
// tools.setCookie(tools.APORTADOR_SOLIDARIO, this.$route.params.invited)
}
get isSocio() {
return UserStore.state.my.profile.socio
}
}

View File

@@ -0,0 +1,26 @@
<template>
<div>
<CMyPage mypath="/diventa_socio">
</CMyPage>
<CTitleBanner v-if="isSocio" title="Nota: Ci risulta che sei già Socio Iscritto !"
bgcolor="bg-positive"
clcolor="text-white"></CTitleBanner>
<q-page padding>
<div class="signup">
<CSignUpIscrizioneConacreis>
</CSignUpIscrizioneConacreis>
</div>
<Footer></Footer>
</q-page>
</div>
</template>
<script lang="ts" src="./iscrizioneconacreis.ts">
</script>
<style lang="scss" scoped>
@import './iscrizioneconacreis.scss';
</style>

View File

@@ -977,7 +977,6 @@ export default class ProjList extends Vue {
if (this.arrfilterand)
myarr = [...myarr, ...this.arrfilterand]
console.log('myarr', myarr)
return myarr
}

View File

@@ -78,76 +78,134 @@
</div>
</CTitleBanner>
<CTitleBanner class="q-pa-xs" :title="$t('pages.payment')" bgcolor="bg-primary" clcolor="text-white"
myclass="myshad" :canopen="true">
<div class="row fa-border justify-center items-center">
<CMyFieldDb v-if="tools.isselectPayeer()"
:title="$t('reg.payeer_id')"
table="users"
mykey="profile"
myimg="statics/images/payeer.jpg"
mysubkey="payeer_id"
:type="tools.FieldType.string">
</CMyFieldDb>
<CMyFieldDb v-if="tools.isselectAdvCash()"
:title="$t('reg.advcash_id')"
table="users"
mykey="profile"
mysubkey="advcash_id"
myimg="statics/images/advcash.jpg"
:type="tools.FieldType.string">
</CMyFieldDb>
<CMyFieldDb v-if="tools.isselectRevolut()"
:title="$t('reg.revolut')"
table="users"
mykey="profile"
mysubkey="revolut"
myimg="statics/images/revolut.jpg"
:type="tools.FieldType.string">
</CMyFieldDb>
<CTitleBanner class="q-pa-xs" title="Informazioni su di te" bgcolor="bg-primary" clcolor="text-white"
myclass="myshad" :canopen="true">
<CMyFieldDb v-if="tools.isselectPaypal()"
:title="$t('reg.email_paypal')"
table="users"
mykey="profile"
mysubkey="email_paypal"
myimg="statics/images/paypal.jpg"
:type="tools.FieldType.string">
</CMyFieldDb>
<CMyFieldDb v-if="tools.isselectPaypal()"
:title="$t('reg.link_payment')"
table="users"
mykey="profile"
mysubkey="link_payment"
:type="tools.FieldType.string">
</CMyFieldDb>
<CMyFieldDb :title="$t('reg.country_pay')"
table="users"
mykey="profile"
mysubkey="country_pay"
:type="tools.FieldType.nationality">
</CMyFieldDb>
<CMyFieldDb :title="$t('reg.note_payment')"
table="users"
mykey="profile"
mysubkey="note_payment"
:type="tools.FieldType.string">
</CMyFieldDb>
<div class="column">
<div class="row">
<CMyFieldDb title="Motivazioni"
table="users"
mykey="profile"
mysubkey="motivazioni"
:type="tools.FieldType.string">
</CMyFieldDb>
</div>
<div class="row">
<CMyFieldDb title="Competenze e Professionalità"
table="users"
mykey="profile"
mysubkey="competenze_professionalita"
:type="tools.FieldType.string">
</CMyFieldDb>
</div>
<div class="row">
<CMyFieldDb title="Cosa potrei offrire?"
table="users"
mykey="profile"
mysubkey="cosa_offrire"
:type="tools.FieldType.string">
</CMyFieldDb>
</div>
<div class="row">
<CMyFieldDb title="Cosa vorrei ricevere?"
table="users"
mykey="profile"
mysubkey="cosa_ricevere"
:type="tools.FieldType.string">
</CMyFieldDb>
</div>
<div class="row">
<CMyFieldDb title="Altre Comunicazioni"
table="users"
mykey="profile"
mysubkey="altre_comunicazioni"
:type="tools.FieldType.string">
</CMyFieldDb>
</div>
<div class="row">
<CMyFieldDb title="Come ci hai conosciuto?"
table="users"
mykey="profile"
mysubkey="come_ci_hai_conosciuto"
:type="tools.FieldType.string">
</CMyFieldDb>
</div>
</div>
<CMyFieldDb :title="$t('reg.paymenttype')"
table="users"
mykey="profile"
mysubkey="paymenttypes"
:type="tools.FieldType.multiselect"
jointable="paymenttypes">
</CMyFieldDb>
</CTitleBanner>
<!--
<CTitleBanner class="q-pa-xs" :title="$t('pages.payment')" bgcolor="bg-primary" clcolor="text-white"
myclass="myshad" :canopen="true">
<div class="row fa-border justify-center items-center">
<CMyFieldDb v-if="tools.isselectPayeer()"
:title="$t('reg.payeer_id')"
table="users"
mykey="profile"
myimg="statics/images/payeer.jpg"
mysubkey="payeer_id"
:type="tools.FieldType.string">
</CMyFieldDb>
<CMyFieldDb v-if="tools.isselectAdvCash()"
:title="$t('reg.advcash_id')"
table="users"
mykey="profile"
mysubkey="advcash_id"
myimg="statics/images/advcash.jpg"
:type="tools.FieldType.string">
</CMyFieldDb>
<CMyFieldDb v-if="tools.isselectRevolut()"
:title="$t('reg.revolut')"
table="users"
mykey="profile"
mysubkey="revolut"
myimg="statics/images/revolut.jpg"
:type="tools.FieldType.string">
</CMyFieldDb>
<CMyFieldDb v-if="tools.isselectPaypal()"
:title="$t('reg.email_paypal')"
table="users"
mykey="profile"
mysubkey="email_paypal"
myimg="statics/images/paypal.jpg"
:type="tools.FieldType.string">
</CMyFieldDb>
<CMyFieldDb v-if="tools.isselectPaypal()"
:title="$t('reg.link_payment')"
table="users"
mykey="profile"
mysubkey="link_payment"
:type="tools.FieldType.string">
</CMyFieldDb>
<CMyFieldDb :title="$t('reg.country_pay')"
table="users"
mykey="profile"
mysubkey="country_pay"
:type="tools.FieldType.nationality">
</CMyFieldDb>
<CMyFieldDb :title="$t('reg.note_payment')"
table="users"
mykey="profile"
mysubkey="note_payment"
:type="tools.FieldType.string">
</CMyFieldDb>
</div>
<CMyFieldDb :title="$t('reg.paymenttype')"
table="users"
mykey="profile"
mysubkey="paymenttypes"
:type="tools.FieldType.multiselect"
jointable="paymenttypes">
</CMyFieldDb>
</CTitleBanner>
-->
<br><br>
<div class="text-center">