merge default currency settings (#5739)
This commit is contained in:
@@ -30,6 +30,8 @@ final class Version20251214160001 extends AbstractMigration
|
||||
// used to count the tags for the dropdown (filter and timesheet edit)
|
||||
$table->addIndex(['visible'], 'IDX_27CAF54C7AB0E859');
|
||||
}
|
||||
// deleted in this release
|
||||
$this->addSql("DELETE from kimai2_configuration where name = 'defaults.user.language'");
|
||||
}
|
||||
|
||||
public function down(Schema $schema): void
|
||||
|
||||
20
phpstan.neon
20
phpstan.neon
@@ -584,11 +584,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Configuration/SystemConfiguration.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Configuration\\\\SystemConfiguration\\:\\:getCustomerDefaultCurrency\\(\\) should return string but returns bool\\|float\\|int\\|string\\|null\\.$#"
|
||||
count: 1
|
||||
path: src/Configuration/SystemConfiguration.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Configuration\\\\SystemConfiguration\\:\\:getCustomerDefaultTimezone\\(\\) should return string\\|null but returns bool\\|float\\|int\\|string\\|null\\.$#"
|
||||
count: 1
|
||||
@@ -599,21 +594,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Configuration/SystemConfiguration.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Configuration\\\\SystemConfiguration\\:\\:getUserDefaultCurrency\\(\\) should return string but returns bool\\|float\\|int\\|string\\|null\\.$#"
|
||||
count: 1
|
||||
path: src/Configuration/SystemConfiguration.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Configuration\\\\SystemConfiguration\\:\\:getUserDefaultLanguage\\(\\) should return string but returns bool\\|float\\|int\\|string\\|null\\.$#"
|
||||
count: 1
|
||||
path: src/Configuration/SystemConfiguration.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Configuration\\\\SystemConfiguration\\:\\:getUserDefaultTheme\\(\\) should return string\\|null but returns bool\\|float\\|int\\|string\\|null\\.$#"
|
||||
count: 1
|
||||
path: src/Configuration/SystemConfiguration.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Configuration\\\\SystemConfiguration\\:\\:getUserDefaultTimezone\\(\\) should return string\\|null but returns bool\\|float\\|int\\|string\\|null\\.$#"
|
||||
count: 1
|
||||
|
||||
@@ -323,11 +323,6 @@ final class SystemConfiguration
|
||||
return $this->find('defaults.customer.timezone');
|
||||
}
|
||||
|
||||
public function getCustomerDefaultCurrency(): string
|
||||
{
|
||||
return $this->find('defaults.customer.currency');
|
||||
}
|
||||
|
||||
public function getCustomerDefaultCountry(): string
|
||||
{
|
||||
return $this->find('defaults.customer.country');
|
||||
@@ -340,20 +335,35 @@ final class SystemConfiguration
|
||||
return $this->find('defaults.user.timezone');
|
||||
}
|
||||
|
||||
public function getUserDefaultTheme(): ?string
|
||||
public function getUserDefaultTheme(): string
|
||||
{
|
||||
return $this->find('defaults.user.theme');
|
||||
return $this->getString('defaults.user.theme', 'auto');
|
||||
}
|
||||
|
||||
public function getUserDefaultLanguage(): string
|
||||
{
|
||||
return $this->find('defaults.user.language');
|
||||
return $this->getString('defaults.user.language', 'en');
|
||||
}
|
||||
|
||||
// TODO this is only used to display the hourly rate in the user profile
|
||||
public function getDefaultCurrency(): string
|
||||
{
|
||||
return $this->getString('defaults.customer.currency', 'EUR');
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use getDefaultCurrency() instead
|
||||
*/
|
||||
public function getCustomerDefaultCurrency(): string
|
||||
{
|
||||
return $this->getDefaultCurrency();
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use getDefaultCurrency() instead
|
||||
*/
|
||||
public function getUserDefaultCurrency(): string
|
||||
{
|
||||
return $this->find('defaults.user.currency');
|
||||
return $this->getDefaultCurrency();
|
||||
}
|
||||
|
||||
// ========== Timesheet configurations ==========
|
||||
|
||||
@@ -111,7 +111,7 @@ final class ActivityController extends AbstractController
|
||||
'page_setup' => $page,
|
||||
'dataTable' => $table,
|
||||
'metaColumns' => $metaColumns,
|
||||
'defaultCurrency' => $configuration->getCustomerDefaultCurrency(),
|
||||
'defaultCurrency' => $configuration->getDefaultCurrency(),
|
||||
'now' => $this->getDateTimeFactory()->createDateTime(),
|
||||
]);
|
||||
}
|
||||
@@ -452,7 +452,7 @@ final class ActivityController extends AbstractController
|
||||
*/
|
||||
private function createEditForm(Activity $activity, SystemConfiguration $configuration): FormInterface
|
||||
{
|
||||
$currency = $configuration->getCustomerDefaultCurrency();
|
||||
$currency = $configuration->getDefaultCurrency();
|
||||
$url = $this->generateUrl('admin_activity_create');
|
||||
if ($activity->getProject()?->getId() !== null) {
|
||||
$url = $this->generateUrl('admin_activity_create_with_project', ['project' => $activity->getProject()->getId()]);
|
||||
|
||||
@@ -177,7 +177,7 @@ final class ProjectController extends AbstractController
|
||||
{
|
||||
$project = $projectService->createNewProject($customer);
|
||||
|
||||
$editForm = $this->createEditForm($project, $configuration->getCustomerDefaultCurrency());
|
||||
$editForm = $this->createEditForm($project, $configuration->getDefaultCurrency());
|
||||
$editForm->handleRequest($request);
|
||||
|
||||
if ($editForm->isSubmitted() && $editForm->isValid()) {
|
||||
@@ -440,7 +440,7 @@ final class ProjectController extends AbstractController
|
||||
{
|
||||
$projectService->loadMetaFields($project);
|
||||
|
||||
$editForm = $this->createEditForm($project, $configuration->getCustomerDefaultCurrency());
|
||||
$editForm = $this->createEditForm($project, $configuration->getDefaultCurrency());
|
||||
$editForm->handleRequest($request);
|
||||
|
||||
if ($editForm->isSubmitted() && $editForm->isValid()) {
|
||||
|
||||
@@ -467,10 +467,6 @@ final class SystemConfigurationController extends AbstractController
|
||||
->setLabel('country')
|
||||
->setType(CountryType::class)
|
||||
->setOptions(['help' => 'default_value_new']),
|
||||
(new Configuration('defaults.customer.currency'))
|
||||
->setLabel('currency')
|
||||
->setType(CurrencyType::class)
|
||||
->setOptions(['help' => 'default_value_new']),
|
||||
(new Configuration('customer.choice_pattern'))
|
||||
->setLabel('choice_pattern')
|
||||
->setType(CustomerTypePatternType::class),
|
||||
@@ -542,9 +538,6 @@ final class SystemConfigurationController extends AbstractController
|
||||
->setLabel('skin')
|
||||
->setType(SkinType::class)
|
||||
->setOptions(['help' => 'default_value_new']),
|
||||
(new Configuration('defaults.user.currency'))
|
||||
->setLabel('currency')
|
||||
->setType(CurrencyType::class),
|
||||
(new Configuration('theme.avatar_url'))
|
||||
->setRequired(false)
|
||||
->setLabel('theme.avatar_url')
|
||||
@@ -617,6 +610,10 @@ final class SystemConfigurationController extends AbstractController
|
||||
->setTranslationDomain('system-configuration')
|
||||
->setRequired(false)
|
||||
->setType(TextType::class),
|
||||
(new Configuration('defaults.customer.currency'))
|
||||
->setLabel('currency')
|
||||
->setType(CurrencyType::class)
|
||||
->setOptions(['help' => 'Can be overwritten per customer']),
|
||||
(new Configuration('company.financial_year'))
|
||||
->setTranslationDomain('system-configuration')
|
||||
->setRequired(false)
|
||||
|
||||
@@ -55,7 +55,7 @@ final class CustomerService
|
||||
$customer = new Customer($name);
|
||||
$customer->setTimezone($this->getDefaultTimezone());
|
||||
$customer->setCountry($this->configuration->getCustomerDefaultCountry());
|
||||
$customer->setCurrency($this->configuration->getCustomerDefaultCurrency());
|
||||
$customer->setCurrency($this->configuration->getDefaultCurrency());
|
||||
$customer->setNumber($this->calculateNextCustomerNumber());
|
||||
|
||||
$this->loadMetaFields($customer);
|
||||
|
||||
@@ -625,8 +625,7 @@ final class Configuration implements ConfigurationInterface
|
||||
->children()
|
||||
->scalarNode('timezone')->defaultNull()->end()
|
||||
->scalarNode('language')->defaultValue(User::DEFAULT_LANGUAGE)->end()
|
||||
->scalarNode('theme')->defaultValue('default')->end()
|
||||
->scalarNode('currency')->defaultValue(Customer::DEFAULT_CURRENCY)->end()
|
||||
->scalarNode('theme')->defaultValue('auto')->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
|
||||
@@ -60,7 +60,7 @@ final class UserPreferenceSubscriber implements EventSubscriberInterface
|
||||
|
||||
if ($this->voter->isGranted('hourly-rate', $user)) {
|
||||
$enableHourlyRate = true;
|
||||
$hourlyRateOptions = ['currency' => $this->systemConfiguration->getUserDefaultCurrency()];
|
||||
$hourlyRateOptions = ['currency' => $this->systemConfiguration->getDefaultCurrency()];
|
||||
}
|
||||
|
||||
return [
|
||||
|
||||
@@ -19,8 +19,8 @@ use PHPUnit\Framework\TestCase;
|
||||
class SystemConfigurationTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @param array $settings
|
||||
* @param array $loaderSettings
|
||||
* @param array<string, array<mixed>> $settings
|
||||
* @param array<Configuration> $loaderSettings
|
||||
* @return SystemConfiguration
|
||||
*/
|
||||
protected function getSut(array $settings, array $loaderSettings = []): SystemConfiguration
|
||||
@@ -207,12 +207,11 @@ class SystemConfigurationTest extends TestCase
|
||||
{
|
||||
$sut = $this->getSut($this->getDefaultSettings(), []);
|
||||
self::assertEquals('Europe/London', $sut->getCustomerDefaultTimezone());
|
||||
self::assertEquals('GBP', $sut->getCustomerDefaultCurrency());
|
||||
self::assertEquals('GBP', $sut->getDefaultCurrency());
|
||||
self::assertEquals('FR', $sut->getCustomerDefaultCountry());
|
||||
self::assertEquals('foo/bar', $sut->getUserDefaultTimezone());
|
||||
self::assertEquals('blue', $sut->getUserDefaultTheme());
|
||||
self::assertEquals('IT', $sut->getUserDefaultLanguage());
|
||||
self::assertEquals('USD', $sut->getUserDefaultCurrency());
|
||||
self::assertNull($sut->getFinancialYearStart());
|
||||
}
|
||||
|
||||
@@ -220,12 +219,11 @@ class SystemConfigurationTest extends TestCase
|
||||
{
|
||||
$sut = $this->getSut($this->getDefaultSettings(), $this->getDefaultLoaderSettings());
|
||||
self::assertEquals('Russia/Moscov', $sut->getCustomerDefaultTimezone());
|
||||
self::assertEquals('RUB', $sut->getCustomerDefaultCurrency());
|
||||
self::assertEquals('RUB', $sut->getDefaultCurrency());
|
||||
self::assertEquals('FR', $sut->getCustomerDefaultCountry());
|
||||
self::assertEquals('foo/bar', $sut->getUserDefaultTimezone());
|
||||
self::assertEquals('blue', $sut->getUserDefaultTheme());
|
||||
self::assertEquals('IT', $sut->getUserDefaultLanguage());
|
||||
self::assertEquals('USD', $sut->getUserDefaultCurrency());
|
||||
}
|
||||
|
||||
public function testTimesheetWithoutLoader(): void
|
||||
|
||||
@@ -449,7 +449,7 @@ class ProfileControllerTest extends AbstractControllerBaseTestCase
|
||||
|
||||
self::assertEquals($hourlyRateOriginal, $user->getPreferenceValue(UserPreference::HOURLY_RATE));
|
||||
self::assertNull($user->getPreferenceValue(UserPreference::INTERNAL_RATE));
|
||||
self::assertEquals('default', $user->getPreferenceValue(UserPreference::SKIN));
|
||||
self::assertEquals('auto', $user->getPreferenceValue(UserPreference::SKIN));
|
||||
|
||||
$data = [
|
||||
UserPreference::TIMEZONE => ['value' => 'America/Creston'],
|
||||
|
||||
@@ -208,7 +208,6 @@ class SystemConfigurationControllerTest extends AbstractControllerBaseTestCase
|
||||
'configuration' => [
|
||||
['name' => 'defaults.customer.timezone', 'value' => 'Atlantic/Canary'],
|
||||
['name' => 'defaults.customer.country', 'value' => 'BB'],
|
||||
['name' => 'defaults.customer.currency', 'value' => 'GBP'],
|
||||
]
|
||||
]
|
||||
]);
|
||||
@@ -221,7 +220,6 @@ class SystemConfigurationControllerTest extends AbstractControllerBaseTestCase
|
||||
$configService = $this->getSystemConfiguration();
|
||||
self::assertEquals('Atlantic/Canary', $configService->find('defaults.customer.timezone'));
|
||||
self::assertEquals('BB', $configService->find('defaults.customer.country'));
|
||||
self::assertEquals('GBP', $configService->find('defaults.customer.currency'));
|
||||
}
|
||||
|
||||
public function testUpdateCustomerConfigWithSingleParam(): void
|
||||
@@ -236,7 +234,6 @@ class SystemConfigurationControllerTest extends AbstractControllerBaseTestCase
|
||||
'configuration' => [
|
||||
['name' => 'defaults.customer.timezone', 'value' => 'Atlantic/Canary'],
|
||||
['name' => 'defaults.customer.country', 'value' => 'BB'],
|
||||
['name' => 'defaults.customer.currency', 'value' => 'GBP'],
|
||||
]
|
||||
]
|
||||
]);
|
||||
@@ -254,7 +251,7 @@ class SystemConfigurationControllerTest extends AbstractControllerBaseTestCase
|
||||
|
||||
$configService = $this->getSystemConfiguration();
|
||||
self::assertNull($configService->find('defaults.user.timezone'));
|
||||
self::assertEquals('default', $configService->find('defaults.user.theme'));
|
||||
self::assertEquals('auto', $configService->find('defaults.user.theme'));
|
||||
self::assertEquals('en', $configService->find('defaults.user.language'));
|
||||
|
||||
$form = $client->getCrawler()->filter('form[name=system_configuration_form_user]')->form();
|
||||
@@ -290,14 +287,12 @@ class SystemConfigurationControllerTest extends AbstractControllerBaseTestCase
|
||||
'configuration' => [
|
||||
['name' => 'defaults.customer.timezone', 'value' => 'XX'],
|
||||
['name' => 'defaults.customer.country', 'value' => 1],
|
||||
['name' => 'defaults.customer.currency', 'value' => 'XXX'],
|
||||
]
|
||||
]
|
||||
],
|
||||
[
|
||||
'#system_configuration_form_customer_configuration_0_value',
|
||||
'#system_configuration_form_customer_configuration_1_value',
|
||||
'#system_configuration_form_customer_configuration_2_value',
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
@@ -364,8 +364,7 @@ class ConfigurationTest extends TestCase
|
||||
'user' => [
|
||||
'timezone' => null,
|
||||
'language' => 'en',
|
||||
'theme' => 'default',
|
||||
'currency' => 'EUR',
|
||||
'theme' => 'auto',
|
||||
],
|
||||
],
|
||||
'permissions' => [
|
||||
|
||||
@@ -426,16 +426,6 @@ parameters:
|
||||
count: 1
|
||||
path: Configuration/SamlConfigurationTest.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Tests\\\\Configuration\\\\SystemConfigurationTest\\:\\:getSut\\(\\) has parameter \\$loaderSettings with no value type specified in iterable type array\\.$#"
|
||||
count: 1
|
||||
path: Configuration/SystemConfigurationTest.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Tests\\\\Configuration\\\\SystemConfigurationTest\\:\\:getSut\\(\\) has parameter \\$settings with no value type specified in iterable type array\\.$#"
|
||||
count: 1
|
||||
path: Configuration/SystemConfigurationTest.php
|
||||
|
||||
-
|
||||
message: "#^Cannot call method getId\\(\\) on App\\\\Entity\\\\Activity\\|null\\.$#"
|
||||
count: 4
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<!-- Reports -->
|
||||
<!-- Actions -->
|
||||
<!-- Application -->
|
||||
<trans-unit id="tLV1hoP" resname="report_tasks_assigned" xml:space="preserve" approved="no">
|
||||
<trans-unit id="tLV1hoP" resname="report_tasks_assigned" xml:space="preserve" approved="no">
|
||||
<source>report_tasks_assigned</source>
|
||||
<target state="translated">Tasques per usuari</target>
|
||||
</trans-unit>
|
||||
|
||||
Reference in New Issue
Block a user