mirror of
				https://gitlab.com/Chill-Projet/chill-bundles.git
				synced 2025-10-31 09:18:24 +00:00 
			
		
		
		
	Merge branch 'ticket-app-master' of gitlab.com:boriswa/chill-bundles into ticket-app-master
This commit is contained in:
		
							
								
								
									
										6
									
								
								.changes/unreleased/Feature-20240426-134831.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changes/unreleased/Feature-20240426-134831.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| kind: Feature | ||||
| body: Make the script which subscribe to microsoft calendars changes more tolerant | ||||
|   to errors or missing configuration on the microsoft side | ||||
| time: 2024-04-26T13:48:31.476415017+02:00 | ||||
| custom: | ||||
|   Issue: "197" | ||||
							
								
								
									
										7
									
								
								.changes/unreleased/Feature-20240429-130102.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.changes/unreleased/Feature-20240429-130102.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| kind: Feature | ||||
| body: 'Take closing date into account when computing the geographical unit on accompanying | ||||
|   period. When a person moved after an accompanying period is closed, the date of | ||||
|   closing accompanying period is took into account if it is earlier than the date given by the user.' | ||||
| time: 2024-04-29T13:01:02.463796452+02:00 | ||||
| custom: | ||||
|   Issue: "276" | ||||
							
								
								
									
										6
									
								
								.changes/unreleased/Fixed-20240429-113804.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changes/unreleased/Fixed-20240429-113804.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| kind: Fixed | ||||
| body: Allow the filter "filter accompanying period by geographical unit" to take period's | ||||
|   location on address into account | ||||
| time: 2024-04-29T11:38:04.966027861+02:00 | ||||
| custom: | ||||
|   Issue: "275" | ||||
							
								
								
									
										5
									
								
								.changes/unreleased/UX-20240507-160217.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.changes/unreleased/UX-20240507-160217.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| kind: UX | ||||
| body: Form for document generation moved to the top of document list page | ||||
| time: 2024-05-07T16:02:17.11820977+02:00 | ||||
| custom: | ||||
|   Issue: "" | ||||
							
								
								
									
										5
									
								
								.changes/unreleased/UX-20240508-102757.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.changes/unreleased/UX-20240508-102757.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| kind: UX | ||||
| body: Adjust certain graphical issues for better user experience | ||||
| time: 2024-05-08T10:27:57.220873296+02:00 | ||||
| custom: | ||||
|   Issue: "266" | ||||
| @@ -51,8 +51,6 @@ final class MapAndSubscribeUserCalendarCommand extends Command | ||||
|  | ||||
|         $limit = 50; | ||||
|         $offset = 0; | ||||
|         /** @var \DateInterval $interval the interval before the end of the expiration */ | ||||
|         $interval = new \DateInterval('P1D'); | ||||
|         $expiration = (new \DateTimeImmutable('now'))->add(new \DateInterval($input->getOption('subscription-duration'))); | ||||
|         $users = $this->userRepository->findAllAsArray('fr'); | ||||
|         $created = 0; | ||||
| @@ -95,7 +93,6 @@ final class MapAndSubscribeUserCalendarCommand extends Command | ||||
|             } catch (UserAbsenceSyncException $e) { | ||||
|                 $this->logger->error('could not sync user absence', ['userId' => $user->getId(), 'email' => $user->getEmail(), 'exception' => $e->getTraceAsString(), 'message' => $e->getMessage()]); | ||||
|                 $output->writeln(sprintf('Could not sync user absence: id: %s and email: %s', $user->getId(), $user->getEmail())); | ||||
|                 throw $e; | ||||
|             } | ||||
|  | ||||
|             // we first try to renew an existing subscription, if any. | ||||
|   | ||||
| @@ -1,54 +1,62 @@ | ||||
| {% extends "@ChillPerson/AccompanyingCourse/layout.html.twig"  %} | ||||
| {% extends "@ChillPerson/AccompanyingCourse/layout.html.twig" %} {% set | ||||
| activeRouteKey = '' %} {% block title %} | ||||
| {{ "Documents" }} | ||||
| {% endblock %} {% block js %} | ||||
| {{ parent() }} | ||||
| {{ encore_entry_script_tags("mod_docgen_picktemplate") }} | ||||
| {{ encore_entry_script_tags("mod_entity_workflow_pick") }} | ||||
| {{ encore_entry_script_tags("mod_document_action_buttons_group") }} | ||||
| {% endblock %} {% block css %} | ||||
| {{ parent() }} | ||||
| {{ encore_entry_script_tags("mod_docgen_picktemplate") }} | ||||
| {{ encore_entry_link_tags("mod_entity_workflow_pick") }} | ||||
| {{ encore_entry_link_tags("mod_document_action_buttons_group") }} | ||||
| {% endblock %} {% block content %} | ||||
| <div class="document-list"> | ||||
|     <h1>{{ "Documents" }}</h1> | ||||
|  | ||||
| {% set activeRouteKey = '' %} | ||||
|  | ||||
| {% block title %} | ||||
|     {{ 'Documents' }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block js %} | ||||
|     {{ parent() }} | ||||
|     {{ encore_entry_script_tags('mod_docgen_picktemplate') }} | ||||
|     {{ encore_entry_script_tags('mod_entity_workflow_pick') }} | ||||
|     {{ encore_entry_script_tags('mod_document_action_buttons_group') }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block css %} | ||||
|     {{ parent() }} | ||||
|     {{ encore_entry_script_tags('mod_docgen_picktemplate') }} | ||||
|     {{ encore_entry_link_tags('mod_entity_workflow_pick') }} | ||||
|     {{ encore_entry_link_tags('mod_document_action_buttons_group') }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block content %} | ||||
|     <div class="document-list"> | ||||
|         <h1>{{ 'Documents' }}</h1> | ||||
|  | ||||
|         {{ filter|chill_render_filter_order_helper }} | ||||
|  | ||||
|         {% if documents|length == 0 %} | ||||
|             <p class="chill-no-data-statement">{{ 'No documents'|trans }}</p> | ||||
|         {% else %} | ||||
|             <div class="flex-table chill-task-list"> | ||||
|                 {% for document in documents %} | ||||
|                     {{ document|chill_generic_doc_render }} | ||||
|                 {% endfor %} | ||||
|             </div> | ||||
|         {% endif %} | ||||
|  | ||||
|         {{ chill_pagination(pagination) }} | ||||
|  | ||||
|         <div data-docgen-template-picker="data-docgen-template-picker" data-entity-class="Chill\PersonBundle\Entity\AccompanyingPeriod" data-entity-id="{{ accompanyingCourse.id }}"></div> | ||||
|  | ||||
|         {% if is_granted('CHILL_ACCOMPANYING_COURSE_DOCUMENT_CREATE', accompanyingCourse) %} | ||||
|             <ul class="record_actions sticky-form-buttons"> | ||||
|                 <li class="create"> | ||||
|                     <a href="{{ path('accompanying_course_document_new', {'course': accompanyingCourse.id}) }}" class="btn btn-create"> | ||||
|                         {{ 'Create'|trans }} | ||||
|                     </a> | ||||
|                 </li> | ||||
|             </ul> | ||||
|         {% endif %} | ||||
|     {{ filter | chill_render_filter_order_helper }} | ||||
|  | ||||
|     {% if documents|length > 5 %} | ||||
|     <div | ||||
|         data-docgen-template-picker="data-docgen-template-picker" | ||||
|         data-entity-class="Chill\PersonBundle\Entity\AccompanyingPeriod" | ||||
|         data-entity-id="{{ accompanyingCourse.id }}" | ||||
|     ></div> | ||||
|     {% endif %} {% if documents|length == 0 %} | ||||
|     <p class="chill-no-data-statement">{{ "No documents" | trans }}</p> | ||||
|     {% else %} | ||||
|     <div class="flex-table chill-task-list"> | ||||
|         {% for document in documents %} | ||||
|         {{ document | chill_generic_doc_render }} | ||||
|         {% endfor %} | ||||
|     </div> | ||||
|     {% endif %} | ||||
|  | ||||
|     {{ chill_pagination(pagination) }} | ||||
|  | ||||
|     <div | ||||
|         data-docgen-template-picker="data-docgen-template-picker" | ||||
|         data-entity-class="Chill\PersonBundle\Entity\AccompanyingPeriod" | ||||
|         data-entity-id="{{ accompanyingCourse.id }}" | ||||
|     ></div> | ||||
|  | ||||
|     {% if is_granted('CHILL_ACCOMPANYING_COURSE_DOCUMENT_CREATE', | ||||
|     accompanyingCourse) %} | ||||
|     <ul class="record_actions sticky-form-buttons"> | ||||
|         <li class="create"> | ||||
|             <a | ||||
|                 href="{{ | ||||
|                     path('accompanying_course_document_new', { | ||||
|                         course: accompanyingCourse.id | ||||
|                     }) | ||||
|                 }}" | ||||
|                 class="btn btn-create" | ||||
|             > | ||||
|                 {{ "Create" | trans }} | ||||
|             </a> | ||||
|         </li> | ||||
|     </ul> | ||||
|     {% endif %} | ||||
| </div> | ||||
| {% endblock %} | ||||
|   | ||||
| @@ -1,74 +1,70 @@ | ||||
| {# | ||||
|  * Copyright (C) 2018, Champs Libres Cooperative SCRLFS, <http://www.champs-libres.coop> | ||||
|  * | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  *  it under the terms of the GNU Affero General Public License as | ||||
|  * published by the Free Software Foundation, either version 3 of the | ||||
|  *  License, or (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU Affero General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Affero General Public License | ||||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| #} | ||||
|  | ||||
| {% extends "@ChillPerson/Person/layout.html.twig"  %} | ||||
|  | ||||
| {% set activeRouteKey = '' %} | ||||
|  | ||||
| {% import "@ChillDocStore/Macro/macro.html.twig" as m %} | ||||
|  | ||||
| {% block title %} | ||||
| 	{{ 'Documents for %name%'|trans({ '%name%': person|chill_entity_render_string } ) }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block js %} | ||||
| 	{{ parent() }} | ||||
|     {{ encore_entry_script_tags('mod_docgen_picktemplate') }} | ||||
|     {{ encore_entry_script_tags('mod_entity_workflow_pick') }} | ||||
|     {{ encore_entry_script_tags('mod_document_action_buttons_group') }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block css %} | ||||
| 	{{ parent() }} | ||||
|     {{ encore_entry_link_tags('mod_docgen_picktemplate') }} | ||||
|     {{ encore_entry_link_tags('mod_entity_workflow_pick') }} | ||||
|     {{ encore_entry_link_tags('mod_document_action_buttons_group') }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block content %} | ||||
| {# * Copyright (C) 2018, Champs Libres Cooperative SCRLFS, | ||||
| <http://www.champs-libres.coop> * * This program is free software: you can | ||||
| redistribute it and/or modify * it under the terms of the GNU Affero General | ||||
| Public License as * published by the Free Software Foundation, either version 3 | ||||
| of the * License, or (at your option) any later version. * * This program is | ||||
| distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; | ||||
| without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A | ||||
| PARTICULAR PURPOSE. See the * GNU Affero General Public License for more | ||||
| details. * * You should have received a copy of the GNU Affero General Public | ||||
| License * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
| #} {% extends "@ChillPerson/Person/layout.html.twig" %} {% set activeRouteKey = | ||||
| '' %} {% import "@ChillDocStore/Macro/macro.html.twig" as m %} {% block title %} | ||||
| {{ 'Documents for %name%'|trans({ '%name%': person|chill_entity_render_string } ) }} | ||||
| {% endblock %} {% block js %} | ||||
| {{ parent() }} | ||||
| {{ encore_entry_script_tags("mod_docgen_picktemplate") }} | ||||
| {{ encore_entry_script_tags("mod_entity_workflow_pick") }} | ||||
| {{ encore_entry_script_tags("mod_document_action_buttons_group") }} | ||||
| {% endblock %} {% block css %} | ||||
| {{ parent() }} | ||||
| {{ encore_entry_link_tags("mod_docgen_picktemplate") }} | ||||
| {{ encore_entry_link_tags("mod_entity_workflow_pick") }} | ||||
| {{ encore_entry_link_tags("mod_document_action_buttons_group") }} | ||||
| {% endblock %} {% block content %} | ||||
|  | ||||
| <div class="col-md-10 col-xxl"> | ||||
| 	<h1>{{ 'Documents for %name%'|trans({ '%name%': person|chill_entity_render_string } ) }}</h1> | ||||
|     <h1> | ||||
|         {{ 'Documents for %name%'|trans({ '%name%': person|chill_entity_render_string } ) }} | ||||
|     </h1> | ||||
|  | ||||
|     {{ filter|chill_render_filter_order_helper }} | ||||
|     {{ filter | chill_render_filter_order_helper }} | ||||
|  | ||||
| 	{% if documents|length == 0 %} | ||||
|             <p class="chill-no-data-statement">{{ 'No documents'|trans }}</p> | ||||
|     {% if documents|length > 5 %} | ||||
|     <div | ||||
|         data-docgen-template-picker="data-docgen-template-picker" | ||||
|         data-entity-class="Chill\PersonBundle\Entity\Person" | ||||
|         data-entity-id="{{ person.id }}" | ||||
|     ></div> | ||||
|     {% endif %} {% if documents|length == 0 %} | ||||
|     <p class="chill-no-data-statement">{{ "No documents" | trans }}</p> | ||||
|     {% else %} | ||||
| 		<div class="flex-table chill-task-list"> | ||||
| 			{% for document in documents %} | ||||
|                 {{ document|chill_generic_doc_render }} | ||||
| 			{% endfor %} | ||||
| 		</div> | ||||
|     <div class="flex-table chill-task-list"> | ||||
|         {% for document in documents %} | ||||
|         {{ document | chill_generic_doc_render }} | ||||
|         {% endfor %} | ||||
|     </div> | ||||
|     {% endif %} | ||||
|  | ||||
| 	{{ chill_pagination(pagination) }} | ||||
|     {{ chill_pagination(pagination) }} | ||||
|  | ||||
| 	<div data-docgen-template-picker="data-docgen-template-picker" data-entity-class="Chill\PersonBundle\Entity\Person" data-entity-id="{{ person.id }}"></div> | ||||
|  | ||||
| 	{% if is_granted('CHILL_PERSON_DOCUMENT_CREATE', person) %} | ||||
| 		<ul class="record_actions sticky-form-buttons"> | ||||
| 			<li class="create"> | ||||
| 				<a href="{{ path('person_document_new', {'person': person.id}) }}" class="btn btn-create"> | ||||
| 					{{ 'Create new document' | trans }} | ||||
| 				</a> | ||||
| 			</li> | ||||
| 		</ul> | ||||
| 	{% endif %} | ||||
|     <div | ||||
|         data-docgen-template-picker="data-docgen-template-picker" | ||||
|         data-entity-class="Chill\PersonBundle\Entity\Person" | ||||
|         data-entity-id="{{ person.id }}" | ||||
|     ></div> | ||||
|  | ||||
|     {% if is_granted('CHILL_PERSON_DOCUMENT_CREATE', person) %} | ||||
|     <ul class="record_actions sticky-form-buttons"> | ||||
|         <li class="create"> | ||||
|             <a | ||||
|                 href="{{ path('person_document_new', { person: person.id }) }}" | ||||
|                 class="btn btn-create" | ||||
|             > | ||||
|                 {{ "Create new document" | trans }} | ||||
|             </a> | ||||
|         </li> | ||||
|     </ul> | ||||
|     {% endif %} | ||||
| </div> | ||||
| {% endblock %} | ||||
|   | ||||
| @@ -13,7 +13,7 @@ Update document: Modifier le document | ||||
| Edit attributes: Modifier les propriétés du document | ||||
| Existing document: Document existant | ||||
| No document to download: Aucun document à télécharger | ||||
| 'Choose a document category': Choisissez une catégorie de document | ||||
| "Choose a document category": Choisissez une catégorie de document | ||||
| No document found: Aucun document trouvé | ||||
| The document is successfully registered: Le document est enregistré | ||||
| The document is successfully updated: Le document est mis à jour | ||||
| @@ -36,7 +36,6 @@ Delete document ?: Supprimer le document ? | ||||
| Are you sure you want to remove this document ?: Êtes-vous sûr·e de vouloir supprimer ce document ? | ||||
| The document is successfully removed: Le document a été supprimé | ||||
|  | ||||
|  | ||||
| # dropzone upload | ||||
| File too big: Fichier trop volumineux | ||||
| Drop your file or click here: Cliquez ici ou faites glissez votre nouveau fichier dans cette zone | ||||
|   | ||||
| @@ -18,9 +18,9 @@ use Chill\MainBundle\Entity\Center; | ||||
| use Chill\MainBundle\Form\Type\ChillCollectionType; | ||||
| use Chill\MainBundle\Form\Type\ChillDateTimeType; | ||||
| use Chill\MainBundle\Form\Type\CommentType; | ||||
| use Chill\MainBundle\Form\Type\PickUserDynamicType; | ||||
| use Chill\MainBundle\Form\Type\PickUserLocationType; | ||||
| use Chill\MainBundle\Form\Type\ScopePickerType; | ||||
| use Chill\MainBundle\Form\Type\UserPickerType; | ||||
| use Symfony\Component\Form\AbstractType; | ||||
| use Symfony\Component\Form\Extension\Core\Type\MoneyType; | ||||
| use Symfony\Component\Form\FormBuilderInterface; | ||||
| @@ -45,14 +45,8 @@ class EventType extends AbstractType | ||||
|                     'class' => '', | ||||
|                 ], | ||||
|             ]) | ||||
|             ->add('moderator', UserPickerType::class, [ | ||||
|                 'center' => $options['center'], | ||||
|                 'role' => $options['role'], | ||||
|                 'placeholder' => 'Pick a moderator', | ||||
|                 'attr' => [ | ||||
|                     'class' => '', | ||||
|                 ], | ||||
|                 'required' => false, | ||||
|             ->add('moderator', PickUserDynamicType::class, [ | ||||
|                 'label' => 'Pick a moderator', | ||||
|             ]) | ||||
|             ->add('location', PickUserLocationType::class, [ | ||||
|                 'label' => 'event.fields.location', | ||||
|   | ||||
| @@ -1,10 +1,14 @@ | ||||
| {% extends '@ChillEvent/layout.html.twig' %} | ||||
| {% extends '@ChillEvent/layout.html.twig' %} {% block js %} | ||||
| {{ encore_entry_script_tags("mod_async_upload") }} | ||||
| {{ encore_entry_script_tags("mod_pickentity_type") }} | ||||
|  | ||||
| {% block title 'Event edit'|trans %} | ||||
| {% endblock %} {% block css %} | ||||
| {{ encore_entry_link_tags("mod_async_upload") }} | ||||
| {{ encore_entry_link_tags("mod_pickentity_type") }} | ||||
|  | ||||
| {% block event_content -%} | ||||
| {% endblock %} {% block title 'Event edit'|trans %} {% block event_content -%} | ||||
| <div class="col-10"> | ||||
|     <h1>{{ 'Event edit'|trans }}</h1> | ||||
|     <h1>{{ "Event edit" | trans }}</h1> | ||||
|  | ||||
|     {{ form_start(edit_form) }} | ||||
|     {{ form_errors(edit_form) }} | ||||
| @@ -12,7 +16,7 @@ | ||||
|     {{ form_row(edit_form.name) }} | ||||
|     {{ form_row(edit_form.date) }} | ||||
|  | ||||
|     {{ form_row(edit_form.type, { 'label': 'Event type' }) }} | ||||
|     {{ form_row(edit_form.type, { label: "Event type" }) }} | ||||
|     {{ form_row(edit_form.moderator) }} | ||||
|     {{ form_row(edit_form.location) }} | ||||
|     {{ form_row(edit_form.organizationCost) }} | ||||
| @@ -22,16 +26,22 @@ | ||||
|  | ||||
|     <ul class="record_actions sticky-form-buttons"> | ||||
|         <li class="cancel"> | ||||
|             <a href="{{ chill_return_path_or('chill_event_event_list') }}" class="btn btn-cancel"> | ||||
|                 {{ 'List of events'|trans|chill_return_path_label }} | ||||
|             <a | ||||
|                 href="{{ chill_return_path_or('chill_event_event_list') }}" | ||||
|                 class="btn btn-cancel" | ||||
|             > | ||||
|                 {{ "List of events" | trans | chill_return_path_label }} | ||||
|             </a> | ||||
|         </li> | ||||
|         <li> | ||||
|             {{ form_widget(edit_form.submit, { 'attr' : { 'class' : 'btn btn-update' } }) }} | ||||
|             {{ | ||||
|                 form_widget(edit_form.submit, { | ||||
|                     attr: { class: "btn btn-update" } | ||||
|                 }) | ||||
|             }} | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|     {{ form_end(edit_form) }} | ||||
|  | ||||
| </div> | ||||
| {% endblock %} | ||||
|   | ||||
| @@ -1,41 +1,41 @@ | ||||
| {% extends '@ChillEvent/layout.html.twig' %} | ||||
| {% extends '@ChillEvent/layout.html.twig' %} {% block js %} | ||||
| {{ encore_entry_script_tags("mod_async_upload") }} | ||||
| {{ encore_entry_script_tags("mod_pickentity_type") }} | ||||
|  | ||||
| {% block js %} | ||||
|     {{ encore_entry_script_tags('mod_async_upload') }} | ||||
| {% endblock %} | ||||
| {% endblock %} {% block css %} | ||||
| {{ encore_entry_link_tags("mod_async_upload") }} | ||||
| {{ encore_entry_link_tags("mod_pickentity_type") }} | ||||
|  | ||||
| {% block css %} | ||||
|     {{ encore_entry_link_tags('mod_async_upload') }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block title 'Event creation'|trans %} | ||||
|  | ||||
| {% block event_content -%} | ||||
| {% endblock %} {% block title 'Event creation'|trans %} {% block event_content | ||||
| -%} | ||||
| <div class="col-10"> | ||||
|     <h1>{{ 'Event creation'|trans }}</h1> | ||||
|     <h1>{{ "Event creation" | trans }}</h1> | ||||
|  | ||||
|     {{ form_start(form) }} | ||||
|     {{ form_errors(form) }} | ||||
|     {{ form_row(form.circle) }} | ||||
|     {{ form_row(form.name) }} | ||||
|     {{ form_row(form.date) }} | ||||
|  | ||||
|     {{ form_row(form.type, { 'label': 'Event type' }) }} | ||||
|     {{ form_row(form.type, { label: "Event type" }) }} | ||||
|     {{ form_row(form.moderator) }} | ||||
|     {{ form_row(form.location) }} | ||||
|     {{ form_row(form.organizationCost) }} | ||||
|  | ||||
|     {{ form_row(form.comment) }} | ||||
|     {{ form_row(form.documents) }} | ||||
|  | ||||
|     <ul class="record_actions sticky-form-buttons"> | ||||
|         <li class="cancel"> | ||||
|             <a href="{{ path('chill_event_list_most_recent') }}" class="btn btn-cancel"> | ||||
|                 {{ 'Back to the most recent events'|trans }} | ||||
|             <a | ||||
|                 href="{{ path('chill_event_list_most_recent') }}" | ||||
|                 class="btn btn-cancel" | ||||
|             > | ||||
|                 {{ "Back to the most recent events" | trans }} | ||||
|             </a> | ||||
|         </li> | ||||
|         <li> | ||||
|             {{ form_widget(form.submit, { 'attr' : { 'class' : 'btn btn-create' } }) }} | ||||
|             {{ | ||||
|                 form_widget(form.submit, { attr: { class: "btn btn-create" } }) | ||||
|             }} | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|   | ||||
| @@ -1,92 +1,126 @@ | ||||
| {% extends '@ChillEvent/layout.html.twig' %} | ||||
| {% extends '@ChillEvent/layout.html.twig' %} {% block title 'Events'|trans %} {% | ||||
| block js %} | ||||
| {{ parent() }} | ||||
| {{ encore_entry_script_tags("mod_pickentity_type") }} | ||||
| {% endblock %} {% block css %} | ||||
| {{ parent() }} | ||||
| {{ encore_entry_link_tags("mod_pickentity_type") }} | ||||
| {% endblock %} {% block content %} | ||||
| <div class="col-10"> | ||||
|     <h1>{{ block("title") }}</h1> | ||||
|  | ||||
| {% block title 'Events'|trans %} | ||||
|     {{ filter | chill_render_filter_order_helper }} | ||||
|  | ||||
| {% block js %} | ||||
|     {{ parent() }} | ||||
|     {{ encore_entry_script_tags('mod_pickentity_type') }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block css %} | ||||
|     {{ parent() }} | ||||
|     {{ encore_entry_link_tags('mod_pickentity_type') }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block content %} | ||||
|     <h1>{{ block('title') }}</h1> | ||||
|  | ||||
|     {{ filter|chill_render_filter_order_helper }} | ||||
|  | ||||
| {# {% if is_granted('CHILL_EVENT_CREATE') %} #} | ||||
|         <ul class="record_actions"> | ||||
|             <li><a class="btn btn-create" href="{{ chill_path_add_return_path('chill_event__event_new_pickcenter') }}">{{ 'Add an event'|trans }}</a></li> | ||||
|         </ul> | ||||
|    {#  {% endif %} #} | ||||
|     {% if events|length > 0 %} | ||||
|         <div class="flex-table"> | ||||
|             {% for e in events %} | ||||
|                 <div class="item-bloc"> | ||||
|                     <div class="item-row"> | ||||
|                         <div class="item-col"> | ||||
|                             <div class="denomination h2"> | ||||
|                                 {{ e.name }} | ||||
|                             </div> | ||||
|                             <p>{{ e.type.name|localize_translatable_string }}</p> | ||||
|                             {% if e.moderator is not null %} | ||||
|                                 <p>{{ 'Moderator'|trans }}: {{ e.moderator|chill_entity_render_box }}</p> | ||||
|                             {% endif %} | ||||
|                         </div> | ||||
|                         <div class="item-col"> | ||||
|                             <div class="container" style="text-align: right;"> | ||||
|                                 <p>{{ e.date|format_datetime('medium', 'medium') }}</p> | ||||
|                                 <p>{{ 'count participations to this event'|trans({'count': e.participations|length}) }}</p> | ||||
|                             </div> | ||||
|                         </div> | ||||
|     {# {% if is_granted('CHILL_EVENT_CREATE') %} #} | ||||
|     <ul class="record_actions"> | ||||
|         <li> | ||||
|             <a | ||||
|                 class="btn btn-create" | ||||
|                 href="{{ | ||||
|                     chill_path_add_return_path( | ||||
|                         'chill_event__event_new_pickcenter' | ||||
|                     ) | ||||
|                 }}" | ||||
|                 >{{ "Add an event" | trans }}</a | ||||
|             > | ||||
|         </li> | ||||
|     </ul> | ||||
|     {# {% endif %} #} {% if events|length > 0 %} | ||||
|     <div class="flex-table"> | ||||
|         {% for e in events %} | ||||
|         <div class="item-bloc"> | ||||
|             <div class="item-row"> | ||||
|                 <div class="item-col"> | ||||
|                     <div class="denomination h2"> | ||||
|                         {{ e.name }} | ||||
|                     </div> | ||||
|                     {% if e.participations|length > 0 %} | ||||
|                         <div class="item-row separator"> | ||||
|                             <strong>{{ 'Participations'|trans }} : </strong> | ||||
|                             {% for part in e.participations|slice(0, 20) %} | ||||
|                                 {% include '@ChillMain/OnTheFly/_insert_vue_onthefly.html.twig' with { | ||||
|                                     targetEntity: { name: 'person', id: part.person.id }, | ||||
|                                     action: 'show', | ||||
|                                     displayBadge: true, | ||||
|                                     buttonText: part.person|chill_entity_render_string, | ||||
|                                     isDead: part.person.deathdate is not null | ||||
|                                 } %} | ||||
|                             {% endfor %} | ||||
|                             {% if e.participations|length > 20 %} | ||||
|                                 {{ 'events.and_other_count_participants'|trans({'count': e.participations|length - 20}) }} | ||||
|                             {% endif %} | ||||
|                         </div> | ||||
|                     <p>{{ e.type.name | localize_translatable_string }}</p> | ||||
|                     {% if e.moderator is not null %} | ||||
|                     <p> | ||||
|                         {{ "Moderator" | trans }}: | ||||
|                         {{ e.moderator | chill_entity_render_box }} | ||||
|                     </p> | ||||
|                     {% endif %} | ||||
|                     <div class="item-row"> | ||||
|                         <div class="item-col"> | ||||
|                             {{ form_start(eventForms[e.id]) }} | ||||
|                             {{ form_widget(eventForms[e.id].person_id) }} | ||||
|                             {{ form_end(eventForms[e.id]) }} | ||||
|                         </div> | ||||
|                     </div> | ||||
|                     <div class="item-row separator"> | ||||
|                         <div class="item-col item-meta"> | ||||
|                         </div> | ||||
|                         <div class="item-col"> | ||||
|                             <ul class="record_actions"> | ||||
|                                 {% if is_granted('CHILL_EVENT_UPDATE', e) %} | ||||
|                                     <li><a href="{{ chill_path_add_return_path('chill_event__event_delete', {'event_id': e.id}) }}" class="btn btn-delete"></a></li> | ||||
|                                 {% endif %} | ||||
|                                 {% if is_granted('CHILL_EVENT_UPDATE', e) %} | ||||
|                                     <li><a href="{{ chill_path_add_return_path('chill_event__event_edit', {'event_id': e.id}) }}" class="btn btn-edit"></a></li> | ||||
|                                 {% endif %} | ||||
|                                 <li><a href="{{ chill_path_add_return_path('chill_event__event_show', {'event_id': e.id}) }}" class="btn btn-show"></a></li> | ||||
|                             </ul> | ||||
|                         </div> | ||||
|                 </div> | ||||
|                 <div class="item-col"> | ||||
|                     <div class="container" style="text-align: right"> | ||||
|                         <p>{{ e.date|format_datetime('medium', 'medium') }}</p> | ||||
|                         <p> | ||||
|                             {{ 'count participations to this event'|trans({'count': e.participations|length}) }} | ||||
|                         </p> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             {% endfor %} | ||||
|             </div> | ||||
|             {% if e.participations|length > 0 %} | ||||
|             <div class="item-row separator"> | ||||
|                 <strong>{{ "Participations" | trans }} : </strong> | ||||
|                 {% for part in e.participations|slice(0, 20) %} {% include | ||||
|                 '@ChillMain/OnTheFly/_insert_vue_onthefly.html.twig' with { | ||||
|                 targetEntity: { name: 'person', id: part.person.id }, action: | ||||
|                 'show', displayBadge: true, buttonText: | ||||
|                 part.person|chill_entity_render_string, isDead: | ||||
|                 part.person.deathdate is not null } %} {% endfor %} {% if | ||||
|                 e.participations|length > 20 %} | ||||
|                 {{ 'events.and_other_count_participants'|trans({'count': e.participations|length - 20}) }} | ||||
|                 {% endif %} | ||||
|             </div> | ||||
|             {% endif %} | ||||
|             <div class="item-row"> | ||||
|                 <div class="item-col"> | ||||
|                     {{ form_start(eventForms[e.id]) }} | ||||
|                     {{ form_widget(eventForms[e.id].person_id) }} | ||||
|                     {{ form_end(eventForms[e.id]) }} | ||||
|                 </div> | ||||
|             </div> | ||||
|             <div class="item-row separator"> | ||||
|                 <div class="item-col item-meta"></div> | ||||
|                 <div class="item-col"> | ||||
|                     <ul class="record_actions"> | ||||
|                         {% if is_granted('CHILL_EVENT_UPDATE', e) %} | ||||
|                         <li> | ||||
|                             <a | ||||
|                                 href="{{ | ||||
|                                     chill_path_add_return_path( | ||||
|                                         'chill_event__event_delete', | ||||
|                                         { event_id: e.id } | ||||
|                                     ) | ||||
|                                 }}" | ||||
|                                 class="btn btn-delete" | ||||
|                             ></a> | ||||
|                         </li> | ||||
|                         {% endif %} {% if is_granted('CHILL_EVENT_UPDATE', e) %} | ||||
|                         <li> | ||||
|                             <a | ||||
|                                 href="{{ | ||||
|                                     chill_path_add_return_path( | ||||
|                                         'chill_event__event_edit', | ||||
|                                         { event_id: e.id } | ||||
|                                     ) | ||||
|                                 }}" | ||||
|                                 class="btn btn-edit" | ||||
|                             ></a> | ||||
|                         </li> | ||||
|                         {% endif %} | ||||
|                         <li> | ||||
|                             <a | ||||
|                                 href="{{ | ||||
|                                     chill_path_add_return_path( | ||||
|                                         'chill_event__event_show', | ||||
|                                         { event_id: e.id } | ||||
|                                     ) | ||||
|                                 }}" | ||||
|                                 class="btn btn-show" | ||||
|                             ></a> | ||||
|                         </li> | ||||
|                     </ul> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         {% endfor %} | ||||
|     </div> | ||||
|     {% endif %} | ||||
| </div> | ||||
|  | ||||
|     {{ chill_pagination(pagination) }} | ||||
| {{ chill_pagination(pagination) }} | ||||
|  | ||||
| {% endblock %} | ||||
|   | ||||
| @@ -173,10 +173,10 @@ | ||||
|                         {{ form_widget(entry) }} | ||||
|                         {{ form_errors(entry) }} | ||||
|                     </div> | ||||
|                 </li> | ||||
|                 </li>  | ||||
|             {% else %} | ||||
|                 <li data-collection-empty-explain="1"> | ||||
|                     <span class="chill-no-data-statement">{{ form.vars.empty_collection_explain|default('No item')|trans }}</span> | ||||
|                     <span class="chill-no-data-statement">{{ form.vars.empty_collection_explain|default('No entities')|trans }}</span> | ||||
|                 </li> | ||||
|             {% endfor %} | ||||
|         </ul> | ||||
|   | ||||
| @@ -28,7 +28,12 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| final readonly class GeographicalUnitStatAggregator implements AggregatorInterface | ||||
| { | ||||
|     public function __construct(private GeographicalUnitLayerRepositoryInterface $geographicalUnitLayerRepository, private TranslatableStringHelperInterface $translatableStringHelper, private RollingDateConverterInterface $rollingDateConverter) {} | ||||
|     public function __construct( | ||||
|         private GeographicalUnitLayerRepositoryInterface $geographicalUnitLayerRepository, | ||||
|         private TranslatableStringHelperInterface $translatableStringHelper, | ||||
|         private RollingDateConverterInterface $rollingDateConverter | ||||
|     ) { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|     { | ||||
| @@ -41,10 +46,10 @@ final readonly class GeographicalUnitStatAggregator implements AggregatorInterfa | ||||
|  | ||||
|         $qb->andWhere( | ||||
|             $qb->expr()->andX( | ||||
|                 'acp_geog_agg_location_history.startDate <= :acp_geog_aggregator_date', | ||||
|                 'acp_geog_agg_location_history.startDate <= LEAST(:acp_geog_aggregator_date, acp.closingDate)', | ||||
|                 $qb->expr()->orX( | ||||
|                     'acp_geog_agg_location_history.endDate IS NULL', | ||||
|                     'acp_geog_agg_location_history.endDate > :acp_geog_aggregator_date' | ||||
|                     'acp_geog_agg_location_history.endDate > LEAST(:acp_geog_aggregator_date, acp.closingDate)' | ||||
|                 ) | ||||
|             ) | ||||
|         ); | ||||
| @@ -56,9 +61,9 @@ final readonly class GeographicalUnitStatAggregator implements AggregatorInterfa | ||||
|             Join::WITH, | ||||
|             $qb->expr()->andX( | ||||
|                 'IDENTITY(acp_geog_agg_address_person_location.person) = IDENTITY(acp_geog_agg_location_history.personLocation)', | ||||
|                 'acp_geog_agg_address_person_location.validFrom <= :acp_geog_aggregator_date', | ||||
|                 'acp_geog_agg_address_person_location.validFrom <= LEAST(:acp_geog_aggregator_date, acp.closingDate)', | ||||
|                 $qb->expr()->orX( | ||||
|                     'acp_geog_agg_address_person_location.validTo > :acp_geog_aggregator_date', | ||||
|                     'acp_geog_agg_address_person_location.validTo > LEAST(:acp_geog_aggregator_date, acp.closingDate)', | ||||
|                     $qb->expr()->isNull('acp_geog_agg_address_person_location.validTo') | ||||
|                 ) | ||||
|             ) | ||||
|   | ||||
| @@ -33,7 +33,13 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  */ | ||||
| class GeographicalUnitStatFilter implements FilterInterface | ||||
| { | ||||
|     public function __construct(private readonly GeographicalUnitRepositoryInterface $geographicalUnitRepository, private readonly GeographicalUnitLayerRepositoryInterface $geographicalUnitLayerRepository, private readonly TranslatableStringHelperInterface $translatableStringHelper, private readonly RollingDateConverterInterface $rollingDateConverter) {} | ||||
|     public function __construct( | ||||
|         private readonly GeographicalUnitRepositoryInterface $geographicalUnitRepository, | ||||
|         private readonly GeographicalUnitLayerRepositoryInterface $geographicalUnitLayerRepository, | ||||
|         private readonly TranslatableStringHelperInterface $translatableStringHelper, | ||||
|         private readonly RollingDateConverterInterface $rollingDateConverter | ||||
|     ) { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|     { | ||||
| @@ -46,18 +52,19 @@ class GeographicalUnitStatFilter implements FilterInterface | ||||
|             'SELECT | ||||
|                 1 | ||||
|             FROM '.AccompanyingPeriod\AccompanyingPeriodLocationHistory::class.' acp_geog_filter_location_history | ||||
|             JOIN acp_geog_filter_location_history.period acp_geog_filter_location_history_period | ||||
|             LEFT JOIN '.PersonHouseholdAddress::class.' acp_geog_filter_address_person_location | ||||
|                 WITH IDENTITY(acp_geog_filter_location_history.personLocation) = IDENTITY(acp_geog_filter_address_person_location.person) | ||||
|                 AND | ||||
|                 (acp_geog_filter_address_person_location.validFrom < LEAST(:acp_geog_filter_date, acp_geog_filter_location_history_period.closingDate) AND ( | ||||
|                     acp_geog_filter_address_person_location.validTo IS NULL OR acp_geog_filter_address_person_location.validTo > LEAST(:acp_geog_filter_date, acp_geog_filter_location_history_period.closingDate) | ||||
|                 )) | ||||
|             LEFT JOIN '.Address::class.' acp_geog_filter_address | ||||
|                 WITH COALESCE(IDENTITY(acp_geog_filter_address_person_location.address), IDENTITY(acp_geog_filter_location_history.addressLocation)) = acp_geog_filter_address.id | ||||
|             LEFT JOIN acp_geog_filter_address.geographicalUnits acp_geog_filter_units | ||||
|             WHERE | ||||
|                 (acp_geog_filter_location_history.startDate <= :acp_geog_filter_date AND ( | ||||
|                     acp_geog_filter_location_history.endDate IS NULL OR acp_geog_filter_location_history.endDate > :acp_geog_filter_date | ||||
|                 )) | ||||
|                 AND | ||||
|                 (acp_geog_filter_address_person_location.validFrom < :acp_geog_filter_date AND ( | ||||
|                     acp_geog_filter_address_person_location.validTo IS NULL OR acp_geog_filter_address_person_location.validTo > :acp_geog_filter_date | ||||
|                 (acp_geog_filter_location_history.startDate <= LEAST(:acp_geog_filter_date, acp_geog_filter_location_history_period.closingDate) AND ( | ||||
|                     acp_geog_filter_location_history.endDate IS NULL OR acp_geog_filter_location_history.endDate > LEAST(:acp_geog_filter_date, acp_geog_filter_location_history_period.closingDate) | ||||
|                 )) | ||||
|                 AND acp_geog_filter_units IN (:acp_geog_filter_units) | ||||
|                 AND acp_geog_filter_location_history.period = acp.id | ||||
|   | ||||
		Reference in New Issue
	
	Block a user