mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-10 13:12:50 +01:00
93 lines
2.7 KiB
PHP
93 lines
2.7 KiB
PHP
<?php namespace App\Http\Controllers;
|
|
|
|
use Utils;
|
|
use View;
|
|
use Exception;
|
|
use Input;
|
|
use Session;
|
|
use Redirect;
|
|
use App\Services\ImportService;
|
|
use App\Http\Controllers\BaseController;
|
|
|
|
class ImportController extends BaseController
|
|
{
|
|
public function __construct(ImportService $importService)
|
|
{
|
|
//parent::__construct();
|
|
|
|
$this->importService = $importService;
|
|
}
|
|
|
|
public function doImport()
|
|
{
|
|
$source = Input::get('source');
|
|
$files = [];
|
|
|
|
foreach (ImportService::$entityTypes as $entityType) {
|
|
if (Input::file("{$entityType}_file")) {
|
|
$files[$entityType] = Input::file("{$entityType}_file")->getRealPath();
|
|
if ($source === IMPORT_CSV) {
|
|
Session::forget("{$entityType}-data");
|
|
}
|
|
}
|
|
}
|
|
|
|
try {
|
|
if ($source === IMPORT_CSV) {
|
|
$data = $this->importService->mapCSV($files);
|
|
return View::make('accounts.import_map', ['data' => $data]);
|
|
} else {
|
|
$results = $this->importService->import($source, $files);
|
|
return $this->showResult($results);
|
|
}
|
|
} catch (Exception $exception) {
|
|
Utils::logError($exception);
|
|
Session::flash('error', $exception->getMessage());
|
|
return Redirect::to('/settings/' . ACCOUNT_IMPORT_EXPORT);
|
|
}
|
|
}
|
|
|
|
public function doImportCSV()
|
|
{
|
|
$map = Input::get('map');
|
|
$headers = Input::get('headers');
|
|
|
|
try {
|
|
$results = $this->importService->importCSV($map, $headers);
|
|
return $this->showResult($results);
|
|
} catch (Exception $exception) {
|
|
Utils::logError($exception);
|
|
Session::flash('error', $exception->getMessage());
|
|
return Redirect::to('/settings/' . ACCOUNT_IMPORT_EXPORT);
|
|
}
|
|
}
|
|
|
|
private function showResult($results)
|
|
{
|
|
$message = '';
|
|
$skipped = [];
|
|
|
|
foreach ($results as $entityType => $entityResults) {
|
|
if ($count = count($entityResults[RESULT_SUCCESS])) {
|
|
$message .= trans("texts.created_{$entityType}s", ['count' => $count]) . '<br/>';
|
|
}
|
|
if (count($entityResults[RESULT_FAILURE])) {
|
|
$skipped = array_merge($skipped, $entityResults[RESULT_FAILURE]);
|
|
}
|
|
}
|
|
|
|
if (count($skipped)) {
|
|
$message .= '<p/>' . trans('texts.failed_to_import') . '<br/>';
|
|
foreach ($skipped as $skip) {
|
|
$message .= json_encode($skip) . '<br/>';
|
|
}
|
|
}
|
|
|
|
if ($message) {
|
|
Session::flash('warning', $message);
|
|
}
|
|
|
|
return Redirect::to('/settings/' . ACCOUNT_IMPORT_EXPORT);
|
|
}
|
|
}
|