mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-30 02:26:58 +00:00
Fix various code
This commit is contained in:
@@ -41,6 +41,8 @@ class CreateDatabase extends Command
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
|
*
|
||||||
|
* @suppressWarnings(PHPMD.MissingImport)
|
||||||
*/
|
*/
|
||||||
public function handle(): int
|
public function handle(): int
|
||||||
{
|
{
|
||||||
|
@@ -34,8 +34,6 @@ use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
|||||||
use FireflyIII\Services\Internal\Destroy\JournalDestroyService;
|
use FireflyIII\Services\Internal\Destroy\JournalDestroyService;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Psr\Container\ContainerExceptionInterface;
|
|
||||||
use Psr\Container\NotFoundExceptionInterface;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This command will take split transactions and migrate them to "transaction groups".
|
* This command will take split transactions and migrate them to "transaction groups".
|
||||||
@@ -59,9 +57,6 @@ class MigrateToGroups extends Command
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
*
|
|
||||||
* @throws ContainerExceptionInterface
|
|
||||||
* @throws NotFoundExceptionInterface
|
|
||||||
*/
|
*/
|
||||||
public function handle(): int
|
public function handle(): int
|
||||||
{
|
{
|
||||||
@@ -105,10 +100,6 @@ class MigrateToGroups extends Command
|
|||||||
$this->cliRepository = app(JournalCLIRepositoryInterface::class);
|
$this->cliRepository = app(JournalCLIRepositoryInterface::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws ContainerExceptionInterface
|
|
||||||
* @throws NotFoundExceptionInterface
|
|
||||||
*/
|
|
||||||
private function isMigrated(): bool
|
private function isMigrated(): bool
|
||||||
{
|
{
|
||||||
$configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false);
|
$configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false);
|
||||||
@@ -142,7 +133,7 @@ class MigrateToGroups extends Command
|
|||||||
{
|
{
|
||||||
// double check transaction count.
|
// double check transaction count.
|
||||||
if ($journal->transactions->count() <= 2) {
|
if ($journal->transactions->count() <= 2) {
|
||||||
app('log')->debug(sprintf('Will not try to convert journal #%d because it has 2 or less transactions.', $journal->id));
|
app('log')->debug(sprintf('Will not try to convert journal #%d because it has 2 or fewer transactions.', $journal->id));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -158,95 +149,12 @@ class MigrateToGroups extends Command
|
|||||||
'transactions' => [],
|
'transactions' => [],
|
||||||
];
|
];
|
||||||
$destTransactions = $this->getDestinationTransactions($journal);
|
$destTransactions = $this->getDestinationTransactions($journal);
|
||||||
$budgetId = $this->cliRepository->getJournalBudgetId($journal);
|
|
||||||
$categoryId = $this->cliRepository->getJournalCategoryId($journal);
|
|
||||||
$notes = $this->cliRepository->getNoteText($journal);
|
|
||||||
$tags = $this->cliRepository->getTags($journal);
|
|
||||||
$internalRef = $this->cliRepository->getMetaField($journal, 'internal-reference');
|
|
||||||
$sepaCC = $this->cliRepository->getMetaField($journal, 'sepa_cc');
|
|
||||||
$sepaCtOp = $this->cliRepository->getMetaField($journal, 'sepa_ct_op');
|
|
||||||
$sepaCtId = $this->cliRepository->getMetaField($journal, 'sepa_ct_id');
|
|
||||||
$sepaDb = $this->cliRepository->getMetaField($journal, 'sepa_db');
|
|
||||||
$sepaCountry = $this->cliRepository->getMetaField($journal, 'sepa_country');
|
|
||||||
$sepaEp = $this->cliRepository->getMetaField($journal, 'sepa_ep');
|
|
||||||
$sepaCi = $this->cliRepository->getMetaField($journal, 'sepa_ci');
|
|
||||||
$sepaBatchId = $this->cliRepository->getMetaField($journal, 'sepa_batch_id');
|
|
||||||
$externalId = $this->cliRepository->getMetaField($journal, 'external-id');
|
|
||||||
$originalSource = $this->cliRepository->getMetaField($journal, 'original-source');
|
|
||||||
$recurrenceId = $this->cliRepository->getMetaField($journal, 'recurrence_id');
|
|
||||||
$bunq = $this->cliRepository->getMetaField($journal, 'bunq_payment_id');
|
|
||||||
$hash = $this->cliRepository->getMetaField($journal, 'import_hash');
|
|
||||||
$hashTwo = $this->cliRepository->getMetaField($journal, 'import_hash_v2');
|
|
||||||
$interestDate = $this->cliRepository->getMetaDate($journal, 'interest_date');
|
|
||||||
$bookDate = $this->cliRepository->getMetaDate($journal, 'book_date');
|
|
||||||
$processDate = $this->cliRepository->getMetaDate($journal, 'process_date');
|
|
||||||
$dueDate = $this->cliRepository->getMetaDate($journal, 'due_date');
|
|
||||||
$paymentDate = $this->cliRepository->getMetaDate($journal, 'payment_date');
|
|
||||||
$invoiceDate = $this->cliRepository->getMetaDate($journal, 'invoice_date');
|
|
||||||
|
|
||||||
app('log')->debug(sprintf('Will use %d positive transactions to create a new group.', $destTransactions->count()));
|
app('log')->debug(sprintf('Will use %d positive transactions to create a new group.', $destTransactions->count()));
|
||||||
|
|
||||||
/** @var Transaction $transaction */
|
/** @var Transaction $transaction */
|
||||||
foreach ($destTransactions as $transaction) {
|
foreach ($destTransactions as $transaction) {
|
||||||
app('log')->debug(sprintf('Now going to add transaction #%d to the array.', $transaction->id));
|
$data['transactions'][] = $this->generateTransaction($journal, $transaction);
|
||||||
$opposingTr = $this->findOpposingTransaction($journal, $transaction);
|
|
||||||
|
|
||||||
if (null === $opposingTr) {
|
|
||||||
$this->friendlyError(
|
|
||||||
sprintf(
|
|
||||||
'Journal #%d has no opposing transaction for transaction #%d. Cannot upgrade this entry.',
|
|
||||||
$journal->id,
|
|
||||||
$transaction->id
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// overrule journal category with transaction category.
|
|
||||||
$budgetId = $this->getTransactionBudget($transaction, $opposingTr) ?? $budgetId;
|
|
||||||
$categoryId = $this->getTransactionCategory($transaction, $opposingTr) ?? $categoryId;
|
|
||||||
|
|
||||||
$tArray = [
|
|
||||||
'type' => strtolower($journal->transactionType->type),
|
|
||||||
'date' => $journal->date,
|
|
||||||
'user' => $journal->user_id,
|
|
||||||
'currency_id' => $transaction->transaction_currency_id,
|
|
||||||
'foreign_currency_id' => $transaction->foreign_currency_id,
|
|
||||||
'amount' => $transaction->amount,
|
|
||||||
'foreign_amount' => $transaction->foreign_amount,
|
|
||||||
'description' => $transaction->description ?? $journal->description,
|
|
||||||
'source_id' => $opposingTr->account_id,
|
|
||||||
'destination_id' => $transaction->account_id,
|
|
||||||
'budget_id' => $budgetId,
|
|
||||||
'category_id' => $categoryId,
|
|
||||||
'bill_id' => $journal->bill_id,
|
|
||||||
'notes' => $notes,
|
|
||||||
'tags' => $tags,
|
|
||||||
'internal_reference' => $internalRef,
|
|
||||||
'sepa_cc' => $sepaCC,
|
|
||||||
'sepa_ct_op' => $sepaCtOp,
|
|
||||||
'sepa_ct_id' => $sepaCtId,
|
|
||||||
'sepa_db' => $sepaDb,
|
|
||||||
'sepa_country' => $sepaCountry,
|
|
||||||
'sepa_ep' => $sepaEp,
|
|
||||||
'sepa_ci' => $sepaCi,
|
|
||||||
'sepa_batch_id' => $sepaBatchId,
|
|
||||||
'external_id' => $externalId,
|
|
||||||
'original-source' => $originalSource,
|
|
||||||
'recurrence_id' => $recurrenceId,
|
|
||||||
'bunq_payment_id' => $bunq,
|
|
||||||
'import_hash' => $hash,
|
|
||||||
'import_hash_v2' => $hashTwo,
|
|
||||||
'interest_date' => $interestDate,
|
|
||||||
'book_date' => $bookDate,
|
|
||||||
'process_date' => $processDate,
|
|
||||||
'due_date' => $dueDate,
|
|
||||||
'payment_date' => $paymentDate,
|
|
||||||
'invoice_date' => $invoiceDate,
|
|
||||||
];
|
|
||||||
|
|
||||||
$data['transactions'][] = $tArray;
|
|
||||||
}
|
}
|
||||||
app('log')->debug(sprintf('Now calling transaction journal factory (%d transactions in array)', count($data['transactions'])));
|
app('log')->debug(sprintf('Now calling transaction journal factory (%d transactions in array)', count($data['transactions'])));
|
||||||
$group = $this->groupFactory->create($data);
|
$group = $this->groupFactory->create($data);
|
||||||
@@ -301,6 +209,93 @@ class MigrateToGroups extends Command
|
|||||||
return $set->first();
|
return $set->first();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function generateTransaction(TransactionJournal $journal, Transaction $transaction): array
|
||||||
|
{
|
||||||
|
app('log')->debug(sprintf('Now going to add transaction #%d to the array.', $transaction->id));
|
||||||
|
$opposingTr = $this->findOpposingTransaction($journal, $transaction);
|
||||||
|
|
||||||
|
if (null === $opposingTr) {
|
||||||
|
$this->friendlyError(
|
||||||
|
sprintf(
|
||||||
|
'Journal #%d has no opposing transaction for transaction #%d. Cannot upgrade this entry.',
|
||||||
|
$journal->id,
|
||||||
|
$transaction->id
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$budgetId = $this->cliRepository->getJournalBudgetId($journal);
|
||||||
|
$categoryId = $this->cliRepository->getJournalCategoryId($journal);
|
||||||
|
$notes = $this->cliRepository->getNoteText($journal);
|
||||||
|
$tags = $this->cliRepository->getTags($journal);
|
||||||
|
$internalRef = $this->cliRepository->getMetaField($journal, 'internal-reference');
|
||||||
|
$sepaCC = $this->cliRepository->getMetaField($journal, 'sepa_cc');
|
||||||
|
$sepaCtOp = $this->cliRepository->getMetaField($journal, 'sepa_ct_op');
|
||||||
|
$sepaCtId = $this->cliRepository->getMetaField($journal, 'sepa_ct_id');
|
||||||
|
$sepaDb = $this->cliRepository->getMetaField($journal, 'sepa_db');
|
||||||
|
$sepaCountry = $this->cliRepository->getMetaField($journal, 'sepa_country');
|
||||||
|
$sepaEp = $this->cliRepository->getMetaField($journal, 'sepa_ep');
|
||||||
|
$sepaCi = $this->cliRepository->getMetaField($journal, 'sepa_ci');
|
||||||
|
$sepaBatchId = $this->cliRepository->getMetaField($journal, 'sepa_batch_id');
|
||||||
|
$externalId = $this->cliRepository->getMetaField($journal, 'external-id');
|
||||||
|
$originalSource = $this->cliRepository->getMetaField($journal, 'original-source');
|
||||||
|
$recurrenceId = $this->cliRepository->getMetaField($journal, 'recurrence_id');
|
||||||
|
$bunq = $this->cliRepository->getMetaField($journal, 'bunq_payment_id');
|
||||||
|
$hash = $this->cliRepository->getMetaField($journal, 'import_hash');
|
||||||
|
$hashTwo = $this->cliRepository->getMetaField($journal, 'import_hash_v2');
|
||||||
|
$interestDate = $this->cliRepository->getMetaDate($journal, 'interest_date');
|
||||||
|
$bookDate = $this->cliRepository->getMetaDate($journal, 'book_date');
|
||||||
|
$processDate = $this->cliRepository->getMetaDate($journal, 'process_date');
|
||||||
|
$dueDate = $this->cliRepository->getMetaDate($journal, 'due_date');
|
||||||
|
$paymentDate = $this->cliRepository->getMetaDate($journal, 'payment_date');
|
||||||
|
$invoiceDate = $this->cliRepository->getMetaDate($journal, 'invoice_date');
|
||||||
|
|
||||||
|
// overrule journal category with transaction category.
|
||||||
|
$budgetId = $this->getTransactionBudget($transaction, $opposingTr) ?? $budgetId;
|
||||||
|
$categoryId = $this->getTransactionCategory($transaction, $opposingTr) ?? $categoryId;
|
||||||
|
|
||||||
|
return [
|
||||||
|
'type' => strtolower($journal->transactionType->type),
|
||||||
|
'date' => $journal->date,
|
||||||
|
'user' => $journal->user_id,
|
||||||
|
'currency_id' => $transaction->transaction_currency_id,
|
||||||
|
'foreign_currency_id' => $transaction->foreign_currency_id,
|
||||||
|
'amount' => $transaction->amount,
|
||||||
|
'foreign_amount' => $transaction->foreign_amount,
|
||||||
|
'description' => $transaction->description ?? $journal->description,
|
||||||
|
'source_id' => $opposingTr->account_id,
|
||||||
|
'destination_id' => $transaction->account_id,
|
||||||
|
'budget_id' => $budgetId,
|
||||||
|
'category_id' => $categoryId,
|
||||||
|
'bill_id' => $journal->bill_id,
|
||||||
|
'notes' => $notes,
|
||||||
|
'tags' => $tags,
|
||||||
|
'internal_reference' => $internalRef,
|
||||||
|
'sepa_cc' => $sepaCC,
|
||||||
|
'sepa_ct_op' => $sepaCtOp,
|
||||||
|
'sepa_ct_id' => $sepaCtId,
|
||||||
|
'sepa_db' => $sepaDb,
|
||||||
|
'sepa_country' => $sepaCountry,
|
||||||
|
'sepa_ep' => $sepaEp,
|
||||||
|
'sepa_ci' => $sepaCi,
|
||||||
|
'sepa_batch_id' => $sepaBatchId,
|
||||||
|
'external_id' => $externalId,
|
||||||
|
'original-source' => $originalSource,
|
||||||
|
'recurrence_id' => $recurrenceId,
|
||||||
|
'bunq_payment_id' => $bunq,
|
||||||
|
'import_hash' => $hash,
|
||||||
|
'import_hash_v2' => $hashTwo,
|
||||||
|
'interest_date' => $interestDate,
|
||||||
|
'book_date' => $bookDate,
|
||||||
|
'process_date' => $processDate,
|
||||||
|
'due_date' => $dueDate,
|
||||||
|
'payment_date' => $paymentDate,
|
||||||
|
'invoice_date' => $invoiceDate,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
private function getTransactionBudget(Transaction $left, Transaction $right): ?int
|
private function getTransactionBudget(Transaction $left, Transaction $right): ?int
|
||||||
{
|
{
|
||||||
app('log')->debug('Now in getTransactionBudget()');
|
app('log')->debug('Now in getTransactionBudget()');
|
||||||
|
@@ -92,6 +92,8 @@ class FireflyServiceProvider extends ServiceProvider
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Register stuff.
|
* Register stuff.
|
||||||
|
*
|
||||||
|
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
|
||||||
*/
|
*/
|
||||||
public function register(): void
|
public function register(): void
|
||||||
{
|
{
|
||||||
|
@@ -34,6 +34,9 @@ class IsDuplicateTransaction implements ValidationRule
|
|||||||
{
|
{
|
||||||
private string $value;
|
private string $value;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
|
||||||
|
*/
|
||||||
public function validate(string $attribute, mixed $value, \Closure $fail): void
|
public function validate(string $attribute, mixed $value, \Closure $fail): void
|
||||||
{
|
{
|
||||||
$this->value = $value;
|
$this->value = $value;
|
||||||
|
@@ -50,6 +50,8 @@ class Amount
|
|||||||
* as a currency, given two things: the currency required and the current locale.
|
* as a currency, given two things: the currency required and the current locale.
|
||||||
*
|
*
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
*
|
||||||
|
* @SuppressWarnings(PHPMD.MissingImport)
|
||||||
*/
|
*/
|
||||||
public function formatFlat(string $symbol, int $decimalPlaces, string $amount, bool $coloured = null): string
|
public function formatFlat(string $symbol, int $decimalPlaces, string $amount, bool $coloured = null): string
|
||||||
{
|
{
|
||||||
@@ -61,7 +63,7 @@ class Amount
|
|||||||
$fmt->setSymbol(\NumberFormatter::CURRENCY_SYMBOL, $symbol);
|
$fmt->setSymbol(\NumberFormatter::CURRENCY_SYMBOL, $symbol);
|
||||||
$fmt->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, $decimalPlaces);
|
$fmt->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, $decimalPlaces);
|
||||||
$fmt->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, $decimalPlaces);
|
$fmt->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, $decimalPlaces);
|
||||||
$result = (string)$fmt->format((float)$rounded); // intentional float
|
$result = (string) $fmt->format((float) $rounded); // intentional float
|
||||||
|
|
||||||
if (true === $coloured) {
|
if (true === $coloured) {
|
||||||
if (1 === bccomp($rounded, '0')) {
|
if (1 === bccomp($rounded, '0')) {
|
||||||
@@ -234,6 +236,8 @@ class Amount
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
*
|
||||||
|
* @SuppressWarnings(PHPMD.MissingImport)
|
||||||
*/
|
*/
|
||||||
private function getLocaleInfo(): array
|
private function getLocaleInfo(): array
|
||||||
{
|
{
|
||||||
|
@@ -34,7 +34,7 @@ class Calculator
|
|||||||
{
|
{
|
||||||
public const int DEFAULT_INTERVAL = 1;
|
public const int DEFAULT_INTERVAL = 1;
|
||||||
private static ?\SplObjectStorage $intervalMap = null;
|
private static ?\SplObjectStorage $intervalMap = null;
|
||||||
private static array $intervals = [];
|
private static array $intervals = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws IntervalException
|
* @throws IntervalException
|
||||||
@@ -62,6 +62,9 @@ class Calculator
|
|||||||
return self::loadIntervalMap()->contains($periodicity);
|
return self::loadIntervalMap()->contains($periodicity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @SuppressWarnings(PHPMD.MissingImport)
|
||||||
|
*/
|
||||||
private static function loadIntervalMap(): \SplObjectStorage
|
private static function loadIntervalMap(): \SplObjectStorage
|
||||||
{
|
{
|
||||||
if (null !== self::$intervalMap) {
|
if (null !== self::$intervalMap) {
|
||||||
|
@@ -179,35 +179,7 @@ class FireflyValidator extends Validator
|
|||||||
// replace characters outside of ASCI range.
|
// replace characters outside of ASCI range.
|
||||||
$value = (string) iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $value);
|
$value = (string) iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $value);
|
||||||
$search = [' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
|
$search = [' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
|
||||||
$replace = [
|
$replace = ['', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35'];
|
||||||
'',
|
|
||||||
'10',
|
|
||||||
'11',
|
|
||||||
'12',
|
|
||||||
'13',
|
|
||||||
'14',
|
|
||||||
'15',
|
|
||||||
'16',
|
|
||||||
'17',
|
|
||||||
'18',
|
|
||||||
'19',
|
|
||||||
'20',
|
|
||||||
'21',
|
|
||||||
'22',
|
|
||||||
'23',
|
|
||||||
'24',
|
|
||||||
'25',
|
|
||||||
'26',
|
|
||||||
'27',
|
|
||||||
'28',
|
|
||||||
'29',
|
|
||||||
'30',
|
|
||||||
'31',
|
|
||||||
'32',
|
|
||||||
'33',
|
|
||||||
'34',
|
|
||||||
'35',
|
|
||||||
];
|
|
||||||
|
|
||||||
// take
|
// take
|
||||||
$first = substr($value, 0, 4);
|
$first = substr($value, 0, 4);
|
||||||
|
@@ -522,6 +522,9 @@ class CreateMainTables extends Migration
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
|
||||||
|
*/
|
||||||
private function createTransactionTables(): void
|
private function createTransactionTables(): void
|
||||||
{
|
{
|
||||||
if (!Schema::hasTable('transaction_journals')) {
|
if (!Schema::hasTable('transaction_journals')) {
|
||||||
|
@@ -49,6 +49,7 @@ class ChangesForV475 extends Migration
|
|||||||
* Run the migrations.
|
* Run the migrations.
|
||||||
*
|
*
|
||||||
* @SuppressWarnings(PHPMD.ShortMethodName)
|
* @SuppressWarnings(PHPMD.ShortMethodName)
|
||||||
|
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
|
||||||
*/
|
*/
|
||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
|
@@ -124,6 +124,7 @@ class ChangesForV550 extends Migration
|
|||||||
* Run the migrations.
|
* Run the migrations.
|
||||||
*
|
*
|
||||||
* @SuppressWarnings(PHPMD.ShortMethodName)
|
* @SuppressWarnings(PHPMD.ShortMethodName)
|
||||||
|
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
|
||||||
*/
|
*/
|
||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user