Compare commits

..

138 Commits

Author SHA1 Message Date
snipe c8842a85ee Bumped version 2015-07-09 01:24:43 -07:00
snipe 7255a8bb0c Merge remote-tracking branch 'origin/develop' into 2.0
# Conflicts:
#	app/controllers/admin/AssetsController.php
2015-07-09 01:24:34 -07:00
snipe 7e5f32c9d8 Merge pull request #898 from madd15/Default-Layout-fix
Small UI fixes
2015-07-09 01:17:02 -07:00
snipe e1724cf25f Merge remote-tracking branch 'origin/develop' into 2.0
# Conflicts:
#	.gitignore
#	app/config/production/session.example.php
#	app/config/staging/session.example.php
#	app/config/version.php
#	app/models/User.php
2015-07-09 01:02:49 -07:00
snipe 2d10931d6c Use league/csv for export 2015-07-08 23:42:17 -07:00
snipe 4a5066054b Display bugfixes for #819 2015-07-08 22:38:35 -07:00
snipe 84ffc1a728 Migration for location-specific currency, updated views for #819
This isn't done yet though. All kinds of busted stuff.
2015-07-08 20:35:40 -07:00
snipe 74429d9075 Merge remote-tracking branch 'origin/develop' into 2.0
# Conflicts:
#	app/lang/en/general.php
#	app/start/artisan.php
#	app/views/backend/hardware/edit.blade.php
#	app/views/backend/layouts/default.blade.php
2015-07-08 18:07:53 -07:00
madd15 e714def74a Fix Reports showing class="active" 2015-07-08 11:46:11 +09:30
madd15 a9e169261c Add 5px margin to left of search box 2015-07-08 11:41:14 +09:30
madd15 665ffa6571 Update Hardware Submenu
Correctly identify the status from the url
2015-07-08 11:37:20 +09:30
snipe 1edce0a4fa Merge branch '2.0' of github.com:snipe/snipe-it into 2.0 2015-07-06 19:29:22 -07:00
snipe 7da7907fbd Merge remote-tracking branch 'origin/develop' into 2.0
# Conflicts:
#	app/controllers/admin/AssetsController.php
2015-07-06 19:29:06 -07:00
snipe 32a0f6eb92 Merge pull request #892 from madd15/patch-4
Fix Model Validation for create and edit
2015-07-06 18:07:30 -07:00
madd15 1301119c9a Remove unique from modelno validation rule 2015-07-07 09:50:43 +09:30
madd15 c7f2dc83db Remove $new and replace with Input::all() 2015-07-07 09:50:00 +09:30
madd15 3664e75c47 Change validation to work correctly 2015-07-07 08:51:38 +09:30
snipe 674348b5a5 Smaller text requirement for address2 2015-07-06 14:06:31 -07:00
snipe 7d5810b656 Merge remote-tracking branch 'origin/develop' into 2.0
# Conflicts:
#	app/config/version.php
#	app/controllers/admin/AssetsController.php
2015-07-02 17:23:06 -07:00
snipe d4af197b0e Merge pull request #886 from madd15/Fix---Edit-user
Fix - Edit User
2015-07-01 19:51:33 -07:00
snipe be685467eb Merge pull request #883 from madd15/patch-2
Update Category Types Array to include Consumable
2015-07-01 19:50:36 -07:00
madd15 7a0b3a7350 Allow saving of Username and Email changes
I noted that i was unable to change the username or email fields, but also that the username validation would not allow the form to save as it was checking against itself for being unique.
2015-07-02 12:16:01 +09:30
madd15 55f544829d Update Category Types Array to include Consumable 2015-07-01 17:28:58 +09:30
snipe bb7ce83c48 Merge remote-tracking branch 'origin/develop' into 2.0 2015-06-30 22:42:00 -07:00
snipe a8cb5c1e7d Beginning QR mobile interface 2015-06-30 19:07:44 -07:00
snipe 1fb2878772 Updated activity report for consumables 2015-06-25 18:47:03 -07:00
snipe 84e130d6aa Fixes #869 - compatibility mode for IE 2015-06-25 16:22:07 -07:00
snipe edfa064fd4 Disable emailing imported users if demo mode 2015-06-23 18:38:21 -07:00
snipe 3caded990a Added parent string 2015-06-23 18:32:06 -07:00
snipe 3bca2566d7 Added missing create/update consumable string 2015-06-23 16:35:38 -07:00
snipe 1aa4841868 Remove extra debugging 2015-06-23 16:30:29 -07:00
snipe fc1e8a4e4e Minor comment tweak 2015-06-23 15:05:21 -07:00
snipe bf3cb73070 Include location ID on user import 2015-06-23 15:05:11 -07:00
snipe d77e763f86 Change badge to label 2015-06-23 15:04:35 -07:00
snipe 8ef3d00f22 Fixed language string for users 2015-06-23 14:10:15 -07:00
snipe 5266c22890 Show consumable checkout date 2015-06-23 14:10:04 -07:00
snipe 26540b1aac Updated bad data string 2015-06-23 14:02:01 -07:00
snipe 39a3b93537 Pagination on user history 2015-06-23 14:01:48 -07:00
snipe ba13101f64 Bad data language string 2015-06-23 13:48:56 -07:00
snipe ce55b7ab2f Tightened up history snapshot on dashboard 2015-06-23 13:46:06 -07:00
snipe 28a9f90a72 Lazy eager load history for optimized queries 2015-06-23 13:44:49 -07:00
snipe f2a2ccdab4 Nicer display for profile 2015-06-23 12:59:55 -07:00
snipe f2e1ec0928 Fixed QR simple view route 2015-06-23 12:59:33 -07:00
snipe 17ca66f4a2 Added update string 2015-06-23 12:59:19 -07:00
snipe a43f075ff0 Wider profile box view 2015-06-23 12:46:08 -07:00
snipe c87d4ad801 Eager load dashboard queries 2015-06-23 11:52:18 -07:00
snipe d94cc1f17d Add consumables log 2015-06-23 11:52:07 -07:00
snipe f30285eaea Added text string for consumable name 2015-06-23 11:39:28 -07:00
snipe 20d35953f1 Remove consumable category 2015-06-23 11:39:17 -07:00
snipe 537630bae4 Removed unneeded stylesheet 2015-06-23 11:33:31 -07:00
snipe 85d6b062f3 Fixed checkbox alignment 2015-06-23 11:32:32 -07:00
snipe 74a9a176e9 New language strings 2015-06-23 10:25:44 -07:00
snipe 94f8c61720 Fixes #280, #64 and #860 - added license expiration alert 2015-06-23 01:52:06 -07:00
snipe 75b9b70a86 Fix email field so it's nullable, fix app command to add user 2015-06-23 00:11:54 -07:00
snipe 2e585f9cd2 Fixes #839 - bad seed data 2015-06-23 00:11:06 -07:00
snipe edddf6ae80 Fixes #833 - remove status label field if asset is checked out 2015-06-22 20:01:02 -07:00
snipe ea0f2c5f34 Fixes #833 - remove status label field if asset is checked out 2015-06-22 20:00:28 -07:00
snipe 826d3ccae8 Eager loading user info 2015-06-22 17:57:55 -07:00
snipe fd7d4eb3f2 Removed checkin for consumables 2015-06-22 17:57:44 -07:00
snipe e8e0c7bfe4 Missing filetype info string 2015-06-22 17:57:21 -07:00
snipe ccdda7b8e8 Missing reassignable string 2015-06-22 17:57:09 -07:00
snipe 9abafba180 Updates to consumables view 2015-06-22 17:56:58 -07:00
snipe 2ed47a6089 Removed old file 2015-06-22 17:56:42 -07:00
snipe 818d1769b8 Automated backup to dump SQL and zip uploaded files
Usage:

`php artisan snipeit:backup`

This can be set on a cron or scheduled task
2015-06-22 15:52:26 -07:00
snipe bf6674f6a0 Added table prefix for raw queries 2015-06-19 18:03:28 -07:00
snipe ee08586279 Trying to regain compatibility with PHP 5.4 2015-06-19 17:59:10 -07:00
snipe ef75880398 Added backups to topnav 2015-06-19 17:58:53 -07:00
snipe 221ae62ea5 Example configs 2015-06-19 17:38:06 -07:00
snipe 40c59e664b Backup language string 2015-06-19 17:37:58 -07:00
snipe 61e3381b24 Backup routes 2015-06-19 17:37:49 -07:00
snipe 3dfa1e1ea7 Backups blade 2015-06-19 17:37:40 -07:00
snipe c0fab2f425 Updated deps to still allow for 5.4 (I hope?) 2015-06-19 17:37:32 -07:00
snipe ffdd437e47 Ignore SQL dumps 2015-06-19 17:31:51 -07:00
snipe 76825441b9 Added session config to allow for forced SSL 2015-06-19 14:46:16 -07:00
snipe 8e83206556 Added dumps directory 2015-06-19 14:40:23 -07:00
snipe 2aa357f315 Added fideveloper proxy and DB backup 2015-06-19 14:28:40 -07:00
snipe df59e7f699 New strings 2015-06-19 11:44:19 -07:00
snipe d0216d76f8 Updated to generic strings 2015-06-18 15:00:41 -07:00
snipe ec10526d69 Center envelope in user listing 2015-06-18 15:00:32 -07:00
snipe 49b746a811 QTY strings 2015-06-18 15:00:23 -07:00
snipe 1013580236 Fixed typo 2015-06-18 15:00:16 -07:00
snipe 98d9a2e6f9 Bold current page number 2015-06-18 14:36:32 -07:00
snipe e4217af1ec Minified 2015-06-18 14:36:23 -07:00
snipe 3d4607ebd3 Fixes #858 - find admin group by name instead of ID for consideration of clustered DBs 2015-06-17 17:16:05 -07:00
snipe 2be1d64de3 Merge remote-tracking branch 'origin/develop' into 1.3.0 2015-06-16 12:56:14 -07:00
snipe 16ec68e0b6 Hide email icon if no email address is provided 2015-06-16 01:45:34 -07:00
snipe 3ce9500d75 Moved password up with other required fields 2015-06-16 00:20:43 -07:00
snipe c699452473 Bumped version 2015-06-15 18:39:42 -07:00
snipe d943408f44 Location and email not required, username required 2015-06-15 18:39:34 -07:00
snipe a7aee2fe1c Location no longer required for users 2015-06-15 18:39:02 -07:00
snipe 32f3740eda Update email for #165 to reflect username 2015-06-15 18:38:52 -07:00
snipe f42540fedf More fixes for #165 - added username field 2015-06-15 12:40:27 -07:00
snipe f25b90ee27 Set https as default app url 2015-06-15 12:39:43 -07:00
snipe fdef266089 Addresses #577 and fixes #165 - switch from email to username 2015-06-15 12:16:39 -07:00
snipe c4375f9fbc Merge remote-tracking branch 'origin/develop' into 1.3.0
# Conflicts:
#	app/controllers/admin/UsersController.php
2015-06-15 11:30:40 -07:00
snipe d0189fb076 Added consumables to user matrix for #782 2015-06-09 20:05:24 -07:00
snipe e4517a8782 Removed checkin for #782, since that doesn't exist in consumables 2015-06-09 19:58:22 -07:00
snipe 19604480bb Consumables section
TODO:

- Add checkout to location
- Drop Checkin (doesn't really exist in this context)
- Add missing strings - consolidate where possible. Lots of dupes :-/
2015-06-09 19:50:34 -07:00
snipe 704d66b6f3 Raw DB migration for nullable user notes 2015-06-09 17:45:11 -07:00
snipe 6315c343a7 Add consumables table 2015-06-09 17:44:59 -07:00
snipe 766b4b901f Fixes #822 - make user notes field nullable default null 2015-06-09 17:34:52 -07:00
snipe f671c89b14 Composer update for bin path 2015-06-09 17:31:28 -07:00
snipe 03bd1498e8 Added codeception 2015-06-09 16:52:08 -07:00
snipe f743bacd0f Updated language strings 2015-06-09 16:14:37 -07:00
snipe 309158352e Added Korean translation 2015-06-09 16:14:28 -07:00
snipe 2540ac09ec Fixes #822 2015-06-09 16:02:10 -07:00
snipe af2decea9d Merge remote-tracking branch 'origin/master' into 1.3.0
# Conflicts:
#	app/controllers/admin/AssetsController.php
2015-06-09 02:10:29 -07:00
snipe 9ea8316d74 Merge remote-tracking branch 'origin/develop' into 1.3.0
# Conflicts:
#	app/config/version.php
2015-06-01 17:52:39 -07:00
snipe 123caf42c2 Merge remote-tracking branch 'origin/develop' into 1.3.0
# Conflicts:
#	app/views/backend/hardware/labels.blade.php
#	app/views/backend/layouts/default.blade.php
2015-05-27 11:17:14 -07:00
snipe 5997dd9387 Missing string for action 2015-05-27 11:13:42 -07:00
snipe 9cf03e2e60 Better escaping on activity report page 2015-05-27 10:16:06 -07:00
snipe 212f09dd31 Fixes #806 2015-05-19 19:39:05 -07:00
snipe 8334e7b863 Removed extra open sans call 2015-05-19 19:37:34 -07:00
snipe a80d67c1ff Escaping on labels 2015-05-19 19:37:22 -07:00
snipe 7c95f4231e Fixes #799 - missing text in file delete confirmation 2015-05-14 20:52:19 -07:00
snipe 496a768013 Fixes #795 - add model name if no asset name 2015-05-11 19:23:11 -07:00
snipe 7415a5898f Twiddling column widths 2015-05-08 11:39:51 -07:00
snipe f1486bfee3 Nicer locations listing layout 2015-05-07 19:20:05 -07:00
snipe bc8521043b Bumped version 2015-05-07 18:21:48 -07:00
snipe 3597d71230 Eager load assigned asset locations 2015-05-07 18:21:39 -07:00
snipe d92e2eaebc Method for assigned asset locations 2015-05-07 18:21:27 -07:00
snipe 8cdea8a384 Fix for location totals 2015-05-07 18:21:10 -07:00
snipe 4457c7aec0 Removed extra commented stuff 2015-05-07 18:20:58 -07:00
snipe 95279f885b Fixes #759 - populate form with parent location info 2015-05-07 01:51:46 -07:00
snipe 75644eb894 Dashboard points to app url 2015-05-07 00:30:20 -07:00
snipe 2d7a348ab7 Fixed multi-level array nesting for locations 2015-05-07 00:15:44 -07:00
snipe 139dd13392 Super janky miulti-level menu on create - TODO: Fix this ish. 2015-05-04 18:13:26 -07:00
snipe 2f52369d07 Fixed location string 2015-05-04 15:13:04 -07:00
snipe aab52d0850 Fix for strict mode with location parent 2015-05-04 15:10:57 -07:00
snipe 71febc1c81 Added accessories and location 2015-05-04 13:31:47 -07:00
snipe 68d8b10b22 Changed text to icons for more compacted view 2015-05-04 13:31:38 -07:00
snipe 0d2333203a Display default location 2015-05-04 13:08:38 -07:00
snipe 3881e2e83e Fixes #784 - add "create accessory" to topnav 2015-05-04 11:24:25 -07:00
snipe 51eeee09d7 Fixes bug in #736 for new fields 2015-05-04 11:14:38 -07:00
snipe c487beeaca Asset counter for #759 (needs more work) 2015-05-04 03:05:22 -07:00
snipe f463cd6c8d Fixes for #759 - location heirarchy 2015-05-04 02:50:42 -07:00
snipe 5e7a4e8193 Fixes #599 - show groups in user list 2015-05-04 01:44:49 -07:00
snipe c8870ddcab Fixes #736 - more fields in bulk edit 2015-05-04 01:30:20 -07:00
690 changed files with 7986 additions and 8575 deletions
+4 -2
View File
@@ -7,6 +7,7 @@ composer.phar
/app/database/*.sqlite
/app/storage/meta/services.json
/app/config/*/mail.php
/app/config/*/session.php
/app/config/*/database.php
/app/config/*/app.php
public/packages/*
@@ -22,5 +23,6 @@ public/uploads/logo.gif
public/uploads/logo.png
.siteflow
public/assets/.siteflow
app/config/local/session.php
.couscous
.settings/settings.json
+29 -19
View File
@@ -14,16 +14,13 @@ This project is being actively developed and we're [releasing quite frequently](
__This is web-based software__. This means there there is no executable file (aka no .exe files), and it must be run on a web server and accessed through a web browser. It runs on any Mac OSX, flavor of Linux, as well as Windows.
-----
### Documentation & Installation
### Installation
__Installation and configuration documentation for this project has been moved to http://snipeitapp.com/documentation/.__
__Installation and configuration documentation for this project has been moved to http://docs.snipeitapp.com.__
We'll be adding a long-overdue user's manual soon as well.
#### Server Requirements
Please see the [requirements documentation](http://docs.snipeitapp.com/requirements.html) for full requirements.
To deploy on Ubuntu using Ansible and Vagrant, check out the [Snipe-IT Installation scripts](https://github.com/GR360RY/snipeit-ansible) created by [@GR360RY](https://github.com/GR360RY/).
__To deploy on Ubuntu using Ansible and Vagrant, be sure to check out the [Snipe-IT Installation scripts](https://github.com/GR360RY/snipeit-ansible) created by [@GR360RY](https://github.com/GR360RY/).__
-----
### Bug Reports & Feature Requests
@@ -32,31 +29,44 @@ Feel free to check out the [GitHub Issues for this project](https://github.com/s
We use Waffle.io to help better communicate our roadmap with users. Our [project page there](http://waffle.io/snipe/snipe-it) will show you the backlog, what's ready to be worked on, what's in progress, and what's completed.
If you're having trouble with the installation, please check the [Common Issues](http://docs.snipeitapp.com/common-issues.html) and [Getting Help](http://docs.snipeitapp.com/getting-help.html) documentation.
[![Stories in Ready](https://badge.waffle.io/snipe/snipe-it.png?label=ready&title=Ready)](http://waffle.io/snipe/snipe-it)
-----
### Upgrading
Please see the [upgrading documentation](http://docs.snipeitapp.com/upgrading.html) for instructions on upgrading Snipe-IT.
------
### Announcement List
To be notified of important news (such as new releases, security advisories, etc), [sign up for our list](http://eepurl.com/XyZKz). We'll never sell or give away your info, and we'll only email you when it's important.
------
### Translations!
Please see the [translations documentation](http://docs.snipeitapp.com/translations.html) for information about available languages and how to add translations to Snipe-IT.
If you're not a coder but want to give back to the project and you're fluent in other languages, consider helping out with the translations. We use [CrowdIn](https://crowdin.com) to manage translations, and it makes it super-simple for you to add translations to the project without messing with code. Check out [the Snipe-IT CrowdIn translation project here](https://crowdin.com/project/snipe-it/).
We currently have English, Chinese, Finnish, Malay, Romanian and Spanish completed, and are looking for lots more!
-----
## Requirements
- PHP 5.4 or later
- MCrypt PHP Extension
- Fileinfo Extension
And _one_ of the following image libraries (for QR codes, asset model image and user avatar image uploads).
- GD Library (>=2.0) … or …
- Imagick PHP extension (>=6.3.8)
-----
### Contributing
## Important Notes on Updating
Please see the documentation on [contributing and developing for Snipe-IT](http://docs.snipeitapp.com/contributing.html).
Whenever you pull down a new version from master or develop, when you grab the [latest official release](https://github.com/snipe/snipe-it/releases), make sure to run the following commands via command line:
[![Stories in Ready](https://badge.waffle.io/snipe/snipe-it.png?label=ready+for+dev&title=Ready+for+Development)](http://waffle.io/snipe/snipe-it)
php composer.phar dump-autoload
php artisan migrate
Forgetting to do this can mean your DB might end up out of sync with the new files you just pulled, or you may have some funky cached autoloader values. It's a good idea to get into the habit of running these every time you pull anything new down. If there are no database changes to migrate, it won't hurt anything to run migrations anyway.
## Contributor Code of Conduct
Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms.
+36 -9
View File
@@ -18,7 +18,7 @@ class AppCommand extends Command
*
* @var string
*/
protected $description = '';
protected $description = 'This command kicks off your database table creation and migration, and creates your first admin user.';
/**
* Holds the user information.
@@ -28,7 +28,7 @@ class AppCommand extends Command
protected $userData = array(
'first_name' => null,
'last_name' => null,
'email' => null,
'username' => null,
'password' => null
);
@@ -66,7 +66,7 @@ class AppCommand extends Command
// Let's ask the user some questions, shall we?
$this->askUserFirstName();
$this->askUserLastName();
$this->askUserEmail();
$this->askUserUsername();
$this->askUserPassword();
$this->askUserDummyData();
@@ -162,7 +162,7 @@ class AppCommand extends Command
}
/**
* Asks the user for the user email address.
* Asks the user for the username address.
*
* @return void
* @todo Use the Laravel Validator
@@ -171,7 +171,7 @@ class AppCommand extends Command
{
do {
// Ask the user to input the email address
$email = $this->ask('Please enter your user email: ');
$email = $this->ask('Please enter your email: ');
// Check if email is valid
if ($email == '') {
@@ -185,6 +185,32 @@ class AppCommand extends Command
while ( ! $email);
}
/**
* Asks the user for the username address.
*
* @return void
* @todo Use the Laravel Validator
*/
protected function askUserUsername()
{
do {
// Ask the user to input the username
$username = $this->ask('Please enter your username: ');
// Check if username is valid
if ($username == '') {
// Return an error message
$this->error('Username is invalid. Please try again.');
}
// Store the username address
$this->userData['username'] = $username;
}
while ( ! $username);
}
/**
* Asks the user for the user password.
*
@@ -197,7 +223,7 @@ class AppCommand extends Command
// Ask the user to input the user password
$password = $this->ask('Please enter your user password (at least 8 characters): ');
// Check if email is valid
// Check if password is valid
if ($password == '') {
// Return an error message
$this->error('Password is invalid. Please try again.');
@@ -217,9 +243,9 @@ class AppCommand extends Command
protected function askUserDummyData()
{
// Ask the user to input the user password
$dummydata = $this->ask('Do you want to seed your database with dummy data? y/n (default is yes): ');
$dummydata = $this->ask('Do you want to seed your database with dummy data? Y/n (default is yes): ');
$this->dummyData = ( strstr($dummydata, 'y' ) || empty($dummydata) ) ? true : false;
$this->dummyData = ( strstr($dummydata, 'Y' ) || empty($dummydata) ) ? true : false;
}
/**
@@ -329,7 +355,7 @@ class AppCommand extends Command
$user = Sentry::getUserProvider()->create($data);
// Associate the Admin group to this user
$group = Sentry::getGroupProvider()->findById(1);
$group = Sentry::findGroupByName('Admin');
$user->addGroup($group);
// Show the success message
@@ -350,6 +376,7 @@ class AppCommand extends Command
'first_name' => 'John',
'last_name' => 'Doe',
'email' => 'john.doe@example.com',
'username' => 'john.doe@example.com',
'password' => substr(str_shuffle(str_repeat('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', mt_rand(1,10))),1,10),
'notes' => 'Generated on install',
'activated' => 1,
+67 -164
View File
@@ -61,154 +61,64 @@ class ImportCommand extends Command {
$nbInsert = $csv->each(function ($row) use ($duplicates) {
$status_id = 1;
// Let's just map some of these entries to more user friendly words
if (array_key_exists('0',$row)) {
$user_name = $row[0];
} else {
$user_name = '';
}
if (array_key_exists('1',$row)) {
$user_email = $row[1];
} else {
$user_email = '';
}
if (array_key_exists('2',$row)) {
$user_asset_category = $row[2];
} else {
$user_asset_category = '';
}
if (array_key_exists('3',$row)) {
$user_asset_name = $row[3];
} else {
$user_asset_name = '';
}
if (array_key_exists('4',$row)) {
$user_asset_mfgr = $row[4];
} else {
$user_asset_mfgr = '';
}
if (array_key_exists('5',$row)) {
$user_asset_modelno = $row[5];
} else {
$user_asset_modelno = '';
}
if (array_key_exists('6',$row)) {
$user_asset_serial = $row[6];
} else {
$user_asset_serial = '';
}
if (array_key_exists('7',$row)) {
$user_asset_tag = $row[7];
} else {
$user_asset_tag = '';
}
if (array_key_exists('8',$row)) {
$user_asset_location = $row[8];
} else {
$user_asset_location = '';
}
if (array_key_exists('9',$row)) {
$user_asset_notes = $row[9];
} else {
$user_asset_notes = '';
}
if (array_key_exists('10',$row)) {
if ($row[10]!='') {
$user_asset_purchase_date = date("Y-m-d 00:00:01", strtotime($row[10]));
} else {
$user_asset_purchase_date = '';
}
} else {
$user_asset_purchase_date = '';
}
// A number was given instead of a name
if (is_numeric($user_name)) {
$this->comment('User '.$user_name.' is not a name - assume this user already exists');
// No name was given
} elseif ($user_name=='') {
if (is_numeric($row[0])) {
$this->comment('User '.$row[0].' is not a name - assume this user already exists');
} elseif ($row[0]=='') {
$this->comment('No user data provided - skipping user creation, just adding asset');
$first_name = '';
$last_name = '';
} else {
$name = explode(" ", $user_name);
$first_name = $name[0];
$email_last_name = '';
// Generate an email based on their name
$name = explode(" ", $row[0]);
$first_name = $name[0];
$last_name = '';
$email_last_name = '';
if (!array_key_exists(1, $name)) {
$last_name='';
$email_last_name = $last_name;
$email_prefix = $first_name;
} else {
$last_name = str_replace($first_name,'',$user_name);
if ($first_name=='Unknown') {
$status_id = 7;
}
if ($this->option('email_format')=='filastname') {
$email_last_name.=str_replace(' ','',$last_name);
$email_prefix = $first_name[0].$email_last_name;
} elseif ($this->option('email_format')=='firstname.lastname') {
$email_last_name.=str_replace(' ','',$last_name);
$email_prefix = $first_name.'.'.$email_last_name;
} elseif ($this->option('email_format')=='firstname') {
$email_last_name.=str_replace(' ','',$last_name);
$email_prefix = $first_name;
if (!array_key_exists(1, $name)) {
$last_name='';
$email_last_name = $last_name;
$email_prefix = $first_name;
} else {
// Loop through the rest of the explode so you don't truncate
for ($x=0; $x < count($name); $x++) {
if (($x > 0) && ($name[$x]!='')) {
$last_name.=' '.$name[$x];
$email_last_name.=$name[$x];
}
}
$email_prefix = $first_name[0].$email_last_name;
}
// Generate an email based on their name if no email address is given
if ($user_email=='') {
if ($first_name=='Unknown') {
$status_id = 7;
}
$email = strtolower($email_prefix).'@'.$this->option('domain');
$user_email = str_replace("'",'',$email);
}
$email = strtolower(str_replace('.','',$email_prefix)).'@'.$this->option('domain');
$email = str_replace("'",'',$email);
$this->comment('Full Name: '.$row[0]);
$this->comment('First Name: '.$first_name);
$this->comment('Last Name: '.$last_name);
$this->comment('Email: '.$email);
$this->comment('Category Name: '.$row[1]);
$this->comment('Item: '.$row[2]);
$this->comment('Manufacturer ID: '.$row[3]);
$this->comment('Model No: '.$row[4]);
$this->comment('Serial No: '.$row[5]);
$this->comment('Asset Tag: '.$row[6]);
$this->comment('Location: '.$row[7]);
}
$this->comment('Full Name: '.$user_name);
$this->comment('First Name: '.$first_name);
$this->comment('Last Name: '.$last_name);
$this->comment('Email: '.$user_email);
$this->comment('Category Name: '.$user_asset_category);
$this->comment('Item: '.$user_asset_name);
$this->comment('Manufacturer ID: '.$user_asset_mfgr);
$this->comment('Model No: '.$user_asset_modelno);
$this->comment('Serial No: '.$user_asset_serial);
$this->comment('Asset Tag: '.$user_asset_tag);
$this->comment('Location: '.$user_asset_location);
$this->comment('Purchase Date: '.$user_asset_purchase_date);
$this->comment('Notes: '.$user_asset_notes);
$this->comment('------------- Action Summary ----------------');
if ($user_email!='') {
if ($user = User::where('email', $user_email)->first()) {
$this->comment('User '.$user_email.' already exists');
if (isset($email)) {
if ($user = User::where('email', $email)->first()) {
$this->comment('User '.$email.' already exists');
} else {
// Create the user
$user = Sentry::createUser(array(
'first_name' => $first_name,
'last_name' => $last_name,
'email' => $user_email,
'email' => $email,
'password' => substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 10),
'activated' => true,
'permissions' => array(
@@ -230,11 +140,11 @@ class ImportCommand extends Command {
}
// Check for the location match and create it if it doesn't exist
if ($location = Location::where('name', $user_asset_location)->first()) {
$this->comment('Location '.$user_asset_location.' already exists');
if ($location = Location::where('name', $row[7])->first()) {
$this->comment('Location '.$row[7].' already exists');
} else {
$location = new Location();
$location->name = e($user_asset_location);
$location->name = e($row[7]);
$location->address = '';
$location->city = '';
$location->state = '';
@@ -244,65 +154,65 @@ class ImportCommand extends Command {
if (!$this->option('testrun')=='true') {
if ($location->save()) {
$this->comment('Location '.$user_asset_location.' was created');
$this->comment('Location '.$row[7].' was created');
} else {
$this->comment('Something went wrong! Location '.$user_asset_location.' was NOT created');
$this->comment('Something went wrong! Location '.$row[1].' was NOT created');
}
} else {
$this->comment('Location '.$user_asset_location.' was (not) created - test run only');
$this->comment('Location '.$row[7].' was (not) created - test run only');
}
}
// Check for the category match and create it if it doesn't exist
if ($category = Category::where('name', $user_asset_category)->where('category_type', 'asset')->first()) {
$this->comment('Category '.$user_asset_category.' already exists');
if ($category = Category::where('name', $row[1])->where('category_type', 'asset')->first()) {
$this->comment('Category '.$row[1].' already exists');
} else {
$category = new Category();
$category->name = e($user_asset_category);
$category->name = e($row[1]);
$category->category_type = 'asset';
$category->user_id = 1;
if ($category->save()) {
$this->comment('Category '.$user_asset_category.' was created');
$this->comment('Category '.$row[1].' was created');
} else {
$this->comment('Something went wrong! Category '.$user_asset_category.' was NOT created');
$this->comment('Something went wrong! Category '.$row[1].' was NOT created');
}
}
// Check for the manufacturer match and create it if it doesn't exist
if ($manufacturer = Manufacturer::where('name', $user_asset_mfgr)->first()) {
$this->comment('Manufacturer '.$user_asset_mfgr.' already exists');
if ($manufacturer = Manufacturer::where('name', $row[3])->first()) {
$this->comment('Manufacturer '.$row[3].' already exists');
} else {
$manufacturer = new Manufacturer();
$manufacturer->name = e($user_asset_mfgr);
$manufacturer->name = e($row[3]);
$manufacturer->user_id = 1;
if ($manufacturer->save()) {
$this->comment('Manufacturer '.$user_asset_mfgr.' was created');
$this->comment('Manufacturer '.$row[3].' was created');
} else {
$this->comment('Something went wrong! Manufacturer '.$user_asset_mfgr.' was NOT created');
$this->comment('Something went wrong! Manufacturer '.$row[3].' was NOT created');
}
}
// Check for the asset model match and create it if it doesn't exist
if ($asset_model = Model::where('name', $user_asset_name)->where('modelno', $user_asset_modelno)->where('category_id', $category->id)->where('manufacturer_id', $manufacturer->id)->first()) {
$this->comment('The Asset Model '.$user_asset_name.' with model number '.$user_asset_modelno.' already exists');
if ($asset_model = Model::where('name', $row[2])->where('modelno', $row[4])->where('category_id', $category->id)->where('manufacturer_id', $manufacturer->id)->first()) {
$this->comment('The Asset Model '.$row[2].' with model number '.$row[4].' already exists');
} else {
$asset_model = new Model();
$asset_model->name = e($user_asset_name);
$asset_model->name = e($row[2]);
$asset_model->manufacturer_id = $manufacturer->id;
$asset_model->modelno = e($user_asset_modelno);
$asset_model->modelno = e($row[4]);
$asset_model->category_id = $category->id;
$asset_model->user_id = 1;
if ($asset_model->save()) {
$this->comment('Asset Model '.$user_asset_name.' with model number '.$user_asset_modelno.' was created');
$this->comment('Asset Model '.$row[2].' with model number '.$row[4].' was created');
} else {
$this->comment('Something went wrong! Asset Model '.$user_asset_name.' was NOT created');
$this->comment('Something went wrong! Asset Model '.$row[2].' was NOT created');
}
}
@@ -310,25 +220,19 @@ class ImportCommand extends Command {
// Check for the asset match and create it if it doesn't exist
$asset = new Asset();
$asset->name = e($user_asset_name);
$asset->serial = e($user_asset_serial);
$asset->asset_tag = e($user_asset_tag);
$asset->name = e($row[2]);
$asset->serial = e($row[5]);
$asset->asset_tag = e($row[6]);
$asset->model_id = $asset_model->id;
$asset->assigned_to = $user->id;
$asset->rtd_location_id = $location->id;
$asset->user_id = 1;
$asset->status_id = $status_id;
if ($user_asset_purchase_date!='') {
$asset->purchase_date = $user_asset_purchase_date;
} else {
$asset->purchase_date = NULL;
}
$asset->notes = e($user_asset_notes);
if ($asset->save()) {
$this->comment('Asset '.$user_asset_name.' with serial number '.$user_asset_serial.' was created');
$this->comment('Asset '.$row[2].' with serial number '.$row[5].' was created');
} else {
$this->comment('Something went wrong! Asset '.$user_asset_name.' was NOT created');
$this->comment('Something went wrong! Asset '.$row[5].' was NOT created');
}
@@ -363,7 +267,6 @@ class ImportCommand extends Command {
{
return array(
array('domain', null, InputOption::VALUE_REQUIRED, 'Email domain for generated email addresses.', null),
array('email_format', null, InputOption::VALUE_REQUIRED, 'The format of the email addresses that should be generated. Options are firstname.lastname, firstname, filastname', null),
array('testrun', null, InputOption::VALUE_REQUIRED, 'Test the output without writing to the database or not.', null),
);
}
+66 -30
View File
@@ -37,58 +37,94 @@ class SendExpirationAlerts extends Command {
*/
public function fire()
{
$expiring_assets = Asset::getExpiringWarrantee(60);
$data['count'] = count($expiring_assets);
$data['email_content'] ='';
// Expiring Assets
$expiring_assets = Asset::getExpiringWarrantee(60);
$this->info(count($expiring_assets).' expiring assets');
$asset_data['count'] = count($expiring_assets);
$asset_data['email_content'] ='';
$now = date("Y-m-d");
foreach ($expiring_assets as $asset) {
$now = date("Y-m-d");
$expires = $asset->warrantee_expires();
$difference = round(abs(strtotime($expires) - strtotime($now))/86400);
if ($difference > 30) {
$data['email_content'] .= '<tr style="background-color: #fcffa3;">';
$asset_data['email_content'] .= '<tr style="background-color: #fcffa3;">';
} else {
$data['email_content'] .= '<tr style="background-color:#d9534f;">';
$asset_data['email_content'] .= '<tr style="background-color:#d9534f;">';
}
$data['email_content'] .= '<td><a href="'.Config::get('app.url').'/hardware/'.$asset->id.'/view">';
$data['email_content'] .= $asset->name.'</a></td><td>'.$asset->asset_tag.'</td>';
$data['email_content'] .= '<td>'.$asset->warrantee_expires().'</td>';
$data['email_content'] .= '<td>'.$difference.' days</td>';
$data['email_content'] .= '</tr>';
$asset_data['email_content'] .= '<td><a href="'.Config::get('app.url').'/hardware/'.$asset->id.'/view">';
$asset_data['email_content'] .= $asset->showAssetName().'</a></td><td>'.$asset->asset_tag.'</td>';
$asset_data['email_content'] .= '<td>'.$asset->warrantee_expires().'</td>';
$asset_data['email_content'] .= '<td>'.$difference.' days</td>';
$asset_data['email_content'] .= '</tr>';
}
if ((Setting::getSettings()->alert_email!='') && (Setting::getSettings()->alerts_enabled==1)){
// Expiring licenses
$expiring_licenses = License::getExpiringLicenses(60);
$this->info(count($expiring_licenses).' expiring licenses');
$license_data['count'] = count($expiring_licenses);
$license_data['email_content'] = '';
foreach ($expiring_licenses as $license) {
$expires = $license->expiration_date;
$difference = round(abs(strtotime($expires) - strtotime($now))/86400);
if ($difference > 30) {
$license_data['email_content'] .= '<tr style="background-color: #fcffa3;">';
} else {
$license_data['email_content'] .= '<tr style="background-color:#d9534f;">';
}
$license_data['email_content'] .= '<td><a href="'.Config::get('app.url').'/admin/licenses/'.$license->id.'/view">';
$license_data['email_content'] .= $license->name.'</a></td>';
$license_data['email_content'] .= '<td>'.$license->expiration_date.'</td>';
$license_data['email_content'] .= '<td>'.$difference.' days</td>';
$license_data['email_content'] .= '</tr>';
}
if ((Setting::getSettings()->alert_email!='') && (Setting::getSettings()->alerts_enabled==1)) {
if (count($expiring_assets) > 0) {
Mail::send('emails.expiring-report', $data, function ($m) {
Mail::send('emails.expiring-assets-report', $asset_data, function ($m) {
$m->to(Setting::getSettings()->alert_email, Setting::getSettings()->site_name);
$m->subject('Expiring Assets Report');
});
});
}
if (count($expiring_licenses) > 0) {
Mail::send('emails.expiring-licenses-report', $license_data, function ($m) {
$m->to(Setting::getSettings()->alert_email, Setting::getSettings()->site_name);
$m->subject('Expiring Licenses Report');
});
}
} else {
if (Setting::getSettings()->alert_email=='') {
echo "Could not send email. No alert email configured in settings. \n";
} elseif (Setting::getSettings()->alerts_enabled!=1) {
echo "Alerts are disabled in the settings. No mail will be sent. \n";
}
}
}
}
}
+65
View File
@@ -0,0 +1,65 @@
<?php
use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class SystemBackup extends Command {
/**
* The console command name.
*
* @var string
*/
protected $name = 'snipeit:backup';
/**
* The console command description.
*
* @var string
*/
protected $description = 'This commandcreates a database dump and zips up all of the uploaded files in the upload directories.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function fire()
{
//
$files['avatars'] = glob(public_path().'/uploads/avatars/*');
$files['models'] = glob(public_path().'/uploads/models/*');
$files['suppliers'] = glob(public_path().'/uploads/suppliers/*');
$files['private_uploads'] = glob(app_path().'/private_uploads/*');
$base_filename = date('Ymdgis');
$zip_file = app_path().'/storage/dumps/'.$base_filename.'-backup.zip';
$db_dump = Config::get('backup::path').$base_filename.'-db.sql';
$this->call('db:backup', array('filename' => $db_dump));
Zipper::make($zip_file)
->folder('avatars')->add($files['avatars'])
->folder('models')->add($files['models'])
->folder('suppliers')->add($files['suppliers'])
->folder('private_uploads')->add($files['private_uploads'])
->folder('database')->add($db_dump)->close();
$this->info('Backup file created at '.$zip_file);
$this->info('Removing SQL dump at '.$db_dump);
unlink($db_dump);
}
}
+4 -1
View File
@@ -43,7 +43,7 @@ return array(
*/
'cipher' => MCRYPT_RIJNDAEL_256,
/*
|--------------------------------------------------------------------------
| Prevent Password changes
@@ -103,6 +103,8 @@ return array(
'Chumper\Datatable\DatatableServiceProvider',
'Dinesh\Barcode\BarcodeServiceProvider',
'Maknz\Slack\SlackServiceProvider',
'Schickling\Backup\BackupServiceProvider',
'Chumper\Zipper\ZipperServiceProvider',
),
@@ -177,6 +179,7 @@ return array(
'DNS1D' => 'Dinesh\Barcode\Facades\DNS1DFacade',
'DNS2D' => 'Dinesh\Barcode\Facades\DNS2DFacade',
'Slack' => 'Maknz\Slack\Facades\Slack',
'Zipper' => 'Chumper\Zipper\Zipper',
),
@@ -134,7 +134,7 @@ return array(
|
*/
'login_attribute' => 'email',
'login_attribute' => 'username',
),
@@ -0,0 +1,31 @@
<?php
return array(
/*
|--------------------------------------------------------------------------
| Trusted Proxies
|--------------------------------------------------------------------------
|
| Set an array of trusted proxies, so Laravel knows to grab the client's
| information via the X-Forwarded-* headers.
|
| To trust all proxies, use the value '*':
|
| 'proxies' => '*'
|
|
| To trust only specific proxies (recommended), set an array of those
| proxies' IP addresses:
|
| 'proxies' => array('192.168.1.1', '192.168.1.2')
|
|
| Or use CIDR notation:
|
| 'proxies' => array('192.168.12.0/23')
|
*/
'proxies' => '*',
);
@@ -0,0 +1,15 @@
<?php
return array(
'path' => storage_path() . '/dumps/',
'mysql' => array(
'dump_command_path' => '',
'restore_command_path' => '',
),
's3' => array(
'path' => ''
),
'compress' => false,
);
+1 -1
View File
@@ -26,7 +26,7 @@ return array(
|
*/
'url' => 'http://production.yourserver.com',
'url' => 'https://production.yourserver.com',
/*
|--------------------------------------------------------------------------
+2 -2
View File
@@ -1,5 +1,5 @@
<?php
return array (
'app_version' => 'v1.2.8-26',
'hash_version' => 'v1.2.8-26-gf5d4eb5',
'app_version' => 'v2.0-beta',
'hash_version' => 'v2.0-beta-4-g7e5f32c',
);
+14 -86
View File
@@ -27,7 +27,7 @@ class AuthController extends BaseController
{
// Declare the rules for the form validation
$rules = array(
'email' => 'required|email',
'username' => 'required',
'password' => 'required',
);
@@ -42,7 +42,7 @@ class AuthController extends BaseController
try {
// Try to log the user in
Sentry::authenticate(Input::only('email', 'password'), Input::get('remember-me', 0));
Sentry::authenticate(Input::only('username', 'password'), Input::get('remember-me', 0));
// Get the page we were before
$redirect = Session::get('loginRedirect', 'account');
@@ -53,91 +53,19 @@ class AuthController extends BaseController
// Redirect to the users page
return Redirect::to($redirect)->with('success', Lang::get('auth/message.signin.success'));
} catch (Cartalyst\Sentry\Users\UserNotFoundException $e) {
$this->messageBag->add('email', Lang::get('auth/message.account_not_found'));
$this->messageBag->add('username', Lang::get('auth/message.account_not_found'));
} catch (Cartalyst\Sentry\Users\UserNotActivatedException $e) {
$this->messageBag->add('email', Lang::get('auth/message.account_not_activated'));
$this->messageBag->add('username', Lang::get('auth/message.account_not_activated'));
} catch (Cartalyst\Sentry\Throttling\UserSuspendedException $e) {
$this->messageBag->add('email', Lang::get('auth/message.account_suspended'));
$this->messageBag->add('username', Lang::get('auth/message.account_suspended'));
} catch (Cartalyst\Sentry\Throttling\UserBannedException $e) {
$this->messageBag->add('email', Lang::get('auth/message.account_banned'));
$this->messageBag->add('username', Lang::get('auth/message.account_banned'));
}
// Ooops.. something went wrong
return Redirect::back()->withInput()->withErrors($this->messageBag);
}
/**
* Account sign up.
*
* @return View
*/
public function getSignup()
{
// Is the user logged in?
if (Sentry::check()) {
return Redirect::route('account');
}
// Show the page
return View::make('frontend.auth.signup');
}
/**
* Account sign up form processing.
*
* @return Redirect
*/
public function postSignup()
{
// Declare the rules for the form validation
$rules = array(
'first_name' => 'required|min:2',
'last_name' => 'required|min:2',
'email' => 'required|email|unique:users',
'email_confirm' => 'required|email|same:email',
'password' => 'required|between:10,32',
'password_confirm' => 'required|same:password',
);
// Create a new validator instance from our validation rules
$validator = Validator::make(Input::all(), $rules);
// If validation fails, we'll exit the operation now.
if ($validator->fails()) {
// Ooops.. something went wrong
return Redirect::back()->withInput()->withErrors($validator);
}
try {
// Register the user
$user = Sentry::register(array(
'first_name' => Input::get('first_name'),
'last_name' => Input::get('last_name'),
'email' => Input::get('email'),
'password' => Input::get('password'),
));
// Data to be used on the email view
$data = array(
'user' => $user,
'activationUrl' => URL::route('activate', $user->getActivationCode()),
);
// Send the activation code through email
Mail::send('emails.register-activate', $data, function ($m) use ($user) {
$m->to($user->email, $user->first_name . ' ' . $user->last_name);
$m->subject('Welcome ' . $user->first_name);
});
// Redirect to the register page
return Redirect::back()->with('success', Lang::get('auth/message.signup.success'));
} catch (Cartalyst\Sentry\Users\UserExistsException $e) {
$this->messageBag->add('email', Lang::get('auth/message.account_already_exists'));
}
// Ooops.. something went wrong
return Redirect::back()->withInput()->withErrors($this->messageBag);
}
/**
* User account activation page.
@@ -192,7 +120,7 @@ class AuthController extends BaseController
{
// Declare the rules for the validator
$rules = array(
'email' => 'required|email',
'username' => 'required',
);
// Create a new validator instance from our dynamic rules
@@ -206,22 +134,22 @@ class AuthController extends BaseController
try {
// Get the user password recovery code
$user = Sentry::getUserProvider()->findByLogin(Input::get('email'));
$user = Sentry::getUserProvider()->findByLogin(Input::get('username'));
// Data to be used on the email view
// Data to be used on the username view
$data = array(
'user' => $user,
'forgotPasswordUrl' => URL::route('forgot-password-confirm', $user->getResetPasswordCode()),
);
// Send the activation code through email
Mail::send('emails.forgot-password', $data, function ($m) use ($user) {
$m->to($user->email, $user->first_name . ' ' . $user->last_name);
// Send the activation code through username
Mail::send('usernames.forgot-password', $data, function ($m) use ($user) {
$m->to($user->username, $user->first_name . ' ' . $user->last_name);
$m->subject('Account Password Recovery');
});
} catch (Cartalyst\Sentry\Users\UserNotFoundException $e) {
// Even though the email was not found, we will pretend
// we have sent the password reset code through email,
// Even though the username was not found, we will pretend
// we have sent the password reset code through username,
// this is a security measure against hackers.
}
+20 -20
View File
@@ -274,20 +274,20 @@ class AccessoriesController extends AdminController
$logaction->location_id = $user->location_id;
$logaction->user_id = Sentry::getUser()->id;
$logaction->note = e(Input::get('note'));
$settings = Setting::getSettings();
if ($settings->slack_endpoint) {
$slack_settings = [
'username' => $settings->botname,
'channel' => $settings->slack_channel,
'link_names' => true
];
$client = new \Maknz\Slack\Client($settings->slack_endpoint,$slack_settings);
try {
$client->attach([
'color' => 'good',
@@ -301,13 +301,13 @@ class AccessoriesController extends AdminController
'value' => e($logaction->note)
],
]
])->send('Accessory Checked Out');
} catch (Exception $e) {
}
}
@@ -390,20 +390,20 @@ class AccessoriesController extends AdminController
$logaction->asset_type = 'accessory';
$logaction->user_id = $admin_user->id;
$logaction->note = e(Input::get('note'));
$settings = Setting::getSettings();
if ($settings->slack_endpoint) {
$slack_settings = [
'username' => $settings->botname,
'channel' => $settings->slack_channel,
'link_names' => true
];
$client = new \Maknz\Slack\Client($settings->slack_endpoint,$slack_settings);
try {
$client->attach([
'color' => 'good',
@@ -416,17 +416,17 @@ class AccessoriesController extends AdminController
'title' => 'Note:',
'value' => e($logaction->note)
],
]
])->send('Accessory Checked In');
} catch (Exception $e) {
}
}
$log = $logaction->logaction('checkin from');
if ($backto=='user') {
+82 -70
View File
@@ -911,10 +911,10 @@ class AssetsController extends AdminController
$assets = Input::get('edit_asset');
$supplier_list = array('' => '') + Supplier::orderBy('name', 'asc')->lists('name', 'id');
$statuslabel_list = array('' => '') + Statuslabel::lists('name', 'id');
$location_list = array('' => '') + Location::lists('name', 'id');
$statuslabel_list = array('' => '') + Statuslabel::lists('name', 'id');
$location_list = array('' => '') + Location::lists('name', 'id');
return View::make('backend/hardware/bulk')->with('assets',$assets)->with('supplier_list',$supplier_list)->with('statuslabel_list',$statuslabel_list)->with('location_list',$location_list);
return View::make('backend/hardware/bulk')->with('assets',$assets)->with('supplier_list',$supplier_list)->with('statuslabel_list',$statuslabel_list)->with('location_list',$location_list);
}
@@ -941,7 +941,7 @@ class AssetsController extends AdminController
$assets = Input::get('bulk_edit');
if ( (Input::has('purchase_date')) || (Input::has('rtd_location_id')) || (Input::has('status_id')) ) {
if ( (Input::has('purchase_date')) || (Input::has('purchase_cost')) || (Input::has('supplier_id')) || (Input::has('order_number')) || (Input::has('warranty_months')) || (Input::has('rtd_location_id')) || (Input::has('status_id')) ) {
foreach ($assets as $key => $value) {
@@ -951,6 +951,22 @@ class AssetsController extends AdminController
$update_array['purchase_date'] = e(Input::get('purchase_date'));
}
if (Input::has('purchase_cost')) {
$update_array['purchase_cost'] = e(Input::get('purchase_cost'));
}
if (Input::has('supplier_id')) {
$update_array['supplier_id'] = e(Input::get('supplier_id'));
}
if (Input::has('order_number')) {
$update_array['order_number'] = e(Input::get('order_number'));
}
if (Input::has('warranty_months')) {
$update_array['warranty_months'] = e(Input::get('warranty_months'));
}
if (Input::has('rtd_location_id')) {
$update_array['rtd_location_id'] = e(Input::get('rtd_location_id'));
}
@@ -998,46 +1014,47 @@ class AssetsController extends AdminController
public function getDatatable($status = null)
{
$assets = Asset::with('model','assigneduser','assigneduser.userloc','assetstatus','defaultLoc','assetlog','model','model.category')->Hardware()->select(array('id', 'name','model_id','assigned_to','asset_tag','serial','status_id','purchase_date','deleted_at','rtd_location_id','notes','order_number'));
$assets = Asset::with('model','assigneduser','assigneduser.userloc','assetstatus','defaultLoc','assetlog','model','model.category')->Hardware()->select(array('id', 'name','model_id','assigned_to','asset_tag','serial','status_id','purchase_date','deleted_at','rtd_location_id'));
switch ($status) {
case 'Pending':
$assets->Pending();
break;
case 'RTD':
$assets->RTD();
break;
case 'Undeployable':
$assets->Undeployable();
break;
case 'Archived':
$assets->Archived();
break;
case 'Requestable':
$assets->RequestableAssets();
break;
case 'Deployed':
$assets->Deployed();
break;
case 'Deleted':
$assets->withTrashed()->Deleted();
break;
}
switch ($status) {
case 'Deleted':
$assets->withTrashed()->Deleted();
break;
case 'Pending':
$assets->Pending();
break;
case 'RTD':
$assets->RTD();
break;
case 'Undeployable':
$assets->Undeployable();
break;
case 'Archived':
$assets->Archived();
break;
case 'Requestable':
$assets->RequestableAssets();
break;
case 'Deployed':
$assets->Deployed();
break;
}
$assets = $assets->orderBy('asset_tag', 'ASC')->get();
$assets = $assets->orderBy('asset_tag', 'ASC')->get();
$actions = new \Chumper\Datatable\Columns\FunctionColumn('actions', function ($assets)
{
if ($assets->deleted_at=='') {
return '<a href="'.route('update/hardware', $assets->id).'" class="btn btn-warning btn-sm"><i class="fa fa-pencil icon-white"></i></a> <a data-html="false" class="btn delete-asset btn-danger btn-sm" data-toggle="modal" href="'.route('delete/hardware', $assets->id).'" data-content="'.Lang::get('admin/hardware/message.delete.confirm').'" data-title="'.Lang::get('general.delete').' '.htmlspecialchars($assets->asset_tag).'?" onClick="return false;"><i class="fa fa-trash icon-white"></i></a>';
} elseif ($assets->model->deleted_at=='') {
return '<a href="'.route('restore/hardware', $assets->id).'" class="btn btn-warning btn-sm"><i class="fa fa-recycle icon-white"></i></a>';
}
$actions = new \Chumper\Datatable\Columns\FunctionColumn('actions', function ($assets)
{
if ($assets->deleted_at=='') {
return '<a href="'.route('update/hardware', $assets->id).'" class="btn btn-warning btn-sm"><i class="fa fa-pencil icon-white"></i></a> <a data-html="false" class="btn delete-asset btn-danger btn-sm" data-toggle="modal" href="'.route('delete/hardware', $assets->id).'" data-content="'.Lang::get('admin/hardware/message.delete.confirm').'" data-title="'.Lang::get('general.delete').' '.htmlspecialchars($assets->asset_tag).'?" onClick="return false;"><i class="fa fa-trash icon-white"></i></a>';
} elseif ($assets->model->deleted_at=='') {
return '<a href="'.route('restore/hardware', $assets->id).'" class="btn btn-warning btn-sm"><i class="fa fa-recycle icon-white"></i></a>';
}
});
});
$inout = new \Chumper\Datatable\Columns\FunctionColumn('inout', function ($assets)
{
@@ -1051,6 +1068,7 @@ class AssetsController extends AdminController
});
return Datatable::collection($assets)
->addColumn('',function($assets)
{
@@ -1065,7 +1083,7 @@ class AssetsController extends AdminController
return '<a title="'.$assets->asset_tag.'" href="hardware/'.$assets->id.'/view">'.$assets->asset_tag.'</a>';
})
->showColumns('serial')
->showColumns('serial')
->addColumn('model',function($assets)
{
@@ -1076,13 +1094,16 @@ class AssetsController extends AdminController
}
})
->addColumn('status',function($assets)
{
if ($assets->assigned_to!='') {
return link_to('../admin/users/'.$assets->assigned_to.'/view', $assets->assigneduser->fullName());
} else {
return $assets->assetstatus->name;
}
->addColumn('status',function($assets)
{
if ($assets->assigned_to!='') {
return link_to('../admin/users/'.$assets->assigned_to.'/view', $assets->assigneduser->fullName());
} else {
if ($assets->assetstatus) {
return $assets->assetstatus->name;
}
}
})
->addColumn('location',function($assets)
@@ -1101,35 +1122,26 @@ class AssetsController extends AdminController
return 'No category';
}
})
})
->addColumn('eol',function($assets)
{
return $assets->eol_date();
})
->addColumn('eol',function($assets)
{
return $assets->eol_date();
})
->addColumn('notes',function($assets)
{
return $assets->notes;
})
->addColumn('order_number',function($assets)
{
return $assets->order_number;
})
->addColumn('checkout_date',function($assets)
{
if (($assets->assigned_to!='') && ($assets->assetlog->first())) {
return $assets->assetlog->first()->created_at->format('Y-m-d');
}
->addColumn('checkout_date',function($assets)
{
if (($assets->assigned_to!='') && ($assets->assetlog->first())) {
return $assets->assetlog->first()->created_at->format('Y-m-d');
}
})
->addColumn($inout)
->addColumn($actions)
->searchColumns('name', 'asset_tag', 'serial', 'model', 'status','location','eol','checkout_date', 'inout','category','notes','order_number')
->orderColumns('name', 'asset_tag', 'serial', 'model', 'status','location','eol','checkout_date', 'inout','notes','order_number')
->make();
})
->addColumn($inout)
->addColumn($actions)
->searchColumns('name', 'asset_tag', 'serial', 'model', 'status','location','eol','checkout_date', 'inout','category')
->orderColumns('name', 'asset_tag', 'serial', 'model', 'status','location','eol','checkout_date', 'inout')
->make();
}
}
+10 -10
View File
@@ -36,7 +36,7 @@ class CategoriesController extends AdminController
public function getCreate()
{
// Show the page
$category_types= array('' => '', 'asset' => 'Asset', 'accessory' => 'Accessory');
$category_types= array('' => '', 'asset' => 'Asset', 'accessory' => 'Accessory', 'consumable' => 'Consumable');
return View::make('backend/categories/edit')->with('category',new Category)
->with('category_types',$category_types);
}
@@ -66,8 +66,8 @@ class CategoriesController extends AdminController
$category->name = e(Input::get('name'));
$category->category_type = e(Input::get('category_type'));
$category->eula_text = e(Input::get('eula_text'));
$category->use_default_eula = e(Input::get('use_default_eula', '0'));
$category->require_acceptance = e(Input::get('require_acceptance', '0'));
$category->use_default_eula = e(Input::get('use_default_eula', '0'));
$category->require_acceptance = e(Input::get('require_acceptance', '0'));
$category->user_id = Sentry::getId();
// Was the asset created?
@@ -101,8 +101,8 @@ class CategoriesController extends AdminController
//$category_options = array('' => 'Top Level') + Category::lists('name', 'id');
$category_options = array('' => 'Top Level') + DB::table('categories')->where('id', '!=', $categoryId)->lists('name', 'id');
$category_types= array('' => '', 'asset' => 'Asset', 'accessory' => 'Accessory');
$category_types= array('' => '', 'asset' => 'Asset', 'accessory' => 'Accessory', 'consumable' => 'Consumable');
return View::make('backend/categories/edit', compact('category'))
->with('category_options',$category_options)
->with('category_types',$category_types);
@@ -143,8 +143,8 @@ class CategoriesController extends AdminController
$category->name = e(Input::get('name'));
$category->category_type = e(Input::get('category_type'));
$category->eula_text = e(Input::get('eula_text'));
$category->use_default_eula = e(Input::get('use_default_eula', '0'));
$category->require_acceptance = e(Input::get('require_acceptance', '0'));
$category->use_default_eula = e(Input::get('use_default_eula', '0'));
$category->require_acceptance = e(Input::get('require_acceptance', '0'));
// Was the asset created?
if($category->save()) {
@@ -241,13 +241,13 @@ class CategoriesController extends AdminController
->orderColumns('name','category_type','count','acceptance','eula','actions')
->make();
}
public function getDataView($categoryID) {
$category = Category::find($categoryID);
$categoryassets = $category->assets;
$actions = new \Chumper\Datatable\Columns\FunctionColumn('actions', function ($categoryassets)
{
$actions = new \Chumper\Datatable\Columns\FunctionColumn('actions', function ($categoryassets)
{
if (($categoryassets->assigned_to !='') && ($categoryassets->assigned_to > 0)) {
return '<a href="'.route('checkin/hardware', $categoryassets->id).'" class="btn btn-primary btn-sm">'.Lang::get('general.checkin').'</a>';
} else {
@@ -0,0 +1,390 @@
<?php namespace Controllers\Admin;
use AdminController;
use Input;
use Lang;
use Redirect;
use Setting;
use DB;
use Sentry;
use Consumable;
use Str;
use Validator;
use View;
use User;
use Actionlog;
use Mail;
use Datatable;
use Slack;
use Config;
class ConsumablesController extends AdminController
{
/**
* Show a list of all the consumables.
*
* @return View
*/
public function getIndex()
{
return View::make('backend/consumables/index');
}
/**
* Consumable create.
*
* @return View
*/
public function getCreate()
{
// Show the page
$category_list = array('' => '') + DB::table('categories')->where('category_type','=','consumable')->whereNull('deleted_at')->orderBy('name','ASC')->lists('name', 'id');
return View::make('backend/consumables/edit')->with('consumable',new Consumable)->with('category_list',$category_list);
}
/**
* Consumable create form processing.
*
* @return Redirect
*/
public function postCreate()
{
// create a new model instance
$consumable = new Consumable();
$validator = Validator::make(Input::all(), $consumable->rules);
if ($validator->fails())
{
// The given data did not pass validation
return Redirect::back()->withInput()->withErrors($validator->messages());
}
else{
// Update the consumable data
$consumable->name = e(Input::get('name'));
$consumable->category_id = e(Input::get('category_id'));
$consumable->qty = e(Input::get('qty'));
$consumable->user_id = Sentry::getId();
// Was the consumable created?
if($consumable->save()) {
// Redirect to the new consumable page
return Redirect::to("admin/consumables")->with('success', Lang::get('admin/consumables/message.create.success'));
}
}
// Redirect to the consumable create page
return Redirect::to('admin/consumables/create')->with('error', Lang::get('admin/consumables/message.create.error'));
}
/**
* Consumable update.
*
* @param int $consumableId
* @return View
*/
public function getEdit($consumableId = null)
{
// Check if the consumable exists
if (is_null($consumable = Consumable::find($consumableId))) {
// Redirect to the blogs management page
return Redirect::to('admin/consumables')->with('error', Lang::get('admin/consumables/message.does_not_exist'));
}
$category_list = array('' => '') + DB::table('categories')->where('category_type','=','consumable')->whereNull('deleted_at')->orderBy('name','ASC')->lists('name', 'id');
return View::make('backend/consumables/edit', compact('consumable'))->with('category_list',$category_list);
}
/**
* Consumable update form processing page.
*
* @param int $consumableId
* @return Redirect
*/
public function postEdit($consumableId = null)
{
// Check if the blog post exists
if (is_null($consumable = Consumable::find($consumableId))) {
// Redirect to the blogs management page
return Redirect::to('admin/consumables')->with('error', Lang::get('admin/consumables/message.does_not_exist'));
}
// get the POST data
$new = Input::all();
// attempt validation
$validator = Validator::make(Input::all(), $consumable->validationRules($consumableId));
if ($validator->fails())
{
// The given data did not pass validation
return Redirect::back()->withInput()->withErrors($validator->messages());
}
// attempt validation
else {
// Update the consumable data
$consumable->name = e(Input::get('name'));
$consumable->category_id = e(Input::get('category_id'));
$consumable->qty = e(Input::get('qty'));
// Was the consumable created?
if($consumable->save()) {
// Redirect to the new consumable page
return Redirect::to("admin/consumables")->with('success', Lang::get('admin/consumables/message.update.success'));
}
}
// Redirect to the consumable management page
return Redirect::to("admin/consumables/$consumableID/edit")->with('error', Lang::get('admin/consumables/message.update.error'));
}
/**
* Delete the given consumable.
*
* @param int $consumableId
* @return Redirect
*/
public function getDelete($consumableId)
{
// Check if the blog post exists
if (is_null($consumable = Consumable::find($consumableId))) {
// Redirect to the blogs management page
return Redirect::to('admin/consumables')->with('error', Lang::get('admin/consumables/message.not_found'));
}
if ($consumable->hasUsers() > 0) {
return Redirect::to('admin/consumables')->with('error', Lang::get('admin/consumables/message.assoc_users', array('count'=> $consumable->hasUsers())));
} else {
$consumable->delete();
// Redirect to the locations management page
return Redirect::to('admin/consumables')->with('success', Lang::get('admin/consumables/message.delete.success'));
}
}
/**
* Get the consumable information to present to the consumable view page
*
* @param int $consumableId
* @return View
**/
public function getView($consumableID = null)
{
$consumable = Consumable::find($consumableID);
if (isset($consumable->id)) {
return View::make('backend/consumables/view', compact('consumable'));
} else {
// Prepare the error message
$error = Lang::get('admin/consumables/message.does_not_exist', compact('id'));
// Redirect to the user management page
return Redirect::route('consumables')->with('error', $error);
}
}
/**
* Check out the consumable to a person
**/
public function getCheckout($consumableId)
{
// Check if the consumable exists
if (is_null($consumable = Consumable::find($consumableId))) {
// Redirect to the consumable management page with error
return Redirect::to('consumables')->with('error', Lang::get('admin/consumables/message.not_found'));
}
// Get the dropdown of users and then pass it to the checkout view
$users_list = array('' => 'Select a User') + DB::table('users')->select(DB::raw('concat(last_name,", ",first_name) as full_name, id'))->whereNull('deleted_at')->orderBy('last_name', 'asc')->orderBy('first_name', 'asc')->lists('full_name', 'id');
return View::make('backend/consumables/checkout', compact('consumable'))->with('users_list',$users_list);
}
/**
* Check out the consumable to a person
**/
public function postCheckout($consumableId)
{
// Check if the consumable exists
if (is_null($consumable = Consumable::find($consumableId))) {
// Redirect to the consumable management page with error
return Redirect::to('consumables')->with('error', Lang::get('admin/consumables/message.not_found'));
}
$admin_user = Sentry::getUser();
$assigned_to = e(Input::get('assigned_to'));
// Declare the rules for the form validation
$rules = array(
'assigned_to' => 'required|min:1'
);
// Create a new validator instance from our validation rules
$validator = Validator::make(Input::all(), $rules);
// If validation fails, we'll exit the operation now.
if ($validator->fails()) {
// Ooops.. something went wrong
return Redirect::back()->withInput()->withErrors($validator);
}
// Check if the user exists
if (is_null($user = User::find($assigned_to))) {
// Redirect to the consumable management page with error
return Redirect::to('admin/consumables')->with('error', Lang::get('admin/consumables/message.user_does_not_exist'));
}
// Update the consumable data
$consumable->assigned_to = e(Input::get('assigned_to'));
$consumable->users()->attach($consumable->id, array(
'consumable_id' => $consumable->id,
'assigned_to' => e(Input::get('assigned_to'))));
$logaction = new Actionlog();
$logaction->consumable_id = $consumable->id;
$logaction->checkedout_to = $consumable->assigned_to;
$logaction->asset_type = 'consumable';
$logaction->location_id = $user->location_id;
$logaction->user_id = Sentry::getUser()->id;
$logaction->note = e(Input::get('note'));
$settings = Setting::getSettings();
if ($settings->slack_endpoint) {
$slack_settings = [
'username' => $settings->botname,
'channel' => $settings->slack_channel,
'link_names' => true
];
$client = new \Maknz\Slack\Client($settings->slack_endpoint,$slack_settings);
try {
$client->attach([
'color' => 'good',
'fields' => [
[
'title' => 'Checked Out:',
'value' => strtoupper($logaction->asset_type).' <'.Config::get('app.url').'/admin/consumables/'.$consumable->id.'/view'.'|'.$consumable->name.'> checked out to <'.Config::get('app.url').'/admin/users/'.$user->id.'/view|'.$user->fullName().'> by <'.Config::get('app.url').'/admin/users/'.$admin_user->id.'/view'.'|'.$admin_user->fullName().'>.'
],
[
'title' => 'Note:',
'value' => e($logaction->note)
],
]
])->send('Consumable Checked Out');
} catch (Exception $e) {
}
}
$log = $logaction->logaction('checkout');
$consumable_user = DB::table('consumables_users')->where('assigned_to','=',$consumable->assigned_to)->where('consumable_id','=',$consumable->id)->first();
$data['log_id'] = $logaction->id;
$data['eula'] = $consumable->getEula();
$data['first_name'] = $user->first_name;
$data['item_name'] = $consumable->name;
$data['require_acceptance'] = $consumable->requireAcceptance();
if (($consumable->requireAcceptance()=='1') || ($consumable->getEula())) {
Mail::send('emails.accept-asset', $data, function ($m) use ($user) {
$m->to($user->email, $user->first_name . ' ' . $user->last_name);
$m->subject('Confirm consumable delivery');
});
}
// Redirect to the new consumable page
return Redirect::to("admin/consumables")->with('success', Lang::get('admin/consumables/message.checkout.success'));
}
public function getDatatable()
{
$consumables = Consumable::select(array('id','name','qty'))
->whereNull('deleted_at')
->orderBy('created_at', 'DESC');
$consumables = $consumables->get();
$actions = new \Chumper\Datatable\Columns\FunctionColumn('actions',function($consumables)
{
return '<a href="'.route('checkout/consumable', $consumables->id).'" style="margin-right:5px;" class="btn btn-info btn-sm" '.(($consumables->numRemaining() > 0 ) ? '' : ' disabled').'>'.Lang::get('general.checkout').'</a><a href="'.route('update/consumable', $consumables->id).'" class="btn btn-warning btn-sm" style="margin-right:5px;"><i class="fa fa-pencil icon-white"></i></a><a data-html="false" class="btn delete-asset btn-danger btn-sm" data-toggle="modal" href="'.route('delete/consumable', $consumables->id).'" data-content="'.Lang::get('admin/consumables/message.delete.confirm').'" data-title="'.Lang::get('general.delete').' '.htmlspecialchars($consumables->name).'?" onClick="return false;"><i class="fa fa-trash icon-white"></i></a>';
});
return Datatable::collection($consumables)
->addColumn('name',function($consumables)
{
return link_to('admin/consumables/'.$consumables->id.'/view', $consumables->name);
})
->addColumn('qty',function($consumables)
{
return $consumables->qty;
})
->addColumn('numRemaining',function($consumables)
{
return $consumables->numRemaining();
})
->addColumn($actions)
->searchColumns('name','qty','numRemaining','actions')
->orderColumns('name','qty','numRemaining','actions')
->make();
}
public function getDataView($consumableID)
{
$consumable = Consumable::find($consumableID);
$consumable_users = $consumable->users;
return Datatable::collection($consumable_users)
->addColumn('name',function($consumable_users)
{
return link_to('/admin/users/'.$consumable_users->id.'/view', $consumable_users->fullName());
})
->make();
}
}
+18 -18
View File
@@ -15,56 +15,56 @@ class DashboardController extends AdminController
public function getIndex()
{
// Show the page
$recent_activity = Actionlog::orderBy('created_at','DESC')->take(7)->get();
$recent_activity = Actionlog::orderBy('created_at','DESC')->with('accessorylog','consumablelog','licenselog','assetlog','adminlog','userlog')->take(7)->get();
$asset_stats['total'] = Asset::Hardware()->count();
$asset_stats['rtd']['total'] = Asset::Hardware()->RTD()->count();
if ($asset_stats['rtd']['total'] > 0) {
$asset_stats['rtd']['percent'] = round(($asset_stats['rtd']['total']/$asset_stats['total']) * 100);
} else {
$asset_stats['rtd']['percent'] = 0;
}
$asset_stats['pending']['total'] = Asset::Hardware()->Pending()->count();
if ($asset_stats['pending']['total'] > 0) {
$asset_stats['pending']['percent'] = round(($asset_stats['pending']['total']/$asset_stats['total']) * 100);
} else {
$asset_stats['pending']['percent'] = 0;
}
$asset_stats['deployed']['total'] = Asset::Hardware()->Deployed()->count();
if ($asset_stats['deployed']['total'] > 0) {
$asset_stats['deployed']['percent'] = round(($asset_stats['deployed']['total']/$asset_stats['total']) * 100);
} else {
$asset_stats['deployed']['percent'] = 0;
}
$asset_stats['undeployable']['total'] = Asset::Hardware()->Undeployable()->count();
if ($asset_stats['undeployable']['total'] > 0) {
$asset_stats['undeployable']['percent'] = round(($asset_stats['undeployable']['total']/$asset_stats['total']) * 100);
} else {
$asset_stats['undeployable']['percent'] = 0;
}
$asset_stats['archived']['total'] = Asset::Hardware()->Archived()->count();
if ($asset_stats['archived']['total'] > 0) {
$asset_stats['archived']['percent'] = round(($asset_stats['archived']['total']/$asset_stats['total']) * 100);
} else {
$asset_stats['archived']['percent'] = 0;
}
return View::make('backend/dashboard')->with('asset_stats',$asset_stats)->with('recent_activity',$recent_activity);
}
+35 -19
View File
@@ -23,7 +23,7 @@ class LocationsController extends AdminController
public function getIndex()
{
// Grab all the locations
$locations = Location::orderBy('created_at', 'DESC')->get();
$locations = Location::orderBy('created_at', 'DESC')->with('parent','assets','assignedassets')->get();
// Show the page
return View::make('backend/locations/index', compact('locations'));
@@ -37,9 +37,15 @@ class LocationsController extends AdminController
*/
public function getCreate()
{
// Show the page
$location_options = array('0' => 'Top Level') + Location::lists('name', 'id');
return View::make('backend/locations/edit')->with('location_options',$location_options)->with('location',new Location);
$locations = Location::orderBy('name','ASC')->get();
$location_options_array = Location::getLocationHierarchy($locations);
$location_options = Location::flattenLocationsArray($location_options_array);
$location_options = array('' => 'Top Level') + $location_options;
return View::make('backend/locations/edit')
->with('location_options',$location_options)
->with('location',new Location);
}
@@ -62,12 +68,18 @@ class LocationsController extends AdminController
// Save the location data
$location->name = e(Input::get('name'));
if (Input::get('parent_id')=='') {
$location->parent_id = null;
} else {
$location->parent_id = e(Input::get('parent_id'));
}
$location->currency = e(Input::get('currency'));
$location->address = e(Input::get('address'));
$location->address2 = e(Input::get('address2'));
$location->city = e(Input::get('city'));
$location->state = e(Input::get('state'));
$location->country = e(Input::get('country'));
$location->zip = e(Input::get('zip'));
$location->zip = e(Input::get('zip'));
$location->user_id = Sentry::getId();
// Was the asset created?
@@ -97,14 +109,15 @@ class LocationsController extends AdminController
{
// Check if the location exists
if (is_null($location = Location::find($locationId))) {
// Redirect to the blogs management page
return Redirect::to('admin/settings/locations')->with('error', Lang::get('admin/locations/message.does_not_exist'));
}
// Show the page
//$location_options = array('' => 'Top Level') + Location::lists('name', 'id');
$locations = Location::orderBy('name','ASC')->get();
$location_options_array = Location::getLocationHierarchy($locations);
$location_options = Location::flattenLocationsArray($location_options_array);
$location_options = array('' => 'Top Level') + $location_options;
$location_options = array('' => 'Top Level') + DB::table('locations')->where('id', '!=', $locationId)->lists('name', 'id');
return View::make('backend/locations/edit', compact('location'))->with('location_options',$location_options);
}
@@ -128,27 +141,33 @@ class LocationsController extends AdminController
if ($validator->fails())
{
// The given data did not pass validation
// The given data did not pass validation
return Redirect::back()->withInput()->withErrors($validator->messages());
}
// attempt validation
else {
// Update the location data
$location->name = e(Input::get('name'));
$location->name = e(Input::get('name'));
if (Input::get('parent_id')=='') {
$location->parent_id = null;
} else {
$location->parent_id = e(Input::get('parent_id',''));
}
$location->currency = e(Input::get('currency'));
$location->address = e(Input::get('address'));
$location->address2 = e(Input::get('address2'));
$location->city = e(Input::get('city'));
$location->state = e(Input::get('state'));
$location->country = e(Input::get('country'));
$location->zip = e(Input::get('zip'));
$location->country = e(Input::get('country'));
$location->zip = e(Input::get('zip'));
// Was the asset created?
if($location->save()) {
// Redirect to the saved location page
return Redirect::to("admin/settings/locations/")->with('success', Lang::get('admin/locations/message.update.success'));
}
}
}
// Redirect to the location management page
return Redirect::to("admin/settings/locations/$locationId/edit")->with('error', Lang::get('admin/locations/message.update.error'));
@@ -170,15 +189,12 @@ class LocationsController extends AdminController
}
if ($location->has_users() > 0) {
// Redirect to the asset management page
if ($location->has_users->count() > 0) {
return Redirect::to('admin/settings/locations')->with('error', Lang::get('admin/locations/message.assoc_users'));
} elseif ($location->childLocations->count() > 0) {
return Redirect::to('admin/settings/locations')->with('error', Lang::get('admin/locations/message.assoc_users'));
} else {
$location->delete();
// Redirect to the locations management page
return Redirect::to('admin/settings/locations')->with('success', Lang::get('admin/locations/message.delete.success'));
}
+9 -8
View File
@@ -57,14 +57,19 @@ class ModelsController extends AdminController
public function postCreate()
{
// get the POST data
$new = Input::all();
// Create a new manufacturer
$model = new Model;
$validator = Validator::make(Input::all(), $model->validationRules());
// attempt validation
if ($model->validate($new)) {
if ($validator->fails())
{
// The given data did not pass validation
return Redirect::back()->withInput()->withErrors($validator->messages());
}
// attempt validation
else {
if ( e(Input::get('depreciation_id')) == '') {
$model->depreciation_id = 0;
@@ -103,10 +108,6 @@ class ModelsController extends AdminController
// Redirect to the new model page
return Redirect::to("hardware/models")->with('success', Lang::get('admin/models/message.create.success'));
}
} else {
// failure
$errors = $model->errors();
return Redirect::back()->withInput()->withErrors($errors);
}
// Redirect to the model create page
+25 -19
View File
@@ -11,6 +11,9 @@ use Location;
use Redirect;
use Response;
use Actionlog;
use Setting;
use League\Csv\Writer;
use League\Csv\Reader;
class ReportsController extends AdminController
{
@@ -147,6 +150,9 @@ class ReportsController extends AdminController
// Grab all the assets
$assets = Asset::with('model','assigneduser','assetstatus','defaultLoc','assetlog')->orderBy('created_at', 'DESC')->get();
$csv = \League\Csv\Writer::createFromFileObject(new \SplTempFileObject());
$csv->setOutputBOM(Reader::BOM_UTF16_BE);
$rows = array();
// Create the header row
@@ -161,8 +167,9 @@ class ReportsController extends AdminController
Lang::get('admin/hardware/table.book_value'),
Lang::get('admin/hardware/table.diff')
);
$header = array_map('trim', $header);
$rows[] = implode($header, ',');
//we insert the CSV header
$csv->insertOne($header);
// Create a row per asset
foreach ($assets as $asset) {
@@ -182,7 +189,7 @@ class ReportsController extends AdminController
if (($asset->assigned_to > 0) && ($asset->assigneduser->location_id > 0)) {
$location = Location::find($asset->assigneduser->location_id);
if ($location->city) {
$row[] = '"'.$location->city . ', ' . $location->state.'"';
$row[] = $location->city . ', ' . $location->state;
} elseif ($location->name) {
$row[] = $location->name;
} else {
@@ -192,25 +199,24 @@ class ReportsController extends AdminController
$row[] = ''; // Empty string if location is not set
}
if ($asset->assetloc) {
$currency = $asset->assetloc->currency;
} else {
$currency = Setting::first()->default_currency;
}
$row[] = $asset->purchase_date;
$row[] = '"'.Lang::get('general.currency').number_format($asset->purchase_cost).'"';
$row[] = '"'.Lang::get('general.currency').number_format($asset->getDepreciatedValue()).'"';
$row[] = '"-'.Lang::get('general.currency').number_format(($asset->purchase_cost - $asset->getDepreciatedValue())).'"';
$rows[] = implode($row, ',');
$row[] = $currency.number_format($asset->purchase_cost);
$row[] = $currency.number_format($asset->getDepreciatedValue());
$row[] = $currency.number_format(($asset->purchase_cost - $asset->getDepreciatedValue()));
$csv->insertOne($row);
}
// spit out a csv
$csv = implode($rows, "\n");
$csv->output('depreciation-report-'.date('Y-m-d').'.csv');
die;
$response = Response::make($csv, 200);
$response->header('Content-Type', 'text/csv');
$response->header('Content-disposition', 'attachment;filename=report.csv');
return $response;
}
/**
@@ -231,8 +237,8 @@ class ReportsController extends AdminController
->get();
return View::make('backend/reports/activity', compact('log_actions'));
}
/**
* Show Report for Licenses
*
@@ -12,6 +12,7 @@ use Validator;
use View;
use Image;
use Config;
use Response;
class SettingsController extends AdminController
{
@@ -71,6 +72,7 @@ class SettingsController extends AdminController
"logo" => 'mimes:jpeg,bmp,png,gif',
"alert_email" => 'email',
"slack_endpoint" => 'url',
"default_currency" => 'required',
"slack_channel" => 'regex:/(?<!\w)#\w+/',
"slack_botname" => 'alpha_dash',
);
@@ -117,6 +119,7 @@ class SettingsController extends AdminController
$setting->qr_code = e(Input::get('qr_code', '0'));
$setting->barcode_type = e(Input::get('barcode_type'));
$setting->load_remote = e(Input::get('load_remote', '0'));
$setting->default_currency = e(Input::get('default_currency', '$'));
$setting->qr_text = e(Input::get('qr_text'));
$setting->auto_increment_prefix = e(Input::get('auto_increment_prefix'));
$setting->auto_increment_assets = e(Input::get('auto_increment_assets', '0'));
@@ -141,6 +144,63 @@ class SettingsController extends AdminController
}
/**
* Generate the backup page
*
* @return View
**/
public function getBackups()
{
$path = Config::get('backup::path');
$files = array();
if ($handle = opendir($path)) {
/* This is the correct way to loop over the directory. */
while (false !== ($entry = readdir($handle))) {
clearstatcache();
if (substr(strrchr($entry,'.'),1)=='zip') {
$files[] = array(
'filename' => $entry,
'filesize' => Setting::fileSizeConvert(filesize(Config::get('backup::path').$entry)),
'modified' => filemtime(Config::get('backup::path').$entry)
);
}
}
closedir($handle);
}
return View::make('backend/settings/backups', compact('path','files'));
}
/**
* Download the dump file
*
* @param int $assetId
* @return View
**/
public function downloadFile($filename = null)
{
$file = Config::get('backup::path').'/'.$filename;
// the license is valid
if (file_exists($file)) {
return Response::download($file);
} else {
// Prepare the error message
$error = Lang::get('admin/settings/message.does_not_exist');
// Redirect to the licence management page
return Redirect::route('settings/backups')->with('error', $error);
}
}
}
+77 -45
View File
@@ -34,8 +34,9 @@ class UsersController extends AdminController
protected $validationRules = array(
'first_name' => 'required|alpha_space|min:2',
'last_name' => 'required|alpha_space|min:2',
'location_id' => 'required',
'email' => 'required|email|unique:users,email',
'location_id' => 'numeric',
'username' => 'required|min:2|unique:users,username',
'email' => 'email|unique:users,email',
'password' => 'required|min:6',
'password_confirm' => 'required|min:6|same:password',
);
@@ -261,8 +262,15 @@ class UsersController extends AdminController
return Redirect::route('users')->with('error', $error);
}
//
$this->validationRules['email'] = "required|email|unique:users,email,{$user->email},email";
//Check if username is the same then unset validationRules
if (Input::get('username') == $user->username) {
unset($this->validationRules['username']);
}
//Check if email is the same then unset validationRules
if ($user->email == Input::get('email')) {
unset($this->validationRules['email']);
}
// Do we want to update the user password?
if ( ! $password = Input::get('password')) {
@@ -284,8 +292,10 @@ class UsersController extends AdminController
try {
// Update the user
$user->first_name = Input::get('first_name');
$user->first_name = Input::get('first_name');
$user->last_name = Input::get('last_name');
$user->username = Input::get('username');
$user->email = Input::get('email');
$user->employee_num = Input::get('employee_num');
$user->activated = Input::get('activated', $user->activated);
$user->permissions = Input::get('permissions');
@@ -293,7 +303,7 @@ class UsersController extends AdminController
$user->phone = Input::get('phone');
$user->location_id = Input::get('location_id');
$user->manager_id = Input::get('manager_id');
$user->notes = Input::get('notes');
$user->notes = Input::get('notes');
if ($user->manager_id == "") {
$user->manager_id = NULL;
@@ -309,11 +319,6 @@ class UsersController extends AdminController
$user->password = $password;
}
// Do we want to update the user email?
if (!Config::get('app.lock_passwords')) {
$user->email = Input::get('email');
}
// Get the current user groups
$userGroups = $user->groups()->lists('group_id', 'group_id');
@@ -456,10 +461,12 @@ class UsersController extends AdminController
public function getView($userId = null)
{
$user = Sentry::getUserProvider()->createModel()->find($userId);
$user = User::with('assets','assets.model','consumables','accessories','licenses','userloc')->find($userId);
$userlog = $user->userlog->load('assetlog','consumablelog','assetlog.model','licenselog','accessorylog','userlog','adminlog');
if (isset($user->id)) {
return View::make('backend/users/view', compact('user'));
return View::make('backend/users/view', compact('user','userlog'));
} else {
// Prepare the error message
$error = Lang::get('admin/users/message.user_not_found', compact('id' ));
@@ -632,20 +639,22 @@ class UsersController extends AdminController
try {
// Check if this email already exists in the system
$user = DB::table('users')->where('email', $row[2])->first();
$user = DB::table('users')->where('username', $row[2])->first();
if ($user) {
$duplicates .= $row[2].', ';
} else {
$newuser = array(
'first_name' => $row[0],
'last_name' => $row[1],
'email' => $row[2],
'password' => $pass,
'activated' => $activated,
'permissions' => '{"user":1}',
'notes' => 'Imported user'
);
$newuser = array(
'first_name' => $row[0],
'last_name' => $row[1],
'username' => $row[2],
'email' => $row[3],
'password' => $pass,
'activated' => $activated,
'location_id' => $row[4],
'permissions' => '{"user":1}',
'notes' => 'Imported user'
);
DB::table('users')->insert($newuser);
@@ -658,18 +667,19 @@ class UsersController extends AdminController
$updateuser->save();
if (Input::get('email_user')==1) {
if (((Input::get('email_user')==1) && !Config::get('app.lock_passwords'))) {
// Send the credentials through email
if ($row[3]!='') {
$data = array();
$data['username'] = $row[2];
$data['first_name'] = $row[0];
$data['password'] = $pass;
$data = array();
$data['email'] = $row[2];
$data['first_name'] = $row[0];
$data['password'] = $pass;
Mail::send('emails.send-login', $data, function ($m) use ($newuser) {
$m->to($newuser['email'], $newuser['first_name'] . ' ' . $newuser['last_name']);
$m->subject('Welcome ' . $newuser['first_name']);
});
Mail::send('emails.send-login', $data, function ($m) use ($newuser) {
$m->to($newuser['email'], $newuser['first_name'] . ' ' . $newuser['last_name']);
$m->subject('Welcome ' . $newuser['first_name']);
});
}
}
}
@@ -691,7 +701,7 @@ class UsersController extends AdminController
public function getDatatable($status = null)
{
$users = User::with('assets','licenses','manager','userloc','sentryThrottle');
$users = User::with('assets','accessories','consumables','licenses','manager','sentryThrottle','groups','userloc');
switch ($status) {
case 'deleted':
@@ -737,7 +747,12 @@ class UsersController extends AdminController
->addColumn('email',function($users)
{
return '<a title="'.$users->email.'" href="mailto:'.$users->email.'">'.$users->email.'</a>';
if ($users->email) {
return '<div class="text-center"><a title="'.$users->email.'" href="mailto:'.$users->email.'"><i class="fa fa-envelope fa-lg"></i></div>';
} else {
return '';
}
})
->addColumn('manager',function($users)
@@ -747,12 +762,13 @@ class UsersController extends AdminController
}
})
->addColumn('location',function($users)
{
if ($users->userloc) {
return '<a title="'.$users->userloc->name.'" href="users/'.$users->location_id.'/view">'.$users->userloc->name.'</a>';
}
})
->addColumn('location',function($users)
{
if ($users->userloc) {
return $users->userloc->name;
}
})
->addColumn('assets',function($users)
{
@@ -763,14 +779,30 @@ class UsersController extends AdminController
{
return $users->licenses->count();
})
->addColumn('activated',function($users)
->addColumn('accessories',function($users)
{
return $users->isActivated() ? '<i class="fa fa-check"></i>' : '';
return $users->accessories->count();
})
->addColumn('consumables',function($users)
{
return $users->consumables->count();
})
->addColumn('groups',function($users)
{
$group_names = '';
foreach ($users->groups as $group) {
$group_names .= '<a href="'.Config::get('app.url').'/admin/groups/'.$group->id.'/edit" class="label label-default">'.$group->name.'</a> ';
}
return $group_names;
})
->addColumn($actions)
->searchColumns('name','email','manager','activated','licenses','location','assets')
->orderColumns('name','email','manager','activated', 'licenses','location','assets')
->searchColumns('name','email','manager','activated','groups','location')
->orderColumns('name','email','manager','activated', 'licenses','assets','accessories','consumables','groups','location')
->make();
}
@@ -17,13 +17,13 @@ class AddAccessoriesTable extends Migration {
$table->increments('id');
$table->string('name')->nullable()->default(NULL);
$table->integer('category_id')->nullable()->default(NULL);
$table->integer('user_id')->nullable()->default(NULL);
$table->integer('qty')->default(0);
$table->boolean('requestable')->default(0);
$table->integer('user_id')->nullable()->default(NULL);
$table->integer('qty')->default(0);
$table->boolean('requestable')->default(0);
$table->timestamps();
$table->softDeletes();
});
Schema::table('asset_logs', function ($table) {
$table->integer('accessory_id')->nullable()->default(NULL);
});
@@ -39,7 +39,7 @@ class AddAccessoriesTable extends Migration {
{
//
Schema::drop('accessories');
Schema::table('asset_logs', function ($table) {
$table->dropColumn('accessory_id');
});
@@ -13,18 +13,18 @@ class UpdateAcceptedAtToAcceptanceId extends Migration {
public function up()
{
//
Schema::table('asset_logs', function ($table) {
$table->integer('accepted_id')->nullable()->default(NULL);
});
$results = DB::select('select invitation.id AS invitation_id, acceptance.id AS acceptance_id FROM asset_logs invitation INNER JOIN asset_logs acceptance ON (invitation.checkedout_to=acceptance.checkedout_to AND invitation.asset_id=acceptance.asset_id) WHERE invitation.action_type="checkout" AND acceptance.action_type="accepted"');
foreach ($results as $result) {
$update = DB::update('update asset_logs set accepted_id=? where id=?', [$result->acceptance_id, $result->invitation_id]);
$update = DB::update('update asset_logs set accepted_id=? where id=?', [$result->acceptance_id, $result->invitation_id]);
}
}
/**
@@ -38,7 +38,7 @@ class UpdateAcceptedAtToAcceptanceId extends Migration {
Schema::table('asset_logs', function ($table) {
$table->dropColumn('accepted_id');
});
}
}
@@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddParentIdToLocationsTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('locations', function(Blueprint $table)
{
//
$table->integer('parent_id')->nullable()->default(NULL);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('locations', function(Blueprint $table)
{
//
$table->dropColumn('parent_id');
});
}
}
@@ -0,0 +1,29 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class FixDefaultForUserNotes extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::statement('ALTER TABLE `'.DB::getTablePrefix().'users` MODIFY `notes` varchar(255) DEFAULT NULL;');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
DB::statement('ALTER TABLE `'.DB::getTablePrefix().'users` MODIFY `notes` varchar(255);');
}
}
@@ -0,0 +1,63 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateConsumables extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
//
Schema::create('consumables', function ($table) {
$table->increments('id');
$table->string('name')->nullable()->default(NULL);
$table->integer('category_id')->nullable()->default(NULL);
$table->integer('location_id')->nullable()->default(NULL);
$table->integer('user_id')->nullable()->default(NULL);
$table->integer('qty')->default(0);
$table->boolean('requestable')->default(0);
$table->timestamps();
$table->softDeletes();
});
Schema::table('asset_logs', function ($table) {
$table->integer('consumable_id')->nullable()->default(NULL);
});
Schema::create('consumables_users', function ($table) {
$table->increments('id');
$table->integer('user_id')->nullable()->default(NULL);
$table->integer('consumable_id')->nullable()->default(NULL);
$table->integer('assigned_to')->nullable()->default(NULL);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
Schema::drop('consumables');
Schema::table('asset_logs', function ($table) {
$table->dropColumn('consumable_id');
});
Schema::drop('consumables_users');
}
}
@@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class MoveEmailToUsername extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
//
DB::update('UPDATE `'.DB::getTablePrefix().'users` SET `username`=`email`');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
//DB::statement('ALTER TABLE `users` MODIFY `notes` varchar(255);');
}
}
@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class MakeEmailNullable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::statement('ALTER TABLE `'.DB::getTablePrefix().'users` MODIFY `email` varchar(255) DEFAULT NULL;');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
DB::statement('ALTER TABLE `'.DB::getTablePrefix().'users` MODIFY `email` varchar(255) NOT NULL;');
}
}
@@ -0,0 +1,56 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddCurrencyToSettingsAndLocations extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('settings', function(Blueprint $table)
{
$table->string('default_currency',10)->nullable()->default(NULL);
});
DB::update('UPDATE `'.DB::getTablePrefix().'settings` SET `default_currency`="'. Lang::get('general.currency').'"');
Schema::table('locations', function(Blueprint $table)
{
$table->string('currency',10)->nullable()->default(NULL);
});
DB::update('UPDATE `'.DB::getTablePrefix().'locations` SET `currency`="'. Lang::get('general.currency').'"');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
Schema::table('settings', function(Blueprint $table)
{
//
$table->dropColumn('default_currency');
});
Schema::table('locations', function(Blueprint $table)
{
//
$table->dropColumn('currency');
});
}
}
+7 -7
View File
@@ -72,7 +72,7 @@ class AssetsSeeder extends Seeder
'assigned_to' => NULL,
'physical' => 1,
'archived' => 0,
'status_id' => 2,
'status_id' => 2,
'notes' => '',
'deleted_at' => NULL,
'archived' => '0',
@@ -139,7 +139,7 @@ class AssetsSeeder extends Seeder
'created_at' => $date->modify('-10 day'),
'updated_at' => $date->modify('-3 day'),
'user_id' => 2,
'assigned_to' => 2,
'assigned_to' => 1,
'physical' => 1,
'archived' => 0,
'status_id' => 1,
@@ -162,10 +162,10 @@ class AssetsSeeder extends Seeder
'created_at' => $date->modify('-10 day'),
'updated_at' => $date->modify('-3 day'),
'user_id' => 2,
'assigned_to' => 2,
'assigned_to' => 1,
'physical' => 1,
'archived' => 0,
'status_id' => 1,
'status_id' => 1,
'notes' => '',
'deleted_at' => NULL,
'archived' => '0',
@@ -211,7 +211,7 @@ class AssetsSeeder extends Seeder
'assigned_to' => NULL,
'physical' => 1,
'archived' => 0,
'status_id' => '2',
'status_id' => '2',
'notes' => '',
'deleted_at' => NULL,
'archived' => '0',
@@ -234,7 +234,7 @@ class AssetsSeeder extends Seeder
'assigned_to' => NULL,
'physical' => 1,
'archived' => 1,
'status_id' => '4',
'status_id' => '2',
'notes' => '',
'deleted_at' => NULL,
'archived' => '0',
@@ -257,7 +257,7 @@ class AssetsSeeder extends Seeder
'assigned_to' => NULL,
'physical' => 1,
'archived' => 1,
'status_id' => '3',
'status_id' => '2',
'notes' => '',
'deleted_at' => NULL,
'archived' => '0',
+2 -2
View File
@@ -5,7 +5,7 @@ return array(
'about_accessories_text' => 'الملحقات هي أي شيء تقوم بتسليمه للمستخدمين لكنه لا يحتوي على رقم تسلسلي (أو أنك لست بحاجة إلى تتبعه بشكل خاص). مثال: فأرة الحاسوب أو لوحة المفاتيح.',
'accessory_category' => 'فئة الملحق',
'accessory_name' => 'اسم الملحق',
'create' => 'Create Accessory',
'create' => 'إنشاء فئة جديدة',
'eula_text' => 'إنشاء اتفاقية جديدة',
'eula_text_help' => 'يسمح لك هذا الحقل بتخصيص الاتفاقيات لأنواع معينة من الأصول. اذا كنت تمتلك اتفاقية واحدة لجميع أصولك يمكنك أن تقوم بتأشير المربع في الأسفل لاستخدام الاتفاقية الافتراضية.',
'require_acceptance' => 'مطالبة المستخدمين بتأكيد قبولهم الأصول في هذه الفئة.',
@@ -13,7 +13,7 @@ return array(
'qty' => 'الكمية',
'total' => 'المجموع',
'remaining' => 'المتاح',
'update' => 'Update Accessory',
'update' => 'تحديث الفئة',
'use_default_eula' => 'قم باستعمال <a href="#" data-toggle="modal" data-target="#eulaModal">primary default EULA</a>.',
'use_default_eula_disabled' => '<del>Use the primary default EULA instead.</del> No primary default EULA is set. Please add one in Settings.',
@@ -1,14 +0,0 @@
<?php
return [
'asset_maintenance_type' => 'Asset Maintenance Type',
'title' => 'Title',
'start_date' => 'Start Date',
'completion_date' => 'Completion Date',
'cost' => 'Cost',
'is_warranty' => 'Warranty Improvement',
'asset_maintenance_time' => 'Asset Maintenance Time (in days)',
'notes' => 'Notes',
'update' => 'Update Asset Maintenance',
'create' => 'Create Asset Maintenance'
];
@@ -1,11 +0,0 @@
<?php
return [
'asset_maintenances' => 'Asset Maintenances',
'edit' => 'Edit Asset Maintenance',
'delete' => 'Delete Asset Maintenance',
'view' => 'View Asset Maintenance Details',
'repair' => 'Repair',
'maintenance' => 'Maintenance',
'upgrade' => 'Upgrade'
];
@@ -1,17 +0,0 @@
<?php
return [
'not_found' => 'Asset Maintenance you were looking for was not found!',
'delete' => [
'confirm' => 'Are you sure you wish to delete this asset maintenance?',
'error' => 'There was an issue deleting the asset maintenance. Please try again.',
'success' => 'The asset maintenance was deleted successfully.'
],
'create' => [
'error' => 'Asset Maintenance was not created, please try again.',
'success' => 'Asset Maintenance created successfully.'
],
'asset_maintenance_incomplete' => 'Not Completed Yet',
'warranty' => 'Warranty',
'not_warranty' => 'Not Warranty',
];
@@ -1,9 +0,0 @@
<?php
return [
'title' => 'Asset Maintenance',
'asset_name' => 'Asset Name',
'supplier_name' => 'Supplier Name',
'is_warranty' => 'Warranty',
'dl_csv' => 'Download CSV'
];
-1
View File
@@ -5,7 +5,6 @@ return array(
'about_categories' => 'تصنيفات الأصول تساعدك على ترتيب الأصول. من الأمثلة على التصنيفات &quot; مكاتب &quot;، &quot;أجهزة الكمبيوتر المحمولة &quot;، &quot;الهواتف النقالة &quot;، &quot;أجهزة لوحية &quot; وهكذا، كما يمكنك استخدام التصنيفات بأي طريقة تناسبك. ',
'asset_categories' => 'التصنيفات',
'category_name' => 'اسم التصنيف',
'checkin_email' => 'Send email to user on checkin.',
'clone' => 'Clone Category',
'create' => 'إنشاء تصنيف',
'edit' => 'Edit Category',
@@ -3,9 +3,6 @@
return array(
'about_consumables_title' => 'About Consumables',
'about_consumables_text' => 'Consumables are anything purchased that will be used up over time. For example, printer ink or copier paper.',
'consumable_name' => 'Consumable Name',
'create' => 'Create Consumable',
'remaining' => 'Remaining',
'total' => 'Total',
'update' => 'Update Consumable',
);
+1 -2
View File
@@ -17,10 +17,9 @@ return array(
'default_location' => 'Default Location',
'eol_date' => 'EOL Date',
'eol_rate' => 'EOL Rate',
'expected_checkin' => 'Expected Checkin Date',
'expires' => 'Expires',
'fully_depreciated' => 'Fully Depreciated',
'help_checkout' => 'If you wish to assign this asset immediately, select "Ready to Deploy" from the status list above. ',
'help_checkout' => 'If you wish to assign this asset immediately, you should select "Ready to Deploy" from the status list above, or unexpected things may happen. ',
'mac_address' => 'MAC Address',
'manufacturer' => 'Manufacturer',
'model' => 'Model',
-2
View File
@@ -12,6 +12,4 @@ return array(
'address' => 'Address',
'zip' => 'Postal Code',
'locations' => 'Locations',
'parent' => 'Parent',
'currency' => 'Location Currency', // this is deprecated
);
-1
View File
@@ -10,7 +10,6 @@ return array(
'backups' => 'Backups',
'barcode_type' => 'Barcode Type',
'barcode_settings' => 'Barcode Settings',
'default_currency' => 'Default Currency',
'default_eula_text' => 'Default EULA',
'default_eula_help_text' => 'You can also associate custom EULAs to specific asset categories.',
'display_asset_name' => 'Display Asset Name',
+9 -10
View File
@@ -3,14 +3,13 @@
return array(
'assets_user' => 'الجهاز مسجل بعهدة :name',
'clone' => 'نسخ المستخدم',
'contact_user' => 'اتصل بـ :name',
'edit' => 'تعديل المستخدم',
'filetype_info' => 'Allowed filetypes are png, gif, jpg, jpeg, doc, docx, pdf, txt, zip, and rar.',
'history_user' => 'الأرشيف الخاص بـ :name',
'last_login' => 'آخر دخول للمستخدم',
'software_user' => 'البرامج المسجلة لـ :name',
'view_user' => 'عرض المستخدم :name',
'usercsv' => 'ملف CSV',
'assets_user' => 'الجهاز مسجل بعهدة :name',
'clone' => 'نسخ المستخدم',
'contact_user' => 'اتصل بـ :name',
'edit' => 'تعديل المستخدم',
'history_user' => 'الأرشيف الخاص بـ :name',
'last_login' => 'آخر دخول للمستخدم',
'software_user' => 'البرامج المسجلة لـ :name',
'view_user' => 'عرض المستخدم :name',
'usercsv' => 'ملف CSV',
);
+6 -21
View File
@@ -2,14 +2,12 @@
return array(
'accepted' => 'You have successfully accepted this asset.',
'declined' => 'You have successfully declined this asset.',
'user_exists' => 'المستخدم موجود مسبقاً!',
'user_not_found' => 'المستخدم [id:] غير موجود.',
'user_login_required' => 'حقل "الدخول" مطلوب',
'user_password_required' => 'كلمة السر مطلوبة.',
'insufficient_permissions' => 'صلاحيات غير كافية.',
'user_deleted_warning' => 'تم حذف المستخدم. سيكون عليك استعادة هذا المستخدم للتعديل عليه او تسليمه اجهزة جديدة.',
'user_exists' => 'المستخدم موجود مسبقاً!',
'user_not_found' => 'المستخدم [id:] غير موجود.',
'user_login_required' => 'حقل "الدخول" مطلوب',
'user_password_required' => 'كلمة السر مطلوبة.',
'insufficient_permissions' => 'صلاحيات غير كافية.',
'user_deleted_warning' => 'تم حذف المستخدم. سيكون عليك استعادة هذا المستخدم للتعديل عليه او تسليمه اجهزة جديدة.',
'success' => array(
@@ -31,19 +29,6 @@ return array(
'unsuspend' => 'حدث خطأ ما أثناء إلغاء التعليق عن المستخدم. حاول مرة أخرى.',
'import' => 'حدث خطأ أثناء استيراد المستخدمين. حاول مرة أخرى.',
'asset_already_accepted' => 'هذا الجهاز تم قبوله مسبقاً.',
'accept_or_decline' => 'You must either accept or decline this asset.',
),
'deletefile' => array(
'error' => 'File not deleted. Please try again.',
'success' => 'File successfully deleted.',
),
'upload' => array(
'error' => 'File(s) not uploaded. Please try again.',
'success' => 'File(s) successfully uploaded.',
'nofiles' => 'You did not select any files for upload',
'invalidfiles' => 'One or more of your files is too large or is a filetype that is not allowed. Allowed filetypes are png, gif, jpg, doc, docx, pdf, and txt.',
),
);
+1 -1
View File
@@ -3,7 +3,7 @@
return array(
'account_already_exists' => 'An account with the this email already exists.',
'account_not_found' => 'The username or password is incorrect.',
'account_not_found' => 'The email account or password is incorrect.',
'account_not_activated' => 'This user account is not activated.',
'account_suspended' => 'This user account is suspended.',
'account_banned' => 'This user account is banned.',
+6 -13
View File
@@ -1,6 +1,8 @@
<?php
return [
return array(
'accessories' => 'Accessories',
'accessory' => 'Accessory',
'action' => 'Action',
@@ -19,7 +21,6 @@
'avatar_delete' => 'حذف الصورة الرمزية',
'avatar_upload' => 'رفع صورة رمزية',
'back' => 'الرجوع للخلف',
'bad_data' => 'Nothing found. Maybe bad data?',
'cancel' => 'إلغاء',
'categories' => 'Categories',
'category' => 'Category',
@@ -35,7 +36,7 @@
'create' => 'إضافة',
'created_asset' => 'الأصول المضافة',
'created_at' => 'أنشئت في',
'currency' => '$', // this is deprecated
'currency' => '$',
'current' => 'الحالي',
'custom_report' => 'Custom Asset Report',
'dashboard' => 'Dashboard',
@@ -59,9 +60,6 @@
'id' => 'الرقم',
'image_delete' => 'حذف الصورة',
'image_upload' => 'رفع صورة',
'asset_maintenance' => 'Asset Maintenance',
'asset_maintenance_report' => 'Asset Maintenance Report',
'asset_maintenances' => 'Asset Maintenances',
'item' => 'Item',
'last' => 'Last',
'last_name' => 'الإسم الأخير',
@@ -71,8 +69,6 @@
'licenses' => 'الرخص',
'list_all' => 'عرض الكل',
'loading' => 'Loading',
'lock_passwords' => 'This field cannot be edited in this installation.',
'feature_disabled' => 'This feature has been disabled for this installation.',
'location' => 'الموقع',
'locations' => 'المواقع',
'logout' => 'تسجيل خروج',
@@ -110,7 +106,6 @@
'select_supplier' => 'Select a Supplier',
'select_user' => 'Select a User',
'select_date' => 'Select Date',
'select_statuslabel' => 'Select Status',
'settings' => 'الإعدادات',
'sign_in' => 'تسجيل الدخول',
'site_name' => 'إسم الموقع',
@@ -123,11 +118,8 @@
'type' => 'Type',
'undeployable' => 'غير قابلة للتوزيع',
'unknown_admin' => 'إداري غير معروف',
'update' => 'Update',
'uploaded' => 'Uploaded',
'user' => 'المستخدم',
'accepted' => 'accepted',
'declined' => 'declined',
'users' => 'Users',
'viewassets' => 'عرض الأصول المسجلة',
'website' => 'الموقع',
@@ -135,4 +127,5 @@
'years' => 'سنوات',
'yes' => 'نعم',
'zip' => 'الرمز البريدي',
];
);
+1 -1
View File
@@ -77,7 +77,7 @@ return array(
*/
'custom' => array(),
'alpha_space' => "The :attribute field contains a character that is not allowed.",
'alpha_space' => "The :attribute field may only contain letters, commas, spaces and dashes.",
/*
|--------------------------------------------------------------------------
+2 -2
View File
@@ -5,7 +5,7 @@ return array(
'about_accessories_text' => 'Příslušenství je cokoliv, co předáte uživatelům, ale nemá to sérivoé číslo (nebo to neevidujete). Např. myš, klávesnice.',
'accessory_category' => 'Kategorie příslušenství',
'accessory_name' => 'Název příslušenství',
'create' => 'Vytvoř příslušenství',
'create' => 'Vytvořit kategorii',
'eula_text' => 'Kategorie EULA',
'eula_text_help' => 'Toto pole umožňuje upravit EULA pro různé druhy majetku. Pokud máte pouze jeden typ pro všechen majetek, můžete zaškrtnout položku níže pro použití jako výchozí.',
'require_acceptance' => 'Požadovat potvrzení převzetí majetku v této kategorii.',
@@ -13,7 +13,7 @@ return array(
'qty' => 'Množství',
'total' => 'CELKEM',
'remaining' => 'Dostupný',
'update' => 'Aktualizace příslušenství',
'update' => 'Upravit kategorii',
'use_default_eula' => 'Použít <a href="#" data-toggle="modal" data-target="#eulaModal">primární výchozí EULA</a>.',
'use_default_eula_disabled' => '<del>Použít výchozí EULA.</del>
Žádná výchozí EULA nenastavena. Zadejte novou v nastevení.',
@@ -1,14 +0,0 @@
<?php
return [
'asset_maintenance_type' => 'Asset Maintenance Type',
'title' => 'Title',
'start_date' => 'Začátek',
'completion_date' => 'Completion Date',
'cost' => 'Cena',
'is_warranty' => 'Warranty Improvement',
'asset_maintenance_time' => 'Asset Maintenance Time (in days)',
'notes' => 'Poznámky',
'update' => 'Update Asset Maintenance',
'create' => 'Create Asset Maintenance'
];
@@ -1,11 +0,0 @@
<?php
return [
'asset_maintenances' => 'Asset Maintenances',
'edit' => 'Edit Asset Maintenance',
'delete' => 'Delete Asset Maintenance',
'view' => 'View Asset Maintenance Details',
'repair' => 'Oprava',
'maintenance' => 'Maintenance',
'upgrade' => 'Upgradovat'
];
@@ -1,17 +0,0 @@
<?php
return [
'not_found' => 'Asset Maintenance you were looking for was not found!',
'delete' => [
'confirm' => 'Are you sure you wish to delete this asset maintenance?',
'error' => 'There was an issue deleting the asset maintenance. Please try again.',
'success' => 'The asset maintenance was deleted successfully.'
],
'create' => [
'error' => 'Asset Maintenance was not created, please try again.',
'success' => 'Asset Maintenance created successfully.'
],
'asset_maintenance_incomplete' => 'Not Completed Yet',
'warranty' => 'Záruka',
'not_warranty' => 'Bez záruky',
];
@@ -1,9 +0,0 @@
<?php
return [
'title' => 'Asset Maintenance',
'asset_name' => 'Název majetku',
'supplier_name' => 'Dodavatel',
'is_warranty' => 'Záruka',
'dl_csv' => 'Stáhnout CSV'
];
+1 -2
View File
@@ -5,12 +5,11 @@ return array(
'about_categories' => 'Kategorie pomáhají organizovat majetek. Takovou kategorii může být např. &quot;Desktopy&quot;, &quot;Notebooky&quot;, &quot;Mobilní telefony&quot;, &quot;Tablety&quot;, apod., kategorie můžete ale používat jakkoliv Vám to bude dávat smysl. ',
'asset_categories' => 'Kategorie majetku',
'category_name' => 'Jméno kategorie',
'checkin_email' => 'Send email to user on checkin.',
'clone' => 'Klonovat Kategorii',
'create' => 'Vytvořit kategorii',
'edit' => 'Upravit Kategorii',
'eula_text' => 'EULA Kategorie',
'eula_text_help' => 'Toto pole umožňuje upravit EULA pro různé druhy majetku. Pokud máte pouze jeden typ pro všechen majetek, můžete zaškrtnout položku níže pro použití jako výchozí.',
'eula_text_help' => 'This field allows you to customize your EULAs for specific types of assets. If you only have one EULA for all of your assets, you can check the box below to use the primary default.',
'require_acceptance' => 'Žádat uživatelé o potvrzení převzetí majetku v této kategorii.',
'required_acceptance' => 'Uživateli bude zaslán email s odkazem pro potvrzení přijetí této položky.',
'required_eula' => 'Tomuto uživateli bude zaslána kopie EUAL emailem',
+2 -5
View File
@@ -3,9 +3,6 @@
return array(
'about_consumables_title' => 'About Consumables',
'about_consumables_text' => 'Consumables are anything purchased that will be used up over time. For example, printer ink or copier paper.',
'consumable_name' => 'Consumable Name',
'create' => 'Create Consumable',
'remaining' => 'Zbývá',
'total' => 'Celkem',
'update' => 'Update Consumable',
'remaining' => 'Remaining',
'total' => 'Total',
);
+1 -2
View File
@@ -17,10 +17,9 @@ return array(
'default_location' => 'Výchozí umístění',
'eol_date' => 'Konec životnosti',
'eol_rate' => 'Míra ukončení životnosti',
'expected_checkin' => 'Expected Checkin Date',
'expires' => 'Expiruje',
'fully_depreciated' => 'Plně odepsané',
'help_checkout' => 'If you wish to assign this asset immediately, select "Ready to Deploy" from the status list above. ',
'help_checkout' => 'Pokud si přejete přiřadit majetek okamžitě, měli by jste ze seznamu stavů zvolit "Připraveno k přiděleni", nebo se může něco pokazit. ',
'mac_address' => 'MAC adresa',
'manufacturer' => 'Výrobce',
'model' => 'Model',
+2 -2
View File
@@ -25,7 +25,7 @@ return array(
'deletefile' => array(
'error' => 'File not deleted. Please try again.',
'success' => 'Soubor byl úspěšně smazán.',
'success' => 'File successfully deleted.',
),
'upload' => array(
@@ -39,7 +39,7 @@ return array(
'delete' => array(
'confirm' => 'Are you sure you wish to delete this asset?',
'error' => 'There was an issue deleting the asset. Please try again.',
'success' => 'Majetek byl úspěšně smazán.'
'success' => 'The asset was deleted successfully.'
),
'checkout' => array(
+16 -16
View File
@@ -2,27 +2,27 @@
return array(
'asset' => 'Majetek',
'asset' => 'Asset',
'checkin' => 'Checkin',
'cost' => 'Pořizovací cena',
'create' => 'Založ licenci',
'date' => 'Datum pořízení',
'cost' => 'Purchase Cost',
'create' => 'Create License',
'date' => 'Purchase Date',
'depreciation' => 'Depreciation',
'expiration' => 'Expirace',
'maintained' => 'Údržba',
'name' => 'Software',
'expiration' => 'Expiration Date',
'maintained' => 'Maintained',
'name' => 'Software Name',
'no_depreciation' => 'Do Not Depreciate',
'notes' => 'Poznámky',
'order' => 'Koupeno',
'notes' => 'Notes',
'order' => 'Order No.',
'purchase_order' => 'Purchase Order Number',
'reassignable' => 'Reassignable',
'remaining_seats' => 'Nasazeno',
'seats' => 'Počet licencí',
'serial' => 'Sériové číslo',
'supplier' => 'Dodavatel',
'termination_date' => 'Platná do',
'to_email' => 'Registrováno na Email',
'to_name' => 'Registrace na jméno',
'remaining_seats' => 'Remaining Seats',
'seats' => 'Seats',
'serial' => 'Serial',
'supplier' => 'Supplier',
'termination_date' => 'Termination Date',
'to_email' => 'Licensed to Email',
'to_name' => 'Licensed to Name',
'update' => 'Update License',
'checkout_help' => 'You must check a license out to a hardware asset or a person. You can select both, but the owner of the asset must match the person you\'re checking the asset out to.'
);
+6 -6
View File
@@ -5,16 +5,16 @@ return array(
'checkin' => 'Checkin License Seat',
'checkout_history' => 'Checkout History',
'checkout' => 'Checkout License Seat',
'edit' => 'Uprav licenci',
'edit' => 'Edit License',
'filetype_info' => 'Allowed filetypes are png, gif, jpg, jpeg, doc, docx, pdf, txt, zip, and rar.',
'clone' => 'Duplikovat licenci',
'history_for' => 'Historie uživatele ',
'clone' => 'Clone License',
'history_for' => 'History for ',
'in_out' => 'In/Out',
'info' => 'Informace o licenci',
'info' => 'License Info',
'license_seats' => 'License Seats',
'seat' => 'Seat',
'seats' => 'Seats',
'software_licenses' => 'Softwarové licence',
'software_licenses' => 'Software Licenses',
'user' => 'User',
'view' => 'Ukaž licenci',
'view' => 'View License',
);
+3 -3
View File
@@ -3,7 +3,7 @@
return array(
'does_not_exist' => 'License does not exist.',
'user_does_not_exist' => 'Uživatel neexistuje.',
'user_does_not_exist' => 'User does not exist.',
'asset_does_not_exist' => 'The asset you are trying to associate with this license does not exist.',
'owner_doesnt_match_asset' => 'The asset you are trying to associate with this license is owned by somene other than the person selected in the assigned to dropdown.',
'assoc_users' => 'This license is currently checked out to a user and cannot be deleted. Please check the license in first, and then try deleting again. ',
@@ -16,7 +16,7 @@ return array(
'deletefile' => array(
'error' => 'File not deleted. Please try again.',
'success' => 'Soubor byl úspěšně smazán.',
'success' => 'File successfully deleted.',
),
'upload' => array(
@@ -34,7 +34,7 @@ return array(
'delete' => array(
'confirm' => 'Are you sure you wish to delete this license?',
'error' => 'There was an issue deleting the license. Please try again.',
'success' => 'Licence byla úspěšně smazána.'
'success' => 'The license was deleted successfully.'
),
'checkout' => array(
+4 -4
View File
@@ -7,11 +7,11 @@ return array(
'id' => 'ID',
'license_email' => 'License Email',
'license_name' => 'Licensed To',
'purchase_date' => 'Pořízeno',
'purchased' => 'Zakoupeno',
'purchase_date' => 'Purchase Date',
'purchased' => 'Purchased',
'seats' => 'Seats',
'hardware' => 'Hardware',
'serial' => 'Sériové číslo',
'title' => 'Licence',
'serial' => 'Serial',
'title' => 'License',
);
-2
View File
@@ -12,6 +12,4 @@ return array(
'address' => 'Adresa',
'zip' => 'PSČ',
'locations' => 'Umístění',
'parent' => 'Parent',
'currency' => 'Location Currency', // this is deprecated
);
+5 -5
View File
@@ -3,15 +3,15 @@
return array(
'create' => 'Create Asset Model',
'created_at' => 'Vytvořeno',
'created_at' => 'Created at',
'eol' => 'EOL',
'modelnumber' => 'Modelová řada',
'modelnumber' => 'Model No.',
'name' => 'Asset Model Name',
'numassets' => 'Počet',
'numassets' => 'Assets',
'title' => 'Asset Models',
'update' => 'Update Asset Model',
'view' => 'View Asset Model',
'update' => 'Update Asset Model',
'clone' => 'Kopíruj modelovou řadu',
'edit' => 'Edituj model',
'clone' => 'Clone Model',
'edit' => 'Edit Model',
);
+1 -1
View File
@@ -1,5 +1,5 @@
<?php
return array(
'error' => 'Musíte vybrat alespoň jednu možnost.'
'error' => 'You must select at least ONE option.'
);
+1 -2
View File
@@ -7,10 +7,9 @@ return array(
'auto_increment_assets' => 'Vygenerovat zvyšující se ID majetku',
'auto_increment_prefix' => 'Předpona (volitnelná)',
'auto_incrementing_help' => 'Nastavte nejdříve automaticky se zvyšující ID majetku pro nastavení tohoto',
'backups' => 'Zálohy',
'backups' => 'Backups',
'barcode_type' => 'Tyo čárového kódu',
'barcode_settings' => 'Nastavení čárového kódu',
'default_currency' => 'Default Currency',
'default_eula_text' => 'Výchozí EULA',
'default_eula_help_text' => 'Můžete také spojit vlastní EULA se specifickými kategoriemi majetku.',
'display_asset_name' => 'Zobrazit název majetku',
+2 -2
View File
@@ -7,7 +7,7 @@ return array(
'create' => array(
'error' => 'Supplier was not created, please try again.',
'success' => 'Dodavatel úspěšně vytvořen.'
'success' => 'Supplier created successfully.'
),
'update' => array(
@@ -18,7 +18,7 @@ return array(
'delete' => array(
'confirm' => 'Are you sure you wish to delete this supplier?',
'error' => 'There was an issue deleting the supplier. Please try again.',
'success' => 'Dodavatel byl úspěšně smazán.'
'success' => 'Supplier was deleted successfully.'
)
);
+12 -12
View File
@@ -3,23 +3,23 @@
return array(
'address' => 'Supplier Address',
'assets' => 'Assets',
'city' => 'Město',
'contact' => 'Kontaktní osoba',
'country' => 'Země',
'create' => 'Nový dodavatel',
'city' => 'City',
'contact' => 'Contact Name',
'country' => 'Country',
'create' => 'Create Supplier',
'email' => 'Email',
'fax' => 'Fax',
'id' => 'ID',
'licenses' => 'Licence',
'name' => 'Dodavatel',
'notes' => 'Poznámky',
'phone' => 'Telefon',
'state' => 'Stát',
'suppliers' => 'Dodavatelé',
'licenses' => 'Licenses',
'name' => 'Supplier Name',
'notes' => 'Notes',
'phone' => 'Phone',
'state' => 'State',
'suppliers' => 'Suppliers',
'update' => 'Update Supplier',
'url' => 'URL',
'view' => 'Zobrazit dodavatele',
'view' => 'View Supplier',
'view_assets_for' => 'View Assets for',
'zip' => 'P',
'zip' => 'Postal Code',
);
+9 -10
View File
@@ -3,14 +3,13 @@
return array(
'assets_user' => 'Assets assigned to :name',
'clone' => 'Duplikuj uživatele',
'contact_user' => 'Kontakt na :name',
'edit' => 'Upravit uživatele',
'filetype_info' => 'Povolené přílohy: png, gif, jpg, jpeg, doc, docx, pdf, txt, zip, and rar.',
'history_user' => 'Historie:',
'last_login' => 'Poslední přihlášení',
'software_user' => 'Software Checked out to :name',
'view_user' => 'Zobraz uživatele',
'usercsv' => 'CSV soubor',
'assets_user' => 'Assets assigned to :name',
'clone' => 'Clone User',
'contact_user' => 'Contact :name',
'edit' => 'Edit User',
'history_user' => 'History for :name',
'last_login' => 'Last Login',
'software_user' => 'Software Checked out to :name',
'view_user' => 'View User :name',
'usercsv' => 'CSV file',
);
+8 -23
View File
@@ -2,22 +2,20 @@
return array(
'accepted' => 'You have successfully accepted this asset.',
'declined' => 'You have successfully declined this asset.',
'user_exists' => 'Uživatel již existuje!',
'user_not_found' => 'Uživatel [:id] neexistuje.',
'user_login_required' => 'The login field is required',
'user_password_required' => 'Je vyžadováno heslo.',
'insufficient_permissions' => 'Insufficient Permissions.',
'user_deleted_warning' => 'This user has been deleted. You will have to restore this user to edit them or assign them new assets.',
'user_exists' => 'User already exists!',
'user_not_found' => 'User [:id] does not exist.',
'user_login_required' => 'The login field is required',
'user_password_required' => 'The password is required.',
'insufficient_permissions' => 'Insufficient Permissions.',
'user_deleted_warning' => 'This user has been deleted. You will have to restore this user to edit them or assign them new assets.',
'success' => array(
'create' => 'Uživatel byl úspěšně vytvořen.',
'create' => 'User was successfully created.',
'update' => 'User was successfully updated.',
'delete' => 'User was successfully deleted.',
'ban' => 'User was successfully banned.',
'unban' => 'Uživatel byl úspěšně povolen.',
'unban' => 'User was successfully unbanned.',
'suspend' => 'User was successfully suspended.',
'unsuspend' => 'User was successfully unsuspended.',
'restored' => 'User was successfully restored.',
@@ -31,19 +29,6 @@ return array(
'unsuspend' => 'There was an issue unsuspending the user. Please try again.',
'import' => 'There was an issue importing users. Please try again.',
'asset_already_accepted' => 'This asset has already been accepted.',
'accept_or_decline' => 'You must either accept or decline this asset.',
),
'deletefile' => array(
'error' => 'Soubor nebyl smazán. Prosím zkuste to znovu.',
'success' => 'Soubor byl úspěšně smazán.',
),
'upload' => array(
'error' => 'File(s) not uploaded. Please try again.',
'success' => 'File(s) successfully uploaded.',
'nofiles' => 'You did not select any files for upload',
'invalidfiles' => 'One or more of your files is too large or is a filetype that is not allowed. Allowed filetypes are png, gif, jpg, doc, docx, pdf, and txt.',
),
);
+19 -19
View File
@@ -2,35 +2,35 @@
return array(
'activated' => 'Aktiv',
'allow' => 'Povolit',
'activated' => 'Active',
'allow' => 'Allow',
'checkedout' => 'Assets',
'created_at' => 'Vytvořeno',
'createuser' => 'Nový uživatel',
'created_at' => 'Created',
'createuser' => 'Create User',
'deny' => 'Deny',
'email' => 'Email',
'employee_num' => 'Osobní číslo',
'first_name' => 'Jméno',
'employee_num' => 'Employee No.',
'first_name' => 'First Name',
'groupnotes' => 'Select a group to assign to the user, remember that a user takes on the permissions of the group they are assigned.',
'id' => 'ID',
'id' => 'Id',
'inherit' => 'Inherit',
'job' => 'Job Title',
'last_login' => 'Poslední přihlášení',
'last_name' => 'Příjmení',
'location' => 'Umístění',
'last_login' => 'Last Login',
'last_name' => 'Last Name',
'location' => 'Location',
'lock_passwords' => 'Login details cannot be changed on this installation.',
'manager' => 'Nadřízený',
'name' => 'Položka',
'notes' => 'Poznámky',
'password_confirm' => 'Potvrzení hesla',
'password' => 'Heslo',
'phone' => 'Telefon',
'manager' => 'Manager',
'name' => 'Name',
'notes' => 'Notes',
'password_confirm' => 'Confirm Password',
'password' => 'Password',
'phone' => 'Phone',
'show_current' => 'Show Current Users',
'show_deleted' => 'Show Deleted Users',
'title' => 'Title',
'updateuser' => 'Update User',
'username' => 'Uživatelské jméno',
'username' => 'Username',
'username_note' => '(This is used for Active Directory binding only, not for login.)',
'cloneuser' => 'Duplikuj uživatele',
'viewusers' => 'Zobrazit uživatele',
'cloneuser' => 'Clone User',
'viewusers' => 'View Users',
);
+1 -1
View File
@@ -3,7 +3,7 @@
return array(
'account_already_exists' => 'Účet s tímto emailem již existuje.',
'account_not_found' => 'Neexistující uživatel nebo chybné heslo!',
'account_not_found' => 'Emailový účet nebo heslo je nesprávné.',
'account_not_activated' => 'Uživatelský účet není aktivován.',
'account_suspended' => 'Uživatelský účet je pozastaven.',
'account_banned' => 'Uživatelský účet je zablokován.',
+10 -17
View File
@@ -1,9 +1,11 @@
<?php
return [
return array(
'accessories' => 'Příslušenství',
'accessory' => 'Příslušenství',
'action' => 'Akce',
'action' => 'Action',
'activity_report' => 'Report aktivity',
'address' => 'Adresa',
'admin' => 'Admin',
@@ -19,10 +21,9 @@
'avatar_delete' => 'Smazat avatara',
'avatar_upload' => 'Nahrát avatara',
'back' => 'Zpět',
'bad_data' => 'Nothing found. Maybe bad data?',
'cancel' => 'Storno',
'categories' => 'Kategorie',
'category' => 'Kategorie',
'categories' => 'Categories',
'category' => 'Category',
'changeemail' => 'Změnit e-mailovou adresu',
'changepassword' => 'Změnit heslo',
'checkin' => 'Příjem',
@@ -35,7 +36,7 @@
'create' => 'Vytvořit nové',
'created_asset' => 'vytvořit majetek',
'created_at' => 'Vytvořeno',
'currency' => 'Kč', // this is deprecated
'currency' => 'Kč',
'current' => 'Aktuální',
'custom_report' => 'Vlastní report majetku',
'dashboard' => 'Nástěnka',
@@ -59,9 +60,6 @@
'id' => 'ID',
'image_delete' => 'Smazat obrázek',
'image_upload' => 'Nahrát obrázek',
'asset_maintenance' => 'Asset Maintenance',
'asset_maintenance_report' => 'Asset Maintenance Report',
'asset_maintenances' => 'Asset Maintenances',
'item' => 'Položka',
'last' => 'Poslední',
'last_name' => 'Příjmení',
@@ -71,8 +69,6 @@
'licenses' => 'Licence',
'list_all' => 'Vypsat vše',
'loading' => 'Nahrávání',
'lock_passwords' => 'This field cannot be edited in this installation.',
'feature_disabled' => 'This feature has been disabled for this installation.',
'location' => 'Lokalita',
'locations' => 'Umístění',
'logout' => 'Odhlásit',
@@ -96,7 +92,7 @@
'processing' => 'Pracuji',
'profile' => 'Váš profil',
'qty' => 'QTY',
'quanitity' => 'Množství',
'quanitity' => 'Quanitity',
'ready_to_deploy' => 'Připraveno k přidělení',
'recent_activity' => 'Nedávná aktivita',
'reports' => 'Reporty',
@@ -110,7 +106,6 @@
'select_supplier' => 'Zvolit dodavatele',
'select_user' => 'Zvolit uživatele',
'select_date' => 'Zvolit datum',
'select_statuslabel' => 'Vybrat stav',
'settings' => 'Nastavení',
'sign_in' => 'Přihlásit se',
'site_name' => 'Název lokality',
@@ -123,11 +118,8 @@
'type' => 'Typ',
'undeployable' => 'Ne-přiřaditelné',
'unknown_admin' => 'Neznámy správce',
'update' => 'Aktualizace',
'uploaded' => 'Nahráno',
'user' => 'Uživatel',
'accepted' => 'přijato',
'declined' => 'zamítnuto',
'users' => 'Uživatelé',
'viewassets' => 'Zobrazit přiřazený majetek',
'website' => 'Webová stránka',
@@ -135,4 +127,5 @@
'years' => 'roky',
'yes' => 'Ano',
'zip' => 'PSČ',
];
);
+1 -1
View File
@@ -77,7 +77,7 @@ return array(
*/
'custom' => array(),
'alpha_space' => "Pole :attribute obsahuje nepovolené znaky.",
'alpha_space' => "Pole :attribute může obsahovat pouze znaky, čárky, mezery a pomlčky.",
/*
|--------------------------------------------------------------------------
+2 -2
View File
@@ -5,7 +5,7 @@ return array(
'about_accessories_text' => 'Tilbehør er alt du udleverer til brugere men som ikke har et serienummer (eller som du er ligeglad med følge præcist). For eksempel, computermus eller tastaturer.',
'accessory_category' => 'Tilbehør Kategori',
'accessory_name' => 'Tilbehør Navn',
'create' => 'Create Accessory',
'create' => 'Tilbehør Kategori',
'eula_text' => 'Slutbrugerlicenskategori',
'eula_text_help' => 'Dette felt tillader dig at tilpasse din slutbrugerlicens til specifikke typer af tilbehør. Hvis du kun har en slutbrugerlicens for alle dine tilbehør, kan du afkrydse boksen nedenfor for at bruge den primære standardlicens.',
'require_acceptance' => 'Kræver brugere at bekræfte accept af tilbehør i denne kategori.',
@@ -13,7 +13,7 @@ return array(
'qty' => 'STK',
'total' => 'I alt',
'remaining' => 'Tilgængelig',
'update' => 'Update Accessory',
'update' => 'Opdater Kategori',
'use_default_eula' => 'Brug den <a href="#" data-toggle="modal" data-target="#eulaModal">primære standard slutbrugerlicens</a> i stedet for.',
'use_default_eula_disabled' => '<del>Brug den primære standard slutbrugerlicens i stedet for.</del> Ingen primær standard slutbrugerlicens er defineret. Tilføj en under indstillinger.',
@@ -1,14 +0,0 @@
<?php
return [
'asset_maintenance_type' => 'Asset Maintenance Type',
'title' => 'Title',
'start_date' => 'Start Date',
'completion_date' => 'Completion Date',
'cost' => 'Cost',
'is_warranty' => 'Warranty Improvement',
'asset_maintenance_time' => 'Asset Maintenance Time (in days)',
'notes' => 'Notes',
'update' => 'Update Asset Maintenance',
'create' => 'Create Asset Maintenance'
];
@@ -1,11 +0,0 @@
<?php
return [
'asset_maintenances' => 'Asset Maintenances',
'edit' => 'Edit Asset Maintenance',
'delete' => 'Delete Asset Maintenance',
'view' => 'View Asset Maintenance Details',
'repair' => 'Repair',
'maintenance' => 'Maintenance',
'upgrade' => 'Upgrade'
];
@@ -1,17 +0,0 @@
<?php
return [
'not_found' => 'Asset Maintenance you were looking for was not found!',
'delete' => [
'confirm' => 'Are you sure you wish to delete this asset maintenance?',
'error' => 'There was an issue deleting the asset maintenance. Please try again.',
'success' => 'The asset maintenance was deleted successfully.'
],
'create' => [
'error' => 'Asset Maintenance was not created, please try again.',
'success' => 'Asset Maintenance created successfully.'
],
'asset_maintenance_incomplete' => 'Not Completed Yet',
'warranty' => 'Warranty',
'not_warranty' => 'Not Warranty',
];
@@ -1,9 +0,0 @@
<?php
return [
'title' => 'Asset Maintenance',
'asset_name' => 'Asset Name',
'supplier_name' => 'Supplier Name',
'is_warranty' => 'Warranty',
'dl_csv' => 'Download CSV'
];
-1
View File
@@ -5,7 +5,6 @@ return array(
'about_categories' => 'Aktiver kategorier hjælper dig med at organisere dine aktiver. Eksempler på kategorier kunne være &quot;Stationære coputere&quot;, &quot;Bærbare&quot;, &quot;Mobiltelefoner&quot;, &quot;Tabletter&quot; osv., men du kan bruge aktiver kategorier på en hvilken som helst måde som giver mening for dig.',
'asset_categories' => 'Aktiver Kategorier',
'category_name' => 'Kategorinavn',
'checkin_email' => 'Send email to user on checkin.',
'clone' => 'Klon Kategori',
'create' => 'Opret kategori',
'edit' => 'Rediger Kategori',
@@ -3,9 +3,6 @@
return array(
'about_consumables_title' => 'About Consumables',
'about_consumables_text' => 'Consumables are anything purchased that will be used up over time. For example, printer ink or copier paper.',
'consumable_name' => 'Consumable Name',
'create' => 'Create Consumable',
'remaining' => 'Remaining',
'total' => 'Total',
'update' => 'Update Consumable',
);
+1 -2
View File
@@ -17,10 +17,9 @@ return array(
'default_location' => 'Standardplacering',
'eol_date' => 'EOL Dato',
'eol_rate' => 'EOL Rate',
'expected_checkin' => 'Expected Checkin Date',
'expires' => 'Udløber',
'fully_depreciated' => 'Fuldt Afskrevet',
'help_checkout' => 'If you wish to assign this asset immediately, select "Ready to Deploy" from the status list above. ',
'help_checkout' => 'Hvis du ønsker at tildele aktiver med det samme, bør du vælge "Klar til Implementering" fra statuslisten ovenfor ellers kan uventede ting ske. ',
'mac_address' => 'MAC-adresse',
'manufacturer' => 'Producent',
'model' => 'Model',
-2
View File
@@ -12,6 +12,4 @@ return array(
'address' => 'Address',
'zip' => 'Postal Code',
'locations' => 'Locations',
'parent' => 'Parent',
'currency' => 'Location Currency', // this is deprecated
);
-1
View File
@@ -10,7 +10,6 @@ return array(
'backups' => 'Backups',
'barcode_type' => 'Barcode Type',
'barcode_settings' => 'Barcode Settings',
'default_currency' => 'Default Currency',
'default_eula_text' => 'Default EULA',
'default_eula_help_text' => 'You can also associate custom EULAs to specific asset categories.',
'display_asset_name' => 'Display Asset Name',
+9 -10
View File
@@ -3,14 +3,13 @@
return array(
'assets_user' => 'Assets assigned to :name',
'clone' => 'Clone User',
'contact_user' => 'Contact :name',
'edit' => 'Edit User',
'filetype_info' => 'Allowed filetypes are png, gif, jpg, jpeg, doc, docx, pdf, txt, zip, and rar.',
'history_user' => 'History for :name',
'last_login' => 'Last Login',
'software_user' => 'Software Checked out to :name',
'view_user' => 'View User :name',
'usercsv' => 'CSV file',
'assets_user' => 'Assets assigned to :name',
'clone' => 'Clone User',
'contact_user' => 'Contact :name',
'edit' => 'Edit User',
'history_user' => 'History for :name',
'last_login' => 'Last Login',
'software_user' => 'Software Checked out to :name',
'view_user' => 'View User :name',
'usercsv' => 'CSV file',
);
+6 -21
View File
@@ -2,14 +2,12 @@
return array(
'accepted' => 'You have successfully accepted this asset.',
'declined' => 'You have successfully declined this asset.',
'user_exists' => 'User already exists!',
'user_not_found' => 'User [:id] does not exist.',
'user_login_required' => 'The login field is required',
'user_password_required' => 'The password is required.',
'insufficient_permissions' => 'Insufficient Permissions.',
'user_deleted_warning' => 'This user has been deleted. You will have to restore this user to edit them or assign them new assets.',
'user_exists' => 'User already exists!',
'user_not_found' => 'User [:id] does not exist.',
'user_login_required' => 'The login field is required',
'user_password_required' => 'The password is required.',
'insufficient_permissions' => 'Insufficient Permissions.',
'user_deleted_warning' => 'This user has been deleted. You will have to restore this user to edit them or assign them new assets.',
'success' => array(
@@ -31,19 +29,6 @@ return array(
'unsuspend' => 'There was an issue unsuspending the user. Please try again.',
'import' => 'There was an issue importing users. Please try again.',
'asset_already_accepted' => 'This asset has already been accepted.',
'accept_or_decline' => 'You must either accept or decline this asset.',
),
'deletefile' => array(
'error' => 'File not deleted. Please try again.',
'success' => 'File successfully deleted.',
),
'upload' => array(
'error' => 'File(s) not uploaded. Please try again.',
'success' => 'File(s) successfully uploaded.',
'nofiles' => 'You did not select any files for upload',
'invalidfiles' => 'One or more of your files is too large or is a filetype that is not allowed. Allowed filetypes are png, gif, jpg, doc, docx, pdf, and txt.',
),
);
+1 -1
View File
@@ -3,7 +3,7 @@
return array(
'account_already_exists' => 'En konto med denne e-mail eksisterer allerede.',
'account_not_found' => 'The username or password is incorrect.',
'account_not_found' => 'E-mail konto eller adgangskode er forkert.',
'account_not_activated' => 'Denne brugerkonto er ikke aktiveret.',
'account_suspended' => 'Denne brugerkonto er suspenderet.',
'account_banned' => 'Denne brugerkonto er blokeret.',
+6 -13
View File
@@ -1,6 +1,8 @@
<?php
return [
return array(
'accessories' => 'Tilbehør',
'accessory' => 'Tilbehør',
'action' => 'Action',
@@ -19,7 +21,6 @@
'avatar_delete' => 'Slet avatar',
'avatar_upload' => 'Upload Avatar',
'back' => 'Tilbage',
'bad_data' => 'Nothing found. Maybe bad data?',
'cancel' => 'Annuller',
'categories' => 'Categories',
'category' => 'Category',
@@ -35,7 +36,7 @@
'create' => 'Opret ny',
'created_asset' => 'skabte aktiver',
'created_at' => 'Skabt den',
'currency' => '$', // this is deprecated
'currency' => '$',
'current' => 'Aktuelle',
'custom_report' => 'Tilpasset Aktiv Rapport',
'dashboard' => 'Oversigtspanel',
@@ -59,9 +60,6 @@
'id' => 'ID',
'image_delete' => 'Slet billede',
'image_upload' => 'Upload billede',
'asset_maintenance' => 'Asset Maintenance',
'asset_maintenance_report' => 'Asset Maintenance Report',
'asset_maintenances' => 'Asset Maintenances',
'item' => 'Item',
'last' => 'Last',
'last_name' => 'Efternavn',
@@ -71,8 +69,6 @@
'licenses' => 'Licenser',
'list_all' => 'Vis alle',
'loading' => 'Loading',
'lock_passwords' => 'This field cannot be edited in this installation.',
'feature_disabled' => 'This feature has been disabled for this installation.',
'location' => 'Lokation',
'locations' => 'Lokationer',
'logout' => 'Log ud',
@@ -110,7 +106,6 @@
'select_supplier' => 'Select a Supplier',
'select_user' => 'Select a User',
'select_date' => 'Select Date',
'select_statuslabel' => 'Select Status',
'settings' => 'Instillinger',
'sign_in' => 'Log ind',
'site_name' => 'Site Navn',
@@ -123,11 +118,8 @@
'type' => 'Type',
'undeployable' => 'Ikke implementerbar',
'unknown_admin' => 'Ukendt Admin',
'update' => 'Update',
'uploaded' => 'Uploaded',
'user' => 'Bruger',
'accepted' => 'accepted',
'declined' => 'declined',
'users' => 'Brugere',
'viewassets' => 'Se Tildelte Aktiver',
'website' => 'Hjemmeside',
@@ -135,4 +127,5 @@
'years' => 'år',
'yes' => 'Ja',
'zip' => 'Postnummer',
];
);
+1 -1
View File
@@ -77,7 +77,7 @@ return array(
*/
'custom' => array(),
'alpha_space' => "The :attribute field contains a character that is not allowed.",
'alpha_space' => ":attribute feltet må kun indeholde bogstaver, kommaer, mellemrum eller bindestreger.",
/*
|--------------------------------------------------------------------------
+2 -2
View File
@@ -5,7 +5,7 @@ return array(
'about_accessories_text' => 'Ein Zubehör ist alles was Sie an einem Benutzer ausgeben können, jedoch keine Seriennummer besitzt (oder wo es keinen Sinn macht eben diese zu verwalten). Zum Beispiel: Computer Mäuse und Tastaturen.',
'accessory_category' => 'Züberhor Kategorie',
'accessory_name' => 'Zubehör Name',
'create' => 'Create Accessory',
'create' => 'Kategorie erstellen',
'eula_text' => 'Kategorie EULA',
'eula_text_help' => 'Dieses Feld erlaubt Ihnen die EULA Ihren Bedürfnissen nach Asset Typ anzupassen.Wenn Sie nur eine EULA für alle Assets haben, aktivieren Sie die Checkbox unterhalb um die Standard EULA zu verwenden.',
'require_acceptance' => 'Erfordert die Zustimmung der Assets in dieser Kategorie durch den Benutzer.',
@@ -13,7 +13,7 @@ return array(
'qty' => 'Anzahl',
'total' => 'Gesamt',
'remaining' => 'Verfügbar',
'update' => 'Update Accessory',
'update' => 'Kategorie aktualisieren',
'use_default_eula' => 'Die <a href="#" data-toggle="modal" data-target="#eulaModal">Standard EULA</a> statt dessen verwenden.',
'use_default_eula_disabled' => '<del>Die Standard EULA statt dessen verwenden.</del>Keine Standard EULA definiert. Bitte fügen Sie eine in den Einstellungen hinzu.',
@@ -1,14 +0,0 @@
<?php
return [
'asset_maintenance_type' => 'Asset Maintenance Type',
'title' => 'Title',
'start_date' => 'Start Date',
'completion_date' => 'Completion Date',
'cost' => 'Cost',
'is_warranty' => 'Warranty Improvement',
'asset_maintenance_time' => 'Asset Maintenance Time (in days)',
'notes' => 'Notes',
'update' => 'Update Asset Maintenance',
'create' => 'Create Asset Maintenance'
];
@@ -1,11 +0,0 @@
<?php
return [
'asset_maintenances' => 'Asset Maintenances',
'edit' => 'Edit Asset Maintenance',
'delete' => 'Delete Asset Maintenance',
'view' => 'View Asset Maintenance Details',
'repair' => 'Repair',
'maintenance' => 'Maintenance',
'upgrade' => 'Upgrade'
];
@@ -1,17 +0,0 @@
<?php
return [
'not_found' => 'Asset Maintenance you were looking for was not found!',
'delete' => [
'confirm' => 'Are you sure you wish to delete this asset maintenance?',
'error' => 'There was an issue deleting the asset maintenance. Please try again.',
'success' => 'The asset maintenance was deleted successfully.'
],
'create' => [
'error' => 'Asset Maintenance was not created, please try again.',
'success' => 'Asset Maintenance created successfully.'
],
'asset_maintenance_incomplete' => 'Not Completed Yet',
'warranty' => 'Warranty',
'not_warranty' => 'Not Warranty',
];
@@ -1,9 +0,0 @@
<?php
return [
'title' => 'Asset Maintenance',
'asset_name' => 'Asset Name',
'supplier_name' => 'Supplier Name',
'is_warranty' => 'Warranty',
'dl_csv' => 'Download CSV'
];
-1
View File
@@ -5,7 +5,6 @@ return array(
'about_categories' => 'Kategorien helfen Ihnen dabei, Ihre Assets zu organisieren. Beispielkategorien sind "Schreibtische", "Laptops", "Handys", "Tablets" usw., jedoch können Sie Kategorien nutzen, wie es für Sie sinnvoll erscheint.',
'asset_categories' => 'Asset-Kategorien',
'category_name' => 'Kategoriename',
'checkin_email' => 'Send email to user on checkin.',
'clone' => 'Kategorie duplizieren',
'create' => 'Kategorie erstellen',
'edit' => 'Kategorie bearbeiten',
+4 -7
View File
@@ -1,11 +1,8 @@
<?php
return array(
'about_consumables_title' => 'Details Verbrauchsmaterialien',
'about_consumables_text' => 'Verbrauchsmaterialien sind alle Dinge, die gekauft und mit der Zeit aufgebraucht werden, wie z.B. Druckerpatronen oder Kopierpapier.',
'consumable_name' => 'Consumable Name',
'create' => 'Create Consumable',
'remaining' => 'übrig',
'total' => 'Gesamt',
'update' => 'Update Consumable',
'about_consumables_title' => 'About Consumables',
'about_consumables_text' => 'Consumables are anything purchased that will be used up over time. For example, printer ink or copier paper.',
'remaining' => 'Remaining',
'total' => 'Total',
);
+14 -14
View File
@@ -2,34 +2,34 @@
return array(
'does_not_exist' => 'Verbrauchsmaterial existiert nicht.',
'does_not_exist' => 'Consumable does not exist.',
'create' => array(
'error' => 'Verbrauchsmaterial konnte nicht angelegt werden, bitte versuchen Sie es erneut.',
'success' => 'Verbrauchsmaterial erfolgreich angelegt.'
'error' => 'Consumable was not created, please try again.',
'success' => 'Consumable created successfully.'
),
'update' => array(
'error' => 'Verbrauchsmaterial konnte nicht aktualisiert werden, bitte versuchen Sie es erneut',
'success' => 'Verbrauchsmaterial erfolgreich aktualisiert.'
'error' => 'Consumable was not updated, please try again',
'success' => 'Consumable updated successfully.'
),
'delete' => array(
'confirm' => 'Wollen Sie dieses Zubehör wirklich löschen?',
'error' => 'Es gab Probleme das Verbrauchsmaterial zu löschen. Bitte versuchen Sie es noch einmal.',
'success' => 'Zubehör wurde erfolgreich gelöscht.'
'confirm' => 'Are you sure you wish to delete this accessory?',
'error' => 'There was an issue deleting the consumable. Please try again.',
'success' => 'The accessory was deleted successfully.'
),
'checkout' => array(
'error' => 'Das Verbrauchsmaterial wurde nicht ausgetragen, bitte versuchen Sie es erneut',
'success' => 'Verbrauchsmaterial wurde erfolgreich ausgetragen.',
'user_does_not_exist' => 'Der angegebene Benutzer ist ungültig. Bitte erneut versuchen.'
'error' => 'Consumable was not checked out, please try again',
'success' => 'Consumable checked out successfully.',
'user_does_not_exist' => 'That user is invalid. Please try again.'
),
'checkin' => array(
'error' => 'Das Verbrauchsmaterial konnte nicht aufgenommen werden, bitte versuchen Sie es erneut',
'success' => 'Verbrauchsmaterial erfolgreich hinzugefügt.',
'user_does_not_exist' => 'Dieser Benutzer ist ungültig. Bitte versuchen Sie es noch einmal.'
'error' => 'Consumable was not checked in, please try again',
'success' => 'Consumable checked in successfully.',
'user_does_not_exist' => 'That user is invalid. Please try again.'
)
+1 -1
View File
@@ -1,5 +1,5 @@
<?php
return array(
'title' => 'Name des Verbrauchsmaterials',
'title' => 'Consumable Name',
);
+1 -2
View File
@@ -17,10 +17,9 @@ return array(
'default_location' => 'Standard Lagerort',
'eol_date' => 'End of Live Datum (Ende der Nutzungsdauer)',
'eol_rate' => 'EOL Rate',
'expected_checkin' => 'Expected Checkin Date',
'expires' => 'Gültig bis',
'fully_depreciated' => 'Komplett Abgeschrieben',
'help_checkout' => 'If you wish to assign this asset immediately, select "Ready to Deploy" from the status list above. ',
'help_checkout' => 'Wenn du dieses Asset sofort zuweisen möchtest, solltest du "Ready to Deploy" im Statusfeld auswählen oder es könnten unerwartete Probleme auftreten. ',
'mac_address' => 'MAC Adresse',
'manufacturer' => 'Hersteller',
'model' => 'Modell',
+1 -1
View File
@@ -9,7 +9,7 @@ return array(
'deployable' => 'Einsetzbar',
'deleted' => 'Dieses Asset wurde gelöscht. <a href="/hardware/:asset_id/restore">Zur Wiederherstellung hier klicken</a>.',
'edit' => 'Asset editieren',
'filetype_info' => 'Erlaubte Dateitypen sind png, gif, jpg, jpeg, doc, docx, pdf, txt, zip, oder rar.',
'filetype_info' => 'Allowed filetypes are png, gif, jpg, jpeg, doc, docx, pdf, txt, zip, and rar.',
'model_deleted' => 'Dieses Asset wurde gelöscht. Sie müssen das Modell Wiederherstellen bevor Sie das Asset Wiederherstellen können <br/><a href="/hardware/models/:model_id/restore">klicken Sie hier um das Modell wiederherzustellen</a>.',
'requestable' => 'Anforderbar',
'restore' => 'Asset wiederherstellen',
+1 -1
View File
@@ -15,7 +15,7 @@ return array(
'notes' => 'Notizen',
'order' => 'Bestellnr.',
'purchase_order' => 'Bestellnummer',
'reassignable' => 'Zuweisbar',
'reassignable' => 'Reassignable',
'remaining_seats' => 'Verbleibende Aktivierungen',
'seats' => 'Anzahl Aktivierungen',
'serial' => 'Seriennummer',
-2
View File
@@ -12,6 +12,4 @@ return array(
'address' => 'Adresse',
'zip' => 'Postleitzahl',
'locations' => 'Standorte',
'parent' => 'Parent',
'currency' => 'Location Currency', // this is deprecated
);

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