mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Simplified export controller.
This commit is contained in:
parent
8256f60340
commit
b8c7876454
@ -12,6 +12,7 @@ namespace FireflyIII\Http\Controllers;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Config;
|
||||
use ExpandedForm;
|
||||
use FireflyIII\Export\Processor;
|
||||
use FireflyIII\Http\Requests;
|
||||
use FireflyIII\Http\Requests\ExportFormRequest;
|
||||
@ -91,12 +92,14 @@ class ExportController extends Controller
|
||||
|
||||
// does the user have shared accounts?
|
||||
$accounts = $repository->getAccounts(['Default account', 'Asset account']);
|
||||
$accountList = ExpandedForm::makeSelectList($accounts);
|
||||
$checked = array_keys($accountList);
|
||||
$formats = array_keys(Config::get('firefly.export_formats'));
|
||||
$defaultFormat = Preferences::get('export_format', Config::get('firefly.default_export_format'))->data;
|
||||
$first = session('first')->format('Y-m-d');
|
||||
$today = Carbon::create()->format('Y-m-d');
|
||||
|
||||
return view('export.index', compact('accounts', 'job', 'formats', 'defaultFormat', 'first', 'today'));
|
||||
return view('export.index', compact('job', 'checked', 'accountList', 'formats', 'defaultFormat', 'first', 'today'));
|
||||
|
||||
}
|
||||
|
||||
|
@ -68,7 +68,7 @@ class Amount
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function formatJournal(TransactionJournal $journal, bool $coloured = true)
|
||||
public function formatJournal(TransactionJournal $journal, bool $coloured = true): string
|
||||
{
|
||||
$cache = new CacheProperties;
|
||||
$cache->addProperty($journal->id);
|
||||
|
@ -54,7 +54,7 @@ class CacheProperties
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getMd5()
|
||||
public function getMd5(): string
|
||||
{
|
||||
return $this->md5;
|
||||
}
|
||||
@ -62,7 +62,7 @@ class CacheProperties
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function has()
|
||||
public function has(): bool
|
||||
{
|
||||
if (getenv('APP_ENV') == 'testing') {
|
||||
return false;
|
||||
|
@ -22,7 +22,7 @@ class Domain
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public static function getBindables()
|
||||
public static function getBindables(): array
|
||||
{
|
||||
return Config::get('firefly.bindables');
|
||||
|
||||
@ -31,7 +31,7 @@ class Domain
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public static function getRuleActions()
|
||||
public static function getRuleActions(): array
|
||||
{
|
||||
return Config::get('firefly.rule-actions');
|
||||
}
|
||||
@ -39,7 +39,7 @@ class Domain
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public static function getRuleTriggers()
|
||||
public static function getRuleTriggers(): array
|
||||
{
|
||||
return Config::get('firefly.rule-triggers');
|
||||
}
|
||||
|
@ -12,8 +12,6 @@ use Twig_SimpleFilter;
|
||||
use Twig_SimpleFunction;
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* Class Journal
|
||||
*
|
||||
* @package FireflyIII\Support\Twig
|
||||
@ -24,7 +22,7 @@ class Journal extends Twig_Extension
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getFilters()
|
||||
public function getFilters(): array
|
||||
{
|
||||
$filters = [$this->typeIcon()];
|
||||
|
||||
@ -34,11 +32,10 @@ class Journal extends Twig_Extension
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getFunctions()
|
||||
public function getFunctions(): array
|
||||
{
|
||||
$functions = [
|
||||
$this->invalidJournal(),
|
||||
$this->relevantTags(),
|
||||
];
|
||||
|
||||
return $functions;
|
||||
@ -49,18 +46,34 @@ class Journal extends Twig_Extension
|
||||
*
|
||||
* @return string The extension name
|
||||
*/
|
||||
public function getName()
|
||||
public function getName(): string
|
||||
{
|
||||
return 'FireflyIII\Support\Twig\Journals';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Twig_SimpleFunction
|
||||
*/
|
||||
protected function invalidJournal(): Twig_SimpleFunction
|
||||
{
|
||||
return new Twig_SimpleFunction(
|
||||
'invalidJournal', function (TransactionJournal $journal): bool {
|
||||
if (!isset($journal->transactions[1]) || !isset($journal->transactions[0])) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Twig_SimpleFilter
|
||||
*/
|
||||
protected function typeIcon()
|
||||
protected function typeIcon(): Twig_SimpleFilter
|
||||
{
|
||||
return new Twig_SimpleFilter(
|
||||
'typeIcon', function (TransactionJournal $journal) {
|
||||
'typeIcon', function (TransactionJournal $journal): string {
|
||||
|
||||
$cache = new CacheProperties();
|
||||
$cache->addProperty($journal->id);
|
||||
@ -94,149 +107,4 @@ class Journal extends Twig_Extension
|
||||
}, ['is_safe' => ['html']]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Twig_SimpleFunction
|
||||
*/
|
||||
protected function invalidJournal()
|
||||
{
|
||||
return new Twig_SimpleFunction(
|
||||
'invalidJournal', function (TransactionJournal $journal) {
|
||||
if (!isset($journal->transactions[1]) || !isset($journal->transactions[0])) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Twig_SimpleFunction
|
||||
*/
|
||||
protected function relevantTags()
|
||||
{
|
||||
return new Twig_SimpleFunction(
|
||||
'relevantTags', function (TransactionJournal $journal) {
|
||||
$cache = new CacheProperties;
|
||||
$cache->addProperty('relevantTags');
|
||||
$cache->addProperty($journal->id);
|
||||
|
||||
if ($cache->has()) {
|
||||
return $cache->get(); // @codeCoverageIgnore
|
||||
}
|
||||
$count = $journal->tags->count();
|
||||
$string = '';
|
||||
|
||||
if ($count === 0) {
|
||||
$string = $this->relevantTagsNoTags($journal);
|
||||
}
|
||||
|
||||
if ($count === 1) {
|
||||
$string = $this->relevantTagsSingle($journal);
|
||||
}
|
||||
|
||||
if ($count > 1) {
|
||||
$string = $this->relevantTagsMulti($journal);
|
||||
}
|
||||
|
||||
$cache->store($string);
|
||||
|
||||
return $string;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param TransactionJournal $journal
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function relevantTagsNoTags(TransactionJournal $journal)
|
||||
{
|
||||
return app('amount')->formatJournal($journal);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param TransactionJournal $journal
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function relevantTagsSingle(TransactionJournal $journal)
|
||||
{
|
||||
$tag = $journal->tags()->first();
|
||||
|
||||
return $this->formatJournalByTag($journal, $tag);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param TransactionJournal $journal
|
||||
* @param Tag $tag
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function formatJournalByTag(TransactionJournal $journal, Tag $tag)
|
||||
{
|
||||
if ($tag->tagMode == 'balancingAct') {
|
||||
// return tag formatted for a "balancing act", even if other
|
||||
// tags are present.
|
||||
$amount = app('amount')->format($journal->amount_positive, false);
|
||||
$string = '<a href="' . route('tags.show', [$tag->id]) . '" class="label label-success" title="' . $amount
|
||||
. '"><i class="fa fa-fw fa-refresh"></i> ' . $tag->tag . '</a>';
|
||||
|
||||
return $string;
|
||||
}
|
||||
|
||||
if ($tag->tagMode == 'advancePayment') {
|
||||
if ($journal->isDeposit()) {
|
||||
$amount = app('amount')->formatJournal($journal, false);
|
||||
$string = '<a href="' . route('tags.show', [$tag->id]) . '" class="label label-success" title="' . $amount
|
||||
. '"><i class="fa fa-fw fa-sort-numeric-desc"></i> ' . $tag->tag . '</a>';
|
||||
|
||||
return $string;
|
||||
}
|
||||
|
||||
/*
|
||||
* AdvancePayment with a withdrawal will show the amount with a link to
|
||||
* the tag. The TransactionJournal should properly calculate the amount.
|
||||
*/
|
||||
if ($journal->isWithdrawal()) {
|
||||
$amount = app('amount')->formatJournal($journal);
|
||||
|
||||
$string = '<a href="' . route('tags.show', [$tag->id]) . '">' . $amount . '</a>';
|
||||
|
||||
return $string;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $this->relevantTagsNoTags($journal);
|
||||
}
|
||||
|
||||
/**
|
||||
* If a transaction journal has multiple tags, we'll have to gamble. FF3
|
||||
* does not yet block adding multiple 'special' tags so we must wing it.
|
||||
*
|
||||
* We grab the first special tag (for advancePayment and for balancingAct
|
||||
* and try to format those. If they're not present (it's all normal tags),
|
||||
* we can format like any other journal.
|
||||
*
|
||||
* @param TransactionJournal $journal
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function relevantTagsMulti(TransactionJournal $journal)
|
||||
{
|
||||
$firstBalancingAct = $journal->tags()->where('tagMode', 'balancingAct')->first();
|
||||
if ($firstBalancingAct) {
|
||||
return $this->formatJournalByTag($journal, $firstBalancingAct);
|
||||
}
|
||||
|
||||
$firstAdvancePayment = $journal->tags()->where('tagMode', 'advancePayment')->first();
|
||||
if ($firstAdvancePayment) {
|
||||
return $this->formatJournalByTag($journal, $firstAdvancePayment);
|
||||
}
|
||||
|
||||
return $this->relevantTagsNoTags($journal);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user