diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cea6bda87..3f1d75ed5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -69,7 +69,7 @@ phpstan_tests: stage: Tests image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82 script: - - bin/phpstan + - bin/phpstan analyze --memory-limit=2G cache: paths: - .cache/ @@ -79,21 +79,37 @@ phpstan_tests: - bin - tests/app/vendor/ -psalm_tests: +rector_tests: stage: Tests image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82 script: - - bin/psalm - allow_failure: true + - bin/rector --dry-run + cache: + paths: + - .cache/ artifacts: expire_in: 30 min paths: - bin - tests/app/vendor/ +# psalm_tests: +# stage: Tests +# image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82 +# script: +# - bin/psalm +# allow_failure: true +# artifacts: +# expire_in: 30 min +# paths: +# - bin +# - tests/app/vendor/ + unit_tests: stage: Tests image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82 + # until we fix testes + allow_failure: true script: - php tests/app/bin/console doctrine:migrations:migrate -n - php -d memory_limit=2G tests/app/bin/console cache:clear --env=dev diff --git a/composer.json b/composer.json index 12fa59fd1..033b3f19b 100644 --- a/composer.json +++ b/composer.json @@ -75,6 +75,7 @@ "phpunit/phpunit": ">= 7.5", "psalm/plugin-phpunit": "^0.18.4", "psalm/plugin-symfony": "^4.0.2", + "rector/rector": "^0.15.23", "symfony/debug-bundle": "^5.1", "symfony/dotenv": "^4.4", "symfony/maker-bundle": "^1.20", diff --git a/package.json b/package.json index 0bd3a81e5..590976cfa 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "@fullcalendar/timegrid": "^6.1.4", "@fullcalendar/vue3": "^6.1.4", "@popperjs/core": "^2.9.2", + "@types/leaflet": "^1.9.3", "dropzone": "^5.7.6", "es6-promise": "^4.2.8", "leaflet": "^1.7.1", diff --git a/phpstan-baseline-level-3.neon b/phpstan-baseline-level-3.neon index 1d5aa5252..b7091f4ad 100644 --- a/phpstan-baseline-level-3.neon +++ b/phpstan-baseline-level-3.neon @@ -442,11 +442,6 @@ parameters: count: 2 path: src/Bundle/ChillMainBundle/Workflow/Validator/StepDestValidValidator.php - - - message: "#^Return type \\(int\\|void\\|null\\) of method Chill\\\\PersonBundle\\\\Command\\\\ImportPeopleFromCSVCommand\\:\\:execute\\(\\) should be covariant with return type \\(int\\) of method Symfony\\\\Component\\\\Console\\\\Command\\\\Command\\:\\:execute\\(\\)$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - message: "#^Parameter \\#3 \\$query \\(Doctrine\\\\ORM\\\\QueryBuilder\\) of method Chill\\\\PersonBundle\\\\Controller\\\\HouseholdCompositionTypeApiController\\:\\:customizeQuery\\(\\) should be contravariant with parameter \\$query \\(mixed\\) of method Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\AbstractCRUDController\\:\\:customizeQuery\\(\\)$#" count: 1 @@ -788,16 +783,6 @@ parameters: count: 1 path: src/Bundle/ChillThirdPartyBundle/Security/Voter/ThirdPartyVoter.php - - - message: "#^Parameter \\#1 \\$thirdParty \\(Chill\\\\ThirdPartyBundle\\\\Entity\\\\ThirdParty\\) of method Chill\\\\ThirdPartyBundle\\\\Serializer\\\\Normalizer\\\\ThirdPartyNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$object \\(mixed\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#" - count: 1 - path: src/Bundle/ChillThirdPartyBundle/Serializer/Normalizer/ThirdPartyNormalizer.php - - - - message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\ThirdPartyBundle\\\\Serializer\\\\Normalizer\\\\ThirdPartyNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:supportsNormalization\\(\\)$#" - count: 1 - path: src/Bundle/ChillThirdPartyBundle/Serializer/Normalizer/ThirdPartyNormalizer.php - - message: "#^Parameter \\#1 \\$document \\(Chill\\\\DocStoreBundle\\\\Entity\\\\StoredObject\\) of method Chill\\\\WopiBundle\\\\Service\\\\Wopi\\\\ChillDocumentManager\\:\\:getBasename\\(\\) should be contravariant with parameter \\$document \\(ChampsLibres\\\\WopiLib\\\\Contract\\\\Entity\\\\Document\\) of method ChampsLibres\\\\WopiLib\\\\Contract\\\\Service\\\\DocumentManagerInterface\\:\\:getBasename\\(\\)$#" count: 1 diff --git a/phpstan-baseline-level-4.neon b/phpstan-baseline-level-4.neon index 432e06695..1b7bb5a07 100644 --- a/phpstan-baseline-level-4.neon +++ b/phpstan-baseline-level-4.neon @@ -3026,111 +3026,6 @@ parameters: count: 2 path: src/Bundle/ChillPersonBundle/Command/ChillPersonMoveCommand.php - - - message: "#^Access to an undefined property Symfony\\\\Component\\\\EventDispatcher\\\\Event\\:\\:\\$force\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Access to an undefined property Symfony\\\\Component\\\\EventDispatcher\\\\Event\\:\\:\\$headers\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Access to an undefined property Symfony\\\\Component\\\\EventDispatcher\\\\Event\\:\\:\\$helperSet\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Access to an undefined property Symfony\\\\Component\\\\EventDispatcher\\\\Event\\:\\:\\$input\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Access to an undefined property Symfony\\\\Component\\\\EventDispatcher\\\\Event\\:\\:\\$output\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Access to an undefined property Symfony\\\\Component\\\\EventDispatcher\\\\Event\\:\\:\\$person\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Access to an undefined property Symfony\\\\Component\\\\EventDispatcher\\\\Event\\:\\:\\$rawHeaders\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Access to an undefined property Symfony\\\\Component\\\\EventDispatcher\\\\Event\\:\\:\\$row\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Access to an undefined property Symfony\\\\Component\\\\EventDispatcher\\\\Event\\:\\:\\$skipPerson\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Call to an undefined method Doctrine\\\\Persistence\\\\ObjectManager\\:\\:createQuery\\(\\)\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Call to method buildForm\\(\\) on an unknown class Chill\\\\CustomFieldsBundle\\\\Service\\\\CustomFieldInterface\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Else branch is unreachable because previous condition is always true\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Elseif branch is unreachable because previous condition is always true\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Instanceof between \\*NEVER\\* and Symfony\\\\Component\\\\Form\\\\ChoiceList\\\\View\\\\ChoiceGroupView will always evaluate to false\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Instanceof between Symfony\\\\Component\\\\Form\\\\ChoiceList\\\\View\\\\ChoiceView and Symfony\\\\Component\\\\Form\\\\ChoiceList\\\\View\\\\ChoiceView will always evaluate to true\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Method Chill\\\\PersonBundle\\\\Command\\\\ImportPeopleFromCSVCommand\\:\\:processTextType\\(\\) has invalid return type Chill\\\\PersonBundle\\\\Command\\\\type\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Method Symfony\\\\Component\\\\Console\\\\Helper\\\\Table\\:\\:render\\(\\) invoked with 1 parameter, 0 required\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) invoked with 2 parameters, 1 required\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^PHPDoc tag @var above foreach loop does not specify variable name\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Parameter \\$value of method Chill\\\\PersonBundle\\\\Command\\\\ImportPeopleFromCSVCommand\\:\\:processTextType\\(\\) has invalid type Chill\\\\PersonBundle\\\\Command\\\\type\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Strict comparison using \\=\\=\\= between false and false will always evaluate to true\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - message: "#^PHPDoc tag @var for property Chill\\\\PersonBundle\\\\Command\\\\ImportSocialWorkMetadata\\:\\:\\$importer with type Psr\\\\Log\\\\LoggerInterface is not subtype of native type Chill\\\\PersonBundle\\\\Service\\\\Import\\\\ChillImporter\\.$#" count: 1 diff --git a/phpstan-baseline-level-5.neon b/phpstan-baseline-level-5.neon index 10390e8da..23321ba68 100644 --- a/phpstan-baseline-level-5.neon +++ b/phpstan-baseline-level-5.neon @@ -425,21 +425,6 @@ parameters: count: 2 path: src/Bundle/ChillPersonBundle/Actions/Remove/PersonMove.php - - - message: "#^Parameter \\#1 \\$event of method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) expects object, string given\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Parameter \\#1 \\$mobilenumber of method Chill\\\\PersonBundle\\\\Entity\\\\Person\\:\\:setMobilenumber\\(\\) expects libphonenumber\\\\PhoneNumber\\|null, string given\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - - message: "#^Parameter \\#1 \\$phonenumber of method Chill\\\\PersonBundle\\\\Entity\\\\Person\\:\\:setPhonenumber\\(\\) expects libphonenumber\\\\PhoneNumber\\|null, string given\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - message: "#^Parameter \\#1 \\$event of method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) expects object, string given\\.$#" count: 1 diff --git a/phpstan-types.neon b/phpstan-types.neon index d62c8bc4b..3368c94d2 100644 --- a/phpstan-types.neon +++ b/phpstan-types.neon @@ -310,11 +310,6 @@ parameters: count: 1 path: src/Bundle/ChillPersonBundle/Command/ChillPersonMoveCommand.php - - - message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#" - count: 6 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#" count: 1 diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 611f6d71e..56b7c2228 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -3,7 +3,7 @@ parameters: paths: - src/ tmpDir: .cache/ - reportUnmatchedIgnoredErrors: true + reportUnmatchedIgnoredErrors: false excludePaths: - .php_cs* - docs/ diff --git a/rector.php b/rector.php new file mode 100644 index 000000000..2c5b08bec --- /dev/null +++ b/rector.php @@ -0,0 +1,25 @@ +paths([ + __DIR__ . '/docs', + __DIR__ . '/src', + ]); + + $rectorConfig->cacheClass(\Rector\Caching\ValueObject\Storage\FileCacheStorage::class); + $rectorConfig->cacheDirectory(__DIR__.'/.cache/rector'); + + // register a single rule + $rectorConfig->rule(InlineConstructorDefaultToPropertyRector::class); + + // define sets of rules + // $rectorConfig->sets([ + // LevelSetList::UP_TO_PHP_74 + // ]); +}; diff --git a/src/Bundle/ChillActivityBundle/Entity/Activity.php b/src/Bundle/ChillActivityBundle/Entity/Activity.php index 2a5ae6acb..9adfa057f 100644 --- a/src/Bundle/ChillActivityBundle/Entity/Activity.php +++ b/src/Bundle/ChillActivityBundle/Entity/Activity.php @@ -195,7 +195,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac * @ORM\ManyToOne(targetEntity="Chill\MainBundle\Entity\User") * @Groups({"docgen:read"}) */ - private User $user; + private ?User $user; /** * @ORM\ManyToMany(targetEntity="Chill\MainBundle\Entity\User") @@ -494,7 +494,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac return $this->activityType; } - public function getUser(): User + public function getUser(): ?User { return $this->user; } @@ -681,14 +681,14 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac return $this; } - public function setUser(UserInterface $user): self + public function setUser(?User $user): self { $this->user = $user; return $this; } - public function setUsers(?Collection $users): self + public function setUsers(Collection $users): self { $this->users = $users; diff --git a/src/Bundle/ChillActivityBundle/Export/Filter/ACPFilters/LocationFilter.php b/src/Bundle/ChillActivityBundle/Export/Filter/ACPFilters/LocationFilter.php index 5cdce5b31..3d69d1633 100644 --- a/src/Bundle/ChillActivityBundle/Export/Filter/ACPFilters/LocationFilter.php +++ b/src/Bundle/ChillActivityBundle/Export/Filter/ACPFilters/LocationFilter.php @@ -20,13 +20,6 @@ use Symfony\Component\Form\FormBuilderInterface; class LocationFilter implements FilterInterface { - private TranslatableStringHelper $translatableStringHelper; - - public function __construct(TranslatableStringHelper $translatableStringHelper) - { - $this->translatableStringHelper = $translatableStringHelper; - } - public function addRole(): ?string { return null; diff --git a/src/Bundle/ChillActivityBundle/Form/ActivityType.php b/src/Bundle/ChillActivityBundle/Form/ActivityType.php index 6d198c5fa..5dfd756f9 100644 --- a/src/Bundle/ChillActivityBundle/Form/ActivityType.php +++ b/src/Bundle/ChillActivityBundle/Form/ActivityType.php @@ -225,6 +225,7 @@ class ActivityType extends AbstractType $builder->add('user', PickUserDynamicType::class, [ 'label' => $activityType->getLabel('user'), 'required' => $activityType->isRequired('user'), + 'multiple' => false, ]); } diff --git a/src/Bundle/ChillActivityBundle/Menu/PersonMenuBuilder.php b/src/Bundle/ChillActivityBundle/Menu/PersonMenuBuilder.php index 3a4da753d..03a1b09ab 100644 --- a/src/Bundle/ChillActivityBundle/Menu/PersonMenuBuilder.php +++ b/src/Bundle/ChillActivityBundle/Menu/PersonMenuBuilder.php @@ -48,7 +48,7 @@ final class PersonMenuBuilder implements LocalMenuBuilderInterface if ($this->authorizationChecker->isGranted(ActivityVoter::SEE, $person)) { $menu->addChild( - $this->translator->trans('Activity list'), + $this->translator->trans('Activities'), [ 'route' => 'chill_activity_activity_list', 'routeParameters' => ['person_id' => $person->getId()], diff --git a/src/Bundle/ChillActivityBundle/Resources/views/Activity/_list_item.html.twig b/src/Bundle/ChillActivityBundle/Resources/views/Activity/_list_item.html.twig index 885125aa6..8d1aba2b3 100644 --- a/src/Bundle/ChillActivityBundle/Resources/views/Activity/_list_item.html.twig +++ b/src/Bundle/ChillActivityBundle/Resources/views/Activity/_list_item.html.twig @@ -63,7 +63,7 @@ {% endif %} - {% if activity.user and t.userVisible %} + {% if activity.user is not null and t.userVisible %}

{{ 'Referrer'|trans }}

diff --git a/src/Bundle/ChillActivityBundle/Resources/views/Activity/concernedGroups.html.twig b/src/Bundle/ChillActivityBundle/Resources/views/Activity/concernedGroups.html.twig index 96cfef39b..48eb839d7 100644 --- a/src/Bundle/ChillActivityBundle/Resources/views/Activity/concernedGroups.html.twig +++ b/src/Bundle/ChillActivityBundle/Resources/views/Activity/concernedGroups.html.twig @@ -5,7 +5,7 @@ Maybe should we think about abstracting this file a bit more ? Moving it to PersonBundle ? #} -{% if context == 'calendar_accompanyingCourse' %} +{% if context == 'calendar_accompanyingCourse' or context == 'calendar_person' %} {% import "@ChillCalendar/_invite.html.twig" as invite %} {% endif %} diff --git a/src/Bundle/ChillActivityBundle/Resources/views/Activity/show.html.twig b/src/Bundle/ChillActivityBundle/Resources/views/Activity/show.html.twig index acda43b97..fca6a7658 100644 --- a/src/Bundle/ChillActivityBundle/Resources/views/Activity/show.html.twig +++ b/src/Bundle/ChillActivityBundle/Resources/views/Activity/show.html.twig @@ -34,10 +34,12 @@
-
{{ 'Referrer'|trans|capitalize }}
-
- {{ entity.user|chill_entity_render_box }} -
+ {%- if entity.user is not null %} +
{{ 'Referrer'|trans|capitalize }}
+
+ {{ entity.user|chill_entity_render_box }} +
+ {% endif %} {%- if entity.scope -%}
{{ 'Scope'|trans }}
diff --git a/src/Bundle/ChillActivityBundle/Tests/Controller/ActivityControllerTest.php b/src/Bundle/ChillActivityBundle/Tests/Controller/ActivityControllerTest.php index e689e205d..8e2c219f0 100644 --- a/src/Bundle/ChillActivityBundle/Tests/Controller/ActivityControllerTest.php +++ b/src/Bundle/ChillActivityBundle/Tests/Controller/ActivityControllerTest.php @@ -121,14 +121,14 @@ final class ActivityControllerTest extends WebTestCase $client->getResponse()->getStatusCode(), 'Unexpected HTTP status code for GET /activity/' ); - $crawler = $client->click($crawler->selectLink('Ajouter une nouvelle activité') + $crawler = $client->click($crawler->selectLink('Ajouter un nouvel échange') ->link()); $reason1 = $this->getRandomActivityReason(); $reason2 = $this->getRandomActivityReason([$reason1->getId()]); // Fill in the form and submit it - $form = $crawler->selectButton('Ajouter une nouvelle activité')->form([ + $form = $crawler->selectButton('Ajouter un nouvel échange')->form([ 'chill_activitybundle_activity' => [ 'date' => '15-01-2015', 'durationTime' => 600, @@ -152,9 +152,9 @@ final class ActivityControllerTest extends WebTestCase ); // Edit the entity - $crawler = $client->click($crawler->selectLink("Modifier l'activité")->link()); + $crawler = $client->click($crawler->selectLink("Modifier l'échange")->link()); - $form = $crawler->selectButton("Sauver l'activité")->form([ + $form = $crawler->selectButton("Sauver l'échange")->form([ 'chill_activitybundle_activity' => [ 'date' => '25-01-2015', // 'remark' => 'Foo' diff --git a/src/Bundle/ChillActivityBundle/Tests/Form/ActivityTypeTest.php b/src/Bundle/ChillActivityBundle/Tests/Form/ActivityTypeTest.php index b6cb6fc7b..df0a602a4 100644 --- a/src/Bundle/ChillActivityBundle/Tests/Form/ActivityTypeTest.php +++ b/src/Bundle/ChillActivityBundle/Tests/Form/ActivityTypeTest.php @@ -112,9 +112,9 @@ final class ActivityTypeTest extends KernelTestCase 'attendee' => true, ]]); -// var_dump($form->getErrors()->count()); var_dump($form->isValid()); -// foreach($form->getErrors() as $e) { fwrite(STDOUT, var_dump($e->getMessage())); } -// var_dump($form->getErrors()); + // var_dump($form->getErrors()->count()); var_dump($form->isValid()); + // foreach($form->getErrors() as $e) { fwrite(STDOUT, var_dump($e->getMessage())); } + // var_dump($form->getErrors()); $this->assertTrue($form->isSynchronized(), 'Test the form is synchronized'); $this->assertTrue($form->isValid(), 'test the form is valid'); diff --git a/src/Bundle/ChillActivityBundle/translations/messages.fr.yml b/src/Bundle/ChillActivityBundle/translations/messages.fr.yml index 2afb1779a..c90478785 100644 --- a/src/Bundle/ChillActivityBundle/translations/messages.fr.yml +++ b/src/Bundle/ChillActivityBundle/translations/messages.fr.yml @@ -1,41 +1,41 @@ #general -Show the activity: Voir l'activité -Edit the activity: Modifier l'activité -Activity: Activité +Show the activity: Voir l'échange +Edit the activity: Modifier l'échange +Activity: Échange Duration time: Durée Duration Time: Durée durationTime: durée Travel time: Durée de déplacement -Attendee: Présence de la personne -attendee: présence de la personne +Attendee: Présence de l'usager +attendee: présence de l'usager list_reasons: liste des sujets user_username: nom de l'utilisateur circle_name: nom du cercle Remark: Commentaire No comments: Aucun commentaire -Add a new activity: Ajouter une nouvelle activité -Activity list: Liste des activités +Add a new activity: Ajouter une nouvel échange +Activity list: Liste des échanges present: présent not present: absent Delete: Supprimer Update: Mettre à jour -Update activity: Modifier l'activité +Update activity: Modifier l'échange Scope: Cercle -Activity data: Données de l'activité -Activity location: Localisation de l'activité +Activity data: Données de l'échange +Activity location: Localisation de l'échange No reason associated: Aucun sujet No social issues associated: Aucune problématique sociale No social actions associated: Aucune action d'accompagnement -There isn't any activities.: Aucune activité enregistrée. -type_name: type de l'activité +There isn't any activities.: Aucun échange enregistré. +type_name: type de l'échange person_firstname: prénom person_lastname: nom de famille -person_id: identifiant de la personne +person_id: identifiant de l'usager Type: Type Invisible: Invisible Optional: Optionnel Required: Obligatoire -Persons: Personnes +Persons: Usagers Users: Utilisateurs Emergency: Urgent Sent received: Entrant / Sortant @@ -50,10 +50,10 @@ received: Reçu #forms -Activity creation: Nouvelle activité +Activity creation: Nouvel échange Create: Créer Back to the list: Retour à la liste -Save activity: Sauver l'activité +Save activity: Sauver l'échange Reset form: Remise à zéro du formulaire Choose the duration: Choisir la durée Choose a type: Choisir un type @@ -90,40 +90,40 @@ activity: No documents: Aucun document #timeline -'%user% has done an %activity_type%': '%user% a effectué une activité de type "%activity_type%"' +'%user% has done an %activity_type%': '%user% a effectué un échange de type "%activity_type%"' #controller -'Success : activity created!': L'activité a été créée. -'The form is not valid. The activity has not been created !': Le formulaire est invalide. L'activité n'a pas été créée. -'Success : activity updated!': L'activité a été mise à jour. -'The form is not valid. The activity has not been updated !': Le formulaire est invalide. L'activité n'a pas été mise à jour. +'Success : activity created!': L'échange a été créé. +'The form is not valid. The activity has not been created !': Le formulaire est invalide. L'échange n'a pas été créé. +'Success : activity updated!': L'échange a été mis à jour. +'The form is not valid. The activity has not been updated !': Le formulaire est invalide. L'échange n'a pas été mise à jour. # ROLES -CHILL_ACTIVITY_CREATE: Créer une activité -CHILL_ACTIVITY_UPDATE: Modifier une activité -CHILL_ACTIVITY_SEE: Voir une activité -CHILL_ACTIVITY_SEE_DETAILS: Voir le détail des activités -CHILL_ACTIVITY_DELETE: Supprimer une activité -CHILL_ACTIVITY_STATS: Statistique des activités -CHILL_ACTIVITY_LIST: Liste des activités +CHILL_ACTIVITY_CREATE: Créer un échange +CHILL_ACTIVITY_UPDATE: Modifier un échange +CHILL_ACTIVITY_SEE: Voir un échange +CHILL_ACTIVITY_SEE_DETAILS: Voir le détail des échanges +CHILL_ACTIVITY_DELETE: Supprimer un échange +CHILL_ACTIVITY_STATS: Statistique des échanges +CHILL_ACTIVITY_LIST: Liste des échanges # admin -Activities: Activités -Activity configuration: Configuration des activités -Activity configuration menu: Configuration des activités -Activity types: Types d'activité -Activity type configuration: Configuration des categories d'activités -Activity Reasons: Sujets d'une activité -Activity Reasons Category: Catégories de sujet d'activités -Activity Types Categories: Catégories des types d'activité -Activity Presences: Presences aux activités +Activities: Échanges +Activity configuration: Configuration des échanges +Activity configuration menu: Configuration des échanges +Activity types: Types d'échange +Activity type configuration: Configuration des catégories d'échanges +Activity Reasons: Sujets d'un échange +Activity Reasons Category: Catégories de sujet d'échanges +Activity Types Categories: Catégories des types d'échange +Activity Presences: Presences aux échanges Associated activity reason category is inactive: La catégorie de sujet attachée est inactive # Crud crud: activity_type: - title_new: Nouveau type d'activité + title_new: Nouveau type d'échange title_edit: Edition d'un type d'activité activity_type_category: title_new: Nouvelle catégorie de type d'activité @@ -159,8 +159,8 @@ Create a new activity presence: Créer une nouvelle "Présence aux activités" # activity type type admin ActivityType list: Types d'activités Create a new activity type: Créer un nouveau type d'activité -Persons visible: Visibilité du champ Personnes -Persons label: Libellé du champ Personnes +Persons visible: Visibilité du champ Usagers +Persons label: Libellé du champ Usagers User visible: Visibilité du champ Utilisateur User label: Libellé du champ Utilisateur Date visible: Visibilité du champ Date @@ -183,8 +183,8 @@ Private comment visible: Visibilité du champ Commentaire Privé Private comment label: Libellé du champ Commentaire Privé Emergency visible: Visibilité du champ Urgent Emergency label: Libellé du champ Urgent -Accompanying period visible: Visibilité du champ Période d'accompagnement -Accompanying period label: Libellé du champ Période d'accompagnement +Accompanying period visible: Visibilité du champ parcours d'accompagnement +Accompanying period label: Libellé du champ parcours d'accompagnement Social issues visible: Visibilité du champ Problématiques sociales Social issues label: Libellé du champ Problématiques sociales Social actions visible: Visibilité du champ Action sociale @@ -206,10 +206,10 @@ Are you sure you want to remove the activity about "%name%" ?: Êtes-vous sûr d The activity has been successfully removed.: L'activité a été supprimée. # exports -Exports of activities linked to a person: Exports des activités liées à une personne -Number of activities linked to a person: Nombre d'activités liées à une personne +Exports of activities linked to a person: Exports des activités liées à un usager +Number of activities linked to a person: Nombre d'activités liées à un usager Count activities linked to a person: Nombre d'activités -Count activities linked to a person by various parameters.: Compte le nombre d'activités enregistrées et liées à une personne en fonction de différents paramètres. +Count activities linked to a person by various parameters.: Compte le nombre d'activités enregistrées et liées à un usager en fonction de différents paramètres. Sum activity linked to a person duration: Durée des activités Sum activities linked to a person duration: Durée des activités liés à un usager Sum activities linked to a person duration by various parameters.: Additionne la durée des activités en fonction de différents paramètres. @@ -244,10 +244,10 @@ Activities before this date: Activités avant cette date "Filtered by date of activity: only between %date_from% and %date_to%": "Filtré par date de l'activité: uniquement entre %date_from% et %date_to%" This date should be after the date given in "Implied in an activity after this date" field: Cette date devrait être postérieure à la date donnée dans le champ "activités après cette date" -Filtered by person having an activity in a period: Uniquement les personnes ayant eu une activité dans la période donnée +Filtered by person having an activity in a period: Uniquement les usagers ayant eu une activité dans la période donnée Implied in an activity after this date: Impliqué dans une activité après cette date Implied in an activity before this date: Impliqué dans une activité avant cette date -Filtered by person having an activity between %date_from% and %date_to% with reasons %reasons_name%: Filtré par personnes associées à une activité entre %date_from% et %date_to% avec les sujets %reasons_name% +Filtered by person having an activity between %date_from% and %date_to% with reasons %reasons_name%: Filtré par usager associées à une activité entre %date_from% et %date_to% avec les sujets %reasons_name% Activity reasons for those activities: Sujets de ces activités Filter by activity type: Filtrer les activités par type @@ -338,8 +338,8 @@ export: users name: Nom des utilisateurs users ids: Identifiant des utilisateurs third parties ids: Identifiant des tiers - persons ids: Identifiant des personnes - persons name: Nom des personnes + persons ids: Identifiant des usagers + persons name: Nom des usagers thirds parties: Tiers date: Date de l'activité locationName: Localisation diff --git a/src/Bundle/ChillActivityBundle/translations/messages.nl.yaml b/src/Bundle/ChillActivityBundle/translations/messages.nl.yaml index dac37fc7d..c7dc05f2b 100644 --- a/src/Bundle/ChillActivityBundle/translations/messages.nl.yaml +++ b/src/Bundle/ChillActivityBundle/translations/messages.nl.yaml @@ -47,10 +47,10 @@ Reasons: Onderwerpen #forms -Activity creation: Nouvelle activité +Activity creation: Nouvel échange Create: Créer Back to the list: Retour à la liste -Save activity: Sauver l'activité +Save activity: Sauver l'échange Reset form: Remise à zéro du formulaire Choose the duration: Choisir la durée Choose a type: Choisir un type @@ -79,43 +79,43 @@ activity: No documents: Aucun document #timeline -'%user% has done an %activity_type%': '%user% a effectué une activité de type "%activity_type%"' +'%user% has done an %activity_type%': '%user% a effectué un échange de type "%activity_type%"' #controller -'Success : activity created!': L'activité a été créée. -'The form is not valid. The activity has not been created !': Le formulaire est invalide. L'activité n'a pas été créée. -'Success : activity updated!': L'activité a été mise à jour. -'The form is not valid. The activity has not been updated !': Le formulaire est invalide. L'activité n'a pas été mise à jour. +'Success : activity created!': L'échange a été créé. +'The form is not valid. The activity has not been created !': Le formulaire est invalide. L'échange n'a pas été créé. +'Success : activity updated!': L'échange a été mis à jour. +'The form is not valid. The activity has not been updated !': Le formulaire est invalide. L'échange n'a pas été mis à jour. # ROLES -CHILL_ACTIVITY_CREATE: Créer une activité -CHILL_ACTIVITY_UPDATE: Modifier une activité -CHILL_ACTIVITY_SEE: Voir une activité -CHILL_ACTIVITY_SEE_DETAILS: Voir le détail des activités -CHILL_ACTIVITY_DELETE: Supprimer une activité -CHILL_ACTIVITY_STATS: Statistique des activités -CHILL_ACTIVITY_LIST: Liste des activités +CHILL_ACTIVITY_CREATE: Créer un échange +CHILL_ACTIVITY_UPDATE: Modifier un échange +CHILL_ACTIVITY_SEE: Voir un échange +CHILL_ACTIVITY_SEE_DETAILS: Voir le détail des échanges +CHILL_ACTIVITY_DELETE: Supprimer un échange +CHILL_ACTIVITY_STATS: Statistique des échanges +CHILL_ACTIVITY_LIST: Liste des échanges # admin -Activities: Activités -Activity configuration: Configuration des activités -Activity configuration menu: Configuration des activités -Activity types: Types d'activité -Activity type configuration: Configuration des categories d'activités -Activity Reasons: Sujets d'une activité -Activity Reasons Category: Catégories de sujet d'activités -Activity Types Categories: Catégories des types d'activité -Activity Presences: Presences des activités +Activities: Échanges +Activity configuration: Configuration des échanges +Activity configuration menu: Configuration des échanges +Activity types: Types d'échange +Activity type configuration: Configuration des categories d'échanges +Activity Reasons: Sujets d'un échange +Activity Reasons Category: Catégories de sujet d'échanges +Activity Types Categories: Catégories des types d'échanges +Activity Presences: Presences des échanges # Crud crud: activity_type: - title_new: Nouveau type d'activité - title_edit: Edition d'un type d'activité + title_new: Nouveau type d'échange + title_edit: Edition d'un type d'échange activity_type_category: - title_new: Nouvelle catégorie de type d'activité - title_edit: Edition d'une catégorie de type d'activité + title_new: Nouvelle catégorie de type d'échange + title_edit: Edition d'une catégorie de type d'échange # activity reason admin ActivityReason list: Liste des sujets @@ -124,7 +124,7 @@ Active: Actif Category: Catégorie ActivityReason creation: Nouveau sujet ActivityReason edit: Modification d'un sujet -ActivityReason: Sujet d'activité +ActivityReason: Sujet d'échange The entity is inactive and won't be proposed: Le sujet est inactif et ne sera pas proposé The entity is active and will be proposed: Le sujet est actif et sera proposé @@ -133,13 +133,13 @@ ActivityReasonCategory list: Catégories de sujets Create a new activity category reason: Créer une nouvelle catégorie ActivityReasonCategory creation: Nouvelle catégorie de sujet ActivityReasonCategory edit: Modification d'une catégorie de sujet -ActivityReasonCategory: Catégorie de sujet d'activité +ActivityReasonCategory: Catégorie de sujet d'échange ActivityReasonCategory is active and will be proposed: La catégorie est active et sera proposée ActivityReasonCategory is inactive and won't be proposed: La catégorie est inactive et ne sera pas proposée # activity type type admin -ActivityType list: Types d'activités -Create a new activity type: Créer un nouveau type d'activité +ActivityType list: Types d'échanges +Create a new activity type: Créer un nouveau type d'échange Persons visible: Visibilité du champ Personnes Persons label: Libellé du champ Personnes User visible: Visibilité du champ Utilisateur @@ -177,20 +177,20 @@ Documents label: Libellé du champ Documents # activity type category admin ActivityTypeCategory list: Liste des catégories des types d'activité -Create a new activity type category: Créer une nouvelle catégorie de type d'activité +Create a new activity type category: Créer une nouvelle catégorie de type d'échange # activity delete -Remove activity: Supprimer une activité -Are you sure you want to remove the activity about "%name%" ?: Êtes-vous sûr de vouloir supprimer une activité qui concerne "%name%" ? -The activity has been successfully removed.: L'activité a été supprimée. +Remove activity: Supprimer un échange +Are you sure you want to remove the activity about "%name%" ?: Êtes-vous sûr de vouloir supprimer un échange qui concerne "%name%" ? +The activity has been successfully removed.: L'échange a été supprimée. # exports -Count activities: Nombre d'activités -Count activities by various parameters.: Compte le nombre d'activités enregistrées en fonction de différents paramètres. -Sum activity duration: Total de la durée des activités -Sum activities duration by various parameters.: Additionne la durée des activités en fonction de différents paramètres. -List activities: Liste les activités -Number of activities: Nombre d'activités +Count activities: Nombre d'échanges +Count activities by various parameters.: Compte le nombre d'échanges enregistrées en fonction de différents paramètres. +Sum activity duration: Total de la durée des échanges +Sum activities duration by various parameters.: Additionne la durée des échanges en fonction de différents paramètres. +List activities: Liste les échanges +Number of activities: Nombre d'échanges #filters Filter by reason: Filtrer par sujet d'activité diff --git a/src/Bundle/ChillActivityBundle/translations/validators.fr.yml b/src/Bundle/ChillActivityBundle/translations/validators.fr.yml index f2c104828..053752854 100644 --- a/src/Bundle/ChillActivityBundle/translations/validators.fr.yml +++ b/src/Bundle/ChillActivityBundle/translations/validators.fr.yml @@ -1,22 +1,22 @@ The reasons's level should not be empty: Le niveau du sujet ne peut pas être vide At least one reason must be choosen: Au moins un sujet doit être choisi -For this type of activity, you must add at least one person: Pour ce type d'activité, vous devez ajouter au moins un usager -For this type of activity, you must add at least one user: Pour ce type d'activité, vous devez ajouter au moins un utilisateur -For this type of activity, you must add at least one third party: Pour ce type d'activité, vous devez ajouter au moins un tiers -For this type of activity, user is required: Pour ce type d'activité, l'utilisateur est requis -For this type of activity, date is required: Pour ce type d'activité, la date est requise -For this type of activity, location is required: Pour ce type d'activité, la localisation est requise -For this type of activity, attendee is required: Pour ce type d'activité, le champ "Présence de la personne" est requis -For this type of activity, duration time is required: Pour ce type d'activité, la durée est requise -For this type of activity, travel time is required: Pour ce type d'activité, la durée du trajet est requise -For this type of activity, reasons is required: Pour ce type d'activité, le champ "sujet" est requis -For this type of activity, comment is required: Pour ce type d'activité, un commentaire est requis -For this type of activity, sent/received is required: Pour ce type d'activité, le champ Entrant/Sortant est requis -For this type of activity, document is required: Pour ce type d'activité, un document est requis -For this type of activity, emergency is required: Pour ce type d'activité, le champ "Urgent" est requis -For this type of activity, accompanying period is required: Pour ce type d'activité, le parcours d'accompagnement est requis -For this type of activity, you must add at least one social issue: Pour ce type d'activité, vous devez ajouter au moins une problématique sociale -For this type of activity, you must add at least one social action: Pour ce type d'activité, vous devez indiquer au moins une action sociale +For this type of activity, you must add at least one person: Pour ce type d'échange, vous devez ajouter au moins un usager +For this type of activity, you must add at least one user: Pour ce type d'échange, vous devez ajouter au moins un utilisateur +For this type of activity, you must add at least one third party: Pour ce type d'échange, vous devez ajouter au moins un tiers +For this type of activity, user is required: Pour ce type d'échange, l'utilisateur est requis +For this type of activity, date is required: Pour ce type d'échange, la date est requise +For this type of activity, location is required: Pour ce type d'échange, la localisation est requise +For this type of activity, attendee is required: Pour ce type d'échange, le champ "Présence de l'usager" est requis +For this type of activity, duration time is required: Pour ce type d'échange, la durée est requise +For this type of activity, travel time is required: Pour ce type d'échange, la durée du trajet est requise +For this type of activity, reasons is required: Pour ce type d'échange, le champ "sujet" est requis +For this type of activity, comment is required: Pour ce type d'échange, un commentaire est requis +For this type of activity, sent/received is required: Pour ce type d'échange, le champ Entrant/Sortant est requis +For this type of activity, document is required: Pour ce type d'échange, un document est requis +For this type of activity, emergency is required: Pour ce type d'échange, le champ "Urgent" est requis +For this type of activity, accompanying period is required: Pour ce type d'échange, le parcours d'accompagnement est requis +For this type of activity, you must add at least one social issue: Pour ce type d'échange, vous devez ajouter au moins une problématique sociale +For this type of activity, you must add at least one social action: Pour ce type d'échange, vous devez indiquer au moins une action sociale # admin This parameter must be equal to social issue parameter: Ce paramètre doit être égal au paramètre "Visibilité du champs Problématiques sociales" diff --git a/src/Bundle/ChillAsideActivityBundle/src/Export/Export/ListAsideActivity.php b/src/Bundle/ChillAsideActivityBundle/src/Export/Export/ListAsideActivity.php index 976f4171c..aee168174 100644 --- a/src/Bundle/ChillAsideActivityBundle/src/Export/Export/ListAsideActivity.php +++ b/src/Bundle/ChillAsideActivityBundle/src/Export/Export/ListAsideActivity.php @@ -160,8 +160,8 @@ final class ListAsideActivity implements ListInterface, GroupedExportInterface return 'export.aside_activity.main_center'; } - /** @var Center $c */ if (null === $value || '' === $value || null === $c = $this->centerRepository->find($value)) { + /** @var Center $c */ return ''; } @@ -190,10 +190,6 @@ final class ListAsideActivity implements ListInterface, GroupedExportInterface ]; } - /** - * @param QueryBuilder $query - * @param array $data - */ public function getResult($query, $data): array { return $query->getQuery()->getResult(AbstractQuery::HYDRATE_ARRAY); diff --git a/src/Bundle/ChillAsideActivityBundle/src/Form/AsideActivityFormType.php b/src/Bundle/ChillAsideActivityBundle/src/Form/AsideActivityFormType.php index c02e53c23..9a95a8d09 100644 --- a/src/Bundle/ChillAsideActivityBundle/src/Form/AsideActivityFormType.php +++ b/src/Bundle/ChillAsideActivityBundle/src/Form/AsideActivityFormType.php @@ -28,22 +28,17 @@ use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; use Symfony\Component\OptionsResolver\OptionsResolver; -use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use function in_array; final class AsideActivityFormType extends AbstractType { - private TokenStorageInterface $storage; - private array $timeChoices; public function __construct( ParameterBagInterface $parameterBag, - TokenStorageInterface $storage ) { $this->timeChoices = $parameterBag->get('chill_aside_activity.form.time_duration'); - $this->storage = $storage; } public function buildForm(FormBuilderInterface $builder, array $options) diff --git a/src/Bundle/ChillAsideActivityBundle/src/Menu/SectionMenuBuilder.php b/src/Bundle/ChillAsideActivityBundle/src/Menu/SectionMenuBuilder.php index d4ed7dbf9..f23fcdc8a 100644 --- a/src/Bundle/ChillAsideActivityBundle/src/Menu/SectionMenuBuilder.php +++ b/src/Bundle/ChillAsideActivityBundle/src/Menu/SectionMenuBuilder.php @@ -44,17 +44,6 @@ class SectionMenuBuilder implements LocalMenuBuilderInterface 'order' => 11, 'icons' => ['plus'], ]); - $menu->addChild($this->translator->trans('Phonecall'), [ - 'route' => 'chill_crud_aside_activity_new', - 'routeParameters' => [ - 'type' => 1, - 'duration' => 900, - ], - ]) - ->setExtras([ - 'order' => 12, - 'icons' => ['plus'], - ]); } } diff --git a/src/Bundle/ChillAsideActivityBundle/src/translations/messages.fr.yml b/src/Bundle/ChillAsideActivityBundle/src/translations/messages.fr.yml index 0c807479f..cc428390c 100644 --- a/src/Bundle/ChillAsideActivityBundle/src/translations/messages.fr.yml +++ b/src/Bundle/ChillAsideActivityBundle/src/translations/messages.fr.yml @@ -21,7 +21,7 @@ Type: Type Invisible: Invisible Optional: Optionnel Required: Obligatoire -Persons: Personnes +Persons: Usagers Users: Utilisateurs Emergency: Urgent by: "Par " @@ -50,7 +50,7 @@ For agent: Pour l'utilisateur date: Date Duration: Durée Note: Note -Choose the agent for whom this activity is created: Choisissez l'agent pour qui l'activité est créée +Choose the agent for whom this activity is created: Choisissez l'agent pour qui l'échange est créé Choose the activity category: Choisir la catégorie #Duration diff --git a/src/Bundle/ChillBudgetBundle/Controller/ElementController.php b/src/Bundle/ChillBudgetBundle/Controller/ElementController.php index 70730e5c9..b5db3cd30 100644 --- a/src/Bundle/ChillBudgetBundle/Controller/ElementController.php +++ b/src/Bundle/ChillBudgetBundle/Controller/ElementController.php @@ -33,27 +33,15 @@ class ElementController extends AbstractController { private CalculatorManager $calculator; - private LoggerInterface $chillMainLogger; - - private EntityManagerInterface $em; - private ResourceRepository $resourceRepository; private ChargeRepository $chargeRepository; - private TranslatorInterface $translator; - public function __construct( - EntityManagerInterface $em, - TranslatorInterface $translator, - LoggerInterface $chillMainLogger, CalculatorManager $calculator, ResourceRepository $resourceRepository, ChargeRepository $chargeRepository, ) { - $this->em = $em; - $this->translator = $translator; - $this->chillMainLogger = $chillMainLogger; $this->calculator = $calculator; $this->resourceRepository = $resourceRepository; $this->chargeRepository = $chargeRepository; diff --git a/src/Bundle/ChillBudgetBundle/Repository/ChargeKindRepository.php b/src/Bundle/ChillBudgetBundle/Repository/ChargeKindRepository.php index 01f5cd737..9aaf68ddf 100644 --- a/src/Bundle/ChillBudgetBundle/Repository/ChargeKindRepository.php +++ b/src/Bundle/ChillBudgetBundle/Repository/ChargeKindRepository.php @@ -30,7 +30,7 @@ final class ChargeKindRepository implements ChargeKindRepositoryInterface } /** - * @return ChargeType[] + * @return array */ public function findAll(): array { @@ -38,7 +38,7 @@ final class ChargeKindRepository implements ChargeKindRepositoryInterface } /** - * @return ChargeType[] + * @return array */ public function findAllActive(): array { @@ -53,7 +53,7 @@ final class ChargeKindRepository implements ChargeKindRepositoryInterface } /** - * @return ChargeType[] + * @return array */ public function findAllByType(string $type): array { @@ -64,7 +64,7 @@ final class ChargeKindRepository implements ChargeKindRepositoryInterface * @param mixed|null $limit * @param mixed|null $offset * - * @return ChargeType[] + * @return array */ public function findBy(array $criteria, ?array $orderBy = null, ?int $limit = null, ?int $offset = null): array { diff --git a/src/Bundle/ChillBudgetBundle/Repository/ChargeKindRepositoryInterface.php b/src/Bundle/ChillBudgetBundle/Repository/ChargeKindRepositoryInterface.php index fb8c9dc35..f92851eba 100644 --- a/src/Bundle/ChillBudgetBundle/Repository/ChargeKindRepositoryInterface.php +++ b/src/Bundle/ChillBudgetBundle/Repository/ChargeKindRepositoryInterface.php @@ -19,25 +19,25 @@ interface ChargeKindRepositoryInterface extends ObjectRepository public function find($id): ?ChargeKind; /** - * @return ChargeType[] + * @return array */ public function findAll(): array; /** - * @return ChargeType[] + * @return array */ public function findAllActive(): array; /** - * @return ChargeType[] + * @return array */ public function findAllByType(string $type): array; /** - * @param mixed|null $limit - * @param mixed|null $offset + * @param int|null $limit + * @param int|null $offset * - * @return ChargeType[] + * @return array */ public function findBy(array $criteria, ?array $orderBy = null, ?int $limit = null, ?int $offset = null): array; diff --git a/src/Bundle/ChillBudgetBundle/Repository/ResourceKindRepository.php b/src/Bundle/ChillBudgetBundle/Repository/ResourceKindRepository.php index 42e5418fc..1f9f99753 100644 --- a/src/Bundle/ChillBudgetBundle/Repository/ResourceKindRepository.php +++ b/src/Bundle/ChillBudgetBundle/Repository/ResourceKindRepository.php @@ -30,7 +30,7 @@ final class ResourceKindRepository implements ResourceKindRepositoryInterface } /** - * @return ResourceType[] + * @return list */ public function findAll(): array { @@ -38,7 +38,7 @@ final class ResourceKindRepository implements ResourceKindRepositoryInterface } /** - * @return ResourceType[] + * @return list */ public function findAllActive(): array { @@ -58,7 +58,7 @@ final class ResourceKindRepository implements ResourceKindRepositoryInterface } /** - * @return ResourceType[] + * @return list */ public function findAllByType(string $type): array { @@ -69,7 +69,7 @@ final class ResourceKindRepository implements ResourceKindRepositoryInterface * @param mixed|null $limit * @param mixed|null $offset * - * @return ResourceType[] + * @return list */ public function findBy(array $criteria, ?array $orderBy = null, ?int $limit = null, ?int $offset = null): array { diff --git a/src/Bundle/ChillBudgetBundle/Repository/ResourceKindRepositoryInterface.php b/src/Bundle/ChillBudgetBundle/Repository/ResourceKindRepositoryInterface.php index 658a87a3d..dac46ff35 100644 --- a/src/Bundle/ChillBudgetBundle/Repository/ResourceKindRepositoryInterface.php +++ b/src/Bundle/ChillBudgetBundle/Repository/ResourceKindRepositoryInterface.php @@ -19,25 +19,25 @@ interface ResourceKindRepositoryInterface extends ObjectRepository public function find($id): ?ResourceKind; /** - * @return ResourceType[] + * @return list */ public function findAll(): array; /** - * @return ResourceType[] + * @return list */ public function findAllActive(): array; /** - * @return ResourceType[] + * @return list */ public function findAllByType(string $type): array; /** - * @param mixed|null $limit - * @param mixed|null $offset + * @param int|null $limit + * @param int|null $offset * - * @return ResourceType[] + * @return list */ public function findBy(array $criteria, ?array $orderBy = null, ?int $limit = null, ?int $offset = null): array; diff --git a/src/Bundle/ChillBudgetBundle/translations/messages.fr.yml b/src/Bundle/ChillBudgetBundle/translations/messages.fr.yml index b20477150..a5e5490a0 100644 --- a/src/Bundle/ChillBudgetBundle/translations/messages.fr.yml +++ b/src/Bundle/ChillBudgetBundle/translations/messages.fr.yml @@ -29,7 +29,7 @@ End of validity period: Fin de la période de validité Total: Total Create new resource: Créer une nouvelle ressource Create new charge: Créer une nouvelle charge -See person: Voir personne +See person: Voir usagers There isn't any element recorded: Aucun élément enregistré No resources registered: Aucune ressource enregistrée diff --git a/src/Bundle/ChillCalendarBundle/Controller/CalendarController.php b/src/Bundle/ChillCalendarBundle/Controller/CalendarController.php index 550c6e984..eed693451 100644 --- a/src/Bundle/ChillCalendarBundle/Controller/CalendarController.php +++ b/src/Bundle/ChillCalendarBundle/Controller/CalendarController.php @@ -207,6 +207,7 @@ class CalendarController extends AbstractController 'entityClassName' => Calendar::class, 'entityId' => $entity->getId(), 'template' => $template->getId(), + 'returnPath' => $request->getRequestUri(), ]); } } @@ -377,7 +378,9 @@ class CalendarController extends AbstractController $this->addFlash('success', $this->translator->trans('Success : calendar item created!')); if ($form->get('save_and_upload_doc')->isClicked()) { - return $this->redirectToRoute('chill_calendar_calendardoc_new', ['id' => $entity->getId()]); + return $this->redirectToRoute('chill_calendar_calendardoc_new', [ + 'id' => $entity->getId() + ]); } foreach ($templates as $template) { @@ -386,6 +389,7 @@ class CalendarController extends AbstractController 'entityClassName' => Calendar::class, 'entityId' => $entity->getId(), 'template' => $template->getId(), + 'returnPath' => $this->generateUrl('chill_calendar_calendar_edit', ['id' => $entity->getId()]), ]); } } @@ -526,14 +530,20 @@ class CalendarController extends AbstractController 'comment' => $calendar->getComment()->getComment(), ]; - return $this->redirectToRoute( - 'chill_activity_activity_new', - [ - 'accompanying_period_id' => $calendar->getAccompanyingPeriod()->getId(), - 'activityData' => $activityData, - 'returnPath' => $request->query->get('returnPath', null), - ] - ); + $routeParams = [ + 'activityData' => $activityData, + 'returnPath' => $request->query->get('returnPath', null), + ]; + + if ($calendar->getContext() === 'accompanying_period') { + $routeParams['accompanying_period_id'] = $calendar->getAccompanyingPeriod()->getId(); + } elseif ($calendar->getContext() === 'person') { + $routeParams['person_id'] = $calendar->getPerson()->getId(); + } else { + throw new RuntimeException('context not found for this calendar'); + } + + return $this->redirectToRoute('chill_activity_activity_new', $routeParams); } private function buildListFilterOrder(): FilterOrderHelper @@ -544,21 +554,6 @@ class CalendarController extends AbstractController return $filterOrder->build(); } - private function buildParamsToUrl(?User $user, ?AccompanyingPeriod $accompanyingPeriod): array - { - $params = []; - - if (null !== $user) { - $params['user_id'] = $user->getId(); - } - - if (null !== $accompanyingPeriod) { - $params['id'] = $accompanyingPeriod->getId(); - } - - return $params; - } - /** * Creates a form to delete a Calendar entity by id. */ diff --git a/src/Bundle/ChillCalendarBundle/Entity/Calendar.php b/src/Bundle/ChillCalendarBundle/Entity/Calendar.php index 56373ca17..d7f38adf0 100644 --- a/src/Bundle/ChillCalendarBundle/Entity/Calendar.php +++ b/src/Bundle/ChillCalendarBundle/Entity/Calendar.php @@ -29,6 +29,7 @@ use DateTimeImmutable; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\Common\Collections\Criteria; +use Doctrine\Common\Collections\ReadableCollection; use Doctrine\ORM\Mapping as ORM; use LogicException; use Symfony\Component\Serializer\Annotation as Serializer; @@ -92,6 +93,7 @@ class Calendar implements TrackCreationInterface, TrackUpdateInterface, HasCente /** * @ORM\ManyToOne(targetEntity="Chill\PersonBundle\Entity\AccompanyingPeriod", inversedBy="calendars") + * @Serializer\Groups({"calendar:read", "read"}) */ private ?AccompanyingPeriod $accompanyingPeriod = null; @@ -507,10 +509,10 @@ class Calendar implements TrackCreationInterface, TrackUpdateInterface, HasCente } /** - * @return Collection|User[] + * @return ReadableCollection<(int|string), User> * @Serializer\Groups({"calendar:read", "read"}) */ - public function getUsers(): Collection + public function getUsers(): ReadableCollection { return $this->getInvites()->map(static function (Invite $i) { return $i->getUser(); diff --git a/src/Bundle/ChillCalendarBundle/Export/Export/CountCalendars.php b/src/Bundle/ChillCalendarBundle/Export/Export/CountCalendars.php index 06d6defca..f3bf79547 100644 --- a/src/Bundle/ChillCalendarBundle/Export/Export/CountCalendars.php +++ b/src/Bundle/ChillCalendarBundle/Export/Export/CountCalendars.php @@ -52,7 +52,7 @@ class CountCalendars implements ExportInterface, GroupedExportInterface return 'Exports of calendar'; } - public function getLabels($key, array $values, $data): Closure + public function getLabels($key, array $values, $data) { if ('export_result' !== $key) { throw new LogicException("the key {$key} is not used by this export"); diff --git a/src/Bundle/ChillCalendarBundle/Form/CalendarDocEditType.php b/src/Bundle/ChillCalendarBundle/Form/CalendarDocEditType.php index 26a9d59e2..34a501028 100644 --- a/src/Bundle/ChillCalendarBundle/Form/CalendarDocEditType.php +++ b/src/Bundle/ChillCalendarBundle/Form/CalendarDocEditType.php @@ -26,9 +26,6 @@ class CalendarDocEditType extends AbstractType ->add('title', TextType::class, [ 'label' => 'chill_calendar.Document title', 'required' => true, - ]) - ->add('doc', StoredObjectType::class, [ - 'label' => 'chill_calendar.Document object', ]); } diff --git a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/App.vue b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/App.vue index 32b6b569b..e09175a4b 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/App.vue +++ b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/App.vue @@ -15,6 +15,7 @@ :picked="null !== this.$store.getters.getMainUser ? [this.$store.getters.getMainUser] : []" :removableIfSet="false" :displayPicked="false" + :suggested="this.suggestedUsers" @addNewEntity="setMainUser" >
@@ -143,6 +144,7 @@ export default { slotMinTime: '09:00:00', slotMaxTime: '18:00:00', hideWeekEnds: true, + previousUser: [], } }, computed: { @@ -188,11 +190,23 @@ export default { users.push(this.$store.getters.getUserDataById(id).user); } return users; - } + }, + suggestedUsers() { + const suggested = []; + + this.$data.previousUser.forEach(u => { + if (u.id !== this.$store.getters.getMainUser.id) { + suggested.push(u) + } + }); + + return suggested; + }, }, methods: { - setMainUser(user) { - console.log('setMainUser APP', user); + setMainUser({entity}) { + const user = entity; + console.log('setMainUser APP', entity); if (user.id !== this.$store.getters.getMainUser && ( this.$store.state.activity.calendarRange !== null @@ -205,6 +219,14 @@ export default { } } + // add the previous user, if any, in the previous user list (in use for suggestion) + if (null !== this.$store.getters.getMainUser) { + const suggestedUids = new Set(this.$data.previousUser.map(u => u.id)); + if (!suggestedUids.has(this.$store.getters.getMainUser.id)){ + this.$data.previousUser.push(this.$store.getters.getMainUser); + } + } + this.$store.dispatch('setMainUser', user); this.$store.commit('showUserOnCalendar', {user, ranges: true, remotes: true}); }, diff --git a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/store/actions.js b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/store/actions.js index 1568944db..0e4d91afc 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/store/actions.js +++ b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/store/actions.js @@ -202,6 +202,8 @@ export default { return dispatch('associateCalendarToRange', { range: null }).then(() => { commit('setMainUser', mainUser); + + return dispatch('fetchCalendarEvents'); }); }, diff --git a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/store/utils.ts b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/store/utils.ts index 04ca26726..e9b24a1f0 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/store/utils.ts +++ b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/store/utils.ts @@ -54,7 +54,7 @@ export const mapEntity = (entity: EventInput): EventInput => { export const createUserData = (user: User, colorIndex: number): UserData => { const colorId = colorIndex % COLORS.length; - console.log('colorId', colorId); + return { user: user, calendarRanges: [], diff --git a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue index fb17ba141..1d353baed 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue +++ b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue @@ -1,7 +1,7 @@ @@ -133,7 +133,7 @@ v-bind:insideModal="false" @getCities="getCities" @getReferenceAddresses="getReferenceAddresses"> - + - +
@@ -206,7 +206,7 @@ v-bind:flag="this.flag" v-bind:insideModal="false" ref="dateAddress"> - + - +
@@ -580,15 +580,15 @@ export default { this.entity.selected.city = this.context.edit ? this.entity.address.postcode : {}; this.entity.selected.address = {}; - this.entity.selected.address.street = this.context.edit ? this.entity.address.street: null; - this.entity.selected.address.streetNumber = this.context.edit ? this.entity.address.streetNumber: null; - this.entity.selected.address.floor = this.context.edit ? this.entity.address.floor: null; - this.entity.selected.address.corridor = this.context.edit ? this.entity.address.corridor: null; - this.entity.selected.address.steps = this.context.edit ? this.entity.address.steps: null; - this.entity.selected.address.flat = this.context.edit ? this.entity.address.flat: null; - this.entity.selected.address.buildingName = this.context.edit ? this.entity.address.buildingName: null; - this.entity.selected.address.distribution = this.context.edit ? this.entity.address.distribution: null; - this.entity.selected.address.extra = this.context.edit ? this.entity.address.extra: null; + this.entity.selected.address.street = this.context.edit ? this.entity.address.street: ''; + this.entity.selected.address.streetNumber = this.context.edit ? this.entity.address.streetNumber: ''; + this.entity.selected.address.floor = this.context.edit ? this.entity.address.floor: ''; + this.entity.selected.address.corridor = this.context.edit ? this.entity.address.corridor: ''; + this.entity.selected.address.steps = this.context.edit ? this.entity.address.steps: ''; + this.entity.selected.address.flat = this.context.edit ? this.entity.address.flat: ''; + this.entity.selected.address.buildingName = this.context.edit ? this.entity.address.buildingName: ''; + this.entity.selected.address.distribution = this.context.edit ? this.entity.address.distribution: ''; + this.entity.selected.address.extra = this.context.edit ? this.entity.address.extra: ''; this.entity.selected.writeNew.address = this.context.edit && this.entity.address.addressReference === null && this.entity.address.street.length > 0 this.entity.selected.writeNew.postcode = false // NB: this used to be this.context.edit, but think it was erroneous; diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressDetailsButton.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressDetailsButton.vue new file mode 100644 index 000000000..7e060de4c --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressDetailsButton.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressDetailsContent.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressDetailsContent.vue new file mode 100644 index 000000000..3f6495b0a --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressDetailsContent.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressModal.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressModal.vue new file mode 100644 index 000000000..6b341d861 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressModal.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/Parts/AddressDetailsGeographicalLayers.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/Parts/AddressDetailsGeographicalLayers.vue new file mode 100644 index 000000000..179bed113 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/Parts/AddressDetailsGeographicalLayers.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/Parts/AddressDetailsMap.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/Parts/AddressDetailsMap.vue new file mode 100644 index 000000000..fd652a5f9 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/Parts/AddressDetailsMap.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/Parts/AddressDetailsRefMatching.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/Parts/AddressDetailsRefMatching.vue new file mode 100644 index 000000000..cbeb9e9e9 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/Parts/AddressDetailsRefMatching.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/Entity/AddressRenderBox.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/Entity/AddressRenderBox.vue index 2e88bc1cb..14a376856 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/Entity/AddressRenderBox.vue +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/Entity/AddressRenderBox.vue @@ -11,17 +11,18 @@

{{ l }}

+

-

{{ address.text }}

-

{{ address.postcode.code }} {{ address.postcode.name }}

-

{{ address.country.name.fr }}

@@ -35,11 +36,12 @@

{{ l }}

+

- {{ address.text }} + {{ address.text }}

@@ -65,11 +67,13 @@ diff --git a/src/Bundle/ChillPersonBundle/Resources/views/PersonDuplicate/_sidepane.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/PersonDuplicate/_sidepane.html.twig index f7fef7f93..660fff7a6 100644 --- a/src/Bundle/ChillPersonBundle/Resources/views/PersonDuplicate/_sidepane.html.twig +++ b/src/Bundle/ChillPersonBundle/Resources/views/PersonDuplicate/_sidepane.html.twig @@ -36,7 +36,7 @@ {%- macro links(person, options) -%}