&& apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4F4EA0AAE5267A6C
RUN apt-get update && apt-get -y --no-install-recommends install \
- git \
+ git git-restore-mtime \
php8.1-fpm \
php8.1-apcu \
php8.1-cli \
use App\Http\Controllers\Admin\Operations\Tools\Excel2JSON;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Admin\Operations\Tools\SASSCompiler;
+use App\Models\User;
use Cubist\Backpack\Http\Controllers\Base\XSendFileController;
+use Cubist\Util\CommandLine\Git;
use Cubist\Util\Files\Files;
class TeamPayController extends Controller
return view('team.pay', ['slips' => $this->getSlips()]);
}
- protected function download($year, $month)
+ protected function download($oxygene, $year, $month)
{
+ if (!can('team-pay:admin') && $oxygene !== backpack_user()->oxygene) {
+ abort(404);
+ }
$slips = $this->getSlips();
- if (isset($slips[$year . $month])) {
- return XSendFileController::sendfile($slips[$year . $month]['path']);
+ if (isset($slips[$year . $month . $oxygene])) {
+ return XSendFileController::sendfile($slips[$year . $month . $oxygene]['path']);
}
+ abort(404);
}
- protected function getSlips()
+ protected function getSlips($id = null)
{
+
+
$res = [];
- $id = backpack_user()->oxygene;
- if (!$id) {
- return $res;
+ if (null === $id) {
+ if (can('team-pay:admin')) {
+ $id = 'all';
+ } else {
+ $id = backpack_user()->oxygene;
+ }
+ if (!$id) {
+ return $res;
+ }
}
+
+ $names = $this->_getSlipNames();
+
$path = resource_path('cubedesigners-oxygene');
- `cd $path;git pull`;
+ Git::pull($path, true);
$slipsRoot = $path . '/PAIE/CUBE.$SO/BulletinsPDF';
$iterator = Files::getRecursiveDirectoryIterator($slipsRoot);
foreach ($iterator as $item) {
/** @var $item \SplFileInfo */
$n = $item->getFilename();
- if ($item->getExtension() === 'pdf' && str_starts_with($n, $id)) {
+ if ($item->getExtension() === 'pdf' && ($id === 'all' || str_starts_with($n, $id))) {
$year = substr($n, 4, 4);
$month = substr($n, 8, 2);
- $res[$year . $month] = ['path' => $item->getPathname(), 'year' => $year, 'month' => $month];
+ $oxygene = substr($n, 0, 3);
+ $res[$year . $month . $oxygene] = ['name' => $names[$oxygene], 'oxygene' => $oxygene, 'path' => $item->getPathname(), 'updated' => $item->getMTime(), 'year' => $year, 'month' => $month];
}
}
krsort($res);
}
+ protected function _getSlipNames()
+ {
+ $users = User::withoutGlobalScopes()->where('oxygene', '!=', '')->get();
+ $res = [];
+ foreach ($users as $user) {
+ $res[$user->oxygene] = $user->name;
+ }
+ return $res;
+ }
}
}
</style>
<h2 style="margin-top: 50px">{{__('Bulletins de salaire')}}</h2>
- <table id="crudTable" style="max-width: 400px"
+ <table id="crudTable" style="max-width: 600px"
class="bg-white table table-striped table-hover nowrap rounded shadow-xs border-xs mt-2 dataTable dtr-inline">
<thead>
<tr role="row">
<th></th>
- <th>{{__('Année')}}</th>
- <th>{{__('Mois')}}</th>
+ <th>{{__('Bulletin')}}</th>
+ @can('team-pay:admin')
+ <th>{{__('Salarié')}}</th>
+ @endcan
+ <th>{{__('Mise à jour')}}</th>
<th>{{__('Télécharger')}}</th>
<th></th>
</tr>
@foreach($slips as $id=>$slip)
<tr role="row">
<td></td>
- <td><span>{{$slip['year']}}</span></td>
- <td><span>{{$slip['month']}}</span></td>
- <td><a class="btn btn-link btn-sm" href="{{url('team-pay/'.$slip['year'].'/'.$slip['month'])}}"
- download="{{$slip['year'].'-'.$slip['month'].'.pdf'}}"><i
- class="la la-arrow-circle-down"></i> {{__('Télécharger')}}</a>
+ <td><span>{{$slip['year']}}-{{$slip['month']}}</span></td>
+ @can('team-pay:admin')
+ <td><span>{{$slip['name']}}</span></td>
+ @endcan
+ <td><span>{{date('d/m/Y H:i',$slip['updated'])}}</span></td>
+ <td><a class="btn btn-link btn-sm" target="_blank"
+ href="{{url('team-pay/'.$slip['oxygene'].'-'.$slip['year'].'-'.$slip['month'].'.pdf')}}">
+ <i class="la la-arrow-circle-down"></i> {{__('Télécharger')}}</a>
</td>
<td></td>
</tr>
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('tools/favicongen') }}'><i
class='nav-icon las la-icons'></i>
<span>{{__('Générer des favicons')}}</span></a></li>
- <li class='nav-item'><a class='nav-link' href='{{ backpack_url('tool-sprite') }}'><i class="las la-marker"></i>
+ <li class='nav-item'><a class='nav-link' href='{{ backpack_url('tool-sprite') }}'><i class="nav-icon las la-marker"></i>
<span>{{__('SVG Sprites')}}</span></a></li>
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('opentools/sasscompiler') }}'><i
- class="lab la-sass"></i>
+ class="nav-icon lab la-sass"></i>
<span>{{__('Compileur SASS')}}</span></a></li>
</ul>
@can('extranet:manage_emails')
<li class="nav-item"><a class="nav-link"
href='{{ backpack_url('team-emails') }}'><i
- class='la la-mail-bulk'></i>
+ class='nav-icon la la-mail-bulk'></i>
<span>{{__('Emails')}}</span></a>
</li>
@endcan
+ @can('team-pay:read')
+ <li class="nav-item"><a class="nav-link"
+ href='{{ backpack_url('team-pay') }}'><i class="nav-icon las la-file-invoice-dollar"></i>
+ <span>{{__('Bulletins de salaire')}}</span></a>
+ </li>
+ @endcan
@can('team-leave:read')
<li class="nav-item"><a class="nav-link"
href='{{ backpack_url('team-leave') }}'><i
- class="las la-umbrella-beach"></i></i>
+ class="nav-icon las la-umbrella-beach"></i>
<span>{{__('Congés et absences')}}</span></a>
</li>
@endcan
@can('team-overtime:read')
<li class="nav-item"><a class="nav-link"
- href='{{ backpack_url('team-overtime') }}'><i class="las la-stopwatch"></i></i>
+ href='{{ backpack_url('team-overtime') }}'><i class="nav-icon las la-stopwatch"></i>
<span>{{__('Heures supp')}}</span></a>
</li>
@endcan
-<a class="btn btn-sm btn-link" href="{{$crud->route}}/{{$entry->getKey()}}/loginas" data-toggle="tooltip"
- title="{{__('Se connecter comme')}}"><i class="la la-key"></i> {{__('Se connecter comme')}}</a>
+@if(backpack_user()->isOwner($entry))
+ <a class="btn btn-sm btn-link" href="{{$crud->route}}/{{$entry->getKey()}}/loginas" data-toggle="tooltip"
+ title="{{__('Se connecter comme')}}"><i class="la la-key"></i> {{__('Se connecter comme')}}</a>
+@endif
], function () { // custom admin routes
Route::any('tools/{tool}/{args?}', 'ToolsController@index')->where(['args' => '.*']);
Route::any('team-pay', 'TeamPayController@index');
- Route::any('team-pay/{year}/{month}', 'TeamPayController@download');
+ Route::any('team-pay/{oxygene}-{year}-{month}.pdf', 'TeamPayController@download');
Route::any('team-pay/{year}/fiscal', 'TeamPayController@downloadFiscal');
Route::any('opentools/{tool}/{args?}', 'OpenToolsController@index')->where(['args' => '.*'])->withoutMiddleware([CheckIfAdmin::class, VerifyCsrfToken::class]);
Route::any('maintenance/{function}/{args?}', 'MaintenanceController@index')->where(['args' => '.*']);