Compare commits

..

132 Commits

Author SHA1 Message Date
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
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
689 changed files with 7990 additions and 8584 deletions

6
.gitignore vendored
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

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.

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,

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),
);
}

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";
}
}
}
}
}

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);
}
}

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',
),

View File

@@ -134,7 +134,7 @@ return array(
|
*/
'login_attribute' => 'email',
'login_attribute' => 'username',
),

View File

@@ -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' => '*',
);

View File

@@ -0,0 +1,15 @@
<?php
return array(
'path' => storage_path() . '/dumps/',
'mysql' => array(
'dump_command_path' => '',
'restore_command_path' => '',
),
's3' => array(
'path' => ''
),
'compress' => false,
);

View File

@@ -26,7 +26,7 @@ return array(
|
*/
'url' => 'http://production.yourserver.com',
'url' => 'https://production.yourserver.com',
/*
|--------------------------------------------------------------------------

View File

@@ -1,5 +1,5 @@
<?php
return array (
'app_version' => 'v1.2.8-26',
'hash_version' => 'v1.2.8-26-gf5d4eb5',
'app_version' => 'v1.2.8-150',
'hash_version' => 'v1.2.8-150-g84ffc1a',
);

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.
}

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') {

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,74 +1014,74 @@ 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>';
}
});
$inout = new \Chumper\Datatable\Columns\FunctionColumn('inout', function ($assets)
$actions = new \Chumper\Datatable\Columns\FunctionColumn('actions', function ($assets)
{
if ($assets->assetstatus->deployable != 0) {
if (($assets->assigned_to !='') && ($assets->assigned_to > 0)) {
return '<a href="'.route('checkin/hardware', $assets->id).'" class="btn btn-primary btn-sm">'.Lang::get('general.checkin').'</a>';
} else {
return '<a href="'.route('checkout/hardware', $assets->id).'" class="btn btn-info btn-sm">'.Lang::get('general.checkout').'</a>';
}
}
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)
{
if (($assets->assigned_to !='') && ($assets->assigned_to > 0)) {
return '<a href="'.route('checkin/hardware', $assets->id).'" class="btn btn-primary btn-sm">'.Lang::get('general.checkin').'</a>';
} else {
return '<a href="'.route('checkout/hardware', $assets->id).'" class="btn btn-info btn-sm">'.Lang::get('general.checkout').'</a>';
}
});
return Datatable::collection($assets)
->addColumn('',function($assets)
{
return '<input type="checkbox" name="edit_asset['.$assets->id.']" class="one_required">';
})
->addColumn('name',function($assets)
{
return '<a title="'.$assets->name.'" href="hardware/'.$assets->id.'/view">'.$assets->name.'</a>';
})
->addColumn('asset_tag',function($assets)
{
return '<a title="'.$assets->asset_tag.'" href="hardware/'.$assets->id.'/view">'.$assets->asset_tag.'</a>';
})
->showColumns('serial')
return Datatable::collection($assets)
->addColumn('',function($assets)
{
return '<input type="checkbox" name="edit_asset['.$assets->id.']" class="one_required">';
})
->addColumn('name',function($assets)
{
return '<a title="'.$assets->name.'" href="hardware/'.$assets->id.'/view">'.$assets->name.'</a>';
})
->addColumn('asset_tag',function($assets)
{
return '<a title="'.$assets->asset_tag.'" href="hardware/'.$assets->id.'/view">'.$assets->asset_tag.'</a>';
})
->showColumns('serial')
->addColumn('model',function($assets)
{
@@ -1076,13 +1092,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 +1120,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();
}
}

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 {

View File

@@ -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();
}
}

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);
}

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'));
}

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

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
*

View File

@@ -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);
}
}
}

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();
}

View File

@@ -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');
});

View File

@@ -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');
});
}
}

View File

@@ -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');
});
}
}

View File

@@ -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);');
}
}

View File

@@ -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');
}
}

View File

@@ -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);');
}
}

View File

@@ -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;');
}
}

View File

@@ -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');
});
}
}

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',

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.',

View File

@@ -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'
];

View File

@@ -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'
];

View File

@@ -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',
];

View File

@@ -1,9 +0,0 @@
<?php
return [
'title' => 'Asset Maintenance',
'asset_name' => 'Asset Name',
'supplier_name' => 'Supplier Name',
'is_warranty' => 'Warranty',
'dl_csv' => 'Download CSV'
];

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',

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' => 'Remaining',
'total' => 'Total',
'update' => 'Update Consumable',
);

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',

View File

@@ -12,6 +12,4 @@ return array(
'address' => 'Address',
'zip' => 'Postal Code',
'locations' => 'Locations',
'parent' => 'Parent',
'currency' => 'Location Currency', // this is deprecated
);

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',

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',
);

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.',
),
);

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.',

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' => 'الرمز البريدي',
];
);

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.",
/*
|--------------------------------------------------------------------------

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í.',

View File

@@ -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'
];

View File

@@ -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'
];

View File

@@ -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',
];

View File

@@ -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'
];

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',

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',
);

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',

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(

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.'
);

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',
);

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(

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',
);

View File

@@ -12,6 +12,4 @@ return array(
'address' => 'Adresa',
'zip' => 'PSČ',
'locations' => 'Umístění',
'parent' => 'Parent',
'currency' => 'Location Currency', // this is deprecated
);

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',
);

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.'
);

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',

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.'
)
);

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',
);

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',
);

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.',
),
);

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',
);

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.',

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Č',
];
);

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.",
/*
|--------------------------------------------------------------------------

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.',

View File

@@ -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'
];

View File

@@ -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'
];

View File

@@ -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',
];

View File

@@ -1,9 +0,0 @@
<?php
return [
'title' => 'Asset Maintenance',
'asset_name' => 'Asset Name',
'supplier_name' => 'Supplier Name',
'is_warranty' => 'Warranty',
'dl_csv' => 'Download CSV'
];

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',

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' => 'Remaining',
'total' => 'Total',
'update' => 'Update Consumable',
);

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',

View File

@@ -12,6 +12,4 @@ return array(
'address' => 'Address',
'zip' => 'Postal Code',
'locations' => 'Locations',
'parent' => 'Parent',
'currency' => 'Location Currency', // this is deprecated
);

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',

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',
);

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.',
),
);

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.',

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',
];
);

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.",
/*
|--------------------------------------------------------------------------

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.',

View File

@@ -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'
];

View File

@@ -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'
];

View File

@@ -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',
];

View File

@@ -1,9 +0,0 @@
<?php
return [
'title' => 'Asset Maintenance',
'asset_name' => 'Asset Name',
'supplier_name' => 'Supplier Name',
'is_warranty' => 'Warranty',
'dl_csv' => 'Download CSV'
];

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',

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',
);

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.'
)

View File

@@ -1,5 +1,5 @@
<?php
return array(
'title' => 'Name des Verbrauchsmaterials',
'title' => 'Consumable Name',
);

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',

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',

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',

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