mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
More language lines. Add a check for double lines.
This commit is contained in:
parent
85f484e73c
commit
da5e48d769
@ -15,6 +15,7 @@ use FireflyIII\Exceptions\FireflyException;
|
|||||||
use FireflyIII\Models\ImportJob;
|
use FireflyIII\Models\ImportJob;
|
||||||
use FireflyIII\Models\Transaction;
|
use FireflyIII\Models\Transaction;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
|
use FireflyIII\Models\TransactionJournalMeta;
|
||||||
use FireflyIII\Models\TransactionType;
|
use FireflyIII\Models\TransactionType;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
@ -81,6 +82,19 @@ class ImportStorage
|
|||||||
return $collection;
|
return $collection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $hash
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
private function alreadyImported(string $hash): bool
|
||||||
|
{
|
||||||
|
|
||||||
|
$count = TransactionJournalMeta::where('name', 'originalImportHash')->where('data', json_encode($hash))->count();
|
||||||
|
|
||||||
|
return $count > 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param float $amount
|
* @param float $amount
|
||||||
*
|
*
|
||||||
@ -183,6 +197,7 @@ class ImportStorage
|
|||||||
*/
|
*/
|
||||||
private function storeJournal($entry): TransactionJournal
|
private function storeJournal($entry): TransactionJournal
|
||||||
{
|
{
|
||||||
|
|
||||||
$billId = is_null($entry->fields['bill']) ? null : $entry->fields['bill']->id;
|
$billId = is_null($entry->fields['bill']) ? null : $entry->fields['bill']->id;
|
||||||
$journalData = [
|
$journalData = [
|
||||||
'user_id' => $entry->user->id,
|
'user_id' => $entry->user->id,
|
||||||
@ -204,6 +219,13 @@ class ImportStorage
|
|||||||
}
|
}
|
||||||
Log::debug('Created journal', ['id' => $journal->id]);
|
Log::debug('Created journal', ['id' => $journal->id]);
|
||||||
|
|
||||||
|
// save hash as meta value:
|
||||||
|
$meta = new TransactionJournalMeta;
|
||||||
|
$meta->name = 'originalImportHash';
|
||||||
|
$meta->data = $entry->hash;
|
||||||
|
$meta->transactionjournal()->associate($journal);
|
||||||
|
$meta->save();
|
||||||
|
|
||||||
return $journal;
|
return $journal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,6 +252,21 @@ class ImportStorage
|
|||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->alreadyImported($entry->hash)) {
|
||||||
|
Log::warning(sprintf('Cannot import row %d, because it has already been imported.', $index));
|
||||||
|
$result = new ImportResult();
|
||||||
|
$result->failed();
|
||||||
|
$errorText = sprintf('Row #%d: This row has been imported before.', $index);
|
||||||
|
$result->appendError($errorText);
|
||||||
|
$extendedStatus = $this->job->extended_status;
|
||||||
|
$extendedStatus['errors'][] = $errorText;
|
||||||
|
$this->job->extended_status = $extendedStatus;
|
||||||
|
$this->job->save();
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
Log::debug(sprintf('Going to store row %d', $index));
|
Log::debug(sprintf('Going to store row %d', $index));
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,7 +86,6 @@ class ImportValidator
|
|||||||
|
|
||||||
$newCollection->put($index, $entry);
|
$newCollection->put($index, $entry);
|
||||||
$this->job->addStepsDone(1);
|
$this->job->addStepsDone(1);
|
||||||
sleep(1);
|
|
||||||
}
|
}
|
||||||
Log::notice(sprintf('Finished validating %d entry(ies).', $newCollection->count()));
|
Log::notice(sprintf('Finished validating %d entry(ies).', $newCollection->count()));
|
||||||
|
|
||||||
|
@ -66,7 +66,6 @@ class CsvImporter implements ImporterInterface
|
|||||||
$this->collection->put($line, $importEntry);
|
$this->collection->put($line, $importEntry);
|
||||||
$this->job->addTotalSteps(3);
|
$this->job->addTotalSteps(3);
|
||||||
$this->job->addStepsDone(1);
|
$this->job->addStepsDone(1);
|
||||||
sleep(1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Log::debug(sprintf('Import collection contains %d entries', $this->collection->count()));
|
Log::debug(sprintf('Import collection contains %d entries', $this->collection->count()));
|
||||||
|
@ -66,7 +66,7 @@ class TransactionJournalMeta extends Model
|
|||||||
*
|
*
|
||||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||||
*/
|
*/
|
||||||
public function transactionjournal(): BelongsTo
|
public function transactionJournal(): BelongsTo
|
||||||
{
|
{
|
||||||
return $this->belongsTo('FireflyIII\Models\TransactionJournal');
|
return $this->belongsTo('FireflyIII\Models\TransactionJournal');
|
||||||
}
|
}
|
||||||
|
@ -5,12 +5,15 @@
|
|||||||
* This software may be modified and distributed under the terms
|
* This software may be modified and distributed under the terms
|
||||||
* of the MIT license. See the LICENSE file for details.
|
* of the MIT license. See the LICENSE file for details.
|
||||||
*/
|
*/
|
||||||
/* globals $, jobImportUrl, jobStartUrl, token, langImportMultiError, langImportSingleError */
|
/* globals $, jobImportUrl, jobStartUrl, token, langImportMultiError, langImportSingleError, langImportFatalError, langImportTimeOutError */
|
||||||
|
|
||||||
|
|
||||||
var startedImport = false;
|
var startedImport = false;
|
||||||
var startInterval = 2000;
|
var startInterval = 2000;
|
||||||
var interval = 500;
|
var interval = 500;
|
||||||
|
var timeoutLimit = 5000;
|
||||||
|
var currentLimit = 0;
|
||||||
|
var stepCount = 0;
|
||||||
$(function () {
|
$(function () {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
@ -85,12 +88,42 @@ function kickStartJob() {
|
|||||||
startedImport = true;
|
startedImport = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateTimeout(data) {
|
||||||
|
"use strict";
|
||||||
|
if (data.stepsDone != stepCount) {
|
||||||
|
stepCount = data.stepsDone;
|
||||||
|
currentLimit = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
currentLimit = currentLimit + interval;
|
||||||
|
console.log("stepCount: " + stepCount + ", stepsDone: " + data.stepsDone + ", currentLimit: " + currentLimit);
|
||||||
|
}
|
||||||
|
|
||||||
|
function timeoutError() {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
// set status
|
||||||
|
$('#import-status-txt').addClass('text-danger').text(langImportTimeOutError);
|
||||||
|
|
||||||
|
// remove progress bar.
|
||||||
|
$('#import-status-holder').hide();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function reportOnJobImport(data) {
|
function reportOnJobImport(data) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
updateBar(data);
|
updateBar(data);
|
||||||
reportErrors(data);
|
reportErrors(data);
|
||||||
reportStatus(data);
|
reportStatus(data);
|
||||||
|
updateTimeout(data);
|
||||||
|
|
||||||
|
// same number of steps as last time?
|
||||||
|
if (currentLimit > timeoutLimit) {
|
||||||
|
timeoutError();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// if the job has not actually started, do so now:
|
// if the job has not actually started, do so now:
|
||||||
if (!data.started && !startedImport) {
|
if (!data.started && !startedImport) {
|
||||||
@ -113,9 +146,7 @@ function failedJobImport(jqxhr, textStatus, error) {
|
|||||||
|
|
||||||
// set status
|
// set status
|
||||||
// "There was an error during the import routine. Please check the log files. The error seems to be: '"
|
// "There was an error during the import routine. Please check the log files. The error seems to be: '"
|
||||||
$('#import-status-txt').addClass('text-danger').text(
|
$('#import-status-txt').addClass('text-danger').text(langImportFatalError + ' ' + textStatus + ' ' + error);
|
||||||
langImportFatalError + textStatus + ' ' + error
|
|
||||||
);
|
|
||||||
|
|
||||||
// remove progress bar.
|
// remove progress bar.
|
||||||
$('#import-status-holder').hide();
|
$('#import-status-holder').hide();
|
||||||
|
@ -786,4 +786,8 @@ return [
|
|||||||
'import_status_errors' => 'Import errors',
|
'import_status_errors' => 'Import errors',
|
||||||
'import_status_report' => 'Import report',
|
'import_status_report' => 'Import report',
|
||||||
'import_finished' => 'Import has finished',
|
'import_finished' => 'Import has finished',
|
||||||
|
'import_error_single' => 'An error has occured during the import.',
|
||||||
|
'import_error_multi' => 'Some errors occured during the import.',
|
||||||
|
'import_error_fatal' => 'There was an error during the import routine. Please check the log files. The error seems to be:',
|
||||||
|
'import_error_timeout' => 'The import seems to have timed out. If this error persists, please import your data using the console command.',
|
||||||
];
|
];
|
||||||
|
@ -62,6 +62,7 @@
|
|||||||
var langImportSingleError = '{{ 'import_error_single'|_ }}';
|
var langImportSingleError = '{{ 'import_error_single'|_ }}';
|
||||||
var langImportMultiError = '{{ 'import_error_multi'|_ }}';
|
var langImportMultiError = '{{ 'import_error_multi'|_ }}';
|
||||||
var langImportFatalError = '{{ 'import_error_fatal'|_ }}';
|
var langImportFatalError = '{{ 'import_error_fatal'|_ }}';
|
||||||
|
var langImportTimeOutError = '{{ 'import_error_timeout'|_ }}';
|
||||||
|
|
||||||
var jobKey = '{{ job.key }}';
|
var jobKey = '{{ job.key }}';
|
||||||
var jobImportUrl = '{{ route('import.json', [job.key]) }}';
|
var jobImportUrl = '{{ route('import.json', [job.key]) }}';
|
||||||
|
Loading…
Reference in New Issue
Block a user