diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index cfb0aa9f15..1913c86286 100644 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -12,6 +12,7 @@ use App\Models\Statuslabel; use Crypt; use Illuminate\Contracts\Encryption\DecryptException; use Image; +use Carbon\Carbon; class Helper { @@ -1125,5 +1126,25 @@ class Helper return $settings; } + public static function AgeFormat($date) { + $year = Carbon::parse($date) + ->diff(now())->y; + $month = Carbon::parse($date) + ->diff(now())->m; + $days = Carbon::parse($date) + ->diff(now())->d; + $age=''; + if ($year) { + $age .= $year.'y '; + } + if ($month) { + $age .= $month.'m '; + } + if ($days) { + $age .= $days.'d'; + } + return $age; + + } } diff --git a/app/Http/Transformers/AssetsTransformer.php b/app/Http/Transformers/AssetsTransformer.php index 8edcca1413..9dfc6d4e7a 100644 --- a/app/Http/Transformers/AssetsTransformer.php +++ b/app/Http/Transformers/AssetsTransformer.php @@ -8,6 +8,7 @@ use App\Models\Setting; use Gate; use Illuminate\Database\Eloquent\Collection; + class AssetsTransformer { public function transformAssets(Collection $assets, $total) @@ -80,6 +81,7 @@ class AssetsTransformer 'next_audit_date' => Helper::getFormattedDateObject($asset->next_audit_date, 'date'), 'deleted_at' => Helper::getFormattedDateObject($asset->deleted_at, 'datetime'), 'purchase_date' => Helper::getFormattedDateObject($asset->purchase_date, 'date'), + 'age' => $asset->purchase_date ? Helper::AgeFormat($asset->purchase_date) : '', 'last_checkout' => Helper::getFormattedDateObject($asset->last_checkout, 'datetime'), 'expected_checkin' => Helper::getFormattedDateObject($asset->expected_checkin, 'date'), 'purchase_cost' => Helper::formatCurrencyOutput($asset->purchase_cost), diff --git a/app/Importer/Importer.php b/app/Importer/Importer.php index 203e788d23..1ee90b399c 100644 --- a/app/Importer/Importer.php +++ b/app/Importer/Importer.php @@ -77,6 +77,7 @@ abstract class Importer 'manager_first_name' => 'manager first name', 'manager_last_name' => 'manager last name', 'min_amt' => 'minimum quantity', + 'remote' => 'remote', ]; /** * Map of item fields->csv names @@ -288,6 +289,7 @@ abstract class Importer 'department_id' => '', 'username' => $this->findCsvMatch($row, 'username'), 'activated' => $this->fetchHumanBoolean($this->findCsvMatch($row, 'activated')), + 'remote' => $this->fetchHumanBoolean(($this->findCsvMatch($row, 'remote'))), ]; // Maybe we're lucky and the user already exists. diff --git a/app/Importer/UserImporter.php b/app/Importer/UserImporter.php index 101021ea7b..b062c16bca 100644 --- a/app/Importer/UserImporter.php +++ b/app/Importer/UserImporter.php @@ -57,6 +57,7 @@ class UserImporter extends ItemImporter $this->item['employee_num'] = $this->findCsvMatch($row, 'employee_num'); $this->item['department_id'] = $this->createOrFetchDepartment($this->findCsvMatch($row, 'department')); $this->item['manager_id'] = $this->fetchManager($this->findCsvMatch($row, 'manager_first_name'), $this->findCsvMatch($row, 'manager_last_name')); + $this->item['remote'] =($this->fetchHumanBoolean($this->findCsvMatch($row, 'remote')) ==1 ) ? '1' : 0; $user_department = $this->findCsvMatch($row, 'department'); if ($this->shouldUpdateField($user_department)) { diff --git a/app/Models/User.php b/app/Models/User.php index 8211fabd63..c3f7f80b94 100755 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -338,6 +338,24 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo return $this->belongsToMany(\App\Models\License::class, 'license_seats', 'assigned_to', 'license_id')->withPivot('id'); } + /** + * Establishes a count of all items assigned + * + * @author J. Vinsmoke + * @since [v6.1] + * @return \Illuminate\Database\Eloquent\Relations\Relation + */ + Public function allAssignedCount() { + $assetsCount = $this->assets()->count(); + $licensesCount = $this->licenses()->count(); + $accessoriesCount = $this->accessories()->count(); + $consumablesCount = $this->consumables()->count(); + + $totalCount = $assetsCount + $licensesCount + $accessoriesCount + $consumablesCount; + + return (int) $totalCount; + } + /** * Establishes the user -> actionlogs relationship * diff --git a/app/Presenters/AssetPresenter.php b/app/Presenters/AssetPresenter.php index bd03f29a17..5db653c7cb 100644 --- a/app/Presenters/AssetPresenter.php +++ b/app/Presenters/AssetPresenter.php @@ -140,6 +140,12 @@ class AssetPresenter extends Presenter 'visible' => false, 'title' => trans('general.purchase_date'), 'formatter' => 'dateDisplayFormatter', + ], [ + 'field' => 'age', + 'searchable' => true, + 'sortable' => true, + 'visible' => false, + 'title' => trans('general.age'), ], [ 'field' => 'purchase_cost', 'searchable' => true, diff --git a/package.json b/package.json index 7b25ea2d78..079a5c7538 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "vue-template-compiler": "2.4.4" }, "dependencies": { - "@fortawesome/fontawesome-free": "^6.2.0", + "@fortawesome/fontawesome-free": "^6.2.1", "acorn": "^8.8.0", "acorn-import-assertions": "^1.8.0", "admin-lte": "^2.4.18", diff --git a/public/js/build/app.js b/public/js/build/app.js index 0c20cb659f..acf0515258 100644 Binary files a/public/js/build/app.js and b/public/js/build/app.js differ diff --git a/public/js/dist/all.js b/public/js/dist/all.js index fc77dd7f3b..ab9c045c89 100644 Binary files a/public/js/dist/all.js and b/public/js/dist/all.js differ diff --git a/public/mix-manifest.json b/public/mix-manifest.json index c481710f1d..6c0ada97c1 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -1,5 +1,5 @@ { - "/js/build/app.js": "/js/build/app.js?id=f19f6d7dd0a5a579589e538977255b18", + "/js/build/app.js": "/js/build/app.js?id=d9c0da9015392f9beb559c4b0b9935b2", "/css/dist/skins/skin-blue.css": "/css/dist/skins/skin-blue.css?id=392cc93cfc0be0349bab9697669dd091", "/css/build/overrides.css": "/css/build/overrides.css?id=e946ade78cda507ae99ecfaf10d43368", "/css/build/app.css": "/css/build/app.css?id=41ec65bd0c0e3000a48af1893e313cc6", @@ -34,7 +34,7 @@ "/css/dist/bootstrap-table.css": "/css/dist/bootstrap-table.css?id=ee4896df8b8f008ce73a9a0c2549aefd", "/js/build/vendor.js": "/js/build/vendor.js?id=47ecbb4bb3b0e02315f391caadbdf971", "/js/dist/bootstrap-table.js": "/js/dist/bootstrap-table.js?id=14d9a2affec7b066d20fcba2e6e67ad2", - "/js/dist/all.js": "/js/dist/all.js?id=081efc7b07f9a7a308efad9108c8ec66", + "/js/dist/all.js": "/js/dist/all.js?id=56e75b479d84630e693031efed58e1ad", "/css/dist/skins/skin-green.min.css": "/css/dist/skins/skin-green.min.css?id=b48f4d8af0e1ca5621c161e93951109f", "/css/dist/skins/skin-green-dark.min.css": "/css/dist/skins/skin-green-dark.min.css?id=8f449de09e00c15481b144b44b1a7185", "/css/dist/skins/skin-black.min.css": "/css/dist/skins/skin-black.min.css?id=1f33ca3d860461c1127ec465ab3ebb6b", diff --git a/resources/assets/js/components/importer/importer-file.vue b/resources/assets/js/components/importer/importer-file.vue index f9455cf1ce..eeeed7c722 100644 --- a/resources/assets/js/components/importer/importer-file.vue +++ b/resources/assets/js/components/importer/importer-file.vue @@ -194,6 +194,7 @@ {id: 'state', text: 'State' }, {id: 'country', text: 'Country' }, {id: 'zip', text: 'ZIP' }, + {id: 'remote', text: 'Remote'}, ], customFields: this.customFields, diff --git a/resources/lang/en/admin/users/message.php b/resources/lang/en/admin/users/message.php index 11292a0697..247a1b321e 100644 --- a/resources/lang/en/admin/users/message.php +++ b/resources/lang/en/admin/users/message.php @@ -15,6 +15,7 @@ return array( 'password_resets_sent' => 'The selected users who are activated and have a valid email addresses have been sent a password reset link.', 'password_reset_sent' => 'A password reset link has been sent to :email!', 'user_has_no_email' => 'This user does not have an email address in their profile.', + 'user_has_no_assets_assigned' => 'This user does not have any assets assigned', 'success' => array( diff --git a/resources/lang/en/general.php b/resources/lang/en/general.php index bcc08dafd4..f0b6a3f2cf 100644 --- a/resources/lang/en/general.php +++ b/resources/lang/en/general.php @@ -11,6 +11,7 @@ return [ 'admin' => 'Admin', 'administrator' => 'Administrator', 'add_seats' => 'Added seats', + 'age' => "Age", 'all_assets' => 'All Assets', 'all' => 'All', 'archived' => 'Archived', diff --git a/resources/views/hardware/view.blade.php b/resources/views/hardware/view.blade.php index 39a43521c6..48a6b0757c 100755 --- a/resources/views/hardware/view.blade.php +++ b/resources/views/hardware/view.blade.php @@ -495,6 +495,9 @@
{{ Helper::getFormattedDateObject($asset->purchase_date, 'date', false) }} + - + {{ Carbon::parse($asset->purchase_date)->diff(Carbon::now())->format('%y years, %m months and %d days')}} +
@endif @@ -964,6 +967,7 @@ {{ trans('general.name') }} {{ trans('general.qty') }} {{ trans('general.purchase_cost') }} + {{trans('admin/hardware/form.serial')}} @@ -977,6 +981,7 @@ {{ $component->pivot->assigned_qty }} {{ Helper::formatCurrencyOutput($component->purchase_cost) }} each + {{ $component->serial }} purchase_cost *$component->pivot->assigned_qty) ?> diff --git a/resources/views/importer/import.blade.php b/resources/views/importer/import.blade.php index 5cd4199bbd..7d9e909aa0 100644 --- a/resources/views/importer/import.blade.php +++ b/resources/views/importer/import.blade.php @@ -80,7 +80,7 @@ @{{ currentFile.filesize }} diff --git a/resources/views/users/view.blade.php b/resources/views/users/view.blade.php index 4455154499..17bc7bdf18 100755 --- a/resources/views/users/view.blade.php +++ b/resources/views/users/view.blade.php @@ -179,17 +179,23 @@ @can('view', $user)
+ @if($user->allAssignedCount() != '0') {{ trans('admin/users/general.print_assigned') }} + @else + + @endif
@endcan @can('view', $user)
- @if(!empty($user->email)) + @if(!empty($user->email) && ($user->allAssignedCount() != '0'))
{{ csrf_field() }}
+ @elseif(!empty($user->email) && ($user->allAssignedCount() == '0')) + @else @endif