diff --git a/config/services.yaml b/config/services.yaml
index 9ebf3079..7d09a577 100644
--- a/config/services.yaml
+++ b/config/services.yaml
@@ -146,15 +146,15 @@ services:
arguments:
$base_currency: '%partdb.default_currency%'
- App\Services\PricedetailHelper:
+ App\Services\Parts\PricedetailHelper:
arguments:
$base_currency: '%partdb.default_currency%'
- App\Services\MoneyFormatter:
+ App\Services\Formatters\MoneyFormatter:
arguments:
$base_currency: '%partdb.default_currency%'
- App\Services\ExchangeRateUpdater:
+ App\Services\Tools\ExchangeRateUpdater:
arguments:
$base_currency: '%partdb.default_currency%'
diff --git a/src/Command/Currencies/UpdateExchangeRatesCommand.php b/src/Command/Currencies/UpdateExchangeRatesCommand.php
index 96afd5ac..b0735cbc 100644
--- a/src/Command/Currencies/UpdateExchangeRatesCommand.php
+++ b/src/Command/Currencies/UpdateExchangeRatesCommand.php
@@ -23,7 +23,7 @@ declare(strict_types=1);
namespace App\Command\Currencies;
use App\Entity\PriceInformations\Currency;
-use App\Services\ExchangeRateUpdater;
+use App\Services\Tools\ExchangeRateUpdater;
use Doctrine\ORM\EntityManagerInterface;
use Exchanger\Exception\Exception;
use Symfony\Component\Console\Command\Command;
diff --git a/src/Command/VersionCommand.php b/src/Command/VersionCommand.php
index 04ebae20..a5437684 100644
--- a/src/Command/VersionCommand.php
+++ b/src/Command/VersionCommand.php
@@ -20,7 +20,7 @@
namespace App\Command;
-use App\Services\GitVersionInfo;
+use App\Services\Misc\GitVersionInfo;
use Shivas\VersioningBundle\Service\VersionManagerInterface;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
diff --git a/src/Controller/AdminPages/AttachmentTypeController.php b/src/Controller/AdminPages/AttachmentTypeController.php
index 9914198b..9bb37b7d 100644
--- a/src/Controller/AdminPages/AttachmentTypeController.php
+++ b/src/Controller/AdminPages/AttachmentTypeController.php
@@ -27,9 +27,9 @@ use App\Entity\Attachments\AttachmentTypeAttachment;
use App\Entity\Base\AbstractNamedDBElement;
use App\Entity\Parameters\AttachmentTypeParameter;
use App\Form\AdminPages\AttachmentTypeAdminForm;
-use App\Services\EntityExporter;
-use App\Services\EntityImporter;
-use App\Services\StructuralElementRecursionHelper;
+use App\Services\ImportExportSystem\EntityExporter;
+use App\Services\ImportExportSystem\EntityImporter;
+use App\Services\Trees\StructuralElementRecursionHelper;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
diff --git a/src/Controller/AdminPages/BaseAdminController.php b/src/Controller/AdminPages/BaseAdminController.php
index caae375c..bbc3be39 100644
--- a/src/Controller/AdminPages/BaseAdminController.php
+++ b/src/Controller/AdminPages/BaseAdminController.php
@@ -37,14 +37,14 @@ use App\Form\AdminPages\ImportType;
use App\Form\AdminPages\MassCreationForm;
use App\Repository\AbstractPartsContainingRepository;
use App\Services\Attachments\AttachmentSubmitHandler;
-use App\Services\EntityExporter;
-use App\Services\EntityImporter;
+use App\Services\ImportExportSystem\EntityExporter;
+use App\Services\ImportExportSystem\EntityImporter;
use App\Services\LabelSystem\Barcodes\BarcodeExampleElementsGenerator;
use App\Services\LabelSystem\LabelGenerator;
use App\Services\LogSystem\EventCommentHelper;
use App\Services\LogSystem\HistoryHelper;
use App\Services\LogSystem\TimeTravel;
-use App\Services\StructuralElementRecursionHelper;
+use App\Services\Trees\StructuralElementRecursionHelper;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use InvalidArgumentException;
diff --git a/src/Controller/AdminPages/CategoryController.php b/src/Controller/AdminPages/CategoryController.php
index 558a6958..df2b7012 100644
--- a/src/Controller/AdminPages/CategoryController.php
+++ b/src/Controller/AdminPages/CategoryController.php
@@ -26,9 +26,9 @@ use App\Entity\Attachments\CategoryAttachment;
use App\Entity\Parameters\CategoryParameter;
use App\Entity\Parts\Category;
use App\Form\AdminPages\CategoryAdminForm;
-use App\Services\EntityExporter;
-use App\Services\EntityImporter;
-use App\Services\StructuralElementRecursionHelper;
+use App\Services\ImportExportSystem\EntityExporter;
+use App\Services\ImportExportSystem\EntityImporter;
+use App\Services\Trees\StructuralElementRecursionHelper;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
diff --git a/src/Controller/AdminPages/CurrencyController.php b/src/Controller/AdminPages/CurrencyController.php
index 010200ca..e1ae62c1 100644
--- a/src/Controller/AdminPages/CurrencyController.php
+++ b/src/Controller/AdminPages/CurrencyController.php
@@ -28,15 +28,15 @@ use App\Entity\Parameters\CurrencyParameter;
use App\Entity\PriceInformations\Currency;
use App\Form\AdminPages\CurrencyAdminForm;
use App\Services\Attachments\AttachmentSubmitHandler;
-use App\Services\EntityExporter;
-use App\Services\EntityImporter;
-use App\Services\ExchangeRateUpdater;
+use App\Services\ImportExportSystem\EntityExporter;
+use App\Services\ImportExportSystem\EntityImporter;
+use App\Services\Tools\ExchangeRateUpdater;
use App\Services\LabelSystem\Barcodes\BarcodeExampleElementsGenerator;
use App\Services\LabelSystem\LabelGenerator;
use App\Services\LogSystem\EventCommentHelper;
use App\Services\LogSystem\HistoryHelper;
use App\Services\LogSystem\TimeTravel;
-use App\Services\StructuralElementRecursionHelper;
+use App\Services\Trees\StructuralElementRecursionHelper;
use Doctrine\ORM\EntityManagerInterface;
use Exchanger\Exception\ChainException;
use Exchanger\Exception\Exception;
diff --git a/src/Controller/AdminPages/DeviceController.php b/src/Controller/AdminPages/DeviceController.php
index 37575b27..7f98a218 100644
--- a/src/Controller/AdminPages/DeviceController.php
+++ b/src/Controller/AdminPages/DeviceController.php
@@ -26,9 +26,9 @@ use App\Entity\Attachments\DeviceAttachment;
use App\Entity\Devices\Device;
use App\Entity\Parameters\DeviceParameter;
use App\Form\AdminPages\BaseEntityAdminForm;
-use App\Services\EntityExporter;
-use App\Services\EntityImporter;
-use App\Services\StructuralElementRecursionHelper;
+use App\Services\ImportExportSystem\EntityExporter;
+use App\Services\ImportExportSystem\EntityImporter;
+use App\Services\Trees\StructuralElementRecursionHelper;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
diff --git a/src/Controller/AdminPages/FootprintController.php b/src/Controller/AdminPages/FootprintController.php
index 25b01578..21caac39 100644
--- a/src/Controller/AdminPages/FootprintController.php
+++ b/src/Controller/AdminPages/FootprintController.php
@@ -27,9 +27,9 @@ use App\Entity\Attachments\FootprintAttachment;
use App\Entity\Parameters\FootprintParameter;
use App\Entity\Parts\Footprint;
use App\Form\AdminPages\FootprintAdminForm;
-use App\Services\EntityExporter;
-use App\Services\EntityImporter;
-use App\Services\StructuralElementRecursionHelper;
+use App\Services\ImportExportSystem\EntityExporter;
+use App\Services\ImportExportSystem\EntityImporter;
+use App\Services\Trees\StructuralElementRecursionHelper;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
diff --git a/src/Controller/AdminPages/LabelProfileController.php b/src/Controller/AdminPages/LabelProfileController.php
index 52b1144b..0681145b 100644
--- a/src/Controller/AdminPages/LabelProfileController.php
+++ b/src/Controller/AdminPages/LabelProfileController.php
@@ -27,9 +27,9 @@ use App\Entity\Attachments\LabelAttachment;
use App\Entity\LabelSystem\LabelProfile;
use App\Entity\Parameters\AbstractParameter;
use App\Form\AdminPages\LabelProfileAdminForm;
-use App\Services\EntityExporter;
-use App\Services\EntityImporter;
-use App\Services\StructuralElementRecursionHelper;
+use App\Services\ImportExportSystem\EntityExporter;
+use App\Services\ImportExportSystem\EntityImporter;
+use App\Services\Trees\StructuralElementRecursionHelper;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
diff --git a/src/Controller/AdminPages/ManufacturerController.php b/src/Controller/AdminPages/ManufacturerController.php
index e429321c..03b651f2 100644
--- a/src/Controller/AdminPages/ManufacturerController.php
+++ b/src/Controller/AdminPages/ManufacturerController.php
@@ -26,9 +26,9 @@ use App\Entity\Attachments\ManufacturerAttachment;
use App\Entity\Parameters\ManufacturerParameter;
use App\Entity\Parts\Manufacturer;
use App\Form\AdminPages\CompanyForm;
-use App\Services\EntityExporter;
-use App\Services\EntityImporter;
-use App\Services\StructuralElementRecursionHelper;
+use App\Services\ImportExportSystem\EntityExporter;
+use App\Services\ImportExportSystem\EntityImporter;
+use App\Services\Trees\StructuralElementRecursionHelper;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
diff --git a/src/Controller/AdminPages/MeasurementUnitController.php b/src/Controller/AdminPages/MeasurementUnitController.php
index fd7febea..3ea3962c 100644
--- a/src/Controller/AdminPages/MeasurementUnitController.php
+++ b/src/Controller/AdminPages/MeasurementUnitController.php
@@ -27,9 +27,9 @@ use App\Entity\Attachments\MeasurementUnitAttachment;
use App\Entity\Parameters\MeasurementUnitParameter;
use App\Entity\Parts\MeasurementUnit;
use App\Form\AdminPages\MeasurementUnitAdminForm;
-use App\Services\EntityExporter;
-use App\Services\EntityImporter;
-use App\Services\StructuralElementRecursionHelper;
+use App\Services\ImportExportSystem\EntityExporter;
+use App\Services\ImportExportSystem\EntityImporter;
+use App\Services\Trees\StructuralElementRecursionHelper;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
diff --git a/src/Controller/AdminPages/StorelocationController.php b/src/Controller/AdminPages/StorelocationController.php
index 3decf85b..c48f7b80 100644
--- a/src/Controller/AdminPages/StorelocationController.php
+++ b/src/Controller/AdminPages/StorelocationController.php
@@ -26,9 +26,9 @@ use App\Entity\Attachments\StorelocationAttachment;
use App\Entity\Parameters\StorelocationParameter;
use App\Entity\Parts\Storelocation;
use App\Form\AdminPages\StorelocationAdminForm;
-use App\Services\EntityExporter;
-use App\Services\EntityImporter;
-use App\Services\StructuralElementRecursionHelper;
+use App\Services\ImportExportSystem\EntityExporter;
+use App\Services\ImportExportSystem\EntityImporter;
+use App\Services\Trees\StructuralElementRecursionHelper;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
diff --git a/src/Controller/AdminPages/SupplierController.php b/src/Controller/AdminPages/SupplierController.php
index 5718a2b0..643ab2e7 100644
--- a/src/Controller/AdminPages/SupplierController.php
+++ b/src/Controller/AdminPages/SupplierController.php
@@ -26,9 +26,9 @@ use App\Entity\Attachments\SupplierAttachment;
use App\Entity\Parameters\SupplierParameter;
use App\Entity\Parts\Supplier;
use App\Form\AdminPages\SupplierForm;
-use App\Services\EntityExporter;
-use App\Services\EntityImporter;
-use App\Services\StructuralElementRecursionHelper;
+use App\Services\ImportExportSystem\EntityExporter;
+use App\Services\ImportExportSystem\EntityImporter;
+use App\Services\Trees\StructuralElementRecursionHelper;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
diff --git a/src/Controller/GroupController.php b/src/Controller/GroupController.php
index 4d9517ed..69099dbd 100644
--- a/src/Controller/GroupController.php
+++ b/src/Controller/GroupController.php
@@ -28,9 +28,9 @@ use App\Entity\Base\AbstractNamedDBElement;
use App\Entity\Parameters\GroupParameter;
use App\Entity\UserSystem\Group;
use App\Form\AdminPages\GroupAdminForm;
-use App\Services\EntityExporter;
-use App\Services\EntityImporter;
-use App\Services\StructuralElementRecursionHelper;
+use App\Services\ImportExportSystem\EntityExporter;
+use App\Services\ImportExportSystem\EntityImporter;
+use App\Services\Trees\StructuralElementRecursionHelper;
use App\Services\UserSystem\PermissionPresetsHelper;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
diff --git a/src/Controller/HomepageController.php b/src/Controller/HomepageController.php
index 62407d81..ab5a0963 100644
--- a/src/Controller/HomepageController.php
+++ b/src/Controller/HomepageController.php
@@ -23,7 +23,7 @@ declare(strict_types=1);
namespace App\Controller;
use App\DataTables\LogDataTable;
-use App\Services\GitVersionInfo;
+use App\Services\Misc\GitVersionInfo;
use const DIRECTORY_SEPARATOR;
use Omines\DataTablesBundle\DataTableFactory;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
diff --git a/src/Controller/PartController.php b/src/Controller/PartController.php
index b67c7f40..b45f1fab 100644
--- a/src/Controller/PartController.php
+++ b/src/Controller/PartController.php
@@ -39,7 +39,7 @@ use App\Services\LogSystem\EventCommentHelper;
use App\Services\LogSystem\HistoryHelper;
use App\Services\LogSystem\TimeTravel;
use App\Services\Parameters\ParameterExtractor;
-use App\Services\PricedetailHelper;
+use App\Services\Parts\PricedetailHelper;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Exception;
diff --git a/src/Controller/StatisticsController.php b/src/Controller/StatisticsController.php
index 47c1c0eb..03febae2 100644
--- a/src/Controller/StatisticsController.php
+++ b/src/Controller/StatisticsController.php
@@ -41,7 +41,7 @@ declare(strict_types=1);
namespace App\Controller;
-use App\Services\StatisticsHelper;
+use App\Services\Tools\StatisticsHelper;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
diff --git a/src/Controller/ToolsController.php b/src/Controller/ToolsController.php
index d8e829fe..eba30e02 100644
--- a/src/Controller/ToolsController.php
+++ b/src/Controller/ToolsController.php
@@ -20,7 +20,7 @@
namespace App\Controller;
-use App\Services\GitVersionInfo;
+use App\Services\Misc\GitVersionInfo;
use App\Services\Misc\DBInfoHelper;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
diff --git a/src/Controller/TypeaheadController.php b/src/Controller/TypeaheadController.php
index ae0453e5..3a08d0d6 100644
--- a/src/Controller/TypeaheadController.php
+++ b/src/Controller/TypeaheadController.php
@@ -36,7 +36,7 @@ use App\Entity\PriceInformations\Currency;
use App\Repository\ParameterRepository;
use App\Services\Attachments\AttachmentURLGenerator;
use App\Services\Attachments\BuiltinAttachmentsFinder;
-use App\Services\TagFinder;
+use App\Services\Tools\TagFinder;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Asset\Packages;
diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php
index 37be510d..c72ea7fe 100644
--- a/src/Controller/UserController.php
+++ b/src/Controller/UserController.php
@@ -31,9 +31,9 @@ use App\Events\SecurityEvent;
use App\Events\SecurityEvents;
use App\Form\Permissions\PermissionsType;
use App\Form\UserAdminForm;
-use App\Services\EntityExporter;
-use App\Services\EntityImporter;
-use App\Services\StructuralElementRecursionHelper;
+use App\Services\ImportExportSystem\EntityExporter;
+use App\Services\ImportExportSystem\EntityImporter;
+use App\Services\Trees\StructuralElementRecursionHelper;
use App\Services\UserSystem\PermissionPresetsHelper;
use Doctrine\ORM\EntityManagerInterface;
use Exception;
diff --git a/src/DataTables/Column/MarkdownColumn.php b/src/DataTables/Column/MarkdownColumn.php
index fcb6b9b6..4e3dc9ff 100644
--- a/src/DataTables/Column/MarkdownColumn.php
+++ b/src/DataTables/Column/MarkdownColumn.php
@@ -22,7 +22,7 @@ declare(strict_types=1);
namespace App\DataTables\Column;
-use App\Services\MarkdownParser;
+use App\Services\Formatters\MarkdownParser;
use Omines\DataTablesBundle\Column\AbstractColumn;
class MarkdownColumn extends AbstractColumn
diff --git a/src/DataTables/Column/PartAttachmentsColumn.php b/src/DataTables/Column/PartAttachmentsColumn.php
index cccd00e4..48ab3201 100644
--- a/src/DataTables/Column/PartAttachmentsColumn.php
+++ b/src/DataTables/Column/PartAttachmentsColumn.php
@@ -26,7 +26,7 @@ use App\Entity\Attachments\Attachment;
use App\Entity\Parts\Part;
use App\Services\Attachments\AttachmentManager;
use App\Services\EntityURLGenerator;
-use App\Services\FAIconGenerator;
+use App\Services\Misc\FAIconGenerator;
use Omines\DataTablesBundle\Column\AbstractColumn;
use RuntimeException;
use Symfony\Component\OptionsResolver\OptionsResolver;
diff --git a/src/DataTables/Column/SIUnitNumberColumn.php b/src/DataTables/Column/SIUnitNumberColumn.php
index 87320a2d..a66bc868 100644
--- a/src/DataTables/Column/SIUnitNumberColumn.php
+++ b/src/DataTables/Column/SIUnitNumberColumn.php
@@ -20,7 +20,7 @@
namespace App\DataTables\Column;
-use App\Services\SIFormatter;
+use App\Services\Formatters\SIFormatter;
use Omines\DataTablesBundle\Column\AbstractColumn;
use Symfony\Component\OptionsResolver\OptionsResolver;
diff --git a/src/DataTables/PartsDataTable.php b/src/DataTables/PartsDataTable.php
index 491fb7c3..4f61fcf6 100644
--- a/src/DataTables/PartsDataTable.php
+++ b/src/DataTables/PartsDataTable.php
@@ -41,7 +41,7 @@ use App\Entity\Parts\Part;
use App\Entity\Parts\PartLot;
use App\Entity\Parts\Storelocation;
use App\Entity\Parts\Supplier;
-use App\Services\AmountFormatter;
+use App\Services\Formatters\AmountFormatter;
use App\Services\Attachments\AttachmentURLGenerator;
use App\Services\Attachments\PartPreviewGenerator;
use App\Services\EntityURLGenerator;
diff --git a/src/EntityListeners/TreeCacheInvalidationListener.php b/src/EntityListeners/TreeCacheInvalidationListener.php
index f872e99e..017c8018 100644
--- a/src/EntityListeners/TreeCacheInvalidationListener.php
+++ b/src/EntityListeners/TreeCacheInvalidationListener.php
@@ -27,7 +27,7 @@ use App\Entity\Base\AbstractStructuralDBElement;
use App\Entity\LabelSystem\LabelProfile;
use App\Entity\UserSystem\Group;
use App\Entity\UserSystem\User;
-use App\Services\UserCacheKeyGenerator;
+use App\Services\UserSystem\UserCacheKeyGenerator;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Mapping as ORM;
use function get_class;
diff --git a/src/Form/Type/SIUnitType.php b/src/Form/Type/SIUnitType.php
index eb9f6127..bfec23e2 100644
--- a/src/Form/Type/SIUnitType.php
+++ b/src/Form/Type/SIUnitType.php
@@ -23,7 +23,7 @@ declare(strict_types=1);
namespace App\Form\Type;
use App\Entity\Parts\MeasurementUnit;
-use App\Services\SIFormatter;
+use App\Services\Formatters\SIFormatter;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\DataMapperInterface;
use Symfony\Component\Form\Exception;
diff --git a/src/Services/AmountFormatter.php b/src/Services/Formatters/AmountFormatter.php
similarity index 98%
rename from src/Services/AmountFormatter.php
rename to src/Services/Formatters/AmountFormatter.php
index a18540ba..18d52a44 100644
--- a/src/Services/AmountFormatter.php
+++ b/src/Services/Formatters/AmountFormatter.php
@@ -20,9 +20,10 @@
declare(strict_types=1);
-namespace App\Services;
+namespace App\Services\Formatters;
use App\Entity\Parts\MeasurementUnit;
+use App\Services\Formatters\SIFormatter;
use InvalidArgumentException;
use Symfony\Component\OptionsResolver\Options;
use Symfony\Component\OptionsResolver\OptionsResolver;
diff --git a/src/Services/MarkdownParser.php b/src/Services/Formatters/MarkdownParser.php
similarity index 98%
rename from src/Services/MarkdownParser.php
rename to src/Services/Formatters/MarkdownParser.php
index 950112ce..805fd4bf 100644
--- a/src/Services/MarkdownParser.php
+++ b/src/Services/Formatters/MarkdownParser.php
@@ -20,7 +20,7 @@
declare(strict_types=1);
-namespace App\Services;
+namespace App\Services\Formatters;
use Symfony\Contracts\Translation\TranslatorInterface;
diff --git a/src/Services/MoneyFormatter.php b/src/Services/Formatters/MoneyFormatter.php
similarity index 98%
rename from src/Services/MoneyFormatter.php
rename to src/Services/Formatters/MoneyFormatter.php
index d7ee1884..ee8a189a 100644
--- a/src/Services/MoneyFormatter.php
+++ b/src/Services/Formatters/MoneyFormatter.php
@@ -20,7 +20,7 @@
declare(strict_types=1);
-namespace App\Services;
+namespace App\Services\Formatters;
use App\Entity\PriceInformations\Currency;
use Locale;
diff --git a/src/Services/SIFormatter.php b/src/Services/Formatters/SIFormatter.php
similarity index 99%
rename from src/Services/SIFormatter.php
rename to src/Services/Formatters/SIFormatter.php
index 3f2755b8..288641a3 100644
--- a/src/Services/SIFormatter.php
+++ b/src/Services/Formatters/SIFormatter.php
@@ -20,7 +20,7 @@
declare(strict_types=1);
-namespace App\Services;
+namespace App\Services\Formatters;
/**
* A service that helps you to format values using the SI prefixes.
diff --git a/src/Services/EntityExporter.php b/src/Services/ImportExportSystem/EntityExporter.php
similarity index 99%
rename from src/Services/EntityExporter.php
rename to src/Services/ImportExportSystem/EntityExporter.php
index a99b4925..2d85097c 100644
--- a/src/Services/EntityExporter.php
+++ b/src/Services/ImportExportSystem/EntityExporter.php
@@ -20,7 +20,7 @@
declare(strict_types=1);
-namespace App\Services;
+namespace App\Services\ImportExportSystem;
use App\Entity\Base\AbstractNamedDBElement;
use function in_array;
diff --git a/src/Services/EntityImporter.php b/src/Services/ImportExportSystem/EntityImporter.php
similarity index 99%
rename from src/Services/EntityImporter.php
rename to src/Services/ImportExportSystem/EntityImporter.php
index 18f0339b..53667e21 100644
--- a/src/Services/EntityImporter.php
+++ b/src/Services/ImportExportSystem/EntityImporter.php
@@ -20,7 +20,7 @@
declare(strict_types=1);
-namespace App\Services;
+namespace App\Services\ImportExportSystem;
use App\Entity\Base\AbstractStructuralDBElement;
use function count;
diff --git a/src/Services/LabelSystem/LabelProfileDropdownHelper.php b/src/Services/LabelSystem/LabelProfileDropdownHelper.php
index bcc5e626..662922f6 100644
--- a/src/Services/LabelSystem/LabelProfileDropdownHelper.php
+++ b/src/Services/LabelSystem/LabelProfileDropdownHelper.php
@@ -43,7 +43,7 @@ namespace App\Services\LabelSystem;
use App\Entity\LabelSystem\LabelProfile;
use App\Repository\LabelProfileRepository;
-use App\Services\UserCacheKeyGenerator;
+use App\Services\UserSystem\UserCacheKeyGenerator;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Contracts\Cache\ItemInterface;
use Symfony\Contracts\Cache\TagAwareCacheInterface;
diff --git a/src/Services/LabelSystem/PlaceholderProviders/PartLotProvider.php b/src/Services/LabelSystem/PlaceholderProviders/PartLotProvider.php
index 2a0b8106..3f204f32 100644
--- a/src/Services/LabelSystem/PlaceholderProviders/PartLotProvider.php
+++ b/src/Services/LabelSystem/PlaceholderProviders/PartLotProvider.php
@@ -42,7 +42,7 @@ declare(strict_types=1);
namespace App\Services\LabelSystem\PlaceholderProviders;
use App\Entity\Parts\PartLot;
-use App\Services\AmountFormatter;
+use App\Services\Formatters\AmountFormatter;
use App\Services\LabelSystem\LabelTextReplacer;
use IntlDateFormatter;
use Locale;
diff --git a/src/Services/LabelSystem/PlaceholderProviders/PartProvider.php b/src/Services/LabelSystem/PlaceholderProviders/PartProvider.php
index 4796ebcc..48e547f6 100644
--- a/src/Services/LabelSystem/PlaceholderProviders/PartProvider.php
+++ b/src/Services/LabelSystem/PlaceholderProviders/PartProvider.php
@@ -42,7 +42,7 @@ declare(strict_types=1);
namespace App\Services\LabelSystem\PlaceholderProviders;
use App\Entity\Parts\Part;
-use App\Services\SIFormatter;
+use App\Services\Formatters\SIFormatter;
use Parsedown;
use Symfony\Contracts\Translation\TranslatorInterface;
diff --git a/src/Services/FAIconGenerator.php b/src/Services/Misc/FAIconGenerator.php
similarity index 99%
rename from src/Services/FAIconGenerator.php
rename to src/Services/Misc/FAIconGenerator.php
index bc68471e..b1687f2f 100644
--- a/src/Services/FAIconGenerator.php
+++ b/src/Services/Misc/FAIconGenerator.php
@@ -20,7 +20,7 @@
declare(strict_types=1);
-namespace App\Services;
+namespace App\Services\Misc;
use App\Entity\Attachments\Attachment;
use function in_array;
diff --git a/src/Services/GitVersionInfo.php b/src/Services/Misc/GitVersionInfo.php
similarity index 98%
rename from src/Services/GitVersionInfo.php
rename to src/Services/Misc/GitVersionInfo.php
index e560590b..3c079f4f 100644
--- a/src/Services/GitVersionInfo.php
+++ b/src/Services/Misc/GitVersionInfo.php
@@ -20,7 +20,7 @@
declare(strict_types=1);
-namespace App\Services;
+namespace App\Services\Misc;
use Symfony\Component\HttpKernel\KernelInterface;
diff --git a/src/Services/PricedetailHelper.php b/src/Services/Parts/PricedetailHelper.php
similarity index 99%
rename from src/Services/PricedetailHelper.php
rename to src/Services/Parts/PricedetailHelper.php
index 0dd071a4..464034a6 100644
--- a/src/Services/PricedetailHelper.php
+++ b/src/Services/Parts/PricedetailHelper.php
@@ -20,7 +20,7 @@
declare(strict_types=1);
-namespace App\Services;
+namespace App\Services\Parts;
use App\Entity\Parts\Part;
use App\Entity\PriceInformations\Currency;
diff --git a/src/Services/ExchangeRateUpdater.php b/src/Services/Tools/ExchangeRateUpdater.php
similarity index 98%
rename from src/Services/ExchangeRateUpdater.php
rename to src/Services/Tools/ExchangeRateUpdater.php
index 6ad32c29..241e2539 100644
--- a/src/Services/ExchangeRateUpdater.php
+++ b/src/Services/Tools/ExchangeRateUpdater.php
@@ -18,7 +18,7 @@
* along with this program. If not, see .
*/
-namespace App\Services;
+namespace App\Services\Tools;
use App\Entity\PriceInformations\Currency;
use Brick\Math\BigDecimal;
diff --git a/src/Services/StatisticsHelper.php b/src/Services/Tools/StatisticsHelper.php
similarity index 99%
rename from src/Services/StatisticsHelper.php
rename to src/Services/Tools/StatisticsHelper.php
index d8109c04..9f54db80 100644
--- a/src/Services/StatisticsHelper.php
+++ b/src/Services/Tools/StatisticsHelper.php
@@ -39,7 +39,7 @@ declare(strict_types=1);
* along with this program. If not, see .
*/
-namespace App\Services;
+namespace App\Services\Tools;
use App\Entity\Attachments\Attachment;
use App\Entity\Attachments\AttachmentType;
diff --git a/src/Services/TagFinder.php b/src/Services/Tools/TagFinder.php
similarity index 98%
rename from src/Services/TagFinder.php
rename to src/Services/Tools/TagFinder.php
index 7bb1995d..87150528 100644
--- a/src/Services/TagFinder.php
+++ b/src/Services/Tools/TagFinder.php
@@ -20,12 +20,13 @@
declare(strict_types=1);
-namespace App\Services;
+namespace App\Services\Tools;
use App\Entity\Parts\Part;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
+use function \mb_strlen;
use function array_slice;
/**
diff --git a/src/Services/Trees/NodesListBuilder.php b/src/Services/Trees/NodesListBuilder.php
index 1fbdbb54..ff8240e0 100644
--- a/src/Services/Trees/NodesListBuilder.php
+++ b/src/Services/Trees/NodesListBuilder.php
@@ -24,7 +24,7 @@ namespace App\Services\Trees;
use App\Entity\Base\AbstractStructuralDBElement;
use App\Repository\StructuralDBElementRepository;
-use App\Services\UserCacheKeyGenerator;
+use App\Services\UserSystem\UserCacheKeyGenerator;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Contracts\Cache\ItemInterface;
use Symfony\Contracts\Cache\TagAwareCacheInterface;
diff --git a/src/Services/StructuralElementRecursionHelper.php b/src/Services/Trees/StructuralElementRecursionHelper.php
similarity index 99%
rename from src/Services/StructuralElementRecursionHelper.php
rename to src/Services/Trees/StructuralElementRecursionHelper.php
index 410a3a8f..4038798f 100644
--- a/src/Services/StructuralElementRecursionHelper.php
+++ b/src/Services/Trees/StructuralElementRecursionHelper.php
@@ -20,7 +20,7 @@
declare(strict_types=1);
-namespace App\Services;
+namespace App\Services\Trees;
use App\Entity\Base\AbstractStructuralDBElement;
use Doctrine\ORM\EntityManagerInterface;
diff --git a/src/Services/Trees/ToolsTreeBuilder.php b/src/Services/Trees/ToolsTreeBuilder.php
index 07b43e91..d94ccf20 100644
--- a/src/Services/Trees/ToolsTreeBuilder.php
+++ b/src/Services/Trees/ToolsTreeBuilder.php
@@ -37,7 +37,7 @@ use App\Entity\PriceInformations\Currency;
use App\Entity\UserSystem\Group;
use App\Entity\UserSystem\User;
use App\Helpers\Trees\TreeViewNode;
-use App\Services\UserCacheKeyGenerator;
+use App\Services\UserSystem\UserCacheKeyGenerator;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Contracts\Cache\ItemInterface;
diff --git a/src/Services/Trees/TreeViewGenerator.php b/src/Services/Trees/TreeViewGenerator.php
index ff0b6f33..8a413cc2 100644
--- a/src/Services/Trees/TreeViewGenerator.php
+++ b/src/Services/Trees/TreeViewGenerator.php
@@ -36,8 +36,8 @@ use App\Helpers\Trees\TreeViewNodeIterator;
use App\Helpers\Trees\TreeViewNodeState;
use App\Repository\StructuralDBElementRepository;
use App\Services\EntityURLGenerator;
-use App\Services\MarkdownParser;
-use App\Services\UserCacheKeyGenerator;
+use App\Services\Formatters\MarkdownParser;
+use App\Services\UserSystem\UserCacheKeyGenerator;
use Doctrine\ORM\EntityManagerInterface;
use InvalidArgumentException;
use RecursiveIteratorIterator;
diff --git a/src/Services/UserCacheKeyGenerator.php b/src/Services/UserSystem/UserCacheKeyGenerator.php
similarity index 98%
rename from src/Services/UserCacheKeyGenerator.php
rename to src/Services/UserSystem/UserCacheKeyGenerator.php
index 26169a92..ae615229 100644
--- a/src/Services/UserCacheKeyGenerator.php
+++ b/src/Services/UserSystem/UserCacheKeyGenerator.php
@@ -20,7 +20,7 @@
declare(strict_types=1);
-namespace App\Services;
+namespace App\Services\UserSystem;
use App\Entity\UserSystem\User;
use Locale;
diff --git a/src/Twig/AttachmentExtension.php b/src/Twig/AttachmentExtension.php
index 14481430..b02f749d 100644
--- a/src/Twig/AttachmentExtension.php
+++ b/src/Twig/AttachmentExtension.php
@@ -21,7 +21,7 @@
namespace App\Twig;
use App\Services\Attachments\AttachmentURLGenerator;
-use App\Services\FAIconGenerator;
+use App\Services\Misc\FAIconGenerator;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
diff --git a/src/Twig/FormatExtension.php b/src/Twig/FormatExtension.php
index 606e96ba..08a4e85c 100644
--- a/src/Twig/FormatExtension.php
+++ b/src/Twig/FormatExtension.php
@@ -36,13 +36,13 @@ use App\Entity\Parts\Supplier;
use App\Entity\PriceInformations\Currency;
use App\Entity\UserSystem\Group;
use App\Entity\UserSystem\User;
-use App\Services\AmountFormatter;
+use App\Services\Formatters\AmountFormatter;
use App\Services\Attachments\AttachmentURLGenerator;
use App\Services\EntityURLGenerator;
-use App\Services\FAIconGenerator;
-use App\Services\MarkdownParser;
-use App\Services\MoneyFormatter;
-use App\Services\SIFormatter;
+use App\Services\Misc\FAIconGenerator;
+use App\Services\Formatters\MarkdownParser;
+use App\Services\Formatters\MoneyFormatter;
+use App\Services\Formatters\SIFormatter;
use App\Services\Trees\TreeViewGenerator;
use Brick\Math\BigDecimal;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
diff --git a/tests/Services/Attachments/AttachmentPathResolverTest.php b/tests/Services/Attachments/AttachmentPathResolverTest.php
index 461d1af0..e0085ebe 100644
--- a/tests/Services/Attachments/AttachmentPathResolverTest.php
+++ b/tests/Services/Attachments/AttachmentPathResolverTest.php
@@ -22,7 +22,7 @@ declare(strict_types=1);
namespace App\Tests\Services\Attachments;
-use App\Services\AmountFormatter;
+use App\Services\Formatters\AmountFormatter;
use App\Services\Attachments\AttachmentPathResolver;
use const DIRECTORY_SEPARATOR;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
diff --git a/tests/Services/ElementTypeNameGeneratorTest.php b/tests/Services/ElementTypeNameGeneratorTest.php
index bb3c61da..2fbca494 100644
--- a/tests/Services/ElementTypeNameGeneratorTest.php
+++ b/tests/Services/ElementTypeNameGeneratorTest.php
@@ -28,7 +28,7 @@ use App\Entity\Base\AbstractNamedDBElement;
use App\Entity\Parts\Category;
use App\Entity\Parts\Part;
use App\Exceptions\EntityNotSupportedException;
-use App\Services\AmountFormatter;
+use App\Services\Formatters\AmountFormatter;
use App\Services\ElementTypeNameGenerator;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
diff --git a/tests/Services/AmountFormatterTest.php b/tests/Services/Formatters/AmountFormatterTest.php
similarity index 97%
rename from tests/Services/AmountFormatterTest.php
rename to tests/Services/Formatters/AmountFormatterTest.php
index abfbb317..626ac2ea 100644
--- a/tests/Services/AmountFormatterTest.php
+++ b/tests/Services/Formatters/AmountFormatterTest.php
@@ -20,10 +20,10 @@
declare(strict_types=1);
-namespace App\Tests\Services;
+namespace App\Tests\Services\Formatters;
use App\Entity\Parts\MeasurementUnit;
-use App\Services\AmountFormatter;
+use App\Services\Formatters\AmountFormatter;
use InvalidArgumentException;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
diff --git a/tests/Services/SIFormatterTest.php b/tests/Services/Formatters/SIFormatterTest.php
similarity index 97%
rename from tests/Services/SIFormatterTest.php
rename to tests/Services/Formatters/SIFormatterTest.php
index de9de038..79668589 100644
--- a/tests/Services/SIFormatterTest.php
+++ b/tests/Services/Formatters/SIFormatterTest.php
@@ -20,9 +20,9 @@
declare(strict_types=1);
-namespace App\Tests\Services;
+namespace App\Tests\Services\Formatters;
-use App\Services\SIFormatter;
+use App\Services\Formatters\SIFormatter;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class SIFormatterTest extends WebTestCase
diff --git a/tests/Services/EntityImporterTest.php b/tests/Services/ImportExportSystem/EntityImporterTest.php
similarity index 95%
rename from tests/Services/EntityImporterTest.php
rename to tests/Services/ImportExportSystem/EntityImporterTest.php
index 0bacaca1..4373a0d0 100644
--- a/tests/Services/EntityImporterTest.php
+++ b/tests/Services/ImportExportSystem/EntityImporterTest.php
@@ -20,11 +20,11 @@
declare(strict_types=1);
-namespace App\Tests\Services;
+namespace App\Tests\Services\ImportExportSystem;
use App\Entity\Attachments\AttachmentType;
-use App\Services\AmountFormatter;
-use App\Services\EntityImporter;
+use App\Services\Formatters\AmountFormatter;
+use App\Services\ImportExportSystem\EntityImporter;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
/**
diff --git a/tests/Services/FAIconGeneratorTest.php b/tests/Services/Misc/FAIconGeneratorTest.php
similarity index 95%
rename from tests/Services/FAIconGeneratorTest.php
rename to tests/Services/Misc/FAIconGeneratorTest.php
index 0f22cc84..8255ea05 100644
--- a/tests/Services/FAIconGeneratorTest.php
+++ b/tests/Services/Misc/FAIconGeneratorTest.php
@@ -20,9 +20,10 @@
declare(strict_types=1);
-namespace App\Tests\Services;
+namespace App\Tests\Services\Misc;
-use App\Services\FAIconGenerator;
+use App\Services\Misc\FAIconGenerator;
+use App\Tests\Services\AmountFormatter;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class FAIconGeneratorTest extends WebTestCase
diff --git a/tests/Services/PricedetailHelperTest.php b/tests/Services/Parts/PricedetailHelperTest.php
similarity index 96%
rename from tests/Services/PricedetailHelperTest.php
rename to tests/Services/Parts/PricedetailHelperTest.php
index 8e9b22c4..a1d57088 100644
--- a/tests/Services/PricedetailHelperTest.php
+++ b/tests/Services/Parts/PricedetailHelperTest.php
@@ -20,13 +20,13 @@
declare(strict_types=1);
-namespace App\Tests\Services;
+namespace App\Tests\Services\Parts;
use App\Entity\Parts\Part;
use App\Entity\PriceInformations\Orderdetail;
use App\Entity\PriceInformations\Pricedetail;
-use App\Services\AmountFormatter;
-use App\Services\PricedetailHelper;
+use App\Services\Formatters\AmountFormatter;
+use App\Services\Parts\PricedetailHelper;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class PricedetailHelperTest extends WebTestCase