- Maintenance Conctroller OK

This commit is contained in:
Vincent BRIDIER 2021-10-10 15:31:22 +02:00
parent e94b3f5420
commit 4fe7b33acc
8 changed files with 198 additions and 346 deletions

View file

@ -2,15 +2,14 @@
namespace App\Http\Controllers;
use App\Campagne;
use App\Coupon;
use App\Http\Requests\Users\StoreUsers;
use App\Http\Requests\Users\UpdateUsers;
use App\Site;
use App\User;
use App\Log;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Carbon\Carbon;
class MaintenanceController extends Controller
{
@ -19,15 +18,8 @@ class MaintenanceController extends Controller
{
$users = User::all();
foreach ($users as &$user) {
$sites = $user->sites()->get();
$user->linkedSites = "";
foreach ($sites as $site) {
$user->linkedSites .= '<p>' . $site->site_nom . '</p>';
}
}
$dates = array(date('m/Y'));
for ($i = 1; $i < 12; $i++) {
for ($i = 1; $i < 6; $i++) {
$datebefore = date("m/Y", strtotime("-" . $i . " months"));
array_push($dates, $datebefore);
}
@ -37,15 +29,6 @@ class MaintenanceController extends Controller
array_push($count, [$month, $logs]);
}
// $logArray = array();
// foreach ($logs as $logMonth) {
// $count = count($logMonth);
// foreach ($logMonth as $log) {
// $date = Carbon::parse($log->created_at)->format('m/Y');
// }
// array_push($logArray, [$date, $count]);
// }
return view('maintenance.index')->with(['users' => $users, 'logs' => $count]);
}
@ -55,38 +38,17 @@ class MaintenanceController extends Controller
return view('user.create')->with(['sites' => $sites]);
}
public function userstore(Request $request)
public function userstore(StoreUsers $request)
{
$validatedData = $request->validate([
'email' => 'required|unique:users|email',
'name' => 'required',
'password' => 'required'
]);
$nom = $request->name;
$email = $request->email;
$password = $request->password;
$role = $request->roles;
$user = new User();
$user->name = $nom;
$user->email = $email;
$user->password = Hash::make($password);
$user->roles = $role;
$user->fill($request->validated());
$user->password = Hash::make($request->password);
$user->save();
//MAJ des sites liés
if (isset($request->site)) {
$siteids = $request->site;
$sites = Site::whereIn('site_id', $siteids)->get()->pluck('id')->toArray();
$user->sites()->sync($sites);
}
$sites = Site::whereIn('site_id', $request->site)->get()->pluck('id')->toArray();
$user->sites()->sync($sites);
$sites = Site::all();
$usersites = $user->sites()->get()->pluck('site_id')->toArray();
return view('user.edit')->with(['user' => $user, 'sites' => $sites, 'usersites' => $usersites]);
return redirect()->route('maintenance.user.edit', ['user' => $user]);
}
public function useredit(User $user)
@ -96,27 +58,14 @@ class MaintenanceController extends Controller
return view('user.edit')->with(['user' => $user, 'sites' => $sites, 'usersites' => $usersites]);
}
public function userdestroy(User $user)
{
if ($user->delete()) {
return redirect(route('maintenance.show'));
} else {
session()->flash('delete_nok', 'Erreur lors de la suppression');
return view('maintenance.user.edit')->with('user', $user);
}
}
public function userupdate(Request $request, User $user)
public function userupdate(UpdateUsers $request, User $user)
{
//MAJ du User
$user->name = $request->name;
$user->email = $request->email;
$user->roles = $request->roles;
$user->fill($request->validated());
$user->save();
//MAJ des sites liés
$siteids = $request->site;
$sites = Site::whereIn('site_id', $siteids)->get()->pluck('id')->toArray();
$sites = Site::whereIn('site_id', $request->site)->get()->pluck('id')->toArray();
$user->sites()->sync($sites);
$marques = Auth::user()->sites;
@ -125,26 +74,16 @@ class MaintenanceController extends Controller
});
session()->put('marques', $submarques);
return redirect()->route('maintenance.show');
}
$users = User::all();
foreach ($users as &$user) {
$sites = $user->sites()->get();
$user->linkedSites = "";
foreach ($sites as $site) {
$user->linkedSites .= '<p>' . $site->site_nom . '</p>';
}
public function userdestroy(User $user)
{
if ($user->delete()) {
return redirect()->route('maintenance.show');
} else {
session()->flash('delete_nok', 'Erreur lors de la suppression');
return view('maintenance.user.edit')->with('user', $user);
}
$dates = array('02/2019');
for ($i = 1; $i < 12; $i++) {
$datebefore = date("m/Y", strtotime("-" . $i . " months"));
array_push($dates, $datebefore);
}
$count = array();
foreach ($dates as $month) {
$logs = Log::where(['log_statut' => 'NOK'])->whereMonth('created_at', $month)->count();
array_push($count, [$month, $logs]);
}
return view('maintenance.index')->with(['users' => $users, 'logs' => $count]);
}
}

View file

@ -0,0 +1,36 @@
<?php
namespace App\Http\Requests\Users;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class StoreUsers extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check() && (Auth::user()->roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value);
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => 'required|unique:users|email',
'name' => 'required',
'password' => 'min:8|required',
'site' => 'required',
'roles' => 'required'
];
}
}

View file

@ -0,0 +1,39 @@
<?php
namespace App\Http\Requests\Users;
use App\Enums\UserRoles;
use Illuminate\Validation\Rule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class UpdateUsers extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check() && (Auth::user()->roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value);
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => [
'required',
Rule::unique('users')->ignore($this->user->id)
],
'name' => 'required',
'site' => 'required',
'roles' => 'required'
];
}
}

View file

@ -2,6 +2,7 @@
use App\Enums\CampaignTypes;
use App\Enums\Countries;
use App\Enums\UserRoles;
return [
@ -219,6 +220,7 @@ return [
'PDF' => Barryvdh\DomPDF\Facade::class,
'CampaignTypes' => CampaignTypes::class,
'Countries' => Countries::class,
'UserRoles' => UserRoles::class,
],
];

View file

@ -2,89 +2,63 @@
@section('content')
<h2><i class="fas fa-cogs"></i> Maintenance </h2>
<h2>
<i class="fas fa-cogs"></i>
{{ __('Maintenance') }}
</h2>
<div class="user-app">
<div class="heading">
<h5><i class="fas fa-users-cog"></i> Gestion des utilisateurs</h5>
<a href="{{ route('maintenance.user.create') }}" class="add-button"><i class="fas fa-plus-square"></i> Ajouter</a>
<h5><i class="fas fa-users-cog"></i> {{ __('Gestion des utilisateurs') }}</h5>
<a href="{{ route('maintenance.user.create') }}" class="add-button"><i class="fas fa-plus-square"></i> {{ __('Ajouter') }}</a>
</div>
@if(isset($users) && count($users)>0)
<table>
<thead>
<th>Nom</th>
<th>Email</th>
<th>Rôle</th>
<th>Site liés</th>
<th></th>
</thead>
@foreach ($users as $user)
<table>
<thead>
<th>{{ __('Nom') }}</th>
<th>{{ __('Email') }}</th>
<th>{{ __('Rôle') }}</th>
<th>{{ __('Site liés') }}</th>
<th></th>
</thead>
@foreach ($users as $user)
<tr>
<td><a href="{{ route('maintenance.user.edit', $user) }}">{{ $user->name }}</a></td>
<td>{{ $user->email }}</td>
<td>{{ $user->roles }}</td>
<td class="sites">
@foreach ($user->sites as $site)
<p>{{ $site->site_nom }}</p>
@endforeach
</td>
@if (Auth::user()->id === $user->id)
<td></td>
@else
<td><a href="{{ route('maintenance.user.destroy', $user) }}"><i class="fas fa-times delete-icon"></i></a></td>
@endif
</tr>
@endforeach
<tfoot>
<tr>
<td><a href="{{ route('maintenance.user.edit', $user) }}">{{ $user->name }}</a></td>
<td>{{ $user->email }}</td>
<td>{{ $user->roles }}</td>
<td class="sites">{!! $user->linkedSites !!}</td>
@if (Auth::user()->id == $user->id)
<td></td>
@else
<td><a href="{{ route('maintenance.user.destroy', $user) }}"><i class="fas fa-times delete-icon"></i></a></td>
@endif
<td colspan="5">
</td>
</tr>
@endforeach
<tfoot>
<tr>
<td colspan="5">
</td>
</tr>
</tfoot>
</table>
{!! Form::open(['id' => 'delete-hidden']) !!}
@method('DELETE')
{!! Form::close() !!}
@endif
</div>
<div class="clean-app">
<h5><i class="fas fa-database"></i> Nettoyage de la base</h5>
<div class="clean-line">
<p>Nettoyer les murs <span>(datant de plus d'un an)</span></p>
<div class="btn-clean">
<div class="loader-mini">
<div class="lds-ripple"><div></div><div></div></div>
</div>
<a href="#" class="add-button clean-walls"><i class="fas fa-broom"></i> Nettoyer</a>
</div>
</div>
<div class="clean-line">
<p>Nettoyer les paniers <span>(qui ont été imprimés et datant de plus de deux mois)</span></p>
<div class="btn-clean">
<div class="loader-mini">
<div class="lds-ripple"><div></div><div></div></div>
</div>
<a href="#" class="add-button clean-baskets"><i class="fas fa-broom"></i> Nettoyer</a>
</div>
</div>
<div class="clean-line">
<p>Nettoyer les contacts <span>(qui n'ont pas de paniers ni de murs liés et datant de plus d'un mois)</span></p>
<div class="btn-clean">
<div class="loader-mini">
<div class="lds-ripple"><div></div><div></div></div>
</div>
<a href="#" class="add-button clean-contacts"><i class="fas fa-broom"></i> Nettoyer</a>
</div>
</div>
<input type="hidden" name="csrf" id="csrf" value="<?php echo csrf_token(); ?>">
</tfoot>
</table>
<form method="POST" id="delete-hidden">
@csrf
@method('DELETE')
</form>
</div>
<div class="error-log">
<h5><i class="fas fa-file-alt"></i> Erreur d'appels :</h5>
<h5><i class="fas fa-file-alt"></i> {{ __("Erreur d'appels") }} :</h5>
<canvas id="myChart" height="300" width="200"></canvas>
</div>
@endsection
@section('scripts')
<script src="{{ asset('js/Chart.js') }}" charset="utf-8"></script>
<script src="{{ asset('js/Chart.js') }}" charset="utf-8"></script>
<script>
var truc = {!! json_encode($logs, JSON_UNESCAPED_SLASHES) !!};
var labels = [];
@ -104,7 +78,7 @@
data: {
labels: labels,
datasets: [{
label: 'Nombres d\'erreurs API',
label: '{{ __("Erreurs") }}',
data: errorCount,
backgroundColor: 'rgba(255, 0, 0, 0.2)',
borderColor: 'rgba(255,0,0,1)',
@ -123,161 +97,5 @@
}
}
});
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('#csrf').val()
}
});
$('.clean-app').on('click', '.clean-contacts', function(event){
event.preventDefault();
let loader = $(this).parent().find('.loader-mini');
loader.show();
$.fancyConfirm({
title : "<i class='fas fa-broom'></i> Nettoyage",
message : "Êtes-vous sûr de vouloir nettoyer la base des contacts qui n'ont pas de paniers ni de murs liés et datant de plus d'un mois ?",
okButton : 'Supprimer',
noButton : 'Annuler',
callback : function (value) {
if (value) {
$.ajax({
url: '/displayCleanContacts',
type: 'POST',
data: {},
dataType: 'JSON',
success: function (response) {
$.fancyConfirm({
title : "<i class='fas fa-broom'></i> Nettoyage",
message : "Vous allez supprimer "+response.contact_count+" contacts qui ont plus d'un mois et qui n'ont pas de panier ni de murs en cours, Êtes-vous sûr ?",
okButton : 'Supprimer',
noButton : "Annuler",
callback : function (value) {
if (value) {
$.ajax({
url: '/cleanContacts',
type: 'POST',
data: {},
dataType: 'JSON',
success: function (response) {
$.fancyInfo({
title : "<i class='fas fa-info-circle'></i> Succès",
message : "Le nettoyage des contacts a bien été effectué.",
okButton : 'Valider',
noButton : "",
callback : function (value) {
if (value) {
}else {
loader.hide();
}
}
});
loader.hide();
},
error: function (e) {
console.log(e.responseText);
}
});
}else {
loader.hide();
}
}
});
loader.hide();
},
error: function (e) {
console.log(e.responseText);
}
});
} else {
loader.hide();
}
}
});
})
$('.clean-app').on('click', '.clean-walls', function(event){
event.preventDefault();
let loader = $(this).parent().find('.loader-mini');
loader.show();
$.fancyConfirm({
title : "<i class='fas fa-broom'></i> Nettoyage",
message : "Êtes-vous sûr de vouloir nettoyer la base des mur imprimés ?",
okButton : 'Supprimer',
noButton : 'Annuler',
callback : function (value) {
if (value) {
$.ajax({
url: '/cleanWalls',
type: 'POST',
data: {},
dataType: 'JSON',
success: function (response) {
$.fancyInfo({
title : "<i class='fas fa-info-circle'></i> Succès",
message : "Le nettoyage des murs a bien été effectué.",
okButton : 'Valider',
noButton : "",
callback : function (value) {
}
});
loader.hide();
},
error: function (e) {
console.log(e.responseText);
}
});
} else {
loader.hide();
}
}
});
})
$('.clean-app').on('click', '.clean-baskets', function(event){
event.preventDefault();
let loader = $(this).parent().find('.loader-mini');
loader.show();
$.fancyConfirm({
title : "<i class='fas fa-broom'></i> Nettoyage",
message : "Êtes-vous sûr de vouloir nettoyer la base des panier imprimés ?",
okButton : 'Supprimer',
noButton : 'Annuler',
callback : function (value) {
if (value) {
$.ajax({
url: '/cleanBaskets',
type: 'POST',
data: {},
dataType: 'JSON',
success: function (response) {
$.fancyInfo({
title : "<i class='fas fa-info-circle'></i> Succès",
message : "Le nettoyage des paniers a bien été effectué.",
okButton : 'Valider',
noButton : "",
callback : function (value) {
}
});
loader.hide();
},
error: function (e) {
console.log(e.responseText);
}
});
} else {
loader.hide();
}
}
});
})
</script>
@endsection
@endsection

View file

@ -1,7 +1,10 @@
@extends('layouts.main')
@section('content')
<h2><i class="fas fa-users-cog"></i> Nouvel utilisateur</h2>
<h2>
<i class="fas fa-users-cog"></i>
{{ __('Nouvel utilisateur') }}
</h2>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@ -12,28 +15,33 @@
</div>
@endif
<div class="form-wrapper">
{!! Form::open(['route' => 'maintenance.user.create-submit', 'enctype' => 'multipart/form-data', 'autocomplete' => 'off']) !!}
<form method="POST" action="{{ route('maintenance.user.create-submit') }}" autocomplete="off">
@csrf
<div class="form-split">
<div class="form-field">
{!! Form::label('name', 'Nom *') !!}
{!! Form::text('name', null, ['required']) !!}
</div>
<div class="form-field">
{!! Form::label('email', 'Email *') !!}
{!! Form::input('text', 'email', null, ['required']) !!}
</div>
<div class="form-field">
<label>{{ __('Nom') }} *</label>
<input type="text" name="name" value="{{ old('name') }}" required>
</div>
<div class="form-field">
<label>{{ __('Email') }} *</label>
<input type="email" name="email" value="{{ old('email') }}" required>
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('password', 'Mot de passe *') !!}
{!! Form::password('password', $attributes = ['autocomplete' => 'new-password', 'required' => 'required', 'minlength' => 6]) !!}
<label>{{ __('Mot de passe') }} *</label>
<input type="password" name="password" autocomplete="new-password" minlength="8" required>
</div>
<div class="form-field">
{!! Form::label('roles', 'Rôle') !!}
{!! Form::select('roles', array('superadmin' => 'Super Administrateur', 'admin' => 'Administrateur', 'marketing' => 'Marketing')) !!}
<label>{{ __('Rôle') }}</label>
<select name="roles">
@foreach (UserRoles::toArray() as $role)
<option value="{{ $role->value }}" @if (old('roles') === $role->value) selected @endif>{{ $role->label }}</option>
@endforeach
</select>
</div>
</div>
<h4>Sites liés</h4>
<h4>{{ __('Sites liés') }}</h4>
<div class="form-split sitesChoice">
@foreach($sites as $site)
<div class="inputGroup">
@ -44,9 +52,9 @@
@endforeach
</div>
<div class="form-field submit">
<span>Les champs avec un * sont obligatoires</span>
{!! Form::submit('Enregistrer') !!}
<span>{{ __('Les champs avec un * sont obligatoires') }}</span>
<input type="submit" value="{{ __('Enregistrer') }}">
</div>
{!! Form::close() !!}
</form>
</div>
@endsection

View file

@ -1,27 +1,44 @@
@extends('layouts.main')
@section('content')
<h2><i class="fas fa-users-cog"></i> Editer l'utilisateur</h2>
<h2>
<i class="fas fa-users-cog"></i>
{{ __("Editer l'utilisateur") }}
</h2>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="form-wrapper">
{!! Form::model($user, ['route' => ['maintenance.user.edit-submit', $user], 'enctype' => 'multipart/form-data']) !!}
<form method="POST" action="{{ route('maintenance.user.edit-submit', ['user' => $user]) }}">
@csrf
@method('PUT')
<div class="form-split">
<div class="form-field">
{!! Form::label('name', 'Nom') !!}
{!! Form::text('name', null, ['required']) !!}
<label>{{ __('Nom') }} *</label>
<input type="text" name="name" value="{{ $user->name }}" required>
</div>
<div class="form-field">
{!! Form::label('email', 'Email') !!}
{!! Form::input('text', 'email', null, ['required']) !!}
<label>{{ __('Email') }} *</label>
<input type="email" name="email" value="{{ $user->email }}" required>
</div>
</div>
<div class="form-split">
<div class="form-field">
{!! Form::label('roles', 'Rôle') !!}
{!! Form::select('roles', array('superadmin' => 'Super Administrateur', 'admin' => 'Administrateur', 'marketing' => 'Marketing')) !!}
<label>{{ __('Rôle') }}</label>
<select name="roles">
@foreach (UserRoles::toArray() as $role)
<option value="{{ $role->value }}" @if ($user->roles === $role->value) selected @endif>{{ $role->label }}</option>
@endforeach
</select>
</div>
</div>
<h4>Sites liés</h4>
<h4>{{ __('Sites liés') }}</h4>
<div class="form-split sitesChoice">
@foreach($sites as $site)
<div class="inputGroup">
@ -32,8 +49,8 @@
@endforeach
</div>
<div class="form-field submit">
{!! Form::submit('Enregistrer') !!}
<input type="submit" value="{{ __('Enregistrer') }}">
</div>
{!! Form::close() !!}
</form>
</div>
@endsection

View file

@ -64,13 +64,6 @@ Route::group(['prefix' => 'bo', 'middleware' => ['auth', 'saveroute']], function
Route::post('/publish-coupons-ajax', 'AjaxController@publish_coupons_ajax');
// ---- Impressions de coupons
Route::post('/ajx_impression', 'AjaxController@impression_ajax');
// ---- Maintenance : Nettoyer les contacts
Route::post('/displayCleanContacts', 'AjaxController@get_clean_contacts_detail');
Route::post('/cleanContacts', 'AjaxController@clean_contacts');
// ---- Maintenance : Nettoyer les murs
Route::post('/cleanWalls', 'AjaxController@clean_walls');
// ---- Maintenance : Nettoyer les paniers
Route::post('/cleanBaskets', 'AjaxController@clean_baskets');
// ---- Statistiques
Route::post('/loadStat', 'StatistiqueController@load_stats');