Compare commits

...

139 Commits

Author SHA1 Message Date
snipe d9a1dab827 Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	config/version.php
#	public/css/build/app.css
#	public/css/build/overrides.css
#	public/css/dist/all.css
#	public/mix-manifest.json
2023-10-06 20:17:59 +01:00
snipe 5277f7cc5c Dev assets
Signed-off-by: snipe <snipe@snipe.net>
2023-10-06 20:14:44 +01:00
snipe 25a5507d9d Bumped version
Signed-off-by: snipe <snipe@snipe.net>
2023-10-06 20:07:35 +01:00
snipe a95fae0e94 Merge remote-tracking branch 'origin/develop' 2023-10-06 20:00:12 +01:00
snipe 890efb18d8 Merge pull request #13720 from snipe/security/huntr_dev_d6ed5ac1-2ad6-45fd-9492-979820bf60c8
Fixed missing escaping asset history old/new values
2023-10-06 19:59:42 +01:00
snipe eea2eabaee Escaping asset history old/new values
Signed-off-by: snipe <snipe@snipe.net>
2023-10-06 19:45:23 +01:00
snipe 9596826259 Merge branch 'master' of https://github.com/snipe/snipe-it 2023-10-06 19:04:44 +01:00
snipe cd3b4754e8 Merge pull request #13704 from Godmartinz/feature/sc-23571_v2
Added a check-in button on components tab of Asset view
2023-10-05 14:28:37 +01:00
snipe 1dab4b59e9 Merge pull request #13693 from Godmartinz/bug/sc-9955
added proper margin-top to sidebar menu on bigger resolutions
2023-10-05 14:27:25 +01:00
snipe 05dd2b4008 Merge pull request #13709 from spencerrlongg/eol-migration
Speed up EOL Migration
2023-10-05 14:26:47 +01:00
snipe b809625856 Merge pull request #13713 from snipe/security/13685
[Snyk] Security upgrade css-loader from 4.3.0 to 5.0.0 #13685
2023-10-05 14:13:35 +01:00
snipe 8d921359ca [Snyk] Security upgrade css-loader from 4.3.0 to 5.0.0 #13685
Signed-off-by: snipe <snipe@snipe.net>
2023-10-05 14:12:36 +01:00
spencerrlongg c07c0c0f74 cleanup 2023-10-04 16:55:35 -05:00
spencerrlongg cc82e86eeb one more check 2023-10-04 16:54:56 -05:00
spencerrlongg 8c9961aba8 refactor 2023-10-04 15:40:42 -05:00
spencerrlongg 46af40bd02 ????? 2023-10-04 15:20:16 -05:00
spencerrlongg 6cda9056b8 oops 2023-10-04 14:56:18 -05:00
spencerrlongg 101bd9c404 kill transaction, try update array 2023-10-04 14:47:14 -05:00
spencerrlongg ad6b502005 comments 2023-10-04 14:37:18 -05:00
spencerrlongg cb10c7af27 oops 2023-10-04 14:33:35 -05:00
spencerrlongg 99d409c0a5 transaction 2023-10-04 14:32:28 -05:00
Godfrey M 37c1d6fc04 removed unnecessary changes 2023-10-03 12:45:13 -07:00
Godfrey M c69958d95d removed dead space 2023-10-03 12:32:24 -07:00
Godfrey M 92776adb93 remove unnecessary changes 2023-10-03 12:31:58 -07:00
Godfrey M dee36fc294 adds component checkin to asset tab 2023-10-03 12:30:08 -07:00
snipe a2773aa895 Merge pull request #13696 from marcusmoore/bug/sc-23796
Fixed potential call to a member function toArray() on null
2023-10-03 11:01:40 +01:00
Marcus Moore e82fec2a5f Grammar fix 2023-10-02 16:19:20 -07:00
Marcus Moore db4c86a4f4 Filter null field options before attempting to process them 2023-10-02 16:14:20 -07:00
snipe 8384786e8b Merge pull request #13695 from marcusmoore/bug/sc-23795-to-master
Log non-compliant barcode error as debug message
2023-10-02 22:22:26 +01:00
Marcus Moore a5fd218c23 Log non-compliant barcode error as debug message 2023-10-02 14:19:52 -07:00
snipe d2435c6f86 Merge remote-tracking branch 'origin/develop' 2023-10-02 22:14:08 +01:00
snipe 1abcc8b802 Merge pull request #13694 from marcusmoore/bug/sc-23795
Logs non-compliant barcode error as debug message
2023-10-02 22:13:19 +01:00
Marcus Moore 724c054838 Log non-compliant barcode error as debug message 2023-10-02 12:06:24 -07:00
Godfrey M 1e8f90bcf0 gives proper margin-top to sidebar menu on bigger resolutions 2023-10-02 11:46:08 -07:00
snipe 129e9b90dc Merge pull request #13585 from spencerrlongg/eol_2
Standardize Asset EOL Date
2023-10-02 16:09:22 +01:00
snipe 4e6764428e Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	config/version.php
2023-10-02 14:29:59 +01:00
snipe c7b8880d69 Bumped version
Signed-off-by: snipe <snipe@snipe.net>
2023-10-02 14:28:59 +01:00
snipe 228f21ed91 Merge pull request #13690 from snipe/localization/all
Updated language strings
2023-10-02 14:24:52 +01:00
snipe b7c390a257 Updated language strings
Signed-off-by: snipe <snipe@snipe.net>
2023-10-02 14:23:22 +01:00
snipe c45ede2d17 Merge remote-tracking branch 'origin/develop' 2023-09-29 19:00:27 +01:00
snipe 758d808772 Merge pull request #13683 from snipe/bug/sc-17602
Fixed consumable user view route name
2023-09-29 15:17:23 +01:00
snipe 754ec7563a Fixed consumable user view route name
Signed-off-by: snipe <snipe@snipe.net>
2023-09-29 15:15:03 +01:00
snipe 352e53a036 Merge remote-tracking branch 'origin/develop' 2023-09-29 01:51:40 +01:00
snipe 0184d25a95 Merge pull request #13681 from marcusmoore/bug/sc-23778
Fixed uncaught type error when attempting to render barcodes with invalid characters
2023-09-29 01:50:07 +01:00
Marcus Moore bed1055c4e Catch TypeError when rendering 1d barcode 2023-09-28 17:32:16 -07:00
Marcus Moore 41eccaeae0 Set dummy asset tag to value that is valid for EAN13 2023-09-28 17:31:45 -07:00
snipe c1f545a523 Merge pull request #13679 from Godmartinz/bug/sc-23688
Fixed General Webhooks error messaging and validation
2023-09-28 20:24:09 +01:00
Godfrey M 8792d654b6 added translations for messages 2023-09-28 12:15:17 -07:00
Godfrey M f8730adb11 removed unnecessary changes 2023-09-28 11:41:43 -07:00
Godfrey M c21586dee5 adds better error messaging 2023-09-28 11:29:46 -07:00
snipe 581e56198c Merge remote-tracking branch 'origin/develop' 2023-09-28 19:24:48 +01:00
snipe f16e81e0e8 Merge pull request #13678 from spencerrlongg/bug/sc-23596
Fieldset Properly Sortable in Asset Models Table
2023-09-28 19:24:04 +01:00
snipe 3de656f5c6 Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	public/js/build/app.js
#	public/js/dist/all.js
#	public/mix-manifest.json
2023-09-28 19:20:27 +01:00
snipe 3b4004ac18 Merge pull request #13677 from snipe/feature/sc-14880
Set modal focus to modal-name field
2023-09-28 19:18:16 +01:00
snipe 0bf423cda9 Set modal focus to modal-name field
Signed-off-by: snipe <snipe@snipe.net>
2023-09-28 19:16:40 +01:00
spencerrlongg a54fab5c33 add fieldset to allowed_columns 2023-09-28 13:02:12 -05:00
snipe 96c6c93197 Merge pull request #13674 from snipe/bug/sc-23774
Fixed bug where license checkout/checkin notes were not being saved
2023-09-28 18:37:47 +01:00
spencerrlongg 4d67c72eea scope and switch case in api 2023-09-28 12:26:23 -05:00
snipe 6fa0d42bc2 Fixed bug where license checkout/checkin notes were not being saved
Signed-off-by: snipe <snipe@snipe.net>
2023-09-28 15:40:18 +01:00
snipe cfe6b07b3a Updated prod assets
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	public/css/dist/all.css
#	public/css/dist/bootstrap-table.css
#	public/js/build/vendor.js
#	public/js/dist/all.js
#	public/mix-manifest.json
2023-09-28 15:15:50 +01:00
snipe 7512400b56 Merge pull request #13672 from snipe/feature/sc-23772
Fixed #13662 - added clipboard.js
2023-09-28 15:13:42 +01:00
snipe 1acb14a39f Moved dragtable css
Signed-off-by: snipe <snipe@snipe.net>
2023-09-28 15:12:44 +01:00
snipe bb7a41628a Fixed #13662 - added clipboard.js
Signed-off-by: snipe <snipe@snipe.net>
2023-09-28 15:06:55 +01:00
snipe 68c9fac971 Merge remote-tracking branch 'origin/develop' 2023-09-28 14:25:31 +01:00
snipe 402ff58628 Merge pull request #13671 from snipe/bug/sc-23773
Fixed #13670 - order number missing from license import
2023-09-28 14:24:49 +01:00
snipe 492fb15036 Fixed #13670 - order number missing from license import
Signed-off-by: snipe <snipe@snipe.net>
2023-09-28 14:24:07 +01:00
snipe ac7f85fea9 Merge remote-tracking branch 'origin/develop' 2023-09-28 03:32:57 +01:00
snipe cc4cb14e9d Merge pull request #13667 from snipe/bug/sc-23771
Fixed #13658 for asset history with encrypted fields
2023-09-28 03:29:06 +01:00
snipe ee72c92d4f Fix for asset history with enfrypted fields
Signed-off-by: snipe <snipe@snipe.net>
2023-09-28 03:00:49 +01:00
snipe 3aeea007b2 Merge remote-tracking branch 'origin/develop' 2023-09-26 15:26:21 +01:00
snipe 048ad57418 Merge pull request #13657 from snipe/fixes/revert_column_sorting_temp
Commented out sortable columns
2023-09-26 15:25:58 +01:00
snipe 7bcb28d8fd Commented out sortable columns
Signed-off-by: snipe <snipe@snipe.net>
2023-09-26 15:24:20 +01:00
snipe 660abeca9e Merge pull request #13638 from marcusmoore/bug/sc-20704
Fixed exception being thrown when selected import was deleted
2023-09-26 15:00:35 +01:00
snipe 0c31d5749c Merge remote-tracking branch 'origin/develop' 2023-09-26 14:47:25 +01:00
snipe 1509339b68 Merge pull request #13655 from snipe/bug/sc-23759
Fixed bug where checkout to location would throw an error if FMCS was enabled
2023-09-26 14:37:36 +01:00
snipe 81ae32d3f9 Fixed typo
Signed-off-by: snipe <snipe@snipe.net>
2023-09-26 14:33:51 +01:00
snipe 279e6c7e4f Check for null company ID
Signed-off-by: snipe <snipe@snipe.net>
2023-09-26 14:33:42 +01:00
snipe 16498fdcf8 Merge remote-tracking branch 'origin/develop' 2023-09-25 13:46:33 +01:00
snipe 81a982fd77 Merge pull request #13650 from snipe/features/more_info_in_settings
Features/more info in settings
2023-09-25 13:46:00 +01:00
snipe 619712b927 Fixed table
Signed-off-by: snipe <snipe@snipe.net>
2023-09-25 13:45:46 +01:00
snipe 359cd2a267 A few more config options
Signed-off-by: snipe <snipe@snipe.net>
2023-09-25 13:28:13 +01:00
snipe 456d55c3bd Added some mail settings to /settings for easier reference
Signed-off-by: snipe <snipe@snipe.net>
2023-09-21 16:14:47 +01:00
Marcus Moore 5a88a64ebd Remove unnecessary redirect 2023-09-20 17:35:34 -07:00
Marcus Moore b1199100a0 Display error message if import file deleted before it can be selected 2023-09-20 17:22:12 -07:00
Godfrey M b7901ae2d8 dont allow redirects, messaging applied, general webhook validation applied 2023-09-20 12:54:34 -07:00
spencerrlongg 4660a2e5b7 rm more duplicate 2023-09-20 14:37:32 -05:00
spencerrlongg a9123754f5 remove unnecessary code 2023-09-20 14:34:42 -05:00
spencerrlongg cbef531811 parse purchase date even though it's cast 2023-09-20 14:26:49 -05:00
spencerrlongg 7dab59c98d fix for no eol, fix for optional in view 2023-09-20 14:17:30 -05:00
spencerrlongg c48a47936c add validation back in 2023-09-20 14:00:59 -05:00
Godfrey M 66abf8d5c0 redoing logic 2023-09-19 17:46:29 -07:00
spencerrlongg 2ace24b176 csv header 2023-09-19 19:38:59 -05:00
spencerrlongg d65d1930e4 asset models 2023-09-19 19:24:53 -05:00
spencerrlongg 2d59517c35 rm !empty 2023-09-19 18:40:23 -05:00
spencerrlongg 3cb906a05f pushing to switch branches and test 2023-09-19 18:23:06 -05:00
spencerrlongg 6b4f8f1813 rm duplicate fillable 2023-09-19 18:07:15 -05:00
spencerrlongg 929e107a20 rm byod from casts 2023-09-19 18:04:16 -05:00
spencerrlongg 1cfd7673e0 change Importer.php back 2023-09-14 16:11:24 -05:00
spencerrlongg afe9d43139 chunk by id? 2023-09-14 16:00:35 -05:00
spencerrlongg aac627592b move logic inside of try 2023-09-14 15:43:00 -05:00
spencerrlongg f35f9f922e safety & catch & log 2023-09-14 15:32:17 -05:00
spencerrlongg 44441ec703 up chunk size 2023-09-14 14:25:02 -05:00
spencerrlongg 7c9a4ac161 immutable 2023-09-13 18:15:13 -05:00
spencerrlongg 64a9859efd cleanup 2023-09-13 17:58:33 -05:00
spencerrlongg ef64843d2f chunk migration, needs to be tested 2023-09-13 17:41:45 -05:00
spencerrlongg 0368b9df43 viola 2023-09-13 17:16:17 -05:00
spencerrlongg 951521dc81 push 2023-09-13 15:20:55 -05:00
spencerrlongg 70a251de55 fix up gui edit 2023-09-13 13:51:14 -05:00
spencerrlongg e21a8b6717 fix up this file 2023-09-12 18:11:36 -05:00
spencerrlongg 7047869367 cleanup 2023-09-12 18:03:13 -05:00
spencerrlongg 53d4fd1d0b purchase_date 2023-09-12 18:01:33 -05:00
spencerrlongg ccf3fe40ec rm additional row 2023-09-11 17:35:13 -05:00
spencerrlongg 3a63bcab73 temporarily show on its own line 2023-09-11 17:35:13 -05:00
spencerrlongg 30dade1fba cleanup 2023-09-11 17:35:12 -05:00
spencerrlongg 97d6a34b8c some changes to sample csv 2023-09-11 17:34:05 -05:00
spencerrlongg 431af5f530 this works!!!! 2023-09-11 17:34:05 -05:00
spencerrlongg 3e3bb594ea some import stuff 2023-09-11 17:34:04 -05:00
spencerrlongg fb001caee4 fix conflicts 2023-09-11 17:33:31 -05:00
spencerrlongg b73f20cadf immutable when things are looping, just in case 2023-09-11 17:22:46 -05:00
spencerrlongg 3fb62874f0 quick push to check something else 2023-09-11 17:22:46 -05:00
spencerrlongg c66804bcee a little cleanup 2023-09-11 17:22:46 -05:00
spencerrlongg e1af69f6ae typo 2023-09-11 17:22:46 -05:00
slong753 27bea2abb9 just some more wip on the importer 2023-09-11 17:21:51 -05:00
slong753 1b18cd7fe6 added asset_eol_date and explicit to factory 2023-09-11 17:21:51 -05:00
slong753 78c400e948 fix conflicts 2023-09-11 17:21:50 -05:00
slong753 75d7e3e1a0 fix conflicts 2023-09-11 17:20:21 -05:00
slong753 5948679a4a fix purchase date update 2023-09-11 17:17:59 -05:00
slong753 774f21bb7f some more cleanup 2023-09-11 17:17:59 -05:00
slong753 20367eecc9 fix conflicts 2023-09-11 17:17:59 -05:00
slong753 cda9dd57dd asset update logic 2023-09-11 17:15:25 -05:00
slong753 41b65bd9a2 small changes 2023-09-11 17:15:25 -05:00
slong753 17a83129b9 this all needs to be tested tediously 2023-09-11 17:15:25 -05:00
slong753 0e60184e95 i think this migration makes sense 2023-09-11 17:15:25 -05:00
slong753 1ea0de8bca prevent injection, fix asset update 2023-09-11 17:15:25 -05:00
slong753 17ccfa9ada resolve some conflicts 2023-09-11 17:15:24 -05:00
slong753 c1daabef08 progress 2023-09-11 17:10:41 -05:00
slong753 dc39d2c567 notes 2023-09-11 17:10:41 -05:00
slong753 321e7c93ec carbon thing 2023-09-11 16:51:40 -05:00
slong753 8456b3ec0c wip stuff 2023-09-11 16:51:40 -05:00
385 changed files with 1674 additions and 723 deletions
@@ -46,6 +46,7 @@ class AssetModelsController extends Controller
'requestable',
'assets_count',
'category',
'fieldset',
];
$assetmodels = AssetModel::select([
@@ -94,6 +95,9 @@ class AssetModelsController extends Controller
case 'category':
$assetmodels->OrderCategory($order);
break;
case 'fieldset':
$assetmodels->OrderFieldset($order);
break;
default:
$assetmodels->orderBy($sort, $order);
break;
@@ -6,6 +6,7 @@ use App\Helpers\Helper;
use App\Http\Requests\ImageUploadRequest;
use App\Models\AssetModel;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Validator;
@@ -173,8 +174,15 @@ class AssetModelsController extends Controller
}
}
}
if ($model->save()) {
if ($model->wasChanged('eol')) {
$newEol = $model->eol;
$model->assets()->whereNotNull('purchase_date')->where('eol_explicit', false)
->update(['asset_eol_date' => DB::raw('DATE_ADD(purchase_date, INTERVAL ' . $newEol . ' MONTH)')]);
}
return redirect()->route('models.index')->with('success', trans('admin/models/message.update.success'));
}
@@ -91,7 +91,8 @@ class AssetCheckoutController extends Controller
$settings = \App\Models\Setting::getSettings();
if ($settings->full_multiple_companies_support){
// We have to check whether $target->company_id is null here since locations don't have a company yet
if (($settings->full_multiple_companies_support) && ((!is_null($target->company_id)) && (!is_null($asset->company_id)))) {
if ($target->company_id != $asset->company_id){
return redirect()->to("hardware/$assetId/checkout")->with('error', trans('general.error_user_company'));
}
@@ -6,6 +6,7 @@ use App\Helpers\Helper;
use App\Http\Controllers\Controller;
use App\Http\Requests\ImageUploadRequest;
use App\Models\Actionlog;
use Illuminate\Support\Facades\Log;
use App\Models\Asset;
use App\Models\AssetModel;
use App\Models\CheckoutRequest;
@@ -14,26 +15,18 @@ use App\Models\Location;
use App\Models\Setting;
use App\Models\Statuslabel;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use App\View\Label;
use Auth;
use Carbon\Carbon;
use DB;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Gate;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Cookie;
use Input;
use Intervention\Image\Facades\Image;
use Illuminate\Support\Facades\Validator;
use League\Csv\Reader;
use League\Csv\Statement;
use Paginator;
use Redirect;
use Response;
use Slack;
use Str;
use TCPDF;
use View;
use Illuminate\Support\Facades\Redirect;
/**
* This class controls all actions related to assets for
@@ -173,9 +166,9 @@ class AssetsController extends Controller
if ($field->field_encrypted == '1') {
if (Gate::allows('admin')) {
if (is_array($request->input($field->db_column))) {
$asset->{$field->db_column} = \Crypt::encrypt(implode(', ', $request->input($field->db_column)));
$asset->{$field->db_column} = Crypt::encrypt(implode(', ', $request->input($field->db_column)));
} else {
$asset->{$field->db_column} = \Crypt::encrypt($request->input($field->db_column));
$asset->{$field->db_column} = Crypt::encrypt($request->input($field->db_column));
}
}
} else {
@@ -298,10 +291,10 @@ class AssetsController extends Controller
/**
* Validate and process asset edit form.
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @param int $assetId
* @since [v1.0]
* @return Redirect
* @return \Illuminate\Http\RedirectResponse|Redirect
*@since [v1.0]
* @author [A. Gianotto] [<snipe@snipe.net>]
*/
public function update(ImageUploadRequest $request, $assetId = null)
{
@@ -315,9 +308,23 @@ class AssetsController extends Controller
$asset->status_id = $request->input('status_id', null);
$asset->warranty_months = $request->input('warranty_months', null);
$asset->purchase_cost = $request->input('purchase_cost', null);
$asset->asset_eol_date = request('asset_eol_date', null);
$asset->purchase_date = $request->input('purchase_date', null);
$asset->purchase_date = $request->input('purchase_date', null);
if ($request->filled('purchase_date') && !$request->filled('asset_eol_date') && $asset->model->eol) {
$asset->purchase_date = $request->input('purchase_date', null);
$asset->asset_eol_date = Carbon::parse($request->input('purchase_date'))->addMonths($asset->model->eol)->format('Y-m-d');
} elseif ($request->filled('asset_eol_date')) {
$asset->asset_eol_date = $request->input('asset_eol_date', null);
$months = Carbon::parse($asset->asset_eol_date)->diffInMonths($asset->purchase_date);
if($asset->model->eol) {
if($months != $asset->model->eol) {
$asset->eol_explicit = true;
} else {
$asset->eol_explicit = false;
}
} else {
$asset->eol_explicit = true;
}
}
$asset->supplier_id = $request->input('supplier_id', null);
$asset->expected_checkin = $request->input('expected_checkin', null);
@@ -342,7 +349,7 @@ class AssetsController extends Controller
unlink(public_path().'/uploads/assets/'.$asset->image);
$asset->image = '';
} catch (\Exception $e) {
\Log::info($e);
Log::info($e);
}
}
@@ -370,9 +377,9 @@ class AssetsController extends Controller
if ($field->field_encrypted == '1') {
if (Gate::allows('admin')) {
if (is_array($request->input($field->db_column))) {
$asset->{$field->db_column} = \Crypt::encrypt(implode(', ', $request->input($field->db_column)));
$asset->{$field->db_column} = Crypt::encrypt(implode(', ', $request->input($field->db_column)));
} else {
$asset->{$field->db_column} = \Crypt::encrypt($request->input($field->db_column));
$asset->{$field->db_column} = Crypt::encrypt($request->input($field->db_column));
}
}
} else {
@@ -420,7 +427,7 @@ class AssetsController extends Controller
try {
Storage::disk('public')->delete('assets'.'/'.$asset->image);
} catch (\Exception $e) {
\Log::debug($e);
Log::debug($e);
}
}
@@ -535,7 +542,7 @@ class AssetsController extends Controller
return response($barcode_obj->getPngData())->header('Content-type', 'image/png');
} catch (\Exception $e) {
\Log::debug('The barcode format is invalid.');
Log::debug('The barcode format is invalid.');
return response(file_get_contents(public_path('uploads/barcodes/invalid_barcode.gif')))->header('Content-type', 'image/gif');
}
@@ -856,7 +863,7 @@ class AssetsController extends Controller
'next_audit_date' => 'date|nullable',
];
$validator = \Validator::make($request->all(), $rules);
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return response()->json(Helper::formatStandardApiResponse('error', null, $validator->errors()->all()));
@@ -873,7 +880,7 @@ class AssetsController extends Controller
// Check to see if they checked the box to update the physical location,
// not just note it in the audit notes
if ($request->input('update_location') == '1') {
\Log::debug('update location in audit');
Log::debug('update location in audit');
$asset->location_id = $request->input('location_id');
}
@@ -56,10 +56,11 @@ class ComponentCheckinController extends Controller
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function store(Request $request, $component_asset_id)
public function store(Request $request, $component_asset_id, $backto = null)
{
if ($component_assets = DB::table('components_assets')->find($component_asset_id)) {
if (is_null($component = Component::find($component_assets->component_id))) {
return redirect()->route('components.index')->with('error',
trans('admin/components/message.not_found'));
}
@@ -95,6 +96,10 @@ class ComponentCheckinController extends Controller
$asset = Asset::find($component_assets->asset_id);
event(new CheckoutableCheckedIn($component, $asset, Auth::user(), $request->input('note'), Carbon::now()));
if($backto == 'asset'){
return redirect()->route('hardware.view', $asset->id)->with('success',
trans('admin/components/message.checkin.success'));
}
return redirect()->route('components.index')->with('success',
trans('admin/components/message.checkin.success'));
+1 -1
View File
@@ -31,7 +31,7 @@ class LabelsController extends Controller
$exampleAsset->id = 999999;
$exampleAsset->name = 'JEN-867-5309';
$exampleAsset->asset_tag = 'TCA-00001';
$exampleAsset->asset_tag = '100001';
$exampleAsset->serial = 'SN9876543210';
$exampleAsset->company = new Company();
@@ -76,7 +76,7 @@ class LicenseCheckinController extends Controller
// Declare the rules for the form validation
$rules = [
'note' => 'string|nullable',
'notes' => 'string|nullable',
];
// Create a new validator instance from our validation rules
@@ -97,6 +97,7 @@ class LicenseCheckinController extends Controller
// Update the asset data
$licenseSeat->assigned_to = null;
$licenseSeat->asset_id = null;
$licenseSeat->notes = $request->input('notes');
// Was the asset updated?
if ($licenseSeat->save()) {
@@ -63,6 +63,7 @@ class LicenseCheckoutController extends Controller
$licenseSeat = $this->findLicenseSeatToCheckout($license, $seatId);
$licenseSeat->user_id = Auth::id();
$licenseSeat->notes = $request->input('notes');
$checkoutMethod = 'checkoutTo'.ucwords(request('checkout_to_type'));
+16
View File
@@ -275,6 +275,7 @@ class Importer extends Component
'license_email' => trans('admin/licenses/form.to_email'),
'license_name' => trans('admin/licenses/form.to_name'),
'purchase_order' => trans('admin/licenses/form.purchase_order'),
'order_number' => trans('general.order_number'),
'reassignable' => trans('admin/licenses/form.reassignable'),
'seats' => trans('admin/licenses/form.seats'),
'notes' => trans('general.notes'),
@@ -484,8 +485,17 @@ class Importer extends Component
public function selectFile($id)
{
$this->clearMessage();
$this->activeFile = Import::find($id);
if (!$this->activeFile) {
$this->message = trans('admin/hardware/message.import.file_missing');
$this->message_type = 'danger';
return;
}
$this->field_map = null;
foreach($this->activeFile->header_row as $element) {
if(isset($this->activeFile->field_map[$element])) {
@@ -520,6 +530,12 @@ class Importer extends Component
}
}
public function clearMessage()
{
$this->message = null;
$this->message_type = null;
}
public function render()
{
$this->files = Import::orderBy('id','desc')->get(); //HACK - slows down renders.
+20 -16
View File
@@ -12,7 +12,7 @@ class SlackSettingsForm extends Component
public $webhook_endpoint;
public $webhook_channel;
public $webhook_botname;
public $isDisabled ='' ;
public $isDisabled ='disabled' ;
public $webhook_name;
public $webhook_link;
public $webhook_placeholder;
@@ -22,11 +22,17 @@ class SlackSettingsForm extends Component
public Setting $setting;
public $webhook_endpoint_rules;
protected $rules = [
'webhook_endpoint' => 'url|required_with:webhook_channel|starts_with:https://hooks.slack.com/services|nullable',
'webhook_endpoint' => 'required_with:webhook_channel|starts_with:http://,https://,ftp://,irc://,https://hooks.slack.com/services/|url|nullable',
'webhook_channel' => 'required_with:webhook_endpoint|starts_with:#|nullable',
'webhook_botname' => 'string|nullable',
];
public $messages = [
'webhook_endpoint.starts_with' => 'your webhook endpoint should begin with http://, https:// or other protocol.',
];
public function mount() {
$this->webhook_text= [
@@ -55,9 +61,7 @@ class SlackSettingsForm extends Component
$this->webhook_botname = $this->setting->webhook_botname;
$this->webhook_options = $this->setting->webhook_selected;
if($this->setting->webhook_selected == 'general'){
$this->isDisabled='';
}
if($this->setting->webhook_endpoint != null && $this->setting->webhook_channel != null){
$this->isDisabled= '';
}
@@ -65,9 +69,8 @@ class SlackSettingsForm extends Component
}
public function updated($field) {
if($this->webhook_selected != 'general') {
$this->validateOnly($field, $this->rules);
}
}
public function updatedWebhookSelected() {
@@ -82,7 +85,6 @@ class SlackSettingsForm extends Component
}
private function isButtonDisabled() {
if($this->webhook_selected == 'slack') {
if (empty($this->webhook_endpoint)) {
$this->isDisabled = 'disabled';
$this->save_button = trans('admin/settings/general.webhook_presave');
@@ -91,8 +93,6 @@ class SlackSettingsForm extends Component
$this->isDisabled = 'disabled';
$this->save_button = trans('admin/settings/general.webhook_presave');
}
}
}
public function render()
@@ -108,6 +108,7 @@ class SlackSettingsForm extends Component
'defaults' => [
'exceptions' => false,
],
'allow_redirects' => false,
]);
$payload = json_encode(
@@ -116,18 +117,23 @@ class SlackSettingsForm extends Component
'text' => trans('general.webhook_test_msg', ['app' => $this->webhook_name]),
'username' => e($this->webhook_botname),
'icon_emoji' => ':heart:',
]);
try {
$test = $webhook->post($this->webhook_endpoint, ['body' => $payload]);
$webhook->post($this->webhook_endpoint, ['body' => $payload]);
if(($test->getStatusCode() == 302)||($test->getStatusCode() == 301)){
return session()->flash('error' , trans('admin/settings/message.webhook.error_redirect', ['endpoint' => $this->webhook_endpoint]));
}
$this->isDisabled='';
$this->save_button = trans('general.save');
return session()->flash('success' , 'Your '.$this->webhook_name.' Integration works!');
return session()->flash('success' , trans('admin/settings/message.webhook.success', ['webhook_name' => $this->webhook_name]));
} catch (\Exception $e) {
$this->isDisabled= 'disabled';
$this->isDisabled='disabled';
$this->save_button = trans('admin/settings/general.webhook_presave');
return session()->flash('error' , trans('admin/settings/message.webhook.error', ['error_message' => $e->getMessage(), 'app' => $this->webhook_name]));
}
@@ -158,9 +164,7 @@ class SlackSettingsForm extends Component
if (Helper::isDemoMode()) {
session()->flash('error',trans('general.feature_disabled'));
} else {
if ($this->webhook_selected != 'general') {
$this->validate($this->rules);
}
$this->validate($this->rules);
$this->setting->webhook_selected = $this->webhook_selected;
$this->setting->webhook_endpoint = $this->webhook_endpoint;
+36 -21
View File
@@ -43,9 +43,10 @@ class ActionlogsTransformer
public function transformActionlog (Actionlog $actionlog, $settings = null)
{
$icon = $actionlog->present()->icon();
$custom_field = CustomField::all();
$custom_fields = CustomField::all();
if ($actionlog->filename!='') {
$icon = e(\App\Helpers\Helper::filetype_icon($actionlog->filename));
$icon = Helper::filetype_icon($actionlog->filename);
}
// This is necessary since we can't escape special characters within a JSON object
@@ -55,17 +56,29 @@ class ActionlogsTransformer
$clean_meta = [];
if ($meta_array) {
foreach ($meta_array as $fieldname => $fieldata) {
if( str_starts_with($fieldname, '_snipeit_')){
if( $custom_field->where('db_column', '=', $fieldname)->where('field_encrypted', true)){
$clean_meta[$fieldname]['old'] = "encrypted";
$clean_meta[$fieldname]['new'] = "encrypted";
$clean_meta[$fieldname]['old'] = $this->clean_field($fieldata->old);
$clean_meta[$fieldname]['new'] = $this->clean_field($fieldata->new);
// this is a custom field
if (str_starts_with($fieldname, '_snipeit_')) {
foreach ($custom_fields as $custom_field) {
if ($custom_field->db_column == $fieldname) {
if ($custom_field->field_encrypted == '1') {
$clean_meta[$fieldname]['old'] = "************";
$clean_meta[$fieldname]['new'] = "************";
}
}
}
}
else {
$clean_meta[$fieldname]['old'] = $this->clean_field($fieldata->old);
$clean_meta[$fieldname]['new'] = $this->clean_field($fieldata->new);
}
}
}
@@ -165,24 +178,26 @@ class ActionlogsTransformer
if(array_key_exists('rtd_location_id',$clean_meta)) {
$clean_meta['rtd_location_id']['old'] = $clean_meta['rtd_location_id']['old'] ? "[id: ".$clean_meta['rtd_location_id']['old']."] ". $location->find($clean_meta['rtd_location_id']['old'])->name : trans('general.unassigned');
$clean_meta['rtd_location_id']['new'] = $clean_meta['rtd_location_id']['new'] ? "[id: ".$clean_meta['rtd_location_id']['new']."] ". $location->find($clean_meta['rtd_location_id']['new'])->name : trans('general.unassigned');
$clean_meta['rtd_location_id']['old'] = $clean_meta['rtd_location_id']['old'] ? "[id: ".$clean_meta['rtd_location_id']['old']."] ". e($location->find($clean_meta['rtd_location_id']['old'])->name) : trans('general.unassigned');
$clean_meta['rtd_location_id']['new'] = $clean_meta['rtd_location_id']['new'] ? "[id: ".$clean_meta['rtd_location_id']['new']."] ". e($location->find($clean_meta['rtd_location_id']['new'])->name) : trans('general.unassigned');
$clean_meta['Default Location'] = $clean_meta['rtd_location_id'];
unset($clean_meta['rtd_location_id']);
}
if(array_key_exists('location_id', $clean_meta)) {
$clean_meta['location_id']['old'] = $clean_meta['location_id']['old'] ? "[id: ".$clean_meta['location_id']['old']."] ".$location->find($clean_meta['location_id']['old'])->name : trans('general.unassigned');
$clean_meta['location_id']['new'] = $clean_meta['location_id']['new'] ? "[id: ".$clean_meta['location_id']['new']."] ".$location->find($clean_meta['location_id']['new'])->name : trans('general.unassigned');
if (array_key_exists('location_id', $clean_meta)) {
$clean_meta['location_id']['old'] = $clean_meta['location_id']['old'] ? "[id: ".$clean_meta['location_id']['old']."] ".e($location->find($clean_meta['location_id']['old'])->name): trans('general.unassigned');
$clean_meta['location_id']['new'] = $clean_meta['location_id']['new'] ? "[id: ".$clean_meta['location_id']['new']."] ".e($location->find($clean_meta['location_id']['new'])->name) : trans('general.unassigned');
$clean_meta['Current Location'] = $clean_meta['location_id'];
unset($clean_meta['location_id']);
}
if(array_key_exists('model_id', $clean_meta)) {
$oldModel = $model->find($clean_meta['model_id']['old']);
$oldModelName = $oldModel->name ?? trans('admin/models/message.deleted');
$oldModelName = $oldModel ? e($oldModel->name) : trans('admin/models/message.deleted');
$newModel = $model->find($clean_meta['model_id']['new']);
$newModelName = $newModel->name ?? trans('admin/models/message.deleted');
$newModelName = $newModel ? e($newModel->name) : trans('admin/models/message.deleted');
$clean_meta['model_id']['old'] = "[id: ".$clean_meta['model_id']['old']."] ".$oldModelName;
$clean_meta['model_id']['new'] = "[id: ".$clean_meta['model_id']['new']."] ".$newModelName; /** model is required at asset creation */
@@ -193,10 +208,10 @@ class ActionlogsTransformer
if(array_key_exists('company_id', $clean_meta)) {
$oldCompany = $company->find($clean_meta['company_id']['old']);
$oldCompanyName = $oldCompany->name ?? trans('admin/companies/message.deleted');
$oldCompanyName = $oldCompany ? e($oldCompany->name) : trans('admin/company/message.deleted');
$newCompany = $company->find($clean_meta['company_id']['new']);
$newCompanyName = $newCompany->name ?? trans('admin/companies/message.deleted');
$newCompanyName = $newCompany ? e($newCompany->name) : trans('admin/company/message.deleted');
$clean_meta['company_id']['old'] = $clean_meta['company_id']['old'] ? "[id: ".$clean_meta['company_id']['old']."] ". $oldCompanyName : trans('general.unassigned');
$clean_meta['company_id']['new'] = $clean_meta['company_id']['new'] ? "[id: ".$clean_meta['company_id']['new']."] ". $newCompanyName : trans('general.unassigned');
@@ -206,10 +221,10 @@ class ActionlogsTransformer
if(array_key_exists('supplier_id', $clean_meta)) {
$oldSupplier = $supplier->find($clean_meta['supplier_id']['old']);
$oldSupplierName = $oldSupplier->name ?? trans('admin/suppliers/message.deleted');
$oldSupplierName = $oldSupplier ? e($oldSupplier->name) : trans('admin/suppliers/message.deleted');
$newSupplier = $supplier->find($clean_meta['supplier_id']['new']);
$newSupplierName = $newSupplier->name ?? trans('admin/suppliers/message.deleted');
$newSupplierName = $newSupplier ? e($newSupplier->name) : trans('admin/suppliers/message.deleted');
$clean_meta['supplier_id']['old'] = $clean_meta['supplier_id']['old'] ? "[id: ".$clean_meta['supplier_id']['old']."] ". $oldSupplierName : trans('general.unassigned');
$clean_meta['supplier_id']['new'] = $clean_meta['supplier_id']['new'] ? "[id: ".$clean_meta['supplier_id']['new']."] ". $newSupplierName : trans('general.unassigned');
@@ -45,6 +45,7 @@ class LicenseSeatsTransformer
'name'=> e($seat->location()->name),
] : null,
'reassignable' => (bool) $seat->license->reassignable,
'notes' => e($seat->notes),
'user_can_checkout' => (($seat->assigned_to == '') && ($seat->asset_id == '')),
];
+6 -8
View File
@@ -3,7 +3,9 @@
namespace App\Importer;
use App\Models\Asset;
use App\Models\AssetModel;
use App\Models\Statuslabel;
use Carbon\Carbon;
class AssetImporter extends ItemImporter
{
@@ -63,6 +65,7 @@ class AssetImporter extends ItemImporter
$asset_tag = Asset::autoincrement_asset();
}
$asset = Asset::where(['asset_tag'=> (string) $asset_tag])->first();
if ($asset) {
if (! $this->updating) {
@@ -116,12 +119,7 @@ class AssetImporter extends ItemImporter
if (isset($this->item['next_audit_date'])) {
$item['next_audit_date'] = $this->item['next_audit_date'];
}
$item['asset_eol_date'] = null;
if (isset($this->item['asset_eol_date'])) {
$item['asset_eol_date'] = $this->item['asset_eol_date'];
}
if ($editingAsset) {
$asset->update($item);
} else {
@@ -134,9 +132,9 @@ class AssetImporter extends ItemImporter
$asset->{$custom_field} = $val;
}
}
if ($asset->save()) {
$asset->logCreate(trans('general.importer.import_note'));
$this->log('Asset '.$this->item['name'].' with serial number '.$this->item['serial'].' was created');
+1 -1
View File
@@ -28,7 +28,7 @@ abstract class Importer
/**
* Default Map of item fields->csv names
*
* This has been moved into Livewire/Importer.php to be more granular.
* This has been moved into app/Http/Livewire/Importer.php to be more granular.
* @todo - remove references to this property since we don't use it anymore.
*
* @var array
+10 -2
View File
@@ -10,6 +10,8 @@ use App\Models\Manufacturer;
use App\Models\Statuslabel;
use App\Models\Supplier;
use App\Models\User;
use Carbon\CarbonImmutable;
use Illuminate\Support\Facades\Log;
class ItemImporter extends Importer
{
@@ -88,8 +90,14 @@ class ItemImporter extends Importer
}
$this->item['asset_eol_date'] = null;
if ($this->findCsvMatch($row, 'asset_eol_date') != '') {
$this->item['asset_eol_date'] = date('Y-m-d', strtotime($this->findCsvMatch($row, 'asset_eol_date')));
if($this->findCsvMatch($row, 'asset_eol_date') != '') {
$csvMatch = $this->findCsvMatch($row, 'asset_eol_date');
try {
$this->item['asset_eol_date'] = CarbonImmutable::parse($csvMatch)->format('Y-m-d');
} catch (\Exception $e) {
Log::info($e->getMessage());
$this->log('Unable to parse date: '.$csvMatch);
}
}
$this->item['qty'] = $this->findCsvMatch($row, 'quantity');
+1
View File
@@ -65,6 +65,7 @@ class LicenseImporter extends ItemImporter
$this->item['license_name'] = $this->findCsvMatch($row, 'license_name');
$this->item['maintained'] = $this->findCsvMatch($row, 'maintained');
$this->item['purchase_order'] = $this->findCsvMatch($row, 'purchase_order');
$this->item['order_number'] = $this->findCsvMatch($row, 'order_number');
$this->item['reassignable'] = $this->findCsvMatch($row, 'reassignable');
$this->item['manufacturer'] = $this->createOrFetchManufacturer($this->findCsvMatch($row, 'manufacturer'));
+6 -1
View File
@@ -72,6 +72,8 @@ class Asset extends Depreciable
protected $casts = [
'purchase_date' => 'date',
'asset_eol_date' => 'date',
'eol_explicit' => 'boolean',
'last_checkout' => 'datetime',
'last_checkin' => 'datetime',
'expected_checkin' => 'date',
@@ -104,7 +106,8 @@ class Asset extends Depreciable
'serial' => 'unique_serial|nullable',
'purchase_cost' => 'numeric|nullable|gte:0',
'supplier_id' => 'exists:suppliers,id|nullable',
'asset_eol_date' => 'date|max:10|min:10|nullable',
'asset_eol_date' => 'date|nullable',
'eol_explicit' => 'boolean|nullable',
'byod' => 'boolean',
];
@@ -136,8 +139,10 @@ class Asset extends Depreciable
'expected_checkin',
'byod',
'asset_eol_date',
'eol_explicit',
'last_audit_date',
'next_audit_date',
'asset_eol_date',
];
use Searchable;
+5
View File
@@ -291,4 +291,9 @@ class AssetModel extends SnipeModel
{
return $query->leftJoin('categories', 'models.category_id', '=', 'categories.id')->orderBy('categories.name', $order);
}
public function scopeOrderFieldset($query, $order)
{
return $query->leftJoin('custom_fieldsets', 'models.fieldset_id', '=', 'custom_fieldsets.id')->orderBy('custom_fieldsets.name', $order);
}
}
+3 -1
View File
@@ -21,6 +21,8 @@ class Field {
public static function makeArray(Field $field, Asset $asset) {
return $field->getOptions()
// filter out any FieldOptions that are accidentally null
->filter()
->map(fn($option) => $option->toArray($asset))
->filter(fn($result) => $result['value'] != null);
}
@@ -36,4 +38,4 @@ class Field {
->map(fn($optionString) => FieldOption::fromString($optionString));
return $field;
}
}
}
+3 -2
View File
@@ -7,6 +7,7 @@ use Illuminate\Support\Collection;
use Illuminate\Support\Facades\File;
use TCPDF;
use TCPDF_STATIC;
use TypeError;
/**
* Model for Labels.
@@ -372,8 +373,8 @@ abstract class Label
if (empty($value)) return;
try {
$pdf->write1DBarcode($value, $type, $x, $y, $width, $height, null, ['stretch'=>true]);
} catch (\Exception $e) {
\Log::error('The 1D barcode ' . $value . ' is not compliant with the barcode type '. $type);
} catch (\Exception|TypeError $e) {
\Log::debug('The 1D barcode ' . $value . ' is not compliant with the barcode type '. $type);
}
}
+26
View File
@@ -6,6 +6,7 @@ use App\Models\Actionlog;
use App\Models\Asset;
use App\Models\Setting;
use Auth;
use Carbon\Carbon;
class AssetObserver
{
@@ -119,4 +120,29 @@ class AssetObserver
$logAction->user_id = Auth::id();
$logAction->logaction('delete');
}
public function saving(Asset $asset)
{
//determine if calculated eol and then calculate it - this should only happen on a new asset
if(is_null($asset->asset_eol_date) && !is_null($asset->purchase_date) && !is_null($asset->model->eol)){
$asset->asset_eol_date = $asset->purchase_date->addMonths($asset->model->eol)->format('Y-m-d');
$asset->eol_explicit = false;
}
//determine if explicit and set eol_explit to true
if(!is_null($asset->asset_eol_date) && !is_null($asset->purchase_date)) {
if($asset->model->eol) {
$months = Carbon::parse($asset->asset_eol_date)->diffInMonths($asset->purchase_date);
if($months != $asset->model->eol) {
$asset->eol_explicit = true;
}
}
} elseif (!is_null($asset->asset_eol_date) && is_null($asset->purchase_date)) {
$asset->eol_explicit = true;
}
if ((!is_null($asset->asset_eol_date)) && (!is_null($asset->purchase_date)) && (is_null($asset->model->eol))) {
$asset->eol_explicit = true;
}
}
}
+2 -4
View File
@@ -3,6 +3,7 @@
namespace App\Presenters;
use App\Models\CustomField;
use Carbon\CarbonImmutable;
use DateTime;
/**
@@ -429,10 +430,7 @@ class AssetPresenter extends Presenter
public function eol_date()
{
if (($this->purchase_date) && ($this->model->model) && ($this->model->model->eol)) {
$date = date_create($this->purchase_date);
date_add($date, date_interval_create_from_date_string($this->model->model->eol.' months'));
return date_format($date, 'Y-m-d');
return CarbonImmutable::parse($this->purchase_date)->addMonths($this->model->model->eol)->format('Y-m-d');
}
}
+8
View File
@@ -254,6 +254,14 @@ class LicensePresenter extends Presenter
'visible' => true,
'formatter' => 'locationsLinkObjFormatter',
],
[
'field' => 'notes',
'searchable' => false,
'sortable' => false,
'visible' => false,
'title' => trans('general.notes'),
'formatter' => 'notesFormatter'
],
[
'field' => 'checkincheckout',
'searchable' => false,
+1 -1
View File
@@ -239,7 +239,7 @@ return [
|
*/
'min_php' => '7.2.5',
'min_php' => '7.4.0',
/*
+5 -5
View File
@@ -1,10 +1,10 @@
<?php
return array (
'app_version' => 'v6.2.0',
'full_app_version' => 'v6.2.0 - build 11566-g5a5b07f5a',
'build_version' => '11566',
'app_version' => 'v6.2.2',
'full_app_version' => 'v6.2.2 - build 11714-ga95fae0e9',
'build_version' => '11714',
'prerelease_version' => '',
'hash_version' => 'g5a5b07f5a',
'full_hash' => 'v6.2.0-626-g5a5b07f5a',
'hash_version' => 'ga95fae0e9',
'full_hash' => 'v6.2.2-85-ga95fae0e9',
'branch' => 'master',
);
+14
View File
@@ -8,6 +8,8 @@ use App\Models\Location;
use App\Models\Statuslabel;
use App\Models\Supplier;
use App\Models\User;
use Carbon\Carbon;
use Carbon\CarbonImmutable;
use Illuminate\Database\Eloquent\Factories\Factory;
class AssetFactory extends Factory
@@ -48,6 +50,18 @@ class AssetFactory extends Factory
'last_checkout' => null,
];
}
public function configure()
{
return $this->afterMaking(function (Asset $asset) {
// calculates the EOL date most of the time, but sometimes sets a random date so we have some explicits
// the explicit boolean gets set in the saving() method on the observer
$asset->asset_eol_date = $this->faker->boolean(5)
? CarbonImmutable::parse($asset->purchase_date)->addMonths(rand(0, 20))->format('Y-m-d')
: CarbonImmutable::parse($asset->purchase_date)->addMonths($asset->model->eol)->format('Y-m-d');
});
}
public function laptopMbp()
{
@@ -0,0 +1,67 @@
<?php
use App\Models\Asset;
use Carbon\CarbonImmutable;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\Log;
class DenormalizedEolAndAddColumnForExplicitDateToAssets extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('assets', function (Blueprint $table) {
$table->boolean('eol_explicit')->default(false)->after('asset_eol_date');
});
// Update the eol_explicit column with the value from asset_eol_date if it exists and is different from the calculated value
Asset::whereNotNull('asset_eol_date')->with('model')->chunkById(500, function ($assetsWithEolDates) {
foreach ($assetsWithEolDates as $asset) {
if ($asset->asset_eol_date && $asset->purchase_date) {
try {
$months = CarbonImmutable::parse($asset->asset_eol_date)->diffInMonths($asset->purchase_date);
} catch (\Exception $e) {
Log::info('asset_eol_date invalid for asset ' . $asset->id);
}
if ($asset->model->eol) {
if ($months != $asset->model->eol) {
$asset->update(['eol_explicit' => true]);
}
} else {
$asset->update(['eol_explicit' => true]);
}
}
}
});
DB::table('assets')
->whereNull('asset_eol_date')
->whereNotNull('purchase_date')
->whereNotNull('model_id')
->join('models', 'assets.model_id', '=', 'models.id')
->update([
'asset_eol_date' => DB::raw('DATE_ADD(purchase_date, INTERVAL models.eol MONTH)')
]);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('assets', function (Blueprint $table) {
$table->dropColumn('eol_explicit');
});
}
}
+80 -174
View File
@@ -3546,11 +3546,6 @@
"tslib": "^2.0.3"
}
},
"camelcase": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="
},
"caniuse-api": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
@@ -3724,6 +3719,16 @@
"string-width": "^4.2.0"
}
},
"clipboard": {
"version": "2.0.11",
"resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz",
"integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==",
"requires": {
"good-listener": "^1.2.2",
"select": "^1.1.2",
"tiny-emitter": "^2.0.0"
}
},
"cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -4165,24 +4170,27 @@
}
},
"css-loader": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.3.0.tgz",
"integrity": "sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg==",
"version": "5.2.7",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz",
"integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==",
"requires": {
"camelcase": "^6.0.0",
"cssesc": "^3.0.0",
"icss-utils": "^4.1.1",
"icss-utils": "^5.1.0",
"loader-utils": "^2.0.0",
"postcss": "^7.0.32",
"postcss-modules-extract-imports": "^2.0.0",
"postcss-modules-local-by-default": "^3.0.3",
"postcss-modules-scope": "^2.2.0",
"postcss-modules-values": "^3.0.0",
"postcss": "^8.2.15",
"postcss-modules-extract-imports": "^3.0.0",
"postcss-modules-local-by-default": "^4.0.0",
"postcss-modules-scope": "^3.0.0",
"postcss-modules-values": "^4.0.0",
"postcss-value-parser": "^4.1.0",
"schema-utils": "^2.7.1",
"semver": "^7.3.2"
"schema-utils": "^3.0.0",
"semver": "^7.3.5"
},
"dependencies": {
"@types/json-schema": {
"version": "7.0.13",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz",
"integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ=="
},
"loader-utils": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
@@ -4193,32 +4201,23 @@
"json5": "^2.1.2"
}
},
"picocolors": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
"integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA=="
},
"postcss": {
"version": "7.0.39",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
"integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
"schema-utils": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
"integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
"requires": {
"picocolors": "^0.2.1",
"source-map": "^0.6.1"
"@types/json-schema": "^7.0.8",
"ajv": "^6.12.5",
"ajv-keywords": "^3.5.2"
}
},
"semver": {
"version": "7.3.8",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"version": "7.5.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"requires": {
"lru-cache": "^6.0.0"
}
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
}
}
},
@@ -4529,6 +4528,11 @@
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"dev": true
},
"delegate": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
"integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
},
"depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -14879,6 +14883,14 @@
}
}
},
"good-listener": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
"integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==",
"requires": {
"delegate": "^3.1.2"
}
},
"gopd": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
@@ -15304,33 +15316,9 @@
}
},
"icss-utils": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
"integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
"requires": {
"postcss": "^7.0.14"
},
"dependencies": {
"picocolors": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
"integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA=="
},
"postcss": {
"version": "7.0.39",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
"integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
"requires": {
"picocolors": "^0.2.1",
"source-map": "^0.6.1"
}
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
}
}
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
"integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA=="
},
"ieee754": {
"version": "1.2.1",
@@ -16816,8 +16804,7 @@
"nanoid": {
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
"dev": true
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
},
"needle": {
"version": "2.9.1",
@@ -17444,7 +17431,6 @@
"version": "8.4.5",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
"integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
"dev": true,
"requires": {
"nanoid": "^3.1.30",
"picocolors": "^1.0.0",
@@ -17722,124 +17708,34 @@
}
},
"postcss-modules-extract-imports": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
"integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
"requires": {
"postcss": "^7.0.5"
},
"dependencies": {
"picocolors": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
"integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA=="
},
"postcss": {
"version": "7.0.39",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
"integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
"requires": {
"picocolors": "^0.2.1",
"source-map": "^0.6.1"
}
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
}
}
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
"integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw=="
},
"postcss-modules-local-by-default": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz",
"integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==",
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz",
"integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==",
"requires": {
"icss-utils": "^4.1.1",
"postcss": "^7.0.32",
"icss-utils": "^5.0.0",
"postcss-selector-parser": "^6.0.2",
"postcss-value-parser": "^4.1.0"
},
"dependencies": {
"picocolors": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
"integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA=="
},
"postcss": {
"version": "7.0.39",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
"integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
"requires": {
"picocolors": "^0.2.1",
"source-map": "^0.6.1"
}
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
}
}
},
"postcss-modules-scope": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz",
"integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==",
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz",
"integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==",
"requires": {
"postcss": "^7.0.6",
"postcss-selector-parser": "^6.0.0"
},
"dependencies": {
"picocolors": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
"integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA=="
},
"postcss": {
"version": "7.0.39",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
"integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
"requires": {
"picocolors": "^0.2.1",
"source-map": "^0.6.1"
}
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
}
"postcss-selector-parser": "^6.0.4"
}
},
"postcss-modules-values": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
"integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
"integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
"requires": {
"icss-utils": "^4.0.0",
"postcss": "^7.0.6"
},
"dependencies": {
"picocolors": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
"integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA=="
},
"postcss": {
"version": "7.0.39",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
"integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
"requires": {
"picocolors": "^0.2.1",
"source-map": "^0.6.1"
}
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
}
"icss-utils": "^5.0.0"
}
},
"postcss-normalize-charset": {
@@ -18569,12 +18465,18 @@
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
"integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.5",
"ajv": "^6.12.4",
"ajv-keywords": "^3.5.2"
}
},
"select": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
"integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA=="
},
"select-hose": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
@@ -18835,8 +18737,7 @@
"source-map-js": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz",
"integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==",
"dev": true
"integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA=="
},
"source-map-support": {
"version": "0.5.21",
@@ -19401,6 +19302,11 @@
"process": "~0.11.0"
}
},
"tiny-emitter": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
"integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
},
"tiny-inflate": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
+2 -1
View File
@@ -37,7 +37,8 @@
"bootstrap-less": "^3.3.8",
"bootstrap-table": "1.22.1",
"chart.js": "^2.9.4",
"css-loader": "^4.0.0",
"clipboard": "^2.0.11",
"css-loader": "^5.0.0",
"ekko-lightbox": "^5.1.1",
"imagemin": "^8.0.1",
"jquery-form-validator": "^2.3.79",
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+7 -7
View File
@@ -1,8 +1,8 @@
{
"/js/build/app.js": "/js/build/app.js?id=702e6e07e76e6bafe529de43157509a7",
"/js/build/app.js": "/js/build/app.js?id=72071a8a4dc754c61b0440d3c4119cbf",
"/css/dist/skins/skin-blue.css": "/css/dist/skins/skin-blue.css?id=392cc93cfc0be0349bab9697669dd091",
"/css/build/overrides.css": "/css/build/overrides.css?id=d96bcc45dc2a4414dd9840a14b096d4f",
"/css/build/app.css": "/css/build/app.css?id=b0aa590a3a4de33d19147264fd31b743",
"/css/build/overrides.css": "/css/build/overrides.css?id=1b392b587d6d9c6c3208cee77dd50c24",
"/css/build/app.css": "/css/build/app.css?id=def81f26a041542b7831129c1935678b",
"/css/build/AdminLTE.css": "/css/build/AdminLTE.css?id=f25c77ed07053646a42e9c19923d24fa",
"/css/dist/skins/skin-orange.css": "/css/dist/skins/skin-orange.css?id=268041e902b019730c23ee3875838005",
"/css/dist/skins/skin-orange-dark.css": "/css/dist/skins/skin-orange-dark.css?id=d409d9b1a3b69247df8b98941ba06e33",
@@ -18,7 +18,7 @@
"/css/dist/skins/skin-green.css": "/css/dist/skins/skin-green.css?id=b48f4d8af0e1ca5621c161e93951109f",
"/css/dist/skins/skin-contrast.css": "/css/dist/skins/skin-contrast.css?id=f0fbbb0ac729ea092578fb05ca615460",
"/css/dist/skins/skin-red.css": "/css/dist/skins/skin-red.css?id=b9a74ec0cd68f83e7480d5ae39919beb",
"/css/dist/all.css": "/css/dist/all.css?id=585e3d8144b38119f62c59c1ed8e0714",
"/css/dist/all.css": "/css/dist/all.css?id=ae9bfb0457654b249e68a445ebad6409",
"/css/dist/signature-pad.css": "/css/dist/signature-pad.css?id=6a89d3cd901305e66ced1cf5f13147f7",
"/css/dist/signature-pad.min.css": "/css/dist/signature-pad.min.css?id=6a89d3cd901305e66ced1cf5f13147f7",
"/css/webfonts/fa-brands-400.ttf": "/css/webfonts/fa-brands-400.ttf?id=a656b2d865fe379d8851757e8e4001ef",
@@ -29,10 +29,10 @@
"/css/webfonts/fa-solid-900.woff2": "/css/webfonts/fa-solid-900.woff2?id=7f63d634454e771396bce3e09dfcdbc5",
"/css/webfonts/fa-v4compatibility.ttf": "/css/webfonts/fa-v4compatibility.ttf?id=70ad875b2378eb850254f01dec991ade",
"/css/webfonts/fa-v4compatibility.woff2": "/css/webfonts/fa-v4compatibility.woff2?id=d36941873b661076f146b0221f13497d",
"/css/dist/bootstrap-table.css": "/css/dist/bootstrap-table.css?id=4801d104e8303a8fa134a927ebf55536",
"/js/build/vendor.js": "/js/build/vendor.js?id=3592e07ae9a6d1805a4ea3bd3c034aef",
"/css/dist/bootstrap-table.css": "/css/dist/bootstrap-table.css?id=2bd29fa7f9d666800c246a52ce708633",
"/js/build/vendor.js": "/js/build/vendor.js?id=917784d6fe54bcfe39656e0ded1b43e4",
"/js/dist/bootstrap-table.js": "/js/dist/bootstrap-table.js?id=1f678160a05960c3087fb8263168ff41",
"/js/dist/all.js": "/js/dist/all.js?id=37dceeb0fe493b5c8af846264a1a34b2",
"/js/dist/all.js": "/js/dist/all.js?id=8b6d5790410cef7c138c7807516eb0b0",
"/js/dist/all-defer.js": "/js/dist/all-defer.js?id=07e52318da2cdf3171c4d88113f25fb6",
"/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=44f9320d0739f419c9246f7f39395b02",
+7 -1
View File
@@ -39,12 +39,18 @@ $(function () {
model = link.data("dependency");
select = link.data("select");
refreshSelector = link.data("refresh");
$('#createModal').load(link.attr('href'),function () {
// this sets the focus to be the name field
$('#modal-name').focus();
//do we need to re-select2 this, after load? Probably.
$('#createModal').find('select.select2').select2();
// Initialize the ajaxy select2 with images.
// This is a copy/paste of the code from snipeit.js, would be great to only have this in one place.
$('.js-data-ajax').each( function (i,item) {
var link = $(item);
var endpoint = link.data("endpoint");
+4 -4
View File
@@ -680,15 +680,15 @@ th.css-accessory > .th-inner::before
margin-top:160px;
}
}
@media screen and (max-width: 771px) and (min-width: 512px){
@media screen and (max-width: 912px) and (min-width: 512px){
.sidebar-menu {
margin-top:160px
margin-top:100px
}
}
@media screen and (max-width: 1098px) and (min-width: 772px){
@media screen and (max-width: 1268px) and (min-width: 912px){
.sidebar-menu {
margin-top:98px
margin-top:50px
}
}
@@ -50,6 +50,7 @@ return [
'success' => 'Jou lêer is ingevoer',
'file_delete_success' => 'Jou lêer is suksesvol verwyder',
'file_delete_error' => 'Die lêer kon nie uitgevee word nie',
'file_missing' => 'The file selected is missing',
'header_row_has_malformed_characters' => 'One or more attributes in the header row contain malformed UTF-8 characters',
'content_row_has_malformed_characters' => 'One or more attributes in the first row of content contain malformed UTF-8 characters',
],
@@ -356,4 +356,10 @@ return [
'google_login' => 'Google Workspace Login Settings',
'enable_google_login' => 'Enable users to login with Google Workspace',
'enable_google_login_help' => 'Users will not be automatically provisioned. They must have an existing account here AND in Google Workspace, and their username here must match their Google Workspace email address. ',
'mail_reply_to' => 'Mail Reply-To Address',
'mail_from' => 'Mail From Address',
'database_driver' => 'Database Driver',
'bs_table_storage' => 'Table Storage',
'timezone' => 'Timezone',
];
@@ -35,10 +35,12 @@ return [
],
'webhook' => [
'sending' => 'Sending :app test message...',
'success' => 'Your :webhook_name Integration works!',
'success_pt1' => 'Success! Check the ',
'success_pt2' => ' channel for your test message, and be sure to click SAVE below to store your settings.',
'500' => '500 Server Error.',
'error' => 'Something went wrong. :app responded with: :error_message',
'error_redirect' => 'ERROR: 301/302 :endpoint returns a redirect. For security reasons, we dont follow redirects. Please use the actual endpoint.',
'error_misc' => 'Something went wrong. :( ',
]
];
+4 -2
View File
@@ -459,7 +459,7 @@ return [
'serial_number' => 'Serial Number',
'item_notes' => ':item Notes',
'item_name_var' => ':item Name',
'error_user_company' => 'User and Asset companies missmatch',
'error_user_company' => 'Checkout target company and asset company do not match',
'error_user_company_accept_view' => 'An Asset assigned to you belongs to a different company so you can\'t accept nor deny it, please check with your manager',
'importer' => [
'checked_out_to_fullname' => 'Checked Out to: Full Name',
@@ -485,6 +485,8 @@ return [
],
'percent_complete' => '% complete',
'uploading' => 'Uploading... ',
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.'
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.',
'copy_to_clipboard' => 'Copy to Clipboard',
'copied' => 'Copied!',
];
+1
View File
@@ -30,6 +30,7 @@ return [
'ga-IE'=> 'Irish',
'it'=> 'Italian',
'ja'=> 'Japanese',
'km' => 'Khmer',
'ko'=> 'Korean',
'lv'=>'Latvian',
'lt'=> 'Lithuanian',
@@ -51,6 +51,7 @@ return [
'success' => 'Your file has been imported',
'file_delete_success' => 'Your file has been been successfully deleted',
'file_delete_error' => 'The file was unable to be deleted',
'file_missing' => 'The file selected is missing',
'header_row_has_malformed_characters' => 'One or more attributes in the header row contain malformed UTF-8 characters',
'content_row_has_malformed_characters' => 'One or more attributes in the first row of content contain malformed UTF-8 characters',
],
@@ -356,4 +356,10 @@ return [
'google_login' => 'Google Workspace Login Settings',
'enable_google_login' => 'Enable users to login with Google Workspace',
'enable_google_login_help' => 'Users will not be automatically provisioned. They must have an existing account here AND in Google Workspace, and their username here must match their Google Workspace email address. ',
'mail_reply_to' => 'Mail Reply-To Address',
'mail_from' => 'Mail From Address',
'database_driver' => 'Database Driver',
'bs_table_storage' => 'Table Storage',
'timezone' => 'Timezone',
];
@@ -35,10 +35,12 @@ return [
],
'webhook' => [
'sending' => 'Sending :app test message...',
'success' => 'Your :webhook_name Integration works!',
'success_pt1' => 'Success! Check the ',
'success_pt2' => ' channel for your test message, and be sure to click SAVE below to store your settings.',
'500' => '500 Server Error.',
'error' => 'Something went wrong. :app responded with: :error_message',
'error_redirect' => 'ERROR: 301/302 :endpoint returns a redirect. For security reasons, we dont follow redirects. Please use the actual endpoint.',
'error_misc' => 'Something went wrong. :( ',
]
];
+4 -2
View File
@@ -459,7 +459,7 @@ return [
'serial_number' => 'Serial Number',
'item_notes' => ':item Notes',
'item_name_var' => ':item Name',
'error_user_company' => 'User and Asset companies missmatch',
'error_user_company' => 'Checkout target company and asset company do not match',
'error_user_company_accept_view' => 'An Asset assigned to you belongs to a different company so you can\'t accept nor deny it, please check with your manager',
'importer' => [
'checked_out_to_fullname' => 'Checked Out to: Full Name',
@@ -485,6 +485,8 @@ return [
],
'percent_complete' => '% complete',
'uploading' => 'Uploading... ',
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.'
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.',
'copy_to_clipboard' => 'Copy to Clipboard',
'copied' => 'Copied!',
];
+1
View File
@@ -30,6 +30,7 @@ return [
'ga-IE'=> 'Irish',
'it'=> 'Italian',
'ja'=> 'Japanese',
'km' => 'Khmer',
'ko'=> 'Korean',
'lv'=>'Latvian',
'lt'=> 'Lithuanian',
@@ -50,6 +50,7 @@ return [
'success' => 'تم استيراد الملف الخاص بك',
'file_delete_success' => 'تم حذف ملفك بنجاح',
'file_delete_error' => 'تعذر حذف الملف',
'file_missing' => 'The file selected is missing',
'header_row_has_malformed_characters' => 'One or more attributes in the header row contain malformed UTF-8 characters',
'content_row_has_malformed_characters' => 'One or more attributes in the first row of content contain malformed UTF-8 characters',
],
@@ -356,4 +356,10 @@ return [
'google_login' => 'Google Workspace Login Settings',
'enable_google_login' => 'Enable users to login with Google Workspace',
'enable_google_login_help' => 'Users will not be automatically provisioned. They must have an existing account here AND in Google Workspace, and their username here must match their Google Workspace email address. ',
'mail_reply_to' => 'Mail Reply-To Address',
'mail_from' => 'Mail From Address',
'database_driver' => 'Database Driver',
'bs_table_storage' => 'Table Storage',
'timezone' => 'Timezone',
];
@@ -35,10 +35,12 @@ return [
],
'webhook' => [
'sending' => 'Sending :app test message...',
'success' => 'Your :webhook_name Integration works!',
'success_pt1' => 'Success! Check the ',
'success_pt2' => ' channel for your test message, and be sure to click SAVE below to store your settings.',
'500' => '500 Server Error.',
'error' => 'Something went wrong. :app responded with: :error_message',
'error_redirect' => 'ERROR: 301/302 :endpoint returns a redirect. For security reasons, we dont follow redirects. Please use the actual endpoint.',
'error_misc' => 'Something went wrong. :( ',
]
];
+4 -2
View File
@@ -459,7 +459,7 @@ return [
'serial_number' => 'Serial Number',
'item_notes' => ':item Notes',
'item_name_var' => ':item Name',
'error_user_company' => 'User and Asset companies missmatch',
'error_user_company' => 'Checkout target company and asset company do not match',
'error_user_company_accept_view' => 'An Asset assigned to you belongs to a different company so you can\'t accept nor deny it, please check with your manager',
'importer' => [
'checked_out_to_fullname' => 'Checked Out to: Full Name',
@@ -485,6 +485,8 @@ return [
],
'percent_complete' => '% complete',
'uploading' => 'Uploading... ',
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.'
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.',
'copy_to_clipboard' => 'Copy to Clipboard',
'copied' => 'Copied!',
];
+1
View File
@@ -30,6 +30,7 @@ return [
'ga-IE'=> 'Irish',
'it'=> 'Italian',
'ja'=> 'Japanese',
'km' => 'Khmer',
'ko'=> 'Korean',
'lv'=>'Latvian',
'lt'=> 'Lithuanian',
@@ -50,6 +50,7 @@ return [
'success' => 'Вашият файл беше въведен.',
'file_delete_success' => 'Вашият файл беше изтрит успешно.',
'file_delete_error' => 'Файлът не е в състояние да бъде изтрит',
'file_missing' => 'The file selected is missing',
'header_row_has_malformed_characters' => 'Един или повече атрибути на заглавния ред съдържат неправилни UTF-8 символи',
'content_row_has_malformed_characters' => 'Един или повече атрибути на заглавния ред съдържат неправилни UTF-8 символи',
],
@@ -356,4 +356,10 @@ return [
'google_login' => 'Google Workspace Login Settings',
'enable_google_login' => 'Enable users to login with Google Workspace',
'enable_google_login_help' => 'Users will not be automatically provisioned. They must have an existing account here AND in Google Workspace, and their username here must match their Google Workspace email address. ',
'mail_reply_to' => 'Mail Reply-To Address',
'mail_from' => 'Mail From Address',
'database_driver' => 'Database Driver',
'bs_table_storage' => 'Table Storage',
'timezone' => 'Timezone',
];
@@ -35,10 +35,12 @@ return [
],
'webhook' => [
'sending' => 'Изпращане :app тест съобщение...',
'success' => 'Your :webhook_name Integration works!',
'success_pt1' => 'Успешно! Проверете ',
'success_pt2' => ' канал за вашето тестово съобщение и натиснете бутона SAVE за да запазите вашите настройки.',
'500' => 'Грешка 500.',
'error' => 'Възникна грешка. :app върна грешка: :error_message',
'error_redirect' => 'ERROR: 301/302 :endpoint returns a redirect. For security reasons, we dont follow redirects. Please use the actual endpoint.',
'error_misc' => 'Възникна грешка. :( ',
]
];
+4 -2
View File
@@ -459,7 +459,7 @@ return [
'serial_number' => 'Сериен номер',
'item_notes' => ':item бележки',
'item_name_var' => ':item Име',
'error_user_company' => 'Несъответсвие между фирмата на потребителя и актива',
'error_user_company' => 'Checkout target company and asset company do not match',
'error_user_company_accept_view' => 'Актива заведен на вас пренадлежи към друга фирма, затова не можете да го приемете или откажете. Свържете се с вашият администратор',
'importer' => [
'checked_out_to_fullname' => 'Изписан на: Full Name',
@@ -485,6 +485,8 @@ return [
],
'percent_complete' => '% завърешен',
'uploading' => 'Качване... ',
'upload_error' => 'Грешка при качване. Проверете да няма празни редове в края.'
'upload_error' => 'Грешка при качване. Проверете да няма празни редове в края.',
'copy_to_clipboard' => 'Copy to Clipboard',
'copied' => 'Copied!',
];
+1
View File
@@ -30,6 +30,7 @@ return [
'ga-IE'=> 'Irish',
'it'=> 'Italian',
'ja'=> 'Japanese',
'km' => 'Khmer',
'ko'=> 'Korean',
'lv'=>'Latvian',
'lt'=> 'Lithuanian',
@@ -51,6 +51,7 @@ return [
'success' => 'Your file has been imported',
'file_delete_success' => 'Your file has been been successfully deleted',
'file_delete_error' => 'The file was unable to be deleted',
'file_missing' => 'The file selected is missing',
'header_row_has_malformed_characters' => 'One or more attributes in the header row contain malformed UTF-8 characters',
'content_row_has_malformed_characters' => 'One or more attributes in the first row of content contain malformed UTF-8 characters',
],
@@ -356,4 +356,10 @@ return [
'google_login' => 'Google Workspace Login Settings',
'enable_google_login' => 'Enable users to login with Google Workspace',
'enable_google_login_help' => 'Users will not be automatically provisioned. They must have an existing account here AND in Google Workspace, and their username here must match their Google Workspace email address. ',
'mail_reply_to' => 'Mail Reply-To Address',
'mail_from' => 'Mail From Address',
'database_driver' => 'Database Driver',
'bs_table_storage' => 'Table Storage',
'timezone' => 'Timezone',
];
@@ -35,10 +35,12 @@ return [
],
'webhook' => [
'sending' => 'Sending :app test message...',
'success' => 'Your :webhook_name Integration works!',
'success_pt1' => 'Success! Check the ',
'success_pt2' => ' channel for your test message, and be sure to click SAVE below to store your settings.',
'500' => '500 Server Error.',
'error' => 'Something went wrong. :app responded with: :error_message',
'error_redirect' => 'ERROR: 301/302 :endpoint returns a redirect. For security reasons, we dont follow redirects. Please use the actual endpoint.',
'error_misc' => 'Something went wrong. :( ',
]
];
+4 -2
View File
@@ -459,7 +459,7 @@ return [
'serial_number' => 'Serial Number',
'item_notes' => ':item Notes',
'item_name_var' => ':item Name',
'error_user_company' => 'User and Asset companies missmatch',
'error_user_company' => 'Checkout target company and asset company do not match',
'error_user_company_accept_view' => 'An Asset assigned to you belongs to a different company so you can\'t accept nor deny it, please check with your manager',
'importer' => [
'checked_out_to_fullname' => 'Checked Out to: Full Name',
@@ -485,6 +485,8 @@ return [
],
'percent_complete' => '% complete',
'uploading' => 'Uploading... ',
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.'
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.',
'copy_to_clipboard' => 'Copy to Clipboard',
'copied' => 'Copied!',
];
+1
View File
@@ -30,6 +30,7 @@ return [
'ga-IE'=> 'Irish',
'it'=> 'Italian',
'ja'=> 'Japanese',
'km' => 'Khmer',
'ko'=> 'Korean',
'lv'=>'Latvian',
'lt'=> 'Lithuanian',
@@ -51,6 +51,7 @@ return [
'success' => 'Váš soubor byl importován',
'file_delete_success' => 'Váš soubor byl úspěšně odstraněn',
'file_delete_error' => 'Soubor nelze odstranit',
'file_missing' => 'The file selected is missing',
'header_row_has_malformed_characters' => 'Jeden nebo více sloupců obsahuje v záhlaví poškozené UTF-8 znaky',
'content_row_has_malformed_characters' => 'Jedna nebo více hodnot v prvním řádku obsahu obsahuje poškozené UTF-8 znaky',
],
@@ -356,4 +356,10 @@ return [
'google_login' => 'Google Workspace Login Settings',
'enable_google_login' => 'Enable users to login with Google Workspace',
'enable_google_login_help' => 'Users will not be automatically provisioned. They must have an existing account here AND in Google Workspace, and their username here must match their Google Workspace email address. ',
'mail_reply_to' => 'Mail Reply-To Address',
'mail_from' => 'Mail From Address',
'database_driver' => 'Database Driver',
'bs_table_storage' => 'Table Storage',
'timezone' => 'Timezone',
];
@@ -35,10 +35,12 @@ return [
],
'webhook' => [
'sending' => 'Sending :app test message...',
'success' => 'Your :webhook_name Integration works!',
'success_pt1' => 'Success! Check the ',
'success_pt2' => ' channel for your test message, and be sure to click SAVE below to store your settings.',
'500' => '500 Server Error.',
'error' => 'Something went wrong. :app responded with: :error_message',
'error_redirect' => 'ERROR: 301/302 :endpoint returns a redirect. For security reasons, we dont follow redirects. Please use the actual endpoint.',
'error_misc' => 'Something went wrong. :( ',
]
];
+4 -2
View File
@@ -459,7 +459,7 @@ return [
'serial_number' => 'Serial Number',
'item_notes' => ':item Notes',
'item_name_var' => ':item Name',
'error_user_company' => 'User and Asset companies missmatch',
'error_user_company' => 'Checkout target company and asset company do not match',
'error_user_company_accept_view' => 'An Asset assigned to you belongs to a different company so you can\'t accept nor deny it, please check with your manager',
'importer' => [
'checked_out_to_fullname' => 'Checked Out to: Full Name',
@@ -485,6 +485,8 @@ return [
],
'percent_complete' => '% complete',
'uploading' => 'Uploading... ',
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.'
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.',
'copy_to_clipboard' => 'Copy to Clipboard',
'copied' => 'Copied!',
];
+1
View File
@@ -30,6 +30,7 @@ return [
'ga-IE'=> 'Irština',
'it'=> 'Italština',
'ja'=> 'Japonština',
'km' => 'Khmer',
'ko'=> 'Korejština',
'lv'=>'Lotyšština',
'lt'=> 'Litevština',
@@ -51,6 +51,7 @@ return [
'success' => 'Mae\'ch ffeil wedi\'i mewnforio',
'file_delete_success' => 'Mae eich ffeil wedi\'i dileu yn llwyddiannus',
'file_delete_error' => 'Nid oedd yn bosib dileu\'r ffeil',
'file_missing' => 'The file selected is missing',
'header_row_has_malformed_characters' => 'One or more attributes in the header row contain malformed UTF-8 characters',
'content_row_has_malformed_characters' => 'One or more attributes in the first row of content contain malformed UTF-8 characters',
],
@@ -356,4 +356,10 @@ return [
'google_login' => 'Google Workspace Login Settings',
'enable_google_login' => 'Enable users to login with Google Workspace',
'enable_google_login_help' => 'Users will not be automatically provisioned. They must have an existing account here AND in Google Workspace, and their username here must match their Google Workspace email address. ',
'mail_reply_to' => 'Mail Reply-To Address',
'mail_from' => 'Mail From Address',
'database_driver' => 'Database Driver',
'bs_table_storage' => 'Table Storage',
'timezone' => 'Timezone',
];
@@ -35,10 +35,12 @@ return [
],
'webhook' => [
'sending' => 'Sending :app test message...',
'success' => 'Your :webhook_name Integration works!',
'success_pt1' => 'Success! Check the ',
'success_pt2' => ' channel for your test message, and be sure to click SAVE below to store your settings.',
'500' => '500 Server Error.',
'error' => 'Something went wrong. :app responded with: :error_message',
'error_redirect' => 'ERROR: 301/302 :endpoint returns a redirect. For security reasons, we dont follow redirects. Please use the actual endpoint.',
'error_misc' => 'Something went wrong. :( ',
]
];
+4 -2
View File
@@ -459,7 +459,7 @@ return [
'serial_number' => 'Serial Number',
'item_notes' => ':item Notes',
'item_name_var' => ':item Name',
'error_user_company' => 'User and Asset companies missmatch',
'error_user_company' => 'Checkout target company and asset company do not match',
'error_user_company_accept_view' => 'An Asset assigned to you belongs to a different company so you can\'t accept nor deny it, please check with your manager',
'importer' => [
'checked_out_to_fullname' => 'Checked Out to: Full Name',
@@ -485,6 +485,8 @@ return [
],
'percent_complete' => '% complete',
'uploading' => 'Uploading... ',
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.'
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.',
'copy_to_clipboard' => 'Copy to Clipboard',
'copied' => 'Copied!',
];
+1
View File
@@ -30,6 +30,7 @@ return [
'ga-IE'=> 'Irish',
'it'=> 'Italian',
'ja'=> 'Japanese',
'km' => 'Khmer',
'ko'=> 'Korean',
'lv'=>'Latvian',
'lt'=> 'Lithuanian',
@@ -50,6 +50,7 @@ return [
'success' => 'Din fil er blevet importeret',
'file_delete_success' => 'Din fil er blevet slettet korrekt',
'file_delete_error' => 'Filen kunne ikke slettes',
'file_missing' => 'The file selected is missing',
'header_row_has_malformed_characters' => 'One or more attributes in the header row contain malformed UTF-8 characters',
'content_row_has_malformed_characters' => 'One or more attributes in the first row of content contain malformed UTF-8 characters',
],
@@ -356,4 +356,10 @@ return [
'google_login' => 'Google Workspace Login Settings',
'enable_google_login' => 'Enable users to login with Google Workspace',
'enable_google_login_help' => 'Users will not be automatically provisioned. They must have an existing account here AND in Google Workspace, and their username here must match their Google Workspace email address. ',
'mail_reply_to' => 'Mail Reply-To Address',
'mail_from' => 'Mail From Address',
'database_driver' => 'Database Driver',
'bs_table_storage' => 'Table Storage',
'timezone' => 'Timezone',
];
@@ -35,10 +35,12 @@ return [
],
'webhook' => [
'sending' => 'Sending :app test message...',
'success' => 'Your :webhook_name Integration works!',
'success_pt1' => 'Success! Check the ',
'success_pt2' => ' channel for your test message, and be sure to click SAVE below to store your settings.',
'500' => '500 Server Error.',
'error' => 'Something went wrong. :app responded with: :error_message',
'error_redirect' => 'ERROR: 301/302 :endpoint returns a redirect. For security reasons, we dont follow redirects. Please use the actual endpoint.',
'error_misc' => 'Something went wrong. :( ',
]
];
+4 -2
View File
@@ -459,7 +459,7 @@ return [
'serial_number' => 'Serial Number',
'item_notes' => ':item Notes',
'item_name_var' => ':item Name',
'error_user_company' => 'User and Asset companies missmatch',
'error_user_company' => 'Checkout target company and asset company do not match',
'error_user_company_accept_view' => 'An Asset assigned to you belongs to a different company so you can\'t accept nor deny it, please check with your manager',
'importer' => [
'checked_out_to_fullname' => 'Checked Out to: Full Name',
@@ -485,6 +485,8 @@ return [
],
'percent_complete' => '% complete',
'uploading' => 'Uploading... ',
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.'
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.',
'copy_to_clipboard' => 'Copy to Clipboard',
'copied' => 'Copied!',
];
+1
View File
@@ -30,6 +30,7 @@ return [
'ga-IE'=> 'Irsk',
'it'=> 'Italiensk',
'ja'=> 'Japansk',
'km' => 'Khmer',
'ko'=> 'Koreansk',
'lv'=>'Lettisk',
'lt'=> 'Litauisk',
@@ -51,6 +51,7 @@ return [
'success' => 'Deine Datei wurde importiert',
'file_delete_success' => 'Deine Datei wurde erfolgreich gelöscht',
'file_delete_error' => 'Die Datei konnte nicht gelöscht werden',
'file_missing' => 'The file selected is missing',
'header_row_has_malformed_characters' => 'Ein oder mehrere Attribute in der Kopfzeile enthalten fehlerhafte UTF-8 Zeichen',
'content_row_has_malformed_characters' => 'Ein oder mehrere Attribute in der ersten Zeile des Inhalts enthalten fehlerhafte UTF-8-Zeichen',
],
@@ -356,4 +356,10 @@ return [
'google_login' => 'Google Workspace Anmeldeeinstellungen',
'enable_google_login' => 'Anmelden mit Google Workspace für Benutzer aktivieren',
'enable_google_login_help' => 'Benutzer werden nicht automatisch bereitgestellt. Du musst ein bestehendes Konto hier UND in Google Workspace haben, und dein Benutzername muss mit der E-Mail-Adresse von Google Workspace übereinstimmen. ',
'mail_reply_to' => 'Mail Reply-To Address',
'mail_from' => 'Mail From Address',
'database_driver' => 'Database Driver',
'bs_table_storage' => 'Table Storage',
'timezone' => 'Timezone',
];
@@ -35,10 +35,12 @@ return [
],
'webhook' => [
'sending' => ':app Testnachricht wird gesendet ...',
'success' => 'Your :webhook_name Integration works!',
'success_pt1' => 'Erfolgreich! Überprüfe den ',
'success_pt2' => ' Kanal für deine Testnachricht und klicke unten auf SPEICHERN, um die Einstellungen zu sichern.',
'500' => '500 Server Fehler.',
'error' => 'Etwas ist schiefgelaufen. :app antwortete mit: :error_message',
'error_redirect' => 'ERROR: 301/302 :endpoint returns a redirect. For security reasons, we dont follow redirects. Please use the actual endpoint.',
'error_misc' => 'Etwas ist schiefgelaufen! :( ',
]
];
+4 -2
View File
@@ -459,7 +459,7 @@ return [
'serial_number' => 'Seriennummer',
'item_notes' => ':item Notizen',
'item_name_var' => ':item Name',
'error_user_company' => 'Benutzer und Asset Unternehmen stimmen nicht überein',
'error_user_company' => 'Checkout target company and asset company do not match',
'error_user_company_accept_view' => 'Ein Asset, welches dir zugewiesen wurde, gehört einem anderen Unternehmen, sodass du es nicht akzeptieren oder ablehnen kannst. Bitte prüfe das mit deinem Vorgesetzten',
'importer' => [
'checked_out_to_fullname' => 'Herausgegeben an: Voller Name',
@@ -485,6 +485,8 @@ return [
],
'percent_complete' => '% vollständig',
'uploading' => 'Hochladen... ',
'upload_error' => 'Fehler beim Hochladen der Datei. Bitte überprüfe, dass es keine leeren Leerzeilen gibt.'
'upload_error' => 'Fehler beim Hochladen der Datei. Bitte überprüfe, dass es keine leeren Leerzeilen gibt.',
'copy_to_clipboard' => 'In Zwischenablage kopieren',
'copied' => 'Kopiert!',
];
+1
View File
@@ -30,6 +30,7 @@ return [
'ga-IE'=> 'Irisch',
'it'=> 'Italienisch',
'ja'=> 'Japanisch',
'km' => 'Khmer',
'ko'=> 'Koreanisch',
'lv'=>'Lettisch',
'lt'=> 'Litauisch',
@@ -51,6 +51,7 @@ return [
'success' => 'Ihre Datei wurde importiert',
'file_delete_success' => 'Die Datei wurde erfolgreich gelöscht',
'file_delete_error' => 'Die Datei konnte nicht gelöscht werden',
'file_missing' => 'The file selected is missing',
'header_row_has_malformed_characters' => 'Ein oder mehrere Attribute in der Kopfzeile enthalten fehlerhafte UTF-8 Zeichen',
'content_row_has_malformed_characters' => 'Ein oder mehrere Attribute in der ersten Zeile des Inhalts enthalten fehlerhafte UTF-8-Zeichen',
],
@@ -356,4 +356,10 @@ return [
'google_login' => 'Google Workspace Anmeldeeinstellungen',
'enable_google_login' => 'Anmelden mit Google Workspace für Benutzer aktivieren',
'enable_google_login_help' => 'Benutzer werden nicht automatisch bereitgestellt. Sie müssen ein bestehendes Konto hier UND in Google Workspace haben, und Ihr Benutzername muss mit der E-Mail-Adresse von Google Workspace übereinstimmen. ',
'mail_reply_to' => 'Mail Reply-To Address',
'mail_from' => 'Mail From Address',
'database_driver' => 'Database Driver',
'bs_table_storage' => 'Table Storage',
'timezone' => 'Timezone',
];
@@ -35,10 +35,12 @@ return [
],
'webhook' => [
'sending' => ':app Testnachricht wird gesendet...',
'success' => 'Your :webhook_name Integration works!',
'success_pt1' => 'Erfolgreich! Überprüfen Sie den ',
'success_pt2' => ' Kanal für Ihre Testnachricht und klicken Sie auf Speichern, um Ihre Einstellungen zu speichern.',
'500' => '500 Server Error.',
'error' => 'Etwas ist schief gelaufen. :app antwortete mit: :error_message',
'error_redirect' => 'ERROR: 301/302 :endpoint returns a redirect. For security reasons, we dont follow redirects. Please use the actual endpoint.',
'error_misc' => 'Etwas ist schiefgelaufen. :( ',
]
];
+4 -2
View File
@@ -459,7 +459,7 @@ return [
'serial_number' => 'Seriennummer',
'item_notes' => ':item Notizen',
'item_name_var' => ':item Name',
'error_user_company' => 'User and Asset companies missmatch',
'error_user_company' => 'Checkout target company and asset company do not match',
'error_user_company_accept_view' => 'An Asset assigned to you belongs to a different company so you can\'t accept nor deny it, please check with your manager',
'importer' => [
'checked_out_to_fullname' => 'Herausgegeben an: Voller Name',
@@ -485,6 +485,8 @@ return [
],
'percent_complete' => '% vollständig',
'uploading' => 'Uploading... ',
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.'
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.',
'copy_to_clipboard' => 'Copy to Clipboard',
'copied' => 'Copied!',
];
+1
View File
@@ -30,6 +30,7 @@ return [
'ga-IE'=> 'Irisch',
'it'=> 'Italienisch',
'ja'=> 'Japanisch',
'km' => 'Khmer',
'ko'=> 'Koreanisch',
'lv'=>'Lettisch',
'lt'=> 'Litauisch',
@@ -51,6 +51,7 @@ return [
'success' => 'Το αρχείο σας έχει εισαχθεί',
'file_delete_success' => 'Το αρχείο σας έχει διαγραφεί με επιτυχία',
'file_delete_error' => 'Το αρχείο δεν μπόρεσε να διαγραφεί',
'file_missing' => 'The file selected is missing',
'header_row_has_malformed_characters' => 'One or more attributes in the header row contain malformed UTF-8 characters',
'content_row_has_malformed_characters' => 'One or more attributes in the first row of content contain malformed UTF-8 characters',
],
@@ -356,4 +356,10 @@ return [
'google_login' => 'Google Workspace Login Settings',
'enable_google_login' => 'Enable users to login with Google Workspace',
'enable_google_login_help' => 'Users will not be automatically provisioned. They must have an existing account here AND in Google Workspace, and their username here must match their Google Workspace email address. ',
'mail_reply_to' => 'Mail Reply-To Address',
'mail_from' => 'Mail From Address',
'database_driver' => 'Database Driver',
'bs_table_storage' => 'Table Storage',
'timezone' => 'Timezone',
];
@@ -35,10 +35,12 @@ return [
],
'webhook' => [
'sending' => 'Sending :app test message...',
'success' => 'Your :webhook_name Integration works!',
'success_pt1' => 'Success! Check the ',
'success_pt2' => ' channel for your test message, and be sure to click SAVE below to store your settings.',
'500' => '500 Server Error.',
'error' => 'Something went wrong. :app responded with: :error_message',
'error_redirect' => 'ERROR: 301/302 :endpoint returns a redirect. For security reasons, we dont follow redirects. Please use the actual endpoint.',
'error_misc' => 'Something went wrong. :( ',
]
];
+4 -2
View File
@@ -459,7 +459,7 @@ return [
'serial_number' => 'Serial Number',
'item_notes' => ':item Notes',
'item_name_var' => ':item Name',
'error_user_company' => 'User and Asset companies missmatch',
'error_user_company' => 'Checkout target company and asset company do not match',
'error_user_company_accept_view' => 'An Asset assigned to you belongs to a different company so you can\'t accept nor deny it, please check with your manager',
'importer' => [
'checked_out_to_fullname' => 'Checked Out to: Full Name',
@@ -485,6 +485,8 @@ return [
],
'percent_complete' => '% complete',
'uploading' => 'Uploading... ',
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.'
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.',
'copy_to_clipboard' => 'Copy to Clipboard',
'copied' => 'Copied!',
];
+1
View File
@@ -30,6 +30,7 @@ return [
'ga-IE'=> 'Irish',
'it'=> 'Italian',
'ja'=> 'Japanese',
'km' => 'Khmer',
'ko'=> 'Korean',
'lv'=>'Latvian',
'lt'=> 'Lithuanian',
@@ -51,6 +51,7 @@ return [
'success' => 'Your file has been imported',
'file_delete_success' => 'Your file has been been successfully deleted',
'file_delete_error' => 'The file was unable to be deleted',
'file_missing' => 'The file selected is missing',
'header_row_has_malformed_characters' => 'One or more attributes in the header row contain malformed UTF-8 characters',
'content_row_has_malformed_characters' => 'One or more attributes in the first row of content contain malformed UTF-8 characters',
],
@@ -356,4 +356,10 @@ return [
'google_login' => 'Google Workspace Login Settings',
'enable_google_login' => 'Enable users to login with Google Workspace',
'enable_google_login_help' => 'Users will not be automatically provisioned. They must have an existing account here AND in Google Workspace, and their username here must match their Google Workspace email address. ',
'mail_reply_to' => 'Mail Reply-To Address',
'mail_from' => 'Mail From Address',
'database_driver' => 'Database Driver',
'bs_table_storage' => 'Table Storage',
'timezone' => 'Timezone',
];
@@ -35,10 +35,12 @@ return [
],
'webhook' => [
'sending' => 'Sending :app test message...',
'success' => 'Your :webhook_name Integration works!',
'success_pt1' => 'Success! Check the ',
'success_pt2' => ' channel for your test message, and be sure to click SAVE below to store your settings.',
'500' => '500 Server Error.',
'error' => 'Something went wrong. :app responded with: :error_message',
'error_redirect' => 'ERROR: 301/302 :endpoint returns a redirect. For security reasons, we dont follow redirects. Please use the actual endpoint.',
'error_misc' => 'Something went wrong. :( ',
]
];
+4 -2
View File
@@ -459,7 +459,7 @@ return [
'serial_number' => 'Serial Number',
'item_notes' => ':item Notes',
'item_name_var' => ':item Name',
'error_user_company' => 'User and Asset companies missmatch',
'error_user_company' => 'Checkout target company and asset company do not match',
'error_user_company_accept_view' => 'An Asset assigned to you belongs to a different company so you can\'t accept nor deny it, please check with your manager',
'importer' => [
'checked_out_to_fullname' => 'Checked Out to: Full Name',
@@ -485,6 +485,8 @@ return [
],
'percent_complete' => '% complete',
'uploading' => 'Uploading... ',
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.'
'upload_error' => 'Error uploading file. Please check that there are no empty trailing rows.',
'copy_to_clipboard' => 'Copy to Clipboard',
'copied' => 'Copied!',
];
+1
View File
@@ -30,6 +30,7 @@ return [
'ga-IE'=> 'Irish',
'it'=> 'Italian',
'ja'=> 'Japanese',
'km' => 'Khmer',
'ko'=> 'Korean',
'lv'=>'Latvian',
'lt'=> 'Lithuanian',
@@ -50,6 +50,7 @@ return [
'success' => 'File Anda telah diimpor',
'file_delete_success' => 'File anda telah berhasil dihapus',
'file_delete_error' => 'File tidak dapat dihapus',
'file_missing' => 'The file selected is missing',
'header_row_has_malformed_characters' => 'One or more attributes in the header row contain malformed UTF-8 characters',
'content_row_has_malformed_characters' => 'One or more attributes in the first row of content contain malformed UTF-8 characters',
],
@@ -356,4 +356,10 @@ return [
'google_login' => 'Google Workspace Login Settings',
'enable_google_login' => 'Enable users to login with Google Workspace',
'enable_google_login_help' => 'Users will not be automatically provisioned. They must have an existing account here AND in Google Workspace, and their username here must match their Google Workspace email address. ',
'mail_reply_to' => 'Mail Reply-To Address',
'mail_from' => 'Mail From Address',
'database_driver' => 'Database Driver',
'bs_table_storage' => 'Table Storage',
'timezone' => 'Timezone',
];

Some files were not shown because too many files have changed in this diff Show More