Add context for household member editor form:

* add context for accompanying period, if indicated in a query
parameter;
* expand automatically household suggestion, if indicated in a query
parameter
This commit is contained in:
Julien Fastré 2021-06-28 11:23:30 +02:00
parent 9aa3974071
commit cd6b5c9a39
6 changed files with 65 additions and 7 deletions

View File

@ -3,6 +3,7 @@
namespace Chill\PersonBundle\Controller; namespace Chill\PersonBundle\Controller;
use Chill\PersonBundle\Entity\Household\Position; use Chill\PersonBundle\Entity\Household\Position;
use Chill\PersonBundle\Repository\AccompanyingPeriodRepository;
use Chill\PersonBundle\Security\Authorization\PersonVoter; use Chill\PersonBundle\Security\Authorization\PersonVoter;
use Chill\PersonBundle\Entity\Person; use Chill\PersonBundle\Entity\Person;
use Chill\PersonBundle\Entity\Household\Household; use Chill\PersonBundle\Entity\Household\Household;
@ -25,11 +26,17 @@ class HouseholdMemberController extends ApiController
private TranslatorInterface $translator; private TranslatorInterface $translator;
private AccompanyingPeriodRepository $periodRepository;
public function __construct(UrlGeneratorInterface $generator, TranslatorInterface $translator) public function __construct(
UrlGeneratorInterface $generator,
TranslatorInterface $translator,
AccompanyingPeriodRepository $periodRepository
)
{ {
$this->generator = $generator; $this->generator = $generator;
$this->translator = $translator; $this->translator = $translator;
$this->periodRepository = $periodRepository;
} }
/** /**
@ -144,8 +151,23 @@ class HouseholdMemberController extends ApiController
'allowLeaveWithoutHousehold' => $allowLeaveWithoutHousehold ?? $request->query->has('allow_leave_without_household'), 'allowLeaveWithoutHousehold' => $allowLeaveWithoutHousehold ?? $request->query->has('allow_leave_without_household'),
]; ];
// context
if ($request->query->has('accompanying_period_id')) {
$period = $this->periodRepository->find(
$request->query->getInt('accompanying_period_id')
);
if ($period === null) {
throw $this->createNotFoundException('period not found');
}
// TODO add acl on accompanying Course
}
return $this->render('@ChillPerson/Household/members_editor.html.twig', [ return $this->render('@ChillPerson/Household/members_editor.html.twig', [
'data' => $data 'data' => $data,
'expandSuggestions' => (int) $request->query->getBoolean('expand_suggestions', false),
'accompanyingCourse' => $period ?? null,
]); ]);
} }

View File

@ -25,8 +25,9 @@ namespace Chill\PersonBundle\Repository;
use Chill\PersonBundle\Entity\AccompanyingPeriod; use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository; use Doctrine\ORM\EntityRepository;
use Doctrine\Persistence\ObjectRepository;
final class AccompanyingPeriodRepository final class AccompanyingPeriodRepository implements ObjectRepository
{ {
private EntityRepository $repository; private EntityRepository $repository;
@ -34,4 +35,32 @@ final class AccompanyingPeriodRepository
{ {
$this->repository = $entityManager->getRepository(AccompanyingPeriod::class); $this->repository = $entityManager->getRepository(AccompanyingPeriod::class);
} }
public function find($id): ?AccompanyingPeriod
{
return $this->repository->find($id);
}
/**
* @return AccompanyingPeriod[]
*/
public function findAll(): array
{
return $this->repository->findAll();
}
public function findBy(array $criteria, ?array $orderBy = null, $limit = null, $offset = null): ?AccompanyingPeriod
{
return $this->repository->findBy($criteria, $orderBy, $limit, $offset);
}
public function findOneBy(array $criteria): ?AccompanyingPeriod
{
return $this->findOneBy($criteria);
}
public function getClassName()
{
return AccompanyingPeriod::class;
}
} }

View File

@ -5,7 +5,7 @@ const appMessages = {
fr: { fr: {
household_members_editor: { household_members_editor: {
household: { household: {
no_household_choose_one: "Aucun ménage de destination. Choisissez un ménage.", no_household_choose_one: "Aucun ménage de destination. Choisissez un ménage. Les usagers concernés par la modification apparaitront ensuite.",
new_household: "Nouveau ménage", new_household: "Nouveau ménage",
create_household: "Créer un ménage", create_household: "Créer un ménage",
search_household: "Chercher un ménage", search_household: "Chercher un ménage",

View File

@ -14,6 +14,8 @@ const concerned = window.household_members_editor_data.persons.map(p => {
}; };
}); });
console.log('expand suggestions', window.household_members_editor_expand_suggestions === 1);
const store = createStore({ const store = createStore({
strict: debug, strict: debug,
state: { state: {
@ -34,7 +36,7 @@ const store = createStore({
allowLeaveWithoutHousehold: window.household_members_editor_data.allowLeaveWithoutHousehold, allowLeaveWithoutHousehold: window.household_members_editor_data.allowLeaveWithoutHousehold,
forceLeaveWithoutHousehold: false, forceLeaveWithoutHousehold: false,
householdSuggestionByAccompanyingPeriod: [], householdSuggestionByAccompanyingPeriod: [],
showHouseholdSuggestion: false, showHouseholdSuggestion: window.household_members_editor_expand_suggestions === 1,
warnings: [], warnings: [],
errors: [] errors: []
}, },

View File

@ -39,12 +39,15 @@
<ul> <ul>
{% for p in withoutHousehold %} {% for p in withoutHousehold %}
<li> <li>
<input type="checkbox" name="persons[]" value="{{ p.id }}" /> <input type="checkbox" name="persons[]" value="{{ p.id }}" checked />
{{ p|chill_entity_render_box }} {{ p|chill_entity_render_box }}
</li> </li>
{% endfor %} {% endfor %}
</ul> </ul>
<input type="hidden" name="expand_suggestions" value="true" />
<input type="hidden" name="accompanying_period_id", value="{{ accompanyingCourse.id }}" />
<ul class="record_actions"> <ul class="record_actions">
<li> <li>
<button type="submit" class="sc-button bt-edit"> <button type="submit" class="sc-button bt-edit">

View File

@ -1,4 +1,5 @@
{% extends '@ChillMain/layout.html.twig' %} {% extends accompanyingCourse != null ? '@ChillPerson/AccompanyingCourse/layout.html.twig'
: '@ChillMain/layout.html.twig' %}
{% block title 'household.Edit household members'|trans %} {% block title 'household.Edit household members'|trans %}
@ -14,6 +15,7 @@
{% block js %} {% block js %}
<script type="text/javascript"> <script type="text/javascript">
window.household_members_editor_data = {{ data|json_encode|raw }}; window.household_members_editor_data = {{ data|json_encode|raw }};
window.household_members_editor_expand_suggestions = {{ expandSuggestions }};
</script> </script>
{{ encore_entry_script_tags('household_members_editor') }} {{ encore_entry_script_tags('household_members_editor') }}
{% endblock %} {% endblock %}