162 Commits

Author SHA1 Message Date
dec89c2098 installato adminlte su client 2024-05-23 14:25:11 +02:00
root
4120662b12 Aggiornato API per restituzione records tag e categorie per app in appinventor 2024-05-21 16:21:05 +00:00
6163d8a5bd sistemato problema della formattazione della data valuta nella importazione di un ec di ING 2024-05-21 08:58:33 +02:00
ec5b6c8b8b test2 2023-12-15 15:58:25 +01:00
cffdcce067 test 2023-12-15 15:56:19 +01:00
a219553f4b Test workflow 2023-12-15 15:26:25 +01:00
5a3780ca85 Aggiornato file workflow
rivisto la parte php
2023-12-15 14:18:43 +00:00
1736f17d83 rivisto wflow 2023-12-15 14:43:56 +01:00
d53e6ac581 modificato workflow 2023-12-15 14:42:56 +01:00
085611cde1 Creato workflow 2023-12-15 14:41:56 +01:00
eafa0f270f aggiunto restrizioni alle routes admin per i parametri passati con l'url 2023-12-01 11:22:41 +01:00
62308e8daa modifiche irrilevanti 2023-11-09 10:43:35 +01:00
eef847e302 issue #6 creato modifica per progetto 2023-10-27 13:35:55 +02:00
cd5b57e909 lavori in anagrafica per contatti google
(insuccesso)
2023-10-26 16:13:55 +02:00
f9a28a3d0e Modificato gitignore 2023-10-25 09:08:41 +02:00
1e1b319a6f modifiche al Readme 2023-10-24 16:44:43 +02:00
4a2a17e32c modifiche al readme 2023-10-24 16:28:19 +02:00
e4b3ab0a3c attivato pagina dei permessi e rivisto menu 2023-10-24 16:11:46 +02:00
a819ef01ff Creato evento con data e ora (start-end) per google-calendar 2023-10-24 15:23:49 +02:00
908d8f9328 lavorato su calendario 2023-10-23 16:51:43 +02:00
fbb0276055 Aggiunto possibilità di salvare files per un progetto 2023-10-20 09:13:59 +02:00
1ed12d7f31 Aggiunto funzionalità di visualizzazione task non scaduti 2023-10-20 08:28:15 +02:00
98b58b5bf7 Sistemazione query per liste movimenti 2023-10-19 15:27:47 +02:00
0e777445e9 Creato gestione documentale generica 2023-10-19 14:19:33 +02:00
cae02dfebf Creazione di una nuova cartella. 2023-10-19 11:43:14 +02:00
0ba070ba54 creato seeder iniziale per Documenti e modificato migration File di Documentis 2023-10-19 10:22:36 +02:00
d25fe1cef1 inizio gestione Folders 2023-10-18 14:31:11 +02:00
cea9baa838 Aggiunto documenti generici 2023-10-18 13:39:31 +02:00
b64d954309 Aggiunto possibilità di cancellare documenti (contratti) 2023-10-17 09:44:22 +02:00
11f819cfbc Attivato menu consumi Gas 2023-10-16 18:00:49 +02:00
b8b39f45e6 Creato parte documentale per Contratti 2023-10-13 18:30:50 +02:00
e0c8491e45 Generalizzato i documenti issue #5 2023-10-13 14:33:00 +02:00
7443d52215 Test della funzionalità delle API di HomeAssistant 2023-10-12 12:10:07 +02:00
bf8bf40a1d Aggiunta collegamento a APIRest di HomeAssistant (e qualche test) 2023-10-10 12:28:53 +02:00
cbbaf0bf3e Verifica impostazioni 2023-10-06 12:24:11 +02:00
0fc166ebeb Sistemato problema upload Contratti 2023-10-06 11:23:55 +02:00
1a55a1d1e8 effettuato alcune modifiche per capire cosa non va nell'upload dei contatti... da rivedere domani 2023-10-05 21:11:15 +02:00
c6f82a9c62 effettuato alcune modifiche per capire cosa non va nell'upload dei contatti... da rivedere domani 2023-10-05 21:11:08 +02:00
03900b5b61 Rivisto impostazione layout dei tasks anche in dashboard 2023-10-05 16:22:21 +02:00
c0ce480235 Completamento della conversione del template 2023-10-05 14:24:34 +02:00
2fe5027f8e modifiche al template di auto e contratti 2023-10-04 21:28:54 +02:00
f32e57d3bc aggiunta menu import EC e fontawesome 2023-10-04 20:33:04 +02:00
9f74c49b76 Sistemazione menu e js per i grafici. 2023-10-04 16:12:58 +02:00
48ec4d62f3 Effettuato modifiche su menu e view tags, resoconto e budget 2023-10-04 15:50:55 +02:00
0a166d75c9 Sistemazione Javascript e attivazione select2 2023-10-04 14:38:17 +02:00
72523344bc modifiche al javascript movimenti 2023-10-04 14:14:54 +02:00
0121ed8381 modifiche al javascript movimenti 2023-10-04 13:54:56 +02:00
67775716b8 aggiornato lista dei movimenti e inserito come test il fullcalendar 2023-10-04 13:41:10 +02:00
21cc195ce4 Creato traduzione per il calendario in Italiano per giorni e mesi 2023-10-04 10:43:16 +02:00
0440bba9f4 Merge branch 'changeTemplate' of https://git.lavorain.cloud/fbarachino/bubofamily into changeTemplate 2023-10-04 09:09:22 +02:00
4f5b745031 Aggiunto icona calendario negli avvisi e rivisto layout dello stesso. 2023-10-04 09:09:14 +02:00
8a579a27fd Aggiornato impostazioni e creato layouts bubofamily per inserimento javascript da caricare. 2023-10-02 10:15:01 +02:00
a965983b57 Aggiornato DataTables 2023-10-01 17:52:39 +02:00
b008787c61 Cambio template sulla dashboard 2023-10-01 16:53:28 +02:00
ac1ac587f9 cambiamento template con AdminLTE 2023-09-30 10:34:25 +02:00
e22868bef5 Modifiche effettuate per gestione documentale 2023-09-30 09:20:40 +02:00
40eb51f836 modificato il Readme.md 2023-09-12 15:28:34 +02:00
44c27a9520 issue #5: Creato migration per generalizzazione documenti e funzioni sul model GenDoc 2023-09-12 15:15:24 +02:00
b852a8e753 test su mail 2023-09-01 11:14:28 +02:00
8d3d56a219 dato alle api il permission:api middleware 2023-09-01 08:54:58 +02:00
b6a5c99fb6 Modifiche effettuate su api routes e Modello Contratti. 2023-08-29 08:16:22 +02:00
d7fe1fcb81 modifiche varie 2023-08-02 19:12:37 +02:00
8ff62254bf corretto resoconto movimenti per le categorie solo per il periodo dell'anno in corso 2023-07-28 11:25:16 +02:00
fc675ce07b Issue #9 - corretto passaggio parametri 2023-07-28 11:09:52 +02:00
9cf1f9a388 Merge branch 'devel' 2023-07-28 10:29:56 +02:00
109ead8daa sistemazione della vista delle attività e configurato la default language dell'app in IT 2023-07-28 10:29:11 +02:00
60e9f77d2c modifica stringa riconoscimento issue per modifiche 2023-07-28 08:50:47 +02:00
2b8a9c0d4d #5 alcune modifiche commentate per preparazione a generalizzazione documenti. 2023-07-28 08:46:17 +02:00
a174a31b0d #5 messo nei commenti le proposte di cambiamento da effettuare per la generalizzazione dei documenti 2023-07-27 16:45:10 +02:00
717e1be95d Creazione lista contratti 2023-07-27 15:31:18 +02:00
0668026eb7 reso draggabile la parte modale di inserimento/modifica movimento 2023-07-27 11:49:30 +02:00
bd6d7046db aggiunto campo per filename in contratti 2023-07-27 11:39:28 +02:00
d3629f1e75 rivista migrazione per tabella contratti 2023-07-27 11:07:04 +02:00
a827342a30 aggiunta funzionalità draggable su div in dashboard, creato nuovo MVC per "gestione contratti" 2023-07-27 10:54:55 +02:00
8381aa068d Merge branch 'devel' 2023-07-19 11:14:30 +02:00
58e9344180 Creato pagine Avvisi e sistemato dashboard (creato permesso "Avvisi") 2023-07-19 11:09:25 +02:00
b5eb6c383b Creato Avvisi e terminato task (manca editing) 2023-07-18 17:00:08 +02:00
48606856c4 struttura base task 2023-07-17 15:40:24 +02:00
9f0c93c921 correzioni varie 2023-07-17 13:31:46 +02:00
8dff2e0853 Corretto problemi precedente pubblicazione 2023-07-17 13:20:06 +02:00
0f382d4182 Modificato view su dashboard inserendo i tasks 2023-07-17 12:13:28 +02:00
0050c3547e Modificato route per errore battitura 2023-07-14 16:44:10 +02:00
350c5737b7 Task Controllers 2023-07-14 16:19:40 +02:00
fabf85ffb5 Creazione Tasks 2023-07-14 16:01:14 +02:00
4f9378899b Problema risolto su editing categorie 2023-07-07 15:00:47 +02:00
031e4957b4 Inizializzazione dei dropdown di categoria e tags 2023-07-07 13:36:33 +02:00
957cc88a3f commento su seeder permessi 2023-07-07 10:15:01 +02:00
6a26529bbf sistemazione dei seeder sia per le categorie di default che per i permessi 2023-07-07 10:12:47 +02:00
ff39c80f27 pulizia 2023-07-07 09:51:46 +02:00
e4f3834488 #4 Sistemato anche view per lista categorie 2023-07-07 09:21:39 +02:00
beec4b8dce #4 suddivisione categorie per entrata/uscita rivisto inserimento e modifica. 2023-07-07 09:15:26 +02:00
a773b825d0 Merge branch 'devel' 2023-07-06 19:18:51 +02:00
b3df3f0b47 Risolto Javascript per categoria entrata/uscita nei nuovi movimenti 2023-07-06 18:32:31 +02:00
8d0576099c creazione della separazzione delle categorie 2023-07-06 17:39:23 +02:00
69b93bc3f6 Merge branch 'devel' 2023-07-06 15:34:34 +02:00
75761353ca Modifica file Readme 2023-07-06 15:33:01 +02:00
ea11579670 Aggiustato i return back dalle operazioni ai movimenti 2023-07-06 15:19:47 +02:00
1e2b85910c Sistemato il return back dalla cancellazione di un movimento. 2023-07-06 15:18:15 +02:00
c020fe86f0 Aggiornamento redirect dell'update dei movimenti 2023-07-06 14:42:13 +02:00
03449a5c27 Merge del branch devel 2023-07-06 13:46:14 +02:00
1318b50fcc Assegnazione ruoli ad utente 2023-07-06 13:44:41 +02:00
d3f0695866 Merging 'devel' branch 2023-07-06 12:16:16 +02:00
4850b5bbef Creato scheda PDF progetti 2023-07-06 12:06:03 +02:00
0ee7d4d363 Problema su colonna auto 2023-06-20 16:30:04 +02:00
83ccd7ec19 Merge branch 'master' of https://bitbucket.org/FlavioBarachino/bubofamily 2023-06-20 16:17:07 +02:00
920584d779 sistemato le date nelle view delle tabelle DataTable 2023-06-20 16:12:55 +02:00
54b2dda9ea sistemato ordinamento date (dataTable) nei js 2023-06-20 15:55:20 +02:00
f90974ba09 problema che mi sono tagliato fuori l'utente amministrativo 2023-06-20 11:14:15 +02:00
36a863eafd Merge branch 'master' of https://bitbucket.org/FlavioBarachino/bubofamily 2023-06-20 11:06:25 +02:00
7f80290ff8 Aggiunto OnlySeeder 2023-06-20 11:06:08 +02:00
3dc54235c5 ripristinato conflitti 2023-06-20 09:28:23 +02:00
8f5ccad560 sistemazione 2023-06-20 09:22:06 +02:00
7a85f2280a Merge pull request 'Aggiunto sezione della gestione dei permessi diretti assegnabili all'utente' (#1) from adim/adimgest:master into master
Reviewed-on: #1
2023-06-20 06:48:49 +00:00
d5f4d5c827 Creato link al menu per la gestione dei permessi 2023-06-20 08:29:13 +02:00
b82ec0adc0 Aggiunto assegnazione permessi diretti ad utente 2023-06-20 08:27:20 +02:00
fcbe1e1a4e cambiato titolo dell'applicazione 2023-06-20 08:18:20 +02:00
66157c3477 creazione tabelle models e controller per Rivista Gruppi e Associazioni, generato sistema di assegnazione permessi diretti ad un utente 2023-06-20 08:08:47 +02:00
adim
792d1a0580 Aggiornare 'README.md' 2023-06-18 10:07:58 +00:00
adim
84c0eaa48b Aggiornato Readme
Aggiornato readme

Signed-off-by: adim <alert@lavorain.cloud>
2023-06-18 10:07:19 +00:00
30cf03bd7d aggiunto disabilitazione modifica e cancellazione progetto in caso in cui esso sia in stato di chiuso 2023-06-16 14:35:51 +02:00
dd62afe67c composer.lock modificato 2023-06-16 12:23:22 +02:00
f22943403a rivisto template email di test 2023-06-12 15:01:18 +02:00
2ed8ede5f0 creato meiler di test 2023-06-12 13:11:56 +02:00
20f050044b risolto divergenze composer.json e composer.lock 2023-06-12 10:48:25 +02:00
dab7869fdf risolto divergenze composer.json e composer.lock 2023-06-12 10:45:25 +02:00
19ea72be6c risolto problema js altrocontatto 2023-06-12 09:55:55 +02:00
7183e9d96c sistemato problema su javascript rigaProgetti.js 2023-06-12 09:23:30 +02:00
d3729c6fe3 sistemato data anche in lista progetti 2023-06-12 09:11:58 +02:00
a8a25063ac issue #8: sistemato quanto riportato nella issue 2023-06-12 08:26:35 +02:00
9952c06c71 sistemazione di alcuni file js per data Tables 2023-06-11 17:30:33 +02:00
c78fa832a2 modifiche al model user 2023-06-11 17:00:36 +02:00
3ebca7bb4a rebased with other repository 2023-06-10 13:38:31 +02:00
91608dcb7d sistemato ordinamento date e migration per anagrafica 2023-06-10 13:25:15 +02:00
235508dd15 alcuni aggiustamenti in base alle roles e permessi 2023-06-06 16:02:19 +02:00
b05d49b72b tolto visione dei widget nella pagina riepilogo ai guest 2023-06-06 08:56:30 +02:00
d554066dd5 creato registrazione nuovo utente 2023-06-06 08:35:19 +02:00
f172afdfc8 aggiunto middleware e controllo dei permessi nelle routes 2023-06-05 16:57:07 +02:00
2af799240c Inserito le role e utenti demo nel seeder 2023-06-05 16:47:43 +02:00
d8a8e363d2 Verifica dei metodi della classe User 2023-06-03 17:03:08 +02:00
a9136cb13f Merge branch 'master' of https://bitbucket.org/FlavioBarachino/bubofamily 2023-06-02 20:55:57 +02:00
ce5527ecde installato laravel-permission e rimosso junge/laravel-acl 2023-06-01 16:57:39 +02:00
8fc2b6ae83 aggiunto i ruoli agli utenti creati dai seeders 2023-06-01 12:16:59 +02:00
401a061aeb Aggiornato README.md 2023-06-01 12:02:12 +02:00
33f6d84f4f Aggiornato README.md 2023-06-01 11:59:50 +02:00
ca4a7a9fc3 Aggiornato readme 2023-06-01 09:58:27 +00:00
9f7bab7688 Aggiunto seeder di default 2023-06-01 11:31:27 +02:00
d616b5c2e9 Aggiunto pagina di benvenuto 2023-06-01 10:55:39 +02:00
2f1678684e Merge branch 'master' of https://bitbucket.org/FlavioBarachino/bubofamily 2023-05-30 20:57:20 +02:00
2fdb5ec721 Merge branch 'master' of https://bitbucket.org/FlavioBarachino/bubofamily 2023-05-26 15:58:55 +02:00
c865d6f205 Merge branch 'master' of https://bitbucket.org/FlavioBarachino/bubofamily 2023-05-26 15:53:55 +02:00
d036e2f0d9 Merge branch 'master' of https://bitbucket.org/FlavioBarachino/bubofamily 2023-05-26 15:47:12 +02:00
a03157062f Merge branch 'master' of https://bitbucket.org/FlavioBarachino/bubofamily 2023-05-26 15:39:23 +02:00
11b62f5a44 Merge branch 'master' of https://bitbucket.org/FlavioBarachino/bubofamily 2023-05-26 13:05:58 +02:00
27f74bd726 Merge branch 'master' of https://bitbucket.org/FlavioBarachino/bubofamily 2023-05-26 12:28:01 +02:00
4ca2bc11d2 ISUUE 5 resolved Merge branch 'master' of https://bitbucket.org/FlavioBarachino/bubofamily 2023-05-26 12:17:32 +02:00
96f95220a1 Issue:5 Bugfix Casting string
Merge branch 'master' of https://bitbucket.org/FlavioBarachino/bubofamily
2023-05-26 11:01:32 +02:00
4f44841e8a Merge branch 'master' of https://bitbucket.org/FlavioBarachino/bubofamily 2023-05-26 10:33:13 +02:00
9a14f95ad7 Merge branch 'devel' con modifiche effettuate 2023-05-24 21:44:57 +02:00
b7bf393f3b Merge branch 'master' of https://bitbucket.org/FlavioBarachino/bubofamily
Merged
2023-05-22 11:44:00 +02:00
1504919945 Merge branch 'master' of https://bitbucket.org/FlavioBarachino/bubofamily 2023-04-14 12:42:19 +00:00
bebac2cd6d Merge branch 'master' of https://bitbucket.org/FlavioBarachino/bubofamily 2023-04-14 11:33:52 +00:00
2021efb8b8 ripristino 2023-04-14 11:33:05 +00:00
2801 changed files with 786448 additions and 8129 deletions

52
.env_new Normal file
View File

@@ -0,0 +1,52 @@
APP_NAME=BuBoFamily
APP_ENV=local
APP_KEY=base64:YQ7wQmtsVJrAkX5v40lzXuJX03OA20NTQHcnDHsFOp0=
APP_DEBUG=true
APP_URL=http://bubofamily.mydomain.loc
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=bubofamily_db
DB_USERNAME=flavio
DB_PASSWORD=Portalnet3
BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DRIVER=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

View File

@@ -0,0 +1,33 @@
name: Laravel
on:
push:
branches: [ "devel" ]
pull_request:
branches: [ "devel" ]
jobs:
laravel-tests:
runs-on: linux_amd64
steps:
- uses: shivammathur/setup-php@15c43e89cdef867065b0213be354c2841860869e
with:
php-version: '8.1'
- uses: actions/checkout@v3
- name: Copy .env
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
- name: Install Dependencies
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
- name: Generate key
run: php artisan key:generate
- name: styles and js creation
run: npm install && npm prod
- name: Directory Permissions
run: chmod -R 777 storage bootstrap/cache
- name: Execute tests (Unit and Feature tests) via PHPUnit
env:
DB_CONNECTION: mysql
DB_DATABASE: bubofamily
run: vendor/bin/phpunit

View File

@@ -0,0 +1,20 @@
name: Gitea Actions Demo
run-name: ${{ gitea.actor }} is testing out Gitea Actions
on: [push]
jobs:
Explore-Gitea-Actions:
runs-on: linux_amd64
steps:
- run: echo "The job was automatically triggered by a ${{ gitea.event_name }} event."
- run: echo "This job is now running on a ${{ runner.os }} server hosted by Gitea!"
- run: echo "The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
- run: echo "${{ GITHUB_WORKSPACE }}"
- name: Check out repository code
uses: actions/checkout@v3
- run: echo "The ${{ gitea.repository }} repository has been cloned to the runner."
- run: echo "The workflow is now ready to test your code on the runner."
- name: List files in the repository
run: |
ls ${{ gitea.workspace }}
- run: echo "This job's status is ${{ job.status }}."

2
.gitignore vendored
View File

@@ -19,3 +19,5 @@ yarn-error.log
/.vscode
resources/views/tmp/*
public/ovpn_config.ovpn
*.txt

View File

@@ -1,37 +1,27 @@
# Gestionale di Famiglia
Piccolo sistema di gestione famigliare.
# Gestionale per le famiglie
Questo progetto nasce sia come esercizio per utilizzare Laravel, che come esigenza personale.
Nato come sola gestione finanziaria per un utilizzo domestico, piano piano si sono aggiunte delle necessità e idee che hanno reso il "piccolo" gestionale di diventare ciò che è ora. L'obiettivo finale è di creare un sistema di gestione centrale per tutte le esigenze e necessità che si incontrano nel gestire una famiglia ( o almeno quelle parametrizzabili )
Piccolo sistema di gestione.
Al momento sono presenti:
- Gestione delle Entrate e uscite con possibilità di inserimento delle foto degli scontrini ed eventuali documenti in PDF.
- Possibilità di importare gli estratti conto da un file excel o csv.
- Un sistema di gestione delle letture dei contatori per il GAS e per l'Energia elettrica
- Un sistema di gestione delle autovetture e relative operazioni effettuate su di esse.
- Un sistema di gestione delle letture dei contatori per il GAS e per l'Energia elettrica [Da rivedere]
- Un sistema di gestione delle autovetture e relative operazioni effettuate su di esse. [Da rivedere]
- Una rubrica telefonica e degli indirizzi
- Una gestione dei progetti (ancora in sviluppo)
- Una gestione degli utenti e dei gruppi e relativi permessi.
- Una gestione dei progetti (ancora in sviluppo) [Da rivedere]
- Una gestione degli utenti e dei gruppi e relativi permessi. [Da migliorare]
- Gestione dei documenti
- Gestione di un calendario condiviso
*Sviluppato in php, mysql, jquery su framework Laravel*.
## Installazione
- clonare il repository
- copiare il file .env.example
- inserire le informazioni del database (username,password,dbname)
- lanciare >composer install
- lanciare php artisan migrate
- lanciare i seeds (categorie e utenti di default)
## Sviluppatori
## Sviluppatori (attualmente)
Flavio Barachino <flavio.barachino@lavorain.cloud>
### Vuoi partecipare?
Scrivimi con le tue proposte, le tue critiche, i tuoi suggerimenti.
=======
## Sviluppatori
Flavio Barachino <flavio.barachino@lavorain.cloud>
### Vuoi partecipare?
Scrivimi con le tue proposte, le tue critiche, i tuoi suggerimenti.
Scrivici con le tue proposte, le tue critiche, i tuoi suggerimenti.
Gestionale <bubofamily@lavorain.cloud>

View File

@@ -5,10 +5,76 @@ namespace App\Http\Controllers;
use App\Models\anagrafica;
use App\Models\contatto;
use Illuminate\Http\Request;
use Google\Client;
Use Google\Service\PeopleService;
class AnagraficaController extends Controller
{
//
// GOOGLE CONTACTS PART
// private $google_client;
/* public function getToken()
{
$client = new Client();
$client->setApplicationName('gestionale.lavorain.cloud');
if(!is_null($client->getAccessToken())){}
elseif(!is_null(session('access_token'))) // is_null(Session::get('access_token', null))
{
$client->setAccessToken(session('access_token'));
}
else
{
$scope = array();
$scope[] = 'https://www.googleapis.com/auth/contacts';
// $client->
putenv('GOOGLE_APPLICATION_CREDENTIALS='.storage_path('app/google-calendar/service_key.json')); //this can be created with other ENV mode server side
$client->useApplicationDefaultCredentials();
$token = $client->getAccessToken();
session(['access_token' => $token]);
}
return $client;
}*/
public function getGoogleContacts()
{
$client = $this->getToken();
$service = new PeopleService($client);
$profile = $service->people_connections->listPeopleConnections('people/me', array('personFields' => 'names,emailAddresses,phoneNumbers'));
}
public function getToken()
{
$configJson =storage_path('app/google-calendar/service_key.json');
// $configJson =storage_path('app/google-calendar/people.json');
// define an application name
$applicationName = 'gestionale-di-famiglia';
// create the client
$client = new \Google_Client();
$client->setApplicationName($applicationName);
$client->setAuthConfig($configJson);
$client->setAccessType('offline'); // necessary for getting the refresh token
$client->setApprovalPrompt ('force'); // necessary for getting the refresh token
// scopes determine what google endpoints we can access. keep it simple for now.
$client->setScopes(
[
/*
\Google\Service\Oauth2::USERINFO_PROFILE,
\Google\Service\Oauth2::USERINFO_EMAIL,
\Google\Service\Oauth2::OPENID,
*/
\Google\Service\PeopleService::CONTACTS // allows reading of google drive metadata
]
);
$client->setIncludeGrantedScopes(true);
return $client;
}
public function newContact()
{
return view('anagrafica.form');

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class AssociazioneController extends Controller
{
//
}

View File

@@ -0,0 +1,16 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Avviso;
class AvvisoController extends Controller
{
//
public function saveAvviso(Request $request)
{
Avviso::newAvviso($request);
return redirect()->back();
}
}

View File

@@ -18,7 +18,7 @@ class CategorieController extends Controller
public static function insCategorie(Request $request)
{
Categorie::inserisci($request['cat_name']);
Categorie::inserisci($request);
return view('conti.categorie.list',['categorie'=>Categorie::list()]);
}
@@ -32,14 +32,14 @@ class CategorieController extends Controller
public function updatePostCategorie(Request $request)
{
Categorie::updateNameById($request['id'],$request['cat_name']);
Categorie::updateNameById($request);
return redirect(route('categorie'));
}
public function apiList()
{
$categorie=Categorie::list();
$categorie=Categorie::listCategorieAPI();
return json_encode($categorie);
}
@@ -48,4 +48,16 @@ class CategorieController extends Controller
$categorie = Categorie::getById($id);
return json_encode($categorie);
}
public function apiListSpesa()
{
$categorie=Categorie::listSpesa();
return json_encode($categorie);
}
public function apiListEntrata()
{
$categorie=Categorie::listEntrata();
return json_encode($categorie);
}
}

View File

@@ -23,4 +23,6 @@ class CondominioController extends Controller
{
abort(403);
}
}

View File

@@ -0,0 +1,65 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Contratti;
use App\Models\GenDoc;
use Carbon\Carbon;
class ContrattiController extends Controller
{
//
public function contratti()
{
return view('contratti.lista',['data'=>Contratti::getAllContratto()]);
}
public function newContratto(Request $request)
{
// Contratti::storeContratto($request);
//dd($request);
if (isset($request['filename'])) {
$filename = $request->file('filename')->store('Contratti');
}else{
$filename=null;
}
Contratti::create([
'numero'=>$request['numero'],
'nome'=>$request['nome'],
'datainizio'=>date_format(date_create($request['datainizio']),'Y-m-d'),
'datatermine'=>date_format(date_create($request['datatermine']),'Y-m-d'),
'fornitore'=>$request['fornitore'],
'tipo'=>$request['tipo'],
'importo'=>$request['importo'],
'scadenzapagamento'=>date_format(date_create($request['scadenzapagamento']),'Y-m-d'),
'stato'=>$request['stato'],
'note'=>$request['note'],
'filename'=>$filename,
]);
return redirect()->back();
}
/* */
public function schedaContratto($id)
{
$contratto = Contratti::getContrattoById($id);
return view('contratti.detail',[
'contratto'=>$contratto,
'docs' => \App\Models\GenDoc::listDocument(1,$id)
]);
}
public function documentDelete(Request $id)
{
// return dd($id);
// $entity=1;
$contratto=GenDoc::find($id['id']);
if(file_exists('/storage/'.$contratto->filename))
{
unlink('storage/'.$contratto->filename);
}
GenDoc::find($id['id'])->delete();
return redirect('/admin/contratti/'.$id['entity_id']);
}
}

View File

@@ -22,10 +22,25 @@ class DocumentiController extends Controller
}
public function fileForm(Request $request){
$documenti = Documenti::getList($request->input('id'));
return view('conti.documenti.insert', [
'id'=>$request->input('id'),
$documenti = Documenti::getList($request->input('entity_id'));
return view('conti.documenti.insert', [
'id'=>$request->input('entity_id'),
'documenti'=>$documenti
]);
}
}
public function newFolder(Request $req)
{
// crea una nuova caregoria per i documenti
Documenti::store($req);
return redirect(route('folders'));
}
public function listaDocumenti()
{
return view('documenti.lista',['data'=>Documenti::all()]);
}
}

View File

@@ -4,6 +4,8 @@ namespace App\Http\Controllers;
use App\Models\Event;
use Illuminate\Http\Request;
use Spatie\GoogleCalendar\Event as Events;
use Carbon\Carbon;
class FullCalenderController extends Controller
{
@@ -18,31 +20,14 @@ class FullCalenderController extends Controller
*/
public function index(Request $request)
{
if($request->ajax()) {
$data = Event::whereDate('start', '>=', $request->start)
$data = Event::whereDate('start', '>=', $request->start)
->whereDate('end', '<=', $request->end)
->get(['id', 'title', 'start', 'end']);
return response()->json($data);
return response()->json($data);
}
return view('fullcalendar');
return view('calendario.fullcalendar');
}
@@ -58,72 +43,53 @@ class FullCalenderController extends Controller
*/
public function ajax(Request $request)
{
switch ($request->type) {
case 'add':
$event = Event::create([
'title' => $request->title,
'start' => $request->start,
'end' => $request->end,
]);
return response()->json($event);
break;
case 'update':
$event = Event::find($request->id)->update([
'title' => $request->title,
'start' => $request->start,
'end' => $request->end,
]);
return response()->json($event);
break;
case 'delete':
$event = Event::find($request->id)->delete();
return response()->json($event);
break;
break;
default:
# code...
break;
}
}
public function showDemo()
{
return view('calendario.fullcalendar');
}
public function saveEventToGoogle(Request $request){
$event = new Events;
$event->name = $request['title'];
$event->description=$request['descrizione'];
$tzStart = $request['DateStart'].'T'.$request['HourStart'].' +02:00';
$tzEnd = $request['DateEnd'].'T'.$request['HourEnd'].' +02:00';
$event->startDateTime = Carbon::parse($tzStart);
$event->endDateTime = Carbon::parse($tzEnd);
$event->save();
return view('calendario.fullcalendar');
}
}

View File

@@ -0,0 +1,35 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\GenDoc;
class GenDocController extends Controller
{
//
public function fileForm(Request $request){
$entity_id=$request->input('entity_id');
$entity=$request->input('entity');
if(!$request->input('entity_id'))
{
$entity_id=0;
}
$documenti = GenDoc::listDocument($entity,$entity_id);
return view('conti.documenti.gendoc', [
'id'=>$entity_id,
'entity'=>$entity,
'documenti'=>$documenti,
]);
}
public function storeFile(Request $request){
GenDoc::saveDocument($request);
return redirect()->back();
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class GruppiController extends Controller
{
//
}

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\HomeAssistantAPI;
class HomeAssistantAPIController extends Controller
{
// Connessione RestAPI di HomeAssistant
public function getContatore()
{
$kwh = HomeAssistantAPI::getSensorState('sensor.contatore_casa');
return $kwh->state;
}
public function getStatoPompa()
{
$statoPompa = HomeAssistantAPI::getSensorState('switch.pompa_pozzo');
return $statoPompa->state;
//dd($statoPompa);
}
}

View File

@@ -5,8 +5,12 @@ namespace App\Http\Controllers;
use App\Models\Categorie;
use App\Models\Movimenti;
use App\Models\tag;
use App\Models\Task;
use App\Models\Avviso;
// use App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Rap2hpoutre\FastExcel\FastExcel;
class MovimentiController extends Controller
@@ -37,11 +41,22 @@ class MovimentiController extends Controller
public static function dashboard()
{
$bilancio=Movimenti::getSaldo(date('Y'));
/*$bilancio=Movimenti::getSaldo(date('Y'));*/
$entrate=Movimenti::getEntrate(date('Y'));
$uscite=Movimenti::getUscite(date('Y'));
$saldo=Movimenti::getSaldoTot();
$mieiTasks=Task::getTaskAssignedToUser(Auth::id());
// $TasksAssegnati=Task::getTaskAssignedByUser(Auth::id());
// $avvisi=Avviso::getAvvisi();
$avvisi=Avviso::getActualAvvisi();
return view('layouts.dashboard',[
'bilancio'=>$bilancio,
'entrate'=>$entrate,
'uscite'=>$uscite,
'saldo'=>$saldo,
'mieitask' => $mieiTasks,
// 'assegnati' => $TasksAssegnati,
'avvisi'=>$avvisi,
]);
}
@@ -49,7 +64,7 @@ class MovimentiController extends Controller
{
Movimenti::insSpesa($request);
$mov=Movimenti::getList();
$categorie=Categorie::list();
$categorie=Categorie::listSpesa();
$tags=tag::getList();
return view('conti.movimenti.list',
[
@@ -64,7 +79,7 @@ class MovimentiController extends Controller
{
Movimenti::insEntrata($request);
$mov=Movimenti::getList();
$categorie=Categorie::list();
$categorie=Categorie::listEntrata();
$tags=tag::getList();
return view('conti.movimenti.list',
[
@@ -81,7 +96,7 @@ class MovimentiController extends Controller
foreach ($movimenti as $movimento)
{
$lista[]=[
'Data'=>$movimento->Data,
'Data'=> date_format(date_create($movimento->Data),'d/m/Y'),
'Categoria'=>$movimento->Categoria,
'Tag'=>$movimento->Tag,
'Descrizione'=>$movimento->Descrizione,
@@ -119,30 +134,16 @@ class MovimentiController extends Controller
]);
}
/*public function updateMovimenti(Request $request)
{
$id=$request['id'];
$mov=Movimenti::getMovimentoById($id);
$categorie=Categorie::list();
$tags=tag::getList();
return view('conti.movimenti.update',
[
'categorie'=> $categorie,
'movimenti'=> $mov,
'tags'=>$tags,
]);
}*/
public function updatePostMovimenti(Request $request)
{
Movimenti::updateMovimenti($request);
return redirect(route('movimenti'));
return redirect()->back();
}
public function deleteMovimenti(Request $request)
{
Movimenti::deleteMovimento($request['id']);
return redirect(route('movimenti'));
return redirect()->back();
}

View File

@@ -6,7 +6,9 @@ use App\Models\Progetti;
use App\Models\User;
use Illuminate\Http\Request;
use App\Models\RigaProgetto;
use App\Models\GenDoc;
use function GuzzleHttp\json_encode;
use Barryvdh\DomPDF\Facade\Pdf;
class ProgettiController extends Controller
{
@@ -19,28 +21,28 @@ class ProgettiController extends Controller
'progetti'=>Progetti::getProgetti()
]);
}
public function nuovoProgetto()
{
return view('progetti.new',['coordinatori'=>User::getUsers()]);
}
public function getCoordinatori()
{
return json_encode(User::getUsers());
}
public function salvaProgetto(Request $request)
{
Progetti::saveProgetto($request);
return redirect(Route('progetti'));
}
public function deleteProgetto(Request $param) {
Progetti::delProgetto($param['id']);
return redirect(Route('progetti'));
}
public function dettaglioProgetto($id)
{
@@ -51,5 +53,63 @@ class ProgettiController extends Controller
return view('progetti.dettaglio',['dettaglio'=>$progetto, 'righe'=>$righe, 'tot'=>$costo_tot]);
//dd($righe);
}
public function chiudiProgetto(Request $id)
{
Progetti::chiudiProgetto($id['id']);
return redirect(Route('progetti'));
}
public function riapriProgetto(Request $id)
{
Progetti::riapriProgetto($id['id']);
return redirect(Route('progetti'));
}
public function stampaPDFProgetto(Request $id)
{
$progetto_id=$id['id'];
$progetto = Progetti::getProgettoById($progetto_id);
$righe = RigaProgetto::getRigheProgetto($progetto_id);
$costo_tot=RigaProgetto::getCostoRighe($progetto_id);
$pdf=Pdf::loadview('progetti.PDF.scheda',['dettaglio'=>$progetto,'righe'=>$righe, 'tot'=>$costo_tot]);
return $pdf->stream();
}
public function documentoProgetto(Request $request)
{
$documenti = GenDoc::listDocument(3,$request->input('entity_id'));
return view('conti.documenti.insert', [
'id'=>$request->input('entity_id'),
'entity'=>$request->input('entity'),
'documenti'=>$documenti
]);
}
public function modificaProgetto(Request $data)
{
// funzione di modifica del progetto (form inserimento modificato in js)
Progetti::where('id', $data['id'])
->update([
'nome' => $data['nome'],
'descrizione' => $data['descrizione'],
//'data_creazione'=>$data['data_creazione'],
'data_inizio'=>$data['data_inizio'],
'data_fine'=>$data['data_fine'],
'fk_user'=>$data['coordinatore'],
'budget'=>$data['budget'],
'stato'=>$data['stato'],
'note' =>$data['note'],
]);
return redirect()->back();
/* dd($data);*/
}
public function getProgettobyId(Request $id)
{
return json_encode(Progetti::getProgettoById($id['id']));
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class RivistaController extends Controller
{
//
}

View File

@@ -39,7 +39,7 @@ class TagController extends Controller
public function apiList()
{
$tags=tag::getList();
$tags=tag::getApiList();
return json_encode($tags);
}

View File

@@ -0,0 +1,40 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Task;
class TaskController extends Controller
{
//
public function listTask()
{
return Task::where('termine_il','>=', now())->get();
// debug
// return get_class_methods($this);
}
public function Task()
{
return view('tasks.list',['tasks'=>$this->listTask()]);
}
public function newTask(Request $data)
{
Task::create([
'titolo'=>$data['titolo'],
'descrizione'=>$data['descrizione'],
'assegnato_a'=>$data['assegnato_a'],
'creato_da'=>$data['creato_da'],
'termine_il'=>$data['termine_il'],
'creato_il'=>$data['creato_il'],
'chiuso_il'=>$data['chiuso_il'],
'stato'=>$data['stato'],
]);
return redirect()->back();
}
}

View File

@@ -4,58 +4,106 @@ namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Junges\ACL\Models\Group;
use Junges\ACL\Models\Permission;
// use Junges\ACL\Models\Group;
// use Junges\ACL\Models\Permission;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use App\Models\User;
class Utenti extends Controller
{
//
public function nuovoGruppo()
public function createRole($ruolo)
{
return view('vendor.junges.form_addGroup',['gruppi'=>Utenti::getGruppi()]);
$role=Role::create(['name'=>$ruolo]);
return json_encode(Role::all()->pluck('name'));
}
function createPermission($permesso){
$permission=Permission::create(['name'=>$permesso]);
return json_encode(Permission::all()->pluck('name'));
}
function userClass() {
$user=new User();
return get_class_methods($user);
}
// post del create user
function createUser(Request $params){
User::addUser($params);
return redirect('/admin/users/new');
}
// mostra il form della creazione dell'utente
function addUser(){
$roles = Role::all();
$users = User::all();
return view('users.create',['ruoli'=>$roles,'users'=>$users]);
}
function listUser(){
$users = User::all();
return view('users.list',['users'=>$users]);
}
function getUsers(){
return User::getUsers();
}
function listRoles(){
$roles = Role::all();
return $roles;
}
function deleteUser($id) {
User::destroy($id);
return redirect('/admin/users/new');
}
function givePermissionToUser()
{
$users=User::all();
$permissions=Permission::all();
return view('users.assignperm',['users'=>$users,'permissions'=>$permissions]);
}
function assignPermission(Request $request)
{
//$user=User::getUserbyId($request['user']);
$user=User::findOrFail($request['user']);
foreach($request['permesso'] as $key => $value){
if($value=='true')
{
$key=str_replace('\'','',$key);
$user->givePermissionTo($key);
// $permission['allowed'][]=$key;
}
else
{
$key=str_replace('\'','',$key);
$user->revokePermissionTo($key);
// $permission['denied'][]=$key;
}
}
return redirect('/admin/users/givepermission');
}
function giveRoleToUser()
{
$users=User::all();
$roles=Role::all();
return view('users.assignrole',['users'=>$users,'roles'=>$roles]);
}
public function saveNuovoGruppo(Request $request)
function assignRole(Request $request)
{
$group=Group::create(['name' => $request['gruppo'],'description'=>$request['descrizione']]);
return view('vendor.junges.form_addGroup',['gruppi'=>Utenti::getGruppi()]);
}
public function nuovoPermesso()
{
return view('vendor.junges.form_addPermission',['permessi'=>Utenti::getPermessi()]);
}
public function saveNuovoPermesso(Request $request)
{
$group=Permission::create(['name' => $request['permesso'],'description'=>$request['descrizione']]);
return view('vendor.junges.form_addPermission',['permessi'=>Utenti::getPermessi()]);
}
public function getPermessi()
{
return DB::table('permissions')->orderBy('name')->get();
}
public function getGruppi()
{
return DB::table('groups')->orderBy('name')->get();
}
public function vw_assignToGroup()
{
return view('vendor.junges.assignPermissionToGroup',[
'permessi'=>Utenti::getPermessi(),
'gruppi'=>Utenti::getGruppi(),
]);
}
public function assignPermissionToGroup(Request $request)
{
$group=Group::findByName($request['gruppo']);
$group->assignPermission($request['permesso']);
return view('vendor.junges.assignPermissionToGroup',[
'permessi'=>Utenti::getPermessi(),
'gruppi'=>Utenti::getGruppi(),
]);
//$user=User::getUserbyId($request['user']);
$user=User::findOrFail($request['user']);
$user->assignRole($request['role']);
return redirect('/admin/users/giverole');
}
}

View File

@@ -63,6 +63,8 @@ class Kernel extends HttpKernel
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
];
}

39
app/Mail/myTestEmail.php Normal file
View File

@@ -0,0 +1,39 @@
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class myTestEmail extends Mailable
{
use Queueable, SerializesModels;
public $email;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($email)
{
//
$this->email=$email;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
$name='none';
return $this
->subject('Email di Test')
->markdown('mail.test',['name' => $name]);
}
}

View File

@@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Associazione extends Model
{
use HasFactory;
}

55
app/Models/Avviso.php Normal file
View File

@@ -0,0 +1,55 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Http;
class Avviso extends Model
{
use HasFactory;
protected $fillable=['avviso','creato_il', 'creato_da', 'urgente'];
public static function newAvviso($data)
{
self::create([
'avviso'=>$data['avviso'],
'creato_da'=>$data['creato_da'],
'creato_il'=>date('Y-m-d'),
'urgente'=>$data['urgente'],
]);
}
public static function getAvvisi()
{
return self::all();
}
public static function getActualAvvisi()
{
return self::where('creato_il','>=', now()->subMonth())->get();
}
public static function getHAstatus()
{
/*$response = Http::withHeaders([
'Authorization'=>' Bearer '.env('HA_TOKEN'),
'Content-Type'=>' application/json',
])->get('https://ha.lavorain.cloud/api/services',['domain']);
return $response;
// return dd($response);*/
}
public static function getAnsaNews()
{
/*$xmlstring = Http::get('https://www.ansa.it/trentino/notizie/trentino_rss.xml');
$xml_file = simplexml_load_string($xmlstring);
$json = json_encode($xml_file );
$array = json_decode($json,TRUE);
dd($array); // return $array;*/
}
}

View File

@@ -17,17 +17,52 @@ class Categorie extends Model
public static function list()
{
return DB::table('categories')->orderBy('cat_name')->get();
return self::all();
}
public static function listCategorieAPI()
{
return self::select('cat_name')->pluck('cat_name');
}
public static function listSpesa()
{
return DB::table('categories')->where('cat_uscita','=',1)->orderBy('cat_name')->get();
}
public static function listEntrata()
{
return DB::table('categories')->where('cat_entrata','=',1)->orderBy('cat_name')->get();
}
public static function inserisci($name){
return DB::table('categories')->insert(['cat_name'=> $name]);
public static function inserisci($request){
if ($request['cat_entrata']==='on')
{
$entrata=1;
}
else
{
$entrata=0;
}
if ($request['cat_uscita']==='on')
{
$uscita=1;
}
else
{
$uscita=0;
}
return DB::table('categories')->insert([
'cat_name'=> $request['cat_name'],
'cat_entrata'=>$entrata,
'cat_uscita'=>$uscita
]);
}
public static function deleteById($id){
DB::table('categories')
->where('id','=', $id)
->delete();
DB::table('categories')
->where('id','=', $id)
->delete();
}
public static function getById($id) {
@@ -36,11 +71,31 @@ class Categorie extends Model
->get();
}
public static function updateNameById($id,$name) {
public static function updateNameById($request) {
if ($request['cat_entrata']==='on')
{
$entrata=1;
}
else
{
$entrata=0;
}
if ($request['cat_uscita']==='on')
{
$uscita=1;
}
else
{
$uscita=0;
}
DB::table('categories')
->where('id','=', $id)
->where('id','=', $request['id'])
->update([
'cat_name' => $name,
'cat_name' => $request['cat_name'],
'cat_entrata' => $entrata,
'cat_uscita'=>$uscita,
]);
}

43
app/Models/Contratti.php Normal file
View File

@@ -0,0 +1,43 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class Contratti extends Model
{
use HasFactory;
protected $fillable=[
'numero',
'nome',
'datainizio',
'datatermine',
'fornitore',
'tipo',
'importo',
'scadenzapagamento',
'stato',
'note',
'filename'
];
public static function storeContratto(Request $req){
/* dd($req); */
}
public static function getAllContratto(){
return self::all();
}
public static function getContrattoById($id){
return DB::table('contrattis')->where('id','=',$id)->get();
}
}

View File

@@ -9,6 +9,12 @@ use Illuminate\Support\Facades\DB;
class Documenti extends Model
{
use HasFactory;
protected $fillable = [
'descrizione',
'path',
];
public static function countDocument($id){
$quanti=DB::table('documentis')
@@ -16,23 +22,53 @@ class Documenti extends Model
->count();
return $quanti;
}
// Proposta modifica {issue #5} gitea (generalizzazione del documento)
/*
public static function countDocument($id,$entity)
{
return self::where('entita','=',$entity)->where('entita_id','=',$id)->count();
}
*/
public static function store($req) {
// $movimento_id=$req->input('id');
// $filename=$req->file('filename')->store('Documenti');
DB::table('documentis')
->insert([
// 'movimenti_id'=>$movimento_id,
'descrizione'=>$req->input('descrizione'),
'path'=>$req->input('path'),
// 'filename'=>$filename,
]);
}
// Proposta modifica {issue #5} gitea (generalizzazione del documento)
/*
public static function store($req) {
$movimento_id=$req->input('id');
$filename=$req->file('filename')->store('Documenti');
DB::table('documentis')
->insert([
'movimenti_id'=>$movimento_id,
'descrizione'=>$req->input('descrizione'),
'filename'=>$filename,
self::create([
'entità'=>$req['entita'], // aggiunto per determinare il tipo di entità a cui si riferisce il documento
'entita_id'=>$req['entita_id'], // aggiunto per identificare il record al quale associare il documento (al posto di id_movimento)
'descrizione'=>$req['descrizione'],
'filename'=>$filename
]);
}
*/
public static function getList($id)
{
return DB::table('documentis')
->where('movimenti_id','=',$id)
->where('movimenti_id','=', $id)
->get();
}
// Proposta modifica issue {#5 gitea} (generalizzazione del documento)
/*
public static function getList($id,$entity)
{
self::where('entita','=',$entity)->where('entita_id','=',$id)->get();
}
*/
}

51
app/Models/GenDoc.php Normal file
View File

@@ -0,0 +1,51 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use App\Models\Documenti;
class GenDoc extends Model
{
use HasFactory;
// DocumentiGenerali
public static function saveDocument($data){
$filename=$data->file('filename')->store(self::getEntityFolder($data['entity']));
DB::table('gen_docs')
->insert([
'entity'=>$data['entity'],
'entity_id'=>($data['entity_id'] ?? 0 ),
'descrizione'=>$data['descrizione'],
'filename'=>$filename,
]);
}
public static function listDocument($entity,$entity_id = 0)
{
// Ritorna la lista dei documenti in base all'entità e al rispettivo id
return DB::table('gen_docs')->where('entity','=',$entity)->where('entity_id','=',$entity_id)->get(); //nuova funzione
// return DB::table('documentis')->where('movimenti_id','=', $entity_id)->get();
}
public static function countDocument($entity,$entity_id = 0){
// Conta i documenti inseriti per la determinata entità e id
$quanti=DB::table('gen_docs')
->where('entity','=',$entity)
->andWhere('entity_id','=',$entity_id)
->count();
return $quanti;
}
private static function getEntityFolder($id)
{
$entita = Documenti::where('id',$id)->pluck('path');
return $entita[0];
//return $entita->path;
}
}

11
app/Models/Gruppi.php Normal file
View File

@@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Gruppi extends Model
{
use HasFactory;
}

View File

@@ -0,0 +1,26 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Http;
class HomeAssistantAPI extends Model
{
use HasFactory;
public static function getSensorState($sensor)
{
$result=Http::withHeaders(
[
'Authorization'=>'Bearer '.env('HA_TOKEN'),
'Content-Type'=>'application/json',
]
)->get('https://ha.lavorain.cloud/api/states/'.$sensor);
return json_decode($result);
}
}

View File

@@ -10,25 +10,47 @@ use Rap2hpoutre\FastExcel\FastExcel;
class Movimenti extends Model
{
use HasFactory;
protected $dates = ['mov_data'];
protected $casts = [ 'mov_data'=>'datetime'];
public static $query='SELECT
a.id,
a.mov_data,
a.mov_importo,
a.mov_descrizione,
c.cat_name,
t.tag_name,
(SELECT Count(entity_id) as quanti FROM gen_docs WHERE entity=0 AND entity_id = a.id) as quanti
FROM movimentis as a
JOIN tags as t ON a.mov_fk_tags=t.id
JOIN categories as c ON a.mov_fk_categoria=c.id';
public static function getList() {
return DB::table('movimentis')
->join('categories','movimentis.mov_fk_categoria','=','categories.id')
->join('tags','movimentis.mov_fk_tags','=','tags.id')
->leftJoin('documentis', 'movimenti_id','=','movimentis.id')
->select('movimentis.id','mov_data','mov_descrizione','mov_importo','cat_name','tag_name', DB::raw('Count(movimenti_id) as quanti'))
->groupBy('movimentis.id','mov_data','mov_descrizione','mov_importo','cat_name','tag_name')
->get();
return DB::select(DB::raw(
'SELECT
a.id,
a.mov_data,
a.mov_importo,
a.mov_descrizione,
c.cat_name,
t.tag_name,
(SELECT Count(entity_id) as quanti FROM gen_docs WHERE entity=0 AND entity_id = a.id) as quanti
FROM movimentis as a
JOIN tags as t ON a.mov_fk_tags=t.id
JOIN categories as c ON a.mov_fk_categoria=c.id'
));
}
public static function getSaldo($date) {
return DB::table('movimentis')->whereYear('mov_data','=',$date)->sum('mov_importo');
}
public static function getSaldoTot() {
return DB::table('movimentis')->sum('mov_importo');
}
public static function insSpesa($request) {
DB::table('movimentis')->insert(
[
@@ -40,7 +62,7 @@ class Movimenti extends Model
'mov_inserito_da'=>$request['userid'],
]);
}
public static function insEntrata($request) {
DB::table('movimentis')->insert(
[
@@ -52,7 +74,7 @@ class Movimenti extends Model
'mov_inserito_da'=>$request['userid'],
]);
}
public static function export() {
return DB::table('movimentis')
->join('categories','movimentis.mov_fk_categoria','=','categories.id')
@@ -61,7 +83,7 @@ class Movimenti extends Model
->orderBy('Data','asc')
->get();
}
public static function reportSpesa($year,$month) {
return DB::table('movimentis')
->selectRaw('ABS(Sum(movimentis.mov_importo)) as resoconto, categories.cat_name,categories.id')
@@ -72,7 +94,7 @@ class Movimenti extends Model
->groupBy('cat_name','categories.id')
->get();
}
public static function reportEntrate($year,$month) {
return DB::table('movimentis')
->selectRaw('ABS(Sum(movimentis.mov_importo)) as resoconto, categories.cat_name,categories.id')
@@ -83,7 +105,7 @@ class Movimenti extends Model
->groupBy('cat_name','categories.id')
->get();
}
public static function getMovimentoById($id) {
return DB::table('movimentis')
->join('categories','movimentis.mov_fk_categoria','=','categories.id')
@@ -91,7 +113,7 @@ class Movimenti extends Model
->where('movimentis.id','=',$id)
->get();
}
public static function updateMovimenti($request) {
DB::table('movimentis')
->where('id','=', $request['id'])
@@ -104,46 +126,59 @@ class Movimenti extends Model
'mov_inserito_da'=>$request['userid'],
]);
}
public static function deleteMovimento($id) {
DB::table('movimentis')
->where('id','=', $id)
->delete();
}
public static function listByCatMonth($month,$cat,$year) {
return DB::table('movimentis')
->join('categories','movimentis.mov_fk_categoria','=','categories.id')
->join('tags','movimentis.mov_fk_tags','=','tags.id')
->where('movimentis.mov_fk_categoria','=',$cat)
->whereMonth('mov_data','=',$month)
->whereYear('mov_data', '=' , $year)
->leftJoin('documentis', 'movimenti_id','=','movimentis.id')
->select('movimentis.id','mov_data','mov_descrizione','mov_importo','cat_name','tag_name', DB::raw('Count(movimenti_id) as quanti'))
->groupBy('movimentis.id','mov_data','mov_descrizione','mov_importo','cat_name','tag_name')
->get();
return DB::select(DB::raw('SELECT
a.id,
a.mov_data,
a.mov_importo,
a.mov_descrizione,
c.cat_name,
t.tag_name,
(SELECT Count(entity_id) as quanti FROM gen_docs WHERE entity=0 AND entity_id = a.id) as quanti
FROM movimentis as a
JOIN tags as t ON a.mov_fk_tags=t.id
JOIN categories as c ON a.mov_fk_categoria=c.id
WHERE Month(a.mov_data)='.$month.' AND Year(a.mov_data)='.$year.' AND a.mov_fk_categoria='.$cat
));
}
public static function listByCategory($cat) {
return DB::table('movimentis')
->join('categories','movimentis.mov_fk_categoria','=','categories.id')
->join('tags','movimentis.mov_fk_tags','=','tags.id')
->where('movimentis.mov_fk_categoria','=',$cat)
->leftJoin('documentis', 'movimenti_id','=','movimentis.id')
->select('movimentis.id','mov_data','mov_descrizione','mov_importo','cat_name','tag_name', DB::raw('Count(movimenti_id) as quanti'))
->groupBy('movimentis.id','mov_data','mov_descrizione','mov_importo','cat_name','tag_name')
->get();
return DB::select(DB::raw('SELECT
a.id,
a.mov_data,
a.mov_importo,
a.mov_descrizione,
c.cat_name,
t.tag_name,
(SELECT Count(entity_id) as quanti FROM gen_docs WHERE entity=0 AND entity_id = a.id) as quanti
FROM movimentis as a
JOIN tags as t ON a.mov_fk_tags=t.id
JOIN categories as c ON a.mov_fk_categoria=c.id
WHERE a.mov_fk_categoria = '.$cat ));
}
public static function getByTag($tag) {
return DB::table('movimentis')
->where('mov_fk_tags','=',$tag)
->join('categories','movimentis.mov_fk_categoria','=','categories.id')
->join('tags','movimentis.mov_fk_tags','=','tags.id')
->leftJoin('documentis', 'movimenti_id','=','movimentis.id')
->select('movimentis.id','mov_data','mov_descrizione','mov_importo','cat_name','tag_name', DB::raw('Count(movimenti_id) as quanti'))
->groupBy('movimentis.id','mov_data','mov_descrizione','mov_importo','cat_name','tag_name')
->get();
return DB::select(DB::raw('SELECT
a.id,
a.mov_data,
a.mov_importo,
a.mov_descrizione,
c.cat_name,
t.tag_name,
(SELECT Count(entity_id) as quanti FROM gen_docs WHERE entity=0 AND entity_id = a.id) as quanti
FROM movimentis as a
JOIN tags as t ON a.mov_fk_tags=t.id
JOIN categories as c ON a.mov_fk_categoria=c.id
WHERE a.mov_fk_tags = '.$tag ));
}
public static function importEstrattoIng($filename)
@@ -151,7 +186,7 @@ class Movimenti extends Model
$inputPath='/var/www/html/bubofamily/public/storage/'.$filename;
$outputPath='/var/www/html/bubofamily/public/'.$filename;
rename($inputPath,$outputPath);
$collection = (new FastExcel)->import($filename, function ($line){
if($line['Data valuta'])
{
@@ -166,13 +201,13 @@ class Movimenti extends Model
}
});
}
public static function importEstrattoCR($filename)
{
$inputPath='/var/www/html/bubofamily/public/storage/'.$filename;
$outputPath='/var/www/html/bubofamily/public/'.$filename.'.csv';
rename($inputPath,$outputPath);
$collection = (new FastExcel)->configureCsv(';')->import($filename.'.csv', function ($line){
if($line['VALUTA'])
{
@@ -180,6 +215,8 @@ class Movimenti extends Model
{
$dati=[
'mov_data'=>self::dateFormat(0,$line['VALUTA']),
// date_format(date_create($movimento->mov_data),'d/m/Y'
// 'mov_data'=>date_format(date_create($line['VALUTA']),'Y-m-d'),
'mov_fk_categoria'=>1,
'mov_descrizione'=>$line['DESCRIZIONE OPERAZIONE'],
'mov_importo'=>'-'.trim(str_replace(',','.',(str_replace('.','',$line['DARE'])))),
@@ -191,6 +228,7 @@ class Movimenti extends Model
{
$dati=[
'mov_data'=>self::dateFormat(0,$line['VALUTA']),
//'mov_data'=>date_format(date_create($line['VALUTA']),'Y-m-d'),
'mov_fk_categoria'=>1,
'mov_descrizione'=>$line['DESCRIZIONE OPERAZIONE'],
'mov_importo'=>trim(str_replace(',','.',(str_replace('.','',$line['AVERE'])))),
@@ -202,28 +240,48 @@ class Movimenti extends Model
}
});
}
public static function getYearsFromMovimenti()
{
$anni=DB::table('movimentis')->select(DB::raw('DISTINCT YEAR(mov_data) as anno'))->get();
// dd($anni); // for test purposes
return $anni;
}
private static function dateFormat($type,$string)
{
// $string=(string)$string;
if($type)
{
$string=$string->format('Y-m-d');
// $string=$string->format('Y-m-d');
list($year,$month,$day) = explode('-',$string);
return $day.'/'.$month.'/'.$year;
} else {
$string=$string->format('d/m/Y');
// $string=$string->format('d/m/Y');
list($day,$month,$year) =explode('/',$string);
return $year.'-'.$month.'-'.$day;
}
}
public static function getEntrate($year)
{
$entrate_anno=DB::table('movimentis')
->where('mov_importo','>',0)
->whereYear('mov_data', '=' , $year)
->sum('mov_importo');
//->get();
return $entrate_anno;
}
public static function getUscite($year)
{
$uscite_anno=DB::table('movimentis')
->where('mov_importo','<',0)
->whereYear('mov_data', '=' , $year)
->sum('mov_importo');
//->get();
return ($uscite_anno);
}
}

View File

@@ -9,7 +9,7 @@ use Illuminate\Support\Facades\DB;
class Progetti extends Model
{
use HasFactory;
public static function getProgetti() {
return DB::table('progettis')
->select(
@@ -23,9 +23,9 @@ class Progetti extends Model
'budget',
'stato',
'note')
->join('users','progettis.fk_user','=','users.id')->get();
->join('users','progettis.fk_user','=','users.id')->get();
}
public static function getProgettoById($id){
return DB::table('progettis')->
join('users','progettis.fk_user','=','users.id')->
@@ -33,7 +33,7 @@ class Progetti extends Model
where('progettis.id','=',$id)->
get();
}
public static function saveProgetto($progetto){
DB::table('progettis')->insert([
'nome'=>$progetto['nome'],
@@ -46,12 +46,35 @@ class Progetti extends Model
'stato'=>$progetto['stato'],
'note'=>$progetto['note']
]);
}
public static function delProgetto($progetto_id)
{
DB::table('progettis')->delete($progetto_id);
}
public static function chiudiProgetto($progetto_id)
{
// chiude il progetto e lo rende non cancellabile e non più editabile
// potrà solo essere esportato in PDF
DB::table('progettis')
->where('id','=', $progetto_id)
->update([
'stato'=>'chiuso',
'data_fine'=>date('Y-m-d'),
]);
}
public static function riapriProgetto($progetto_id)
{
DB::table('progettis')
->where('id','=', $progetto_id)
->update([
'stato'=>'aperto',
'data_fine'=>null,
]);
}
}

11
app/Models/Rivista.php Normal file
View File

@@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Rivista extends Model
{
use HasFactory;
}

46
app/Models/Task.php Normal file
View File

@@ -0,0 +1,46 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Task extends Model
{
use HasFactory;
protected $fillable=['titolo','descrizione','creato_da','assegnato_a','creato_il','termine_il','chiuso_il','stato'];
public function getAllTasks()
{
return self::all();
}
//
public static function getTaskAssignedToUser($userid)
{
return self::where('assegnato_a',$userid)->where('termine_il','>=', now())->get();
}
//
public static function getTaskAssignedByUser($userid)
{
return self::where('creato_da',$userid)->get();
}
public static function saveTask($collection)
{
self::create(
[
'titolo' => $collection['titolo'],
'descrizione'=>$collection['descrizione'],
'creato_da'=>$collection['creato_da'],
'assegnato_a'=>$collection['assegnato_a'],
'creato_il'=>date('Y-m-d'),
'termine_il'=>$collection['termine_il'],
'stato'=>'Aperto',
]
);
}
}

View File

@@ -2,21 +2,18 @@
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Laravel\Sanctum\HasApiTokens;
//use LdapRecord\Laravel\Auth\Authenticatable;
use LdapRecord\Laravel\Auth\AuthenticatesWithLdap;
use Junges\ACL\Concerns\HasGroups;
use Spatie\Permission\Traits\HasRoles;
use Illuminate\Foundation\Auth\Access\Authorizable;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable, AuthenticateswithLdap, HasGroups, SoftDeletes;
use HasApiTokens, HasFactory, Notifiable, HasRoles,Authorizable;
/**
* The attributes that are mass assignable.
@@ -27,6 +24,7 @@ class User extends Authenticatable
'name',
'email',
'password',
'user_role',
];
/**
@@ -48,6 +46,8 @@ class User extends Authenticatable
'email_verified_at' => 'datetime',
];
protected $guard_name = 'web';
public function getLdapDomainColumn()
{
return 'domain';
@@ -66,13 +66,22 @@ class User extends Authenticatable
public static function getUserById($id)
{
return DB::table('users')->where('id','=',$id)->get();
return DB::table('users')->where('id','=',$id)->first();
}
public static function getUsers()
{
return DB::table('users')->orderBy('name')->get();
}
// Aggiunge un utente e assegna un ruolo
public static function addUser($params)
{
self::create([
'name'=>$params['name'],
'email'=>$params['email'],
'password'=>Hash::make($params['password']),
])->assignRole($params['role']);
}
}

View File

@@ -30,4 +30,5 @@ class contatto extends Model
}
}

View File

@@ -14,6 +14,11 @@ class tag extends Model
return DB::table('tags')->orderBy('tag_name')->get();
}
public static function getApiList()
{
return self::select('tag_name')->pluck('tag_name');
}
public static function inserisci($param) {
DB::table('tags')->insert(['tag_name'=> $param['tag_name']]);
}

View File

@@ -26,5 +26,10 @@ class AuthServiceProvider extends ServiceProvider
$this->registerPolicies();
//
Gate::before(function ($user, $ability) {
if ($user->hasRole('admin')) {
return true;
}
});
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\View\Components\Widget;
use Illuminate\View\Component;
class Avvisi extends Component
{
/**
* Create a new component instance.
*
* @return void
*/
// public $avvisi ="";
public function __construct(public array $avvisi)
{
//
}
/**
* Get the view / contents that represent the component.
*
* @return \Illuminate\Contracts\View\View|\Closure|string
*/
public function render():View
{
return view('components.widget.avvisi', ['avvisi'=>$this->avvisi]);
}
}

0
artisan Executable file → Normal file
View File

View File

@@ -10,22 +10,27 @@
"require" : {
"php": "^7.3|^8.0",
"barryvdh/laravel-dompdf": "^2.0",
"creativeorange/gravatar": "^1.0",
"directorytree/ldaprecord": "^2.9",
"directorytree/ldaprecord-laravel": "^2.5",
"fruitcake/laravel-cors": "^2.0",
"google/apiclient": "^2.15.0",
"guzzlehttp/guzzle": "^7.0.1",
"jeroennoten/laravel-adminlte": "^3.9",
"laravel-notification-channels/telegram": "^2.0",
"laravel/framework": "^8.75",
"laravel/sanctum": "^2.11",
"laravel/tinker": "^2.5",
"laravel/ui": "^3.4",
"laraveldaily/laravel-charts": "^0.1.29",
"mateusjunges/laravel-acl": "^4.2",
"nesbot/carbon": "^2.71",
"pcloud/pcloud-php-sdk": "^3.0",
"rap2hpoutre/fast-excel": "^3.2",
"secondtruth/startmin": "^1.1",
"sfneal/view-export": "^2.10",
"snapappointments/bootstrap-select": "^1.13",
"spatie/laravel-backup": "^7.0",
"spatie/laravel-google-calendar": "^3.7",
"spatie/laravel-permission": "^5.10",
"webklex/laravel-imap": "^2.4"
},
"require-dev" : {

2873
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,106 +0,0 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Models
|--------------------------------------------------------------------------
|
| When using this package, we need to know which Eloquent Model should be used
| to retrieve your groups and permissions. Of course, it is just the basics models
| needed, but you can use whatever you like.
|
*/
'models' => [
/*
| The model you want to use as Permission model must use the MateusJunges\ACL\Traits\PermissionsTrait
*/
'permission' => Junges\ACL\Models\Permission::class,
/*
| The model you want to use as Group model must use the MateusJunges\ACL\Traits\GroupsTrait
*/
'group' => Junges\ACL\Models\Group::class,
],
/*
|--------------------------------------------------------------------------
| Route Model Binding
|--------------------------------------------------------------------------
|
| If you would like model binding to use a database column other than id when
| retrieving a given model class, you may override the getRouteKeyName method
| on the Eloquent model with yours. The default key used for route model binding
| in this package is the `id` database column. You can modify it by changing the
| following configuration:
|
*/
'route_model_binding_keys' => [
'group_model' => 'id',
'permission_model' => 'id',
],
/*
|--------------------------------------------------------------------------
| Tables
|--------------------------------------------------------------------------
| Specify the basics authentication tables that you are using.
| Once you required this package, the following tables are
| created by default when you run the command
|
| php artisan migrate
|
| If you want to change this tables, please keep the basic structure unchanged.
|
*/
'tables' => [
'groups' => 'groups',
'permissions' => 'permissions',
'users' => 'users',
'group_has_permissions' => 'group_has_permissions',
'model_has_permissions' => 'model_has_permissions',
'model_has_groups' => 'model_has_groups',
],
'column_names' => [
'group_pivot_key' => null,
'permission_pivot_key' => null,
'model_morph_key' => 'model_id',
'team_foreign_key' => 'team_id'
],
'teams' => false,
/*
|--------------------------------------------------------------------------
| Ignition Solution Suggestions
|--------------------------------------------------------------------------
|
| To enable the ignition solutions for laravel-acl, set this flag to true.
|
| The solutions will then be automatically registered with ignition if its installed.
|
*/
'offer_solutions' => false,
'register_permission_check_method' => true,
'cache' => [
/*
* All permissions are cached for 24 hours by default. If permissions or groups are updated,
* then the cache is flushed automatically.
*/
'expiration_time' => DateInterval::createFromDateString('24 hours'),
/*
* The cache key used to store permissions.
*/
'key' => 'junges.acl.cache',
/*
* You can optionally specify a cache driver to use for permissions caching using
* store drivers listed in config/cache.php.
*/
'store' => 'default'
]
];

714
config/adminlte.php Normal file
View File

@@ -0,0 +1,714 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Title
|--------------------------------------------------------------------------
|
| Here you can change the default title of your admin panel.
|
| For detailed instructions you can look the title section here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Basic-Configuration
|
*/
'title' => 'Gestionale',
'title_prefix' => '',
'title_postfix' => '',
/*
|--------------------------------------------------------------------------
| Favicon
|--------------------------------------------------------------------------
|
| Here you can activate the favicon.
|
| For detailed instructions you can look the favicon section here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Basic-Configuration
|
*/
'use_ico_only' => false,
'use_full_favicon' => false,
/*
|--------------------------------------------------------------------------
| Google Fonts
|--------------------------------------------------------------------------
|
| Here you can allow or not the use of external google fonts. Disabling the
| google fonts may be useful if your admin panel internet access is
| restricted somehow.
|
| For detailed instructions you can look the google fonts section here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Basic-Configuration
|
*/
'google_fonts' => [
'allowed' => true,
],
/*
|--------------------------------------------------------------------------
| Admin Panel Logo
|--------------------------------------------------------------------------
|
| Here you can change the logo of your admin panel.
|
| For detailed instructions you can look the logo section here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Basic-Configuration
|
*/
'logo' => '<b>Gestionale</b>',
'logo_img' => 'vendor/adminlte/dist/img/AdminLTELogo.png',
'logo_img_class' => 'brand-image img-circle elevation-3',
'logo_img_xl' => null,
'logo_img_xl_class' => 'brand-image-xs',
'logo_img_alt' => 'Admin Logo',
/*
|--------------------------------------------------------------------------
| Authentication Logo
|--------------------------------------------------------------------------
|
| Here you can setup an alternative logo to use on your login and register
| screens. When disabled, the admin panel logo will be used instead.
|
| For detailed instructions you can look the auth logo section here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Basic-Configuration
|
*/
'auth_logo' => [
'enabled' => false,
'img' => [
'path' => 'vendor/adminlte/dist/img/AdminLTELogo.png',
'alt' => 'Auth Logo',
'class' => '',
'width' => 50,
'height' => 50,
],
],
/*
|--------------------------------------------------------------------------
| Preloader Animation
|--------------------------------------------------------------------------
|
| Here you can change the preloader animation configuration.
|
| For detailed instructions you can look the preloader section here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Basic-Configuration
|
*/
'preloader' => [
'enabled' => false,
'img' => [
'path' => 'vendor/adminlte/dist/img/AdminLTELogo.png',
'alt' => 'AdminLTE Preloader Image',
'effect' => 'animation__shake',
'width' => 60,
'height' => 60,
],
],
/*
|--------------------------------------------------------------------------
| User Menu
|--------------------------------------------------------------------------
|
| Here you can activate and change the user menu.
|
| For detailed instructions you can look the user menu section here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Basic-Configuration
|
*/
'usermenu_enabled' => true,
'usermenu_header' => false,
'usermenu_header_class' => 'bg-primary',
'usermenu_image' => false,
'usermenu_desc' => false,
'usermenu_profile_url' => false,
/*
|--------------------------------------------------------------------------
| Layout
|--------------------------------------------------------------------------
|
| Here we change the layout of your admin panel.
|
| For detailed instructions you can look the layout section here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Layout-and-Styling-Configuration
|
*/
'layout_topnav' => null,
'layout_boxed' => null,
'layout_fixed_sidebar' => null,
'layout_fixed_navbar' => null,
'layout_fixed_footer' => null,
'layout_dark_mode' => null,
/*
|--------------------------------------------------------------------------
| Authentication Views Classes
|--------------------------------------------------------------------------
|
| Here you can change the look and behavior of the authentication views.
|
| For detailed instructions you can look the auth classes section here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Layout-and-Styling-Configuration
|
*/
'classes_auth_card' => 'card-outline card-primary',
'classes_auth_header' => '',
'classes_auth_body' => '',
'classes_auth_footer' => '',
'classes_auth_icon' => '',
'classes_auth_btn' => 'btn-flat btn-primary',
/*
|--------------------------------------------------------------------------
| Admin Panel Classes
|--------------------------------------------------------------------------
|
| Here you can change the look and behavior of the admin panel.
|
| For detailed instructions you can look the admin panel classes here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Layout-and-Styling-Configuration
|
*/
'classes_body' => '',
'classes_brand' => '',
'classes_brand_text' => '',
'classes_content_wrapper' => '',
'classes_content_header' => '',
'classes_content' => '',
'classes_sidebar' => 'sidebar-dark-primary elevation-4',
'classes_sidebar_nav' => '',
'classes_topnav' => 'navbar-white navbar-light',
'classes_topnav_nav' => 'navbar-expand',
'classes_topnav_container' => 'container',
/*
|--------------------------------------------------------------------------
| Sidebar
|--------------------------------------------------------------------------
|
| Here we can modify the sidebar of the admin panel.
|
| For detailed instructions you can look the sidebar section here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Layout-and-Styling-Configuration
|
*/
'sidebar_mini' => 'lg',
'sidebar_collapse' => false,
'sidebar_collapse_auto_size' => false,
'sidebar_collapse_remember' => false,
'sidebar_collapse_remember_no_transition' => true,
'sidebar_scrollbar_theme' => 'os-theme-light',
'sidebar_scrollbar_auto_hide' => 'l',
'sidebar_nav_accordion' => true,
'sidebar_nav_animation_speed' => 300,
/*
|--------------------------------------------------------------------------
| Control Sidebar (Right Sidebar)
|--------------------------------------------------------------------------
|
| Here we can modify the right sidebar aka control sidebar of the admin panel.
|
| For detailed instructions you can look the right sidebar section here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Layout-and-Styling-Configuration
|
*/
'right_sidebar' => false,
'right_sidebar_icon' => 'fas fa-cogs',
'right_sidebar_theme' => 'dark',
'right_sidebar_slide' => true,
'right_sidebar_push' => true,
'right_sidebar_scrollbar_theme' => 'os-theme-light',
'right_sidebar_scrollbar_auto_hide' => 'l',
/*
|--------------------------------------------------------------------------
| URLs
|--------------------------------------------------------------------------
|
| Here we can modify the url settings of the admin panel.
|
| For detailed instructions you can look the urls section here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Basic-Configuration
|
*/
'use_route_url' => false,
'dashboard_url' => 'home',
'logout_url' => 'logout',
'login_url' => 'login',
'register_url' => 'register',
'password_reset_url' => 'password/reset',
'password_email_url' => 'password/email',
'profile_url' => false,
/*
|--------------------------------------------------------------------------
| Laravel Mix
|--------------------------------------------------------------------------
|
| Here we can enable the Laravel Mix option for the admin panel.
|
| For detailed instructions you can look the laravel mix section here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Other-Configuration
|
*/
'enabled_laravel_mix' => false,
'laravel_mix_css_path' => 'css/app.css',
'laravel_mix_js_path' => 'js/app.js',
/*
|--------------------------------------------------------------------------
| Menu Items
|--------------------------------------------------------------------------
|
| Here we can modify the sidebar/top navigation of the admin panel.
|
| For detailed instructions you can look here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Menu-Configuration
|
*/
'menu' => [
// Navbar items:
[
'type' => 'navbar-search',
'text' => 'search',
'topnav_right' => true,
],
[
'type' => 'fullscreen-widget',
'topnav_right' => true,
],
// Sidebar items:
[
'type' => 'sidebar-menu-search',
'text' => 'search',
],
[
'text' => 'Dashboard',
'url' => '/admin',
// 'can' => 'manage-blog',
],
[
'text' => 'Gestione Economica',
'url' => '#',
'icon' => 'fas fa-fw fa-money-bill', //<i class="fa-solid fa-money-bill"></i>
'can' => ['conti'],
'submenu' => [
[
'text' => 'Lista movimenti',
'route' => 'movimenti',
'icon' => 'fas fa-fw fa-list-check'
],
[ 'text' => 'Liste',
'url' => '#',
'icon' => 'fas fa-fw fa-gears',
'submenu' => [
[
'text' => 'Categorie',
'route' => 'categorie',
'icon' => 'fas fa-fw fa-wine-bottle'
],
[
'text' => 'Tags',
'route' => 'tags',
'icon' => 'fas fa-fw fa-tags'
],
]
],
[ 'text' => 'Reports',
'url' => '#',
'icon' => 'fas fa-fw fa-file',
'submenu' => [
[
'text' => 'Report movimenti',
'route' => 'resoconto',
'icon' => 'fas fa-fw fa-piggy-bank',
],
[
'text' => 'Bilancio annuale',
'route' => 'budget',
'icon' => 'fas fa-fw fa-scale-balanced'
],
]
],
[
'text' => 'Import/Export',
'url' => '#',
'icon' => 'fas fa-fw fa-file-arrow-down',
'submenu' => [
[
'text' => 'Esporta tutti i movimenti',
'route' => 'export',
],
[
'text' => 'Importa Estratto conto ING',
'route' => 'importING',
],
[
'text' => 'Importa Estratto conto Cassa Rurale',
'route' => 'importCR',
],
],
],
],
],
['header' => 'GESTIONE DOCUMENTALE',
'can' => ['documenti','contratti','progetti'],
],
[
'text' => 'Documenti gen.',
'url' => '/admin/documenti',
'icon' => 'fas fa-fw fa-stop',
'can' => ['documenti'],
'color' => 'red',
],
[
'text' => 'Contratti',
'route' => 'contratti',
'icon' => 'fas fa-fw fa-newspaper',
'can' => ['contratti'],
],
[
'text' => 'Progetti',
'route' => 'progetti',
'icon' => 'fas fa-fw fa-diagram-project',
'can' => ['progetti'],
],
['header' => 'GESTIONE BENI',
'can' => ['automobili'],],
[
'text' => 'Automobili',
'url' => '/admin/auto',
'icon' => 'fas fa-fw fa-car',
'can' => ['automobili'],
],
['header' => 'GESTIONE PIM',
'can' => ['contatti','tasks','appuntamenti','meetingroom'],
],
[
'text' => 'Contatti',
'url' => '/admin/contatti',
'icon' => 'fas fa-fw fa-user',
'can' => ['contatti'],
'submenu' => [
[
'text' => 'Nuovo Contatto',
'route' => 'newContact',
'icon' => 'fas fa-fw fa-plus',
],
[
'text' => 'Rubrica',
'route' => 'contatti',
'icon' => 'fas fa-fw fa-mobile',
],
],
],
[
'text' => 'Attività',
'route' => 'tasks',
'icon' => 'fas fa-fw fa-circle-check',
'can' => ['tasks'],
],
[
'text' => 'Appuntamenti',
'route' => 'calendario',
'icon' => 'fas fa-fw fa-calendar',
'can' => ['appuntamenti'],
],
[
'text' => 'Meeting Room',
'route' => 'meeting',
'icon' => 'fas fa-fw fa-file-video',
'can' => ['meetingroom']
],
['header' => 'CONSUMI',
'can' => ['consumi'],
],
[
'text' => 'GAS',
'route' => 'gas',
'icon' => 'fas fa-fw fa-fire',
'can' => ['consumi'],
],
['header' => 'AMMINISTRAZIONE',
'can' => ['amministrazione'],
],
[
'text' => 'Utenti',
'url' => '/admin/users/new',
'icon' => 'fas fa-fw fa-user',
'can' => ['amministrazione']
],
[
'text' => 'Permessi',
'route' => 'permessi',
'icon' => 'fas fa-fw fa-solid fa-unlock-keyhole',
'can' => ['amministrazione']
],
],
/*
|--------------------------------------------------------------------------
| Menu Filters
|--------------------------------------------------------------------------
|
| Here we can modify the menu filters of the admin panel.
|
| For detailed instructions you can look the menu filters section here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Menu-Configuration
|
*/
'filters' => [
JeroenNoten\LaravelAdminLte\Menu\Filters\GateFilter::class,
JeroenNoten\LaravelAdminLte\Menu\Filters\HrefFilter::class,
JeroenNoten\LaravelAdminLte\Menu\Filters\SearchFilter::class,
JeroenNoten\LaravelAdminLte\Menu\Filters\ActiveFilter::class,
JeroenNoten\LaravelAdminLte\Menu\Filters\ClassesFilter::class,
JeroenNoten\LaravelAdminLte\Menu\Filters\LangFilter::class,
JeroenNoten\LaravelAdminLte\Menu\Filters\DataFilter::class,
],
/*
|--------------------------------------------------------------------------
| Plugins Initialization
|--------------------------------------------------------------------------
|
| Here we can modify the plugins used inside the admin panel.
|
| For detailed instructions you can look the plugins section here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Plugins-Configuration
|
*/
'plugins' => [
'Datatables' => [
'active' => true,
'files' => [
[
'type' => 'js',
'asset' => false,
'location' => '//cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js',
],
[
'type' => 'js',
'asset' => false,
'location' => '//cdn.datatables.net/1.10.19/js/dataTables.bootstrap4.min.js',
],
[
'type' => 'js',
'asset' => false,
'location' => '//cdn.datatables.net/v/dt/dt-1.13.4/date-1.4.1/r-2.4.1/sb-1.4.2/sp-2.1.2/datatables.min.js',
],
[
'type' => 'css',
'asset' => false,
'location' => '//cdn.datatables.net/1.10.19/css/dataTables.bootstrap4.min.css',
],
[
'type' => 'css',
'asset' => false,
'location' => '//cdn.datatables.net/v/dt/dt-1.13.4/date-1.4.1/r-2.4.1/sb-1.4.2/sp-2.1.2/datatables.min.css',
],
],
],
'DateRangePicker' => [
'active' => false,
'files' => [
[
'type' => 'js',
'asset' => false,
'location' => '//cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js',
],
[
'type' => 'css',
'asset' => false,
'location' => '//cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css',
],
],
],
'JqueryUi' =>[
'active' => false,
'files' =>[
[
'type' => 'js',
'asset' => false,
'location' => '//code.jquery.com/ui/1.13.1/jquery-ui.js',
/// https://code.jquery.com/ui/1.13.1/jquery-ui.js
],
[
'type' => 'css',
'asset' => false,
'location' => '//code.jquery.com/ui/1.13.1/themes/smoothness/jquery-ui.css',
],
],
],
'Select2' => [
'active' => true,
'files' => [
[
'type' => 'js',
'asset' => false,
'location' => '//cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js',
],
[
'type' => 'css',
'asset' => false,
'location' => '//cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.css',
],
],
],
'Chartjs' => [
'active' => false,
'files' => [
[
'type' => 'js',
'asset' => false,
'location' => '//cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.0/Chart.bundle.min.js',
],
],
],
'Sweetalert2' => [
'active' => false,
'files' => [
[
'type' => 'js',
'asset' => false,
'location' => '//cdn.jsdelivr.net/npm/sweetalert2@8',
],
],
],
'Pace' => [
'active' => false,
'files' => [
[
'type' => 'css',
'asset' => false,
'location' => '//cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/themes/blue/pace-theme-center-radar.min.css',
],
[
'type' => 'js',
'asset' => false,
'location' => '//cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/pace.min.js',
],
],
],
'Fullcalendar' => [
'active' => false,
'files' => [
[
'type' => 'css',
'asset' => true,
'location' => '/vendor/fullcalendar/main.min.css',
],
[
'type' => 'js',
'asset' => true,
'location' => '/vendor/fullcalendar/main.min.js',
],
[
'type' => 'js',
'asset' => true,
'location' => '/vendor/fullcalendar/locales-all.min.js',
],
],
],
'FontAwesome' =>[
'active' => true,
'files' =>[
[
'type' => 'css',
'asset' => false,
'location' => '//cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css',
],
],
],
'MomentJs' =>[
'active' => false,
'files' =>[
[
'type' => 'js',
'asset' => false,
'location' => '//cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment-with-locales.min.js',
],
],
],
],
/*
|--------------------------------------------------------------------------
| IFrame
|--------------------------------------------------------------------------
|
| Here we change the IFrame mode configuration. Note these changes will
| only apply to the view that extends and enable the IFrame mode.
|
| For detailed instructions you can look the iframe mode section here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/IFrame-Mode-Configuration
|
*/
'iframe' => [
'default_tab' => [
'url' => null,
'title' => null,
],
'buttons' => [
'close' => true,
'close_all' => true,
'close_all_other' => true,
'scroll_left' => true,
'scroll_right' => true,
'fullscreen' => true,
],
'options' => [
'loading_screen' => 1000,
'auto_show_new_tab' => true,
'use_navbar_items' => true,
],
],
/*
|--------------------------------------------------------------------------
| Livewire
|--------------------------------------------------------------------------
|
| Here we can enable the Livewire support.
|
| For detailed instructions you can look the livewire here:
| https://github.com/jeroennoten/Laravel-AdminLTE/wiki/Other-Configuration
|
*/
'livewire' => false,
];

View File

@@ -80,7 +80,7 @@ return [
|
*/
'locale' => 'en',
'locale' => 'it',
/*
|--------------------------------------------------------------------------
@@ -93,7 +93,7 @@ return [
|
*/
'fallback_locale' => 'en',
'fallback_locale' => 'it',
/*
|--------------------------------------------------------------------------
@@ -106,7 +106,7 @@ return [
|
*/
'faker_locale' => 'en_US',
'faker_locale' => 'it_IT',
/*
|--------------------------------------------------------------------------
@@ -161,6 +161,8 @@ return [
Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
Creativeorange\Gravatar\GravatarServiceProvider::class,
/*
* Package Service Providers...
@@ -174,6 +176,7 @@ return [
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
Spatie\Permission\PermissionServiceProvider::class,
],
@@ -230,6 +233,7 @@ return [
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
'FastExcel' => Rap2hpoutre\FastExcel\Facades\FastExcel::class,
'Gravatar' => Creativeorange\Gravatar\Facade\Gravatar::class,
],

View File

@@ -60,26 +60,14 @@ return [
*/
'providers' => [
'ldap' => [
'driver' => 'ldap', //'eloquent',
'model' => LdapRecord\Models\ActiveDirectory\User::class, //App\Models\User::class,
'rules' => [
App\Ldap\Rules\OnlyInGroupUsers::class,
],
'database' => [
'model' => App\Models\User::class,
'sync_passwords'=> false,
'sync_attributes' => [
'name' => 'displayname',
'email' => 'mail',
],
],
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
'users' => [
/*'users' => [
'driver' => 'database',
'table' => 'users',
],
],*/
],
/*

View File

@@ -74,6 +74,7 @@ return [
'links' => [
public_path('storage') => storage_path('app/public'),
public_path('contratti') => storage_path('app/Contratti'),
],
];

View File

@@ -0,0 +1,44 @@
<?php
return [
'default_auth_profile' => env('GOOGLE_CALENDAR_AUTH_PROFILE', 'service_account'),
'auth_profiles' => [
/*
* Authenticate using a service account.
*/
'service_account' => [
/*
* Path to the json file containing the credentials.
*/
'credentials_json' => storage_path('app/google-calendar/service-account-credentials.json'),
],
/*
* Authenticate with actual google user account.
*/
'oauth' => [
/*
* Path to the json file containing the oauth2 credentials.
*/
'credentials_json' => storage_path('app/google-calendar/oauth-credentials.json'),
/*
* Path to the json file containing the oauth2 token.
*/
'token_json' => storage_path('app/google-calendar/oauth-token.json'),
],
],
/*
* The id of the Google Calendar that will be used by default.
*/
'calendar_id' => env('GOOGLE_CALENDAR_ID'),
/*
* The email address of the user account to impersonate.
*/
'user_to_impersonate' => env('GOOGLE_CALENDAR_IMPERSONATE'),
];

161
config/permission.php Normal file
View File

@@ -0,0 +1,161 @@
<?php
return [
'models' => [
/*
* When using the "HasPermissions" trait from this package, we need to know which
* Eloquent model should be used to retrieve your permissions. Of course, it
* is often just the "Permission" model but you may use whatever you like.
*
* The model you want to use as a Permission model needs to implement the
* `Spatie\Permission\Contracts\Permission` contract.
*/
'permission' => Spatie\Permission\Models\Permission::class,
/*
* When using the "HasRoles" trait from this package, we need to know which
* Eloquent model should be used to retrieve your roles. Of course, it
* is often just the "Role" model but you may use whatever you like.
*
* The model you want to use as a Role model needs to implement the
* `Spatie\Permission\Contracts\Role` contract.
*/
'role' => Spatie\Permission\Models\Role::class,
],
'table_names' => [
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your roles. We have chosen a basic
* default value but you may easily change it to any table you like.
*/
'roles' => 'roles',
/*
* When using the "HasPermissions" trait from this package, we need to know which
* table should be used to retrieve your permissions. We have chosen a basic
* default value but you may easily change it to any table you like.
*/
'permissions' => 'permissions',
/*
* When using the "HasPermissions" trait from this package, we need to know which
* table should be used to retrieve your models permissions. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'model_has_permissions' => 'model_has_permissions',
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your models roles. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'model_has_roles' => 'model_has_roles',
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your roles permissions. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'role_has_permissions' => 'role_has_permissions',
],
'column_names' => [
/*
* Change this if you want to name the related pivots other than defaults
*/
'role_pivot_key' => null, //default 'role_id',
'permission_pivot_key' => null, //default 'permission_id',
/*
* Change this if you want to name the related model primary key other than
* `model_id`.
*
* For example, this would be nice if your primary keys are all UUIDs. In
* that case, name this `model_uuid`.
*/
'model_morph_key' => 'model_id',
/*
* Change this if you want to use the teams feature and your related model's
* foreign key is other than `team_id`.
*/
'team_foreign_key' => 'team_id',
],
/*
* When set to true, the method for checking permissions will be registered on the gate.
* Set this to false, if you want to implement custom logic for checking permissions.
*/
'register_permission_check_method' => true,
/*
* When set to true the package implements teams using the 'team_foreign_key'. If you want
* the migrations to register the 'team_foreign_key', you must set this to true
* before doing the migration. If you already did the migration then you must make a new
* migration to also add 'team_foreign_key' to 'roles', 'model_has_roles', and
* 'model_has_permissions'(view the latest version of package's migration file)
*/
'teams' => false,
/*
* When set to true, the required permission names are added to the exception
* message. This could be considered an information leak in some contexts, so
* the default setting is false here for optimum safety.
*/
'display_permission_in_exception' => false,
/*
* When set to true, the required role names are added to the exception
* message. This could be considered an information leak in some contexts, so
* the default setting is false here for optimum safety.
*/
'display_role_in_exception' => false,
/*
* By default wildcard permission lookups are disabled.
*/
'enable_wildcard_permission' => false,
'cache' => [
/*
* By default all permissions are cached for 24 hours to speed up performance.
* When permissions or roles are updated the cache is flushed automatically.
*/
'expiration_time' => \DateInterval::createFromDateString('24 hours'),
/*
* The cache key used to store all permissions.
*/
'key' => 'spatie.permission.cache',
/*
* You may optionally indicate a specific cache driver to use for permission and
* role caching using any of the `store` drivers listed in the cache.php config
* file. Using 'default' here means to use the `default` set in cache.php.
*/
'store' => 'default',
],
];

View File

@@ -16,9 +16,11 @@ class CreateDocumentisTable extends Migration
Schema::create('documentis', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->foreignId('movimenti_id');
$table->string('descrizione');
$table->string('filename');
// $table->foreignId('movimenti_id');
// Aggiunto per definire il nome della cartella
$table->string('path');
// $table->string('filename');
});
}

View File

@@ -1,29 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePermissionsTable extends Migration
{
public function up()
{
$permissionsTable = config('acl.tables.permissions', 'permissions');
Schema::create($permissionsTable, function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('guard_name');
$table->text('description')->nullable();
$table->softDeletes();
$table->timestamps();
$table->unique(['name', 'guard_name']);
});
}
public function down()
{
$tables = config('acl.tables');
Schema::dropIfExists($tables['permissions']);
}
}

View File

@@ -1,42 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateGroupsTable extends Migration
{
public function up()
{
$groupsTable = config('acl.tables.groups', 'groups');
$teams = config('acl.teams');
$columnNames = config('acl.column_names');
Schema::create($groupsTable, function (Blueprint $table) use ($teams, $columnNames) {
$table->bigIncrements('id');
if ($teams || config("acl.testing")) {
$table->unsignedBigInteger($columnNames['team_foreign_key'])->nullable();
$table->index($columnNames['team_foreign_key'], 'groups_team_foreign_key_index');
}
$table->string('name');
$table->string('guard_name');
$table->text('description')->nullable();
$table->softDeletes();
$table->timestamps();
if ($teams || config('acl.testing')) {
$table->unique([$columnNames['team_foreign_key'], 'name', 'guard_name']);
} else {
$table->unique(['name', 'guard_name']);
}
});
}
public function down()
{
$groupsTable = config('acl.tables.groups', 'groups');
Schema::dropIfExists($groupsTable);
}
}

View File

@@ -1,47 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Junges\ACL\AclRegistrar;
class CreateModelHasPermissionsTable extends Migration
{
public function up()
{
$columnNames = config('acl.column_names');
$modelHasPermissions = config('acl.tables.model_has_permissions', 'model_has_permissions');
$permissionsTable = config('acl.tables.permissions', 'permissions');
$teams = config('acl.teams');
Schema::create($modelHasPermissions, function (Blueprint $table) use ($permissionsTable, $columnNames, $teams) {
$table->unsignedBigInteger(AclRegistrar::$pivotPermission);
$table->string('model_type');
$table->unsignedBigInteger($columnNames['model_morph_key']);
$table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_id_model_type_index');
$table->foreign(AclRegistrar::$pivotPermission)
->references('id')
->on($permissionsTable)
->cascadeOnDelete();
if ($teams) {
$table->unsignedBigInteger($columnNames['team_foreign_key']);
$table->index($columnNames['team_foreign_key'], 'model_has_permissions_team_foreign_key_index');
$table->primary([$columnNames['team_foreign_key'], AclRegistrar::$pivotPermission, $columnNames['model_morph_key'], 'model_type'],
'model_has_permissions_permission_model_type_primary');
} else {
$table->primary([AclRegistrar::$pivotPermission, $columnNames['model_morph_key'], 'model_type'],
'model_has_permissions_permission_model_type_primary');
}
});
}
public function down()
{
$modelHasPermissionTable = config('acl.tables.model_has_permissions', 'model_has_permissions');
Schema::dropIfExists($modelHasPermissionTable);
}
}

View File

@@ -1,47 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Junges\ACL\AclRegistrar;
class CreateModelHasGroupsTable extends Migration
{
public function up()
{
$columnNames = config('acl.column_names');
$modelHasGroups = config('acl.tables.model_has_groups', 'model_has_groups');
$groupsTable = config('acl.tables.groups', 'groups');
$teams = config('acl.teams');
Schema::create($modelHasGroups, function (Blueprint $table) use ($groupsTable, $columnNames, $teams) {
$table->unsignedBigInteger(AclRegistrar::$pivotGroup);
$table->string('model_type');
$table->unsignedBigInteger($columnNames['model_morph_key']);
$table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_groups_model_id_model_type_index');
$table->foreign(AclRegistrar::$pivotGroup)
->references('id')
->on($groupsTable)
->cascadeOnDelete();
if ($teams) {
$table->unsignedBigInteger($columnNames['team_foreign_key']);
$table->index($columnNames['team_foreign_key'], 'model_has_groups_team_foreign_key_index');
$table->primary([$columnNames['team_foreign_key'], AclRegistrar::$pivotGroup, $columnNames['model_morph_key'], 'model_type'],
'model_has_groups_group_model_type_primary');
} else {
$table->primary([AclRegistrar::$pivotGroup, $columnNames['model_morph_key'], 'model_type'],
'model_has_groups_group_model_type_primary');
}
});
}
public function down()
{
$modelHasGroupsTable = config('acl.tables.model_has_groups', 'model_has_groups');
Schema::dropIfExists($modelHasGroupsTable);
}
}

View File

@@ -1,40 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Junges\ACL\AclRegistrar;
class CreateGroupHasPermissionsTable extends Migration
{
public function up()
{
$groupHasPermissionTable = config('acl.tables.group_has_permissions', 'group_has_permissions');
$groupsTable = config('acl.tables.groups', 'groups');
$permissionsTable = config('acl.tables.permissions', 'permissions');
Schema::create($groupHasPermissionTable, function (Blueprint $table) use ($groupsTable, $permissionsTable) {
$table->unsignedBigInteger(AclRegistrar::$pivotPermission);
$table->unsignedBigInteger(AclRegistrar::$pivotGroup);
$table->foreign(AclRegistrar::$pivotPermission)
->references('id')
->on($permissionsTable)
->cascadeOnDelete();
$table->foreign(AclRegistrar::$pivotGroup)
->references('id')
->on($groupsTable)
->cascadeOnDelete();
$table->primary([AclRegistrar::$pivotPermission, AclRegistrar::$pivotGroup], 'group_has_permission_permission_id_group_id_primary');
});
}
public function down()
{
$groupHasPermissionsTable = config('acl.tables.group_has_permissions', 'group_has_permissions');
Schema::dropIfExists($groupHasPermissionsTable);
}
}

View File

@@ -0,0 +1,141 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Spatie\Permission\PermissionRegistrar;
class CreatePermissionTables extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$tableNames = config('permission.table_names');
$columnNames = config('permission.column_names');
$teams = config('permission.teams');
if (empty($tableNames)) {
throw new \Exception('Error: config/permission.php not loaded. Run [php artisan config:clear] and try again.');
}
if ($teams && empty($columnNames['team_foreign_key'] ?? null)) {
throw new \Exception('Error: team_foreign_key on config/permission.php not loaded. Run [php artisan config:clear] and try again.');
}
Schema::create($tableNames['permissions'], function (Blueprint $table) {
$table->bigIncrements('id'); // permission id
$table->string('name'); // For MySQL 8.0 use string('name', 125);
$table->string('guard_name'); // For MySQL 8.0 use string('guard_name', 125);
$table->timestamps();
$table->unique(['name', 'guard_name']);
});
Schema::create($tableNames['roles'], function (Blueprint $table) use ($teams, $columnNames) {
$table->bigIncrements('id'); // role id
if ($teams || config('permission.testing')) { // permission.testing is a fix for sqlite testing
$table->unsignedBigInteger($columnNames['team_foreign_key'])->nullable();
$table->index($columnNames['team_foreign_key'], 'roles_team_foreign_key_index');
}
$table->string('name'); // For MySQL 8.0 use string('name', 125);
$table->string('guard_name'); // For MySQL 8.0 use string('guard_name', 125);
$table->timestamps();
if ($teams || config('permission.testing')) {
$table->unique([$columnNames['team_foreign_key'], 'name', 'guard_name']);
} else {
$table->unique(['name', 'guard_name']);
}
});
Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames, $teams) {
$table->unsignedBigInteger(PermissionRegistrar::$pivotPermission);
$table->string('model_type');
$table->unsignedBigInteger($columnNames['model_morph_key']);
$table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_model_id_model_type_index');
$table->foreign(PermissionRegistrar::$pivotPermission)
->references('id') // permission id
->on($tableNames['permissions'])
->onDelete('cascade');
if ($teams) {
$table->unsignedBigInteger($columnNames['team_foreign_key']);
$table->index($columnNames['team_foreign_key'], 'model_has_permissions_team_foreign_key_index');
$table->primary([$columnNames['team_foreign_key'], PermissionRegistrar::$pivotPermission, $columnNames['model_morph_key'], 'model_type'],
'model_has_permissions_permission_model_type_primary');
} else {
$table->primary([PermissionRegistrar::$pivotPermission, $columnNames['model_morph_key'], 'model_type'],
'model_has_permissions_permission_model_type_primary');
}
});
Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames, $teams) {
$table->unsignedBigInteger(PermissionRegistrar::$pivotRole);
$table->string('model_type');
$table->unsignedBigInteger($columnNames['model_morph_key']);
$table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_roles_model_id_model_type_index');
$table->foreign(PermissionRegistrar::$pivotRole)
->references('id') // role id
->on($tableNames['roles'])
->onDelete('cascade');
if ($teams) {
$table->unsignedBigInteger($columnNames['team_foreign_key']);
$table->index($columnNames['team_foreign_key'], 'model_has_roles_team_foreign_key_index');
$table->primary([$columnNames['team_foreign_key'], PermissionRegistrar::$pivotRole, $columnNames['model_morph_key'], 'model_type'],
'model_has_roles_role_model_type_primary');
} else {
$table->primary([PermissionRegistrar::$pivotRole, $columnNames['model_morph_key'], 'model_type'],
'model_has_roles_role_model_type_primary');
}
});
Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames) {
$table->unsignedBigInteger(PermissionRegistrar::$pivotPermission);
$table->unsignedBigInteger(PermissionRegistrar::$pivotRole);
$table->foreign(PermissionRegistrar::$pivotPermission)
->references('id') // permission id
->on($tableNames['permissions'])
->onDelete('cascade');
$table->foreign(PermissionRegistrar::$pivotRole)
->references('id') // role id
->on($tableNames['roles'])
->onDelete('cascade');
$table->primary([PermissionRegistrar::$pivotPermission, PermissionRegistrar::$pivotRole], 'role_has_permissions_permission_id_role_id_primary');
});
app('cache')
->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null)
->forget(config('permission.cache.key'));
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
$tableNames = config('permission.table_names');
if (empty($tableNames)) {
throw new \Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.');
}
Schema::drop($tableNames['role_has_permissions']);
Schema::drop($tableNames['model_has_roles']);
Schema::drop($tableNames['model_has_permissions']);
Schema::drop($tableNames['roles']);
Schema::drop($tableNames['permissions']);
}
}

View File

@@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class ColumnUsersRoles extends Migration
class ColumnsAnagrafica extends Migration
{
/**
* Run the migrations.
@@ -13,11 +13,14 @@ class ColumnUsersRoles extends Migration
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
//
$table->softDeletes();
$table->string('user_role',25)->default('user')->nullable(false);
});
/*Schema::table('anagraficas', function (Blueprint $table) {
/* //
// $table->longText('ang_indirizzo');
$table->string('ang_CAP');
$table->string('ang_Citta');
$table->string('ang_Provincia');
$table->string('ang_telefono');
});*/
}
/**
@@ -27,10 +30,8 @@ class ColumnUsersRoles extends Migration
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
Schema::table('anagraficas', function (Blueprint $table) {
//
$table->dropColumn('user_role');
$table->dropSoftDeletes();
});
}
}

View File

@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateRivistasTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('rivistas', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('rivistas');
}
}

View File

@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateAssociazionesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('associaziones', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('associaziones');
}
}

View File

@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateGruppisTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('gruppis', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('gruppis');
}
}

View File

@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class UpdateCategoriesAddingSpesaEntrata extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
//
Schema::table('categories', function (Blueprint $table) {
$table->smallInteger('cat_entrata')->after('cat_name')->default(0);
$table->smallInteger('cat_uscita')->after('cat_entrata')->default(0);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
Schema::table('categories', function (Blueprint $table) {
$table->dropColumn('cat_entrata');
$table->dropColumn('cat_uscita');
});
}
}

View File

@@ -0,0 +1,39 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTasksTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('titolo',255);
$table->longText('descrizione')->nullable();
$table->bigInteger('creato_da');
$table->bigInteger('assegnato_a');
$table->date('creato_il');
$table->date('termine_il');
$table->date('chiuso_il');
$table->enum('stato', ['Aperto', 'Chiuso'])->nullable()->default('Aperto');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('tasks');
}
}

View File

@@ -0,0 +1,42 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class Subtask extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
//
Schema::create('subtasks', function (Blueprint $table) {
$table->id();
$table->timestamps();
// $table->bigInteger('tasks_id');
$table->foreignId('tasks_id')->onDelete('cascade');
$table->string('titolo',255);
$table->longText('descrizione')->nullable();
$table->bigInteger('creato_da');
$table->bigInteger('assegnato_a');
$table->date('creato_il');
$table->date('termine_il');
$table->date('chiuso_il');
$table->enum('stato', ['Aperto', 'Chiuso'])->nullable()->default('Aperto');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}

View File

@@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateAvvisosTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('avvisos', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->longtext('avviso');
$table->date('creato_il')->nullable()->default(date('Y-m-d'));
$table->bigInteger('creato_da');
$table->boolean('urgente')->nullable()->default(false);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('avvisos');
}
}

View File

@@ -0,0 +1,42 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateContrattisTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('contrattis', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('numero', 100)->nullable();
$table->string('nome', 100);
$table->date('datainizio');
$table->date('datatermine');
$table->string('fornitore', 100)->default('text');
$table->string('tipo', 100)->default('utenze');
$table->decimal('importo', 5, 2);
$table->date('scadenzapagamento');
$table->string('stato', 100)->default('attivo');
$table->longText('note')->nullable();
$table->string('filename',255)->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('contrattis');
}
}

View File

@@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateGenDocsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('gen_docs', function (Blueprint $table) {
// Documenti generali definibili agganciabili a diverse entità
$table->id();
$table->timestamps();
$table->integer('entity')->unsigned();
$table->bigInteger('entity_id');
$table->string('filename', 255);
$table->longText('descrizione');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('gen_docs');
}
}

View File

@@ -16,7 +16,23 @@ class CategorieSeeder extends Seeder
{
// Inserisce le categorie necessarie
DB::table('categories')->insert(
['cat_name'=>'Automobili']
[
'cat_name'=>'Automobili',
'cat_uscita'=>1,
'cat_entrata'=>0,
]
);
DB::table('categories')->insert(
[
'cat_name'=>'Stipendio',
'cat_uscita'=>0,
'cat_entrata'=>1]
);
DB::table('categories')->insert(
[
'cat_name'=>'Utenze',
'cat_uscita'=>1,
'cat_entrata'=>0]
);
}
}

View File

@@ -18,6 +18,7 @@ class DatabaseSeeder extends Seeder
UserSeeder::class,
TagSeeder::class,
CategorieSeeder::class,
RoleSeeder::class,
]);
}
}

View File

@@ -0,0 +1,44 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\Documenti as Doc;
class Documenti extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
Doc::create([
'id'=>0,
'descrizione' => 'Movimenti',
'path' => 'Movimenti',
],
[
'id' => 1,
'descrizione' => 'Contratti',
'path' => 'Contratti',
],
[
'id' => 2,
'descrizione' => 'Automobili',
'path' => 'Automobili',
],
[
'id' => 3,
'descrizione' => 'Progetti',
'path' => 'Progetti',
],
[
'id' => 4,
'descrizione' => 'Documenti',
'path' => 'Documenti',
]);
}
}

View File

@@ -0,0 +1,84 @@
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
use Spatie\Permission\PermissionRegistrar;
class OnlySeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// Role Creation
$role_admin = Role::create([
'name' => 'admin'
]);
$role_user = Role::create([
'name' => 'user'
]);
$role_guest = Role::create([
'name' => 'guest'
]);
// Permission Creation
Permission::create([
'name' => 'conti'
]);
Permission::create([
'name' => 'consumi'
]);
Permission::create([
'name' => 'automobili'
]);
Permission::create([
'name' => 'contatti'
]);
Permission::create([
'name' => 'affitti'
]);
Permission::create([
'name' => 'progetti'
]);
Permission::create([
'name' => 'amministrazione'
]);
// Assegnazione permessi al ruolo user
$role_user->givePermissionTo('affitti');
$role_user->givePermissionTo('automobili');
$role_user->givePermissionTo('contatti');
$role_user->givePermissionTo('consumi');
$role_user->givePermissionTo('conti');
$role_user->givePermissionTo('progetti');
// Assegnazione permessi al ruolo guest
$role_guest->givePermissionTo('affitti');
// Il ruolo admin ha già tutti i permessi da middleware
$admin = User::create([
'name'=>'Amministratore',
'email'=>'admin@localhost.local',
'password'=>Hash::make('admin'),
])->assignRole('admin');
$user = User::create([
'name'=>'Utente',
'email'=>'user@localhost.local',
'password'=>Hash::make('user'),
])->assignRole('user');
$guest = User::create([
'name'=>'Guest',
'email'=>'guest@localhost.local',
'password'=>Hash::make('guest'),
])->assignRole('guest');
}
}

View File

@@ -0,0 +1,83 @@
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
use Spatie\Permission\PermissionRegistrar;
class RoleSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// Role Creation
$role_admin = Role::create([
'name' => 'admin'
]);
$role_user = Role::create([
'name' => 'user'
]);
$role_guest = Role::create([
'name' => 'guest'
]);
// Permission Creation
Permission::create([
'name' => 'conti'
]);
Permission::create([
'name' => 'consumi'
]);
Permission::create([
'name' => 'automobili'
]);
Permission::create([
'name' => 'contatti'
]);
Permission::create([
'name' => 'affitti'
]);
Permission::create([
'name' => 'progetti'
]);
Permission::create([
'name' => 'amministrazione'
]);
// Assegnazione permessi al ruolo user
$role_user->givePermissionTo('affitti');
$role_user->givePermissionTo('automobili');
$role_user->givePermissionTo('contatti');
$role_user->givePermissionTo('consumi');
$role_user->givePermissionTo('conti');
$role_user->givePermissionTo('progetti');
// Assegnazione permessi al ruolo guest
$role_guest->givePermissionTo('affitti');
$admin = User::create([
'name'=>'Amministratore',
'email'=>'admin@localhost.local',
'password'=>Hash::make('password'),
])->assignRole($role_admin);
$user = User::create([
'name'=>'Utente',
'email'=>'user@localhost.local',
'password'=>Hash::make('password'),
])->assignRole($role_user);
$guest = User::create([
'name'=>'Guest',
'email'=>'guest@localhost.local',
'password'=>Hash::make('password'),
])->assignRole($role_guest);
}
}

View File

@@ -18,5 +18,8 @@ class TagSeeder extends Seeder
DB::table('tags')->insert(
['tag_name'=>'System']
);
DB::table('tags')->insert(
['tag_name'=>'da verificare']
);
}
}

View File

@@ -20,9 +20,11 @@ class UserSeeder extends Seeder
DB::table('users')->insert(
[
'name'=>'SystemUser',
'email'=>env('SYSADMIN_MAIL'),
'email'=>'system@localhost.local',
'password'=>Hash::make(Str::random(16)),
]
);
}
}

12291
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -21,6 +21,7 @@
"sass-loader": "^11.0.1"
},
"dependencies": {
"@fullcalendar/google-calendar": "^6.1.9",
"bootstrap-select": "^1.13.18",
"fullcalendar": "^5.10.2"
}

1
public/contratti Symbolic link
View File

@@ -0,0 +1 @@
/var/www/html/bubofamily/storage/app/Contratti

152
public/css/Blog-Template.css vendored Normal file
View File

@@ -0,0 +1,152 @@
.u-section-1 .u-sheet-1 {
min-height: 561px;
}
.u-section-1 .u-repeater-1 {
margin-top: 60px;
margin-bottom: 60px;
min-height: 441px;
grid-template-columns: calc(33.3333% - 15px) calc(33.3333% - 15px) calc(33.3333% - 15px);
height: auto;
grid-gap: 22px;
}
.u-section-1 .u-repeater-item-1 {
background-image: none;
}
.u-section-1 .u-container-layout-1 {
padding: 30px 20px;
}
.u-section-1 .u-text-1 {
margin-top: 0;
margin-bottom: 0;
}
.u-section-1 .u-image-1 {
height: 222px;
margin-top: 17px;
margin-bottom: 0;
}
.u-section-1 .u-text-2 {
margin-top: 20px;
margin-bottom: 0;
}
.u-section-1 .u-btn-1 {
background-image: none;
border-style: none none solid;
margin: 17px auto 0 0;
padding: 0;
}
.u-section-1 .u-container-layout-2 {
padding: 30px 20px;
}
.u-section-1 .u-text-3 {
margin-top: 0;
margin-bottom: 0;
}
.u-section-1 .u-image-2 {
height: 222px;
margin-top: 17px;
margin-bottom: 0;
}
.u-section-1 .u-text-4 {
margin-top: 20px;
margin-bottom: 0;
}
.u-section-1 .u-btn-2 {
background-image: none;
border-style: none none solid;
margin: 17px auto 0 0;
padding: 0;
}
.u-section-1 .u-container-layout-3 {
padding: 30px 20px;
}
.u-section-1 .u-text-5 {
margin-top: 0;
margin-bottom: 0;
}
.u-section-1 .u-image-3 {
height: 222px;
margin-top: 17px;
margin-bottom: 0;
}
.u-section-1 .u-text-6 {
margin-top: 20px;
margin-bottom: 0;
}
.u-section-1 .u-btn-3 {
background-image: none;
border-style: none none solid;
margin: 17px auto 0 0;
padding: 0;
}
@media (max-width: 1199px) {
.u-section-1 .u-sheet-1 {
min-height: 484px;
}
.u-section-1 .u-repeater-1 {
min-height: 364px;
grid-template-columns: repeat(3, calc(33.333333333333336% - 15px));
}
}
@media (max-width: 991px) {
.u-section-1 .u-sheet-1 {
min-height: 956px;
}
.u-section-1 .u-repeater-1 {
min-height: 836px;
grid-template-columns: repeat(2, calc(50% - 11.25px));
}
}
@media (max-width: 767px) {
.u-section-1 .u-repeater-1 {
grid-template-columns: 100%;
}
.u-section-1 .u-container-layout-1 {
padding-left: 10px;
padding-right: 10px;
}
.u-section-1 .u-image-1 {
height: 278px;
}
.u-section-1 .u-container-layout-2 {
padding-left: 10px;
padding-right: 10px;
}
.u-section-1 .u-image-2 {
height: 278px;
}
.u-section-1 .u-container-layout-3 {
padding-left: 10px;
padding-right: 10px;
}
.u-section-1 .u-image-3 {
height: 278px;
}
}

186
public/css/Page-2.css vendored Normal file
View File

@@ -0,0 +1,186 @@
.u-section-1 {
background-image: url("/images/aw.jpg");
background-position: 50% 50%;
}
.u-section-1 .u-sheet-1 {
min-height: 500px;
}
.u-section-1 .u-layout-wrap-1 {
width: 1140px;
margin: 0 auto;
}
.u-section-1 .u-image-1 {
min-height: 691px;
background-image: url("/images/s-min.jpg");
background-position: 50% 50%;
}
.u-section-1 .u-container-layout-1 {
padding: 30px;
}
.u-section-1 .u-layout-cell-2 {
min-height: 691px;
}
.u-section-1 .u-container-layout-2 {
padding: 30px 36px;
}
.u-section-1 .u-text-1 {
font-size: 1.25rem;
font-weight: 700;
line-height: 1.2;
background-image: none;
text-transform: uppercase;
letter-spacing: 5px;
font-family: "PT Sans", sans-serif;
margin: 110px 28px 0 0;
}
.u-section-1 .u-text-2 {
font-size: 4.5rem;
text-transform: uppercase;
letter-spacing: normal;
font-weight: 700;
font-family: "Roboto Condensed", sans-serif;
margin: 0 28px 0 0;
}
.u-section-1 .u-text-3 {
font-size: 1.125rem;
font-style: italic;
margin: 20px 14px 0 0;
}
.u-section-1 .u-text-4 {
margin: 18px auto 0 14px;
}
.u-section-1 .u-btn-1 {
border-style: solid;
padding: 0;
}
.u-section-1 .u-btn-2 {
background-image: none;
text-transform: uppercase;
letter-spacing: 3px;
font-weight: 700;
font-size: 1rem;
border-style: none;
margin: 28px auto 0 0;
padding: 10px 52px 10px 51px;
}
@media (max-width: 1199px) {
.u-section-1 .u-sheet-1 {
min-height: 291px;
}
.u-section-1 .u-layout-wrap-1 {
width: 940px;
}
.u-section-1 .u-image-1 {
min-height: 570px;
}
.u-section-1 .u-layout-cell-2 {
min-height: 570px;
}
.u-section-1 .u-text-1 {
margin-right: 0;
}
.u-section-1 .u-text-2 {
font-size: 3.75rem;
margin-right: 0;
}
.u-section-1 .u-text-3 {
margin-right: 0;
}
}
@media (max-width: 991px) {
.u-section-1 .u-sheet-1 {
min-height: 158px;
}
.u-section-1 .u-layout-wrap-1 {
width: 720px;
}
.u-section-1 .u-image-1 {
min-height: 437px;
}
.u-section-1 .u-layout-cell-2 {
min-height: 100px;
}
.u-section-1 .u-container-layout-2 {
padding-left: 30px;
padding-right: 30px;
}
.u-section-1 .u-text-2 {
font-size: 3rem;
}
}
@media (max-width: 767px) {
.u-section-1 .u-sheet-1 {
min-height: 477px;
}
.u-section-1 .u-layout-wrap-1 {
width: 540px;
}
.u-section-1 .u-image-1 {
min-height: 656px;
order: 1;
}
.u-section-1 .u-container-layout-1 {
padding-left: 10px;
padding-right: 10px;
}
.u-section-1 .u-layout-cell-2 {
order: 0;
}
.u-section-1 .u-container-layout-2 {
padding-left: 10px;
padding-right: 10px;
}
.u-section-1 .u-text-2 {
font-size: 4.5rem;
}
}
@media (max-width: 575px) {
.u-section-1 .u-sheet-1 {
min-height: 234px;
}
.u-section-1 .u-layout-wrap-1 {
width: 340px;
}
.u-section-1 .u-image-1 {
min-height: 413px;
}
.u-section-1 .u-text-2 {
font-size: 2.25rem;
}
}

87
public/css/Post-Template.css vendored Normal file
View File

@@ -0,0 +1,87 @@
.u-section-1 .u-sheet-1 {
min-height: 835px;
}
.u-section-1 .u-post-details-1 {
min-height: 375px;
margin-top: 60px;
margin-bottom: -10px;
}
.u-section-1 .u-container-layout-1 {
padding: 30px;
}
.u-section-1 .u-image-1 {
height: 486px;
margin-top: 0;
margin-bottom: 0;
margin-left: 0;
}
.u-section-1 .u-text-1 {
margin-top: 20px;
margin-bottom: 0;
margin-left: 0;
}
.u-section-1 .u-metadata-1 {
margin-top: 30px;
margin-bottom: 0;
margin-left: 0;
}
.u-section-1 .u-text-2 {
margin-bottom: 0;
margin-top: 20px;
margin-left: 0;
}
@media (max-width: 1199px) {
.u-section-1 .u-image-1 {
margin-left: initial;
}
}
@media (max-width: 991px) {
.u-section-1 .u-sheet-1 {
min-height: 782px;
}
.u-section-1 .u-post-details-1 {
margin-bottom: 60px;
}
.u-section-1 .u-image-1 {
height: 423px;
margin-left: initial;
}
}
@media (max-width: 767px) {
.u-section-1 .u-sheet-1 {
min-height: 722px;
}
.u-section-1 .u-container-layout-1 {
padding-left: 10px;
padding-right: 10px;
}
.u-section-1 .u-image-1 {
height: 354px;
margin-top: 9px;
margin-left: initial;
}
}
@media (max-width: 575px) {
.u-section-1 .u-sheet-1 {
min-height: 656px;
}
.u-section-1 .u-image-1 {
height: 275px;
margin-left: initial;
}
}

48
public/css/calendaricon.css vendored Normal file
View File

@@ -0,0 +1,48 @@
time.icon
{
font-size: 0.5em; /* change icon size */
display: block;
position: relative;
width: 7em;
height: 7em;
background-color: #fff;
border-radius: 0.6em;
box-shadow: 0 1px 0 #bdbdbd, 0 2px 0 #fff, 0 3px 0 #bdbdbd, 0 4px 0 #fff, 0 5px 0 #bdbdbd, 0 0 0 1px #bdbdbd;
overflow: hidden;
}
time.icon *
{
display: block;
width: 100%;
font-size: 1em;
font-weight: bold;
font-style: normal;
text-align: center;
}
time.icon strong
{
position: absolute;
top: 0;
padding: 0.4em 0;
color: #fff;
background-color: #fd9f1b;
border-bottom: 1px dashed #f37302;
box-shadow: 0 2px 0 #fd9f1b;
}
time.icon em
{
position: absolute;
bottom: 0.3em;
color: #fd9f1b;
}
time.icon span
{
font-size: 2.8em;
letter-spacing: -0.05em;
padding-top: 0.8em;
color: #2f2f2f;
}

41239
public/css/nicepage.css vendored Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -0,0 +1,165 @@
Fonticons, Inc. (https://fontawesome.com)
--------------------------------------------------------------------------------
Font Awesome Free License
Font Awesome Free is free, open source, and GPL friendly. You can use it for
commercial projects, open source projects, or really almost whatever you want.
Full Font Awesome Free license: https://fontawesome.com/license/free.
--------------------------------------------------------------------------------
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
The Font Awesome Free download is licensed under a Creative Commons
Attribution 4.0 International License and applies to all icons packaged
as SVG and JS file types.
--------------------------------------------------------------------------------
# Fonts: SIL OFL 1.1 License
In the Font Awesome Free download, the SIL OFL license applies to all icons
packaged as web and desktop font files.
Copyright (c) 2023 Fonticons, Inc. (https://fontawesome.com)
with Reserved Font Name: "Font Awesome".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
SIL OPEN FONT LICENSE
Version 1.1 - 26 February 2007
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting — in part or in whole — any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
--------------------------------------------------------------------------------
# Code: MIT License (https://opensource.org/licenses/MIT)
In the Font Awesome Free download, the MIT license applies to all non-font and
non-icon files.
Copyright 2023 Fonticons, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in the
Software without restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so, subject to the
following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
# Attribution
Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
Awesome Free files already contain embedded comments with sufficient
attribution, so you shouldn't need to do anything additional when using these
files normally.
We've kept attribution comments terse, so we ask that you do not actively work
to remove them from files, especially code. They're a great way for folks to
learn about Font Awesome.
--------------------------------------------------------------------------------
# Brand Icons
All brand icons are trademarks of their respective owners. The use of these
trademarks does not indicate endorsement of the trademark holder by Font
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
to represent the company, product, or service to which they refer.**

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,19 @@
/*!
* Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2023 Fonticons, Inc.
*/
:root, :host {
--fa-style-family-classic: 'Font Awesome 6 Free';
--fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; }
@font-face {
font-family: 'Font Awesome 6 Free';
font-style: normal;
font-weight: 400;
font-display: block;
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
.far,
.fa-regular {
font-weight: 400; }

View File

@@ -0,0 +1,6 @@
/*!
* Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2023 Fonticons, Inc.
*/
:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}

View File

@@ -0,0 +1,19 @@
/*!
* Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2023 Fonticons, Inc.
*/
:root, :host {
--fa-style-family-classic: 'Font Awesome 6 Free';
--fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; }
@font-face {
font-family: 'Font Awesome 6 Free';
font-style: normal;
font-weight: 900;
font-display: block;
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
.fas,
.fa-solid {
font-weight: 900; }

View File

@@ -0,0 +1,6 @@
/*!
* Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2023 Fonticons, Inc.
*/
:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}

View File

@@ -0,0 +1,639 @@
/*!
* Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2023 Fonticons, Inc.
*/
:root, :host {
--fa-font-solid: normal 900 1em/1 'Font Awesome 6 Solid';
--fa-font-regular: normal 400 1em/1 'Font Awesome 6 Regular';
--fa-font-light: normal 300 1em/1 'Font Awesome 6 Light';
--fa-font-thin: normal 100 1em/1 'Font Awesome 6 Thin';
--fa-font-duotone: normal 900 1em/1 'Font Awesome 6 Duotone';
--fa-font-sharp-solid: normal 900 1em/1 'Font Awesome 6 Sharp';
--fa-font-sharp-regular: normal 400 1em/1 'Font Awesome 6 Sharp';
--fa-font-sharp-light: normal 300 1em/1 'Font Awesome 6 Sharp';
--fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; }
svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {
overflow: visible;
box-sizing: content-box; }
.svg-inline--fa {
display: var(--fa-display, inline-block);
height: 1em;
overflow: visible;
vertical-align: -.125em; }
.svg-inline--fa.fa-2xs {
vertical-align: 0.1em; }
.svg-inline--fa.fa-xs {
vertical-align: 0em; }
.svg-inline--fa.fa-sm {
vertical-align: -0.07143em; }
.svg-inline--fa.fa-lg {
vertical-align: -0.2em; }
.svg-inline--fa.fa-xl {
vertical-align: -0.25em; }
.svg-inline--fa.fa-2xl {
vertical-align: -0.3125em; }
.svg-inline--fa.fa-pull-left {
margin-right: var(--fa-pull-margin, 0.3em);
width: auto; }
.svg-inline--fa.fa-pull-right {
margin-left: var(--fa-pull-margin, 0.3em);
width: auto; }
.svg-inline--fa.fa-li {
width: var(--fa-li-width, 2em);
top: 0.25em; }
.svg-inline--fa.fa-fw {
width: var(--fa-fw-width, 1.25em); }
.fa-layers svg.svg-inline--fa {
bottom: 0;
left: 0;
margin: auto;
position: absolute;
right: 0;
top: 0; }
.fa-layers-text, .fa-layers-counter {
display: inline-block;
position: absolute;
text-align: center; }
.fa-layers {
display: inline-block;
height: 1em;
position: relative;
text-align: center;
vertical-align: -.125em;
width: 1em; }
.fa-layers svg.svg-inline--fa {
-webkit-transform-origin: center center;
transform-origin: center center; }
.fa-layers-text {
left: 50%;
top: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
-webkit-transform-origin: center center;
transform-origin: center center; }
.fa-layers-counter {
background-color: var(--fa-counter-background-color, #ff253a);
border-radius: var(--fa-counter-border-radius, 1em);
box-sizing: border-box;
color: var(--fa-inverse, #fff);
line-height: var(--fa-counter-line-height, 1);
max-width: var(--fa-counter-max-width, 5em);
min-width: var(--fa-counter-min-width, 1.5em);
overflow: hidden;
padding: var(--fa-counter-padding, 0.25em 0.5em);
right: var(--fa-right, 0);
text-overflow: ellipsis;
top: var(--fa-top, 0);
-webkit-transform: scale(var(--fa-counter-scale, 0.25));
transform: scale(var(--fa-counter-scale, 0.25));
-webkit-transform-origin: top right;
transform-origin: top right; }
.fa-layers-bottom-right {
bottom: var(--fa-bottom, 0);
right: var(--fa-right, 0);
top: auto;
-webkit-transform: scale(var(--fa-layers-scale, 0.25));
transform: scale(var(--fa-layers-scale, 0.25));
-webkit-transform-origin: bottom right;
transform-origin: bottom right; }
.fa-layers-bottom-left {
bottom: var(--fa-bottom, 0);
left: var(--fa-left, 0);
right: auto;
top: auto;
-webkit-transform: scale(var(--fa-layers-scale, 0.25));
transform: scale(var(--fa-layers-scale, 0.25));
-webkit-transform-origin: bottom left;
transform-origin: bottom left; }
.fa-layers-top-right {
top: var(--fa-top, 0);
right: var(--fa-right, 0);
-webkit-transform: scale(var(--fa-layers-scale, 0.25));
transform: scale(var(--fa-layers-scale, 0.25));
-webkit-transform-origin: top right;
transform-origin: top right; }
.fa-layers-top-left {
left: var(--fa-left, 0);
right: auto;
top: var(--fa-top, 0);
-webkit-transform: scale(var(--fa-layers-scale, 0.25));
transform: scale(var(--fa-layers-scale, 0.25));
-webkit-transform-origin: top left;
transform-origin: top left; }
.fa-1x {
font-size: 1em; }
.fa-2x {
font-size: 2em; }
.fa-3x {
font-size: 3em; }
.fa-4x {
font-size: 4em; }
.fa-5x {
font-size: 5em; }
.fa-6x {
font-size: 6em; }
.fa-7x {
font-size: 7em; }
.fa-8x {
font-size: 8em; }
.fa-9x {
font-size: 9em; }
.fa-10x {
font-size: 10em; }
.fa-2xs {
font-size: 0.625em;
line-height: 0.1em;
vertical-align: 0.225em; }
.fa-xs {
font-size: 0.75em;
line-height: 0.08333em;
vertical-align: 0.125em; }
.fa-sm {
font-size: 0.875em;
line-height: 0.07143em;
vertical-align: 0.05357em; }
.fa-lg {
font-size: 1.25em;
line-height: 0.05em;
vertical-align: -0.075em; }
.fa-xl {
font-size: 1.5em;
line-height: 0.04167em;
vertical-align: -0.125em; }
.fa-2xl {
font-size: 2em;
line-height: 0.03125em;
vertical-align: -0.1875em; }
.fa-fw {
text-align: center;
width: 1.25em; }
.fa-ul {
list-style-type: none;
margin-left: var(--fa-li-margin, 2.5em);
padding-left: 0; }
.fa-ul > li {
position: relative; }
.fa-li {
left: calc(var(--fa-li-width, 2em) * -1);
position: absolute;
text-align: center;
width: var(--fa-li-width, 2em);
line-height: inherit; }
.fa-border {
border-color: var(--fa-border-color, #eee);
border-radius: var(--fa-border-radius, 0.1em);
border-style: var(--fa-border-style, solid);
border-width: var(--fa-border-width, 0.08em);
padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); }
.fa-pull-left {
float: left;
margin-right: var(--fa-pull-margin, 0.3em); }
.fa-pull-right {
float: right;
margin-left: var(--fa-pull-margin, 0.3em); }
.fa-beat {
-webkit-animation-name: fa-beat;
animation-name: fa-beat;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
animation-timing-function: var(--fa-animation-timing, ease-in-out); }
.fa-bounce {
-webkit-animation-name: fa-bounce;
animation-name: fa-bounce;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); }
.fa-fade {
-webkit-animation-name: fa-fade;
animation-name: fa-fade;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
.fa-beat-fade {
-webkit-animation-name: fa-beat-fade;
animation-name: fa-beat-fade;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
.fa-flip {
-webkit-animation-name: fa-flip;
animation-name: fa-flip;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
animation-timing-function: var(--fa-animation-timing, ease-in-out); }
.fa-shake {
-webkit-animation-name: fa-shake;
animation-name: fa-shake;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, linear);
animation-timing-function: var(--fa-animation-timing, linear); }
.fa-spin {
-webkit-animation-name: fa-spin;
animation-name: fa-spin;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 2s);
animation-duration: var(--fa-animation-duration, 2s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, linear);
animation-timing-function: var(--fa-animation-timing, linear); }
.fa-spin-reverse {
--fa-animation-direction: reverse; }
.fa-pulse,
.fa-spin-pulse {
-webkit-animation-name: fa-spin;
animation-name: fa-spin;
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, steps(8));
animation-timing-function: var(--fa-animation-timing, steps(8)); }
@media (prefers-reduced-motion: reduce) {
.fa-beat,
.fa-bounce,
.fa-fade,
.fa-beat-fade,
.fa-flip,
.fa-pulse,
.fa-shake,
.fa-spin,
.fa-spin-pulse {
-webkit-animation-delay: -1ms;
animation-delay: -1ms;
-webkit-animation-duration: 1ms;
animation-duration: 1ms;
-webkit-animation-iteration-count: 1;
animation-iteration-count: 1;
-webkit-transition-delay: 0s;
transition-delay: 0s;
-webkit-transition-duration: 0s;
transition-duration: 0s; } }
@-webkit-keyframes fa-beat {
0%, 90% {
-webkit-transform: scale(1);
transform: scale(1); }
45% {
-webkit-transform: scale(var(--fa-beat-scale, 1.25));
transform: scale(var(--fa-beat-scale, 1.25)); } }
@keyframes fa-beat {
0%, 90% {
-webkit-transform: scale(1);
transform: scale(1); }
45% {
-webkit-transform: scale(var(--fa-beat-scale, 1.25));
transform: scale(var(--fa-beat-scale, 1.25)); } }
@-webkit-keyframes fa-bounce {
0% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); }
10% {
-webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
30% {
-webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
50% {
-webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
57% {
-webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
64% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); }
100% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); } }
@keyframes fa-bounce {
0% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); }
10% {
-webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
30% {
-webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
50% {
-webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
57% {
-webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
64% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); }
100% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); } }
@-webkit-keyframes fa-fade {
50% {
opacity: var(--fa-fade-opacity, 0.4); } }
@keyframes fa-fade {
50% {
opacity: var(--fa-fade-opacity, 0.4); } }
@-webkit-keyframes fa-beat-fade {
0%, 100% {
opacity: var(--fa-beat-fade-opacity, 0.4);
-webkit-transform: scale(1);
transform: scale(1); }
50% {
opacity: 1;
-webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
@keyframes fa-beat-fade {
0%, 100% {
opacity: var(--fa-beat-fade-opacity, 0.4);
-webkit-transform: scale(1);
transform: scale(1); }
50% {
opacity: 1;
-webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
@-webkit-keyframes fa-flip {
50% {
-webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
@keyframes fa-flip {
50% {
-webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
@-webkit-keyframes fa-shake {
0% {
-webkit-transform: rotate(-15deg);
transform: rotate(-15deg); }
4% {
-webkit-transform: rotate(15deg);
transform: rotate(15deg); }
8%, 24% {
-webkit-transform: rotate(-18deg);
transform: rotate(-18deg); }
12%, 28% {
-webkit-transform: rotate(18deg);
transform: rotate(18deg); }
16% {
-webkit-transform: rotate(-22deg);
transform: rotate(-22deg); }
20% {
-webkit-transform: rotate(22deg);
transform: rotate(22deg); }
32% {
-webkit-transform: rotate(-12deg);
transform: rotate(-12deg); }
36% {
-webkit-transform: rotate(12deg);
transform: rotate(12deg); }
40%, 100% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); } }
@keyframes fa-shake {
0% {
-webkit-transform: rotate(-15deg);
transform: rotate(-15deg); }
4% {
-webkit-transform: rotate(15deg);
transform: rotate(15deg); }
8%, 24% {
-webkit-transform: rotate(-18deg);
transform: rotate(-18deg); }
12%, 28% {
-webkit-transform: rotate(18deg);
transform: rotate(18deg); }
16% {
-webkit-transform: rotate(-22deg);
transform: rotate(-22deg); }
20% {
-webkit-transform: rotate(22deg);
transform: rotate(22deg); }
32% {
-webkit-transform: rotate(-12deg);
transform: rotate(-12deg); }
36% {
-webkit-transform: rotate(12deg);
transform: rotate(12deg); }
40%, 100% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); } }
@-webkit-keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); }
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
@keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); }
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
.fa-rotate-90 {
-webkit-transform: rotate(90deg);
transform: rotate(90deg); }
.fa-rotate-180 {
-webkit-transform: rotate(180deg);
transform: rotate(180deg); }
.fa-rotate-270 {
-webkit-transform: rotate(270deg);
transform: rotate(270deg); }
.fa-flip-horizontal {
-webkit-transform: scale(-1, 1);
transform: scale(-1, 1); }
.fa-flip-vertical {
-webkit-transform: scale(1, -1);
transform: scale(1, -1); }
.fa-flip-both,
.fa-flip-horizontal.fa-flip-vertical {
-webkit-transform: scale(-1, -1);
transform: scale(-1, -1); }
.fa-rotate-by {
-webkit-transform: rotate(var(--fa-rotate-angle, none));
transform: rotate(var(--fa-rotate-angle, none)); }
.fa-stack {
display: inline-block;
vertical-align: middle;
height: 2em;
position: relative;
width: 2.5em; }
.fa-stack-1x,
.fa-stack-2x {
bottom: 0;
left: 0;
margin: auto;
position: absolute;
right: 0;
top: 0;
z-index: var(--fa-stack-z-index, auto); }
.svg-inline--fa.fa-stack-1x {
height: 1em;
width: 1.25em; }
.svg-inline--fa.fa-stack-2x {
height: 2em;
width: 2.5em; }
.fa-inverse {
color: var(--fa-inverse, #fff); }
.sr-only,
.fa-sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0; }
.sr-only-focusable:not(:focus),
.fa-sr-only-focusable:not(:focus) {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0; }
.svg-inline--fa .fa-primary {
fill: var(--fa-primary-color, currentColor);
opacity: var(--fa-primary-opacity, 1); }
.svg-inline--fa .fa-secondary {
fill: var(--fa-secondary-color, currentColor);
opacity: var(--fa-secondary-opacity, 0.4); }
.svg-inline--fa.fa-swap-opacity .fa-primary {
opacity: var(--fa-secondary-opacity, 0.4); }
.svg-inline--fa.fa-swap-opacity .fa-secondary {
opacity: var(--fa-primary-opacity, 1); }
.svg-inline--fa mask .fa-primary,
.svg-inline--fa mask .fa-secondary {
fill: black; }
.fad.fa-inverse,
.fa-duotone.fa-inverse {
color: var(--fa-inverse, #fff); }

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,26 @@
/*!
* Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2023 Fonticons, Inc.
*/
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype");
unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype");
unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; }

View File

@@ -0,0 +1,6 @@
/*!
* Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2023 Fonticons, Inc.
*/
@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More