mirror of
https://github.com/snipe/snipe-it.git
synced 2025-01-15 15:57:27 -08:00
Merge remote-tracking branch 'origin/develop'
This commit is contained in:
commit
749b87cbbd
|
@ -101,7 +101,7 @@ class LicenseCheckinController extends Controller
|
||||||
|
|
||||||
// Was the asset updated?
|
// Was the asset updated?
|
||||||
if ($licenseSeat->save()) {
|
if ($licenseSeat->save()) {
|
||||||
event(new CheckoutableCheckedIn($licenseSeat, $return_to, Auth::user(), $request->input('note')));
|
event(new CheckoutableCheckedIn($licenseSeat, $return_to, Auth::user(), $request->input('notes')));
|
||||||
|
|
||||||
if ($backTo == 'user') {
|
if ($backTo == 'user') {
|
||||||
return redirect()->route('users.show', $return_to->id)->with('success', trans('admin/licenses/message.checkin.success'));
|
return redirect()->route('users.show', $return_to->id)->with('success', trans('admin/licenses/message.checkin.success'));
|
||||||
|
|
|
@ -105,7 +105,7 @@ class LicenseCheckoutController extends Controller
|
||||||
$licenseSeat->assigned_to = $target->assigned_to;
|
$licenseSeat->assigned_to = $target->assigned_to;
|
||||||
}
|
}
|
||||||
if ($licenseSeat->save()) {
|
if ($licenseSeat->save()) {
|
||||||
event(new CheckoutableCheckedOut($licenseSeat, $target, Auth::user(), request('note')));
|
event(new CheckoutableCheckedOut($licenseSeat, $target, Auth::user(), request('notes')));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -122,7 +122,7 @@ class LicenseCheckoutController extends Controller
|
||||||
$licenseSeat->assigned_to = request('assigned_to');
|
$licenseSeat->assigned_to = request('assigned_to');
|
||||||
|
|
||||||
if ($licenseSeat->save()) {
|
if ($licenseSeat->save()) {
|
||||||
event(new CheckoutableCheckedOut($licenseSeat, $target, Auth::user(), request('note')));
|
event(new CheckoutableCheckedOut($licenseSeat, $target, Auth::user(), request('notes')));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -539,23 +539,23 @@ class ReportsController extends Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request->filled('user_address')) {
|
if ($request->filled('user_address')) {
|
||||||
$header[] = trans('general.user') .' '. trans('general.address');
|
$header[] = trans('admin/reports/general.custom_export.user_address');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request->filled('user_city')) {
|
if ($request->filled('user_city')) {
|
||||||
$header[] = trans('general.user') .' '. trans('general.city');
|
$header[] = trans('admin/reports/general.custom_export.user_city');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request->filled('user_state')) {
|
if ($request->filled('user_state')) {
|
||||||
$header[] = trans('general.user') .' '. trans('general.state');
|
$header[] = trans('admin/reports/general.custom_export.user_state');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request->filled('user_country')) {
|
if ($request->filled('user_country')) {
|
||||||
$header[] = trans('general.user') .' '. trans('general.country');
|
$header[] = trans('admin/reports/general.custom_export.user_country');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request->filled('user_zip')) {
|
if ($request->filled('user_zip')) {
|
||||||
$header[] = trans('general.user') .' '. trans('general.zip');
|
$header[] = trans('admin/reports/general.custom_export.user_zip');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request->filled('status')) {
|
if ($request->filled('status')) {
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace App\Notifications;
|
namespace App\Notifications;
|
||||||
|
|
||||||
|
use App\Helpers\Helper;
|
||||||
use App\Models\Asset;
|
use App\Models\Asset;
|
||||||
use App\Models\Setting;
|
use App\Models\Setting;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
|
|
@ -6,5 +6,12 @@ return [
|
||||||
'send_reminder' => 'Send reminder',
|
'send_reminder' => 'Send reminder',
|
||||||
'reminder_sent' => 'Reminder sent',
|
'reminder_sent' => 'Reminder sent',
|
||||||
'acceptance_deleted' => 'Acceptance request deleted',
|
'acceptance_deleted' => 'Acceptance request deleted',
|
||||||
'acceptance_request' => 'Acceptance request'
|
'acceptance_request' => 'Acceptance request',
|
||||||
|
'custom_export' => [
|
||||||
|
'user_address' => 'User Address',
|
||||||
|
'user_city' => 'User City',
|
||||||
|
'user_state' => 'User State',
|
||||||
|
'user_country' => 'User Country',
|
||||||
|
'user_zip' => 'User Zip'
|
||||||
|
]
|
||||||
];
|
];
|
|
@ -24,7 +24,7 @@
|
||||||
data-side-pagination="client"
|
data-side-pagination="client"
|
||||||
data-show-columns="true"
|
data-show-columns="true"
|
||||||
data-show-export="true"
|
data-show-export="true"
|
||||||
data-show-refresh="true"
|
data-show-refresh="false"
|
||||||
data-sort-order="asc"
|
data-sort-order="asc"
|
||||||
id="pendingAcceptances"
|
id="pendingAcceptances"
|
||||||
class="table table-striped snipe-table"
|
class="table table-striped snipe-table"
|
||||||
|
|
|
@ -388,7 +388,7 @@
|
||||||
data-show-columns="true"
|
data-show-columns="true"
|
||||||
data-show-export="true"
|
data-show-export="true"
|
||||||
data-show-footer="true"
|
data-show-footer="true"
|
||||||
data-show-refresh="true"
|
data-show-refresh="false"
|
||||||
data-sort-order="asc"
|
data-sort-order="asc"
|
||||||
id="userAssets"
|
id="userAssets"
|
||||||
class="table table-striped snipe-table"
|
class="table table-striped snipe-table"
|
||||||
|
@ -478,7 +478,7 @@
|
||||||
data-side-pagination="client"
|
data-side-pagination="client"
|
||||||
data-show-columns="true"
|
data-show-columns="true"
|
||||||
data-show-export="true"
|
data-show-export="true"
|
||||||
data-show-refresh="true"
|
data-show-refresh="false"
|
||||||
data-sort-order="asc"
|
data-sort-order="asc"
|
||||||
id="userLicenses"
|
id="userLicenses"
|
||||||
class="table table-striped snipe-table"
|
class="table table-striped snipe-table"
|
||||||
|
@ -525,7 +525,7 @@
|
||||||
data-show-fullscreen="true"
|
data-show-fullscreen="true"
|
||||||
data-show-export="true"
|
data-show-export="true"
|
||||||
data-show-footer="true"
|
data-show-footer="true"
|
||||||
data-show-refresh="true"
|
data-show-refresh="false"
|
||||||
data-sort-order="asc"
|
data-sort-order="asc"
|
||||||
data-sort-name="name"
|
data-sort-name="name"
|
||||||
class="table table-striped snipe-table table-hover"
|
class="table table-striped snipe-table table-hover"
|
||||||
|
@ -576,7 +576,7 @@
|
||||||
data-show-fullscreen="true"
|
data-show-fullscreen="true"
|
||||||
data-show-export="true"
|
data-show-export="true"
|
||||||
data-show-footer="true"
|
data-show-footer="true"
|
||||||
data-show-refresh="true"
|
data-show-refresh="false"
|
||||||
data-sort-order="asc"
|
data-sort-order="asc"
|
||||||
data-sort-name="name"
|
data-sort-name="name"
|
||||||
class="table table-striped snipe-table table-hover"
|
class="table table-striped snipe-table table-hover"
|
||||||
|
|
|
@ -104,6 +104,17 @@
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="#history" data-toggle="tab">
|
||||||
|
<span class="hidden-lg hidden-md">
|
||||||
|
<i class="fas fa-hdd fa-2x" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
<span class="hidden-xs hidden-sm">
|
||||||
|
{{ trans('general.history') }}
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
@ -319,6 +330,51 @@
|
||||||
</div><!-- /.table-responsive -->
|
</div><!-- /.table-responsive -->
|
||||||
</div><!-- /.tab-pane -->
|
</div><!-- /.tab-pane -->
|
||||||
|
|
||||||
|
<div class="tab-pane" id="history">
|
||||||
|
<h2 class="box-title">{{ trans('general.history') }}</h2>
|
||||||
|
<!-- checked out assets table -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<table
|
||||||
|
class="table table-striped snipe-table"
|
||||||
|
id="assetHistory"
|
||||||
|
data-pagination="true"
|
||||||
|
data-id-table="assetHistory"
|
||||||
|
data-search="true"
|
||||||
|
data-side-pagination="server"
|
||||||
|
data-show-columns="true"
|
||||||
|
data-show-fullscreen="true"
|
||||||
|
data-show-refresh="true"
|
||||||
|
data-sort-order="desc"
|
||||||
|
data-sort-name="created_at"
|
||||||
|
data-show-export="true"
|
||||||
|
data-export-options='{
|
||||||
|
"fileName": "export-location-asset-{{ $location->id }}-history",
|
||||||
|
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
|
||||||
|
}'
|
||||||
|
|
||||||
|
data-url="{{ route('api.activity.index', ['target_id' => $location->id, 'target_type' => 'location']) }}"
|
||||||
|
data-cookie-id-table="assetHistory"
|
||||||
|
data-cookie="true">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th data-visible="true" data-field="icon" style="width: 40px;" class="hidden-xs" data-formatter="iconFormatter">{{ trans('admin/hardware/table.icon') }}</th>
|
||||||
|
<th class="col-sm-2" data-visible="true" data-field="action_date" data-formatter="dateDisplayFormatter">{{ trans('general.date') }}</th>
|
||||||
|
<th class="col-sm-1" data-visible="true" data-field="admin" data-formatter="usersLinkObjFormatter">{{ trans('general.admin') }}</th>
|
||||||
|
<th class="col-sm-1" data-visible="true" data-field="action_type">{{ trans('general.action') }}</th>
|
||||||
|
<th class="col-sm-2" data-visible="true" data-field="item" data-formatter="polymorphicItemFormatter">{{ trans('general.item') }}</th>
|
||||||
|
<th class="col-sm-2" data-visible="true" data-field="target" data-formatter="polymorphicItemFormatter">{{ trans('general.target') }}</th>
|
||||||
|
<th class="col-sm-2" data-field="note">{{ trans('general.notes') }}</th>
|
||||||
|
<th class="col-md-3" data-field="signature_file" data-visible="false" data-formatter="imageFormatter">{{ trans('general.signature') }}</th>
|
||||||
|
<th class="col-md-3" data-visible="false" data-field="file" data-visible="false" data-formatter="fileUploadFormatter">{{ trans('general.download') }}</th>
|
||||||
|
<th class="col-sm-2" data-field="log_meta" data-visible="true" data-formatter="changeLogFormatter">{{ trans('admin/hardware/table.changed')}}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div> <!-- /.row -->
|
||||||
|
</div> <!-- /.tab-pane history -->
|
||||||
|
|
||||||
</div><!--/.col-md-9-->
|
</div><!--/.col-md-9-->
|
||||||
</div><!--/.col-md-9-->
|
</div><!--/.col-md-9-->
|
||||||
</div><!--/.col-md-9-->
|
</div><!--/.col-md-9-->
|
||||||
|
|
62
tests/Feature/Checkouts/LicenseCheckoutTest.php
Normal file
62
tests/Feature/Checkouts/LicenseCheckoutTest.php
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature\Checkouts;
|
||||||
|
|
||||||
|
use App\Models\Asset;
|
||||||
|
use App\Models\License;
|
||||||
|
use App\Models\LicenseSeat;
|
||||||
|
use App\Models\User;
|
||||||
|
use Tests\Support\InteractsWithSettings;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class LicenseCheckoutTest extends TestCase
|
||||||
|
{
|
||||||
|
use InteractsWithSettings;
|
||||||
|
|
||||||
|
public function testNotesAreStoredInActionLogOnCheckoutToAsset()
|
||||||
|
{
|
||||||
|
$admin = User::factory()->superuser()->create();
|
||||||
|
$asset = Asset::factory()->create();
|
||||||
|
$licenseSeat = LicenseSeat::factory()->create();
|
||||||
|
|
||||||
|
$this->actingAs($admin)
|
||||||
|
->post("/licenses/{$licenseSeat->license->id}/checkout", [
|
||||||
|
'checkout_to_type' => 'asset',
|
||||||
|
'assigned_to' => null,
|
||||||
|
'asset_id' => $asset->id,
|
||||||
|
'notes' => 'oh hi there',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertDatabaseHas('action_logs', [
|
||||||
|
'action_type' => 'checkout',
|
||||||
|
'target_id' => $asset->id,
|
||||||
|
'target_type' => Asset::class,
|
||||||
|
'item_id' => $licenseSeat->license->id,
|
||||||
|
'item_type' => License::class,
|
||||||
|
'note' => 'oh hi there',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNotesAreStoredInActionLogOnCheckoutToUser()
|
||||||
|
{
|
||||||
|
$admin = User::factory()->superuser()->create();
|
||||||
|
$licenseSeat = LicenseSeat::factory()->create();
|
||||||
|
|
||||||
|
$this->actingAs($admin)
|
||||||
|
->post("/licenses/{$licenseSeat->license->id}/checkout", [
|
||||||
|
'checkout_to_type' => 'user',
|
||||||
|
'assigned_to' => $admin->id,
|
||||||
|
'asset_id' => null,
|
||||||
|
'notes' => 'oh hi there',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertDatabaseHas('action_logs', [
|
||||||
|
'action_type' => 'checkout',
|
||||||
|
'target_id' => $admin->id,
|
||||||
|
'target_type' => User::class,
|
||||||
|
'item_id' => $licenseSeat->license->id,
|
||||||
|
'item_type' => License::class,
|
||||||
|
'note' => 'oh hi there',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue