WIP import mapper #3639

@dmeltzer, I’m not sure how much extra work this will be to integrate.
This commit is contained in:
snipe 2017-06-09 16:29:42 -07:00
parent c2494fe0e5
commit ad816264e9
5 changed files with 286 additions and 1 deletions

View file

@ -687,6 +687,34 @@ class AssetsController extends Controller
return View::make('hardware/import'); return View::make('hardware/import');
} }
/**
* Map the fields for import
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v4.0]
* @return View
*/
public function getImportMap()
{
$this->authorize('create', Asset::class);
// This is currently hardcoded for testing - should use a post variable or something to dynamically select the correct file.
$file = storage_path().'/private_uploads/imports/2017-06-08-072329-sample-assets.csv';
$reader = Reader::createFromPath($file);
$header_rows = $reader->fetchOne(0);
// Grab the first row to display via ajax as the user picks fields
$first_row = $reader->fetchOne(1);
// Grab all of the custom fields to we can map those too.
$custom_fields = CustomField::all();
return View::make('importer/fieldmapper')->with('header_rows', $header_rows)->with('first_row',$first_row)->with('custom_fields',$custom_fields);
}
/** /**
* Process the uploaded file * Process the uploaded file
* *

View file

@ -518,3 +518,22 @@ Form::macro('customfield_elements', function ($name = "customfield_elements", $s
return $select; return $select;
}); });
Form::macro('header_list', function ($headers = null, $name = "header_list", $selected = null, $class = null) {
$select = '<select name="'.$name.'" class="'.$class.'" style="width: 100%">';
$select .= '<option value="">Do Not Import</option>';
foreach ($headers as $header => $label) {
$select .= '<option value="'.str_slug($label).'"'.($selected == str_slug($label) ? ' selected="selected"' : '').'>'.e($label).'</option> '."\n";
}
$select .= '</select>';
return $select;
});

View file

@ -0,0 +1,233 @@
@extends('layouts.default')
{{-- Page title --}}
@section('title')
Map Import Fields
@parent
@stop
@section('header_right')
<a href="{{ URL::previous() }}" class="btn btn-primary pull-right">
{{ trans('general.back') }}</a>
@stop
{{-- Page content --}}
@section('content')
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="box box-default">
<div class="box-header with-border">
<h3 class="box-title">
</h3>
@if (isset($helpText))
<div class="box-tools pull-right">
<button class="slideout-menu-toggle btn btn-box-tool btn-box-tool-lg" data-toggle="tooltip" title="Help"><i class="fa fa-question"></i></button>
</div>
@endif
</div><!-- /.box-header -->
<div class="box-body">
<form id="create-form" class="form-horizontal" method="post" action="{{ (isset($formAction)) ? $formAction : \Request::url() }}" autocomplete="off" role="form" enctype="multipart/form-data">
<!-- CSRF Token -->
{{ csrf_field() }}
<pre>
@php
print_r($first_row);
@endphp
</pre>
<div class="col-md-8 col-md-offset-2">
<h3>Standard Fields</h3>
<hr>
</div>
<div class="form-group">
<label for="url" class="col-md-3 control-label">Check out to User (First Last)
</label>
<div class="col-md-4 required">
{!! Form::header_list($header_rows, 'user_name_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
<div class="form-group">
<label for="url" class="col-md-3 control-label">Username
</label>
<div class="col-md-4 required">
{!! Form::header_list($header_rows, 'username_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
<div class="form-group">
<label for="url" class="col-md-3 control-label">Email
</label>
<div class="col-md-4 required">
{!! Form::header_list($header_rows, 'email_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
<div class="form-group">
<label for="url" class="col-md-3 control-label">Item Name
</label>
<div class="col-md-4 required">
{!! Form::header_list($header_rows, 'item_name_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
<div class="form-group">
<label for="url" class="col-md-3 control-label">Asset Tag
</label>
<div class="col-md-4 required">
{!! Form::header_list($header_rows, 'asset_tag_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
<div class="form-group">
<label for="url" class="col-md-3 control-label">Serial Number
</label>
<div class="col-md-4 required">
{!! Form::header_list($header_rows, 'serial_number_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
<div class="form-group">
<label for="url" class="col-md-3 control-label">Model name
</label>
<div class="col-md-4 required">
{!! Form::header_list($header_rows, 'model_name_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
<div class="form-group">
<label for="url" class="col-md-3 control-label">Model Number
</label>
<div class="col-md-4">
{!! Form::header_list($header_rows, 'model_number_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
<div class="form-group">
<label for="url" class="col-md-3 control-label">Category
</label>
<div class="col-md-4 required">
{!! Form::header_list($header_rows, 'category_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
<div class="form-group">
<label for="url" class="col-md-3 control-label">Manufacturer
</label>
<div class="col-md-4 required">
{!! Form::header_list($header_rows, 'manufacturer_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
<div class="form-group">
<label for="url" class="col-md-3 control-label">Company
</label>
<div class="col-md-4">
{!! Form::header_list($header_rows, 'company_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
<div class="form-group">
<label for="url" class="col-md-3 control-label">Location
</label>
<div class="col-md-4">
{!! Form::header_list($header_rows, 'location_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
<div class="form-group">
<label for="url" class="col-md-3 control-label">Purchase Date
</label>
<div class="col-md-4">
{!! Form::header_list($header_rows, 'purchase_date_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
<div class="form-group">
<label for="url" class="col-md-3 control-label">Purchase Cost
</label>
<div class="col-md-4">
{!! Form::header_list($header_rows, 'purchase_cost_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
<div class="form-group">
<label for="url" class="col-md-3 control-label">Status
</label>
<div class="col-md-4">
{!! Form::header_list($header_rows, 'status_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
<div class="form-group">
<label for="url" class="col-md-3 control-label">Notes
</label>
<div class="col-md-4">
{!! Form::header_list($header_rows, 'notes_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
<div class="form-group">
<label for="url" class="col-md-3 control-label">Image Filename
</label>
<div class="col-md-4">
{!! Form::header_list($header_rows, 'image_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
@if ($custom_fields->count() > 0)
<div class="col-md-8 col-md-offset-2">
<h3>Custom Fields</h3>
<hr>
</div>
@foreach ($custom_fields as $custom_field)
<div class="form-group">
<label for="url" class="col-md-3 control-label">{{ $custom_field->name }}
</label>
<div class="col-md-4">
{!! Form::header_list($header_rows, 'image_header', Input::old('header_row'), 'select2') !!}
</div>
</div>
@endforeach
@endif
<div class="box-footer text-right">
<a class="btn btn-link" href="{{ URL::previous() }}">{{ trans('button.cancel') }}</a>
<button type="submit" class="btn btn-success"><i class="fa fa-check icon-white"></i> {{ trans('general.process') }}</button>
</div>
</form>
</div>
</div>
</div>
@if ((isset($helpText)) && (isset($helpTitle)))
<div class="slideout-menu">
<a href="#" class="slideout-menu-toggle pull-right">×</a>
<h3>
{{ $helpTitle}}
</h3>
<p>{{ $helpText }} </p>
</div>
@endif
</div>
@stop

View file

@ -1,4 +1,4 @@
@extends('layouts/default') two@extends('layouts/default')
{{-- Page title --}} {{-- Page title --}}
@section('title') @section('title')

View file

@ -87,6 +87,11 @@ Route::group(
'uses' => 'AssetsController@getDeleteImportFile' 'uses' => 'AssetsController@getDeleteImportFile'
]); ]);
Route::get('import/map',[
'as' => 'import.map',
'uses' => 'AssetsController@getImportMap'
]);
Route::get('import',[ Route::get('import',[
'as' => 'assets/import', 'as' => 'assets/import',
'uses' => 'AssetsController@getImportUpload' 'uses' => 'AssetsController@getImportUpload'