From 08e2ece604d7542f7c1be27d1bba969a5c4b6566 Mon Sep 17 00:00:00 2001 From: Paolo Arena Date: Mon, 22 Apr 2019 01:43:53 +0200 Subject: [PATCH] End "project and Todos": what could modify or readonly. --- .../projects/SingleProject/SingleProject.ts | 14 +- .../projects/SingleProject/SingleProject.vue | 2 + src/components/todos/CTodo/CTodo.ts | 16 +- src/components/todos/CTodo/CTodo.vue | 8 +- src/components/todos/SingleTodo/SingleTodo.ts | 13 +- .../todos/SingleTodo/SingleTodo.vue | 16 +- src/model/Todos.ts | 1 + src/router/index.ts | 2 +- src/router/route-config.ts | 15 +- src/router/route-names.ts | 4 +- src/statics/i18n.js | 9 +- src/statics/i18n_old.js | 962 ------------------ src/store/Modules/GlobalStore.ts | 32 +- src/store/Modules/Projects.ts | 53 +- src/store/Modules/Todos.ts | 1 + src/store/Modules/tools.ts | 41 +- src/views/projects/proj-list/proj-list.ts | 55 +- src/views/projects/proj-list/proj-list.vue | 21 +- 18 files changed, 214 insertions(+), 1051 deletions(-) delete mode 100644 src/statics/i18n_old.js diff --git a/src/components/projects/SingleProject/SingleProject.ts b/src/components/projects/SingleProject/SingleProject.ts index 5cac39c..0f6e0c3 100644 --- a/src/components/projects/SingleProject/SingleProject.ts +++ b/src/components/projects/SingleProject/SingleProject.ts @@ -44,6 +44,10 @@ export default class SingleProject extends Vue { return !Projects.getters.getifCanISeeProj(this.itemproject) } + get CanIModifyProject() { + return Projects.getters.CanIModifyPanelPrivacy(this.itemproject) + } + @Prop({ required: true }) public itemproject: IProject @Watch('itemproject.enableExpiring') public valueChanged4() { @@ -248,12 +252,16 @@ export default class SingleProject extends Vue { this.editProject() } + get isMyProject() { + return this.itemproject.userId === UserStore.state.userId + } + get getrouteto() { - return '/projects/' + this.itemproject._id + return tools.getUrlByTipoProj(this.isMyProject) + this.itemproject._id } public goIntoTheProject() { - this.$router.replace('/projects/' + this.itemproject._id) + this.$router.replace(tools.getUrlByTipoProj(this.isMyProject) + this.itemproject._id) } public editProject() { @@ -290,7 +298,7 @@ export default class SingleProject extends Vue { } // console.log('focus()') - }, 300) + }, 500) } public getFocus(e) { diff --git a/src/components/projects/SingleProject/SingleProject.vue b/src/components/projects/SingleProject/SingleProject.vue index 30d137a..993c5a2 100644 --- a/src/components/projects/SingleProject/SingleProject.vue +++ b/src/components/projects/SingleProject/SingleProject.vue @@ -45,6 +45,8 @@
{ - - const itemdragend: IDrag = { - category: this.categoryAtt, - newIndex: this.getElementIndex(args.el), - oldIndex: this.getElementOldIndex(args.el) + // console.log('args', args) + if (args.name === this.dragname) { + const itemdragend: IDrag = { + category: this.categoryAtt, + newIndex: this.getElementIndex(args.el), + oldIndex: this.getElementOldIndex(args.el) + } + this.onEndtodo(itemdragend) } - - this.onEndtodo(itemdragend) }) $service.eventBus.$on('drag', (el, source) => { diff --git a/src/components/todos/CTodo/CTodo.vue b/src/components/todos/CTodo/CTodo.vue index 7f9e557..6f9c3db 100644 --- a/src/components/todos/CTodo/CTodo.vue +++ b/src/components/todos/CTodo/CTodo.vue @@ -61,6 +61,8 @@ + +
{{ prior = 0, priorcomplet = false }}
@@ -75,7 +77,9 @@
+ :itemtodo='mytodo' :CanIModifyTodo="CanIModifyTodo"> + + @@ -107,7 +111,7 @@
- CanIModifyTodo : {{CanIModifyTodo}} + @@ -13,9 +15,10 @@ v-model.trim="precDescr" autogrow borderless + :readonly="!CanIModifyTodo" dense :class="classDescrEdit" :max-height="100" - @keydown="keyDownArea" v-on:keydown.esc="exitEdit" @blur="exitEdit(true)" @click="editTodo()"/> + @keydown="keyDownArea" v-on:keydown.esc="exitEdit" @blur="exitEdit(true)" @click="editTodo()">
{{itemtodo.descr}} @@ -37,6 +40,7 @@
{{percentageProgress}}% - @@ -57,14 +62,15 @@
+ data_class="data_string" :readonly="!CanIModifyTodo">
-
+
- + diff --git a/src/model/Todos.ts b/src/model/Todos.ts index ea00597..0bc4535 100644 --- a/src/model/Todos.ts +++ b/src/model/Todos.ts @@ -40,6 +40,7 @@ export interface IDrag { category?: string id_proj?: string atfirst?: boolean + mieiproj?: boolean } export interface ITodosState { diff --git a/src/router/index.ts b/src/router/index.ts index c0a3f1e..7709525 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -62,7 +62,7 @@ Router.beforeEach(async (to: IMyRoute, from: IMyRoute, next) => { next() } else { if (!to.meta.transparent && !to.meta.isModal) { - console.log('Route interceptor log: <4>') + // console.log('Route interceptor log: <4>') ProgressBar.mutations.start() } else if (to.meta.transparent && !from.name) { diff --git a/src/router/route-config.ts b/src/router/route-config.ts index de55aac..6b93019 100644 --- a/src/router/route-config.ts +++ b/src/router/route-config.ts @@ -98,7 +98,19 @@ export const routesList: IMyRouteConfig[] = [ // }, { path: '/projects/:idProj', - name: 'progetti', + name: RouteNames.projects, + component: () => import('@/views/projects/proj-list/proj-list.vue'), + meta: { + requiresAuth: true, + async asyncData() { + await Projects.actions.dbLoad({ checkPending: false, onlyiffirsttime: true }) + } + // middleware: [auth] + } + }, + { + path: '/myprojects/:idProj', + name: RouteNames.myprojects, component: () => import('@/views/projects/proj-list/proj-list.vue'), meta: { requiresAuth: true, @@ -109,6 +121,7 @@ export const routesList: IMyRouteConfig[] = [ } } + /* { diff --git a/src/router/route-names.ts b/src/router/route-names.ts index 18b285a..aa8d147 100644 --- a/src/router/route-names.ts +++ b/src/router/route-names.ts @@ -1,4 +1,6 @@ export const RouteNames = { home: 'home', - login: 'login' + login: 'login', + projects: 'projects', + myprojects: 'myprojects' } diff --git a/src/statics/i18n.js b/src/statics/i18n.js index d5b8508..af09566 100644 --- a/src/statics/i18n.js +++ b/src/statics/i18n.js @@ -127,7 +127,8 @@ const messages = { Admin: 'Admin', Test1: 'Test1', Test2: 'Test2', - Projects: 'Progetti' + Projects: 'Progetti Condivisi', + MyProjects: 'Progetti Personali' }, components: { authentication: { @@ -387,7 +388,8 @@ const messages = { Admin: 'Administración', Test1: 'Test1', Test2: 'Test2', - Projects: 'Projectos', + Projects: 'Proyectos Compartidos', + MyProjects: 'Proyectos Personales', }, components: { authentication: { @@ -640,7 +642,8 @@ const messages = { Admin: 'Admin', Test1: 'Test1', Test2: 'Test2', - Projects: 'Projects', + Projects: 'Shared Projects', + MyProjects: 'Personal Projects', }, components: { authentication: { diff --git a/src/statics/i18n_old.js b/src/statics/i18n_old.js deleted file mode 100644 index 845b846..0000000 --- a/src/statics/i18n_old.js +++ /dev/null @@ -1,962 +0,0 @@ -const messages = { - it: { - dialog: { - ok: 'Ok', - yes: 'Si', - no: 'No', - delete: 'Elimina', - cancel: 'Annulla', - msg: { - titledeleteTask: 'Elimina Task', - deleteTask: "Vuoi Eliminare {mytodo}?" - } - }, - comp: { - Conta: "Conta", - }, - msg: { - hello: 'Buongiorno', - myAppName: 'FreePlanet', - underconstruction: 'App in costruzione...', - myDescriz: '', - sottoTitoloApp: 'Il primo Vero Social', - sottoTitoloApp2: 'Libero, Equo e Solidale', - sottoTitoloApp3: 'dove Vive Consapevolezza e Aiuto Comunitario', - sottoTitoloApp4: 'Gratuito e senza Pubblicità', - }, - homepage: { - descrapp_title1: 'Uniti per Evolvere e Sperimentare', - descrapp_pag1: 'Riscopri come il valore della Condivisione e della Cooperazione, possa aiutarci a ritrovare il profondo ' + - 'senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza' + - ' che intere popolazioni antiche conoscevano bene.', - descrapp_pag2: 'E\' giunta l\'ora di utilizzare i nuovi strumenti Tecnologici a nostro favore, per Liberarci ' + - 'così piano piano dalla schiavitù del "Lavoro per generare Denaro" e trasformando le nostre Capacitá in ' + - 'Risorse Umane per poterci sostenere e vivere in Armonia con gli altri.', - freesocial: { - title: 'Free Social', - descr: 'Una Community organizzata per Categorie, dove potrai unirti a Gruppi Tematici, ' + - 'Condividere Esperienze e unire Competenze per organizzare e sostenere Progetti Innovativi per il Popolo.

' + - 'Verranno evidenziati sviluppi Etici come l\'Auto-Produzione, la Sostenibilitá, ' + - 'la Buona Salute Naturale e il Rispetto per l\'Ambiente e per tutti gli Esseri Viventi di questo ' + - 'Pianeta. Chiunque potrá esprimere il proprio Consenso o Dissenso partecipando a Sondaggi Interattivi' + - ' e realizzare insieme i Cambiamenti necessari alla nostra Società.', - }, - freetalent: { - title: 'Free Talent', - descr: 'Condividi i tuoi Talenti e Abilità, ' + - 'al posto del denaro guadagnagnerai Tempo.
' + - '"1 ora" diventa moneta di scambio, uguale per tutti.
' + - 'Potrai utilizzare questi tuoi "Crediti Tempo" per soddisfare le tue necessità, cercando nelle Competenze Disponibili.
' + - 'Nel Dare e Ricevere, si creeranno così legami di Amicizia, Solidarietà, Cooperazione e Divertimento

' + - 'Questo progetto vuole diffondere, ora in maniera informatizzata, questa realtà che gia esiste da tanti anni, e viene chiamata "Banca del Tempo". ' + - 'Le segreterie sparse in tutto il mondo, serviranno a dare maggiore affidabilità e fiducia negli scambi di talenti tra persone sconosciute. ' + - 'Creeremo così una rete di fiducia nel vicinato, come giá viene praticato in numerosi Ecovillaggi e Comunità del mondo.', - }, - freegas: { - title: 'Free G.A.S.', - descr: 'Ti piacerebbe utilizzare una App che ti permetta facilmente di acquistare Prodotti Locali direttamente dal Produttore?
' + - 'Con i Gruppi di Acquisto Solidale si evitano intermediazioni inutili, ottenendo parecchi benefici tra cui:
' + - '
  • Qualitá Superiore del prodotto
  • ' + - '
  • Le Recensioni dei consumatori favoriranno i Produttori con Sani Intenti
  • ' + - '
  • Possiblità d\'interagire con il Produttore
  • ' + - '
  • Apertura alle Relazioni tra persone, condividendo Ricette e Consigli preziosi
  • ' + - '
  • Risparmio di soldi (prezzi all\'Ingrosso)
  • ' + - '
  • Valorizzare il Territorio e l\'Economia Locale
  • ' + - '
  • Condizioni Eque per i Lavoratori
  • ' + - '
  • Ridotto Impatto Ambientale
', - }, - freeliving: { - title: 'Free Co-Living', - descr: 'Unire più realtà, condividendo l\'esperienza di abitare insieme, per un periodo definito:
' + - '1) C\'è chi Vive solo ed ha una casa.
' + - '2) Chi ha bisogno di un alloggio temporaneo.

' + - 'Oggi sempre più persone abitano da sole e vorrebbero continuare a vivere nella propria abitazione.
' + - 'Altre persone invece hanno bisogno di una stanza, per scelta o per necessita, ed in cambio sono disponibili a ' + - 'contribuire alle spese per le utenze domestiche o magari aiutare la persona a fare la spesa, cucinare, pulire casa oppure offrendogli semplicemente compagnia.

' + - 'Tramite questo strumento, le persone potranno trovarsi, mettersi in contatto e decidere in che forma co-abitare e per quanto tempo. Le recensioni rilasciate ed il dettaglio dei profili utenti, ' + - 'aiuterà nella scelta della persona più in sintonia.' - - }, - freecollabora: { - title: 'Chi può Collaborare?', - descr: 'Tutti coloro che sono in linea con Princìpi Etici e ricerca del Benessere Globale del Pianeta
' + - 'Pertanto sono i benvenuti:' + - '
    ' + - '
  • Associazioni no-profit, Ecovillaggi, Comunità
  • ' + - '
  • Gruppi che intendono promuovere Progetti Sociali Innovativi per una Decrescita Felice
  • ' + - '
  • Chi gestisce un Gruppo di Acquisto Solidale (G.A.S.)
  • ' + - '
  • Produttori Locali Etici
  • ' + - '
  • Chi gestisce una Banca del Tempo
  • ' + - '
  • Chiunque voglia partecipare, nella forma che ritiene più opportuna.
  • ' + - '
', - }, - freesostieni: { - title: 'Come Sostenere il progetto?', - descr: '
    ' + - '
  • Condividendolo a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era
  • ' + - '
  • Rispondendo ai Sondaggi Popolari e lasciando Feedback
  • ' + - '
  • Tramite una donazione (anche 1€ ) per le spese.
    ' + - '
' + - 'Vedo un futuro dove non si utilizzerà più denaro. Dove le persone si aiuteranno a vicenda e non avranno bisogno di "possedere" cose, ma le condivideranno con gli altri.
', - }, - multiplatform: { - title: 'Multi-piattaforma', - descr: 'E\' compatibile con Google Chrome, Firefox, Safari, iOS, Android e PC. L\'Applicazione s\'installa facilmente, senza passare dallo store. ' + - 'basta condividere il nome del sito www.freeplanet.app.
' + - 'Dopo la registrazione chiederà di aggiungerlo alla lista delle applicazioni e sullo sfondo', - }, - free: { - title: 'Gratuita, Open Source e Niente Pubblicità', - descr: 'Questa App non è in vendita, non ha scopi commerciali, non ha prezzo ed appartiene al Popolo del Nuovo Mondo.
Chiunque potrá utilizzarla e beneficiarne.
A me il compito di gestirla e proteggerla. ' + - 'Verranno accettate solo donazioni Libere di privati ed Associazioni no-profit, in linea con i Principi, che serviranno per coprire le spese.
' + - 'Grazie a Tutti per il sostegno. ' - }, - contacts: 'Contatti' - }, - pages: { - home: 'Principale', - SignUp: 'Registrazione', - SignIn: 'Login', - vreg: 'Verifica Reg', - Test: 'Test', - Category: 'Categorie', - Todo: 'Todo', - personal: 'Personale', - work: 'Lavoro', - shopping: 'Spesa', - Admin: 'Admin', - Test1: 'Test1', - Test2: 'Test2', - Projects: 'Progetti' - }, - components: { - authentication: { - login: { - facebook: 'Facebook' - }, - email_verification: { - title: 'Inizia la tua registrazione', - introduce_email: 'inserisci la tua email', - email: 'Email', - invalid_email: 'La tua email è invalida', - verify_email: 'Verifica la tua email', - go_login: 'Torna al Login', - incorrect_input: 'Inserimento incorretto.', - link_sent: 'Per confermare la Registrazione, leggi la tua casella di posta e Clicca su "Verifica Email".\nSe non la trovi, cerca nella cartella Spam.' - } - } - }, - fetch: { - errore_generico: 'Errore Generico', - errore_server: 'Impossibile accedere al Server. Riprovare Grazie', - error_doppiologin: 'Rieseguire il Login. Accesso aperto da un altro dispositivo.', - }, - user: { - notregistered: 'Devi registrarti al servizio prima di porter memorizzare i dati', - loggati: 'Utente non loggato' - }, - reg: { - incorso: 'Registrazione in corso...', - richiesto: 'Campo Richiesto', - email: 'Email', - username: 'Nome Utente', - username_login: 'Nome Utente o email', - password: 'Password', - repeatPassword: 'Ripeti password', - terms: "Accetto i termini e le condizioni", - submit: "Registrati", - title_verif_reg: "Verifica Registrazione", - verificato: "Verificato", - non_verificato: "Non Verificato", - forgetpassword: "Password dimenticata?", - err: { - required: 'è richiesto', - email: 'inserire una email valida', - errore_generico: 'Si prega di compilare correttamente i campi', - atleast: 'dev\'essere lungo almeno di', - complexity: 'deve contenere almeno 1 minuscola, 1 maiuscola e 1 cifra', - notmore: 'non dev\'essere lungo più di', - char: 'caratteri', - terms: 'Devi accettare le condizioni, per continuare.', - duplicate_email: 'l\'Email è già stata registrata', - duplicate_username: 'L\'Username è stato già utilizzato', - sameaspassword: 'Le password devono essere identiche', - }, - tips: { - email: 'inserisci la tua email', - username: 'username lunga almeno 6 caratteri', - password: 'deve contenere 1 minuscola, 1 maiuscola e 1 cifra', - repeatpassword: 'ripetere la password', - - } - }, - login: { - incorso: 'Login in corso', - enter: 'Login', - errato: "Username o password errata. Riprovare", - completato: 'Login effettuato!', - }, - reset: { - title_reset_pwd: "Reimposta la tua Password", - send_reset_pwd: 'Invia Reimposta la password', - incorso: 'Richiesta Nuova Email...', - email_sent: 'Email inviata', - check_email: 'Controlla la tua email, ti arriverà un messaggio con un link per reimpostare la tua password. Questo link, per sicurezza, scadrà dopo 4 ore.', - title_update_pwd: 'Aggiorna la tua password', - update_password: 'Aggiorna Password', - }, - logout: { - uscito: 'Sei Uscito', - }, - errors: { - graphql: { - undefined: 'non definito' - } - }, - todo: { - titleprioritymenu: 'Priorità:', - inserttop: 'Inserisci il Task in cima', - insertbottom: 'Inserisci il Task in basso', - edit: 'Descrizione Task:', - completed: 'Ultimi Completati', - usernotdefined: 'Attenzione, occorre essere Loggati per poter aggiungere un Todo', - start_date: 'Data Inizio', - status: 'Stato', - completed_at: 'Data Completamento', - expiring_at: 'Data Scadenza', - phase: 'Fase', - }, - notification: { - status: 'Stato', - ask: 'Attiva le Notifiche', - waitingconfirm: 'Conferma la richiesta di Notifica', - confirmed: 'Notifiche Attivate!', - denied: 'Notifiche Disabilitate! Attenzione così non vedrai arrivarti i messaggi. Riabilitali per vederli.', - titlegranted: 'Permesso Notifiche Abilitato!', - statusnot: 'Stato Notifiche', - titledenied: 'Permesso Notifiche Disabilitato!', - title_subscribed: 'Sottoscrizione a FreePlanet.app!', - subscribed: 'Ora potrai ricevere i messaggi e le notifiche.', - newVersionAvailable: 'Aggiorna' - }, - connection: 'Connessione', - proj: { - newproj: 'Titolo Progetto', - newsubproj: 'Titolo Sotto-Progetto', - longdescr: 'Descrizione', - hoursplanned: 'Ore Preventivate', - hoursadded: 'Ore Aggiuntive', - hoursworked: 'Ore Lavorate', - begin_development: 'Inizio Sviluppo', - begin_test: 'Inizio Test', - progresstask: 'Progressione', - actualphase: 'Fase Attuale', - hoursweeky_plannedtowork: 'Ore settimanali previste', - endwork_estimate: 'Data fine lavori stimata', - privacyread: 'Chi lo puo vedere:', - privacywrite: 'Chi lo puo modificare:', - totalphases: 'Totale Fasi' - }, - piso: { - affittasi: '', - quando: 'da Maggio a Settembre', - costo: '280€ matrimoniale', - descrizione: 'Affittasi 2 Camere a Málaga - Las Delicias', - cameramatr: 'Camera matrimoniale (per 1 persona)', - matr1: '280€ al mese: da maggio fino a settembre (10,50 mq)', - singola1: '220€ al mese: da maggio fino a settembre (6,50 mq)', - descrpiso: 'Si affitta 1 camera in un modesto appartamento di 90m2, composto da 3 camere totali, 1 bagno con vasca + bide, sala, cucina, terrazzino coperto per ripostiglio e biciclette.
' + - 'L\'appartamento è a 700m dalla spiaggia.
' + - 'A 3,5 km dal centro.
' + - 'E\' al 2° piano, con ascensore.
' + - 'Spazi condivisi: Cucina con lavatrice, forno, forno a microonde, fuochi cottura a gas, sala con TV, Wifi, bagno con bidet.
' + - '
Regole
' + - 'Si cerca una ragazza tranquilla, educata e silenziosa, rispettosa degli altri, nel condominio ci abitano persone locali, e non vogliono che si faccia rumore o feste.
' + - 'L\'appartamento infatti é molto silenzioso, nonostante sia in un palazzo di 9 piani, ci abitano diverse persone anziane.
' + - 'No fumatori, no animali (la proprietaria lo vieta)' + - '
Chi ci abiterà con voi nell\'appartamento?
' + - 'Attualmente ci abitano 2 ragazze.' + - '
Periodo
' + - ' Da maggio fino ai primi di Settembre (poi da decidere insieme)' + - '
Costi
' + - ' - 1 Camera Matrimoniale: 280 € (solo per 1 persona) (10,50 mq)

' + - 'P.S: Per Vegani, sconto extra del 10% per la matrimoniale !' + - '
Caparra
' + - 'La caparra da pagare in anticipo è di 200€
' + - 'che verrá restituita alla fine della stagione, a Settembre.' + - '
Vedere l\'appartamento
' + - 'Contattatemi per venire a vedere l\'appartamento.' + - '
Quanto devo pagare per entrare?
' + - 'La Caparra + 1 mese anticipato:
' + - '- per la matrimoniale: 200€ + 280€ = 480€
' + - '
Uscita anticipata dall\'appartamento
' + - 'Nel caso in cui si debba lasciare l\'appartamento prima della scadenza, è buona norma avvertire con 30 giorni di preavviso, per permetterci di trovare un\'altra persona fidata, ' + - 'altrimenti parte della caparra verrá usata come indennizzo, salvo per motivazioni veramente importanti.' + - '
Spese Aggiuntive:
' + - 'Le spese di luce, acqua, gas e internet Wifi con Fibra ottica, sono da pagare a parte, da dividere tra i coinquilini, (circa 35 € al mese a testa)

' + - 'Opzionale: A disposizione una Bicicietta MTB (costo 20€ al mese per l\'usura).

' + - '' + - 'P.S: I prezzi sono bassi perchè le camere vengono sub-affittate e non vogliamo lucrarci sopra, ma semplicemente mantenere l\'appartamento per ritornarci poi a Settembre
' + - '
Per contattarci
' + - 'Paolo: Whatsapp +34 644.93.27.96
' + - 'Karla: Whatsapp +34 603.24.41.00
' + - 'Inviare anche contatto Facebook', - mat_scrivania: 'Scrivania - matrimoniale', - mat_finestra: 'Finestra - matrimoniale', - mat_armadio: 'Armadio -matrimoniale', - mat_fin2: 'Finestra dalla camera matrimoniale', - mat_singola: 'Camera singola', - sing_scrivania: 'Scrivania singola', - sing_: 'Finestra singola', - sing_armadio: 'Armadio singola', - cucina: 'Cucina', - corridoio: 'Corridoio', - tv: 'Televisore e Wifi', - terrazza: 'Terrazza', - terrazza_vista: 'Vista dalla terrazza', - sala: 'Sala', - divano: 'Divano', - tavolo_sala: 'Tavolo della sala', - bagno: 'Bagno', - vasca: 'Vasca con Doccia', - } - }, - 'es': { - dialog: { - ok: 'Vale', - yes: 'Sí', - no: 'No', - delete: 'Borrar', - cancel: 'Cancelar', - msg: { - titledeleteTask: 'Borrar Tarea', - deleteTask: 'Quieres borrar {mytodo}?' - } - }, - comp: { - Conta: "Conta", - }, - msg: { - hello: 'Buenos Días', - myAppName: 'FreePlanet', - underconstruction: 'App en construcción...', - myDescriz: '', - sottoTitoloApp: 'El primer Verdadero Social', - sottoTitoloApp2: 'Libre, justo y Solidario', - sottoTitoloApp3: 'Donde vive Conciencia y Ayuda comunitaria', - sottoTitoloApp4: 'Gratis y sin publicidad', - }, - homepage: { - descrapp_title1: 'Unidos para evolucionar y experimentar', - descrapp_pag1: 'Redescubra cómo el valor de Compartir y Cooperación puede ayudarnos a encontrar el profundo ' + - 'sentido de la Vida, perdido en esta sociedad consumista, y mostrando esos Principios Naturales Saludables y la Hermandad Humana' + - 'que toda la población antigua conocía bien.', - descrapp_pag2: 'Ha llegado el momento de utilizar las nuevas herramientas tecnológicas en nuestro favor, para liberarnos ' + - 'tan lentamente desde la esclavitud de "Trabaja para generar dinero" y transformando nuestra Capacidad en' + - 'Recursos humanos para poder apoyar y vivir en Armonia con otros.', - freesocial: { - title: 'Free Social', - descr: 'Una comunidad organizada por Categorías, donde puedes unirte a Grupos temáticos, ' + - 'Compartir experiencias y combinar habilidades para organizar y apoyar proyectos innovadores para la gente.

' + - 'Los desarrollos éticos como :
Auto-producción
, Sostenibilidad, ' + - 'la Buena Salud natural y Respeto por el Medio Ambiente y para todos los Seres vivos de este' + - 'Planeta. Cualquiera puede expresar su consentimiento o disidencia participando en Encuestas Interactivas ' + - 'y llevar a cabo juntos los Cambios necesarios para nuestra sociedad.', - }, - freetalent: { - title: 'Free Talent', - descr: 'Comparte tus Talentos y Habilidades, ' + - 'en lugar de dinero, ganarás Tiempo.
' + - '"1 hora" se convierte en una moneda de intercambio, igual para todos.
' + - 'Puedes usar estos "Créditos de tiempo" para satisfacer tus necesidades, buscando en Habilidades disponibles.
' + - 'En Dar y Recibir, crearemos así vínculos de Amistad, Solidaridad, Cooperación y Diversión.

' + - 'Este proyecto apunta a difundir esta realidad, que ya existe desde hace muchos años y se llama "Banco de tiempo". ' + - 'Las secretarías dispersas por todo el mundo, servirán para dar mayor fiabilidad y confianza en el intercambio de talentos entre personas desconocidas. ' + - 'Así crearemos una red de confianza en el vecindario, como ya se practica en numerosos Ecoaldeas y en la Comunidades del mundo.', - }, - freegas: { - title: 'Free G.A.S. (G.C.S.)', - descr: '¿Le gustaría usar una aplicación que le permita comprar productos locales directamente desde el Productor?
' + - 'Con Grupos de Compra Solidarios evitamos intermediarios innecesarios, obteniendo muchos beneficios, incluyendo:
' + - '
  • Superior Quality del producto
  • ' + - '
  • Opiniones de consumidores favorecerá a los productores con intenciones saludables
  • ' + - '
  • Posibilidad de interactuar con el Productor
  • ' + - '
  • Abierto a relaciones entre personas, compartiendo Recetas y Consejos preciosos
  • ' + - '
  • Ahorros de dinero (precios al por mayor)
  • ' + - '
  • Mejorando el Territorio y la Economía Local
  • ' + - '
  • Condiciones Justa para Trabajadores
  • ' + - '
  • Reducido Impacto Ambiental
', - }, - freeliving: { - title: 'Free Co-Living', - descr: 'Para unir más realidad, compartiendo la experiencia de vivir juntos, por un período definido:
' + - '1) Hay quien vive solo y tiene un hogar.
' + - '2) Quién necesita un alojamiento temporal.

' + - 'Hoy en día, más y más personas viven solas y les gustaría seguir viviendo en sus propios hogares.
' + - 'Otras personas necesitan una Habitación, por elección o por necesidad, y a cambio están disponibles en' + - 'contribuir a los gastos para los billetes de casa o tal vez ayuda a la persona mayor para ir de compras, cocinar, limpiar casa o simplemente ofreciéndole compañía.

' + - 'A través de esta herramienta, las personas pueden ponerse en contacto y decidir en qué forma co-habitar. Los comentarios publicados y el detalle de los perfiles de usuario, ' + - 'ayudará a elegir a la persona más en armonía.' - - }, - freecollabora: { - title: '¿Quién puede colaborar?', - descr: 'Todos aquellos que están en línea con Principios éticos y la investigación de Bienestar Global del Planeta
' + - 'Por eso son bienvenidos:' + - '
    ' + - '
  • Asociaciones sin ánimo de lucro, Ecoaldeas, Comunidades
  • ' + - '
  • Grupos que desean promover Proyectos sociales innovadores para Feliz Decrecimiento
  • ' + - '
  • Quién administra un Grupo de Compra Solidario (G.C.S.)
  • ' + - '
  • Productores locales Éticos
  • ' + - '
  • Quién administra un Banco de Tiempo
  • ' + - '
  • Cualquier persona que quiera participar, en la forma que considere más apropiada.
  • ' + - '
', - }, - freesostieni: { - title: '¿Cómo apoyar el proyecto?', - descr: '
    ' + - '
  • Compartiéndolo a todos aquellos que quieran unirse en el crecimiento y desarrollo de una Nueva Era
  • ' + - '
  • Respondiendo a Encuestas populares y dejando Comentarios
  • ' + - '
  • A través de una donación (incluso € 1) para los gastos.
    ' + - '
' + - '
Veo un futuro en el que ya no usarás dinero. Donde las personas se ayudarán unos a otros y no necesiten "poseer" cosas, pero compartirán con otros.
', - }, - multiplatform: { - title: 'Multi-plataforma', - descr: 'Compatible con Google Chrome, Firefox, Safari, iOS, Android y PC. La aplicación se instala fácilmente, sin pasar por el store. ' + - 'para compartirlo, necesita solo el nombre del sitio web: www.freeplanet.app.
' + - 'Después del registro, le pedirá que lo agregue a la lista de aplicaciones y en la pantalla.', - }, - free: { - title: 'Libre, Código Abierto y Sin Publicidad', - descr: 'Esta aplicación no está a la venta, no tiene un propósito comercial, no tiene precio y pertenece a la Gente del Nuevo Mundo.
' + - 'Cualquiera puede usarla y beneficiarse.
A mí la tarea de gestionarlo y protegerlo. ' + - 'Solo se aceptarán donaciones de particulares y asociaciones sin änimo de lucro, en línea con los Principios, que se utilizarán para cubrir los gastos.
' + - 'Gracias a todos por el apoyo. ' - }, - contacts: 'Contactos' - }, - pages: { - home: 'Principal', - SignUp: 'Nueva Cuenta', - SignIn: 'Entrar', - vreg: 'Verifica Reg', - Test: 'Test', - Category: 'Categorías', - Todo: 'Tareas', - personal: 'Personal', - work: 'Trabajo', - shopping: 'Compras', - Admin: 'Administración', - Test1: 'Test1', - Test2: 'Test2', - Projects: 'Projectos', - }, - components: { - authentication: { - login: { - facebook: 'Facebook' - }, - email_verification: { - title: 'Crea una cuenta', - introduce_email: 'ingrese su dirección de correo electrónico', - email: 'Email', - invalid_email: 'Tu correo electrónico no es válido', - verify_email: 'Revisa tu email', - go_login: 'Vuelve al Login', - incorrect_input: 'Entrada correcta.', - link_sent: 'Para confirmar el registro, lea su buzón y haga clic en "Verificar correo electrónico".\n' + 'Si no lo encuentras, busca en la carpeta Spam.' - } - } - }, - fetch: { - errore_generico: 'Error genérico', - errore_server: 'No se puede acceder al Servidor. Inténtalo de nuevo, Gracias', - error_doppiologin: 'Vuelva a iniciar sesión. Acceso abierto por otro dispositivo.', - }, - user: { - notregistered: 'Debe registrarse en el servicio antes de poder almacenar los datos', - loggati: 'Usuario no ha iniciado sesión' - }, - reg: { - incorso: 'Registro en curso...', - richiesto: 'Campo requerido', - email: 'Email', - username: 'Nombre usuario', - username_login: 'Nombre usuario o email', - password: 'contraseña', - repeatPassword: 'Repetir contraseña', - terms: "Acepto los términos y condiciones", - submit: "Registrarse", - title_verif_reg: "Verifica registro", - verificato: "Verificado", - non_verificato: "No Verificado", - forgetpassword: "¿Olvidaste tu contraseña?", - err: { - required: 'se requiere', - email: 'Debe ser una email válida.', - errore_generico: 'Por favor, rellene los campos correctamente', - atleast: 'debe ser al menos largo', - complexity: 'debe contener al menos 1 minúscula, 1 mayúscula y 1 dígito', - notmore: 'no tiene que ser más largo que', - char: 'caracteres', - terms: 'Debes aceptar las condiciones, para continuar..', - duplicate_email: 'La email ya ha sido registrada', - duplicate_username: 'El nombre de usuario ya ha sido utilizado', - sameaspassword: 'Las contraseñas deben ser idénticas', - } - }, - login: { - incorso: 'Login en curso', - enter: 'Entra', - errato: "Nombre de usuario, correo o contraseña incorrectos. inténtelo de nuevo", - completato: 'Login realizado!', - }, - reset: { - title_reset_pwd: "Restablece tu contraseña", - send_reset_pwd: 'Enviar restablecer contraseña', - incorso: 'Solicitar nueva Email...', - email_sent: 'Email enviada', - check_email: 'Revise su correo electrónico, recibirá un mensaje con un enlace para restablecer su contraseña. Este enlace, por razones de seguridad, expirará después de 4 horas.', - title_update_pwd: 'Actualiza tu contraseña', - update_password: 'Actualizar contraseña', - }, - logout: { - uscito: 'Estás desconectado', - }, - errors: { - graphql: { - undefined: 'no definido' - } - }, - todo: { - titleprioritymenu: 'Prioridad:', - inserttop: 'Ingrese una nueva Tarea arriba', - insertbottom: 'Ingrese una nueva Tarea abajo', - edit: 'Descripción Tarea:', - completed: 'Ultimos Completados', - usernotdefined: 'Atención, debes iniciar sesión para agregar una Tarea', - start_date: 'Fecha inicio', - status: 'Estado', - completed_at: 'Fecha de finalización', - expiring_at: 'Fecha de Caducidad', - phase: 'Fase', - }, - notification: { - status: 'Estado', - ask: 'Activar notificaciones', - waitingconfirm: 'Confirmar la solicitud de notificación.', - confirmed: 'Notificaciones activadas!', - denied: 'Notificaciones deshabilitadas! Ten cuidado, así no verás llegar los mensajes. Rehabilítalos para verlos.', - titlegranted: 'Notificaciones permitidas habilitadas!', - statusnot: 'Estado Notificaciones', - titledenied: 'Notificaciones permitidas deshabilitadas!', - title_subscribed: 'Suscripción a FreePlanet.app!', - subscribed: 'Ahora puedes recibir mensajes y notificaciones.', - newVersionAvailable: 'Actualiza' - }, - connection: 'Connection', - proj: { - newproj: 'Título Projecto', - newsubproj: 'Título Sub-Projecto', - longdescr: 'Descripción', - hoursplanned: 'Horas Estimadas', - hoursadded: 'Horas Adicional', - hoursworked: 'Horas Trabajadas', - begin_development: 'Comienzo desarrollo', - begin_test: 'Comienzo Prueba', - progresstask: 'Progresion', - actualphase: 'Fase Actual', - hoursweeky_plannedtowork: 'Horarios semanales programados', - endwork_estimate: 'Fecha estimada de finalización', - privacyread: 'Quien puede verlo:', - privacywrite: 'Quien puede modificarlo:', - totalphases: 'Fases totales' - }, - piso: { - quando: 'desde los primeros dias de mayo 2019 hasta septiembre', - costo: '€ 280 doble', - descrizione: 'Alquiler 1 habitacion en Málaga - Las Delicias', - cameramatr: 'Habitacion doble', - matr1: '280 € al mes: de mayo a septiembre. (10,50 mq)', - singola1: '220 € al mes: de mayo a septiembre. (6,50 mq)', - descrpiso: 'Se alquilas 1 habitacion en un modesto apartamento de 90 m2, que consta de 3 habitaciones en total, 1 baño con bañera + bidet, sala de estar, cocina, terraza cubierta para almacenamiento y bicicletas.
' + - 'El apartamento está a 700m de la playa.
' + - 'A 3.5 km del centro.
' + - 'Está en el segundo piso, con ascensor.
' + - 'Espacios compartidos: cocina con lavadora, horno, microondas, cocina a gas, sala de TV, wifi, baño con bidet.
' + - '
Reglas
' + - 'Estamos buscando a una chica tranquila, educada y silenciosa, respetuosa con los demás, la gente local vive en el condominio y no queremos que se hagan ruidos o fiestas.
' + - 'De hecho, el apartamento es muy tranquilo, aunque está en un edificio de 9 pisos, hay varias personas mayores que viven allí.
' + - 'No fumadores, no mascotas (el propietario lo prohíbe)' + - '
¿Quién vivirá contigo en el piso?
' + - '2 chicas viven actualmente aquí' + - '
Temporada
' + - 'Desde mayo hasta principios de septiembre (luego se decidirá en conjunto)' + - '
Costos
' + - '- 1 Habitación Doble: 280 € (10,50 mq)

' + - 'P.S: Para Veganos, ¡descuento extra del 10% para la Doble!' + - '
Fianza
' + - 'El anticipo a pagar por adelantado es de € 200
' + - 'que se devolverá al final de la temporada, en septiembre.' + - '
Ver el apartamento
' + - 'Ponte en contacto conmigo para venir a ver el apartamento.' + - '
¿Cuánto tengo que pagar para ingresar?
' + - 'La fianza + 1 mes por adelantado:
' + - '- para la doble: 200 € + 280 € = 480 €
' + - '
Salida anticipada del apartamento
' + - 'En caso de que tenga que abandonar el apartamento antes de la fecha límite, es una buena práctica avisar con 30 días de antelación, para permitirnos encontrar a otra persona de confianza,' + - 'De lo contrario, parte del depósito se utilizará como compensación, excepto por razones muy importantes.' + - '
Gastos adicionales:
' + - 'Los gastos de electricidad, agua, gas y internet wifi con fibra óptica, se pagarán por separado , se dividirán entre los compañeros de habitación (aproximadamente 35 € / mes cada uno)

' + - 'Opcional: hay un Bicicietta disponible (20 € al mes por desgaste).

' + - 'P.S: Los precios son bajos porque las habitaciones están sub-alquiladas y no queremos ganar dinero con esto, simplemente mantenemos el apartamento y luego regresamos a septiembre
' + - '
Contrato
' + - 'Para seguridad, se le pedirá que firme un contrato (acuerdo privado), que confirme las condiciones escritas arriba.
' + - 'Se requieren documentos de identificación con foto (documento de identidad o pasaporte). ' + - '
Para contactarnos
' + - 'Paolo: Whatsapp +34 644.93.27.96
' + - 'Karla: Whatsapp +34 603.24.41.00
' + - 'Enviar también contacto de Facebook', - mat_scrivania: 'Escritorio - cama matrimonial', - mat_finestra: 'Ventana - matrimonial', - mat_armadio: 'Armario -matrimoniale', - mat_fin2: 'Ventana - matrimonial', - mat_singola: 'Habitacion individual', - sing_scrivania: 'Escritorio - H. individual', - sing_: 'Ventana - H. individual', - sing_armadio: 'Armario - H. individual', - cucina: 'Cocina', - corridoio: 'Corredor', - tv: 'TV y Wifi fibra óptica', - terrazza: 'terraza', - terrazza_vista: 'Vista desde la terraza', - sala: 'Sala', - divano: 'Sofá', - tavolo_sala: 'Mesa de la habitacion', - bagno: 'cuarto de baño con bidé', - vasca: 'Bañera con ducha', - } - - }, - 'enUs': { - dialog: { - ok: 'Ok', - yes: 'Yes', - no: 'No', - delete: 'Delete', - cancel: 'Cancel', - msg: { - titledeleteTask: 'Delete Task', - deleteTask: 'Delete Task {mytodo}?' - } - }, - comp: { - Conta: "Count", - }, - msg: { - hello: 'Hello!', - myAppName: 'FreePlanet', - underconstruction: 'App in construction...', - myDescriz: '', - sottoTitoloApp: 'The first Real Social', - sottoTitoloApp2: 'Free, Fair and Equitable', - sottoTitoloApp3: 'Where the conscience and community help live', - sottoTitoloApp4: 'Free and without advertising', - }, - homepage: { - descrapp_title1: 'Together to Evolve and Experiment', - descrapp_pag1: 'Rediscover how the value of Sharing and Cooperation, can help us find the deep meaning of' + - 'Life, lost in this consumer society, and showing those Healthy Natural Principles and Human Brotherhood' + - 'that entire ancient populations knew well.', - descrapp_pag2: 'The time has come to use the new Technological tools in our favor, to Free ourselves ' + - 'so slowly from the slavery of the "Work to generate Money" and transforming our Capacity into' + - 'Human Resources to be able to support and live in Harmony with others.', - freesocial: { - title: 'Free Social', - descr: 'A Community organized by Categories, where you can join Thematic Groups, ' + - 'Share Experiences and combine Skills to organize and support Innovative Projects for the People.

' + - 'Ethical developments such as Auto-Production, Sustainability, ' + - 'Good Natural Health and Respect for the Environment and for all Living Beings of this' + - 'Planet. Anyone can express their Consent or Dissent by participating in Interactive Surveys ' + - 'and carry out together the Changes needed for our society.', - }, - freetalent: { - title: 'Free Talent', - descr: 'Share your Talents and Skills, ' + - 'instead of money, you\'ll earn Time.
' + - '"1 hour" becomes a currency of exchange, equal for all.
' + - 'You can use these "Time Credits" to meet your needs, looking in Available Skills.
' + - 'In Giving and Receiving, we will thus create bonds of Friendship, Solidarity, Cooperation and Enjoyment

' + - 'This project aims to spread this reality, which already exists for many years and is called "Time Bank". ' + - 'The secretariats in all over the world, will serve an extra to give greater reliability and trust in the exchange of talents between unknown people. ' + - 'We will thus create a trust network in the neighborhood, as is already practiced in numerous Ecovillages and Community of the world. ', - }, - freegas: { - title: 'Free G.A.S.', - descr: 'Would you like to use an App that allows you to easily Buy Local Products directly from Manufacturer?
' + - 'With Solidarity Purchase Groups (in Italian: "Gruppo di Aacquisto Solidale") we avoid unnecessary intermediaries, obtaining many benefits including:
' + - '
  • Superior Quality of the product
  • ' + - '
  • Consumer Reviews will favor Producers with Healthy Intents
  • ' + - '
  • Possibility to interact with the Producer
  • ' + - '
  • Open to Relations between people, sharing Recipes and precious Tips
  • ' + - '
  • Savings money (wholesale prices)
  • ' + - '
  • Enhancing the Territory and the Local Economy
  • ' + - '
  • Fair Conditions for Workers
  • ' + - '
  • Reduced Environmental Impact
' - }, - freeliving: { - title: 'Free Co-Living', - descr: 'Join more reality, sharing the experience of living together, for a defined period:
' + - '1) Someone Lives alone and has a house.
' + - '2) Who needs a temporary accommodation .

' + - 'Today more and more people live alone and would like to continue living in their own house.
' + - 'Other people instead need a room, by choice or by necessity, and in return they are available to' + - 'contribute to expenses for households or maybe help to go shopping, cooking, cleaning house or simply offering him companionship.
' + - 'Through this tool, people can get in touch and decide in which way co-living. The reviews released and the detail of user profiles, ' + - 'will help in choosing the person more in tune.' - - }, - freecollabora: { - title: 'Who can collaborate?', - descr: 'All those who are in line with Ethical Principles and research of Global Wellness of the Planet
' + - 'Therefore they are welcome:' + - '
    ' + - '
  • Non-profit associations, Ecovillages, Communities
  • ' + - '
  • Groups that want to promote Innovative Social Projects for Happy Degrowth
  • ' + - '
  • Who manages a Solidarity Purchase Group
  • ' + - '
  • Local Ethical Producers
  • ' + - '
  • Who manages a Time Bank
  • ' + - '
  • Anyone who wants to participate, in the form it considers most appropriate.
  • ' + - '
', - }, - freesostieni: { - title: 'How to support the project?', - descr: '
    ' + - '
  • Sharing it to all those who want to join together in the growth and development of a New Era
  • ' + - '
  • Answering to Popular Polls and leaving Feedback
  • ' + - '
  • Through a donation (even $ 1) for expenses.
    ' + - '

' + - 'I see a future where you will no longer use money. Where people will help each other and won\'t need to "own" things, but will share with others.
', - }, - multiplatform: { - title: 'Multi-platform', - descr: 'It is compatible with Google Chrome, Firefox, Safari, iOS, Android and PC. The Application is easily installed, without going through the store. ' + - 'just share the nametranslate of this site www.freeplanet.app.
' + - 'After registration it will ask to be added to the application list and in the screen', - }, - free: { - title: 'Free, Open Source and No Advertising', - descr: 'This App is not for sale, has no commercial purpose, is priceless and belongs to the New World People.' + - '
Anyone can use it and benefit from it.
To me the task of managing it and protecting it. ' + - 'Only donations from private individuals and non-profit associations will be accepted, in line with the Principles, which will be used to cover the expenses.
' + - 'Thanks all for the support. ' - }, - contacts: 'Contacts' - }, - pages: { - home: 'Dashboard', - SignUp: 'SignUp', - SignIn: 'SignIn', - vreg: 'Verify Reg', - Test: 'Test', - Category: 'Category', - Todo: 'Todo', - personal: 'Personal', - work: 'Work', - shopping: 'Shopping', - Admin: 'Admin', - Test1: 'Test1', - Test2: 'Test2', - Projects: 'Projects', - }, - components: { - authentication: { - login: { - facebook: 'Facebook' - }, - email_verification: { - title: 'Begin your registration', - introduce_email: 'Enter your email', - email: 'Email', - invalid_email: 'Your email is invalid', - verify_email: 'Verify your email', - go_login: 'Back to Login', - incorrect_input: 'Incorrect input.', - link_sent: 'To confirm the Registration, read your mailbox and click on "Verify email".\nIf you can not find it check your junk mail or spam.' - } - } - }, - fetch: { - errore_generico: 'Generic Error', - errore_server: 'Unable to access to the Server. Retry. Thank you.', - error_doppiologin: 'Signup again. Another access was made with another device.', - }, - user: { - notregistered: 'You need first to SignUp before storing data', - loggati: 'User not logged in' - }, - reg: { - incorso: 'Registration please wait...', - richiesto: 'Field Required', - email: 'Email', - username_login: 'Username or email', - username: 'Username', - password: 'Password', - repeatPassword: 'Repeat password', - terms: "I agree with the terms and conditions", - submit: "Submit", - title_verif_reg: "Verify Registration", - verificato: "Verified", - non_verificato: "Not Verified", - forgetpassword: "Forget Password?", - err: { - required: 'is required', - email: 'must be a valid email', - errore_generico: 'Please review fields again', - atleast: 'must be at least', - complexity: 'must contains at least 1 lowercase letter, 1 uppercase letter, and 1 digit', - notmore: 'must not be more than', - char: 'characters long', - terms: 'You need to agree with the terms & conditions.', - duplicate_email: 'Email was already registered', - duplicate_username: 'Username is already taken', - sameaspassword: 'Passwords must be identical', - } - }, - login: { - incorso: 'Login...', - enter: 'Login', - errato: "Username or password wrong. Please retry again", - completato: 'Login successfully!', - }, - reset: { - title_reset_pwd: "Reset your Password", - send_reset_pwd: 'Send password request', - incorso: 'Request New Email...', - email_sent: 'Email sent', - check_email: 'Check your email for a message with a link to update your password. This link will expire in 4 hours for security reasons.', - title_update_pwd: 'Update your password', - update_password: 'Update Password', - }, - logout: { - uscito: 'Logout successfully', - }, - errors: { - graphql: { - undefined: 'undefined' - } - }, - todo: { - titleprioritymenu: 'Priority:', - inserttop: 'Insert Task at the top', - insertbottom: 'Insert Task at the bottom', - edit: 'Task Description:', - completed: 'Lasts Completed', - usernotdefined: 'Attention, you need to be Signed In to add a new Task', - start_date: 'Start Date', - status: 'Status', - completed_at: 'Completition Date', - expiring_at: 'Expiring Date', - phase: 'Phase', - }, - notification: { - status: 'Status', - ask: 'Enable Notification', - waitingconfirm: 'Confirm the Request Notification', - confirmed: 'Notifications Enabled!', - denied: 'Notifications Disabled! Attention, you will not see your messages incoming. Reenable it for see it', - titlegranted: 'Notification Permission Granted!', - statusnot: 'status Notification', - titledenied: 'Notification Permission Denied!', - title_subscribed: 'Subscribed to FreePlanet.app!', - subscribed: 'You can now receive Notification and Messages.', - newVersionAvailable: 'Upgrade' - }, - connection: 'Conexión', - proj: { - newproj: 'Project Title', - newsubproj: 'SubProject Title', - longdescr: 'Description', - hoursplanned: 'Estimated Hours', - hoursadded: 'Additional Hours', - hoursworked: 'Worked Hours', - begin_development: 'Start Dev', - begin_test: 'Start Test', - progresstask: 'Progression', - actualphase: 'Actual Phase', - hoursweeky_plannedtowork: 'Scheduled weekly hours', - endwork_estimate: 'Estimated completion date', - privacyread: 'Who can see it:', - privacywrite: 'Who can modify if:', - totalphases: 'Total Phase' - }, - piso: { - quando: 'from May to September', - costo: '€ 280 double', - descrizione: 'Rent 1 Room in Málaga - Las Delicias district', - cameramatr: 'Double room (for 1 person)', - matr1: '€ 280 per month: from May until September (10,50 mq)', - singola1: '€ 220 per month: from May until September (6,50 mq)', - descrpiso: 'We rent 1 room in a modest 90m2 apartment, consisting of 3 total bedrooms, 1 bathroom with bath + bidet, living room, kitchen, covered terrace for storage and bicycles.
' + - 'The apartment is 700m from the beach.
' + - '3.5 km from the center.
' + - 'It is on the 2nd floor, with a lift.
' + - 'Shared spaces: Kitchen with washing machine, oven, microwave oven, gas cooking stove, TV, Wifi, bathroom with bidet.
' + - '
Rules
' + - 'We are looking for a quiet girl, polite and silent person, respectful of others, local people live in the condominium, and do not want noise or parties to be made.
' + - 'In fact, the apartment is very quiet, although it is in a building of 9 floors, there are several elderly people living there.
' + - 'No smoking, no pets (the owner forbids it)' + - '
Who will live inside the apartment?
' + - '2 student girls currently lives there.' + - '
Period
' + - 'From May until the beginning of September (later to be decided together)' + - '
Costs
' + - '- 1 Double Room: 280 € (only for 1 person) (10,5 mq)

' + - 'P.S: For Vegans , 10% extra discount for the double room!' + - '
Deposit
' + - 'The down payment to be paid in advance is € 200
' + - 'which will be returned at the end of the season, in September.' + - '
See the apartment
' + - 'Contact me to come and see the apartment.' + - '
How much do I have to pay to enter?
' + - 'The deposit + 1 month in advance:
' + - '- for the matrimonial: 200 € + 280 € = 480 €
' + - '
Early departure from the apartment
' + - 'In case you have to leave the apartment before the deadline, it is good practice to warn with 30 days notice, to allow us to find another trusted person,' + - 'otherwise part of the deposit will be used as compensation, except for very important reasons.' + - '
Additional Expenses:
' + - 'The expenses of electricity, water, gas and internet Wifi with fiber optics, are to be paid separately , to be divided among the roommates, (about 35 € / month each )

' + - 'Optional: A MTB Bike is available (€ 20 per month).

' + - '' + - 'P.S: The prices are low because the rooms are sub-rented and we don\'t want to make money from them, but simply keep the apartment and then return to September
' + - '
Contract
' + - 'To be safe, you will be asked to sign a contract (private agreement), confirming these conditions written above.
' + - 'Photo identification documents (identity card or passport) are required. ' + - '
To contact us
' + - 'Paolo: Whatsapp +34 644.93.27.96
' + - 'Karla: Whatsapp +34 603.24.41.00
' + - 'Send also Facebook contact', - mat_scrivania: 'Desk - double bed', - mat_finestra: 'Window - double bed', - mat_armadio: 'Wardrobe - double bed', - mat_fin2: 'Window from the bedroom', - mat_singola: 'Single Room', - sing_scrivania: 'Desk single room', - sing_: 'Window single room', - sing_armadio: 'Wardrobe single room', - cucina: 'Kitchen', - corridoio: 'Corridor', - tv: 'TV and Wifi', - terrazza: 'Terrace', - terrazza_vista: 'View from the terrace', - sala: 'Room', - divano: 'Sofá', - tavolo_sala: 'Room table', - bagno: 'Bathroom', - vasca: 'Bathtub with shower', - } - }, -}; - -export default messages; diff --git a/src/store/Modules/GlobalStore.ts b/src/store/Modules/GlobalStore.ts index 30f5b23..ff6d237 100644 --- a/src/store/Modules/GlobalStore.ts +++ b/src/store/Modules/GlobalStore.ts @@ -127,17 +127,29 @@ namespace Getters { }) - const arrlistaproj = Projects.getters.listaprojects() - const listaprojects = [] + const arrlistaprojtutti = Projects.getters.listaprojects(false) + const arrlistaprojmiei = Projects.getters.listaprojects(true) + const listaprojectstutti = [] + const listaprojectsmiei = [] - for (const elem of arrlistaproj) { + for (const elem of arrlistaprojtutti) { const item = { materialIcon: 'next_week', name: elem.nametranslate, text: elem.description, - route: '/projects/' + elem.idelem + route: tools.getUrlByTipoProj(false) + elem.idelem } - listaprojects.push(item) + listaprojectstutti.push(item) + } + + for (const elem of arrlistaprojmiei) { + const item = { + materialIcon: 'next_week', + name: elem.nametranslate, + text: elem.description, + route: tools.getUrlByTipoProj(true) + elem.idelem + } + listaprojectsmiei.push(item) } const arrroutes: IListRoutes[] = [] @@ -151,8 +163,14 @@ namespace Getters { level_child: 0.5 }) - addRoute(arrroutes,{ route: '/projects/' + process.env.PROJECT_ID_MAIN, faIcon: 'fa fa-list-alt', materialIcon: 'next_week', name: 'pages.Projects', - routes2: listaprojects, + addRoute(arrroutes,{ route: tools.getUrlByTipoProj(false) + process.env.PROJECT_ID_MAIN, faIcon: 'fa fa-list-alt', materialIcon: 'next_week', name: 'pages.Projects', + routes2: listaprojectstutti, + level_parent: 0, + level_child: 0.5 + }) + + addRoute(arrroutes,{ route: tools.getUrlByTipoProj(true) + process.env.PROJECT_ID_MAIN, faIcon: 'fa fa-list-alt', materialIcon: 'next_week', name: 'pages.MyProjects', + routes2: listaprojectsmiei, level_parent: 0, level_child: 0.5 }) diff --git a/src/store/Modules/Projects.ts b/src/store/Modules/Projects.ts index 328d958..5833a6f 100644 --- a/src/store/Modules/Projects.ts +++ b/src/store/Modules/Projects.ts @@ -51,6 +51,14 @@ function updateDataCalculated(projout, projin) { }) } +function getproj(projects, idproj, miei: boolean) { + if (miei) { + return tools.mapSort(projects.filter((proj) => (proj.id_parent === idproj) && proj.userId === UserStore.state.userId)) + } else { + return tools.mapSort(projects.filter((proj) => (proj.id_parent === idproj) && proj.userId !== UserStore.state.userId )) + } +} + namespace Getters { const getRecordEmpty = b.read((state: IProjectsState) => (): IProject => { // const tomorrow = tools.getDateNow() @@ -92,19 +100,20 @@ namespace Getters { return obj }, 'getRecordEmpty') - const items_dacompletare = b.read((state: IProjectsState) => (id_parent: string): IProject[] => { + const projs_dacompletare = b.read((state: IProjectsState) => (id_parent: string, miei: boolean): IProject[] => { + // console.log('projs_dacompletare', miei) if (state.projects) { // console.log('state.projects', state.projects) - return tools.mapSort(state.projects.filter((proj) => proj.id_parent === id_parent)) + return getproj(state.projects, id_parent, miei) } else { return [] } - }, 'items_dacompletare') + }, 'projs_dacompletare') - const listaprojects = b.read((state: IProjectsState) => (): IMenuList[] => { + const listaprojects = b.read((state: IProjectsState) => (miei: boolean): IMenuList[] => { if (state.projects) { // console.log('state.projects', state.projects) - const listaproj = tools.mapSort(state.projects.filter((proj) => proj.id_parent === process.env.PROJECT_ID_MAIN)) + const listaproj = getproj(state.projects, process.env.PROJECT_ID_MAIN, miei) const myarr: IMenuList[] = [] for (const proj of listaproj) { myarr.push({ nametranslate: '', description: proj.descr, idelem: proj._id }) @@ -137,20 +146,34 @@ namespace Getters { }, 'getRecordById') const getifCanISeeProj = b.read((state: IProjectsState) => (proj: IProject): boolean => { - if (proj === null) + if (proj === undefined) return false - if (UserStore.state.userId === proj.userId) // If it's the owner - return true + if (!!UserStore.state) { - return (proj.privacyread === Privacy.all) || - (proj.privacyread === Privacy.friends) && (UserStore.getters.IsMyFriend(proj.userId)) - || ((proj.privacyread === Privacy.mygroup) && (UserStore.getters.IsMyGroup(proj.userId))) + if (UserStore.state.userId === proj.userId) // If it's the owner + return true + + return (proj.privacyread === Privacy.all) || + (proj.privacyread === Privacy.friends) && (UserStore.getters.IsMyFriend(proj.userId)) + || ((proj.privacyread === Privacy.mygroup) && (UserStore.getters.IsMyGroup(proj.userId))) + } else { + return false + } }, 'getifCanISeeProj') const CanIModifyPanelPrivacy = b.read((state: IProjectsState) => (proj: IProject): boolean => { - return ((UserStore.state.userId === proj.userId) || (proj.privacywrite === Privacy.all)) // If it's the owner + if (proj === undefined) + return false + + if (!!UserStore) { + if (!!UserStore.state) + return ((UserStore.state.userId === proj.userId) || (proj.privacywrite === Privacy.all)) // If it's the owner + else + return false + } + return false }, 'CanIModifyPanelPrivacy') export const getters = { @@ -163,8 +186,8 @@ namespace Getters { get getRecordEmpty() { return getRecordEmpty() }, - get items_dacompletare() { - return items_dacompletare() + get projs_dacompletare() { + return projs_dacompletare() }, get listaprojects() { return listaprojects() @@ -348,7 +371,7 @@ namespace Actions { async function swapElems(context, itemdragend: IDrag) { console.log('PROJECT swapElems', itemdragend, stateglob.projects) - const myarr = Getters.getters.items_dacompletare(itemdragend.id_proj) + const myarr = Getters.getters.projs_dacompletare(itemdragend.id_proj, itemdragend.mieiproj) tools.swapGeneralElem(nametable, myarr, itemdragend, listFieldsToChange) diff --git a/src/store/Modules/Todos.ts b/src/store/Modules/Todos.ts index 1c9b542..5f8ff37 100644 --- a/src/store/Modules/Todos.ts +++ b/src/store/Modules/Todos.ts @@ -88,6 +88,7 @@ namespace Getters { }, 'getRecordEmpty') const items_dacompletare = b.read((state: ITodosState) => (cat: string): ITodo[] => { const indcat = getindexbycategory(cat) + // console.log('items_dacompletare', 'indcat', indcat, state.todos[indcat]) if (state.todos[indcat]) { return state.todos[indcat].filter((todo) => todo.statustodo !== tools.Status.COMPLETED) } else { diff --git a/src/store/Modules/tools.ts b/src/store/Modules/tools.ts index 1e7c9a4..af40024 100644 --- a/src/store/Modules/tools.ts +++ b/src/store/Modules/tools.ts @@ -963,29 +963,28 @@ export const tools = { , getIndexById(myarr, id) { + if (myarr === undefined) + return -1 return myarr.indexOf(tools.getElemById(myarr, id)) } , getElemById(myarr, id) { + if (myarr === undefined) + return null // console.log('getElemById', myarr, id) return myarr.find((elem) => elem._id === id) } , getElemPrevById(myarr, id) { + if (myarr === undefined) + return null return myarr.find((elem) => elem.id_prev === id) } , - getLastFirstElemPriority(myarr, priority - : - number, atfirst - : - boolean, escludiId - : - string - ) { + getLastFirstElemPriority(myarr, priority: number, atfirst: boolean, escludiId: string) { if (myarr === null) { return -1 } @@ -1052,9 +1051,13 @@ export const tools = { } , - getLastListNotCompleted(nametable, cat) { - const module = tools.getModulesByTable(nametable) - const arr = module.getters.items_dacompletare(cat) + getLastListNotCompleted(nametable, cat, isproj = false, miei = false) { + // const module = tools.getModulesByTable(nametable) + let arr = [] + if (nametable === 'projects') + arr = Projects.getters.projs_dacompletare(cat, miei) + else if (nametable === 'todos') + arr = Todos.getters.items_dacompletare(cat) return (arr.length > 0) ? arr[arr.length - 1] : null } @@ -1272,9 +1275,10 @@ export const tools = { if (sortedList.length < linkedList.length) { console.log('!!!!! NON CI SONO TUTTI !!!!!', sortedList.length, linkedList.length) // Forget something not in a List ! - for (const itemsorted of sortedList) { - if (linkedList.filter((item) => item._id === itemsorted._id)) { - + for (const itemlinked of linkedList) { + const elemtrov = sortedList.find((item) => item._id === itemlinked._id) + if (elemtrov === undefined) { + sortedList.push(itemlinked) } } } @@ -1308,7 +1312,7 @@ export const tools = { , getstrDate(mytimestamp) { - console.log('getstrDate', mytimestamp) + // console.log('getstrDate', mytimestamp) if (!!mytimestamp) return date.formatDate(mytimestamp, 'DD/MM/YYYY') else @@ -1369,6 +1373,13 @@ export const tools = { isMainProject(idproj) { return idproj === process.env.PROJECT_ID_MAIN + }, + + getUrlByTipoProj(miei) { + if (miei) + return '/myprojects/' + else + return '/projects/' } } diff --git a/src/views/projects/proj-list/proj-list.ts b/src/views/projects/proj-list/proj-list.ts index ec6816e..a05bd2f 100644 --- a/src/views/projects/proj-list/proj-list.ts +++ b/src/views/projects/proj-list/proj-list.ts @@ -16,6 +16,7 @@ import { Getter } from 'vuex-class' import { date, Screen } from 'quasar' import { CProgress } from '../../../components/CProgress' import { CDate } from '../../../components/CDate' +import { RouteNames } from '@src/router/route-names' const namespace: string = 'Projects' @@ -60,14 +61,19 @@ export default class ProjList extends Vue { ctodo: CTodo } - @Getter('items_dacompletare', { namespace }) - public items_dacompletare: (state: IProjectsState, id_parent: string) => IProject[] + @Getter('projs_dacompletare', { namespace }) + public projs_dacompletare: (state: IProjectsState, id_parent: string, miei: boolean) => IProject[] - @Watch('items_dacompletare') + @Watch('projs_dacompletare') public changeitems() { this.updateindexProj() } + @Watch('$route.name') + public changename() { + console.log('tools.getUrlByTipoProj(this.areMyProjects)', tools.getUrlByTipoProj(this.areMyProjects)) + } + @Watch('$route.params.idProj') public changeparent() { this.idProjAtt = this.$route.params.idProj @@ -81,13 +87,20 @@ export default class ProjList extends Vue { } private updateindexProj() { - console.log('idProjAtt', this.idProjAtt) + // console.log('idProjAtt', this.idProjAtt) this.itemproj = Projects.getters.getRecordById(this.idProjAtt) - this.itemprojparent = Projects.getters.getRecordById(this.itemproj.id_parent) - console.log('this.itemproj', this.itemproj) + if (!!this.itemproj) { + this.itemprojparent = Projects.getters.getRecordById(this.itemproj.id_parent) + console.log('this.itemproj.descr', this.itemproj.descr) + } // console.log('idproj', this.idProjAtt, 'params' , this.$route.params) } + get areMyProjects() { + console.log('this.$route.name', this.$route.name) + return this.$route.name === RouteNames.myprojects + } + get readonly_PanelPrivacy() { return !this.CanIModifyPanelPrivacy } @@ -117,7 +130,7 @@ export default class ProjList extends Vue { } get getrouteup() { - return '/projects/' + this.itemproj.id_parent + return tools.getUrlByTipoProj(this.areMyProjects) + this.itemproj.id_parent } get tools() { @@ -245,6 +258,7 @@ export default class ProjList extends Vue { } public async onEndproj(itemdragend) { + console.log('onEndproj...') await Projects.actions.swapElems(itemdragend) } @@ -256,15 +270,19 @@ export default class ProjList extends Vue { $service.eventBus.$on('dragend', (args) => { - const itemdragend: IDrag = { - field: '', - id_proj: this.idProjAtt, - newIndex: this.getElementIndex(args.el), - oldIndex: this.getElementOldIndex(args.el) - } + // console.log('args proj-list', args) + if (args.name === this.dragname) { + const itemdragend: IDrag = { + field: '', + id_proj: this.idProjAtt, + newIndex: this.getElementIndex(args.el), + oldIndex: this.getElementOldIndex(args.el), + mieiproj: this.areMyProjects + } - // console.log('args', args, itemdragend) - this.onEndproj(itemdragend) + // console.log('args', args, itemdragend) + this.onEndproj(itemdragend) + } }) $service.eventBus.$on('drag', (el, source) => { @@ -279,7 +297,8 @@ export default class ProjList extends Vue { public mounted() { - console.log('Screen.width', Screen.width) + // console.log('Screen.width', Screen.width) + // console.log('this.$route', this.$route) if (Screen.width < 400) { this.splitterModel = 100 @@ -403,7 +422,7 @@ export default class ProjList extends Vue { } public deselectAllRowstodo(item: ITodo, check, onlythis: boolean = false) { - console.log('PROJ-LIST deselectAllRowstodo : ', item) + // console.log('PROJ-LIST deselectAllRowstodo : ', item) return false @@ -433,7 +452,7 @@ export default class ProjList extends Vue { } public deselectAllRowsproj(item: IProject, check, onlythis: boolean = false) { - console.log('deselectAllRowsproj: ', item) + // console.log('deselectAllRowsproj: ', item) for (const i in this.$refs.singleproject) { diff --git a/src/views/projects/proj-list/proj-list.vue b/src/views/projects/proj-list/proj-list.vue index 67941cc..69c4b6c 100644 --- a/src/views/projects/proj-list/proj-list.vue +++ b/src/views/projects/proj-list/proj-list.vue @@ -1,7 +1,6 @@ -