diff --git a/app/Http/Controllers/AvvisoController.php b/app/Http/Controllers/AvvisoController.php new file mode 100644 index 0000000..13aa29b --- /dev/null +++ b/app/Http/Controllers/AvvisoController.php @@ -0,0 +1,16 @@ +back(); + } +} diff --git a/app/Http/Controllers/MovimentiController.php b/app/Http/Controllers/MovimentiController.php index da81706..9b31378 100644 --- a/app/Http/Controllers/MovimentiController.php +++ b/app/Http/Controllers/MovimentiController.php @@ -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 @@ -41,11 +45,17 @@ class MovimentiController extends Controller $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(); return view('layouts.dashboard',[ 'entrate'=>$entrate, 'uscite'=>$uscite, 'saldo'=>$saldo, + 'mieitask' => $mieiTasks, + // 'assegnati' => $TasksAssegnati, + 'avvisi'=>$avvisi, ]); } diff --git a/app/Http/Controllers/TaskController.php b/app/Http/Controllers/TaskController.php index f4daaa1..eb2deb6 100644 --- a/app/Http/Controllers/TaskController.php +++ b/app/Http/Controllers/TaskController.php @@ -11,8 +11,30 @@ class TaskController extends Controller public function listTask() { return Task::all(); + // 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(); } - + } diff --git a/app/Http/Controllers/Utenti.php b/app/Http/Controllers/Utenti.php index f7fedcf..a95ba2a 100644 --- a/app/Http/Controllers/Utenti.php +++ b/app/Http/Controllers/Utenti.php @@ -47,6 +47,10 @@ class Utenti extends Controller return view('users.list',['users'=>$users]); } + function getUsers(){ + return User::getUsers(); + } + function listRoles(){ $roles = Role::all(); return $roles; diff --git a/app/Models/Avviso.php b/app/Models/Avviso.php new file mode 100644 index 0000000..652cc9a --- /dev/null +++ b/app/Models/Avviso.php @@ -0,0 +1,28 @@ +$data['avviso'], + 'creato_da'=>$data['creato_da'], + 'creato_il'=>date('Y-m-d'), + 'urgente'=>$data['urgente'], + ]); + } + + public static function getAvvisi() + { + return self::all(); + } +} diff --git a/app/Models/Task.php b/app/Models/Task.php new file mode 100644 index 0000000..df3d8ce --- /dev/null +++ b/app/Models/Task.php @@ -0,0 +1,46 @@ +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', + ] + ); + } + +} diff --git a/app/Models/User.php b/app/Models/User.php index db4fe72..8263099 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -66,7 +66,7 @@ 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() diff --git a/composer.json b/composer.json index 5f1be95..bcd9e46 100644 --- a/composer.json +++ b/composer.json @@ -10,6 +10,7 @@ "require" : { "php": "^7.3|^8.0", "barryvdh/laravel-dompdf": "^2.0", + "creativeorange/gravatar": "^1.0", "directorytree/ldaprecord": "^2.9", "fruitcake/laravel-cors": "^2.0", "guzzlehttp/guzzle": "^7.0.1", diff --git a/composer.lock b/composer.lock index 266ac03..d8bcb49 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e6ac2be787f145ea140b72b55e302e90", + "content-hash": "acd096c2d0a14521dd551b39dde1ef28", "packages": [ { "name": "asm89/stack-cors", @@ -350,6 +350,69 @@ ], "time": "2022-04-01T19:23:25+00:00" }, + { + "name": "creativeorange/gravatar", + "version": "v1.0.23", + "source": { + "type": "git", + "url": "https://github.com/creativeorange/gravatar.git", + "reference": "3a1b227c48091b039b967265ec13c0800c70ac79" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/creativeorange/gravatar/zipball/3a1b227c48091b039b967265ec13c0800c70ac79", + "reference": "3a1b227c48091b039b967265ec13c0800c70ac79", + "shasum": "" + }, + "require": { + "illuminate/support": "^5|^6|^7|^8|^9|^10.0", + "php": ">=5.4.0" + }, + "require-dev": { + "nunomaduro/larastan": "^0.6.2|^2.4", + "orchestra/testbench": "^5.4|^8.0", + "php": ">=7.2" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Creativeorange\\Gravatar\\GravatarServiceProvider" + ], + "aliases": { + "Gravatar": "Creativeorange\\Gravatar\\Facades\\Gravatar" + } + } + }, + "autoload": { + "psr-4": { + "Creativeorange\\Gravatar\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaco Tijssen", + "email": "jaco@creativeorange.nl", + "homepage": "https://www.creativeorange.nl", + "role": "Developer" + } + ], + "description": "A Laravel Gravatar package for retrieving gravatar image URLs or checking the existance of an image.", + "keywords": [ + "avatar", + "gravatar", + "laravel" + ], + "support": { + "issues": "https://github.com/creativeorange/gravatar/issues", + "source": "https://github.com/creativeorange/gravatar/tree/v1.0.23" + }, + "time": "2023-02-06T07:57:20+00:00" + }, { "name": "dflydev/dot-access-data", "version": "v3.0.2", diff --git a/config/app.php b/config/app.php index cf42dc4..271e31a 100644 --- a/config/app.php +++ b/config/app.php @@ -161,6 +161,7 @@ return [ Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, + Creativeorange\Gravatar\GravatarServiceProvider::class, /* @@ -232,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, ], diff --git a/database/migrations/2023_07_14_123253_create_tasks_table.php b/database/migrations/2023_07_14_123253_create_tasks_table.php new file mode 100644 index 0000000..b32a818 --- /dev/null +++ b/database/migrations/2023_07_14_123253_create_tasks_table.php @@ -0,0 +1,39 @@ +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'); + } +} diff --git a/database/migrations/2023_07_14_123350_subtask.php b/database/migrations/2023_07_14_123350_subtask.php new file mode 100644 index 0000000..3c5eec0 --- /dev/null +++ b/database/migrations/2023_07_14_123350_subtask.php @@ -0,0 +1,42 @@ +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() + { + // + } +} diff --git a/database/migrations/2023_07_18_145041_create_avvisos_table.php b/database/migrations/2023_07_18_145041_create_avvisos_table.php new file mode 100644 index 0000000..fccb97f --- /dev/null +++ b/database/migrations/2023_07_18_145041_create_avvisos_table.php @@ -0,0 +1,35 @@ +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'); + } +} diff --git a/public/js/app/dashboard.js b/public/js/app/dashboard.js index a730aae..a016277 100644 --- a/public/js/app/dashboard.js +++ b/public/js/app/dashboard.js @@ -3,4 +3,14 @@ $(document).ready(function() { $('#categorie').DataTable({ responsive: true }); + // Reload del div + /* + $.ajaxSetup({ cache: false }); + setInterval(function() { + $('#mieitask').load('/admin'); + }, 8000); + */ }); + + + diff --git a/public/js/app/movimenti.js b/public/js/app/movimenti.js index de6f277..3364fc8 100644 --- a/public/js/app/movimenti.js +++ b/public/js/app/movimenti.js @@ -117,10 +117,14 @@ $(document).on('click', '.open_modal_modifica', function() { }); -/*$.getJSON("/admin/service/taglist", {}, function(data) { +/* + +$.getJSON("/admin/service/taglist", {}, function(data) { $.each(data, function(i, item) { $("select[name='mov_fk_tags']").append( new Option(item.tag_name, item.id) ) }); -});*/ +}); + +*/ diff --git a/public/js/app/task.js b/public/js/app/task.js new file mode 100644 index 0000000..5219114 --- /dev/null +++ b/public/js/app/task.js @@ -0,0 +1,127 @@ +$(document).ready(function() { + $('#listatask').DataTable({ + "responsive": true, + columnDefs: [ + { + target: 0, + render: DataTable.render.date(), + } + ], + "order": [[0, "desc"]] + }); +}); + +var d = new Date(); + +var month = d.getMonth()+1; +var day = d.getDate(); + +var strDate = d.getFullYear() + '-' + + (month<10 ? '0' : '') + month + '-' + + (day<10 ? '0' : '') + day; + + +$(document).on('click', '.open_modal_new', function() { + console.log(strDate); + $("#titolo").empty(); + $("#descrizione").empty(); + $('#form').find('input[type="text"], textarea, input[type="number"],input[type="date"],option').val(""); + $('#form').find('input[type="date"]').val(strDate); + $('#myModal').modal('show'); + $('.modal-title').text(' Nuova attività'); + $('#form').attr('action', '/admin/task/new'); + $.getJSON("/admin/service/getUsers", {}, function(users) { + $.each(users, function(i, users) { + $("select[name='assegnato_a']").append( + new Option(users.name, users.id) + ) + } + ); + }); + +}); + + +/* +$(document).on('click', '.open_modal_entrata', function() { + console.log(strDate); + $("#titolo").empty(); + $("#tags").empty(); + $('#form').find('input[type="text"], textarea, input[type="number"],option').val(""); + $('#form').find('input[type="date"]').val(strDate); + $('#myModal_new').modal('show'); + $('.modal-title').text('Nuovo movimento in entrata'); + $('#form').attr('action', '/admin/movimenti/entrata'); + $.getJSON("/admin/service/catlistEntrata", {}, function(data) { + $.each(data, function(i, item) { + $("select[name='mov_fk_categoria']").append( + new Option(item.cat_name, item.id) + ) + } + ); + }); + $.getJSON("/admin/service/taglist", {}, function(data) { + $.each(data, function(i, item) { + $("select[name='mov_fk_tags']").append( + new Option(item.tag_name, item.id) + ) + }); +}); +}); + +$(document).on('click', '.open_modal_modifica', function() { + var url = "/admin/movimenti/modify"; + var riga_id = $(this).val(); + $("#categoria").empty(); + $("#tags").empty(); + $.getJSON(url + '/' + riga_id, function(data) { + // success data + console.log(data[0]); + $.getJSON("/admin/service/taglist", {}, function(tags) { + $.each(tags, function(i, tag) { + $("select[name='mov_fk_tags']").append( + new Option(tag.tag_name, tag.id) + ) + $('#tags') + .find('option:contains(' + data[0].tag_name + ')') + .prop('selected', true) + .trigger('change'); + }); + }); + $.getJSON("/admin/service/catlist", {}, function(cats) { + $.each(cats, function(i, cat) { + $("select[name='mov_fk_categoria']").append( + new Option(cat.cat_name, cat.id) + ) + $('#categoria') + .find('option:contains(' + data[0].cat_name + ')') + .prop('selected', true) + .trigger('change'); + } + ); + }); + $('.modal-title').text('Modifica movimento'); + $('#data').val(data[0].mov_data); + $('#descrizione').val(data[0].mov_descrizione); + $('#importo').val(data[0].mov_importo); + + $('#myModal').modal('show'); + // $('.panel-heading').text('Modifica movimento'); + $('#form').attr('action', '/admin/movimenti/modify'); + $('#form').append(''); + + }); + +}); + +/* + +$.getJSON("/admin/service/taglist", {}, function(data) { + $.each(data, function(i, item) { + $("select[name='mov_fk_tags']").append( + new Option(item.tag_name, item.id) + ) + }); +}); + +*/ diff --git a/resources/views/components/menu.blade.php b/resources/views/components/menu.blade.php index ff9bbc0..1c6dccd 100644 --- a/resources/views/components/menu.blade.php +++ b/resources/views/components/menu.blade.php @@ -51,7 +51,11 @@ Progetti @endcan +@can('tasks') +
  • + Attività
  • +@endcan @can('amministrazione')
  • Amministrazione diff --git a/resources/views/layouts/dashboard.blade.php b/resources/views/layouts/dashboard.blade.php index 3b86dbb..b965aef 100644 --- a/resources/views/layouts/dashboard.blade.php +++ b/resources/views/layouts/dashboard.blade.php @@ -8,7 +8,7 @@
    @hasanyrole('user|admin') -
    +
    @@ -31,7 +31,7 @@
    -
    +
    @@ -55,7 +55,7 @@
    -
    +
    @@ -77,7 +77,7 @@
    -
    +
    @@ -100,9 +100,82 @@
    @endhasanyrole +
    + +@can('tasks') + +
    +
    +
    +
    + Attività da svolgere +
    +
    +
      + @foreach($mieitask as $task) + + + + +
      +
    • + @if($task->stato==='Chiuso') + + {{ $task->titolo }} +
      +
      {{$task->descrizione}}
      + @else + {{ $task->titolo }}
      +
      {{$task->descrizione}}
      + @endif +
    • +
      + @endforeach +
    +
    + +
    +
    +
    +
    +
    + Avvisi e informazioni +
    +
    + +
    + +
    +
    +
    +@endcan @endsection @section('script') - + @endsection diff --git a/resources/views/tasks/list.blade.php b/resources/views/tasks/list.blade.php index 73a50ab..d8ecf86 100644 --- a/resources/views/tasks/list.blade.php +++ b/resources/views/tasks/list.blade.php @@ -2,7 +2,8 @@ @section('content')
    -

    Lista Progetti

    +

    Lista Attività

    +
    @@ -10,7 +11,94 @@
    + class="fa fa-pencil-square-o fw">Nuova Attività
    - @endsection \ No newline at end of file +
    +
    +
    +
    + Tutte le Attività +
    +
    +
      + @foreach($tasks as $task) +
    • + + + + +
      + {{ $task->titolo}} +
      +
    • + @endforeach +
    +
    + +
    +
    +
    +
    + + + + +@endsection +@section('script') + +@endsection \ No newline at end of file diff --git a/routes/admin.php b/routes/admin.php index d426b4f..1f042a1 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -15,6 +15,8 @@ use App\Http\Controllers\AutoController; use App\Http\Controllers\AnagraficaController; use App\Http\Controllers\Utenti; use App\Http\Controllers\ProgettiController; +use App\Http\Controllers\TaskController; +use App\Http\Controllers\AvvisoController; use App\Mail\myTestEmail; /* @@ -123,7 +125,6 @@ Route::group(['middleware'=>['permission:amministrazione']], function(){ Route::post('users/new',[Utenti::class,'createUser']); Route::get('users/roles',[Utenti::class,'listRoles']); Route::get('users/delete/{id}',[Utenti::class,'deleteUser']); -//}); Route::get('users/givepermission',[Utenti::class,'givePermissionToUser']); Route::post('users/givepermission',[Utenti::class,'assignPermission']); Route::get('users/giverole',[Utenti::class,'giveRoleToUser']); @@ -147,35 +148,24 @@ Route::group(['middleware'=>['permission:progetti']], function(){ Route::get('progetti/print',[ProgettiController::class,'stampaPDFProgetto']); }); -/// RIVISTA -Route::group(['middleware'=>['permission:rivista']], function(){ - Route::get('rivista',[RivistaController::class,'rivistaHome'])->name('rivista'); - Route::get('rivista/pubblica',[RivistaController::class,'rivistaDigCarica']); - Route::post('rivista/pubblica',[RivistaController::class,'rivistaDigPubblica']); - Route::get('rivista/abbonati',[RivistaController::class,'rivistaAbbonati']); - Route::get('rivista/abbonamenti',[RivistaController::class,'rivistaAbbonamenti']); - Route::get('rivista/abbonamenti/rinnovo',[RivistaController::class,'rivistaAbbonamentiRinnovo']); - Route::get('rivista/abbonamenti/nuovo',[RivistaController::class,'rivistaAbbonamentiNuovo']); - Route::get('rivista/abbonamenti/scadenza',[RivistaController::class,'rivistaAbbonamentiScadono']); - Route::get('rivista/new',[RivistaController::class,'rivistaNuova']); - Route::get('rivista/archivio',[RivistaController::class,'rivistaArchivio']); +// TASKS +Route::group(['middleware'=>['permission:tasks']], function(){ + Route::get('tasks', [TaskController::class, 'Task'])->name('tasks'); + Route::post('task/new',[TaskController::class, 'newTask']); + Route::get('service/getUsers', [Utenti::class,'getUsers']); }); -/// ASSOCIAZIONE -Route::group(['middleware'=>['permission:associazione']], function(){ - Route::get('associazione',[AssociazioneController::class,'assocHome'])->name('associazione'); -}); -/// GRUPPI -Route::group(['middleware'=>['permission:gruppi']], function(){ - Route::get('gruppi',[GruppiController::class,'gruppiHome'])->name('gruppi'); +Route::group(['middleware'=>['permission:avvisi']], function(){ + Route::post('avvisi/new',[AvvisoController::class,'saveAvviso'])->name('newAvviso'); }); +// -- ONLY FOR TEST -- TO BE REMOVED // /// TEST ROUTES Route::get('test/fullcalendar', [FullCalenderController::class, 'index']); Route::post('test/fullcalendar', [FullCalenderController::class, 'ajax']); Route::get('test/condominio',[CondominioController::class,'testPdf']); - Route::get('test/err403',[CondominioController::class,'err403']); + Route::get('test/err403',[CondominioController::class,'err403'])->name('errore-403'); Route::get('test/user_role',[CondominioController::class,'user_role']); Route::get('test/userclass',[Utenti::class,'userClass']); diff --git a/routes/api.php b/routes/api.php index 10552b1..89b9f5d 100644 --- a/routes/api.php +++ b/routes/api.php @@ -20,6 +20,9 @@ use App\Http\Controllers\MovimentiController; Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); }); + +Route::group(['middleware'=>['permission:conti']], function(){ Route::get('categories', [CategorieController::class,'apiList']); Route::get('tags', [TagController::class,'apiList']); - Route::get('movements', [MovimentiController::class,'apiList']); \ No newline at end of file + Route::get('movements', [MovimentiController::class,'apiList']); +}); \ No newline at end of file