mirror of
https://github.com/snipe/snipe-it.git
synced 2024-12-27 14:39:49 -08:00
08c3a25b39
Signed-off-by: snipe <snipe@snipe.net>
515 lines
27 KiB
PHP
515 lines
27 KiB
PHP
@extends('layouts/default')
|
|
|
|
{{-- Page title --}}
|
|
@section('title')
|
|
|
|
{{ trans('general.location') }}:
|
|
{{ $location->name }}
|
|
|
|
@parent
|
|
@stop
|
|
|
|
@section('header_right')
|
|
<a href="{{ route('locations.index') }}" class="btn btn-primary" style="margin-right: 10px;">
|
|
{{ trans('general.back') }}</a>
|
|
@endsection
|
|
{{-- Page content --}}
|
|
@section('content')
|
|
|
|
<div class="row">
|
|
<div class="col-md-9">
|
|
|
|
<div class="nav-tabs-custom">
|
|
<ul class="nav nav-tabs hidden-print">
|
|
|
|
<li class="active">
|
|
<a href="#users" data-toggle="tab">
|
|
<span class="hidden-lg hidden-md">
|
|
<x-icon type="users" class="fa-2x" />
|
|
</span>
|
|
<span class="hidden-xs hidden-sm">
|
|
{{ trans('general.users') }}
|
|
{!! ($location->users->count() > 0 ) ? '<badge class="badge badge-secondary">'.number_format($location->users->count()).'</badge>' : '' !!}
|
|
|
|
</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="#assets" data-toggle="tab">
|
|
<span class="hidden-lg hidden-md">
|
|
<x-icon type="assets" class="fa-2x" />
|
|
</span>
|
|
<span class="hidden-xs hidden-sm">
|
|
{{ trans('admin/locations/message.current_location') }}
|
|
{!! ($location->assets()->AssetsForShow()->count() > 0 ) ? '<badge class="badge badge-secondary">'.number_format($location->assets()->AssetsForShow()->count()).'</badge>' : '' !!}
|
|
</span>
|
|
</a>
|
|
</li>
|
|
|
|
|
|
<li>
|
|
<a href="#rtd_assets" data-toggle="tab">
|
|
<span class="hidden-lg hidden-md">
|
|
|
|
<x-icon type="assets" class="fa-2x" />
|
|
</span>
|
|
<span class="hidden-xs hidden-sm">
|
|
{{ trans('admin/hardware/form.default_location') }}
|
|
{!! ($location->rtd_assets()->AssetsForShow()->count() > 0 ) ? '<badge class="badge badge-secondary">'.number_format($location->rtd_assets()->AssetsForShow()->count()).'</badge>' : '' !!}
|
|
</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="#assets_assigned" data-toggle="tab">
|
|
<span class="hidden-lg hidden-md">
|
|
<x-icon type="assets" class="fa-2x" />
|
|
</span>
|
|
<span class="hidden-xs hidden-sm">
|
|
{{ trans('admin/locations/message.assigned_assets') }}
|
|
{!! ($location->assignedAssets()->AssetsForShow()->count() > 0 ) ? '<badge class="badge badge-secondary">'.number_format($location->assignedAssets()->AssetsForShow()->count()).'</badge>' : '' !!}
|
|
</span>
|
|
</a>
|
|
</li>
|
|
|
|
|
|
<li>
|
|
<a href="#accessories" data-toggle="tab">
|
|
<span class="hidden-lg hidden-md">
|
|
<x-icon type="accessories" class="fa-2x "/>
|
|
</span>
|
|
<span class="hidden-xs hidden-sm">
|
|
{{ trans('general.accessories') }}
|
|
{!! ($location->accessories->count() > 0 ) ? '<badge class="badge badge-secondary">'.number_format($location->accessories->count()).'</badge>' : '' !!}
|
|
</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="#consumables" data-toggle="tab">
|
|
<span class="hidden-lg hidden-md">
|
|
<x-icon type="consumables" class="fa-2x "/>
|
|
</span>
|
|
<span class="hidden-xs hidden-sm">
|
|
{{ trans('general.consumables') }}
|
|
{!! ($location->consumables->count() > 0 ) ? '<badge class="badge badge-secondary">'.number_format($location->consumables->count()).'</badge>' : '' !!}
|
|
</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="#components" data-toggle="tab">
|
|
<span class="hidden-lg hidden-md">
|
|
<x-icon type="components" class="fa-2x "/>
|
|
</span>
|
|
<span class="hidden-xs hidden-sm">
|
|
{{ trans('general.components') }}
|
|
{!! ($location->components->count() > 0 ) ? '<badge class="badge badge-secondary">'.number_format($location->components->count()).'</badge>' : '' !!}
|
|
</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="#history" data-toggle="tab">
|
|
<span class="hidden-lg hidden-md">
|
|
<x-icon type="history" class="fa-2x "/>
|
|
</span>
|
|
<span class="hidden-xs hidden-sm">
|
|
{{ trans('general.history') }}
|
|
</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<div class="tab-content">
|
|
<div class="tab-pane active" id="users">
|
|
<h2 class="box-title">{{ trans('general.users') }}</h2>
|
|
<div class="table table-responsive">
|
|
@include('partials.users-bulk-actions')
|
|
<table
|
|
data-columns="{{ \App\Presenters\UserPresenter::dataTableLayout() }}"
|
|
data-cookie-id-table="usersTable"
|
|
data-pagination="true"
|
|
data-id-table="usersTable"
|
|
data-search="true"
|
|
data-side-pagination="server"
|
|
data-show-columns="true"
|
|
data-show-export="true"
|
|
data-show-refresh="true"
|
|
data-sort-order="asc"
|
|
data-toolbar="#userBulkEditToolbar"
|
|
data-bulk-button-id="#bulkUserEditButton"
|
|
data-bulk-form-id="#usersBulkForm"
|
|
data-click-to-select="true"
|
|
id="usersTable"
|
|
class="table table-striped snipe-table"
|
|
data-url="{{route('api.users.index', ['location_id' => $location->id])}}"
|
|
data-export-options='{
|
|
"fileName": "export-locations-{{ str_slug($location->name) }}-users-{{ date('Y-m-d') }}",
|
|
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
|
|
}'>
|
|
|
|
</table>
|
|
</div><!-- /.table-responsive -->
|
|
</div><!-- /.tab-pane -->
|
|
|
|
<div class="tab-pane" id="assets">
|
|
<h2 class="box-title">{{ trans('admin/locations/message.current_location') }}</h2>
|
|
|
|
<div class="table table-responsive">
|
|
@include('partials.asset-bulk-actions')
|
|
<table
|
|
data-columns="{{ \App\Presenters\AssetPresenter::dataTableLayout() }}"
|
|
data-cookie-id-table="assetsListingTable"
|
|
data-pagination="true"
|
|
data-id-table="assetsListingTable"
|
|
data-search="true"
|
|
data-side-pagination="server"
|
|
data-show-columns="true"
|
|
data-show-export="true"
|
|
data-show-refresh="true"
|
|
data-sort-order="asc"
|
|
data-toolbar="#assetsBulkEditToolbar"
|
|
data-bulk-button-id="#bulkAssetEditButton"
|
|
data-bulk-form-id="#assetsBulkForm"
|
|
data-click-to-select="true"
|
|
id="assetsListingTable"
|
|
class="table table-striped snipe-table"
|
|
data-url="{{route('api.assets.index', ['location_id' => $location->id]) }}"
|
|
data-export-options='{
|
|
"fileName": "export-locations-{{ str_slug($location->name) }}-assets-{{ date('Y-m-d') }}",
|
|
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
|
|
}'>
|
|
</table>
|
|
|
|
</div><!-- /.table-responsive -->
|
|
</div><!-- /.tab-pane -->
|
|
|
|
<div class="tab-pane" id="assets_assigned">
|
|
<h2 class="box-title">
|
|
{{ trans('admin/locations/message.assigned_assets') }}
|
|
</h2>
|
|
|
|
<div class="table table-responsive">
|
|
@include('partials.asset-bulk-actions', ['id_divname' => 'AssignedAssetsBulkEditToolbar', 'id_formname' => 'assignedAssetsBulkForm', 'id_button' => 'AssignedbulkAssetEditButton'])
|
|
<table
|
|
data-columns="{{ \App\Presenters\AssetPresenter::dataTableLayout() }}"
|
|
data-cookie-id-table="assetsAssignedListingTable"
|
|
data-pagination="true"
|
|
data-id-table="assetsAssignedListingTable"
|
|
data-search="true"
|
|
data-side-pagination="server"
|
|
data-show-columns="true"
|
|
data-show-export="true"
|
|
data-show-refresh="true"
|
|
data-sort-order="asc"
|
|
data-toolbar="#AssignedAssetsBulkEditToolbar"
|
|
data-bulk-button-id="#AssignedbulkAssetEditButton"
|
|
data-bulk-form-id="#assignedAssetsBulkForm"
|
|
data-click-to-select="true"
|
|
id="assetsListingTable"
|
|
class="table table-striped snipe-table"
|
|
data-url="{{route('api.assets.index', ['assigned_to' => $location->id, 'assigned_type' => \App\Models\Location::class]) }}"
|
|
data-export-options='{
|
|
"fileName": "export-locations-{{ str_slug($location->name) }}-assets-{{ date('Y-m-d') }}",
|
|
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
|
|
}'>
|
|
</table>
|
|
|
|
</div><!-- /.table-responsive -->
|
|
</div><!-- /.tab-pane -->
|
|
|
|
<div class="tab-pane" id="rtd_assets">
|
|
<h2 class="box-title">{{ trans('admin/hardware/form.default_location') }}</h2>
|
|
|
|
<div class="table table-responsive">
|
|
@include('partials.asset-bulk-actions', ['id_divname' => 'RTDassetsBulkEditToolbar', 'id_formname' => 'RTDassets', 'id_button' => 'RTDbulkAssetEditButton'])
|
|
<table
|
|
data-columns="{{ \App\Presenters\AssetPresenter::dataTableLayout() }}"
|
|
data-cookie-id-table="RTDassetsListingTable"
|
|
data-pagination="true"
|
|
data-id-table="RTDassetsListingTable"
|
|
data-search="true"
|
|
data-side-pagination="server"
|
|
data-show-columns="true"
|
|
data-show-export="true"
|
|
data-show-refresh="true"
|
|
data-sort-order="asc"
|
|
data-toolbar="#RTDassetsBulkEditToolbar"
|
|
data-bulk-button-id="#RTDbulkAssetEditButton"
|
|
data-bulk-form-id="#RTDassetsBulkEditToolbar"
|
|
data-click-to-select="true"
|
|
id="RTDassetsListingTable"
|
|
class="table table-striped snipe-table"
|
|
data-url="{{route('api.assets.index', ['rtd_location_id' => $location->id]) }}"
|
|
data-export-options='{
|
|
"fileName": "export-rtd-locations-{{ str_slug($location->name) }}-assets-{{ date('Y-m-d') }}",
|
|
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
|
|
}'>
|
|
</table>
|
|
|
|
</div><!-- /.table-responsive -->
|
|
</div><!-- /.tab-pane -->
|
|
|
|
|
|
|
|
<div class="tab-pane" id="accessories">
|
|
<h2 class="box-title">{{ trans('general.accessories') }}</h2>
|
|
<div class="table table-responsive">
|
|
<table
|
|
data-columns="{{ \App\Presenters\AccessoryPresenter::dataTableLayout() }}"
|
|
data-cookie-id-table="accessoriesListingTable"
|
|
data-pagination="true"
|
|
data-id-table="accessoriesListingTable"
|
|
data-search="true"
|
|
data-side-pagination="server"
|
|
data-show-columns="true"
|
|
data-show-export="true"
|
|
data-show-refresh="true"
|
|
data-sort-order="asc"
|
|
id="accessoriesListingTable"
|
|
class="table table-striped snipe-table"
|
|
data-url="{{route('api.accessories.index', ['location_id' => $location->id]) }}"
|
|
data-export-options='{
|
|
"fileName": "export-locations-{{ str_slug($location->name) }}-accessories-{{ date('Y-m-d') }}",
|
|
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
|
|
}'>
|
|
</table>
|
|
</div><!-- /.table-responsive -->
|
|
</div><!-- /.tab-pane -->
|
|
|
|
|
|
<div class="tab-pane" id="consumables">
|
|
<h2 class="box-title">{{ trans('general.consumables') }}</h2>
|
|
|
|
<div class="table table-responsive">
|
|
<table
|
|
data-columns="{{ \App\Presenters\ConsumablePresenter::dataTableLayout() }}"
|
|
data-cookie-id-table="consumablesListingTable"
|
|
data-pagination="true"
|
|
data-id-table="consumablesListingTable"
|
|
data-search="true"
|
|
data-side-pagination="server"
|
|
data-show-columns="true"
|
|
data-show-export="true"
|
|
data-show-refresh="true"
|
|
data-sort-order="asc"
|
|
id="consumablesListingTable"
|
|
class="table table-striped snipe-table"
|
|
data-url="{{route('api.consumables.index', ['location_id' => $location->id]) }}"
|
|
data-export-options='{
|
|
"fileName": "export-locations-{{ str_slug($location->name) }}-consumables-{{ date('Y-m-d') }}",
|
|
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
|
|
}'>
|
|
</table>
|
|
|
|
</div><!-- /.table-responsive -->
|
|
</div><!-- /.tab-pane -->
|
|
|
|
<div class="tab-pane" id="components">
|
|
<h2 class="box-title">{{ trans('general.components') }}</h2>
|
|
<div class="table table-responsive">
|
|
|
|
<table
|
|
data-columns="{{ \App\Presenters\ComponentPresenter::dataTableLayout() }}"
|
|
data-cookie-id-table="componentsTable"
|
|
data-pagination="true"
|
|
data-id-table="componentsTable"
|
|
data-search="true"
|
|
data-side-pagination="server"
|
|
data-show-columns="true"
|
|
data-show-export="true"
|
|
data-show-refresh="true"
|
|
data-sort-order="asc"
|
|
id="componentsTable"
|
|
class="table table-striped snipe-table"
|
|
data-url="{{route('api.components.index', ['location_id' => $location->id])}}"
|
|
data-export-options='{
|
|
"fileName": "export-locations-{{ str_slug($location->name) }}-components-{{ date('Y-m-d') }}",
|
|
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
|
|
}'>
|
|
|
|
</table>
|
|
</div><!-- /.table-responsive -->
|
|
</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 class="col-md-3">
|
|
|
|
@if ($location->image!='')
|
|
<div class="col-md-12 text-center" style="padding-bottom: 20px;">
|
|
<img src="{{ Storage::disk('public')->url('locations/'.e($location->image)) }}" class="img-responsive img-thumbnail" style="width:100%" alt="{{ $location->name }}">
|
|
</div>
|
|
@endif
|
|
|
|
@if (($location->state!='') && ($location->country!='') && (config('services.google.maps_api_key')))
|
|
<div class="col-md-12 text-center" style="padding-bottom: 10px;">
|
|
<img src="https://maps.googleapis.com/maps/api/staticmap?markers={{ urlencode($location->address.','.$location->city.' '.$location->state.' '.$location->country.' '.$location->zip) }}&size=700x500&maptype=roadmap&key={{ config('services.google.maps_api_key') }}" class="img-thumbnail" style="width:100%" alt="Map">
|
|
</div>
|
|
@endif
|
|
|
|
<div class="col-md-12">
|
|
<ul class="list-unstyled" style="line-height: 20px; padding-bottom: 20px;">
|
|
@if ($location->address!='')
|
|
<li>{{ $location->address }}</li>
|
|
@endif
|
|
@if ($location->address2!='')
|
|
<li>{{ $location->address2 }}</li>
|
|
@endif
|
|
@if (($location->city!='') || ($location->state!='') || ($location->zip!=''))
|
|
<li>{{ $location->city }} {{ $location->state }} {{ $location->zip }}</li>
|
|
@endif
|
|
@if ($location->manager)
|
|
<li>{{ trans('admin/users/table.manager') }}: {!! $location->manager->present()->nameUrl() !!}</li>
|
|
@endif
|
|
@if ($location->parent)
|
|
<li>{{ trans('admin/locations/table.parent') }}: {!! $location->parent->present()->nameUrl() !!}</li>
|
|
@endif
|
|
@if ($location->ldap_ou)
|
|
<li>{{ trans('admin/locations/table.ldap_ou') }}: {{ $location->ldap_ou }}</li>
|
|
@endif
|
|
|
|
@if ((($location->address!='') && ($location->city!='')) || ($location->state!='') || ($location->country!=''))
|
|
<li>
|
|
<a href="https://maps.google.com/?q={{ urlencode($location->address.','. $location->city.','.$location->state.','.$location->country.','.$location->zip) }}" target="_blank">
|
|
{!! trans('admin/locations/message.open_map', ['map_provider_icon' => '<i class="fa-brands fa-google" aria-hidden="true"></i>']) !!}
|
|
<x-icon type="external-link"/>
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="https://maps.apple.com/?q={{ urlencode($location->address.','. $location->city.','.$location->state.','.$location->country.','.$location->zip) }}" target="_blank">
|
|
{!! trans('admin/locations/message.open_map', ['map_provider_icon' => '<i class="fa-brands fa-apple" aria-hidden="true" style="font-size: 18px"></i>']) !!}
|
|
<x-icon type="external-link"/></a>
|
|
</li>
|
|
@endif
|
|
|
|
</ul>
|
|
</div>
|
|
|
|
@can('update', $location)
|
|
<div class="col-md-12">
|
|
<a href="{{ route('locations.edit', ['location' => $location->id]) }}" style="width: 100%;" class="btn btn-sm btn-warning btn-social">
|
|
<x-icon type="edit" />
|
|
{{ trans('admin/locations/table.update') }}
|
|
</a>
|
|
</div>
|
|
@endcan
|
|
|
|
<div class="col-md-12" style="padding-top: 5px;">
|
|
<a href="{{ route('locations.print_assigned', ['locationId' => $location->id]) }}" style="width: 100%;" class="btn btn-sm btn-primary btn-social hidden-print">
|
|
<x-icon type="print" />
|
|
{{ trans('admin/locations/table.print_assigned') }}
|
|
</a>
|
|
</div>
|
|
<div class="col-md-12" style="padding-top: 5px;">
|
|
<a href="{{ route('locations.print_all_assigned', ['locationId' => $location->id]) }}" style="width: 100%;" class="btn btn-sm btn-primary btn-social hidden-print">
|
|
<x-icon type="print" />
|
|
{{ trans('admin/locations/table.print_all_assigned') }}
|
|
</a>
|
|
</div>
|
|
|
|
@can('delete', $location)
|
|
<div class="col-md-12 hidden-print" style="padding-top: 10px;">
|
|
|
|
@if ($location->deleted_at=='')
|
|
|
|
@if ($location->isDeletable())
|
|
<button class="btn btn-sm btn-block btn-danger btn-social delete-location" data-toggle="modal" data-title="{{ trans('general.delete') }}" data-content="{{ trans('general.sure_to_delete_var', ['item' => $location->name]) }}" data-target="#dataConfirmModal">
|
|
<x-icon type="delete" />
|
|
{{ trans('general.delete') }}
|
|
</button>
|
|
@else
|
|
<a href="#" class="btn btn-block btn-sm btn-danger btn-social hidden-print disabled" data-tooltip="true" data-placement="top" data-title="{{ trans('general.cannot_be_deleted') }}">
|
|
<x-icon type="delete" />
|
|
{{ trans('general.delete') }}
|
|
</a>
|
|
@endif
|
|
|
|
@else
|
|
<form method="POST" action="{{ route('locations.restore', ['location' => $location->id]) }}">
|
|
@csrf
|
|
<button class="btn btn-sm btn-block btn-warning btn-social delete-asset">
|
|
<x-icon type="restore" />
|
|
{{ trans('general.restore') }}
|
|
</button>
|
|
</form>
|
|
@endif
|
|
</div>
|
|
@endcan
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
@stop
|
|
|
|
@section('moar_scripts')
|
|
|
|
<script>
|
|
$('#dataConfirmModal').on('show.bs.modal', function (event) {
|
|
var content = $(event.relatedTarget).data('content');
|
|
var title = $(event.relatedTarget).data('title');
|
|
$(this).find(".modal-body").text(content);
|
|
$(this).find(".modal-header").text(title);
|
|
});
|
|
</script>
|
|
|
|
@include ('partials.bootstrap-table', [
|
|
'exportFile' => 'locations-export',
|
|
'search' => true
|
|
])
|
|
|
|
@stop
|