mirror of
				https://github.com/firefly-iii/firefly-iii.git
				synced 2025-10-31 02:36:28 +00:00 
			
		
		
		
	Sync "convert to native"
This commit is contained in:
		| @@ -32,6 +32,7 @@ use FireflyIII\Models\UserGroup; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Support\Collection; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use NumberFormatter; | ||||
| 
 | ||||
| /** | ||||
| @@ -58,21 +59,21 @@ class Amount | ||||
|      */ | ||||
|     public function formatFlat(string $symbol, int $decimalPlaces, string $amount, ?bool $coloured = null): string | ||||
|     { | ||||
|         $locale  = app('steam')->getLocale(); | ||||
|         $rounded = app('steam')->bcround($amount, $decimalPlaces); | ||||
|         $locale   = app('steam')->getLocale(); | ||||
|         $rounded  = app('steam')->bcround($amount, $decimalPlaces); | ||||
|         $coloured ??= true; | ||||
| 
 | ||||
|         $fmt     = new NumberFormatter($locale, NumberFormatter::CURRENCY); | ||||
|         $fmt = new NumberFormatter($locale, NumberFormatter::CURRENCY); | ||||
|         $fmt->setSymbol(NumberFormatter::CURRENCY_SYMBOL, $symbol); | ||||
|         $fmt->setAttribute(NumberFormatter::MIN_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 (1 === bccomp((string) $rounded, '0')) { | ||||
|             if (1 === bccomp((string)$rounded, '0')) { | ||||
|                 return sprintf('<span class="text-success money-positive">%s</span>', $result); | ||||
|             } | ||||
|             if (-1 === bccomp((string) $rounded, '0')) { | ||||
|             if (-1 === bccomp((string)$rounded, '0')) { | ||||
|                 return sprintf('<span class="text-danger money-negative">%s</span>', $result); | ||||
|             } | ||||
| 
 | ||||
| @@ -106,23 +107,22 @@ class Amount | ||||
|         $amount          = $journal[$field] ?? '0'; | ||||
|         // Log::debug(sprintf('Field is %s, amount is %s', $field, $amount));
 | ||||
|         // fallback, the transaction has a foreign amount in $currency.
 | ||||
|         if ($convertToNative && null !== $journal['foreign_amount'] && $currency->id === (int) $journal['foreign_currency_id']) { | ||||
|         if ($convertToNative && null !== $journal['foreign_amount'] && $currency->id === (int)$journal['foreign_currency_id']) { | ||||
|             $amount = $journal['foreign_amount']; | ||||
|             // Log::debug(sprintf('Overruled, amount is now %s', $amount));
 | ||||
|         } | ||||
| 
 | ||||
|         return (string) $amount; | ||||
|         return (string)$amount; | ||||
|     } | ||||
| 
 | ||||
|     public function convertToNative(?User $user = null): bool | ||||
|     { | ||||
|         if (!$user instanceof User) { | ||||
|             return true === Preferences::get('convert_to_native', false)->data && true === config('cer.enabled'); | ||||
|             //            Log::debug(sprintf('convertToNative [a]: %s', var_export($result, true)));
 | ||||
|         } | ||||
|         Log::debug('convertToNative setting', Preferences::getForUser($user, 'convert_to_native', false)); | ||||
| 
 | ||||
|         return true === Preferences::getForUser($user, 'convert_to_native', false)->data && true === config('cer.enabled'); | ||||
|         // Log::debug(sprintf('convertToNative [b]: %s', var_export($result, true)));
 | ||||
|     } | ||||
| 
 | ||||
|     public function getNativeCurrency(): TransactionCurrency | ||||
| @@ -140,7 +140,7 @@ class Amount | ||||
| 
 | ||||
|     public function getNativeCurrencyByUserGroup(UserGroup $userGroup): TransactionCurrency | ||||
|     { | ||||
|         $cache  = new CacheProperties(); | ||||
|         $cache = new CacheProperties(); | ||||
|         $cache->addProperty('getNativeCurrencyByGroup'); | ||||
|         $cache->addProperty($userGroup->id); | ||||
|         if ($cache->has()) { | ||||
| @@ -170,19 +170,19 @@ class Amount | ||||
|      */ | ||||
|     public function getAmountFromJournalObject(TransactionJournal $journal): string | ||||
|     { | ||||
|         $convertToNative   = $this->convertToNative(); | ||||
|         $currency          = $this->getNativeCurrency(); | ||||
|         $field             = $convertToNative && $currency->id !== $journal->transaction_currency_id ? 'native_amount' : 'amount'; | ||||
|         $convertToNative = $this->convertToNative(); | ||||
|         $currency        = $this->getNativeCurrency(); | ||||
|         $field           = $convertToNative && $currency->id !== $journal->transaction_currency_id ? 'native_amount' : 'amount'; | ||||
| 
 | ||||
|         /** @var null|Transaction $sourceTransaction */ | ||||
|         $sourceTransaction = $journal->transactions()->where('amount', '<', 0)->first(); | ||||
|         if (null === $sourceTransaction) { | ||||
|             return '0'; | ||||
|         } | ||||
|         $amount            = $sourceTransaction->{$field} ?? '0'; | ||||
|         if ((int) $sourceTransaction->foreign_currency_id === $currency->id) { | ||||
|         $amount = $sourceTransaction->{$field} ?? '0'; | ||||
|         if ((int)$sourceTransaction->foreign_currency_id === $currency->id) { | ||||
|             // use foreign amount instead!
 | ||||
|             $amount = (string) $sourceTransaction->foreign_amount; // hard coded to be foreign amount.
 | ||||
|             $amount = (string)$sourceTransaction->foreign_amount; // hard coded to be foreign amount.
 | ||||
|         } | ||||
| 
 | ||||
|         return $amount; | ||||
| @@ -245,20 +245,20 @@ class Amount | ||||
|     private function getLocaleInfo(): array | ||||
|     { | ||||
|         // get config from preference, not from translation:
 | ||||
|         $locale                    = app('steam')->getLocale(); | ||||
|         $array                     = app('steam')->getLocaleArray($locale); | ||||
|         $locale = app('steam')->getLocale(); | ||||
|         $array  = app('steam')->getLocaleArray($locale); | ||||
| 
 | ||||
|         setlocale(LC_MONETARY, $array); | ||||
|         $info                      = localeconv(); | ||||
|         $info = localeconv(); | ||||
| 
 | ||||
|         // correct variables
 | ||||
|         $info['n_cs_precedes']     = $this->getLocaleField($info, 'n_cs_precedes'); | ||||
|         $info['p_cs_precedes']     = $this->getLocaleField($info, 'p_cs_precedes'); | ||||
|         $info['n_cs_precedes'] = $this->getLocaleField($info, 'n_cs_precedes'); | ||||
|         $info['p_cs_precedes'] = $this->getLocaleField($info, 'p_cs_precedes'); | ||||
| 
 | ||||
|         $info['n_sep_by_space']    = $this->getLocaleField($info, 'n_sep_by_space'); | ||||
|         $info['p_sep_by_space']    = $this->getLocaleField($info, 'p_sep_by_space'); | ||||
|         $info['n_sep_by_space'] = $this->getLocaleField($info, 'n_sep_by_space'); | ||||
|         $info['p_sep_by_space'] = $this->getLocaleField($info, 'p_sep_by_space'); | ||||
| 
 | ||||
|         $fmt                       = new NumberFormatter($locale, NumberFormatter::CURRENCY); | ||||
|         $fmt = new NumberFormatter($locale, NumberFormatter::CURRENCY); | ||||
| 
 | ||||
|         $info['mon_decimal_point'] = $fmt->getSymbol(NumberFormatter::MONETARY_SEPARATOR_SYMBOL); | ||||
|         $info['mon_thousands_sep'] = $fmt->getSymbol(NumberFormatter::MONETARY_GROUPING_SEPARATOR_SYMBOL); | ||||
| @@ -290,11 +290,11 @@ class Amount | ||||
| 
 | ||||
|         // there are five possible positions for the "+" or "-" sign (if it is even used)
 | ||||
|         // pos_a and pos_e could be the ( and ) symbol.
 | ||||
|         $posA  = ''; // before everything
 | ||||
|         $posB  = ''; // before currency symbol
 | ||||
|         $posC  = ''; // after currency symbol
 | ||||
|         $posD  = ''; // before amount
 | ||||
|         $posE  = ''; // after everything
 | ||||
|         $posA = ''; // before everything
 | ||||
|         $posB = ''; // before currency symbol
 | ||||
|         $posC = ''; // after currency symbol
 | ||||
|         $posD = ''; // before amount
 | ||||
|         $posE = ''; // after everything
 | ||||
| 
 | ||||
|         // format would be (currency before amount)
 | ||||
|         // AB%sC_D%vE
 | ||||
| @@ -336,9 +336,9 @@ class Amount | ||||
|         } | ||||
| 
 | ||||
|         if ($csPrecedes) { | ||||
|             return $posA.$posB.'%s'.$posC.$space.$posD.'%v'.$posE; | ||||
|             return $posA . $posB . '%s' . $posC . $space . $posD . '%v' . $posE; | ||||
|         } | ||||
| 
 | ||||
|         return $posA.$posD.'%v'.$space.$posB.'%s'.$posC.$posE; | ||||
|         return $posA . $posD . '%v' . $space . $posB . '%s' . $posC . $posE; | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user