Merge remote-tracking branch 'origin/develop'

This commit is contained in:
snipe 2022-10-05 17:55:33 -07:00
commit 1ef3eb94db
14 changed files with 133 additions and 14 deletions

View file

@ -66,6 +66,8 @@ class UsersController extends Controller
'users.zip',
'users.remote',
'users.ldap_import',
'users.start_date',
'users.end_date',
])->with('manager', 'groups', 'userloc', 'company', 'department', 'assets', 'licenses', 'accessories', 'consumables', 'createdBy',)
->withCount('assets as assets_count', 'licenses as licenses_count', 'accessories as accessories_count', 'consumables as consumables_count');
@ -146,6 +148,15 @@ class UsersController extends Controller
$users = $users->where('remote', '=', $request->input('remote'));
}
if ($request->filled('start_date')) {
$users = $users->where('users.start_date', '=', $request->input('start_date'));
}
if ($request->filled('end_date')) {
$users = $users->where('users.end_date', '=', $request->input('end_date'));
}
if ($request->filled('assets_count')) {
$users->has('assets', '=', $request->input('assets_count'));
}
@ -200,7 +211,7 @@ class UsersController extends Controller
'assets', 'accessories', 'consumables', 'licenses', 'groups', 'activated', 'created_at',
'two_factor_enrolled', 'two_factor_optin', 'last_login', 'assets_count', 'licenses_count',
'consumables_count', 'accessories_count', 'phone', 'address', 'city', 'state',
'country', 'zip', 'id', 'ldap_import', 'remote',
'country', 'zip', 'id', 'ldap_import', 'remote', 'start_date', 'end_date',
];
$sort = in_array($request->get('sort'), $allowed_columns) ? $request->get('sort') : 'first_name';

View file

@ -119,6 +119,8 @@ class UsersController extends Controller
$user->remote = $request->input('remote', 0);
$user->website = $request->input('website', null);
$user->created_by = Auth::user()->id;
$user->start_date = $request->input('start_date', null);
$user->end_date = $request->input('end_date', null);
// Strip out the superuser permission if the user isn't a superadmin
$permissions_array = $request->input('permission');
@ -270,6 +272,8 @@ class UsersController extends Controller
$user->zip = $request->input('zip', null);
$user->remote = $request->input('remote', 0);
$user->website = $request->input('website', null);
$user->start_date = $request->input('start_date', null);
$user->end_date = $request->input('end_date', null);
// Update the location of any assets checked out to this user
Asset::where('assigned_type', User::class)

View file

@ -30,7 +30,7 @@ class UsersTransformer
'username' => e($user->username),
'remote' => ($user->remote == '1') ? true : false,
'locale' => ($user->locale) ? e($user->locale) : null,
'employee_num' => e($user->employee_num),
'employee_num' => ($user->employee_num) ? e($user->employee_num) : null,
'manager' => ($user->manager) ? [
'id' => (int) $user->manager->id,
'name'=> e($user->manager->first_name).' '.e($user->manager->last_name),
@ -43,7 +43,7 @@ class UsersTransformer
'state' => ($user->state) ? e($user->state) : null,
'country' => ($user->country) ? e($user->country) : null,
'zip' => ($user->zip) ? e($user->zip) : null,
'email' => e($user->email),
'email' => ($user->email) ? e($user->email) : null,
'department' => ($user->department) ? [
'id' => (int) $user->department->id,
'name'=> e($user->department->name),
@ -69,6 +69,8 @@ class UsersTransformer
] : null,
'created_at' => Helper::getFormattedDateObject($user->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($user->updated_at, 'datetime'),
'start_date' => Helper::getFormattedDateObject($user->start_date, 'date'),
'end_date' => Helper::getFormattedDateObject($user->end_date, 'date'),
'last_login' => Helper::getFormattedDateObject($user->last_login, 'datetime'),
'deleted_at' => ($user->deleted_at) ? Helper::getFormattedDateObject($user->deleted_at, 'datetime') : null,
];

View file

@ -59,6 +59,8 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
'username',
'zip',
'remote',
'start_date',
'end_date',
];
protected $casts = [
@ -68,6 +70,16 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
'company_id' => 'integer',
];
protected $dates = [
'created_at',
'updated_at',
'deleted_at',
'start_date',
'end_date',
];
/**
* Model validation rules
*
@ -83,6 +95,8 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
'website' => 'url|nullable|max:191',
'manager_id' => 'nullable|exists:users,id|cant_manage_self',
'location_id' => 'exists:locations,id|nullable',
'start_date' => 'nullable|date',
'end_date' => 'nullable|date|after_or_equal:start_date',
];
/**

View file

@ -302,6 +302,24 @@ class UserPresenter extends Presenter
'visible' => false,
'formatter' => 'dateDisplayFormatter',
],
[
'field' => 'start_date',
'searchable' => true,
'sortable' => true,
'switchable' => true,
'title' => trans('general.start_date'),
'visible' => false,
'formatter' => 'dateDisplayFormatter',
],
[
'field' => 'end_date',
'searchable' => true,
'sortable' => true,
'switchable' => true,
'title' => trans('general.end_date'),
'visible' => false,
'formatter' => 'dateDisplayFormatter',
],
[
'field' => 'last_login',
'searchable' => false,

12
composer.lock generated
View file

@ -78,19 +78,19 @@
"source": {
"type": "git",
"url": "https://github.com/grokability/laravel-scim-server.git",
"reference": "d0e3d7c0b5da2ec76283b8a2fa2e672a91596509"
"reference": "9e7a8fd51a7380bc18ca1f01256574d75a2c6b49"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/grokability/laravel-scim-server/zipball/d0e3d7c0b5da2ec76283b8a2fa2e672a91596509",
"reference": "d0e3d7c0b5da2ec76283b8a2fa2e672a91596509",
"url": "https://api.github.com/repos/grokability/laravel-scim-server/zipball/9e7a8fd51a7380bc18ca1f01256574d75a2c6b49",
"reference": "9e7a8fd51a7380bc18ca1f01256574d75a2c6b49",
"shasum": ""
},
"require": {
"illuminate/console": "^6.0|^7.0|^8.0",
"illuminate/database": "^6.0|^7.0|^8.0",
"illuminate/support": "^6.0|^7.0|^8.0",
"php": "^7.0|^8.0",
"php": "^7.4|^8.0",
"tmilos/scim-filter-parser": "^1.3",
"tmilos/scim-schema": "^0.1.0"
},
@ -133,7 +133,7 @@
"support": {
"source": "https://github.com/grokability/laravel-scim-server/tree/master"
},
"time": "2022-07-18T22:15:42+00:00"
"time": "2022-10-06T00:42:37+00:00"
},
{
"name": "asm89/stack-cors",
@ -13530,5 +13530,5 @@
"ext-pdo": "*"
},
"platform-dev": [],
"plugin-api-version": "2.0.0"
"plugin-api-version": "2.3.0"
}

View file

@ -100,6 +100,11 @@ return [
'emergency' => [
'path' => storage_path('logs/laravel.log'),
],
'scimtrace' => [
'driver' => 'single',
'path' => storage_path('logs/scim.log')
]
],
];

View file

@ -1,5 +1,6 @@
<?php
return [
"publish_routes" => false
"publish_routes" => false,
"trace" => env("SCIM_TRACE",false)
];

View file

@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddStartTerminationDateToUsers extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->date('start_date')->nullable()->default(null);
$table->date('end_date')->nullable()->default(null);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('start_date');
$table->dropColumn('end_date');
});
}
}

View file

@ -378,6 +378,8 @@ return [
'pie_chart_type' => 'Dashboard Pie Chart Type',
'hello_name' => 'Hello, :name!',
'unaccepted_profile_warning' => 'You have :count items requiring acceptance. Click here to accept or decline them',
'start_date' => 'Start Date',
'end_date' => 'End Date',
];

View file

@ -19,7 +19,7 @@
@foreach ($field->formatFieldValuesAsArray() as $key => $value)
<div>
<label>
<input type="checkbox" value="{{ $value }}" name="{{ $field->db_column_name() }}[]" class="minimal" {{ isset($item) ? (in_array($value, explode(', ', $item->{$field->db_column_name()})) ? ' checked="checked"' : '') : (Request::old($field->db_column_name()) != '' ? ' checked="checked"' : (in_array($key, explode(', ', $field->defaultValue($model->id))) ? ' checked="checked"' : '')) }}>
<input type="checkbox" value="{{ $value }}" name="{{ $field->db_column_name() }}[]" class="minimal" {{ isset($item) ? (in_array($value, preg_split('/[, |,]/', $item->{$field->db_column_name()})) ? ' checked="checked"' : '') : (Request::old($field->db_column_name()) != '' ? ' checked="checked"' : (in_array($key, preg_split('/[, |,]/', $field->defaultValue($model->id))) ? ' checked="checked"' : '')) }}>
{{ $value }}
</label>
</div>

View file

@ -1,9 +1,9 @@
<!-- Datepicker -->
<div class="form-group{{ $errors->has($fieldname) ? ' has-error' : '' }}">
{{ Form::label($fieldname, $translated_name, array('class' => 'col-md-3 control-label')) }}
<div class="input-group col-md-3">
<div class="input-group date" data-provide="datepicker" data-date-format="yyyy-mm-dd" data-autoclose="true">
<input type="text" class="form-control" placeholder="{{ trans('general.select_date') }}" name="{{ $fieldname }}" id="{{ $fieldname }}" value="{{ old($fieldname, ($item->{$fieldname}) ? $item->{$fieldname}->format('Y-m-d') : '') }}">
<div class="input-group col-md-4">
<div class="input-group date" data-provide="datepicker" data-date-clear-btn="true" data-date-format="yyyy-mm-dd" data-autoclose="true">
<input type="text" class="form-control" placeholder="{{ trans('general.select_date') }}" name="{{ $fieldname }}" id="{{ $fieldname }}" value="{{ old($fieldname, ($item->{$fieldname}) ? $item->{$fieldname}->format('Y-m-d') : '') }}" readonly>
<span class="input-group-addon"><i class="fas fa-calendar" aria-hidden="true"></i></span>
</div>
{!! $errors->first($fieldname, '<span class="alert-msg" aria-hidden="true"><i class="fas fa-times" aria-hidden="true"></i> :message</span>') !!}

View file

@ -358,6 +358,10 @@
<!-- Department -->
@include ('partials.forms.edit.department-select', ['translated_name' => trans('general.department'), 'fieldname' => 'department_id'])
@include ('partials.forms.edit.datepicker', ['translated_name' => trans('general.start_date'), 'fieldname' => 'start_date'])
@include ('partials.forms.edit.datepicker', ['translated_name' => trans('general.end_date'), 'fieldname' => 'end_date'])
<!-- remote checkbox -->
<div class="form-group">

View file

@ -343,6 +343,30 @@
</div>
</div>
<!-- start date -->
@if ($user->start_date)
<div class="row">
<div class="col-md-3">
{{ trans('general.start_date') }}
</div>
<div class="col-md-9">
{{ \App\Helpers\Helper::getFormattedDateObject($user->start_date, 'date', false) }}
</div>
</div>
@endif
<!-- end date -->
@if ($user->end_date)
<div class="row">
<div class="col-md-3">
{{ trans('general.end_date') }}
</div>
<div class="col-md-9">
{{ \App\Helpers\Helper::getFormattedDateObject($user->end_date, 'date', false) }}
</div>
</div>
@endif
@if ($user->jobtitle)
<!-- jobtitle -->
<div class="row">