Feature: [Calendar doc] Pick document to generate inside the edit/new form

This commit is contained in:
Julien Fastré 2022-11-29 15:27:36 +01:00
parent be5f87348b
commit e97a04ab54
Signed by: julienfastre
GPG Key ID: BDE2190974723FCB
3 changed files with 83 additions and 12 deletions

View File

@ -22,6 +22,7 @@ use Chill\MainBundle\Pagination\PaginatorFactory;
use Chill\MainBundle\Repository\UserRepositoryInterface; use Chill\MainBundle\Repository\UserRepositoryInterface;
use Chill\MainBundle\Templating\Listing\FilterOrderHelper; use Chill\MainBundle\Templating\Listing\FilterOrderHelper;
use Chill\MainBundle\Templating\Listing\FilterOrderHelperFactoryInterface; use Chill\MainBundle\Templating\Listing\FilterOrderHelperFactoryInterface;
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
use Chill\PersonBundle\Entity\AccompanyingPeriod; use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\Person; use Chill\PersonBundle\Entity\Person;
use Chill\PersonBundle\Repository\AccompanyingPeriodRepository; use Chill\PersonBundle\Repository\AccompanyingPeriodRepository;
@ -64,6 +65,8 @@ class CalendarController extends AbstractController
private SerializerInterface $serializer; private SerializerInterface $serializer;
private TranslatableStringHelperInterface $translatableStringHelper;
private UserRepositoryInterface $userRepository; private UserRepositoryInterface $userRepository;
public function __construct( public function __construct(
@ -74,6 +77,7 @@ class CalendarController extends AbstractController
PaginatorFactory $paginator, PaginatorFactory $paginator,
RemoteCalendarConnectorInterface $remoteCalendarConnector, RemoteCalendarConnectorInterface $remoteCalendarConnector,
SerializerInterface $serializer, SerializerInterface $serializer,
TranslatableStringHelperInterface $translatableStringHelper,
PersonRepository $personRepository, PersonRepository $personRepository,
AccompanyingPeriodRepository $accompanyingPeriodRepository, AccompanyingPeriodRepository $accompanyingPeriodRepository,
UserRepositoryInterface $userRepository UserRepositoryInterface $userRepository
@ -85,6 +89,7 @@ class CalendarController extends AbstractController
$this->paginator = $paginator; $this->paginator = $paginator;
$this->remoteCalendarConnector = $remoteCalendarConnector; $this->remoteCalendarConnector = $remoteCalendarConnector;
$this->serializer = $serializer; $this->serializer = $serializer;
$this->translatableStringHelper = $translatableStringHelper;
$this->personRepository = $personRepository; $this->personRepository = $personRepository;
$this->accompanyingPeriodRepository = $accompanyingPeriodRepository; $this->accompanyingPeriodRepository = $accompanyingPeriodRepository;
$this->userRepository = $userRepository; $this->userRepository = $userRepository;
@ -170,8 +175,13 @@ class CalendarController extends AbstractController
$form = $this->createForm(CalendarType::class, $entity) $form = $this->createForm(CalendarType::class, $entity)
->add('save', SubmitType::class); ->add('save', SubmitType::class);
if (0 < $this->docGeneratorTemplateRepository->countByEntity(Calendar::class)) { $form->add('save_and_upload_doc', SubmitType::class);
$form->add('save_and_create_doc', SubmitType::class); $templates = $this->docGeneratorTemplateRepository->findByEntity(Calendar::class);
foreach ($templates as $template) {
$form->add('save_and_generate_doc_' . $template->getId(), SubmitType::class, [
'label' => $this->translatableStringHelper->localize($template->getName()),
]);
} }
$form->handleRequest($request); $form->handleRequest($request);
@ -181,8 +191,18 @@ class CalendarController extends AbstractController
$this->addFlash('success', $this->get('translator')->trans('Success : calendar item updated!')); $this->addFlash('success', $this->get('translator')->trans('Success : calendar item updated!'));
if ($form->get('save_and_create_doc')->isClicked()) { if ($form->get('save_and_upload_doc')->isClicked()) {
return $this->redirectToRoute('chill_calendar_calendardoc_pick_template', ['id' => $entity->getId()]); return $this->redirectToRoute('chill_calendar_calendardoc_new', ['id' => $entity->getId()]);
}
foreach ($templates as $template) {
if ($form->get('save_and_generate_doc_' . $template->getId())->isClicked()) {
return $this->redirectToRoute('chill_docgenerator_generate_from_template', [
'entityClassName' => Calendar::class,
'entityId' => $entity->getId(),
'template' => $template->getId(),
]);
}
} }
return new RedirectResponse($redirectRoute); return new RedirectResponse($redirectRoute);
@ -200,6 +220,7 @@ class CalendarController extends AbstractController
'accompanyingCourse' => $entity->getAccompanyingPeriod(), 'accompanyingCourse' => $entity->getAccompanyingPeriod(),
'person' => $entity->getPerson(), 'person' => $entity->getPerson(),
'entity_json' => $entity_array, 'entity_json' => $entity_array,
'templates' => $templates,
]); ]);
} }
@ -330,8 +351,13 @@ class CalendarController extends AbstractController
$form = $this->createForm(CalendarType::class, $entity) $form = $this->createForm(CalendarType::class, $entity)
->add('save', SubmitType::class); ->add('save', SubmitType::class);
if (0 < $this->docGeneratorTemplateRepository->countByEntity(Calendar::class)) { $templates = $this->docGeneratorTemplateRepository->findByEntity(Calendar::class);
$form->add('save_and_create_doc', SubmitType::class); $form->add('save_and_upload_doc', SubmitType::class);
foreach ($templates as $template) {
$form->add('save_and_generate_doc_' . $template->getId(), SubmitType::class, [
'label' => $this->translatableStringHelper->localize($template->getName()),
]);
} }
$form->handleRequest($request); $form->handleRequest($request);
@ -342,8 +368,18 @@ class CalendarController extends AbstractController
$this->addFlash('success', $this->get('translator')->trans('Success : calendar item created!')); $this->addFlash('success', $this->get('translator')->trans('Success : calendar item created!'));
if ($form->get('save_and_create_doc')->isClicked()) { if ($form->get('save_and_upload_doc')->isClicked()) {
return $this->redirectToRoute('chill_calendar_calendardoc_pick_template', ['id' => $entity->getId()]); return $this->redirectToRoute('chill_calendar_calendardoc_new', ['id' => $entity->getId()]);
}
foreach ($templates as $template) {
if ($form->get('save_and_generate_doc_' . $template->getId())->isClicked()) {
return $this->redirectToRoute('chill_docgenerator_generate_from_template', [
'entityClassName' => Calendar::class,
'entityId' => $entity->getId(),
'template' => $template->getId(),
]);
}
} }
return new RedirectResponse($redirectRoute); return new RedirectResponse($redirectRoute);
@ -366,6 +402,7 @@ class CalendarController extends AbstractController
'entity' => $entity, 'entity' => $entity,
'form' => $form->createView(), 'form' => $form->createView(),
'entity_json' => $entity_array, 'entity_json' => $entity_array,
'templates' => $templates,
]); ]);
} }

View File

@ -77,9 +77,26 @@
{{ 'Cancel'|trans|chill_return_path_label }} {{ 'Cancel'|trans|chill_return_path_label }}
</a> </a>
</li> </li>
{% if form.save_and_create_doc is defined %} {% if templates|length == 0 %}
<li> <li>
{{ form_widget(form.save_and_create_doc, { 'attr' : { 'class' : 'btn btn-create' }, 'label': 'chill_calendar.Save and add a document'|trans }) }} {{ form_widget(form.save_and_upload_doc, { 'attr' : { 'class' : 'btn btn-create' }, 'label': 'chill_calendar.Create and add a document'|trans }) }}
</li>
{% else %}
<li>
<div class="dropdown">
<button class="btn btn-create dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
{{ 'chill_calendar.Add a document'|trans }}
</button>
<ul class="dropdown-menu">
<li>
{{ form_widget(form.save_and_upload_doc, { 'attr' : { 'class' : 'dropdown-item' }, 'label': 'chill_calendar.Upload a document'|trans }) }}
</li>
{% for template in templates %}
{{ form_widget(form['save_and_generate_doc_' ~ template.id ], {'attr' : { 'class' : 'dropdown-item'}}) }}
{% endfor %}
</ul>
</div>
</li> </li>
{% endif %} {% endif %}
<li> <li>

View File

@ -77,10 +77,27 @@
{{ 'Cancel'|trans|chill_return_path_label }} {{ 'Cancel'|trans|chill_return_path_label }}
</a> </a>
</li> </li>
{% if form.save_and_create_doc is defined %} {% if templates|length == 0 %}
<li> <li>
{{ form_widget(form.save_and_create_doc, { 'attr' : { 'class' : 'btn btn-create' }, 'label': 'chill_calendar.Create and add a document'|trans }) }} {{ form_widget(form.save_and_upload_doc, { 'attr' : { 'class' : 'btn btn-create' }, 'label': 'chill_calendar.Create and add a document'|trans }) }}
</li> </li>
{% else %}
<li>
<div class="dropdown">
<button class="btn btn-create dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
{{ 'chill_calendar.Add a document'|trans }}
</button>
<ul class="dropdown-menu">
<li>
{{ form_widget(form.save_and_upload_doc, { 'attr' : { 'class' : 'dropdown-item' }, 'label': 'chill_calendar.Upload a document'|trans }) }}
</li>
{% for template in templates %}
{{ form_widget(form['save_and_generate_doc_' ~ template.id ], {'attr' : { 'class' : 'dropdown-item'}}) }}
{% endfor %}
</ul>
</div>
</li>
{% endif %} {% endif %}
<li> <li>
{{ form_widget(form.save, { 'attr' : { 'class' : 'btn btn-create' }, 'label': 'Create'|trans }) }} {{ form_widget(form.save, { 'attr' : { 'class' : 'btn btn-create' }, 'label': 'Create'|trans }) }}