15 changed files with 883 additions and 981 deletions
-
1app/Http/Controllers/Import/ConfigurationController.php
-
1app/Http/Controllers/Import/UploadController.php
-
997resources/views/v2/import/004-configure/index.blade.php
-
68resources/views/v2/import/004-configure/partials/camt-053-options.blade.php
-
101resources/views/v2/import/004-configure/partials/csv-options.blade.php
-
110resources/views/v2/import/004-configure/partials/duplicate-detection-options.blade.php
-
103resources/views/v2/import/004-configure/partials/generic-options.blade.php
-
104resources/views/v2/import/004-configure/partials/gocardless-spectre-accounts.blade.php
-
104resources/views/v2/import/004-configure/partials/gocardless-spectre-dates.blade.php
-
31resources/views/v2/import/004-configure/partials/import-options.blade.php
-
40resources/views/v2/import/004-configure/partials/no-account-warning.blade.php
-
53resources/views/v2/import/004-configure/partials/opening-box.blade.php
-
35resources/views/v2/import/004-configure/partials/simplefin-accounts.blade.php
-
85resources/views/v2/import/004-configure/partials/simplefin-options.blade.php
-
31resources/views/v2/import/004-configure/partials/spectre-options.blade.php
997
resources/views/v2/import/004-configure/index.blade.php
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,68 @@ |
|||
<div class="row mt-3"> |
|||
<div class="col-lg-10 offset-lg-1"> |
|||
<div class="card"> |
|||
<div class="card-header"> |
|||
CAMT.053 import options |
|||
</div> |
|||
<div class="card-body"> |
|||
<div class="form-group row mb-3"> |
|||
<div class="col-sm-3">How to handle "Level-D" data</div> |
|||
<div class="col-sm-9"> |
|||
<select id="grouped_transaction_handling" |
|||
name="grouped_transaction_handling" |
|||
class="form-control" |
|||
aria-describedby="grouped_transaction_handling_help"> |
|||
<option |
|||
label="Create multiple single transactions, for each Level-D record" |
|||
@if('single' === $configuration->getGroupedTransactionHandling()) selected |
|||
@endif |
|||
value="single">Create multiple single transactions, for each Level-D |
|||
record |
|||
</option> |
|||
<option disabled |
|||
label="Create one split transaction with splits for each record" |
|||
@if('split' === $configuration->getGroupedTransactionHandling()) selected |
|||
@endif |
|||
value="split">Create one split transaction with splits for each |
|||
record |
|||
</option> |
|||
<option |
|||
label='Drop "level-D" data, sum and merge all details in a single transaction' |
|||
@if('group' === $configuration->getGroupedTransactionHandling()) selected |
|||
@endif |
|||
value="group">Drop "level-D" data, sum and merge all details in a |
|||
single transaction |
|||
</option> |
|||
</select> |
|||
<small class="form-text text-muted"> |
|||
It's not recommended to drop the "level-D" data, you may lose details. |
|||
</small> |
|||
</div> |
|||
</div> |
|||
<div class="form-group row mb-3"> |
|||
<div class="col-sm-3">Use the entire address of the opposing part?</div> |
|||
<div class="col-sm-9"> |
|||
<div class="form-check"> |
|||
<input class="form-check-input" |
|||
@if($configuration->isUseEntireOpposingAddress()) checked @endif |
|||
type="checkbox" id="use_entire_opposing_address" |
|||
name="use_entire_opposing_address" value="1" |
|||
aria-describedby="useEntireOpposingAddressHelp"> |
|||
<label class="form-check-label" for="use_entire_opposing_address"> |
|||
Yes |
|||
</label> |
|||
<small id="use_entire_opposing_address_help" |
|||
class="form-text text-muted"> |
|||
<br> |
|||
The default is to only use the name, and only use the address |
|||
details when no name is available. |
|||
If you select this option, both name and address will always be used |
|||
(when available). |
|||
</small> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
@ -0,0 +1,101 @@ |
|||
<div class="row mt-3"> |
|||
<div class="col-lg-10 offset-lg-1"> |
|||
<div class="card"> |
|||
<div class="card-header"> |
|||
CSV file import options |
|||
</div> |
|||
<div class="card-body"> |
|||
<div class="form-group row mb-3"> |
|||
<div class="col-sm-3">Headers</div> |
|||
<div class="col-sm-9"> |
|||
<div class="form-check"> |
|||
<input class="form-check-input" |
|||
type="checkbox" |
|||
id="headers" name="headers" value="1" |
|||
aria-describedby="headersHelp" |
|||
@if($configuration->isHeaders()) checked @endif |
|||
> |
|||
<label class="form-check-label" for="headers"> |
|||
Yes |
|||
</label><br> |
|||
<small id="headersHelp" class="form-text text-muted"> |
|||
Select this checkbox when your importable file is a CSV-like file |
|||
and has headers on the first line of the |
|||
file. |
|||
</small> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="form-group row mb-3"> |
|||
<div class="col-sm-3">Convert to UTF-8</div> |
|||
<div class="col-sm-9"> |
|||
<div class="form-check"> |
|||
<input class="form-check-input" |
|||
type="checkbox" |
|||
@if($configuration->isConversion()) checked @endif |
|||
id="conversion" name="conversion" value="1" |
|||
aria-describedby="conversionHelp"> |
|||
<label class="form-check-label" for="conversion"> |
|||
Yes |
|||
</label><br> |
|||
<small id="conversionHelp" class="form-text text-muted"> |
|||
Try to convert your file to UTF-8. This may lead to weird |
|||
characters. |
|||
</small> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="form-group row mb-3"> |
|||
<label for="delimiter" class="col-sm-3 col-form-label">CSV-file |
|||
delimiter</label> |
|||
<div class="col-sm-9"> |
|||
<select id="delimiter" name="delimiter" class="form-control" |
|||
aria-describedby="delimiterHelp"> |
|||
<option value="comma" |
|||
@if('comma' === $configuration->getDelimiter()) selected @endif |
|||
label="A comma (,)">A comma (,) |
|||
</option> |
|||
<option value="semicolon" |
|||
@if('semicolon' === $configuration->getDelimiter()) selected |
|||
@endif |
|||
label="A semicolon (;)">A semicolon (;) |
|||
</option> |
|||
<option value="tab" |
|||
@if('tab' === $configuration->getDelimiter()) selected @endif |
|||
label="A tab (invisible)">A tab (invisible) |
|||
</option> |
|||
</select> |
|||
<small id="delimiterHelp" class="form-text text-muted"> |
|||
If your file is a CSV file, select the field separator of the file. This |
|||
is almost always a comma. |
|||
</small> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="form-group row mb-3"> |
|||
<label for="date" class="col-sm-3 col-form-label">Date format</label> |
|||
<div class="col-sm-9"> |
|||
<input type="text" name="date" class="form-control" |
|||
placeholder="Date format" x-model="dateFormat" |
|||
value="{{ $configuration->getDate() ?? 'Y-m-d' }}" |
|||
@change="getParsedDate" |
|||
aria-describedby="dateHelp"> |
|||
<small id="dateHelp" class="form-text text-muted"> |
|||
1. Read more about the date format <a |
|||
href="https://www.php.net/manual/en/datetime.format.php">on this |
|||
page</a><br> |
|||
2. Make sure this example date's format matches your file: |
|||
<strong x-show="!loadingParsedDate" x-text="parsedDateFormat">1984-09-17</strong> |
|||
<em x-show="loadingParsedDate" class="fas fa-cog fa-spin"></em> |
|||
<br> |
|||
3. If your file contains something like "5 mei 2023", prefix with your |
|||
country code like so <code>nl:d F Y</code> |
|||
</small> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
@ -0,0 +1,110 @@ |
|||
<div class="row mt-3"> |
|||
<div class="col-lg-10 offset-lg-1"> |
|||
<div class="card"> |
|||
<div class="card-header"> |
|||
Duplicate transaction detection |
|||
</div> |
|||
<div class="card-body"> |
|||
<div class="col-sm-9 offset-sm-3"> |
|||
<p class="text-muted"> |
|||
Firefly III can automatically detect duplicate transactions. This is pretty |
|||
foolproof. In some special cases however, |
|||
you want more control over this process. Read more about the options below in <a |
|||
href="https://docs.firefly-iii.org/how-to/data-importer/import/csv/" |
|||
target="_blank">the documentation</a>. |
|||
</p> |
|||
</div> |
|||
|
|||
@if('file' === $flow) |
|||
<div class="form-group row mb-3"> |
|||
<label for="X" class="col-sm-3 col-form-label">General detection options</label> |
|||
<div class="col-sm-9"> |
|||
<div class="form-check"> |
|||
<input class="form-check-input" |
|||
@if($configuration->isIgnoreDuplicateLines()) checked @endif |
|||
type="checkbox" value="1" id="ignore_duplicate_lines" |
|||
name="ignore_duplicate_lines" aria-describedby="duplicateHelp"> |
|||
<label class="form-check-label" for="ignore_duplicate_lines"> |
|||
Do not import duplicate lines or entries in the importable file. |
|||
</label> |
|||
<br> |
|||
<small class="form-text text-muted" id="duplicateHelp"> |
|||
Whatever method you choose ahead, it's smart to make the importer ignore |
|||
any |
|||
duplicated lines or entries in your importable file. |
|||
</small> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
@endif |
|||
|
|||
<div class="form-group row mb-3"> |
|||
<label for="duplicate_detection_method" class="col-sm-3 col-form-label">Detection method</label> |
|||
<div class="col-sm-9"> |
|||
<select id="duplicate_detection_method" name="duplicate_detection_method" x-model="detectionMethod" |
|||
class="form-control" aria-describedby="duplicate_detection_method_help"> |
|||
<option label="No duplicate detection" |
|||
@if('none' === $configuration->getDuplicateDetectionMethod()) selected @endif |
|||
value="none">No duplicate detection |
|||
</option> |
|||
<option label="Content-based" |
|||
@if('classic' === $configuration->getDuplicateDetectionMethod()) selected @endif |
|||
value="classic">Content-based detection |
|||
</option> |
|||
<option label="Identifier-based" |
|||
@if('cell' === $configuration->getDuplicateDetectionMethod()) selected @endif |
|||
value="cell">Identifier-based detection |
|||
</option> |
|||
</select> |
|||
<small id="duplicate_detection_method_help" class="form-text text-muted"> |
|||
For more details on these detection method see <a |
|||
href="https://docs.firefly-iii.org/references/data-importer/duplicate-detection/" |
|||
target="_blank">the documentation</a>. If you're not sure, select |
|||
"content-based" detection. |
|||
</small> |
|||
</div> |
|||
</div> |
|||
@if('file' === $flow) |
|||
<div class="form-group row mb-3" id="unique_column_index_holder" x-show="'cell' === detectionMethod"> |
|||
<label for="unique_column_index" class="col-sm-3 col-form-label">Unique column |
|||
index</label> |
|||
<div class="col-sm-9"> |
|||
<input type="number" step="1" name="unique_column_index" class="form-control" |
|||
id="unique_column_index" placeholder="Column index" |
|||
value="{{ $configuration->getUniqueColumnIndex() }}" |
|||
aria-describedby="unique_column_index_help"> |
|||
<small id="unique_column_index_help" class="form-text text-muted"> |
|||
This field is only relevant for the "identifier-based" detection option. |
|||
Indicate which column / field contains the unique identifier. Start counting from |
|||
zero! |
|||
</small> |
|||
</div> |
|||
</div> |
|||
@endif |
|||
|
|||
<div class="form-group row" id="unique_column_type_holder" x-show="'cell' === detectionMethod"> |
|||
<label for="unique_column_type" class="col-sm-3 col-form-label">Unique column |
|||
type</label> |
|||
<div class="col-sm-9"> |
|||
<select id="unique_column_type" name="unique_column_type" class="form-control" |
|||
aria-describedby="unique_column_type_help"> |
|||
@foreach($uniqueColumns as $columnType => $columnName) |
|||
<option label="{{ $columnName }}" |
|||
@if($configuration->getUniqueColumnType() === $columnType) selected @endif |
|||
value="{{ $columnType }}">{{ $columnName }}</option> |
|||
@endforeach |
|||
</select> |
|||
|
|||
<small id="unique_column_type_help" class="form-text text-muted"> |
|||
This field is only relevant for the "identifier-based" detection option. |
|||
Select |
|||
the type of value you expect in |
|||
the unique identifier. What must Firefly III search for? |
|||
</small> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
@ -0,0 +1,103 @@ |
|||
<div class="row mt-3"> |
|||
<div class="col-lg-10 offset-lg-1"> |
|||
<div class="card"> |
|||
<div class="card-header"> |
|||
Various import options |
|||
</div> |
|||
<div class="card-body"> |
|||
<div class="form-group row mb-3"> |
|||
<label for="default_account" class="col-sm-3 col-form-label">Default import account</label> |
|||
<div class="col-sm-9"> |
|||
<select id="default_account" name="default_account" class="form-control" |
|||
aria-describedby="defaultAccountHelp"> |
|||
@foreach($fireflyIIIaccounts as $accountGroup => $accountList) |
|||
<optgroup label="{{ $accountGroup }}"> |
|||
{% for account in accountList %} |
|||
@foreach($accountList as $account) |
|||
<option |
|||
@if($configuration->getDefaultAccount() === $account->id) selected @endif |
|||
value="{{ $account->id }}" |
|||
label="{{ $account->name }}">{{ $account->name }}</option> |
|||
@endforeach |
|||
</optgroup> |
|||
@endforeach |
|||
</select> |
|||
<small id="defaultAccountHelp" class="form-text text-muted"> |
|||
Select the asset account you want to link transactions to, if your import doesn't have enough meta data to determine this. |
|||
</small> |
|||
</div> |
|||
</div> |
|||
<div class="form-group row mb-3"> |
|||
<div class="col-sm-3">Rules</div> |
|||
<div class="col-sm-9"> |
|||
<div class="form-check"> |
|||
<input class="form-check-input" |
|||
@if($configuration->isRules()) checked @endif |
|||
type="checkbox" id="rules" name="rules" value="1" |
|||
aria-describedby="rulesHelp"> |
|||
<label class="form-check-label" for="rules"> |
|||
Yes |
|||
</label> |
|||
<small id="rulesHelp" class="form-text text-muted"> |
|||
<br>Select if you want Firefly III to apply your rules to the import. |
|||
</small> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="form-group row mb-3"> |
|||
<div class="col-sm-3">Import tag</div> |
|||
<div class="col-sm-9"> |
|||
<div class="form-check"> |
|||
<input class="form-check-input" |
|||
@if($configuration->isAddImportTag()) checked @endif |
|||
type="checkbox" id="add_import_tag" name="add_import_tag" value="1" |
|||
aria-describedby="add_import_tagHelp"> |
|||
<label class="form-check-label" for="add_import_tag"> |
|||
Yes |
|||
</label> |
|||
<small id="add_import_tagHelp" class="form-text text-muted"> |
|||
<br>When selected Firefly III will add a tag to each imported transaction |
|||
denoting the import; this groups your import under a tag. |
|||
</small> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- both camt and csv support custom tag --> |
|||
<div class="form-group row mb-3"> |
|||
<label for="date" class="col-sm-3 col-form-label">Custom import tag</label> |
|||
<div class="col-sm-9"> |
|||
<input type="text" name="custom_tag" class="form-control" id="custom_tag" |
|||
placeholder="Custom import tag" |
|||
value="{{ $configuration->getCustomTag() }}" |
|||
aria-describedby="custom_tagHelp"> |
|||
<small id="custom_tagHelp" class="form-text text-muted"> |
|||
You can set your own import tag to easily distinguish imports |
|||
or just because you don't like the default one. |
|||
<a href="https://docs.firefly-iii.org/how-to/data-importer/advanced/custom-import-tag/" target="_blank">Read more in the documentation</a>. |
|||
</small> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="form-group row mb-3"> |
|||
<div class="col-sm-3">Map data</div> |
|||
<div class="col-sm-9"> |
|||
<div class="form-check"> |
|||
<input class="form-check-input" |
|||
@if($configuration->isMapAllData()) checked @endif |
|||
type="checkbox" |
|||
id="map_all_data" |
|||
name="map_all_data" value="1" aria-describedby="mapAllDataHelp"> |
|||
<label class="form-check-label" for="map_all_data"> |
|||
Yes |
|||
</label> |
|||
<small id="mapAllDataHelp" class="form-text text-muted"> |
|||
<br>You get the opportunity to link your data to existing Firefly III |
|||
data, for a cleaner import. |
|||
</small> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
@ -0,0 +1,104 @@ |
|||
<div class="row mt-3"> |
|||
<div class="col-lg-10 offset-lg-1"> |
|||
<div class="card"> |
|||
<div class="card-header"> |
|||
Account selection for |
|||
@if('nordigen' === $flow) |
|||
GoCardless |
|||
@endif |
|||
@if('spectre' === $flow) |
|||
Spectre |
|||
@endif |
|||
import |
|||
</div> |
|||
<div class="card-body"> |
|||
<div class="form-group row mb-3"> |
|||
<div class="col-sm-3">Accounts to be matched</div> |
|||
<div class="col-sm-9"> |
|||
@php |
|||
$errorAccounts = 0; |
|||
$warningAccounts = 0; |
|||
@endphp |
|||
<table class="table table-sm table-bordered table-striped"> |
|||
<thead> |
|||
<tr> |
|||
<th> |
|||
@if('nordigen' === $flow) |
|||
GoCardless |
|||
@endif |
|||
@if('spectre' === $flow) |
|||
Spectre |
|||
@endif |
|||
account |
|||
</th> |
|||
<th> </th> |
|||
<th>Firefly III account</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
@foreach($importerAccounts as $information) |
|||
<!-- update variables --> |
|||
<!-- account is disabled at provider --> |
|||
@if('disabled' === $information['import_account']->status) |
|||
@php |
|||
$errorAccounts++; |
|||
@endphp |
|||
@endif |
|||
<!-- have no info about account at provider --> |
|||
@if('no-info' === $information['import_account']->status) |
|||
@php |
|||
$warningAccounts++; |
|||
@endphp |
|||
@endif |
|||
<!-- have nothing about account at provider --> |
|||
@if('nothing' === $information['import_account']->status) |
|||
@php |
|||
$warningAccounts++; |
|||
@endphp |
|||
@endif |
|||
<!-- have no balance about account at provider --> |
|||
@if('nothing' === $information['import_account']->status) |
|||
@php |
|||
$warningAccounts++; |
|||
@endphp |
|||
@endif |
|||
<!-- end of update variables --> |
|||
<x-importer-account :account="$information" |
|||
:configuration="$configuration" |
|||
:currencies="$currencies" |
|||
:flow="$flow"/> |
|||
@endforeach |
|||
</tbody> |
|||
<caption>Select and match the |
|||
@if('nordigen' === $flow) |
|||
GoCardless |
|||
@endif |
|||
@if('spectre' === $flow) |
|||
Spectre |
|||
@endif |
|||
accounts you want to import into your Firefly III installation. |
|||
</caption> |
|||
</table> |
|||
|
|||
@if($errorAccounts > 0) |
|||
<div class="alert alert-danger" role="alert"> |
|||
<em class="fas fa-exclamation-triangle"></em> |
|||
The importer could not download information on some of your |
|||
accounts. This does not have to be an issue, but it may lead to |
|||
import errors. |
|||
</div> |
|||
@endif |
|||
@if($warningAccounts > 0) |
|||
<div class="alert alert-warning" role="alert"> |
|||
<em class="fas fa-exclamation-triangle"></em> |
|||
The importer could not download information on some of your |
|||
accounts. This does not have to be an issue, but it may lead to |
|||
import errors. |
|||
</div> |
|||
@endif |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
@ -0,0 +1,104 @@ |
|||
<div class="row mt-3"> |
|||
<div class="col-lg-10 offset-lg-1"> |
|||
<div class="card"> |
|||
<div class="card-header"> |
|||
Date range import options |
|||
</div> |
|||
<div class="card-body"> |
|||
<div class="form-group row mb-3"> |
|||
<label for="default_account" class="col-sm-3 col-form-label">Date range</label> |
|||
<div class="col-sm-9"> |
|||
<div class="form-check"> |
|||
<input class="form-check-input date-range-radio" id="date_range_all" |
|||
type="radio" name="date_range" value="all" x-model="dateRange" |
|||
@if('all' === $configuration->getDateRange()) checked @endif |
|||
aria-describedby="rangeHelp"/> |
|||
<label class="form-check-label" for="date_range_all">Import |
|||
everything</label> |
|||
</div> |
|||
|
|||
<div class="form-check"> |
|||
<input class="form-check-input date-range-radio" id="date_range_partial" |
|||
type="radio" name="date_range" x-model="dateRange" |
|||
value="partial" |
|||
@if('partial' === $configuration->getDateRange()) checked @endif |
|||
aria-describedby="rangeHelp"/> |
|||
<label class="form-check-label" for="date_range_partial">Go back some |
|||
time</label> |
|||
</div> |
|||
|
|||
<div class="form-check"> |
|||
<input class="form-check-input date-range-radio" id="date_range_range" |
|||
type="radio" name="date_range" value="range" x-model="dateRange" |
|||
@if('range' === $configuration->getDateRange()) checked @endif |
|||
aria-describedby="rangeHelp"/> |
|||
<label class="form-check-label" for="date_range_range">Import a specific |
|||
range</label> |
|||
<small id="rangeHelp" class="form-text text-muted"> |
|||
<br>What range to grab from your bank through |
|||
@if('nordigen' === $flow) |
|||
GoCardless? |
|||
@endif |
|||
@if('spectre' === $flow) |
|||
Spectre? |
|||
@endif |
|||
</small> |
|||
</div> |
|||
|
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
<div class="form-group row mb-3" id="date_range_partial_settings" x-show="'partial' === dateRange"> |
|||
<div class="col-sm-3"> |
|||
Date range settings |
|||
</div> |
|||
<div class="col-sm-3"> |
|||
<input |
|||
name="date_range_number" |
|||
id="date_range_number" |
|||
class="form-control" value="{{ $configuration->getDateRangeNumber() }}" |
|||
type="number" step="1" min="1" max="365"> |
|||
</div> |
|||
<div class="col-sm-6"> |
|||
<select class="form-control" |
|||
name="date_range_unit" |
|||
id="date_range_unit"> |
|||
<option |
|||
@if('d' === $configuration->getDateRangeUnit()) selected @endif |
|||
value="d" label="days">days |
|||
</option> |
|||
<option |
|||
@if('w' === $configuration->getDateRangeUnit()) selected @endif |
|||
value="w" label="weeks">weeks |
|||
</option> |
|||
<option |
|||
@if('m' === $configuration->getDateRangeUnit()) selected @endif |
|||
value="m" label="months">months |
|||
</option> |
|||
<option |
|||
@if('y' === $configuration->getDateRangeUnit()) selected @endif |
|||
value="y" label="years">years |
|||
</option> |
|||
</select> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="form-group row mb-3" id="date_range_range_settings" x-show="'range' === dateRange"> |
|||
<div class="col-sm-3"> |
|||
Date range settings (from, to) |
|||
</div> |
|||
<div class="col-sm-4"> |
|||
<input type="date" name="date_not_before" class="form-control" |
|||
value="{{ $configuration->getDateNotBefore() }}"> |
|||
</div> |
|||
<div class="col-sm-4"> |
|||
<input type="date" name="date_not_after" class="form-control" |
|||
value="{{ $configuration->getDateNotAfter() }}"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- end of date range options --> |
@ -0,0 +1,31 @@ |
|||
<div class="row mt-3"> |
|||
<div class="col-lg-10 offset-lg-1"> |
|||
<div class="card"> |
|||
<div class="card-header"> |
|||
Other options |
|||
</div> |
|||
<div class="card-body"> |
|||
|
|||
<h4>Other options</h4> |
|||
<div class="form-group row mb-3"> |
|||
<div class="col-sm-3">Skip form</div> |
|||
<div class="col-sm-9"> |
|||
<div class="form-check"> |
|||
<input class="form-check-input" |
|||
@if($configuration->isSkipForm()) checked @endif |
|||
type="checkbox" |
|||
id="skip_form" name="skip_form" value="1" aria-describedby="skipHelp"> |
|||
<label class="form-check-label" for="skip_form"> |
|||
Yes |
|||
</label> |
|||
<small id="skipHelp" class="form-text text-muted"> |
|||
<br>Skip the options the next time you import and go straight to processing. |
|||
</small> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
@ -0,0 +1,40 @@ |
|||
@if(0 === count($fireflyIIIaccounts['assets']) && 0 === count($fireflyIIIaccounts['liabilities']) && $flow !== 'simplefin') |
|||
<div class="row mt-3"> |
|||
<div class="col-lg-10 offset-lg-1"> |
|||
<div class="card"> |
|||
<div class="card-header"> |
|||
Error :( |
|||
</div> |
|||
<div class="card-body"> |
|||
<p>It looks like you have no Firefly III asset accounts yet. The importer will not create |
|||
these for you. You must create them yourself.</p> |
|||
<p> |
|||
Please go to your Firefly III installation and create them, then refresh this page. |
|||
</p> |
|||
@if('nordigen' === $flow && count($importerAccounts) > 0) |
|||
<p> |
|||
Feel free to use this information collected from GoCardless as inspiration: |
|||
</p> |
|||
<ul> |
|||
@foreach($importerAccounts as $info) |
|||
<li> |
|||
Name: <strong>{{ $info['import_account']->name ?? '' }}</strong> |
|||
<ul> |
|||
<li>(Internal) |
|||
identifier: {{ $info['import_account']->identifier ?? '' }}</li> |
|||
<li>Resource |
|||
identifier: {{ $info['import_account']->resourceId ?? '' }}</li> |
|||
<li>BBAN: {{ $info['import_account']->bban ?? '' }}</li> |
|||
<li>BIC: {{ $info['import_account']->bic ?? ''}}</li> |
|||
<li>IBAN: {{ $info['import_account']->iban ?? '' }}</li> |
|||
<li>Owner name: {{ $info['import_account']->ownerName ?? '' }}</li> |
|||
</ul> |
|||
</li> |
|||
@endforeach |
|||
</ul> |
|||
@endif |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
@endif |
@ -0,0 +1,53 @@ |
|||
<div class="row mt-3"> |
|||
<div class="col-lg-10 offset-lg-1"> |
|||
<div class="card"> |
|||
<div class="card-header"> |
|||
{{ $subTitle }} |
|||
</div> |
|||
<div class="card-body"> |
|||
@if('file' === $flow) |
|||
<p> |
|||
@if('camt' === $configuration->getContentType()) |
|||
Even though camt.053 is a defined standard, you might want to customize. Some of the most important settings are below. |
|||
They apply to all records in the uploaded files. If you would like some support, |
|||
you won't find anything at <a |
|||
href="https://docs.firefly-iii.org/how-to/data-importer/import/csv/" |
|||
target="_blank"> |
|||
this page.</a> right now. |
|||
@endif |
|||
@if('csv' === $configuration->getContentType()) |
|||
Importable files come in many shapes and forms. Some of the most important |
|||
settings are below. |
|||
They apply to all lines in the file. If you would like some support, <a |
|||
href="https://docs.firefly-iii.org/how-to/data-importer/import/csv/" |
|||
target="_blank"> |
|||
check out the documentation for this page.</a> |
|||
@endif |
|||
</p> |
|||
@endif |
|||
@if('nordigen' === $flow || 'spectre' === $flow) |
|||
<p> |
|||
Your |
|||
@if('nordigen' === $flow) |
|||
GoCardless |
|||
@endif |
|||
@if('spectre' === $flow) |
|||
Spectre |
|||
@endif |
|||
import can be configured and fine-tuned. |
|||
<a href="https://docs.firefly-iii.org/how-to/data-importer/import/gocardless/" |
|||
target="_blank">Check |
|||
out the documentation for this page.</a> |
|||
</p> |
|||
@endif |
|||
@if('simplefin' === $flow) |
|||
<p> |
|||
Configure how your SimpleFIN accounts will be mapped to Firefly III accounts. |
|||
You can map existing accounts or create new ones during import. |
|||
Accounts marked for import will have their transactions synchronized based on your date range settings. |
|||
</p> |
|||
@endif |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
@ -0,0 +1,35 @@ |
|||
<div class="row mt-3"> |
|||
<div class="col-lg-10 offset-lg-1"> |
|||
<div class="card"> |
|||
<div class="card-header"> |
|||
SimpleFIN account configuration |
|||
</div> |
|||
<div class="card-body"> |
|||
<p>Map your SimpleFIN accounts to Firefly III accounts. You can link to existing accounts or create new ones during import.</p> |
|||
|
|||
@if(count($importerAccounts) > 0) |
|||
<div class="table-responsive"> |
|||
<table class="table table-sm table-borderless"> |
|||
<thead> |
|||
<tr> |
|||
<th style="width:45%">SimpleFIN Account</th> |
|||
<th style="width:10%"></th> |
|||
<th style="width:45%">Firefly III Account</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
@foreach($importerAccounts as $information) |
|||
<x-importer-account :account="$information" :configuration="$configuration" :currencies="$currencies" :flow="$flow"/> |
|||
@endforeach |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
@else |
|||
<div class="alert alert-warning"> |
|||
<strong>No SimpleFIN accounts found.</strong> Please ensure your SimpleFIN token is valid and try again. |
|||
</div> |
|||
@endif |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
@ -0,0 +1,85 @@ |
|||
<div class="row mt-3"> |
|||
<div class="col-lg-10 offset-lg-1"> |
|||
<div class="card"> |
|||
<div class="card-header"> |
|||
SimpleFIN import options |
|||
</div> |
|||
<div class="card-body"> |
|||
<!-- Date Range Configuration --> |
|||
<div class="form-group row mb-3"> |
|||
<label for="date_range" class="col-sm-3 col-form-label">Date range:</label> |
|||
<div class="col-sm-9"> |
|||
<select name="date_range" id="date_range" class="form-control" onchange="toggleDateRangeInputs()"> |
|||
<option value="all" @if($configuration->getDateRange() === 'all') selected @endif>All time</option> |
|||
<option value="dynamic" @if($configuration->getDateRange() === 'dynamic') selected @endif>Dynamic range</option> |
|||
<option value="specific" @if($configuration->getDateRange() === 'specific') selected @endif>Specific dates</option> |
|||
</select> |
|||
</div> |
|||
</div> |
|||
|
|||
<div id="dynamic_range_inputs" style="display: {{ $configuration->getDateRange() === 'dynamic' ? 'block' : 'none' }};"> |
|||
<div class="form-group row mb-3"> |
|||
<label for="date_range_number" class="col-sm-3 col-form-label">Range:</label> |
|||
<div class="col-sm-5"> |
|||
<input type="number" name="date_range_number" id="date_range_number" class="form-control" value="{{ $configuration->getDateRangeNumber() ?? 30 }}" min="1"> |
|||
</div> |
|||
<div class="col-sm-4"> |
|||
<select name="date_range_unit" id="date_range_unit" class="form-control"> |
|||
<option value="d" @if($configuration->getDateRangeUnit() === 'd') selected @endif>Days</option> |
|||
<option value="w" @if($configuration->getDateRangeUnit() === 'w') selected @endif>Weeks</option> |
|||
<option value="m" @if($configuration->getDateRangeUnit() === 'm') selected @endif>Months</option> |
|||
<option value="y" @if($configuration->getDateRangeUnit() === 'y') selected @endif>Years</option> |
|||
</select> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div id="specific_dates_inputs" style="display: {{ $configuration->getDateRange() === 'specific' ? 'block' : 'none' }};"> |
|||
<div class="form-group row mb-3"> |
|||
<label for="date_not_before" class="col-sm-3 col-form-label">Start date:</label> |
|||
<div class="col-sm-9"> |
|||
<input type="date" name="date_not_before" id="date_not_before" class="form-control" value="{{ $configuration->getDateNotBefore() ?? '' }}"> |
|||
</div> |
|||
</div> |
|||
<div class="form-group row mb-3"> |
|||
<label for="date_not_after" class="col-sm-3 col-form-label">End date:</label> |
|||
<div class="col-sm-9"> |
|||
<input type="date" name="date_not_after" id="date_not_after" class="form-control" value="{{ $configuration->getDateNotAfter() ?? '' }}"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Pending Transactions Configuration --> |
|||
<div class="form-group row mb-3"> |
|||
<div class="col-sm-3">Pending transactions</div> |
|||
<div class="col-sm-9"> |
|||
<div class="form-check"> |
|||
<input class="form-check-input" |
|||
@if($configuration->getPendingTransactions()) checked @endif |
|||
type="checkbox" id="pending_transactions" name="pending_transactions" value="1" |
|||
aria-describedby="pendingTransactionsHelp"> |
|||
<label class="form-check-label" for="pending_transactions"> |
|||
Include pending transactions |
|||
</label> |
|||
<small id="pendingTransactionsHelp" class="form-text text-muted"> |
|||
<br>Select to include pending (unposted) transactions in addition to posted transactions. |
|||
</small> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<script> |
|||
function toggleDateRangeInputs() { |
|||
const dateRangeType = document.getElementById('date_range').value; |
|||
const dynamicInputs = document.getElementById('dynamic_range_inputs'); |
|||
const specificInputs = document.getElementById('specific_dates_inputs'); |
|||
|
|||
dynamicInputs.style.display = (dateRangeType === 'dynamic') ? 'block' : 'none'; |
|||
specificInputs.style.display = (dateRangeType === 'specific') ? 'block' : 'none'; |
|||
} |
|||
// Initialize on page load
|
|||
document.addEventListener('DOMContentLoaded', toggleDateRangeInputs); |
|||
</script> |
@ -0,0 +1,31 @@ |
|||
<div class="row mt-3"> |
|||
<div class="col-lg-10 offset-lg-1"> |
|||
<div class="card"> |
|||
<div class="card-header"> |
|||
Spectre import options |
|||
</div> |
|||
<div class="card-body"> |
|||
<div class="form-group row"> |
|||
<label for="X" class="col-sm-3 col-form-label">Ignore Spectre categories</label> |
|||
<div class="col-sm-9"> |
|||
<div class="form-check"> |
|||
<input class="form-check-input" |
|||
@if($configuration->isIgnoreSpectreCategories()) checked @endif |
|||
type="checkbox" value="1" id="ignore_spectre_categories" |
|||
name="ignore_spectre_categories" |
|||
aria-describedby="duplicateSpectre"> |
|||
<label class="form-check-label" for="ignore_spectre_categories"> |
|||
Ignore Spectre's categories. |
|||
</label> |
|||
</div> |
|||
|
|||
<small class="form-text text-muted" id="duplicateSpectre"> |
|||
Spectre adds categories to each transaction. You can choose to ignore |
|||
them. |
|||
</small> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue