diff --git a/src/Controller/ActivityController.php b/src/Controller/ActivityController.php index 1a3e51b..92b3154 100644 --- a/src/Controller/ActivityController.php +++ b/src/Controller/ActivityController.php @@ -5,6 +5,7 @@ use Symfony\Component\HttpFoundation\Response; use App\Repository\ActivityRepository; use App\Entity\ActivityEntity; +use App\Form\Activity\ActivityAddForm; use App\Form\Activity\ActivityDeleteForm; /** @@ -26,6 +27,29 @@ /** @var ActivityRepository $actorRepository */ $activityRepository = $entityManager->getRepository(ActivityEntity::class); + // Activity add form + /** @var ActivityAddForm $activityAddForm */ + $activityAddForm = $this->createNamedCustomForm('activityAdd', ActivityAddForm::class); + $activityAddForm->handleRequest($request); + if ($activityAddForm->isSubmitted() && $activityAddForm->isValid()) { + $errors = $activityAddForm->validate(); + if (empty($errors)) { + $activity = $activityAddForm->getActivity(); + $entityManager->persist($activity); + $entityManager->flush(); + return $this->ajaxFormAnswer([ + 'message' => 'Activité ajoutée', + 'refresh' => true, + 'reset' => true, + ]); + } else { + return $this->ajaxFormAnswer([ + 'error' => join('
', $errors), + 'code' => Response::HTTP_BAD_REQUEST, + ]); + } + } + // Activity delete form /** @var ActivityDeleteForm $activityDeleteForm */ $activityDeleteForm = $this->createNamedCustomForm('activityDelete', ActivityDeleteForm::class); @@ -60,6 +84,7 @@ return $this->render('activity/activities.html.twig', [ 'activities' => $activities, 'activityDeleteForm' => $activityDeleteForm, + 'activityAddForm' => $activityAddForm, ]); } } \ No newline at end of file diff --git a/src/Entity/ActivityEntity.php b/src/Entity/ActivityEntity.php index 66a4b70..2bff420 100644 --- a/src/Entity/ActivityEntity.php +++ b/src/Entity/ActivityEntity.php @@ -185,6 +185,8 @@ public function setRealEndDate(?DateTime $realEndDate): self { $this->realEndDate = $realEndDate; + + return $this; } /** diff --git a/src/Form/Activity/ActivityAddForm.php b/src/Form/Activity/ActivityAddForm.php new file mode 100644 index 0000000..65e9ddd --- /dev/null +++ b/src/Form/Activity/ActivityAddForm.php @@ -0,0 +1,72 @@ +form->getData(); + $activity = new activityEntity(); + $activity->generateId(); + $activity->setName($data['name']); + $activity->setStartDate($data['startDate']); + $activity->setEndDate($data['endDate']); + $activity->setRealStartDate($data['realStartDate']); + $activity->setRealEndDate($data['realEndDate']); + $activity->setActor($data['actor']); + + return $activity; + } + + /** + * {@inheritdoc} + */ + public function getTemplate(): string + { + return '_includes/html/form/activity/add.html.twig'; + } + + /** + * {@inheritdoc} + */ + protected function addFields($formBuilder, $options): void + { + $formBuilder->add('name', TextType::class) + ->add('actor', EntityType::class, [ + 'class' => ActorEntity::class, + 'choice_label' => 'displayName', + 'required' => false, + ]) + ->add('startDate', DateType::class, [ + 'required' => false, + 'widget' => 'single_text', + ]) + ->add('endDate', DateType::class, [ + 'required' => false, + 'widget' => 'single_text', + ]) + ->add('realStartDate', DateType::class, [ + 'required' => false, + 'widget' => 'single_text', + ]) + ->add('realEndDate', DateType::class, [ + 'required' => false, + 'widget' => 'single_text', + ]) + ->add('submit', SubmitType::class); + } +} \ No newline at end of file diff --git a/templates/_includes/html/form/activity/add.html.twig b/templates/_includes/html/form/activity/add.html.twig new file mode 100644 index 0000000..0276819 --- /dev/null +++ b/templates/_includes/html/form/activity/add.html.twig @@ -0,0 +1,33 @@ +{{ form_start(form, {attr: {class: 'ajax-form'}}) }} +
+
+ {{ form_label(form.name, 'Nom', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.name, {attr: {class: 'w-100'}}) }} +
+
+ {{ form_label(form.startDate, 'Début planifié') }} + {{ form_widget(form.startDate, {attr: {class: 'w-100'}}) }} +
+
+ {{ form_label(form.realStartDate, 'Fin planifié') }} + {{ form_widget(form.realStartDate, {attr: {class: 'w-100'}}) }} +
+
+
+
+ {{ form_label(form.actor, 'Acteur') }} + {{ form_widget(form.actor, {attr: {class: 'w-100'}}) }} +
+
+ {{ form_label(form.endDate, 'Début réel') }} + {{ form_widget(form.endDate, {attr: {class: 'w-100'}}) }} +
+
+ {{ form_label(form.realEndDate, 'Fin réelle') }} + {{ form_widget(form.realEndDate, {attr: {class: 'w-100'}}) }} +
+
+{{ form_widget(form.submit, {attr: {class: 'w-100'}, label: 'Nouvelle activité'}) }} +

+

+{{ form_end(form) }} \ No newline at end of file diff --git a/templates/activity/activities.html.twig b/templates/activity/activities.html.twig index 316b262..5eb181c 100644 --- a/templates/activity/activities.html.twig +++ b/templates/activity/activities.html.twig @@ -13,4 +13,14 @@ +
+
+
+

Nouvelle activité

+
+
+ {% include '_includes/html/genericForm.html.twig' with {form: activityAddForm} only %} +
+
+
{% endblock %} \ No newline at end of file