Browse Source

Merge branch 'release/2.2.1'

Conflicts:
	.env.docker
	src/Entity/Organization/Parameters.php
Olivier Massot 3 years ago
parent
commit
d471aed7f8
100 changed files with 17785 additions and 10235 deletions
  1. 37 18
      .env
  2. 8 0
      .env.ci
  3. 30 0
      .env.docker
  4. 31 6
      .env.preprod
  5. 35 4
      .env.prod
  6. 31 0
      .env.test
  7. 2 4
      .gitignore
  8. 1 1
      .gitlab-ci.yml
  9. 0 4
      bin/console
  10. 16 4
      composer.json
  11. 0 10088
      composer.lock
  12. 0 4
      config/api_platform/Access/access.yaml
  13. 6 3
      config/bundles.php
  14. 3 2
      config/opentalent/enum.yaml
  15. 8 3
      config/opentalent/modulesbyconditions.yaml
  16. 29 66
      config/opentalent/products.yaml
  17. 12 0
      config/packages/dh_auditor.yaml
  18. 0 0
      config/packages/docker/debug.yaml
  19. 10 0
      config/packages/docker/mailer.yaml
  20. 9 0
      config/packages/docker/messenger.yaml
  21. 0 0
      config/packages/docker/monolog.yaml
  22. 0 0
      config/packages/docker/web_profiler.yaml
  23. 16 0
      config/packages/doctrine.yaml
  24. 5 19
      config/packages/elastica.yaml
  25. 24 0
      config/packages/elastica/educationNotation.yaml
  26. 20 0
      config/packages/elastica/organization.yaml
  27. 7 0
      config/packages/framework.yaml
  28. 5 5
      config/packages/knp_gaufrette.yaml
  29. 11 0
      config/packages/mercure.yaml
  30. 5 0
      config/packages/messenger.yaml
  31. 2 2
      config/packages/security.yaml
  32. 2 0
      config/packages/twig.yaml
  33. 1 0
      config/routes.yaml
  34. 3 0
      config/routes/dh_auditor.yaml
  35. 0 0
      config/routes/docker/framework.yaml
  36. 0 0
      config/routes/docker/web_profiler.yaml
  37. 20 1
      config/services.yaml
  38. 25 0
      doc/bindfile.md
  39. 1 1
      doc/exports.md
  40. 67 0
      doc/mercure.md
  41. 59 0
      old/Entity/AccessAndFunction/Access.php
  42. 244 0
      old/Entity/AccessAndFunction/AccessCommunication.php
  43. 127 0
      old/Entity/AccessAndFunction/AccessFamily.php
  44. 331 0
      old/Entity/AccessAndFunction/AccessNetworkSetting.php
  45. 397 0
      old/Entity/AccessAndFunction/AccessSocial.php
  46. 123 0
      old/Entity/AccessAndFunction/FunctionType.php
  47. 283 0
      old/Entity/AccessAndFunction/OrganizationFunction.php
  48. 143 0
      old/Entity/AccessAndFunction/OrganizationResponsability.php
  49. 221 0
      old/Entity/AccessAndFunction/PersonalizedList.php
  50. 440 0
      old/Entity/AccessAndFunction/Repository/AccessRepository.php
  51. 54 0
      old/Entity/AccessAndFunction/Repository/OrganizationFunctionRepository.php
  52. 223 0
      old/Entity/AccessWish/AccessFamilyWish.php
  53. 363 0
      old/Entity/AccessWish/AccessTmp.php
  54. 1306 0
      old/Entity/AccessWish/AccessWish.php
  55. 282 0
      old/Entity/AccessWish/DocumentWish.php
  56. 452 0
      old/Entity/AccessWish/EducationStudentWish.php
  57. 32 0
      old/Entity/AccessWish/Repository/AccessWishRepository.php
  58. 42 0
      old/Entity/AccessWish/Repository/EducationStudentWishRepository.php
  59. 653 0
      old/Entity/Awin/Product.php
  60. 493 0
      old/Entity/Bank/BankAccount.php
  61. 66 0
      old/Entity/Bank/Repository/BankAccountRepository.php
  62. 287 0
      old/Entity/Billing/AbstractBillingIntangible.php
  63. 97 0
      old/Entity/Billing/AbstractBillingPayer.php
  64. 507 0
      old/Entity/Billing/AccessBilling.php
  65. 198 0
      old/Entity/Billing/AccessFictionalIntangible.php
  66. 144 0
      old/Entity/Billing/AccessIntangible.php
  67. 98 0
      old/Entity/Billing/AccessPayer.php
  68. 26 0
      old/Entity/Billing/AdvancePayment.php
  69. 162 0
      old/Entity/Billing/BergerLevrault.php
  70. 25 0
      old/Entity/Billing/Bill.php
  71. 468 0
      old/Entity/Billing/BillAccessDetail.php
  72. 1539 0
      old/Entity/Billing/BillAccounting.php
  73. 10 0
      old/Entity/Billing/BillAccountingInterface.php
  74. 23 0
      old/Entity/Billing/BillCredit.php
  75. 180 0
      old/Entity/Billing/BillDebitBalance.php
  76. 555 0
      old/Entity/Billing/BillLine.php
  77. 523 0
      old/Entity/Billing/BillPayment.php
  78. 242 0
      old/Entity/Billing/BillPeriod.php
  79. 203 0
      old/Entity/Billing/BillTotalDetail.php
  80. 1095 0
      old/Entity/Billing/BillingExportSetting.php
  81. 222 0
      old/Entity/Billing/BillingIntangibleExcludeDate.php
  82. 1090 0
      old/Entity/Billing/BillingSetting.php
  83. 495 0
      old/Entity/Billing/BillingSettingRent.php
  84. 161 0
      old/Entity/Billing/Ciril.php
  85. 145 0
      old/Entity/Billing/EducationalProjectIntangible.php
  86. 82 0
      old/Entity/Billing/EducationalProjectPayer.php
  87. 258 0
      old/Entity/Billing/FamilyQuotient.php
  88. 221 0
      old/Entity/Billing/Jvs.php
  89. 471 0
      old/Entity/Billing/PayfipPaymentReturn.php
  90. 250 0
      old/Entity/Billing/Pes.php
  91. 577 0
      old/Entity/Billing/PesSetting.php
  92. 34 0
      old/Entity/Billing/Repository/AccessBillingRepository.php
  93. 52 0
      old/Entity/Billing/Repository/AccessIntangibleRepository.php
  94. 34 0
      old/Entity/Billing/Repository/AdvancePaymentRepository.php
  95. 33 0
      old/Entity/Billing/Repository/BillCreditRepository.php
  96. 32 0
      old/Entity/Billing/Repository/BillRepository.php
  97. 25 0
      old/Entity/Billing/Repository/SddBankRepository.php
  98. 25 0
      old/Entity/Billing/Repository/SddRegieRepository.php
  99. 195 0
      old/Entity/Billing/ResidenceArea.php
  100. 185 0
      old/Entity/Billing/SddBank.php

+ 37 - 18
.env

@@ -14,10 +14,7 @@
 # https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration
 
 ###> symfony/framework-bundle ###
-APP_ENV=prod
 APP_SECRET=6a76497c8658bb23e2236f97a2627df3
-#TRUSTED_PROXIES=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
-#TRUSTED_HOSTS='^(localhost|example\.com)$'
 ###< symfony/framework-bundle ###
 
 ###> files management ###
@@ -25,17 +22,9 @@ INTERNAL_FILES_DOWNLOAD_URI=https://api.opentalent.fr/_internal/secure/files
 ###< files management ###
 
 ###> doctrine/doctrine-bundle ###
-# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
-# For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db"
-# For a PostgreSQL database, use: "postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=11&charset=utf8"
-# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml
-#DATABASE_URL=mysql://root:mysql660@db:3306/opentalent?serverVersion=5.7
+# => defined in the .env.<environment> files
 ###< doctrine/doctrine-bundle ###
 
-###> nelmio/cors-bundle ###
-#CORS_ALLOW_ORIGIN=^https?://(localhost|127\.0\.0\.1)(:[0-9]+)|local.admin.opentalent.fr|local.app.opentalent.fr?$
-###< nelmio/cors-bundle ###
-
 ###> lexik/jwt-authentication-bundle ###
 JWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem
 JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem
@@ -61,22 +50,52 @@ WKHTMLTOIMAGE_PATH=/usr/local/bin/wkhtmltoimage
 ###< knplabs/knp-snappy-bundle ###
 
 ###> symfony/messenger ###
-# Choose one of the transports below
 MESSENGER_TRANSPORT_DSN=doctrine://default
-# MESSENGER_TRANSPORT_DSN=amqp://guest:guest@localhost:5672/%2f/messages
-# MESSENGER_TRANSPORT_DSN=redis://localhost:6379/messages
 ###< symfony/messenger ###
 
 ###> AdminAssos configuration ###
-#DATABASE_ADMINASSOS_URL=mysql://root:mysql660@db:3306/adminassos?serverVersion=5.7
+# => defined in the .env.<environment> files
 ###< AdminAssos configuration ###
 
 ###> symfony/lock ###
-# Choose one of the stores below
-# postgresql+advisory://db_user:db_password@localhost/db_name
 LOCK_DSN=semaphore
 ###< symfony/lock ###
 
 ###> symfony/mailer ###
 MAILER_DSN=smtp://localhost
 ###< symfony/mailer ###
+
+###> bindfile populate buffer file
+BIND_FILE_BUFFER_FILE=/env/subdomain.txt
+###< bindfile populate buffer file
+
+###> elasticsearch ###
+ELASTICSEARCH_HOST=localhost
+ELASTICSEARCH_PORT=9200
+###< elasticsearch ###
+
+###> symfony/mercure-bundle ###
+# See https://symfony.com/doc/current/mercure.html#configuration
+# The URL of the Mercure hub, used by the app to publish updates (can be a local URL)
+MERCURE_URL=http://mercure/.well-known/mercure
+# The public URL of the Mercure hub, used by the browser to connect
+MERCURE_PUBLIC_URL=https://local.mercure.opentalent.fr/.well-known/mercure
+# The secret key used to sign the JWTs
+MERCURE_PUBLISHER_JWT_KEY=NQEupdREijrfYvCmF2mnvZQFL9zLKDH9RCYter6tUWzjemPqzicffhc2fSf0yEmM
+###< symfony/mercure-bundle ###
+
+###> AdminAssos configuration ###
+DATABASE_ADMINASSOS_URL=mysql://root:mysql660@db:3306/adminassos?serverVersion=5.7
+###< AdminAssos configuration ###
+
+###> Audit configuration ###
+DATABASE_AUDIT_URL=mysql://root:mysql660@db:3306/audit?serverVersion=5.7
+###< Audit configuration ###
+
+###> typo3 client ###
+TYPO3_BASE_URI=http://docker.sub.opentalent.fr
+###< typo3 client ###
+
+###> nelmio/cors-bundle ###
+CORS_ALLOW_ORIGIN='^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$'
+###< nelmio/cors-bundle ###

+ 8 - 0
.env.ci

@@ -27,6 +27,14 @@ BLACKFIRE_SERVER_TOKEN=dbd1cfbea015fe83cccfc189a36ca3c16f3a1b43b94f50032a15e41e5
 DATABASE_ADMINASSOS_URL=mysql://root:xxx@preprod:3306/none?serverVersion=5.7
 ###< AdminAssos configuration ###
 
+###> typo3 client ###
+TYPO3_BASE_URI=http://docker.sub.opentalent.fr
+###< typo3 client ###
+
 ###> dolibarr client ###
 DOLIBARR_API_BASE_URI='https://dev-erp.2iopenservice.com/api/index.php/'
 ###< dolibarr client ###
+
+###> bindfile populate buffer file
+BIND_FILE_BUFFER_FILE=var/subdomain.txt
+###< bindfile populate buffer file

+ 30 - 0
.env.docker

@@ -24,3 +24,33 @@ BLACKFIRE_SERVER_TOKEN=dbd1cfbea015fe83cccfc189a36ca3c16f3a1b43b94f50032a15e41e5
 ###> AdminAssos configuration ###
 DATABASE_ADMINASSOS_URL=mysql://root:mysql660@db:3306/adminassos?serverVersion=5.7
 ###< AdminAssos configuration ###
+
+###> Audit configuration ###
+DATABASE_AUDIT_URL=mysql://root:mysql660@db:3306/audit?serverVersion=5.7
+###< Audit configuration ###
+
+###> typo3 client ###
+TYPO3_BASE_URI=http://docker.sub.opentalent.fr
+###< typo3 client ###
+
+###> dolibarr client ###
+DOLIBARR_API_BASE_URI=https://dev-erp.2iopenservice.com/api/index.php/
+###< dolibarr client ###
+
+###> symfony/mercure-bundle ###
+# See https://symfony.com/doc/current/mercure.html#configuration
+# The URL of the Mercure hub, used by the app to publish updates (can be a local URL)
+MERCURE_URL=http://mercure/.well-known/mercure
+# The public URL of the Mercure hub, used by the browser to connect
+MERCURE_PUBLIC_URL=https://local.mercure.opentalent.fr/.well-known/mercure
+# The secret used to sign the JWTs
+MERCURE_JWT_SECRET=gEwnJpcR8k0xE2sfBpEJzzuP2b2TXhZnzImIqCUk3j4RStBZa2pQjbEMsnGE4iGM
+###< symfony/mercure-bundle ###
+
+###> bindfile populate buffer file
+BIND_FILE_BUFFER_FILE=/var/www/html/var/subdomain.txt
+###< bindfile populate buffer file
+
+###> mailcatcher ###
+MAILER_DSN=smtp://mailcatcher:1025
+###< symfony/mercure-bundle ###

+ 31 - 6
.env.preprod

@@ -1,14 +1,8 @@
 ###> symfony/framework-bundle ###
-APP_ENV=prod
 APP_DEBUG=1
-APP_SECRET=6a76497c8658bb23e2236f97a2627df3
-#TRUSTED_PROXIES=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
-#TRUSTED_HOSTS='^(localhost|example\.com)$'
 ###< symfony/framework-bundle ###
 
 ###> doctrine/doctrine-bundle ###
-# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
-# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml
 DATABASE_URL=mysql://root:mysql2iopenservice369566@preprod:3306/opentalent?serverVersion=5.7
 ###< doctrine/doctrine-bundle ###
 
@@ -16,6 +10,14 @@ DATABASE_URL=mysql://root:mysql2iopenservice369566@preprod:3306/opentalent?serve
 CORS_ALLOW_ORIGIN=^https?://(localhost|127\.0\.0\.1)(:[0-9]+)$
 ###< nelmio/cors-bundle ###
 
+###> api v1 ###
+API_LEG_BASE_URL=https://api.preprod.opentalent.fr/api
+###< files management ###
+
+###> typo3 client ###
+TYPO3_BASE_URI=http://preprod.opentalent.fr/ohcluses
+###< typo3 client ###
+
 ###> BlackFire configuration ###
 BLACKFIRE_CLIENT_ID=988fcba8-552d-48df-a9c2-035c76535b69
 BLACKFIRE_CLIENT_TOKEN=8cfbeb263d044da9678dc2612531504da3790c308da7448e35724a5da91c136f
@@ -27,6 +29,29 @@ BLACKFIRE_SERVER_TOKEN=dbd1cfbea015fe83cccfc189a36ca3c16f3a1b43b94f50032a15e41e5
 DATABASE_ADMINASSOS_URL=mysql://root:mysql2iopenservice369566@preprod:3306/adminassos?serverVersion=5.7
 ###< AdminAssos configuration ###
 
+###> Audit configuration ###
+DATABASE_AUDIT_URL=mysql://root:mysql2iopenservice369566@preprod:3306/audit?serverVersion=5.7
+###< Audit configuration ###
+
 ###> dolibarr client ###
 DOLIBARR_API_BASE_URI=https://dev-erp.2iopenservice.com/api/index.php/
 ###< dolibarr client ###
+
+###> symfony/mercure-bundle ###
+# See https://symfony.com/doc/current/mercure.html#configuration
+# The URL of the Mercure hub, used by the app to publish updates (can be a local URL)
+MERCURE_URL=https://mercure.preprod.opentalent.fr/.well-known/mercure
+# The public URL of the Mercure hub, used by the browser to connect
+MERCURE_PUBLIC_URL=https://mercure.preprod.opentalent.fr/.well-known/mercure
+# The secret used to sign the JWTs
+MERCURE_JWT_SECRET=NQEupdREijrfYvCmF2mnvZQFL9zLKDH9RCYter6tUWzjemPqzicffhc2fSf0yEmM
+###< symfony/mercure-bundle ###
+
+###> bindfile populate buffer file
+BIND_FILE_BUFFER_FILE=var/subdomain.txt
+###< bindfile populate buffer file
+
+###> knplabs/knp-snappy-bundle ###
+WKHTMLTOPDF_PATH=/usr/bin/wkhtmltopdf
+WKHTMLTOIMAGE_PATH=/usr/bin/wkhtmltoimage
+###< knplabs/knp-snappy-bundle ###

+ 35 - 4
.env.prod

@@ -1,9 +1,5 @@
 ###> symfony/framework-bundle ###
-APP_ENV=prod
 APP_DEBUG=0
-APP_SECRET=6a76497c8658bb23e2236f97a2627df3
-#TRUSTED_PROXIES=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
-#TRUSTED_HOSTS='^(localhost|example\.com)$'
 ###< symfony/framework-bundle ###
 
 ###> doctrine/doctrine-bundle ###
@@ -16,6 +12,10 @@ DATABASE_URL=mysql://root:mysql2iopenservice369566@prod-back:3306/opentalent?ser
 CORS_ALLOW_ORIGIN=^https?://(localhost|127\.0\.0\.1)(:[0-9]+)$
 ###< nelmio/cors-bundle ###
 
+###> api v1 ###
+API_LEG_BASE_URL=https://api.opentalent.fr/api
+###< files management ###
+
 ###> BlackFire configuration ###
 BLACKFIRE_CLIENT_ID=988fcba8-552d-48df-a9c2-035c76535b69
 BLACKFIRE_CLIENT_TOKEN=8cfbeb263d044da9678dc2612531504da3790c308da7448e35724a5da91c136f
@@ -23,6 +23,37 @@ BLACKFIRE_SERVER_ID=1171e53b-459b-41da-a292-80ff68cee8c2
 BLACKFIRE_SERVER_TOKEN=dbd1cfbea015fe83cccfc189a36ca3c16f3a1b43b94f50032a15e41e53548e8b
 ###< BlackFire configuration ###
 
+###> typo3 client ###
+TYPO3_BASE_URI=http://ohcluses.opentalent.fr
+###< typo3 client ###
+
 ###> AdminAssos configuration ###
 DATABASE_ADMINASSOS_URL=mysql://root:mysql2iopenservice369566@prod-back:3306/adminassos?serverVersion=5.7
 ###< AdminAssos configuration ###
+
+###> Audit configuration ###
+DATABASE_AUDIT_URL=mysql://root:mysql2iopenservice369566@prod-back:3306/audit?serverVersion=5.7
+###< Audit configuration ###
+
+###> dolibarr client ###
+DOLIBARR_API_BASE_URI=https://dev-erp.2iopenservice.com/api/index.php/
+###< dolibarr client ###
+
+###> symfony/mercure-bundle ###
+# See https://symfony.com/doc/current/mercure.html#configuration
+# The URL of the Mercure hub, used by the app to publish updates (can be a local URL)
+MERCURE_URL=https://mercure.opentalent.fr/.well-known/mercure
+# The public URL of the Mercure hub, used by the browser to connect
+MERCURE_PUBLIC_URL=https://mercure.opentalent.fr/.well-known/mercure
+# The secret used to sign the JWTs
+MERCURE_JWT_SECRET=iz3XZPCfxZTOMjJUeJ5IUHNs1WxToeo4ApIdEKjxOwR906uU08noSjwwAJDAPegm
+###< symfony/mercure-bundle ###
+
+###> bindfile populate buffer file
+BIND_FILE_BUFFER_FILE=/env/subdomain.txt
+###< bindfile populate buffer file
+
+###> knplabs/knp-snappy-bundle ###
+WKHTMLTOPDF_PATH=/usr/bin/wkhtmltopdf
+WKHTMLTOIMAGE_PATH=/usr/bin/wkhtmltoimage
+###< knplabs/knp-snappy-bundle ###

+ 31 - 0
.env.test

@@ -1,9 +1,40 @@
+###> symfony/framework-bundle ###
+APP_DEBUG=1
+###< symfony/framework-bundle ###
+
+###> api v1 ###
+API_LEG_BASE_URL=https://api.test.opentalent.fr/api
+###< files management ###
+
 # define your env variables for the test env here
 KERNEL_CLASS='App\Kernel'
 APP_SECRET='$ecretf0rt3st'
 SYMFONY_DEPRECATIONS_HELPER=999999
 PANTHER_APP_ENV=panther
 
+###> typo3 client ###
+TYPO3_BASE_URI=http://test.opentalent.fr/ohcluses
+###< typo3 client ###
+
 ###> dolibarr client ###
 DOLIBARR_API_BASE_URI='https://dev-erp.2iopenservice.com/api/index.php/'
 ###< dolibarr client ###
+
+###> symfony/mercure-bundle ###
+# See https://symfony.com/doc/current/mercure.html#configuration
+# The URL of the Mercure hub, used by the app to publish updates (can be a local URL)
+MERCURE_URL=https://mercure.test.opentalent.fr/.well-known/mercure
+# The public URL of the Mercure hub, used by the browser to connect
+MERCURE_PUBLIC_URL=https://mercure.test.opentalent.fr/.well-known/mercure
+# The secret used to sign the JWTs
+MERCURE_JWT_SECRET=yV9fil5nodzRVrHpYrALGofhqiNO2RN3wjMlZnubgscdJ8yQ1BbATxEx6U6XwbRE
+###< symfony/mercure-bundle ###
+
+###> bindfile populate buffer file
+BIND_FILE_BUFFER_FILE=var/subdomain.txt
+###< bindfile populate buffer file
+
+###> knplabs/knp-snappy-bundle ###
+WKHTMLTOPDF_PATH=/usr/bin/wkhtmltopdf
+WKHTMLTOIMAGE_PATH=/usr/bin/wkhtmltoimage
+###< knplabs/knp-snappy-bundle ###

+ 2 - 4
.gitignore

@@ -28,10 +28,8 @@ coverage/*
 ###< phpdocs ###
 /.project
 
+composer.lock
 symfony.lock
 
-###> phpunit/phpunit ###
-/phpunit.xml
-.phpunit.result.cache
-###< phpunit/phpunit ###
 /coverage/
+

+ 1 - 1
.gitlab-ci.yml

@@ -34,7 +34,7 @@ unit:
 
   script:
     - php composer.phar --no-interaction --quiet install
-    - ./bin/phpunit --configuration ./phpunit.xml.dist --coverage-text --colors=never
+    - php bin/phpunit --configuration phpunit.xml.dist --colors=never --no-interaction
 
   artifacts:
     paths:

+ 0 - 4
bin/console

@@ -38,10 +38,6 @@ if ($_SERVER['APP_DEBUG']) {
     }
 }
 
-// Prevent doctrine:schema:update to be executed during the progressive migration
-if (in_array($input->getFirstArgument(), ["d:s:u", "doctrine:schema:update"])) {
-    throw new \InvalidArgumentException("<!> schema:update should not be used here for the time of the progressive migration");
-}
 $kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']);
 $application = new Application($kernel);
 $application->run($input);

+ 16 - 4
composer.json

@@ -12,8 +12,10 @@
         "ext-ctype": "*",
         "ext-iconv": "*",
         "api-platform/core": "^2.6",
+        "beberlei/doctrineextensions": "^1.3",
         "blackfire/php-sdk": "^1.23",
         "composer/package-versions-deprecated": "^1.11",
+        "damienharper/auditor-bundle": "^5.0",
         "doctrine/dbal": "^2.6",
         "doctrine/doctrine-bundle": "^2.1",
         "doctrine/doctrine-migrations-bundle": "^3.0",
@@ -22,11 +24,14 @@
         "jbouzekri/phumbor-bundle": "^2.1",
         "knplabs/knp-gaufrette-bundle": "^0.7.1",
         "knplabs/knp-snappy-bundle": "^1.9",
+        "lcobucci/jwt": "^4.1",
         "lexik/jwt-authentication-bundle": "^2.8",
+        "lorenzo/pinky": "^1.0",
         "myclabs/php-enum": "^1.7",
         "nelmio/cors-bundle": "^2.1",
         "odolbeau/phone-number-bundle": "^3.1",
         "phpdocumentor/reflection-docblock": "^5.2",
+        "ralouphie/mimey": "^1.0",
         "ramsey/uuid": "^4.2",
         "symfony/asset": "5.4.*",
         "symfony/console": "5.4.*",
@@ -37,23 +42,30 @@
         "symfony/framework-bundle": "5.4.*",
         "symfony/http-client": "5.4.*",
         "symfony/intl": "5.4.*",
+        "symfony/lock": "5.4.*",
+        "symfony/mailer": "^5.4",
+        "symfony/mercure": "^0.6.1",
+        "symfony/mercure-bundle": "^0.3.4",
         "symfony/monolog-bundle": "^3.7",
+        "symfony/polyfill-intl-messageformatter": "^1.24",
         "symfony/property-access": "5.4.*",
         "symfony/property-info": "5.4.*",
         "symfony/security-bundle": "5.4.*",
         "symfony/serializer": "5.4.*",
+        "symfony/translation": "5.4.*",
         "symfony/twig-bundle": "^5.4",
+        "symfony/uid": "5.4.*",
         "symfony/validator": "5.4.*",
         "symfony/yaml": "5.4.*",
-        "symfony/lock": "5.4.*",
-        "symfony/mailer": "^5.4",
-        "symfony/polyfill-intl-messageformatter": "^1.24",
-        "symfony/translation": "5.4.*",
+        "twig/cssinliner-extra": "^3.4",
+        "twig/extra-bundle": "^3.4",
+        "twig/inky-extra": "^3.4",
         "vincent/foselastica": "1.2",
         "webonyx/graphql-php": "^14.3"
     },
     "require-dev": {
         "cyclonedx/cyclonedx-php-composer": "^3.4",
+        "rector/rector": "^0.12",
         "symfony/debug-bundle": "5.4.*",
         "symfony/maker-bundle": "^1.21",
         "symfony/phpunit-bridge": "^5.4",

+ 0 - 10088
composer.lock

@@ -1,10088 +0,0 @@
-{
-    "_readme": [
-        "This file locks the dependencies of your project to a known state",
-        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
-        "This file is @generated automatically"
-    ],
-    "content-hash": "7feeb1233d12669cb7ea0a0142a749d0",
-    "packages": [
-        {
-            "name": "api-platform/core",
-            "version": "v2.6.8",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/api-platform/core.git",
-                "reference": "ff3aab5b196709c721960c0bb4f1d52759af737d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/api-platform/core/zipball/ff3aab5b196709c721960c0bb4f1d52759af737d",
-                "reference": "ff3aab5b196709c721960c0bb4f1d52759af737d",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/inflector": "^1.0 || ^2.0",
-                "fig/link-util": "^1.0",
-                "php": ">=7.1",
-                "psr/cache": "^1.0 || ^2.0 || ^3.0",
-                "psr/container": "^1.0 || ^2.0",
-                "symfony/http-foundation": "^4.4 || ^5.1 || ^6.0",
-                "symfony/http-kernel": "^4.4 || ^5.1 || ^6.0",
-                "symfony/property-access": "^3.4.19 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/property-info": "^3.4 || ^4.4 || ^5.2.1 || ^6.0",
-                "symfony/serializer": "^4.4 || ^5.1 || ^6.0",
-                "symfony/web-link": "^4.4 || ^5.1 || ^6.0",
-                "willdurand/negotiation": "^2.0.3 || ^3.0"
-            },
-            "conflict": {
-                "doctrine/common": "<2.7",
-                "doctrine/dbal": "<2.10",
-                "doctrine/mongodb-odm": "<2.2",
-                "doctrine/persistence": "<1.3"
-            },
-            "require-dev": {
-                "behat/behat": "^3.1",
-                "behat/mink": "^1.9@dev",
-                "doctrine/annotations": "^1.7",
-                "doctrine/cache": "^1.11 || ^2.1",
-                "doctrine/common": "^2.11 || ^3.0",
-                "doctrine/data-fixtures": "^1.2.2",
-                "doctrine/dbal": "^2.6 || ^3.0",
-                "doctrine/doctrine-bundle": "^1.12 || ^2.0",
-                "doctrine/mongodb-odm": "^2.2",
-                "doctrine/mongodb-odm-bundle": "^4.0",
-                "doctrine/orm": "^2.6.4",
-                "elasticsearch/elasticsearch": "^6.0 || ^7.0",
-                "friends-of-behat/mink-browserkit-driver": "^1.3.1",
-                "friends-of-behat/mink-extension": "^2.2",
-                "friends-of-behat/symfony-extension": "^2.1",
-                "guzzlehttp/guzzle": "^6.0 || ^7.0",
-                "jangregor/phpstan-prophecy": "^1.0",
-                "justinrainbow/json-schema": "^5.2.1",
-                "phpdocumentor/reflection-docblock": "^3.0 || ^4.0 || ^5.1",
-                "phpdocumentor/type-resolver": "^0.3 || ^0.4 || ^1.4",
-                "phpstan/extension-installer": "^1.1",
-                "phpstan/phpstan": "^1.1",
-                "phpstan/phpstan-doctrine": "^1.0",
-                "phpstan/phpstan-phpunit": "^1.0",
-                "phpstan/phpstan-symfony": "^1.0",
-                "psr/log": "^1.0 || ^2.0 || ^3.0",
-                "ramsey/uuid": "^3.7 || ^4.0",
-                "ramsey/uuid-doctrine": "^1.4",
-                "soyuka/contexts": "dev-main",
-                "soyuka/stubs-mongodb": "^1.0",
-                "symfony/asset": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/browser-kit": "^4.4 || ^5.1 || ^6.0",
-                "symfony/cache": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/config": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/console": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/css-selector": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/debug": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/dependency-injection": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/doctrine-bridge": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/dom-crawler": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/event-dispatcher": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/expression-language": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/finder": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/form": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/framework-bundle": "^4.4 || ^5.1 || ^6.0",
-                "symfony/http-client": "^4.4 || ^5.1 || ^6.0",
-                "symfony/mercure-bundle": "*",
-                "symfony/messenger": "^4.4 || ^5.1 || ^6.0",
-                "symfony/phpunit-bridge": "^5.4 || ^6.0",
-                "symfony/routing": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/security-bundle": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/security-core": "^4.4 || ^5.1 || ^6.0",
-                "symfony/twig-bundle": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/validator": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "symfony/web-profiler-bundle": "^4.4 || ^5.1 || ^6.0",
-                "symfony/yaml": "^3.4 || ^4.4 || ^5.1 || ^6.0",
-                "twig/twig": "^1.42.3 || ^2.12 || ^3.0",
-                "webonyx/graphql-php": "^14.0"
-            },
-            "suggest": {
-                "doctrine/mongodb-odm-bundle": "To support MongoDB. Only versions 4.0 and later are supported.",
-                "elasticsearch/elasticsearch": "To support Elasticsearch.",
-                "guzzlehttp/guzzle": "To use the HTTP cache invalidation system.",
-                "ocramius/package-versions": "To display the API Platform's version in the debug bar.",
-                "phpdocumentor/reflection-docblock": "To support extracting metadata from PHPDoc.",
-                "psr/cache-implementation": "To use metadata caching.",
-                "ramsey/uuid": "To support Ramsey's UUID identifiers.",
-                "symfony/cache": "To have metadata caching when using Symfony integration.",
-                "symfony/config": "To load XML configuration files.",
-                "symfony/expression-language": "To use authorization features.",
-                "symfony/security": "To use authorization features.",
-                "symfony/twig-bundle": "To use the Swagger UI integration.",
-                "symfony/uid": "To support Symfony UUID/ULID identifiers.",
-                "symfony/web-profiler-bundle": "To use the data collector.",
-                "webonyx/graphql-php": "To support GraphQL."
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "2.6.x-dev"
-                },
-                "symfony": {
-                    "require": "^3.4 || ^4.4 || ^5.1 || ^6.0"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "ApiPlatform\\Core\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Kévin Dunglas",
-                    "email": "kevin@dunglas.fr",
-                    "homepage": "https://dunglas.fr"
-                }
-            ],
-            "description": "Build a fully-featured hypermedia or GraphQL API in minutes!",
-            "homepage": "https://api-platform.com",
-            "keywords": [
-                "Hydra",
-                "JSON-LD",
-                "api",
-                "graphql",
-                "hal",
-                "jsonapi",
-                "openapi",
-                "rest",
-                "swagger"
-            ],
-            "support": {
-                "issues": "https://github.com/api-platform/core/issues",
-                "source": "https://github.com/api-platform/core/tree/v2.6.8"
-            },
-            "funding": [
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/api-platform/core",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-11T10:29:54+00:00"
-        },
-        {
-            "name": "blackfire/php-sdk",
-            "version": "v1.29.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/blackfireio/php-sdk.git",
-                "reference": "c5af5bd0de6091e8ffcd6cd8a1c2796368cf1054"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/blackfireio/php-sdk/zipball/c5af5bd0de6091e8ffcd6cd8a1c2796368cf1054",
-                "reference": "c5af5bd0de6091e8ffcd6cd8a1c2796368cf1054",
-                "shasum": ""
-            },
-            "require": {
-                "composer/ca-bundle": "^1.0",
-                "php": ">=5.2.0"
-            },
-            "require-dev": {
-                "behat/behat": "^3.8",
-                "friends-of-behat/mink-browserkit-driver": "^1.4",
-                "friends-of-behat/mink-extension": "^2.5",
-                "guzzlehttp/psr7": "^1.6",
-                "illuminate/console": "^8.61",
-                "illuminate/queue": "^8.61",
-                "illuminate/support": "^8.61",
-                "phpunit/phpunit": "^9.5",
-                "psr/http-message": "^1.0",
-                "symfony/browser-kit": "^5.1",
-                "symfony/framework-bundle": "^5.1",
-                "symfony/http-client": "^5.1",
-                "symfony/messenger": "^5.1",
-                "symfony/panther": "^1.0",
-                "symfony/phpunit-bridge": "^5.2"
-            },
-            "suggest": {
-                "ext-blackfire": "The C version of the Blackfire probe",
-                "ext-zlib": "To push config to remote profiling targets",
-                "symfony/panther": "To use Symfony web test cases with Blackfire"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.27.x-dev"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "src/autostart.php"
-                ],
-                "psr-4": {
-                    "Blackfire\\": "src/Blackfire"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Blackfire.io",
-                    "email": "support@blackfire.io"
-                }
-            ],
-            "description": "Blackfire.io PHP SDK",
-            "keywords": [
-                "performance",
-                "profiler",
-                "uprofiler",
-                "xhprof"
-            ],
-            "support": {
-                "issues": "https://github.com/blackfireio/php-sdk/issues",
-                "source": "https://github.com/blackfireio/php-sdk/tree/v1.29.0"
-            },
-            "time": "2022-02-04T13:24:36+00:00"
-        },
-        {
-            "name": "brick/math",
-            "version": "0.9.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/brick/math.git",
-                "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae",
-                "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae",
-                "shasum": ""
-            },
-            "require": {
-                "ext-json": "*",
-                "php": "^7.1 || ^8.0"
-            },
-            "require-dev": {
-                "php-coveralls/php-coveralls": "^2.2",
-                "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0",
-                "vimeo/psalm": "4.9.2"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Brick\\Math\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Arbitrary-precision arithmetic library",
-            "keywords": [
-                "Arbitrary-precision",
-                "BigInteger",
-                "BigRational",
-                "arithmetic",
-                "bigdecimal",
-                "bignum",
-                "brick",
-                "math"
-            ],
-            "support": {
-                "issues": "https://github.com/brick/math/issues",
-                "source": "https://github.com/brick/math/tree/0.9.3"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/BenMorel",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/brick/math",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-08-15T20:50:18+00:00"
-        },
-        {
-            "name": "composer/ca-bundle",
-            "version": "1.3.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/ca-bundle.git",
-                "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
-                "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
-                "shasum": ""
-            },
-            "require": {
-                "ext-openssl": "*",
-                "ext-pcre": "*",
-                "php": "^5.3.2 || ^7.0 || ^8.0"
-            },
-            "require-dev": {
-                "phpstan/phpstan": "^0.12.55",
-                "psr/log": "^1.0",
-                "symfony/phpunit-bridge": "^4.2 || ^5",
-                "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\CaBundle\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
-            "keywords": [
-                "cabundle",
-                "cacert",
-                "certificate",
-                "ssl",
-                "tls"
-            ],
-            "support": {
-                "irc": "irc://irc.freenode.org/composer",
-                "issues": "https://github.com/composer/ca-bundle/issues",
-                "source": "https://github.com/composer/ca-bundle/tree/1.3.1"
-            },
-            "funding": [
-                {
-                    "url": "https://packagist.com",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/composer",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-10-28T20:44:15+00:00"
-        },
-        {
-            "name": "composer/package-versions-deprecated",
-            "version": "1.11.99.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/package-versions-deprecated.git",
-                "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d",
-                "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d",
-                "shasum": ""
-            },
-            "require": {
-                "composer-plugin-api": "^1.1.0 || ^2.0",
-                "php": "^7 || ^8"
-            },
-            "replace": {
-                "ocramius/package-versions": "1.11.99"
-            },
-            "require-dev": {
-                "composer/composer": "^1.9.3 || ^2.0@dev",
-                "ext-zip": "^1.13",
-                "phpunit/phpunit": "^6.5 || ^7"
-            },
-            "type": "composer-plugin",
-            "extra": {
-                "class": "PackageVersions\\Installer",
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "PackageVersions\\": "src/PackageVersions"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be"
-                }
-            ],
-            "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
-            "support": {
-                "issues": "https://github.com/composer/package-versions-deprecated/issues",
-                "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5"
-            },
-            "funding": [
-                {
-                    "url": "https://packagist.com",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/composer",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-17T14:14:24+00:00"
-        },
-        {
-            "name": "doctrine/annotations",
-            "version": "1.13.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/annotations.git",
-                "reference": "5b668aef16090008790395c02c893b1ba13f7e08"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08",
-                "reference": "5b668aef16090008790395c02c893b1ba13f7e08",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/lexer": "1.*",
-                "ext-tokenizer": "*",
-                "php": "^7.1 || ^8.0",
-                "psr/cache": "^1 || ^2 || ^3"
-            },
-            "require-dev": {
-                "doctrine/cache": "^1.11 || ^2.0",
-                "doctrine/coding-standard": "^6.0 || ^8.1",
-                "phpstan/phpstan": "^0.12.20",
-                "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5",
-                "symfony/cache": "^4.4 || ^5.2"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                }
-            ],
-            "description": "Docblock Annotations Parser",
-            "homepage": "https://www.doctrine-project.org/projects/annotations.html",
-            "keywords": [
-                "annotations",
-                "docblock",
-                "parser"
-            ],
-            "support": {
-                "issues": "https://github.com/doctrine/annotations/issues",
-                "source": "https://github.com/doctrine/annotations/tree/1.13.2"
-            },
-            "time": "2021-08-05T19:00:23+00:00"
-        },
-        {
-            "name": "doctrine/cache",
-            "version": "2.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/cache.git",
-                "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce",
-                "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce",
-                "shasum": ""
-            },
-            "require": {
-                "php": "~7.1 || ^8.0"
-            },
-            "conflict": {
-                "doctrine/common": ">2.2,<2.4"
-            },
-            "require-dev": {
-                "alcaeus/mongo-php-adapter": "^1.1",
-                "cache/integration-tests": "dev-master",
-                "doctrine/coding-standard": "^8.0",
-                "mongodb/mongodb": "^1.1",
-                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
-                "predis/predis": "~1.0",
-                "psr/cache": "^1.0 || ^2.0 || ^3.0",
-                "symfony/cache": "^4.4 || ^5.2 || ^6.0@dev",
-                "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev"
-            },
-            "suggest": {
-                "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                }
-            ],
-            "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
-            "homepage": "https://www.doctrine-project.org/projects/cache.html",
-            "keywords": [
-                "abstraction",
-                "apcu",
-                "cache",
-                "caching",
-                "couchdb",
-                "memcached",
-                "php",
-                "redis",
-                "xcache"
-            ],
-            "support": {
-                "issues": "https://github.com/doctrine/cache/issues",
-                "source": "https://github.com/doctrine/cache/tree/2.1.1"
-            },
-            "funding": [
-                {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-07-17T14:49:29+00:00"
-        },
-        {
-            "name": "doctrine/collections",
-            "version": "1.6.8",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/collections.git",
-                "reference": "1958a744696c6bb3bb0d28db2611dc11610e78af"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/collections/zipball/1958a744696c6bb3bb0d28db2611dc11610e78af",
-                "reference": "1958a744696c6bb3bb0d28db2611dc11610e78af",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1.3 || ^8.0"
-            },
-            "require-dev": {
-                "doctrine/coding-standard": "^9.0",
-                "phpstan/phpstan": "^0.12",
-                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.1.5",
-                "vimeo/psalm": "^4.2.1"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                }
-            ],
-            "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.",
-            "homepage": "https://www.doctrine-project.org/projects/collections.html",
-            "keywords": [
-                "array",
-                "collections",
-                "iterators",
-                "php"
-            ],
-            "support": {
-                "issues": "https://github.com/doctrine/collections/issues",
-                "source": "https://github.com/doctrine/collections/tree/1.6.8"
-            },
-            "time": "2021-08-10T18:51:53+00:00"
-        },
-        {
-            "name": "doctrine/common",
-            "version": "3.2.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/common.git",
-                "reference": "295082d3750987065912816a9d536c2df735f637"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/common/zipball/295082d3750987065912816a9d536c2df735f637",
-                "reference": "295082d3750987065912816a9d536c2df735f637",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/persistence": "^2.0",
-                "php": "^7.1 || ^8.0"
-            },
-            "require-dev": {
-                "doctrine/coding-standard": "^9.0",
-                "phpstan/phpstan": "^1.4.1",
-                "phpstan/phpstan-phpunit": "^1",
-                "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0",
-                "squizlabs/php_codesniffer": "^3.0",
-                "symfony/phpunit-bridge": "^4.0.5",
-                "vimeo/psalm": "^4.4"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Common\\": "lib/Doctrine/Common"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                },
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com"
-                }
-            ],
-            "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.",
-            "homepage": "https://www.doctrine-project.org/projects/common.html",
-            "keywords": [
-                "common",
-                "doctrine",
-                "php"
-            ],
-            "support": {
-                "issues": "https://github.com/doctrine/common/issues",
-                "source": "https://github.com/doctrine/common/tree/3.2.2"
-            },
-            "funding": [
-                {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcommon",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-02T09:15:57+00:00"
-        },
-        {
-            "name": "doctrine/dbal",
-            "version": "2.13.8",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/dbal.git",
-                "reference": "dc9b3c3c8592c935a6e590441f9abc0f9eba335b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/dbal/zipball/dc9b3c3c8592c935a6e590441f9abc0f9eba335b",
-                "reference": "dc9b3c3c8592c935a6e590441f9abc0f9eba335b",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/cache": "^1.0|^2.0",
-                "doctrine/deprecations": "^0.5.3",
-                "doctrine/event-manager": "^1.0",
-                "ext-pdo": "*",
-                "php": "^7.1 || ^8"
-            },
-            "require-dev": {
-                "doctrine/coding-standard": "9.0.0",
-                "jetbrains/phpstorm-stubs": "2021.1",
-                "phpstan/phpstan": "1.4.6",
-                "phpunit/phpunit": "^7.5.20|^8.5|9.5.16",
-                "psalm/plugin-phpunit": "0.16.1",
-                "squizlabs/php_codesniffer": "3.6.2",
-                "symfony/cache": "^4.4",
-                "symfony/console": "^2.0.5|^3.0|^4.0|^5.0",
-                "vimeo/psalm": "4.22.0"
-            },
-            "suggest": {
-                "symfony/console": "For helpful console commands such as SQL execution and import of files."
-            },
-            "bin": [
-                "bin/doctrine-dbal"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\DBAL\\": "lib/Doctrine/DBAL"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
-                }
-            ],
-            "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.",
-            "homepage": "https://www.doctrine-project.org/projects/dbal.html",
-            "keywords": [
-                "abstraction",
-                "database",
-                "db2",
-                "dbal",
-                "mariadb",
-                "mssql",
-                "mysql",
-                "oci8",
-                "oracle",
-                "pdo",
-                "pgsql",
-                "postgresql",
-                "queryobject",
-                "sasql",
-                "sql",
-                "sqlanywhere",
-                "sqlite",
-                "sqlserver",
-                "sqlsrv"
-            ],
-            "support": {
-                "issues": "https://github.com/doctrine/dbal/issues",
-                "source": "https://github.com/doctrine/dbal/tree/2.13.8"
-            },
-            "funding": [
-                {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-09T15:25:46+00:00"
-        },
-        {
-            "name": "doctrine/deprecations",
-            "version": "v0.5.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/deprecations.git",
-                "reference": "9504165960a1f83cc1480e2be1dd0a0478561314"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314",
-                "reference": "9504165960a1f83cc1480e2be1dd0a0478561314",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1|^8.0"
-            },
-            "require-dev": {
-                "doctrine/coding-standard": "^6.0|^7.0|^8.0",
-                "phpunit/phpunit": "^7.0|^8.0|^9.0",
-                "psr/log": "^1.0"
-            },
-            "suggest": {
-                "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
-            "homepage": "https://www.doctrine-project.org/",
-            "support": {
-                "issues": "https://github.com/doctrine/deprecations/issues",
-                "source": "https://github.com/doctrine/deprecations/tree/v0.5.3"
-            },
-            "time": "2021-03-21T12:59:47+00:00"
-        },
-        {
-            "name": "doctrine/doctrine-bundle",
-            "version": "2.5.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/DoctrineBundle.git",
-                "reference": "1e0d1d7a5982eeebc37dcb4d77bb1a5c5961d96d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/1e0d1d7a5982eeebc37dcb4d77bb1a5c5961d96d",
-                "reference": "1e0d1d7a5982eeebc37dcb4d77bb1a5c5961d96d",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/annotations": "^1",
-                "doctrine/cache": "^1.11 || ^2.0",
-                "doctrine/dbal": "^2.13.1|^3.3.2",
-                "doctrine/persistence": "^2.2",
-                "doctrine/sql-formatter": "^1.0.1",
-                "php": "^7.1 || ^8.0",
-                "symfony/cache": "^4.3.3|^5.0|^6.0",
-                "symfony/config": "^4.4.3|^5.0|^6.0",
-                "symfony/console": "^3.4.30|^4.3.3|^5.0|^6.0",
-                "symfony/dependency-injection": "^4.4.18|^5.0|^6.0",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/doctrine-bridge": "^4.4.22|^5.2.7|^6.0",
-                "symfony/framework-bundle": "^3.4.30|^4.3.3|^5.0|^6.0",
-                "symfony/service-contracts": "^1.1.1|^2.0|^3"
-            },
-            "conflict": {
-                "doctrine/orm": "<2.9|>=3.0",
-                "twig/twig": "<1.34|>=2.0,<2.4"
-            },
-            "require-dev": {
-                "doctrine/coding-standard": "^9.0",
-                "doctrine/orm": "^2.9 || ^3.0",
-                "friendsofphp/proxy-manager-lts": "^1.0",
-                "phpunit/phpunit": "^7.5 || ^8.0 || ^9.3 || ^10.0",
-                "psalm/plugin-phpunit": "^0.16.1",
-                "psalm/plugin-symfony": "^3",
-                "symfony/phpunit-bridge": "^5.2|^6.0",
-                "symfony/property-info": "^4.3.3|^5.0|^6.0",
-                "symfony/proxy-manager-bridge": "^3.4|^4.3.3|^5.0|^6.0",
-                "symfony/security-bundle": "^4.4|^5.0|^6.0",
-                "symfony/twig-bridge": "^3.4.30|^4.3.3|^5.0|^6.0",
-                "symfony/validator": "^3.4.30|^4.3.3|^5.0|^6.0",
-                "symfony/web-profiler-bundle": "^3.4.30|^4.3.3|^5.0|^6.0",
-                "symfony/yaml": "^3.4.30|^4.3.3|^5.0|^6.0",
-                "twig/twig": "^1.34|^2.12|^3.0",
-                "vimeo/psalm": "^4.7"
-            },
-            "suggest": {
-                "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.",
-                "ext-pdo": "*",
-                "symfony/web-profiler-bundle": "To use the data collector."
-            },
-            "type": "symfony-bundle",
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Bundle\\DoctrineBundle\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
-                {
-                    "name": "Doctrine Project",
-                    "homepage": "https://www.doctrine-project.org/"
-                }
-            ],
-            "description": "Symfony DoctrineBundle",
-            "homepage": "https://www.doctrine-project.org",
-            "keywords": [
-                "database",
-                "dbal",
-                "orm",
-                "persistence"
-            ],
-            "support": {
-                "issues": "https://github.com/doctrine/DoctrineBundle/issues",
-                "source": "https://github.com/doctrine/DoctrineBundle/tree/2.5.7"
-            },
-            "funding": [
-                {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-bundle",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-05T10:29:13+00:00"
-        },
-        {
-            "name": "doctrine/doctrine-migrations-bundle",
-            "version": "3.2.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git",
-                "reference": "3393f411ba25ade21969c33f2053220044854d01"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/3393f411ba25ade21969c33f2053220044854d01",
-                "reference": "3393f411ba25ade21969c33f2053220044854d01",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/doctrine-bundle": "~1.0|~2.0",
-                "doctrine/migrations": "^3.2",
-                "php": "^7.2|^8.0",
-                "symfony/framework-bundle": "~3.4|~4.0|~5.0|~6.0"
-            },
-            "require-dev": {
-                "doctrine/coding-standard": "^8.0",
-                "doctrine/orm": "^2.6",
-                "doctrine/persistence": "^1.3||^2.0",
-                "phpstan/phpstan": "^0.12",
-                "phpstan/phpstan-deprecation-rules": "^0.12",
-                "phpstan/phpstan-phpunit": "^0.12",
-                "phpstan/phpstan-strict-rules": "^0.12",
-                "phpunit/phpunit": "^8.0|^9.0",
-                "vimeo/psalm": "^4.11"
-            },
-            "type": "symfony-bundle",
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Bundle\\MigrationsBundle\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Doctrine Project",
-                    "homepage": "https://www.doctrine-project.org"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony DoctrineMigrationsBundle",
-            "homepage": "https://www.doctrine-project.org",
-            "keywords": [
-                "dbal",
-                "migrations",
-                "schema"
-            ],
-            "support": {
-                "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues",
-                "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.2.2"
-            },
-            "funding": [
-                {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-migrations-bundle",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-01T18:08:07+00:00"
-        },
-        {
-            "name": "doctrine/event-manager",
-            "version": "1.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/event-manager.git",
-                "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f",
-                "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1 || ^8.0"
-            },
-            "conflict": {
-                "doctrine/common": "<2.9@dev"
-            },
-            "require-dev": {
-                "doctrine/coding-standard": "^6.0",
-                "phpunit/phpunit": "^7.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Common\\": "lib/Doctrine/Common"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                },
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com"
-                }
-            ],
-            "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.",
-            "homepage": "https://www.doctrine-project.org/projects/event-manager.html",
-            "keywords": [
-                "event",
-                "event dispatcher",
-                "event manager",
-                "event system",
-                "events"
-            ],
-            "support": {
-                "issues": "https://github.com/doctrine/event-manager/issues",
-                "source": "https://github.com/doctrine/event-manager/tree/1.1.x"
-            },
-            "funding": [
-                {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2020-05-29T18:28:51+00:00"
-        },
-        {
-            "name": "doctrine/inflector",
-            "version": "2.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/inflector.git",
-                "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89",
-                "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.2 || ^8.0"
-            },
-            "require-dev": {
-                "doctrine/coding-standard": "^8.2",
-                "phpstan/phpstan": "^0.12",
-                "phpstan/phpstan-phpunit": "^0.12",
-                "phpstan/phpstan-strict-rules": "^0.12",
-                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
-                "vimeo/psalm": "^4.10"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                }
-            ],
-            "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
-            "homepage": "https://www.doctrine-project.org/projects/inflector.html",
-            "keywords": [
-                "inflection",
-                "inflector",
-                "lowercase",
-                "manipulation",
-                "php",
-                "plural",
-                "singular",
-                "strings",
-                "uppercase",
-                "words"
-            ],
-            "support": {
-                "issues": "https://github.com/doctrine/inflector/issues",
-                "source": "https://github.com/doctrine/inflector/tree/2.0.4"
-            },
-            "funding": [
-                {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-10-22T20:16:43+00:00"
-        },
-        {
-            "name": "doctrine/instantiator",
-            "version": "1.4.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
-                "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1 || ^8.0"
-            },
-            "require-dev": {
-                "doctrine/coding-standard": "^9",
-                "ext-pdo": "*",
-                "ext-phar": "*",
-                "phpbench/phpbench": "^0.16 || ^1",
-                "phpstan/phpstan": "^1.4",
-                "phpstan/phpstan-phpunit": "^1",
-                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
-                "vimeo/psalm": "^4.22"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com",
-                    "homepage": "https://ocramius.github.io/"
-                }
-            ],
-            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
-            "keywords": [
-                "constructor",
-                "instantiate"
-            ],
-            "support": {
-                "issues": "https://github.com/doctrine/instantiator/issues",
-                "source": "https://github.com/doctrine/instantiator/tree/1.4.1"
-            },
-            "funding": [
-                {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-03T08:28:38+00:00"
-        },
-        {
-            "name": "doctrine/lexer",
-            "version": "1.2.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/lexer.git",
-                "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229",
-                "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1 || ^8.0"
-            },
-            "require-dev": {
-                "doctrine/coding-standard": "^9.0",
-                "phpstan/phpstan": "^1.3",
-                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
-                "vimeo/psalm": "^4.11"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                }
-            ],
-            "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
-            "homepage": "https://www.doctrine-project.org/projects/lexer.html",
-            "keywords": [
-                "annotations",
-                "docblock",
-                "lexer",
-                "parser",
-                "php"
-            ],
-            "support": {
-                "issues": "https://github.com/doctrine/lexer/issues",
-                "source": "https://github.com/doctrine/lexer/tree/1.2.3"
-            },
-            "funding": [
-                {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-28T11:07:21+00:00"
-        },
-        {
-            "name": "doctrine/migrations",
-            "version": "3.4.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/migrations.git",
-                "reference": "e7df670aa9565b435ffec636cebdb4d0a1987f10"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/migrations/zipball/e7df670aa9565b435ffec636cebdb4d0a1987f10",
-                "reference": "e7df670aa9565b435ffec636cebdb4d0a1987f10",
-                "shasum": ""
-            },
-            "require": {
-                "composer-runtime-api": "^2",
-                "doctrine/dbal": "^2.11 || ^3.0",
-                "doctrine/deprecations": "^0.5.3",
-                "doctrine/event-manager": "^1.0",
-                "friendsofphp/proxy-manager-lts": "^1.0",
-                "php": "^7.2 || ^8.0",
-                "psr/log": "^1.1.3 || ^2 || ^3",
-                "symfony/console": "^3.4 || ^4.4.16 || ^5.0 || ^6.0",
-                "symfony/stopwatch": "^3.4 || ^4.0 || ^5.0 || ^6.0"
-            },
-            "require-dev": {
-                "doctrine/coding-standard": "^8.0",
-                "doctrine/orm": "^2.6",
-                "doctrine/persistence": "^1.3 || ^2.0",
-                "doctrine/sql-formatter": "^1.0",
-                "ergebnis/composer-normalize": "^2.9",
-                "ext-pdo_sqlite": "*",
-                "phpstan/phpstan": "^0.12",
-                "phpstan/phpstan-deprecation-rules": "^0.12",
-                "phpstan/phpstan-phpunit": "^0.12",
-                "phpstan/phpstan-strict-rules": "^0.12",
-                "phpstan/phpstan-symfony": "^0.12",
-                "phpunit/phpunit": "^8.5 || ^9.4",
-                "symfony/cache": "^3.4.26 || ^4.2.12 || ^5.0 || ^6.0",
-                "symfony/process": "^3.4 || ^4.0 || ^5.0 || ^6.0",
-                "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0"
-            },
-            "suggest": {
-                "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.",
-                "symfony/yaml": "Allows the use of yaml for migration configuration files."
-            },
-            "bin": [
-                "bin/doctrine-migrations"
-            ],
-            "type": "library",
-            "extra": {
-                "composer-normalize": {
-                    "indent-size": 4,
-                    "indent-style": "space"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Migrations\\": "lib/Doctrine/Migrations"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
-                },
-                {
-                    "name": "Michael Simonson",
-                    "email": "contact@mikesimonson.com"
-                }
-            ],
-            "description": "PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying changes to it. It is a very easy to use and a powerful tool.",
-            "homepage": "https://www.doctrine-project.org/projects/migrations.html",
-            "keywords": [
-                "database",
-                "dbal",
-                "migrations"
-            ],
-            "support": {
-                "issues": "https://github.com/doctrine/migrations/issues",
-                "source": "https://github.com/doctrine/migrations/tree/3.4.1"
-            },
-            "funding": [
-                {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fmigrations",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-28T21:58:35+00:00"
-        },
-        {
-            "name": "doctrine/orm",
-            "version": "2.11.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/orm.git",
-                "reference": "9c351e044478135aec1755e2c0c0493a4b6309db"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/orm/zipball/9c351e044478135aec1755e2c0c0493a4b6309db",
-                "reference": "9c351e044478135aec1755e2c0c0493a4b6309db",
-                "shasum": ""
-            },
-            "require": {
-                "composer-runtime-api": "^2",
-                "doctrine/cache": "^1.12.1 || ^2.1.1",
-                "doctrine/collections": "^1.5",
-                "doctrine/common": "^3.0.3",
-                "doctrine/dbal": "^2.13.1 || ^3.2",
-                "doctrine/deprecations": "^0.5.3",
-                "doctrine/event-manager": "^1.1",
-                "doctrine/inflector": "^1.4 || ^2.0",
-                "doctrine/instantiator": "^1.3",
-                "doctrine/lexer": "^1.0",
-                "doctrine/persistence": "^2.2",
-                "ext-ctype": "*",
-                "php": "^7.1 || ^8.0",
-                "psr/cache": "^1 || ^2 || ^3",
-                "symfony/console": "^3.0 || ^4.0 || ^5.0 || ^6.0",
-                "symfony/polyfill-php72": "^1.23",
-                "symfony/polyfill-php80": "^1.15"
-            },
-            "conflict": {
-                "doctrine/annotations": "<1.13 || >= 2.0"
-            },
-            "require-dev": {
-                "doctrine/annotations": "^1.13",
-                "doctrine/coding-standard": "^9.0",
-                "phpbench/phpbench": "^0.16.10 || ^1.0",
-                "phpstan/phpstan": "1.4.6",
-                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4",
-                "squizlabs/php_codesniffer": "3.6.2",
-                "symfony/cache": "^4.4 || ^5.4 || ^6.0",
-                "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0",
-                "vimeo/psalm": "4.22.0"
-            },
-            "suggest": {
-                "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0",
-                "symfony/yaml": "If you want to use YAML Metadata Mapping Driver"
-            },
-            "bin": [
-                "bin/doctrine"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\ORM\\": "lib/Doctrine/ORM"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
-                },
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com"
-                }
-            ],
-            "description": "Object-Relational-Mapper for PHP",
-            "homepage": "https://www.doctrine-project.org/projects/orm.html",
-            "keywords": [
-                "database",
-                "orm"
-            ],
-            "support": {
-                "issues": "https://github.com/doctrine/orm/issues",
-                "source": "https://github.com/doctrine/orm/tree/2.11.2"
-            },
-            "time": "2022-03-09T15:23:58+00:00"
-        },
-        {
-            "name": "doctrine/persistence",
-            "version": "2.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/persistence.git",
-                "reference": "e7c8edcf98e819638af00e7b3cbbbd7734b9b2fb"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/persistence/zipball/e7c8edcf98e819638af00e7b3cbbbd7734b9b2fb",
-                "reference": "e7c8edcf98e819638af00e7b3cbbbd7734b9b2fb",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/cache": "^1.11 || ^2.0",
-                "doctrine/collections": "^1.0",
-                "doctrine/deprecations": "^0.5.3",
-                "doctrine/event-manager": "^1.0",
-                "php": "^7.1 || ^8.0",
-                "psr/cache": "^1.0 || ^2.0 || ^3.0"
-            },
-            "conflict": {
-                "doctrine/annotations": "<1.0 || >=2.0",
-                "doctrine/common": "<2.10"
-            },
-            "require-dev": {
-                "composer/package-versions-deprecated": "^1.11",
-                "doctrine/annotations": "^1.0",
-                "doctrine/coding-standard": "^9.0",
-                "doctrine/common": "^3.0",
-                "phpstan/phpstan": "1.4.6",
-                "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.5",
-                "symfony/cache": "^4.4 || ^5.4 || ^6.0",
-                "vimeo/psalm": "4.21.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Common\\": "src/Common",
-                    "Doctrine\\Persistence\\": "src/Persistence"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                },
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com"
-                }
-            ],
-            "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.",
-            "homepage": "https://doctrine-project.org/projects/persistence.html",
-            "keywords": [
-                "mapper",
-                "object",
-                "odm",
-                "orm",
-                "persistence"
-            ],
-            "support": {
-                "issues": "https://github.com/doctrine/persistence/issues",
-                "source": "https://github.com/doctrine/persistence/tree/2.4.0"
-            },
-            "time": "2022-03-13T16:11:46+00:00"
-        },
-        {
-            "name": "doctrine/sql-formatter",
-            "version": "1.1.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/sql-formatter.git",
-                "reference": "20c39c2de286a9d3262cc8ed282a4ae60e265894"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/20c39c2de286a9d3262cc8ed282a4ae60e265894",
-                "reference": "20c39c2de286a9d3262cc8ed282a4ae60e265894",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1 || ^8.0"
-            },
-            "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.4"
-            },
-            "bin": [
-                "bin/sql-formatter"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\SqlFormatter\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jeremy Dorn",
-                    "email": "jeremy@jeremydorn.com",
-                    "homepage": "http://jeremydorn.com/"
-                }
-            ],
-            "description": "a PHP SQL highlighting library",
-            "homepage": "https://github.com/doctrine/sql-formatter/",
-            "keywords": [
-                "highlight",
-                "sql"
-            ],
-            "support": {
-                "issues": "https://github.com/doctrine/sql-formatter/issues",
-                "source": "https://github.com/doctrine/sql-formatter/tree/1.1.2"
-            },
-            "time": "2021-11-05T11:11:14+00:00"
-        },
-        {
-            "name": "egulias/email-validator",
-            "version": "3.1.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/egulias/EmailValidator.git",
-                "reference": "ee0db30118f661fb166bcffbf5d82032df484697"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ee0db30118f661fb166bcffbf5d82032df484697",
-                "reference": "ee0db30118f661fb166bcffbf5d82032df484697",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/lexer": "^1.2",
-                "php": ">=7.2",
-                "symfony/polyfill-intl-idn": "^1.15"
-            },
-            "require-dev": {
-                "php-coveralls/php-coveralls": "^2.2",
-                "phpunit/phpunit": "^8.5.8|^9.3.3",
-                "vimeo/psalm": "^4"
-            },
-            "suggest": {
-                "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Egulias\\EmailValidator\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Eduardo Gulias Davis"
-                }
-            ],
-            "description": "A library for validating emails against several RFCs",
-            "homepage": "https://github.com/egulias/EmailValidator",
-            "keywords": [
-                "email",
-                "emailvalidation",
-                "emailvalidator",
-                "validation",
-                "validator"
-            ],
-            "support": {
-                "issues": "https://github.com/egulias/EmailValidator/issues",
-                "source": "https://github.com/egulias/EmailValidator/tree/3.1.2"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/egulias",
-                    "type": "github"
-                }
-            ],
-            "time": "2021-10-11T09:18:27+00:00"
-        },
-        {
-            "name": "fig/link-util",
-            "version": "1.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/link-util.git",
-                "reference": "10e52348a2e9ad4581f2bf3e16458f0861a88c6a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/link-util/zipball/10e52348a2e9ad4581f2bf3e16458f0861a88c6a",
-                "reference": "10e52348a2e9ad4581f2bf3e16458f0861a88c6a",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.0.0",
-                "psr/link": "^1.1.0 | ^2.0.0"
-            },
-            "provide": {
-                "psr/link-implementation": "1.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9",
-                "squizlabs/php_codesniffer": "^2.3.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Fig\\Link\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "https://www.php-fig.org/"
-                }
-            ],
-            "description": "Common utility implementations for HTTP links",
-            "keywords": [
-                "http",
-                "http-link",
-                "link",
-                "psr",
-                "psr-13",
-                "rest"
-            ],
-            "support": {
-                "issues": "https://github.com/php-fig/link-util/issues",
-                "source": "https://github.com/php-fig/link-util/tree/1.2.0"
-            },
-            "time": "2021-03-11T23:09:19+00:00"
-        },
-        {
-            "name": "friendsofphp/proxy-manager-lts",
-            "version": "v1.0.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git",
-                "reference": "c828ced1f932094ab79e4120a106a666565e4d9c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/c828ced1f932094ab79e4120a106a666565e4d9c",
-                "reference": "c828ced1f932094ab79e4120a106a666565e4d9c",
-                "shasum": ""
-            },
-            "require": {
-                "laminas/laminas-code": "~3.4.1|^4.0",
-                "php": ">=7.1",
-                "symfony/filesystem": "^4.4.17|^5.0|^6.0"
-            },
-            "conflict": {
-                "laminas/laminas-stdlib": "<3.2.1",
-                "zendframework/zend-stdlib": "<3.2.1"
-            },
-            "replace": {
-                "ocramius/proxy-manager": "^2.1"
-            },
-            "require-dev": {
-                "ext-phar": "*",
-                "symfony/phpunit-bridge": "^5.4|^6.0"
-            },
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "name": "ocramius/proxy-manager",
-                    "url": "https://github.com/Ocramius/ProxyManager"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "ProxyManager\\": "src/ProxyManager"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com",
-                    "homepage": "https://ocramius.github.io/"
-                },
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                }
-            ],
-            "description": "Adding support for a wider range of PHP versions to ocramius/proxy-manager",
-            "homepage": "https://github.com/FriendsOfPHP/proxy-manager-lts",
-            "keywords": [
-                "aop",
-                "lazy loading",
-                "proxy",
-                "proxy pattern",
-                "service proxies"
-            ],
-            "support": {
-                "issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues",
-                "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.7"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/Ocramius",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-02T09:29:19+00:00"
-        },
-        {
-            "name": "giggsey/libphonenumber-for-php",
-            "version": "8.12.45",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/giggsey/libphonenumber-for-php.git",
-                "reference": "7f494fd3b87c7d83472e8b6126eedc6b72dd3f3e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/7f494fd3b87c7d83472e8b6126eedc6b72dd3f3e",
-                "reference": "7f494fd3b87c7d83472e8b6126eedc6b72dd3f3e",
-                "shasum": ""
-            },
-            "require": {
-                "giggsey/locale": "^1.7|^2.0",
-                "php": ">=5.3.2",
-                "symfony/polyfill-mbstring": "^1.17"
-            },
-            "require-dev": {
-                "pear/pear-core-minimal": "^1.9",
-                "pear/pear_exception": "^1.0",
-                "pear/versioncontrol_git": "^0.5",
-                "phing/phing": "^2.7",
-                "php-coveralls/php-coveralls": "^1.0|^2.0",
-                "symfony/console": "^2.8|^3.0|^v4.4|^v5.2",
-                "symfony/phpunit-bridge": "^4.2 || ^5"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "8.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "libphonenumber\\": "src/"
-                },
-                "exclude-from-classmap": [
-                    "/src/data/",
-                    "/src/carrier/data/",
-                    "/src/geocoding/data/",
-                    "/src/timezone/data/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "Joshua Gigg",
-                    "email": "giggsey@gmail.com",
-                    "homepage": "https://giggsey.com/"
-                }
-            ],
-            "description": "PHP Port of Google's libphonenumber",
-            "homepage": "https://github.com/giggsey/libphonenumber-for-php",
-            "keywords": [
-                "geocoding",
-                "geolocation",
-                "libphonenumber",
-                "mobile",
-                "phonenumber",
-                "validation"
-            ],
-            "support": {
-                "irc": "irc://irc.appliedirc.com/lobby",
-                "issues": "https://github.com/giggsey/libphonenumber-for-php/issues",
-                "source": "https://github.com/giggsey/libphonenumber-for-php"
-            },
-            "time": "2022-03-10T10:28:34+00:00"
-        },
-        {
-            "name": "giggsey/locale",
-            "version": "2.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/giggsey/Locale.git",
-                "reference": "8d324583b5899e6280a875c43bf1fc9658bc6962"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/giggsey/Locale/zipball/8d324583b5899e6280a875c43bf1fc9658bc6962",
-                "reference": "8d324583b5899e6280a875c43bf1fc9658bc6962",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2"
-            },
-            "require-dev": {
-                "ext-json": "*",
-                "pear/pear-core-minimal": "^1.9",
-                "pear/pear_exception": "^1.0",
-                "pear/versioncontrol_git": "^0.5",
-                "phing/phing": "^2.7",
-                "php-coveralls/php-coveralls": "^2.0",
-                "phpunit/phpunit": "^8.5|^9.5",
-                "symfony/console": "^5.0",
-                "symfony/filesystem": "^5.0",
-                "symfony/finder": "^5.0",
-                "symfony/process": "^5.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Giggsey\\Locale\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Joshua Gigg",
-                    "email": "giggsey@gmail.com",
-                    "homepage": "https://giggsey.com/"
-                }
-            ],
-            "description": "Locale functions required by libphonenumber-for-php",
-            "support": {
-                "issues": "https://github.com/giggsey/Locale/issues",
-                "source": "https://github.com/giggsey/Locale/tree/2.1"
-            },
-            "time": "2021-11-04T19:12:22+00:00"
-        },
-        {
-            "name": "jbouzekri/phumbor-bundle",
-            "version": "2.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/jbouzekri/PhumborBundle.git",
-                "reference": "b3dec5189556189a20c965fda05c57c2d4d55b69"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/jbouzekri/PhumborBundle/zipball/b3dec5189556189a20c965fda05c57c2d4d55b69",
-                "reference": "b3dec5189556189a20c965fda05c57c2d4d55b69",
-                "shasum": ""
-            },
-            "require": {
-                "webfactory/phumbor": "^1.1"
-            },
-            "conflict": {
-                "twig/twig": "<1.34"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^7.0",
-                "symfony/config": "^3.4",
-                "symfony/dependency-injection": "^3.4",
-                "symfony/http-kernel": "^3.4",
-                "symfony/yaml": "^3.4",
-                "twig/extensions": "~1.0"
-            },
-            "type": "symfony-bundle",
-            "autoload": {
-                "psr-4": {
-                    "Jb\\Bundle\\PhumborBundle\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "A bridge for symfony with the phumbor client from 99designs",
-            "homepage": "https://github.com/jbouzekri/PhumborBundle",
-            "keywords": [
-                "bundle",
-                "helper",
-                "phumbor",
-                "symfony",
-                "thumbor",
-                "twig"
-            ],
-            "support": {
-                "issues": "https://github.com/jbouzekri/PhumborBundle/issues",
-                "source": "https://github.com/jbouzekri/PhumborBundle/tree/2.2.0"
-            },
-            "time": "2021-01-04T21:17:45+00:00"
-        },
-        {
-            "name": "knplabs/gaufrette",
-            "version": "v0.10.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/KnpLabs/Gaufrette.git",
-                "reference": "ef5ec9d72c06d21febfa09b36d5c3d8e3af9cf8b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/KnpLabs/Gaufrette/zipball/ef5ec9d72c06d21febfa09b36d5c3d8e3af9cf8b",
-                "reference": "ef5ec9d72c06d21febfa09b36d5c3d8e3af9cf8b",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "conflict": {
-                "microsoft/windowsazure": "<0.4.3"
-            },
-            "require-dev": {
-                "mikey179/vfsstream": "v1.x-dev as 1.7.0",
-                "phpspec/phpspec": "^5.1 || ^6.2",
-                "phpunit/phpunit": "~7.5"
-            },
-            "suggest": {
-                "ext-fileinfo": "This extension is used to automatically detect the content-type of a file in the AwsS3, OpenCloud, AzureBlogStorage and GoogleCloudStorage adapters",
-                "knplabs/knp-gaufrette-bundle": "to use with Symfony"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "0.10.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Gaufrette": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "KnpLabs Team",
-                    "homepage": "http://knplabs.com"
-                },
-                {
-                    "name": "The contributors",
-                    "homepage": "http://github.com/knplabs/Gaufrette/contributors"
-                }
-            ],
-            "description": "PHP library that provides a filesystem abstraction layer",
-            "homepage": "http://knplabs.com",
-            "keywords": [
-                "abstraction",
-                "file",
-                "filesystem",
-                "media"
-            ],
-            "support": {
-                "issues": "https://github.com/KnpLabs/Gaufrette/issues",
-                "source": "https://github.com/KnpLabs/Gaufrette/tree/v0.10.0"
-            },
-            "time": "2020-10-05T19:26:39+00:00"
-        },
-        {
-            "name": "knplabs/knp-gaufrette-bundle",
-            "version": "v0.7.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/KnpLabs/KnpGaufretteBundle.git",
-                "reference": "9cf8706e9f01d4a7ee5013261a10768efdfebb0f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/KnpLabs/KnpGaufretteBundle/zipball/9cf8706e9f01d4a7ee5013261a10768efdfebb0f",
-                "reference": "9cf8706e9f01d4a7ee5013261a10768efdfebb0f",
-                "shasum": ""
-            },
-            "require": {
-                "knplabs/gaufrette": "^0.10",
-                "php": ">=7.1",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/framework-bundle": "^4.4|^5.0|^6.0"
-            },
-            "require-dev": {
-                "symfony/console": "^4.4|^5.0|^6.0",
-                "symfony/filesystem": "^4.0|^5.0|^6.0",
-                "symfony/phpunit-bridge": "^5.4",
-                "symfony/yaml": "^4.0|^5.0|^6.0"
-            },
-            "type": "symfony-bundle",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "0.7.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Knp\\Bundle\\GaufretteBundle\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Antoine Hérault",
-                    "email": "antoine.herault@gmail.com"
-                },
-                {
-                    "name": "The contributors",
-                    "homepage": "https://github.com/knplabs/KnpGaufretteBundle/contributors"
-                }
-            ],
-            "description": "Allows to easily use the Gaufrette library in a Symfony project",
-            "homepage": "http://knplabs.com",
-            "keywords": [
-                "abstraction",
-                "file",
-                "filesystem",
-                "media"
-            ],
-            "support": {
-                "issues": "https://github.com/KnpLabs/KnpGaufretteBundle/issues",
-                "source": "https://github.com/KnpLabs/KnpGaufretteBundle/tree/v0.7.2"
-            },
-            "time": "2022-03-21T10:48:39+00:00"
-        },
-        {
-            "name": "knplabs/knp-snappy",
-            "version": "v1.4.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/KnpLabs/snappy.git",
-                "reference": "5126fb5b335ec929a226314d40cd8dad497c3d67"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/KnpLabs/snappy/zipball/5126fb5b335ec929a226314d40cd8dad497c3d67",
-                "reference": "5126fb5b335ec929a226314d40cd8dad497c3d67",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1",
-                "psr/log": "^1.0||^2.0||^3.0",
-                "symfony/process": "~3.4||~4.3||~5.0||~6.0"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.16||^3.0",
-                "pedrotroller/php-cs-custom-fixer": "^2.19",
-                "phpstan/phpstan": "^0.12.7",
-                "phpstan/phpstan-phpunit": "^0.12.6",
-                "phpunit/phpunit": "~7.4||~8.5"
-            },
-            "suggest": {
-                "h4cc/wkhtmltoimage-amd64": "Provides wkhtmltoimage-amd64 binary for Linux-compatible machines, use version `~0.12` as dependency",
-                "h4cc/wkhtmltoimage-i386": "Provides wkhtmltoimage-i386 binary for Linux-compatible machines, use version `~0.12` as dependency",
-                "h4cc/wkhtmltopdf-amd64": "Provides wkhtmltopdf-amd64 binary for Linux-compatible machines, use version `~0.12` as dependency",
-                "h4cc/wkhtmltopdf-i386": "Provides wkhtmltopdf-i386 binary for Linux-compatible machines, use version `~0.12` as dependency",
-                "wemersonjanuario/wkhtmltopdf-windows": "Provides wkhtmltopdf executable for Windows, use version `~0.12` as dependency"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Knp\\Snappy\\": "src/Knp/Snappy"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "KNP Labs Team",
-                    "homepage": "http://knplabs.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://github.com/KnpLabs/snappy/contributors"
-                }
-            ],
-            "description": "PHP library allowing thumbnail, snapshot or PDF generation from a url or a html page. Wrapper for wkhtmltopdf/wkhtmltoimage.",
-            "homepage": "http://github.com/KnpLabs/snappy",
-            "keywords": [
-                "knp",
-                "knplabs",
-                "pdf",
-                "snapshot",
-                "thumbnail",
-                "wkhtmltopdf"
-            ],
-            "support": {
-                "issues": "https://github.com/KnpLabs/snappy/issues",
-                "source": "https://github.com/KnpLabs/snappy/tree/v1.4.1"
-            },
-            "time": "2022-01-07T13:03:38+00:00"
-        },
-        {
-            "name": "knplabs/knp-snappy-bundle",
-            "version": "v1.9.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/KnpLabs/KnpSnappyBundle.git",
-                "reference": "da11c2d083f5d8586c9bd59d2948ab7d39d57b34"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/KnpLabs/KnpSnappyBundle/zipball/da11c2d083f5d8586c9bd59d2948ab7d39d57b34",
-                "reference": "da11c2d083f5d8586c9bd59d2948ab7d39d57b34",
-                "shasum": ""
-            },
-            "require": {
-                "knplabs/knp-snappy": "^1.2",
-                "php": ">=7.4",
-                "symfony/framework-bundle": "^4.4|^5.1|^6.0"
-            },
-            "require-dev": {
-                "doctrine/annotations": "^1.11",
-                "symfony/asset": "^4.4|^5.1|^6.0",
-                "symfony/finder": "^4.4|^5.1|^6.0",
-                "symfony/phpunit-bridge": "^4.4|^5.1|^6.0",
-                "symfony/security-csrf": "^4.4|^5.1|^6.0",
-                "symfony/templating": "^4.4|^5.1|^6.0",
-                "symfony/validator": "^4.4|^5.1|^6.0",
-                "symfony/yaml": "^4.4|^5.1|^6.0"
-            },
-            "type": "symfony-bundle",
-            "autoload": {
-                "psr-4": {
-                    "Knp\\Bundle\\SnappyBundle\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "KnpLabs Team",
-                    "homepage": "http://knplabs.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://github.com/KnpLabs/KnpSnappyBundle/contributors"
-                }
-            ],
-            "description": "Easily create PDF and images in Symfony by converting Twig/HTML templates.",
-            "homepage": "http://github.com/KnpLabs/KnpSnappyBundle",
-            "keywords": [
-                "bundle",
-                "knp",
-                "knplabs",
-                "pdf",
-                "snappy"
-            ],
-            "support": {
-                "issues": "https://github.com/KnpLabs/KnpSnappyBundle/issues",
-                "source": "https://github.com/KnpLabs/KnpSnappyBundle/tree/v1.9.0"
-            },
-            "time": "2022-01-05T15:50:51+00:00"
-        },
-        {
-            "name": "laminas/laminas-code",
-            "version": "4.5.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/laminas/laminas-code.git",
-                "reference": "6fd96d4d913571a2cd056a27b123fa28cb90ac4e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/laminas/laminas-code/zipball/6fd96d4d913571a2cd056a27b123fa28cb90ac4e",
-                "reference": "6fd96d4d913571a2cd056a27b123fa28cb90ac4e",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.4, <8.2"
-            },
-            "require-dev": {
-                "doctrine/annotations": "^1.13.2",
-                "ext-phar": "*",
-                "laminas/laminas-coding-standard": "^2.3.0",
-                "laminas/laminas-stdlib": "^3.6.1",
-                "phpunit/phpunit": "^9.5.10",
-                "psalm/plugin-phpunit": "^0.16.1",
-                "vimeo/psalm": "^4.13.1"
-            },
-            "suggest": {
-                "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features",
-                "laminas/laminas-stdlib": "Laminas\\Stdlib component"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "polyfill/ReflectionEnumPolyfill.php"
-                ],
-                "psr-4": {
-                    "Laminas\\Code\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "description": "Extensions to the PHP Reflection API, static code scanning, and code generation",
-            "homepage": "https://laminas.dev",
-            "keywords": [
-                "code",
-                "laminas",
-                "laminasframework"
-            ],
-            "support": {
-                "chat": "https://laminas.dev/chat",
-                "docs": "https://docs.laminas.dev/laminas-code/",
-                "forum": "https://discourse.laminas.dev",
-                "issues": "https://github.com/laminas/laminas-code/issues",
-                "rss": "https://github.com/laminas/laminas-code/releases.atom",
-                "source": "https://github.com/laminas/laminas-code"
-            },
-            "funding": [
-                {
-                    "url": "https://funding.communitybridge.org/projects/laminas-project",
-                    "type": "community_bridge"
-                }
-            ],
-            "time": "2021-12-19T18:06:55+00:00"
-        },
-        {
-            "name": "lcobucci/clock",
-            "version": "2.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/lcobucci/clock.git",
-                "reference": "903513d28e85376a33385ebc601afd2ee69e5653"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/lcobucci/clock/zipball/903513d28e85376a33385ebc601afd2ee69e5653",
-                "reference": "903513d28e85376a33385ebc601afd2ee69e5653",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^8.0"
-            },
-            "require-dev": {
-                "infection/infection": "^0.25",
-                "lcobucci/coding-standard": "^8.0",
-                "phpstan/extension-installer": "^1.1",
-                "phpstan/phpstan": "^0.12",
-                "phpstan/phpstan-deprecation-rules": "^0.12",
-                "phpstan/phpstan-phpunit": "^0.12",
-                "phpstan/phpstan-strict-rules": "^0.12",
-                "phpunit/phpunit": "^9.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Lcobucci\\Clock\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Luís Cobucci",
-                    "email": "lcobucci@gmail.com"
-                }
-            ],
-            "description": "Yet another clock abstraction",
-            "support": {
-                "issues": "https://github.com/lcobucci/clock/issues",
-                "source": "https://github.com/lcobucci/clock/tree/2.1.0"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/lcobucci",
-                    "type": "github"
-                },
-                {
-                    "url": "https://www.patreon.com/lcobucci",
-                    "type": "patreon"
-                }
-            ],
-            "time": "2021-10-31T21:32:07+00:00"
-        },
-        {
-            "name": "lcobucci/jwt",
-            "version": "4.1.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/lcobucci/jwt.git",
-                "reference": "fe2d89f2eaa7087af4aa166c6f480ef04e000582"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/lcobucci/jwt/zipball/fe2d89f2eaa7087af4aa166c6f480ef04e000582",
-                "reference": "fe2d89f2eaa7087af4aa166c6f480ef04e000582",
-                "shasum": ""
-            },
-            "require": {
-                "ext-hash": "*",
-                "ext-json": "*",
-                "ext-mbstring": "*",
-                "ext-openssl": "*",
-                "ext-sodium": "*",
-                "lcobucci/clock": "^2.0",
-                "php": "^7.4 || ^8.0"
-            },
-            "require-dev": {
-                "infection/infection": "^0.21",
-                "lcobucci/coding-standard": "^6.0",
-                "mikey179/vfsstream": "^1.6.7",
-                "phpbench/phpbench": "^1.0",
-                "phpstan/extension-installer": "^1.0",
-                "phpstan/phpstan": "^0.12",
-                "phpstan/phpstan-deprecation-rules": "^0.12",
-                "phpstan/phpstan-phpunit": "^0.12",
-                "phpstan/phpstan-strict-rules": "^0.12",
-                "phpunit/php-invoker": "^3.1",
-                "phpunit/phpunit": "^9.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Lcobucci\\JWT\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Luís Cobucci",
-                    "email": "lcobucci@gmail.com",
-                    "role": "Developer"
-                }
-            ],
-            "description": "A simple library to work with JSON Web Token and JSON Web Signature",
-            "keywords": [
-                "JWS",
-                "jwt"
-            ],
-            "support": {
-                "issues": "https://github.com/lcobucci/jwt/issues",
-                "source": "https://github.com/lcobucci/jwt/tree/4.1.5"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/lcobucci",
-                    "type": "github"
-                },
-                {
-                    "url": "https://www.patreon.com/lcobucci",
-                    "type": "patreon"
-                }
-            ],
-            "time": "2021-09-28T19:34:56+00:00"
-        },
-        {
-            "name": "lexik/jwt-authentication-bundle",
-            "version": "v2.14.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/lexik/LexikJWTAuthenticationBundle.git",
-                "reference": "b08d174fc979e12f609ad075e49b46a9e30ecfac"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/lexik/LexikJWTAuthenticationBundle/zipball/b08d174fc979e12f609ad075e49b46a9e30ecfac",
-                "reference": "b08d174fc979e12f609ad075e49b46a9e30ecfac",
-                "shasum": ""
-            },
-            "require": {
-                "ext-openssl": "*",
-                "lcobucci/jwt": "^3.4|^4.0",
-                "namshi/jose": "^7.2",
-                "php": ">=7.1",
-                "symfony/config": "^4.4|^5.3|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.3|^6.0",
-                "symfony/deprecation-contracts": "^2.4|^3.0",
-                "symfony/event-dispatcher": "^4.4|^5.3|^6.0",
-                "symfony/http-foundation": "^4.4|^5.3|^6.0",
-                "symfony/http-kernel": "^4.4|^5.3|^6.0",
-                "symfony/property-access": "^4.4|^5.3|^6.0",
-                "symfony/security-bundle": "^4.4|^5.3|^6.0",
-                "symfony/security-core": "^4.4|^5.3|^6.0",
-                "symfony/security-http": "^4.4|^5.3|^6.0"
-            },
-            "conflict": {
-                "symfony/console": "<4.4"
-            },
-            "require-dev": {
-                "symfony/browser-kit": "^4.4|^5.3|^6.0",
-                "symfony/console": "^4.4|^5.3|^6.0",
-                "symfony/dom-crawler": "^4.4|^5.3|^6.0",
-                "symfony/filesystem": "^4.4|^5.3|^6.0",
-                "symfony/framework-bundle": "^4.4|^5.3|^6.0",
-                "symfony/phpunit-bridge": "^4.4|^5.3|^6.0",
-                "symfony/security-guard": "^4.4|^5.3",
-                "symfony/var-dumper": "^4.4|^5.3|^6.0",
-                "symfony/yaml": "^4.4|^5.3|^6.0"
-            },
-            "suggest": {
-                "gesdinet/jwt-refresh-token-bundle": "Implements a refresh token system over Json Web Tokens in Symfony",
-                "spomky-labs/lexik-jose-bridge": "Provides a JWT Token encoder with encryption support"
-            },
-            "type": "symfony-bundle",
-            "autoload": {
-                "psr-4": {
-                    "Lexik\\Bundle\\JWTAuthenticationBundle\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jeremy Barthe",
-                    "email": "j.barthe@lexik.fr",
-                    "homepage": "https://github.com/jeremyb"
-                },
-                {
-                    "name": "Nicolas Cabot",
-                    "email": "n.cabot@lexik.fr",
-                    "homepage": "https://github.com/slashfan"
-                },
-                {
-                    "name": "Cedric Girard",
-                    "email": "c.girard@lexik.fr",
-                    "homepage": "https://github.com/cedric-g"
-                },
-                {
-                    "name": "Dev Lexik",
-                    "email": "dev@lexik.fr",
-                    "homepage": "https://github.com/lexik"
-                },
-                {
-                    "name": "Robin Chalas",
-                    "email": "robin.chalas@gmail.com",
-                    "homepage": "https://github.com/chalasr"
-                },
-                {
-                    "name": "Lexik Community",
-                    "homepage": "https://github.com/lexik/LexikJWTAuthenticationBundle/graphs/contributors"
-                }
-            ],
-            "description": "This bundle provides JWT authentication for your Symfony REST API",
-            "homepage": "https://github.com/lexik/LexikJWTAuthenticationBundle",
-            "keywords": [
-                "Authentication",
-                "JWS",
-                "api",
-                "bundle",
-                "jwt",
-                "rest",
-                "symfony"
-            ],
-            "support": {
-                "issues": "https://github.com/lexik/LexikJWTAuthenticationBundle/issues",
-                "source": "https://github.com/lexik/LexikJWTAuthenticationBundle/tree/v2.14.4"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/chalasr",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/lexik/jwt-authentication-bundle",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-04T23:33:23+00:00"
-        },
-        {
-            "name": "monolog/monolog",
-            "version": "2.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/monolog.git",
-                "reference": "d7fd7450628561ba697b7097d86db72662f54aef"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/d7fd7450628561ba697b7097d86db72662f54aef",
-                "reference": "d7fd7450628561ba697b7097d86db72662f54aef",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2",
-                "psr/log": "^1.0.1 || ^2.0 || ^3.0"
-            },
-            "provide": {
-                "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0"
-            },
-            "require-dev": {
-                "aws/aws-sdk-php": "^2.4.9 || ^3.0",
-                "doctrine/couchdb": "~1.0@dev",
-                "elasticsearch/elasticsearch": "^7",
-                "graylog2/gelf-php": "^1.4.2",
-                "mongodb/mongodb": "^1.8",
-                "php-amqplib/php-amqplib": "~2.4 || ^3",
-                "php-console/php-console": "^3.1.3",
-                "phpspec/prophecy": "^1.6.1",
-                "phpstan/phpstan": "^0.12.91",
-                "phpunit/phpunit": "^8.5",
-                "predis/predis": "^1.1",
-                "rollbar/rollbar": "^1.3 || ^2 || ^3",
-                "ruflin/elastica": ">=0.90@dev",
-                "swiftmailer/swiftmailer": "^5.3|^6.0"
-            },
-            "suggest": {
-                "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
-                "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
-                "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
-                "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
-                "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
-                "ext-mbstring": "Allow to work properly with unicode symbols",
-                "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
-                "ext-openssl": "Required to send log messages using SSL",
-                "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
-                "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
-                "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
-                "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
-                "php-console/php-console": "Allow sending log messages to Google Chrome",
-                "rollbar/rollbar": "Allow sending log messages to Rollbar",
-                "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "2.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Monolog\\": "src/Monolog"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "https://seld.be"
-                }
-            ],
-            "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
-            "homepage": "https://github.com/Seldaek/monolog",
-            "keywords": [
-                "log",
-                "logging",
-                "psr-3"
-            ],
-            "support": {
-                "issues": "https://github.com/Seldaek/monolog/issues",
-                "source": "https://github.com/Seldaek/monolog/tree/2.4.0"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/Seldaek",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-14T12:44:37+00:00"
-        },
-        {
-            "name": "myclabs/php-enum",
-            "version": "1.8.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/myclabs/php-enum.git",
-                "reference": "b942d263c641ddb5190929ff840c68f78713e937"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/php-enum/zipball/b942d263c641ddb5190929ff840c68f78713e937",
-                "reference": "b942d263c641ddb5190929ff840c68f78713e937",
-                "shasum": ""
-            },
-            "require": {
-                "ext-json": "*",
-                "php": "^7.3 || ^8.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.5",
-                "squizlabs/php_codesniffer": "1.*",
-                "vimeo/psalm": "^4.6.2"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "MyCLabs\\Enum\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP Enum contributors",
-                    "homepage": "https://github.com/myclabs/php-enum/graphs/contributors"
-                }
-            ],
-            "description": "PHP Enum implementation",
-            "homepage": "http://github.com/myclabs/php-enum",
-            "keywords": [
-                "enum"
-            ],
-            "support": {
-                "issues": "https://github.com/myclabs/php-enum/issues",
-                "source": "https://github.com/myclabs/php-enum/tree/1.8.3"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/mnapoli",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-07-05T08:18:36+00:00"
-        },
-        {
-            "name": "namshi/jose",
-            "version": "7.2.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/namshi/jose.git",
-                "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/namshi/jose/zipball/89a24d7eb3040e285dd5925fcad992378b82bcff",
-                "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff",
-                "shasum": ""
-            },
-            "require": {
-                "ext-date": "*",
-                "ext-hash": "*",
-                "ext-json": "*",
-                "ext-pcre": "*",
-                "ext-spl": "*",
-                "php": ">=5.5",
-                "symfony/polyfill-php56": "^1.0"
-            },
-            "require-dev": {
-                "phpseclib/phpseclib": "^2.0",
-                "phpunit/phpunit": "^4.5|^5.0",
-                "satooshi/php-coveralls": "^1.0"
-            },
-            "suggest": {
-                "ext-openssl": "Allows to use OpenSSL as crypto engine.",
-                "phpseclib/phpseclib": "Allows to use Phpseclib as crypto engine, use version ^2.0."
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Namshi\\JOSE\\": "src/Namshi/JOSE/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Alessandro Nadalin",
-                    "email": "alessandro.nadalin@gmail.com"
-                },
-                {
-                    "name": "Alessandro Cinelli (cirpo)",
-                    "email": "alessandro.cinelli@gmail.com"
-                }
-            ],
-            "description": "JSON Object Signing and Encryption library for PHP.",
-            "keywords": [
-                "JSON Web Signature",
-                "JSON Web Token",
-                "JWS",
-                "json",
-                "jwt",
-                "token"
-            ],
-            "support": {
-                "issues": "https://github.com/namshi/jose/issues",
-                "source": "https://github.com/namshi/jose/tree/master"
-            },
-            "time": "2016-12-05T07:27:31+00:00"
-        },
-        {
-            "name": "nelmio/cors-bundle",
-            "version": "2.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/nelmio/NelmioCorsBundle.git",
-                "reference": "0ee5ee30b0ee08ea122d431ae6e0ddeb87f035c0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/0ee5ee30b0ee08ea122d431ae6e0ddeb87f035c0",
-                "reference": "0ee5ee30b0ee08ea122d431ae6e0ddeb87f035c0",
-                "shasum": ""
-            },
-            "require": {
-                "symfony/framework-bundle": "^4.3 || ^5.0 || ^6.0"
-            },
-            "require-dev": {
-                "mockery/mockery": "^1.2",
-                "symfony/phpunit-bridge": "^4.3 || ^5.0 || ^6.0"
-            },
-            "type": "symfony-bundle",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Nelmio\\CorsBundle\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nelmio",
-                    "homepage": "http://nelm.io"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://github.com/nelmio/NelmioCorsBundle/contributors"
-                }
-            ],
-            "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Symfony application",
-            "keywords": [
-                "api",
-                "cors",
-                "crossdomain"
-            ],
-            "support": {
-                "issues": "https://github.com/nelmio/NelmioCorsBundle/issues",
-                "source": "https://github.com/nelmio/NelmioCorsBundle/tree/2.2.0"
-            },
-            "time": "2021-12-01T09:34:27+00:00"
-        },
-        {
-            "name": "odolbeau/phone-number-bundle",
-            "version": "v3.6.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/odolbeau/phone-number-bundle.git",
-                "reference": "d6e588d95e52a8b9bf4f595fc59cceb18c213bb3"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/odolbeau/phone-number-bundle/zipball/d6e588d95e52a8b9bf4f595fc59cceb18c213bb3",
-                "reference": "d6e588d95e52a8b9bf4f595fc59cceb18c213bb3",
-                "shasum": ""
-            },
-            "require": {
-                "giggsey/libphonenumber-for-php": "^8.0",
-                "php": ">=7.4",
-                "symfony/framework-bundle": "^4.4|^5.3|^6.0",
-                "symfony/intl": "^4.4|^5.3|^6.0"
-            },
-            "conflict": {
-                "symfony/serializer": "6.0.0"
-            },
-            "replace": {
-                "misd/phone-number-bundle": "self.version"
-            },
-            "require-dev": {
-                "doctrine/doctrine-bundle": "^1.12|^2.0",
-                "phpspec/prophecy-phpunit": "^2.0",
-                "phpunit/phpunit": "^9.5",
-                "symfony/form": "^4.4|^5.3|^6.0",
-                "symfony/property-access": "^4.4|^5.3|^6.0",
-                "symfony/serializer": "^4.4|^5.3|^6.0.1",
-                "symfony/twig-bundle": "^4.4|^5.3|^6.0",
-                "symfony/validator": "^4.4|^5.3|^6.0"
-            },
-            "suggest": {
-                "doctrine/doctrine-bundle": "Add a DBAL mapping type",
-                "symfony/form": "Add a data transformer",
-                "symfony/property-access": "Choose a path in the validation constraint",
-                "symfony/serializer": "Serialize/deserialize phone numbers using Symfony library",
-                "symfony/twig-bundle": "Format phone numbers in Twig templates",
-                "symfony/validator": "Add a validation constraint"
-            },
-            "type": "symfony-bundle",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.6.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Misd\\PhoneNumberBundle\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Integrates libphonenumber into your Symfony application",
-            "homepage": "https://github.com/odolbeau/phone-number-bundle",
-            "keywords": [
-                "bundle",
-                "libphonenumber",
-                "phone-number",
-                "phonenumber",
-                "telephone number"
-            ],
-            "support": {
-                "issues": "https://github.com/odolbeau/phone-number-bundle/issues",
-                "source": "https://github.com/odolbeau/phone-number-bundle/tree/v3.6.2"
-            },
-            "time": "2022-02-24T00:08:40+00:00"
-        },
-        {
-            "name": "phpdocumentor/reflection-common",
-            "version": "2.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
-                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.2 || ^8.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-2.x": "2.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jaap van Otterdijk",
-                    "email": "opensource@ijaap.nl"
-                }
-            ],
-            "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
-            "homepage": "http://www.phpdoc.org",
-            "keywords": [
-                "FQSEN",
-                "phpDocumentor",
-                "phpdoc",
-                "reflection",
-                "static analysis"
-            ],
-            "support": {
-                "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
-                "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
-            },
-            "time": "2020-06-27T09:03:43+00:00"
-        },
-        {
-            "name": "phpdocumentor/reflection-docblock",
-            "version": "5.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
-                "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
-                "shasum": ""
-            },
-            "require": {
-                "ext-filter": "*",
-                "php": "^7.2 || ^8.0",
-                "phpdocumentor/reflection-common": "^2.2",
-                "phpdocumentor/type-resolver": "^1.3",
-                "webmozart/assert": "^1.9.1"
-            },
-            "require-dev": {
-                "mockery/mockery": "~1.3.2",
-                "psalm/phar": "^4.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "5.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mike van Riel",
-                    "email": "me@mikevanriel.com"
-                },
-                {
-                    "name": "Jaap van Otterdijk",
-                    "email": "account@ijaap.nl"
-                }
-            ],
-            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "support": {
-                "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
-                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
-            },
-            "time": "2021-10-19T17:43:47+00:00"
-        },
-        {
-            "name": "phpdocumentor/type-resolver",
-            "version": "1.6.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706",
-                "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.2 || ^8.0",
-                "phpdocumentor/reflection-common": "^2.0"
-            },
-            "require-dev": {
-                "ext-tokenizer": "*",
-                "psalm/phar": "^4.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-1.x": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mike van Riel",
-                    "email": "me@mikevanriel.com"
-                }
-            ],
-            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
-            "support": {
-                "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
-                "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0"
-            },
-            "time": "2022-01-04T19:58:01+00:00"
-        },
-        {
-            "name": "psr/cache",
-            "version": "2.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/cache.git",
-                "reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/cache/zipball/213f9dbc5b9bfbc4f8db86d2838dc968752ce13b",
-                "reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.0.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Cache\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "https://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for caching libraries",
-            "keywords": [
-                "cache",
-                "psr",
-                "psr-6"
-            ],
-            "support": {
-                "source": "https://github.com/php-fig/cache/tree/2.0.0"
-            },
-            "time": "2021-02-03T23:23:37+00:00"
-        },
-        {
-            "name": "psr/container",
-            "version": "1.1.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/container.git",
-                "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
-                "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.4.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Container\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "https://www.php-fig.org/"
-                }
-            ],
-            "description": "Common Container Interface (PHP FIG PSR-11)",
-            "homepage": "https://github.com/php-fig/container",
-            "keywords": [
-                "PSR-11",
-                "container",
-                "container-interface",
-                "container-interop",
-                "psr"
-            ],
-            "support": {
-                "issues": "https://github.com/php-fig/container/issues",
-                "source": "https://github.com/php-fig/container/tree/1.1.2"
-            },
-            "time": "2021-11-05T16:50:12+00:00"
-        },
-        {
-            "name": "psr/event-dispatcher",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/event-dispatcher.git",
-                "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
-                "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\EventDispatcher\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
-            ],
-            "description": "Standard interfaces for event handling.",
-            "keywords": [
-                "events",
-                "psr",
-                "psr-14"
-            ],
-            "support": {
-                "issues": "https://github.com/php-fig/event-dispatcher/issues",
-                "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
-            },
-            "time": "2019-01-08T18:20:26+00:00"
-        },
-        {
-            "name": "psr/link",
-            "version": "1.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/link.git",
-                "reference": "846c25f58a1f02b93a00f2404e3626b6bf9b7807"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/link/zipball/846c25f58a1f02b93a00f2404e3626b6bf9b7807",
-                "reference": "846c25f58a1f02b93a00f2404e3626b6bf9b7807",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.0.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Link\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interfaces for HTTP links",
-            "homepage": "https://github.com/php-fig/link",
-            "keywords": [
-                "http",
-                "http-link",
-                "link",
-                "psr",
-                "psr-13",
-                "rest"
-            ],
-            "support": {
-                "source": "https://github.com/php-fig/link/tree/1.1.1"
-            },
-            "time": "2021-03-11T22:59:13+00:00"
-        },
-        {
-            "name": "psr/log",
-            "version": "1.1.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
-                "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Log\\": "Psr/Log/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "https://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for logging libraries",
-            "homepage": "https://github.com/php-fig/log",
-            "keywords": [
-                "log",
-                "psr",
-                "psr-3"
-            ],
-            "support": {
-                "source": "https://github.com/php-fig/log/tree/1.1.4"
-            },
-            "time": "2021-05-03T11:20:27+00:00"
-        },
-        {
-            "name": "ramsey/collection",
-            "version": "1.2.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/ramsey/collection.git",
-                "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a",
-                "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3 || ^8",
-                "symfony/polyfill-php81": "^1.23"
-            },
-            "require-dev": {
-                "captainhook/captainhook": "^5.3",
-                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
-                "ergebnis/composer-normalize": "^2.6",
-                "fakerphp/faker": "^1.5",
-                "hamcrest/hamcrest-php": "^2",
-                "jangregor/phpstan-prophecy": "^0.8",
-                "mockery/mockery": "^1.3",
-                "phpspec/prophecy-phpunit": "^2.0",
-                "phpstan/extension-installer": "^1",
-                "phpstan/phpstan": "^0.12.32",
-                "phpstan/phpstan-mockery": "^0.12.5",
-                "phpstan/phpstan-phpunit": "^0.12.11",
-                "phpunit/phpunit": "^8.5 || ^9",
-                "psy/psysh": "^0.10.4",
-                "slevomat/coding-standard": "^6.3",
-                "squizlabs/php_codesniffer": "^3.5",
-                "vimeo/psalm": "^4.4"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Ramsey\\Collection\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Ben Ramsey",
-                    "email": "ben@benramsey.com",
-                    "homepage": "https://benramsey.com"
-                }
-            ],
-            "description": "A PHP library for representing and manipulating collections.",
-            "keywords": [
-                "array",
-                "collection",
-                "hash",
-                "map",
-                "queue",
-                "set"
-            ],
-            "support": {
-                "issues": "https://github.com/ramsey/collection/issues",
-                "source": "https://github.com/ramsey/collection/tree/1.2.2"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/ramsey",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/ramsey/collection",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-10-10T03:01:02+00:00"
-        },
-        {
-            "name": "ramsey/uuid",
-            "version": "4.2.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/ramsey/uuid.git",
-                "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df",
-                "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df",
-                "shasum": ""
-            },
-            "require": {
-                "brick/math": "^0.8 || ^0.9",
-                "ext-json": "*",
-                "php": "^7.2 || ^8.0",
-                "ramsey/collection": "^1.0",
-                "symfony/polyfill-ctype": "^1.8",
-                "symfony/polyfill-php80": "^1.14"
-            },
-            "replace": {
-                "rhumsaa/uuid": "self.version"
-            },
-            "require-dev": {
-                "captainhook/captainhook": "^5.10",
-                "captainhook/plugin-composer": "^5.3",
-                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
-                "doctrine/annotations": "^1.8",
-                "ergebnis/composer-normalize": "^2.15",
-                "mockery/mockery": "^1.3",
-                "moontoast/math": "^1.1",
-                "paragonie/random-lib": "^2",
-                "php-mock/php-mock": "^2.2",
-                "php-mock/php-mock-mockery": "^1.3",
-                "php-parallel-lint/php-parallel-lint": "^1.1",
-                "phpbench/phpbench": "^1.0",
-                "phpstan/extension-installer": "^1.0",
-                "phpstan/phpstan": "^0.12",
-                "phpstan/phpstan-mockery": "^0.12",
-                "phpstan/phpstan-phpunit": "^0.12",
-                "phpunit/phpunit": "^8.5 || ^9",
-                "slevomat/coding-standard": "^7.0",
-                "squizlabs/php_codesniffer": "^3.5",
-                "vimeo/psalm": "^4.9"
-            },
-            "suggest": {
-                "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
-                "ext-ctype": "Enables faster processing of character classification using ctype functions.",
-                "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
-                "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
-                "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
-                "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "4.x-dev"
-                },
-                "captainhook": {
-                    "force-install": true
-                }
-            },
-            "autoload": {
-                "files": [
-                    "src/functions.php"
-                ],
-                "psr-4": {
-                    "Ramsey\\Uuid\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
-            "keywords": [
-                "guid",
-                "identifier",
-                "uuid"
-            ],
-            "support": {
-                "issues": "https://github.com/ramsey/uuid/issues",
-                "source": "https://github.com/ramsey/uuid/tree/4.2.3"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/ramsey",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-09-25T23:10:38+00:00"
-        },
-        {
-            "name": "ruflin/elastica",
-            "version": "3.2.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/ruflin/Elastica.git",
-                "reference": "62ff0a20749db4228bcd9a8124480e8f968870b5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/ruflin/Elastica/zipball/62ff0a20749db4228bcd9a8124480e8f968870b5",
-                "reference": "62ff0a20749db4228bcd9a8124480e8f968870b5",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.4.0",
-                "psr/log": "~1.0"
-            },
-            "require-dev": {
-                "aws/aws-sdk-php": "~3.0",
-                "guzzlehttp/guzzle": "~6.0"
-            },
-            "suggest": {
-                "aws/aws-sdk-php": "Allow using IAM authentication with Amazon ElasticSearch Service",
-                "egeloen/http-adapter": "Allow using httpadapter transport",
-                "guzzlehttp/guzzle": "Allow using guzzle 6 as the http transport (Requires php 5.5)",
-                "monolog/monolog": "Logging request"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.2.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Elastica\\": "lib/Elastica/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Ruflin",
-                    "homepage": "http://ruflin.com/"
-                }
-            ],
-            "description": "Elasticsearch Client",
-            "homepage": "http://elastica.io/",
-            "keywords": [
-                "client",
-                "search"
-            ],
-            "support": {
-                "issues": "https://github.com/ruflin/Elastica/issues",
-                "source": "https://github.com/ruflin/Elastica/tree/3.2.4"
-            },
-            "time": "2018-12-28T12:57:02+00:00"
-        },
-        {
-            "name": "symfony/amqp-messenger",
-            "version": "v5.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/amqp-messenger.git",
-                "reference": "4175a0a98507e7ec575dca9b36e6c0a5a072d3fd"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/amqp-messenger/zipball/4175a0a98507e7ec575dca9b36e6c0a5a072d3fd",
-                "reference": "4175a0a98507e7ec575dca9b36e6c0a5a072d3fd",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/messenger": "^5.3|^6.0"
-            },
-            "require-dev": {
-                "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
-                "symfony/process": "^4.4|^5.0|^6.0",
-                "symfony/property-access": "^4.4|^5.0|^6.0",
-                "symfony/serializer": "^4.4|^5.0|^6.0"
-            },
-            "type": "symfony-messenger-bridge",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Messenger\\Bridge\\Amqp\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony AMQP extension Messenger Bridge",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/amqp-messenger/tree/v5.4.5"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-09T15:49:12+00:00"
-        },
-        {
-            "name": "symfony/asset",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/asset.git",
-                "reference": "156e45cba14f9be3fe8b987e86f482a76aa078f3"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/asset/zipball/156e45cba14f9be3fe8b987e86f482a76aa078f3",
-                "reference": "156e45cba14f9be3fe8b987e86f482a76aa078f3",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "conflict": {
-                "symfony/http-foundation": "<5.3"
-            },
-            "require-dev": {
-                "symfony/http-client": "^4.4|^5.0|^6.0",
-                "symfony/http-foundation": "^5.3|^6.0",
-                "symfony/http-kernel": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "symfony/http-foundation": ""
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Asset\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/asset/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-02T09:53:40+00:00"
-        },
-        {
-            "name": "symfony/cache",
-            "version": "v5.4.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/cache.git",
-                "reference": "c0718d0e01ac14251a45cc9c8b93716ec41ae64b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/cache/zipball/c0718d0e01ac14251a45cc9c8b93716ec41ae64b",
-                "reference": "c0718d0e01ac14251a45cc9c8b93716ec41ae64b",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "psr/cache": "^1.0|^2.0",
-                "psr/log": "^1.1|^2|^3",
-                "symfony/cache-contracts": "^1.1.7|^2",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-php73": "^1.9",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/service-contracts": "^1.1|^2|^3",
-                "symfony/var-exporter": "^4.4|^5.0|^6.0"
-            },
-            "conflict": {
-                "doctrine/dbal": "<2.13.1",
-                "symfony/dependency-injection": "<4.4",
-                "symfony/http-kernel": "<4.4",
-                "symfony/var-dumper": "<4.4"
-            },
-            "provide": {
-                "psr/cache-implementation": "1.0|2.0",
-                "psr/simple-cache-implementation": "1.0|2.0",
-                "symfony/cache-implementation": "1.0|2.0"
-            },
-            "require-dev": {
-                "cache/integration-tests": "dev-master",
-                "doctrine/cache": "^1.6|^2.0",
-                "doctrine/dbal": "^2.13.1|^3.0",
-                "predis/predis": "^1.1",
-                "psr/simple-cache": "^1.0|^2.0",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/filesystem": "^4.4|^5.0|^6.0",
-                "symfony/http-kernel": "^4.4|^5.0|^6.0",
-                "symfony/messenger": "^4.4|^5.0|^6.0",
-                "symfony/var-dumper": "^4.4|^5.0|^6.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Cache\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides an extended PSR-6, PSR-16 (and tags) implementation",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "caching",
-                "psr6"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/cache/tree/v5.4.6"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-02T12:56:28+00:00"
-        },
-        {
-            "name": "symfony/cache-contracts",
-            "version": "v2.5.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/cache-contracts.git",
-                "reference": "ac2e168102a2e06a2624f0379bde94cd5854ced2"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/ac2e168102a2e06a2624f0379bde94cd5854ced2",
-                "reference": "ac2e168102a2e06a2624f0379bde94cd5854ced2",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "psr/cache": "^1.0|^2.0|^3.0"
-            },
-            "suggest": {
-                "symfony/cache-implementation": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "2.5-dev"
-                },
-                "thanks": {
-                    "name": "symfony/contracts",
-                    "url": "https://github.com/symfony/contracts"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Contracts\\Cache\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Generic abstractions related to caching",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "abstractions",
-                "contracts",
-                "decoupling",
-                "interfaces",
-                "interoperability",
-                "standards"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/cache-contracts/tree/v2.5.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-08-17T14:20:01+00:00"
-        },
-        {
-            "name": "symfony/config",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/config.git",
-                "reference": "d65e1bd990c740e31feb07d2b0927b8d4df9956f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/d65e1bd990c740e31feb07d2b0927b8d4df9956f",
-                "reference": "d65e1bd990c740e31feb07d2b0927b8d4df9956f",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/filesystem": "^4.4|^5.0|^6.0",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/polyfill-php81": "^1.22"
-            },
-            "conflict": {
-                "symfony/finder": "<4.4"
-            },
-            "require-dev": {
-                "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
-                "symfony/finder": "^4.4|^5.0|^6.0",
-                "symfony/messenger": "^4.4|^5.0|^6.0",
-                "symfony/service-contracts": "^1.1|^2|^3",
-                "symfony/yaml": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "symfony/yaml": "To use the yaml reference dumper"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Config\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/config/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-03T09:50:52+00:00"
-        },
-        {
-            "name": "symfony/console",
-            "version": "v5.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/console.git",
-                "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/d8111acc99876953f52fe16d4c50eb60940d49ad",
-                "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php73": "^1.9",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/service-contracts": "^1.1|^2|^3",
-                "symfony/string": "^5.1|^6.0"
-            },
-            "conflict": {
-                "psr/log": ">=3",
-                "symfony/dependency-injection": "<4.4",
-                "symfony/dotenv": "<5.1",
-                "symfony/event-dispatcher": "<4.4",
-                "symfony/lock": "<4.4",
-                "symfony/process": "<4.4"
-            },
-            "provide": {
-                "psr/log-implementation": "1.0|2.0"
-            },
-            "require-dev": {
-                "psr/log": "^1|^2",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
-                "symfony/lock": "^4.4|^5.0|^6.0",
-                "symfony/process": "^4.4|^5.0|^6.0",
-                "symfony/var-dumper": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "psr/log": "For using the console logger",
-                "symfony/event-dispatcher": "",
-                "symfony/lock": "",
-                "symfony/process": ""
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Console\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Eases the creation of beautiful and testable command line interfaces",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "cli",
-                "command line",
-                "console",
-                "terminal"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/console/tree/v5.4.5"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-24T12:45:35+00:00"
-        },
-        {
-            "name": "symfony/dependency-injection",
-            "version": "v5.4.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/dependency-injection.git",
-                "reference": "0828fa3e6e436243dbb3dc85abe6b698b3876b89"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/0828fa3e6e436243dbb3dc85abe6b698b3876b89",
-                "reference": "0828fa3e6e436243dbb3dc85abe6b698b3876b89",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "psr/container": "^1.1.1",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/polyfill-php81": "^1.22",
-                "symfony/service-contracts": "^1.1.6|^2"
-            },
-            "conflict": {
-                "ext-psr": "<1.1|>=2",
-                "symfony/config": "<5.3",
-                "symfony/finder": "<4.4",
-                "symfony/proxy-manager-bridge": "<4.4",
-                "symfony/yaml": "<4.4.26"
-            },
-            "provide": {
-                "psr/container-implementation": "1.0",
-                "symfony/service-implementation": "1.0|2.0"
-            },
-            "require-dev": {
-                "symfony/config": "^5.3|^6.0",
-                "symfony/expression-language": "^4.4|^5.0|^6.0",
-                "symfony/yaml": "^4.4.26|^5.0|^6.0"
-            },
-            "suggest": {
-                "symfony/config": "",
-                "symfony/expression-language": "For using expressions in service container configuration",
-                "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required",
-                "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
-                "symfony/yaml": ""
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\DependencyInjection\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Allows you to standardize and centralize the way objects are constructed in your application",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/dependency-injection/tree/v5.4.6"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-02T12:42:23+00:00"
-        },
-        {
-            "name": "symfony/deprecation-contracts",
-            "version": "v3.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/deprecation-contracts.git",
-                "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/c726b64c1ccfe2896cb7df2e1331c357ad1c8ced",
-                "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.0.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "3.0-dev"
-                },
-                "thanks": {
-                    "name": "symfony/contracts",
-                    "url": "https://github.com/symfony/contracts"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "function.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "A generic function and convention to trigger deprecation notices",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-11-01T23:48:49+00:00"
-        },
-        {
-            "name": "symfony/doctrine-bridge",
-            "version": "v5.4.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/doctrine-bridge.git",
-                "reference": "ca55e1f888b7e5b358736bb6c8e33482939993cc"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/ca55e1f888b7e5b358736bb6c8e33482939993cc",
-                "reference": "ca55e1f888b7e5b358736bb6c8e33482939993cc",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/event-manager": "~1.0",
-                "doctrine/persistence": "^2",
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/service-contracts": "^1.1|^2|^3"
-            },
-            "conflict": {
-                "doctrine/dbal": "<2.13.1",
-                "doctrine/lexer": "<1.1",
-                "doctrine/orm": "<2.7.4",
-                "phpunit/phpunit": "<5.4.3",
-                "symfony/cache": "<5.4",
-                "symfony/dependency-injection": "<4.4",
-                "symfony/form": "<5.1",
-                "symfony/http-kernel": "<5",
-                "symfony/messenger": "<4.4",
-                "symfony/property-info": "<5",
-                "symfony/proxy-manager-bridge": "<4.4.19",
-                "symfony/security-bundle": "<5",
-                "symfony/security-core": "<5.3",
-                "symfony/validator": "<5.2"
-            },
-            "require-dev": {
-                "doctrine/annotations": "^1.10.4",
-                "doctrine/collections": "~1.0",
-                "doctrine/data-fixtures": "^1.1",
-                "doctrine/dbal": "^2.13.1|^3.0",
-                "doctrine/orm": "^2.7.4",
-                "psr/log": "^1|^2|^3",
-                "symfony/cache": "^5.4|^6.0",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/doctrine-messenger": "^5.1|^6.0",
-                "symfony/expression-language": "^4.4|^5.0|^6.0",
-                "symfony/form": "^5.1.3|^6.0",
-                "symfony/http-kernel": "^5.0|^6.0",
-                "symfony/messenger": "^4.4|^5.0|^6.0",
-                "symfony/property-access": "^4.4|^5.0|^6.0",
-                "symfony/property-info": "^5.0|^6.0",
-                "symfony/proxy-manager-bridge": "^4.4|^5.0|^6.0",
-                "symfony/security-core": "^5.3|^6.0",
-                "symfony/stopwatch": "^4.4|^5.0|^6.0",
-                "symfony/translation": "^4.4|^5.0|^6.0",
-                "symfony/uid": "^5.1|^6.0",
-                "symfony/validator": "^5.2|^6.0",
-                "symfony/var-dumper": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "doctrine/data-fixtures": "",
-                "doctrine/dbal": "",
-                "doctrine/orm": "",
-                "symfony/form": "",
-                "symfony/property-info": "",
-                "symfony/validator": ""
-            },
-            "type": "symfony-bridge",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Bridge\\Doctrine\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides integration for Doctrine with various Symfony components",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/doctrine-bridge/tree/v5.4.6"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-02T13:18:14+00:00"
-        },
-        {
-            "name": "symfony/doctrine-messenger",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/doctrine-messenger.git",
-                "reference": "335428f424807178c57b89fd2bed714fba4bf4af"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/335428f424807178c57b89fd2bed714fba4bf4af",
-                "reference": "335428f424807178c57b89fd2bed714fba4bf4af",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/messenger": "^5.1|^6.0",
-                "symfony/service-contracts": "^1.1|^2|^3"
-            },
-            "conflict": {
-                "doctrine/dbal": "<2.13",
-                "doctrine/persistence": "<1.3"
-            },
-            "require-dev": {
-                "doctrine/dbal": "^2.13|^3.0",
-                "doctrine/persistence": "^1.3|^2",
-                "symfony/property-access": "^4.4|^5.0|^6.0",
-                "symfony/serializer": "^4.4|^5.0|^6.0"
-            },
-            "type": "symfony-messenger-bridge",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Messenger\\Bridge\\Doctrine\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Doctrine Messenger Bridge",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/doctrine-messenger/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-02T09:53:40+00:00"
-        },
-        {
-            "name": "symfony/dotenv",
-            "version": "v5.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/dotenv.git",
-                "reference": "83a2310904a4f5d4f42526227b5a578ac82232a9"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dotenv/zipball/83a2310904a4f5d4f42526227b5a578ac82232a9",
-                "reference": "83a2310904a4f5d4f42526227b5a578ac82232a9",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3"
-            },
-            "require-dev": {
-                "symfony/console": "^4.4|^5.0|^6.0",
-                "symfony/process": "^4.4|^5.0|^6.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Dotenv\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Registers environment variables from a .env file",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "dotenv",
-                "env",
-                "environment"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/dotenv/tree/v5.4.5"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-15T17:04:12+00:00"
-        },
-        {
-            "name": "symfony/error-handler",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/error-handler.git",
-                "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/error-handler/zipball/c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5",
-                "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "psr/log": "^1|^2|^3",
-                "symfony/var-dumper": "^4.4|^5.0|^6.0"
-            },
-            "require-dev": {
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/http-kernel": "^4.4|^5.0|^6.0",
-                "symfony/serializer": "^4.4|^5.0|^6.0"
-            },
-            "bin": [
-                "Resources/bin/patch-type-declarations"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\ErrorHandler\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides tools to manage errors and ease debugging PHP code",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/error-handler/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-02T09:53:40+00:00"
-        },
-        {
-            "name": "symfony/event-dispatcher",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dec8a9f58d20df252b9cd89f1c6c1530f747685d",
-                "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/event-dispatcher-contracts": "^2|^3",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<4.4"
-            },
-            "provide": {
-                "psr/event-dispatcher-implementation": "1.0",
-                "symfony/event-dispatcher-implementation": "2.0"
-            },
-            "require-dev": {
-                "psr/log": "^1|^2|^3",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/error-handler": "^4.4|^5.0|^6.0",
-                "symfony/expression-language": "^4.4|^5.0|^6.0",
-                "symfony/http-foundation": "^4.4|^5.0|^6.0",
-                "symfony/service-contracts": "^1.1|^2|^3",
-                "symfony/stopwatch": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "symfony/dependency-injection": "",
-                "symfony/http-kernel": ""
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\EventDispatcher\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-02T09:53:40+00:00"
-        },
-        {
-            "name": "symfony/event-dispatcher-contracts",
-            "version": "v3.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
-                "reference": "aa5422287b75594b90ee9cd807caf8f0df491385"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/aa5422287b75594b90ee9cd807caf8f0df491385",
-                "reference": "aa5422287b75594b90ee9cd807caf8f0df491385",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.0.2",
-                "psr/event-dispatcher": "^1"
-            },
-            "suggest": {
-                "symfony/event-dispatcher-implementation": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "3.0-dev"
-                },
-                "thanks": {
-                    "name": "symfony/contracts",
-                    "url": "https://github.com/symfony/contracts"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Contracts\\EventDispatcher\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Generic abstractions related to dispatching event",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "abstractions",
-                "contracts",
-                "decoupling",
-                "interfaces",
-                "interoperability",
-                "standards"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-07-15T12:33:35+00:00"
-        },
-        {
-            "name": "symfony/expression-language",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/expression-language.git",
-                "reference": "c68c6d1a308f6e2a1382bdb3a317959e1ee9aa08"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/expression-language/zipball/c68c6d1a308f6e2a1382bdb3a317959e1ee9aa08",
-                "reference": "c68c6d1a308f6e2a1382bdb3a317959e1ee9aa08",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/cache": "^4.4|^5.0|^6.0",
-                "symfony/service-contracts": "^1.1|^2|^3"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\ExpressionLanguage\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides an engine that can compile and evaluate expressions",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/expression-language/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-02T09:53:40+00:00"
-        },
-        {
-            "name": "symfony/filesystem",
-            "version": "v5.4.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/filesystem.git",
-                "reference": "d53a45039974952af7f7ebc461ccdd4295e29440"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/d53a45039974952af7f7ebc461ccdd4295e29440",
-                "reference": "d53a45039974952af7f7ebc461ccdd4295e29440",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-mbstring": "~1.8",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Filesystem\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides basic utilities for the filesystem",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/filesystem/tree/v5.4.6"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-02T12:42:23+00:00"
-        },
-        {
-            "name": "symfony/finder",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/finder.git",
-                "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d",
-                "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Finder\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Finds files and directories via an intuitive fluent interface",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/finder/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-26T16:34:36+00:00"
-        },
-        {
-            "name": "symfony/flex",
-            "version": "v1.18.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/flex.git",
-                "reference": "10e438f53a972439675dc720706f0cd5c0ed94f1"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/flex/zipball/10e438f53a972439675dc720706f0cd5c0ed94f1",
-                "reference": "10e438f53a972439675dc720706f0cd5c0ed94f1",
-                "shasum": ""
-            },
-            "require": {
-                "composer-plugin-api": "^1.0|^2.0",
-                "php": ">=7.1"
-            },
-            "require-dev": {
-                "composer/composer": "^1.0.2|^2.0",
-                "symfony/dotenv": "^4.4|^5.0|^6.0",
-                "symfony/filesystem": "^4.4|^5.0|^6.0",
-                "symfony/phpunit-bridge": "^4.4.12|^5.0|^6.0",
-                "symfony/process": "^4.4|^5.0|^6.0"
-            },
-            "type": "composer-plugin",
-            "extra": {
-                "class": "Symfony\\Flex\\Flex"
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Flex\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien.potencier@gmail.com"
-                }
-            ],
-            "description": "Composer plugin for Symfony",
-            "support": {
-                "issues": "https://github.com/symfony/flex/issues",
-                "source": "https://github.com/symfony/flex/tree/v1.18.5"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-16T17:26:46+00:00"
-        },
-        {
-            "name": "symfony/framework-bundle",
-            "version": "v5.4.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/framework-bundle.git",
-                "reference": "76ea755f30924924ea37a28e098df61679efcb63"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/76ea755f30924924ea37a28e098df61679efcb63",
-                "reference": "76ea755f30924924ea37a28e098df61679efcb63",
-                "shasum": ""
-            },
-            "require": {
-                "ext-xml": "*",
-                "php": ">=7.2.5",
-                "symfony/cache": "^5.2|^6.0",
-                "symfony/config": "^5.3|^6.0",
-                "symfony/dependency-injection": "^5.4.5|^6.0.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/error-handler": "^4.4.1|^5.0.1|^6.0",
-                "symfony/event-dispatcher": "^5.1|^6.0",
-                "symfony/filesystem": "^4.4|^5.0|^6.0",
-                "symfony/finder": "^4.4|^5.0|^6.0",
-                "symfony/http-foundation": "^5.3|^6.0",
-                "symfony/http-kernel": "^5.4|^6.0",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/polyfill-php81": "^1.22",
-                "symfony/routing": "^5.3|^6.0"
-            },
-            "conflict": {
-                "doctrine/annotations": "<1.13.1",
-                "doctrine/cache": "<1.11",
-                "doctrine/persistence": "<1.3",
-                "phpdocumentor/reflection-docblock": "<3.2.2",
-                "phpdocumentor/type-resolver": "<1.4.0",
-                "phpunit/phpunit": "<5.4.3",
-                "symfony/asset": "<5.3",
-                "symfony/console": "<5.2.5",
-                "symfony/dom-crawler": "<4.4",
-                "symfony/dotenv": "<5.1",
-                "symfony/form": "<5.2",
-                "symfony/http-client": "<4.4",
-                "symfony/lock": "<4.4",
-                "symfony/mailer": "<5.2",
-                "symfony/messenger": "<5.4",
-                "symfony/mime": "<4.4",
-                "symfony/property-access": "<5.3",
-                "symfony/property-info": "<4.4",
-                "symfony/security-csrf": "<5.3",
-                "symfony/serializer": "<5.2",
-                "symfony/service-contracts": ">=3.0",
-                "symfony/stopwatch": "<4.4",
-                "symfony/translation": "<5.3",
-                "symfony/twig-bridge": "<4.4",
-                "symfony/twig-bundle": "<4.4",
-                "symfony/validator": "<5.2",
-                "symfony/web-profiler-bundle": "<4.4",
-                "symfony/workflow": "<5.2"
-            },
-            "require-dev": {
-                "doctrine/annotations": "^1.13.1",
-                "doctrine/cache": "^1.11|^2.0",
-                "doctrine/persistence": "^1.3|^2.0",
-                "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
-                "symfony/asset": "^5.3|^6.0",
-                "symfony/browser-kit": "^5.4|^6.0",
-                "symfony/console": "^5.4|^6.0",
-                "symfony/css-selector": "^4.4|^5.0|^6.0",
-                "symfony/dom-crawler": "^4.4.30|^5.3.7|^6.0",
-                "symfony/dotenv": "^5.1|^6.0",
-                "symfony/expression-language": "^4.4|^5.0|^6.0",
-                "symfony/form": "^5.2|^6.0",
-                "symfony/http-client": "^4.4|^5.0|^6.0",
-                "symfony/lock": "^4.4|^5.0|^6.0",
-                "symfony/mailer": "^5.2|^6.0",
-                "symfony/messenger": "^5.4|^6.0",
-                "symfony/mime": "^4.4|^5.0|^6.0",
-                "symfony/notifier": "^5.4|^6.0",
-                "symfony/phpunit-bridge": "^5.3|^6.0",
-                "symfony/polyfill-intl-icu": "~1.0",
-                "symfony/process": "^4.4|^5.0|^6.0",
-                "symfony/property-info": "^4.4|^5.0|^6.0",
-                "symfony/rate-limiter": "^5.2|^6.0",
-                "symfony/security-bundle": "^5.4|^6.0",
-                "symfony/serializer": "^5.4|^6.0",
-                "symfony/stopwatch": "^4.4|^5.0|^6.0",
-                "symfony/string": "^5.0|^6.0",
-                "symfony/translation": "^5.3|^6.0",
-                "symfony/twig-bundle": "^4.4|^5.0|^6.0",
-                "symfony/validator": "^5.2|^6.0",
-                "symfony/web-link": "^4.4|^5.0|^6.0",
-                "symfony/workflow": "^5.2|^6.0",
-                "symfony/yaml": "^4.4|^5.0|^6.0",
-                "twig/twig": "^2.10|^3.0"
-            },
-            "suggest": {
-                "ext-apcu": "For best performance of the system caches",
-                "symfony/console": "For using the console commands",
-                "symfony/form": "For using forms",
-                "symfony/property-info": "For using the property_info service",
-                "symfony/serializer": "For using the serializer service",
-                "symfony/validator": "For using validation",
-                "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering",
-                "symfony/yaml": "For using the debug:config and lint:yaml commands"
-            },
-            "type": "symfony-bundle",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Bundle\\FrameworkBundle\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/framework-bundle/tree/v5.4.6"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-04T14:13:35+00:00"
-        },
-        {
-            "name": "symfony/http-client",
-            "version": "v5.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/http-client.git",
-                "reference": "fab84798694e45b4571d305125215699eb2b1f73"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-client/zipball/fab84798694e45b4571d305125215699eb2b1f73",
-                "reference": "fab84798694e45b4571d305125215699eb2b1f73",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "psr/log": "^1|^2|^3",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/http-client-contracts": "^2.4",
-                "symfony/polyfill-php73": "^1.11",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/service-contracts": "^1.0|^2|^3"
-            },
-            "provide": {
-                "php-http/async-client-implementation": "*",
-                "php-http/client-implementation": "*",
-                "psr/http-client-implementation": "1.0",
-                "symfony/http-client-implementation": "2.4"
-            },
-            "require-dev": {
-                "amphp/amp": "^2.5",
-                "amphp/http-client": "^4.2.1",
-                "amphp/http-tunnel": "^1.0",
-                "amphp/socket": "^1.1",
-                "guzzlehttp/promises": "^1.4",
-                "nyholm/psr7": "^1.0",
-                "php-http/httplug": "^1.0|^2.0",
-                "psr/http-client": "^1.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/http-kernel": "^4.4.13|^5.1.5|^6.0",
-                "symfony/process": "^4.4|^5.0|^6.0",
-                "symfony/stopwatch": "^4.4|^5.0|^6.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\HttpClient\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/http-client/tree/v5.4.5"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-27T08:46:18+00:00"
-        },
-        {
-            "name": "symfony/http-client-contracts",
-            "version": "v2.5.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/http-client-contracts.git",
-                "reference": "ec82e57b5b714dbb69300d348bd840b345e24166"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ec82e57b5b714dbb69300d348bd840b345e24166",
-                "reference": "ec82e57b5b714dbb69300d348bd840b345e24166",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5"
-            },
-            "suggest": {
-                "symfony/http-client-implementation": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "2.5-dev"
-                },
-                "thanks": {
-                    "name": "symfony/contracts",
-                    "url": "https://github.com/symfony/contracts"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Contracts\\HttpClient\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Generic abstractions related to HTTP clients",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "abstractions",
-                "contracts",
-                "decoupling",
-                "interfaces",
-                "interoperability",
-                "standards"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/http-client-contracts/tree/v2.5.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-11-03T09:24:47+00:00"
-        },
-        {
-            "name": "symfony/http-foundation",
-            "version": "v5.4.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/http-foundation.git",
-                "reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/34e89bc147633c0f9dd6caaaf56da3b806a21465",
-                "reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-mbstring": "~1.1",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "require-dev": {
-                "predis/predis": "~1.0",
-                "symfony/cache": "^4.4|^5.0|^6.0",
-                "symfony/expression-language": "^4.4|^5.0|^6.0",
-                "symfony/mime": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "symfony/mime": "To use the file extension guesser"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\HttpFoundation\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Defines an object-oriented layer for the HTTP specification",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/http-foundation/tree/v5.4.6"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-05T21:03:43+00:00"
-        },
-        {
-            "name": "symfony/http-kernel",
-            "version": "v5.4.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/http-kernel.git",
-                "reference": "d41f29ae9af1b5f40c7ebcddf09082953229411d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/d41f29ae9af1b5f40c7ebcddf09082953229411d",
-                "reference": "d41f29ae9af1b5f40c7ebcddf09082953229411d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "psr/log": "^1|^2",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/error-handler": "^4.4|^5.0|^6.0",
-                "symfony/event-dispatcher": "^5.0|^6.0",
-                "symfony/http-foundation": "^5.3.7|^6.0",
-                "symfony/polyfill-ctype": "^1.8",
-                "symfony/polyfill-php73": "^1.9",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "conflict": {
-                "symfony/browser-kit": "<5.4",
-                "symfony/cache": "<5.0",
-                "symfony/config": "<5.0",
-                "symfony/console": "<4.4",
-                "symfony/dependency-injection": "<5.3",
-                "symfony/doctrine-bridge": "<5.0",
-                "symfony/form": "<5.0",
-                "symfony/http-client": "<5.0",
-                "symfony/mailer": "<5.0",
-                "symfony/messenger": "<5.0",
-                "symfony/translation": "<5.0",
-                "symfony/twig-bridge": "<5.0",
-                "symfony/validator": "<5.0",
-                "twig/twig": "<2.13"
-            },
-            "provide": {
-                "psr/log-implementation": "1.0|2.0"
-            },
-            "require-dev": {
-                "psr/cache": "^1.0|^2.0|^3.0",
-                "symfony/browser-kit": "^5.4|^6.0",
-                "symfony/config": "^5.0|^6.0",
-                "symfony/console": "^4.4|^5.0|^6.0",
-                "symfony/css-selector": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^5.3|^6.0",
-                "symfony/dom-crawler": "^4.4|^5.0|^6.0",
-                "symfony/expression-language": "^4.4|^5.0|^6.0",
-                "symfony/finder": "^4.4|^5.0|^6.0",
-                "symfony/http-client-contracts": "^1.1|^2|^3",
-                "symfony/process": "^4.4|^5.0|^6.0",
-                "symfony/routing": "^4.4|^5.0|^6.0",
-                "symfony/stopwatch": "^4.4|^5.0|^6.0",
-                "symfony/translation": "^4.4|^5.0|^6.0",
-                "symfony/translation-contracts": "^1.1|^2|^3",
-                "twig/twig": "^2.13|^3.0.4"
-            },
-            "suggest": {
-                "symfony/browser-kit": "",
-                "symfony/config": "",
-                "symfony/console": "",
-                "symfony/dependency-injection": ""
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\HttpKernel\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides a structured process for converting a Request into a Response",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/http-kernel/tree/v5.4.6"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-05T21:14:51+00:00"
-        },
-        {
-            "name": "symfony/intl",
-            "version": "v5.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/intl.git",
-                "reference": "47a1413da15ff840d7c419fa704d32caba3276ac"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/intl/zipball/47a1413da15ff840d7c419fa704d32caba3276ac",
-                "reference": "47a1413da15ff840d7c419fa704d32caba3276ac",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "require-dev": {
-                "symfony/filesystem": "^4.4|^5.0|^6.0"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "Resources/functions.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Component\\Intl\\": ""
-                },
-                "classmap": [
-                    "Resources/stubs"
-                ],
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@gmail.com"
-                },
-                {
-                    "name": "Eriksen Costa",
-                    "email": "eriksen.costa@infranology.com.br"
-                },
-                {
-                    "name": "Igor Wiedler",
-                    "email": "igor@wiedler.ch"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides a PHP replacement layer for the C intl extension that includes additional data from the ICU library",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "i18n",
-                "icu",
-                "internationalization",
-                "intl",
-                "l10n",
-                "localization"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/intl/tree/v5.4.5"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-25T13:55:17+00:00"
-        },
-        {
-            "name": "symfony/lock",
-            "version": "v5.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/lock.git",
-                "reference": "f03b561c3bff8dc3a8ed0ff960f8a41bb14337d8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/lock/zipball/f03b561c3bff8dc3a8ed0ff960f8a41bb14337d8",
-                "reference": "f03b561c3bff8dc3a8ed0ff960f8a41bb14337d8",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "psr/log": "^1|^2|^3",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "conflict": {
-                "doctrine/dbal": "<2.13"
-            },
-            "require-dev": {
-                "doctrine/dbal": "^2.13|^3.0",
-                "predis/predis": "~1.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Lock\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jérémy Derussé",
-                    "email": "jeremy@derusse.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Creates and manages locks, a mechanism to provide exclusive access to a shared resource",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "cas",
-                "flock",
-                "locking",
-                "mutex",
-                "redlock",
-                "semaphore"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/lock/tree/v5.4.5"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-24T09:45:49+00:00"
-        },
-        {
-            "name": "symfony/mailer",
-            "version": "v5.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/mailer.git",
-                "reference": "f6e927ec95c957131e6b2c78790e1a6d4c576447"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/mailer/zipball/f6e927ec95c957131e6b2c78790e1a6d4c576447",
-                "reference": "f6e927ec95c957131e6b2c78790e1a6d4c576447",
-                "shasum": ""
-            },
-            "require": {
-                "egulias/email-validator": "^2.1.10|^3",
-                "php": ">=7.2.5",
-                "psr/event-dispatcher": "^1",
-                "psr/log": "^1|^2|^3",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
-                "symfony/mime": "^5.2.6|^6.0",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/service-contracts": "^1.1|^2|^3"
-            },
-            "conflict": {
-                "symfony/http-kernel": "<4.4"
-            },
-            "require-dev": {
-                "symfony/http-client-contracts": "^1.1|^2|^3",
-                "symfony/messenger": "^4.4|^5.0|^6.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Mailer\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Helps sending emails",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/mailer/tree/v5.4.5"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-25T10:48:33+00:00"
-        },
-        {
-            "name": "symfony/messenger",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/messenger.git",
-                "reference": "4319c25b76573cff46f112ee8cc83fffa4b97579"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/messenger/zipball/4319c25b76573cff46f112ee8cc83fffa4b97579",
-                "reference": "4319c25b76573cff46f112ee8cc83fffa4b97579",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "psr/log": "^1|^2|^3",
-                "symfony/amqp-messenger": "^5.1|^6.0",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/doctrine-messenger": "^5.1|^6.0",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/redis-messenger": "^5.1|^6.0"
-            },
-            "conflict": {
-                "symfony/event-dispatcher": "<4.4",
-                "symfony/framework-bundle": "<4.4",
-                "symfony/http-kernel": "<4.4",
-                "symfony/serializer": "<5.0"
-            },
-            "require-dev": {
-                "psr/cache": "^1.0|^2.0|^3.0",
-                "symfony/console": "^5.4|^6.0",
-                "symfony/dependency-injection": "^5.3|^6.0",
-                "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
-                "symfony/http-kernel": "^4.4|^5.0|^6.0",
-                "symfony/process": "^4.4|^5.0|^6.0",
-                "symfony/property-access": "^4.4|^5.0|^6.0",
-                "symfony/routing": "^4.4|^5.0|^6.0",
-                "symfony/serializer": "^5.0|^6.0",
-                "symfony/service-contracts": "^1.1|^2|^3",
-                "symfony/stopwatch": "^4.4|^5.0|^6.0",
-                "symfony/validator": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "enqueue/messenger-adapter": "For using the php-enqueue library as a transport."
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Messenger\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Samuel Roze",
-                    "email": "samuel.roze@gmail.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Helps applications send and receive messages to/from other applications or via message queues",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/messenger/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-12T18:55:10+00:00"
-        },
-        {
-            "name": "symfony/mime",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/mime.git",
-                "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/mime/zipball/e1503cfb5c9a225350f549d3bb99296f4abfb80f",
-                "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-intl-idn": "^1.10",
-                "symfony/polyfill-mbstring": "^1.0",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "conflict": {
-                "egulias/email-validator": "~3.0.0",
-                "phpdocumentor/reflection-docblock": "<3.2.2",
-                "phpdocumentor/type-resolver": "<1.4.0",
-                "symfony/mailer": "<4.4"
-            },
-            "require-dev": {
-                "egulias/email-validator": "^2.1.10|^3.1",
-                "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/property-access": "^4.4|^5.1|^6.0",
-                "symfony/property-info": "^4.4|^5.1|^6.0",
-                "symfony/serializer": "^5.2|^6.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Mime\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Allows manipulating MIME messages",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "mime",
-                "mime-type"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/mime/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-02T09:53:40+00:00"
-        },
-        {
-            "name": "symfony/monolog-bridge",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/monolog-bridge.git",
-                "reference": "4b56e17c443e7092895477f047f2a70f324f984c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/4b56e17c443e7092895477f047f2a70f324f984c",
-                "reference": "4b56e17c443e7092895477f047f2a70f324f984c",
-                "shasum": ""
-            },
-            "require": {
-                "monolog/monolog": "^1.25.1|^2",
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/http-kernel": "^5.3|^6.0",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/service-contracts": "^1.1|^2|^3"
-            },
-            "conflict": {
-                "symfony/console": "<4.4",
-                "symfony/http-foundation": "<5.3"
-            },
-            "require-dev": {
-                "symfony/console": "^4.4|^5.0|^6.0",
-                "symfony/http-client": "^4.4|^5.0|^6.0",
-                "symfony/mailer": "^4.4|^5.0|^6.0",
-                "symfony/messenger": "^4.4|^5.0|^6.0",
-                "symfony/mime": "^4.4|^5.0|^6.0",
-                "symfony/security-core": "^4.4|^5.0|^6.0",
-                "symfony/var-dumper": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "symfony/console": "For the possibility to show log messages in console commands depending on verbosity settings.",
-                "symfony/http-kernel": "For using the debugging handlers together with the response life cycle of the HTTP kernel.",
-                "symfony/var-dumper": "For using the debugging handlers like the console handler or the log server handler."
-            },
-            "type": "symfony-bridge",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Bridge\\Monolog\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides integration for Monolog with various Symfony components",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/monolog-bridge/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-02T09:53:40+00:00"
-        },
-        {
-            "name": "symfony/monolog-bundle",
-            "version": "v3.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/monolog-bundle.git",
-                "reference": "fde12fc628162787a4e53877abadc30047fd868b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/fde12fc628162787a4e53877abadc30047fd868b",
-                "reference": "fde12fc628162787a4e53877abadc30047fd868b",
-                "shasum": ""
-            },
-            "require": {
-                "monolog/monolog": "~1.22 || ~2.0",
-                "php": ">=7.1.3",
-                "symfony/config": "~4.4 || ^5.0 || ^6.0",
-                "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0",
-                "symfony/http-kernel": "~4.4 || ^5.0 || ^6.0",
-                "symfony/monolog-bridge": "~4.4 || ^5.0 || ^6.0"
-            },
-            "require-dev": {
-                "symfony/console": "~4.4 || ^5.0 || ^6.0",
-                "symfony/phpunit-bridge": "^5.2 || ^6.0",
-                "symfony/yaml": "~4.4 || ^5.0 || ^6.0"
-            },
-            "type": "symfony-bundle",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Bundle\\MonologBundle\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony MonologBundle",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "log",
-                "logging"
-            ],
-            "support": {
-                "issues": "https://github.com/symfony/monolog-bundle/issues",
-                "source": "https://github.com/symfony/monolog-bundle/tree/v3.7.1"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-11-05T10:34:29+00:00"
-        },
-        {
-            "name": "symfony/password-hasher",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/password-hasher.git",
-                "reference": "b5ed59c4536d8386cd37bb86df2b7bd5fbbd46d4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/password-hasher/zipball/b5ed59c4536d8386cd37bb86df2b7bd5fbbd46d4",
-                "reference": "b5ed59c4536d8386cd37bb86df2b7bd5fbbd46d4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-php80": "^1.15"
-            },
-            "conflict": {
-                "symfony/security-core": "<5.3"
-            },
-            "require-dev": {
-                "symfony/console": "^5",
-                "symfony/security-core": "^5.3|^6.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\PasswordHasher\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Robin Chalas",
-                    "email": "robin.chalas@gmail.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides password hashing utilities",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "hashing",
-                "password"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/password-hasher/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-02T09:53:40+00:00"
-        },
-        {
-            "name": "symfony/polyfill-intl-grapheme",
-            "version": "v1.25.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
-                "reference": "81b86b50cf841a64252b439e738e97f4a34e2783"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783",
-                "reference": "81b86b50cf841a64252b439e738e97f4a34e2783",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "suggest": {
-                "ext-intl": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "1.23-dev"
-                },
-                "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for intl's grapheme_* functions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "grapheme",
-                "intl",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-11-23T21:10:46+00:00"
-        },
-        {
-            "name": "symfony/polyfill-intl-idn",
-            "version": "v1.25.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-intl-idn.git",
-                "reference": "749045c69efb97c70d25d7463abba812e91f3a44"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44",
-                "reference": "749045c69efb97c70d25d7463abba812e91f3a44",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1",
-                "symfony/polyfill-intl-normalizer": "^1.10",
-                "symfony/polyfill-php72": "^1.10"
-            },
-            "suggest": {
-                "ext-intl": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "1.23-dev"
-                },
-                "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Intl\\Idn\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Laurent Bassin",
-                    "email": "laurent@bassin.info"
-                },
-                {
-                    "name": "Trevor Rowbotham",
-                    "email": "trevor.rowbotham@pm.me"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "idn",
-                "intl",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.25.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-09-14T14:02:44+00:00"
-        },
-        {
-            "name": "symfony/polyfill-intl-messageformatter",
-            "version": "v1.25.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-intl-messageformatter.git",
-                "reference": "22c4bba53bfadde90a4c1b32088e720638a42a83"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-messageformatter/zipball/22c4bba53bfadde90a4c1b32088e720638a42a83",
-                "reference": "22c4bba53bfadde90a4c1b32088e720638a42a83",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "suggest": {
-                "ext-intl": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "1.23-dev"
-                },
-                "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Intl\\MessageFormatter\\": ""
-                },
-                "classmap": [
-                    "Resources/stubs"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for intl's MessageFormatter class and related functions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "intl",
-                "messageformatter",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-intl-messageformatter/tree/v1.25.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-02-19T12:13:01+00:00"
-        },
-        {
-            "name": "symfony/polyfill-intl-normalizer",
-            "version": "v1.25.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
-                "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8",
-                "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "suggest": {
-                "ext-intl": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "1.23-dev"
-                },
-                "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
-                },
-                "classmap": [
-                    "Resources/stubs"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for intl's Normalizer class and related functions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "intl",
-                "normalizer",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-02-19T12:13:01+00:00"
-        },
-        {
-            "name": "symfony/polyfill-mbstring",
-            "version": "v1.25.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
-                "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "provide": {
-                "ext-mbstring": "*"
-            },
-            "suggest": {
-                "ext-mbstring": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "1.23-dev"
-                },
-                "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for the Mbstring extension",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "mbstring",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-11-30T18:21:41+00:00"
-        },
-        {
-            "name": "symfony/polyfill-php73",
-            "version": "v1.25.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-php73.git",
-                "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5",
-                "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "1.23-dev"
-                },
-                "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Php73\\": ""
-                },
-                "classmap": [
-                    "Resources/stubs"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-06-05T21:20:04+00:00"
-        },
-        {
-            "name": "symfony/polyfill-php80",
-            "version": "v1.25.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-php80.git",
-                "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c",
-                "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "1.23-dev"
-                },
-                "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Php80\\": ""
-                },
-                "classmap": [
-                    "Resources/stubs"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Ion Bazan",
-                    "email": "ion.bazan@gmail.com"
-                },
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-04T08:16:47+00:00"
-        },
-        {
-            "name": "symfony/polyfill-php81",
-            "version": "v1.25.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-php81.git",
-                "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
-                "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "1.23-dev"
-                },
-                "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Php81\\": ""
-                },
-                "classmap": [
-                    "Resources/stubs"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-09-13T13:58:11+00:00"
-        },
-        {
-            "name": "symfony/process",
-            "version": "v5.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/process.git",
-                "reference": "95440409896f90a5f85db07a32b517ecec17fa4c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/95440409896f90a5f85db07a32b517ecec17fa4c",
-                "reference": "95440409896f90a5f85db07a32b517ecec17fa4c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Process\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Executes commands in sub-processes",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/process/tree/v5.4.5"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-30T18:16:22+00:00"
-        },
-        {
-            "name": "symfony/property-access",
-            "version": "v5.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/property-access.git",
-                "reference": "95534d912f61117d3bce2d4456419ee2ee548d7a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/property-access/zipball/95534d912f61117d3bce2d4456419ee2ee548d7a",
-                "reference": "95534d912f61117d3bce2d4456419ee2ee548d7a",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/property-info": "^5.2|^6.0"
-            },
-            "require-dev": {
-                "symfony/cache": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "psr/cache-implementation": "To cache access methods."
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\PropertyAccess\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides functions to read and write from/to an object or array using a simple string notation",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "access",
-                "array",
-                "extraction",
-                "index",
-                "injection",
-                "object",
-                "property",
-                "property path",
-                "reflection"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/property-access/tree/v5.4.5"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-04T18:39:09+00:00"
-        },
-        {
-            "name": "symfony/property-info",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/property-info.git",
-                "reference": "bcc2b6904cbcf16b2e5d618da16117cd8e132f9a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/property-info/zipball/bcc2b6904cbcf16b2e5d618da16117cd8e132f9a",
-                "reference": "bcc2b6904cbcf16b2e5d618da16117cd8e132f9a",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/string": "^5.1|^6.0"
-            },
-            "conflict": {
-                "phpdocumentor/reflection-docblock": "<3.2.2",
-                "phpdocumentor/type-resolver": "<1.4.0",
-                "symfony/dependency-injection": "<4.4"
-            },
-            "require-dev": {
-                "doctrine/annotations": "^1.10.4",
-                "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
-                "phpstan/phpdoc-parser": "^1.0",
-                "symfony/cache": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/serializer": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "phpdocumentor/reflection-docblock": "To use the PHPDoc",
-                "psr/cache-implementation": "To cache results",
-                "symfony/doctrine-bridge": "To use Doctrine metadata",
-                "symfony/serializer": "To use Serializer metadata"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\PropertyInfo\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Kévin Dunglas",
-                    "email": "dunglas@gmail.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Extracts information about PHP class' properties using metadata of popular sources",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "doctrine",
-                "phpdoc",
-                "property",
-                "symfony",
-                "type",
-                "validator"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/property-info/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-02T09:53:40+00:00"
-        },
-        {
-            "name": "symfony/redis-messenger",
-            "version": "v5.4.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/redis-messenger.git",
-                "reference": "6b14778e0a6295af023fec637c7b38f918c1a08d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/redis-messenger/zipball/6b14778e0a6295af023fec637c7b38f918c1a08d",
-                "reference": "6b14778e0a6295af023fec637c7b38f918c1a08d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/messenger": "^5.1|^6.0"
-            },
-            "require-dev": {
-                "symfony/property-access": "^4.4|^5.0|^6.0",
-                "symfony/serializer": "^4.4|^5.0|^6.0"
-            },
-            "type": "symfony-messenger-bridge",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Messenger\\Bridge\\Redis\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Redis extension Messenger Bridge",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/redis-messenger/tree/v5.4.6"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-04T15:46:40+00:00"
-        },
-        {
-            "name": "symfony/routing",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/routing.git",
-                "reference": "44b29c7a94e867ccde1da604792f11a469958981"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/routing/zipball/44b29c7a94e867ccde1da604792f11a469958981",
-                "reference": "44b29c7a94e867ccde1da604792f11a469958981",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "conflict": {
-                "doctrine/annotations": "<1.12",
-                "symfony/config": "<5.3",
-                "symfony/dependency-injection": "<4.4",
-                "symfony/yaml": "<4.4"
-            },
-            "require-dev": {
-                "doctrine/annotations": "^1.12",
-                "psr/log": "^1|^2|^3",
-                "symfony/config": "^5.3|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/expression-language": "^4.4|^5.0|^6.0",
-                "symfony/http-foundation": "^4.4|^5.0|^6.0",
-                "symfony/yaml": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "symfony/config": "For using the all-in-one router or any loader",
-                "symfony/expression-language": "For using expression matching",
-                "symfony/http-foundation": "For using a Symfony Request object",
-                "symfony/yaml": "For using the YAML loader"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Routing\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Maps an HTTP request to a set of configuration variables",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "router",
-                "routing",
-                "uri",
-                "url"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/routing/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-02T09:53:40+00:00"
-        },
-        {
-            "name": "symfony/security-bundle",
-            "version": "v5.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/security-bundle.git",
-                "reference": "d6ae2f605fa8e4e0860c1a6574271af2bb4ba16c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/security-bundle/zipball/d6ae2f605fa8e4e0860c1a6574271af2bb4ba16c",
-                "reference": "d6ae2f605fa8e4e0860c1a6574271af2bb4ba16c",
-                "shasum": ""
-            },
-            "require": {
-                "ext-xml": "*",
-                "php": ">=7.2.5",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^5.3|^6.0",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/event-dispatcher": "^5.1|^6.0",
-                "symfony/http-foundation": "^5.3|^6.0",
-                "symfony/http-kernel": "^5.3|^6.0",
-                "symfony/password-hasher": "^5.3|^6.0",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/security-core": "^5.4|^6.0",
-                "symfony/security-csrf": "^4.4|^5.0|^6.0",
-                "symfony/security-guard": "^5.3",
-                "symfony/security-http": "^5.4|^6.0"
-            },
-            "conflict": {
-                "symfony/browser-kit": "<4.4",
-                "symfony/console": "<4.4",
-                "symfony/framework-bundle": "<4.4",
-                "symfony/ldap": "<5.1",
-                "symfony/twig-bundle": "<4.4"
-            },
-            "require-dev": {
-                "doctrine/annotations": "^1.10.4",
-                "symfony/asset": "^4.4|^5.0|^6.0",
-                "symfony/browser-kit": "^4.4|^5.0|^6.0",
-                "symfony/console": "^4.4|^5.0|^6.0",
-                "symfony/css-selector": "^4.4|^5.0|^6.0",
-                "symfony/dom-crawler": "^4.4|^5.0|^6.0",
-                "symfony/expression-language": "^4.4|^5.0|^6.0",
-                "symfony/form": "^4.4|^5.0|^6.0",
-                "symfony/framework-bundle": "^5.3|^6.0",
-                "symfony/ldap": "^5.3|^6.0",
-                "symfony/process": "^4.4|^5.0|^6.0",
-                "symfony/rate-limiter": "^5.2|^6.0",
-                "symfony/serializer": "^4.4|^5.0|^6.0",
-                "symfony/translation": "^4.4|^5.0|^6.0",
-                "symfony/twig-bridge": "^4.4|^5.0|^6.0",
-                "symfony/twig-bundle": "^4.4|^5.0|^6.0",
-                "symfony/validator": "^4.4|^5.0|^6.0",
-                "symfony/yaml": "^4.4|^5.0|^6.0",
-                "twig/twig": "^2.13|^3.0.4"
-            },
-            "type": "symfony-bundle",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Bundle\\SecurityBundle\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides a tight integration of the Security component into the Symfony full-stack framework",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/security-bundle/tree/v5.4.5"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-18T16:06:09+00:00"
-        },
-        {
-            "name": "symfony/security-core",
-            "version": "v5.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/security-core.git",
-                "reference": "11d815ccbff929899a4ec545f9f85185071abd12"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/security-core/zipball/11d815ccbff929899a4ec545f9f85185071abd12",
-                "reference": "11d815ccbff929899a4ec545f9f85185071abd12",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/event-dispatcher-contracts": "^1.1|^2|^3",
-                "symfony/password-hasher": "^5.3|^6.0",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/service-contracts": "^1.1.6|^2|^3"
-            },
-            "conflict": {
-                "symfony/event-dispatcher": "<4.4",
-                "symfony/http-foundation": "<5.3",
-                "symfony/ldap": "<4.4",
-                "symfony/security-guard": "<4.4",
-                "symfony/validator": "<5.2"
-            },
-            "require-dev": {
-                "psr/cache": "^1.0|^2.0|^3.0",
-                "psr/container": "^1.0|^2.0",
-                "psr/log": "^1|^2|^3",
-                "symfony/cache": "^4.4|^5.0|^6.0",
-                "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
-                "symfony/expression-language": "^4.4|^5.0|^6.0",
-                "symfony/http-foundation": "^5.3|^6.0",
-                "symfony/ldap": "^4.4|^5.0|^6.0",
-                "symfony/translation": "^4.4|^5.0|^6.0",
-                "symfony/validator": "^5.2|^6.0"
-            },
-            "suggest": {
-                "psr/container-implementation": "To instantiate the Security class",
-                "symfony/event-dispatcher": "",
-                "symfony/expression-language": "For using the expression voter",
-                "symfony/http-foundation": "",
-                "symfony/ldap": "For using LDAP integration",
-                "symfony/validator": "For using the user password constraint"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Security\\Core\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Security Component - Core Library",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/security-core/tree/v5.4.5"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-18T16:06:09+00:00"
-        },
-        {
-            "name": "symfony/security-csrf",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/security-csrf.git",
-                "reference": "57c1c252ca756289c2b61327e08fb10be3936956"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/security-csrf/zipball/57c1c252ca756289c2b61327e08fb10be3936956",
-                "reference": "57c1c252ca756289c2b61327e08fb10be3936956",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/security-core": "^4.4|^5.0|^6.0"
-            },
-            "conflict": {
-                "symfony/http-foundation": "<5.3"
-            },
-            "require-dev": {
-                "symfony/http-foundation": "^5.3|^6.0"
-            },
-            "suggest": {
-                "symfony/http-foundation": "For using the class SessionTokenStorage."
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Security\\Csrf\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Security Component - CSRF Library",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/security-csrf/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-02T09:53:40+00:00"
-        },
-        {
-            "name": "symfony/security-guard",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/security-guard.git",
-                "reference": "3d68d9f8e162f6655eb0a0237b9f333a82a19da9"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/security-guard/zipball/3d68d9f8e162f6655eb0a0237b9f333a82a19da9",
-                "reference": "3d68d9f8e162f6655eb0a0237b9f333a82a19da9",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-php80": "^1.15",
-                "symfony/security-core": "^5.0",
-                "symfony/security-http": "^5.3"
-            },
-            "require-dev": {
-                "psr/log": "^1|^2|^3"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Security\\Guard\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Security Component - Guard",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/security-guard/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-02T09:53:40+00:00"
-        },
-        {
-            "name": "symfony/security-http",
-            "version": "v5.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/security-http.git",
-                "reference": "53d572f06fc438faae3713cc97d186d941919748"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/security-http/zipball/53d572f06fc438faae3713cc97d186d941919748",
-                "reference": "53d572f06fc438faae3713cc97d186d941919748",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/http-foundation": "^5.3|^6.0",
-                "symfony/http-kernel": "^5.3|^6.0",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/property-access": "^4.4|^5.0|^6.0",
-                "symfony/security-core": "^5.4|^6.0"
-            },
-            "conflict": {
-                "symfony/event-dispatcher": "<4.3",
-                "symfony/security-bundle": "<5.3",
-                "symfony/security-csrf": "<4.4"
-            },
-            "require-dev": {
-                "psr/log": "^1|^2|^3",
-                "symfony/cache": "^4.4|^5.0|^6.0",
-                "symfony/rate-limiter": "^5.2|^6.0",
-                "symfony/routing": "^4.4|^5.0|^6.0",
-                "symfony/security-csrf": "^4.4|^5.0|^6.0",
-                "symfony/translation": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs",
-                "symfony/security-csrf": "For using tokens to protect authentication/logout attempts"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Security\\Http\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Security Component - HTTP Integration",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/security-http/tree/v5.4.5"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-17T20:21:36+00:00"
-        },
-        {
-            "name": "symfony/serializer",
-            "version": "v5.4.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/serializer.git",
-                "reference": "851007ff0781d06d1bf9890069ab19ac1610a027"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/serializer/zipball/851007ff0781d06d1bf9890069ab19ac1610a027",
-                "reference": "851007ff0781d06d1bf9890069ab19ac1610a027",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "conflict": {
-                "doctrine/annotations": "<1.12",
-                "phpdocumentor/reflection-docblock": "<3.2.2",
-                "phpdocumentor/type-resolver": "<1.4.0",
-                "symfony/dependency-injection": "<4.4",
-                "symfony/property-access": "<5.4",
-                "symfony/property-info": "<5.3.13",
-                "symfony/uid": "<5.3",
-                "symfony/yaml": "<4.4"
-            },
-            "require-dev": {
-                "doctrine/annotations": "^1.12",
-                "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0",
-                "symfony/cache": "^4.4|^5.0|^6.0",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/error-handler": "^4.4|^5.0|^6.0",
-                "symfony/filesystem": "^4.4|^5.0|^6.0",
-                "symfony/form": "^4.4|^5.0|^6.0",
-                "symfony/http-foundation": "^4.4|^5.0|^6.0",
-                "symfony/http-kernel": "^4.4|^5.0|^6.0",
-                "symfony/mime": "^4.4|^5.0|^6.0",
-                "symfony/property-access": "^5.4|^6.0",
-                "symfony/property-info": "^5.3.13|^6.0",
-                "symfony/uid": "^5.3|^6.0",
-                "symfony/validator": "^4.4|^5.0|^6.0",
-                "symfony/var-dumper": "^4.4|^5.0|^6.0",
-                "symfony/var-exporter": "^4.4|^5.0|^6.0",
-                "symfony/yaml": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "psr/cache-implementation": "For using the metadata cache.",
-                "symfony/config": "For using the XML mapping loader.",
-                "symfony/mime": "For using a MIME type guesser within the DataUriNormalizer.",
-                "symfony/property-access": "For using the ObjectNormalizer.",
-                "symfony/property-info": "To deserialize relations.",
-                "symfony/var-exporter": "For using the metadata compiler.",
-                "symfony/yaml": "For using the default YAML mapping loader."
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Serializer\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/serializer/tree/v5.4.6"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-02T12:42:23+00:00"
-        },
-        {
-            "name": "symfony/service-contracts",
-            "version": "v2.4.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/service-contracts.git",
-                "reference": "d664541b99d6fb0247ec5ff32e87238582236204"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d664541b99d6fb0247ec5ff32e87238582236204",
-                "reference": "d664541b99d6fb0247ec5ff32e87238582236204",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "psr/container": "^1.1"
-            },
-            "conflict": {
-                "ext-psr": "<1.1|>=2"
-            },
-            "suggest": {
-                "symfony/service-implementation": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "2.4-dev"
-                },
-                "thanks": {
-                    "name": "symfony/contracts",
-                    "url": "https://github.com/symfony/contracts"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Contracts\\Service\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Generic abstractions related to writing services",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "abstractions",
-                "contracts",
-                "decoupling",
-                "interfaces",
-                "interoperability",
-                "standards"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/service-contracts/tree/v2.4.1"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-11-04T16:37:19+00:00"
-        },
-        {
-            "name": "symfony/stopwatch",
-            "version": "v5.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/4d04b5c24f3c9a1a168a131f6cbe297155bc0d30",
-                "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/service-contracts": "^1|^2|^3"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Stopwatch\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides a way to profile code",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/stopwatch/tree/v5.4.5"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-18T16:06:09+00:00"
-        },
-        {
-            "name": "symfony/string",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/string.git",
-                "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10",
-                "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-intl-grapheme": "~1.0",
-                "symfony/polyfill-intl-normalizer": "~1.0",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php80": "~1.15"
-            },
-            "conflict": {
-                "symfony/translation-contracts": ">=3.0"
-            },
-            "require-dev": {
-                "symfony/error-handler": "^4.4|^5.0|^6.0",
-                "symfony/http-client": "^4.4|^5.0|^6.0",
-                "symfony/translation-contracts": "^1.1|^2",
-                "symfony/var-exporter": "^4.4|^5.0|^6.0"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "Resources/functions.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Component\\String\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "grapheme",
-                "i18n",
-                "string",
-                "unicode",
-                "utf-8",
-                "utf8"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/string/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-02T09:53:40+00:00"
-        },
-        {
-            "name": "symfony/translation",
-            "version": "v5.4.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/translation.git",
-                "reference": "a7ca9fdfffb0174209440c2ffa1dee228e15d95b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation/zipball/a7ca9fdfffb0174209440c2ffa1dee228e15d95b",
-                "reference": "a7ca9fdfffb0174209440c2ffa1dee228e15d95b",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/translation-contracts": "^2.3"
-            },
-            "conflict": {
-                "symfony/config": "<4.4",
-                "symfony/console": "<5.3",
-                "symfony/dependency-injection": "<5.0",
-                "symfony/http-kernel": "<5.0",
-                "symfony/twig-bundle": "<5.0",
-                "symfony/yaml": "<4.4"
-            },
-            "provide": {
-                "symfony/translation-implementation": "2.3"
-            },
-            "require-dev": {
-                "psr/log": "^1|^2|^3",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/console": "^5.4|^6.0",
-                "symfony/dependency-injection": "^5.0|^6.0",
-                "symfony/finder": "^4.4|^5.0|^6.0",
-                "symfony/http-client-contracts": "^1.1|^2.0|^3.0",
-                "symfony/http-kernel": "^5.0|^6.0",
-                "symfony/intl": "^4.4|^5.0|^6.0",
-                "symfony/polyfill-intl-icu": "^1.21",
-                "symfony/service-contracts": "^1.1.2|^2|^3",
-                "symfony/yaml": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "psr/log-implementation": "To use logging capability in translator",
-                "symfony/config": "",
-                "symfony/yaml": ""
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "Resources/functions.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Component\\Translation\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides tools to internationalize your application",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/translation/tree/v5.4.6"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-02T12:56:28+00:00"
-        },
-        {
-            "name": "symfony/translation-contracts",
-            "version": "v2.5.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/translation-contracts.git",
-                "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/d28150f0f44ce854e942b671fc2620a98aae1b1e",
-                "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5"
-            },
-            "suggest": {
-                "symfony/translation-implementation": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "2.5-dev"
-                },
-                "thanks": {
-                    "name": "symfony/contracts",
-                    "url": "https://github.com/symfony/contracts"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Contracts\\Translation\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Generic abstractions related to translation",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "abstractions",
-                "contracts",
-                "decoupling",
-                "interfaces",
-                "interoperability",
-                "standards"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/translation-contracts/tree/v2.5.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-08-17T14:20:01+00:00"
-        },
-        {
-            "name": "symfony/twig-bridge",
-            "version": "v5.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/twig-bridge.git",
-                "reference": "648c8694a9470ae4aaf64cbce1b640f5941fd7c9"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/648c8694a9470ae4aaf64cbce1b640f5941fd7c9",
-                "reference": "648c8694a9470ae4aaf64cbce1b640f5941fd7c9",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/translation-contracts": "^1.1|^2|^3",
-                "twig/twig": "^2.13|^3.0.4"
-            },
-            "conflict": {
-                "phpdocumentor/reflection-docblock": "<3.2.2",
-                "phpdocumentor/type-resolver": "<1.4.0",
-                "symfony/console": "<5.3",
-                "symfony/form": "<5.3",
-                "symfony/http-foundation": "<5.3",
-                "symfony/http-kernel": "<4.4",
-                "symfony/translation": "<5.2",
-                "symfony/workflow": "<5.2"
-            },
-            "require-dev": {
-                "doctrine/annotations": "^1.12",
-                "egulias/email-validator": "^2.1.10|^3",
-                "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
-                "symfony/asset": "^4.4|^5.0|^6.0",
-                "symfony/console": "^5.3|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/expression-language": "^4.4|^5.0|^6.0",
-                "symfony/finder": "^4.4|^5.0|^6.0",
-                "symfony/form": "^5.3|^6.0",
-                "symfony/http-foundation": "^5.3|^6.0",
-                "symfony/http-kernel": "^4.4|^5.0|^6.0",
-                "symfony/intl": "^4.4|^5.0|^6.0",
-                "symfony/mime": "^5.2|^6.0",
-                "symfony/polyfill-intl-icu": "~1.0",
-                "symfony/property-info": "^4.4|^5.1|^6.0",
-                "symfony/routing": "^4.4|^5.0|^6.0",
-                "symfony/security-acl": "^2.8|^3.0",
-                "symfony/security-core": "^4.4|^5.0|^6.0",
-                "symfony/security-csrf": "^4.4|^5.0|^6.0",
-                "symfony/security-http": "^4.4|^5.0|^6.0",
-                "symfony/serializer": "^5.2|^6.0",
-                "symfony/stopwatch": "^4.4|^5.0|^6.0",
-                "symfony/translation": "^5.2|^6.0",
-                "symfony/web-link": "^4.4|^5.0|^6.0",
-                "symfony/workflow": "^5.2|^6.0",
-                "symfony/yaml": "^4.4|^5.0|^6.0",
-                "twig/cssinliner-extra": "^2.12|^3",
-                "twig/inky-extra": "^2.12|^3",
-                "twig/markdown-extra": "^2.12|^3"
-            },
-            "suggest": {
-                "symfony/asset": "For using the AssetExtension",
-                "symfony/expression-language": "For using the ExpressionExtension",
-                "symfony/finder": "",
-                "symfony/form": "For using the FormExtension",
-                "symfony/http-kernel": "For using the HttpKernelExtension",
-                "symfony/routing": "For using the RoutingExtension",
-                "symfony/security-core": "For using the SecurityExtension",
-                "symfony/security-csrf": "For using the CsrfExtension",
-                "symfony/security-http": "For using the LogoutUrlExtension",
-                "symfony/stopwatch": "For using the StopwatchExtension",
-                "symfony/translation": "For using the TranslationExtension",
-                "symfony/var-dumper": "For using the DumpExtension",
-                "symfony/web-link": "For using the WebLinkExtension",
-                "symfony/yaml": "For using the YamlExtension"
-            },
-            "type": "symfony-bridge",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Bridge\\Twig\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides integration for Twig with various Symfony components",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/twig-bridge/tree/v5.4.5"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-09T08:59:58+00:00"
-        },
-        {
-            "name": "symfony/twig-bundle",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/twig-bundle.git",
-                "reference": "45ae3ee8155f93042a1033b166a7a3ed57b96a92"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/45ae3ee8155f93042a1033b166a7a3ed57b96a92",
-                "reference": "45ae3ee8155f93042a1033b166a7a3ed57b96a92",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/http-foundation": "^4.4|^5.0|^6.0",
-                "symfony/http-kernel": "^5.0|^6.0",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/twig-bridge": "^5.3|^6.0",
-                "twig/twig": "^2.13|^3.0.4"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<5.3",
-                "symfony/framework-bundle": "<5.0",
-                "symfony/service-contracts": ">=3.0",
-                "symfony/translation": "<5.0"
-            },
-            "require-dev": {
-                "doctrine/annotations": "^1.10.4",
-                "doctrine/cache": "^1.0|^2.0",
-                "symfony/asset": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^5.3|^6.0",
-                "symfony/expression-language": "^4.4|^5.0|^6.0",
-                "symfony/finder": "^4.4|^5.0|^6.0",
-                "symfony/form": "^4.4|^5.0|^6.0",
-                "symfony/framework-bundle": "^5.0|^6.0",
-                "symfony/routing": "^4.4|^5.0|^6.0",
-                "symfony/stopwatch": "^4.4|^5.0|^6.0",
-                "symfony/translation": "^5.0|^6.0",
-                "symfony/web-link": "^4.4|^5.0|^6.0",
-                "symfony/yaml": "^4.4|^5.0|^6.0"
-            },
-            "type": "symfony-bundle",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Bundle\\TwigBundle\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides a tight integration of Twig into the Symfony full-stack framework",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/twig-bundle/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-02T09:53:40+00:00"
-        },
-        {
-            "name": "symfony/validator",
-            "version": "v5.4.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/validator.git",
-                "reference": "ab461eab209e3be062ba9c609d37b37e8364dbe4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/validator/zipball/ab461eab209e3be062ba9c609d37b37e8364dbe4",
-                "reference": "ab461eab209e3be062ba9c609d37b37e8364dbe4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php73": "~1.0",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/polyfill-php81": "^1.22",
-                "symfony/translation-contracts": "^1.1|^2|^3"
-            },
-            "conflict": {
-                "doctrine/annotations": "<1.13",
-                "doctrine/cache": "<1.11",
-                "doctrine/lexer": "<1.1",
-                "phpunit/phpunit": "<5.4.3",
-                "symfony/dependency-injection": "<4.4",
-                "symfony/expression-language": "<5.1",
-                "symfony/http-kernel": "<4.4",
-                "symfony/intl": "<4.4",
-                "symfony/property-info": "<5.3",
-                "symfony/translation": "<4.4",
-                "symfony/yaml": "<4.4"
-            },
-            "require-dev": {
-                "doctrine/annotations": "^1.13",
-                "doctrine/cache": "^1.11|^2.0",
-                "egulias/email-validator": "^2.1.10|^3",
-                "symfony/cache": "^4.4|^5.0|^6.0",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/console": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/expression-language": "^5.1|^6.0",
-                "symfony/finder": "^4.4|^5.0|^6.0",
-                "symfony/http-client": "^4.4|^5.0|^6.0",
-                "symfony/http-foundation": "^4.4|^5.0|^6.0",
-                "symfony/http-kernel": "^4.4|^5.0|^6.0",
-                "symfony/intl": "^4.4|^5.0|^6.0",
-                "symfony/mime": "^4.4|^5.0|^6.0",
-                "symfony/property-access": "^4.4|^5.0|^6.0",
-                "symfony/property-info": "^5.3|^6.0",
-                "symfony/translation": "^4.4|^5.0|^6.0",
-                "symfony/yaml": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "egulias/email-validator": "Strict (RFC compliant) email validation",
-                "psr/cache-implementation": "For using the mapping cache.",
-                "symfony/config": "",
-                "symfony/expression-language": "For using the Expression validator and the ExpressionLanguageSyntax constraints",
-                "symfony/http-foundation": "",
-                "symfony/intl": "",
-                "symfony/property-access": "For accessing properties within comparison constraints",
-                "symfony/property-info": "To automatically add NotNull and Type constraints",
-                "symfony/translation": "For translating validation errors.",
-                "symfony/yaml": ""
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Validator\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides tools to validate values",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/validator/tree/v5.4.6"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-02T12:42:23+00:00"
-        },
-        {
-            "name": "symfony/var-dumper",
-            "version": "v5.4.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/294e9da6e2e0dd404e983daa5aa74253d92c05d0",
-                "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "conflict": {
-                "phpunit/phpunit": "<5.4.3",
-                "symfony/console": "<4.4"
-            },
-            "require-dev": {
-                "ext-iconv": "*",
-                "symfony/console": "^4.4|^5.0|^6.0",
-                "symfony/process": "^4.4|^5.0|^6.0",
-                "symfony/uid": "^5.1|^6.0",
-                "twig/twig": "^2.13|^3.0.4"
-            },
-            "suggest": {
-                "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
-                "ext-intl": "To show region name in time zone dump",
-                "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
-            },
-            "bin": [
-                "Resources/bin/var-dump-server"
-            ],
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "Resources/functions/dump.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Component\\VarDumper\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides mechanisms for walking through any arbitrary PHP variable",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "debug",
-                "dump"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/var-dumper/tree/v5.4.6"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-02T12:42:23+00:00"
-        },
-        {
-            "name": "symfony/var-exporter",
-            "version": "v5.4.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/var-exporter.git",
-                "reference": "49e2355fe6f59ea30c18ebb68edf13b7e20582e5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-exporter/zipball/49e2355fe6f59ea30c18ebb68edf13b7e20582e5",
-                "reference": "49e2355fe6f59ea30c18ebb68edf13b7e20582e5",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "require-dev": {
-                "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\VarExporter\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Allows exporting any serializable PHP data structure to plain PHP code",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "clone",
-                "construct",
-                "export",
-                "hydrate",
-                "instantiate",
-                "serialize"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/var-exporter/tree/v5.4.6"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-03-02T12:42:23+00:00"
-        },
-        {
-            "name": "symfony/web-link",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/web-link.git",
-                "reference": "8b9b073390359549fec5f5d797f23bbe9e2997a5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/web-link/zipball/8b9b073390359549fec5f5d797f23bbe9e2997a5",
-                "reference": "8b9b073390359549fec5f5d797f23bbe9e2997a5",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "psr/link": "^1.0",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "conflict": {
-                "symfony/http-kernel": "<5.3"
-            },
-            "provide": {
-                "psr/link-implementation": "1.0"
-            },
-            "require-dev": {
-                "symfony/http-kernel": "^5.3|^6.0"
-            },
-            "suggest": {
-                "symfony/http-kernel": ""
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\WebLink\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Kévin Dunglas",
-                    "email": "dunglas@gmail.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Manages links between resources",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "dns-prefetch",
-                "http",
-                "http2",
-                "link",
-                "performance",
-                "prefetch",
-                "preload",
-                "prerender",
-                "psr13",
-                "push"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/web-link/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-02T09:53:40+00:00"
-        },
-        {
-            "name": "symfony/yaml",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/yaml.git",
-                "reference": "e80f87d2c9495966768310fc531b487ce64237a2"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2",
-                "reference": "e80f87d2c9495966768310fc531b487ce64237a2",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-ctype": "^1.8"
-            },
-            "conflict": {
-                "symfony/console": "<5.3"
-            },
-            "require-dev": {
-                "symfony/console": "^5.3|^6.0"
-            },
-            "suggest": {
-                "symfony/console": "For validating YAML files using the lint command"
-            },
-            "bin": [
-                "Resources/bin/yaml-lint"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Yaml\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Loads and dumps YAML files",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/yaml/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-26T16:32:32+00:00"
-        },
-        {
-            "name": "twig/twig",
-            "version": "v3.3.8",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/twigphp/Twig.git",
-                "reference": "972d8604a92b7054828b539f2febb0211dd5945c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/Twig/zipball/972d8604a92b7054828b539f2febb0211dd5945c",
-                "reference": "972d8604a92b7054828b539f2febb0211dd5945c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-ctype": "^1.8",
-                "symfony/polyfill-mbstring": "^1.3"
-            },
-            "require-dev": {
-                "psr/container": "^1.0",
-                "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.3-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Twig\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com",
-                    "homepage": "http://fabien.potencier.org",
-                    "role": "Lead Developer"
-                },
-                {
-                    "name": "Twig Team",
-                    "role": "Contributors"
-                },
-                {
-                    "name": "Armin Ronacher",
-                    "email": "armin.ronacher@active-4.com",
-                    "role": "Project Founder"
-                }
-            ],
-            "description": "Twig, the flexible, fast, and secure template language for PHP",
-            "homepage": "https://twig.symfony.com",
-            "keywords": [
-                "templating"
-            ],
-            "support": {
-                "issues": "https://github.com/twigphp/Twig/issues",
-                "source": "https://github.com/twigphp/Twig/tree/v3.3.8"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/twig/twig",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-04T06:59:48+00:00"
-        },
-        {
-            "name": "vincent/foselastica",
-            "version": "1.2",
-            "source": {
-                "type": "git",
-                "url": "ssh://git@gitlab.2iopenservice.com/vincent/foselastica.git",
-                "reference": "3b9437629eb3a31700f08ed7dfcb5b52ad343b13"
-            },
-            "require": {
-                "ruflin/elastica": "3.2.*"
-            },
-            "require-dev": {
-                "doctrine/doctrine-bundle": "~1.6",
-                "doctrine/orm": "~2.4",
-                "doctrine/phpcr-bundle": "~1.2",
-                "jackalope/jackalope-doctrine-dbal": "~1.1",
-                "jms/serializer-bundle": "~1.1",
-                "knplabs/knp-components": "~1.2",
-                "knplabs/knp-paginator-bundle": "~2.4",
-                "pagerfanta/pagerfanta": "~1.0",
-                "phpunit/phpunit": "~4.8|~5.0",
-                "propel/propel1": "1.6.*",
-                "symfony/browser-kit": "~2.7|~3.0",
-                "symfony/dependency-injection": "~2.7|~3.0",
-                "symfony/expression-language": "~2.7|~3.0",
-                "symfony/serializer": "~2.7|~3.0",
-                "symfony/twig-bundle": "~2.7|~3.0",
-                "symfony/yaml": "~2.7|~3.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "FOS\\ElasticaBundle\\": ""
-                }
-            },
-            "time": "2021-01-04T12:37:42+00:00"
-        },
-        {
-            "name": "webfactory/phumbor",
-            "version": "1.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/webfactory/phumbor.git",
-                "reference": "b91be204f7f1aff82ac1b8d89321cdcdb16ba6ed"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/webfactory/phumbor/zipball/b91be204f7f1aff82ac1b8d89321cdcdb16ba6ed",
-                "reference": "b91be204f7f1aff82ac1b8d89321cdcdb16ba6ed",
-                "shasum": ""
-            },
-            "replace": {
-                "99designs/phumbor": "*"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8|^5.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "Thumbor": "lib"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Stuart Campbell",
-                    "email": "stuart.campbell@99designs.com"
-                },
-                {
-                    "name": "webfactory GmbH",
-                    "email": "info@webfactory.de"
-                }
-            ],
-            "description": "A minimal Thumbor library for PHP",
-            "homepage": "https://github.com/webfactory/phumbor",
-            "keywords": [
-                "Thumbnails",
-                "php",
-                "thumbor",
-                "webfactory"
-            ],
-            "support": {
-                "source": "https://github.com/webfactory/phumbor/tree/1.3.0"
-            },
-            "time": "2020-12-12T16:12:01+00:00"
-        },
-        {
-            "name": "webmozart/assert",
-            "version": "1.10.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/webmozarts/assert.git",
-                "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
-                "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.2 || ^8.0",
-                "symfony/polyfill-ctype": "^1.8"
-            },
-            "conflict": {
-                "phpstan/phpstan": "<0.12.20",
-                "vimeo/psalm": "<4.6.1 || 4.6.2"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^8.5.13"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.10-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Webmozart\\Assert\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@gmail.com"
-                }
-            ],
-            "description": "Assertions to validate method input/output with nice error messages.",
-            "keywords": [
-                "assert",
-                "check",
-                "validate"
-            ],
-            "support": {
-                "issues": "https://github.com/webmozarts/assert/issues",
-                "source": "https://github.com/webmozarts/assert/tree/1.10.0"
-            },
-            "time": "2021-03-09T10:59:23+00:00"
-        },
-        {
-            "name": "webonyx/graphql-php",
-            "version": "v14.11.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/webonyx/graphql-php.git",
-                "reference": "ffa431c0821821839370a68dab3c2597c06bf7f0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/ffa431c0821821839370a68dab3c2597c06bf7f0",
-                "reference": "ffa431c0821821839370a68dab3c2597c06bf7f0",
-                "shasum": ""
-            },
-            "require": {
-                "ext-json": "*",
-                "ext-mbstring": "*",
-                "php": "^7.1 || ^8"
-            },
-            "require-dev": {
-                "amphp/amp": "^2.3",
-                "doctrine/coding-standard": "^6.0",
-                "nyholm/psr7": "^1.2",
-                "phpbench/phpbench": "^1.2",
-                "phpstan/extension-installer": "^1.0",
-                "phpstan/phpstan": "0.12.82",
-                "phpstan/phpstan-phpunit": "0.12.18",
-                "phpstan/phpstan-strict-rules": "0.12.9",
-                "phpunit/phpunit": "^7.2 || ^8.5",
-                "psr/http-message": "^1.0",
-                "react/promise": "2.*",
-                "simpod/php-coveralls-mirror": "^3.0",
-                "squizlabs/php_codesniffer": "3.5.4"
-            },
-            "suggest": {
-                "psr/http-message": "To use standard GraphQL server",
-                "react/promise": "To leverage async resolving on React PHP platform"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "GraphQL\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "A PHP port of GraphQL reference implementation",
-            "homepage": "https://github.com/webonyx/graphql-php",
-            "keywords": [
-                "api",
-                "graphql"
-            ],
-            "support": {
-                "issues": "https://github.com/webonyx/graphql-php/issues",
-                "source": "https://github.com/webonyx/graphql-php/tree/v14.11.5"
-            },
-            "funding": [
-                {
-                    "url": "https://opencollective.com/webonyx-graphql-php",
-                    "type": "open_collective"
-                }
-            ],
-            "time": "2022-01-24T11:13:31+00:00"
-        },
-        {
-            "name": "willdurand/negotiation",
-            "version": "3.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/willdurand/Negotiation.git",
-                "reference": "68e9ea0553ef6e2ee8db5c1d98829f111e623ec2"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/willdurand/Negotiation/zipball/68e9ea0553ef6e2ee8db5c1d98829f111e623ec2",
-                "reference": "68e9ea0553ef6e2ee8db5c1d98829f111e623ec2",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1.0"
-            },
-            "require-dev": {
-                "symfony/phpunit-bridge": "^5.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Negotiation\\": "src/Negotiation"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "William Durand",
-                    "email": "will+git@drnd.me"
-                }
-            ],
-            "description": "Content Negotiation tools for PHP provided as a standalone library.",
-            "homepage": "http://williamdurand.fr/Negotiation/",
-            "keywords": [
-                "accept",
-                "content",
-                "format",
-                "header",
-                "negotiation"
-            ],
-            "support": {
-                "issues": "https://github.com/willdurand/Negotiation/issues",
-                "source": "https://github.com/willdurand/Negotiation/tree/3.1.0"
-            },
-            "time": "2022-01-30T20:08:53+00:00"
-        }
-    ],
-    "packages-dev": [
-        {
-            "name": "cyclonedx/cyclonedx-library",
-            "version": "v1.5.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/CycloneDX/cyclonedx-php-library.git",
-                "reference": "f41632e1d47001700ef93fa899e6dc49779aa784"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/CycloneDX/cyclonedx-php-library/zipball/f41632e1d47001700ef93fa899e6dc49779aa784",
-                "reference": "f41632e1d47001700ef93fa899e6dc49779aa784",
-                "shasum": ""
-            },
-            "require": {
-                "ext-dom": "*",
-                "ext-json": "*",
-                "ext-libxml": "*",
-                "package-url/packageurl-php": "^1.0",
-                "php": "^7.3 || ^8.0",
-                "swaggest/json-schema": "^0.12.35"
-            },
-            "require-dev": {
-                "ext-simplexml": "*",
-                "phpunit/phpunit": "9.5.16",
-                "roave/security-advisories": "dev-latest"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                },
-                "composer-normalize": {
-                    "indent-size": 4,
-                    "indent-style": "space"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "CycloneDX\\Core\\": "src/Core/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "nscuro",
-                    "email": "nscuro@protonmail.com",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Jan Kowalleck",
-                    "email": "jan.kowalleck@gmail.com",
-                    "role": "Developer"
-                }
-            ],
-            "description": "Work with CycloneDX Software Bill-of-Materials (SBOM)",
-            "homepage": "https://github.com/CycloneDX/cyclonedx-php-library/",
-            "keywords": [
-                "CycloneDX",
-                "SBOM",
-                "bill-of-materials",
-                "bom",
-                "package-url",
-                "purl",
-                "software-bill-of-materials"
-            ],
-            "support": {
-                "issues": "https://github.com/CycloneDX/cyclonedx-php-library/issues",
-                "source": "https://github.com/CycloneDX/cyclonedx-php-library/tree/v1.5.0"
-            },
-            "time": "2022-03-07T23:02:11+00:00"
-        },
-        {
-            "name": "cyclonedx/cyclonedx-php-composer",
-            "version": "v3.9.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/CycloneDX/cyclonedx-php-composer.git",
-                "reference": "6f4056e436198face62b3065ba95ac46831a775b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/CycloneDX/cyclonedx-php-composer/zipball/6f4056e436198face62b3065ba95ac46831a775b",
-                "reference": "6f4056e436198face62b3065ba95ac46831a775b",
-                "shasum": ""
-            },
-            "require": {
-                "composer-plugin-api": "^2.0",
-                "cyclonedx/cyclonedx-library": "^1.3.1",
-                "package-url/packageurl-php": "^1.0",
-                "php": "^7.3 || ^8.0"
-            },
-            "require-dev": {
-                "composer/composer": "^2.0.0",
-                "phpunit/phpunit": "9.5.10",
-                "roave/security-advisories": "dev-latest"
-            },
-            "type": "composer-plugin",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.x-dev"
-                },
-                "class": "CycloneDX\\Composer\\Plugin",
-                "composer-normalize": {
-                    "indent-size": 4,
-                    "indent-style": "space"
-                },
-                "unused": [
-                    "composer-plugin-api"
-                ]
-            },
-            "autoload": {
-                "psr-4": {
-                    "CycloneDX\\Composer\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "nscuro",
-                    "email": "nscuro@protonmail.com",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Jan Kowalleck",
-                    "email": "jan.kowalleck@gmail.com",
-                    "role": "Developer"
-                }
-            ],
-            "description": "Creates CycloneDX Software Bill-of-Materials (SBOM) from PHP Composer projects",
-            "homepage": "https://github.com/CycloneDX/cyclonedx-php-composer/",
-            "keywords": [
-                "CycloneDX",
-                "SBOM",
-                "bill-of-materials",
-                "bom",
-                "package-url",
-                "purl",
-                "software-bill-of-materials"
-            ],
-            "support": {
-                "issues": "https://github.com/CycloneDX/cyclonedx-php-composer/issues",
-                "source": "https://github.com/CycloneDX/cyclonedx-php-composer/tree/v3.9.2"
-            },
-            "time": "2021-12-04T07:54:01+00:00"
-        },
-        {
-            "name": "nikic/php-parser",
-            "version": "v4.13.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "210577fe3cf7badcc5814d99455df46564f3c077"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077",
-                "reference": "210577fe3cf7badcc5814d99455df46564f3c077",
-                "shasum": ""
-            },
-            "require": {
-                "ext-tokenizer": "*",
-                "php": ">=7.0"
-            },
-            "require-dev": {
-                "ircmaxell/php-yacc": "^0.0.7",
-                "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
-            },
-            "bin": [
-                "bin/php-parse"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.9-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "PhpParser\\": "lib/PhpParser"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Nikita Popov"
-                }
-            ],
-            "description": "A PHP parser written in PHP",
-            "keywords": [
-                "parser",
-                "php"
-            ],
-            "support": {
-                "issues": "https://github.com/nikic/PHP-Parser/issues",
-                "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2"
-            },
-            "time": "2021-11-30T19:35:32+00:00"
-        },
-        {
-            "name": "package-url/packageurl-php",
-            "version": "1.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/package-url/packageurl-php.git",
-                "reference": "c45953babed516d27a0cf6c1a2d9f7e883ce214f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/package-url/packageurl-php/zipball/c45953babed516d27a0cf6c1a2d9f7e883ce214f",
-                "reference": "c45953babed516d27a0cf6c1a2d9f7e883ce214f",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3 || ^8.0"
-            },
-            "require-dev": {
-                "ext-json": "*",
-                "phpunit/phpunit": "9.5.11",
-                "roave/security-advisories": "dev-latest"
-            },
-            "type": "library",
-            "extra": {
-                "composer-normalize": {
-                    "indent-size": 4,
-                    "indent-style": "space"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "PackageUrl\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jan Kowalleck",
-                    "role": "Developer"
-                }
-            ],
-            "description": "A parser and builder based on the package url spec.",
-            "homepage": "https://github.com/package-url/packageurl-php",
-            "keywords": [
-                "package",
-                "package-url",
-                "packageurl",
-                "purl",
-                "url"
-            ],
-            "support": {
-                "issues": "https://github.com/package-url/packageurl-php/issues",
-                "source": "https://github.com/package-url/packageurl-php/tree/1.0.4"
-            },
-            "time": "2022-01-04T14:39:41+00:00"
-        },
-        {
-            "name": "phplang/scope-exit",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phplang/scope-exit.git",
-                "reference": "239b73abe89f9414aa85a7ca075ec9445629192b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phplang/scope-exit/zipball/239b73abe89f9414aa85a7ca075ec9445629192b",
-                "reference": "239b73abe89f9414aa85a7ca075ec9445629192b",
-                "shasum": ""
-            },
-            "require-dev": {
-                "phpunit/phpunit": "*"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "PhpLang\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD"
-            ],
-            "authors": [
-                {
-                    "name": "Sara Golemon",
-                    "email": "pollita@php.net",
-                    "homepage": "https://twitter.com/SaraMG",
-                    "role": "Developer"
-                }
-            ],
-            "description": "Emulation of SCOPE_EXIT construct from C++",
-            "homepage": "https://github.com/phplang/scope-exit",
-            "keywords": [
-                "cleanup",
-                "exit",
-                "scope"
-            ],
-            "support": {
-                "issues": "https://github.com/phplang/scope-exit/issues",
-                "source": "https://github.com/phplang/scope-exit/tree/master"
-            },
-            "time": "2016-09-17T00:15:18+00:00"
-        },
-        {
-            "name": "swaggest/json-diff",
-            "version": "v3.8.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/swaggest/json-diff.git",
-                "reference": "bb3e3b4e9d842bb2e48f31ea568d0459968d1d42"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/swaggest/json-diff/zipball/bb3e3b4e9d842bb2e48f31ea568d0459968d1d42",
-                "reference": "bb3e3b4e9d842bb2e48f31ea568d0459968d1d42",
-                "shasum": ""
-            },
-            "require": {
-                "ext-json": "*"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.23"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Swaggest\\JsonDiff\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Viacheslav Poturaev",
-                    "email": "vearutop@gmail.com"
-                }
-            ],
-            "description": "JSON diff/rearrange/patch/pointer library for PHP",
-            "support": {
-                "issues": "https://github.com/swaggest/json-diff/issues",
-                "source": "https://github.com/swaggest/json-diff/tree/v3.8.3"
-            },
-            "time": "2021-09-25T22:09:03+00:00"
-        },
-        {
-            "name": "swaggest/json-schema",
-            "version": "v0.12.39",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/swaggest/php-json-schema.git",
-                "reference": "193ba39cce1ffa2d55ddd5445315e945a63298a2"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/swaggest/php-json-schema/zipball/193ba39cce1ffa2d55ddd5445315e945a63298a2",
-                "reference": "193ba39cce1ffa2d55ddd5445315e945a63298a2",
-                "shasum": ""
-            },
-            "require": {
-                "ext-json": "*",
-                "php": ">=5.4",
-                "phplang/scope-exit": "^1.0",
-                "swaggest/json-diff": "^3.8.2",
-                "symfony/polyfill-mbstring": "^1.19"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.23"
-            },
-            "suggest": {
-                "ext-mbstring": "For better performance"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Swaggest\\JsonSchema\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Viacheslav Poturaev",
-                    "email": "vearutop@gmail.com"
-                }
-            ],
-            "description": "High definition PHP structures with JSON-schema based validation",
-            "support": {
-                "email": "vearutop@gmail.com",
-                "issues": "https://github.com/swaggest/php-json-schema/issues",
-                "source": "https://github.com/swaggest/php-json-schema/tree/v0.12.39"
-            },
-            "time": "2021-10-15T18:12:27+00:00"
-        },
-        {
-            "name": "symfony/debug-bundle",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/debug-bundle.git",
-                "reference": "6f508169752ed2c0d0d8a6641c4cca39a8f1dfcb"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/6f508169752ed2c0d0d8a6641c4cca39a8f1dfcb",
-                "reference": "6f508169752ed2c0d0d8a6641c4cca39a8f1dfcb",
-                "shasum": ""
-            },
-            "require": {
-                "ext-xml": "*",
-                "php": ">=7.2.5",
-                "symfony/http-kernel": "^4.4|^5.0|^6.0",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/twig-bridge": "^4.4|^5.0|^6.0",
-                "symfony/var-dumper": "^4.4|^5.0|^6.0"
-            },
-            "conflict": {
-                "symfony/config": "<4.4",
-                "symfony/dependency-injection": "<5.2"
-            },
-            "require-dev": {
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/web-profiler-bundle": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "symfony/config": "For service container configuration",
-                "symfony/dependency-injection": "For using as a service from the container"
-            },
-            "type": "symfony-bundle",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Bundle\\DebugBundle\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/debug-bundle/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-02T09:53:40+00:00"
-        },
-        {
-            "name": "symfony/maker-bundle",
-            "version": "v1.38.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/maker-bundle.git",
-                "reference": "143024ab0e426285d3d9b7f6a3ce51e12a9d8ec5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/143024ab0e426285d3d9b7f6a3ce51e12a9d8ec5",
-                "reference": "143024ab0e426285d3d9b7f6a3ce51e12a9d8ec5",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/inflector": "^1.2|^2.0",
-                "nikic/php-parser": "^4.11",
-                "php": ">=7.1.3",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/console": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/deprecation-contracts": "^2.2|^3",
-                "symfony/filesystem": "^4.4|^5.0|^6.0",
-                "symfony/finder": "^4.4|^5.0|^6.0",
-                "symfony/framework-bundle": "^4.4|^5.0|^6.0",
-                "symfony/http-kernel": "^4.4|^5.0|^6.0"
-            },
-            "require-dev": {
-                "composer/semver": "^3.0",
-                "doctrine/doctrine-bundle": "^1.12.3|^2.0",
-                "doctrine/orm": "^2.3",
-                "symfony/http-client": "^4.4|^5.0|^6.0",
-                "symfony/phpunit-bridge": "^4.4|^5.0|^6.0",
-                "symfony/polyfill-php80": "^1.16.0",
-                "symfony/process": "^4.4|^5.0|^6.0",
-                "symfony/security-core": "^4.4|^5.0|^6.0",
-                "symfony/yaml": "^4.4|^5.0|^6.0",
-                "twig/twig": "^2.0|^3.0"
-            },
-            "type": "symfony-bundle",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Bundle\\MakerBundle\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.",
-            "homepage": "https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html",
-            "keywords": [
-                "code generator",
-                "generator",
-                "scaffold",
-                "scaffolding"
-            ],
-            "support": {
-                "issues": "https://github.com/symfony/maker-bundle/issues",
-                "source": "https://github.com/symfony/maker-bundle/tree/v1.38.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-24T21:06:51+00:00"
-        },
-        {
-            "name": "symfony/phpunit-bridge",
-            "version": "v5.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/phpunit-bridge.git",
-                "reference": "216b07b05644607c81afd89a208e52641c1ce6b8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/216b07b05644607c81afd89a208e52641c1ce6b8",
-                "reference": "216b07b05644607c81afd89a208e52641c1ce6b8",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1.3",
-                "symfony/deprecation-contracts": "^2.1|^3"
-            },
-            "conflict": {
-                "phpunit/phpunit": "<7.5|9.1.2"
-            },
-            "require-dev": {
-                "symfony/error-handler": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "symfony/error-handler": "For tracking deprecated interfaces usages at runtime with DebugClassLoader"
-            },
-            "bin": [
-                "bin/simple-phpunit"
-            ],
-            "type": "symfony-bridge",
-            "extra": {
-                "thanks": {
-                    "name": "phpunit/phpunit",
-                    "url": "https://github.com/sebastianbergmann/phpunit"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Bridge\\PhpUnit\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides utilities for PHPUnit, especially user deprecation notices management",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/phpunit-bridge/tree/v5.4.3"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-26T16:28:35+00:00"
-        },
-        {
-            "name": "symfony/web-profiler-bundle",
-            "version": "v5.4.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/web-profiler-bundle.git",
-                "reference": "1497b1d22c2807a77563439f8ec489407a989d59"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/1497b1d22c2807a77563439f8ec489407a989d59",
-                "reference": "1497b1d22c2807a77563439f8ec489407a989d59",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/framework-bundle": "^5.3|^6.0",
-                "symfony/http-kernel": "^5.3|^6.0",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/routing": "^4.4|^5.0|^6.0",
-                "symfony/twig-bundle": "^4.4|^5.0|^6.0",
-                "twig/twig": "^2.13|^3.0.4"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<5.2",
-                "symfony/form": "<4.4",
-                "symfony/mailer": "<5.4",
-                "symfony/messenger": "<4.4"
-            },
-            "require-dev": {
-                "symfony/browser-kit": "^4.4|^5.0|^6.0",
-                "symfony/console": "^4.4|^5.0|^6.0",
-                "symfony/css-selector": "^4.4|^5.0|^6.0",
-                "symfony/stopwatch": "^4.4|^5.0|^6.0"
-            },
-            "type": "symfony-bundle",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Bundle\\WebProfilerBundle\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides a development tool that gives detailed information about the execution of any request",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.6"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-28T15:47:42+00:00"
-        }
-    ],
-    "aliases": [],
-    "minimum-stability": "stable",
-    "stability-flags": [],
-    "prefer-stable": false,
-    "prefer-lowest": false,
-    "platform": {
-        "php": ">=8.0",
-        "ext-ctype": "*",
-        "ext-iconv": "*"
-    },
-    "platform-dev": [],
-    "plugin-api-version": "2.2.0"
-}

+ 0 - 4
config/api_platform/Access/access.yaml

@@ -7,10 +7,6 @@ App\Entity\Access\Access:
       path: '/students'
       security: 'is_granted("ROLE_USERS_VIEW")'
 
-    cget_admin:
-      method: GET
-      path: '/admin'
-
     cget_access_person_ref:
       method: GET
       path: '/access_people'

+ 6 - 3
config/bundles.php

@@ -3,7 +3,7 @@
 return [
     Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
     Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
-    Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
+    Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['docker' => true, 'test' => true],
     Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true],
     Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true],
     Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true],
@@ -12,10 +12,13 @@ return [
     Jb\Bundle\PhumborBundle\JbPhumborBundle::class => ['all' => true],
     Misd\PhoneNumberBundle\MisdPhoneNumberBundle::class => ['all' => true],
     Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle::class => ['all' => true],
-    Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
+    Symfony\Bundle\MakerBundle\MakerBundle::class => ['docker' => true],
     FOS\ElasticaBundle\FOSElasticaBundle::class => ['all' => true],
     Knp\Bundle\SnappyBundle\KnpSnappyBundle::class => ['all' => true],
     Knp\Bundle\GaufretteBundle\KnpGaufretteBundle::class => ['all' => true],
     Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
-    Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true],
+    Symfony\Bundle\DebugBundle\DebugBundle::class => ['docker' => true],
+    Symfony\Bundle\MercureBundle\MercureBundle::class => ['all' => true],
+    Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
+    DH\AuditorBundle\DHAuditorBundle::class => ['all' => true],
 ];

+ 3 - 2
config/opentalent/enum.yaml

@@ -126,8 +126,9 @@ opentalent:
     education_year: 'App\Enum\Education\YearEnum'
     education_period: 'App\Enum\Education\PeriodEnum'
     education_periodicity: 'App\Enum\Education\PeriodicityEnum'
-    
-  #billing
+    advanced_education_notation: 'App\Enum\Education\AdvancedEducationNotationTypeEnum'
+
+    #billing
     billing_periodicity: 'App\Enum\Billing\PeriodicityEnum'
     billing_type_periodicity: 'App\Enum\Billing\PeriodicityTypeEnum'
     billing_pricingline_adhesion: 'App\Enum\Billing\PricingLineAdhesionEnum'

+ 8 - 3
config/opentalent/modulesbyconditions.yaml

@@ -41,14 +41,14 @@ opentalent:
             conditions:
                 service:
                     name: App\Service\Organization\Utils
-                    function: isOrganizationIsCMF
+                    function: isOrganizationCMF
         Admin2IOS:
             roles:
                 - ROLE_ADMIN2IOS
             conditions:
                 service:
                     name: App\Service\Organization\Utils
-                    function: isOrganizationIs2ios
+                    function: is2iosOrganization
         StatisticFederation:
             conditions:
                 service:
@@ -68,4 +68,9 @@ opentalent:
             conditions:
                 service:
                     name: App\Service\Network\Utils
-                    function: isCMF
+                    function: isCMF
+        Cotisation:
+            conditions:
+                service:
+                    name: App\Service\Network\Utils
+                    function: isCMF

+ 29 - 66
config/opentalent/products.yaml

@@ -5,17 +5,16 @@ opentalent:
           - AccessProfile
           - Tips
           - Notification
+          - NotificationUser
           - ContactPoint
           - PersonalizedList
           - File
           - City
           - Country
           - Tagg
-        actions:
-          - Export_list
-          - Export_card
-          - Export_report-activity
-          - Export_licence-cmf
+          - Enum
+          - LicenceCmfOrganizationER
+          - DownloadRequest
         roles:
           - ROLE_IMPORT
           - ROLE_TAGG
@@ -32,7 +31,12 @@ opentalent:
           - PlaceRepair
           - Room
           - OrganizationAddressPostal
+          - GpsCoordinate
           - Organization
+          - Siret
+          - Parameters
+          - AdminAccess
+          - BankAccount
           - OrganizationHoliday
           - TypeOfPractice
           - Activity
@@ -49,13 +53,10 @@ opentalent:
           - OrganizationFunction
           - FunctionType
           - PersonAddressPostal
+          - GpsCoordinate
           - PersonActivity
           - PersonHoliday
           - OrganizationResponsability
-        actions:
-          - CreateAccounts
-          - DeleteAccounts
-          - SharingContact
         roles:
           - ROLE_USERS
           - ROLE_ACCOUNTS
@@ -71,8 +72,6 @@ opentalent:
           - EducationStudent
           - Course
           - Education
-        actions:
-          - CreateOwnPresenceAttendance
 
       Medals:
         entities:
@@ -90,13 +89,9 @@ opentalent:
         entities:
           - Message
           - Email
-          - Sms
           - ReportMessage
-        actions:
-          - Rulerz
         roles:
           - ROLE_EMAILS
-          - ROLE_TEXTO
 
       MessagesAdvanced:
         entities:
@@ -104,6 +99,13 @@ opentalent:
         roles:
           - ROLE_MAILS
 
+      Sms:
+        entities:
+          - Sms
+          - MobytUserStatus
+        roles:
+          - ROLE_TEXTO
+
       TemplateMessages:
         entities:
           - TemplateSystem
@@ -127,10 +129,6 @@ opentalent:
             - Categories
             - EventReport
             - AttendanceBooking
-          actions:
-            - Rulerz
-            - EventInvitation
-            - Export_presence-event
           roles:
             - ROLE_EVENTS
 
@@ -140,9 +138,6 @@ opentalent:
             - Work
             - WorkByUser
             - EducationStudent
-          actions:
-            - Export_presence-course
-            - DuplicateCourses
           roles:
             - ROLE_COURSES
 
@@ -150,9 +145,6 @@ opentalent:
           entities:
             - Examen
             - Jury
-          actions:
-            - ExamenConvocation
-            - Export_presence-examen
           roles:
             - ROLE_EXAMENS
 
@@ -160,8 +152,6 @@ opentalent:
           entities:
             - EducationalProject
             - EducationalProjectPublic
-          actions:
-            - Export_road-map
           roles:
             - ROLE_EDUCATIONALPROJECTS
 
@@ -180,9 +170,6 @@ opentalent:
             - EquipmentRepair
             - EquipmentList
             - EquipmentComposition
-          actions:
-            - EquipmentLoanReminder
-            - Export_equipment-availability-form
           roles:
             - ROLE_EQUIPMENTS
 
@@ -197,9 +184,7 @@ opentalent:
             - ExamenConvocation
             - Education
             - Cycle
-          actions:
-            - CycleUpdating
-            - Export_report-card
+            - EducationTiming
           roles:
             - ROLE_PEDAGOGICS_ADMINISTRATION
 
@@ -208,8 +193,6 @@ opentalent:
             - EducationStudent
           roles:
             - ROLE_PEDAGOGICS_SEIZURE
-          actions:
-            - EvaluateStudents
 
       AdvancedEducationNotation:
         entities:
@@ -225,23 +208,10 @@ opentalent:
             - BillAccounting
             - BillPayment
             - Bill
+            - BillingSetting
             - BillLine
             - AccessPayer
             - AccessIntangible
-          actions:
-            - BillingEdition
-            - CreditEdition
-            - Rulerz
-            - Export_unpaid-bill
-            - Export_unpaid-bill-email
-            - Export_billing
-            - Export_all-bill
-            - Export_paid-bill
-            - Export_paid-bill-email
-            - Export_bill-billlines
-            - Export_bill-payment-receipt
-            - Export_bill-payment-detail
-            - Export_all-bill-email
           roles :
             - ROLE_BILLINGS_ADMINISTRATION
             - ROLE_BILLINGS_SEIZURE
@@ -249,9 +219,6 @@ opentalent:
       Pes:
           entities:
             - Pes
-          actions:
-            - Export_pes
-            - Export_sepa-debit-mandate
 
       IEL:
           entities:
@@ -260,26 +227,16 @@ opentalent:
             - AccessTmp
             - EducationStudentWish
             - OnlineRegistrationSettings
-          actions:
-            - SendOnlineRegistration
-            - ValidationRegistration
-            - IelProvisionalRegistration
           roles:
             - ROLE_ONLINEREGISTRATION_ADMINISTRATION
 
       BergerLevrault:
           entities:
             - BergerLevrault
-          actions:
-            - Export_berger-levrault
-            - Export_sepa-debit-mandate
 
       Jvs:
           entities:
             - Jvs
-          actions:
-            - Export_jvs
-            - Export_sepa-debit-mandate
 
       Website:
           entities: ~
@@ -300,10 +257,14 @@ opentalent:
             - Network
           roles:
             - ROLE_NETWORK
-          actions:
-            - GenerateCredentials
-            - ChangeEmailAdmin
-            - TakeOutOrganization
+
+      Cotisation:
+        entities:
+          - Cotisation
+
+      Dolibarr:
+        entities:
+          - DolibarrAccount
 
     products:
       artist:
@@ -321,6 +282,8 @@ opentalent:
           - Messages
           - Tagg
           - Statistic
+          - Cotisation
+          - Dolibarr
 
       artist_premium:
         extend: artist

+ 12 - 0
config/packages/dh_auditor.yaml

@@ -0,0 +1,12 @@
+# Full configuration reference available at:
+# https://damienharper.github.io/auditor-docs/docs/auditor-bundle/configuration/reference.html
+# todo : mettre en place le script de nettoyage automatique des audits (le chiffre est le nombre de mois) : bin/console audit:clean 12 --no-confirm
+dh_auditor:
+    timezone: 'Europe/Paris'
+    enabled: true
+    providers:
+        doctrine:
+            table_prefix: null
+            table_suffix: '_audit'
+            storage_services:
+                - '@doctrine.orm.audit_entity_manager'

+ 0 - 0
config/packages/dev/debug.yaml → config/packages/docker/debug.yaml


+ 10 - 0
config/packages/docker/mailer.yaml

@@ -0,0 +1,10 @@
+framework:
+  mailer:
+    # @see https://symfony.com/doc/5.4/mailer.html#development-debugging
+
+    # Disable the mailing in dev mode
+#    dsn: 'null://null'
+
+    # Or send all mails to the same address:
+    #envelope:
+    #  recipients: ['exploitation@opentalent.fr']

+ 9 - 0
config/packages/docker/messenger.yaml

@@ -0,0 +1,9 @@
+# Désactive le fonctionnement asynchrone de messenger en mode dev
+# > commenter pour tester avec un fonctionnement asynchrone
+#   (dans ce cas, la commande `messenger:consume async` doit être en cours d'exécution)
+framework:
+    messenger:
+        transports:
+            # https://symfony.com/doc/current/messenger.html#transport-configuration
+            async: 'sync://'
+            failed: 'sync://'

+ 0 - 0
config/packages/dev/monolog.yaml → config/packages/docker/monolog.yaml


+ 0 - 0
config/packages/dev/web_profiler.yaml → config/packages/docker/web_profiler.yaml


+ 16 - 0
config/packages/doctrine.yaml

@@ -1,5 +1,6 @@
 doctrine:
     dbal:
+
         default_connection: default
         connections:
             default:
@@ -9,6 +10,10 @@ doctrine:
                 # either here or in the DATABASE_URL env var (see .env file)
                 server_version: '5.7'
 
+            audit:
+                url: '%env(resolve:DATABASE_AUDIT_URL)%'
+                server_version: '5.7'
+
             adminassos:
                 url: '%env(resolve:DATABASE_ADMINASSOS_URL)%'
 
@@ -25,6 +30,9 @@ doctrine:
                     date_time_filter:
                         class: App\Filter\DoctrineFilter\DateTimeFilter
                         enabled: true
+                    activity_year_filter:
+                        class: App\Filter\DoctrineFilter\ActivityYearFilter
+                        enabled: true
                 connection: default
                 auto_mapping: true
                 mappings:
@@ -34,5 +42,13 @@ doctrine:
                         dir: '%kernel.project_dir%/src/Entity'
                         prefix: 'App\Entity'
                         alias: App
+                dql:
+                    string_functions:
+                        find_in_set: DoctrineExtensions\Query\Mysql\FindInSet
+                    numeric_functions:
+                        spherical_distance: App\Doctrine\ORM\AST\SphericalDistance
+            audit:
+                connection: audit
             adminassos:
                 connection: adminassos
+

+ 5 - 19
config/packages/elastica.yaml

@@ -1,6 +1,9 @@
+imports:
+  - { resource: elastica/ }
+
 fos_elastica:
   clients:
-    default: { host: 'es', port: '9200' }
+    default: { host: '%env(resolve:ELASTICSEARCH_HOST)%', port: '%env(resolve:ELASTICSEARCH_PORT)%' }
   indexes:
     search:
       use_alias: true
@@ -21,21 +24,4 @@ fos_elastica:
               custom_search_analyzer:
                 type:    custom
                 tokenizer:    standard
-                filter:    [standard, asciifolding ,lowercase]
-      types:
-        organization:
-          persistence:
-            driver: orm
-            model: 'App\Entity\Organization\Organization'
-            listener: ~
-            finder: ~
-            elastica_to_model_transformer:
-              ignore_missing: true
-            provider: ~
-          mappings:
-            id:
-              index: not_analyzed
-              type: integer
-            name:
-              analyzer: custom_analyzer
-              search_analyzer: custom_search_analyzer
+                filter:    [standard, asciifolding ,lowercase]

+ 24 - 0
config/packages/elastica/educationNotation.yaml

@@ -0,0 +1,24 @@
+fos_elastica:
+  indexes:
+    search:
+      types:
+        educationNotation:
+          persistence:
+            driver: orm
+            model: 'App\Entity\Education\EducationNotation'
+            listener: ~
+            finder: ~
+            elastica_to_model_transformer:
+              ignore_missing: true
+          mappings:
+            id:
+              index: not_analyzed
+              type: integer
+            note_origine:
+              analyzer: custom_analyzer
+              search_analyzer: custom_search_analyzer
+              property_path: false
+            note_recalcul:
+              analyzer: custom_analyzer
+              search_analyzer: custom_search_analyzer
+              property_path: false

+ 20 - 0
config/packages/elastica/organization.yaml

@@ -0,0 +1,20 @@
+fos_elastica:
+  indexes:
+    search:
+      types:
+        organization:
+          persistence:
+            driver: orm
+            model: 'App\Entity\Organization\Organization'
+            listener: ~
+            finder: ~
+            elastica_to_model_transformer:
+              ignore_missing: true
+            provider: ~
+          mappings:
+            id:
+              index: not_analyzed
+              type: integer
+            name:
+              analyzer: custom_analyzer
+              search_analyzer: custom_search_analyzer

+ 7 - 0
config/packages/framework.yaml

@@ -27,7 +27,14 @@ framework:
                 headers:
                     DOLAPIKEY: '%env(DOLIBARR_API_TOKEN)%'
                     Accept: 'application/json'
+            typo3_client:
+                base_uri: '%env(TYPO3_BASE_URI)%'
+                headers:
+                    Content-Type: 'application/json'
+                    Accept: 'application/json'
             mobyt_client:
                 base_uri: '%env(MOBYT_API_BASE_URI)%'
                 headers:
                     Content-Type: 'application/json'
+            apiLegacyClient:
+                base_uri: '%env(API_LEG_BASE_URL)%'

+ 5 - 5
config/packages/knp_gaufrette.yaml

@@ -1,11 +1,11 @@
 # @see https://github.com/KnpLabs/KnpGaufretteBundle
+# Documentation : https://knplabs.github.io/Gaufrette/basic-usage.html
 knp_gaufrette:
   adapters:
-    temp:
+    storage:
       local:
-        directory: '%kernel.project_dir%/var/files/temp'
+        directory: '%kernel.project_dir%/var/files/storage'
         create: true
   filesystems:
-    temp:
-      adapter: temp
-      alias: temp
+    storage:
+      adapter: storage

+ 11 - 0
config/packages/mercure.yaml

@@ -0,0 +1,11 @@
+mercure:
+    hubs:
+        default:
+            url: '%env(MERCURE_URL)%'
+            public_url: '%env(MERCURE_PUBLIC_URL)%'
+            jwt:
+                secret: '%env(MERCURE_PUBLISHER_JWT_KEY)%'
+                algorithm: 'hmac.sha256'
+                publish: ['*']
+
+#            jwt_provider: App\Mercure\JWTProvider

+ 5 - 0
config/packages/messenger.yaml

@@ -11,4 +11,9 @@ framework:
 
         routing:
             # Route your messages to the transports
+            'App\Message\Command\MailerCommand': async
+            'App\Message\Command\Parameters\AverageChange': async
             'App\Message\Command\Export': async
+            'App\Message\Command\Typo3\Typo3UpdateCommand': async
+            'App\Message\Command\Typo3\Typo3DeleteCommand': async
+            'App\Message\Command\Typo3\Typo3UndeleteCommand': async

+ 2 - 2
config/packages/security.yaml

@@ -167,5 +167,5 @@ security:
     # Easy way to control access for large sections of your site
     # Note: Only the *first* access control that matches will be used
     access_control:
-        - { path: ^/api, roles: IS_AUTHENTICATED_FULLY }
-        - { path: ^/api, roles: IS_HAVING_MODULE }
+        - { path: ^/api/public, roles: PUBLIC_ACCESS }
+        - { path: ^/api/, roles: IS_HAVING_MODULE }

+ 2 - 0
config/packages/twig.yaml

@@ -1,3 +1,5 @@
 twig:
     paths:
         '%kernel.project_dir%/templates': templates
+        '%kernel.project_dir%/templates/assets/images': images
+        '%kernel.project_dir%/templates/assets/styles': styles

+ 1 - 0
config/routes.yaml

@@ -6,6 +6,7 @@ swagger_ui:
   path: /docs
   controller: api_platform.swagger.action.ui
 
+# todo: comment ça s'articule avec le LocalStorage ça?
 ot_internal_secure_file_download:
   path: /_internal/secure/files/{id}
   controller: App\Controller\FileController::downloadFile

+ 3 - 0
config/routes/dh_auditor.yaml

@@ -0,0 +1,3 @@
+dh_auditor:
+    resource: "@DHAuditorBundle/Controller/"
+    type: auditor

+ 0 - 0
config/routes/dev/framework.yaml → config/routes/docker/framework.yaml


+ 0 - 0
config/routes/dev/web_profiler.yaml → config/routes/docker/web_profiler.yaml


+ 20 - 1
config/services.yaml

@@ -10,6 +10,9 @@ services:
         bind:
             $opentalentConfig: '%kernel.project_dir%%env(OPENTALENT_CONFIG)%'
             $internalFilesUploadUri: '%env(INTERNAL_FILES_DOWNLOAD_URI)%'
+            $bindfileBufferFile: '%env(BIND_FILE_BUFFER_FILE)%'
+            $contextAwareDataPersister: '@api_platform.doctrine.orm.data_persister'
+            $opentalentNoReplyEmailAddress: 'noreply@opentalent.fr'
 
     # Logging: a shorter version of the default monolog line formatter
     monolog.formatter.message:
@@ -28,6 +31,11 @@ services:
             - '../src/Kernel.php'
             - '../src/Tests/'
 
+    App\OpenApi\OpenApiFactory:
+        decorates: 'api_platform.openapi.factory'
+        arguments: [ '@App\OpenApi\OpenApiFactory.inner' ]
+        autoconfigure: false
+
     App\Service\Cotisation\Utils:
         public: true
 
@@ -50,6 +58,10 @@ services:
             tags: ['app.exporter']
         App\Service\Export\Encoder\EncoderInterface:
             tags: ['app.encoder']
+        App\Service\Mailer\Builder\BuilderInterface:
+            tags: [ 'app.mailer.builder' ]
+        App\Service\Twig\AssetsExtension:
+            tags: [ 'twig.extension' ]
 
     App\Service\ServiceIterator\CurrentAccessExtensionIterator:
         - !tagged_iterator app.extensions.access
@@ -59,7 +71,8 @@ services:
         - !tagged_iterator app.exporter
     App\Service\ServiceIterator\EncoderIterator:
         - !tagged_iterator app.encoder
-
+    App\Service\ServiceIterator\Mailer\BuilderIterator:
+        - !tagged_iterator app.mailer.builder
 
     App\Service\Dolibarr\DolibarrSyncService:
         tags:
@@ -85,3 +98,9 @@ services:
     App\EventListener\DoctrineFilter\DoctrineFilterListener:
         tags:
             - { name: kernel.event_listener, event: kernel.request }
+
+    #########################################
+    ##  ELASTIC SERVICE ##
+    App\Service\Elasticsearch\EducationNotationUpdater:
+        arguments:
+            - '@fos_elastica.object_persister.search.educationNotation'

+ 25 - 0
doc/bindfile.md

@@ -0,0 +1,25 @@
+# Fichier Bind
+
+Le fichier "bind" rend possible la résolution des sous-domaines au niveau du serveur DNS (situé sur prod-back).
+Chaque fois qu'un nouveau sous-domaine est enregistré, ce fichier doit être mis à jour. Cependant, pour des questions de 
+droits, c'est l'utilisateur root qui doit procéder à cette mise à jour. 
+
+Voilà ce qu'il se passe lorsqu'une structure enregistre un nouveau sous-domaine depuis `prod-back`:
+
+1. Le logiciel ajoute le sous-domaine en question dans une nouvelle ligne du fichier tampon `/env/subdomain.txt`
+2. Un cron tourne toutes les 5 minutes et consomme le contenu de ce fichier avant de le vider
+3. Ce cron exécute le script `/env/add-subdomain`, qui met à jour le fichier bind `/etc/bind/zones/opentalent.fr.db`
+4. Une fois mis à jour le fichier bind, le cron exécuté sur prod-back (le serveur DNS) envoie par ssh le contenu du 
+   fichier subdomain.txt sur un même fichier `/env/subdomain.txt` situé sur le serveur `vpn` 
+5. Le même cron tourne toutes les 5 minutes sur le serveur vpn procède à son tour à la mise à jour de son fichier bind
+
+La mise à jour des deux fichiers bind est nécessaire, pour permettre la prise en compte des sous-domaines depuis
+l'intérieur ou l'extérieur du VPN.
+
+Lorsqu'un nouveau sous-domaine est enregistré depuis `prod-v2`:
+
+1. Le logiciel remplit de la même façon un fichier `/env/subdomain.txt`
+2. Un cron lit ce fichier et ajoute les sous-domaines listés au subdomain.txt sur `prod-back`
+3. La suite se déroule comme dans le premier scénario
+
+

+ 1 - 1
doc/exports.md

@@ -26,7 +26,7 @@ contiendra toutes les données nécessaires au rendu du template.
 3. Encoder : l'encodeur adapté est trouvé via la classe `EncoderHandler` qui itère sur les encoders disponibles
 jusqu'à trouver le premier qui supporte le format demandé dans l'ExportRequest, puis appelle la méthode `encode($html)`
 de cet encoder, et enfin récupère le contenu final du fichier
-4. Création du fichier : le service `TemporaryFileStorage` est utilisé pour créer le fichier d'export dans 
+4. Création du fichier : le service `LocalStorage` est utilisé pour créer le fichier d'export dans 
 un répertoire temporaire. 
 5. Mise à jour de la DB : Un objet `File` est enfin enregistré en base.
 

+ 67 - 0
doc/mercure.md

@@ -0,0 +1,67 @@
+# Mercure
+
+On utilise mercure pour envoyer des updates en temps réel depuis le back vers les postes clients.
+
+Voir :
+
+* <https://mercure.rocks/docs>
+* <https://symfony.com/doc/5.4/mercure.html>
+
+## Fonctionnement général
+
+Un hub mercure écoute à une url donnée (en local : <https://local.mercure.opentalent.fr>).
+
+Ap2i utilise le bundle mercure pour symfony pour publier des updates à destination d'un ou plusieurs utilisateurs :
+
+Exemple : 
+
+    $update = new Update(
+        "access/{$access->getId()}",
+        json_encode(['myData' => 'some new data'], JSON_THROW_ON_ERROR),
+        true
+    );
+    $this->mercureHub->publish($update);
+
+Le client web, lui s'est abonné aux mises à jour
+
+    const url = new URL($config.baseUrl_mercure)
+    url.searchParams.append('topic', "access/" + store.state.profile.access.id)
+
+    eventSource.value = new EventSourcePolyfill(url.toString(), { withCredentials: true });
+    
+    eventSource.value.onerror = event => {
+        console.error('Error while subscribing to the EventSource : ' + JSON.stringify(event))
+    }
+    eventSource.value.onopen = event => {
+        console.log('Listening for events...')
+    }
+    eventSource.value.onmessage = event => {
+        const data = JSON.parse(event.data)
+        console.log('we received an update with data : ' + JSON.stringify(data)) 
+    }
+
+
+## Sécurité
+
+Pour sécuriser les échanges et s'assurer que seul l'utilisateur voulu reçoive l'update, on utilise le [système d'autorisations
+prévu par mercure](https://symfony.com/doc/5.4/mercure.html#authorization).
+
+Les updates publiées par ap2i sont marquées comme `private`, via le 3e argument passé au constructeur de l'update :
+
+    $update = new Update($topics, $data, true);
+
+À partir de là, seuls les abonnés en mesure de fournir un JWT valide pourront recevoir les updates.
+
+On construit ce JWT côté back au moment du login, et on le stocke dans un cookie `mercureAuthorization` renvoyé au
+client. Le contenu de ce JWT spécifie que le client ne peut s'abonner qu'aux sujets suivants :
+
+* `access/{id}`
+
+Ce JWT est crypté avec l'algo HS256 au moyen d'une clé secrète.
+
+> Pour tester la construction des JWT : <https://jwt.io/>
+
+On ajoute aussi la configuration `{ withCredentials: true }` au EventSource côté client, pour lui indiquer de transmettre
+les cookies au hub Mercure.
+
+Enfin, le hub mercure est configuré de manière à interdire les updates anonymes.

File diff suppressed because it is too large
+ 59 - 0
old/Entity/AccessAndFunction/Access.php


+ 244 - 0
old/Entity/AccessAndFunction/AccessCommunication.php

@@ -0,0 +1,244 @@
+<?php
+
+namespace AppBundle\Entity\AccessAndFunction;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
+use AppBundle\Validator\Constraints\Access as OpentalentAssert;
+
+/**
+ * Paramètres d'abonnement à la com pour un Access
+ *
+ * @Iri("http://schema.org/AccessCommunication")
+ */
+#[ORM\Entity]
+class AccessCommunication
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    //INSERT INTO AccessCommunication (access_id, culturalNewsletter, adminNewsletter, userNewsletter, opentalentBusinessNewsletter, partnerBusinessNewsletter)
+    //SELECT Access.id as accessId, true,true,true,true,false
+    //FROM Access
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['accesscommunication'])]
+    private $id;
+    /**
+     * @var Access
+     */
+    #[ORM\OneToOne(targetEntity: 'AppBundle\Entity\AccessAndFunction\Access', inversedBy: 'accessCommunication', cascade: ['persist'], fetch: 'EAGER')]
+    #[ORM\JoinColumn(nullable: true, onDelete: 'CASCADE')]
+    #[Groups(['accesscommunication'])]
+    private $access;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => true])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accesscommunication'])]
+    private $culturalNewsletter = true;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => true])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accesscommunication'])]
+    private $adminNewsletter = true;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => true])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accesscommunication'])]
+    private $userNewsletter = true;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => true])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accesscommunication'])]
+    private $opentalentBusinessNewsletter = true;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accesscommunication'])]
+    private $partnerBusinessNewsletter = false;
+    /**
+     * The constructor
+     */
+    public function __construct() {
+
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set culturalNewsletter
+     *
+     * @param boolean $culturalNewsletter
+     *
+     * @return AccessCommunication
+     */
+    public function setCulturalNewsletter($culturalNewsletter)
+    {
+        $this->culturalNewsletter = $culturalNewsletter;
+
+        return $this;
+    }
+    /**
+     * Get culturalNewsletter
+     *
+     * @return boolean
+     */
+    public function getCulturalNewsletter()
+    {
+        return $this->culturalNewsletter;
+    }
+    /**
+     * Set adminNewsletter
+     *
+     * @param boolean $adminNewsletter
+     *
+     * @return AccessCommunication
+     */
+    public function setAdminNewsletter($adminNewsletter)
+    {
+        $this->adminNewsletter = $adminNewsletter;
+
+        return $this;
+    }
+    /**
+     * Get adminNewsletter
+     *
+     * @return boolean
+     */
+    public function getAdminNewsletter()
+    {
+        return $this->adminNewsletter;
+    }
+    /**
+     * Set partnerBusinessNewsletter
+     *
+     * @param boolean $partnerBusinessNewsletter
+     *
+     * @return AccessCommunication
+     */
+    public function setPartnerBusinessNewsletter($partnerBusinessNewsletter)
+    {
+        $this->partnerBusinessNewsletter = $partnerBusinessNewsletter;
+
+        return $this;
+    }
+    /**
+     * Get partnerBusinessNewsletter
+     *
+     * @return boolean
+     */
+    public function getPartnerBusinessNewsletter()
+    {
+        return $this->partnerBusinessNewsletter;
+    }
+    /**
+     * Set access
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $access
+     *
+     * @return AccessCommunication
+     */
+    public function setAccess(\AppBundle\Entity\AccessAndFunction\Access $access = null)
+    {
+        $this->access = $access;
+
+        return $this;
+    }
+    /**
+     * Get access
+     *
+     * @return \AppBundle\Entity\AccessAndFunction\Access
+     */
+    public function getAccess()
+    {
+        return $this->access;
+    }
+    /**
+     * Set userNewsletter
+     *
+     * @param boolean $userNewsletter
+     *
+     * @return AccessCommunication
+     */
+    public function setUserNewsletter($userNewsletter)
+    {
+        $this->userNewsletter = $userNewsletter;
+
+        return $this;
+    }
+    /**
+     * Get userNewsletter
+     *
+     * @return boolean
+     */
+    public function getUserNewsletter()
+    {
+        return $this->userNewsletter;
+    }
+    /**
+     * Set opentalentBusinessNewsletter
+     *
+     * @param boolean $opentalentBusinessNewsletter
+     *
+     * @return AccessCommunication
+     */
+    public function setOpentalentBusinessNewsletter($opentalentBusinessNewsletter)
+    {
+        $this->opentalentBusinessNewsletter = $opentalentBusinessNewsletter;
+
+        return $this;
+    }
+    /**
+     * Get opentalentBusinessNewsletter
+     *
+     * @return boolean
+     */
+    public function getOpentalentBusinessNewsletter()
+    {
+        return $this->opentalentBusinessNewsletter;
+    }
+}

+ 127 - 0
old/Entity/AccessAndFunction/AccessFamily.php

@@ -0,0 +1,127 @@
+<?php
+
+namespace AppBundle\Entity\AccessAndFunction;
+
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * Fais le lien entre les Access dont les titulaires sont membres d'une même famille
+ * (cf. table 'children_guardians' pour les responsables légaux)
+ */
+#[ORM\Entity]
+class AccessFamily
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['accessfamily', 'access_details', 'student_registration', 'access_informations_edit', 'online_registration_access_family'])]
+    private $id;
+    /**
+     * @var ArrayCollection<Access>
+     */
+    #[ORM\OneToMany(targetEntity: 'AppBundle\Entity\AccessAndFunction\Access', mappedBy: 'accessFamily')]
+    #[Groups(['accessfamily_accesses', 'student_registration_accessfamily', 'access_informations_edit_accessfamily', 'access_details_accessfamily', 'online_registration_access_family_accessfamily'])]
+    private $accesses;
+    /**
+     * @var ArrayCollection<AccessFictionalIntangible>
+     */
+    #[Assert\Valid]
+    #[ORM\OneToMany(targetEntity: 'AppBundle\Entity\Billing\AccessFictionalIntangible', mappedBy: 'accessFamily', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['accessfamily_accessfictionalintangible'])]
+    private $accessFictionalIntangibles;
+    public function __construct()
+    {
+        $this->accesses = new ArrayCollection();
+        $this->accessFictionalIntangibles = new ArrayCollection();
+    }
+    /**
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * @param int $id
+     * @return FunctionType
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+        return $this;
+    }
+    /**
+     * Add accessFictionalIntangible
+     *
+     * @param \AppBundle\Entity\Billing\AccessFictionalIntangible $accessFictionalIntangible
+     *
+     * @return AccessFamily
+     */
+    public function addAccessFictionalIntangible(\AppBundle\Entity\Billing\AccessFictionalIntangible $accessFictionalIntangible)
+    {
+        $this->accessFictionalIntangibles[] = $accessFictionalIntangible;
+
+        return $this;
+    }
+    /**
+     * Remove accessFictionalIntangible
+     *
+     * @param \AppBundle\Entity\Billing\AccessFictionalIntangible $accessFictionalIntangible
+     */
+    public function removeAccessFictionalIntangible(\AppBundle\Entity\Billing\AccessFictionalIntangible $accessFictionalIntangible)
+    {
+        $this->accessFictionalIntangibles->removeElement($accessFictionalIntangible);
+    }
+    /**
+     * Get accessFictionalIntangibles
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getAccessFictionalIntangibles()
+    {
+        return $this->accessFictionalIntangibles;
+    }
+    /**
+     * Add access
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $access
+     *
+     * @return AccessFamily
+     */
+    public function addAccess(\AppBundle\Entity\AccessAndFunction\Access $access)
+    {
+        $access->setAccessFamily($this);
+        $this->accesses[] = $access;
+
+        return $this;
+    }
+    /**
+     * Remove access
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $access
+     */
+    public function removeAccess(\AppBundle\Entity\AccessAndFunction\Access $access)
+    {
+        $access->setAccessFamily(null);
+        $this->accesses->removeElement($access);
+    }
+    /**
+     * Get accesses
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getAccesses()
+    {
+        return $this->accesses;
+    }
+}

+ 331 - 0
old/Entity/AccessAndFunction/AccessNetworkSetting.php

@@ -0,0 +1,331 @@
+<?php
+
+namespace AppBundle\Entity\AccessAndFunction;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
+
+/**
+ * Informations relatives au réseau, pour un Access
+ *
+ * @Iri("http://schema.org/AccessNetworkSetting")
+ */
+#[ORM\Entity]
+class AccessNetworkSetting
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['accessnetworksetting', 'accesscmfnetwork', 'access_details', 'student_list', 'guardians_list', 'teachers_list', 'adherent_list', 'personnels_list', 'ca_list', 'accesses_list', 'student_list', 'guardians_list', 'teachers_list', 'adherent_list', 'personnels_list', 'morals_list', 'othercontact_list', 'student_registration', 'board_list', 'own_access', 'access_informations_edit'])]
+    private $id;
+    /**
+     * @var Access
+     */
+    #[Assert\Valid]
+    #[ORM\OneToOne(targetEntity: 'AppBundle\Entity\AccessAndFunction\Access', inversedBy: 'accessNetworkSetting', cascade: ['persist'], fetch: 'EAGER')]
+    #[ORM\JoinColumn(nullable: true, onDelete: 'CASCADE')]
+    #[Groups(['accessnetworksetting'])]
+    private $access;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => true])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accessnetworksetting', 'accesscmfnetwork_accessnetworksetting', 'access_details_accessnetworksetting', 'accesses_list_accessnetworksetting', 'student_list_accessnetworksetting', 'guardians_list_accessnetworksetting', 'teachers_list_accessnetworksetting', 'adherent_list_accessnetworksetting', 'personnels_list_accessnetworksetting', 'morals_list_accessnetworksetting', 'ca_list_accessnetworksetting', 'othercontact_list_accessnetworksetting', 'board_list_accessnetworksetting'])]
+    private $subscriptionCmfPaper = true;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => true])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accessnetworksetting', 'accesscmfnetwork_accessnetworksetting'])]
+    private $subscriptionEducationalInformationCmfPaper = true;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => true])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accessnetworksetting', 'accesscmfnetwork_accessnetworksetting'])]
+    private $subscriptionOtherInformationCmfPaper = true;
+    /**
+     * @var integer
+     */
+    #[ORM\Column(type: 'integer', nullable: true)]
+    #[Assert\Type(type: 'integer', message: 'invalid-integer')]
+    #[Groups(['accessnetworksetting', 'accesscmfnetwork_accessnetworksetting', 'access_details_accessnetworksetting', 'accesses_list_accessnetworksetting', 'student_list_accessnetworksetting', 'guardians_list_accessnetworksetting', 'teachers_list_accessnetworksetting', 'adherent_list_accessnetworksetting', 'personnels_list_accessnetworksetting', 'morals_list_accessnetworksetting', 'ca_list_accessnetworksetting', 'othercontact_list_accessnetworksetting', 'board_list_accessnetworksetting'])]
+    private $numberPaperCopies;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => true])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accessnetworksetting', 'accesscmfnetwork_accessnetworksetting', 'access_details_accessnetworksetting', 'accesses_list_accessnetworksetting', 'student_list_accessnetworksetting', 'guardians_list_accessnetworksetting', 'teachers_list_accessnetworksetting', 'adherent_list_accessnetworksetting', 'personnels_list_accessnetworksetting', 'morals_list_accessnetworksetting', 'ca_list_accessnetworksetting', 'othercontact_list_accessnetworksetting', 'board_list_accessnetworksetting', 'own_access_accessnetworksetting'])]
+    private $receivesDigitalCmfNewletterAndInformation = true;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['AppBundle\Enum\AccessAndFunction\LicenseTypeEnum', 'toArray'])]
+    #[Groups(['accessnetworksetting', 'access_details_accessnetworksetting', 'student_list_accessnetworksetting', 'guardians_list_accessnetworksetting', 'teachers_list_accessnetworksetting', 'adherent_list_accessnetworksetting', 'personnels_list_accessnetworksetting', 'ca_list_accessnetworksetting', 'accesses_list_accessnetworksetting', 'student_registration_accessnetworksetting', 'board_list_accessnetworksetting', 'access_informations_edit_accessnetworksetting'])]
+    private $licenseType;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['AppBundle\Enum\AccessAndFunction\LicenseRateEnum', 'toArray'])]
+    #[Groups(['accessnetworksetting', 'access_details_accessnetworksetting', 'student_list_accessnetworksetting', 'guardians_list_accessnetworksetting', 'teachers_list_accessnetworksetting', 'adherent_list_accessnetworksetting', 'personnels_list_accessnetworksetting', 'ca_list_accessnetworksetting', 'accesses_list_accessnetworksetting', 'student_list_accessnetworksetting', 'guardians_list_accessnetworksetting', 'teachers_list_accessnetworksetting', 'adherent_list_accessnetworksetting', 'student_registration_accessnetworksetting', 'board_list_accessnetworksetting', 'access_informations_edit_accessnetworksetting'])]
+    private $licenseRate;
+    /**
+     * @var \DateTime Date of first entry into the structure.
+     *
+     * @Iri("https://schema.org/birthDate")
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date(message: 'invalid-date')]
+    #[Groups(['accessnetworksetting', 'accesses_list_accessnetworksetting', 'ca_list_accessnetworksetting', 'adherent_list_accessnetworksetting', 'accesscmfnetwork_accessnetworksetting', 'access_details_accessnetworksetting', 'board_list_accessnetworksetting'])]
+    private $dateFirstEntry;
+    /**
+     * The constructor
+     */
+    public function __construct() {
+
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set subscriptionCmfPaper
+     *
+     * @param boolean $subscriptionCmfPaper
+     *
+     * @return AccessNetworkSetting
+     */
+    public function setSubscriptionCmfPaper($subscriptionCmfPaper)
+    {
+        $this->subscriptionCmfPaper = $subscriptionCmfPaper;
+
+        return $this;
+    }
+    /**
+     * Get subscriptionCmfPaper
+     *
+     * @return boolean
+     */
+    public function getSubscriptionCmfPaper()
+    {
+        return $this->subscriptionCmfPaper;
+    }
+    /**
+     * Set numberPaperCopies
+     *
+     * @param integer $numberPaperCopies
+     *
+     * @return AccessNetworkSetting
+     */
+    public function setNumberPaperCopies($numberPaperCopies)
+    {
+        $this->numberPaperCopies = $numberPaperCopies;
+
+        return $this;
+    }
+    /**
+     * Get numberPaperCopies
+     *
+     * @return integer
+     */
+    public function getNumberPaperCopies()
+    {
+        return $this->numberPaperCopies;
+    }
+    /**
+     * Set receivesDigitalCmfNewletterAndInformation
+     *
+     * @param boolean $receivesDigitalCmfNewletterAndInformation
+     *
+     * @return AccessNetworkSetting
+     */
+    public function setReceivesDigitalCmfNewletterAndInformation($receivesDigitalCmfNewletterAndInformation)
+    {
+        $this->receivesDigitalCmfNewletterAndInformation = $receivesDigitalCmfNewletterAndInformation;
+
+        return $this;
+    }
+    /**
+     * Get receivesDigitalCmfNewletterAndInformation
+     *
+     * @return boolean
+     */
+    public function getReceivesDigitalCmfNewletterAndInformation()
+    {
+        return $this->receivesDigitalCmfNewletterAndInformation;
+    }
+    /**
+     * Set access
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $access
+     *
+     * @return AccessNetworkSetting
+     */
+    public function setAccess(\AppBundle\Entity\AccessAndFunction\Access $access = null)
+    {
+        $this->access = $access;
+
+        return $this;
+    }
+    /**
+     * Get access
+     *
+     * @return \AppBundle\Entity\AccessAndFunction\Access
+     */
+    public function getAccess()
+    {
+        return $this->access;
+    }
+    /**
+     * Set licenseType
+     *
+     * @param string $licenseType
+     *
+     * @return Access
+     */
+    public function setLicenseType($licenseType)
+    {
+        $this->licenseType = $licenseType;
+
+        return $this;
+    }
+    /**
+     * Get licenseType
+     *
+     * @return string
+     */
+    public function getLicenseType()
+    {
+        return $this->licenseType;
+    }
+    /**
+     * Set licenseRate
+     *
+     * @param string $licenseRate
+     *
+     * @return Access
+     */
+    public function setLicenseRate($licenseRate)
+    {
+        $this->licenseRate = $licenseRate;
+
+        return $this;
+    }
+    /**
+     * Get licenseRate
+     *
+     * @return string
+     */
+    public function getLicenseRate()
+    {
+        return $this->licenseRate;
+    }
+    /**
+     * Set dateFirstEntry
+     *
+     * @param \DateTime $dateFirstEntry
+     *
+     * @return Person
+     */
+    public function setDateFirstEntry($dateFirstEntry)
+    {
+        $this->dateFirstEntry = $dateFirstEntry;
+
+        return $this;
+    }
+    /**
+     * Get dateFirstEntry
+     *
+     * @return \DateTime
+     */
+    public function getDateFirstEntry()
+    {
+        return $this->dateFirstEntry ? $this->dateFirstEntry->format('Y-m-d') : $this->dateFirstEntry;
+    }
+    /**
+     * Set subscriptionEducationalInformationCmfPaper
+     *
+     * @param boolean $subscriptionEducationalInformationCmfPaper
+     *
+     * @return AccessNetworkSetting
+     */
+    public function setSubscriptionEducationalInformationCmfPaper($subscriptionEducationalInformationCmfPaper)
+    {
+        $this->subscriptionEducationalInformationCmfPaper = $subscriptionEducationalInformationCmfPaper;
+
+        return $this;
+    }
+    /**
+     * Get subscriptionEducationalInformationCmfPaper
+     *
+     * @return boolean
+     */
+    public function getSubscriptionEducationalInformationCmfPaper()
+    {
+        return $this->subscriptionEducationalInformationCmfPaper;
+    }
+    /**
+     * Set subscriptionOtherInformationCmfPaper
+     *
+     * @param boolean $subscriptionOtherInformationCmfPaper
+     *
+     * @return AccessNetworkSetting
+     */
+    public function setSubscriptionOtherInformationCmfPaper($subscriptionOtherInformationCmfPaper)
+    {
+        $this->subscriptionOtherInformationCmfPaper = $subscriptionOtherInformationCmfPaper;
+
+        return $this;
+    }
+    /**
+     * Get subscriptionOtherInformationCmfPaper
+     *
+     * @return boolean
+     */
+    public function getSubscriptionOtherInformationCmfPaper()
+    {
+        return $this->subscriptionOtherInformationCmfPaper;
+    }
+}

+ 397 - 0
old/Entity/AccessAndFunction/AccessSocial.php

@@ -0,0 +1,397 @@
+<?php
+
+namespace AppBundle\Entity\AccessAndFunction;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
+use AppBundle\Validator\Constraints\Access as OpentalentAssert;
+
+/**
+ * Caractéristiques socio-professionnelles pour un Access
+ *
+ * @Iri("http://schema.org/AccessSocial")
+ */
+#[ORM\Entity]
+class AccessSocial
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['accesssocial', 'access_mass', 'teachers_list', 'personnels_list', 'access_details', 'accesses_list', 'student_list', 'guardians_list', 'teachers_list', 'adherent_list', 'personnels_list', 'ca_list', 'othercontact_list', 'board_list', 'fusion_accesses'])]
+    private $id;
+    /**
+     * @var Access
+     */
+    #[Assert\Valid]
+    #[ORM\OneToOne(targetEntity: 'AppBundle\Entity\AccessAndFunction\Access', inversedBy: 'accessSocial', cascade: ['persist'], fetch: 'EAGER')]
+    #[ORM\JoinColumn(nullable: true, onDelete: 'CASCADE')]
+    #[Groups(['accesssocial'])]
+    private $access;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\AccessSocial\ProfessionalStatusEnum', 'toArray'])]
+    #[Groups(['accesssocial', 'access_details_accesssocial', 'access_mass_accesssocial', 'fusion_accesses_accesssocial'])]
+    private $professionalStatus;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\AccessSocial\TypeOfContractEnum', 'toArray'])]
+    #[Groups(['accesssocial', 'teachers_list_accesssocial', 'access_mass_accesssocial', 'personnels_list_accesssocial', 'access_details_accesssocial', 'personnels_list_accesssocial', 'fusion_accesses_accesssocial'])]
+    private $typeOfContract;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    private $assistedContract;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\AccessSocial\PeriodUnitEnum', 'toArray'])]
+    #[Groups(['accesssocial', 'access_mass_accesssocial', 'access_details_accesssocial', 'fusion_accesses_accesssocial'])]
+    private $periodUnit;
+    /**
+     * @var string
+     *
+     * @OpentalentAssert\SocialSecurity
+     */
+    #[ORM\Column(type: 'string', length: 15, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accesssocial', 'access_details_accesssocial', 'accesses_list_accesssocial', 'student_list_accesssocial', 'guardians_list_accesssocial', 'teachers_list_accesssocial', 'adherent_list_accesssocial', 'personnels_list_accesssocial', 'ca_list_accesssocial', 'othercontact_list_accesssocial', 'board_list_accesssocial', 'fusion_accesses_accesssocial'])]
+    private $socialSecurity;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\AccessSocial\FamilySituationEnum', 'toArray'])]
+    #[Groups(['accesssocial', 'access_mass_accesssocial', 'access_details_accesssocial', 'accesses_list_accesssocial', 'guardians_list_accesssocial', 'fusion_accesses_accesssocial'])]
+    private $familySituation;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 15, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accesssocial', 'accesses_list_accesssocial', 'guardians_list_accesssocial'])]
+    private $dependentChildren;
+    /**
+     * @var string
+     *
+     * @OpentalentAssert\RecipientNumber
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accesssocial', 'access_details_accesssocial', 'accesses_list_accesssocial', 'student_list_accesssocial', 'guardians_list_accesssocial', 'teachers_list_accesssocial', 'adherent_list_accesssocial', 'personnels_list_accesssocial', 'ca_list_accesssocial', 'othercontact_list_accesssocial', 'board_list_accesssocial'])]
+    private $recipientNumber;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true, length: 20)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accesssocial', 'teachers_list_accesssocial', 'personnels_list_accesssocial'])]
+    private $salaryNumber;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true, length: 30)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accesssocial', 'teachers_list_accesssocial', 'personnels_list_accesssocial'])]
+    private $attachmentService;
+    /**
+     * The constructor
+     */
+    public function __construct() {
+
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Sets expertLevel.
+     *
+     * @param string $expertLevel
+     *
+     * @return $this
+     */
+    public function setExpertLevel($expertLevel)
+    {
+        $this->expertLevel = $expertLevel;
+
+        return $this;
+    }
+    /**
+     * Gets expertLevel.
+     *
+     * @return string
+     */
+    public function getExpertLevel()
+    {
+        return $this->expertLevel;
+    }
+    /**
+     * Sets professionalStatus.
+     *
+     * @param string $professionalStatus
+     *
+     * @return $this
+     */
+    public function setProfessionalStatus($professionalStatus)
+    {
+        $this->professionalStatus = $professionalStatus;
+
+        return $this;
+    }
+    /**
+     * Gets professionalStatus.
+     *
+     * @return string
+     */
+    public function getProfessionalStatus()
+    {
+        return $this->professionalStatus;
+    }
+    /**
+     * Sets typeOfContract.
+     *
+     * @param string $typeOfContract
+     *
+     * @return $this
+     */
+    public function setTypeOfContract($typeOfContract)
+    {
+        $this->typeOfContract = $typeOfContract;
+
+        return $this;
+    }
+    /**
+     * Gets typeOfContract.
+     *
+     * @return string
+     */
+    public function getTypeOfContract()
+    {
+        return $this->typeOfContract;
+    }
+    /**
+     * Sets assistedContract.
+     *
+     * @param string $assistedContract
+     *
+     * @return $this
+     */
+    public function setAssistedContract($assistedContract)
+    {
+        $this->assistedContract = $assistedContract;
+
+        return $this;
+    }
+    /**
+     * Gets assistedContract.
+     *
+     * @return string
+     */
+    public function getAssistedContract()
+    {
+        return $this->assistedContract;
+    }
+    /**
+     * Sets periodUnit.
+     *
+     * @param string $periodUnit
+     *
+     * @return $this
+     */
+    public function setPeriodUnit($periodUnit)
+    {
+        $this->periodUnit = $periodUnit;
+
+        return $this;
+    }
+    /**
+     * Gets periodUnit.
+     *
+     * @return string
+     */
+    public function getPeriodUnit()
+    {
+        return $this->periodUnit;
+    }
+    /**
+     * Sets socialSecurity.
+     *
+     * @param string $socialSecurity
+     *
+     * @return $this
+     */
+    public function setSocialSecurity($socialSecurity)
+    {
+        $this->socialSecurity = $socialSecurity;
+
+        return $this;
+    }
+    /**
+     * Gets socialSecurity.
+     *
+     * @return string
+     */
+    public function getSocialSecurity()
+    {
+        return $this->socialSecurity;
+    }
+    /**
+     * Sets familySituation.
+     *
+     * @param string $familySituation
+     *
+     * @return $this
+     */
+    public function setFamilySituation($familySituation)
+    {
+        $this->familySituation = $familySituation;
+
+        return $this;
+    }
+    /**
+     * Gets familySituation.
+     *
+     * @return string
+     */
+    public function getFamilySituation()
+    {
+        return $this->familySituation;
+    }
+    /**
+     * Sets dependentChildren.
+     *
+     * @param string $dependentChildren
+     *
+     * @return $this
+     */
+    public function setDependentChildren($dependentChildren)
+    {
+        $this->dependentChildren = $dependentChildren;
+
+        return $this;
+    }
+    /**
+     * Gets dependentChildren.
+     *
+     * @return string
+     */
+    public function getDependentChildren()
+    {
+        return $this->dependentChildren;
+    }
+    /**
+     * Set access
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $access
+     *
+     * @return AccessSocial
+     */
+    public function setAccess(\AppBundle\Entity\AccessAndFunction\Access $access = null)
+    {
+        $this->access = $access;
+
+        return $this;
+    }
+    /**
+     * Get access
+     *
+     * @return \AppBundle\Entity\AccessAndFunction\Access
+     */
+    public function getAccess()
+    {
+        return $this->access;
+    }
+    /**
+     * Set recipientNumber
+     *
+     * @param string $recipientNumber
+     *
+     * @return AccessSocial
+     */
+    public function setRecipientNumber($recipientNumber)
+    {
+        $this->recipientNumber = $recipientNumber;
+
+        return $this;
+    }
+    /**
+     * Get recipientNumber
+     *
+     * @return string
+     */
+    public function getRecipientNumber()
+    {
+        return $this->recipientNumber;
+    }
+    /**
+     * @return string
+     */
+    public function getSalaryNumber()
+    {
+        return $this->salaryNumber;
+    }
+    /**
+     * @param $salaryNumber
+     */
+    public function setSalaryNumber($salaryNumber)
+    {
+        $this->salaryNumber = $salaryNumber;
+        return $this;
+    }
+    /**
+     * @return string
+     */
+    public function getAttachmentService()
+    {
+        return $this->attachmentService;
+    }
+    /**
+     * @param $attachmentService
+     */
+    public function setAttachmentService($attachmentService)
+    {
+        $this->attachmentService = $attachmentService;
+        return $this;
+    }
+}

+ 123 - 0
old/Entity/AccessAndFunction/FunctionType.php

@@ -0,0 +1,123 @@
+<?php
+
+namespace AppBundle\Entity\AccessAndFunction;
+
+use Doctrine\ORM\Mapping as ORM;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * Enum des fonctions que peuvent occuper un Access au sein d'une Organization
+ */
+#[ORM\Entity]
+class FunctionType
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['functiontype'])]
+    private $id;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: false)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\NotNull]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\AccessAndFunction\TypeFunctionEnum', 'toArray'])]
+    #[Groups(['functiontype', 'access_details_organizationfunction', 'licence_cmf_organizationfunction', 'access_informations_edit_organizationfunction'])]
+    private $functionType;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(type: 'string', nullable: false)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\NotNull]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\AccessAndFunction\FunctionEnum', 'toArray'])]
+    #[Groups(['functiontype', 'access_details_organizationfunction', 'adherent_list_organizationfunction', 'personnels_list_organizationfunction', 'othercontact_list_organizationfunction', 'ca_list_organizationfunction', 'accesses_list_organizationfunction', 'board_list_organizationfunction', 'licence_cmf_organizationfunction', 'access_informations_edit_organizationfunction', 'adherent_contact_organizationfunction', 'cotisation_responsibles_accesses_organizationfunction', 'networkmanagers_list_organizationfunction', 'online_registration_access_details_organizationfunction', 'accesscmfnetwork_organizationfunction'])]
+    private $mission;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: false)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\NotNull]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\AccessAndFunction\RoleEnum', 'toArray'])]
+    private $roleByDefault;
+    public function __construct()
+    {
+
+    }
+    /**
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * @param int $id
+     * @return FunctionType
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+        return $this;
+    }
+    /**
+     * @return string
+     */
+    public function getFunctionType()
+    {
+        return $this->functionType;
+    }
+    /**
+     * @param string $functionType
+     * @return $this
+     */
+    public function setFunctionType($functionType)
+    {
+        $this->functionType = $functionType;
+        return $this;
+    }
+    /**
+     * @return string
+     */
+    public function getMission()
+    {
+        return $this->mission;
+    }
+    /**
+     * @param string $mission
+     * @return $this
+     */
+    public function setMission($mission)
+    {
+        $this->mission = $mission;
+        return $this;
+    }
+    /**
+     * @return string
+     */
+    public function getRoleByDefault()
+    {
+        return $this->roleByDefault;
+    }
+    /**
+     * @param string $roleByDefault
+     * @return $this
+     */
+    public function setRoleByDefault($roleByDefault)
+    {
+        $this->roleByDefault = $roleByDefault;
+        return $this;
+    }
+}

+ 283 - 0
old/Entity/AccessAndFunction/OrganizationFunction.php

@@ -0,0 +1,283 @@
+<?php
+
+namespace AppBundle\Entity\AccessAndFunction;
+use AppBundle\Annotation\DefaultField;
+use AppBundle\Annotation\ExportSplitFields;
+use AppBundle\Entity\Traits\ActivityPeriodTrait;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use AppBundle\Entity\Organization\Activity;
+
+/**
+ * Fonction d'un Access dans une Organization sur une période donnée
+ *
+ * @Iri("http://schema.org/OrganizationFunction")
+ */
+#[ORM\Entity(repositoryClass: 'AppBundle\Entity\AccessAndFunction\Repository\OrganizationFunctionRepository')]
+class OrganizationFunction
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    use ActivityPeriodTrait;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['organizationfunction', 'access_details', 'adherent_list', 'personnels_list', 'ca_list', 'accesses_list', 'othercontact_list', 'student_registration', 'student_registration_guardians', 'student_registration_accessfamily', 'board_list', 'licence_cmf', 'organization_function_edit', 'access_informations_edit', 'adherent_contact', 'cotisation_responsibles_accesses', 'view_from_manager_create', 'networkmanagers_list', 'online_registration_access_details', 'accesscmfnetwork'])]
+    private $id;
+    /**
+     * @var Access
+     */
+    #[ORM\ManyToOne(targetEntity: 'Access', inversedBy: 'organizationFunction')]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['organizationfunction', 'organization_function_edit'])]
+    private $access;
+    /**
+     * @var FunctionType
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\AccessAndFunction\FunctionType')]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['organizationfunction', 'access_details_organizationfunction', 'adherent_list_organizationfunction', 'personnels_list_organizationfunction', 'othercontact_list_organizationfunction', 'ca_list_organizationfunction', 'accesses_list_organizationfunction', 'student_registration_organizationfunction', 'student_registration_guardians', 'student_registration_accessfamily', 'board_list_organizationfunction', 'licence_cmf_organizationfunction', 'access_informations_edit_organizationfunction', 'adherent_contact_organizationfunction', 'organization_function_edit', 'cotisation_responsibles_accesses_organizationfunction', 'view_from_manager_create_organizationfunction', 'networkmanagers_list_organizationfunction', 'online_registration_access_details_organizationfunction', 'accesscmfnetwork_organizationfunction'])]
+    private $functionType;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'text', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['organizationfunction', 'access_details_organizationfunction', 'organization_function_edit', 'othercontact_list_organizationfunction', 'networkmanagers_list_organizationfunction', 'personnels_list_organizationfunction'])]
+    private $functionComplement;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\AccessAndFunction\DeparturesCauseEnum', 'toArray'])]
+    #[Groups(['organizationfunction', 'accesses_list_organizationfunction', 'adherent_list_organizationfunction', 'personnels_list_organizationfunction', 'ca_list_organizationfunction', 'board_list_organizationfunction', 'access_details_organizationfunction', 'organization_function_edit', 'view_from_manager_create_organizationfunction'])]
+    private $departureCause;
+    /**
+     * @var Activity
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Organization\Activity')]
+    #[ORM\JoinColumn(referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
+    #[Groups(['organizationfunction', 'access_details_organizationfunction', 'organization_function_edit'])]
+    private $activity;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => true])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['organizationfunction', 'organization_function_edit'])]
+    private $isMemberSection = true;
+    /**
+     * @var string
+     * @ExportSplitFields({"functionType.mission","startDate","endDate"})
+     */
+    #[Groups(['template'])]
+    private $fullLabelTemplate;
+    /**
+     * Sets id.
+     * 
+     * @param int $id
+     * 
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     * 
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Sets functionType.
+     * 
+     * @param string $functionType
+     * 
+     * @return $this
+     */
+    public function setFunctionType($functionType)
+    {
+        $this->functionType = $functionType;
+
+        return $this;
+    }
+    /**
+     * Get functionType
+     *
+     * @return \AppBundle\Entity\AccessAndFunction\FunctionType
+     */
+    public function getFunctionType()
+    {
+        return $this->functionType;
+    }
+    /**
+     * Sets functionComplement.
+     * 
+     * @param string $functionComplement
+     * 
+     * @return $this
+     */
+    public function setFunctionComplement($functionComplement)
+    {
+        $this->functionComplement = $functionComplement;
+
+        return $this;
+    }
+    /**
+     * Gets functionComplement.
+     * 
+     * @return string
+     */
+    public function getFunctionComplement()
+    {
+        return $this->functionComplement;
+    }
+    /**
+     * Sets departureCause.
+     * 
+     * @param string $departureCause
+     * 
+     * @return $this
+     */
+    public function setDepartureCause($departureCause)
+    {
+        $this->departureCause = $departureCause;
+
+        return $this;
+    }
+    /**
+     * Gets departureCause.
+     * 
+     * @return string
+     */
+    public function getDepartureCause()
+    {
+        return $this->departureCause;
+    }
+    /**
+     * Sets activity.
+     * 
+     * @param Activity $activity
+     * 
+     * @return $this
+     */
+    public function setActivity(Activity $activity = null)
+    {
+        $this->activity = $activity;
+
+        return $this;
+    }
+    /**
+     * Gets activity.
+     * 
+     * @return Activity
+     */
+    public function getActivity()
+    {
+        return $this->activity;
+    }
+    /**
+     * Set access
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $access
+     *
+     * @return OrganizationFunction
+     */
+    public function setAccess(\AppBundle\Entity\AccessAndFunction\Access $access)
+    {
+        $this->access = $access;
+
+        return $this;
+    }
+    /**
+     * Get access
+     *
+     * @return \AppBundle\Entity\AccessAndFunction\Access
+     */
+    public function getAccess()
+    {
+        return $this->access;
+    }
+    /**
+     * Sets isMemberSection.
+     *
+     * @param bool $isMemberSection
+     *
+     * @return $this
+     */
+    public function setIsPhysical($isMemberSection)
+    {
+        $this->isMemberSection = $isMemberSection;
+
+        return $this;
+    }
+    /**
+     * Gets isMemberSection.
+     *
+     * @return bool
+     */
+    public function getIsPhysical()
+    {
+        return $this->isMemberSection;
+    }
+    /**
+     * Set isMemberSection
+     *
+     * @param boolean $isMemberSection
+     *
+     * @return OrganizationFunction
+     */
+    public function setIsMemberSection($isMemberSection)
+    {
+        $this->isMemberSection = $isMemberSection;
+
+        return $this;
+    }
+    /**
+     * Get isMemberSection
+     *
+     * @return boolean
+     */
+    public function getIsMemberSection()
+    {
+        return $this->isMemberSection;
+    }
+    /**
+     * @return array
+     * @throws \Exception
+     */
+    public function getFullLabelTemplate()
+    {
+        $startDate = new \DateTime($this->getStartDate());
+
+
+        $fullLabelTemplate = [
+            ['value' => $this->getFunctionType()->getMission(), 'translate' => true],
+            $startDate->format('d-m-Y')
+        ];
+
+        if(!empty($this->getEndDate())){
+            $endDate = new \DateTime($this->getEndDate());
+            $fullLabelTemplate[] = $endDate->format('d-m-Y');
+        }
+
+        return $fullLabelTemplate;
+    }
+}

+ 143 - 0
old/Entity/AccessAndFunction/OrganizationResponsability.php

@@ -0,0 +1,143 @@
+<?php
+
+namespace AppBundle\Entity\AccessAndFunction;
+use AppBundle\Annotation\DefaultField;
+use AppBundle\Entity\Traits\ActivityPeriodTrait;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * Responsibilité d'un Access au sein d'une Organization
+ *
+ * @Iri("http://schema.org/OrganizationResponsability")
+ */
+#[ORM\Entity]
+class OrganizationResponsability
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    use ActivityPeriodTrait;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['organizationresponsability', 'access_details'])]
+    private $id;
+    /**
+     * @var Access
+     */
+    #[ORM\ManyToOne(targetEntity: 'Access', inversedBy: 'organizationResponsabilities')]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['organizationresponsability'])]
+    private $access;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'text', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['organizationresponsability', 'access_details_organizationresponsabilities'])]
+    private $responsability;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => true])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['organizationresponsability'])]
+    private $isPhysical = true;
+    /**
+     * Sets id.
+     * 
+     * @param int $id
+     * 
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     * 
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set responsability
+     *
+     * @param string $responsability
+     *
+     * @return OrganizationResponsability
+     */
+    public function setResponsability($responsability)
+    {
+        $this->responsability = $responsability;
+
+        return $this;
+    }
+    /**
+     * Get responsability
+     *
+     * @return string
+     */
+    public function getResponsability()
+    {
+        return $this->responsability;
+    }
+    /**
+     * Set access
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $access
+     *
+     * @return OrganizationResponsability
+     */
+    public function setAccess(\AppBundle\Entity\AccessAndFunction\Access $access)
+    {
+        $this->access = $access;
+
+        return $this;
+    }
+    /**
+     * Get access
+     *
+     * @return \AppBundle\Entity\AccessAndFunction\Access
+     */
+    public function getAccess()
+    {
+        return $this->access;
+    }
+    /**
+     * Sets isPhysical.
+     *
+     * @param bool $isPhysical
+     *
+     * @return $this
+     */
+    public function setIsPhysical($isPhysical)
+    {
+        $this->isPhysical = $isPhysical;
+
+        return $this;
+    }
+    /**
+     * Gets isPhysical.
+     *
+     * @return bool
+     */
+    public function getIsPhysical()
+    {
+        return $this->isPhysical;
+    }
+}

+ 221 - 0
old/Entity/AccessAndFunction/PersonalizedList.php

@@ -0,0 +1,221 @@
+<?php
+
+namespace AppBundle\Entity\AccessAndFunction;
+use AppBundle\Annotation\DefaultField;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+/**
+ * Personnalisation d'une liste par un Access
+ *
+ * @Iri("http://schema.org/PersonalizedList")
+ */
+#[ORM\Entity]
+class PersonalizedList
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['personalizedlist'])]
+    private $id;
+    /**
+     * @var Access
+     */
+    #[ORM\ManyToOne(targetEntity: 'Access', inversedBy: 'personalizedLists')]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['personalizedlist'])]
+    private $access;
+    /**
+     * @var $label
+     */
+    #[ORM\Column(type: 'string', length: 200, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['personalizedlist'])]
+    private $label;
+    /**
+     * @var array
+     */
+    #[ORM\Column(type: 'json_array', nullable: true)]
+    #[Groups(['personalizedlist'])]
+    private $filters;
+    #[ORM\Column(type: 'string', length: 150)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['personalizedlist'])]
+    private $entity;
+    /**
+     * @var array
+     */
+    #[ORM\Column(type: 'json_array', nullable: true)]
+    #[Groups(['personalizedlist'])]
+    private $columns;
+    /**
+     * @var $menuKey
+     */
+    #[ORM\Column(type: 'string', length: 150, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['personalizedlist'])]
+    private $menuKey;
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set filters
+     *
+     * @param array $filters
+     *
+     * @return PersonalizedList
+     */
+    public function setFilters($filters)
+    {
+        $this->filters = $filters;
+
+        return $this;
+    }
+    /**
+     * Get filters
+     *
+     * @return array
+     */
+    public function getFilters()
+    {
+        return $this->filters;
+    }
+    /**
+     * Set columns
+     *
+     * @param array $columns
+     *
+     * @return PersonalizedList
+     */
+    public function setColumns($columns)
+    {
+        $this->columns = $columns;
+
+        return $this;
+    }
+    /**
+     * Get columns
+     *
+     * @return array
+     */
+    public function getColumns()
+    {
+        return $this->columns;
+    }
+    /**
+     * Set access
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $access
+     *
+     * @return PersonalizedList
+     */
+    public function setAccess(\AppBundle\Entity\AccessAndFunction\Access $access)
+    {
+        $this->access = $access;
+
+        return $this;
+    }
+    /**
+     * Get access
+     *
+     * @return \AppBundle\Entity\AccessAndFunction\Access
+     */
+    public function getAccess()
+    {
+        return $this->access;
+    }
+    /**
+     * Set menuKey
+     *
+     * @param string $menuKey
+     *
+     * @return PersonalizedList
+     */
+    public function setMenuKey($menuKey)
+    {
+        $this->menuKey = $menuKey;
+
+        return $this;
+    }
+    /**
+     * Get menuKey
+     *
+     * @return string
+     */
+    public function getMenuKey()
+    {
+        return $this->menuKey;
+    }
+    /**
+     * Set label
+     *
+     * @param string $label
+     *
+     * @return PersonalizedList
+     */
+    public function setLabel($label)
+    {
+        $this->label = $label;
+
+        return $this;
+    }
+    /**
+     * Get label
+     *
+     * @return string
+     */
+    public function getLabel()
+    {
+        return $this->label;
+    }
+    /**
+     * Set entity
+     *
+     * @param string $entity
+     *
+     * @return PersonalizedList
+     */
+    public function setEntity($entity)
+    {
+        $this->entity = $entity;
+
+        return $this;
+    }
+    /**
+     * Get entity
+     *
+     * @return string
+     */
+    public function getEntity()
+    {
+        return $this->entity;
+    }
+}

+ 440 - 0
old/Entity/AccessAndFunction/Repository/AccessRepository.php

@@ -0,0 +1,440 @@
+<?php
+
+namespace AppBundle\Entity\AccessAndFunction\Repository;
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\AccessAndFunction\FunctionType;
+use AppBundle\Entity\HasItemQueryBuilderInterface;
+use AppBundle\Entity\Organization\Organization;
+use AppBundle\Entity\Person\Person;
+use AppBundle\Enum\AccessAndFunction\FunctionEnum;
+use AppBundle\Enum\AccessAndFunction\LicenseTypeEnum;
+use AppBundle\Enum\OnlineRegistration\ValidationStateEnum;
+use AppBundle\Services\AccessService;
+use Doctrine\ORM\EntityRepository;
+use Doctrine\ORM\QueryBuilder;
+
+/**
+ * Description of AccessRepository
+ *
+ * @author Sébastien Hupin <sebastien.hupin at gmail.com>
+ */
+class AccessRepository extends EntityRepository implements HasItemQueryBuilderInterface
+{
+
+    /**
+     * @param Person $person
+     * @param bool $ignoreCheckNetworkOrganizationEndDate
+     * @return array
+     * @throws \Exception
+     */
+    public function findValidAccess(\AppBundle\Entity\Person\Person $person, $ignoreCheckNetworkOrganizationEndDate = FALSE, $controleLoginEnabled = true)
+    {
+        $filter = $this->_em->getFilters()->enable('activity_year');
+        $filter->setParameter('disabledFilter', 1);
+
+        $datetime = new \DateTime();
+        $today = $datetime->format('Y-m-d');
+
+        $qb = $this->createQueryBuilder('a');
+
+        $qb
+            ->innerJoin('AppBundle:Organization\Organization', 'o', 'WITH', 'o.id = a.organization')
+            ->innerJoin('AppBundle:Network\NetworkOrganization', 'n', 'WITH', 'o.id = n.organization')
+            ->where('a.person = :person')
+            ->andWhere('n.startDate <= :today')
+            ->setParameter('person', $person)
+            ->setParameter('today', $today)
+           ;
+
+        if($controleLoginEnabled){
+            $qb
+                ->andWhere('a.loginEnabled = :loginEnabled')
+                ->setParameter('loginEnabled', true);
+        }
+
+        if ($ignoreCheckNetworkOrganizationEndDate == FALSE) {
+            $qb
+               ->andWhere('n.endDate >= :today OR n.endDate = :emptydate OR n.endDate IS NULL')
+               ->setParameter('emptydate', '0000-00-00');
+        }
+
+        $result = $qb->getQuery()->getResult();
+        $filter->setParameter('disabledFilter', 0);
+        return $result;
+
+    }
+
+    /**
+     * @param AccessService $access
+     * @return array
+     */
+    public function findValidTeacher(AccessService $access)
+    {
+        $qb = $this->createQueryBuilder('a');
+
+        $qb->innerJoin('a.person', 'person')
+            ->innerJoin('AppBundle:AccessAndFunction\OrganizationFunction', 'o', 'WITH', 'o.access = a.id')
+            ->innerJoin('AppBundle:AccessAndFunction\FunctionType', 'ft', 'WITH', 'o.functionType = ft.id')
+            ->where('ft.mission = :mission')
+            ->andWhere('a.organization = :organization')
+            ->setParameter('organization', $access->getOrganization())
+            ->setParameter('mission', FunctionEnum::TEACHER)
+            ->orderBy('person.name')
+            ;
+
+        return $qb->getQuery()->getResult();
+
+    }
+
+    /**
+     * @param Access $access
+     * @return array
+     */
+    public function doesHaveFunction($accessId, $function)
+    {
+        $qb = $this->createQueryBuilder('a');
+        $qb->innerJoin('a.organizationFunction', 'o')
+            ->innerJoin('o.functionType', 'ft')
+            ->where('ft.mission = :mission')
+            ->andWhere('a.id = :id')
+            ->setParameter('id', $accessId)
+            ->setParameter('mission', $function)
+        ;
+        return count($qb->getQuery()->getResult()) > 0;
+    }
+
+    /**
+     * @param Access $access
+     * @return array
+     */
+    public function doesHeStudentDuringPeriod(Access $access, $startDate, $enDate)
+    {
+        $filter = $this->_em->getFilters()->enable('activity_year');
+        $filter->setParameter('disabledFilter', 1);
+        $qb = $this->createQueryBuilder('a');
+
+        $qb->innerJoin('a.organizationFunction', 'o')
+            ->innerJoin('o.functionType', 'ft')
+            ->where('ft.mission = :mission')
+            ->andWhere('(o.startDate <= :enDate AND (o.endDate >= :startDate  OR  o.endDate IS NULL)) AND ((o.endDate >= :startDate  OR  o.endDate IS NULL) AND o.startDate <= :enDate)')
+            ->andWhere('a.id = :id')
+            ->setParameter('id', $access->getId())
+            ->setParameter('mission', FunctionEnum::STUDENT)
+            ->setParameter('startDate', $startDate)
+            ->setParameter('enDate', $enDate);
+        ;
+
+        $filter->setParameter('disabledFilter', 0);
+        return count($qb->getQuery()->getResult()) > 0;
+    }
+
+    /**
+     * Used by Elastica to transform results to model
+     *
+     * @param string $entityAlias
+     * @return  Doctrine\ORM\QueryBuilder
+     */
+    public function createSearchQueryBuilder($entityAlias)
+    {
+        $qb = $this->createQueryBuilder($entityAlias);
+
+        $qb->select($entityAlias, 'p', 'g')
+            ->innerJoin($entityAlias.'.person', 'p')
+//            ->leftJoin('p.addressPostal', 'a1', 'WITH', "a1.person = p.id AND a1.type = 'ADDRESS_PRINCIPAL'")
+//            ->leftJoin('p.guardians', 'g', 'WITH', 'g.children = p.id  AND g.isPrincipal = 1')
+//            ->leftJoin(
+//                'g.children',
+//                'p2',
+//                'WITH',
+//                'p2.id = g.children'
+//            )//            ->leftJoin('p2.addressPostal', 'a2', 'WITH', "a2.person = p2.id AND a2.type = 'ADDRESS_PRINCIPAL'")
+        ;
+
+        return $qb;
+    }
+
+    public function findDuplicatePhysicalAcces($name,$givenName, Organization $organization)
+    {
+        $qb = $this->createQueryBuilder('a')
+            ->innerJoin(Person::class, 'pers', 'WITH', 'a.person= pers.id')
+            ->andWhere('pers.isPhysical = 1')
+            ->andWhere('pers.givenName=:givenName')
+            ->andWhere('pers.name=:name')
+            ->andWhere('a.organization=:organizationId')
+            ->setParameter(':givenName', $givenName)
+            ->setParameter(':name', $name)
+            ->setParameter(':organizationId', $organization);
+
+        return $qb->getQuery()->getResult();
+    }
+
+    public function findDuplicateMoralAcces(Person $person, Organization $organization)
+    {
+        $qb = $this->createQueryBuilder('a')
+            ->innerJoin(Person::class, 'pers', 'WITH', 'a.person= pers.id')
+            ->andWhere('pers.isPhysical = 0')
+            ->andWhere('pers.name=:name')
+            ->andWhere('a.organization=:organizationId')
+            ->setParameter(':name', $person->getName())
+            ->setParameter(':organizationId', $organization);
+
+        return $qb->getQuery()->getResult();
+    }
+
+    public function createDetailQueryBuilder(array $groups = null): QueryBuilder
+    {
+        if(is_array($groups) && in_array('access_details', $groups)){
+            return $this
+                ->createQueryBuilder('o')
+                ->select('o', 'pe', 'pap', 'af')
+                ->leftJoin('o.person', 'pe')
+                ->leftJoin('pe.personAddressPostal', 'pap')
+                ->leftJoin('o.accessFamily', 'af')
+                ;
+        }
+
+        return $this->createQueryBuilder('o');
+    }
+
+    public function createListQueryBuilder(){
+        return $this
+            ->createQueryBuilder('o')
+            ->select('o', 'person')
+            ->innerJoin('o.person', 'person')
+            ;
+    }
+
+    /**
+     * @param Organization $organization
+     * @param $mission
+     * @return array
+     */
+    public function findByOrganizationAndMission(Organization $organization,$mission)
+    {
+        $datetime = new \DateTime();
+        $today = $datetime->format('Y-m-d');
+
+
+        $qb = $this->createQueryBuilder('a')
+            ->innerJoin(Person::class, 'pers', 'WITH', 'a.person= pers.id')
+            ->andWhere('pers.isPhysical = 1')
+            ->andWhere('a.organization=:organizationId')
+            ->innerJoin('a.organizationFunction', 'ofu')
+            ->innerJoin('ofu.functionType', 'ft')
+            ->andWhere('ft.mission=:mission')
+            ->andWhere('ofu.startDate < :today AND (ofu.endDate >= :today OR  ofu.endDate IS NULL)')
+            ->setParameter('organizationId', $organization)
+            ->setParameter('mission', $mission)
+            ->setParameter('today', $today);
+
+        return $qb->getQuery()->getResult();
+    }
+
+    /**
+     * Retourne tous les accesses possédant une fonctions données d'une organisation
+     * @param $organizationId
+     * @return array
+     */
+    public function findAllAccessesByMission($organizationId, array $functions) {
+
+        $queryBuilder =
+            $this->createQueryBuilder('access');
+
+        $queryBuilder
+            ->select('access, access_wishes, access_billing, access_network_setting, access_communication, access_social')
+            ->innerJoin('access.organization', 'organization')
+            ->innerJoin('access.organizationFunction', 'ofu')
+            ->innerJoin('ofu.functionType', 'ft')
+            ->leftJoin('access.accessWishes', 'access_wishes')
+            ->leftJoin('access.accessBilling', 'access_billing')
+            ->leftJoin('access.accessNetworkSetting', 'access_network_setting')
+            ->leftJoin('access.accessCommunication', 'access_communication')
+            ->leftJoin('access.accessSocial', 'access_social')
+            ->andWhere('ft.mission in (:mission)')
+            ->andWhere('organization.id=:organizationId')
+            ->andWhere('access.newAccess=:newAccess')
+            ->setParameter('newAccess',  false)
+            ->setParameter('organizationId',  $organizationId)
+            ->setParameter('mission',  $functions);
+
+        $query = $queryBuilder->getQuery();
+        $results = $query->getResult();
+
+        return $results;
+    }
+
+    /**
+     * Retourne tous les accesses possédant une fonctions données d'une organisation
+     * @param $organizationId
+     * @return array
+     */
+    public function findAllAccessesByMissionAndWithoutCompletingRegistration($organizationId, array $functions) {
+
+        $queryBuilder =
+            $this->createQueryBuilder('access');
+
+        $queryBuilder
+            ->select('access, access_wishes, access_billing, access_network_setting, access_communication, access_social,access_wish','access_family_wish')
+            ->innerJoin('access.organization', 'organization')
+            ->innerJoin('access.organizationFunction', 'ofu')
+            ->innerJoin('ofu.functionType', 'ft')
+            ->leftJoin('access.accessWishes', 'access_wishes')
+            ->leftJoin('access.accessBilling', 'access_billing')
+            ->leftJoin('access.accessNetworkSetting', 'access_network_setting')
+            ->leftJoin('access.accessCommunication', 'access_communication')
+            ->leftJoin('access.accessSocial', 'access_social')
+            ->leftJoin('access.accessWishes', 'access_wish')
+            ->leftJoin('access_wish.accessFamilyWish', 'access_family_wish')
+            ->andWhere('ft.mission in (:mission)')
+            ->andWhere('organization.id=:organizationId')
+            ->andWhere('access.newAccess=:newAccess')
+            ->andWhere('access_wish.id is NULL OR access_family_wish.registrationCompleted = 0')
+            ->setParameter('newAccess',  false)
+            ->setParameter('organizationId',  $organizationId)
+            ->setParameter('mission',  $functions);
+
+        $query = $queryBuilder->getQuery();
+        $results = $query->getResult();
+
+        return $results;
+    }
+
+    public function findAllAccessesByAccessWishOpenForNewEducation($organizationId) {
+        $currentYear = (new \DateTime())->format('Y');
+
+        $queryBuilder =
+            $this->createQueryBuilder('access');
+
+        $queryBuilder
+            ->select('access')
+            ->innerJoin('access.organization', 'organization')
+            ->leftJoin('access.accessWishes', 'access_wishes')
+            ->andWhere('access_wishes.validationState =:validationState')
+            ->andWhere('organization.id=:organizationId')
+            ->andWhere('(access_wishes.createDate >= :startDate and access_wishes.createDate <= :endDate)')
+            ->setParameter('organizationId',  $organizationId)
+            ->setParameter('validationState',  ValidationStateEnum::OPEN_FOR_EDUCATIONS)
+            ->setParameter('startDate', new \DateTime($currentYear.'-01-01'))
+            ->setParameter('endDate', new \DateTime($currentYear.'-12-31'))
+            ;
+
+        $query = $queryBuilder->getQuery();
+        $results = $query->getResult();
+
+        return $results;
+    }
+
+    /**
+     * Get all students for a teacher
+     * @param Access $teacher
+     * @return Array<Access>
+     */
+    public function findStudent(Access $teacher) {
+
+        $queryBuilder =
+            $this->createQueryBuilder('o');
+
+        $queryBuilder->innerJoin('o.educationStudent', 'es')
+            ->innerJoin('es.teachers', 'teacher')
+            ->andWhere($queryBuilder->expr()->eq('teacher.id', ':teacher'))
+            ->setParameter(':teacher', $teacher);
+
+        $query = $queryBuilder->getQuery();
+        $results = $query->getResult();
+
+        return $results;
+
+    }
+
+    /**
+     * @param Organization $organization
+     * @param $startDate
+     * @param $enDate
+     * @return array
+     */
+    public function findByStudentsByDates(Organization $organization,$startDate,$enDate)
+    {
+        $qb = $this->createQueryBuilder('a')
+            ->innerJoin(Person::class, 'pers', 'WITH', 'a.person= pers.id')
+            ->andWhere('pers.isPhysical = 1')
+            ->andWhere('a.organization=:organizationId')
+            ->innerJoin('a.organizationFunction', 'ofu')
+            ->innerJoin('ofu.functionType', 'ft')
+            ->andWhere('ft.mission=:mission')
+            ->andWhere('(ofu.startDate <= :enDate AND (ofu.endDate >= :startDate  OR  ofu.endDate IS NULL)) AND ((ofu.endDate >= :startDate  OR  ofu.endDate IS NULL) AND ofu.startDate <= :enDate)')
+            ->setParameter('organizationId', $organization)
+            ->setParameter('mission', FunctionEnum::STUDENT)
+            ->setParameter('startDate', $startDate)
+            ->setParameter('enDate', $enDate);
+
+        return $qb->getQuery()->getResult();
+    }
+
+    /**
+     * @param $accessIds
+     * @param $organization
+     * @return array
+     */
+    public function findAccessByIds($accessIds,$organization)
+    {
+        $queryBuilder = $this->createQueryBuilder('o');
+        $queryBuilder
+            ->andWhere(
+                $queryBuilder->expr()->in('o.id', ':ids'))
+            ->andWhere('o.organization=:organizationId')
+            ->setParameter('ids', $accessIds)
+            ->setParameter('organizationId', $organization);
+
+        return $queryBuilder->getQuery()->getResult();
+    }
+
+    public function findAccessWhoAreReEnrolled(Organization $organization){
+        $datetimeNow = new \Datetime('now');
+        $currentYear = $datetimeNow->format('Y');
+        $pastYear = $currentYear-1;
+
+        $filter = $this->_em->getFilters()->enable('activity_year');
+        $filter->setParameter('disabledFilter', 1);
+        $queryBuilder = $this->createQueryBuilder('o');
+        $queryBuilder
+            ->innerJoin('o.educationStudent', 'es')
+            ->andWhere('es.startYear=:pastYear')
+            ->innerJoin('o.educationStudent', 'es2')
+            ->andWhere('es2.startYear=:currentYear')
+            ->andWhere('o.organization=:organizationId');
+        $queryBuilder
+            ->setParameter('pastYear', $pastYear)
+            ->setParameter('currentYear', $currentYear)
+            ->setParameter('organizationId', $organization)
+
+            ->groupBy('o.id');
+
+        $result = $queryBuilder->getQuery()->getResult();
+        $filter->setParameter('disabledFilter', 0);
+        return $result;
+    }
+
+    public function findAccessWhoAreEnrolled(Organization $organization){
+        $datetimeNow = new \Datetime('now');
+        $currentYear = $datetimeNow->format('Y');
+        $pastYear = $currentYear-1;
+
+        $filter = $this->_em->getFilters()->enable('activity_year');
+        $filter->setParameter('disabledFilter', 1);
+        $queryBuilder = $this->createQueryBuilder('o');
+        $queryBuilder
+            ->innerJoin('o.educationStudent', 'es2')
+            ->andWhere('es2.startYear=:currentYear')
+            ->andWhere('o.organization=:organizationId');
+        $queryBuilder
+            ->setParameter('currentYear', $currentYear)
+            ->setParameter('organizationId', $organization)
+
+            ->groupBy('o.id');
+
+        $result = $queryBuilder->getQuery()->getResult();
+        $filter->setParameter('disabledFilter', 0);
+        return $result;
+    }
+}
+

+ 54 - 0
old/Entity/AccessAndFunction/Repository/OrganizationFunctionRepository.php

@@ -0,0 +1,54 @@
+<?php
+
+namespace AppBundle\Entity\AccessAndFunction\Repository;
+use AppBundle\Entity\AccessAndFunction\Access;
+use Doctrine\ORM\EntityRepository;
+
+/**
+ * Description of OrganizationFunctionRepository
+ *
+ */
+class OrganizationFunctionRepository extends EntityRepository
+{
+    /**
+     * @param Access $access
+     * @return array
+     */
+    public function getArchivedOrganizationFunction($enDate, $organizationId)
+    {
+        $filter = $this->_em->getFilters()->enable('activity_year');
+        $filter->setParameter('disabledFilter', 1);
+        $qb = $this->createQueryBuilder('organization_function');
+
+        $qb
+            ->innerJoin('organization_function.access', 'access')
+            ->innerJoin('access.organization', 'organization')
+            ->andWhere('organization_function.endDate = :enDate')
+            ->andWhere('organization.id = :id')
+            ->setParameter('id', $organizationId)
+            ->setParameter('enDate', $enDate)
+        ;
+
+        $filter->setParameter('disabledFilter', 0);
+        return $qb->getQuery()->getResult();
+    }
+
+    public function getAllOrganizationFunctionByAccessAndDates(Access $access,$startDate,$endDate)
+    {
+        $filter = $this->_em->getFilters()->enable('activity_year');
+        $filter->setParameter('disabledFilter', 1);
+        $qb = $this->createQueryBuilder('organization_function');
+
+        $qb
+            ->innerJoin('organization_function.access', 'access')
+            ->andWhere('access.id = :access')
+            ->andWhere('(organization_function.startDate <= :startDate and (organization_function.endDate is null or organization_function.endDate > :startDate)) or (organization_function.startDate > :startDate and organization_function.startDate < :endDate)')
+            ->setParameter('access', $access)
+            ->setParameter('startDate', $startDate)
+            ->setParameter('endDate', $endDate)
+        ;
+
+        $filter->setParameter('disabledFilter', 0);
+        return $qb->getQuery()->getResult();
+    }
+}

+ 223 - 0
old/Entity/AccessWish/AccessFamilyWish.php

@@ -0,0 +1,223 @@
+<?php
+
+namespace AppBundle\Entity\AccessWish;
+
+use AppBundle\Enum\OnlineRegistration\StatusEnum;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use DoctrineExtensions\Query\Mysql\Date;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * Access.
+ *
+ * @see http://schema.org/AccessFamilyWish Documentation on Schema.org
+ *
+ * @Iri("http://schema.org/AccessFamilyWish")
+ */
+#[ORM\Entity]
+class AccessFamilyWish
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['accessfamilywish', 'access_familly_onlineregistration', 'online_registration_access_family_accesswishes', 'online_registration_validation_access_family_accesswish', 'online_registration_validation_access_family_accesswishreregistrations', 'accesswish_mail'])]
+    private $id;
+    /**
+     * @var ArrayCollection<AccessWish>
+     */
+    #[ORM\OneToMany(targetEntity: 'AppBundle\Entity\AccessWish\AccessWish', mappedBy: 'accessFamilyWish', cascade: ['remove'])]
+    #[Groups(['accessfamilywish_accesswishes', 'access_familly_onlineregistration', 'online_registration_access_family_accesswishes', 'online_registration_validation_access_family_accesswish', 'online_registration_validation_access_family_accesswishreregistrations', 'accesswish_mail_accessfamilywish'])]
+    private $accessWishes;
+    /**
+     * @var ArrayCollection<AccessWish>
+     */
+    #[ORM\OneToMany(targetEntity: 'AppBundle\Entity\AccessWish\AccessWish', mappedBy: 'accessFamilyWish', cascade: ['remove'], fetch: 'EXTRA_LAZY')]
+    #[Groups(['accessfamilywish_accesswishes', 'education_student_wish_list_accesswishreregistrations', 'education_student_wish_list_accesswish'])]
+    private $accessWishesGuardians;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accessfamilywish', 'access_familly_onlineregistration'])]
+    private $registrationCompleted = false;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'datetime', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['accessfamilywish', 'access_familly_onlineregistration'])]
+    private $registrationCompletedDateTime;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accessfamilywish'])]
+    private $registrationIsValidated = false;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accessfamilywish'])]
+    private $closeRegistration = false;
+    public function __construct()
+    {
+        $this->accessWishes = new ArrayCollection();
+    }
+    /**
+     * Get id
+     *
+     * @return integer
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * @param $registrationCompleted
+     * @return $this
+     * @throws \Exception
+     */
+    public function setRegistrationCompleted($registrationCompleted)
+    {
+        if(!$registrationCompleted)
+            return $this;
+        if(empty($this->getRegistrationCompletedDateTime()))
+            $this->setRegistrationCompletedDateTime(new \DateTime());
+        $this->registrationCompleted = $registrationCompleted;
+
+        return $this;
+    }
+    /**
+     * Get registrationCompleted
+     *
+     * @return boolean
+     */
+    public function getRegistrationCompleted()
+    {
+        return $this->registrationCompleted;
+    }
+    /**
+     * Add accessWish
+     *
+     * @param \AppBundle\Entity\AccessWish\AccessWish $accessWish
+     *
+     * @return AccessFamilyWish
+     */
+    public function addAccessWish(\AppBundle\Entity\AccessWish\AccessWish $accessWish)
+    {
+        $accessWish->setAccessFamilyWish($this);
+        $this->accessWishes[] = $accessWish;
+
+        return $this;
+    }
+    /**
+     * Remove accessWish
+     *
+     * @param \AppBundle\Entity\AccessWish\AccessWish $accessWish
+     */
+    public function removeAccessWish(\AppBundle\Entity\AccessWish\AccessWish $accessWish)
+    {
+        $accessWish->setAccessFamilyWish(null);
+        $this->accessWishes->removeElement($accessWish);
+    }
+    /**
+     * Get accessWishes
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getAccessWishes()
+    {
+        return $this->accessWishes;
+    }
+    public function getAccessWishesGuardians()
+    {
+        $guardians = [];
+        foreach ($this->accessWishes as $accessWish){
+            if($accessWish->getStatus() === StatusEnum::RESPONSIBLE)
+                $guardians[] = $accessWish;
+        }
+        return $guardians;
+    }
+    /**
+     * Set registrationCompletedDateTime
+     *
+     * @param \DateTime $registrationCompletedDateTime
+     *
+     * @return AccessFamilyWish
+     */
+    public function setRegistrationCompletedDateTime($registrationCompletedDateTime)
+    {
+        $this->registrationCompletedDateTime = $registrationCompletedDateTime;
+
+        return $this;
+    }
+    /**
+     * Get registrationCompletedDateTime
+     *
+     * @return \DateTime
+     */
+    public function getRegistrationCompletedDateTime()
+    {
+        return $this->registrationCompletedDateTime;
+    }
+    /**
+     * Set registrationIsValidated
+     *
+     * @param boolean $registrationIsValidated
+     *
+     * @return AccessFamilyWish
+     */
+    public function setRegistrationIsValidated($registrationIsValidated)
+    {
+        $this->registrationIsValidated = $registrationIsValidated;
+
+        return $this;
+    }
+    /**
+     * Get registrationIsValidated
+     *
+     * @return boolean
+     */
+    public function getRegistrationIsValidated()
+    {
+        return $this->registrationIsValidated;
+    }
+    /**
+     * Set closeRegistration
+     *
+     * @param boolean $closeRegistration
+     *
+     * @return AccessFamilyWish
+     */
+    public function setCloseRegistration($closeRegistration)
+    {
+        $this->closeRegistration = $closeRegistration;
+
+        return $this;
+    }
+    /**
+     * Get closeRegistration
+     *
+     * @return boolean
+     */
+    public function getCloseRegistration()
+    {
+        return $this->closeRegistration;
+    }
+}

+ 363 - 0
old/Entity/AccessWish/AccessTmp.php

@@ -0,0 +1,363 @@
+<?php
+
+namespace AppBundle\Entity\AccessWish;
+
+use AppBundle\Entity\Organization\Organization;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use Doctrine\ORM\Mapping as ORM;
+use Symfony\Component\Validator\Constraints as Assert;
+
+/**
+ * Contient les access temporaires d'une organisation = les email qui ont fait la procédure signin
+ */
+#[ORM\Entity]
+class AccessTmp
+{
+    use TimestampableEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    private $id;
+    /**
+     * @var Organization
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Organization\Organization')]
+    private $organization;
+    /**
+     * @var string
+     */
+    #[Assert\Type(type: 'string')]
+    #[ORM\Column(type: 'string', nullable: true)]
+    private $mail;
+    /**
+     * @var string
+     */
+    #[Assert\Type(type: 'string')]
+    #[ORM\Column(type: 'string', nullable: true)]
+    private $username;
+    /**
+     * @var string
+     */
+    #[Assert\Type(type: 'string')]
+    #[ORM\Column(type: 'string', nullable: true)]
+    private $password;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 100, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Length(max: 100, maxMessage: 'invalid-max-length')]
+    private $name;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 50, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Length(max: 50, maxMessage: 'invalid-max-length')]
+    private $givenName;
+    /**
+     * @var \DateTime Date of birth.
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date(message: 'invalid-date')]
+    private $birthDate;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    private $informationRetainedAndUsed = false;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    private $cgu = false;
+    /**
+     * Random string sent to the user email address in order to verify it
+     *
+     * @var string
+     */
+    #[ORM\Column(name: 'confirmation_token', type: 'string', nullable: false)]
+    private $confirmationToken;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'datetime', nullable: false)]
+    private $tokenGivenDate;
+    public function __construct()
+    {
+
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Sets organization.
+     *
+     * @param Organization $organization
+     *
+     * @return $this
+     */
+    public function setOrganization(Organization $organization = null)
+    {
+        $this->organization = $organization;
+
+        return $this;
+    }
+    /**
+     * Gets organization.
+     *
+     * @return Organization
+     */
+    public function getOrganization()
+    {
+        return $this->organization;
+    }
+    /**
+     * Sets mail.
+     *
+     * @param string $mail
+     *
+     * @return $this
+     */
+    public function setMail($mail)
+    {
+        $this->mail = $mail;
+
+        return $this;
+    }
+    /**
+     * Gets mail.
+     *
+     * @return string
+     */
+    public function getMail()
+    {
+        return $this->mail;
+    }
+    /**
+     * Sets username.
+     *
+     * @param string $username
+     *
+     * @return $this
+     */
+    public function setUsername($username)
+    {
+        $this->username = $username;
+
+        return $this;
+    }
+    /**
+     * Gets username.
+     *
+     * @return string
+     */
+    public function getUsername()
+    {
+        return $this->username;
+    }
+    /**
+     * Sets password.
+     *
+     * @param string $password
+     *
+     * @return $this
+     */
+    public function setPassword($password)
+    {
+        $this->password = $password;
+
+        return $this;
+    }
+    /**
+     * Gets password.
+     *
+     * @return string
+     */
+    public function getPassword()
+    {
+        return $this->password;
+    }
+    /**
+     * Sets confirmation token.
+     *
+     * @param string $token
+     *
+     * @return $this
+     */
+    public function setConfirmationToken($token)
+    {
+        $this->confirmationToken = $token;
+
+        return $this;
+    }
+    /**
+     * Gets confirmation token.
+     *
+     * @return string
+     */
+    public function getConfirmationToken()
+    {
+        return $this->confirmationToken;
+    }
+    /**
+     * set token given date
+     * @param \DateTime $tokenGivenDate
+     * @return $this
+     */
+    public function setTokenGivenDate(\DateTime $tokenGivenDate)
+    {
+        $this->tokenGivenDate = $tokenGivenDate;
+        return $this;
+    }
+    /**
+     * Gets token given date
+     *
+     * @return \DateTime
+     */
+    public function getTokenGivenDate()
+    {
+        return $this->tokenGivenDate;
+    }
+    public function isTokenNonExpired($ttl)
+    {
+        return $this->getTokenGivenDate() instanceof \DateTime &&
+            $this->getTokenGivenDate()->getTimestamp() + $ttl > time();
+    }
+    /**
+     * Set name
+     *
+     * @param string $name
+     *
+     * @return AccessTmp
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+
+        return $this;
+    }
+    /**
+     * Get name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+    /**
+     * Set givenName
+     *
+     * @param string $givenName
+     *
+     * @return AccessTmp
+     */
+    public function setGivenName($givenName)
+    {
+        $this->givenName = $givenName;
+
+        return $this;
+    }
+    /**
+     * Get givenName
+     *
+     * @return string
+     */
+    public function getGivenName()
+    {
+        return $this->givenName;
+    }
+    /**
+     * Set birthDate
+     *
+     * @param \DateTime $birthDate
+     *
+     * @return AccessTmp
+     */
+    public function setBirthDate($birthDate)
+    {
+        $this->birthDate = $birthDate;
+
+        return $this;
+    }
+    /**
+     * Get birthDate
+     *
+     * @return \DateTime
+     */
+    public function getBirthDate()
+    {
+        return $this->birthDate;
+    }
+    /**
+     * Set informationRetainedAndUsed
+     *
+     * @param boolean $informationRetainedAndUsed
+     *
+     * @return AccessTmp
+     */
+    public function setInformationRetainedAndUsed($informationRetainedAndUsed)
+    {
+        $this->informationRetainedAndUsed = $informationRetainedAndUsed;
+
+        return $this;
+    }
+    /**
+     * Get informationRetainedAndUsed
+     *
+     * @return boolean
+     */
+    public function getInformationRetainedAndUsed()
+    {
+        return $this->informationRetainedAndUsed;
+    }
+    /**
+     * Set cgu
+     *
+     * @param boolean $cgu
+     *
+     * @return AccessTmp
+     */
+    public function setCgu($cgu)
+    {
+        $this->cgu = $cgu;
+
+        return $this;
+    }
+    /**
+     * Get cgu
+     *
+     * @return boolean
+     */
+    public function getCgu()
+    {
+        return $this->cgu;
+    }
+}

+ 1306 - 0
old/Entity/AccessWish/AccessWish.php

@@ -0,0 +1,1306 @@
+<?php
+
+namespace AppBundle\Entity\AccessWish;
+
+use AppBundle\Annotation\DefaultField;
+use AppBundle\Annotation\ExportSplitFields;
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\Core\Country;
+use AppBundle\Entity\Core\File;
+use AppBundle\Entity\Core\Tagg;
+use AppBundle\Entity\Organization\Organization;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use DoctrineExtensions\Query\Mysql\Date;
+use Dunglas\ApiBundle\Annotation\Iri;
+use libphonenumber\PhoneNumberUtil;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber as AssertPhoneNumber;
+use AppBundle\Validator\Constraints as OpentalentAssert;
+
+/**
+ * Access.
+ *
+ * @see http://schema.org/Access Documentation on Schema.org
+ *
+ * @Iri("http://schema.org/AccessWish")
+ */
+#[ORM\Entity(repositoryClass: 'AppBundle\Entity\AccessWish\Repository\AccessWishRepository')]
+class AccessWish
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['accesswish', 'education_student_wish_list', 'online_registration_access_details', 'online_registration_access_family', 'online_registration_validation_access_family', 'online_registration_validation', 'accesswish_mail'])]
+    private $id;
+    /**
+     * @var Organization
+     *
+     * @DefaultField
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Organization\Organization')]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['accesswish'])]
+    private $organization;
+    /**
+     * @var Access
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\AccessAndFunction\Access', inversedBy: 'accessWishes', cascade: ['persist'])]
+    #[ORM\JoinColumn(onDelete: 'CASCADE')]
+    #[Groups(['accesswish', 'online_registration_access_family_accesswishes', 'education_student_wish_list_accesswish', 'education_student_wish_list_accesswishreregistrations', 'online_registration_validation'])]
+    private $accessOriginal;
+    /**
+     * @var AccessFamilyWish
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\AccessWish\AccessFamilyWish', inversedBy: 'accessWishes')]
+    #[Groups(['accesswish_accessfamilywish', 'online_registration_access_family_accesswishes', 'online_registration_validation_access_family_accesswish', 'online_registration_validation_access_family_accesswishreregistrations', 'accesswish_mail', 'education_student_wish_list_accesswishreregistrations', 'education_student_wish_list_accesswish'])]
+    private $accessFamilyWish;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\OnlineRegistration\StatusEnum', 'toArray'], message: 'invalid-choice')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation', 'accesswish_mail_accessfamilywish'])]
+    private $status;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accesswish', 'online_registration'])]
+    private $isNewMemberFamily = false;
+    /**
+     * @var string
+     *
+     * @Iri("https://schema.org/givenName")
+     */
+    #[ORM\Column(type: 'string', length: 50, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Length(max: 50, maxMessage: 'invalid-max-length')]
+    #[Groups(['accesswish', 'online_registration', 'education_student_wish_list_accesswish', 'education_student_wish_list_accesswishreregistrations', 'online_registration_validation', 'education_student_wish_list_accesswishreregistrations'])]
+    private $givenName;
+    /**
+     * @var string
+     *
+     * @Iri("https://schema.org/name")
+     */
+    #[ORM\Column(type: 'string', length: 100, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Length(max: 100, maxMessage: 'invalid-max-length')]
+    #[Groups(['accesswish', 'online_registration', 'education_student_wish_list_accesswish', 'education_student_wish_list_accesswishreregistrations', 'online_registration_validation', 'education_student_wish_list_accesswishreregistrations'])]
+    private $name;
+    /**
+     * @var File
+     *
+     * @Iri("https://schema.org/image")
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Core\File')]
+    #[ORM\JoinColumn(referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $image;
+    /**
+     * @var \DateTime Date of birth.
+     *
+     * @Iri("https://schema.org/birthDate")
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date(message: 'invalid-date')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation', 'education_student_wish_list_accesswish', 'education_student_wish_list_accesswishreregistrations'])]
+    private $birthDate;
+    /**
+     * @var int
+     */
+    #[Groups(['template', 'education_student_wish_list_accesswish', 'education_student_wish_list_accesswishreregistrations'])]
+    protected $ageTemplate;
+    /**
+     * @var string Gender of the person.
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Person\GenderEnum', 'toArray'], message: 'invalid-choice')]
+    #[Groups(['accesswish', 'online_registration', 'education_student_wish_list_accesswish', 'education_student_wish_list_accesswishreregistrations', 'online_registration_validation'])]
+    private $genderEnum;
+    /**
+     * @var string Email address.
+     *
+     * @Iri("https://schema.org/email")
+     */
+    #[ORM\Column(type: 'string', length: 255, nullable: true)]
+    #[Assert\Email(strict: true, message: 'invalid-email-format')]
+    #[Assert\Email(checkMX: true, message: 'invalid-email-domain')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation', 'accesswish_mail', 'accesswish_mail_accessfamilywish', 'education_student_wish_list_accesswish', 'education_student_wish_list_accesswishreregistrations'])]
+    private $email;
+    /**
+     * @var string
+     *
+     * @AssertPhoneNumber
+     */
+    #[ORM\Column(type: 'phone_number', nullable: true)]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation', 'education_student_wish_list_accesswish', 'education_student_wish_list_accesswishreregistrations'])]
+    private $telphone;
+    /**
+     * @var string
+     *
+     * @AssertPhoneNumber
+     */
+    #[ORM\Column(type: 'phone_number', nullable: true)]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation', 'education_student_wish_list_accesswish', 'education_student_wish_list_accesswishreregistrations'])]
+    private $mobilPhone;
+    /**
+     * @var Country
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Core\Country')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $addressCountry;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 100, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Length(max: 100, maxMessage: 'invalid-max-length')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $addressCity;
+    /**
+     * @var string
+     *
+     * @OpentalentAssert\PostalCode
+     */
+    #[ORM\Column(type: 'string', length: 20, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $postalCode;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $streetAddress;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $streetAddressSecond;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $streetAddressThird;
+    /**
+     * @var ArrayCollection<EducationStudentWish>
+     */
+    #[Assert\Valid]
+    #[ORM\OneToMany(targetEntity: 'AppBundle\Entity\AccessWish\EducationStudentWish', mappedBy: 'accessWish', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['accesswish_educationstudentwish', 'online_registration', 'online_registration_validation'])]
+    private $educationStudentWishes;
+    /**
+     * @var ArrayCollection<EducationStudentWish>
+     */
+    #[Assert\Valid]
+    #[ORM\OneToMany(targetEntity: 'AppBundle\Entity\AccessWish\EducationStudentWish', mappedBy: 'accessWishReregistrations', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['accesswish_educationstudentwish', 'online_registration', 'online_registration_validation'])]
+    private $educationStudentReregistrationsWishes;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $profession;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => true])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $imageRight = true;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'text', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $medicalComments;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'text', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $notes;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 255, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $establishmentName;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 255, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $cityName;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 255, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $disponibility;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 255, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $className;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 255, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $teacherName;
+    /**
+     * @var ArrayCollection<EducationStudentWish>
+     */
+    #[Assert\Valid]
+    #[ORM\OneToMany(targetEntity: 'AppBundle\Entity\AccessWish\DocumentWish', mappedBy: 'accessWish', cascade: ['persist'])]
+    #[Groups(['accesswish_documentwish', 'online_registration', 'online_registration_validation'])]
+    private $documentWishes;
+    /**
+     * @var string
+     *
+     * @ExportSplitFields({"name","givenName"})
+     */
+    #[Groups(['accesswish'])]
+    private $fullNameTemplate;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => true])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    private $synchro = false;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $approveRulesProcedureWish = false;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $receiveInformationsFromOrganizationWish = false;
+    /**
+     * @var ArrayCollection<Tagg>
+     */
+    #[ORM\ManyToMany(targetEntity: 'AppBundle\Entity\Core\Tagg', cascade: ['persist'], inversedBy: 'accessWishes')]
+    #[Assert\Valid]
+    #[ORM\JoinTable(name: 'tag_accessWish', joinColumns: [], inverseJoinColumns: [])]
+    #[ORM\JoinColumn(name: 'accessWish_id', referencedColumnName: 'id')]
+    #[ORM\JoinColumn(name: 'tag_id', referencedColumnName: 'id')]
+    #[Groups(['accesswish_tags', 'manage_tags'])]
+    private $tags;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', options: ['default' => 'OPEN'])]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\OnlineRegistration\ValidationStateEnum', 'toArray'], message: 'invalid-choice')]
+    #[Groups(['accesswish', 'online_registration_validation'])]
+    private $validationState = "OPEN";
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accesswish', 'online_registration', 'online_registration_validation'])]
+    private $isValidated = false;
+    /**
+     * @var string
+     * @ExportSplitFields({"gender","name","givenName","email","telphone","mobilPhone","addressCity","postalCode","streetAddress"})
+     */
+    #[Groups(['education_student_wish_list_accesswishreregistrations', 'education_student_wish_list_accesswish'])]
+    private $fullNameAndContactTemplate;
+    public function __construct()
+    {
+        $this->educationStudentWishes = new ArrayCollection();
+        $this->educationStudentReregistrationsWishes = new ArrayCollection();
+        $this->documentWishes = new ArrayCollection();
+        $this->tags = new ArrayCollection();
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Get id
+     *
+     * @return integer
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set organization
+     *
+     * @param \AppBundle\Entity\Organization\Organization $organization
+     *
+     * @return AccessWish
+     */
+    public function setOrganization(\AppBundle\Entity\Organization\Organization $organization)
+    {
+        $this->organization = $organization;
+
+        return $this;
+    }
+    /**
+     * Get organization
+     *
+     * @return \AppBundle\Entity\Organization\Organization
+     */
+    public function getOrganization()
+    {
+        return $this->organization;
+    }
+    /**
+     * Set givenName
+     *
+     * @param string $givenName
+     *
+     * @return AccessWish
+     */
+    public function setGivenName($givenName)
+    {
+        $this->givenName = $givenName;
+
+        return $this;
+    }
+    /**
+     * Get givenName
+     *
+     * @return string
+     */
+    public function getGivenName()
+    {
+        return $this->givenName;
+    }
+    /**
+     * Sets name.
+     *
+     * @param string $name
+     *
+     * @return $this
+     */
+    public function setName($name)
+    {
+        $this->name = strtoupper($name);
+
+        return $this;
+    }
+    /**
+     * Get name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+    /**
+     * Set birthDate
+     *
+     * @param \DateTime $birthDate
+     *
+     * @return AccessWish
+     */
+    public function setBirthDate($birthDate)
+    {
+        $this->birthDate = $birthDate;
+
+        return $this;
+    }
+    /**
+     * Get birthDate
+     *
+     * @return \DateTime
+     */
+    public function getBirthDate()
+    {
+        return $this->birthDate ? $this->birthDate->format('Y-m-d') : $this->birthDate;
+    }
+    /**
+     * Set genderEnum
+     *
+     * @param string $genderEnum
+     *
+     * @return AccessWish
+     */
+    public function setGenderEnum($genderEnum)
+    {
+        $this->genderEnum = $genderEnum;
+
+        return $this;
+    }
+    /**
+     * Get genderEnum
+     *
+     * @return string
+     */
+    public function getGenderEnum()
+    {
+        return $this->genderEnum;
+    }
+    /**
+     * Set email
+     *
+     * @param string $email
+     *
+     * @return AccessWish
+     */
+    public function setEmail($email)
+    {
+        $this->email = $email;
+
+        return $this;
+    }
+    /**
+     * Get email
+     *
+     * @return string
+     */
+    public function getEmail()
+    {
+        return $this->email;
+    }
+    /**
+     * Sets telphone.
+     *
+     * @param string $telphone
+     *
+     * @return $this
+     */
+    public function setTelphone($telphone)
+    {
+        if(empty($telphone))$telphone = null;
+
+        if(is_null($telphone)) $this->telphone = $telphone;
+        else{
+            $phoneUtil = PhoneNumberUtil::getInstance();
+            $phoneNumber = $phoneUtil->parse($telphone, PhoneNumberUtil::UNKNOWN_REGION);
+            $this->telphone = $phoneNumber;
+        }
+
+        return $this;
+    }
+    public function setPhoneNumberTelphone($phoneNumberTelphone)
+    {
+        $this->telphone = $phoneNumberTelphone;
+    }
+    /**
+     * Get telphone
+     *
+     * @return phone_number
+     */
+    public function getTelphone()
+    {
+        return $this->telphone;
+    }
+    /**
+     * Sets mobilPhone.
+     *
+     * @param string $mobilPhone
+     *
+     * @return $this
+     */
+    public function setMobilPhone($mobilPhone)
+    {
+        if(empty($mobilPhone))$mobilPhone = null;
+
+        if(is_null($mobilPhone)) $this->mobilPhone = $mobilPhone;
+        else{
+            $phoneUtil = PhoneNumberUtil::getInstance();
+            $phoneNumber = $phoneUtil->parse($mobilPhone, PhoneNumberUtil::UNKNOWN_REGION);
+            $this->mobilPhone = $phoneNumber;
+        }
+
+        return $this;
+    }
+    public function setPhoneNumberMobilPhone($phoneNumberMobilPhone){
+        $this->mobilPhone = $phoneNumberMobilPhone;
+    }
+    /**
+     * Get mobilPhone
+     *
+     * @return phone_number
+     */
+    public function getMobilPhone()
+    {
+        return $this->mobilPhone;
+    }
+    /**
+     * Set addressCity
+     *
+     * @param string $addressCity
+     *
+     * @return AccessWish
+     */
+    public function setAddressCity($addressCity)
+    {
+        $this->addressCity = $addressCity;
+
+        return $this;
+    }
+    /**
+     * Get addressCity
+     *
+     * @return string
+     */
+    public function getAddressCity()
+    {
+        return $this->addressCity;
+    }
+    /**
+     * Set postalCode
+     *
+     * @param string $postalCode
+     *
+     * @return AccessWish
+     */
+    public function setPostalCode($postalCode)
+    {
+        $this->postalCode = $postalCode;
+
+        return $this;
+    }
+    /**
+     * Get postalCode
+     *
+     * @return string
+     */
+    public function getPostalCode()
+    {
+        return $this->postalCode;
+    }
+    /**
+     * Set streetAddress
+     *
+     * @param string $streetAddress
+     *
+     * @return AccessWish
+     */
+    public function setStreetAddress($streetAddress)
+    {
+        $this->streetAddress = $streetAddress;
+
+        return $this;
+    }
+    /**
+     * Get streetAddress
+     *
+     * @return string
+     */
+    public function getStreetAddress()
+    {
+        return $this->streetAddress;
+    }
+    /**
+     * Set streetAddressSecond
+     *
+     * @param string $streetAddressSecond
+     *
+     * @return AccessWish
+     */
+    public function setStreetAddressSecond($streetAddressSecond)
+    {
+        $this->streetAddressSecond = $streetAddressSecond;
+
+        return $this;
+    }
+    /**
+     * Get streetAddressSecond
+     *
+     * @return string
+     */
+    public function getStreetAddressSecond()
+    {
+        return $this->streetAddressSecond;
+    }
+    /**
+     * Set streetAddressThird
+     *
+     * @param string $streetAddressThird
+     *
+     * @return AccessWish
+     */
+    public function setStreetAddressThird($streetAddressThird)
+    {
+        $this->streetAddressThird = $streetAddressThird;
+
+        return $this;
+    }
+    /**
+     * Get streetAddressThird
+     *
+     * @return string
+     */
+    public function getStreetAddressThird()
+    {
+        return $this->streetAddressThird;
+    }
+    /**
+     * Set image
+     *
+     * @param \AppBundle\Entity\Core\File $image
+     *
+     * @return AccessWish
+     */
+    public function setImage(\AppBundle\Entity\Core\File $image = null)
+    {
+        $this->image = $image;
+
+        return $this;
+    }
+    /**
+     * Get image
+     *
+     * @return \AppBundle\Entity\Core\File
+     */
+    public function getImage()
+    {
+        return $this->image;
+    }
+    /**
+     * Set addressCountry
+     *
+     * @param \AppBundle\Entity\Core\Country $addressCountry
+     *
+     * @return AccessWish
+     */
+    public function setAddressCountry(\AppBundle\Entity\Core\Country $addressCountry = null)
+    {
+        $this->addressCountry = $addressCountry;
+
+        return $this;
+    }
+    /**
+     * Get addressCountry
+     *
+     * @return \AppBundle\Entity\AccessWish\Country
+     */
+    public function getAddressCountry()
+    {
+        return $this->addressCountry;
+    }
+    /**
+     * Add educationStudentWish
+     *
+     * @param \AppBundle\Entity\AccessWish\EducationStudentWish $educationStudentWish
+     *
+     * @return AccessWish
+     */
+    public function addEducationStudentWish(\AppBundle\Entity\AccessWish\EducationStudentWish $educationStudentWish)
+    {
+        $educationStudentWish->setAccessWish($this);
+        $this->educationStudentWishes[] = $educationStudentWish;
+
+        return $this;
+    }
+    /**
+     * Remove educationStudentWish
+     *
+     * @param \AppBundle\Entity\AccessWish\EducationStudentWish $educationStudentWish
+     */
+    public function removeEducationStudentWish(\AppBundle\Entity\AccessWish\EducationStudentWish $educationStudentWish)
+    {
+        $this->educationStudentWishes->removeElement($educationStudentWish);
+    }
+    /**
+     * Get educationStudentWishes
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getEducationStudentWishes()
+    {
+        return $this->educationStudentWishes;
+    }
+    /**
+     * Set imageRight
+     *
+     * @param boolean $imageRight
+     *
+     * @return AccessWish
+     */
+    public function setImageRight($imageRight)
+    {
+        $this->imageRight = $imageRight;
+
+        return $this;
+    }
+    /**
+     * Get imageRight
+     *
+     * @return boolean
+     */
+    public function getImageRight()
+    {
+        return $this->imageRight;
+    }
+    /**
+     * Set medicalComments
+     *
+     * @param string $medicalComments
+     *
+     * @return AccessWish
+     */
+    public function setMedicalComments($medicalComments)
+    {
+        $this->medicalComments = $medicalComments;
+
+        return $this;
+    }
+    /**
+     * Get medicalComments
+     *
+     * @return string
+     */
+    public function getMedicalComments()
+    {
+        return $this->medicalComments;
+    }
+    /**
+     * Set notes
+     *
+     * @param string $notes
+     *
+     * @return AccessWish
+     */
+    public function setNotes($notes)
+    {
+        $this->notes = $notes;
+
+        return $this;
+    }
+    /**
+     * Get notes
+     *
+     * @return string
+     */
+    public function getNotes()
+    {
+        return $this->notes;
+    }
+    /**
+     * Set profession
+     *
+     * @param string $profession
+     *
+     * @return AccessWish
+     */
+    public function setProfession($profession)
+    {
+        $this->profession = $profession;
+
+        return $this;
+    }
+    /**
+     * Get profession
+     *
+     * @return string
+     */
+    public function getProfession()
+    {
+        return $this->profession;
+    }
+    /**
+     * Set establishmentName
+     *
+     * @param string $establishmentName
+     *
+     * @return AccessWish
+     */
+    public function setEstablishmentName($establishmentName)
+    {
+        $this->establishmentName = $establishmentName;
+
+        return $this;
+    }
+    /**
+     * Get establishmentName
+     *
+     * @return string
+     */
+    public function getEstablishmentName()
+    {
+        return $this->establishmentName;
+    }
+    /**
+     * Set cityName
+     *
+     * @param string $cityName
+     *
+     * @return AccessWish
+     */
+    public function setCityName($cityName)
+    {
+        $this->cityName = $cityName;
+
+        return $this;
+    }
+    /**
+     * Get cityName
+     *
+     * @return string
+     */
+    public function getCityName()
+    {
+        return $this->cityName;
+    }
+    /**
+     * Set disponibility
+     *
+     * @param string $disponibility
+     *
+     * @return AccessWish
+     */
+    public function setDisponibility($disponibility)
+    {
+        $this->disponibility = $disponibility;
+
+        return $this;
+    }
+    /**
+     * Get disponibility
+     *
+     * @return string
+     */
+    public function getDisponibility()
+    {
+        return $this->disponibility;
+    }
+    /**
+     * Set className
+     *
+     * @param string $className
+     *
+     * @return AccessWish
+     */
+    public function setClassName($className)
+    {
+        $this->className = $className;
+
+        return $this;
+    }
+    /**
+     * Get className
+     *
+     * @return string
+     */
+    public function getClassName()
+    {
+        return $this->className;
+    }
+    /**
+     * Set teacherName
+     *
+     * @param string $teacherName
+     *
+     * @return AccessWish
+     */
+    public function setTeacherName($teacherName)
+    {
+        $this->teacherName = $teacherName;
+
+        return $this;
+    }
+    /**
+     * Get teacher
+     *
+     * @return string
+     */
+    public function getTeacherName()
+    {
+        return $this->teacherName;
+    }
+    /**
+     * Add documentWish
+     *
+     * @param \AppBundle\Entity\AccessWish\DocumentWish $documentWish
+     *
+     * @return AccessWish
+     */
+    public function addDocumentWish(\AppBundle\Entity\AccessWish\DocumentWish $documentWish)
+    {
+        $documentWish->setAccessWish($this);
+        $this->documentWishes[] = $documentWish;
+
+        return $this;
+    }
+    /**
+     * Remove documentWish
+     *
+     * @param \AppBundle\Entity\AccessWish\DocumentWish $documentWish
+     */
+    public function removeDocumentWish(\AppBundle\Entity\AccessWish\DocumentWish $documentWish)
+    {
+        $this->documentWishes->removeElement($documentWish);
+    }
+    /**
+     * Get documentWishes
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getDocumentWishes()
+    {
+        return $this->documentWishes;
+    }
+    /**
+     * Gets full name.
+     *
+     * @return string
+     */
+    public function getFullNameTemplate()
+    {
+        return $this->getName() . ' ' . $this->getGivenName();
+    }
+    /**
+     * Set accessOriginal
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $accessOriginal
+     *
+     * @return AccessWish
+     */
+    public function setAccessOriginal(\AppBundle\Entity\AccessAndFunction\Access $accessOriginal = null)
+    {
+        $this->accessOriginal = $accessOriginal;
+
+        return $this;
+    }
+    /**
+     * Get accessOriginal
+     *
+     * @return \AppBundle\Entity\AccessAndFunction\Access
+     */
+    public function getAccessOriginal()
+    {
+        return $this->accessOriginal;
+    }
+    /**
+     * Set accessFamilyWish
+     *
+     * @param \AppBundle\Entity\AccessWish\AccessFamilyWish $accessFamilyWish
+     *
+     * @return AccessWish
+     */
+    public function setAccessFamilyWish(\AppBundle\Entity\AccessWish\AccessFamilyWish $accessFamilyWish = null)
+    {
+        $this->accessFamilyWish = $accessFamilyWish;
+
+        return $this;
+    }
+    /**
+     * Get accessFamilyWish
+     *
+     * @return \AppBundle\Entity\AccessWish\AccessFamilyWish
+     */
+    public function getAccessFamilyWish()
+    {
+        return $this->accessFamilyWish;
+    }
+    /**
+     * Set status
+     *
+     * @param string $status
+     *
+     * @return AccessWish
+     */
+    public function setStatus($status)
+    {
+        $this->status = $status;
+
+        return $this;
+    }
+    /**
+     * Get status
+     *
+     * @return string
+     */
+    public function getStatus()
+    {
+        return $this->status;
+    }
+    /**
+     * Add educationStudentReregistrationsWish
+     *
+     * @param \AppBundle\Entity\AccessWish\EducationStudentWish $educationStudentReregistrationsWish
+     *
+     * @return AccessWish
+     */
+    public function addEducationStudentReregistrationsWish(\AppBundle\Entity\AccessWish\EducationStudentWish $educationStudentReregistrationsWish)
+    {
+        $educationStudentReregistrationsWish->setAccessWishReregistrations($this);
+        $this->educationStudentReregistrationsWishes[] = $educationStudentReregistrationsWish;
+
+        return $this;
+    }
+    /**
+     * Remove educationStudentReregistrationsWish
+     *
+     * @param \AppBundle\Entity\AccessWish\EducationStudentWish $educationStudentReregistrationsWish
+     */
+    public function removeEducationStudentReregistrationsWish(\AppBundle\Entity\AccessWish\EducationStudentWish $educationStudentReregistrationsWish)
+    {
+        $this->educationStudentReregistrationsWishes->removeElement($educationStudentReregistrationsWish);
+    }
+    /**
+     * Get educationStudentReregistrationsWishes
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getEducationStudentReregistrationsWishes()
+    {
+        return $this->educationStudentReregistrationsWishes;
+    }
+    /**
+     * Set synchro
+     *
+     * @param boolean $synchro
+     *
+     * @return AccessWish
+     */
+    public function setSynchro($synchro)
+    {
+        $this->synchro = $synchro;
+
+        return $this;
+    }
+    /**
+     * Get synchro
+     *
+     * @return boolean
+     */
+    public function getSynchro()
+    {
+        return $this->synchro;
+    }
+    /**
+     * Set approveRulesProcedureWish
+     *
+     * @param boolean $approveRulesProcedureWish
+     *
+     * @return AccessWish
+     */
+    public function setApproveRulesProcedureWish($approveRulesProcedureWish)
+    {
+        $this->approveRulesProcedureWish = $approveRulesProcedureWish;
+
+        return $this;
+    }
+    /**
+     * Get approveRulesProcedureWish
+     *
+     * @return boolean
+     */
+    public function getApproveRulesProcedureWish()
+    {
+        return $this->approveRulesProcedureWish;
+    }
+    /**
+     * Set receiveInformationsFromOrganizationWish
+     *
+     * @param boolean $receiveInformationsFromOrganizationWish
+     *
+     * @return AccessWish
+     */
+    public function setReceiveInformationsFromOrganizationWish($receiveInformationsFromOrganizationWish)
+    {
+        $this->receiveInformationsFromOrganizationWish = $receiveInformationsFromOrganizationWish;
+
+        return $this;
+    }
+    /**
+     * Get receiveInformationsFromOrganizationWish
+     *
+     * @return boolean
+     */
+    public function getReceiveInformationsFromOrganizationWish()
+    {
+        return $this->receiveInformationsFromOrganizationWish;
+    }
+    /**
+     * Set isNewMemberFamily
+     *
+     * @param boolean $isNewMemberFamily
+     *
+     * @return AccessWish
+     */
+    public function setIsNewMemberFamily($isNewMemberFamily)
+    {
+        $this->isNewMemberFamily = $isNewMemberFamily;
+
+        return $this;
+    }
+    /**
+     * Get isNewMemberFamily
+     *
+     * @return boolean
+     */
+    public function getIsNewMemberFamily()
+    {
+        return $this->isNewMemberFamily;
+    }
+    /**
+     * Add tag
+     *
+     * @param \AppBundle\Entity\Core\Tagg $tag
+     *
+     * @return AccessWish
+     */
+    public function addTag(\AppBundle\Entity\Core\Tagg $tag)
+    {
+        $this->tags[] = $tag;
+
+        return $this;
+    }
+    /**
+     * Remove tag
+     *
+     * @param \AppBundle\Entity\Core\Tagg $tag
+     */
+    public function removeTag(\AppBundle\Entity\Core\Tagg $tag)
+    {
+        $this->tags->removeElement($tag);
+    }
+    /**
+     * Get tags
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getTags()
+    {
+        return $this->tags;
+    }
+    public function getAgeTemplate()
+    {
+        $from = new \DateTime($this->getBirthDate());
+        $to = new \DateTime('today');
+        $age = $from->diff($to)->y;
+        return $age > 0 ? $age : null;
+    }
+    /**
+     * Gets full name.
+     *
+     * @return array
+     */
+    public function getFullNameAndContactTemplate()
+    {
+        if(!empty($this->getGenderEnum())){
+            $fullNameAndContactTemplate[] = [ 'value' => $this->getGenderEnum(), 'translate' => true ];
+            $fullNameAndContactTemplate[] = ' - ';
+        }
+
+        $fullNameAndContactTemplate[] = $this->getFullNameTemplate();
+
+        if(!empty($this->getEmail()) || !empty($this->getTelphone()) || !empty($this->getMobilPhone())){
+            $fullNameAndContactTemplate[] = ' - ';
+            if(!empty($this->getEmail()))
+                $fullNameAndContactTemplate[] = $this->getEmail();
+            if(!empty($this->getTelphone()))
+                $fullNameAndContactTemplate[] =  ['type' => 'phone_number', 'value' => $this->getTelphone(), 'separator' => ' / '];
+            if(!empty($this->getMobilPhone()))
+                $fullNameAndContactTemplate[] = ['type' => 'phone_number', 'value' => $this->getMobilPhone(), 'separator' => ' / '];
+        }
+
+        if(!empty($this->getStreetAddress()) || !empty($this->getCityName())){
+            $fullNameAndContactTemplate[] = ' - ';
+            if(!empty($this->getStreetAddress()))
+                $fullNameAndContactTemplate[] = $this->getStreetAddress();
+            if(!empty($this->getPostalCode()))
+                $fullNameAndContactTemplate[] = $this->getPostalCode();
+            if(!empty($this->getCityName()))
+                $fullNameAndContactTemplate[] = $this->getCityName();
+        }
+
+        return $fullNameAndContactTemplate;
+    }
+    /**
+     * Set validationState
+     *
+     * @param string $validationState
+     *
+     * @return AccessWish
+     */
+    public function setValidationState($validationState)
+    {
+        $this->validationState = $validationState;
+
+        return $this;
+    }
+    /**
+     * Get validationState
+     *
+     * @return string
+     */
+    public function getValidationState()
+    {
+        return $this->validationState;
+    }
+    /**
+     * Set isValidated
+     *
+     * @param boolean $isValidated
+     *
+     * @return AccessWish
+     */
+    public function setIsValidated($isValidated)
+    {
+        $this->isValidated = $isValidated;
+
+        return $this;
+    }
+    /**
+     * Get isValidated
+     *
+     * @return boolean
+     */
+    public function getIsValidated()
+    {
+        return $this->isValidated;
+    }
+}

+ 282 - 0
old/Entity/AccessWish/DocumentWish.php

@@ -0,0 +1,282 @@
+<?php
+
+namespace AppBundle\Entity\AccessWish;
+
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Finite\StatefulInterface;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * DocumentWish.
+ *
+ * @see http://schema.org/DocumentWish Documentation on Schema.org
+ *
+ * @Iri("http://schema.org/DocumentWish")
+ */
+#[ORM\Entity]
+class DocumentWish
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['documentwish', 'online_registration', 'online_registration_validation', 'student_registration_person'])]
+    private $id;
+    /**
+     * @var AccessWish
+     *
+     *
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\AccessWish\AccessWish', inversedBy: 'documentWishes')]
+    #[ORM\JoinColumn(referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
+    #[Groups(['documentwish'])]
+    private $accessWish;
+    /**
+     * @var AccessWish
+     *
+     *
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Person\Person', inversedBy: 'documentWishes')]
+    #[ORM\JoinColumn(referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
+    #[Groups(['documentwish'])]
+    private $personOwner;
+    /**
+     * @var ArrayCollection<AppBundle\Entity\Core\File>.
+     */
+    #[ORM\OneToMany(targetEntity: 'AppBundle\Entity\Core\File', mappedBy: 'documentWish', orphanRemoval: true)]
+    #[Groups(['documentwish', 'online_registration_documentwishes', 'online_registration_validation_documentwishes', 'access_files_person', 'student_registration_person'])]
+    private $files;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['documentwish', 'online_registration_documentwishes', 'online_registration_validation_documentwishes', 'access_files_person', 'student_registration_person'])]
+    private $label;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\OnlineRegistration\FileTypeEnum', 'toArray'], message: 'invalid-choice')]
+    #[Groups(['documentwish', 'online_registration_documentwishes', 'online_registration_validation_documentwishes', 'access_files_person', 'student_registration_person'])]
+    private $type;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'text', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['documentwish', 'online_registration_documentwishes', 'online_registration_validation_documentwishes', 'access_files_person', 'student_registration_person'])]
+    private $description;
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+        $this->files = new ArrayCollection();
+    }
+    /**
+     * Get id
+     *
+     * @return integer
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set days
+     *
+     * @param array $days
+     *
+     * @return EducationStudentWish
+     */
+    public function setDays($days)
+    {
+        $this->days = $days;
+
+        return $this;
+    }
+    /**
+     * Get days
+     *
+     * @return array
+     */
+    public function getDays()
+    {
+        return $this->days;
+    }
+    /**
+     * Set education
+     *
+     * @param \AppBundle\Entity\Education\Education $education
+     *
+     * @return EducationStudentWish
+     */
+    public function setEducation(\AppBundle\Entity\Education\Education $education = null)
+    {
+        $this->education = $education;
+
+        return $this;
+    }
+    /**
+     * Get education
+     *
+     * @return \AppBundle\Entity\Education\Education
+     */
+    public function getEducation()
+    {
+        return $this->education;
+    }
+    /**
+     * Set accessWish
+     *
+     * @param \AppBundle\Entity\AccessWish\AccessWish $accessWish
+     *
+     * @return EducationStudentWish
+     */
+    public function setAccessWish(\AppBundle\Entity\AccessWish\AccessWish $accessWish = null)
+    {
+        $this->accessWish = $accessWish;
+
+        return $this;
+    }
+    /**
+     * Get accessWish
+     *
+     * @return \AppBundle\Entity\AccessWish\AccessWish
+     */
+    public function getAccessWish()
+    {
+        return $this->accessWish;
+    }
+    /**
+     * Set label
+     *
+     * @param string $label
+     *
+     * @return DocumentWish
+     */
+    public function setLabel($label)
+    {
+        $this->label = $label;
+
+        return $this;
+    }
+    /**
+     * Get label
+     *
+     * @return string
+     */
+    public function getLabel()
+    {
+        return $this->label;
+    }
+    /**
+     * Set type
+     *
+     * @param string $type
+     *
+     * @return DocumentWish
+     */
+    public function setType($type)
+    {
+        $this->type = $type;
+
+        return $this;
+    }
+    /**
+     * Get type
+     *
+     * @return string
+     */
+    public function getType()
+    {
+        return $this->type;
+    }
+    /**
+     * Set description
+     *
+     * @param string $description
+     *
+     * @return DocumentWish
+     */
+    public function setDescription($description)
+    {
+        $this->description = $description;
+
+        return $this;
+    }
+    /**
+     * Get description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        return $this->description;
+    }
+    /**
+     * Add file
+     *
+     * @param \AppBundle\Entity\Core\File $file
+     *
+     * @return DocumentWish
+     */
+    public function addFile(\AppBundle\Entity\Core\File $file)
+    {
+        $file->setDocumentWish($this);
+        $this->files[] = $file;
+
+        return $this;
+    }
+    /**
+     * Remove file
+     *
+     * @param \AppBundle\Entity\Core\File $file
+     */
+    public function removeFile(\AppBundle\Entity\Core\File $file)
+    {
+        $this->files->removeElement($file);
+    }
+    /**
+     * Get files
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getFiles()
+    {
+        return $this->files;
+    }
+    /**
+     * Set personOwner
+     *
+     * @param \AppBundle\Entity\Person\Person $personOwner
+     *
+     * @return DocumentWish
+     */
+    public function setPersonOwner(\AppBundle\Entity\Person\Person $personOwner = null)
+    {
+        $this->personOwner = $personOwner;
+
+        return $this;
+    }
+    /**
+     * Get personOwner
+     *
+     * @return \AppBundle\Entity\Person\Person
+     */
+    public function getPersonOwner()
+    {
+        return $this->personOwner;
+    }
+}

+ 452 - 0
old/Entity/AccessWish/EducationStudentWish.php

@@ -0,0 +1,452 @@
+<?php
+
+namespace AppBundle\Entity\AccessWish;
+
+use AppBundle\Annotation\ExportTranslate;
+use AppBundle\Entity\Education\Education;
+use AppBundle\Entity\Education\EducationCurriculum;
+use AppBundle\Entity\Education\EducationStudent;
+use AppBundle\Entity\Education\EducationTiming;
+use AppBundle\Enum\OnlineRegistration\EducationStudentWishOriginEnum;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Finite\StatefulInterface;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * EducationStudentWish.
+ *
+ * @see http://schema.org/EducationStudentWish Documentation on Schema.org
+ *
+ * @Iri("http://schema.org/EducationStudentWish")
+ */
+#[ORM\Entity(repositoryClass: 'AppBundle\Entity\AccessWish\Repository\EducationStudentWishRepository')]
+class EducationStudentWish
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['educationstudentwish', 'online_registration', 'education_student_wish_list', 'online_registration_validation_access_family', 'online_registration_validation'])]
+    private $id;
+    /**
+     * @var Education
+     *
+     *
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Education\Education')]
+    #[ORM\JoinColumn(referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
+    #[Groups(['educationstudentwish', 'online_registration_educationstudentwishes', 'online_registration_educationstudentreregistrationswishes', 'education_student_wish_list', 'online_registration_validation_educationstudentwishes', 'online_registration_validation_educationstudentreregistrationswishes'])]
+    private $educationWish;
+    /**
+     * @var array
+     */
+    #[ORM\Column(type: 'json_array', nullable: true)]
+    #[Groups(['educationstudentwish', 'online_registration_educationstudentwishes', 'online_registration_educationstudentreregistrationswishes', 'online_registration_validation_educationstudentwishes', 'online_registration_validation_educationstudentreregistrationswishes'])]
+    private $days;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'time', nullable: true)]
+    #[Assert\Time]
+    #[Groups(['educationstudentwish', 'online_registration_educationstudentwishes', 'online_registration_educationstudentreregistrationswishes', 'online_registration_validation_educationstudentwishes', 'online_registration_validation_educationstudentreregistrationswishes'])]
+    private $time;
+    /**
+     * @var AccessWish
+     *
+     *
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\AccessWish\AccessWish', inversedBy: 'educationStudentWishes')]
+    #[ORM\JoinColumn(referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
+    #[Groups(['educationstudentwish', 'education_student_wish_list', 'online_registration_validation_access_family'])]
+    private $accessWish;
+    /**
+     * @var AccessWish
+     *
+     *
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\AccessWish\AccessWish', inversedBy: 'educationStudentReregistrationsWishes')]
+    #[ORM\JoinColumn(referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
+    #[Groups(['educationstudentwish', 'education_student_wish_list', 'online_registration_validation_access_family'])]
+    private $accessWishReregistrations;
+    private $accessSearch;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['educationstudentwish', 'online_registration_educationstudentwishes', 'online_registration_validation_educationstudentwishes'])]
+    private $registeredFollowingYear = false;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', options: ['default' => 'NO_INFORMATION'])]
+    #[Assert\Type(type: 'string')]
+    #[Assert\NotNull]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\OnlineRegistration\WishRegistration', 'toArray'])]
+    #[Groups(['education_student_wish_list', 'online_registration_validation_educationstudentwishes', 'online_registration_validation_educationstudentreregistrationswishes', 'online_registration_educationstudentreregistrationswishes'])]
+    private $wishRegistration = "NO_INFORMATION";
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', options: ['default' => 'NEGOTIABLE'])]
+    #[Assert\Type(type: 'string')]
+    #[Assert\NotNull]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\OnlineRegistration\RegistrationStatus', 'toArray'])]
+    #[Groups(['education_student_wish_list', 'online_registration_validation_educationstudentwishes', 'online_registration_validation_educationstudentreregistrationswishes'])]
+    private $registrationStatus = "NEGOTIABLE";
+    /**
+     * @var string
+     * @ExportTranslate(true)
+     */
+    #[Assert\Type(type: 'string')]
+    #[Groups(['education_student_wish_list'])]
+    private $origin;
+    /**
+     * @var EducationCurriculum
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Education\EducationCurriculum')]
+    #[Groups(['educationstudentwish_educationcurriculum', 'online_registration_validation_educationstudentwishes'])]
+    private $educationCurriculum;
+    /**
+     * @var EducationStudent
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Education\EducationStudent')]
+    #[Groups(['educationstudentwish', 'online_registration_educationstudentwishes', 'online_registration_educationstudentreregistrationswishes', 'online_registration_validation_educationstudentwishes', 'online_registration_validation_educationstudentreregistrationswishes'])]
+    private $educationStudent;
+    /**
+     * @var EducationTiming
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Education\EducationTiming')]
+    #[ORM\JoinColumn(referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
+    #[Groups(['educationstudentwish', 'online_registration_educationstudentwishes', 'online_registration_educationstudentreregistrationswishes', 'online_registration_validation_educationstudentwishes', 'online_registration_validation_educationstudentreregistrationswishes'])]
+    private $educationTiming;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['educationstudentwish'])]
+    private $alreadyValidate = false;
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Get id
+     *
+     * @return integer
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set days
+     *
+     * @param array $days
+     *
+     * @return EducationStudentWish
+     */
+    public function setDays($days)
+    {
+        $this->days = $days;
+
+        return $this;
+    }
+    /**
+     * Get days
+     *
+     * @return array
+     */
+    public function getDays()
+    {
+        return $this->days;
+    }
+    /**
+     * Set accessWish
+     *
+     * @param \AppBundle\Entity\AccessWish\AccessWish $accessWish
+     *
+     * @return EducationStudentWish
+     */
+    public function setAccessWish(\AppBundle\Entity\AccessWish\AccessWish $accessWish = null)
+    {
+        $this->accessWish = $accessWish;
+
+        return $this;
+    }
+    /**
+     * Get accessWish
+     *
+     * @return \AppBundle\Entity\AccessWish\AccessWish
+     */
+    public function getAccessWish()
+    {
+        return $this->accessWish;
+    }
+    /**
+     * Set registeredFollowingYear
+     *
+     * @param boolean $registeredFollowingYear
+     *
+     * @return EducationStudentWish
+     */
+    public function setRegisteredFollowingYear($registeredFollowingYear)
+    {
+        $this->registeredFollowingYear = $registeredFollowingYear;
+
+        return $this;
+    }
+    /**
+     * Get registeredFollowingYear
+     *
+     * @return boolean
+     */
+    public function getRegisteredFollowingYear()
+    {
+        return $this->registeredFollowingYear;
+    }
+    /**
+     * Set time
+     *
+     * @param \DateTime $time
+     *
+     * @return EducationStudentWish
+     */
+    public function setTime($time)
+    {
+        $this->time = $time;
+
+        return $this;
+    }
+    /**
+     * Get time
+     *
+     * @return \DateTime
+     */
+    public function getTime()
+    {
+        return $this->time ? $this->time->format('H:i') : $this->time;
+    }
+    public function getTimeDateTime()
+    {
+        return $this->time;
+    }
+    /**
+     * Set registrationStatus
+     *
+     * @param string $registrationStatus
+     *
+     * @return EducationStudentWish
+     */
+    public function setRegistrationStatus($registrationStatus)
+    {
+        $this->registrationStatus = $registrationStatus;
+
+        return $this;
+    }
+    /**
+     * Get registrationStatus
+     *
+     * @return string
+     */
+    public function getRegistrationStatus()
+    {
+        return $this->registrationStatus;
+    }
+    /**
+     * Set wishRegistration
+     *
+     * @param string $wishRegistration
+     *
+     * @return EducationStudentWish
+     */
+    public function setWishRegistration($wishRegistration)
+    {
+        $this->wishRegistration = $wishRegistration;
+
+        return $this;
+    }
+    /**
+     * Get wishRegistration
+     *
+     * @return string
+     */
+    public function getWishRegistration()
+    {
+        return $this->wishRegistration;
+    }
+    /**
+     * Set accessWishReregistrations
+     *
+     * @param \AppBundle\Entity\AccessWish\AccessWish $accessWishReregistrations
+     *
+     * @return EducationStudentWish
+     */
+    public function setAccessWishReregistrations(\AppBundle\Entity\AccessWish\AccessWish $accessWishReregistrations = null)
+    {
+        $this->accessWishReregistrations = $accessWishReregistrations;
+
+        return $this;
+    }
+    /**
+     * Get accessWishReregistrations
+     *
+     * @return \AppBundle\Entity\AccessWish\AccessWish
+     */
+    public function getAccessWishReregistrations()
+    {
+        return $this->accessWishReregistrations;
+    }
+    /**
+     * Set educationWish
+     *
+     * @param \AppBundle\Entity\Education\Education $educationWish
+     *
+     * @return EducationStudentWish
+     */
+    public function setEducationWish(\AppBundle\Entity\Education\Education $educationWish = null)
+    {
+        $this->educationWish = $educationWish;
+
+        return $this;
+    }
+    /**
+     * Get educationWish
+     *
+     * @return \AppBundle\Entity\Education\Education
+     */
+    public function getEducationWish()
+    {
+        return $this->educationWish;
+    }
+    public function getAccessSearch(){
+        return $this->getAccessWish() ? $this->getAccessWish() : $this->getAccessWishReregistrations();
+    }
+    /**
+     * @return mixed
+     * @throws \Exception
+     */
+    public function getOrigin()
+    {
+        if(!empty($this->getAccessWishReregistrations())){
+            return EducationStudentWishOriginEnum::REREGISTRATION;
+        }else{
+            return EducationStudentWishOriginEnum::NEW_REGISTRATION;
+        }
+    }
+    /**
+     * Set alreadyValidate
+     *
+     * @param boolean $alreadyValidate
+     *
+     * @return EducationStudentWish
+     */
+    public function setAlreadyValidate($alreadyValidate)
+    {
+        $this->alreadyValidate = $alreadyValidate;
+
+        return $this;
+    }
+    /**
+     * Get alreadyValidate
+     *
+     * @return boolean
+     */
+    public function getAlreadyValidate()
+    {
+        return $this->alreadyValidate;
+    }
+    /**
+     * Set educationCurriculum
+     *
+     * @param \AppBundle\Entity\Education\EducationCurriculum $educationCurriculum
+     *
+     * @return EducationStudentWish
+     */
+    public function setEducationCurriculum(\AppBundle\Entity\Education\EducationCurriculum $educationCurriculum = null)
+    {
+        $this->educationCurriculum = $educationCurriculum;
+
+        return $this;
+    }
+    /**
+     * Get educationCurriculum
+     *
+     * @return \AppBundle\Entity\Education\EducationCurriculum
+     */
+    public function getEducationCurriculum()
+    {
+        return $this->educationCurriculum;
+    }
+    /**
+     * Set educationTiming
+     *
+     * @param \AppBundle\Entity\Education\EducationTiming $educationTiming
+     *
+     * @return EducationStudentWish
+     */
+    public function setEducationTiming(\AppBundle\Entity\Education\EducationTiming $educationTiming = null)
+    {
+        $this->educationTiming = $educationTiming;
+
+        return $this;
+    }
+    /**
+     * Get educationTiming
+     *
+     * @return \AppBundle\Entity\Education\EducationTiming
+     */
+    public function getEducationTiming()
+    {
+        return $this->educationTiming;
+    }
+    /**
+     * Set educationStudent
+     *
+     * @param \AppBundle\Entity\Education\EducationStudent $educationStudent
+     *
+     * @return EducationStudentWish
+     */
+    public function setEducationStudent(\AppBundle\Entity\Education\EducationStudent $educationStudent = null)
+    {
+        $this->educationStudent = $educationStudent;
+
+        return $this;
+    }
+    /**
+     * Get educationStudent
+     *
+     * @return \AppBundle\Entity\Education\EducationStudent
+     */
+    public function getEducationStudent()
+    {
+        return $this->educationStudent;
+    }
+}

+ 32 - 0
old/Entity/AccessWish/Repository/AccessWishRepository.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace AppBundle\Entity\AccessWish\Repository;
+
+use AppBundle\Entity\HasItemQueryBuilderInterface;
+use AppBundle\Entity\Organization\Organization;
+use Doctrine\ORM\EntityRepository;
+use Doctrine\ORM\QueryBuilder;
+
+/**
+ * Description of AccessWishRepository
+ *
+ */
+class AccessWishRepository extends EntityRepository
+{
+
+    /**
+     * @param $access
+     * @param $accessWhishesIds
+     * @return array
+     */
+    public function findAccessWishByIds($accessWhishesIds)
+    {
+        $queryBuilder = $this->createQueryBuilder('o');
+        $queryBuilder
+            ->andWhere(
+                $queryBuilder->expr()->in('o.id', ':ids'))
+            ->setParameter('ids', $accessWhishesIds);
+
+        return $queryBuilder->getQuery()->getResult();
+    }
+}

+ 42 - 0
old/Entity/AccessWish/Repository/EducationStudentWishRepository.php

@@ -0,0 +1,42 @@
+<?php
+
+namespace AppBundle\Entity\AccessWish\Repository;
+
+use AppBundle\Entity\Education\Education;
+use AppBundle\Entity\Education\EducationCurriculum;
+use AppBundle\Entity\HasItemQueryBuilderInterface;
+use AppBundle\Entity\Organization\Organization;
+use Doctrine\ORM\EntityRepository;
+use Doctrine\ORM\QueryBuilder;
+
+/**
+ * Description of EducationStudentWishRepository
+ *
+ */
+class EducationStudentWishRepository extends EntityRepository
+{
+
+    public function getEducationStudentByEducation(Education $education,Organization $organization){
+//        $education = $educationCurriculum->getEducation();
+        $filter = $this->_em->getFilters()->enable('activity_year');
+        $filter->setParameter('disabledFilter', 1);
+        $queryBuilder = $this->createQueryBuilder('education_student_wish');
+        $queryBuilder
+            ->leftJoin('education_student_wish.accessWish','accessWish')
+            ->leftJoin('education_student_wish.accessWishReregistrations','accessWishReregistrations')
+            ->leftJoin('accessWish.organization','organization')
+            ->leftJoin('accessWishReregistrations.organization','organization2')
+            ->leftJoin('education_student_wish.educationWish','educationWish')
+            ->leftJoin('accessWish.accessFamilyWish', 'accessWishAccessFamilyWish')
+            ->leftJoin('accessWishReregistrations.accessFamilyWish', 'accessWishAccessFamilyWish2')
+            ->andWhere('(educationWish.id=:education and organization.id=:organization and accessWishAccessFamilyWish.registrationCompleted =:registrationCompleted) or (educationWish.id=:education and organization2.id=:organization and accessWishAccessFamilyWish2.registrationCompleted =:registrationCompleted)')
+            ->setParameter('organization', $organization)
+            ->setParameter('education', $education)
+            ->setParameter('registrationCompleted', true);
+
+        $filter->setParameter('disabledFilter', 0);
+
+        return $queryBuilder->getQuery()->getResult();
+    }
+
+}

+ 653 - 0
old/Entity/Awin/Product.php

@@ -0,0 +1,653 @@
+<?php
+
+namespace AppBundle\Entity\Awin;
+
+use Doctrine\ORM\Mapping as ORM;
+use Symfony\Component\Validator\Constraints as Assert;
+use Gedmo\Mapping\Annotation as Gedmo;
+use AppBundle\Entity\Traits\TimestampableEntity;
+
+/**
+ * Produit/Evènement pour le portail fourni par le partenaire Awin
+ */
+#[ORM\Table(name: 'AwinProduct')]
+#[ORM\Entity]
+class Product
+{
+    use TimestampableEntity;
+    /**
+     * @var string 
+     *
+     *
+     */
+    #[ORM\Column(name: 'id', type: 'string')]
+    #[ORM\Id]
+    protected $id;
+    /**
+     * @var string
+     * @Gedmo\Slug(fields={"name"}, style="camel", separator="_")
+     *
+     */
+    #[ORM\Column(name: 'slug', type: 'string', length: 100)]
+    protected $slug;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(name: 'name', type: 'string', length: 255)]
+    protected $name;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(name: 'description', type: 'text', length: 65535, nullable: true)]
+    protected $description;
+    /**
+     * @var array
+     *
+     *
+     */
+    #[ORM\Column(type: 'json_array', nullable: true)]
+    protected $categories;
+    /**
+     * @var \DateTime
+     *
+     *
+     */
+    #[ORM\Column(name: 'datetimeStart', type: 'date', nullable: true)]
+    protected $datetimeStart;
+    /**
+     * @var \DateTime
+     *
+     *
+     */
+    #[ORM\Column(name: 'datetimeEnd', type: 'date', nullable: true)]
+    protected $datetimeEnd;
+    /**
+     * @var array
+     *
+     *
+     */
+    #[ORM\Column(name: 'meeting_schedule', type: 'json_array', nullable: true)]
+    protected $meetingSchedule;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(name: 'place_code', type: 'string', length: 50, nullable: true)]
+    protected $placeCode;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(name: 'place', type: 'string', length: 50, nullable: true)]
+    protected $place;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(name: 'streetAddress', type: 'string', length: 100, nullable: true)]
+    protected $streetAddress;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(name: 'postalCode', type: 'string', length: 9, nullable: true)]
+    protected $postalCode;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(name: 'city', type: 'string', length: 50, nullable: true)]
+    protected $city;
+    /**
+     * @var string
+     */
+    #[ORM\Column(name: 'country', type: 'string', length: 50, nullable: true)]
+    protected $country;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(name: 'latitude', type: 'decimal', precision: 18, scale: 15, nullable: true)]
+    protected $latitude;
+    /**
+     * @var string
+     *
+     *
+     *
+     */
+    #[ORM\Column(name: 'longitude', type: 'decimal', precision: 18, scale: 15, nullable: true)]
+    protected $longitude;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(name: 'mediumimage', type: 'string', length: 2000, nullable: true)]
+    protected $mediumimage;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(name: 'largeimage', type: 'string', length: 2000, nullable: true)]
+    protected $largeimage;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(name: 'deepLink', type: 'text', nullable: true)]
+    protected $deepLink;
+    /**
+     * @var float
+     *
+     *
+     */
+    #[ORM\Column(name: 'price_mini', type: 'float', nullable: true)]
+    protected $priceMini;
+    /**
+     * @var float
+     *
+     *
+     */
+    #[ORM\Column(name: 'price_maxi', type: 'float', nullable: true)]
+    protected $priceMaxi;
+    /**
+     * @var string
+     */
+    #[ORM\Column(name: 'artists', type: 'text', length: 65535, nullable: true)]
+    protected $artists;
+    /**
+     * Set id
+     *
+     * @param string $id
+     * 
+     * @return Product
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+        return $this;
+    }
+    /**
+     * Get id
+     *
+     * @return string
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set slug
+     *
+     * @param string $slug
+     *
+     * @return Product
+     */
+    public function setSlug($slug)
+    {
+        $this->slug = $slug;
+
+        return $this;
+    }
+    /**
+     * Get slug
+     *
+     * @return string
+     */
+    public function getSlug()
+    {
+        return $this->slug;
+    }
+    /**
+     * Set name
+     *
+     * @param string $name
+     *
+     * @return Product
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+
+        return $this;
+    }
+    /**
+     * Get name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+    /**
+     * Set description
+     *
+     * @param string $description
+     *
+     * @return Product
+     */
+    public function setDescription($description)
+    {
+        $this->description = $description;
+
+        return $this;
+    }
+    /**
+     * Get description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        return $this->description;
+    }
+    /**
+     * Set categories
+     *
+     * @param array $categories
+     *
+     * @return Product
+     */
+    public function setCategories(array $categories)
+    {
+        $this->categories = $categories;
+
+        return $this;
+    }
+    /**
+     * Get categories
+     *
+     * @return array
+     */
+    public function getCategories()
+    {
+        return $this->categories;
+    }
+    /**
+     * Set datetimeStart
+     *
+     * @param \DateTime $datetimeStart
+     *
+     * @return Product
+     */
+    public function setDatetimeStart($datetimeStart)
+    {
+        $this->datetimeStart = $datetimeStart;
+
+        return $this;
+    }
+    /**
+     * Get datetimeStart
+     *
+     * @return \DateTime
+     */
+    public function getDatetimeStart()
+    {
+        return $this->datetimeStart;
+    }
+    /**
+     * Set datetimeEnd
+     *
+     * @param \DateTime $datetimeEnd
+     *
+     * @return Product
+     */
+    public function setDatetimeEnd($datetimeEnd)
+    {
+        $this->datetimeEnd = $datetimeEnd;
+
+        return $this;
+    }
+    /**
+     * Get datetimeEnd
+     *
+     * @return \DateTime
+     */
+    public function getDatetimeEnd()
+    {
+        return $this->datetimeEnd;
+    }
+    /**
+     * Set meetingSchedule
+     *
+     * @param array $meetingSchedule
+     *
+     * @return Product
+     */
+    public function setMeetingSchedule(array $meetingSchedule)
+    {
+        $this->meetingSchedule = $meetingSchedule;
+
+        return $this;
+    }
+    /**
+     * Get meetingSchedule
+     *
+     * @return array
+     */
+    public function getMeetingSchedule()
+    {
+        return $this->meetingSchedule;
+    }
+    /**
+     * Set placeCode
+     *
+     * @param string $placeCode
+     *
+     * @return Product
+     */
+    public function setPlaceCode($placeCode)
+    {
+        $this->placeCode = $placeCode;
+
+        return $this;
+    }
+    /**
+     * Get placeCode
+     *
+     * @return string
+     */
+    public function getPlaceCode()
+    {
+        return $this->placeCode;
+    }
+    /**
+     * Set place
+     *
+     * @param string $place
+     *
+     * @return Product
+     */
+    public function setPlace($place)
+    {
+        $this->place = $place;
+
+        return $this;
+    }
+    /**
+     * Get place
+     *
+     * @return string
+     */
+    public function getPlace()
+    {
+        return $this->place;
+    }
+    /**
+     * Set streetAddress
+     *
+     * @param string $streetAddress
+     *
+     * @return Product
+     */
+    public function setStreetAddress($streetAddress)
+    {
+        $this->streetAddress = $streetAddress;
+
+        return $this;
+    }
+    /**
+     * Get streetAddress
+     *
+     * @return string
+     */
+    public function getStreetAddress()
+    {
+        return $this->streetAddress;
+    }
+    /**
+     * Set postalCode
+     *
+     * @param string $postalCode
+     *
+     * @return Product
+     */
+    public function setPostalCode($postalCode)
+    {
+        $this->postalCode = $postalCode;
+
+        return $this;
+    }
+    /**
+     * Get postalCode
+     *
+     * @return string
+     */
+    public function getPostalCode()
+    {
+        return $this->postalCode;
+    }
+    /**
+     * Set city
+     *
+     * @param string $city
+     *
+     * @return Product
+     */
+    public function setCity($city)
+    {
+        $this->city = $city;
+
+        return $this;
+    }
+    /**
+     * Get city
+     *
+     * @return string
+     */
+    public function getCity()
+    {
+        return $this->city;
+    }
+    /**
+     * Set country
+     *
+     * @param string $country
+     *
+     * @return Product
+     */
+    public function setCountry($country)
+    {
+        $this->country = $country;
+
+        return $this;
+    }
+    /**
+     * Get country
+     *
+     * @return string
+     */
+    public function getCountry()
+    {
+        return $this->country;
+    }
+    /**
+     * Set latitude
+     *
+     * @param string $latitude
+     *
+     * @return Product
+     */
+    public function setLatitude($latitude)
+    {
+        $this->latitude = $latitude;
+
+        return $this;
+    }
+    /**
+     * Get latitude
+     *
+     * @return string
+     */
+    public function getLatitude()
+    {
+        return $this->latitude;
+    }
+    /**
+     * Set longitude
+     *
+     * @param string $longitude
+     *
+     * @return Product
+     */
+    public function setLongitude($longitude)
+    {
+        $this->longitude = $longitude;
+
+        return $this;
+    }
+    /**
+     * Get longitude
+     *
+     * @return string
+     */
+    public function getLongitude()
+    {
+        return $this->longitude;
+    }
+    /**
+     * Set mediumimage
+     *
+     * @param string $mediumimage
+     *
+     * @return Product
+     */
+    public function setMediumimage($mediumimage)
+    {
+        $this->mediumimage = $mediumimage;
+
+        return $this;
+    }
+    /**
+     * Get mediumimage
+     *
+     * @return string
+     */
+    public function getMediumimage()
+    {
+        return $this->mediumimage;
+    }
+    /**
+     * Set largeimage
+     *
+     * @param string $largeimage
+     *
+     * @return Product
+     */
+    public function setLargeimage($largeimage)
+    {
+        $this->largeimage = $largeimage;
+
+        return $this;
+    }
+    /**
+     * Get largeimage
+     *
+     * @return string
+     */
+    public function getLargeimage()
+    {
+        return $this->largeimage;
+    }
+    /**
+     * Set deepLink
+     *
+     * @param string $deepLink
+     *
+     * @return Product
+     */
+    public function setDeepLink($deepLink)
+    {
+        $this->deepLink = $deepLink;
+
+        return $this;
+    }
+    /**
+     * Get deepLink
+     *
+     * @return string
+     */
+    public function getDeepLink()
+    {
+        return $this->deepLink;
+    }
+    /**
+     * Set priceMini
+     *
+     * @param float $priceMini
+     *
+     * @return Product
+     */
+    public function setPriceMini($priceMini)
+    {
+        $this->priceMini = $priceMini;
+
+        return $this;
+    }
+    /**
+     * Get priceMini
+     *
+     * @return float
+     */
+    public function getPriceMini()
+    {
+        return $this->priceMini;
+    }
+    /**
+     * Set priceMaxi
+     *
+     * @param float $priceMaxi
+     *
+     * @return Product
+     */
+    public function setPriceMaxi($priceMaxi)
+    {
+        $this->priceMaxi = $priceMaxi;
+
+        return $this;
+    }
+    /**
+     * Get priceMaxi
+     *
+     * @return float
+     */
+    public function getPriceMaxi()
+    {
+        return $this->priceMaxi;
+    }
+    /**
+     * Set artists
+     *
+     * @param string $artists
+     *
+     * @return Product
+     */
+    public function setArtists($artists)
+    {
+        $this->artists = $artists;
+
+        return $this;
+    }
+    /**
+     * Get artists
+     *
+     * @return string
+     */
+    public function getArtists()
+    {
+        return $this->artists;
+    }
+}

+ 493 - 0
old/Entity/Bank/BankAccount.php

@@ -0,0 +1,493 @@
+<?php
+
+namespace AppBundle\Entity\Bank;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Organization\Organization;
+use AppBundle\Entity\Person\Person;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * Coordonnées bancaires des Person et Organization
+ *
+ * @Iri("http://schema.org/BankAccount")
+ */
+#[ORM\Entity(repositoryClass: 'AppBundle\Entity\Bank\Repository\BankAccountRepository')]
+class BankAccount
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['bankaccount', 'access_details_person', 'organization_details', 'sepa_debit_mandate_person', 'build_bills_access'])]
+    private $id;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Length(max: 255, maxMessage: 'invalid-max-length')]
+    #[Groups(['bankaccount', 'access_details_person', 'organization_details_bankaccount', 'build_bills_access'])]
+    private $bankName;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 11, nullable: true)]
+    #[Assert\Bic(message: 'This is not a valid Business Identifier Code (BIC).')]
+    #[Groups(['bankaccount', 'access_details_person', 'organization_details_bankaccount', 'sepa_debit_mandate_person', 'build_bills_access'])]
+    private $bic;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 255, nullable: true)]
+    #[Groups(['bankaccount'])]
+    private $bicInvalid;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 34, nullable: true)]
+    #[Assert\Iban(message: 'This is not a valid International Bank Account Number (IBAN).')]
+    #[Groups(['bankaccount', 'access_details_person', 'organization_details_bankaccount', 'sepa_debit_mandate_person', 'build_bills_access'])]
+    private $iban;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 255, nullable: true)]
+    #[Groups(['bankaccount'])]
+    private $ibanInvalid;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['bankaccount', 'access_details_person', 'sepa_debit_mandate_person', 'build_bills_access'])]
+    private $holderIdDifferent = false;
+    /**
+     * 0 => jamais facturé, 1 => facturé 1 fois, 2 => facturé plusieurs fois
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true, options: ['default' => 0])]
+    #[Groups(['bankaccount', 'access_details_person', 'sepa_debit_mandate_person', 'build_bills_access'])]
+    private $countInvoiced = 0;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['bankaccount', 'access_details_person', 'sepa_debit_mandate_person', 'build_bills_access'])]
+    private $holder;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['bankaccount', 'access_details_person', 'sepa_debit_mandate_person', 'build_bills_access'])]
+    private $principal = false;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'text', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Length(max: 255, maxMessage: 'invalid-max-length')]
+    #[Groups(['bankaccount', 'access_details_person', 'build_bills_access'])]
+    private $debitAddress;
+    /**
+     * @var Organization
+     */
+    #[ORM\ManyToMany(targetEntity: 'AppBundle\Entity\Organization\Organization', mappedBy: 'bankAccount', cascade: ['persist'])]
+    private $organization;
+    /**
+     * @var Person
+     */
+    #[ORM\ManyToMany(targetEntity: 'AppBundle\Entity\Person\Person', mappedBy: 'bankAccount', cascade: ['persist'])]
+    private $person;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 35, unique: true, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['bankaccount', 'access_details_person', 'sepa_debit_mandate_person', 'build_bills_access'])]
+    #[Assert\Length(max: 35, maxMessage: 'invalid-max-length')]
+    private $rum;
+    /**
+     * @var
+     *
+     * @Iri("https://schema.org/birthDate")
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date(message: 'invalid-date')]
+    #[Groups(['bankaccount', 'access_details_person', 'build_bills_access'])]
+    private $signatureDateSamplingMandate;
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+        $this->organization = new \Doctrine\Common\Collections\ArrayCollection();
+        $this->person = new \Doctrine\Common\Collections\ArrayCollection();
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Get organization
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getOrganization()
+    {
+        return $this->organization;
+    }
+    /**
+     * Get person
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getPerson()
+    {
+        return $this->person;
+    }
+    /**
+     * Sets bankName.
+     *
+     * @param string $bankName
+     *
+     * @return $this
+     */
+    public function setBankName($bankName)
+    {
+        $this->bankName = $bankName;
+
+        return $this;
+    }
+    /**
+     * Gets bankName.
+     *
+     * @return string
+     */
+    public function getBankName()
+    {
+        return $this->bankName;
+    }
+    /**
+     * Sets bic.
+     *
+     * @param string $bic
+     *
+     * @return $this
+     */
+    public function setBic($bic)
+    {
+        $this->bic = $bic;
+
+        if(!is_null($bic) && !is_null($this->getBicInvalid()))
+            $this->setBicInvalid(NULL);
+
+        return $this;
+    }
+    /**
+     * Gets bic.
+     *
+     * @return string
+     */
+    public function getBic()
+    {
+        return $this->bic;
+    }
+    /**
+     * Sets bic Invalid.
+     *
+     * @param string $bicInvalid
+     *
+     * @return $this
+     */
+    public function setBicInvalid($bicInvalid)
+    {
+        $this->bicInvalid = is_null($this->bic) ? $bicInvalid : NULL;
+        return $this;
+    }
+    /**
+     * Gets bic Invalid.
+     *
+     * @return string
+     */
+    public function getBicInvalid()
+    {
+        return $this->bicInvalid;
+    }
+    /**
+     * Sets iban.
+     *
+     * @param string $iban
+     *
+     * @return $this
+     */
+    public function setIban($iban)
+    {
+        $this->iban = $iban;
+
+        if(!is_null($iban) && !is_null($this->getIbanInvalid()))
+            $this->setIbanInvalid(NULL);
+
+        return $this;
+    }
+    /**
+     * Gets iban.
+     *
+     * @return string
+     */
+    public function getIban()
+    {
+        return $this->iban;
+    }
+    /**
+     * Sets ibanInvalid.
+     *
+     * @param string $ibanInvalid
+     *
+     * @return $this
+     */
+    public function setIbanInvalid($ibanInvalid)
+    {
+        $this->ibanInvalid = is_null($this->iban) ? $ibanInvalid : NULL;
+
+        return $this;
+    }
+    /**
+     * Gets ibanInvalid.
+     *
+     * @return string
+     */
+    public function getIbanInvalid()
+    {
+        return $this->ibanInvalid;
+    }
+    /**
+     * Sets holder.
+     *
+     * @param string $holder
+     *
+     * @return $this
+     */
+    public function setHolder($holder)
+    {
+        $this->holder = $holder;
+
+        return $this;
+    }
+    /**
+     * Gets holder.
+     *
+     * @return string
+     */
+    public function getHolder()
+    {
+        return $this->holder;
+    }
+    /**
+     * Sets principal.
+     *
+     * @param bool $principal
+     *
+     * @return $this
+     */
+    public function setPrincipal($principal)
+    {
+        $this->principal = $principal;
+
+        return $this;
+    }
+    /**
+     * Gets principal.
+     *
+     * @return bool
+     */
+    public function getPrincipal()
+    {
+        return $this->principal;
+    }
+    /**
+     * Sets debitAddress.
+     *
+     * @param string $debitAddress
+     *
+     * @return $this
+     */
+    public function setDebitAddress($debitAddress)
+    {
+        $this->debitAddress = $debitAddress;
+
+        return $this;
+    }
+    /**
+     * Gets debitAddress.
+     *
+     * @return string
+     */
+    public function getDebitAddress()
+    {
+        return $this->debitAddress;
+    }
+    /**
+     * Add organization
+     *
+     * @param \AppBundle\Entity\Organization\Organization $organization
+     *
+     * @return BankAccount
+     */
+    public function addOrganization(\AppBundle\Entity\Organization\Organization $organization)
+    {
+        $this->organization[] = $organization;
+
+        return $this;
+    }
+    /**
+     * Remove organization
+     *
+     * @param \AppBundle\Entity\Organization\Organization $organization
+     */
+    public function removeOrganization(\AppBundle\Entity\Organization\Organization $organization)
+    {
+        $this->organization->removeElement($organization);
+    }
+    /**
+     * Add person
+     *
+     * @param \AppBundle\Entity\Person\Person $person
+     *
+     * @return BankAccount
+     */
+    public function addPerson(\AppBundle\Entity\Person\Person $person)
+    {
+        $this->person[] = $person;
+
+        return $this;
+    }
+    /**
+     * Remove person
+     *
+     * @param \AppBundle\Entity\Person\Person $person
+     */
+    public function removePerson(\AppBundle\Entity\Person\Person $person)
+    {
+        $this->person->removeElement($person);
+    }
+    /**
+     * Get rum
+     *
+     * @return string
+     */
+    public function getRum()
+    {
+        return $this->rum;
+    }
+    /**
+     * Set rum
+     *
+     * @param string $rum
+     *
+     * @return BankAccount
+     */
+    public function setRum($rum)
+    {
+        $this->rum = $rum;
+
+        return $this;
+    }
+    /**
+     * Set signatureDateSamplingMandate
+     *
+     * @param \DateTime $signatureDateSamplingMandate
+     *
+     * @return BankAccount
+     */
+    public function setSignatureDateSamplingMandate($signatureDateSamplingMandate)
+    {
+        $this->signatureDateSamplingMandate = $signatureDateSamplingMandate;
+
+        return $this;
+    }
+    /**
+     * Get signatureDateSamplingMandate
+     *
+     * @return \DateTime
+     */
+    public function getSignatureDateSamplingMandate()
+    {
+        return $this->signatureDateSamplingMandate ? $this->signatureDateSamplingMandate->format('Y-m-d') : $this->signatureDateSamplingMandate;
+    }
+    /**
+     * Set holderIdDifferent
+     *
+     * @param boolean $holderIdDifferent
+     *
+     * @return BankAccount
+     */
+    public function setHolderIdDifferent($holderIdDifferent)
+    {
+        $this->holderIdDifferent = $holderIdDifferent;
+
+        return $this;
+    }
+    /**
+     * Get holderIdDifferent
+     *
+     * @return boolean
+     */
+    public function getHolderIdDifferent()
+    {
+        return $this->holderIdDifferent;
+    }
+    /**
+     * Set countInvoiced
+     *
+     * @param integer $countInvoiced
+     *
+     * @return BankAccount
+     */
+    public function setCountInvoiced($countInvoiced)
+    {
+        $this->countInvoiced = $countInvoiced;
+
+        return $this;
+    }
+    /**
+     * Get countInvoiced
+     *
+     * @return integer
+     */
+    public function getCountInvoiced()
+    {
+        return $this->countInvoiced;
+    }
+}

+ 66 - 0
old/Entity/Bank/Repository/BankAccountRepository.php

@@ -0,0 +1,66 @@
+<?php
+
+namespace AppBundle\Entity\Bank\Repository;
+
+use AppBundle\Entity\Organization\Organization;
+use Doctrine\ORM\EntityRepository;
+
+/**
+ * Description of BankAccountRepository
+ *
+ */
+class BankAccountRepository extends EntityRepository
+{
+    public function findInvalidBankAccountByOrganization(Organization $organization)
+    {
+        $queryBuilder = $this->createQueryBuilder('o');
+        $queryBuilder
+            ->innerJoin('o.organization', 'organization')
+            ->andWhere('organization.id = :organization')
+            ->andWhere(
+                $queryBuilder->expr()->orX(
+                    $queryBuilder->expr()->andX($queryBuilder->expr()->isNotNull('o.bicInvalid'), $queryBuilder->expr()->neq('o.bicInvalid', ':empty')),
+                    $queryBuilder->expr()->andX($queryBuilder->expr()->isNotNull('o.ibanInvalid'), $queryBuilder->expr()->neq('o.ibanInvalid', ':empty'))
+                ))
+            ->setParameter('organization', $organization->getId())
+            ->setParameter('empty', '');
+
+        return $queryBuilder->getQuery()->getResult();
+    }
+
+    public function findInvalidBankAccountByAccess(Organization $organization)
+    {
+        $queryBuilder = $this->_em->createQueryBuilder();
+        $queryBuilder
+            ->select('access')
+            ->from('AppBundle:AccessAndFunction\Access', 'access')
+            ->innerJoin('access.organizationFunction', 'function')
+            ->andWhere('access.organization = :organization')
+            ->andWhere('function.startDate < :dateEnd')
+            ->andWhere(
+                $queryBuilder->expr()->orX(
+                    $queryBuilder->expr()->gt('function.endDate', ':dateStart'),
+                    $queryBuilder->expr()->isNull('function.endDate')
+                ))
+            ->setParameter('organization', $organization->getId())
+            ->setParameter('dateStart', date('Y-m-d'))
+            ->setParameter('dateEnd', date('Y-m-d'));
+
+        $ids = array_map(function($o) {return $o->getPerson()->getId();}, $queryBuilder->getQuery()->getResult());
+
+        $queryBuilder = $this->createQueryBuilder('o');
+        $queryBuilder
+            ->innerJoin('o.person', 'person')
+            ->andWhere(
+                $queryBuilder->expr()->in('person', ':ids'),
+                $queryBuilder->expr()->orX(
+                    $queryBuilder->expr()->andX($queryBuilder->expr()->isNotNull('o.bicInvalid'), $queryBuilder->expr()->neq('o.bicInvalid', ':empty')),
+                    $queryBuilder->expr()->andX($queryBuilder->expr()->isNotNull('o.ibanInvalid'), $queryBuilder->expr()->neq('o.ibanInvalid', ':empty'))
+                ))
+            ->setParameter('ids', $ids)
+            ->setParameter('empty', '');
+
+        return $queryBuilder->getQuery()->getResult();
+    }
+}
+

+ 287 - 0
old/Entity/Billing/AbstractBillingIntangible.php

@@ -0,0 +1,287 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\Core\Tagg;
+use AppBundle\Entity\Organization\Organization;
+use AppBundle\Entity\Product\Intangible;
+use AppBundle\Entity\Traits\ActivityPeriodTrait;
+use AppBundle\Entity\Traits\BillingRuleTrait;
+use AppBundle\Entity\Traits\LockableTrait;
+use AppBundle\Enum\Billing\PeriodicityTypeEnum;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Validator\Constraints as Assert;
+use Doctrine\Common\Collections\ArrayCollection;
+use Symfony\Component\Serializer\Annotation\Groups;
+use AppBundle\Annotation\DefaultField;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * Enregistrement d'un produit à facturer par une Organization, un Access ou un EducationalProject
+ * Classe de base de @see AccessIntangible, EducationalProjectIntangible
+ *
+ *
+ */
+#[ORM\Entity]
+#[ORM\Table(name: 'BillingIntangible')]
+#[ORM\InheritanceType('SINGLE_TABLE')]
+#[ORM\DiscriminatorColumn(name: 'discr', type: 'string')]
+#[ORM\DiscriminatorMap(['access' => 'AccessIntangible', 'educationalproject' => 'EducationalProjectIntangible'])]
+abstract class AbstractBillingIntangible
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    use ActivityPeriodTrait;
+    use BillingRuleTrait;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['accessintangible', 'educationalprojectintangible', 'access_details', 'student_registration', 'educationalproject_details', 'accessbilling_edit'])]
+    private $id;
+    /**
+     * @var Intangible
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Product\Intangible', inversedBy: 'accessIntangibles')]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['accessintangible', 'accessintangible_intangible', 'educationalprojectintangible', 'access_details_accessintangibles', 'student_registration_accessintangibles', 'educationalproject_details_educationalprojectintangibles', 'accessbilling_edit_accessintangibles', 'access_intangible_list'])]
+    private $intangible;
+    /**
+     * @var string
+     *
+     * @Iri("https://schema.org/description")
+     */
+    #[ORM\Column(type: 'text', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accessintangible', 'educationalprojectintangible', 'student_registration_accessintangibles', 'accessbilling_edit_accessintangibles', 'access_intangible_list'])]
+    private $customDescription;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true)]
+    #[Assert\Type(type: 'integer', message: 'invalid-integer')]
+    #[Groups(['accessintangible', 'educationalprojectintangible', 'student_registration_accessintangibles', 'accessbilling_edit_accessintangibles'])]
+    private $quantity;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true)]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['accessintangible', 'educationalprojectintangible', 'student_registration_accessintangibles', 'accessbilling_edit_accessintangibles'])]
+    private $forcedAmount;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['accessintangible', 'educationalprojectintangible', 'student_registration_accessintangibles', 'accessbilling_edit_accessintangibles'])]
+    private $isForcedAmount = false;
+    /**
+     * @var ArrayCollection<Tagg>
+     */
+    #[ORM\ManyToMany(targetEntity: 'AppBundle\Entity\Core\Tagg', cascade: ['persist'], inversedBy: 'billingIntangibles')]
+    #[Assert\Valid]
+    #[ORM\JoinTable(name: 'tag_billingIntangible', joinColumns: [], inverseJoinColumns: [])]
+    #[ORM\JoinColumn(name: 'billingIntangible_id', referencedColumnName: 'id')]
+    #[ORM\JoinColumn(name: 'tag_id', referencedColumnName: 'id')]
+    #[Groups(['billingintangible_tags', 'manage_tags', 'access_intangible_list'])]
+    private $tags;
+    /**
+     * The constructor
+     */
+    public function __construct() {
+        $this->tags= new ArrayCollection();
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set customDescription
+     *
+     * @param string $customDescription
+     *
+     * @return AbstractBillingIntangible
+     */
+    public function setCustomDescription($customDescription)
+    {
+        $this->customDescription = $customDescription;
+
+        return $this;
+    }
+    /**
+     * Get customDescription
+     *
+     * @return string
+     */
+    public function getCustomDescription()
+    {
+        return $this->customDescription;
+    }
+    /**
+     * Set quantity
+     *
+     * @param integer $quantity
+     *
+     * @return AbstractBillingIntangible
+     */
+    public function setQuantity($quantity)
+    {
+        $this->quantity = $quantity;
+
+        return $this;
+    }
+    /**
+     * Get quantity
+     *
+     * @return integer
+     */
+    public function getQuantity()
+    {
+        return $this->quantity;
+    }
+    /**
+     * Set forcedAmount
+     *
+     * @param float $forcedAmount
+     *
+     * @return AbstractBillingIntangible
+     */
+    public function setForcedAmount($forcedAmount)
+    {
+        $this->forcedAmount = floatval($forcedAmount);
+
+        return $this;
+    }
+    /**
+     * Get forcedAmount
+     *
+     * @return float
+     */
+    public function getForcedAmount()
+    {
+        return $this->forcedAmount;
+    }
+    /**
+     * Set isForcedAmount
+     *
+     * @param boolean $isForcedAmount
+     *
+     * @return AbstractBillingIntangible
+     */
+    public function setIsForcedAmount($isForcedAmount)
+    {
+        $this->isForcedAmount = $isForcedAmount;
+
+        return $this;
+    }
+    /**
+     * Get isForcedAmount
+     *
+     * @return boolean
+     */
+    public function getIsForcedAmount()
+    {
+        return $this->isForcedAmount;
+    }
+    /**
+     * Set intangible
+     *
+     * @param \AppBundle\Entity\Product\Intangible $intangible
+     *
+     * @return AbstractBillingIntangible
+     */
+    public function setIntangible(\AppBundle\Entity\Product\Intangible $intangible)
+    {
+        $this->intangible = $intangible;
+
+        return $this;
+    }
+    /**
+     * Get intangible
+     *
+     * @return \AppBundle\Entity\Product\Intangible
+     */
+    public function getIntangible()
+    {
+        return $this->intangible;
+    }
+    /**
+     * Add tag
+     *
+     * @param \AppBundle\Entity\Core\Tagg $tag
+     *
+     * @return AbstractBillingIntangible
+     */
+    public function addTag(\AppBundle\Entity\Core\Tagg $tag)
+    {
+        $this->tags[] = $tag;
+
+        return $this;
+    }
+    /**
+     * Remove tag
+     *
+     * @param \AppBundle\Entity\Core\Tagg $tag
+     */
+    public function removeTag(\AppBundle\Entity\Core\Tagg $tag)
+    {
+        $this->tags->removeElement($tag);
+    }
+    /**
+     * Get tags
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getTags()
+    {
+        return $this->tags;
+    }
+    /**
+     * Sets start date
+     *
+     * @param \DateTime $startDate
+     * @return $this
+     */
+    public function setStartDate(\DateTime $startDate = null) {
+
+        if($startDate == null) $startDate = new \DateTime();
+        $this->startDate = $startDate;
+        if(!empty($this->getIntangible()) && $this->getIntangible()->getBillingPeriodicityType() === PeriodicityTypeEnum::PUNCTUAL){
+            $this->setEndDate($startDate);
+        }
+
+        return $this;
+    }
+    public function setEndDate(\DateTime $endDate = null) {
+        if(empty($endDate) && !empty($this->getIntangible()) && $this->getIntangible()->getBillingPeriodicityType() === PeriodicityTypeEnum::PUNCTUAL){
+            return $this;
+        }
+        $this->endDate = $endDate;
+        return $this;
+    }
+}

+ 97 - 0
old/Entity/Billing/AbstractBillingPayer.php

@@ -0,0 +1,97 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Validator\Constraints as Assert;
+use Doctrine\Common\Collections\ArrayCollection;
+use Symfony\Component\Serializer\Annotation\Groups;
+use AppBundle\Annotation\DefaultField;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * Fais le lien entre l'Access qui règle la facture et l'Access ou
+ * l'EducationalProject concerné par la facture
+ * Classe de base de @see  AccessPayer, EducationalProjectPayer
+ *
+ * @Iri("http://schema.org/BillingPayer")
+ */
+#[ORM\Entity]
+#[ORM\Table(name: 'BillingPayer')]
+#[ORM\InheritanceType('SINGLE_TABLE')]
+#[ORM\DiscriminatorColumn(name: 'discr', type: 'string')]
+#[ORM\DiscriminatorMap(['access' => 'AccessPayer', 'educationalproject' => 'EducationalProjectPayer'])]
+abstract class AbstractBillingPayer
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['accesspayer', 'educationalprojectpayer', 'access_details', 'student_registration', 'educationalproject_details', 'payer_list', 'accessbilling_edit'])]
+    private $id;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: false)]
+    #[Assert\Type(type: 'float')]
+    #[Assert\NotNull]
+    #[Groups(['accesspayer', 'educationalprojectpayer', 'access_details_billingpayers', 'student_registration_billingreceivers', 'educationalproject_details_billingreceivers', 'payer_list_billingpayers', 'accessbilling_edit_billingreceivers', 'accessbilling_edit_billingpayers', 'accessbilling_edit_billingeducationalprojectpayers'])]
+    private $paymentPart;
+    /**
+     * The constructor
+     */
+    public function __construct() {
+
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set paymentPart
+     *
+     * @param float $paymentPart
+     *
+     * @return AbstractBillingPayer
+     */
+    public function setPaymentPart($paymentPart)
+    {
+        $this->paymentPart = floatval($paymentPart);
+
+        return $this;
+    }
+    /**
+     * Get paymentPart
+     *
+     * @return float
+     */
+    public function getPaymentPart()
+    {
+        return $this->paymentPart;
+    }
+}

+ 507 - 0
old/Entity/Billing/AccessBilling.php

@@ -0,0 +1,507 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
+use AppBundle\Validator\Constraints\Billing as OpentalentAssert;
+
+/**
+ * Paramètres de facturation pour un Access
+ *
+ * @Iri("http://schema.org/AccessBilling")
+ * @OpentalentAssert\CustomerId
+ */
+#[ORM\Entity(repositoryClass: 'AppBundle\Entity\Billing\Repository\AccessBillingRepository')]
+class AccessBilling
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['accessbilling', 'access_mass', 'access_details', 'access_details_accessbilling', 'student_registration', 'student_registration_guardians', 'accesses_list', 'student_list', 'guardians_list', 'adherent_list', 'personnels_list', 'payer_list', 'accessbilling_edit', 'sepa_debit_mandate', 'fusion_accesses', 'online_registration_access_details', 'account_balance_reimbursements', 'billpayment_list'])]
+    private $id;
+    /**
+     * @var Access
+     */
+    #[Assert\Valid]
+    #[ORM\OneToOne(targetEntity: 'AppBundle\Entity\AccessAndFunction\Access', inversedBy: 'accessBilling', cascade: ['persist'], fetch: 'EAGER')]
+    #[ORM\JoinColumn(nullable: true, onDelete: 'CASCADE')]
+    #[Groups(['accessbilling', 'billpayment_list_accessbillingaccountbalancereimbursement'])]
+    private $access;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['accessbilling', 'student_registration_accessbilling', 'student_registration_guardians', 'payer_list_accessbilling', 'accessbilling_edit_accessbilling'])]
+    private $customerId;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\PaymentChoiceEnum', 'toArray'])]
+    #[Groups(['accessbilling', 'student_registration_accessbilling', 'student_registration_guardians', 'bill_list_access', 'payer_list_accessbilling', 'accessbilling_edit_accessbilling', 'online_registration_access_details_accessbilling', 'build_bills_billlines', 'build_bills_access'])]
+    private $paymentChoice;
+    /**
+     * @var FamilyQuotient
+     */
+    #[Assert\Valid]
+    #[ORM\ManyToOne(targetEntity: 'FamilyQuotient', cascade: ['persist'], inversedBy: 'accessBilling')]
+    #[ORM\JoinColumn(referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
+    #[Groups(['accessbilling', 'student_registration_accessbilling', 'student_registration_accessbilling', 'access_mass_accessbilling', 'payer_list_accessbilling', 'accessbilling_edit_accessbilling', 'fusion_accesses_accessbilling', 'student_list_accessbilling'])]
+    private $familyQuotient;
+    /**
+     * @var ResidenceArea
+     */
+    #[Assert\Valid]
+    #[ORM\ManyToOne(targetEntity: 'ResidenceArea', cascade: ['persist'], inversedBy: 'accessBilling')]
+    #[ORM\JoinColumn(referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
+    #[Groups(['accessbilling', 'access_details_accessbilling', 'access_mass_accessbilling', 'student_registration_accessbilling', 'accesses_list_accessbilling', 'student_list_accessbilling', 'guardians_list_accessbilling', 'adherent_list_accessbilling', 'personnels_list_accessbilling', 'payer_list_accessbilling', 'accessbilling_edit_accessbilling', 'fusion_accesses_accessbilling', 'online_registration_access_details_accessbilling'])]
+    private $residenceArea;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\PeriodicityPaymentEnum', 'toArray'])]
+    #[Groups(['accessbilling', 'student_registration_accessbilling', 'student_registration_guardians', 'payer_list_accessbilling', 'accessbilling_edit_accessbilling', 'sepa_debit_mandate_accessbilling'])]
+    private $periodicityPayment;
+    /**
+     * @var ArrayCollection<Billpayment>
+     */
+    #[ORM\OneToMany(targetEntity: 'BillPayment', mappedBy: 'accessBilling', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['accessbilling_billpayment'])]
+    private $billDetachedPayments;
+    /**
+     * @var ArrayCollection<BillDebitBalance>
+     */
+    #[ORM\OneToMany(targetEntity: 'BillDebitBalance', mappedBy: 'accessBilling', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['accessbilling_billdebitbalance'])]
+    private $billDebitBalances;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', options: ['default' => 'APPLY_ADHESION'])]
+    #[Assert\Type(type: 'string')]
+    #[Assert\NotNull]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\AdhesionChoiceEnum', 'toArray'])]
+    #[Groups(['accessbilling', 'student_registration_accessbilling', 'student_registration_guardians', 'accessbilling_edit_accessbilling'])]
+    private $adhesionChoice = "APPLY_ADHESION";
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true)]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['accessbilling', 'student_registration_accessbilling', 'student_registration_guardians', 'accessbilling_edit_accessbilling'])]
+    private $adhesionAmount;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true, options: ['default' => '0.0'])]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['accessbilling', 'payer_list_accessbilling'])]
+    private $accountBalance = 0.0;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['accessbilling'])]
+    private $accountBalanceUpdateDate;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true, options: ['default' => '0.0'])]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['accessbilling'])]
+    private $reportPaymentsAmount = 0.0;
+    /**
+     * @var ArrayCollection<Billpayment>
+     */
+    #[ORM\OneToMany(targetEntity: 'BillPayment', mappedBy: 'accessBillingAccountBalanceReimbursement', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['accessbilling_accountbalancereimbursements', 'account_balance_reimbursements_accessbilling'])]
+    private $accountBalanceReimbursements;
+    /**
+     * The constructor
+     */
+    public function __construct() {
+        $this->billDetachedPayments = new ArrayCollection();
+        $this->billDebitBalances = new ArrayCollection();
+        $this->accountBalanceReimbursements = new ArrayCollection();
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set customerId
+     *
+     * @param string $customerId
+     *
+     * @return AccessBilling
+     */
+    public function setCustomerId($customerId = null)
+    {
+        if(empty($customerId))
+            $customerId = null;
+        $this->customerId = $customerId;
+
+        return $this;
+    }
+    /**
+     * Get customerId
+     *
+     * @return string
+     */
+    public function getCustomerId()
+    {
+        return $this->customerId;
+    }
+    /**
+     * Set paymentChoice
+     *
+     * @param string $paymentChoice
+     *
+     * @return AccessBilling
+     */
+    public function setPaymentChoice($paymentChoice)
+    {
+        $this->paymentChoice = $paymentChoice;
+
+        return $this;
+    }
+    /**
+     * Get paymentChoice
+     *
+     * @return string
+     */
+    public function getPaymentChoice()
+    {
+        return $this->paymentChoice;
+    }
+    /**
+     * Set familyQuotient
+     *
+     * @param \AppBundle\Entity\Billing\FamilyQuotient $familyQuotient
+     *
+     * @return AccessBilling
+     */
+    public function setFamilyQuotient(\AppBundle\Entity\Billing\FamilyQuotient $familyQuotient = null)
+    {
+        $this->familyQuotient = $familyQuotient;
+
+        return $this;
+    }
+    /**
+     * Get familyQuotient
+     *
+     * @return \AppBundle\Entity\Billing\FamilyQuotient
+     */
+    public function getFamilyQuotient()
+    {
+        return $this->familyQuotient;
+    }
+    /**
+     * Set residenceArea
+     *
+     * @param \AppBundle\Entity\Billing\ResidenceArea $residenceArea
+     *
+     * @return AccessBilling
+     */
+    public function setResidenceArea(\AppBundle\Entity\Billing\ResidenceArea $residenceArea = null)
+    {
+        $this->residenceArea = $residenceArea;
+
+        return $this;
+    }
+    /**
+     * Get residenceArea
+     *
+     * @return \AppBundle\Entity\Billing\ResidenceArea
+     */
+    public function getResidenceArea()
+    {
+        return $this->residenceArea;
+    }
+    /**
+     * Set access
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $access
+     *
+     * @return AccessBilling
+     */
+    public function setAccess(\AppBundle\Entity\AccessAndFunction\Access $access = null)
+    {
+        $this->access = $access;
+
+        return $this;
+    }
+    /**
+     * Get access
+     *
+     * @return \AppBundle\Entity\AccessAndFunction\Access
+     */
+    public function getAccess()
+    {
+        return $this->access;
+    }
+    /**
+     * Set periodicityPayment
+     *
+     * @param string $periodicityPayment
+     *
+     * @return AccessBilling
+     */
+    public function setPeriodicityPayment($periodicityPayment)
+    {
+        $this->periodicityPayment = $periodicityPayment;
+
+        return $this;
+    }
+    /**
+     * Get periodicityPayment
+     *
+     * @return string
+     */
+    public function getPeriodicityPayment()
+    {
+        return $this->periodicityPayment;
+    }
+    /**
+     * Add billDetachedPayment
+     *
+     * @param \AppBundle\Entity\Billing\BillPayment $billDetachedPayment
+     *
+     * @return AccessBilling
+     */
+    public function addBillDetachedPayment(\AppBundle\Entity\Billing\BillPayment $billDetachedPayment)
+    {
+        $billDetachedPayment->setAccessBilling($this);
+        $this->billDetachedPayments[] = $billDetachedPayment;
+
+        return $this;
+    }
+    /**
+     * Remove billDetachedPayment
+     *
+     * @param \AppBundle\Entity\Billing\BillPayment $billDetachedPayment
+     */
+    public function removeBillDetachedPayment(\AppBundle\Entity\Billing\BillPayment $billDetachedPayment)
+    {
+        $this->billDetachedPayments->removeElement($billDetachedPayment);
+    }
+    /**
+     * Get billDetachedPayments
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getBillDetachedPayments()
+    {
+        return $this->billDetachedPayments;
+    }
+    /**
+     * Add billDebitBalance
+     *
+     * @param \AppBundle\Entity\Billing\BillDebitBalance $billDebitBalance
+     *
+     * @return AccessBilling
+     */
+    public function addBillDebitBalance(\AppBundle\Entity\Billing\BillDebitBalance $billDebitBalance)
+    {
+        $billDebitBalance->setAccessBilling($this);
+        $this->billDebitBalances[] = $billDebitBalance;
+
+        return $this;
+    }
+    /**
+     * Remove billDebitBalance
+     *
+     * @param \AppBundle\Entity\Billing\BillDebitBalance $billDebitBalance
+     */
+    public function removeBillDebitBalance(\AppBundle\Entity\Billing\BillDebitBalance $billDebitBalance)
+    {
+        $this->billDebitBalances->removeElement($billDebitBalance);
+    }
+    /**
+     * Get billDebitBalances
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getBillDebitBalances()
+    {
+        return $this->billDebitBalances;
+    }
+    /**
+     * Set adhesionChoice
+     *
+     * @param string $adhesionChoice
+     *
+     * @return AccessBilling
+     */
+    public function setAdhesionChoice($adhesionChoice)
+    {
+        $this->adhesionChoice = $adhesionChoice;
+
+        return $this;
+    }
+    /**
+     * Get adhesionChoice
+     *
+     * @return string
+     */
+    public function getAdhesionChoice()
+    {
+        return $this->adhesionChoice;
+    }
+    /**
+     * Set adhesionAmount
+     *
+     * @param float $adhesionAmount
+     *
+     * @return AccessBilling
+     */
+    public function setAdhesionAmount($adhesionAmount)
+    {
+        $this->adhesionAmount = floatval($adhesionAmount);
+
+        return $this;
+    }
+    /**
+     * Get adhesionAmount
+     *
+     * @return float
+     */
+    public function getAdhesionAmount()
+    {
+        return $this->adhesionAmount;
+    }
+    /**
+     * Set accountBalance
+     *
+     * @param float $accountBalance
+     *
+     * @return AccessBilling
+     */
+    public function setAccountBalance($accountBalance)
+    {
+        $this->accountBalance = $accountBalance;
+
+        return $this;
+    }
+    /**
+     * Get accountBalance
+     *
+     * @return float
+     */
+    public function getAccountBalance()
+    {
+        return $this->accountBalance;
+    }
+    /**
+     * Set accountBalanceUpdateDate
+     *
+     * @param \DateTime $accountBalanceUpdateDate
+     *
+     * @return AccessBilling
+     */
+    public function setAccountBalanceUpdateDate($accountBalanceUpdateDate)
+    {
+        $this->accountBalanceUpdateDate = $accountBalanceUpdateDate;
+
+        return $this;
+    }
+    /**
+     * Get accountBalanceUpdateDate
+     *
+     * @return \DateTime
+     */
+    public function getAccountBalanceUpdateDate()
+    {
+        return $this->accountBalanceUpdateDate;
+    }
+    /**
+     * Set reportPaymentsAmount
+     *
+     * @param float $reportPaymentsAmount
+     *
+     * @return AccessBilling
+     */
+    public function setReportPaymentsAmount($reportPaymentsAmount)
+    {
+        $this->reportPaymentsAmount = $reportPaymentsAmount;
+
+        return $this;
+    }
+    /**
+     * Get reportPaymentsAmount
+     *
+     * @return float
+     */
+    public function getReportPaymentsAmount()
+    {
+        return $this->reportPaymentsAmount;
+    }
+    /**
+     * Add accountBalanceReimbursement
+     *
+     * @param \AppBundle\Entity\Billing\BillPayment $accountBalanceReimbursement
+     *
+     * @return AccessBilling
+     */
+    public function addAccountBalanceReimbursement(\AppBundle\Entity\Billing\BillPayment $accountBalanceReimbursement)
+    {
+        $accountBalanceReimbursement->setAccessBillingAccountBalanceReimbursement($this);
+        $this->accountBalanceReimbursements[] = $accountBalanceReimbursement;
+
+        return $this;
+    }
+    /**
+     * Remove accountBalanceReimbursement
+     *
+     * @param \AppBundle\Entity\Billing\BillPayment $accountBalanceReimbursement
+     */
+    public function removeAccountBalanceReimbursement(\AppBundle\Entity\Billing\BillPayment $accountBalanceReimbursement)
+    {
+        $this->accountBalanceReimbursements->removeElement($accountBalanceReimbursement);
+    }
+    /**
+     * Get accountBalanceReimbursements
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getAccountBalanceReimbursements()
+    {
+        return $this->accountBalanceReimbursements;
+    }
+}

+ 198 - 0
old/Entity/Billing/AccessFictionalIntangible.php

@@ -0,0 +1,198 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\AccessAndFunction\AccessFamily;
+use AppBundle\Entity\Organization\Organization;
+use AppBundle\Entity\Product\FictionalIntangible;
+use AppBundle\Entity\Product\Intangible;
+use AppBundle\Entity\Traits\BillingRuleTrait;
+use AppBundle\Entity\Traits\LockableTrait;
+use AppBundle\Enum\Billing\PeriodicityTypeEnum;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Validator\Constraints as Assert;
+use Doctrine\Common\Collections\ArrayCollection;
+use Symfony\Component\Serializer\Annotation\Groups;
+use AppBundle\Annotation\DefaultField;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * Correspond à une ligne de facturation pour un Access
+ * (@see FictionalIntangible)
+ *
+ * @Iri("http://schema.org/AccessFictionalIntangible")
+ */
+#[ORM\Entity]
+class AccessFictionalIntangible
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    use BillingRuleTrait;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['accessfictionalintangible'])]
+    private $id;
+    /**
+     * @var Access
+     */
+    #[Assert\Valid]
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\AccessAndFunction\Access', inversedBy: 'accessFictionalIntangibles', cascade: ['persist'])]
+    #[Groups(['accessfictionalintangible'])]
+    private $access;
+    /**
+     * @var AccessFamily
+     */
+    #[Assert\Valid]
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\AccessAndFunction\AccessFamily', inversedBy: 'accessFictionalIntangibles', cascade: ['persist'])]
+    #[Groups(['accessfictionalintangible'])]
+    private $accessFamily;
+    /**
+     * @var FictionalIntangible
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Product\FictionalIntangible')]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['accessfictionalintangible'])]
+    private $fictionalIntangible;
+    /**
+     * @var ArrayCollection<BillingIntangibleExcludeDate>
+     */
+    #[Assert\Valid]
+    #[ORM\OneToMany(targetEntity: 'BillingIntangibleExcludeDate', mappedBy: 'accessFictionalIntangible', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['accessfictionalintangible'])]
+    private $billingIntangibleExcludeDates;
+    /**
+     * The constructor
+     */
+    public function __construct() {
+        $this->billingIntangibleExcludeDates = new ArrayCollection();
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set access
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $access
+     *
+     * @return AccessFictionalIntangible
+     */
+    public function setAccess(\AppBundle\Entity\AccessAndFunction\Access $access = null)
+    {
+        $access->addAccessFictionalIntangible($this);
+        $this->access = $access;
+
+        return $this;
+    }
+    /**
+     * Get access
+     *
+     * @return \AppBundle\Entity\AccessAndFunction\Access
+     */
+    public function getAccess()
+    {
+        return $this->access;
+    }
+    /**
+     * Set fictionalIntangible
+     *
+     * @param \AppBundle\Entity\Product\FictionalIntangible $fictionalIntangible
+     *
+     * @return AccessFictionalIntangible
+     */
+    public function setFictionalIntangible(\AppBundle\Entity\Product\FictionalIntangible $fictionalIntangible)
+    {
+        $this->fictionalIntangible = $fictionalIntangible;
+
+        return $this;
+    }
+    /**
+     * Get fictionalIntangible
+     *
+     * @return \AppBundle\Entity\Product\FictionalIntangible
+     */
+    public function getFictionalIntangible()
+    {
+        return $this->fictionalIntangible;
+    }
+    /**
+     * Set accessFamily
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\AccessFamily $accessFamily
+     *
+     * @return AccessFictionalIntangible
+     */
+    public function setAccessFamily(\AppBundle\Entity\AccessAndFunction\AccessFamily $accessFamily = null)
+    {
+        $accessFamily->addAccessFictionalIntangible($this);
+        $this->accessFamily = $accessFamily;
+
+        return $this;
+    }
+    /**
+     * Get accessFamily
+     *
+     * @return \AppBundle\Entity\AccessAndFunction\AccessFamily
+     */
+    public function getAccessFamily()
+    {
+        return $this->accessFamily;
+    }
+    /**
+     * Add billingIntangibleExcludeDate
+     *
+     * @param \AppBundle\Entity\Billing\BillingIntangibleExcludeDate $billingIntangibleExcludeDate
+     *
+     * @return AccessFictionalIntangible
+     */
+    public function addBillingIntangibleExcludeDate(\AppBundle\Entity\Billing\BillingIntangibleExcludeDate $billingIntangibleExcludeDate)
+    {
+        $this->billingIntangibleExcludeDates[] = $billingIntangibleExcludeDate;
+
+        return $this;
+    }
+    /**
+     * Remove billingIntangibleExcludeDate
+     *
+     * @param \AppBundle\Entity\Billing\BillingIntangibleExcludeDate $billingIntangibleExcludeDate
+     */
+    public function removeBillingIntangibleExcludeDate(\AppBundle\Entity\Billing\BillingIntangibleExcludeDate $billingIntangibleExcludeDate)
+    {
+        $this->billingIntangibleExcludeDates->removeElement($billingIntangibleExcludeDate);
+    }
+    /**
+     * Get billingIntangibleExcludeDates
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getBillingIntangibleExcludeDates()
+    {
+        return $this->billingIntangibleExcludeDates;
+    }
+}

+ 144 - 0
old/Entity/Billing/AccessIntangible.php

@@ -0,0 +1,144 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\Product\Intangible;
+use AppBundle\Entity\Traits\LockableTrait;
+use AppBundle\Enum\Billing\PeriodicityTypeEnum;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
+
+/**
+ * Enregistrement d'un produit à facturer par un Access
+ *
+ * @Iri("http://schema.org/AccessIntangible")
+ */
+#[ORM\Entity(repositoryClass: 'AppBundle\Entity\Billing\Repository\AccessIntangibleRepository')]
+class AccessIntangible extends AbstractBillingIntangible
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    use LockableTrait;
+    /**
+     * @var Access
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\AccessAndFunction\Access', inversedBy: 'accessIntangibles')]
+    #[Groups(['accessintangible', 'access_intangible_list'])]
+    private $access;
+    /**
+     * @var ArrayCollection<BillingIntangibleExcludeDate>
+     */
+    #[Assert\Valid]
+    #[ORM\OneToMany(targetEntity: 'BillingIntangibleExcludeDate', mappedBy: 'accessIntangible', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['accessintangible', 'student_registration_accessintangibles', 'accessbilling_edit_accessintangibles'])]
+    private $billingIntangibleExcludeDates;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true)]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['accessintangible', 'educationalprojectintangible', 'student_registration_accessintangibles', 'accessbilling_edit_accessintangibles'])]
+    private $unitPrice;
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+        parent::__construct();
+        $this->billingIntangibleExcludeDates = new ArrayCollection();
+    }
+    /**
+     * Set access
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $access
+     *
+     * @return AccessIntangible
+     */
+    public function setAccess(\AppBundle\Entity\AccessAndFunction\Access $access)
+    {
+        $this->access = $access;
+
+        return $this;
+    }
+    /**
+     * Get access
+     *
+     * @return \AppBundle\Entity\AccessAndFunction\Access
+     */
+    public function getAccess()
+    {
+        return $this->access;
+    }
+    /**
+     * applyLock
+     */
+    public function applyLock()
+    {
+//        if(!is_null($this->getExcludeRule()) && $this->getIntangible()->getBillingPeriodicityType() === PeriodicityTypeEnum::PUNCTUAL){
+//            $this->setLockable(true);
+//        }
+    }
+    public function adminCanChange(){
+        return false;
+    }
+    /**
+     * Add billingIntangibleExcludeDate
+     *
+     * @param \AppBundle\Entity\Billing\BillingIntangibleExcludeDate $billingIntangibleExcludeDate
+     *
+     * @return AccessIntangible
+     */
+    public function addBillingIntangibleExcludeDate(\AppBundle\Entity\Billing\BillingIntangibleExcludeDate $billingIntangibleExcludeDate)
+    {
+        $this->billingIntangibleExcludeDates[] = $billingIntangibleExcludeDate;
+
+        return $this;
+    }
+    /**
+     * Remove billingIntangibleExcludeDate
+     *
+     * @param \AppBundle\Entity\Billing\BillingIntangibleExcludeDate $billingIntangibleExcludeDate
+     */
+    public function removeBillingIntangibleExcludeDate(\AppBundle\Entity\Billing\BillingIntangibleExcludeDate $billingIntangibleExcludeDate)
+    {
+        $this->billingIntangibleExcludeDates->removeElement($billingIntangibleExcludeDate);
+    }
+    /**
+     * Get billingIntangibleExcludeDates
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getBillingIntangibleExcludeDates()
+    {
+        return $this->billingIntangibleExcludeDates;
+    }
+    /**
+     * Set unitPrice
+     *
+     * @param float $unitPrice
+     *
+     * @return AccessIntangible
+     */
+    public function setUnitPrice($unitPrice)
+    {
+        $this->unitPrice = floatval($unitPrice);
+
+        return $this;
+    }
+    /**
+     * Get unitPrice
+     *
+     * @return float
+     */
+    public function getUnitPrice()
+    {
+        return $this->unitPrice;
+    }
+}

+ 98 - 0
old/Entity/Billing/AccessPayer.php

@@ -0,0 +1,98 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Annotation\ExportSplitFields;
+use AppBundle\Entity\AccessAndFunction\Access;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * Fais le lien entre l'Access qui règle la facture et l'Access concerné
+ *
+ *
+ * @Iri("http://schema.org/AccessPayer")
+ */
+#[ORM\Entity]
+class AccessPayer extends AbstractBillingPayer
+{
+    /**
+     * @var Access
+     */
+    #[Assert\Valid]
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\AccessAndFunction\Access', inversedBy: 'billingPayers')]
+    #[Groups(['accesspayer', 'access_details_billingpayers', 'student_registration_billingreceivers', 'accessbilling_edit_billingreceivers', 'access_intangible_list_access'])]
+    private $accessPayer;
+    /**
+     * @var Access
+     */
+    #[Assert\Valid]
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\AccessAndFunction\Access', inversedBy: 'billingReceivers')]
+    #[Groups(['accesspayer', 'access_details_billingpayers', 'student_registration_billingreceivers', 'payer_list_billingpayers', 'accessbilling_edit_billingpayers'])]
+    private $accessReceiver;
+    /**
+     * @var string
+     * @ExportSplitFields({"accessReceiver.person.name","accessReceiver.person.givenName","paymentPart"})
+     */
+    #[Groups(['template', 'payer_list_billingpayers'])]
+    private $fullLabelReceiverTemplate;
+    /**
+     * Set accessPayer
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $accessPayer
+     *
+     * @return AccessPayer
+     */
+    public function setAccessPayer(\AppBundle\Entity\AccessAndFunction\Access $accessPayer)
+    {
+        $this->accessPayer = $accessPayer;
+
+        return $this;
+    }
+    /**
+     * Get accessPayer
+     *
+     * @return \AppBundle\Entity\AccessAndFunction\Access
+     */
+    public function getAccessPayer()
+    {
+        return $this->accessPayer;
+    }
+    /**
+     * Set accessReceiver
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $accessReceiver
+     *
+     * @return AccessPayer
+     */
+    public function setAccessReceiver(\AppBundle\Entity\AccessAndFunction\Access $accessReceiver)
+    {
+        $this->accessReceiver = $accessReceiver;
+
+        return $this;
+    }
+    /**
+     * Get accessReceiver
+     *
+     * @return \AppBundle\Entity\AccessAndFunction\Access
+     */
+    public function getAccessReceiver()
+    {
+        return $this->accessReceiver;
+    }
+    /**
+     * @return array
+     */
+    public function getFullLabelReceiverTemplate()
+    {
+        return  [
+            $this->getAccessReceiver()->getPerson()->getFullNameTemplate(),
+            $this->getPaymentPart().'%'
+        ];
+    }
+}

+ 26 - 0
old/Entity/Billing/AdvancePayment.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\Core\File;
+use AppBundle\Entity\Traits\ActivityYearTrait;
+use AppBundle\Enum\Billing\PaymentChoiceEnum;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use AppBundle\Annotation\DefaultField;
+
+/**
+ * Facture
+ *
+ * @Iri("http://schema.org/AdvancePayment")
+ */
+#[ORM\Entity(repositoryClass: 'AppBundle\Entity\Billing\Repository\AdvancePaymentRepository')]
+class AdvancePayment extends BillAccounting implements BillAccountingInterface
+{
+}

+ 162 - 0
old/Entity/Billing/BergerLevrault.php

@@ -0,0 +1,162 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\Booking\EducationalProject;
+use AppBundle\Entity\Core\File;
+use AppBundle\Entity\Product\EquipmentLoan;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
+use Doctrine\Common\Collections\ArrayCollection;
+
+
+/**
+ * Fais le lien entre les Bill concernées par l'export et le File généré
+ * NB: BergerLevrault est un format de données demandé par le Trésor Public pour l'export des données comptables
+ *
+ * @Iri("http://schema.org/BergerLevrault")
+ */
+#[ORM\Entity]
+class BergerLevrault
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['bergerlevrault'])]
+    private $id;
+    /**
+     * @var ArrayCollection<Bill>
+     */
+    #[ORM\OneToMany(targetEntity: 'Bill', mappedBy: 'bergerLevrault', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['bergerlevrault_bills'])]
+    private $bills;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['bergerlevrault', 'bergerlevrault_list'])]
+    private $date;
+    /**
+     * @var File
+     */
+    #[Assert\Valid]
+    #[ORM\OneToOne(targetEntity: 'AppBundle\Entity\Core\File', cascade: ['persist'], fetch: 'EAGER')]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['bergerlevrault', 'bergerlevrault_list'])]
+    private $file;
+    /**
+     * The constructor
+     */
+    public function __construct() {
+        $this->bills = new ArrayCollection();
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set date
+     *
+     * @param \DateTime $date
+     *
+     * @return BergerLevrault
+     */
+    public function setDate($date)
+    {
+        $this->date = $date;
+
+        return $this;
+    }
+    /**
+     * Get date
+     *
+     * @return \DateTime
+     */
+    public function getDate()
+    {
+        return $this->date;
+    }
+    /**
+     * Add bill
+     *
+     * @param \AppBundle\Entity\Billing\Bill $bill
+     *
+     * @return BergerLevrault
+     */
+    public function addBill(\AppBundle\Entity\Billing\Bill $bill)
+    {
+        $this->bills[] = $bill;
+
+        return $this;
+    }
+    /**
+     * Remove bill
+     *
+     * @param \AppBundle\Entity\Billing\Bill $bill
+     */
+    public function removeBill(\AppBundle\Entity\Billing\Bill $bill)
+    {
+        $this->bills->removeElement($bill);
+    }
+    /**
+     * Get bills
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getBills()
+    {
+        return $this->bills;
+    }
+    /**
+     * Set file
+     *
+     * @param \AppBundle\Entity\Core\File $file
+     *
+     * @return BergerLevrault
+     */
+    public function setFile(\AppBundle\Entity\Core\File $file = null)
+    {
+        $this->file = $file;
+
+        return $this;
+    }
+    /**
+     * Get file
+     *
+     * @return \AppBundle\Entity\Core\File
+     */
+    public function getFile()
+    {
+        return $this->file;
+    }
+}

+ 25 - 0
old/Entity/Billing/Bill.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\Core\File;
+use AppBundle\Enum\Billing\PaymentChoiceEnum;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use AppBundle\Annotation\DefaultField;
+
+/**
+ * Facture
+ *
+ * @Iri("http://schema.org/Bill")
+ */
+#[ORM\Entity(repositoryClass: 'AppBundle\Entity\Billing\Repository\BillRepository')]
+class Bill extends BillAccounting implements BillAccountingInterface
+{
+}

+ 468 - 0
old/Entity/Billing/BillAccessDetail.php

@@ -0,0 +1,468 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * Paramètres d'un Access pour une Bill
+ *
+ * @Iri("http://schema.org/BillAccessDetail")
+ */
+#[ORM\Entity]
+class BillAccessDetail
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['billaccessdetail', 'billaccounting_list', 'bill_list', 'billcredit_list', 'build_bills'])]
+    private $id;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billpayment_list_bill', 'billcredit_list_accessdetail'])]
+    private $accessId;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billpayment_list_bill', 'billcredit_list_accessdetail'])]
+    private $customerId;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail'])]
+    private $familyQuotientSliceName;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail'])]
+    private $residenceAreaLabel;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\PeriodicityPaymentEnum', 'toArray'])]
+    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail'])]
+    private $periodicityPayment;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\PaymentChoiceEnum', 'toArray'])]
+    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail'])]
+    private $paymentChoice;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail'])]
+    private $streetAddress;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 20, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail'])]
+    private $postalCode;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail'])]
+    private $addressCity;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Length(max: 255, maxMessage: 'invalid-max-length')]
+    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail'])]
+    private $bankName;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 11, nullable: true)]
+    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail', 'build_bills_accessdetail'])]
+    private $bic;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 34, nullable: true)]
+    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail', 'build_bills_accessdetail'])]
+    private $iban;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail', 'build_bills_accessdetail'])]
+    private $holder;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 35, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail', 'build_bills_accessdetail'])]
+    #[Assert\Length(max: 35, maxMessage: 'invalid-max-length')]
+    private $rum;
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set accessId
+     *
+     * @param integer $accessId
+     *
+     * @return BillAccessDetail
+     */
+    public function setAccessId($accessId)
+    {
+        $this->accessId = $accessId;
+
+        return $this;
+    }
+    /**
+     * Get accessId
+     *
+     * @return integer
+     */
+    public function getAccessId()
+    {
+        return $this->accessId;
+    }
+    /**
+     * Set customerId
+     *
+     * @param string $customerId
+     *
+     * @return BillAccessDetail
+     */
+    public function setCustomerId($customerId)
+    {
+        $this->customerId = $customerId;
+
+        return $this;
+    }
+    /**
+     * Get customerId
+     *
+     * @return string
+     */
+    public function getCustomerId()
+    {
+        return $this->customerId;
+    }
+    /**
+     * Set familyQuotientSliceName
+     *
+     * @param string $familyQuotientSliceName
+     *
+     * @return BillAccessDetail
+     */
+    public function setFamilyQuotientSliceName($familyQuotientSliceName)
+    {
+        $this->familyQuotientSliceName = $familyQuotientSliceName;
+
+        return $this;
+    }
+    /**
+     * Get familyQuotientSliceName
+     *
+     * @return string
+     */
+    public function getFamilyQuotientSliceName()
+    {
+        return $this->familyQuotientSliceName;
+    }
+    /**
+     * Set residenceAreaLabel
+     *
+     * @param string $residenceAreaLabel
+     *
+     * @return BillAccessDetail
+     */
+    public function setResidenceAreaLabel($residenceAreaLabel)
+    {
+        $this->residenceAreaLabel = $residenceAreaLabel;
+
+        return $this;
+    }
+    /**
+     * Get residenceAreaLabel
+     *
+     * @return string
+     */
+    public function getResidenceAreaLabel()
+    {
+        return $this->residenceAreaLabel;
+    }
+    /**
+     * Set periodicityPayment
+     *
+     * @param string $periodicityPayment
+     *
+     * @return BillAccessDetail
+     */
+    public function setPeriodicityPayment($periodicityPayment)
+    {
+        $this->periodicityPayment = $periodicityPayment;
+
+        return $this;
+    }
+    /**
+     * Get periodicityPayment
+     *
+     * @return string
+     */
+    public function getPeriodicityPayment()
+    {
+        return $this->periodicityPayment;
+    }
+    /**
+     * Set paymentChoice
+     *
+     * @param string $paymentChoice
+     *
+     * @return BillAccessDetail
+     */
+    public function setPaymentChoice($paymentChoice)
+    {
+        $this->paymentChoice = $paymentChoice;
+
+        return $this;
+    }
+    /**
+     * Get paymentChoice
+     *
+     * @return string
+     */
+    public function getPaymentChoice()
+    {
+        return $this->paymentChoice;
+    }
+    /**
+     * Set streetAddress
+     *
+     * @param string $streetAddress
+     *
+     * @return BillAccessDetail
+     */
+    public function setStreetAddress($streetAddress)
+    {
+        $this->streetAddress = $streetAddress;
+
+        return $this;
+    }
+    /**
+     * Get streetAddress
+     *
+     * @return string
+     */
+    public function getStreetAddress()
+    {
+        return $this->streetAddress;
+    }
+    /**
+     * Set postalCode
+     *
+     * @param string $postalCode
+     *
+     * @return BillAccessDetail
+     */
+    public function setPostalCode($postalCode)
+    {
+        $this->postalCode = $postalCode;
+
+        return $this;
+    }
+    /**
+     * Get postalCode
+     *
+     * @return string
+     */
+    public function getPostalCode()
+    {
+        return $this->postalCode;
+    }
+    /**
+     * Set addressCity
+     *
+     * @param string $addressCity
+     *
+     * @return BillAccessDetail
+     */
+    public function setAddressCity($addressCity)
+    {
+        $this->addressCity = $addressCity;
+
+        return $this;
+    }
+    /**
+     * Get addressCity
+     *
+     * @return string
+     */
+    public function getAddressCity()
+    {
+        return $this->addressCity;
+    }
+    /**
+     * Set bankName
+     *
+     * @param string $bankName
+     *
+     * @return BillAccessDetail
+     */
+    public function setBankName($bankName)
+    {
+        $this->bankName = $bankName;
+
+        return $this;
+    }
+    /**
+     * Get bankName
+     *
+     * @return string
+     */
+    public function getBankName()
+    {
+        return $this->bankName;
+    }
+    /**
+     * Set bic
+     *
+     * @param string $bic
+     *
+     * @return BillAccessDetail
+     */
+    public function setBic($bic)
+    {
+        $this->bic = $bic;
+
+        return $this;
+    }
+    /**
+     * Get bic
+     *
+     * @return string
+     */
+    public function getBic()
+    {
+        return $this->bic;
+    }
+    /**
+     * Set iban
+     *
+     * @param string $iban
+     *
+     * @return BillAccessDetail
+     */
+    public function setIban($iban)
+    {
+        $this->iban = $iban;
+
+        return $this;
+    }
+    /**
+     * Get iban
+     *
+     * @return string
+     */
+    public function getIban()
+    {
+        return $this->iban;
+    }
+    /**
+     * Set holder
+     *
+     * @param string $holder
+     *
+     * @return BillAccessDetail
+     */
+    public function setHolder($holder)
+    {
+        $this->holder = $holder;
+
+        return $this;
+    }
+    /**
+     * Get holder
+     *
+     * @return string
+     */
+    public function getHolder()
+    {
+        return $this->holder;
+    }
+    /**
+     * Set rum
+     *
+     * @param string $rum
+     *
+     * @return BillAccessDetail
+     */
+    public function setRum($rum)
+    {
+        $this->rum = $rum;
+
+        return $this;
+    }
+    /**
+     * Get rum
+     *
+     * @return string
+     */
+    public function getRum()
+    {
+        return $this->rum;
+    }
+}

+ 1539 - 0
old/Entity/Billing/BillAccounting.php

@@ -0,0 +1,1539 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Annotation\ExportTranslate;
+use AppBundle\Annotation\ExportSplitFields;
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\Core\File;
+use AppBundle\Entity\Core\Tagg;
+use AppBundle\Enum\Billing\PaymentStateEnum;
+use AppBundle\Enum\Billing\PaymentTypeEnum;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Sabre\VObject\Property\VCard\DateTime;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use AppBundle\Entity\Organization\Organization;
+use Doctrine\Common\Collections\ArrayCollection;
+use AppBundle\Annotation\DefaultField;
+
+
+/**
+ * Facture ou avoir (@see Bill, BillCredit)
+ *
+ * @Iri("http://schema.org/BillAccounting")
+ */
+#[ORM\Entity(repositoryClass: 'AppBundle\Entity\Billing\Repository\BillRepository')]
+#[ORM\Table(name: 'BillAccounting')]
+#[ORM\InheritanceType('SINGLE_TABLE')]
+#[ORM\DiscriminatorColumn(name: 'discr', type: 'string')]
+#[ORM\DiscriminatorMap(['billaccounting' => 'BillAccounting', 'bill' => 'Bill', 'billcredit' => 'BillCredit', 'advancepayment' => 'AdvancePayment'])]
+class BillAccounting implements BillAccountingInterface
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['bill', 'billaccounting', 'billaccounting_list', 'bill_list', 'billcredit_list', 'billpayment_list', 'my_bills_show', 'advancepayment_list', 'advance_payment_schoolyear', 'build_bills', 'my_bills_show', 'advancepayment_list', 'advance_payment_schoolyear'])]
+    private $id;
+    /**
+     * @var Organization
+     *
+     * @DefaultField
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Organization\Organization')]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['billaccounting', 'bill', 'billcredit'])]
+    private $organization;
+    /**
+     * @var Access
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\AccessAndFunction\Access', inversedBy: 'bills')]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['billaccounting', 'bill', 'advancepayment', 'billaccounting_list', 'bill_list', 'billpayment_list_bill', 'billcredit_list', 'advancepayment_list', 'build_bills', 'billcredit_list', 'advancepayment_list'])]
+    private $access;
+    /**
+     * @var BillAccessDetail
+     */
+    #[Assert\Valid]
+    #[ORM\OneToOne(targetEntity: 'AppBundle\Entity\Billing\BillAccessDetail', cascade: ['persist'], orphanRemoval: true, fetch: 'EAGER')]
+    #[Groups(['billaccounting', 'bill', 'billaccounting_list', 'billpayment_list_bill', 'bill_list', 'billcredit_list', 'build_bills'])]
+    private $accessDetail;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['bill', 'billaccounting'])]
+    private $reference;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true)]
+    #[Groups(['bill', 'billaccounting', 'build_bills'])]
+    private $customerReference;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billaccounting', 'bill', 'advancepayment', 'billaccounting_list', 'bill_list', 'billaccounting_list_bill', 'billcredit_list', 'billpayment_list_bill', 'my_bills_show_bills', 'advancepayment_list', 'advancepayment_list_bill', 'build_bills', 'my_bills_show_bills', 'advancepayment_list', 'advancepayment_list_bill'])]
+    private $billNumber;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true)]
+    #[Groups(['bill', 'billaccounting', 'build_bills'])]
+    private $billNumberInteger;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true)]
+    #[Groups(['bill', 'billaccounting'])]
+    private $billCreditInteger;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['billaccounting', 'bill', 'advancepayment', 'billaccounting_list', 'bill_list', 'billpayment_list_bill', 'my_bills_show_bills', 'billcredit_list', 'advancepayment_list', 'build_bills', 'billcredit_list', 'advancepayment_list'])]
+    private $billingDate;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billaccounting', 'bill'])]
+    private $object;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'text', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billaccounting', 'bill', 'build_bills'])]
+    private $comments;
+    /**
+     * @var ArrayCollection<BillLine>
+     */
+    #[Assert\Valid]
+    #[ORM\OneToMany(targetEntity: 'BillLine', mappedBy: 'bill', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['billaccounting', 'bill_billline', 'billaccounting_list', 'billpayment_list_bill', 'bill_list', 'billaccounting_list_bill', 'billcredit_list_bill', 'build_bills'])]
+    private $billLines;
+    /**
+     * @var ArrayCollection<BillCredit>
+     */
+    #[Assert\Valid]
+    #[ORM\OneToMany(targetEntity: 'BillCredit', mappedBy: 'bill', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['billaccounting', 'bill_billcredit', 'billaccounting_list', 'bill_list', 'advancepayment_list', 'advance_payment_schoolyear'])]
+    private $billCredits;
+    /**
+     * @var ArrayCollection<BillPayment>
+     */
+    #[Assert\Valid]
+    #[ORM\OneToMany(targetEntity: 'BillPayment', mappedBy: 'bill', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['billaccounting', 'bill_billpayment', 'build_bills'])]
+    private $billPayments;
+    /**
+     * @var float
+     */
+    #[Assert\Type(type: 'float')]
+    #[Groups(['billaccounting', 'bill', 'billaccounting_list', 'bill_list', 'my_bills_show_bills', 'advancepayment_list', 'my_bills_show_bills', 'advancepayment_list', 'build_bills'])]
+    private $totalAmountSet;
+    /**
+     * @var float
+     */
+    #[Assert\Type(type: 'float')]
+    #[Groups(['billaccounting', 'bill', 'billaccounting_list', 'bill_list', 'my_bills_show_bills', 'advancepayment_list'])]
+    private $totalPending;
+    /**
+     * @var float
+     */
+    #[Assert\Type(type: 'float')]
+    #[Groups(['billaccounting', 'bill', 'billaccounting_list', 'bill_list', 'my_bills_show_bills', 'my_bills_show', 'build_bills'])]
+    private $totalRemainingDue;
+    /**
+     * @var string
+     * @ExportTranslate(true)
+     */
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billaccounting', 'bill', 'billaccounting_list', 'bill_list', 'my_bills_show_bills', 'advancepayment_list'])]
+    private $paymentState;
+    /**
+     * @var array
+     */
+    #[ORM\Column(type: 'json_array', nullable: true)]
+    #[Groups(['billaccounting', 'bill', 'build_bills'])]
+    private $reductionTotal;
+    /**
+     * @var BillPeriod
+     */
+    #[Assert\Valid]
+    #[ORM\OneToOne(targetEntity: 'AppBundle\Entity\Billing\BillPeriod', cascade: ['persist'], orphanRemoval: true, fetch: 'EAGER')]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['billaccounting', 'bill', 'billaccounting_list', 'bill_list', 'billpayment_list_bill', 'billcredit_list', 'billaccounting_billperiod', 'advancepayment_list', 'build_bills', 'billcredit_list', 'billaccounting_billperiod', 'advancepayment_list'])]
+    private $billPeriod;
+    /**
+     * @var BillTotalDetail
+     */
+    #[Assert\Valid]
+    #[ORM\OneToOne(targetEntity: 'AppBundle\Entity\Billing\BillTotalDetail', cascade: ['persist'], orphanRemoval: true, fetch: 'EAGER')]
+    #[Groups(['billaccounting', 'bill', 'advancepayment', 'billaccounting_list', 'bill_list', 'my_bills_show_bills', 'billcredit_list', 'build_bills'])]
+    private $totalDetail;
+    /**
+     * @var File
+     */
+    #[Assert\Valid]
+    #[ORM\OneToOne(targetEntity: 'AppBundle\Entity\Core\File', cascade: ['persist'], fetch: 'EAGER')]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['billaccounting', 'bill', 'billaccounting_list', 'bill_list', 'billcredit_list', 'my_bills_show_bills'])]
+    private $file;
+    /**
+     * @var string
+     */
+    #[Groups(['billaccounting', 'billaccounting_list', 'bill'])]
+    private $billAccountingNumber;
+    /**
+     * @var string
+     * @ExportTranslate(true)
+     */
+    #[Groups(['billaccounting', 'billaccounting_list'])]
+    private $type;
+    /**
+     * @var Bill
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Billing\BillAccounting', inversedBy: 'billCredits')]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['billaccounting', 'billcredit', 'billaccounting_list', 'billcredit_list', 'advancepayment_list', 'advance_payment_schoolyear'])]
+    private $bill;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'text', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billaccounting', 'billcredit', 'billcredit_list'])]
+    private $message;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billaccounting', 'billcredit', 'billaccounting_list', 'billcredit_list'])]
+    private $billCreditNumber;
+    /**
+     * @var ArrayCollection<BillingIntangibleExcludeDate>
+     */
+    #[Assert\Valid]
+    #[ORM\OneToMany(targetEntity: 'BillingIntangibleExcludeDate', mappedBy: 'bill', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['billaccounting', 'bill'])]
+    private $billingIntangibleExcludeDate;
+    /**
+     * @var Pes
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Billing\Pes', inversedBy: 'bills', cascade: ['persist'])]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['billaccounting_list', 'billaccounting_pes'])]
+    private $pes;
+    /**
+     * @var BergerLevrault
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Billing\BergerLevrault', inversedBy: 'bills', cascade: ['persist'])]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['billaccounting_list'])]
+    private $bergerLevrault;
+    /**
+     * @var BergerLevrault
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Billing\Ciril', inversedBy: 'bills', cascade: ['persist'])]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['billaccounting_list'])]
+    private $ciril;
+    /**
+     * @var Jvs
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Billing\Jvs', inversedBy: 'bills', cascade: ['persist'])]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['billaccounting_list', 'billaccounting_jvs'])]
+    private $jvs;
+    /**
+     * @var Jvs
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Billing\SddBank', inversedBy: 'bills', cascade: ['persist'])]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['billaccounting_list'])]
+    private $sddBank;
+    /**
+     * @var Jvs
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Billing\SddRegie', inversedBy: 'bills', cascade: ['persist'])]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['billaccounting_list'])]
+    private $sddRegie;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['billaccounting'])]
+    private $old = false;
+    /**
+     * @var array
+     */
+    #[Groups(['billaccounting', 'billaccounting_list', 'billpayment_list_bill', 'bill_list'])]
+    private $listStudents;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['billaccounting', 'bill', 'build_bills'])]
+    private $sepaSampling= false;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['billaccounting', 'bill', 'billaccounting_list', 'bill_list', 'billpayment_list_bill', 'build_bills'])]
+    private $samplingDate;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['bill', 'billaccounting', 'billaccounting_list', 'bill_list', 'my_bills_show_bills'])]
+    private $availabilityDate;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Groups(['bill'])]
+    protected $payfipPaymentToken;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Groups(['bill', 'build_bills'])]
+    protected $enforceableTitle;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['bill', 'billaccounting', 'billaccounting_list', 'bill_list', 'my_bills_show_bills'])]
+    private $limitPaymentDate;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true)]
+    #[Groups(['advancepayment', 'advancepayment_list'])]
+    private $startSchoolYear;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['advancepayment', 'advancepayment_list'])]
+    private $label;
+    /**
+     * @var bool
+     */
+    #[Assert\Type(type: 'boolean')]
+    #[Groups(['advancepayment_list'])]
+    private $isApplied;
+    /**
+     * @var ArrayCollection<Tagg>
+     */
+    #[ORM\ManyToMany(targetEntity: 'AppBundle\Entity\Core\Tagg', cascade: ['persist'], inversedBy: 'billAccountings')]
+    #[Assert\Valid]
+    #[ORM\JoinTable(name: 'tag_billAccounting', joinColumns: [], inverseJoinColumns: [])]
+    #[ORM\JoinColumn(name: 'billAccounting_id', referencedColumnName: 'id')]
+    #[ORM\JoinColumn(name: 'tag_id', referencedColumnName: 'id')]
+    #[Groups(['billaccounting_tags', 'manage_tags', 'billaccounting_list', 'bill_list', 'billcredit_list', 'advancepayment_list'])]
+    private $tags;
+    /**
+     * @var string
+     *
+     */
+    #[Groups(['template', 'billaccounting_list'])]
+    private $studentsTagsTemplate;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'datetime', nullable: true)]
+    #[Assert\Date]
+    private $payfipUrlDateTime;
+    /**
+     * The constructor
+     */
+    public function __construct() {
+        $this->billLines = new ArrayCollection();
+        $this->billCredits = new ArrayCollection();
+        $this->billPayments = new ArrayCollection();
+        $this->billingIntangibleExcludeDate = new ArrayCollection();
+        $this->tags = new ArrayCollection();
+    }
+    /**
+     * Get id
+     *
+     * @return integer
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Sets id
+     *
+     * @param int $id
+     * @return this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Set reference
+     *
+     * @param string $reference
+     *
+     * @return Bill
+     */
+    public function setReference($reference)
+    {
+        $this->reference = $reference;
+
+        return $this;
+    }
+    /**
+     * Get reference
+     *
+     * @return string
+     */
+    public function getReference()
+    {
+        return $this->reference;
+    }
+    /**
+     * Set billingDate
+     *
+     * @param \DateTime $billingDate
+     *
+     * @return Bill
+     */
+    public function setBillingDate($billingDate)
+    {
+        $this->billingDate = $billingDate;
+
+        return $this;
+    }
+    /**
+     * Get billingDate
+     *
+     * @return \DateTime
+     */
+    public function getBillingDate()
+    {
+        return $this->billingDate ? $this->billingDate->format('Y-m-d') : $this->billingDate;
+    }
+    /**
+     * Set object
+     *
+     * @param string $object
+     *
+     * @return Bill
+     */
+    public function setObject($object)
+    {
+        $this->object = $object;
+
+        return $this;
+    }
+    /**
+     * Get object
+     *
+     * @return string
+     */
+    public function getObject()
+    {
+        return $this->object;
+    }
+    /**
+     * Set comments
+     *
+     * @param string $comments
+     *
+     * @return Bill
+     */
+    public function setComments($comments)
+    {
+        $this->comments = $comments;
+
+        return $this;
+    }
+    /**
+     * Get comments
+     *
+     * @return string
+     */
+    public function getComments()
+    {
+        return $this->comments;
+    }
+    /**
+     * Set totalPrice
+     *
+     * @param float $totalPrice
+     *
+     * @return Bill
+     */
+    public function setTotalPrice($totalPrice)
+    {
+        $this->totalPrice = floatval($totalPrice);
+
+        return $this;
+    }
+    /**
+     * Get totalPrice
+     *
+     * @return float
+     */
+    public function getTotalPrice()
+    {
+        return $this->totalPrice;
+    }
+    /**
+     * Add billLine
+     *
+     * @param \AppBundle\Entity\Billing\BillLine $billLine
+     *
+     * @return BillAccounting
+     */
+    public function addBillLine(\AppBundle\Entity\Billing\BillLine $billLine)
+    {
+        $billLine->setBill($this);
+        $this->billLines[] = $billLine;
+
+        return $this;
+    }
+    /**
+     * Remove billLine
+     *
+     * @param \AppBundle\Entity\Billing\BillLine $billLine
+     */
+    public function removeBillLine(\AppBundle\Entity\Billing\BillLine $billLine)
+    {
+        $this->billLines->removeElement($billLine);
+    }
+    /**
+     * Get billLines
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getBillLines()
+    {
+        return $this->billLines;
+    }
+    /**
+     * Set totalVat
+     *
+     * @param float $totalVat
+     *
+     * @return Bill
+     */
+    public function setTotalVat($totalVat)
+    {
+        $this->totalVat = floatval($totalVat);
+
+        return $this;
+    }
+    /**
+     * Get totalVat
+     *
+     * @return float
+     */
+    public function getTotalVat()
+    {
+        return $this->totalVat;
+    }
+    /**
+     * Set access
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $access
+     *
+     * @return Bill
+     */
+    public function setAccess(\AppBundle\Entity\AccessAndFunction\Access $access)
+    {
+        $this->access = $access;
+
+        return $this;
+    }
+    /**
+     * Get access
+     *
+     * @return \AppBundle\Entity\AccessAndFunction\Access
+     */
+    public function getAccess()
+    {
+        return $this->access;
+    }
+    /**
+     * Add billCredit
+     *
+     * @param \AppBundle\Entity\Billing\BillCredit $billCredit
+     *
+     * @return Bill
+     */
+    public function addBillCredit(\AppBundle\Entity\Billing\BillCredit $billCredit)
+    {
+        $this->billCredits[] = $billCredit;
+        $billCredit->setBill($this);
+        return $this;
+    }
+    /**
+     * Remove billCredit
+     *
+     * @param \AppBundle\Entity\Billing\BillCredit $billCredit
+     */
+    public function removeBillCredit(\AppBundle\Entity\Billing\BillCredit $billCredit)
+    {
+        $this->billCredits->removeElement($billCredit);
+    }
+    /**
+     * Get billCredits
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getBillCredits()
+    {
+        return $this->billCredits;
+    }
+    /**
+     * Add billPayment
+     *
+     * @param \AppBundle\Entity\Billing\BillPayment $billPayment
+     *
+     * @return Bill
+     */
+    public function addBillPayment(\AppBundle\Entity\Billing\BillPayment $billPayment)
+    {
+        $billPayment->setBill($this);
+        $this->billPayments[] = $billPayment;
+
+        return $this;
+    }
+    /**
+     * Remove billPayment
+     *
+     * @param \AppBundle\Entity\Billing\BillPayment $billPayment
+     */
+    public function removeBillPayment(\AppBundle\Entity\Billing\BillPayment $billPayment)
+    {
+        $this->billPayments->removeElement($billPayment);
+    }
+    /**
+     * Get billPayments
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getBillPayments()
+    {
+        return $this->billPayments;
+    }
+    /**
+     * Get totalAmountSet
+     *
+     * @return float
+     */
+    public function getTotalAmountSet()
+    {
+        if(!is_null($this->getBill()) && get_class($this) !== AdvancePayment::class){
+            return 0;
+        }
+        $totalAmountSet = 0;
+        $billPayments = $this->getBillPayments();
+        foreach ($billPayments as $billPayment) {
+            if($billPayment->getIsAcquired()){
+                $totalAmountSet += $billPayment->getAmount();
+            }
+            foreach ($billPayment->getBillDebitBalances() as $billDebitBalances) {
+                if(!$billDebitBalances->getIsUsed())
+                    $totalAmountSet -= $billDebitBalances->getAmount();
+            }
+        }
+        return $totalAmountSet;
+    }
+    /**
+     * Get totalAmountSet
+     *
+     * @return float
+     */
+    public function getTotalPending()
+    {
+        if(!is_null($this->getBill())){
+            return 0;
+        }
+        $totalPending = 0;
+
+        $billPayments = $this->getBillPayments();
+        foreach ($billPayments as $billPayment) {
+            if(!$billPayment->getIsAcquired()){
+                $totalPending += $billPayment->getAmount();
+            }
+        }
+        return $totalPending;
+    }
+    /**
+     * Get totalRemainingDue
+     *
+     * @return float
+     */
+    public function getTotalRemainingDue()
+    {
+        if(!is_null($this->getBill()) || count($this->getBillCredits()) > 0 ){
+            return 0;
+        }
+        $totalRemainingDue = null;
+        if($this->totalDetail && !is_null($this->totalDetail)){
+            $totalRemainingDue = round(floatval($this->totalDetail->getTtc()) - $this->getTotalAmountSet(), 2);
+        }
+        return $totalRemainingDue;
+    }
+    /**
+     * Gets paymentState.
+     *
+     * @return string
+     */
+    public function getPaymentState()
+    {
+        if(!is_null($this->getBill()) || get_class($this) === AdvancePayment::class){
+            return PaymentStateEnum::SOLDIER;
+        }
+        if(count($this->getBillCredits()) > 0 ){
+            return PaymentStateEnum::SOLDIER;
+        }
+
+        $today = new \DateTime();
+        $totalAmountSet = 0;
+        $delayed = false;
+
+        $billPayments = $this->getBillPayments();
+        foreach ($billPayments as $billPayment) {
+            /** @var BillPayment $billPayment **/
+            if($billPayment->getIsAcquired()){
+                $totalAmountSet += $billPayment->getAmount();
+            }elseif(new \DateTime($billPayment->getReceiptDate()) < $today){
+                $delayed = true;
+            }
+            foreach ($billPayment->getBillDebitBalances() as $billDebitBalances) {
+                if(!$billDebitBalances->getIsUsed())
+                    $totalAmountSet -= $billDebitBalances->getAmount();
+            }
+        }
+        if($this->totalDetail && !is_null($this->totalDetail) && number_format(round($totalAmountSet,2),2,'','') >= number_format($this->totalDetail->getTtc(),2,'','')){
+            return PaymentStateEnum::SOLDIER;
+        }elseif($delayed){
+            return PaymentStateEnum::DELAYED;
+        }
+        return PaymentStateEnum::TO_CASH_IN;
+    }
+    /**
+     * Set billNumber
+     *
+     * @param string $billNumber
+     *
+     * @return Bill
+     */
+    public function setBillNumber($billNumber)
+    {
+        $this->billNumber = $billNumber;
+
+        return $this;
+    }
+    /**
+     * Get billNumber
+     *
+     * @return string
+     */
+    public function getBillNumber()
+    {
+        return $this->billNumber;
+    }
+    /**
+     * Set reductionTotal
+     *
+     * @param array $reductionTotal
+     *
+     * @return Bill
+     */
+    public function setReductionTotal($reductionTotal)
+    {
+        $this->reductionTotal = $reductionTotal;
+
+        return $this;
+    }
+    /**
+     * Get reductionTotal
+     *
+     * @return array
+     */
+    public function getReductionTotal()
+    {
+        return $this->reductionTotal;
+    }
+    /**
+     * Set customerReference
+     *
+     * @param integer $customerReference
+     *
+     * @return Bill
+     */
+    public function setCustomerReference($customerReference)
+    {
+        $this->customerReference = $customerReference;
+
+        return $this;
+    }
+    /**
+     * Get customerReference
+     *
+     * @return integer
+     */
+    public function getCustomerReference()
+    {
+        return $this->customerReference;
+    }
+    /**
+     * Set file
+     *
+     * @param \AppBundle\Entity\Core\File $file
+     *
+     * @return Bill
+     */
+    public function setFile(\AppBundle\Entity\Core\File $file = null)
+    {
+        $this->file = $file;
+
+        return $this;
+    }
+    /**
+     * Get file
+     *
+     * @return \AppBundle\Entity\Core\File
+     */
+    public function getFile()
+    {
+        return $this->file;
+    }
+    /**
+     * get billAccountingNumber
+     *
+     * @return mixed
+     */
+    public function getBillAccountingNumber()
+    {
+        $billAccountingNumber = '';
+        if(get_class($this) === Bill::class || get_class($this) === AdvancePayment::class){
+            $pes =  $this->organization->getSettings() && array_key_exists('Pes', $this->organization->getSettings()->getModules()) ? $this->organization->getSettings()->getModules()['Pes'] : false;
+
+            if($pes && $this->getBillNumberInteger()){
+                $billAccountingNumber = str_pad($this->getBillNumberInteger(), 13, '0', STR_PAD_LEFT);
+            }else{
+                $billAccountingNumber = $this->billNumber;
+            }
+        }
+        if(get_class($this) === BillCredit::class){
+            $billAccountingNumber = $this->billCreditNumber;
+        }
+        return $billAccountingNumber;
+    }
+    /**
+     * get billAccountingNumber
+     *
+     * @return mixed
+     */
+    public function getType()
+    {
+        $explodeClass = explode("\\",get_class($this));
+        return lcfirst(end($explodeClass));
+    }
+    /**
+     * Set organization
+     *
+     * @param \AppBundle\Entity\Organization\Organization $organization
+     *
+     * @return BillAccounting
+     */
+    public function setOrganization(\AppBundle\Entity\Organization\Organization $organization = null)
+    {
+        $this->organization = $organization;
+
+        return $this;
+    }
+    /**
+     * Get organization
+     *
+     * @return \AppBundle\Entity\Organization\Organization
+     */
+    public function getOrganization()
+    {
+        return $this->organization;
+    }
+    /**
+     * Set message
+     *
+     * @param string $message
+     *
+     * @return BillCredit
+     */
+    public function setMessage($message)
+    {
+        $this->message = $message;
+
+        return $this;
+    }
+    /**
+     * Get message
+     *
+     * @return string
+     */
+    public function getMessage()
+    {
+        return $this->message;
+    }
+    /**
+     * Set bill
+     *
+     * @param \AppBundle\Entity\Billing\BillAccounting $bill
+     *
+     * @return BillCredit
+     */
+    public function setBill(\AppBundle\Entity\Billing\BillAccounting $bill)
+    {
+        $this->bill = $bill;
+
+        return $this;
+    }
+    /**
+     * Get bill
+     *
+     * @return \AppBundle\Entity\Billing\Bill
+     */
+    public function getBill()
+    {
+        return $this->bill;
+    }
+    /**
+     * Set billCreditNumber
+     *
+     * @param string $billCreditNumber
+     *
+     * @return BillCredit
+     */
+    public function setBillCreditNumber($billCreditNumber)
+    {
+        $this->billCreditNumber = $billCreditNumber;
+
+        return $this;
+    }
+    /**
+     * Get billCreditNumber
+     *
+     * @return string
+     */
+    public function getBillCreditNumber()
+    {
+        return $this->billCreditNumber;
+    }
+    /**
+     * Add billingIntangibleExcludeDate
+     *
+     * @param \AppBundle\Entity\Billing\BillingIntangibleExcludeDate $billingIntangibleExcludeDate
+     *
+     * @return BillAccounting
+     */
+    public function addBillingIntangibleExcludeDate(\AppBundle\Entity\Billing\BillingIntangibleExcludeDate $billingIntangibleExcludeDate)
+    {
+        $billingIntangibleExcludeDate->setBill($this);
+        $this->billingIntangibleExcludeDate[] = $billingIntangibleExcludeDate;
+
+        return $this;
+    }
+    /**
+     * Remove billingIntangibleExcludeDate
+     *
+     * @param \AppBundle\Entity\Billing\BillingIntangibleExcludeDate $billingIntangibleExcludeDate
+     */
+    public function removeBillingIntangibleExcludeDate(\AppBundle\Entity\Billing\BillingIntangibleExcludeDate $billingIntangibleExcludeDate)
+    {
+        $this->billingIntangibleExcludeDate->removeElement($billingIntangibleExcludeDate);
+    }
+    /**
+     * Get billingIntangibleExcludeDate
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getBillingIntangibleExcludeDate()
+    {
+        return $this->billingIntangibleExcludeDate;
+    }
+    /**
+     * Set pes
+     *
+     * @param \AppBundle\Entity\Billing\Pes $pes
+     *
+     * @return BillAccounting
+     */
+    public function setPes(\AppBundle\Entity\Billing\Pes $pes = null)
+    {
+        $this->pes = $pes;
+
+        return $this;
+    }
+    /**
+     * Get pes
+     *
+     * @return \AppBundle\Entity\Billing\Pes
+     */
+    public function getPes()
+    {
+        return $this->pes;
+    }
+    /**
+     * Set sddBank
+     *
+     * @param \AppBundle\Entity\Billing\SddBank $sddBank
+     *
+     * @return BillAccounting
+     */
+    public function setSddBank(SddBank $sddBank = null)
+    {
+        $this->sddBank = $sddBank;
+
+        return $this;
+    }
+    /**
+     * Get SddBank
+     *
+     * @return \AppBundle\Entity\Billing\SddBank
+     */
+    public function getSddBank()
+    {
+        return $this->sddBank;
+    }
+    /**
+     * Set SddRegie
+     *
+     * @param \AppBundle\Entity\Billing\SddRegie $sddRegie
+     *
+     * @return BillAccounting
+     */
+    public function setSddRegie(SddRegie $sddRegie= null)
+    {
+        $this->sddRegie = $sddRegie;
+
+        return $this;
+    }
+    /**
+     * Get SddRegie
+     *
+     * @return \AppBundle\Entity\Billing\SddRegie
+     */
+    public function getSddRegie()
+    {
+        return $this->sddRegie;
+    }
+    /**
+     * Set old
+     *
+     * @param boolean $old
+     *
+     * @return BillAccounting
+     */
+    public function setOld($old)
+    {
+        $this->old = $old;
+
+        return $this;
+    }
+    /**
+     * Get old
+     *
+     * @return boolean
+     */
+    public function getOld()
+    {
+        return $this->old;
+    }
+    /**
+     * Set period
+     *
+     * @param \AppBundle\Entity\Billing\BillPeriod $period
+     *
+     * @return BillAccounting
+     */
+    public function setBillPeriod(\AppBundle\Entity\Billing\BillPeriod $billPeriod = null)
+    {
+        $this->billPeriod = $billPeriod;
+
+        return $this;
+    }
+    /**
+     * Get period
+     *
+     * @return \AppBundle\Entity\Billing\BillPeriod
+     */
+    public function getBillPeriod()
+    {
+        return $this->billPeriod;
+    }
+    /**
+     * Set totalDetail
+     *
+     * @param \AppBundle\Entity\Billing\BillTotalDetail $totalDetail
+     *
+     * @return BillAccounting
+     */
+    public function setTotalDetail(\AppBundle\Entity\Billing\BillTotalDetail $totalDetail = null)
+    {
+        $this->totalDetail = $totalDetail;
+
+        return $this;
+    }
+    /**
+     * Get totalDetail
+     *
+     * @return \AppBundle\Entity\Billing\BillTotalDetail
+     */
+    public function getTotalDetail()
+    {
+        return $this->totalDetail;
+    }
+    /**
+     * Set accessDetail
+     *
+     * @param \AppBundle\Entity\Billing\BillAccessDetail $accessDetail
+     *
+     * @return BillAccounting
+     */
+    public function setAccessDetail(\AppBundle\Entity\Billing\BillAccessDetail $accessDetail = null)
+    {
+        $this->accessDetail = $accessDetail;
+
+        return $this;
+    }
+    /**
+     * Get accessDetail
+     *
+     * @return \AppBundle\Entity\Billing\BillAccessDetail
+     */
+    public function getAccessDetail()
+    {
+        return $this->accessDetail;
+    }
+    /**
+     * get listStudents
+     *
+     * @return array
+     */
+    public function getListStudents()
+    {
+        $students = [];
+        foreach($this->getBillLines() as $billLine){
+            if(!empty($billLine->getAccess()))
+                $students[] = $billLine->getAccess()->getPerson()->getFullNameTemplate();
+        }
+
+        return array_values(array_unique($students));
+    }
+    /**
+     * Set billNumberInteger
+     *
+     * @param integer $billNumberInteger
+     *
+     * @return BillAccounting
+     */
+    public function setBillNumberInteger($billNumberInteger)
+    {
+        $this->billNumberInteger = $billNumberInteger;
+
+        return $this;
+    }
+    /**
+     * Get billNumberInteger
+     *
+     * @return integer
+     */
+    public function getBillNumberInteger()
+    {
+        return $this->billNumberInteger;
+    }
+    /**
+     * Set billCreditInteger
+     *
+     * @param integer $billCreditInteger
+     *
+     * @return BillAccounting
+     */
+    public function setBillCreditInteger($billCreditInteger)
+    {
+        $this->billCreditInteger = $billCreditInteger;
+
+        return $this;
+    }
+    /**
+     * Get billCreditInteger
+     *
+     * @return integer
+     */
+    public function getBillCreditInteger()
+    {
+        return $this->billCreditInteger;
+    }
+    /**
+     * Set sepaSampling
+     *
+     * @param boolean $sepaSampling
+     *
+     * @return BillAccounting
+     */
+    public function setSepaSampling($sepaSampling)
+    {
+        $this->sepaSampling = $sepaSampling;
+
+        return $this;
+    }
+    /**
+     * Get sepaSampling
+     *
+     * @return boolean
+     */
+    public function getSepaSampling()
+    {
+        return $this->sepaSampling;
+    }
+    /**
+     * Set bergerLevrault
+     *
+     * @param \AppBundle\Entity\Billing\BergerLevrault $bergerLevrault
+     *
+     * @return BillAccounting
+     */
+    public function setBergerLevrault(\AppBundle\Entity\Billing\BergerLevrault $bergerLevrault = null)
+    {
+        $this->bergerLevrault = $bergerLevrault;
+
+        return $this;
+    }
+    /**
+     * Get bergerLevrault
+     *
+     * @return \AppBundle\Entity\Billing\BergerLevrault
+     */
+    public function getBergerLevrault()
+    {
+        return $this->bergerLevrault;
+    }
+    /**
+     * Set samplingDate
+     *
+     * @param \DateTime $samplingDate
+     *
+     * @return BillAccounting
+     */
+    public function setSamplingDate($samplingDate)
+    {
+        $this->samplingDate = $samplingDate;
+
+        return $this;
+    }
+    /**
+     * Get samplingDate
+     *
+     * @return \DateTime
+     */
+    public function getSamplingDate()
+    {
+        return $this->samplingDate;
+    }
+    /**
+     * Set availabilityDate
+     *
+     * @param \DateTime $availabilityDate
+     *
+     * @return BillAccounting
+     */
+    public function setAvailabilityDate($availabilityDate)
+    {
+        $this->availabilityDate = $availabilityDate;
+
+        return $this;
+    }
+    /**
+     * Get availabilityDate
+     *
+     * @return \DateTime
+     */
+    public function getAvailabilityDate()
+    {
+        return $this->availabilityDate;
+    }
+    /**
+     * Set limitPaymentDate
+     *
+     * @param \DateTime $limitPaymentDate
+     *
+     * @return BillAccounting
+     */
+    public function setLimitPaymentDate($limitPaymentDate)
+    {
+        $this->limitPaymentDate = $limitPaymentDate;
+
+        return $this;
+    }
+    /**
+     * Get limitPaymentDate
+     *
+     * @return \DateTime
+     */
+    public function getLimitPaymentDate()
+    {
+        return $this->limitPaymentDate;
+    }
+    /**
+     * Set payfipPaymentToken
+     *
+     * @param string $payfipPaymentToken
+     *
+     * @return BillAccounting
+     */
+    public function setPayfipPaymentToken($payfipPaymentToken)
+    {
+        $this->payfipPaymentToken = $payfipPaymentToken;
+
+        return $this;
+    }
+    /**
+     * Get payfipPaymentToken
+     *
+     * @return string
+     */
+    public function getPayfipPaymentToken()
+    {
+        return $this->payfipPaymentToken;
+    }
+    /**
+     * Set jvs
+     *
+     * @param \AppBundle\Entity\Billing\Jvs $jvs
+     *
+     * @return BillAccounting
+     */
+    public function setJvs(\AppBundle\Entity\Billing\Jvs $jvs = null)
+    {
+        $this->jvs = $jvs;
+
+        return $this;
+    }
+    /**
+     * Get jvs
+     *
+     * @return \AppBundle\Entity\Billing\Jvs
+     */
+    public function getJvs()
+    {
+        return $this->jvs;
+    }
+    /**
+     * Set enforceableTitle
+     *
+     * @param string $enforceableTitle
+     *
+     * @return BillAccounting
+     */
+    public function setEnforceableTitle($enforceableTitle)
+    {
+        $this->enforceableTitle = $enforceableTitle;
+
+        return $this;
+    }
+    /**
+     * Get enforceableTitle
+     *
+     * @return string
+     */
+    public function getEnforceableTitle()
+    {
+        return $this->enforceableTitle;
+    }
+    public function setStartSchoolYear($startSchoolYear)
+    {
+        $this->startSchoolYear = $startSchoolYear;
+
+        return $this;
+    }
+    /**
+     * Get startSchoolYear
+     *
+     * @return integer
+     */
+    public function getStartSchoolYear()
+    {
+        return $this->startSchoolYear;
+    }
+    /**
+     * Set label
+     *
+     * @param string $label
+     *
+     * @return BillAccounting
+     */
+    public function setLabel($label = null)
+    {
+        $this->label = $label;
+
+        return $this;
+    }
+    /**
+     * Get label
+     *
+     * @return string
+     */
+    public function getLabel()
+    {
+        return $this->label;
+    }
+    /**
+     * Gets paymentState.
+     *
+     * @return bool
+     */
+    public function getIsApplied()
+    {
+        return !empty($this->getBill());
+
+    }
+    /**
+     * Add tag
+     *
+     * @param \AppBundle\Entity\Core\Tagg $tag
+     *
+     * @return BillAccounting
+     */
+    public function addTag(\AppBundle\Entity\Core\Tagg $tag)
+    {
+        $this->tags[] = $tag;
+
+        return $this;
+    }
+    /**
+     * Remove tag
+     *
+     * @param \AppBundle\Entity\Core\Tagg $tag
+     */
+    public function removeTag(\AppBundle\Entity\Core\Tagg $tag)
+    {
+        $this->tags->removeElement($tag);
+    }
+    /**
+     * Get tags
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getTags()
+    {
+        return $this->tags;
+    }
+    /**
+     * Gets students tags.
+     *
+     * @return array
+     */
+    public function getStudentsTagsTemplate()
+    {
+        $tags = [];
+
+        foreach ($this->getBillLines() as $billLine){
+            $access = $billLine->getAccess();
+            if(!empty($access)){
+                foreach ($access->getTags() as $billLineAcesstags){
+                    $tags[] = $billLineAcesstags->getLabel();
+                }
+            }
+        }
+
+        if(!empty($this->getBill())){
+            foreach ($this->getBill()->getBillLines() as $billLine){
+                $access = $billLine->getAccess();
+                if(!empty($access)){
+                    foreach ($access->getTags() as $billLineAcesstags){
+                        $tags[] = $billLineAcesstags->getLabel();
+                    }
+                }
+            }
+        }
+
+
+
+        return array_unique($tags);
+    }
+    /**
+     * Set ciril
+     *
+     * @param \AppBundle\Entity\Billing\Ciril $ciril
+     *
+     * @return BillAccounting
+     */
+    public function setCiril(\AppBundle\Entity\Billing\Ciril $ciril = null)
+    {
+        $this->ciril = $ciril;
+
+        return $this;
+    }
+    /**
+     * Get ciril
+     *
+     * @return \AppBundle\Entity\Billing\Ciril
+     */
+    public function getCiril()
+    {
+        return $this->ciril;
+    }
+    /**
+     * Set payfipUrlDateTime
+     *
+     * @param \DateTime $payfipUrlDateTime
+     *
+     * @return BillAccounting
+     */
+    public function setPayfipUrlDateTime($payfipUrlDateTime)
+    {
+        $this->payfipUrlDateTime = $payfipUrlDateTime;
+
+        return $this;
+    }
+    /**
+     * Get payfipUrlDateTime
+     *
+     * @return \DateTime
+     */
+    public function getPayfipUrlDateTime()
+    {
+        return $this->payfipUrlDateTime;
+    }
+}

+ 10 - 0
old/Entity/Billing/BillAccountingInterface.php

@@ -0,0 +1,10 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+/**
+ *
+ */
+interface BillAccountingInterface {
+
+}

+ 23 - 0
old/Entity/Billing/BillCredit.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use AppBundle\Entity\Core\File;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use AppBundle\Annotation\DefaultField;
+
+/**
+ * Avoir
+ *
+ * @Iri("http://schema.org/BillCredit")
+ */
+#[ORM\Entity(repositoryClass: 'AppBundle\Entity\Billing\Repository\BillCreditRepository')]
+class BillCredit extends BillAccounting implements BillAccountingInterface
+{
+}

+ 180 - 0
old/Entity/Billing/BillDebitBalance.php

@@ -0,0 +1,180 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * Trop-perçu conservé pour être reversé à la Bill suivante
+ *
+ * @Iri("http://schema.org/BillDebitBalance")
+ */
+#[ORM\Entity]
+class BillDebitBalance
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['billdebitbalance'])]
+    private $id;
+    /**
+     * @var BillingSetting
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Billing\AccessBilling', inversedBy: 'billDebitBalances')]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['billdebitbalance'])]
+    private $accessBilling;
+    /**
+     *
+     * @var BillPayment
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Billing\BillPayment', inversedBy: 'billDebitBalances', cascade: ['persist'])]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['billdebitbalance'])]
+    private $billPayment;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true)]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['billdebitbalance'])]
+    private $amount;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['billdebitbalance'])]
+    private $isUsed = false;
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+        $this->accessBilling = new ArrayCollection();
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set amount
+     *
+     * @param float $amount
+     *
+     * @return BillDebitBalance
+     */
+    public function setAmount($amount)
+    {
+        $this->amount = $amount;
+
+        return $this;
+    }
+    /**
+     * Get amount
+     *
+     * @return float
+     */
+    public function getAmount()
+    {
+        return $this->amount;
+    }
+    /**
+     * Set accessBilling
+     *
+     * @param \AppBundle\Entity\Billing\AccessBilling $accessBilling
+     *
+     * @return BillDebitBalance
+     */
+    public function setAccessBilling(\AppBundle\Entity\Billing\AccessBilling $accessBilling)
+    {
+        $this->accessBilling = $accessBilling;
+
+        return $this;
+    }
+    /**
+     * Get accessBilling
+     *
+     * @return \AppBundle\Entity\Billing\AccessBilling
+     */
+    public function getAccessBilling()
+    {
+        return $this->accessBilling;
+    }
+    /**
+     * Set billPayment
+     *
+     * @param \AppBundle\Entity\Billing\BillPayment $billPayment
+     *
+     * @return BillDebitBalance
+     */
+    public function setBillPayment(\AppBundle\Entity\Billing\BillPayment $billPayment)
+    {
+        $this->billPayment = $billPayment;
+
+        return $this;
+    }
+    /**
+     * Get billPayment
+     *
+     * @return \AppBundle\Entity\Billing\BillPayment
+     */
+    public function getBillPayment()
+    {
+        return $this->billPayment;
+    }
+    /**
+     * Set isUsed
+     *
+     * @param boolean $isUsed
+     *
+     * @return BillDebitBalance
+     */
+    public function setIsUsed($isUsed)
+    {
+        $this->isUsed = $isUsed;
+
+        return $this;
+    }
+    /**
+     * Get isUsed
+     *
+     * @return boolean
+     */
+    public function getIsUsed()
+    {
+        return $this->isUsed;
+    }
+}

+ 555 - 0
old/Entity/Billing/BillLine.php

@@ -0,0 +1,555 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\Booking\EducationalProject;
+use AppBundle\Entity\Product\EquipmentLoan;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
+
+/**
+ * Une ligne de facturation
+ * @see BillAccounting
+ *
+ * @Iri("http://schema.org/BillLine")
+ */
+#[ORM\Entity]
+class BillLine
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['billline', 'billaccounting_list', 'bill_list', 'build_bills'])]
+    private $id;
+    /**
+     * @var Bill
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Billing\BillAccounting', inversedBy: 'billLines')]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['billline'])]
+    private $bill;
+    /**
+     * @var Access
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\AccessAndFunction\Access', inversedBy: 'billLines')]
+    #[Groups(['billline', 'billaccounting_list_billlines', 'bill_list_billlines', 'billpayment_list_bill', 'billaccounting_list_bill', 'billcredit_list_bill', 'build_bills_billlines'])]
+    private $access;
+    /**
+     * @var EducationalProject
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Booking\EducationalProject', inversedBy: 'billLines')]
+    #[Groups(['billline', 'build_bills_billlines'])]
+    private $educationalProject;
+    /**
+     * @var EquipmentLoan
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Product\EquipmentLoan', inversedBy: 'billLines')]
+    #[Groups(['billline'])]
+    private $equipmentLoan;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'text', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billline', 'build_bills_billlines'])]
+    private $intangibleName;
+    /**
+     * @var string
+     *
+     * @Iri("https://schema.org/description")
+     */
+    #[ORM\Column(type: 'text', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billline', 'build_bills_billlines'])]
+    private $intangibleDescription;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'text', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billline'])]
+    private $intangibleDomain;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true)]
+    #[Assert\Type(type: 'integer', message: 'invalid-integer')]
+    #[Groups(['billline', 'build_bills_billlines'])]
+    private $quantity;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true)]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['billline', 'build_bills_billlines'])]
+    private $unitPrice;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true)]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['billline', 'build_bills_billlines'])]
+    private $vat;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true)]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['billline', 'build_bills_billlines'])]
+    private $totalPrice;
+    /**
+     * @var array
+     */
+    #[ORM\Column(type: 'json_array', nullable: true)]
+    #[Groups(['billline', 'build_bills_billlines'])]
+    private $reductions;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true)]
+    #[Assert\Type(type: 'integer', message: 'invalid-integer')]
+    #[Groups(['billline', 'build_bills_billlines'])]
+    private $accountingCode;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 200, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billline', 'build_bills_billlines'])]
+    private $accountingCodelabel;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true)]
+    #[Assert\Type(type: 'integer', message: 'invalid-integer')]
+    #[Groups(['billline', 'build_bills_billlines'])]
+    private $nature;
+    /**
+     * @var array
+     */
+    #[ORM\Column(type: 'json_array', nullable: true)]
+    #[Groups(['billline'])]
+    private $educations;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => true])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['billline', 'build_bills_billlines'])]
+    private $showInBill = true;
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set intangibleName
+     *
+     * @param string $intangibleName
+     *
+     * @return BillLine
+     */
+    public function setIntangibleName($intangibleName)
+    {
+        $this->intangibleName = $intangibleName;
+
+        return $this;
+    }
+    /**
+     * Get intangibleName
+     *
+     * @return string
+     */
+    public function getIntangibleName()
+    {
+        return $this->intangibleName;
+    }
+    /**
+     * Set intangibleDescription
+     *
+     * @param string $intangibleDescription
+     *
+     * @return BillLine
+     */
+    public function setIntangibleDescription($intangibleDescription)
+    {
+        $this->intangibleDescription = $intangibleDescription;
+
+        return $this;
+    }
+    /**
+     * Get intangibleDescription
+     *
+     * @return string
+     */
+    public function getIntangibleDescription()
+    {
+        return $this->intangibleDescription;
+    }
+    /**
+     * Set quantity
+     *
+     * @param integer $quantity
+     *
+     * @return BillLine
+     */
+    public function setQuantity($quantity)
+    {
+        $this->quantity = $quantity;
+
+        return $this;
+    }
+    /**
+     * Get quantity
+     *
+     * @return integer
+     */
+    public function getQuantity()
+    {
+        return $this->quantity;
+    }
+    /**
+     * Set unitPrice
+     *
+     * @param float $unitPrice
+     *
+     * @return BillLine
+     */
+    public function setUnitPrice($unitPrice)
+    {
+        $this->unitPrice = floatval($unitPrice);
+
+        return $this;
+    }
+    /**
+     * Get unitPrice
+     *
+     * @return float
+     */
+    public function getUnitPrice()
+    {
+        return $this->unitPrice;
+    }
+    /**
+     * Set bill
+     *
+     * @param $bill
+     *
+     * @return BillLine
+     */
+    public function setBill($bill)
+    {
+        $this->bill = $bill;
+
+        return $this;
+    }
+    /**
+     * Get bill
+     *
+     * @return
+     */
+    public function getBill()
+    {
+        return $this->bill;
+    }
+    /**
+     * Set access
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $access
+     *
+     * @return BillLine
+     */
+    public function setAccess(\AppBundle\Entity\AccessAndFunction\Access $access)
+    {
+        $this->access = $access;
+
+        return $this;
+    }
+    /**
+     * Get access
+     *
+     * @return \AppBundle\Entity\AccessAndFunction\Access
+     */
+    public function getAccess()
+    {
+        return $this->access;
+    }
+    /**
+     * Set vat
+     *
+     * @param float $vat
+     *
+     * @return BillLine
+     */
+    public function setVat($vat)
+    {
+        $this->vat = floatval($vat);
+
+        return $this;
+    }
+    /**
+     * Get vat
+     *
+     * @return float
+     */
+    public function getVat()
+    {
+        return $this->vat;
+    }
+    /**
+     * Set totalPrice
+     *
+     * @param float $totalPrice
+     *
+     * @return BillLine
+     */
+    public function setTotalPrice($totalPrice)
+    {
+        $this->totalPrice = floatval($totalPrice);
+
+        return $this;
+    }
+    /**
+     * Get totalPrice
+     *
+     * @return float
+     */
+    public function getTotalPrice()
+    {
+        return $this->totalPrice;
+    }
+    /**
+     * Set reductions
+     *
+     * @param array $reductions
+     *
+     * @return BillLine
+     */
+    public function setReductions($reductions)
+    {
+        $this->reductions = $reductions;
+
+        return $this;
+    }
+    /**
+     * Get reductions
+     *
+     * @return array
+     */
+    public function getReductions()
+    {
+        return $this->reductions;
+    }
+    /**
+     * Set accountingCode
+     *
+     * @param integer $accountingCode
+     *
+     * @return BillLine
+     */
+    public function setAccountingCode($accountingCode)
+    {
+        $this->accountingCode = $accountingCode;
+
+        return $this;
+    }
+    /**
+     * Get accountingCode
+     *
+     * @return integer
+     */
+    public function getAccountingCode()
+    {
+        return $this->accountingCode;
+    }
+    /**
+     * Set nature
+     *
+     * @param integer $nature
+     *
+     * @return BillLine
+     */
+    public function setNature($nature)
+    {
+        $this->nature = $nature;
+
+        return $this;
+    }
+    /**
+     * Get nature
+     *
+     * @return integer
+     */
+    public function getNature()
+    {
+        return $this->nature;
+    }
+    /**
+     * Set educationalProject
+     *
+     * @param \AppBundle\Entity\Booking\EducationalProject $educationalProject
+     *
+     * @return BillLine
+     */
+    public function setEducationalProject(\AppBundle\Entity\Booking\EducationalProject $educationalProject = null)
+    {
+        $this->educationalProject = $educationalProject;
+
+        return $this;
+    }
+    /**
+     * Get educationalProject
+     *
+     * @return \AppBundle\Entity\Booking\EducationalProject
+     */
+    public function getEducationalProject()
+    {
+        return $this->educationalProject;
+    }
+    /**
+     * Set equipmentLoan
+     *
+     * @param \AppBundle\Entity\Product\EquipmentLoan $equipmentLoan
+     *
+     * @return BillLine
+     */
+    public function setEquipmentLoan(\AppBundle\Entity\Product\EquipmentLoan $equipmentLoan = null)
+    {
+        $this->equipmentLoan = $equipmentLoan;
+
+        return $this;
+    }
+    /**
+     * Get equipmentLoan
+     *
+     * @return \AppBundle\Entity\Product\EquipmentLoan
+     */
+    public function getEquipmentLoan()
+    {
+        return $this->equipmentLoan;
+    }
+    /**
+     * Set educations
+     *
+     * @param array $educations
+     *
+     * @return BillLine
+     */
+    public function setEducations($educations)
+    {
+        $this->educations = $educations;
+
+        return $this;
+    }
+    /**
+     * Get educations
+     *
+     * @return array
+     */
+    public function getEducations()
+    {
+        return $this->educations;
+    }
+    /**
+     * Set accountingCodelabel
+     *
+     * @param string $accountingCodelabel
+     *
+     * @return BillLine
+     */
+    public function setAccountingCodelabel($accountingCodelabel)
+    {
+        $this->accountingCodelabel = $accountingCodelabel;
+
+        return $this;
+    }
+    /**
+     * Get accountingCodelabel
+     *
+     * @return string
+     */
+    public function getAccountingCodelabel()
+    {
+        return $this->accountingCodelabel;
+    }
+    /**
+     * Set intangibleDomain
+     *
+     * @param string $intangibleDomain
+     *
+     * @return BillLine
+     */
+    public function setIntangibleDomain($intangibleDomain)
+    {
+        $this->intangibleDomain = $intangibleDomain;
+
+        return $this;
+    }
+    /**
+     * Get intangibleDomain
+     *
+     * @return string
+     */
+    public function getIntangibleDomain()
+    {
+        return $this->intangibleDomain;
+    }
+    /**
+     * Set showInBill
+     *
+     * @param boolean $showInBill
+     *
+     * @return BillLine
+     */
+    public function setShowInBill($showInBill)
+    {
+        $this->showInBill = $showInBill;
+
+        return $this;
+    }
+    /**
+     * Get showInBill
+     *
+     * @return boolean
+     */
+    public function getShowInBill()
+    {
+        return $this->showInBill;
+    }
+}

+ 523 - 0
old/Entity/Billing/BillPayment.php

@@ -0,0 +1,523 @@
+<?php
+
+namespace App\Entity\Billing;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\Core\Tagg;
+use AppBundle\Enum\Billing\PaymentChoiceEnum;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
+
+
+/**
+ * Données de paiement d'une facture BillAccounting
+ * NB: il peut y avoir plusieurs lignes pour une facture en cas de paiement en plusieurs fois
+ *
+ * @Iri("http://schema.org/BillPayment")
+ */
+#[ORM\Entity]
+class BillPayment
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['billpayment', 'billpayment_list', 'build_bills', 'billpayment_list', 'account_balance_reimbursements_accessbilling'])]
+    private $id;
+    /**
+     * @var BillAccounting
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Billing\BillAccounting', inversedBy: 'billPayments', cascade: ['persist'])]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['billpayment', 'billpayment_list'])]
+    private $bill;
+    /**
+     * @var AccessBilling
+     */
+    #[ORM\ManyToOne(targetEntity: 'AccessBilling', inversedBy: 'billDetachedPayments', cascade: ['persist'])]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['billpayment'])]
+    private $accessBilling;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['billpayment', 'billpayment_list', 'build_bills_billpayments'])]
+    private $receiptDate;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['billpayment', 'billpayment_list', 'build_bills_billpayments', 'billpayment_list', 'account_balance_reimbursements_accessbilling'])]
+    private $effectiveReceiptDate;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\PaymentChoiceEnum', 'toArray'])]
+    #[Groups(['billpayment', 'billpayment_list', 'build_bills_billpayments', 'billpayment_list', 'account_balance_reimbursements_accessbilling'])]
+    private $paymentChoice;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\BankEnum', 'toArray'])]
+    #[Groups(['billpayment', 'billpayment_list', 'account_balance_reimbursements_accessbilling'])]
+    private $bank;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billpayment', 'billpayment_list', 'account_balance_reimbursements_accessbilling'])]
+    private $agency;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billpayment', 'billpayment_list', 'account_balance_reimbursements_accessbilling'])]
+    private $checkNumber;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billpayment', 'billpayment_list', 'account_balance_reimbursements_accessbilling'])]
+    private $reference;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true)]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['billpayment', 'billpayment_list', 'account_balance_reimbursements_accessbilling', 'billpayment_list', 'build_bills_billpayments'])]
+    private $amount;
+    /**
+     * @var BillDebitBalance
+     */
+    #[ORM\OneToMany(targetEntity: 'BillDebitBalance', mappedBy: 'billPayment', cascade: ['persist'], orphanRemoval: true)]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['billpayment_billdebitbalance'])]
+    private $billDebitBalances;
+    /**
+     * @var AccessBilling
+     */
+    #[ORM\ManyToOne(targetEntity: 'AccessBilling', inversedBy: 'accountBalanceReimbursements', cascade: ['persist'])]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['billpayment', 'billpayment_list'])]
+    private $accessBillingAccountBalanceReimbursement;
+    /**
+     * @var boolean
+     */
+    #[Groups(['billpayment', 'billpayment_list'])]
+    private $isAcquired;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', options: ['default' => 'PAYMENT'])]
+    #[Assert\Type(type: 'string')]
+    #[Assert\NotNull]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\PaymentTypeEnum', 'toArray'])]
+    #[Groups(['billpayment', 'billpayment_list', 'account_balance_reimbursements_accessbilling', 'build_bills_billpayments'])]
+    private $type= 'PAYMENT';
+    /**
+     * @var ArrayCollection<Tagg>
+     */
+    #[ORM\ManyToMany(targetEntity: 'AppBundle\Entity\Core\Tagg', cascade: ['persist'], inversedBy: 'payments')]
+    #[Assert\Valid]
+    #[ORM\JoinTable(name: 'tag_billPayment', joinColumns: [], inverseJoinColumns: [])]
+    #[ORM\JoinColumn(name: 'billPayment_id', referencedColumnName: 'id')]
+    #[ORM\JoinColumn(name: 'tag_id', referencedColumnName: 'id')]
+    #[Groups(['billpayment_tags', 'manage_tags', 'billpayment_list'])]
+    private $tags;
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+        $this->billDebitBalances = new ArrayCollection();
+        $this->tags = new ArrayCollection();
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set receiptDate
+     *
+     * @param \DateTime $receiptDate
+     *
+     * @return BillPayment
+     */
+    public function setReceiptDate($receiptDate)
+    {
+        $this->receiptDate = $receiptDate;
+
+        return $this;
+    }
+    /**
+     * Get receiptDate
+     *
+     * @return \DateTime
+     */
+    public function getReceiptDate()
+    {
+        return $this->receiptDate ? $this->receiptDate->format('Y-m-d') : $this->receiptDate;
+    }
+    /**
+     * Set effectiveReceiptDate
+     *
+     * @param \DateTime $effectiveReceiptDate
+     *
+     * @return BillPayment
+     */
+    public function setEffectiveReceiptDate($effectiveReceiptDate)
+    {
+        $this->effectiveReceiptDate = $effectiveReceiptDate;
+
+        return $this;
+    }
+    /**
+     * Get effectiveReceiptDate
+     *
+     * @return \DateTime
+     */
+    public function getEffectiveReceiptDate()
+    {
+        return $this->effectiveReceiptDate ? $this->effectiveReceiptDate->format('Y-m-d') : $this->effectiveReceiptDate;
+    }
+    /**
+     * Set paymentChoice
+     *
+     * @param string $paymentChoice
+     *
+     * @return BillPayment
+     */
+    public function setPaymentChoice($paymentChoice)
+    {
+        $this->paymentChoice = $paymentChoice;
+
+        return $this;
+    }
+    /**
+     * Get paymentChoice
+     *
+     * @return string
+     */
+    public function getPaymentChoice()
+    {
+        return $this->paymentChoice;
+    }
+    /**
+     * Set bank
+     *
+     * @param string $bank
+     *
+     * @return BillPayment
+     */
+    public function setBank($bank)
+    {
+        $this->bank = $bank;
+
+        return $this;
+    }
+    /**
+     * Get bank
+     *
+     * @return string
+     */
+    public function getBank()
+    {
+        return $this->bank;
+    }
+    /**
+     * Set agency
+     *
+     * @param string $agency
+     *
+     * @return BillPayment
+     */
+    public function setAgency($agency)
+    {
+        $this->agency = $agency;
+
+        return $this;
+    }
+    /**
+     * Get agency
+     *
+     * @return string
+     */
+    public function getAgency()
+    {
+        return $this->agency;
+    }
+    /**
+     * Set checkNumber
+     *
+     * @param string $checkNumber
+     *
+     * @return BillPayment
+     */
+    public function setCheckNumber($checkNumber)
+    {
+        $this->checkNumber = $checkNumber;
+
+        return $this;
+    }
+    /**
+     * Get checkNumber
+     *
+     * @return string
+     */
+    public function getCheckNumber()
+    {
+        return $this->checkNumber;
+    }
+    /**
+     * Set reference
+     *
+     * @param string $reference
+     *
+     * @return BillPayment
+     */
+    public function setReference($reference)
+    {
+        $this->reference = $reference;
+
+        return $this;
+    }
+    /**
+     * Get reference
+     *
+     * @return string
+     */
+    public function getReference()
+    {
+        return $this->reference;
+    }
+    /**
+     * Set amount
+     *
+     * @param float $amount
+     *
+     * @return BillPayment
+     */
+    public function setAmount($amount)
+    {
+        $this->amount = floatval($amount);
+
+        return $this;
+    }
+    /**
+     * Get amount
+     *
+     * @return float
+     */
+    public function getAmount()
+    {
+        return $this->amount;
+    }
+    /**
+     * Set bill
+     *
+     * @param \AppBundle\Entity\Billing\BillAccounting $bill
+     *
+     * @return BillPayment
+     */
+    public function setBill($bill = null)
+    {
+        $this->bill = $bill;
+
+        return $this;
+    }
+    /**
+     * Get bill
+     *
+     * @return \AppBundle\Entity\Billing\BillAccounting
+     */
+    public function getBill()
+    {
+        return $this->bill;
+    }
+    /**
+     * Gets isAcquired.
+     *
+     * @return boolean
+     */
+    public function getIsAcquired()
+    {
+        $isAcquired = false;
+        if($this->getAmount() && !is_null($this->getEffectiveReceiptDate())){
+            $isAcquired = true;
+        }
+        return $isAcquired;
+    }
+    /**
+     * Set accessBilling
+     *
+     * @param \AppBundle\Entity\Billing\AccessBilling $accessBilling
+     *
+     * @return BillPayment
+     */
+    public function setAccessBilling(\AppBundle\Entity\Billing\AccessBilling $accessBilling = null)
+    {
+        $this->accessBilling = $accessBilling;
+
+        return $this;
+    }
+    /**
+     * Get accessBilling
+     *
+     * @return \AppBundle\Entity\Billing\AccessBilling
+     */
+    public function getAccessBilling()
+    {
+        return $this->accessBilling;
+    }
+    /**
+     * Add billDebitBalance
+     *
+     * @param \AppBundle\Entity\Billing\BillDebitBalance $billDebitBalance
+     *
+     * @return BillPayment
+     */
+    public function addBillDebitBalance(\AppBundle\Entity\Billing\BillDebitBalance $billDebitBalance)
+    {
+        $billDebitBalance->setBillPayment($this);
+        $this->billDebitBalances[] = $billDebitBalance;
+
+        return $this;
+    }
+    /**
+     * Remove billDebitBalance
+     *
+     * @param \AppBundle\Entity\Billing\BillDebitBalance $billDebitBalance
+     */
+    public function removeBillDebitBalance(\AppBundle\Entity\Billing\BillDebitBalance $billDebitBalance)
+    {
+        $this->billDebitBalances->removeElement($billDebitBalance);
+    }
+    /**
+     * Get billDebitBalances
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getBillDebitBalances()
+    {
+        return $this->billDebitBalances;
+    }
+    /**
+     * Set type
+     *
+     * @param string $type
+     *
+     * @return BillPayment
+     */
+    public function setType($type)
+    {
+        $this->type = $type;
+
+        return $this;
+    }
+    /**
+     * Get type
+     *
+     * @return string
+     */
+    public function getType()
+    {
+        return $this->type;
+    }
+    /**
+     * Add tag
+     *
+     * @param \AppBundle\Entity\Core\Tagg $tag
+     *
+     * @return BillPayment
+     */
+    public function addTag(\AppBundle\Entity\Core\Tagg $tag)
+    {
+        $this->tags[] = $tag;
+
+        return $this;
+    }
+    /**
+     * Remove tag
+     *
+     * @param \AppBundle\Entity\Core\Tagg $tag
+     */
+    public function removeTag(\AppBundle\Entity\Core\Tagg $tag)
+    {
+        $this->tags->removeElement($tag);
+    }
+    /**
+     * Get tags
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getTags()
+    {
+        return $this->tags;
+    }
+    /**
+     * Set accessBillingAccountBalanceReimbursement
+     *
+     * @param \AppBundle\Entity\Billing\AccessBilling $accessBillingAccountBalanceReimbursement
+     *
+     * @return BillPayment
+     */
+    public function setAccessBillingAccountBalanceReimbursement(\AppBundle\Entity\Billing\AccessBilling $accessBillingAccountBalanceReimbursement = null)
+    {
+        $this->accessBillingAccountBalanceReimbursement = $accessBillingAccountBalanceReimbursement;
+
+        return $this;
+    }
+    /**
+     * Get accessBillingAccountBalanceReimbursement
+     *
+     * @return \AppBundle\Entity\Billing\AccessBilling
+     */
+    public function getAccessBillingAccountBalanceReimbursement()
+    {
+        return $this->accessBillingAccountBalanceReimbursement;
+    }
+}

+ 242 - 0
old/Entity/Billing/BillPeriod.php

@@ -0,0 +1,242 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * Période associée à une facture
+ * (Ex: Deuxième trimestre 2020)
+ *
+ * @Iri("http://schema.org/BillPeriod")
+ */
+#[ORM\Entity]
+class BillPeriod
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['billperiod', 'billaccounting_list', 'bill_list', 'billcredit_list', 'advancepayment_list', 'build_bills', 'billcredit_list', 'advancepayment_list'])]
+    private $id;
+    /**
+     * @var
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\PeriodicityEnum', 'toArray'])]
+    #[Groups(['billperiod', 'billaccounting_list_billperiod', 'bill_list_billperiod', 'billcredit_list_billperiod', 'build_bills_billperiod'])]
+    private $periodicity;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billperiod', 'billaccounting_list_billperiod', 'bill_list_billperiod', 'billpayment_list_bill', 'billcredit_list_billperiod', 'advancepayment_list_billperiod', 'build_bills_billperiod', 'billcredit_list_billperiod', 'advancepayment_list_billperiod'])]
+    private $schoolYear;
+    /**
+     * @var \DateTime
+     *
+     * @Iri("https://schema.org/detailDateStart")
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['billperiod', 'build_bills_billperiod'])]
+    private $detailDateStart;
+    /**
+     * @var \DateTime
+     *
+     * @Iri("https://schema.org/detailDateEnd")
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['billperiod'])]
+    private $detailDateEnd;
+    /**
+     * @var
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\PeriodEnum', 'toArray'])]
+    #[Groups(['billperiod', 'billaccounting_list_billperiod', 'bill_list_billperiod', 'billpayment_list_bill', 'billcredit_list_billperiod', 'build_bills_billperiod'])]
+    private $detailLabel;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['billperiod', 'build_bills_billperiod'])]
+    private $uniqDate;
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set periodicity
+     *
+     * @param string $periodicity
+     *
+     * @return BillPeriod
+     */
+    public function setPeriodicity($periodicity)
+    {
+        $this->periodicity = $periodicity;
+
+        return $this;
+    }
+    /**
+     * Get periodicity
+     *
+     * @return string
+     */
+    public function getPeriodicity()
+    {
+        return $this->periodicity;
+    }
+    /**
+     * Set schoolYear
+     *
+     * @param string $schoolYear
+     *
+     * @return BillPeriod
+     */
+    public function setSchoolYear($schoolYear)
+    {
+        $this->schoolYear = $schoolYear;
+
+        return $this;
+    }
+    /**
+     * Get schoolYear
+     *
+     * @return string
+     */
+    public function getSchoolYear()
+    {
+        return $this->schoolYear;
+    }
+    /**
+     * Set detailDateStart
+     *
+     * @param \DateTime $detailDateStart
+     *
+     * @return BillPeriod
+     */
+    public function setDetailDateStart($detailDateStart)
+    {
+        $this->detailDateStart = $detailDateStart;
+
+        return $this;
+    }
+    /**
+     * Get detailDateStart
+     *
+     * @return \DateTime
+     */
+    public function getDetailDateStart()
+    {
+        return $this->detailDateStart ? $this->detailDateStart->format('Y-m-d') : $this->detailDateStart;
+    }
+    /**
+     * Set detailDateEnd
+     *
+     * @param \DateTime $detailDateEnd
+     *
+     * @return BillPeriod
+     */
+    public function setDetailDateEnd($detailDateEnd)
+    {
+        $this->detailDateEnd = $detailDateEnd;
+
+        return $this;
+    }
+    /**
+     * Get detailDateEnd
+     *
+     * @return \DateTime
+     */
+    public function getDetailDateEnd()
+    {
+        return $this->detailDateEnd ? $this->detailDateEnd->format('Y-m-d') : $this->detailDateEnd;
+    }
+    /**
+     * Set uniqDate
+     *
+     * @param \DateTime $uniqDate
+     *
+     * @return BillPeriod
+     */
+    public function setUniqDate($uniqDate)
+    {
+        $this->uniqDate = $uniqDate;
+
+        return $this;
+    }
+    /**
+     * Get uniqDate
+     *
+     * @return \DateTime
+     */
+    public function getUniqDate()
+    {
+        return $this->uniqDate ? $this->uniqDate->format('Y-m-d') : $this->uniqDate;
+    }
+    /**
+     * Set detailLabel
+     *
+     * @param string $detailLabel
+     *
+     * @return BillPeriod
+     */
+    public function setDetailLabel($detailLabel)
+    {
+        $this->detailLabel = $detailLabel;
+
+        return $this;
+    }
+    /**
+     * Get detailLabel
+     *
+     * @return string
+     */
+    public function getDetailLabel()
+    {
+        return $this->detailLabel;
+    }
+}

+ 203 - 0
old/Entity/Billing/BillTotalDetail.php

@@ -0,0 +1,203 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * Totaux des lignes BillLine d'une facture BillAccounting, avec calcul de TVA
+ *
+ * @Iri("http://schema.org/BillTotalDetail")
+ */
+#[ORM\Entity]
+class BillTotalDetail
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['billtotaldetail', 'billaccounting_list', 'bill_list', 'billcredit_list', 'build_bills'])]
+    private $id;
+    /**
+     * @var array
+     */
+    #[ORM\Column(type: 'json_array', nullable: true)]
+    #[Groups(['billtotaldetail', 'build_bills_totaldetail'])]
+    private $vat;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true)]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['billtotaldetail', 'build_bills_totaldetail'])]
+    private $htNoReduc;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true)]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['billtotaldetail', 'build_bills_totaldetail'])]
+    private $ht;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true)]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['billtotaldetail', 'billaccounting_list_totaldetail', 'bill_list_totaldetail', 'my_bills_show_bills', 'billcredit_list_totaldetail', 'build_bills_totaldetail'])]
+    private $ttc;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true)]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['billtotaldetail', 'build_bills_totaldetail'])]
+    private $totalReduction;
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set htNoReduc
+     *
+     * @param float $htNoReduc
+     *
+     * @return BillTotalDetail
+     */
+    public function setHtNoReduc($htNoReduc)
+    {
+        $this->htNoReduc = $htNoReduc;
+
+        return $this;
+    }
+    /**
+     * Get htNoReduc
+     *
+     * @return float
+     */
+    public function getHtNoReduc()
+    {
+        return $this->htNoReduc;
+    }
+    /**
+     * Set ht
+     *
+     * @param float $ht
+     *
+     * @return BillTotalDetail
+     */
+    public function setHt($ht)
+    {
+        $this->ht = $ht;
+
+        return $this;
+    }
+    /**
+     * Get ht
+     *
+     * @return float
+     */
+    public function getHt()
+    {
+        return $this->ht;
+    }
+    /**
+     * Set ttc
+     *
+     * @param float $ttc
+     *
+     * @return BillTotalDetail
+     */
+    public function setTtc($ttc)
+    {
+        $this->ttc = $ttc;
+
+        return $this;
+    }
+    /**
+     * Get ttc
+     *
+     * @return float
+     */
+    public function getTtc()
+    {
+        return $this->ttc;
+    }
+    /**
+     * Set totalReduction
+     *
+     * @param float $totalReduction
+     *
+     * @return BillTotalDetail
+     */
+    public function setTotalReduction($totalReduction)
+    {
+        $this->totalReduction = $totalReduction;
+
+        return $this;
+    }
+    /**
+     * Get totalReduction
+     *
+     * @return float
+     */
+    public function getTotalReduction()
+    {
+        return $this->totalReduction;
+    }
+    /**
+     * Set vat
+     *
+     * @param array $vat
+     *
+     * @return BillTotalDetail
+     */
+    public function setVat($vat)
+    {
+        $this->vat = $vat;
+
+        return $this;
+    }
+    /**
+     * Get vat
+     *
+     * @return array
+     */
+    public function getVat()
+    {
+        return $this->vat;
+    }
+}

+ 1095 - 0
old/Entity/Billing/BillingExportSetting.php

@@ -0,0 +1,1095 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\Organization\Organization;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use AppBundle\Annotation\DefaultField;
+
+/**
+ * Paramètres généraux des exports de Bill
+ *
+ * @Iri("http://schema.org/BillingExportSetting")
+ */
+#[ORM\Entity]
+class BillingExportSetting
+{
+    //todo: INSERT INTO BillingExportSetting
+    //(`id`, `organization_id`, `idPost`, `idCollTipi`, `codColl`, `codBud`, `codProd`, `libelleColBud`,
+    //`gestionnaire`, `nameComptable`, `updateDate`, `updatedBy`)
+    //SELECT `id`, `organization_id`, `idPost`, `idCollTipi`, `codColl`, `codBud`, `codProd`, `libelleColBud`,
+    //`gestionnaire` , `nameComptable`, `updateDate`, `updatedBy`
+    //FROM PesSetting
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['billingexportsetting'])]
+    private $id;
+    /**
+     * @var Organization
+     *
+     * @DefaultField
+     */
+    #[ORM\OneToOne(targetEntity: 'AppBundle\Entity\Organization\Organization', inversedBy: 'billingExportSetting', fetch: 'EAGER')]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['billingexportsetting'])]
+    private $organization;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 14, nullable: true)]
+    #[Assert\Length(max: 14, maxMessage: 'invalid-max-length')]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $idPost;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $idColl;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $idCollTipi;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $codColl;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $codBud;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $codProd;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $libelleColBud;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $gestionnaire;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $nameComptable;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $creditorIban;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $creditorBic;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $creditorIcs;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $creditorName;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $creditorLineOneAddress;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $creditorLineTwoAddress;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $creditorPublicInstitution;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $creditorType;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $court;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 10, nullable: true)]
+    #[Assert\Length(max: 10, maxMessage: 'invalid-max-length')]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $budgetaryArticleCode;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 10, nullable: true)]
+    #[Assert\Length(max: 10, maxMessage: 'invalid-max-length')]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $rentalBudgetaryArticleCode;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 15, nullable: true)]
+    #[Assert\Length(max: 15, maxMessage: 'invalid-max-length')]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $serviceCode;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 10, nullable: true)]
+    #[Assert\Length(max: 10, maxMessage: 'invalid-max-length')]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $codFunction;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 6, nullable: true)]
+    #[Assert\Length(max: 6, maxMessage: 'invalid-max-length')]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $payfipCustomerNumber;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', options: ['default' => 'TEST'])]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\PayfipStatusEnum', 'toArray'])]
+    #[Groups(['billingexportsetting'])]
+    private $payfipStatus = "TEST";
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 250, nullable: true)]
+    #[Assert\Length(max: 250, maxMessage: 'invalid-max-length')]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $bergerLevraultSamplingMethod;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 3, nullable: true)]
+    #[Assert\Length(max: 3, maxMessage: 'invalid-max-length')]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $establishmentCode;
+    /**
+     * @var Access
+     */
+    #[ORM\ManyToMany(targetEntity: 'AppBundle\Entity\AccessAndFunction\Access')]
+    #[Groups(['billingexportsetting'])]
+    private $stageManagers;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => true])]
+    #[Assert\Type(type: 'boolean')]
+    #[Groups(['billingexportsetting'])]
+    #[Assert\NotNull]
+    private $payfipSeveralPayments = true;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 4, nullable: true)]
+    #[Assert\Length(max: 4, maxMessage: 'invalid-max-length')]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $lotReference;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 2, nullable: true)]
+    #[Assert\Length(max: 2, maxMessage: 'invalid-max-length')]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $directDebitCode;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 10, nullable: true)]
+    #[Assert\Length(max: 10, maxMessage: 'invalid-max-length')]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $functionalCode;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 10, nullable: true)]
+    #[Assert\Length(max: 10, maxMessage: 'invalid-max-length')]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $antenna;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingexportsetting'])]
+    private $teneurName;
+    /**
+     * @var Bill
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Billing\SddTeneur')]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['billingexportsetting'])]
+    private $teneur;
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+        $this->stageManagers = new ArrayCollection();
+    }
+    /**
+     * Get id
+     *
+     * @return integer
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set organization
+     *
+     * @param \AppBundle\Entity\Organization\Organization $organization
+     *
+     * @return BillingExportSetting
+     */
+    public function setOrganization(\AppBundle\Entity\Organization\Organization $organization)
+    {
+        $this->organization = $organization;
+
+        return $this;
+    }
+    /**
+     * Get organization
+     *
+     * @return \AppBundle\Entity\Organization\Organization
+     */
+    public function getOrganization()
+    {
+        return $this->organization;
+    }
+    /**
+     * Set idPost
+     *
+     * @param string $idPost
+     *
+     * @return BillingExportSetting
+     */
+    public function setIdPost($idPost)
+    {
+        $this->idPost = $idPost;
+
+        return $this;
+    }
+    /**
+     * Get idPost
+     *
+     * @return string
+     */
+    public function getIdPost()
+    {
+        return $this->idPost;
+    }
+    /**
+     * Set idColl
+     *
+     * @param string $idColl
+     *
+     * @return BillingExportSetting
+     */
+    public function setIdColl($idColl)
+    {
+        $this->idColl = $idColl;
+
+        return $this;
+    }
+    /**
+     * Get idColl
+     *
+     * @return string
+     */
+    public function getIdColl()
+    {
+        return $this->idColl;
+    }
+    /**
+     * Set idCollTipi
+     *
+     * @param string $idCollTipi
+     *
+     * @return BillingExportSetting
+     */
+    public function setIdCollTipi($idCollTipi)
+    {
+        $this->idCollTipi = $idCollTipi;
+
+        return $this;
+    }
+    /**
+     * Get idCollTipi
+     *
+     * @return string
+     */
+    public function getIdCollTipi()
+    {
+        return $this->idCollTipi;
+    }
+    /**
+     * Set codColl
+     *
+     * @param string $codColl
+     *
+     * @return BillingExportSetting
+     */
+    public function setCodColl($codColl)
+    {
+        $this->codColl = $codColl;
+
+        return $this;
+    }
+    /**
+     * Get codColl
+     *
+     * @return string
+     */
+    public function getCodColl()
+    {
+        return $this->codColl;
+    }
+    /**
+     * Set codBud
+     *
+     * @param string $codBud
+     *
+     * @return BillingExportSetting
+     */
+    public function setCodBud($codBud)
+    {
+        $this->codBud = $codBud;
+
+        return $this;
+    }
+    /**
+     * Get codBud
+     *
+     * @return string
+     */
+    public function getCodBud()
+    {
+        return $this->codBud;
+    }
+    /**
+     * Set codProd
+     *
+     * @param string $codProd
+     *
+     * @return BillingExportSetting
+     */
+    public function setCodProd($codProd)
+    {
+        $this->codProd = $codProd;
+
+        return $this;
+    }
+    /**
+     * Get codProd
+     *
+     * @return string
+     */
+    public function getCodProd()
+    {
+        return $this->codProd;
+    }
+    /**
+     * Get codProdPayFip
+     *
+     * @return string
+     */
+    public function getCodProdPayFip()
+    {
+        return mb_substr($this->codProd, 0, 2);
+    }
+    /**
+     * Set libelleColBud
+     *
+     * @param string $libelleColBud
+     *
+     * @return BillingExportSetting
+     */
+    public function setLibelleColBud($libelleColBud)
+    {
+        $this->libelleColBud = $libelleColBud;
+
+        return $this;
+    }
+    /**
+     * Get libelleColBud
+     *
+     * @return string
+     */
+    public function getLibelleColBud()
+    {
+        return $this->libelleColBud;
+    }
+    /**
+     * Set gestionnaire
+     *
+     * @param string $gestionnaire
+     *
+     * @return BillingExportSetting
+     */
+    public function setGestionnaire($gestionnaire)
+    {
+        $this->gestionnaire = $gestionnaire;
+
+        return $this;
+    }
+    /**
+     * Get gestionnaire
+     *
+     * @return string
+     */
+    public function getGestionnaire()
+    {
+        return $this->gestionnaire;
+    }
+    /**
+     * Set nameComptable
+     *
+     * @param string $nameComptable
+     *
+     * @return BillingExportSetting
+     */
+    public function setNameComptable($nameComptable)
+    {
+        $this->nameComptable = $nameComptable;
+
+        return $this;
+    }
+    /**
+     * Get nameComptable
+     *
+     * @return string
+     */
+    public function getNameComptable()
+    {
+        return $this->nameComptable;
+    }
+    /**
+     * Set creditorIban
+     *
+     * @param string $creditorIban
+     *
+     * @return BillingExportSetting
+     */
+    public function setCreditorIban($creditorIban)
+    {
+        $this->creditorIban = $creditorIban;
+
+        return $this;
+    }
+    /**
+     * Get creditorIban
+     *
+     * @return string
+     */
+    public function getCreditorIban()
+    {
+        return $this->creditorIban;
+    }
+    /**
+     * Set creditorBic
+     *
+     * @param string $creditorBic
+     *
+     * @return BillingExportSetting
+     */
+    public function setCreditorBic($creditorBic)
+    {
+        $this->creditorBic = $creditorBic;
+
+        return $this;
+    }
+    /**
+     * Get creditorBic
+     *
+     * @return string
+     */
+    public function getCreditorBic()
+    {
+        return $this->creditorBic;
+    }
+    /**
+     * Set creditorIcs
+     *
+     * @param string $creditorIcs
+     *
+     * @return BillingExportSetting
+     */
+    public function setCreditorIcs($creditorIcs)
+    {
+        $this->creditorIcs = $creditorIcs;
+
+        return $this;
+    }
+    /**
+     * Get creditorIcs
+     *
+     * @return string
+     */
+    public function getCreditorIcs()
+    {
+        return $this->creditorIcs;
+    }
+    /**
+     * Set creditorLineOneAddress
+     *
+     * @param string $creditorLineOneAddress
+     *
+     * @return BillingExportSetting
+     */
+    public function setCreditorLineOneAddress($creditorLineOneAddress)
+    {
+        $this->creditorLineOneAddress = $creditorLineOneAddress;
+
+        return $this;
+    }
+    /**
+     * Get creditorLineOneAddress
+     *
+     * @return string
+     */
+    public function getCreditorLineOneAddress()
+    {
+        return $this->creditorLineOneAddress;
+    }
+    /**
+     * Set creditorLineTwoAddress
+     *
+     * @param string $creditorLineTwoAddress
+     *
+     * @return BillingExportSetting
+     */
+    public function setCreditorLineTwoAddress($creditorLineTwoAddress)
+    {
+        $this->creditorLineTwoAddress = $creditorLineTwoAddress;
+
+        return $this;
+    }
+    /**
+     * Get creditorLineTwoAddress
+     *
+     * @return string
+     */
+    public function getCreditorLineTwoAddress()
+    {
+        return $this->creditorLineTwoAddress;
+    }
+    /**
+     * Set creditorPublicInstitution
+     *
+     * @param string $creditorPublicInstitution
+     *
+     * @return BillingExportSetting
+     */
+    public function setCreditorPublicInstitution($creditorPublicInstitution)
+    {
+        $this->creditorPublicInstitution = $creditorPublicInstitution;
+
+        return $this;
+    }
+    /**
+     * Get creditorPublicInstitution
+     *
+     * @return string
+     */
+    public function getCreditorPublicInstitution()
+    {
+        return $this->creditorPublicInstitution;
+    }
+    /**
+     * Set creditorType
+     *
+     * @param string $creditorType
+     *
+     * @return BillingExportSetting
+     */
+    public function setCreditorType($creditorType)
+    {
+        $this->creditorType = $creditorType;
+
+        return $this;
+    }
+    /**
+     * Get creditorType
+     *
+     * @return string
+     */
+    public function getCreditorType()
+    {
+        return $this->creditorType;
+    }
+    /**
+     * Set creditorName
+     *
+     * @param string $creditorName
+     *
+     * @return BillingExportSetting
+     */
+    public function setCreditorName($creditorName)
+    {
+        $this->creditorName = $creditorName;
+
+        return $this;
+    }
+    /**
+     * Get creditorName
+     *
+     * @return string
+     */
+    public function getCreditorName()
+    {
+        return $this->creditorName;
+    }
+    /**
+     * Set court
+     *
+     * @param string $court
+     *
+     * @return BillingExportSetting
+     */
+    public function setCourt($court)
+    {
+        $this->court = $court;
+
+        return $this;
+    }
+    /**
+     * Get court
+     *
+     * @return string
+     */
+    public function getCourt()
+    {
+        return $this->court;
+    }
+    /**
+     * Set budgetaryArticleCode
+     *
+     * @param string $budgetaryArticleCode
+     *
+     * @return BillingExportSetting
+     */
+    public function setBudgetaryArticleCode($budgetaryArticleCode)
+    {
+        $this->budgetaryArticleCode = $budgetaryArticleCode;
+
+        return $this;
+    }
+    /**
+     * Get budgetaryArticleCode
+     *
+     * @return string
+     */
+    public function getBudgetaryArticleCode()
+    {
+        return $this->budgetaryArticleCode;
+    }
+    /**
+     * Set serviceCode
+     *
+     * @param string $serviceCode
+     *
+     * @return BillingExportSetting
+     */
+    public function setServiceCode($serviceCode)
+    {
+        $this->serviceCode = $serviceCode;
+
+        return $this;
+    }
+    /**
+     * Get serviceCode
+     *
+     * @return string
+     */
+    public function getServiceCode()
+    {
+        return $this->serviceCode;
+    }
+    /**
+     * Set codFunction
+     *
+     * @param string $codFunction
+     *
+     * @return BillingExportSetting
+     */
+    public function setCodFunction($codFunction)
+    {
+        $this->codFunction = $codFunction;
+
+        return $this;
+    }
+    /**
+     * Get codFunction
+     *
+     * @return string
+     */
+    public function getCodFunction()
+    {
+        return $this->codFunction;
+    }
+    /**
+     * Set payfipCustomerNumber
+     *
+     * @param string $payfipCustomerNumber
+     *
+     * @return BillingExportSetting
+     */
+    public function setPayfipCustomerNumber($payfipCustomerNumber)
+    {
+        $this->payfipCustomerNumber = $payfipCustomerNumber;
+
+        return $this;
+    }
+    /**
+     * Get payfipCustomerNumber
+     *
+     * @return string
+     */
+    public function getPayfipCustomerNumber()
+    {
+        return $this->payfipCustomerNumber;
+    }
+    /**
+     * @return string
+     */
+    public function getBergerLevraultSamplingMethod()
+    {
+        return $this->bergerLevraultSamplingMethod;
+    }
+    /**
+     * @param string $bergerLevraultSamplingMethod
+     */
+    public function setBergerLevraultSamplingMethod($bergerLevraultSamplingMethod)
+    {
+        $this->bergerLevraultSamplingMethod = $bergerLevraultSamplingMethod;
+    }
+    /**
+     * Set establishmentCode
+     *
+     * @param string $establishmentCode
+     *
+     * @return BillingExportSetting
+     */
+    public function setEstablishmentCode($establishmentCode)
+    {
+        $this->establishmentCode = $establishmentCode;
+
+        return $this;
+    }
+    /**
+     * Get establishmentCode
+     *
+     * @return string
+     */
+    public function getEstablishmentCode()
+    {
+        return $this->establishmentCode;
+    }
+    /**
+     * Set payfipStatus
+     *
+     * @param string $payfipStatus
+     *
+     * @return BillingExportSetting
+     */
+    public function setPayfipStatus($payfipStatus)
+    {
+        $this->payfipStatus = $payfipStatus;
+
+        return $this;
+    }
+    /**
+     * Get payfipStatus
+     *
+     * @return string
+     */
+    public function getPayfipStatus()
+    {
+        return $this->payfipStatus;
+    }
+    /**
+     * Add stageManager
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $stageManager
+     *
+     * @return BillingExportSetting
+     */
+    public function addStageManager(\AppBundle\Entity\AccessAndFunction\Access $stageManager)
+    {
+        $this->stageManagers[] = $stageManager;
+
+        return $this;
+    }
+    /**
+     * Remove stageManager
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $stageManager
+     */
+    public function removeStageManager(\AppBundle\Entity\AccessAndFunction\Access $stageManager)
+    {
+        $this->stageManagers->removeElement($stageManager);
+    }
+    /**
+     * Get stageManagers
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getStageManagers()
+    {
+        return $this->stageManagers;
+    }
+    /**
+     * Set rentalBudgetaryArticleCode
+     *
+     * @param string $rentalBudgetaryArticleCode
+     *
+     * @return BillingExportSetting
+     */
+    public function setRentalBudgetaryArticleCode($rentalBudgetaryArticleCode)
+    {
+        $this->rentalBudgetaryArticleCode = $rentalBudgetaryArticleCode;
+
+        return $this;
+    }
+    /**
+     * Get rentalBudgetaryArticleCode
+     *
+     * @return string
+     */
+    public function getRentalBudgetaryArticleCode()
+    {
+        return $this->rentalBudgetaryArticleCode;
+    }
+    /**
+     * Set payfipSeveralPayments
+     *
+     * @param boolean $payfipSeveralPayments
+     *
+     * @return BillingExportSetting
+     */
+    public function setPayfipSeveralPayments($payfipSeveralPayments)
+    {
+        $this->payfipSeveralPayments = $payfipSeveralPayments;
+
+        return $this;
+    }
+    /**
+     * Get payfipSeveralPayments
+     *
+     * @return boolean
+     */
+    public function getPayfipSeveralPayments()
+    {
+        return $this->payfipSeveralPayments;
+    }
+    /**
+     * Set lotReference
+     *
+     * @param string $lotReference
+     *
+     * @return BillingExportSetting
+     */
+    public function setLotReference($lotReference)
+    {
+        $this->lotReference = $lotReference;
+
+        return $this;
+    }
+    /**
+     * Get lotReference
+     *
+     * @return string
+     */
+    public function getLotReference()
+    {
+        return $this->lotReference;
+    }
+    /**
+     * Set directDebitCode
+     *
+     * @param string $directDebitCode
+     *
+     * @return BillingExportSetting
+     */
+    public function setDirectDebitCode($directDebitCode)
+    {
+        $this->directDebitCode = $directDebitCode;
+
+        return $this;
+    }
+    /**
+     * Get directDebitCode
+     *
+     * @return string
+     */
+    public function getDirectDebitCode()
+    {
+        return $this->directDebitCode;
+    }
+    /**
+     * Set functionalCode
+     *
+     * @param string $functionalCode
+     *
+     * @return BillingExportSetting
+     */
+    public function setFunctionalCode($functionalCode)
+    {
+        $this->functionalCode = $functionalCode;
+
+        return $this;
+    }
+    /**
+     * Get functionalCode
+     *
+     * @return string
+     */
+    public function getFunctionalCode()
+    {
+        return $this->functionalCode;
+    }
+    /**
+     * Set antenna
+     *
+     * @param string $antenna
+     *
+     * @return BillingExportSetting
+     */
+    public function setAntenna($antenna)
+    {
+        $this->antenna = $antenna;
+
+        return $this;
+    }
+    /**
+     * Get antenna
+     *
+     * @return string
+     */
+    public function getAntenna()
+    {
+        return $this->antenna;
+    }
+    /**
+     * Set teneurName
+     *
+     * @param string $teneurName
+     *
+     * @return BillingExportSetting
+     */
+    public function setTeneurName($teneurName)
+    {
+        $this->teneurName = $teneurName;
+
+        return $this;
+    }
+    /**
+     * Get teneurName
+     *
+     * @return string
+     */
+    public function getTeneurName()
+    {
+        return $this->teneurName;
+    }
+    /**
+     * Set teneur
+     *
+     * @param $teneur
+     */
+    public function setTeneur($teneur)
+    {
+        $this->teneur = $teneur;
+
+        return $this;
+    }
+    /**
+     * Get teneur
+     *
+     * @return
+     */
+    public function getTeneur()
+    {
+        return $this->teneur;
+    }
+}

+ 222 - 0
old/Entity/Billing/BillingIntangibleExcludeDate.php

@@ -0,0 +1,222 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\Product\EquipmentLoan;
+use Doctrine\ORM\Mapping as ORM;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * BillingIntangibleExcludeDate.
+ * Indique les produits (BillingIntangible) déjà facturés
+ */
+#[ORM\Entity]
+class BillingIntangibleExcludeDate
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['billingintangibleexcludedate'])]
+    private $id;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: false)]
+    #[Assert\Date]
+    #[Groups(['billingintangibleexcludedate'])]
+    private $excludeDate;
+    /**
+     * @var AccessIntangible
+     */
+    #[ORM\ManyToOne(targetEntity: 'AccessIntangible', cascade: ['persist'], inversedBy: 'billingIntangibleExcludeDates')]
+    #[Groups(['billingintangibleexcludedate'])]
+    private $accessIntangible;
+    /**
+     * @var AccessFictionalIntangible
+     */
+    #[ORM\ManyToOne(targetEntity: 'AccessFictionalIntangible', cascade: ['persist'], inversedBy: 'billingIntangibleExcludeDates')]
+    #[Groups(['billingintangibleexcludedate'])]
+    private $accessFictionalIntangible;
+    /**
+     * @var EducationalProjectIntangible
+     */
+    #[ORM\ManyToOne(targetEntity: 'EducationalProjectIntangible', cascade: ['persist'], inversedBy: 'billingIntangibleExcludeDates')]
+    #[Groups(['billingintangibleexcludedate'])]
+    private $educationalProjectIntangible;
+    /**
+     * @var EquipmentLoan
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Product\EquipmentLoan', cascade: ['persist'], inversedBy: 'billingIntangibleExcludeDates')]
+    #[Groups(['billingintangibleexcludedate'])]
+    private $equipmentLoan;
+    /**
+     * @var Bill
+     */
+    #[ORM\ManyToOne(targetEntity: 'Bill', cascade: ['persist'], inversedBy: 'billingIntangibleExcludeDates')]
+    #[Groups(['billingintangibleexcludedate'])]
+    private $bill;
+    public function __construct()
+    {
+
+    }
+    /**
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Set excludeDate
+     *
+     * @param \DateTime $excludeDate
+     *
+     * @return BillingIntangibleExcludeDate
+     */
+    public function setExcludeDate($excludeDate)
+    {
+        $this->excludeDate = $excludeDate;
+
+        return $this;
+    }
+    /**
+     * Get excludeDate
+     *
+     * @return \DateTime
+     */
+    public function getExcludeDate()
+    {
+        return $this->excludeDate;
+    }
+    /**
+     * Set accessIntangible
+     *
+     * @param \AppBundle\Entity\Billing\AccessIntangible $accessIntangible
+     *
+     * @return BillingIntangibleExcludeDate
+     */
+    public function setAccessIntangible(\AppBundle\Entity\Billing\AccessIntangible $accessIntangible = null)
+    {
+        $this->accessIntangible = $accessIntangible;
+
+        return $this;
+    }
+    /**
+     * Get accessIntangible
+     *
+     * @return \AppBundle\Entity\Billing\AccessIntangible
+     */
+    public function getAccessIntangible()
+    {
+        return $this->accessIntangible;
+    }
+    /**
+     * Set bill
+     *
+     * @param \AppBundle\Entity\Billing\Bill $bill
+     *
+     * @return BillingIntangibleExcludeDate
+     */
+    public function setBill(\AppBundle\Entity\Billing\Bill $bill = null)
+    {
+        $this->bill = $bill;
+
+        return $this;
+    }
+    /**
+     * Get bill
+     *
+     * @return \AppBundle\Entity\Billing\Bill
+     */
+    public function getBill()
+    {
+        return $this->bill;
+    }
+    /**
+     * Set accessFictionalIntangible
+     *
+     * @param \AppBundle\Entity\Billing\AccessFictionalIntangible $accessFictionalIntangible
+     *
+     * @return BillingIntangibleExcludeDate
+     */
+    public function setAccessFictionalIntangible(\AppBundle\Entity\Billing\AccessFictionalIntangible $accessFictionalIntangible = null)
+    {
+        $this->accessFictionalIntangible = $accessFictionalIntangible;
+
+        return $this;
+    }
+    /**
+     * Get accessFictionalIntangible
+     *
+     * @return \AppBundle\Entity\Billing\AccessFictionalIntangible
+     */
+    public function getAccessFictionalIntangible()
+    {
+        return $this->accessFictionalIntangible;
+    }
+    /**
+     * Set educationalProjectIntangible
+     *
+     * @param \AppBundle\Entity\Billing\EducationalProjectIntangible $educationalProjectIntangible
+     *
+     * @return BillingIntangibleExcludeDate
+     */
+    public function setEducationalProjectIntangible(\AppBundle\Entity\Billing\EducationalProjectIntangible $educationalProjectIntangible = null)
+    {
+        $this->educationalProjectIntangible = $educationalProjectIntangible;
+
+        return $this;
+    }
+    /**
+     * Get educationalProjectIntangible
+     *
+     * @return \AppBundle\Entity\Billing\EducationalProjectIntangible
+     */
+    public function getEducationalProjectIntangible()
+    {
+        return $this->educationalProjectIntangible;
+    }
+    /**
+     * Set equipmentLoan
+     *
+     * @param \AppBundle\Entity\Product\EquipmentLoan $equipmentLoan
+     *
+     * @return BillingIntangibleExcludeDate
+     */
+    public function setEquipmentLoan(\AppBundle\Entity\Product\EquipmentLoan $equipmentLoan = null)
+    {
+        $this->equipmentLoan = $equipmentLoan;
+
+        return $this;
+    }
+    /**
+     * Get equipmentLoan
+     *
+     * @return \AppBundle\Entity\Product\EquipmentLoan
+     */
+    public function getEquipmentLoan()
+    {
+        return $this->equipmentLoan;
+    }
+}

+ 1090 - 0
old/Entity/Billing/BillingSetting.php

@@ -0,0 +1,1090 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\Organization\Organization;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use AppBundle\Annotation\DefaultField;
+
+/**
+ * Paramètres globaux d'une Organization concernant la facturation
+ *
+ * @Iri("http://schema.org/BillingSettings")
+ */
+#[ORM\Entity]
+class BillingSetting
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['billingsetting'])]
+    private $id;
+    /**
+     * @var Organization
+     *
+     * @DefaultField
+     */
+    #[ORM\OneToOne(targetEntity: 'AppBundle\Entity\Organization\Organization', inversedBy: 'billingSetting', fetch: 'EAGER')]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['billingsetting', 'parameters'])]
+    private $organization;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\PeriodicityEnum', 'toArray'])]
+    #[Groups(['billingsetting'])]
+    private $periodicity;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['billingsetting'])]
+    private $applyAdhesion = false;
+    /**
+     * @var array
+     */
+    #[ORM\Column(type: 'json_array', nullable: true)]
+    #[Groups(['billingsetting'])]
+    private $adhesion;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\PeriodicityEnum', 'toArray'])]
+    #[Groups(['billingsetting'])]
+    private $adhesionPeriodicity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true)]
+    #[Assert\Type(type: 'integer', message: 'invalid-integer')]
+    #[Groups(['billingsetting'])]
+    private $paymentNumber;
+    /**
+     * @var ArrayCollection<ResidenceArea>
+     */
+    #[Assert\Valid]
+    #[ORM\OneToMany(targetEntity: 'ResidenceArea', mappedBy: 'billingSetting', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['billingsetting_residencearea', 'parameters'])]
+    private $residenceAreas;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['billingsetting'])]
+    private $applyVat = false;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true)]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['billingsetting'])]
+    private $amountVat;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(type: 'text', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingsetting'])]
+    private $headerMessage;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(type: 'text', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingsetting'])]
+    private $footerMessage;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true)]
+    #[Assert\Type(type: 'integer', message: 'invalid-integer')]
+    #[Groups(['billingsetting'])]
+    private $adultAgeLimit;
+    /**
+     * @var ArrayCollection<FamilyQuotient>
+     */
+    #[Assert\Valid]
+    #[ORM\OneToMany(targetEntity: 'FamilyQuotient', mappedBy: 'billingSetting', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['billingsetting_familyquotient'])]
+    private $familyQuotients;
+    /**
+     * @var array
+     */
+    #[ORM\Column(type: 'json_array', nullable: true)]
+    #[Groups(['billingsetting'])]
+    private $reductionTotalAmount;
+    /**
+     * @var array
+     */
+    #[ORM\Column(type: 'json_array', nullable: true)]
+    #[Groups(['billingsetting'])]
+    private $billLine;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 10, nullable: true, options: ['default' => 'F'])]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Length(max: 10, maxMessage: 'invalid-max-length')]
+    #[Groups(['billingsetting'])]
+    private $prefixBillNumber = "F";
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true, options: ['default' => 6])]
+    #[Groups(['billingsetting'])]
+    private $digitsToDisplayBillNumber = 6;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true, options: ['default' => 1])]
+    #[Groups(['billingsetting'])]
+    private $initialBillNumber = 1;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 10, nullable: true, options: ['default' => 'A'])]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Length(max: 10, maxMessage: 'invalid-max-length')]
+    #[Groups(['billingsetting'])]
+    private $prefixBillCredit = "A";
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true, options: ['default' => 6])]
+    #[Groups(['billingsetting'])]
+    private $digitsToDisplayBillCredit = 6;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true, options: ['default' => 1])]
+    #[Groups(['billingsetting'])]
+    private $initialCreditNumber = 1;
+    /**
+     * @var BillingSettingRent
+     */
+    #[Assert\Valid]
+    #[ORM\OneToOne(targetEntity: 'AppBundle\Entity\Billing\BillingSettingRent', mappedBy: 'billingSetting', cascade: ['persist'], orphanRemoval: true, fetch: 'EAGER')]
+    #[Groups(['billingsetting'])]
+    private $billingSettingRent;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['billingsetting'])]
+    private $automaticFFECLicensing = false;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\FamilyReductionTypeEnum', 'toArray'])]
+    #[Groups(['billingsetting'])]
+    private $familyReductionType;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['billingsetting'])]
+    private $lockBilling = false;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', options: ['default' => 'WITHOUT_ORDER'])]
+    #[Assert\Type(type: 'string')]
+    #[Assert\NotNull]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\OrderAdultTypeEnum', 'toArray'])]
+    #[Groups(['billingsetting'])]
+    private $orderAdultType = "WITHOUT_ORDER";
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', options: ['default' => 'ONLY_AGE'])]
+    #[Assert\Type(type: 'string')]
+    #[Assert\NotNull]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\AdultConditionTypeEnum', 'toArray'])]
+    #[Groups(['billingsetting'])]
+    private $adultConditionType = "ONLY_AGE";
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => true])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['billingsetting'])]
+    private $includeRentalInBilling = true;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 7, nullable: true)]
+    #[Assert\Length(max: 7, maxMessage: 'invalid-max-length')]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingsetting'])]
+    private $reductionTotalAccountingCode;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true)]
+    #[Assert\Type(type: 'integer', message: 'invalid-integer')]
+    #[Groups(['billingsetting'])]
+    private $reductionTotalNature;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 200, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingsetting'])]
+    private $reductionTotalAccountingCodelabel;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true, options: ['default' => '0.2'])]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['billingsetting'])]
+    private $amountMinorDifference = 0.2;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Assert\NotNull]
+    #[Groups(['billingsetting'])]
+    private $ignoreZeroTotalAmountExport = false;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: false, options: ['default' => 1])]
+    #[Assert\Type(type: 'integer', message: 'invalid-integer')]
+    #[Assert\NotNull]
+    #[Assert\Range(min: 1, max: 31, minMessage: 'valeur minimum: {{ limit }}', maxMessage: 'valeur maximale: {{ limit }}')]
+    #[Groups(['billingsetting'])]
+    private $dayOfMonthBillPayments = 1;
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+        $this->residenceAreas = new ArrayCollection();
+        $this->familyQuotients = new ArrayCollection();
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set periodicity
+     *
+     * @param string $periodicity
+     *
+     * @return BillingSetting
+     */
+    public function setPeriodicity($periodicity)
+    {
+        $this->periodicity = $periodicity;
+
+        return $this;
+    }
+    /**
+     * Get periodicity
+     *
+     * @return string
+     */
+    public function getPeriodicity()
+    {
+        return $this->periodicity;
+    }
+    /**
+     * Set adhesion
+     *
+     * @param array $adhesion
+     *
+     * @return BillingSetting
+     */
+    public function setAdhesion($adhesion)
+    {
+        $this->adhesion = $adhesion;
+
+        return $this;
+    }
+    /**
+     * Get adhesion
+     *
+     * @return array
+     */
+    public function getAdhesion()
+    {
+        return $this->adhesion;
+    }
+    /**
+     * Set paymentNumber
+     *
+     * @param integer $paymentNumber
+     *
+     * @return BillingSetting
+     */
+    public function setPaymentNumber($paymentNumber)
+    {
+        $this->paymentNumber = $paymentNumber;
+
+        return $this;
+    }
+    /**
+     * Get paymentNumber
+     *
+     * @return integer
+     */
+    public function getPaymentNumber()
+    {
+        return $this->paymentNumber;
+    }
+    /**
+     * Set applyVat
+     *
+     * @param boolean $applyVat
+     *
+     * @return BillingSetting
+     */
+    public function setApplyVat($applyVat)
+    {
+        $this->applyVat = $applyVat;
+
+        return $this;
+    }
+    /**
+     * Get applyVat
+     *
+     * @return boolean
+     */
+    public function getApplyVat()
+    {
+        return $this->applyVat;
+    }
+    /**
+     * Set amountVat
+     *
+     * @param float $amountVat
+     *
+     * @return BillingSetting
+     */
+    public function setAmountVat($amountVat)
+    {
+        $this->amountVat = floatval($amountVat);
+
+        return $this;
+    }
+    /**
+     * Get amountVat
+     *
+     * @return float
+     */
+    public function getAmountVat()
+    {
+        return $this->amountVat;
+    }
+    /**
+     * Set headerMessage
+     *
+     * @param string $headerMessage
+     *
+     * @return BillingSetting
+     */
+    public function setHeaderMessage($headerMessage)
+    {
+        $this->headerMessage = str_replace('&nbsp;', ' ', $headerMessage);
+
+        return $this;
+    }
+    /**
+     * Get headerMessage
+     *
+     * @return string
+     */
+    public function getHeaderMessage()
+    {
+        return $this->headerMessage;
+    }
+    /**
+     * Set footerMessage
+     *
+     * @param string $footerMessage
+     *
+     * @return BillingSetting
+     */
+    public function setFooterMessage($footerMessage)
+    {
+        $this->footerMessage = str_replace('&nbsp;', ' ', $footerMessage);
+
+        return $this;
+    }
+    /**
+     * Get footerMessage
+     *
+     * @return string
+     */
+    public function getFooterMessage()
+    {
+        return $this->footerMessage;
+    }
+    /**
+     * Add residenceArea
+     *
+     * @param \AppBundle\Entity\Billing\ResidenceArea $residenceArea
+     *
+     * @return BillingSetting
+     */
+    public function addResidenceArea(\AppBundle\Entity\Billing\ResidenceArea $residenceArea)
+    {
+        $residenceArea->setBillingSetting($this);
+        $this->residenceAreas[] = $residenceArea;
+
+        return $this;
+    }
+    /**
+     * Remove residenceArea
+     *
+     * @param \AppBundle\Entity\Billing\ResidenceArea $residenceArea
+     */
+    public function removeResidenceArea(\AppBundle\Entity\Billing\ResidenceArea $residenceArea)
+    {
+        $this->residenceAreas->removeElement($residenceArea);
+    }
+    /**
+     * Get residenceAreas
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getResidenceAreas()
+    {
+        return $this->residenceAreas;
+    }
+    /**
+     * Set organization
+     *
+     * @param \AppBundle\Entity\Organization\Organization $organization
+     *
+     * @return BillingSetting
+     */
+    public function setOrganization(\AppBundle\Entity\Organization\Organization $organization)
+    {
+        $this->organization = $organization;
+
+        return $this;
+    }
+    /**
+     * Get organization
+     *
+     * @return \AppBundle\Entity\Organization\Organization
+     */
+    public function getOrganization()
+    {
+        return $this->organization;
+    }
+    /**
+     * Add familyQuotient
+     *
+     * @param \AppBundle\Entity\Billing\FamilyQuotient $familyQuotient
+     *
+     * @return BillingSetting
+     */
+    public function addFamilyQuotient(\AppBundle\Entity\Billing\FamilyQuotient $familyQuotient)
+    {
+        $familyQuotient->setBillingSetting($this);
+        $this->familyQuotients[] = $familyQuotient;
+
+        return $this;
+    }
+    /**
+     * Remove familyQuotient
+     *
+     * @param \AppBundle\Entity\Billing\FamilyQuotient $familyQuotient
+     */
+    public function removeFamilyQuotient(\AppBundle\Entity\Billing\FamilyQuotient $familyQuotient)
+    {
+        $this->familyQuotients->removeElement($familyQuotient);
+    }
+    /**
+     * Get familyQuotients
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getFamilyQuotients()
+    {
+        return $this->familyQuotients;
+    }
+    /**
+     * Set reductionTotalAmount
+     *
+     * @param array $reductionTotalAmount
+     *
+     * @return BillingSetting
+     */
+    public function setReductionTotalAmount($reductionTotalAmount)
+    {
+        $this->reductionTotalAmount = $reductionTotalAmount;
+
+        return $this;
+    }
+    /**
+     * Get reductionTotalAmount
+     *
+     * @return array
+     */
+    public function getReductionTotalAmount()
+    {
+        return $this->reductionTotalAmount;
+    }
+    /**
+     * Set billLine
+     *
+     * @param array $billLine
+     *
+     * @return BillingSetting
+     */
+    public function setBillLine($billLine)
+    {
+        $this->billLine = $billLine;
+
+        return $this;
+    }
+    /**
+     * Get billLine
+     *
+     * @return array
+     */
+    public function getBillLine()
+    {
+        return $this->billLine;
+    }
+    /**
+     * Set initialBillNumber
+     *
+     * @param integer $initialBillNumber
+     *
+     * @return BillingSetting
+     */
+    public function setInitialBillNumber($initialBillNumber)
+    {
+        $this->initialBillNumber = $initialBillNumber;
+
+        return $this;
+    }
+    /**
+     * Get initialBillNumber
+     *
+     * @return integer
+     */
+    public function getInitialBillNumber()
+    {
+        return $this->initialBillNumber;
+    }
+    /**
+     * Set initialCreditNumber
+     *
+     * @param integer $initialCreditNumber
+     *
+     * @return BillingSetting
+     */
+    public function setInitialCreditNumber($initialCreditNumber)
+    {
+        $this->initialCreditNumber = $initialCreditNumber;
+
+        return $this;
+    }
+    /**
+     * Get initialCreditNumber
+     *
+     * @return integer
+     */
+    public function getInitialCreditNumber()
+    {
+        return $this->initialCreditNumber;
+    }
+    /**
+     * Set billingSettingRent
+     *
+     * @param \AppBundle\Entity\Billing\BillingSettingRent $billingSettingRent
+     *
+     * @return BillingSetting
+     */
+    public function setBillingSettingRent(\AppBundle\Entity\Billing\BillingSettingRent $billingSettingRent = null)
+    {
+        if (null !== $billingSettingRent) {
+            $billingSettingRent->setBillingSetting($this);
+            $this->billingSettingRent = $billingSettingRent;
+        }
+        return $this;
+    }
+    /**
+     * Get billingSettingRent
+     *
+     * @return \AppBundle\Entity\Billing\BillingSettingRent
+     */
+    public function getBillingSettingRent()
+    {
+        return $this->billingSettingRent;
+    }
+    /**
+     * Set adultAgeLimit
+     *
+     * @param integer $adultAgeLimit
+     *
+     * @return BillingSetting
+     */
+    public function setAdultAgeLimit($adultAgeLimit)
+    {
+        $this->adultAgeLimit = intval($adultAgeLimit);
+
+        return $this;
+    }
+    /**
+     * Get adultAgeLimit
+     *
+     * @return integer
+     */
+    public function getAdultAgeLimit()
+    {
+        return $this->adultAgeLimit;
+    }
+    /**
+     * Set adhesionPeriodicity
+     *
+     * @param string $adhesionPeriodicity
+     *
+     * @return BillingSetting
+     */
+    public function setAdhesionPeriodicity($adhesionPeriodicity)
+    {
+        $this->adhesionPeriodicity = $adhesionPeriodicity;
+
+        return $this;
+    }
+    /**
+     * Get adhesionPeriodicity
+     *
+     * @return string
+     */
+    public function getAdhesionPeriodicity()
+    {
+        return $this->adhesionPeriodicity;
+    }
+    /**
+     * Set automaticFFECLicensing
+     *
+     * @param boolean $automaticFFECLicensing
+     *
+     * @return BillingSetting
+     */
+    public function setAutomaticFFECLicensing($automaticFFECLicensing)
+    {
+        $this->automaticFFECLicensing = $automaticFFECLicensing;
+
+        return $this;
+    }
+    /**
+     * Get automaticFFECLicensing
+     *
+     * @return boolean
+     */
+    public function getAutomaticFFECLicensing()
+    {
+        return $this->automaticFFECLicensing;
+    }
+    /**
+     * Set familyReductionType
+     *
+     * @param string $familyReductionType
+     *
+     * @return BillingSetting
+     */
+    public function setFamilyReductionType($familyReductionType)
+    {
+        $this->familyReductionType = $familyReductionType;
+
+        return $this;
+    }
+    /**
+     * Get familyReductionType
+     *
+     * @return string
+     */
+    public function getFamilyReductionType()
+    {
+        return $this->familyReductionType;
+    }
+    /**
+     * Set prefixBillNumber
+     *
+     * @param string $prefixBillNumber
+     *
+     * @return BillingSetting
+     */
+    public function setPrefixBillNumber($prefixBillNumber)
+    {
+        $this->prefixBillNumber = $prefixBillNumber;
+
+        return $this;
+    }
+    /**
+     * Get prefixBillNumber
+     *
+     * @return string
+     */
+    public function getPrefixBillNumber()
+    {
+        return $this->prefixBillNumber;
+    }
+    /**
+     * Set digitsToDisplayBillNumber
+     *
+     * @param integer $digitsToDisplayBillNumber
+     *
+     * @return BillingSetting
+     */
+    public function setDigitsToDisplayBillNumber($digitsToDisplayBillNumber)
+    {
+        $this->digitsToDisplayBillNumber = intval($digitsToDisplayBillNumber);
+
+        return $this;
+    }
+    /**
+     * Get digitsToDisplayBillNumber
+     *
+     * @return integer
+     */
+    public function getDigitsToDisplayBillNumber()
+    {
+        return $this->digitsToDisplayBillNumber;
+    }
+    /**
+     * Set prefixBillCredit
+     *
+     * @param string $prefixBillCredit
+     *
+     * @return BillingSetting
+     */
+    public function setPrefixBillCredit($prefixBillCredit)
+    {
+        $this->prefixBillCredit = $prefixBillCredit;
+
+        return $this;
+    }
+    /**
+     * Get prefixBillCredit
+     *
+     * @return string
+     */
+    public function getPrefixBillCredit()
+    {
+        return $this->prefixBillCredit;
+    }
+    /**
+     * Set digitsToDisplayBillCredit
+     *
+     * @param integer $digitsToDisplayBillCredit
+     *
+     * @return BillingSetting
+     */
+    public function setDigitsToDisplayBillCredit($digitsToDisplayBillCredit)
+    {
+        $this->digitsToDisplayBillCredit = intval($digitsToDisplayBillCredit);
+
+        return $this;
+    }
+    /**
+     * Get digitsToDisplayBillCredit
+     *
+     * @return integer
+     */
+    public function getDigitsToDisplayBillCredit()
+    {
+        return $this->digitsToDisplayBillCredit;
+    }
+    /**
+     * Set lockBilling
+     *
+     * @param boolean $lockBilling
+     *
+     * @return BillingSetting
+     */
+    public function setLockBilling($lockBilling)
+    {
+        $this->lockBilling = $lockBilling;
+
+        return $this;
+    }
+    /**
+     * Get lockBilling
+     *
+     * @return boolean
+     */
+    public function getLockBilling()
+    {
+        return $this->lockBilling;
+    }
+    /**
+     * Set orderAdultType
+     *
+     * @param string $orderAdultType
+     *
+     * @return BillingSetting
+     */
+    public function setOrderAdultType($orderAdultType)
+    {
+        $this->orderAdultType = $orderAdultType;
+
+        return $this;
+    }
+    /**
+     * Get orderAdultType
+     *
+     * @return string
+     */
+    public function getOrderAdultType()
+    {
+        return $this->orderAdultType;
+    }
+    /**
+     * Set adultConditionType
+     *
+     * @param string $adultConditionType
+     *
+     * @return BillingSetting
+     */
+    public function setAdultConditionType($adultConditionType)
+    {
+        $this->adultConditionType = $adultConditionType;
+
+        return $this;
+    }
+    /**
+     * Get adultConditionType
+     *
+     * @return string
+     */
+    public function getAdultConditionType()
+    {
+        return $this->adultConditionType;
+    }
+    /**
+     * Set applyAdhesion
+     *
+     * @param boolean $applyAdhesion
+     *
+     * @return BillingSetting
+     */
+    public function setApplyAdhesion($applyAdhesion)
+    {
+        $this->applyAdhesion = $applyAdhesion;
+
+        return $this;
+    }
+    /**
+     * Get applyAdhesion
+     *
+     * @return boolean
+     */
+    public function getApplyAdhesion()
+    {
+        return $this->applyAdhesion;
+    }
+    /**
+     * Set includeRentalInBilling
+     *
+     * @param boolean $includeRentalInBilling
+     *
+     * @return BillingSetting
+     */
+    public function setIncludeRentalInBilling($includeRentalInBilling)
+    {
+        $this->includeRentalInBilling = $includeRentalInBilling;
+
+        return $this;
+    }
+    /**
+     * Get includeRentalInBilling
+     *
+     * @return boolean
+     */
+    public function getIncludeRentalInBilling()
+    {
+        return $this->includeRentalInBilling;
+    }
+    /**
+     * Set reductionTotalAccountingCode
+     *
+     * @param string $reductionTotalAccountingCode
+     *
+     * @return BillingSetting
+     */
+    public function setReductionTotalAccountingCode($reductionTotalAccountingCode)
+    {
+        $this->reductionTotalAccountingCode = $reductionTotalAccountingCode;
+
+        return $this;
+    }
+    /**
+     * Get reductionTotalAccountingCode
+     *
+     * @return string
+     */
+    public function getReductionTotalAccountingCode()
+    {
+        return $this->reductionTotalAccountingCode;
+    }
+    /**
+     * Set reductionTotalNature
+     *
+     * @param integer $reductionTotalNature
+     *
+     * @return BillingSetting
+     */
+    public function setReductionTotalNature($reductionTotalNature)
+    {
+        $this->reductionTotalNature = $reductionTotalNature;
+
+        return $this;
+    }
+    /**
+     * Get reductionTotalNature
+     *
+     * @return integer
+     */
+    public function getReductionTotalNature()
+    {
+        return $this->reductionTotalNature;
+    }
+    /**
+     * Set reductionTotalAccountingCodelabel
+     *
+     * @param string $reductionTotalAccountingCodelabel
+     *
+     * @return BillingSetting
+     */
+    public function setReductionTotalAccountingCodelabel($reductionTotalAccountingCodelabel)
+    {
+        $this->reductionTotalAccountingCodelabel = $reductionTotalAccountingCodelabel;
+
+        return $this;
+    }
+    /**
+     * Get reductionTotalAccountingCodelabel
+     *
+     * @return string
+     */
+    public function getReductionTotalAccountingCodelabel()
+    {
+        return $this->reductionTotalAccountingCodelabel;
+    }
+    /**
+     * Set amountMinorDifference
+     *
+     * @param float $amountMinorDifference
+     *
+     * @return BillingSetting
+     */
+    public function setAmountMinorDifference($amountMinorDifference)
+    {
+        $this->amountMinorDifference = floatval($amountMinorDifference);
+
+        return $this;
+    }
+    /**
+     * Get amountMinorDifference
+     *
+     * @return float
+     */
+    public function getAmountMinorDifference()
+    {
+        return $this->amountMinorDifference;
+    }
+    /**
+     * Set ignoreZeroTotalAmountExport
+     *
+     * @param boolean $ignoreZeroTotalAmountExport
+     *
+     * @return BillingSetting
+     */
+    public function setIgnoreZeroTotalAmountExport($ignoreZeroTotalAmountExport)
+    {
+        $this->ignoreZeroTotalAmountExport = $ignoreZeroTotalAmountExport;
+
+        return $this;
+    }
+    /**
+     * Get ignoreZeroTotalAmountExport
+     *
+     * @return boolean
+     */
+    public function getIgnoreZeroTotalAmountExport()
+    {
+        return $this->ignoreZeroTotalAmountExport;
+    }
+    /**
+     * Set dayOfMonthBillPayments
+     *
+     * @param integer $dayOfMonthBillPayments
+     *
+     * @return BillingSetting
+     */
+    public function setDayOfMonthBillPayments($dayOfMonthBillPayments)
+    {
+        $this->dayOfMonthBillPayments = $dayOfMonthBillPayments;
+
+        return $this;
+    }
+    /**
+     * Get dayOfMonthBillPayments
+     *
+     * @return integer
+     */
+    public function getDayOfMonthBillPayments()
+    {
+        return $this->dayOfMonthBillPayments;
+    }
+}

+ 495 - 0
old/Entity/Billing/BillingSettingRent.php

@@ -0,0 +1,495 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\Organization\Organization;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use AppBundle\Annotation\DefaultField;
+
+/**
+ * Paramètres globaux d'une Organization concernant la facturation liée à la location
+ *
+ * @Iri("http://schema.org/BillingSettingRent")
+ */
+#[ORM\Entity]
+class BillingSettingRent
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['billingsettingrent'])]
+    private $id;
+    /**
+     * @var BillingSetting
+     */
+    #[ORM\OneToOne(targetEntity: 'BillingSetting', inversedBy: 'billingSettingRent', fetch: 'EAGER')]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['billingsettingrent'])]
+    private $billingSetting;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\ReductionTypeEnum', 'toArray'])]
+    #[Groups(['billingsettingrent'])]
+    private $reductionType;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true)]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['billingsettingrent'])]
+    private $thresholdFirstAmount;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true)]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['billingsettingrent'])]
+    private $thresholdSecondAmount;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'integer', nullable: true)]
+    #[Assert\Type(type: 'integer', message: 'invalid-integer')]
+    #[Groups(['billingsettingrent'])]
+    private $thresholdNumberYear;
+    /**
+     * @var array
+     */
+    #[ORM\Column(type: 'json_array', nullable: true)]
+    #[Groups(['billingsettingrent'])]
+    private $instrumentFamilyReduction;
+    /**
+     * @var array
+     */
+    #[ORM\Column(type: 'json_array', nullable: true)]
+    #[Groups(['billingsettingrent'])]
+    private $purchaseDateReduction;
+    /**
+     * @var array
+     */
+    #[ORM\Column(type: 'json_array', nullable: true)]
+    #[Groups(['billingsettingrent'])]
+    private $purchaseAmountReduction;
+    /**
+     * @var array
+     */
+    #[ORM\Column(type: 'json_array', nullable: true)]
+    #[Groups(['billingsettingrent'])]
+    private $rentalYearsReduction;
+    /**
+     * @var array
+     */
+    #[ORM\Column(type: 'json_array', nullable: true)]
+    #[Groups(['billingsettingrent'])]
+    private $instrumentFamilyAndRentalYearsReduction;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true)]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['billingsettingrent'])]
+    private $singleAmount;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\PeriodicityEnum', 'toArray'])]
+    #[Groups(['billingsettingrent'])]
+    private $periodicity;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 7, nullable: true)]
+    #[Assert\Length(max: 7, maxMessage: 'invalid-max-length')]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingsettingrent'])]
+    private $accountingCode;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true)]
+    #[Assert\Type(type: 'integer', message: 'invalid-integer')]
+    #[Groups(['billingsettingrent'])]
+    private $nature;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 200, nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['billingsettingrent'])]
+    private $accountingCodelabel;
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set reductionType
+     *
+     * @param string $reductionType
+     *
+     * @return BillingSettingRent
+     */
+    public function setReductionType($reductionType)
+    {
+        $this->reductionType = $reductionType;
+
+        return $this;
+    }
+    /**
+     * Get reductionType
+     *
+     * @return string
+     */
+    public function getReductionType()
+    {
+        return $this->reductionType;
+    }
+    /**
+     * Set instrumentFamilyReduction
+     *
+     * @param array $instrumentFamilyReduction
+     *
+     * @return BillingSettingRent
+     */
+    public function setInstrumentFamilyReduction($instrumentFamilyReduction)
+    {
+        $this->instrumentFamilyReduction = $instrumentFamilyReduction;
+
+        return $this;
+    }
+    /**
+     * Get instrumentFamilyReduction
+     *
+     * @return array
+     */
+    public function getInstrumentFamilyReduction()
+    {
+        return $this->instrumentFamilyReduction;
+    }
+    /**
+     * Set purchaseDateReduction
+     *
+     * @param array $purchaseDateReduction
+     *
+     * @return BillingSettingRent
+     */
+    public function setPurchaseDateReduction($purchaseDateReduction)
+    {
+        $this->purchaseDateReduction = $purchaseDateReduction;
+
+        return $this;
+    }
+    /**
+     * Get purchaseDateReduction
+     *
+     * @return array
+     */
+    public function getPurchaseDateReduction()
+    {
+        return $this->purchaseDateReduction;
+    }
+    /**
+     * Set purchaseAmountReduction
+     *
+     * @param array $purchaseAmountReduction
+     *
+     * @return BillingSettingRent
+     */
+    public function setPurchaseAmountReduction($purchaseAmountReduction)
+    {
+        $this->purchaseAmountReduction = $purchaseAmountReduction;
+
+        return $this;
+    }
+    /**
+     * Get purchaseAmountReduction
+     *
+     * @return array
+     */
+    public function getPurchaseAmountReduction()
+    {
+        return $this->purchaseAmountReduction;
+    }
+    /**
+     * Set rentalYearsReduction
+     *
+     * @param array $rentalYearsReduction
+     *
+     * @return BillingSettingRent
+     */
+    public function setRentalYearsReduction($rentalYearsReduction)
+    {
+        $this->rentalYearsReduction = $rentalYearsReduction;
+
+        return $this;
+    }
+    /**
+     * Get rentalYearsReduction
+     *
+     * @return array
+     */
+    public function getRentalYearsReduction()
+    {
+        return $this->rentalYearsReduction;
+    }
+    /**
+     * Set billingSetting
+     *
+     * @param \AppBundle\Entity\Billing\BillingSetting $billingSetting
+     *
+     * @return BillingSettingRent
+     */
+    public function setBillingSetting(\AppBundle\Entity\Billing\BillingSetting $billingSetting)
+    {
+        $this->billingSetting = $billingSetting;
+
+        return $this;
+    }
+    /**
+     * Get billingSetting
+     *
+     * @return \AppBundle\Entity\Billing\BillingSetting
+     */
+    public function getBillingSetting()
+    {
+        return $this->billingSetting;
+    }
+    /**
+     * Set thresholdFirstAmount
+     *
+     * @param float $thresholdFirstAmount
+     *
+     * @return BillingSettingRent
+     */
+    public function setThresholdFirstAmount($thresholdFirstAmount)
+    {
+        $this->thresholdFirstAmount = floatval($thresholdFirstAmount);
+
+        return $this;
+    }
+    /**
+     * Get thresholdFirstAmount
+     *
+     * @return float
+     */
+    public function getThresholdFirstAmount()
+    {
+        return $this->thresholdFirstAmount;
+    }
+    /**
+     * Set thresholdSecondAmount
+     *
+     * @param float $thresholdSecondAmount
+     *
+     * @return BillingSettingRent
+     */
+    public function setThresholdSecondAmount($thresholdSecondAmount)
+    {
+        $this->thresholdSecondAmount = floatval($thresholdSecondAmount);
+
+        return $this;
+    }
+    /**
+     * Get thresholdSecondAmount
+     *
+     * @return float
+     */
+    public function getThresholdSecondAmount()
+    {
+        return $this->thresholdSecondAmount;
+    }
+    /**
+     * Set thresholdNumberYear
+     *
+     * @param \Integer $thresholdNumberYear
+     *
+     * @return BillingSettingRent
+     */
+    public function setThresholdNumberYear($thresholdNumberYear)
+    {
+        $this->thresholdNumberYear = $thresholdNumberYear;
+
+        return $this;
+    }
+    /**
+     * Get thresholdNumberYear
+     *
+     * @return \Integer
+     */
+    public function getThresholdNumberYear()
+    {
+        return $this->thresholdNumberYear;
+    }
+    /**
+     * Set instrumentFamilyAndRentalYearsReduction
+     *
+     * @param array $instrumentFamilyAndRentalYearsReduction
+     *
+     * @return BillingSettingRent
+     */
+    public function setInstrumentFamilyAndRentalYearsReduction($instrumentFamilyAndRentalYearsReduction)
+    {
+        $this->instrumentFamilyAndRentalYearsReduction = $instrumentFamilyAndRentalYearsReduction;
+
+        return $this;
+    }
+    /**
+     * Get instrumentFamilyAndRentalYearsReduction
+     *
+     * @return array
+     */
+    public function getInstrumentFamilyAndRentalYearsReduction()
+    {
+        return $this->instrumentFamilyAndRentalYearsReduction;
+    }
+    /**
+     * Set singleAmount
+     *
+     * @param float $singleAmount
+     *
+     * @return BillingSettingRent
+     */
+    public function setSingleAmount($singleAmount)
+    {
+        $this->singleAmount = floatval($singleAmount);
+
+        return $this;
+    }
+    /**
+     * Get singleAmount
+     *
+     * @return float
+     */
+    public function getSingleAmount()
+    {
+        return $this->singleAmount;
+    }
+    /**
+     * Set periodicity
+     *
+     * @param string $periodicity
+     *
+     * @return BillingSettingRent
+     */
+    public function setPeriodicity($periodicity)
+    {
+        $this->periodicity = $periodicity;
+
+        return $this;
+    }
+    /**
+     * Get periodicity
+     *
+     * @return string
+     */
+    public function getPeriodicity()
+    {
+        return $this->periodicity;
+    }
+    /**
+     * Set accountingCode
+     *
+     * @param integer $accountingCode
+     *
+     * @return BillingSettingRent
+     */
+    public function setAccountingCode($accountingCode)
+    {
+        $this->accountingCode = $accountingCode;
+
+        return $this;
+    }
+    /**
+     * Get accountingCode
+     *
+     * @return integer
+     */
+    public function getAccountingCode()
+    {
+        return $this->accountingCode;
+    }
+    /**
+     * Set nature
+     *
+     * @param integer $nature
+     *
+     * @return BillingSettingRent
+     */
+    public function setNature($nature)
+    {
+        $this->nature = $nature;
+
+        return $this;
+    }
+    /**
+     * Get nature
+     *
+     * @return integer
+     */
+    public function getNature()
+    {
+        return $this->nature;
+    }
+    /**
+     * Set accountingCodelabel
+     *
+     * @param string $accountingCodelabel
+     *
+     * @return BillingSettingRent
+     */
+    public function setAccountingCodelabel($accountingCodelabel)
+    {
+        $this->accountingCodelabel = $accountingCodelabel;
+
+        return $this;
+    }
+    /**
+     * Get accountingCodelabel
+     *
+     * @return string
+     */
+    public function getAccountingCodelabel()
+    {
+        return $this->accountingCodelabel;
+    }
+}

+ 161 - 0
old/Entity/Billing/Ciril.php

@@ -0,0 +1,161 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\Booking\EducationalProject;
+use AppBundle\Entity\Core\File;
+use AppBundle\Entity\Product\EquipmentLoan;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
+use Doctrine\Common\Collections\ArrayCollection;
+
+
+/**
+ * Fais le lien entre les Bill concernées par l'export et le File généré
+ *
+ * @Iri("http://schema.org/Ciril")
+ */
+#[ORM\Entity]
+class Ciril
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['ciril'])]
+    private $id;
+    /**
+     * @var ArrayCollection<Bill>
+     */
+    #[ORM\OneToMany(targetEntity: 'Bill', mappedBy: 'ciril', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['ciril_bills'])]
+    private $bills;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['ciril', 'ciril_list'])]
+    private $date;
+    /**
+     * @var File
+     */
+    #[Assert\Valid]
+    #[ORM\OneToOne(targetEntity: 'AppBundle\Entity\Core\File', cascade: ['persist'], fetch: 'EAGER')]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['ciril', 'ciril_list'])]
+    private $file;
+    /**
+     * The constructor
+     */
+    public function __construct() {
+        $this->bills = new ArrayCollection();
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set date
+     *
+     * @param \DateTime $date
+     *
+     * @return Ciril
+     */
+    public function setDate($date)
+    {
+        $this->date = $date;
+
+        return $this;
+    }
+    /**
+     * Get date
+     *
+     * @return \DateTime
+     */
+    public function getDate()
+    {
+        return $this->date;
+    }
+    /**
+     * Add bill
+     *
+     * @param \AppBundle\Entity\Billing\Bill $bill
+     *
+     * @return Ciril
+     */
+    public function addBill(\AppBundle\Entity\Billing\Bill $bill)
+    {
+        $this->bills[] = $bill;
+
+        return $this;
+    }
+    /**
+     * Remove bill
+     *
+     * @param \AppBundle\Entity\Billing\Bill $bill
+     */
+    public function removeBill(\AppBundle\Entity\Billing\Bill $bill)
+    {
+        $this->bills->removeElement($bill);
+    }
+    /**
+     * Get bills
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getBills()
+    {
+        return $this->bills;
+    }
+    /**
+     * Set file
+     *
+     * @param \AppBundle\Entity\Core\File $file
+     *
+     * @return Ciril
+     */
+    public function setFile(\AppBundle\Entity\Core\File $file = null)
+    {
+        $this->file = $file;
+
+        return $this;
+    }
+    /**
+     * Get file
+     *
+     * @return \AppBundle\Entity\Core\File
+     */
+    public function getFile()
+    {
+        return $this->file;
+    }
+}

+ 145 - 0
old/Entity/Billing/EducationalProjectIntangible.php

@@ -0,0 +1,145 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\Booking\EducationalProject;
+use AppBundle\Entity\Product\Intangible;
+use AppBundle\Entity\Traits\LockableTrait;
+use AppBundle\Enum\Billing\PeriodicityTypeEnum;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
+
+/**
+ * Fais le lien entre l'Access qui règle la facture et l'EducationalProject concerné
+ *
+ * @Iri("http://schema.org/EducationalProjectIntangible")
+ */
+#[ORM\Entity]
+class EducationalProjectIntangible extends AbstractBillingIntangible
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    use LockableTrait;
+    /**
+     * @var EducationalProject
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Booking\EducationalProject', inversedBy: 'educationalProjectIntangibles')]
+    #[Groups(['educationalprojectintangible'])]
+    private $educationalProject;
+    /**
+     * @var ArrayCollection<BillingIntangibleExcludeDate>
+     */
+    #[Assert\Valid]
+    #[ORM\OneToMany(targetEntity: 'BillingIntangibleExcludeDate', mappedBy: 'educationalProjectIntangible', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['accessintangible'])]
+    private $billingIntangibleExcludeDates;
+    /**
+     * @var float
+     */
+    #[ORM\Column(type: 'float', nullable: true)]
+    #[Assert\Type(type: 'float')]
+    #[Groups(['educationalprojectintangible'])]
+    private $unitPrice;
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+        parent::__construct();
+        $this->billingIntangibleExcludeDates = new ArrayCollection();
+    }
+    /**
+     * Set educationalProject
+     *
+     * @param \AppBundle\Entity\Booking\EducationalProject $educationalProject
+     *
+     * @return EducationalProjectIntangible
+     */
+    public function setEducationalProject(\AppBundle\Entity\Booking\EducationalProject $educationalProject)
+    {
+        $this->educationalProject = $educationalProject;
+
+        return $this;
+    }
+    /**
+     * Get educationalProject
+     *
+     * @return \AppBundle\Entity\Booking\EducationalProject
+     */
+    public function getEducationalProject()
+    {
+        return $this->educationalProject;
+    }
+    /**
+     * applyLock
+     */
+    public function applyLock()
+    {
+//        if(!is_null($this->getExcludeRule()) && $this->getIntangible()->getBillingPeriodicityType() === PeriodicityTypeEnum::PUNCTUAL){
+//            $this->setLockable(true);
+//        }
+    }
+    public function adminCanChange(){
+        return false;
+    }
+    /**
+     * Add billingIntangibleExcludeDate
+     *
+     * @param \AppBundle\Entity\Billing\BillingIntangibleExcludeDate $billingIntangibleExcludeDate
+     *
+     * @return EducationalProjectIntangible
+     */
+    public function addBillingIntangibleExcludeDate(\AppBundle\Entity\Billing\BillingIntangibleExcludeDate $billingIntangibleExcludeDate)
+    {
+        $this->billingIntangibleExcludeDates[] = $billingIntangibleExcludeDate;
+
+        return $this;
+    }
+    /**
+     * Remove billingIntangibleExcludeDate
+     *
+     * @param \AppBundle\Entity\Billing\BillingIntangibleExcludeDate $billingIntangibleExcludeDate
+     */
+    public function removeBillingIntangibleExcludeDate(\AppBundle\Entity\Billing\BillingIntangibleExcludeDate $billingIntangibleExcludeDate)
+    {
+        $this->billingIntangibleExcludeDates->removeElement($billingIntangibleExcludeDate);
+    }
+    /**
+     * Get billingIntangibleExcludeDates
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getBillingIntangibleExcludeDates()
+    {
+        return $this->billingIntangibleExcludeDates;
+    }
+    /**
+     * Set unitPrice
+     *
+     * @param float $unitPrice
+     *
+     * @return EducationalProjectIntangible
+     */
+    public function setUnitPrice($unitPrice)
+    {
+        $this->unitPrice = floatval($unitPrice);
+
+        return $this;
+    }
+    /**
+     * Get unitPrice
+     *
+     * @return float
+     */
+    public function getUnitPrice()
+    {
+        return $this->unitPrice;
+    }
+}

+ 82 - 0
old/Entity/Billing/EducationalProjectPayer.php

@@ -0,0 +1,82 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\Booking\EducationalProject;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ *
+ * Fais le lien entre l'Access qui règle la facture et l'EducationalProject concerné
+ *
+ * @Iri("http://schema.org/EducationalProjectPayer")
+ */
+#[ORM\Entity]
+class EducationalProjectPayer extends AbstractBillingPayer
+{
+    /**
+     * @var Access
+     */
+    #[Assert\Valid]
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\AccessAndFunction\Access', inversedBy: 'billingEducationalProjectPayers', cascade: ['persist'])]
+    #[Groups(['educationalprojectpayer', 'educationalproject_details_billingreceivers', 'accessbilling_edit_billingeducationalprojectpayers'])]
+    private $educationalProjectPayer;
+    /**
+     * @var EducationalProject
+     */
+    #[Assert\Valid]
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Booking\EducationalProject', inversedBy: 'billingReceivers', cascade: ['persist'])]
+    #[Groups(['educationalprojectpayer', 'accessbilling_edit_billingeducationalprojectpayers'])]
+    private $educationalProjectReceiver;
+    /**
+     * Set educationalProjectReceiver
+     *
+     * @param \AppBundle\Entity\Booking\EducationalProject $educationalProjectReceiver
+     *
+     * @return EducationalProjectPayer
+     */
+    public function setEducationalProjectReceiver(\AppBundle\Entity\Booking\EducationalProject $educationalProjectReceiver = null)
+    {
+        $this->educationalProjectReceiver = $educationalProjectReceiver;
+
+        return $this;
+    }
+    /**
+     * Get educationalProjectReceiver
+     *
+     * @return \AppBundle\Entity\Booking\EducationalProject
+     */
+    public function getEducationalProjectReceiver()
+    {
+        return $this->educationalProjectReceiver;
+    }
+    /**
+     * Set educationalProjectPayer
+     *
+     * @param \AppBundle\Entity\AccessAndFunction\Access $educationalProjectPayer
+     *
+     * @return EducationalProjectPayer
+     */
+    public function setEducationalProjectPayer(\AppBundle\Entity\AccessAndFunction\Access $educationalProjectPayer = null)
+    {
+        $this->educationalProjectPayer = $educationalProjectPayer;
+
+        return $this;
+    }
+    /**
+     * Get educationalProjectPayer
+     *
+     * @return \AppBundle\Entity\AccessAndFunction\Access
+     */
+    public function getEducationalProjectPayer()
+    {
+        return $this->educationalProjectPayer;
+    }
+}

+ 258 - 0
old/Entity/Billing/FamilyQuotient.php

@@ -0,0 +1,258 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * Définition d'une tranche de quotient familial
+ *
+ * @Iri("http://schema.org/FamilyQuotient")
+ */
+#[ORM\Entity]
+class FamilyQuotient
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['familyquotient'])]
+    private $id;
+    /**
+     * @var BillingSetting
+     */
+    #[ORM\ManyToOne(targetEntity: 'BillingSetting', inversedBy: 'familyQuotients')]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['familyquotient'])]
+    private $billingSetting;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['familyquotient', 'familyquotient_reference', 'payer_list_accessbilling', 'fusion_accesses_accessbilling', 'student_list_accessbilling'])]
+    private $sliceName;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['familyquotient', 'familyquotient_reference'])]
+    private $lowerBound;
+    /**
+     * @var string
+     *
+     *
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['familyquotient', 'familyquotient_reference'])]
+    private $upperBound;
+    /**
+     * @var ArrayCollection<AccessBilling>
+     */
+    #[ORM\OneToMany(targetEntity: 'AppBundle\Entity\Billing\AccessBilling', mappedBy: 'familyQuotient')]
+    #[Groups(['familyquotient_accessbilling'])]
+    private $accessBilling;
+    /**
+     * @var ArrayCollection<IntangibleDiscountDetail>
+     */
+    #[ORM\OneToMany(targetEntity: 'AppBundle\Entity\Product\IntangibleDiscountDetail', mappedBy: 'familyQuotient')]
+    #[Groups(['familyquotient_intangiblediscountdetail'])]
+    private $intangibleDiscountDetails;
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+        $this->accessBilling = new ArrayCollection();
+        $this->intangibleDiscountDetails = new ArrayCollection();
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set sliceName
+     *
+     * @param string $sliceName
+     *
+     * @return FamilyQuotient
+     */
+    public function setSliceName($sliceName)
+    {
+        $this->sliceName = $sliceName;
+
+        return $this;
+    }
+    /**
+     * Get sliceName
+     *
+     * @return string
+     */
+    public function getSliceName()
+    {
+        return $this->sliceName;
+    }
+    /**
+     * Set lowerBound
+     *
+     * @param string $lowerBound
+     *
+     * @return FamilyQuotient
+     */
+    public function setLowerBound($lowerBound)
+    {
+        $this->lowerBound = $lowerBound;
+
+        return $this;
+    }
+    /**
+     * Get lowerBound
+     *
+     * @return string
+     */
+    public function getLowerBound()
+    {
+        return $this->lowerBound;
+    }
+    /**
+     * Set upperBound
+     *
+     * @param string $upperBound
+     *
+     * @return FamilyQuotient
+     */
+    public function setUpperBound($upperBound)
+    {
+        $this->upperBound = $upperBound;
+
+        return $this;
+    }
+    /**
+     * Get upperBound
+     *
+     * @return string
+     */
+    public function getUpperBound()
+    {
+        return $this->upperBound;
+    }
+    /**
+     * Set billingSetting
+     *
+     * @param \AppBundle\Entity\Billing\BillingSetting $billingSetting
+     *
+     * @return FamilyQuotient
+     */
+    public function setBillingSetting(\AppBundle\Entity\Billing\BillingSetting $billingSetting)
+    {
+        $this->billingSetting = $billingSetting;
+
+        return $this;
+    }
+    /**
+     * Get billingSetting
+     *
+     * @return \AppBundle\Entity\Billing\BillingSetting
+     */
+    public function getBillingSetting()
+    {
+        return $this->billingSetting;
+    }
+    /**
+     * Add accessBilling
+     *
+     * @param \AppBundle\Entity\Billing\AccessBilling $accessBilling
+     *
+     * @return FamilyQuotient
+     */
+    public function addAccessBilling(\AppBundle\Entity\Billing\AccessBilling $accessBilling)
+    {
+        $this->accessBilling[] = $accessBilling;
+
+        return $this;
+    }
+    /**
+     * Remove accessBilling
+     *
+     * @param \AppBundle\Entity\Billing\AccessBilling $accessBilling
+     */
+    public function removeAccessBilling(\AppBundle\Entity\Billing\AccessBilling $accessBilling)
+    {
+        $this->accessBilling->removeElement($accessBilling);
+    }
+    /**
+     * Get accessBilling
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getAccessBilling()
+    {
+        return $this->accessBilling;
+    }
+    /**
+     * Add intangibleDiscountDetail
+     *
+     * @param \AppBundle\Entity\Product\IntangibleDiscountDetail $intangibleDiscountDetail
+     *
+     * @return FamilyQuotient
+     */
+    public function addIntangibleDiscountDetail(\AppBundle\Entity\Product\IntangibleDiscountDetail $intangibleDiscountDetail)
+    {
+        $this->intangibleDiscountDetails[] = $intangibleDiscountDetail;
+
+        return $this;
+    }
+    /**
+     * Remove intangibleDiscountDetail
+     *
+     * @param \AppBundle\Entity\Product\IntangibleDiscountDetail $intangibleDiscountDetail
+     */
+    public function removeIntangibleDiscountDetail(\AppBundle\Entity\Product\IntangibleDiscountDetail $intangibleDiscountDetail)
+    {
+        $this->intangibleDiscountDetails->removeElement($intangibleDiscountDetail);
+    }
+    /**
+     * Get intangibleDiscountDetails
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getIntangibleDiscountDetails()
+    {
+        return $this->intangibleDiscountDetails;
+    }
+}

+ 221 - 0
old/Entity/Billing/Jvs.php

@@ -0,0 +1,221 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\Booking\EducationalProject;
+use AppBundle\Entity\Core\File;
+use AppBundle\Entity\Product\EquipmentLoan;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
+use Doctrine\Common\Collections\ArrayCollection;
+
+
+/**
+ * Paramètres généraux d'un export Jvs
+ *
+ *
+ * @Iri("http://schema.org/Jvs")
+ */
+#[ORM\Entity]
+class Jvs
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['jvs', 'jvs_list', 'billaccounting_list'])]
+    private $id;
+    /**
+     * @var ArrayCollection<Bill>
+     */
+    #[ORM\OneToMany(targetEntity: 'Bill', mappedBy: 'jvs', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['jvs_bills'])]
+    private $bills;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['jvs', 'jvs_list'])]
+    private $date;
+    /**
+     * @var File
+     */
+    #[Assert\Valid]
+    #[ORM\OneToOne(targetEntity: 'AppBundle\Entity\Core\File', cascade: ['persist'], fetch: 'EAGER')]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['jvs', 'jvs_list'])]
+    private $file;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['jvs', 'jvs_list'])]
+    private $samplingDate;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Groups(['jvs', 'jvs_list'])]
+    #[Assert\NotNull]
+    private $withSampling = false;
+    /**
+     * The constructor
+     */
+    public function __construct() {
+        $this->bills = new ArrayCollection();
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set date
+     *
+     * @param \DateTime $date
+     *
+     * @return Pes
+     */
+    public function setDate($date)
+    {
+        $this->date = $date;
+
+        return $this;
+    }
+    /**
+     * Get date
+     *
+     * @return \DateTime
+     */
+    public function getDate()
+    {
+        return $this->date;
+    }
+    /**
+     * Set file
+     *
+     * @param \AppBundle\Entity\Core\File $file
+     *
+     * @return Pes
+     */
+    public function setFile(\AppBundle\Entity\Core\File $file = null)
+    {
+        $this->file = $file;
+
+        return $this;
+    }
+    /**
+     * Get file
+     *
+     * @return \AppBundle\Entity\Core\File
+     */
+    public function getFile()
+    {
+        return $this->file;
+    }
+    /**
+     * Add bill
+     *
+     * @param \AppBundle\Entity\Billing\Bill $bill
+     *
+     * @return Pes
+     */
+    public function addBill(\AppBundle\Entity\Billing\Bill $bill)
+    {
+        $this->bills[] = $bill;
+
+        return $this;
+    }
+    /**
+     * Remove bill
+     *
+     * @param \AppBundle\Entity\Billing\Bill $bill
+     */
+    public function removeBill(\AppBundle\Entity\Billing\Bill $bill)
+    {
+        $this->bills->removeElement($bill);
+    }
+    /**
+     * Get bills
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getBills()
+    {
+        return $this->bills;
+    }
+    /**
+     * Set samplingDate
+     *
+     * @param \DateTime $samplingDate
+     *
+     * @return Pes
+     */
+    public function setSamplingDate($samplingDate)
+    {
+        $this->samplingDate = $samplingDate;
+
+        return $this;
+    }
+    /**
+     * Get samplingDate
+     *
+     * @return \DateTime
+     */
+    public function getSamplingDate()
+    {
+        return $this->samplingDate;
+    }
+    /**
+     * Set withSampling
+     *
+     * @param boolean $withSampling
+     *
+     * @return Pes
+     */
+    public function setWithSampling($withSampling)
+    {
+        $this->withSampling = $withSampling;
+
+        return $this;
+    }
+    /**
+     * Get withSampling
+     *
+     * @return boolean
+     */
+    public function getWithSampling()
+    {
+        return $this->withSampling;
+    }
+}

+ 471 - 0
old/Entity/Billing/PayfipPaymentReturn.php

@@ -0,0 +1,471 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\Booking\EducationalProject;
+use AppBundle\Entity\Core\File;
+use AppBundle\Entity\Product\EquipmentLoan;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
+use Doctrine\Common\Collections\ArrayCollection;
+
+
+/**
+ * PayfipReturn
+ *
+ * @see http://schema.org/PayfipPaymentReturn Documentation on Schema.org
+ *
+ * @Iri("http://schema.org/PayfipPaymentReturn")
+ */
+#[ORM\Entity]
+class PayfipPaymentReturn
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['pes', 'pes_list', 'billaccounting_list'])]
+    private $id;
+    /**
+     * @var Bill
+     */
+    #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Billing\Bill', cascade: ['persist'])]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['payfipreturn'])]
+    private $bill;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true)]
+    #[Groups(['payfipreturn'])]
+    private $numcli;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true)]
+    #[Groups(['payfipreturn'])]
+    private $exerc;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['payfipreturn'])]
+    private $refdet;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['payfipreturn'])]
+    private $object;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer', nullable: true)]
+    #[Groups(['payfipreturn'])]
+    private $montant;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['payfipreturn'])]
+    private $mel;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['payfipreturn'])]
+    private $urlcl;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['payfipreturn'])]
+    private $saisie;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['payfipreturn'])]
+    private $resultrans;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['payfipreturn'])]
+    private $numautoCb;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['payfipreturn'])]
+    private $numautoPrel;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['pes', 'pes_list'])]
+    private $dattrans;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['pes', 'pes_list'])]
+    private $heurtrans;
+    /**
+     * The constructor
+     */
+    public function __construct() {
+        $this->bills = new ArrayCollection();
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set numcli
+     *
+     * @param integer $numcli
+     *
+     * @return PayfipReturn
+     */
+    public function setNumcli($numcli)
+    {
+        $this->numcli = $numcli;
+
+        return $this;
+    }
+    /**
+     * Get numcli
+     *
+     * @return integer
+     */
+    public function getNumcli()
+    {
+        return $this->numcli;
+    }
+    /**
+     * Set exerc
+     *
+     * @param integer $exerc
+     *
+     * @return PayfipReturn
+     */
+    public function setExerc($exerc)
+    {
+        $this->exerc = $exerc;
+
+        return $this;
+    }
+    /**
+     * Get exerc
+     *
+     * @return integer
+     */
+    public function getExerc()
+    {
+        return $this->exerc;
+    }
+    /**
+     * Set refdet
+     *
+     * @param string $refdet
+     *
+     * @return PayfipReturn
+     */
+    public function setRefdet($refdet)
+    {
+        $this->refdet = $refdet;
+
+        return $this;
+    }
+    /**
+     * Get refdet
+     *
+     * @return string
+     */
+    public function getRefdet()
+    {
+        return $this->refdet;
+    }
+    /**
+     * Set object
+     *
+     * @param string $object
+     *
+     * @return PayfipReturn
+     */
+    public function setObject($object)
+    {
+        $this->object = $object;
+
+        return $this;
+    }
+    /**
+     * Get object
+     *
+     * @return string
+     */
+    public function getObject()
+    {
+        return $this->object;
+    }
+    /**
+     * Set montant
+     *
+     * @param integer $montant
+     *
+     * @return PayfipReturn
+     */
+    public function setMontant($montant)
+    {
+        $this->montant = $montant;
+
+        return $this;
+    }
+    /**
+     * Get montant
+     *
+     * @return integer
+     */
+    public function getMontant()
+    {
+        return $this->montant;
+    }
+    /**
+     * Set mel
+     *
+     * @param string $mel
+     *
+     * @return PayfipReturn
+     */
+    public function setMel($mel)
+    {
+        $this->mel = $mel;
+
+        return $this;
+    }
+    /**
+     * Get mel
+     *
+     * @return string
+     */
+    public function getMel()
+    {
+        return $this->mel;
+    }
+    /**
+     * Set urlcl
+     *
+     * @param string $urlcl
+     *
+     * @return PayfipReturn
+     */
+    public function setUrlcl($urlcl)
+    {
+        $this->urlcl = $urlcl;
+
+        return $this;
+    }
+    /**
+     * Get urlcl
+     *
+     * @return string
+     */
+    public function getUrlcl()
+    {
+        return $this->urlcl;
+    }
+    /**
+     * Set saisie
+     *
+     * @param string $saisie
+     *
+     * @return PayfipReturn
+     */
+    public function setSaisie($saisie)
+    {
+        $this->saisie = $saisie;
+
+        return $this;
+    }
+    /**
+     * Get saisie
+     *
+     * @return string
+     */
+    public function getSaisie()
+    {
+        return $this->saisie;
+    }
+    /**
+     * Set resultrans
+     *
+     * @param string $resultrans
+     *
+     * @return PayfipReturn
+     */
+    public function setResultrans($resultrans)
+    {
+        $this->resultrans = $resultrans;
+
+        return $this;
+    }
+    /**
+     * Get resultrans
+     *
+     * @return string
+     */
+    public function getResultrans()
+    {
+        return $this->resultrans;
+    }
+    /**
+     * Set numautoCb
+     *
+     * @param string $numautoCb
+     *
+     * @return PayfipReturn
+     */
+    public function setNumautoCb($numautoCb)
+    {
+        $this->numautoCb = $numautoCb;
+
+        return $this;
+    }
+    /**
+     * Get numautoCb
+     *
+     * @return string
+     */
+    public function getNumautoCb()
+    {
+        return $this->numautoCb;
+    }
+    /**
+     * Set numautoPrel
+     *
+     * @param string $numautoPrel
+     *
+     * @return PayfipReturn
+     */
+    public function setNumautoPrel($numautoPrel)
+    {
+        $this->numautoPrel = $numautoPrel;
+
+        return $this;
+    }
+    /**
+     * Get numautoPrel
+     *
+     * @return string
+     */
+    public function getNumautoPrel()
+    {
+        return $this->numautoPrel;
+    }
+    /**
+     * Set dattrans
+     *
+     * @param \DateTime $dattrans
+     *
+     * @return PayfipReturn
+     */
+    public function setDattrans($dattrans)
+    {
+        $this->dattrans = $dattrans;
+
+        return $this;
+    }
+    /**
+     * Get dattrans
+     *
+     * @return \DateTime
+     */
+    public function getDattrans()
+    {
+        return $this->dattrans;
+    }
+    /**
+     * Set heurtrans
+     *
+     * @param \DateTime $heurtrans
+     *
+     * @return PayfipReturn
+     */
+    public function setHeurtrans($heurtrans)
+    {
+        $this->heurtrans = $heurtrans;
+
+        return $this;
+    }
+    /**
+     * Get heurtrans
+     *
+     * @return \DateTime
+     */
+    public function getHeurtrans()
+    {
+        return $this->heurtrans;
+    }
+    /**
+     * Set bill
+     *
+     * @param \AppBundle\Entity\Billing\Bill $bill
+     *
+     * @return PayfipPaymentReturn
+     */
+    public function setBill(\AppBundle\Entity\Billing\Bill $bill)
+    {
+        $this->bill = $bill;
+
+        return $this;
+    }
+    /**
+     * Get bill
+     *
+     * @return \AppBundle\Entity\Billing\Bill
+     */
+    public function getBill()
+    {
+        return $this->bill;
+    }
+}

+ 250 - 0
old/Entity/Billing/Pes.php

@@ -0,0 +1,250 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\Booking\EducationalProject;
+use AppBundle\Entity\Core\File;
+use AppBundle\Entity\Product\EquipmentLoan;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
+use Doctrine\Common\Collections\ArrayCollection;
+
+
+/**
+ * Paramètres généraux d'un export PES
+ * NB: PES est un format de données demandé par le Trésor Public pour l'export des données comptables
+ *
+ * @Iri("http://schema.org/Pes")
+ */
+#[ORM\Entity]
+class Pes
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['pes', 'pes_list', 'billaccounting_list'])]
+    private $id;
+    /**
+     * @var ArrayCollection<Bill>
+     */
+    #[ORM\OneToMany(targetEntity: 'Bill', mappedBy: 'pes', cascade: ['persist'], orphanRemoval: true)]
+    #[Groups(['pes_bills'])]
+    private $bills;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pes', 'pes_list', 'billaccounting_list_pes'])]
+    private $roleNumber;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['pes', 'pes_list'])]
+    private $date;
+    /**
+     * @var File
+     */
+    #[Assert\Valid]
+    #[ORM\OneToOne(targetEntity: 'AppBundle\Entity\Core\File', cascade: ['persist'], fetch: 'EAGER')]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['pes', 'pes_list'])]
+    private $file;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['pes', 'pes_list'])]
+    private $samplingDate;
+    /**
+     * @var bool
+     */
+    #[ORM\Column(type: 'boolean', options: ['default' => false])]
+    #[Assert\Type(type: 'boolean')]
+    #[Groups(['pes', 'pes_list'])]
+    #[Assert\NotNull]
+    private $withSampling = false;
+    /**
+     * The constructor
+     */
+    public function __construct() {
+        $this->bills = new ArrayCollection();
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set roleNumber
+     *
+     * @param string $roleNumber
+     *
+     * @return Pes
+     */
+    public function setRoleNumber($roleNumber)
+    {
+        $this->roleNumber = $roleNumber;
+
+        return $this;
+    }
+    /**
+     * Get roleNumber
+     *
+     * @return string
+     */
+    public function getRoleNumber()
+    {
+        return $this->roleNumber;
+    }
+    /**
+     * Set date
+     *
+     * @param \DateTime $date
+     *
+     * @return Pes
+     */
+    public function setDate($date)
+    {
+        $this->date = $date;
+
+        return $this;
+    }
+    /**
+     * Get date
+     *
+     * @return \DateTime
+     */
+    public function getDate()
+    {
+        return $this->date;
+    }
+    /**
+     * Set file
+     *
+     * @param \AppBundle\Entity\Core\File $file
+     *
+     * @return Pes
+     */
+    public function setFile(\AppBundle\Entity\Core\File $file = null)
+    {
+        $this->file = $file;
+
+        return $this;
+    }
+    /**
+     * Get file
+     *
+     * @return \AppBundle\Entity\Core\File
+     */
+    public function getFile()
+    {
+        return $this->file;
+    }
+    /**
+     * Add bill
+     *
+     * @param \AppBundle\Entity\Billing\Bill $bill
+     *
+     * @return Pes
+     */
+    public function addBill(\AppBundle\Entity\Billing\Bill $bill)
+    {
+        $this->bills[] = $bill;
+
+        return $this;
+    }
+    /**
+     * Remove bill
+     *
+     * @param \AppBundle\Entity\Billing\Bill $bill
+     */
+    public function removeBill(\AppBundle\Entity\Billing\Bill $bill)
+    {
+        $this->bills->removeElement($bill);
+    }
+    /**
+     * Get bills
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getBills()
+    {
+        return $this->bills;
+    }
+    /**
+     * Set samplingDate
+     *
+     * @param \DateTime $samplingDate
+     *
+     * @return Pes
+     */
+    public function setSamplingDate($samplingDate)
+    {
+        $this->samplingDate = $samplingDate;
+
+        return $this;
+    }
+    /**
+     * Get samplingDate
+     *
+     * @return \DateTime
+     */
+    public function getSamplingDate()
+    {
+        return $this->samplingDate;
+    }
+    /**
+     * Set withSampling
+     *
+     * @param boolean $withSampling
+     *
+     * @return Pes
+     */
+    public function setWithSampling($withSampling)
+    {
+        $this->withSampling = $withSampling;
+
+        return $this;
+    }
+    /**
+     * Get withSampling
+     *
+     * @return boolean
+     */
+    public function getWithSampling()
+    {
+        return $this->withSampling;
+    }
+}

+ 577 - 0
old/Entity/Billing/PesSetting.php

@@ -0,0 +1,577 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\Organization\Organization;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use AppBundle\Annotation\DefaultField;
+
+/**
+ *
+ * (Plus utilisée, à confirmer)
+ *
+ * @Iri("http://schema.org/PesSettings")
+ */
+#[ORM\Entity]
+class PesSetting
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['pessetting'])]
+    private $id;
+    /**
+     * @var Organization
+     *
+     * @DefaultField
+     */
+    #[ORM\OneToOne(targetEntity: 'AppBundle\Entity\Organization\Organization', inversedBy: 'pesSetting', fetch: 'EAGER')]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['pessetting'])]
+    private $organization;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', length: 14, nullable: true)]
+    #[Assert\Length(max: 14, maxMessage: 'invalid-max-length')]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pessetting'])]
+    private $idPost;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pessetting'])]
+    private $idColl;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pessetting'])]
+    private $idCollTipi;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pessetting'])]
+    private $codColl;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pessetting'])]
+    private $codBud;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pessetting'])]
+    private $codProd;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pessetting'])]
+    private $libelleColBud;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pessetting'])]
+    private $gestionnaire;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pessetting'])]
+    private $nameComptable;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pessetting'])]
+    private $creditorIban;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pessetting'])]
+    private $creditorBic;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pessetting'])]
+    private $creditorIcs;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pessetting'])]
+    private $creditorName;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pessetting'])]
+    private $creditorLineOneAddress;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pessetting'])]
+    private $creditorLineTwoAddress;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pessetting'])]
+    private $creditorPublicInstitution;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string', nullable: true)]
+    #[Assert\Type(type: 'string')]
+    #[Groups(['pessetting'])]
+    private $creditorType;
+    /**
+     * Get id
+     *
+     * @return integer
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set organization
+     *
+     * @param \AppBundle\Entity\Organization\Organization $organization
+     *
+     * @return PesSetting
+     */
+    public function setOrganization(\AppBundle\Entity\Organization\Organization $organization)
+    {
+        $this->organization = $organization;
+
+        return $this;
+    }
+    /**
+     * Get organization
+     *
+     * @return \AppBundle\Entity\Organization\Organization
+     */
+    public function getOrganization()
+    {
+        return $this->organization;
+    }
+    /**
+     * Set idPost
+     *
+     * @param string $idPost
+     *
+     * @return PesSetting
+     */
+    public function setIdPost($idPost)
+    {
+        $this->idPost = $idPost;
+
+        return $this;
+    }
+    /**
+     * Get idPost
+     *
+     * @return string
+     */
+    public function getIdPost()
+    {
+        return $this->idPost;
+    }
+    /**
+     * Set idColl
+     *
+     * @param string $idColl
+     *
+     * @return PesSetting
+     */
+    public function setIdColl($idColl)
+    {
+        $this->idColl = $idColl;
+
+        return $this;
+    }
+    /**
+     * Get idColl
+     *
+     * @return string
+     */
+    public function getIdColl()
+    {
+        return $this->idColl;
+    }
+    /**
+     * Set idCollTipi
+     *
+     * @param string $idCollTipi
+     *
+     * @return PesSetting
+     */
+    public function setIdCollTipi($idCollTipi)
+    {
+        $this->idCollTipi = $idCollTipi;
+
+        return $this;
+    }
+    /**
+     * Get idCollTipi
+     *
+     * @return string
+     */
+    public function getIdCollTipi()
+    {
+        return $this->idCollTipi;
+    }
+    /**
+     * Set codColl
+     *
+     * @param string $codColl
+     *
+     * @return PesSetting
+     */
+    public function setCodColl($codColl)
+    {
+        $this->codColl = $codColl;
+
+        return $this;
+    }
+    /**
+     * Get codColl
+     *
+     * @return string
+     */
+    public function getCodColl()
+    {
+        return $this->codColl;
+    }
+    /**
+     * Set codBud
+     *
+     * @param string $codBud
+     *
+     * @return PesSetting
+     */
+    public function setCodBud($codBud)
+    {
+        $this->codBud = $codBud;
+
+        return $this;
+    }
+    /**
+     * Get codBud
+     *
+     * @return string
+     */
+    public function getCodBud()
+    {
+        return $this->codBud;
+    }
+    /**
+     * Set codProd
+     *
+     * @param string $codProd
+     *
+     * @return PesSetting
+     */
+    public function setCodProd($codProd)
+    {
+        $this->codProd = $codProd;
+
+        return $this;
+    }
+    /**
+     * Get codProd
+     *
+     * @return string
+     */
+    public function getCodProd()
+    {
+        return $this->codProd;
+    }
+    /**
+     * Get codProdPayFip
+     *
+     * @return string
+     */
+    public function getCodProdPayFip()
+    {
+        return mb_substr($this->codProd, 0, 2);
+    }
+    /**
+     * Set libelleColBud
+     *
+     * @param string $libelleColBud
+     *
+     * @return PesSetting
+     */
+    public function setLibelleColBud($libelleColBud)
+    {
+        $this->libelleColBud = $libelleColBud;
+
+        return $this;
+    }
+    /**
+     * Get libelleColBud
+     *
+     * @return string
+     */
+    public function getLibelleColBud()
+    {
+        return $this->libelleColBud;
+    }
+    /**
+     * Set gestionnaire
+     *
+     * @param string $gestionnaire
+     *
+     * @return PesSetting
+     */
+    public function setGestionnaire($gestionnaire)
+    {
+        $this->gestionnaire = $gestionnaire;
+
+        return $this;
+    }
+    /**
+     * Get gestionnaire
+     *
+     * @return string
+     */
+    public function getGestionnaire()
+    {
+        return $this->gestionnaire;
+    }
+    /**
+     * Set nameComptable
+     *
+     * @param string $nameComptable
+     *
+     * @return PesSetting
+     */
+    public function setNameComptable($nameComptable)
+    {
+        $this->nameComptable = $nameComptable;
+
+        return $this;
+    }
+    /**
+     * Get nameComptable
+     *
+     * @return string
+     */
+    public function getNameComptable()
+    {
+        return $this->nameComptable;
+    }
+    /**
+     * Set creditorIban
+     *
+     * @param string $creditorIban
+     *
+     * @return PesSetting
+     */
+    public function setCreditorIban($creditorIban)
+    {
+        $this->creditorIban = $creditorIban;
+
+        return $this;
+    }
+    /**
+     * Get creditorIban
+     *
+     * @return string
+     */
+    public function getCreditorIban()
+    {
+        return $this->creditorIban;
+    }
+    /**
+     * Set creditorBic
+     *
+     * @param string $creditorBic
+     *
+     * @return PesSetting
+     */
+    public function setCreditorBic($creditorBic)
+    {
+        $this->creditorBic = $creditorBic;
+
+        return $this;
+    }
+    /**
+     * Get creditorBic
+     *
+     * @return string
+     */
+    public function getCreditorBic()
+    {
+        return $this->creditorBic;
+    }
+    /**
+     * Set creditorIcs
+     *
+     * @param string $creditorIcs
+     *
+     * @return PesSetting
+     */
+    public function setCreditorIcs($creditorIcs)
+    {
+        $this->creditorIcs = $creditorIcs;
+
+        return $this;
+    }
+    /**
+     * Get creditorIcs
+     *
+     * @return string
+     */
+    public function getCreditorIcs()
+    {
+        return $this->creditorIcs;
+    }
+    /**
+     * Set creditorLineOneAddress
+     *
+     * @param string $creditorLineOneAddress
+     *
+     * @return PesSetting
+     */
+    public function setCreditorLineOneAddress($creditorLineOneAddress)
+    {
+        $this->creditorLineOneAddress = $creditorLineOneAddress;
+
+        return $this;
+    }
+    /**
+     * Get creditorLineOneAddress
+     *
+     * @return string
+     */
+    public function getCreditorLineOneAddress()
+    {
+        return $this->creditorLineOneAddress;
+    }
+    /**
+     * Set creditorLineTwoAddress
+     *
+     * @param string $creditorLineTwoAddress
+     *
+     * @return PesSetting
+     */
+    public function setCreditorLineTwoAddress($creditorLineTwoAddress)
+    {
+        $this->creditorLineTwoAddress = $creditorLineTwoAddress;
+
+        return $this;
+    }
+    /**
+     * Get creditorLineTwoAddress
+     *
+     * @return string
+     */
+    public function getCreditorLineTwoAddress()
+    {
+        return $this->creditorLineTwoAddress;
+    }
+    /**
+     * Set creditorPublicInstitution
+     *
+     * @param string $creditorPublicInstitution
+     *
+     * @return PesSetting
+     */
+    public function setCreditorPublicInstitution($creditorPublicInstitution)
+    {
+        $this->creditorPublicInstitution = $creditorPublicInstitution;
+
+        return $this;
+    }
+    /**
+     * Get creditorPublicInstitution
+     *
+     * @return string
+     */
+    public function getCreditorPublicInstitution()
+    {
+        return $this->creditorPublicInstitution;
+    }
+    /**
+     * Set creditorType
+     *
+     * @param string $creditorType
+     *
+     * @return PesSetting
+     */
+    public function setCreditorType($creditorType)
+    {
+        $this->creditorType = $creditorType;
+
+        return $this;
+    }
+    /**
+     * Get creditorType
+     *
+     * @return string
+     */
+    public function getCreditorType()
+    {
+        return $this->creditorType;
+    }
+    /**
+     * Set creditorName
+     *
+     * @param string $creditorName
+     *
+     * @return PesSetting
+     */
+    public function setCreditorName($creditorName)
+    {
+        $this->creditorName = $creditorName;
+
+        return $this;
+    }
+    /**
+     * Get creditorName
+     *
+     * @return string
+     */
+    public function getCreditorName()
+    {
+        return $this->creditorName;
+    }
+}

+ 34 - 0
old/Entity/Billing/Repository/AccessBillingRepository.php

@@ -0,0 +1,34 @@
+<?php
+
+namespace AppBundle\Entity\Billing\Repository;
+use AppBundle\Entity\Organization\Organization;
+use Doctrine\ORM\EntityRepository;
+
+/**
+ * Class AccessBillingRepository
+ * @package AppBundle\Entity\AccessAndFunction\Repository
+ */
+class AccessBillingRepository extends EntityRepository
+{
+
+    public function findAccessBillingByCustomerIdAndOrganization($entity,Organization $organization)
+    {
+
+        $customerId = $entity->getCustomerId();
+
+        $qb = $this->createQueryBuilder('ab');
+
+        $qb
+//            ->select('ab.customerId')
+            ->join('ab.access','acc')
+            ->andWhere('ab.customerId=:customerid')
+            ->andWhere('acc.organization=:org')
+            ->setParameter(':customerid',$customerId)
+            ->setParameter(':org',$organization)
+            ->setMaxResults(1);
+
+        return $qb->getQuery()->getOneOrNullResult();
+
+    }
+
+}

+ 52 - 0
old/Entity/Billing/Repository/AccessIntangibleRepository.php

@@ -0,0 +1,52 @@
+<?php
+
+namespace AppBundle\Entity\Billing\Repository;
+use AppBundle\Entity\Organization\Organization;
+use Doctrine\ORM\EntityRepository;
+
+/**
+ * Class  AccessIntangible
+ */
+class AccessIntangibleRepository extends EntityRepository
+{
+
+    public function findLicensesAccessIntangible(Organization $organization)
+    {
+
+
+        $qb = $this->createQueryBuilder('a');
+
+        $qb->innerJoin('AppBundle:Product\Intangible', 'i', 'WITH', 'a.intangible = i.id')
+            ->innerJoin('AppBundle:AccessAndFunction\Access', 'acc', 'WITH', 'a.access = acc.id')
+            ->where('i.label LIKE :licence')
+            ->andWhere('a.endDate IS NULL')
+            ->andWhere('acc.organization=:org')
+            ->setParameter(':org',$organization)
+            ->setParameter('licence', '%licence%');
+
+        return $qb->getQuery()->getResult();
+
+    }
+
+    public function getArchivedAccessIntangible($enDate, $organizationId)
+    {
+        $filter = $this->_em->getFilters()->enable('activity_year');
+        $filter->setParameter('disabledFilter', 1);
+        $qb = $this->createQueryBuilder('access_intangible');
+
+        $qb
+            ->innerJoin('access_intangible.access', 'access')
+            ->innerJoin('access.organization', 'organization')
+            ->andWhere('access_intangible.endDate = :enDate')
+            ->andWhere('organization.id = :id')
+            ->setParameter('id', $organizationId)
+            ->setParameter('enDate', $enDate)
+        ;
+
+        $filter->setParameter('disabledFilter', 0);
+        return $qb->getQuery()->getResult();
+    }
+
+}
+
+?>

+ 34 - 0
old/Entity/Billing/Repository/AdvancePaymentRepository.php

@@ -0,0 +1,34 @@
+<?php
+
+namespace AppBundle\Entity\Billing\Repository;
+use AppBundle\Entity\AccessAndFunction\Access;
+use AppBundle\Entity\Organization\Organization;
+use Doctrine\ORM\EntityRepository;
+
+/**
+ * Class AdvancePaymentRepository
+ */
+class AdvancePaymentRepository extends EntityRepository
+{
+
+    public function findByAccessAndSchoolYear(Access $access, $schoolYear)
+    {
+
+        $qb = $this->createQueryBuilder('o');
+
+        $qb
+            ->andWhere('o.access =:access')
+            ->andWhere('o.startSchoolYear = :schoolYear')
+            ->andWhere('o.bill is null')
+            //todo: PAS D'ACOMPTE NON PLUS !!!
+            ->setParameter('access', $access)
+            ->setParameter('schoolYear', $schoolYear)
+        ;
+
+        return $qb->getQuery()->getResult();
+
+    }
+
+}
+
+?>

+ 33 - 0
old/Entity/Billing/Repository/BillCreditRepository.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace AppBundle\Entity\Billing\Repository;
+use AppBundle\Entity\Organization\Organization;
+use Doctrine\ORM\EntityRepository;
+
+/**
+ * Class BillRepository
+ * @package AppBundle\Entity\AccessAndFunction\Repository
+ */
+class BillCreditRepository extends EntityRepository
+{
+
+    public function findMaxBNumberByOrganization(Organization $organization)
+    {
+
+        $qb = $this->createQueryBuilder('b');
+
+        $qb->select('max(b.billCreditInteger) as billCreditNumber')
+            ->join('b.bill','bil')
+            ->join('bil.access','acc')
+            ->andWhere('acc.organization=:org')
+            ->orderBy('b.id', 'DESC')
+            ->setParameter(':org',$organization)
+            ->setMaxResults(1);
+
+        return $qb->getQuery()->getOneOrNullResult();
+
+    }
+
+}
+
+?>

+ 32 - 0
old/Entity/Billing/Repository/BillRepository.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace AppBundle\Entity\Billing\Repository;
+use AppBundle\Entity\Organization\Organization;
+use Doctrine\ORM\EntityRepository;
+
+/**
+ * Class BillRepository
+ * @package AppBundle\Entity\AccessAndFunction\Repository
+ */
+class BillRepository extends EntityRepository
+{
+
+    public function findMaxBNumberByOrganization(Organization $organization)
+    {
+
+        $qb = $this->createQueryBuilder('b');
+
+        $qb->select('max(b.billNumberInteger) as billNumber')
+            ->join('b.access','acc')
+            ->andWhere('acc.organization=:org')
+            ->orderBy('b.id', 'DESC')
+            ->setParameter(':org',$organization)
+            ->setMaxResults(1);
+
+        return $qb->getQuery()->getOneOrNullResult();
+
+    }
+
+}
+
+?>

+ 25 - 0
old/Entity/Billing/Repository/SddBankRepository.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace AppBundle\Entity\Billing\Repository;
+use AppBundle\Entity\Organization\Organization;
+use Doctrine\ORM\EntityRepository;
+
+/**
+ * Class SddBankRepository
+ * @package AppBundle\Entity\Billing\Repository
+ */
+class SddBankRepository extends EntityRepository
+{
+    public function getCountSddForOrganizationAndDate(Organization $organization, string $date)
+    {
+        $qb = $this->createQueryBuilder('sdd_bank');
+        $qb
+            ->join('sdd_bank.bills', 'bills')
+            ->andWhere('bills.organization=:org')
+            ->andWhere('sdd_bank.date LIKE :date')
+            ->setParameter(':org',$organization)
+            ->setParameter(':date',$date . '%');
+
+        return count($qb->getQuery()->getResult());
+    }
+}

+ 25 - 0
old/Entity/Billing/Repository/SddRegieRepository.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace AppBundle\Entity\Billing\Repository;
+use AppBundle\Entity\Organization\Organization;
+use Doctrine\ORM\EntityRepository;
+
+/**
+ * Class SddRegieRepository
+ * @package AppBundle\Entity\Billing\Repository
+ */
+class SddRegieRepository extends EntityRepository
+{
+    public function getCountSddForOrganizationAndDate(Organization $organization, string $date)
+    {
+        $qb = $this->createQueryBuilder('sdd_regie');
+        $qb
+            ->join('sdd_regie.bills', 'bills')
+            ->andWhere('bills.organization=:org')
+            ->andWhere('sdd_bank.date LIKE :date')
+            ->setParameter(':org',$organization)
+            ->setParameter(':date',$date . '%');
+
+        return count($qb->getQuery()->getResult());
+    }
+}

+ 195 - 0
old/Entity/Billing/ResidenceArea.php

@@ -0,0 +1,195 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+
+/**
+ * Zone de résidence d'un Access, telle que définie par l'Organization
+ *
+ * @Iri("http://schema.org/ResidenceArea")
+ */
+#[ORM\Entity]
+class ResidenceArea
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['residencearea', 'accesses_list_accessbilling'])]
+    private $id;
+    /**
+     * @var BillingSetting
+     */
+    #[ORM\ManyToOne(targetEntity: 'BillingSetting', inversedBy: 'residenceAreas')]
+    #[ORM\JoinColumn(nullable: false)]
+    #[Assert\NotNull]
+    #[Groups(['residencearea'])]
+    private $billingSetting;
+    /**
+     * @var string
+     */
+    #[ORM\Column(type: 'string')]
+    #[Assert\Type(type: 'string')]
+    #[Assert\NotNull]
+    #[Groups(['residencearea', 'residencearea_reference', 'access_details_accessbilling', 'accesses_list_accessbilling', 'student_list_accessbilling', 'guardians_list_accessbilling', 'adherent_list_accessbilling', 'payer_list_accessbilling', 'fusion_accesses_accessbilling'])]
+    private $label;
+    /**
+     * @var ArrayCollection<AccessBilling>
+     */
+    #[ORM\OneToMany(targetEntity: 'AppBundle\Entity\Billing\AccessBilling', mappedBy: 'residenceArea')]
+    #[Groups(['residencearea_accessbilling'])]
+    private $accessBilling;
+    /**
+     * @var ArrayCollection<IntangibleDiscountDetail>
+     */
+    #[ORM\OneToMany(targetEntity: 'AppBundle\Entity\Product\IntangibleDiscountDetail', mappedBy: 'residenceArea')]
+    #[Groups(['residencearea_intangiblediscountdetail'])]
+    private $intangibleDiscountDetails;
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+        $this->accessBilling = new ArrayCollection();
+        $this->intangibleDiscountDetails = new ArrayCollection();
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set label
+     *
+     * @param string $label
+     *
+     * @return ResidenceArea
+     */
+    public function setLabel($label)
+    {
+        $this->label = $label;
+
+        return $this;
+    }
+    /**
+     * Get label
+     *
+     * @return string
+     */
+    public function getLabel()
+    {
+        return $this->label;
+    }
+    /**
+     * Set billingSetting
+     *
+     * @param \AppBundle\Entity\Billing\BillingSetting $billingSetting
+     *
+     * @return ResidenceArea
+     */
+    public function setBillingSetting(\AppBundle\Entity\Billing\BillingSetting $billingSetting)
+    {
+        $this->billingSetting = $billingSetting;
+
+        return $this;
+    }
+    /**
+     * Get billingSetting
+     *
+     * @return \AppBundle\Entity\Billing\BillingSetting
+     */
+    public function getBillingSetting()
+    {
+        return $this->billingSetting;
+    }
+    /**
+     * Add accessBilling
+     *
+     * @param \AppBundle\Entity\Billing\AccessBilling $accessBilling
+     *
+     * @return ResidenceArea
+     */
+    public function addAccessBilling(\AppBundle\Entity\Billing\AccessBilling $accessBilling)
+    {
+        $this->accessBilling[] = $accessBilling;
+
+        return $this;
+    }
+    /**
+     * Remove accessBilling
+     *
+     * @param \AppBundle\Entity\Billing\AccessBilling $accessBilling
+     */
+    public function removeAccessBilling(\AppBundle\Entity\Billing\AccessBilling $accessBilling)
+    {
+        $this->accessBilling->removeElement($accessBilling);
+    }
+    /**
+     * Get accessBilling
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getAccessBilling()
+    {
+        return $this->accessBilling;
+    }
+    /**
+     * Add intangibleDiscountDetail
+     *
+     * @param \AppBundle\Entity\Product\IntangibleDiscountDetail $intangibleDiscountDetail
+     *
+     * @return ResidenceArea
+     */
+    public function addIntangibleDiscountDetail(\AppBundle\Entity\Product\IntangibleDiscountDetail $intangibleDiscountDetail)
+    {
+        $this->intangibleDiscountDetails[] = $intangibleDiscountDetail;
+
+        return $this;
+    }
+    /**
+     * Remove intangibleDiscountDetail
+     *
+     * @param \AppBundle\Entity\Product\IntangibleDiscountDetail $intangibleDiscountDetail
+     */
+    public function removeIntangibleDiscountDetail(\AppBundle\Entity\Product\IntangibleDiscountDetail $intangibleDiscountDetail)
+    {
+        $this->intangibleDiscountDetails->removeElement($intangibleDiscountDetail);
+    }
+    /**
+     * Get intangibleDiscountDetails
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getIntangibleDiscountDetails()
+    {
+        return $this->intangibleDiscountDetails;
+    }
+}

+ 185 - 0
old/Entity/Billing/SddBank.php

@@ -0,0 +1,185 @@
+<?php
+
+namespace AppBundle\Entity\Billing;
+
+use AppBundle\Entity\Core\File;
+use Doctrine\ORM\Mapping as ORM;
+use Dunglas\ApiBundle\Annotation\Iri;
+use Symfony\Component\Validator\Constraints as Assert;
+use AppBundle\Entity\Traits\TimestampableEntity;
+use AppBundle\Entity\Traits\CreatorUpdaterEntity;
+use Doctrine\Common\Collections\ArrayCollection;
+use Symfony\Component\Serializer\Annotation\Groups;
+
+
+/**
+ * Paramètres généraux d'un export Sdd bank
+ *
+ *
+ * @Iri("http://schema.org/Jvs")
+ */
+#[ORM\Entity(repositoryClass: 'AppBundle\Entity\Billing\Repository\SddBankRepository')]
+class SddBank
+{
+    use TimestampableEntity;
+    use CreatorUpdaterEntity;
+    /**
+     * @var int
+     */
+    #[ORM\Column(type: 'integer')]
+    #[ORM\Id]
+    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[Groups(['sddbank'])]
+    private $id;
+    /**
+     * @var ArrayCollection<Bill>
+     */
+    #[ORM\OneToMany(targetEntity: 'Bill', mappedBy: 'sddBank', orphanRemoval: true)]
+    private $bills;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    #[Groups(['sddbank'])]
+    private $date;
+    /**
+     * @var File
+     */
+    #[Assert\Valid]
+    #[ORM\OneToOne(targetEntity: 'AppBundle\Entity\Core\File', cascade: ['persist'], fetch: 'EAGER')]
+    #[ORM\JoinColumn(nullable: true)]
+    #[Groups(['sddbank'])]
+    private $file;
+    /**
+     * @var \DateTime
+     */
+    #[ORM\Column(type: 'date', nullable: true)]
+    #[Assert\Date]
+    private $samplingDate;
+    /**
+     * The constructor
+     */
+    public function __construct() {
+        $this->bills = new ArrayCollection();
+    }
+    /**
+     * Sets id.
+     *
+     * @param int $id
+     *
+     * @return $this
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+    /**
+     * Gets id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+    /**
+     * Set date
+     *
+     * @param \DateTime $date
+     *
+     * @return Pes
+     */
+    public function setDate($date)
+    {
+        $this->date = $date;
+
+        return $this;
+    }
+    /**
+     * Get date
+     *
+     * @return \DateTime
+     */
+    public function getDate()
+    {
+        return $this->date;
+    }
+    /**
+     * Set file
+     *
+     * @param \AppBundle\Entity\Core\File $file
+     *
+     * @return Pes
+     */
+    public function setFile(\AppBundle\Entity\Core\File $file = null)
+    {
+        $this->file = $file;
+
+        return $this;
+    }
+    /**
+     * Get file
+     *
+     * @return \AppBundle\Entity\Core\File
+     */
+    public function getFile()
+    {
+        return $this->file;
+    }
+    /**
+     * Add bill
+     *
+     * @param \AppBundle\Entity\Billing\Bill $bill
+     *
+     * @return Pes
+     */
+    public function addBill(\AppBundle\Entity\Billing\Bill $bill)
+    {
+        $this->bills[] = $bill;
+
+        return $this;
+    }
+    /**
+     * Remove bill
+     *
+     * @param \AppBundle\Entity\Billing\Bill $bill
+     */
+    public function removeBill(\AppBundle\Entity\Billing\Bill $bill)
+    {
+        $this->bills->removeElement($bill);
+    }
+    /**
+     * Get bills
+     *
+     * @return \Doctrine\Common\Collections\Collection
+     */
+    public function getBills()
+    {
+        return $this->bills;
+    }
+    /**
+     * Set samplingDate
+     *
+     * @param \DateTime $samplingDate
+     *
+     * @return Pes
+     */
+    public function setSamplingDate($samplingDate)
+    {
+        $this->samplingDate = $samplingDate;
+
+        return $this;
+    }
+    /**
+     * Get samplingDate
+     *
+     * @return \DateTime
+     */
+    public function getSamplingDate()
+    {
+        return $this->samplingDate;
+    }
+}

Some files were not shown because too many files changed in this diff