mirror of
				https://gitlab.com/Chill-Projet/chill-bundles.git
				synced 2025-11-04 11:18:25 +00:00 
			
		
		
		
	Compare commits
	
		
			47 Commits
		
	
	
		
			280-add-mi
			...
			285-cancel
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 111f72d996 | |||
| 67c29728f3 | |||
| 0f62ddc3d6 | |||
| db3833190e | |||
| fbb4e8c784 | |||
| a41414a460 | |||
| a3c1aa4679 | |||
| 99b801fb8a | |||
| 4087911262 | |||
| d6a50888e0 | |||
| 705f3b6f76 | |||
| 6f8b25f457 | |||
| ffef8b70a3 | |||
| 43a3d5c902 | |||
| 197b17fa76 | |||
| 229d62e676 | |||
| b51a7cfc57 | |||
| 5d40948a63 | |||
| 9c1df94796 | |||
| 24eb220e90 | |||
| 9a262a3f43 | |||
| b421e0b0af | |||
| 20b82ddbfc | |||
| a568d3c5a2 | |||
| 260a42c35a | |||
| 5b4f47bfaa | |||
| 60706ae75b | |||
| b561b12213 | |||
| f4369f0e3c | |||
| afa755f5a5 | |||
| cb2308f808 | |||
| 432650e081 | |||
| 4215a90b0e | |||
| 24daae6ee5 | |||
| 5ae26a46eb | |||
| aec32b9bf8 | |||
| 5b59bef990 | |||
| e70de780a7 | |||
| a546ec1e6e | |||
| a5417855f2 | |||
| 2234093971 | |||
| be499bee07 | |||
| 55faeaec39 | |||
| ac24df3f3c | |||
| 64dc458844 | |||
| 5f57b5eae3 | |||
| 95de2c863d | 
@@ -13,6 +13,7 @@ namespace Chill\CalendarBundle\Controller;
 | 
			
		||||
 | 
			
		||||
use Chill\CalendarBundle\Entity\Calendar;
 | 
			
		||||
use Chill\CalendarBundle\Form\CalendarType;
 | 
			
		||||
use Chill\CalendarBundle\Form\CancelType;
 | 
			
		||||
use Chill\CalendarBundle\RemoteCalendar\Connector\RemoteCalendarConnectorInterface;
 | 
			
		||||
use Chill\CalendarBundle\Repository\CalendarACLAwareRepositoryInterface;
 | 
			
		||||
use Chill\CalendarBundle\Security\Voter\CalendarVoter;
 | 
			
		||||
@@ -30,6 +31,7 @@ use Chill\PersonBundle\Repository\PersonRepository;
 | 
			
		||||
use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter;
 | 
			
		||||
use Chill\PersonBundle\Security\Authorization\PersonVoter;
 | 
			
		||||
use Chill\ThirdPartyBundle\Entity\ThirdParty;
 | 
			
		||||
use Doctrine\ORM\EntityManagerInterface;
 | 
			
		||||
use http\Exception\UnexpectedValueException;
 | 
			
		||||
use Psr\Log\LoggerInterface;
 | 
			
		||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
 | 
			
		||||
@@ -60,6 +62,7 @@ class CalendarController extends AbstractController
 | 
			
		||||
        private readonly UserRepositoryInterface $userRepository,
 | 
			
		||||
        private readonly TranslatorInterface $translator,
 | 
			
		||||
        private readonly \Doctrine\Persistence\ManagerRegistry $managerRegistry,
 | 
			
		||||
        private readonly EntityManagerInterface $em,
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -111,6 +114,55 @@ class CalendarController extends AbstractController
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[Route(path: '/{_locale}/calendar/calendar/{id}/cancel', name: 'chill_calendar_calendar_cancel')]
 | 
			
		||||
    public function cancelAction(Calendar $calendar, Request $request): Response
 | 
			
		||||
    {
 | 
			
		||||
        // Deal with sms being sent or not
 | 
			
		||||
        // Communicate cancellation with the remote calendar.
 | 
			
		||||
 | 
			
		||||
        $this->denyAccessUnlessGranted(CalendarVoter::EDIT, $calendar);
 | 
			
		||||
 | 
			
		||||
        [$person, $accompanyingPeriod] = [$calendar->getPerson(), $calendar->getAccompanyingPeriod()];
 | 
			
		||||
 | 
			
		||||
        $form = $this->createForm(CancelType::class, $calendar);
 | 
			
		||||
        $form->add('submit', SubmitType::class);
 | 
			
		||||
 | 
			
		||||
        if ($accompanyingPeriod instanceof AccompanyingPeriod) {
 | 
			
		||||
            $view = '@ChillCalendar/Calendar/cancelCalendarByAccompanyingCourse.html.twig';
 | 
			
		||||
            $redirectRoute = $this->generateUrl('chill_calendar_calendar_list_by_period', ['id' => $accompanyingPeriod->getId()]);
 | 
			
		||||
        } elseif ($person instanceof Person) {
 | 
			
		||||
            $view = '@ChillCalendar/Calendar/cancelCalendarByPerson.html.twig';
 | 
			
		||||
            $redirectRoute = $this->generateUrl('chill_calendar_calendar_list_by_person', ['id' => $person->getId()]);
 | 
			
		||||
        } else {
 | 
			
		||||
            throw new \RuntimeException('nor person or accompanying period');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $form->handleRequest($request);
 | 
			
		||||
 | 
			
		||||
        if ($form->isSubmitted() && $form->isValid()) {
 | 
			
		||||
 | 
			
		||||
            $this->logger->notice('A calendar event has been cancelled', [
 | 
			
		||||
                'by_user' => $this->getUser()->getUsername(),
 | 
			
		||||
                'calendar_id' => $calendar->getId(),
 | 
			
		||||
            ]);
 | 
			
		||||
 | 
			
		||||
            $calendar->setStatus($calendar::STATUS_CANCELED);
 | 
			
		||||
            $calendar->setSmsStatus($calendar::SMS_CANCEL_PENDING);
 | 
			
		||||
            $this->em->flush();
 | 
			
		||||
 | 
			
		||||
            $this->addFlash('success', $this->translator->trans('chill_calendar.calendar_canceled'));
 | 
			
		||||
 | 
			
		||||
            return new RedirectResponse($redirectRoute);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this->render($view, [
 | 
			
		||||
            'calendar' => $calendar,
 | 
			
		||||
            'form' => $form->createView(),
 | 
			
		||||
            'accompanyingCourse' => $accompanyingPeriod,
 | 
			
		||||
            'person' => $person,
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Edit a calendar item.
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ class LoadCancelReason extends Fixture implements FixtureGroupInterface
 | 
			
		||||
        $arr = [
 | 
			
		||||
            ['name' => CancelReason::CANCELEDBY_USER],
 | 
			
		||||
            ['name' => CancelReason::CANCELEDBY_PERSON],
 | 
			
		||||
            ['name' => CancelReason::CANCELEDBY_DONOTCOUNT],
 | 
			
		||||
            ['name' => CancelReason::CANCELEDBY_OTHER],
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        foreach ($arr as $a) {
 | 
			
		||||
 
 | 
			
		||||
@@ -18,14 +18,14 @@ use Doctrine\ORM\Mapping as ORM;
 | 
			
		||||
#[ORM\Table(name: 'chill_calendar.cancel_reason')]
 | 
			
		||||
class CancelReason
 | 
			
		||||
{
 | 
			
		||||
    final public const CANCELEDBY_DONOTCOUNT = 'CANCELEDBY_DONOTCOUNT';
 | 
			
		||||
    final public const CANCELEDBY_OTHER = 'CANCELEDBY_OTHER';
 | 
			
		||||
 | 
			
		||||
    final public const CANCELEDBY_PERSON = 'CANCELEDBY_PERSON';
 | 
			
		||||
 | 
			
		||||
    final public const CANCELEDBY_USER = 'CANCELEDBY_USER';
 | 
			
		||||
 | 
			
		||||
    #[ORM\Column(type: \Doctrine\DBAL\Types\Types::BOOLEAN)]
 | 
			
		||||
    private ?bool $active = null;
 | 
			
		||||
    #[ORM\Column(type: \Doctrine\DBAL\Types\Types::BOOLEAN, options: ['default' => true])]
 | 
			
		||||
    private bool $active = true;
 | 
			
		||||
 | 
			
		||||
    #[ORM\Column(type: \Doctrine\DBAL\Types\Types::STRING, length: 255)]
 | 
			
		||||
    private ?string $canceledBy = null;
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ use Chill\CalendarBundle\Entity\CancelReason;
 | 
			
		||||
use Chill\MainBundle\Form\Type\TranslatableStringFormType;
 | 
			
		||||
use Symfony\Component\Form\AbstractType;
 | 
			
		||||
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
 | 
			
		||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
 | 
			
		||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
 | 
			
		||||
use Symfony\Component\Form\FormBuilderInterface;
 | 
			
		||||
use Symfony\Component\OptionsResolver\OptionsResolver;
 | 
			
		||||
 | 
			
		||||
@@ -28,7 +28,14 @@ class CancelReasonType extends AbstractType
 | 
			
		||||
            ->add('active', CheckboxType::class, [
 | 
			
		||||
                'required' => false,
 | 
			
		||||
            ])
 | 
			
		||||
            ->add('canceledBy', TextType::class);
 | 
			
		||||
            ->add('canceledBy', ChoiceType::class, [
 | 
			
		||||
                'choices' => [
 | 
			
		||||
                    'chill_calendar.canceled_by.user' => CancelReason::CANCELEDBY_USER,
 | 
			
		||||
                    'chill_calendar.canceled_by.person' => CancelReason::CANCELEDBY_PERSON,
 | 
			
		||||
                    'chill_calendar.canceled_by.other' => CancelReason::CANCELEDBY_OTHER,
 | 
			
		||||
                ],
 | 
			
		||||
                'required' => true,
 | 
			
		||||
            ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function configureOptions(OptionsResolver $resolver)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										42
									
								
								src/Bundle/ChillCalendarBundle/Form/CancelType.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								src/Bundle/ChillCalendarBundle/Form/CancelType.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Chill is a software for social workers
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view
 | 
			
		||||
 * the LICENSE file that was distributed with this source code.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace Chill\CalendarBundle\Form;
 | 
			
		||||
 | 
			
		||||
use Chill\CalendarBundle\Entity\Calendar;
 | 
			
		||||
use Chill\CalendarBundle\Entity\CancelReason;
 | 
			
		||||
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
 | 
			
		||||
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
 | 
			
		||||
use Symfony\Component\Form\AbstractType;
 | 
			
		||||
use Symfony\Component\Form\FormBuilderInterface;
 | 
			
		||||
use Symfony\Component\OptionsResolver\OptionsResolver;
 | 
			
		||||
 | 
			
		||||
class CancelType extends AbstractType
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(private readonly TranslatableStringHelperInterface $translatableStringHelper) {}
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder, array $options)
 | 
			
		||||
    {
 | 
			
		||||
        $builder->add('cancelReason', EntityType::class, [
 | 
			
		||||
            'class' => CancelReason::class,
 | 
			
		||||
            'required' => true,
 | 
			
		||||
            'choice_label' => fn (CancelReason $cancelReason) => $this->translatableStringHelper->localize($cancelReason->getName()),
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function configureOptions(OptionsResolver $resolver)
 | 
			
		||||
    {
 | 
			
		||||
        $resolver->setDefaults([
 | 
			
		||||
            'data_class' => Calendar::class,
 | 
			
		||||
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -21,6 +21,7 @@ namespace Chill\CalendarBundle\Messenger\Doctrine;
 | 
			
		||||
use Chill\CalendarBundle\Entity\Calendar;
 | 
			
		||||
use Chill\CalendarBundle\Messenger\Message\CalendarMessage;
 | 
			
		||||
use Chill\CalendarBundle\Messenger\Message\CalendarRemovedMessage;
 | 
			
		||||
use Chill\MainBundle\Entity\User;
 | 
			
		||||
use Doctrine\ORM\Event\PostPersistEventArgs;
 | 
			
		||||
use Doctrine\ORM\Event\PostRemoveEventArgs;
 | 
			
		||||
use Doctrine\ORM\Event\PostUpdateEventArgs;
 | 
			
		||||
@@ -31,6 +32,17 @@ class CalendarEntityListener
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(private readonly MessageBusInterface $messageBus, private readonly Security $security) {}
 | 
			
		||||
 | 
			
		||||
    private function getAuthenticatedUser(): User
 | 
			
		||||
    {
 | 
			
		||||
        $user = $this->security->getUser();
 | 
			
		||||
 | 
			
		||||
        if (!$user instanceof User) {
 | 
			
		||||
            throw new \LogicException('Expected an instance of User.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $user;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function postPersist(Calendar $calendar, PostPersistEventArgs $args): void
 | 
			
		||||
    {
 | 
			
		||||
        if (!$calendar->preventEnqueueChanges) {
 | 
			
		||||
@@ -38,7 +50,7 @@ class CalendarEntityListener
 | 
			
		||||
                new CalendarMessage(
 | 
			
		||||
                    $calendar,
 | 
			
		||||
                    CalendarMessage::CALENDAR_PERSIST,
 | 
			
		||||
                    $this->security->getUser()
 | 
			
		||||
                    $this->getAuthenticatedUser()
 | 
			
		||||
                )
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
@@ -50,7 +62,7 @@ class CalendarEntityListener
 | 
			
		||||
            $this->messageBus->dispatch(
 | 
			
		||||
                new CalendarRemovedMessage(
 | 
			
		||||
                    $calendar,
 | 
			
		||||
                    $this->security->getUser()
 | 
			
		||||
                    $this->getAuthenticatedUser()
 | 
			
		||||
                )
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
@@ -58,12 +70,19 @@ class CalendarEntityListener
 | 
			
		||||
 | 
			
		||||
    public function postUpdate(Calendar $calendar, PostUpdateEventArgs $args): void
 | 
			
		||||
    {
 | 
			
		||||
        if (!$calendar->preventEnqueueChanges) {
 | 
			
		||||
        if ($calendar->getStatus() === $calendar::STATUS_CANCELED) {
 | 
			
		||||
            $this->messageBus->dispatch(
 | 
			
		||||
                new CalendarRemovedMessage(
 | 
			
		||||
                    $calendar,
 | 
			
		||||
                    $this->getAuthenticatedUser()
 | 
			
		||||
                )
 | 
			
		||||
            );
 | 
			
		||||
        } elseif (!$calendar->preventEnqueueChanges) {
 | 
			
		||||
            $this->messageBus->dispatch(
 | 
			
		||||
                new CalendarMessage(
 | 
			
		||||
                    $calendar,
 | 
			
		||||
                    CalendarMessage::CALENDAR_UPDATE,
 | 
			
		||||
                    $this->security->getUser()
 | 
			
		||||
                    $this->getAuthenticatedUser()
 | 
			
		||||
                )
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -70,6 +70,8 @@ class CalendarRemovedMessage
 | 
			
		||||
 | 
			
		||||
    public function getRemoteId(): string
 | 
			
		||||
    {
 | 
			
		||||
        dump($this->remoteId);
 | 
			
		||||
 | 
			
		||||
        return $this->remoteId;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
services:
 | 
			
		||||
    Chill\CalendarBundle\Controller\:
 | 
			
		||||
        autowire: true
 | 
			
		||||
        autoconfigure: true
 | 
			
		||||
        resource: '../../../Controller'
 | 
			
		||||
        tags: ['controller.service_arguments']
 | 
			
		||||
 
 | 
			
		||||
@@ -9,9 +9,20 @@
 | 
			
		||||
                <div class="item-row main">
 | 
			
		||||
                    <div class="item-col">
 | 
			
		||||
                        <div class="wrap-header">
 | 
			
		||||
                            <div class="wl-row">
 | 
			
		||||
                                {% if calendar.status == 'canceled' %}
 | 
			
		||||
                                <div class="badge rounded-pill bg-danger">
 | 
			
		||||
                                    <span>{{ 'chill_calendar.canceled'|trans }}: </span>
 | 
			
		||||
                                    <span>{{ calendar.cancelReason.name|localize_translatable_string }}</span>
 | 
			
		||||
                                </div>
 | 
			
		||||
                                    {% endif %}
 | 
			
		||||
                            </div>
 | 
			
		||||
                            <div class="wl-row">
 | 
			
		||||
                                <div class="wl-col title">
 | 
			
		||||
                                    <p class="date-label">
 | 
			
		||||
                                        {% if calendar.status == 'canceled' %}
 | 
			
		||||
                                        <del>
 | 
			
		||||
                                            {% endif %}
 | 
			
		||||
                                        {% if context == 'person' and calendar.context == 'accompanying_period' %}
 | 
			
		||||
                                            <a href="{{ chill_path_add_return_path('chill_person_accompanying_course_index', {'accompanying_period_id': calendar.accompanyingPeriod.id}) }}" style="text-decoration: none;">
 | 
			
		||||
                                                <span class="badge bg-primary">
 | 
			
		||||
@@ -19,6 +30,9 @@
 | 
			
		||||
                                                </span>
 | 
			
		||||
                                            </a>
 | 
			
		||||
                                        {% endif %}
 | 
			
		||||
                                        {% if calendar.status == 'canceled' %}
 | 
			
		||||
                                            <del>
 | 
			
		||||
                                        {% endif %}
 | 
			
		||||
                                        {% if calendar.endDate.diff(calendar.startDate).days >= 1 %}
 | 
			
		||||
                                                {{ calendar.startDate|format_datetime('short', 'short') }}
 | 
			
		||||
                                                - {{ calendar.endDate|format_datetime('short', 'short') }}
 | 
			
		||||
@@ -26,13 +40,15 @@
 | 
			
		||||
                                            {{ calendar.startDate|format_datetime('short', 'short') }}
 | 
			
		||||
                                                - {{ calendar.endDate|format_datetime('none', 'short') }}
 | 
			
		||||
                                        {% endif %}
 | 
			
		||||
                                    </p>
 | 
			
		||||
                                        {% if calendar.status == 'canceled' %}
 | 
			
		||||
                                            </del>
 | 
			
		||||
                                        {% endif %}
 | 
			
		||||
 | 
			
		||||
                                    <div class="duration short-message">
 | 
			
		||||
                                        <i class="fa fa-fw fa-hourglass-end"></i>
 | 
			
		||||
                                        {{ calendar.duration|date('%H:%I') }}
 | 
			
		||||
                                        {% if false == calendar.sendSMS or null == calendar.sendSMS %}
 | 
			
		||||
                                            <!-- no sms will be send -->
 | 
			
		||||
                                            <!-- no sms will be sent -->
 | 
			
		||||
                                        {% else %}
 | 
			
		||||
                                            {% if calendar.smsStatus == 'sms_sent' %}
 | 
			
		||||
                                                <span title="{{ 'SMS already sent'|trans }}" class="badge bg-info">
 | 
			
		||||
@@ -63,8 +79,7 @@
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
                {% if calendar.comment.comment is not empty
 | 
			
		||||
                    or calendar.users|length > 0
 | 
			
		||||
                {% if calendar.users|length > 0
 | 
			
		||||
                    or calendar.thirdParties|length > 0
 | 
			
		||||
                    or calendar.users|length > 0 %}
 | 
			
		||||
                    <div class="item-row details separator">
 | 
			
		||||
@@ -103,12 +118,13 @@
 | 
			
		||||
                    </div>
 | 
			
		||||
                {% endif %}
 | 
			
		||||
 | 
			
		||||
                {% if calendar.documents is not empty %}
 | 
			
		||||
                    <div class="item-row separator column">
 | 
			
		||||
                        <div>
 | 
			
		||||
 | 
			
		||||
                            {{ include('@ChillCalendar/Calendar/_documents.twig.html') }}
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                {% endif %}
 | 
			
		||||
 | 
			
		||||
                {% if calendar.activity is not null %}
 | 
			
		||||
                    <div class="item-row separator">
 | 
			
		||||
@@ -151,7 +167,7 @@
 | 
			
		||||
 | 
			
		||||
                <div class="item-row separator">
 | 
			
		||||
                    <ul class="record_actions">
 | 
			
		||||
                        {% if is_granted('CHILL_CALENDAR_DOC_EDIT', calendar) %}
 | 
			
		||||
                        {% if is_granted('CHILL_CALENDAR_DOC_EDIT', calendar) and calendar.status is not constant('STATUS_CANCELED', calendar) %}
 | 
			
		||||
                            {% if templates|length == 0 %}
 | 
			
		||||
                                <li>
 | 
			
		||||
                                    <a class="btn btn-create"
 | 
			
		||||
@@ -191,6 +207,7 @@
 | 
			
		||||
                            or
 | 
			
		||||
                            (calendar.context == 'person' and is_granted('CHILL_ACTIVITY_CREATE', calendar.person))
 | 
			
		||||
                            )
 | 
			
		||||
                            and calendar.status is not constant('STATUS_CANCELED', calendar)
 | 
			
		||||
                        %}
 | 
			
		||||
                            <li>
 | 
			
		||||
                                <a class="btn btn-create"
 | 
			
		||||
@@ -213,12 +230,18 @@
 | 
			
		||||
                                   class="btn btn-show "></a>
 | 
			
		||||
                            </li>
 | 
			
		||||
                        {% endif %}
 | 
			
		||||
                        {% if is_granted('CHILL_CALENDAR_CALENDAR_EDIT', calendar) %}
 | 
			
		||||
 | 
			
		||||
                        {% if is_granted('CHILL_CALENDAR_CALENDAR_EDIT', calendar) and calendar.status is not constant('STATUS_CANCELED', calendar) %}
 | 
			
		||||
                        <li>
 | 
			
		||||
                            <a href="{{ chill_path_add_return_path('chill_calendar_calendar_edit', { 'id': calendar.id }) }}"
 | 
			
		||||
                               class="btn btn-update "></a>
 | 
			
		||||
                        </li>
 | 
			
		||||
                        <li>
 | 
			
		||||
                            <a href="{{ chill_path_add_return_path('chill_calendar_calendar_cancel', { 'id': calendar.id } ) }}"
 | 
			
		||||
                               class="btn btn-remove">{{ 'Cancel'|trans }}</a>
 | 
			
		||||
                        </li>
 | 
			
		||||
                        {% endif %}
 | 
			
		||||
 | 
			
		||||
                        {% if is_granted('CHILL_CALENDAR_CALENDAR_DELETE', calendar) %}
 | 
			
		||||
                        <li>
 | 
			
		||||
                            <a href="{{ chill_path_add_return_path('chill_calendar_calendar_delete', { 'id': calendar.id } ) }}"
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,29 @@
 | 
			
		||||
{% extends "@ChillPerson/AccompanyingCourse/layout.html.twig" %}
 | 
			
		||||
 | 
			
		||||
{% set activeRouteKey = 'chill_calendar_calendar_list' %}
 | 
			
		||||
 | 
			
		||||
{% block title  'chill_calendar.cancel_calendar_item'|trans %}
 | 
			
		||||
 | 
			
		||||
{% block content %}
 | 
			
		||||
 | 
			
		||||
    {{ form_start(form) }}
 | 
			
		||||
 | 
			
		||||
    {{ form_row(form.cancelReason) }}
 | 
			
		||||
 | 
			
		||||
    <ul class="record_actions sticky-form-buttons">
 | 
			
		||||
        <li class="save">
 | 
			
		||||
            <a
 | 
			
		||||
                class="btn btn-cancel"
 | 
			
		||||
                href="{{ chill_return_path_or('chill_calendar_calendar_list', { 'id': accompanyingCourse.id } )}}"
 | 
			
		||||
            >
 | 
			
		||||
                {{ 'Cancel'|trans|chill_return_path_label }}
 | 
			
		||||
            </a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li>
 | 
			
		||||
            {{ form_widget(form.submit, { 'attr' : { 'class': 'btn btn-save' }, 'label': 'Save' } ) }}
 | 
			
		||||
        </li>
 | 
			
		||||
    </ul>
 | 
			
		||||
 | 
			
		||||
    {{ form_end(form) }}
 | 
			
		||||
 | 
			
		||||
{% endblock %}
 | 
			
		||||
@@ -0,0 +1,29 @@
 | 
			
		||||
{% extends "@ChillPerson/Person/layout.html.twig" %}
 | 
			
		||||
 | 
			
		||||
{% set activeRouteKey = 'chill_calendar_calendar_list' %}
 | 
			
		||||
 | 
			
		||||
{% block title  'chill_calendar.cancel_calendar_item'|trans %}
 | 
			
		||||
 | 
			
		||||
{% block content %}
 | 
			
		||||
 | 
			
		||||
    {{ form_start(form) }}
 | 
			
		||||
 | 
			
		||||
    {{ form_row(form.cancelReason) }}
 | 
			
		||||
 | 
			
		||||
    <ul class="record_actions sticky-form-buttons">
 | 
			
		||||
        <li class="save">
 | 
			
		||||
            <a
 | 
			
		||||
                class="btn btn-cancel"
 | 
			
		||||
                href="{{ chill_return_path_or('chill_calendar_calendar_list', { 'id': person.id } )}}"
 | 
			
		||||
            >
 | 
			
		||||
                {{ 'Cancel'|trans|chill_return_path_label }}
 | 
			
		||||
            </a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li>
 | 
			
		||||
            {{ form_widget(form.submit, { 'attr' : { 'class': 'btn btn-save' }, 'label': 'Save' } ) }}
 | 
			
		||||
        </li>
 | 
			
		||||
    </ul>
 | 
			
		||||
 | 
			
		||||
    {{ form_end(form) }}
 | 
			
		||||
 | 
			
		||||
{% endblock %}
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
        {% block table_entities_thead_tr %}
 | 
			
		||||
            <th>{{ 'Id'|trans }}</th>
 | 
			
		||||
            <th>{{ 'Name'|trans }}</th>
 | 
			
		||||
            <th>{{ 'canceledBy'|trans }}</th>
 | 
			
		||||
            <th>{{ 'Canceled by'|trans }}</th>
 | 
			
		||||
            <th>{{ 'active'|trans }}</th>
 | 
			
		||||
            <th> </th>
 | 
			
		||||
        {% endblock %}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,6 +19,7 @@ declare(strict_types=1);
 | 
			
		||||
namespace Chill\CalendarBundle\Service\ShortMessageNotification;
 | 
			
		||||
 | 
			
		||||
use Chill\CalendarBundle\Entity\Calendar;
 | 
			
		||||
use Chill\CalendarBundle\Entity\CancelReason;
 | 
			
		||||
use libphonenumber\PhoneNumberFormat;
 | 
			
		||||
use libphonenumber\PhoneNumberUtil;
 | 
			
		||||
use Symfony\Component\Notifier\Message\SmsMessage;
 | 
			
		||||
@@ -57,7 +58,7 @@ class DefaultShortMessageForCalendarBuilder implements ShortMessageForCalendarBu
 | 
			
		||||
                    $this->phoneUtil->format($person->getMobilenumber(), PhoneNumberFormat::E164),
 | 
			
		||||
                    $this->engine->render('@ChillCalendar/CalendarShortMessage/short_message.txt.twig', ['calendar' => $calendar]),
 | 
			
		||||
                );
 | 
			
		||||
            } elseif (Calendar::SMS_CANCEL_PENDING === $calendar->getSmsStatus()) {
 | 
			
		||||
            } elseif (Calendar::SMS_CANCEL_PENDING === $calendar->getSmsStatus() && (null === $calendar->getCancelReason() || CancelReason::CANCELEDBY_PERSON !== $calendar->getCancelReason()->getCanceledBy())) {
 | 
			
		||||
                $toUsers[] = new SmsMessage(
 | 
			
		||||
                    $this->phoneUtil->format($person->getMobilenumber(), PhoneNumberFormat::E164),
 | 
			
		||||
                    $this->engine->render('@ChillCalendar/CalendarShortMessage/short_message_canceled.txt.twig', ['calendar' => $calendar]),
 | 
			
		||||
 
 | 
			
		||||
@@ -31,8 +31,7 @@ Will send SMS: Un SMS de rappel sera envoyé
 | 
			
		||||
Will not send SMS: Aucun SMS de rappel ne sera envoyé
 | 
			
		||||
SMS already sent: Un SMS a été envoyé
 | 
			
		||||
 | 
			
		||||
canceledBy: supprimé par
 | 
			
		||||
Canceled by: supprimé par
 | 
			
		||||
Canceled by: Annulé par
 | 
			
		||||
Calendar configuration: Gestion des rendez-vous
 | 
			
		||||
 | 
			
		||||
crud:
 | 
			
		||||
@@ -44,6 +43,14 @@ crud:
 | 
			
		||||
        title_edit: Modifier le motif d'annulation
 | 
			
		||||
 | 
			
		||||
chill_calendar:
 | 
			
		||||
    canceled: Annulé
 | 
			
		||||
    cancel_reason: Raison d'annulation
 | 
			
		||||
    cancel_calendar_item: Annuler rendez-vous
 | 
			
		||||
    calendar_canceled: Le rendez-vous a été annulé
 | 
			
		||||
    canceled_by:
 | 
			
		||||
        user: Utilisateur
 | 
			
		||||
        person: Usager
 | 
			
		||||
        other: Autre
 | 
			
		||||
    Document: Document d'un rendez-vous
 | 
			
		||||
    form:
 | 
			
		||||
        The main user is mandatory. He will organize the appointment.: L'utilisateur principal est obligatoire. Il est l'organisateur de l'événement.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user