You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
214 lines
11 KiB
214 lines
11 KiB
@extends('layout.v2')
|
|
@section('content')
|
|
<div class="container">
|
|
<div class="row mt-3">
|
|
<div class="col-lg-10 offset-lg-1">
|
|
<h1>{{ $mainTitle }}</h1>
|
|
</div>
|
|
</div>
|
|
<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">
|
|
<p>
|
|
Use the form elements below to upload your data.
|
|
If you need support, <a target="_blank"
|
|
href="https://docs.firefly-iii.org/how-to/">check
|
|
out the documentation</a>.
|
|
</p>
|
|
<p>
|
|
A configuration file is entirely <strong>optional</strong>. You can use it to pre-configure
|
|
the import options. In a later stage you may even use it for automation.
|
|
It will be generated for you by the data importer so you can download it.
|
|
</p>
|
|
@if('simplefin' === $flow)
|
|
<p>
|
|
If your configuration already contains an encrypted SimpleFIN access URL, you do not need to fill in the "SimpleFIN token" field. If you are unsure,
|
|
using the SimpleFIN token field will overrule whatever (if any) access URL is in your configuration file.
|
|
</p>
|
|
<p>
|
|
<strong>Demo Mode:</strong> You can use demo mode to test the import process with sample data before connecting your real financial accounts.
|
|
Simply check the "Use demo mode" option below.
|
|
</p>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row mt-3">
|
|
<div class="col-lg-10 offset-lg-1">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
Form
|
|
</div>
|
|
<div class="card-body">
|
|
<form method="post" action="{{ route('003-upload.upload') }}" accept-charset="UTF-8" id="store"
|
|
enctype="multipart/form-data">
|
|
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
|
|
|
|
<!-- SimpleFIN fields -->
|
|
@if('simplefin' === $flow)
|
|
<!-- Demo Mode Toggle -->
|
|
<div class="form-group row mb-3">
|
|
<label for="use_demo" class="col-sm-4 col-form-label">Demo Mode</label>
|
|
<div class="col-sm-8">
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="checkbox" id="use_demo" name="use_demo" value="1">
|
|
<label class="form-check-label" for="use_demo">
|
|
Use demo mode (test with sample data)
|
|
</label>
|
|
</div>
|
|
<small class="form-text text-muted">
|
|
Enable this to test the import process with SimpleFIN demo data.
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Connection Error Display -->
|
|
@if($errors->has('connection'))
|
|
<div class="alert alert-danger" role="alert">
|
|
<strong>Connection Error:</strong> {{ $errors->first('connection') }}
|
|
</div>
|
|
@endif
|
|
|
|
<!-- SimpleFIN token -->
|
|
<div class="form-group row mb-3" id="token-group">
|
|
<label for="simplefin_token" class="col-sm-4 col-form-label">SimpleFIN token</label>
|
|
<div class="col-sm-8">
|
|
<input type="text"
|
|
class="form-control
|
|
@if($errors->has('simplefin_token')) is-invalid @endif"
|
|
id="simplefin_token" name="simplefin_token"
|
|
autocomplete="off"
|
|
value="{{ old('simplefin_token') }}"
|
|
placeholder="SimpleFIN token"/>
|
|
@if($errors->has('simplefin_token'))
|
|
<div class="invalid-feedback">
|
|
{{ $errors->first('simplefin_token') }}
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const demoCheckbox = document.getElementById('use_demo');
|
|
const tokenGroup = document.getElementById('token-group');
|
|
|
|
function toggleSimpleFINFields() {
|
|
if (demoCheckbox.checked) {
|
|
tokenGroup.style.display = 'none';
|
|
} else {
|
|
tokenGroup.style.display = 'flex';
|
|
}
|
|
}
|
|
|
|
// Initial state
|
|
toggleSimpleFINFields();
|
|
|
|
// Listen for changes
|
|
demoCheckbox.addEventListener('change', toggleSimpleFINFields);
|
|
});
|
|
</script>
|
|
|
|
@endif
|
|
|
|
<!-- importable FILE -->
|
|
@if('file' === $flow)
|
|
<div class="form-group row mb-3">
|
|
<label for="importable_file" class="col-sm-4 col-form-label">Importable file</label>
|
|
<div class="col-sm-8">
|
|
<input type="file"
|
|
class="form-control
|
|
@if($errors->has('importable_file')) is-invalid @endif"
|
|
id="importable_file" name="importable_file"
|
|
placeholder="Importable file"
|
|
accept=".xml,.csv"/>
|
|
@if($errors->has('importable_file'))
|
|
<div class="invalid-feedback">
|
|
{{ $errors->first('importable_file') }}
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
@endif
|
|
|
|
<!-- CONFIG FILE -->
|
|
<div class="form-group row mb-3">
|
|
<label for="config_file" class="col-sm-4 col-form-label">Optional configuration
|
|
file</label>
|
|
<div class="col-sm-8">
|
|
<input type="file" class="form-control" id="config_file" name="config_file"
|
|
placeholder="Configuration file"
|
|
accept=".json"/>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- PRE MADE CONFIG FILE -->
|
|
@if(count($list) > 0)
|
|
<div class="form-group row mb-3">
|
|
<label for="config_file" class="col-sm-4 col-form-label">Pre-made configuration
|
|
file</label>
|
|
<div class="col-sm-8">
|
|
<select class="form-control" name="existing_config">
|
|
<option value="" label="Upload or manual config">Upload or manual config
|
|
</option>
|
|
@foreach($list as $file)
|
|
<option value="{{ $file }}" label="{{ $file }}">{{ $file }}</option>
|
|
@endforeach
|
|
</select>
|
|
</div>
|
|
</div>
|
|
@endif
|
|
<div class="row">
|
|
<div class="col-lg-12">
|
|
<!-- continue -->
|
|
<button type="submit" class="float-end btn btn-primary">Next →</button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<div class="card mt-3">
|
|
<div class="card-body">
|
|
<div class="btn-group btn-group-sm">
|
|
<a href="{{ route('back.start') }}" class="btn btn-secondary"><span
|
|
class="fas fa-arrow-left"></span> Go back to
|
|
index</a>
|
|
<a href="{{ route('flush') }}" class="btn btn-danger text-white"><span class="fas fa-redo-alt"></span>
|
|
Start over entirely</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
@if('simplefin' === $flow)
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const demoCheckbox = document.getElementById('use_demo');
|
|
const tokenGroup = document.getElementById('token-group');
|
|
const tokenInput = document.getElementById('simplefin_token');
|
|
|
|
function toggleDemoMode() {
|
|
if (demoCheckbox.checked) {
|
|
tokenGroup.style.display = 'none';
|
|
tokenInput.required = false;
|
|
} else {
|
|
tokenGroup.style.display = 'flex';
|
|
//tokenInput.required = true;
|
|
}
|
|
}
|
|
|
|
demoCheckbox.addEventListener('change', toggleDemoMode);
|
|
|
|
// Initial state
|
|
toggleDemoMode();
|
|
});
|
|
</script>
|
|
@endif
|
|
@endsection
|