First shot

Signed-off-by: snipe <snipe@snipe.net>
This commit is contained in:
snipe 2024-08-16 20:29:53 +01:00
parent 48903b1402
commit 7658f7c41d
5 changed files with 46 additions and 14 deletions

View file

@ -71,8 +71,10 @@ class AssetImporter extends ItemImporter
$asset = Asset::where(['asset_tag'=> (string) $asset_tag])->first(); $asset = Asset::where(['asset_tag'=> (string) $asset_tag])->first();
if ($asset) { if ($asset) {
if (! $this->updating) { if (! $this->updating) {
$this->log('A matching Asset '.$asset_tag.' already exists'); $exists_error = 'A matching Asset '.$asset_tag.' already exists';
return; $this->log($exists_error);
$this->addErrorToBag($asset, 'asset_tag', $exists_error);
return $exists_error;
} }
$this->log('Updating Asset'); $this->log('Updating Asset');

View file

@ -281,6 +281,13 @@ abstract class Importer
} }
} }
protected function addErrorToBag($item, $field, $error_message)
{
if ($this->errorCallback) {
call_user_func($this->errorCallback, $item, $field, [$field => [$error_message]]);
}
}
/** /**
* Finds the user matching given data, or creates a new one if there is no match. * Finds the user matching given data, or creates a new one if there is no match.
* This is NOT used by the User Import, only for Asset/Accessory/etc where * This is NOT used by the User Import, only for Asset/Accessory/etc where

View file

@ -196,33 +196,46 @@ class ItemImporter extends Importer
{ {
$condition = array(); $condition = array();
$asset_model_name = $this->findCsvMatch($row, 'asset_model'); $asset_model_name = $this->findCsvMatch($row, 'asset_model');
$asset_model_category = $this->findCsvMatch($row, 'category');
$asset_modelNumber = $this->findCsvMatch($row, 'model_number'); $asset_modelNumber = $this->findCsvMatch($row, 'model_number');
// TODO: At the moment, this means we can't update the model number if the model name stays the same. // TODO: At the moment, this means we can't update the model number if the model name stays the same.
if (! $this->shouldUpdateField($asset_model_name)) { if (! $this->shouldUpdateField($asset_model_name)) {
return; return;
} }
if ((empty($asset_model_name)) && (! empty($asset_modelNumber))) { if ((empty($asset_model_name)) && (! empty($asset_modelNumber))) {
$asset_model_name = $asset_modelNumber; $asset_model_name = $asset_modelNumber;
} elseif ((empty($asset_model_name)) && (empty($asset_modelNumber))) { } elseif ((empty($asset_model_name)) && (empty($asset_modelNumber))) {
$asset_model_name = 'Unknown'; $asset_model_name = 'Unknown';
} }
if ((!empty($asset_model_name)) && (empty($asset_modelNumber))) { $asset_model = AssetModel::select('id');
$condition[] = ['name', '=', $asset_model_name];
} elseif ((!empty($asset_model_name)) && (!empty($asset_modelNumber))) { if (!empty($asset_model_name)) {
$condition[] = ['name', '=', $asset_model_name]; $asset_model = $asset_model->where('name', '=', $asset_model_name);
$condition[] = ['model_number', '=', $asset_modelNumber];
if (!empty($asset_modelNumber)) {
$asset_model = $asset_model->where('model_number', '=', $asset_modelNumber);
}
} }
$editingModel = $this->updating; $editingModel = $this->updating;
$asset_model = AssetModel::where($condition)->first(); $this->log('SQL: '.$asset_model->toSql());
$asset_model = $asset_model->first();
$this->log('Name: '.$asset_model_name);
$this->log('Number: '.$asset_modelNumber);
$this->log('Category: '.$asset_model_category);
$this->log('Model Info: '.print_r($asset_model, true));
if ($asset_model) { if ($asset_model) {
if (! $this->updating) { if (! $this->updating) {
$this->log('A matching model already exists, returning it.'); $this->log('A matching model already exists, returning it.');
return $asset_model->id; return $asset_model->id;
} }
$this->log('Matching Model found, updating it.'); $this->log('Matching Model found, updating it.');
$item = $this->sanitizeItemForStoring($asset_model, $editingModel); $item = $this->sanitizeItemForStoring($asset_model, $editingModel);
$item['name'] = $asset_model_name; $item['name'] = $asset_model_name;
@ -237,14 +250,16 @@ class ItemImporter extends Importer
$this->log('Asset Model Updated'); $this->log('Asset Model Updated');
return $asset_model->id; return $asset_model->id;
}
$this->log('No Matching Model, Creating a new one');
}
$this->log('No Matching Model, Creating a new one');
$asset_model = new AssetModel(); $asset_model = new AssetModel();
$item = $this->sanitizeItemForStoring($asset_model, $editingModel); $item = $this->sanitizeItemForStoring($asset_model, $editingModel);
$item['name'] = $asset_model_name; $item['name'] = $asset_model_name;
$item['model_number'] = $asset_modelNumber; $item['model_number'] = $asset_modelNumber;
$item['notes'] = $this->findCsvMatch($row, 'model_notes'); $item['notes'] = $this->findCsvMatch($row, 'model_notes');
$item['category_id'] = $this->createOrFetchCategory($asset_model_category);
$asset_model->fill($item); $asset_model->fill($item);
$item = null; $item = null;
@ -254,6 +269,7 @@ class ItemImporter extends Importer
return $asset_model->id; return $asset_model->id;
} }
$this->log('Asset Model Errors: '.$asset_model->getErrors());
$this->logError($asset_model, 'Asset Model "'.$asset_model_name.'"'); $this->logError($asset_model, 'Asset Model "'.$asset_model_name.'"');
return null; return null;

View file

@ -374,6 +374,12 @@ class Importer extends Component
'model name', 'model name',
'model', 'model',
], ],
'eol_date' =>
[
'eol',
'eol date',
'asset eol date',
],
'gravatar' => 'gravatar' =>
[ [
'gravatar', 'gravatar',

View file

@ -33,6 +33,7 @@
<table class="table table-striped table-bordered" id="errors-table"> <table class="table table-striped table-bordered" id="errors-table">
<thead> <thead>
<th>{{ trans('general.item') }}</th> <th>{{ trans('general.item') }}</th>
<th>Field</th>
<th>{{ trans('general.error') }}</th> <th>{{ trans('general.error') }}</th>
</thead> </thead>
<tbody> <tbody>
@ -41,8 +42,8 @@
@foreach($error_bag as $field => $error_list) @foreach($error_bag as $field => $error_list)
<tr> <tr>
<td><b>{{ $key }}</b></td> <td><b>{{ $key }}</b></td>
<td><b>{{ $field }}</b></td>
<td> <td>
<b>{{ $field }}:</b>
<span>{{ implode(", ",$error_list) }}</span> <span>{{ implode(", ",$error_list) }}</span>
<br /> <br />
</td> </td>