Merge remote-tracking branch 'origin/v3' into v3-master

This commit is contained in:
snipe 2016-06-22 12:30:48 -07:00
commit 5daaa24a07
37 changed files with 1975 additions and 1958 deletions

View file

@ -1,5 +1,6 @@
<?php <?php
namespace App\Console\Commands; namespace App\Console\Commands;
use App\Models\User; use App\Models\User;
use App\Models\Location; use App\Models\Location;
use App\Models\Category; use App\Models\Category;
@ -13,7 +14,8 @@ use Symfony\Component\Console\Input\InputArgument;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use League\Csv\Reader; use League\Csv\Reader;
class AssetImportCommand extends Command { class AssetImportCommand extends Command
{
/** /**
* The console command name. * The console command name.
@ -277,8 +279,7 @@ class AssetImportCommand extends Command {
$location = new Location(); $location = new Location();
if ($user_asset_location!='') if ($user_asset_location!='') {
{
$location->name = e($user_asset_location); $location->name = e($user_asset_location);
$location->address = ''; $location->address = '';
$location->city = ''; $location->city = '';
@ -295,14 +296,10 @@ class AssetImportCommand extends Command {
$this->error($location->getErrors()); $this->error($location->getErrors());
} }
} } else {
else
{
$this->comment('Location '.$user_asset_location.' was (not) created - test run only'); $this->comment('Location '.$user_asset_location.' was (not) created - test run only');
} }
} } else {
else
{
$this->comment('No location given, so none created.'); $this->comment('No location given, so none created.');
} }
@ -463,6 +460,4 @@ class AssetImportCommand extends Command {
array('testrun', null, InputOption::VALUE_REQUIRED, 'Test the output without writing to the database or not.', null), array('testrun', null, InputOption::VALUE_REQUIRED, 'Test the output without writing to the database or not.', null),
); );
} }
} }

View file

@ -5,7 +5,6 @@ namespace App\Console\Commands;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use App\Models\Setting; use App\Models\Setting;
class DisableLDAP extends Command class DisableLDAP extends Command
{ {
/** /**

View file

@ -10,7 +10,8 @@ use App\Models\Supplier;
use App\Models\License; use App\Models\License;
use App\Models\LicenseSeat; use App\Models\LicenseSeat;
class LicenseImportCommand extends Command { class LicenseImportCommand extends Command
{
/** /**
* The console command name. * The console command name.
@ -379,6 +380,4 @@ class LicenseImportCommand extends Command {
array('testrun', null, InputOption::VALUE_REQUIRED, 'Test the output without writing to the database or not.', null), array('testrun', null, InputOption::VALUE_REQUIRED, 'Test the output without writing to the database or not.', null),
); );
} }
} }

View file

@ -27,7 +27,8 @@ ini_set('memory_limit', '500M');
/** /**
* Class ObjectImportCommand * Class ObjectImportCommand
*/ */
class ObjectImportCommand extends Command { class ObjectImportCommand extends Command
{
/** /**
* The console command name. * The console command name.
@ -84,8 +85,7 @@ class ObjectImportCommand extends Command {
$results = $csv->fetchAssoc(); $results = $csv->fetchAssoc();
$newarray = null; $newarray = null;
foreach ($results as $index => $arraytoNormalize) foreach ($results as $index => $arraytoNormalize) {
{
$internalnewarray = array_change_key_case($arraytoNormalize); $internalnewarray = array_change_key_case($arraytoNormalize);
$newarray[$index] = $internalnewarray; $newarray[$index] = $internalnewarray;
} }
@ -139,10 +139,13 @@ class ObjectImportCommand extends Command {
$item["notes"] = $this->array_smart_fetch($row, "notes"); $item["notes"] = $this->array_smart_fetch($row, "notes");
$item["quantity"] = $this->array_smart_fetch($row, "quantity"); $item["quantity"] = $this->array_smart_fetch($row, "quantity");
$item["requestable"] = $this->array_smart_fetch($row, "requestable"); $item["requestable"] = $this->array_smart_fetch($row, "requestable");
$item["asset_tag"] = $this->array_smart_fetch($row, "asset tag");
$this->current_assetId = $item["item_name"]; $this->current_assetId = $item["item_name"];
if ($item["asset_tag"] != '') {
$this->current_assetId = $item["asset_tag"];
}
$this->log('Category: ' . $item_category); $this->log('Category: ' . $item_category);
$this->log('Location: ' . $item_location); $this->log('Location: ' . $item_location);
$this->log('Purchase Date: ' . $item["purchase_date"]); $this->log('Purchase Date: ' . $item["purchase_date"]);
@ -195,21 +198,19 @@ class ObjectImportCommand extends Command {
$this->log('====================================='); $this->log('=====================================');
if(!$this->option('web-importer')) if (!$this->option('web-importer')) {
{
if (!empty($this->errors)) { if (!empty($this->errors)) {
$this->comment("The following Errors were encountered."); $this->comment("The following Errors were encountered.");
foreach($this->errors as $asset => $error) foreach ($this->errors as $asset => $error) {
{
$this->comment('Error: Item: ' . $asset . 'failed validation: ' . json_encode($error)); $this->comment('Error: Item: ' . $asset . 'failed validation: ' . json_encode($error));
} }
} else { } else {
$this->comment("All Items imported successfully!"); $this->comment("All Items imported successfully!");
} }
} else { } else {
if(empty($this->errors)) if (empty($this->errors)) {
return 0; return 0;
else { } else {
$this->comment(json_encode($this->errors)); //Send a big string to the $this->comment(json_encode($this->errors)); //Send a big string to the
return 1; return 1;
} }
@ -226,9 +227,10 @@ class ObjectImportCommand extends Command {
public function jsonError($field, $errorString) public function jsonError($field, $errorString)
{ {
$this->errors[$this->current_assetId] = array($field => $errorString); $this->errors[$this->current_assetId][$field] = $errorString;
if($this->option('verbose')) if ($this->option('verbose')) {
parent::error($errorString); parent::error($field . $errorString);
}
} }
/** /**
@ -242,14 +244,13 @@ class ObjectImportCommand extends Command {
*/ */
private function log($string, $level = 'info') private function log($string, $level = 'info')
{ {
if($this->option('web-importer')) if ($this->option('web-importer')) {
return; return;
if($level === 'warning') }
{ if ($level === 'warning') {
\Log::warning($string); \Log::warning($string);
$this->comment($string); $this->comment($string);
} } else {
else {
\Log::Info($string); \Log::Info($string);
if ($this->option('verbose')) { if ($this->option('verbose')) {
$this->comment($string); $this->comment($string);
@ -267,7 +268,8 @@ class ObjectImportCommand extends Command {
* @param $default string * @param $default string
* @return string * @return string
*/ */
public function array_smart_fetch(Array $array, $key, $default = '') { public function array_smart_fetch(array $array, $key, $default = '')
{
return array_key_exists($key, $array) ? e(trim($array[ $key ])) : $default; return array_key_exists($key, $array) ? e(trim($array[ $key ])) : $default;
} }
@ -280,7 +282,8 @@ class ObjectImportCommand extends Command {
* @param $array array * @param $array array
* @return string * @return string
*/ */
public function array_smart_custom_field_fetch(Array $array, $key) { public function array_smart_custom_field_fetch(array $array, $key)
{
$index_name = strtolower($key->name); $index_name = strtolower($key->name);
return array_key_exists($index_name, $array) ? e(trim($array[$index_name])) : ''; return array_key_exists($index_name, $array) ? e(trim($array[$index_name])) : '';
} }
@ -304,10 +307,12 @@ class ObjectImportCommand extends Command {
$asset_model_name = $this->array_smart_fetch($row, "model name"); $asset_model_name = $this->array_smart_fetch($row, "model name");
$asset_modelno = $this->array_smart_fetch($row, "model number"); $asset_modelno = $this->array_smart_fetch($row, "model number");
if(empty($asset_model_name)) if (empty($asset_model_name)) {
$asset_model_name='Unknown'; $asset_model_name='Unknown';
if(empty($asset_modelno)) }
if (empty($asset_modelno)) {
$asset_modelno=''; $asset_modelno='';
}
$this->log('Model Name: ' . $asset_model_name); $this->log('Model Name: ' . $asset_model_name);
$this->log('Model No: ' . $asset_modelno); $this->log('Model No: ' . $asset_modelno);
@ -316,8 +321,7 @@ class ObjectImportCommand extends Command {
if ((strcasecmp($tempmodel->name, $asset_model_name) == 0) if ((strcasecmp($tempmodel->name, $asset_model_name) == 0)
&& $tempmodel->modelno == $asset_modelno && $tempmodel->modelno == $asset_modelno
&& $tempmodel->category_id == $category->id && $tempmodel->category_id == $category->id
&& $tempmodel->manufacturer_id == $manufacturer->id ) && $tempmodel->manufacturer_id == $manufacturer->id ) {
{
$this->log('A matching model ' . $asset_model_name . ' with model number ' . $asset_modelno . ' already exists'); $this->log('A matching model ' . $asset_model_name . ' with model number ' . $asset_modelno . ' already exists');
return $tempmodel; return $tempmodel;
} }
@ -359,8 +363,9 @@ class ObjectImportCommand extends Command {
*/ */
public function createOrFetchCategory($asset_category, $item_type) public function createOrFetchCategory($asset_category, $item_type)
{ {
if (empty($asset_category)) if (empty($asset_category)) {
$asset_category = 'Unnamed Category'; $asset_category = 'Unnamed Category';
}
foreach ($this->categories as $tempcategory) { foreach ($this->categories as $tempcategory) {
if ((strcasecmp($tempcategory->name, $asset_category) == 0) && $tempcategory->category_type === $item_type) { if ((strcasecmp($tempcategory->name, $asset_category) == 0) && $tempcategory->category_type === $item_type) {
@ -438,8 +443,9 @@ class ObjectImportCommand extends Command {
*/ */
public function createOrFetchStatusLabel($asset_statuslabel_name) public function createOrFetchStatusLabel($asset_statuslabel_name)
{ {
if(empty($asset_statuslabel_name)) if (empty($asset_statuslabel_name)) {
return; return;
}
foreach ($this->status_labels as $tempstatus) { foreach ($this->status_labels as $tempstatus) {
if (strcasecmp($tempstatus->name, $asset_statuslabel_name) == 0) { if (strcasecmp($tempstatus->name, $asset_statuslabel_name) == 0) {
$this->log('A matching Status ' . $asset_statuslabel_name . ' already exists'); $this->log('A matching Status ' . $asset_statuslabel_name . ' already exists');
@ -579,8 +585,9 @@ class ObjectImportCommand extends Command {
public function createOrFetchSupplier(array $row) public function createOrFetchSupplier(array $row)
{ {
$supplier_name = $this->array_smart_fetch($row, "supplier"); $supplier_name = $this->array_smart_fetch($row, "supplier");
if(empty($supplier_name)) if (empty($supplier_name)) {
$supplier_name='Unknown'; $supplier_name='Unknown';
}
foreach ($this->suppliers as $tempsupplier) { foreach ($this->suppliers as $tempsupplier) {
if (strcasecmp($tempsupplier->name, $supplier_name) == 0) { if (strcasecmp($tempsupplier->name, $supplier_name) == 0) {
$this->log('A matching Company ' . $supplier_name . ' already exists'); $this->log('A matching Company ' . $supplier_name . ' already exists');
@ -666,8 +673,9 @@ class ObjectImportCommand extends Command {
$this->log('Email: ' . $user_email); $this->log('Email: ' . $user_email);
$this->log('--- End User Data ---'); $this->log('--- End User Data ---');
if($this->option('testrun')) if ($this->option('testrun')) {
return new User; return new User;
}
if (!empty($user_username)) { if (!empty($user_username)) {
if ($user = User::MatchEmailOrUsername($user_username, $user_email) if ($user = User::MatchEmailOrUsername($user_username, $user_email)
@ -712,7 +720,6 @@ class ObjectImportCommand extends Command {
public function createAssetIfNotExists(array $row, array $item) public function createAssetIfNotExists(array $row, array $item)
{ {
$asset_serial = $this->array_smart_fetch($row, "serial number"); $asset_serial = $this->array_smart_fetch($row, "serial number");
$asset_tag = $this->array_smart_fetch($row, "asset tag");
$asset_image = $this->array_smart_fetch($row, "image"); $asset_image = $this->array_smart_fetch($row, "image");
$asset_warranty_months = intval($this->array_smart_fetch($row, "warranty months")); $asset_warranty_months = intval($this->array_smart_fetch($row, "warranty months"));
if (empty($asset_warranty_months)) { if (empty($asset_warranty_months)) {
@ -722,17 +729,14 @@ class ObjectImportCommand extends Command {
$asset_model = $this->createOrFetchAssetModel($row, $item["category"], $item["manufacturer"]); $asset_model = $this->createOrFetchAssetModel($row, $item["category"], $item["manufacturer"]);
$supplier = $this->createOrFetchSupplier($row); $supplier = $this->createOrFetchSupplier($row);
$this->current_assetId = $asset_tag;
$this->log('Serial No: '.$asset_serial); $this->log('Serial No: '.$asset_serial);
$this->log('Asset Tag: '.$asset_tag); $this->log('Asset Tag: '.$item['asset_tag']);
$this->log('Notes: '.$item["notes"]); $this->log('Notes: '.$item["notes"]);
$this->log('Warranty Months: ' . $asset_warranty_months); $this->log('Warranty Months: ' . $asset_warranty_months);
foreach ($this->assets as $tempasset) { foreach ($this->assets as $tempasset) {
if (strcasecmp($tempasset->asset_tag, $asset_tag ) == 0 ) { if (strcasecmp($tempasset->asset_tag, $item['asset_tag']) == 0) {
$this->log('A matching Asset ' . $asset_tag . ' already exists'); $this->log('A matching Asset ' . $item['asset_tag'] . ' already exists');
// $this->comment('A matching Asset ' . $asset_tag . ' already exists');
return; return;
} }
} }
@ -769,23 +773,28 @@ class ObjectImportCommand extends Command {
$asset->purchase_cost = 0.00; $asset->purchase_cost = 0.00;
} }
$asset->serial = $asset_serial; $asset->serial = $asset_serial;
$asset->asset_tag = $asset_tag; $asset->asset_tag = $item['asset_tag'];
$asset->warranty_months = $asset_warranty_months; $asset->warranty_months = $asset_warranty_months;
if($asset_model) if ($asset_model) {
$asset->model_id = $asset_model->id; $asset->model_id = $asset_model->id;
if($item["user"]) }
if ($item["user"]) {
$asset->assigned_to = $item["user"]->id; $asset->assigned_to = $item["user"]->id;
if($item["location"]) }
if ($item["location"]) {
$asset->rtd_location_id = $item["location"]->id; $asset->rtd_location_id = $item["location"]->id;
}
$asset->user_id = $this->option('user_id'); $asset->user_id = $this->option('user_id');
$this->log("status_id: " . $status_id); $this->log("status_id: " . $status_id);
$asset->status_id = $status_id; $asset->status_id = $status_id;
if($item["company"]) if ($item["company"]) {
$asset->company_id = $item["company"]->id; $asset->company_id = $item["company"]->id;
}
$asset->order_number = $item["order_number"]; $asset->order_number = $item["order_number"];
if($supplier) if ($supplier) {
$asset->supplier_id = $supplier->id; $asset->supplier_id = $supplier->id;
}
$asset->notes = $item["notes"]; $asset->notes = $item["notes"];
$asset->image = $asset_image; $asset->image = $asset_image;
$this->assets->add($asset); $this->assets->add($asset);
@ -835,14 +844,17 @@ class ObjectImportCommand extends Command {
} else { } else {
$accessory->purchase_cost = 0.00; $accessory->purchase_cost = 0.00;
} }
if($item["location"]) if ($item["location"]) {
$accessory->location_id = $item["location"]->id; $accessory->location_id = $item["location"]->id;
}
$accessory->user_id = $this->option('user_id'); $accessory->user_id = $this->option('user_id');
if($item["company"]) if ($item["company"]) {
$accessory->company_id = $item["company"]->id; $accessory->company_id = $item["company"]->id;
}
$accessory->order_number = $item["order_number"]; $accessory->order_number = $item["order_number"];
if($item["category"]) if ($item["category"]) {
$accessory->category_id = $item["category"]->id; $accessory->category_id = $item["category"]->id;
}
//TODO: Implement //TODO: Implement
// $accessory->notes = e($item_notes); // $accessory->notes = e($item_notes);
@ -965,7 +977,4 @@ class ObjectImportCommand extends Command {
); );
} }
} }

View file

@ -55,10 +55,8 @@ class PaveIt extends Command
*/ */
public function handle() public function handle()
{ {
if ($this->confirm("\n****************************************************\nTHIS WILL DELETE ALL OF THE DATA IN YOUR DATABASE. \nThere is NO undo. This WILL destroy ALL of your data. \n****************************************************\n\nDo you wish to continue? No backsies! [y|N]")) if ($this->confirm("\n****************************************************\nTHIS WILL DELETE ALL OF THE DATA IN YOUR DATABASE. \nThere is NO undo. This WILL destroy ALL of your data. \n****************************************************\n\nDo you wish to continue? No backsies! [y|N]")) {
{ if ($this->option('soft')) {
if( $this->option('soft'))
{
Accessory::getQuery()->delete(); Accessory::getQuery()->delete();
Asset::getQuery()->delete(); Asset::getQuery()->delete();
Category::getQuery()->delete(); Category::getQuery()->delete();

View file

@ -1,6 +1,7 @@
<?php <?php
namespace App\Console\Commands; namespace App\Console\Commands;
use App\Models\Asset; use App\Models\Asset;
use App\Models\License; use App\Models\License;
use App\Models\Setting; use App\Models\Setting;
@ -8,7 +9,8 @@ use DB;
use Illuminate\Console\Command; use Illuminate\Console\Command;
class SendExpirationAlerts extends Command { class SendExpirationAlerts extends Command
{
/** /**
* The console command name. * The console command name.
@ -128,9 +130,4 @@ class SendExpirationAlerts extends Command {
} }
} }

View file

@ -65,5 +65,4 @@ class SendInventoryAlerts extends Command
} }
} }

View file

@ -4,7 +4,8 @@ namespace App\Console\Commands;
use Illuminate\Console\Command; use Illuminate\Console\Command;
class SystemBackup extends Command { class SystemBackup extends Command
{
/** /**
* The console command name. * The console command name.
@ -41,7 +42,4 @@ class SystemBackup extends Command {
$this->call('backup:run'); $this->call('backup:run');
} }
} }

View file

@ -6,7 +6,8 @@ use Symfony\Component\Console\Input\InputArgument;
use Illuminate\Console\Command; use Illuminate\Console\Command;
class Versioning extends Command { class Versioning extends Command
{
/** /**
* The console command name. * The console command name.

View file

@ -322,6 +322,7 @@ class AccessoriesController extends Controller
$admin_user = Auth::user();
$settings = Setting::getSettings(); $settings = Setting::getSettings();
if ($settings->slack_endpoint) { if ($settings->slack_endpoint) {

View file

@ -80,7 +80,8 @@ class AssetsController extends Controller
* @since [v3.0] * @since [v3.0]
* @return Redirect * @return Redirect
*/ */
public function getAssetByTag() { public function getAssetByTag()
{
if (Input::get('topsearch')=="true") { if (Input::get('topsearch')=="true") {
$topsearch = true; $topsearch = true;
} else { } else {
@ -231,8 +232,7 @@ class AssetsController extends Controller
// FIXME: No idea why this is returning a Builder error on db_column_name. // FIXME: No idea why this is returning a Builder error on db_column_name.
// Need to investigate and fix. Using static method for now. // Need to investigate and fix. Using static method for now.
$model = AssetModel::find($request->get('model_id')); $model = AssetModel::find($request->get('model_id'));
if($model->fieldset) if ($model->fieldset) {
{
foreach ($model->fieldset->fields as $field) { foreach ($model->fieldset->fields as $field) {
$asset->{\App\Models\CustomField::name_to_db_name($field->name)} = e($request->input(\App\Models\CustomField::name_to_db_name($field->name))); $asset->{\App\Models\CustomField::name_to_db_name($field->name)} = e($request->input(\App\Models\CustomField::name_to_db_name($field->name)));
} }
@ -254,8 +254,9 @@ class AssetsController extends Controller
\Session::flash('success', trans('admin/hardware/message.create.success')); \Session::flash('success', trans('admin/hardware/message.create.success'));
return response()->json(['redirect_url' => route('hardware')]); return response()->json(['redirect_url' => route('hardware')]);
} }
\Input::flash();
return response()->json(['errors' => $asset->getErrors()]); \Session::flash('errors', $asset->getErrors());
return response()->json(['errors' => $asset->getErrors()], 500);
} }
/** /**
@ -401,8 +402,7 @@ class AssetsController extends Controller
// FIXME: No idea why this is returning a Builder error on db_column_name. // FIXME: No idea why this is returning a Builder error on db_column_name.
// Need to investigate and fix. Using static method for now. // Need to investigate and fix. Using static method for now.
$model = AssetModel::find($request->get('model_id')); $model = AssetModel::find($request->get('model_id'));
if($model->fieldset) if ($model->fieldset) {
{
foreach ($model->fieldset->fields as $field) { foreach ($model->fieldset->fields as $field) {
$asset->{\App\Models\CustomField::name_to_db_name($field->name)} = e($request->input(\App\Models\CustomField::name_to_db_name($field->name))); $asset->{\App\Models\CustomField::name_to_db_name($field->name)} = e($request->input(\App\Models\CustomField::name_to_db_name($field->name)));
// LOG::debug($field->name); // LOG::debug($field->name);
@ -417,8 +417,9 @@ class AssetsController extends Controller
\Session::flash('success', trans('admin/hardware/message.update.success')); \Session::flash('success', trans('admin/hardware/message.update.success'));
return response()->json(['redirect_url' => route("view/hardware", $assetId)]); return response()->json(['redirect_url' => route("view/hardware", $assetId)]);
} }
\Input::flash();
return response()->json(['errors' => $asset->getErrors()]); \Session::flash('errors', $asset->getErrors());
return response()->json(['errors' => $asset->getErrors()], 500);
} }
@ -611,7 +612,7 @@ class AssetsController extends Controller
'fields' => [ 'fields' => [
[ [
'title' => 'Checked In:', 'title' => 'Checked In:',
'value' => strtoupper($logaction->asset_type).' asset <'.config('app.url').'/hardware/'.$asset->id.'/view'.'|'.e($asset->showAssetName()).'> checked in by <'.config('app.url').'/hardware/'.$asset->id.'/view'.'|'.e(Auth::user()->fullName()).'>.' 'value' => strtoupper($logaction->asset_type).' asset <'.config('app.url').'/hardware/'.$asset->id.'/view'.'|'.e($asset->showAssetName()).'> checked in by <'.config('app.url').'/admin/users/'.Auth::user()->id.'/view'.'|'.e(Auth::user()->fullName()).'>.'
], ],
[ [
'title' => 'Note:', 'title' => 'Note:',
@ -776,8 +777,9 @@ class AssetsController extends Controller
} }
// Check if the uploads directory exists. If not, try to create it. // Check if the uploads directory exists. If not, try to create it.
if(!file_exists($path)) if (!file_exists($path)) {
mkdir($path, 0755); mkdir($path, 0755);
}
if ($handle = opendir($path)) { if ($handle = opendir($path)) {
/* This is the correct way to loop over the directory. */ /* This is the correct way to loop over the directory. */
@ -874,19 +876,21 @@ class AssetsController extends Controller
return redirect()->to('hardware')->with('error', trans('general.insufficient_permissions')); return redirect()->to('hardware')->with('error', trans('general.insufficient_permissions'));
} }
$return = Artisan::call('snipeit:import', $return = Artisan::call(
'snipeit:import',
['filename'=> config('app.private_uploads').'/imports/assets/'.$filename, ['filename'=> config('app.private_uploads').'/imports/assets/'.$filename,
'--email_format'=>'firstname.lastname', '--email_format'=>'firstname.lastname',
'--username_format'=>'firstname.lastname', '--username_format'=>'firstname.lastname',
'--web-importer' => true, '--web-importer' => true,
'--user_id' => Auth::user()->id '--user_id' => Auth::user()->id
]); ]
);
$display_output = Artisan::output(); $display_output = Artisan::output();
$file = config('app.private_uploads').'/imports/assets/'.str_replace('.csv', '', $filename).'-output-'.date("Y-m-d-his").'.txt'; $file = config('app.private_uploads').'/imports/assets/'.str_replace('.csv', '', $filename).'-output-'.date("Y-m-d-his").'.txt';
file_put_contents($file, $display_output); file_put_contents($file, $display_output);
if( $return === 0) //Success if ($return === 0) { //Success
return redirect()->to('hardware')->with('success', trans('admin/hardware/message.import.success')); return redirect()->to('hardware')->with('success', trans('admin/hardware/message.import.success'));
else if( $return === 1) { // Failure } elseif ($return === 1) { // Failure
return redirect()->back()->with('import_errors', json_decode($display_output))->with('error', trans('admin/hardware/message.import.error')); return redirect()->back()->with('import_errors', json_decode($display_output))->with('error', trans('admin/hardware/message.import.error'));
} }
dd("Shouldn't be here"); dd("Shouldn't be here");

View file

@ -300,7 +300,8 @@ class CategoriesController extends Controller
return $data; return $data;
} }
public function getDataViewAssets($categoryID) { public function getDataViewAssets($categoryID)
{
$category = Category::with('assets.company')->find($categoryID); $category = Category::with('assets.company')->find($categoryID);
$category_assets = $category->assets(); $category_assets = $category->assets();
@ -369,7 +370,8 @@ class CategoriesController extends Controller
public function getDataViewAccessories($categoryID) { public function getDataViewAccessories($categoryID)
{
$category = Category::with('accessories.company')->find($categoryID); $category = Category::with('accessories.company')->find($categoryID);
$category_assets = $category->accessories; $category_assets = $category->accessories;
@ -422,7 +424,8 @@ class CategoriesController extends Controller
} }
public function getDataViewConsumables($categoryID) { public function getDataViewConsumables($categoryID)
{
$category = Category::with('accessories.company')->find($categoryID); $category = Category::with('accessories.company')->find($categoryID);
$category_assets = $category->consumables; $category_assets = $category->consumables;
@ -474,7 +477,8 @@ class CategoriesController extends Controller
return $data; return $data;
} }
public function getDataViewComponent($categoryID) { public function getDataViewComponent($categoryID)
{
$category = Category::with('accessories.company')->find($categoryID); $category = Category::with('accessories.company')->find($categoryID);
$category_assets = $category->components; $category_assets = $category->components;
@ -525,7 +529,4 @@ class CategoriesController extends Controller
$data = array('total' => $count, 'rows' => $rows); $data = array('total' => $count, 'rows' => $rows);
return $data; return $data;
} }
} }

View file

@ -260,7 +260,8 @@ class CustomFieldsController extends Controller
* @since [v3.0] * @since [v3.0]
* @return Array * @return Array
*/ */
public function postReorder($id) { public function postReorder($id)
{
$fieldset=CustomFieldset::find($id); $fieldset=CustomFieldset::find($id);
$fields = array(); $fields = array();

View file

@ -11,7 +11,6 @@ use Str;
use View; use View;
use Auth; use Auth;
/** /**
* This controller handles all actions related to Depreciations for * This controller handles all actions related to Depreciations for
* the Snipe-IT Asset Management application. * the Snipe-IT Asset Management application.

View file

@ -33,7 +33,6 @@ use URL;
use View; use View;
use Illuminate\Http\Request; use Illuminate\Http\Request;
/** /**
* This controller handles all actions related to Users for * This controller handles all actions related to Users for
* the Snipe-IT Asset Management application. * the Snipe-IT Asset Management application.
@ -523,7 +522,7 @@ class UsersController extends Controller
$logaction->logaction('checkin from'); $logaction->logaction('checkin from');
} }
LicenseSeat::whereIn('id', $license_array)->update(['assigned_to' => NULL]); LicenseSeat::whereIn('id', $license_array)->update(['assigned_to' => null]);
foreach ($users as $user) { foreach ($users as $user) {
$user->accessories()->sync(array()); $user->accessories()->sync(array());

View file

@ -7,7 +7,6 @@ use Config;
use Route; use Route;
use Gate; use Gate;
class CheckPermissions class CheckPermissions
{ {
/** /**

View file

@ -5,6 +5,7 @@ namespace App\Http\Requests;
use App\Http\Requests\Request; use App\Http\Requests\Request;
use App\Models\AssetModel; use App\Models\AssetModel;
use Session; use Session;
class AssetRequest extends Request class AssetRequest extends Request
{ {
/** /**
@ -40,8 +41,7 @@ class AssetRequest extends Request
$model = AssetModel::find($this->request->get('model_id')); $model = AssetModel::find($this->request->get('model_id'));
if (($model) && ($model->fieldset)) if (($model) && ($model->fieldset)) {
{
$rules += $model->fieldset->validation_rules(); $rules += $model->fieldset->validation_rules();
} }

View file

@ -138,14 +138,22 @@ Route::group([ 'prefix' => 'api', 'middleware' => 'auth' ], function () {
Route::group([ 'prefix' => 'categories' ], function () { Route::group([ 'prefix' => 'categories' ], function () {
Route::get('list', [ 'as' => 'api.categories.list', 'uses' => 'CategoriesController@getDatatable' ]); Route::get('list', [ 'as' => 'api.categories.list', 'uses' => 'CategoriesController@getDatatable' ]);
Route::get( '{categoryID}/asset/view', Route::get(
[ 'as' => 'api.categories.asset.view', 'uses' => 'CategoriesController@getDataViewAssets' ] ); '{categoryID}/asset/view',
Route::get( '{categoryID}/accessory/view', [ 'as' => 'api.categories.asset.view', 'uses' => 'CategoriesController@getDataViewAssets' ]
[ 'as' => 'api.categories.accessory.view', 'uses' => 'CategoriesController@getDataViewAccessories' ] ); );
Route::get( '{categoryID}/consumable/view', Route::get(
[ 'as' => 'api.categories.consumable.view', 'uses' => 'CategoriesController@getDataViewConsumables' ] ); '{categoryID}/accessory/view',
Route::get( '{categoryID}/component/view', [ 'as' => 'api.categories.accessory.view', 'uses' => 'CategoriesController@getDataViewAccessories' ]
[ 'as' => 'api.categories.component.view', 'uses' => 'CategoriesController@getDataViewComponent' ] ); );
Route::get(
'{categoryID}/consumable/view',
[ 'as' => 'api.categories.consumable.view', 'uses' => 'CategoriesController@getDataViewConsumables' ]
);
Route::get(
'{categoryID}/component/view',
[ 'as' => 'api.categories.component.view', 'uses' => 'CategoriesController@getDataViewComponent' ]
);
}); });
/*-- Suppliers API (mostly for creating new ones in-line while creating an asset) --*/ /*-- Suppliers API (mostly for creating new ones in-line while creating an asset) --*/

View file

@ -172,7 +172,8 @@ class Asset extends Depreciable
} }
public function getDetailedNameAttribute() { public function getDetailedNameAttribute()
{
if ($this->assigned_user) { if ($this->assigned_user) {
$user_name = $user->fullName(); $user_name = $user->fullName();
} else { } else {
@ -542,13 +543,13 @@ class Asset extends Depreciable
public function scopeAssetsByLocation($query, $location) public function scopeAssetsByLocation($query, $location)
{ {
return $query->where(function ($query) use ($location) return $query->where(function ($query) use ($location) {
{
$query->whereHas('assigneduser', function ($query) use ($location) $query->whereHas('assigneduser', function ($query) use ($location) {
{
$query->where('users.location_id', '=', $location->id); $query->where('users.location_id', '=', $location->id);
})->orWhere(function ($query) use ($location) })->orWhere(function ($query) use ($location) {
{
$query->where('assets.rtd_location_id', '=', $location->id); $query->where('assets.rtd_location_id', '=', $location->id);
$query->whereNull('assets.assigned_to'); $query->whereNull('assets.assigned_to');
}); });

View file

@ -37,7 +37,4 @@ class Group extends Model
{ {
return json_decode($this->permissions, true); return json_decode($this->permissions, true);
} }
} }

View file

@ -55,7 +55,8 @@ class Setting extends Model
return $static_cache; return $static_cache;
} }
public static function setupCompleted() { public static function setupCompleted()
{
$users_table_exists = Schema::hasTable('users'); $users_table_exists = Schema::hasTable('users');
$settings_table_exists = Schema::hasTable('settings'); $settings_table_exists = Schema::hasTable('settings');

View file

@ -76,7 +76,8 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
return false; return false;
} }
public function isSuperUser() { public function isSuperUser()
{
if (!$user_permissions = json_decode($this->permissions, true)) { if (!$user_permissions = json_decode($this->permissions, true)) {
return false; return false;
} }

View file

@ -79,16 +79,18 @@
<th>Errors</th> <th>Errors</th>
</thead> </thead>
<tbody> <tbody>
@foreach (session('import_errors') as $asset => $error) @foreach (session('import_errors') as $asset => $itemErrors)
<tr> <tr>
<td> {{ $asset }}</td> <td> {{ $asset }}</td>
@foreach ($error as $field => $values ) <td>
<td> <span><b>{{ $field }}:</b> @foreach ($itemErrors as $field => $values )
<b>{{ $field }}:</b>
@foreach( $values as $errorString) @foreach( $values as $errorString)
<span>{{$errorString[0]}} </span> <span>{{$errorString[0]}} </span>
@endforeach @endforeach
</td> <br />
@endforeach @endforeach
</td>
</tr> </tr>
@endforeach @endforeach
</tbody> </tbody>

View file

@ -249,10 +249,14 @@
<td>{{ trans('admin/hardware/form.notes') }}</td> <td>{{ trans('admin/hardware/form.notes') }}</td>
<td>{{ $asset->notes }}</td> <td>{{ $asset->notes }}</td>
</tr> </tr>
@if ($asset->created_at)
<tr> <tr>
<td>{{ trans('general.created_at') }}</td> <td>{{ trans('general.created_at') }}</td>
<td>{{ $asset->created_at->format('F j, Y h:iA') }}</td> <td>
{{ $user->created_at->format('F j, Y h:iA') }}
</td>
</tr> </tr>
@endif
</tbody> </tbody>
</table> </table>
</div> <!-- /table-responsive --> </div> <!-- /table-responsive -->

View file

@ -111,10 +111,14 @@
<td>{{ $user->userloc->name }}</td> <td>{{ $user->userloc->name }}</td>
</tr> </tr>
@endif @endif
@if ($user->created_at)
<tr> <tr>
<td>{{ trans('general.created_at') }}</td> <td>{{ trans('general.created_at') }}</td>
<td>{{ $user->created_at->format('F j, Y h:iA') }}</td> <td>
{{ $user->created_at->format('F j, Y h:iA') }}
</td>
</tr> </tr>
@endif
</table> </table>
</div> </div>