mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-13 22:04:23 +00:00
Merge branch 'master' of https://gitlab.com/Chill-Projet/chill-bundles into ticket-app-master
This commit is contained in:
commit
ec17dd7de2
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
|
||||
|
Loading…
x
Reference in New Issue
Block a user