Compare commits

...

52 Commits

Author SHA1 Message Date
snipe 11832daf5c Merge branch 'develop'
# Conflicts:
#	config/version.php
2018-05-21 15:17:40 -07:00
snipe 79555f5647 Bumped version 2018-05-21 15:16:56 -07:00
snipe 1868013704 Merge branch 'develop'
# Conflicts:
#	config/version.php
2018-05-21 14:59:08 -07:00
snipe 39cc13f155 Bumped version 2018-05-21 14:58:16 -07:00
snipe e636875797 Merge branch 'develop' 2018-05-21 14:56:57 -07:00
snipe 260749337e Updated languages 2018-05-21 14:54:36 -07:00
snipe 20a3b556bb Removed log 2018-05-21 14:33:27 -07:00
Tim Bishop fa0c58e42a Don't install require-dev packages. (#5549)
This is already set for a local composer install, but not a global
one. They should be consistent.
2018-05-18 16:06:05 -07:00
snipe abbb94239d Add @doekman as a contributor 2018-05-18 16:05:12 -07:00
snipe d89ef43834 Make category counters ints 2018-05-18 16:05:12 -07:00
Doeke Zanstra f84ab2beda Fixed bug #5540 (#5550)
Error message with button "Test LDAP" is empty #5540
2018-05-18 16:04:34 -07:00
snipe 86d398abda Fixed category test 2018-05-18 14:58:06 -07:00
snipe 883c65981b More test fixes 2018-05-16 20:09:18 -07:00
snipe 8eb96efa13 Merge branch 'develop' 2018-05-16 19:38:23 -07:00
snipe e9973670ea Could should not be equal to 1 2018-05-16 19:38:02 -07:00
snipe ef8d2d06df Fixes #5519 - count() for php 7.2 2018-05-16 19:35:14 -07:00
snipe 0b5bb520a7 Merge branch 'develop'
# Conflicts:
#	config/version.php
2018-05-16 19:24:31 -07:00
lea-mink 233fb23cb8 Create asset maintenance - Added orange bar for required asset to edit view (#5520)
* Added orange bar for required asset to edit view

* disable redirection to asset maintenances view

* Update - disable redirection to asset maintenances view
2018-05-16 19:23:23 -07:00
snipe fa89f45cb8 Bumped hash 2018-05-16 19:22:59 -07:00
snipe 4c656c0321 De-normalize new counters from 4.3.0 (#5547)
* Added de-norm counter migration for assets

* Renaming counter columns, since Eloquent has a magical *_count helper

* Added artisan command to sync counters (one-off)

* Update API to use de-normed fields

* Increment counters for checkin;/checkout

* Derp.

* Added request increment/decrementer

* Move increment for checkout to the Asset::checkout method

* Added “could take a while” message
2018-05-16 19:20:43 -07:00
snipe 87c6ee2035 Importer test fixes 2018-05-16 19:05:00 -07:00
snipe aab190423f Partial fix for license+category tests 2018-05-16 18:35:11 -07:00
snipe 05e3e6bda6 Added indexes for speed 2018-05-14 20:27:56 -07:00
Tim Bishop 1f299ed73e Fix padding on next page with Chrome. (#5509)
It looks like Chrome (and probably other browsers) is optimising the
next-padding div out since it has no content. This means the margin
doesn't apply. Adding the nbsp, and making sure it takes up no space
itself, is enough to make the margin do the right thing.

I also tried using padding instead of margin, but this results in an
extra page at the end of the output (there'd need to be a way to stop
page-break and next-padding appearing at the end of the document). I also
tried setting a min-height on next-padding, but this had the same issue.
2018-05-09 17:00:36 -07:00
snipe 4ba9792fbe Merge branch 'develop' 2018-05-09 15:29:59 -07:00
snipe f405511b6b Fixed #5501 - regression disallowing license files to be downloaded 2018-05-08 14:24:51 -07:00
snipe 8ad5eb3e59 Fixed #5500 - present() on correct location value 2018-05-08 09:21:43 -07:00
snipe 3df8fa99f0 Merge branch 'develop' 2018-05-08 07:37:44 -07:00
snipe cca97341e9 More flexible date range in datepicker for expected checkin filter on custom reports 2018-05-08 07:37:18 -07:00
snipe 13195d06fd Fixed #5491 - added default location filter for custom report 2018-05-08 07:34:14 -07:00
snipe 9b6e86b55c Merge branch 'develop' 2018-05-08 05:59:54 -07:00
snipe 65cf7527b0 Added model name to expected checkin reminders 2018-05-08 05:59:34 -07:00
snipe f74d50439c Merge branch 'develop' 2018-05-08 05:39:28 -07:00
snipe 28e7ca5a84 Formatting tweaks to email notifications 2018-05-08 05:39:11 -07:00
snipe 8f64da5bc7 Added admin alert on expiring notifications 2018-05-08 05:27:03 -07:00
snipe 25f537e730 Merge branch 'develop'
# Conflicts:
#	config/version.php
2018-05-08 03:49:28 -07:00
snipe 6d8af3d9c0 Bumped hash 2018-05-08 03:48:35 -07:00
snipe e56a46882d Include EULA/acceptance in license interfaces 2018-05-08 03:47:28 -07:00
snipe 0476ffecdb Removed debugging comments 2018-05-08 03:46:48 -07:00
snipe 47a0400a72 Fixed comment typo 2018-05-08 03:14:25 -07:00
snipe de3417d557 Added link to SnipeitPS powershell wrapper 2018-05-08 01:34:53 -07:00
snipe 83b546c1c5 Disable privacy policy link in footer if in demo mode 2018-05-08 01:07:15 -07:00
snipe 04709dc1df Fixed #5477 - added GDPR privacy policy link in email and webpage 2018-05-08 00:50:13 -07:00
snipe f48171dcab Add category to licenses 2018-05-08 00:14:38 -07:00
snipe 7b8362b64c Added license categories 2018-05-04 21:01:38 -07:00
snipe 188538651a Fixed slack notification error if location is not set on checkin 2018-05-04 21:01:25 -07:00
snipe a9fc7e04e9 Fixed php7.2 count issue 2018-05-04 21:00:58 -07:00
snipe 4812285512 Fixed #5482 - typo in custom fields info 2018-05-04 14:52:19 -07:00
snipe ec1fa8e90a Merge branch 'develop' 2018-05-03 08:06:58 -07:00
snipe 3a1b432234 Fixed #5472 - show_in_email for custom fields missing in edit field UI 2018-05-03 08:06:28 -07:00
snipe 98f853128a Merge branch 'develop' 2018-05-03 05:43:49 -07:00
snipe 276d2bc866 Fixed advanced search on model number
(RB:347)
2018-05-03 05:43:25 -07:00
317 changed files with 3648 additions and 648 deletions
+9
View File
@@ -911,6 +911,15 @@
"contributions": [
"code"
]
},
{
"login": "doekman",
"name": "Doeke Zanstra",
"avatar_url": "https://avatars1.githubusercontent.com/u/1086388?v=4",
"profile": "https://github.com/doekman",
"contributions": [
"code"
]
}
]
}
+3 -1
View File
@@ -1,5 +1,5 @@
[![Build Status](https://travis-ci.org/snipe/snipe-it.svg?branch=master)](https://travis-ci.org/snipe/snipe-it) [![Crowdin](https://d322cqt584bo4o.cloudfront.net/snipe-it/localized.svg)](https://crowdin.com/project/snipe-it) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/snipe/snipe-it?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Docker Pulls](https://img.shields.io/docker/pulls/snipe/snipe-it.svg)](https://hub.docker.com/r/snipe/snipe-it/) [![Twitter Follow](https://img.shields.io/twitter/follow/snipeyhead.svg?style=social)](https://twitter.com/snipeyhead) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/553ce52037fc43ea99149785afcfe641)](https://www.codacy.com/app/snipe/snipe-it?utm_source=github.com&utm_medium=referral&utm_content=snipe/snipe-it&utm_campaign=Badge_Grade)
[![All Contributors](https://img.shields.io/badge/all_contributors-98-orange.svg?style=flat-square)](#contributors) [![Open Source Helpers](https://www.codetriage.com/snipe/snipe-it/badges/users.svg)](https://www.codetriage.com/snipe/snipe-it)
[![All Contributors](https://img.shields.io/badge/all_contributors-99-orange.svg?style=flat-square)](#contributors) [![Open Source Helpers](https://www.codetriage.com/snipe/snipe-it/badges/users.svg)](https://www.codetriage.com/snipe/snipe-it)
## Snipe-IT - Open Source Asset Management System
@@ -57,6 +57,7 @@ Since the release of the JSON REST API, several third-party developers have been
- [Python Module](https://github.com/jbloomer/SnipeIT-PythonAPI) by [@jbloomer](https://github.com/jbloomer)
- [SnipeSharp - .NET module in C#](https://github.com/barrycarey/SnipeSharp) by [@barrycarey](https://github.com/barrycarey)
- [InQRy](https://github.com/Microsoft/InQRy) by [@Microsoft](https://github.com/Microsoft)
- [SnipeitPS](https://github.com/snazy2000/SnipeitPS) by [@snazy2000](https://github.com/snazy2000) - Powershell API Wrapper for Snipe-it
As these were created by third-parties, Snipe-IT cannot provide support for these project, and you should contact the developers directly if you need assistance. Additionally, Snipe-IT makes no guarantees as to the reliability, accuracy or maintainability of these libraries. Use at your own risk. :)
@@ -82,6 +83,7 @@ Thanks goes to all of these wonderful people ([emoji key](https://github.com/ken
| [<img src="https://avatars2.githubusercontent.com/u/2809241?v=4" width="110px;"/><br /><sub>Robin Temme</sub>](https://github.com/zwerch)<br />[💻](https://github.com/snipe/snipe-it/commits?author=zwerch "Code") | [<img src="https://avatars0.githubusercontent.com/u/6961695?v=4" width="110px;"/><br /><sub>Iman</sub>](https://github.com/imanghafoori1)<br />[💻](https://github.com/snipe/snipe-it/commits?author=imanghafoori1 "Code") | [<img src="https://avatars1.githubusercontent.com/u/6551003?v=4" width="110px;"/><br /><sub>Richard Hofman</sub>](https://github.com/richardhofman6)<br />[💻](https://github.com/snipe/snipe-it/commits?author=richardhofman6 "Code") | [<img src="https://avatars0.githubusercontent.com/u/3697569?v=4" width="110px;"/><br /><sub>gizzmojr</sub>](https://github.com/gizzmojr)<br />[💻](https://github.com/snipe/snipe-it/commits?author=gizzmojr "Code") | [<img src="https://avatars3.githubusercontent.com/u/404729?v=4" width="110px;"/><br /><sub>Jenny Li</sub>](https://github.com/imjennyli)<br />[📖](https://github.com/snipe/snipe-it/commits?author=imjennyli "Documentation") | [<img src="https://avatars0.githubusercontent.com/u/869227?v=4" width="110px;"/><br /><sub>Geoff Young</sub>](https://github.com/GeoffYoung)<br />[💻](https://github.com/snipe/snipe-it/commits?author=GeoffYoung "Code") | [<img src="https://avatars3.githubusercontent.com/u/1068477?v=4" width="110px;"/><br /><sub>Elliot Blackburn</sub>](http://www.elliotblackburn.com)<br />[📖](https://github.com/snipe/snipe-it/commits?author=BlueHatbRit "Documentation") |
| [<img src="https://avatars1.githubusercontent.com/u/6357451?v=4" width="110px;"/><br /><sub>Tõnis Ormisson</sub>](http://andmemasin.eu)<br />[💻](https://github.com/snipe/snipe-it/commits?author=TonisOrmisson "Code") | [<img src="https://avatars0.githubusercontent.com/u/449411?v=4" width="110px;"/><br /><sub>Nicolai Essig</sub>](http://www.nicolai-essig.de)<br />[💻](https://github.com/snipe/snipe-it/commits?author=thakilla "Code") | [<img src="https://avatars1.githubusercontent.com/u/14809698?v=4" width="110px;"/><br /><sub>Danielle</sub>](https://github.com/techincolor)<br />[📖](https://github.com/snipe/snipe-it/commits?author=techincolor "Documentation") | [<img src="https://avatars1.githubusercontent.com/u/18545156?v=4" width="110px;"/><br /><sub>Lawrence</sub>](https://github.com/TheVakman)<br />[⚠️](https://github.com/snipe/snipe-it/commits?author=TheVakman "Tests") [🐛](https://github.com/snipe/snipe-it/issues?q=author%3ATheVakman "Bug reports") | [<img src="https://avatars1.githubusercontent.com/u/22473767?v=4" width="110px;"/><br /><sub>uknzaeinozpas</sub>](https://github.com/uknzaeinozpas)<br />[⚠️](https://github.com/snipe/snipe-it/commits?author=uknzaeinozpas "Tests") [💻](https://github.com/snipe/snipe-it/commits?author=uknzaeinozpas "Code") | [<img src="https://avatars3.githubusercontent.com/u/422752?v=4" width="110px;"/><br /><sub>Ryan</sub>](https://github.com/Gelob)<br />[📖](https://github.com/snipe/snipe-it/commits?author=Gelob "Documentation") | [<img src="https://avatars1.githubusercontent.com/u/10672546?v=4" width="110px;"/><br /><sub>vcordes79</sub>](https://github.com/vcordes79)<br />[💻](https://github.com/snipe/snipe-it/commits?author=vcordes79 "Code") |
| [<img src="https://avatars3.githubusercontent.com/u/27958330?v=4" width="110px;"/><br /><sub>fordster78</sub>](https://github.com/fordster78)<br />[💻](https://github.com/snipe/snipe-it/commits?author=fordster78 "Code") | [<img src="https://avatars0.githubusercontent.com/u/34064225?v=4" width="110px;"/><br /><sub>CronKz</sub>](https://github.com/CronKz)<br />[💻](https://github.com/snipe/snipe-it/commits?author=CronKz "Code") | [<img src="https://avatars1.githubusercontent.com/u/585486?v=4" width="110px;"/><br /><sub>Tim Bishop</sub>](https://github.com/tdb)<br />[💻](https://github.com/snipe/snipe-it/commits?author=tdb "Code") | [<img src="https://avatars2.githubusercontent.com/u/5384694?v=4" width="110px;"/><br /><sub>Sean McIlvenna</sub>](https://www.seanmcilvenna.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=seanmcilvenna "Code") | [<img src="https://avatars3.githubusercontent.com/u/36515590?v=4" width="110px;"/><br /><sub>cepacs</sub>](https://github.com/cepacs)<br />[🐛](https://github.com/snipe/snipe-it/issues?q=author%3Acepacs "Bug reports") [📖](https://github.com/snipe/snipe-it/commits?author=cepacs "Documentation") | [<img src="https://avatars2.githubusercontent.com/u/37537300?v=4" width="110px;"/><br /><sub>lea-mink</sub>](https://github.com/lea-mink)<br />[💻](https://github.com/snipe/snipe-it/commits?author=lea-mink "Code") | [<img src="https://avatars0.githubusercontent.com/u/7140719?v=4" width="110px;"/><br /><sub>Hannah Tinkler</sub>](https://github.com/hannahtinkler)<br />[💻](https://github.com/snipe/snipe-it/commits?author=hannahtinkler "Code") |
| [<img src="https://avatars1.githubusercontent.com/u/1086388?v=4" width="110px;"/><br /><sub>Doeke Zanstra</sub>](https://github.com/doekman)<br />[💻](https://github.com/snipe/snipe-it/commits?author=doekman "Code") |
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!
@@ -4,8 +4,10 @@ namespace App\Console\Commands;
use App\Models\Asset;
use App\Models\Setting;
use Illuminate\Console\Command;
use App\Notifications\ExpectedCheckinNotification;
use App\Notifications\ExpectedCheckinAdminNotification;
use Carbon\Carbon;
class SendExpectedCheckinAlerts extends Command
@@ -42,21 +44,28 @@ class SendExpectedCheckinAlerts extends Command
*/
public function fire()
{
$settings = Setting::getSettings();
$whenNotify = Carbon::now()->addDays(7);
$assets = Asset::with('assignedTo')->whereNotNull('expected_checkin')->where('expected_checkin', '<=', $whenNotify)->get();
$assets = Asset::with('assignedTo')->whereNotNull('assigned_to')->whereNotNull('expected_checkin')->where('expected_checkin', '<=', $whenNotify)->get();
$this->info($whenNotify.' is deadline');
$this->info($assets->count().' assets');
foreach ($assets as $asset) {
if ($asset->assignedTo && $asset->checkoutOutToUser()) {
$asset->assignedTo->notify((new ExpectedCheckinNotification($asset)));
//$this->info($asset);
if ($asset->assigned && $asset->checkedOutToUser()) {
$asset->assigned->notify((new ExpectedCheckinNotification($asset)));
}
}
// Send a rollup to the admin, if settings dictate
$recipient = new \App\Models\Recipients\AlertRecipient();
if ($settings->alert_email!='') {
$recipient->notify(new ExpectedCheckinAdminNotification($assets));
}
@@ -0,0 +1,76 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Models\Asset;
class SyncAssetCounters extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'snipeit:counter-sync';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Syncs checkedout, checked in, and requested counters for assets';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$start = microtime(true);
$assets = Asset::withCount('checkins', 'checkouts', 'userRequests')
->withTrashed()->get();
if ($assets) {
if ($assets->count() > 0) {
$bar = $this->output->createProgressBar($assets->count());
foreach ($assets as $asset) {
$asset->checkin_counter = (int) $asset->checkins_count;
$asset->checkout_counter = (int) $asset->checkouts_count;
$asset->requests_counter = (int) $asset->user_requests_count;
$asset->unsetEventDispatcher();
$asset->save();
$output['info'][] = 'Asset: ' . $asset->id . ' has ' . $asset->checkin_counter . ' checkins, ' . $asset->checkout_counter . ' checkouts, and ' . $asset->requests_counter . ' requests';
$bar->advance();
}
$bar->finish();
foreach ($output['info'] as $key => $output_text) {
$this->info($output_text);
}
$time_elapsed_secs = microtime(true) - $start;
$this->info('Sync executed in ' . $time_elapsed_secs . ' seconds');
} else {
$this->info('No assets to sync');
}
}
}
}
+1
View File
@@ -29,6 +29,7 @@ class Kernel extends ConsoleKernel
Commands\ResetDemoSettings::class,
Commands\SyncAssetLocations::class,
Commands\RegenerateAssetTags::class,
Commands\SyncAssetCounters::class,
];
/**
+10 -1
View File
@@ -330,7 +330,14 @@ class Helper
*/
public static function categoryTypeList()
{
$category_types = array('' => '','accessory' => 'Accessory', 'asset' => 'Asset', 'consumable' => 'Consumable','component' => 'Component');
$category_types = array(
'' => '',
'accessory' => 'Accessory',
'asset' => 'Asset',
'consumable' => 'Consumable',
'component' => 'Component',
'license' => 'License'
);
return $category_types;
}
@@ -738,6 +745,7 @@ class Helper
static $max_size = -1;
if ($max_size < 0) {
// Start with post_max_size.
$post_max_size = Helper::parse_size(ini_get('post_max_size'));
if ($post_max_size > 0) {
@@ -751,6 +759,7 @@ class Helper
$max_size = $upload_max;
}
}
return $max_size;
}
@@ -77,9 +77,9 @@ class AssetsController extends Controller
'last_audit_date',
'next_audit_date',
'warranty_months',
'checkouts_count',
'checkins_count',
'user_requests_count',
'checkout_counter',
'checkin_counter',
'requests_counter',
];
$filter = array();
@@ -95,7 +95,7 @@ class AssetsController extends Controller
$assets = Company::scopeCompanyables(Asset::select('assets.*'),"company_id","assets")
->with('location', 'assetstatus', 'assetlog', 'company', 'defaultLoc','assignedTo',
'model.category', 'model.manufacturer', 'model.fieldset','supplier')->withCount('checkins', 'checkouts', 'userRequests');
'model.category', 'model.manufacturer', 'model.fieldset','supplier');
// These are used by the API to query against specific ID numbers.
@@ -21,10 +21,10 @@ class CategoriesController extends Controller
public function index(Request $request)
{
$this->authorize('view', Category::class);
$allowed_columns = ['id', 'name','category_type', 'category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email', 'assets_count', 'accessories_count', 'consumables_count', 'components_count', 'image'];
$allowed_columns = ['id', 'name','category_type', 'category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email', 'assets_count', 'accessories_count', 'consumables_count', 'components_count','licenses_count', 'image'];
$categories = Category::select(['id', 'created_at', 'updated_at', 'name','category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email','image'])
->withCount('assets', 'accessories', 'consumables', 'components');
->withCount('assets', 'accessories', 'consumables', 'components','licenses');
if ($request->has('search')) {
$categories = $categories->TextSearch($request->input('search'));
@@ -25,7 +25,7 @@ class LicensesController extends Controller
public function index(Request $request)
{
$this->authorize('view', License::class);
$licenses = Company::scopeCompanyables(License::with('company', 'manufacturer', 'freeSeats', 'supplier')->withCount('freeSeats'));
$licenses = Company::scopeCompanyables(License::with('company', 'manufacturer', 'freeSeats', 'supplier','category')->withCount('freeSeats'));
if ($request->has('company_id')) {
@@ -64,6 +64,10 @@ class LicensesController extends Controller
$licenses->where('supplier_id','=',$request->input('supplier_id'));
}
if ($request->has('category_i')) {
$licenses->where('category_i','=',$request->input('category_i'));
}
if ($request->has('depreciation_id')) {
$licenses->where('depreciation_id','=',$request->input('depreciation_id'));
}
@@ -90,11 +94,14 @@ class LicensesController extends Controller
case 'supplier':
$licenses = $licenses->leftJoin('suppliers', 'licenses.supplier_id', '=', 'suppliers.id')->orderBy('suppliers.name', $order);
break;
case 'category':
$licenses = $licenses->leftJoin('categories', 'licenses.category_id', '=', 'categories.id')->orderBy('categories.name', $order);
break;
case 'company':
$licenses = $licenses->leftJoin('companies', 'licenses.company_id', '=', 'companies.id')->orderBy('companies.name', $order);
break;
default:
$allowed_columns = ['id','name','purchase_cost','expiration_date','purchase_order','order_number','notes','purchase_date','serial','company','license_name','license_email','free_seats_count','seats'];
$allowed_columns = ['id','name','purchase_cost','expiration_date','purchase_order','order_number','notes','purchase_date','serial','company','category','license_name','license_email','free_seats_count','seats'];
$sort = in_array($request->input('sort'), $allowed_columns) ? e($request->input('sort')) : 'created_at';
$licenses = $licenses->orderBy($sort, $order);
break;
@@ -113,7 +113,7 @@ class AssetMaintenancesController extends Controller
$assetMaintenance->notes = e($request->input('notes'));
$asset = Asset::find(e($request->input('asset_id')));
if (!Company::isCurrentUserHasAccess($asset)) {
if ((!Company::isCurrentUserHasAccess($asset)) && ($asset!=null)) {
return static::getInsufficientPermissionsRedirect();
}
@@ -166,13 +166,13 @@ class CustomFieldsController extends Controller
public function update(CustomFieldRequest $request, $id)
{
$field = CustomField::find($id);
$field->name = e($request->get("name"));
$field->element = e($request->get("element"));
$field->field_values = e($request->get("field_values"));
$field->field_encrypted = e($request->get("field_encrypted", 0));
$field->user_id = Auth::user()->id;
$field->help_text = $request->get("help_text");
$field->show_in_email = $request->get("show_in_email", 0);
if (!in_array(Input::get('format'), array_keys(CustomField::$PredefinedFormats))) {
$field->format = e($request->get("custom_format"));
@@ -180,7 +180,6 @@ class CustomFieldsController extends Controller
$field->format = e($request->get("format"));
}
if ($field->save()) {
return redirect()->route("fields.index")->with("success", trans('admin/custom_fields/message.field.update.success'));
}
+2 -1
View File
@@ -107,6 +107,7 @@ class LicensesController extends Controller
$license->seats = $request->input('seats');
$license->serial = $request->input('serial');
$license->supplier_id = $request->input('supplier_id');
$license->category_id = $request->input('category_id');
$license->termination_date = $request->input('termination_date');
$license->user_id = Auth::id();
@@ -182,6 +183,7 @@ class LicensesController extends Controller
$license->seats = e($request->input('seats'));
$license->manufacturer_id = $request->input('manufacturer_id');
$license->supplier_id = $request->input('supplier_id');
$license->category_id = $request->input('category_id');
if ($license->save()) {
return redirect()->route('licenses.show', ['license' => $licenseId])->with('success', trans('admin/licenses/message.update.success'));
@@ -420,7 +422,6 @@ class LicensesController extends Controller
$return_to = Asset::find($licenseSeat->asset_id);
}
\Log::debug($licenseSeat->assigned_to);
// Update the asset data
$licenseSeat->assigned_to = null;
$licenseSeat->asset_id = null;
+17 -7
View File
@@ -376,6 +376,7 @@ class ReportsController extends Controller
if ($request->has('rtd_location')) {
$header[] = trans('admin/hardware/form.default_location');
}
if ($request->has('rtd_location_address')) {
$header[] = trans('general.address');
$header[] = trans('general.address');
@@ -462,6 +463,11 @@ class ReportsController extends Controller
$assets->where('assets.location_id', $request->input('by_location_id'));
}
if ($request->has('by_rtd_location_id')) {
\Log::debug('RTD location should match: '.$request->input('by_rtd_location_id'));
$assets->where('assets.rtd_location_id', $request->input('by_rtd_location_id'));
}
if ($request->has('by_supplier_id')) {
$assets->where('assets.supplier_id', $request->input('by_supplier_id'));
}
@@ -497,6 +503,10 @@ class ReportsController extends Controller
if (($request->has('created_start')) && ($request->has('created_end'))) {
$assets->whereBetween('assets.created_at', [$request->input('created_start'), $request->input('created_end')]);
}
if (($request->has('expected_checkin_start')) && ($request->has('expected_checkin_end'))) {
$assets->whereBetween('assets.expected_checkin', [$request->input('expected_checkin_start'), $request->input('expected_checkin_end')]);
}
$assets->orderBy('assets.created_at', 'ASC')->chunk(500, function($assets) use($handle, $customfields, $request) {
@@ -558,16 +568,16 @@ class ReportsController extends Controller
}
if ($request->has('location_address')) {
$row[] = ($asset->defaultLoc) ? $asset->defaultLoc->address : '';
$row[] = ($asset->defaultLoc) ? $asset->defaultLoc->address2 : '';
$row[] = ($asset->defaultLoc) ? $asset->defaultLoc->city : '';
$row[] = ($asset->defaultLoc) ? $asset->defaultLoc->state : '';
$row[] = ($asset->defaultLoc) ? $asset->defaultLoc->country : '';
$row[] = ($asset->defaultLoc) ? $asset->defaultLoc->zip : '';
$row[] = ($asset->location) ? $asset->location->address : '';
$row[] = ($asset->location) ? $asset->location->address2 : '';
$row[] = ($asset->location) ? $asset->location->city : '';
$row[] = ($asset->location) ? $asset->location->state : '';
$row[] = ($asset->location) ? $asset->location->country : '';
$row[] = ($asset->location) ? $asset->location->zip : '';
}
if ($request->has('rtd_location')) {
$row[] = ($asset->location) ? $asset->defaultLoc->present()->name() : '';
$row[] = ($asset->defaultLoc) ? $asset->defaultLoc->present()->name() : '';
}
if ($request->has('rtd_location_address')) {
@@ -347,6 +347,7 @@ class SettingsController extends Controller
$setting->default_eula_text = $request->input('default_eula_text');
$setting->thumbnail_max_h = $request->input('thumbnail_max_h');
$setting->privacy_policy_link = $request->input('privacy_policy_link');
if (Input::get('per_page')!='') {
$setting->per_page = $request->input('per_page');
+3 -3
View File
@@ -535,13 +535,13 @@ class UsersController extends Controller
* @since [v1.0]
* @return \Illuminate\Http\RedirectResponse
*/
public function postBulkSave()
public function postBulkSave(Request $request)
{
$this->authorize('update', User::class);
if ((!Input::has('ids')) || (count(Input::has('ids')) == 0)) {
if ((!$request->has('ids')) || (count($request->input('ids')) == 0)) {
return redirect()->back()->with('error', 'No users selected');
} elseif ((!Input::has('status_id')) || (count(Input::has('status_id')) == 0)) {
} elseif ((!$request->has('status_id')) || ($request->input('status_id')=='')) {
return redirect()->route('users.index')->with('error', 'No status selected');
} else {
@@ -181,6 +181,8 @@ class ViewAssetsController extends Controller
// If it's already requested, cancel the request.
if ($asset->isRequestedBy(Auth::user())) {
$asset->cancelRequest();
$asset->decrement('requests_counter', 1);
$logaction->logaction('request canceled');
$settings->notify(new RequestAssetCancelationNotification($data));
return redirect()->route('requestable-assets')
@@ -188,8 +190,8 @@ class ViewAssetsController extends Controller
} else {
$logaction->logaction('requested');
$asset->request();
$asset->increment('requests_counter', 1);
$settings->notify(new RequestAssetNotification($data));
+3 -3
View File
@@ -77,9 +77,9 @@ class AssetsTransformer
'last_checkout' => Helper::getFormattedDateObject($asset->last_checkout, 'datetime'),
'expected_checkin' => Helper::getFormattedDateObject($asset->expected_checkin, 'date'),
'purchase_cost' => Helper::formatCurrencyOutput($asset->purchase_cost),
'checkins_count' => (int) $asset->checkins_count,
'checkouts_count' => (int) $asset->checkouts_count,
'user_requests_count' => (int) $asset->user_requests_count,
'checkin_counter' => (int) $asset->checkin_counter,
'checkout_counter' => (int) $asset->checkout_counter,
'requests_counter' => (int) $asset->requests_counter,
'user_can_checkout' => (bool) $asset->availableForCheckout(),
];
@@ -30,10 +30,11 @@ class CategoriesTransformer
'eula' => ($category->getEula()) ? true : false,
'checkin_email' => ($category->checkin_email =='1') ? true : false,
'require_acceptance' => ($category->require_acceptance =='1') ? true : false,
'assets_count' => $category->assets_count,
'accessories_count' => $category->accessories_count,
'consumables_count' => $category->consumables_count,
'components_count' => $category->components_count,
'assets_count' => (int) $category->assets_count,
'accessories_count' => (int) $category->accessories_count,
'consumables_count' => (int) $category->consumables_count,
'components_count' => (int) $category->components_count,
'licenses_count' => (int) $category->licenses_count,
'created_at' => Helper::getFormattedDateObject($category->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($category->updated_at, 'datetime'),
];
@@ -38,6 +38,7 @@ class LicensesTransformer
'license_email' => e($license->license_email),
'maintained' => ($license->maintained == 1) ? true : false,
'supplier' => ($license->supplier) ? ['id' => (int) $license->supplier->id,'name'=> e($license->supplier->name)] : null,
'category' => ($license->category) ? ['id' => (int) $license->category->id,'name'=> e($license->category->name)] : null,
'created_at' => Helper::getFormattedDateObject($license->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($license->updated_at, 'datetime'),
'user_can_checkout' => (bool) ($license->free_seats_count > 0),
+2 -1
View File
@@ -199,6 +199,7 @@ class Asset extends Depreciable
if ($this->save()) {
$this->logCheckout($note, $target);
$this->increment('checkout_counter', 1);
return true;
}
return false;
@@ -1060,7 +1061,7 @@ class Asset extends Depreciable
}
}
if (($fieldname!='category') && ($fieldname!='location') && ($fieldname!='supplier')
if (($fieldname!='category') && ($fieldname!='model_number') && ($fieldname!='location') && ($fieldname!='supplier')
&& ($fieldname!='status_label') && ($fieldname!='model') && ($fieldname!='company') && ($fieldname!='manufacturer')) {
$query->orWhere('assets.'.$fieldname, 'LIKE', '%' . $search_val . '%');
}
+6 -1
View File
@@ -33,7 +33,7 @@ class Category extends SnipeModel
'name' => 'required|min:1|max:255|unique_undeleted',
'require_acceptance' => 'boolean',
'use_default_eula' => 'boolean',
'category_type' => 'required|in:asset,accessory,consumable,component',
'category_type' => 'required|in:asset,accessory,consumable,component,license',
);
/**
@@ -74,6 +74,11 @@ class Category extends SnipeModel
return $this->hasMany('\App\Models\Accessory');
}
public function licenses()
{
return $this->hasMany('\App\Models\License');
}
public function consumables()
{
return $this->hasMany('\App\Models\Consumable');
+2 -1
View File
@@ -41,7 +41,8 @@ class CustomField extends Model
'format',
'field_values',
'field_encrypted',
'help_text'
'help_text',
'show_in_email',
];
// This is confusing, since it's actually the custom fields table that
+39 -2
View File
@@ -16,6 +16,14 @@ use Watson\Validating\ValidatingTrait;
class License extends Depreciable
{
protected $presenter = 'App\Presenters\LicensePresenter';
/**
* Set static properties to determine which checkout/checkin handlers we should use
*/
public static $checkoutClass = CheckoutLicenseNotification::class;
public static $checkinClass = CheckinLicenseNotification::class;
use SoftDeletes;
use CompanyableTrait;
use Loggable, Presentable;
@@ -41,6 +49,7 @@ class License extends Depreciable
'license_email' => 'email|nullable|max:120',
'license_name' => 'string|nullable|max:100',
'notes' => 'string|nullable',
'category_id' => 'required|exists:categories,id',
'company_id' => 'integer|nullable',
);
@@ -57,6 +66,7 @@ class License extends Depreciable
'license_name', //actually licensed_to
'maintained',
'manufacturer_id',
'category_id',
'name',
'notes',
'order_number',
@@ -83,7 +93,6 @@ class License extends Depreciable
static::updating(function ($license) {
$newSeatCount = $license->getAttributes()['seats'];
$oldSeatCount = isset($license->getOriginal()['seats']) ? $license->getOriginal()['seats'] : 0;
// dd($oldSeatCount.' '.$newSeatCount);
return static::adjustSeatCount($license, $oldSeatCount, $newSeatCount);
});
}
@@ -98,7 +107,7 @@ class License extends Depreciable
$change = abs($oldSeats - $newSeats);
if ($oldSeats > $newSeats) {
$license->load('licenseseats.user');
// dd("Here");
// Need to delete seats... lets see if if we have enough.
$seatsAvailableForDelete = $license->licenseseats->reject(function ($seat) {
return (!! $seat->assigned_to) || (!! $seat->asset_id);
@@ -176,11 +185,39 @@ class License extends Depreciable
return $this->belongsTo('\App\Models\Company', 'company_id');
}
public function category()
{
return $this->belongsTo('\App\Models\Category', 'category_id');
}
public function manufacturer()
{
return $this->belongsTo('\App\Models\Manufacturer', 'manufacturer_id');
}
public function checkin_email()
{
return $this->model->category->checkin_email;
}
public function requireAcceptance()
{
return $this->category->require_acceptance;
}
public function getEula()
{
$Parsedown = new \Parsedown();
if ($this->category->eula_text) {
return $Parsedown->text(e($this->category->eula_text));
} elseif ($this->category->use_default_eula == '1') {
return $Parsedown->text(e(Setting::getSettings()->default_eula_text));
} else {
return false;
}
}
/**
* Get the assigned user
*/
+10 -1
View File
@@ -55,7 +55,7 @@ trait Loggable
if ($log->target_type == Location::class) {
$log->location_id = $target->id;
} elseif ($log->target_type == Asset::class) {
$log->location_id = $target->rtd_location_id;
$log->location_id = $target->location_id;
} else {
$log->location_id = $target->location_id;
}
@@ -121,8 +121,17 @@ trait Loggable
$log->item_type = License::class;
$log->item_id = $this->license_id;
} else {
$log->item_type = static::class;
$log->item_id = $this->id;
if (static::class == Asset::class) {
if ($asset = Asset::find($log->item_id)) {
\Log::debug('Increment the checkin count for asset: '.$log->item_id);
$asset->increment('checkin_counter', 1);
}
}
}
+1
View File
@@ -43,6 +43,7 @@ class Setting extends Model
'audit_warning_days' => 'numeric|nullable',
'audit_interval' => 'numeric|nullable',
'custom_forgot_pass_url' => 'url|nullable',
'privacy_policy_link' => 'nullable|url'
];
protected $fillable = ['site_name','email_domain','email_format','username_format'];
@@ -76,7 +76,7 @@ class CheckinAssetNotification extends Notification
$fields = [
trans('general.administrator') => '<'.$admin->present()->viewUrl().'|'.$admin->present()->fullName().'>',
trans('general.status') => $item->assetstatus->name,
trans('general.location') => $item->location->name,
trans('general.location') => ($item->location) ? $item->location->name : '',
];
return (new SlackMessage)
@@ -31,6 +31,7 @@ class CheckinLicenseNotification extends Notification
$this->admin = $params['admin'];
$this->note = '';
$this->settings = $params['settings'];
$this->target_type = $params['target_type'];
if (array_key_exists('note', $params)) {
$this->note = $params['note'];
@@ -53,7 +54,10 @@ class CheckinLicenseNotification extends Notification
}
$notifyBy[] = 'mail';
if (($this->target_type == \App\Models\User::class) && (($this->item->requireAcceptance() == '1') || ($this->item->getEula())))
{
$notifyBy[] = 'mail';
}
return $notifyBy;
}
@@ -33,6 +33,7 @@ class CheckoutLicenseNotification extends Notification
$this->note = '';
$this->target_type = $params['target_type'];
$this->settings = $params['settings'];
$this->target_type = $params['target_type'];
if (array_key_exists('note', $params)) {
$this->note = $params['note'];
@@ -56,7 +57,8 @@ class CheckoutLicenseNotification extends Notification
$notifyBy[] = 'slack';
}
if ($this->target_type == \App\Models\User::class) {
if (($this->target_type == \App\Models\User::class) && (($this->item->requireAcceptance() == '1') || ($this->item->getEula())))
{
$notifyBy[] = 'mail';
}
@@ -97,12 +99,18 @@ class CheckoutLicenseNotification extends Notification
public function toMail($notifiable)
{
$eula = method_exists($this->item, 'getEula') ? $this->item->getEula() : '';
$req_accept = method_exists($this->item, 'requireAcceptance') ? $this->item->requireAcceptance() : 0;
return (new MailMessage)->markdown('notifications.markdown.checkout-license',
[
'item' => $this->item,
'admin' => $this->admin,
'note' => $this->note,
'target' => $this->target,
'eula' => $eula,
'req_accept' => $req_accept,
'accept_url' => url('/').'/account/accept-asset/'.$this->log_id,
])
->subject(trans('mail.Confirm_license_delivery'));
@@ -0,0 +1,82 @@
<?php
namespace App\Notifications;
use App\Models\Setting;
use App\Models\SnipeModel;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Facades\Mail;
use Carbon\Carbon;
class ExpectedCheckinAdminNotification extends Notification
{
use Queueable;
/**
* @var
*/
private $params;
/**
* Create a new notification instance.
*
* @param $params
*/
public function __construct($params)
{
$this->assets = $params;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
$notifyBy = [];
$notifyBy[]='mail';
return $notifyBy;
}
public function toSlack($notifiable)
{
}
/**
* Get the mail representation of the notification.
*
* @param mixed $asset
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($params)
{
$message = (new MailMessage)->markdown('notifications.markdown.report-expected-checkins',
[
'assets' => $this->assets,
])
->subject('Expected asset checkin report');
return $message;
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}
+3 -3
View File
@@ -182,21 +182,21 @@ class AssetPresenter extends Presenter
"title" => trans('general.notes'),
], [
"field" => "checkouts_count",
"field" => "checkout_counter",
"searchable" => false,
"sortable" => true,
"visible" => false,
"title" => trans('general.checkouts_count')
],[
"field" => "checkins_count",
"field" => "checkin_counter",
"searchable" => false,
"sortable" => true,
"visible" => false,
"title" => trans('general.checkins_count')
], [
"field" => "user_requests_count",
"field" => "requests_counter",
"searchable" => false,
"sortable" => true,
"visible" => false,
+6
View File
@@ -69,6 +69,12 @@ class CategoryPresenter extends Presenter
"sortable" => true,
"title" => trans('general.components'),
"visible" => true
], [
"field" => "licenses_count",
"searchable" => false,
"sortable" => true,
"title" => trans('general.licenses'),
"visible" => true
], [
"field" => "eula",
"searchable" => false,
+8
View File
@@ -61,6 +61,14 @@ class LicensePresenter extends Presenter
"searchable" => true,
"sortable" => true,
"title" => trans('admin/licenses/form.to_name'),
], [
"field" => "category",
"searchable" => true,
"sortable" => true,
"switchable" => true,
"title" => trans('general.category'),
"visible" => false,
"formatter" => "categoriesLinkObjFormatter"
], [
"field" => "supplier",
"searchable" => true,
+5 -5
View File
@@ -1,10 +1,10 @@
<?php
return array (
'app_version' => 'v4.3.0',
'full_app_version' => 'v4.3.0 - build 3559-g9eab9ad40',
'build_version' => '3559',
'app_version' => 'v4.4.0',
'full_app_version' => 'v4.4.0 - build 3630-ge63687579',
'build_version' => '3630',
'prerelease_version' => '',
'hash_version' => 'g9eab9ad40',
'full_hash' => 'v4.3.0-66-g9eab9ad40',
'hash_version' => 'ge63687579',
'full_hash' => 'v4.3.0-48-ge63687579',
'branch' => 'master',
);
+15
View File
@@ -114,3 +114,18 @@ $factory->state(App\Models\Category::class, 'consumable-ink-category', function
];
});
$factory->state(App\Models\Category::class, 'license-graphics-category', function ($faker) {
return [
'name' => 'Graphics Software',
'category_type' => 'license',
];
});
$factory->state(App\Models\Category::class, 'license-office-category', function ($faker) {
return [
'name' => 'Office Software',
'category_type' => 'license',
];
});
+5 -1
View File
@@ -34,7 +34,8 @@ $factory->state(App\Models\License::class, 'photoshop', function ($faker) {
'purchase_cost' => '299.99',
'seats' => 10,
'purchase_order' => '13503Q',
'maintained' => true
'maintained' => true,
'category_id' => 14,
];
return $data;
@@ -49,6 +50,7 @@ $factory->state(App\Models\License::class, 'acrobat', function ($faker) {
'manufacturer_id' => 9,
'purchase_cost' => '29.99',
'seats' => 10,
'category_id' => 14,
];
@@ -62,6 +64,7 @@ $factory->state(App\Models\License::class, 'indesign', function ($faker) {
'manufacturer_id' => 9,
'purchase_cost' => '199.99',
'seats' => 10,
'category_id' => 14,
];
@@ -76,6 +79,7 @@ $factory->state(App\Models\License::class, 'office', function ($faker) {
'manufacturer_id' => 2,
'purchase_cost' => '49.99',
'seats' => 20,
'category_id' => 15,
];
@@ -0,0 +1,35 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddCategoryToLicenses extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('licenses', function (Blueprint $table) {
$table->integer('category_id')->nullable()->default(null);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('licenses', function (Blueprint $table) {
$table->dropColumn('category_id');
});
}
}
@@ -0,0 +1,44 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use App\Models\Category;
use App\Models\License;
class AddUpdateLicenseCategory extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// Create a new software category and assign all of the existing licenses to it
$category = new Category;
$category->name = 'Misc Software';
$category->category_type = 'license';
if ($category->save()) {
License::whereNull('category_id')->withTrashed()
->update(['category_id' => $category->id]);
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
App\Models\Category::where('name', 'Misc Software')->forceDelete();
License::whereNotNull('category_id')
->update(['category_id' => null]);
}
}
@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddGdprPrivacyFooter extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('settings', function (Blueprint $table) {
$table->char('privacy_policy_link')->nullable()->default(null);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('settings', function (Blueprint $table) {
$table->dropColumn('privacy_policy_link');
});
}
}
@@ -0,0 +1,39 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddIndexes extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('action_logs', function (Blueprint $table) {
$table->index(['target_id', 'target_type']);
$table->index('created_at');
$table->index(['item_type', 'item_id', 'action_type']);
$table->index(['target_type', 'target_id', 'action_type']);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('action_logs', function (Blueprint $table) {
$table->dropIndex(['target_id', 'target_type']);
$table->dropIndex(['created_at']);
$table->dropIndex(['item_type', 'item_id', 'action_type']);
$table->dropIndex(['target_type', 'target_id', 'action_type']);
});
}
}
@@ -0,0 +1,48 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddIndexesToAssets extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('assets', function (Blueprint $table) {
$table->index('created_at');
$table->index(['deleted_at', 'status_id']);
$table->index(['deleted_at', 'model_id']);
$table->index(['deleted_at', 'assigned_type', 'assigned_to']);
$table->index(['deleted_at', 'supplier_id']);
$table->index(['deleted_at', 'location_id']);
$table->index(['deleted_at', 'rtd_location_id']);
$table->index(['deleted_at', 'asset_tag']);
$table->index(['deleted_at', 'name']);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('assets', function (Blueprint $table) {
$table->dropIndex(['created_at']);
$table->dropIndex(['deleted_at', 'status_id']);
$table->dropIndex(['deleted_at', 'model_id']);
$table->dropIndex(['deleted_at', 'assigned_type', 'assigned_to']);
$table->dropIndex(['deleted_at', 'supplier_id']);
$table->dropIndex(['deleted_at', 'location_id']);
$table->dropIndex(['deleted_at', 'rtd_location_id']);
$table->dropIndex(['deleted_at', 'asset_tag']);
$table->dropIndex(['deleted_at', 'name']);
});
}
}
@@ -0,0 +1,36 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class DenormCountersOnAssets extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('assets', function (Blueprint $table) {
$table->integer('checkin_counter')->default(0);
$table->integer('checkout_counter')->default(0);
$table->integer('requests_counter')->default(0);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('assets', function (Blueprint $table) {
$table->dropColumn('checkin_counter');
$table->dropColumn('checkout_counter');
$table->dropColumn('requests_counter');
});
}
}
@@ -0,0 +1,34 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use App\Models\Asset;
class AddFirstCounterTotalsToAssets extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// This artisan call may take a while
\Log::info('This could take a while.... ');
Artisan::call('snipeit:counter-sync');
$output = Artisan::output();
\Log::info($output);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}
+2
View File
@@ -21,6 +21,8 @@ class CategorySeeder extends Seeder
factory(Category::class, 1)->states('consumable-ink-category')->create(); // 11
factory(Category::class, 1)->states('component-hdd-category')->create(); // 12
factory(Category::class, 1)->states('component-ram-category')->create(); // 13
factory(Category::class, 1)->states('license-graphics-category')->create(); // 14
factory(Category::class, 1)->states('license-office-category')->create(); // 15
}
}
@@ -5,7 +5,8 @@ return array(
'about_categories' => 'Kategorieë help jou om jou items te organiseer. Sommige voorbeeldkategorieë kan wees &quot;Desktops&quot;, &quot;Laptops&quot;, &quot;Mobile Phones&quot;, &quot;Tablets&quot;, ensovoorts, maar jy kan kategorieë gebruik wat vir jou sin maak.',
'asset_categories' => 'Bate kategorieë',
'category_name' => 'Kategorie Naam',
'checkin_email' => 'Stuur e-pos aan gebruiker op inskrywing.',
'checkin_email' => 'Send email to user on checkin/checkout.',
'checkin_email_notification' => 'This user will be sent an email on checkin/checkout.',
'clone' => 'Klone Kategorie',
'create' => 'Skep Kategorie',
'edit' => 'Wysig Kategorie',
+5 -2
View File
@@ -131,8 +131,11 @@ return array(
'labels_per_page' => 'Etikette per bladsy',
'label_dimensions' => 'Etiketafmetings (duim)',
'next_auto_tag_base' => 'Volgende outomatiese inkrement',
'page_padding' => 'Bladsy marges (duim)',
'purge' => 'Verwyder verwyderde rekords',
'page_padding' => 'Bladsy marges (duim)',
'privacy_policy_link' => 'Link to Privacy Policy',
'privacy_policy' => 'Privacy Policy',
'privacy_policy_link_help' => 'If a url is included here, a link to your privacy policy will be included in the app footer and in any emails that the system sends out, in compliance with GDPR. ',
'purge' => 'Verwyder verwyderde rekords',
'labels_display_bgutter' => 'Etiket onderkant goot',
'labels_display_sgutter' => 'Label side goot',
'labels_fontsize' => 'Etiket lettergrootte',
@@ -5,7 +5,8 @@ return array(
'about_categories' => 'التصنيفات تساعدك على ترتيب الأصول. من الأمثلة على التصنيفات &quot; حواسيب مكتبية &quot;، &quot; حواسيب محمولة &quot;، &quot;الهواتف النقالة &quot;، &quot;أجهزة لوحية &quot; وهكذا، كما يمكنك استخدام التصنيفات بأي طريقة تناسبك.',
'asset_categories' => 'تصنيفات الأصول',
'category_name' => 'اسم التصنيف',
'checkin_email' => 'إرسال إشعار للمستخدم عند الإدخال.',
'checkin_email' => 'Send email to user on checkin/checkout.',
'checkin_email_notification' => 'This user will be sent an email on checkin/checkout.',
'clone' => 'نسخ التصنيف',
'create' => 'إنشاء تصنيف',
'edit' => 'تعديل التصنيف',
+5 -2
View File
@@ -131,8 +131,11 @@ return array(
'labels_per_page' => 'عدد التسميات لكل صفحة',
'label_dimensions' => 'أبعاد التسمية (بوصة)',
'next_auto_tag_base' => 'الزيادة التلقائية التالية',
'page_padding' => 'هوامش الصفحة (بوصة)',
'purge' => 'تطهير السجلات المحذوفة',
'page_padding' => 'هوامش الصفحة (بوصة)',
'privacy_policy_link' => 'Link to Privacy Policy',
'privacy_policy' => 'Privacy Policy',
'privacy_policy_link_help' => 'If a url is included here, a link to your privacy policy will be included in the app footer and in any emails that the system sends out, in compliance with GDPR. ',
'purge' => 'تطهير السجلات المحذوفة',
'labels_display_bgutter' => 'الجزء السفلي للتسمية',
'labels_display_sgutter' => 'الجزء الجانبي للتسمية',
'labels_fontsize' => 'حجم خط التسمية',
@@ -5,7 +5,8 @@ return array(
'about_categories' => 'Категориите помагат с организирането на вашите елементи. Някои примерни категории могат да бъдат &quot;Настолни компютри&quot;,&quot;Лаптопи&quot;,&quot;Мобилни телефони&quot;,&quot;Таблети&quot;, и т.н., но може да използвате всяка категория, имаща смисъл за организацията ви.',
'asset_categories' => 'Категории на активи',
'category_name' => 'Име на категория',
'checkin_email' => 'Изпращане на email до потребителя при вписване на активи.',
'checkin_email' => 'Send email to user on checkin/checkout.',
'checkin_email_notification' => 'This user will be sent an email on checkin/checkout.',
'clone' => 'Копиране на категория',
'create' => 'Създаване на категория',
'edit' => 'Редакция на категория',
@@ -28,5 +28,5 @@ return array(
'create_fieldset' => 'Нов Fieldset',
'create_field' => 'Ново персонализирано поле',
'value_encrypted' => 'Стойността на това поле е криптирана в базата данни. Само администратор потребители ще бъде в състояние да видят дешифрираната стойност',
'show_in_email' => 'Include the value of this field in checkout emails sent to the user? Encrypted fields cannot be included in emails.',
'show_in_email' => 'Да се включи ли стойността на това поле в електронната поща, изпращана към потребителите? Криптираните полета не могат да бъдат включвани в изпращаните електронни пощи.',
);
+1 -1
View File
@@ -5,7 +5,7 @@ return array(
'about_assets_text' => 'Активите са елементи, проследен от сериен номер или етикет. По-често, те са елементи с висока стойност, където идентифицирането на специфичен елемент е от значение.',
'archived' => 'Архивиран',
'asset' => 'Актив',
'bulk_checkout' => 'Checkout Assets',
'bulk_checkout' => 'Изписване на активи',
'checkin' => 'Връщане на актив',
'checkout' => 'Проверка на активите',
'clone' => 'Копиране на актив',
+1 -1
View File
@@ -14,5 +14,5 @@ return array(
'view_models' => 'Преглед на моделите',
'fieldset' => 'Полета',
'no_custom_field' => 'Няма потребителски полета',
'add_default_values' => 'Add default values',
'add_default_values' => 'Добавяне на стойности по подразбиране',
);
+9 -6
View File
@@ -4,8 +4,8 @@ return array(
'ad' => 'Активна директория',
'ad_domain' => 'Домейн на активна директория',
'ad_domain_help' => 'Това е понякога еднакво с вашия email домейн, но не винаги.',
'admin_cc_email' => 'CC Email',
'admin_cc_email_help' => 'If you would like to send a copy of checkin/checkout emails that are sent to users to an additional email account, enter it here. Otherwise leave this field blank.',
'admin_cc_email' => 'CC електронна поща',
'admin_cc_email_help' => 'Въведете допълнителни електронни адреси, ако желаете да се изпраща копие на електронните пощи при вписване и изписване на активи.',
'is_ad' => 'Това е активна директория на сървър',
'alert_email' => 'Изпращане на нотификации към',
'alerts_enabled' => 'Включване на известията',
@@ -109,8 +109,8 @@ return array(
'show_alerts_in_menu' => 'Показва съобщения в главното меню',
'show_archived_in_list' => 'Архивирани активи',
'show_archived_in_list_text' => 'Показва архивираните активи в списъка "Всички активи"',
'show_images_in_email' => 'Show images in emails',
'show_images_in_email_help' => 'Uncheck this box if your Snipe-IT installation is behind a VPN or closed network and users outside the network will not be able to load images served from this installation in their emails.',
'show_images_in_email' => 'Показване на изображения в електронните съобщения',
'show_images_in_email_help' => 'Премахнете отметката, ако Вашата инсталация е достъпна единствено във вътрешната мрежа или през VPN.',
'site_name' => 'Име на системата',
'slack_botname' => 'Име на Slack bot',
'slack_channel' => 'Slack канал',
@@ -131,8 +131,11 @@ return array(
'labels_per_page' => 'Етикети на страница',
'label_dimensions' => 'Измерения на етикети (инчове)',
'next_auto_tag_base' => 'Следващото автоматично увеличение',
'page_padding' => 'Марж на страница (инчове)',
'purge' => 'Пречисти изтрити записи',
'page_padding' => 'Марж на страница (инчове)',
'privacy_policy_link' => 'Link to Privacy Policy',
'privacy_policy' => 'Privacy Policy',
'privacy_policy_link_help' => 'If a url is included here, a link to your privacy policy will be included in the app footer and in any emails that the system sends out, in compliance with GDPR. ',
'purge' => 'Пречисти изтрити записи',
'labels_display_bgutter' => 'Обозначаване на долен канал',
'labels_display_sgutter' => 'Обозначаване на страничен канал',
'labels_fontsize' => 'Обозначаване на размер на шрифта',
+1 -1
View File
@@ -12,5 +12,5 @@ return array(
'submit' => 'Потвърди',
'upload' => 'Качване',
'select_file' => 'Изберете файл...',
'select_files' => 'Select Files...',
'select_files' => 'Изберете файлове...',
);
+6 -6
View File
@@ -9,7 +9,7 @@
'activity_report' => 'Справка за дейностите',
'address' => 'Aдрес',
'admin' => 'Администриране',
'administrator' => 'Administrator',
'administrator' => 'Администратор',
'add_seats' => 'Добавени работни места',
'all_assets' => 'Всички активи',
'all' => 'Всички',
@@ -39,9 +39,9 @@
'checkin' => 'Вписване',
'checkin_from' => 'Форма за вписване',
'checkout' => 'Изписване',
'checkouts_count' => 'Checkouts',
'checkins_count' => 'Checkins',
'user_requests_count' => 'Requests',
'checkouts_count' => 'Изписвания',
'checkins_count' => 'Вписвания',
'user_requests_count' => 'Заявки',
'city' => 'Град',
'click_here' => 'Натиснете тук',
'clear_selection' => 'Изчистване на селектираното',
@@ -68,7 +68,7 @@
'debug_warning' => 'Предупреждение!',
'debug_warning_text' => 'Това приложение се изпълнява в режим на производство с разрешено отстраняване на грешки. Това може да изложи чувствителни данни, ако приложението ви е достъпно за външния свят. Забранете режим отстраняване на грешки чрез задаване на стойността <code>APP_DEBUF</code> <code>.env</code> във файла <code>false</code>.',
'delete' => 'Изтриване',
'delete_confirm' => 'Are you sure you wish to delete :item?',
'delete_confirm' => 'Сигурни ли сте, че желаете изтриването на :item?',
'deleted' => 'Изтрито',
'delete_seats' => 'Изтрити работни места за лиценз',
'departments' => 'Катедри',
@@ -206,7 +206,7 @@
'unknown_admin' => 'Непознат администратор',
'username_format' => 'Формат на потребителско име',
'update' => 'Обновяване',
'upload_filetypes_help' => 'Allowed filetypes are png, gif, jpg, jpeg, doc, docx, pdf, txt, zip, and rar. Max upload size allowed is :size.',
'upload_filetypes_help' => 'Допустимите типове файлове са png, gif, jpg, jpeg, doc, docx, pdf, txt, zip и rar. Максималният размер за качване е :size.',
'uploaded' => 'Качен',
'user' => 'Потребител',
'accepted' => 'приет',
+4 -4
View File
@@ -22,7 +22,7 @@ return array(
'Confirm_Asset_Checkin' => 'Потвърдете вписване на актив.',
'Confirm_Accessory_Checkin' => 'Потвърдете вписване на аксесоар.',
'Confirm_accessory_delivery' => 'Потвърдете доставка на аксесоар.',
'Confirm_license_delivery' => 'Confirm license delivery.',
'Confirm_license_delivery' => 'Потвърдете доставката на лиценз.',
'Confirm_asset_delivery' => 'Подвърдете доставка на актив.',
'Confirm_consumable_delivery' => 'Потвърдете доставка на консуматив.',
'current_QTY' => 'Текуща наличност',
@@ -55,7 +55,7 @@ return array(
'requested' => 'Изискан:',
'reset_link' => 'Вашата връзка за повторно задаване на паролата',
'reset_password' => 'Щракнете тук, за да нулирате паролата си:',
'serial' => 'Serial',
'serial' => 'Лицензен номер',
'supplier' => 'Доставчик',
'tag' => 'Етикет',
'test_email' => 'Тест Email от Snipe-IT',
@@ -64,8 +64,8 @@ return array(
'There_are' => '{1} има | [2, Inf] Имат',
'to_reset' => 'За да нулирате вашата :web password, попълнете този формуляр:',
'type' => 'Вид',
'user' => 'User',
'username' => 'Username',
'user' => 'Потребител',
'username' => 'Потребителско име',
'welcome' => 'Добре дошли, :name',
'welcome_to' => 'Добре дошли: уеб!',
'your_credentials' => 'Вашите идентификационни данни за Snipe-IT',
@@ -5,7 +5,8 @@ return array(
'about_categories' => 'Kategorie usnadňují organizovat majetek. Takovou kategorii může být např. &quot;Desktopy&quot;, &quot;Notebooky&quot;, &quot;Mobilní telefony&quot;, &quot;Tablety&quot;, apod., ale můžete použít kategorie jakýmkoli způsobem.',
'asset_categories' => 'Kategorie majetku',
'category_name' => 'Jméno kategorie',
'checkin_email' => 'Poslat uživateli zprávu při přejímce.',
'checkin_email' => 'Send email to user on checkin/checkout.',
'checkin_email_notification' => 'This user will be sent an email on checkin/checkout.',
'clone' => 'Klonovat Kategorii',
'create' => 'Vytvořit kategorii',
'edit' => 'Upravit Kategorii',
+5 -2
View File
@@ -131,8 +131,11 @@ return array(
'labels_per_page' => 'Štítků na stránku',
'label_dimensions' => 'Rozměry štítku (palce)',
'next_auto_tag_base' => 'Další auto přírůstek',
'page_padding' => 'Okraje stránky (palce)',
'purge' => 'Vyčištění odstraněných záznamů',
'page_padding' => 'Okraje stránky (palce)',
'privacy_policy_link' => 'Link to Privacy Policy',
'privacy_policy' => 'Privacy Policy',
'privacy_policy_link_help' => 'If a url is included here, a link to your privacy policy will be included in the app footer and in any emails that the system sends out, in compliance with GDPR. ',
'purge' => 'Vyčištění odstraněných záznamů',
'labels_display_bgutter' => 'Spodní okraj štítku',
'labels_display_sgutter' => 'Boční okraj štítku',
'labels_fontsize' => 'Velikost písma štítku',
@@ -5,7 +5,8 @@ return array(
'about_categories' => 'Kategorier hjælper dig med at organisere dine varer. Nogle eksempler kan være &quot;Desktops&quot;, &quot;Laptops&quot;, &quot;Mobile Phones&quot;, &quot;Tablets&quot; osv., Men du kan bruge kategorier på nogen måde, der giver mening for dig.',
'asset_categories' => 'Aktiver Kategorier',
'category_name' => 'Kategorinavn',
'checkin_email' => 'Send email til bruger ved tjek ind.',
'checkin_email' => 'Send email to user on checkin/checkout.',
'checkin_email_notification' => 'This user will be sent an email on checkin/checkout.',
'clone' => 'Klon Kategori',
'create' => 'Opret kategori',
'edit' => 'Rediger Kategori',
+5 -2
View File
@@ -131,8 +131,11 @@ return array(
'labels_per_page' => 'Etiketter pr. Side',
'label_dimensions' => 'Etiket dimensioner (inches)',
'next_auto_tag_base' => 'Næste automatisk stigning',
'page_padding' => 'Sidemarginer (tommer)',
'purge' => 'Ryd slettet poster',
'page_padding' => 'Sidemarginer (tommer)',
'privacy_policy_link' => 'Link to Privacy Policy',
'privacy_policy' => 'Privacy Policy',
'privacy_policy_link_help' => 'If a url is included here, a link to your privacy policy will be included in the app footer and in any emails that the system sends out, in compliance with GDPR. ',
'purge' => 'Ryd slettet poster',
'labels_display_bgutter' => 'Etiket bundgitter',
'labels_display_sgutter' => 'Label side rende',
'labels_fontsize' => 'Etiket skriftstørrelse',
@@ -5,7 +5,8 @@ return array(
'about_categories' => 'Kategorien helfen Ihnen beim Organisieren von Assets. Beispielkategorien sind &quot;PCs&quot;, &quot;Laptops&quot;, &quot;Mobiltelefone&quot;, &quot;Tablets&quot; usw., jedoch können Sie Kategorien nutzen, wie Sie es für sinnvoll erachten.',
'asset_categories' => 'Asset-Kategorien',
'category_name' => 'Kategoriename',
'checkin_email' => 'Dem Nutzer beim Zurücknehmen eine Mail zusenden.',
'checkin_email' => 'Send email to user on checkin/checkout.',
'checkin_email_notification' => 'This user will be sent an email on checkin/checkout.',
'clone' => 'Kategorie duplizieren',
'create' => 'Kategorie erstellen',
'edit' => 'Kategorie bearbeiten',
@@ -28,5 +28,5 @@ return array(
'create_fieldset' => 'Neuer Feldsatz',
'create_field' => 'Neues benutzerdefiniertes Feld',
'value_encrypted' => 'Der Wert dieses Feldes ist in der Datenbank verschlüsselt. Nur Benutzer mit Administratorrechten können den entschlüsselten Wert anzeigen',
'show_in_email' => 'Include the value of this field in checkout emails sent to the user? Encrypted fields cannot be included in emails.',
'show_in_email' => 'Feld miteinbeziehen bei Herausgabe-Emails an die Benutzer? Verschlüsselte Felder können nicht miteinbezogen werden.',
);
+1 -1
View File
@@ -5,7 +5,7 @@ return array(
'about_assets_text' => 'Assets sind Gegenstände die durch eine Seriennummer oder Bezeichnung identifiziert werden. Meistens sind diese von höherem Wert, wobei es Sinn macht diese spezifisch zu kennzeichnen.',
'archived' => 'Archiviert',
'asset' => 'Asset',
'bulk_checkout' => 'Checkout Assets',
'bulk_checkout' => 'Assets herausgeben',
'checkin' => 'Asset zurücknehmen',
'checkout' => 'Asset herausgeben',
'clone' => 'Asset duplizieren',
+1 -1
View File
@@ -14,5 +14,5 @@ return array(
'view_models' => 'Modelle anzeigen',
'fieldset' => 'Feldsatz',
'no_custom_field' => 'Keine benutzerdefinierten Felder',
'add_default_values' => 'Add default values',
'add_default_values' => 'Füge Standardwerte hinzu',
);
+8 -5
View File
@@ -5,7 +5,7 @@ return array(
'ad_domain' => 'Active Directory Domäne',
'ad_domain_help' => 'Meistens dieselbe wie die E-Mail Domäne.',
'admin_cc_email' => 'CC Email',
'admin_cc_email_help' => 'If you would like to send a copy of checkin/checkout emails that are sent to users to an additional email account, enter it here. Otherwise leave this field blank.',
'admin_cc_email_help' => 'Wenn Sie eine Kopie der Rücknahme- / Herausgabe-E-Mails, die an Benutzer gehen auch an zusätzliche E-Mail-Empfänger versenden möchten, geben Sie sie hier ein. Ansonsten lassen Sie dieses Feld leer.',
'is_ad' => 'Dies ist ein Active Directory Server',
'alert_email' => 'Alarme senden an',
'alerts_enabled' => 'E-Mail-Benachrichtigungen aktiviert',
@@ -109,8 +109,8 @@ return array(
'show_alerts_in_menu' => 'Warnungen im oberen Menü anzeigen',
'show_archived_in_list' => 'Archivierte Assets',
'show_archived_in_list_text' => 'Zeige archivierte Assets in der "Alle auflisten" Liste',
'show_images_in_email' => 'Show images in emails',
'show_images_in_email_help' => 'Uncheck this box if your Snipe-IT installation is behind a VPN or closed network and users outside the network will not be able to load images served from this installation in their emails.',
'show_images_in_email' => 'Verwende Bilder in E-Mals',
'show_images_in_email_help' => 'Deaktivieren Sie dieses Kontrollkästchen, wenn sich Ihre Snipe-IT-Installation hinter einem VPN oder einem geschlossenen Netzwerk befindet und Benutzer außerhalb des Netzwerks keine Bilder von dieser Installation in ihre E-Mails laden können.',
'site_name' => 'Seitenname',
'slack_botname' => 'Slack Botname',
'slack_channel' => 'Slack Kanal',
@@ -131,8 +131,11 @@ return array(
'labels_per_page' => 'Etiketten pro Seite',
'label_dimensions' => 'Etikettengröße (Zoll)',
'next_auto_tag_base' => 'Nächster Auto-Inkrement',
'page_padding' => 'Seiten Ränder (Zoll)',
'purge' => 'Gelöschte Einträge bereinigen',
'page_padding' => 'Seiten Ränder (Zoll)',
'privacy_policy_link' => 'Link to Privacy Policy',
'privacy_policy' => 'Privacy Policy',
'privacy_policy_link_help' => 'If a url is included here, a link to your privacy policy will be included in the app footer and in any emails that the system sends out, in compliance with GDPR. ',
'purge' => 'Gelöschte Einträge bereinigen',
'labels_display_bgutter' => 'Ettiketten Spaltenzwischenraum unterhalb',
'labels_display_sgutter' => 'Ettikett Seitenabstand',
'labels_fontsize' => 'Schriftgröße der Etiketten',
+1 -1
View File
@@ -12,5 +12,5 @@ return array(
'submit' => 'Abschicken',
'upload' => 'Hochladen',
'select_file' => 'Datei auswählen...',
'select_files' => 'Select Files...',
'select_files' => 'Dateien auswählen...',
);
+5 -5
View File
@@ -39,9 +39,9 @@
'checkin' => 'Zurücknehmen',
'checkin_from' => 'Zurücknehmen von',
'checkout' => 'Herausgeben',
'checkouts_count' => 'Checkouts',
'checkins_count' => 'Checkins',
'user_requests_count' => 'Requests',
'checkouts_count' => 'Herausgaben',
'checkins_count' => 'Rücknahmen',
'user_requests_count' => 'Anfragen',
'city' => 'Stadt',
'click_here' => 'Hier klicken',
'clear_selection' => 'Auswahl löschen',
@@ -68,7 +68,7 @@
'debug_warning' => 'Warnung!',
'debug_warning_text' => 'Diese Anwendung läuft im Produktionsmodus mit debugging aktiviert. Dies kann sensible Daten verfügbar machen, wenn Ihre Anwendung öffentlich zugänglich ist. Deaktivieren Sie den Debug-Modus, indem Sie den <code>APP_DEBUG</code>-Wert in der <code>.env</code> Datei auf <code>false</code> setzen.',
'delete' => 'Löschen',
'delete_confirm' => 'Are you sure you wish to delete :item?',
'delete_confirm' => 'Sind Sie sicher, dass Sie :item löschen möchten?',
'deleted' => 'Gelöscht',
'delete_seats' => 'Gelöschte Lizenzen',
'departments' => 'Abteilungen',
@@ -206,7 +206,7 @@
'unknown_admin' => 'Unbekannter Administrator',
'username_format' => 'Format der Benutzernamen',
'update' => 'Aktualisieren',
'upload_filetypes_help' => 'Allowed filetypes are png, gif, jpg, jpeg, doc, docx, pdf, txt, zip, and rar. Max upload size allowed is :size.',
'upload_filetypes_help' => 'Zulässige Dateitypen sind png, gif, jpg, jpeg, doc, docx, pdf, txt, zip und rar. Die maximal zulässige Uploadgröße ist :size.',
'uploaded' => 'Hochgeladen',
'user' => 'Benutzer',
'accepted' => 'angenommen',
+4 -4
View File
@@ -22,7 +22,7 @@ return array(
'Confirm_Asset_Checkin' => 'Zurücknehmen von Asset bestätigen.',
'Confirm_Accessory_Checkin' => 'Zurücknehmen von Zubehör bestätigen.',
'Confirm_accessory_delivery' => 'Zubehör Zustellung bestätigen.',
'Confirm_license_delivery' => 'Confirm license delivery.',
'Confirm_license_delivery' => 'Lizenz Herausgabe bestätigen.',
'Confirm_asset_delivery' => 'Gegenstands Lieferung bestätigen.',
'Confirm_consumable_delivery' => 'Verbrauchsmaterial Lieferung bestätigen.',
'current_QTY' => 'Aktuelle Menge',
@@ -55,7 +55,7 @@ return array(
'requested' => 'Angefordert:',
'reset_link' => 'Ihr Link zum Zurücksetzen des Kennworts',
'reset_password' => 'Klicken Sie hier, um Ihr Passwort zurückzusetzen:',
'serial' => 'Serial',
'serial' => 'Seriennummer',
'supplier' => 'Lieferant',
'tag' => 'Kennzeichnung',
'test_email' => 'Test E-Mail von Snipe-IT',
@@ -64,8 +64,8 @@ return array(
'There_are' => 'Es existiert {1} | [2, Inf] Es existieren',
'to_reset' => 'Zum Zurücksetzen Ihres :web Passwortes, füllen Sie bitte dieses Formular aus:',
'type' => 'Typ',
'user' => 'User',
'username' => 'Username',
'user' => 'Benutzer',
'username' => 'Benutzername',
'welcome' => 'Wilkommen, :name',
'welcome_to' => 'Willkommen bei: Web!',
'your_credentials' => 'Ihre Snipe-IT Anmeldedaten',
@@ -5,7 +5,8 @@ return array(
'about_categories' => 'Οι κατηγορίες σας βοηθούν να οργανώσετε τα στοιχεία σας. Ορισμένες κατηγορίες παραδειγμάτων ενδέχεται να είναι &quot;Desktops&quot;, &quot;Laptops&quot;, &quot;Mobile Phones&quot;, &quot;Tablets&quot; κ.ο.κ., αλλά μπορείτε να χρησιμοποιήσετε κατηγορίες με οποιονδήποτε τρόπο που έχει νόημα για εσάς.',
'asset_categories' => 'Κατηγορίες στοιχείων παγίων',
'category_name' => 'Όνομα κατηγορίας',
'checkin_email' => 'Στείλτε μήνυμα ηλεκτρονικού ταχυδρομείου στον χρήστη στο checkin.',
'checkin_email' => 'Send email to user on checkin/checkout.',
'checkin_email_notification' => 'This user will be sent an email on checkin/checkout.',
'clone' => 'Αντιγραφή Κατηγορίας',
'create' => 'Δημιουργία Κατηγορίας',
'edit' => 'Επεξεργασία Κατηγορίας',
+5 -2
View File
@@ -131,8 +131,11 @@ return array(
'labels_per_page' => 'Ετικέτες ανά σελίδα',
'label_dimensions' => 'Διαστάσεις ετικέτας (ίντσες)',
'next_auto_tag_base' => 'Επόμενη αυτόματη αύξηση',
'page_padding' => 'Περιθώρια σελίδας (ίντσες)',
'purge' => 'Καθαρισμός αρχείων που έχουν διαγραφεί',
'page_padding' => 'Περιθώρια σελίδας (ίντσες)',
'privacy_policy_link' => 'Link to Privacy Policy',
'privacy_policy' => 'Privacy Policy',
'privacy_policy_link_help' => 'If a url is included here, a link to your privacy policy will be included in the app footer and in any emails that the system sends out, in compliance with GDPR. ',
'purge' => 'Καθαρισμός αρχείων που έχουν διαγραφεί',
'labels_display_bgutter' => 'Ετικέτα κάτω υδρορροή',
'labels_display_sgutter' => 'Εσωτερική υδρορροή ετικέτας',
'labels_fontsize' => 'Μέγεθος γραμματοσειράς ετικέτας',
@@ -5,7 +5,8 @@ return array(
'about_categories' => 'Categories help you organize your items. Some example categories might be &quot;Desktops&quot;, &quot;Laptops&quot;, &quot;Mobile Phones&quot;, &quot;Tablets&quot;, and so on, but you can use categories any way that makes sense for you.',
'asset_categories' => 'Asset Categories',
'category_name' => 'Category Name',
'checkin_email' => 'Send email to user on checkin.',
'checkin_email' => 'Send email to user on checkin/checkout.',
'checkin_email_notification' => 'This user will be sent an email on checkin/checkout.',
'clone' => 'Clone Category',
'create' => 'Create Category',
'edit' => 'Edit Category',
@@ -131,8 +131,11 @@ return array(
'labels_per_page' => 'Labels per page',
'label_dimensions' => 'Label dimensions (inches)',
'next_auto_tag_base' => 'Next auto-increment',
'page_padding' => 'Page margins (inches)',
'purge' => 'Purge Deleted Records',
'page_padding' => 'Page margins (inches)',
'privacy_policy_link' => 'Link to Privacy Policy',
'privacy_policy' => 'Privacy Policy',
'privacy_policy_link_help' => 'If a url is included here, a link to your privacy policy will be included in the app footer and in any emails that the system sends out, in compliance with GDPR. ',
'purge' => 'Purge Deleted Records',
'labels_display_bgutter' => 'Label bottom gutter',
'labels_display_sgutter' => 'Label side gutter',
'labels_fontsize' => 'Label font size',
@@ -5,7 +5,8 @@ return array(
'about_categories' => 'Kategori membantu mengatur barang-barang anda. Beberapa contoh kategori seperti &quot;Desktop&quot;, &quot;Laptop&quot;, &quot;Mobile Phones&quot;, &quot;Tablet&quot;, dan sebagainya, namun Anda tetap dapat menggunakan kategori dengan cara apapun yang masuk akal bagi Anda.',
'asset_categories' => 'Kategori Aset',
'category_name' => 'Nama Kategori',
'checkin_email' => 'Kirim email ke pengguna saat pengecekan.',
'checkin_email' => 'Send email to user on checkin/checkout.',
'checkin_email_notification' => 'This user will be sent an email on checkin/checkout.',
'clone' => 'Salin Kategori',
'create' => 'Buat Kategori',
'edit' => 'Edit Kategori',
@@ -131,8 +131,11 @@ return array(
'labels_per_page' => 'Label per halaman',
'label_dimensions' => 'Dimensi label (inci)',
'next_auto_tag_base' => 'Berikut auto-kenaikan',
'page_padding' => 'Margin halaman (inci)',
'purge' => 'Bersihkan Arsip yang Dihapus',
'page_padding' => 'Margin halaman (inci)',
'privacy_policy_link' => 'Link to Privacy Policy',
'privacy_policy' => 'Privacy Policy',
'privacy_policy_link_help' => 'If a url is included here, a link to your privacy policy will be included in the app footer and in any emails that the system sends out, in compliance with GDPR. ',
'purge' => 'Bersihkan Arsip yang Dihapus',
'labels_display_bgutter' => 'Beri label saluran bawah',
'labels_display_sgutter' => 'Beri label sisi saluran',
'labels_fontsize' => 'Beri label ukuran huruf',
@@ -5,7 +5,8 @@ return array(
'about_categories' => 'Categories help you organize your items. Some example categories might be &quot;Desktops&quot;, &quot;Laptops&quot;, &quot;Mobile Phones&quot;, &quot;Tablets&quot;, and so on, but you can use categories any way that makes sense for you.',
'asset_categories' => 'Asset Categories',
'category_name' => 'Category Name',
'checkin_email' => 'Send email to user on checkin.',
'checkin_email' => 'Send email to user on checkin/checkout.',
'checkin_email_notification' => 'This user will be sent an email on checkin/checkout.',
'clone' => 'Clone Category',
'create' => 'Create Category',
'edit' => 'Edit Category',
@@ -4,8 +4,8 @@ return array(
'custom_fields' => 'Custom Fields',
'field' => 'Field',
'about_fieldsets_title' => 'About Fieldsets',
'about_fieldsets_text' => 'Fieldsets allow you to create groups of custom fields that are frequently re-used used for specific asset model types.',
'custom_format' => 'Custom regex format...',
'about_fieldsets_text' => 'Fieldsets allow you to create groups of custom fields that are frequently re-used for specific asset model types.',
'custom_format' => 'Custom Regex format...',
'encrypt_field' => 'Encrypt the value of this field in the database',
'encrypt_field_help' => 'WARNING: Encrypting a field makes it unsearchable.',
'encrypted' => 'Encrypted',
+5 -2
View File
@@ -131,8 +131,11 @@ return array(
'labels_per_page' => 'Labels per page',
'label_dimensions' => 'Label dimensions (inches)',
'next_auto_tag_base' => 'Next auto-increment',
'page_padding' => 'Page margins (inches)',
'purge' => 'Purge Deleted Records',
'page_padding' => 'Page margins (inches)',
'privacy_policy_link' => 'Link to Privacy Policy',
'privacy_policy' => 'Privacy Policy',
'privacy_policy_link_help' => 'If a url is included here, a link to your privacy policy will be included in the app footer and in any emails that the system sends out, in compliance with GDPR. ',
'purge' => 'Purge Deleted Records',
'labels_display_bgutter' => 'Label bottom gutter',
'labels_display_sgutter' => 'Label side gutter',
'labels_fontsize' => 'Label font size',
@@ -5,7 +5,8 @@ return array(
'about_categories' => 'Las categorías te ayudan a organizar tus elementos. Algunos ejemplos de categoría pueden ser &quot;Desktops&quot;, &quot;Laptops&quot;, &quot;Teléfonos Móviles&quot;, &quot;Tablets&quot;, y otros, pero puedes usar las categorías de cualquier manera que tengan sentido para ti.',
'asset_categories' => 'Categorías de Equipos',
'category_name' => 'Nombre de la Categoría',
'checkin_email' => 'Enviar un correo al usuario al registrar.',
'checkin_email' => 'Send email to user on checkin/checkout.',
'checkin_email_notification' => 'This user will be sent an email on checkin/checkout.',
'clone' => 'Clonar Categoría',
'create' => 'Crear Categoría',
'edit' => 'Editar Categoría',
@@ -28,5 +28,5 @@ return array(
'create_fieldset' => 'Nuevo Fieldset',
'create_field' => 'Nuevo Campo Personalizado',
'value_encrypted' => 'El valor de este campo está encriptado en la base de datos. Sólo los administradores pueden ver el valor desencriptado',
'show_in_email' => 'Include the value of this field in checkout emails sent to the user? Encrypted fields cannot be included in emails.',
'show_in_email' => '¿Incluir el valor de este campo en las notificaciones por correo de asignaciones de activos? Ten en cuenta que los campos encriptados no se pueden incluir en los correos electrónicos.',
);
@@ -5,7 +5,7 @@ return array(
'about_assets_text' => 'Los activos son elementos con número de serie o etiqueta de activos. Tienden a ser artículos de alto valor donde es importante identificar un elemento específico.',
'archived' => 'Archivado',
'asset' => 'Equipo',
'bulk_checkout' => 'Checkout Assets',
'bulk_checkout' => 'Activos Asignados',
'checkin' => 'Quitar Equipo',
'checkout' => 'Activo de pago',
'clone' => 'Clonar Equipo',
@@ -14,5 +14,5 @@ return array(
'view_models' => 'Ver Modelos',
'fieldset' => 'Grupos de campo',
'no_custom_field' => 'No hay campos personalizados',
'add_default_values' => 'Add default values',
'add_default_values' => 'Agregar valores predeterminados',
);
@@ -4,8 +4,8 @@ return array(
'ad' => 'Directorio Activo',
'ad_domain' => 'Dominio del Directorio Activo',
'ad_domain_help' => 'Esto es a veces el mismo que su correo electrónico de dominio, pero no siempre.',
'admin_cc_email' => 'CC Email',
'admin_cc_email_help' => 'If you would like to send a copy of checkin/checkout emails that are sent to users to an additional email account, enter it here. Otherwise leave this field blank.',
'admin_cc_email' => 'Email CC',
'admin_cc_email_help' => 'Si deseas enviar una notificación por correo electrónico de las asignaciones de activos que se envían a los usuarios a una cuenta adicional, ingrésela aquí. De lo contrario, deja este campo en blanco.',
'is_ad' => 'Este es un servidor de Directorio Activo',
'alert_email' => 'Enviar alertas a',
'alerts_enabled' => 'Alertas habilitadas',
@@ -109,8 +109,8 @@ return array(
'show_alerts_in_menu' => 'Mostrar alertas en el menú superior',
'show_archived_in_list' => 'Activos archivados',
'show_archived_in_list_text' => 'Mostrar activos archivados en el listado de "todos los archivos"',
'show_images_in_email' => 'Show images in emails',
'show_images_in_email_help' => 'Uncheck this box if your Snipe-IT installation is behind a VPN or closed network and users outside the network will not be able to load images served from this installation in their emails.',
'show_images_in_email' => 'Mostrar imágenes en emails',
'show_images_in_email_help' => 'Desmarca esta casilla si tu instalación de Snipe-IT está detrás de una red privada o VPN y los usuarios fuera de la red no pueden cargar las imágenes servidas desde este servidor en sus correos electrónicos.',
'site_name' => 'Nombre del sitio',
'slack_botname' => 'Nombre de bot en Slack',
'slack_channel' => 'Canal en Slack',
@@ -131,8 +131,11 @@ return array(
'labels_per_page' => 'Etiquetas por pàgina',
'label_dimensions' => 'Dimensiones de las etiquetas (pulgadas)',
'next_auto_tag_base' => 'Siguiente incremento automático',
'page_padding' => 'Margenès de pàgina (pulgadas)',
'purge' => 'Purgar registros eliminados',
'page_padding' => 'Margenès de pàgina (pulgadas)',
'privacy_policy_link' => 'Link to Privacy Policy',
'privacy_policy' => 'Privacy Policy',
'privacy_policy_link_help' => 'If a url is included here, a link to your privacy policy will be included in the app footer and in any emails that the system sends out, in compliance with GDPR. ',
'purge' => 'Purgar registros eliminados',
'labels_display_bgutter' => 'Borde inferior de la Etiqueta',
'labels_display_sgutter' => 'Borde lateral de la Etiqueta',
'labels_fontsize' => 'Tamaño de fuente de la etiqueta',
+1 -1
View File
@@ -12,5 +12,5 @@ return array(
'submit' => 'Enviar',
'upload' => 'Subir',
'select_file' => 'Seleccionar Archivo...',
'select_files' => 'Select Files...',
'select_files' => 'Selecciona Archivos...',
);
+7 -6
View File
@@ -9,7 +9,7 @@
'activity_report' => 'Reporte de Actividad',
'address' => 'Dirección',
'admin' => 'Admin',
'administrator' => 'Administrator',
'administrator' => 'Administrador',
'add_seats' => 'Sitios añadidos',
'all_assets' => 'Todos los Equipos',
'all' => 'Todos los',
@@ -39,9 +39,9 @@
'checkin' => 'Quitar Equipo',
'checkin_from' => 'Devolución de',
'checkout' => 'Asignar a un usuario',
'checkouts_count' => 'Checkouts',
'checkins_count' => 'Checkins',
'user_requests_count' => 'Requests',
'checkouts_count' => 'Dar de Baja',
'checkins_count' => 'Dar de Alta',
'user_requests_count' => 'Solicitudes',
'city' => 'Ciudad',
'click_here' => 'Pulsa aquí',
'clear_selection' => 'Eliminar Selección',
@@ -68,7 +68,7 @@
'debug_warning' => '¡Advertencia!',
'debug_warning_text' => 'Esta aplicación esta corriendo en modo producción con debugging activado. Esto puede exponer datos sensibles si su aplicación es accesible desde el exterior. Desactive el modo debug cambiando el valor <code>APP_DEBUG</code> en su archivo <code>.env</code> a <code>false</code>.',
'delete' => 'Borrar',
'delete_confirm' => 'Are you sure you wish to delete :item?',
'delete_confirm' => '¿Estás seguro de eliminar :item?',
'deleted' => 'Borrado',
'delete_seats' => 'Asientos eliminados',
'departments' => 'Departamentos',
@@ -206,7 +206,8 @@
'unknown_admin' => 'Admin Desconocido',
'username_format' => 'Formato del nombre de usuario',
'update' => 'Actualizar',
'upload_filetypes_help' => 'Allowed filetypes are png, gif, jpg, jpeg, doc, docx, pdf, txt, zip, and rar. Max upload size allowed is :size.',
'upload_filetypes_help' => 'Tipos de archivos permitidos: png, gif, jpg, jpeg, doc, docx, pdf, txt, zip, and rar.
El tamaño máximo de archivo es :size.',
'uploaded' => 'Subido',
'user' => 'Usuario',
'accepted' => 'aceptado',
+4 -4
View File
@@ -22,7 +22,7 @@ return array(
'Confirm_Asset_Checkin' => 'Confirmación de retorno de activo.',
'Confirm_Accessory_Checkin' => 'Confirmar devolución del accesorio.',
'Confirm_accessory_delivery' => 'Confirman entrega de accesorio.',
'Confirm_license_delivery' => 'Confirm license delivery.',
'Confirm_license_delivery' => 'Confirmar entrega de licencia.',
'Confirm_asset_delivery' => 'Confirman entrega de activos.',
'Confirm_consumable_delivery' => 'Confirmar entrega consumible.',
'current_QTY' => 'Cantidad actual',
@@ -55,7 +55,7 @@ return array(
'requested' => 'Solicitado:',
'reset_link' => 'Tu enlace de restablecimiento de contraseña',
'reset_password' => 'Haga Clic aquí para restablecer su contraseña:',
'serial' => 'Serial',
'serial' => 'Número de serie',
'supplier' => 'Proveedor',
'tag' => 'Etiqueta',
'test_email' => 'Email de prueba de Snipe-IT',
@@ -64,8 +64,8 @@ return array(
'There_are' => 'Hay',
'to_reset' => 'Para restaurar tu contraseña de :web, rellena este formulario:',
'type' => 'Tipo',
'user' => 'User',
'username' => 'Username',
'user' => 'Usuario',
'username' => 'Nombre de usuario',
'welcome' => 'Bienvenido, :name',
'welcome_to' => '¡Bienvenido a: web!',
'your_credentials' => 'Tus credenciales de Snipe-IT',
@@ -5,7 +5,8 @@ return array(
'about_categories' => 'Las categorías te ayudan a organizar los equipos. Ejemplos de categorías: &quot;PCs&quot;, &quot;Portátiles&quot;, &quot;Móviles&quot;, &quot;Tabletas&quot;, etc.',
'asset_categories' => 'Categorias',
'category_name' => 'Categoría',
'checkin_email' => 'Enviar un correo al usuario al efectuar la devolución.',
'checkin_email' => 'Send email to user on checkin/checkout.',
'checkin_email_notification' => 'This user will be sent an email on checkin/checkout.',
'clone' => 'Clonar Categoría',
'create' => 'Crear Categoría',
'edit' => 'Editar Categoría',
@@ -28,5 +28,5 @@ return array(
'create_fieldset' => 'Nuevo grupo de campos',
'create_field' => 'Nuevo campo personalizado',
'value_encrypted' => 'El valor de este campo está encriptado en la base de datos. Solo los administradores pueden ver el valor desencriptado',
'show_in_email' => 'Include the value of this field in checkout emails sent to the user? Encrypted fields cannot be included in emails.',
'show_in_email' => '¿Incluir el valor de este campo en las notificaciones por correo de asignaciones de activos? Ten en cuenta que los campos encriptados no se pueden incluir en los correos electrónicos.',
);
@@ -5,7 +5,7 @@ return array(
'about_assets_text' => 'Los activos son elementos con número de serie o etiqueta de activos. Tienden a ser artículos de alto valor donde es importante identificar un elemento específico.',
'archived' => 'Archivado',
'asset' => 'Equipo',
'bulk_checkout' => 'Checkout Assets',
'bulk_checkout' => 'Activos Asignados',
'checkin' => 'Quitar Equipo',
'checkout' => 'Activo de pago',
'clone' => 'Clonar Equipo',
@@ -14,5 +14,5 @@ return array(
'view_models' => 'Ver Modelos',
'fieldset' => 'Grupos de campo',
'no_custom_field' => 'No hay campos personalizados',
'add_default_values' => 'Add default values',
'add_default_values' => 'Agregar valores predeterminados',
);
@@ -4,8 +4,8 @@ return array(
'ad' => 'Directorio Activo',
'ad_domain' => 'Dominio del Directorio Activo',
'ad_domain_help' => 'Esto es a veces el mismo que su correo electrónico de dominio, pero no siempre.',
'admin_cc_email' => 'CC Email',
'admin_cc_email_help' => 'If you would like to send a copy of checkin/checkout emails that are sent to users to an additional email account, enter it here. Otherwise leave this field blank.',
'admin_cc_email' => 'Email CC',
'admin_cc_email_help' => 'Si deseas enviar una notificación por correo electrónico de las asignaciones de activos que se envían a los usuarios a una cuenta adicional, ingrésela aquí. De lo contrario, deja este campo en blanco.',
'is_ad' => 'Este es un servidor de Directorio Activo',
'alert_email' => 'Enviar alertas a',
'alerts_enabled' => 'Alertas habilitadas',
@@ -109,8 +109,8 @@ return array(
'show_alerts_in_menu' => 'Mostrar alertas en el menú superior',
'show_archived_in_list' => 'Activos archivados',
'show_archived_in_list_text' => 'Mostrar activos archivados en el listado de "todos los archivos"',
'show_images_in_email' => 'Show images in emails',
'show_images_in_email_help' => 'Uncheck this box if your Snipe-IT installation is behind a VPN or closed network and users outside the network will not be able to load images served from this installation in their emails.',
'show_images_in_email' => 'Mostrar imágenes en emails',
'show_images_in_email_help' => 'Desmarca esta casilla si tu instalación de Snipe-IT está detrás de una red privada o VPN y los usuarios fuera de la red no pueden cargar las imágenes servidas desde este servidor en sus correos electrónicos.',
'site_name' => 'Nombre del sitio',
'slack_botname' => 'Nombre de bot en Slack',
'slack_channel' => 'Canal en Slack',
@@ -131,8 +131,11 @@ return array(
'labels_per_page' => 'Etiquetas por pàgina',
'label_dimensions' => 'Dimensiones de las etiquetas (pulgadas)',
'next_auto_tag_base' => 'Siguiente incremento automático',
'page_padding' => 'Margenès de pàgina (pulgadas)',
'purge' => 'Purgar registros eliminados',
'page_padding' => 'Margenès de pàgina (pulgadas)',
'privacy_policy_link' => 'Link to Privacy Policy',
'privacy_policy' => 'Privacy Policy',
'privacy_policy_link_help' => 'If a url is included here, a link to your privacy policy will be included in the app footer and in any emails that the system sends out, in compliance with GDPR. ',
'purge' => 'Purgar registros eliminados',
'labels_display_bgutter' => 'Borde inferior de la Etiqueta',
'labels_display_sgutter' => 'Borde lateral de la Etiqueta',
'labels_fontsize' => 'Tamaño de fuente de la etiqueta',
+1 -1
View File
@@ -12,5 +12,5 @@ return array(
'submit' => 'Enviar',
'upload' => 'Subir',
'select_file' => 'Seleccionar Archivo...',
'select_files' => 'Select Files...',
'select_files' => 'Selecciona Archivos...',
);
+7 -6
View File
@@ -9,7 +9,7 @@
'activity_report' => 'Reporte de Actividad',
'address' => 'Dirección',
'admin' => 'Admin',
'administrator' => 'Administrator',
'administrator' => 'Administrador',
'add_seats' => 'Sitios añadidos',
'all_assets' => 'Todos los Equipos',
'all' => 'Todos los',
@@ -39,9 +39,9 @@
'checkin' => 'Quitar Equipo',
'checkin_from' => 'Devolución de',
'checkout' => 'Asignar a un usuario',
'checkouts_count' => 'Checkouts',
'checkins_count' => 'Checkins',
'user_requests_count' => 'Requests',
'checkouts_count' => 'Dar de Baja',
'checkins_count' => 'Dar de Alta',
'user_requests_count' => 'Solicitudes',
'city' => 'Ciudad',
'click_here' => 'Pulsa aquí',
'clear_selection' => 'Eliminar Selección',
@@ -68,7 +68,7 @@
'debug_warning' => '¡Advertencia!',
'debug_warning_text' => 'Esta aplicación esta corriendo en modo producción con debugging activado. Esto puede exponer datos sensibles si su aplicación es accesible desde el exterior. Desactive el modo debug cambiando el valor <code>APP_DEBUG</code> en su archivo <code>.env</code> a <code>false</code>.',
'delete' => 'Borrar',
'delete_confirm' => 'Are you sure you wish to delete :item?',
'delete_confirm' => '¿Estás seguro de eliminar :item?',
'deleted' => 'Borrado',
'delete_seats' => 'Asientos eliminados',
'departments' => 'Departamentos',
@@ -206,7 +206,8 @@
'unknown_admin' => 'Admin Desconocido',
'username_format' => 'Formato del nombre de usuario',
'update' => 'Actualizar',
'upload_filetypes_help' => 'Allowed filetypes are png, gif, jpg, jpeg, doc, docx, pdf, txt, zip, and rar. Max upload size allowed is :size.',
'upload_filetypes_help' => 'Tipos de archivos permitidos: png, gif, jpg, jpeg, doc, docx, pdf, txt, zip, and rar.
El tamaño máximo de archivo es :size.',
'uploaded' => 'Subido',
'user' => 'Usuario',
'accepted' => 'aceptado',
+4 -4
View File
@@ -22,7 +22,7 @@ return array(
'Confirm_Asset_Checkin' => 'Confirmación de retorno de activo.',
'Confirm_Accessory_Checkin' => 'Confirmar devolución del accesorio.',
'Confirm_accessory_delivery' => 'Confirman entrega de accesorio.',
'Confirm_license_delivery' => 'Confirm license delivery.',
'Confirm_license_delivery' => 'Confirmar entrega de licencia.',
'Confirm_asset_delivery' => 'Confirman entrega de activos.',
'Confirm_consumable_delivery' => 'Confirmar entrega consumible.',
'current_QTY' => 'Cantidad actual',
@@ -55,7 +55,7 @@ return array(
'requested' => 'Solicitado:',
'reset_link' => 'Tu enlace de restablecimiento de contraseña',
'reset_password' => 'Haga Clic aquí para restablecer su contraseña:',
'serial' => 'Serial',
'serial' => 'Número de serie',
'supplier' => 'Proveedor',
'tag' => 'Etiqueta',
'test_email' => 'Email de prueba de Snipe-IT',
@@ -64,8 +64,8 @@ return array(
'There_are' => 'Hay',
'to_reset' => 'Para restaurar tu contraseña de :web, rellena este formulario:',
'type' => 'Tipo',
'user' => 'User',
'username' => 'Username',
'user' => 'Usuario',
'username' => 'Nombre de usuario',
'welcome' => 'Bienvenido, :name',
'welcome_to' => '¡Bienvenido a: web!',
'your_credentials' => 'Tus credenciales de Snipe-IT',
@@ -0,0 +1,22 @@
<?php
return array(
'about_accessories_title' => 'Sobre accesorios',
'about_accessories_text' => 'Accesorios son cualquier cosa que entregues a los usuarios pero que no tenga numero de serie (o no te interese seguirlos en forma unívoca). Por ejemplo, ratones o teclados.',
'accessory_category' => 'Categoría de accesorio',
'accessory_name' => 'Nombre de accesorio',
'checkout' => 'Checkout Accesorio',
'checkin' => 'Checkin Accesorio',
'create' => 'Crear Accesorio',
'edit' => 'Editar Accesorio',
'eula_text' => 'Categoría EULA',
'eula_text_help' => 'Este campo permite personalizar sus EULAs para tipos específicos de equipos. Si solo tiene un EULA para todos sus equipos, puede seleccionar la siguiente opción para usar el valor por defecto.',
'require_acceptance' => 'Requerir confirmación de usuarios para la aceptación de equipos en esta categoría.',
'no_default_eula' => 'No se encontró un EULA por defecto. Agregue uno en Configuración.',
'total' => 'Total ',
'remaining' => 'Disponibles',
'update' => 'Actualizar Accesorio',
'use_default_eula' => 'En su lugar, use el <a href="#" data-toggle="modal" data-target="#eulaModal">EULA por defecto</a>.',
'use_default_eula_disabled' => '<del>En su lugar, use el EULA por defecto.</del> No esta configurado un EULA por defecto. Por favor agregue uno en Configuración.',
);
@@ -0,0 +1,37 @@
<?php
return array(
'does_not_exist' => 'El accesorio no existe.',
'assoc_users' => 'Este accesorio actualmente tiene :count entregados a usuarios. Por favor ingrese los accesorios y vuelva a intentar. ',
'create' => array(
'error' => 'El accesorio no fue creado, por favor, inténtalo de nuevo.',
'success' => 'Accesorio creado correctamente.'
),
'update' => array(
'error' => 'El accesorio no fue actualizado, por favor, inténtalo de nuevo',
'success' => 'Accesorio actualizado correctamente.'
),
'delete' => array(
'confirm' => 'Estas seguro de borrar este accesorio?',
'error' => 'Ha habido un problema eliminando este accesorio. Intentalo de nuevo.',
'success' => 'El accesorio fue borrado con éxito.'
),
'checkout' => array(
'error' => 'El accesorio no fue retirado, por favor vuelva a intentarlo',
'success' => 'Accesorio retirado correctamente.',
'user_does_not_exist' => 'Este usuario es inválido . Inténtalo de nuevo.'
),
'checkin' => array(
'error' => 'El accesorio no fue agregado, favor vuelva a intentarlo',
'success' => 'Accesorio devuelto correctamente.',
'user_does_not_exist' => 'Este usuario es inválido . Inténtalo de nuevo.'
)
);
@@ -0,0 +1,11 @@
<?php
return array(
'dl_csv' => 'Descargar CSV',
'eula_text' => 'EULA',
'id' => 'ID',
'require_acceptance' => 'Aceptación',
'title' => 'Nombre accesorio',
);
@@ -0,0 +1,14 @@
<?php
return [
'asset_maintenance_type' => 'Tipo de Mantenimiento de Equipo',
'title' => 'Título',
'start_date' => 'Fecha de Inicio',
'completion_date' => 'Fecha de Terminación',
'cost' => 'Costo',
'is_warranty' => 'Mejora de la Garantía',
'asset_maintenance_time' => 'Tiempo de Mantenimiento de Equipo (en días)',
'notes' => 'Notas',
'update' => 'Actualizar Mantenimiento de Equipo',
'create' => 'Crear Mantenimiento de Equipo'
];
@@ -0,0 +1,11 @@
<?php
return [
'asset_maintenances' => 'Mantenimientos de Equipo',
'edit' => 'Editar Mantenimiento de Equipo',
'delete' => 'Eliminar Mantenimiento de Equipo',
'view' => 'Ver Detalle de Mantenimiento de Equipo',
'repair' => 'Reparación',
'maintenance' => 'Mantenimiento',
'upgrade' => 'Mejora'
];
@@ -0,0 +1,21 @@
<?php
return [
'not_found' => 'El Mantenimiento de Equipo que buscaba no se encontró!',
'delete' => [
'confirm' => '¿Está seguro que desea eliminar este mantenimiento de equipo?',
'error' => 'Hubo un problema al eliminar el mantenimiento de equipo. Por favor intente nuevamente.',
'success' => 'El mantenimiento de equipo fue eliminado de manera exitosa.'
],
'create' => [
'error' => 'El Mantenimiento de Equipo no fue creado, por favor intente nuevamente.',
'success' => 'El Mantenimiento de Equipo fue creado de manera exitosa.'
],
'edit' => [
'error' => 'El mantenimiento de activo no fue editado. Por favor, intenta de nuevo.',
'success' => 'Mantenimiento de activo editado con éxito.'
],
'asset_maintenance_incomplete' => 'Sin Completar',
'warranty' => 'Garantía',
'not_warranty' => 'Sin Garantía',
];
@@ -0,0 +1,8 @@
<?php
return [
'title' => 'Mantenimiento de Equipo',
'asset_name' => 'Nombre del Equipo',
'is_warranty' => 'Garantía',
'dl_csv' => 'Descargar CSV'
];
@@ -0,0 +1,24 @@
<?php
return array(
'about_categories_title' => 'Sobre categorias',
'about_categories' => 'Las categorías te ayudan a organizar los equipos. Ejemplos de categorías: &quot;PCs&quot;, &quot;Portátiles&quot;, &quot;Móviles&quot;, &quot;Tabletas&quot;, etc.',
'asset_categories' => 'Categorias',
'category_name' => 'Categoría',
'checkin_email' => 'Send email to user on checkin/checkout.',
'checkin_email_notification' => 'This user will be sent an email on checkin/checkout.',
'clone' => 'Clonar Categoría',
'create' => 'Crear Categoría',
'edit' => 'Editar Categoría',
'eula_text' => 'Categoría EULA',
'eula_text_help' => 'Este campo permite personalizar sus EULAs para tipos específicos de equipos. Si solo tiene un EULA para todos sus equipos, puede seleccionar la siguiente opción para usar el valor por defecto.',
'name' => 'Nombre de la categoría',
'require_acceptance' => 'Requerir confirmación de usuarios para la aceptación de equipos en esta categoría.',
'required_acceptance' => 'Se enviará un email a este usuario con un link para confirmar la aceptación de este item.',
'required_eula' => 'Se enviará un email a este usuario con una copia del EULA',
'no_default_eula' => 'No se encontró un EULA por defecto. Agregue uno en Configuración.',
'update' => 'Actualizar Categoría',
'use_default_eula' => 'En su lugar, use el <a href="#" data-toggle="modal" data-target="#eulaModal">EULA por defecto</a>.',
'use_default_eula_disabled' => '<del>En su lugar, use el EULA por defecto.</del> No esta configurado un EULA por defecto. Por favor agregue uno en Configuración.',
);

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