From d49bb5eaa724ef34238b07d6f36c92761bac57a7 Mon Sep 17 00:00:00 2001 From: "noah.lancien" Date: Tue, 18 Apr 2023 10:46:40 +0000 Subject: [PATCH] Added CRUD for Duty Hours --- app/Http/Controllers/DutyhourController.php | 22 ++++ app/Models/Dutyhour.php | 99 ++++++++++++++++ app/Policies/DutyhourPolicy.php | 38 ++++++ app/Providers/RouteServiceProvider.php | 2 + ...23_04_18_123853_create_dutyhours_table.php | 34 ++++++ resources/lang/en/models.php | 1 + resources/lang/fr/models.php | 1 + resources/views/dutyhours/index.blade.php | 112 ++++++++++++++++++ resources/views/layout/nav.blade.php | 3 + routes/web.php | 2 + 10 files changed, 314 insertions(+) create mode 100644 app/Http/Controllers/DutyhourController.php create mode 100644 app/Models/Dutyhour.php create mode 100644 app/Policies/DutyhourPolicy.php create mode 100644 database/migrations/2023_04_18_123853_create_dutyhours_table.php create mode 100644 resources/views/dutyhours/index.blade.php diff --git a/app/Http/Controllers/DutyhourController.php b/app/Http/Controllers/DutyhourController.php new file mode 100644 index 0000000..921fb3b --- /dev/null +++ b/app/Http/Controllers/DutyhourController.php @@ -0,0 +1,22 @@ + 'date' + ]; + + /** + * Package + * + * @param array $attributes + */ + public function __construct(array $attributes = []) + { + self::$editableProperties = [ + 'date' => [ + 'label' => trans('Date'), + 'type' => CrudType::date(), + 'nullable' => false, + 'actions' => [ + CrudAction::viewAny(), + CrudAction::view(), + CrudAction::update(), + CrudAction::create() + ] + ], + 'person' => [ + 'label' => trans('Personne présente'), + 'type' => CrudType::string(), + 'nullable' => false, + 'actions' => [ + CrudAction::viewAny(), + CrudAction::view(), + CrudAction::update(), + CrudAction::create() + ] + ], + 'place' => [ + 'label' => trans('Lieu'), + 'type' => CrudType::string(), + 'nullable' => false, + 'actions' => [ + CrudAction::viewAny(), + CrudAction::view(), + CrudAction::update(), + CrudAction::create() + ] + ], + ]; + parent::__construct($attributes); + } +} diff --git a/app/Policies/DutyhourPolicy.php b/app/Policies/DutyhourPolicy.php new file mode 100644 index 0000000..c77cadd --- /dev/null +++ b/app/Policies/DutyhourPolicy.php @@ -0,0 +1,38 @@ +policies = [ + 'dutyhour' => [ + 'viewAny' => URR::make('userIsAdmin', $user), + 'create' => URR::make('userIsAdmin', $user), + 'update' => URR::make('userIsAdmin', $user), + 'delete' => URR::make('userIsAdmin', $user) + ] + ]; + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 8c5438b..48e81b8 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -6,6 +6,7 @@ use App\Models\Brand; use App\Models\Company; use App\Models\Credit\Account; use App\Models\Credit\CreditLog; +use App\Models\Dutyhour; use App\Models\File; use App\Models\Invoice; use App\Models\Label; @@ -91,6 +92,7 @@ class RouteServiceProvider extends ServiceProvider Route::model('label', Label::class); Route::model('marker', Marker::class); Route::model('package', Package::class); + Route::model('dutyhour', Dutyhour::class); Route::model('company', Company::class); Route::model('invoice', Invoice::class); Route::model('file', File::class); diff --git a/database/migrations/2023_04_18_123853_create_dutyhours_table.php b/database/migrations/2023_04_18_123853_create_dutyhours_table.php new file mode 100644 index 0000000..d11d2fc --- /dev/null +++ b/database/migrations/2023_04_18_123853_create_dutyhours_table.php @@ -0,0 +1,34 @@ +id(); + $table->date('date'); + $table->string('person'); + $table->string('place'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('dutyhours'); + } +} diff --git a/resources/lang/en/models.php b/resources/lang/en/models.php index e4446c6..5f9af5f 100644 --- a/resources/lang/en/models.php +++ b/resources/lang/en/models.php @@ -16,5 +16,6 @@ return [ 'packages' => 'Packages', 'invoices' => 'Invoices', 'companies' => 'Companies', + 'dutyhours' => 'Duty Hours', ] ]; diff --git a/resources/lang/fr/models.php b/resources/lang/fr/models.php index de9519d..7af9451 100644 --- a/resources/lang/fr/models.php +++ b/resources/lang/fr/models.php @@ -16,5 +16,6 @@ return [ 'packages' => 'Forfaits', 'invoices' => 'Devis', 'companies' => 'Sociétés', + 'dutyhours' => 'Permanences', ] ]; diff --git a/resources/views/dutyhours/index.blade.php b/resources/views/dutyhours/index.blade.php new file mode 100644 index 0000000..4dc6f09 --- /dev/null +++ b/resources/views/dutyhours/index.blade.php @@ -0,0 +1,112 @@ +@extends($viewLayout) + +@section('title', sprintf('%s - %s', transFb(sprintf('models.classes.%s', strtolower(Str::plural(class_basename($modelClass)))), Str::plural(class_basename($modelClass))), __('crud-policies::crud.viewAny'))) +@section('description', sprintf('%s %s', __('crud-policies::crud.viewAny'), trans(Str::plural(class_basename($modelClass))))) +@section('metaIndex', 'noindex,nofollow') + +@section('content') +
+ @include('crud-policies::crud.modules.flashMessage') +
+ @include('crud-policies::crud.modules.breadcrumb', ['action' => CrudAction::viewAny()]) + @include('crud-policies::crud.modules.actionbar.bar', ['action' => CrudAction::viewAny()]) +
+
+
+
+ {{ $models->links() }} +
+
+
+
+ + + + {{ __('crud-policies::crud.reset') }} + +
+
+
+
+ + + @include('crud-policies::crud.modules.sorter') + + + @if(count($models)) + + {{-- INIT QUERIES for OPTIMIZING --}} + @foreach ($modelClass::getEditableProperties() as $fieldName => $prop) + @if($prop['type']->equals(CrudType::order())) + @php ${"$modelTable$fieldName"} = $modelClass::max($fieldName); @endphp + @endif + @if($prop['type']->equals(CrudType::belongsTo())) + @php try { $models->load(Str::singular((new $prop['belongsTo']())->getTable())); } catch(\Exception $e) {} @endphp + @endif + @if($prop['type']->equals(CrudType::belongsToMany())) + @php $models->load("$fieldName"); @endphp + @endif + @endforeach + + {{-- DISPLAY MODELS --}} + @foreach($models as $model) + + @foreach ($modelClass::getEditableProperties() as $fieldName => $prop) + @if(in_array(CrudAction::viewAny(), $prop['actions'])) + @switch($prop['type']) + @case(CrudType::password()) + {{-- Ignore --}} + @break + @default + + @endswitch + @endif + @endforeach + + {{-- MODEL ACTIONS --}} + + + @endforeach + @else + + + + @endif + +
@include('crud-policies::crud.printfield', [ + 'action' => CrudAction::viewAny(), + 'field' => $model->{$fieldName}, + 'props' => $prop, + "$modelTable$fieldName" => ${"$modelTable$fieldName"} ?? null + ]) +
+ @can('view', $model) + {{ __('crud-policies::crud.view') }} + @endcan + @can('update', $model) + {{ __('crud-policies::crud.edit') }} + @endcan + @can('delete', $model) +
+ @csrf + @method('DELETE') + +
+ @endcan + @can('viewAny', \App\Models\Log::class) + {{ __('models.classes.logs') }} + @endcan + @can('viewAny', \App\Models\File::class) + {{ __('models.classes.files') }} + @endcan +
+
+ {{ __('crud-policies::crud.nothingtoshow') }} +
+ {{ $models->links() }} +
+
+@include('crud-policies::crud.modules.scriptConstants') +@endsection diff --git a/resources/views/layout/nav.blade.php b/resources/views/layout/nav.blade.php index c08b854..1c26a94 100644 --- a/resources/views/layout/nav.blade.php +++ b/resources/views/layout/nav.blade.php @@ -46,6 +46,9 @@ @can('viewAny', App\Models\Package::class) {{ __('models.classes.packages') }} @endcan + @can('viewAny', App\Models\Dutyhour::class) + {{ __('models.classes.dutyhours') }} + @endcan @endif diff --git a/routes/web.php b/routes/web.php index 28e1ef5..bbe7386 100644 --- a/routes/web.php +++ b/routes/web.php @@ -5,6 +5,7 @@ use App\Http\Controllers\CompanyController; use App\Http\Controllers\Credit\AccountController; use App\Http\Controllers\Credit\CreditLogController; use App\Http\Controllers\Credit\EstimationController; +use App\Http\Controllers\DutyhourController; use App\Http\Controllers\FileController; use App\Http\Controllers\HomeController; use App\Http\Controllers\InvoiceController; @@ -74,6 +75,7 @@ Route::middleware('auth:web')->group(function () { Route::resource('ticket', TicketController::class)->except(['destroy']); Route::resource('users', UserController::class); Route::resource('packages', PackageController::class)->except('show'); + Route::resource('dutyhours', DutyhourController::class)->except('show'); Route::resource('companies', CompanyController::class)->except('show'); Route::resource('invoices', InvoiceController::class); Route::resource('labels', LabelController::class)->except('show');