mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-14 06:14: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;
|
$limit = 50;
|
||||||
$offset = 0;
|
$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')));
|
$expiration = (new \DateTimeImmutable('now'))->add(new \DateInterval($input->getOption('subscription-duration')));
|
||||||
$users = $this->userRepository->findAllAsArray('fr');
|
$users = $this->userRepository->findAllAsArray('fr');
|
||||||
$created = 0;
|
$created = 0;
|
||||||
@ -95,7 +93,6 @@ final class MapAndSubscribeUserCalendarCommand extends Command
|
|||||||
} catch (UserAbsenceSyncException $e) {
|
} catch (UserAbsenceSyncException $e) {
|
||||||
$this->logger->error('could not sync user absence', ['userId' => $user->getId(), 'email' => $user->getEmail(), 'exception' => $e->getTraceAsString(), 'message' => $e->getMessage()]);
|
$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()));
|
$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.
|
// 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 = '' %}
|
{{ filter | chill_render_filter_order_helper }}
|
||||||
|
|
||||||
{% 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 %}
|
|
||||||
|
|
||||||
|
{% 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>
|
</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 %}
|
{% endblock %}
|
||||||
|
@ -1,74 +1,70 @@
|
|||||||
{#
|
{# * Copyright (C) 2018, Champs Libres Cooperative SCRLFS,
|
||||||
* Copyright (C) 2018, Champs Libres Cooperative SCRLFS, <http://www.champs-libres.coop>
|
<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
|
||||||
* This program is free software: you can redistribute it and/or modify
|
Public License as * published by the Free Software Foundation, either version 3
|
||||||
* it under the terms of the GNU Affero General Public License as
|
of the * License, or (at your option) any later version. * * This program is
|
||||||
* published by the Free Software Foundation, either version 3 of the
|
distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY;
|
||||||
* License, or (at your option) any later version.
|
without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A
|
||||||
*
|
PARTICULAR PURPOSE. See the * GNU Affero General Public License for more
|
||||||
* This program is distributed in the hope that it will be useful,
|
details. * * You should have received a copy of the GNU Affero General Public
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
License * along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
#} {% extends "@ChillPerson/Person/layout.html.twig" %} {% set activeRouteKey =
|
||||||
* GNU Affero General Public License for more details.
|
'' %} {% import "@ChillDocStore/Macro/macro.html.twig" as m %} {% block title %}
|
||||||
*
|
{{ 'Documents for %name%'|trans({ '%name%': person|chill_entity_render_string } ) }}
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
{% endblock %} {% block js %}
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
{{ parent() }}
|
||||||
#}
|
{{ encore_entry_script_tags("mod_docgen_picktemplate") }}
|
||||||
|
{{ encore_entry_script_tags("mod_entity_workflow_pick") }}
|
||||||
{% extends "@ChillPerson/Person/layout.html.twig" %}
|
{{ encore_entry_script_tags("mod_document_action_buttons_group") }}
|
||||||
|
{% endblock %} {% block css %}
|
||||||
{% set activeRouteKey = '' %}
|
{{ parent() }}
|
||||||
|
{{ encore_entry_link_tags("mod_docgen_picktemplate") }}
|
||||||
{% import "@ChillDocStore/Macro/macro.html.twig" as m %}
|
{{ encore_entry_link_tags("mod_entity_workflow_pick") }}
|
||||||
|
{{ encore_entry_link_tags("mod_document_action_buttons_group") }}
|
||||||
{% block title %}
|
{% endblock %} {% block content %}
|
||||||
{{ '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">
|
<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 %}
|
{% if documents|length > 5 %}
|
||||||
<p class="chill-no-data-statement">{{ 'No documents'|trans }}</p>
|
<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 %}
|
{% else %}
|
||||||
<div class="flex-table chill-task-list">
|
<div class="flex-table chill-task-list">
|
||||||
{% for document in documents %}
|
{% for document in documents %}
|
||||||
{{ document|chill_generic_doc_render }}
|
{{ document | chill_generic_doc_render }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% 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>
|
<div
|
||||||
|
data-docgen-template-picker="data-docgen-template-picker"
|
||||||
{% if is_granted('CHILL_PERSON_DOCUMENT_CREATE', person) %}
|
data-entity-class="Chill\PersonBundle\Entity\Person"
|
||||||
<ul class="record_actions sticky-form-buttons">
|
data-entity-id="{{ person.id }}"
|
||||||
<li class="create">
|
></div>
|
||||||
<a href="{{ path('person_document_new', {'person': person.id}) }}" class="btn btn-create">
|
|
||||||
{{ 'Create new document' | trans }}
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
|
{% 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>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -13,7 +13,7 @@ Update document: Modifier le document
|
|||||||
Edit attributes: Modifier les propriétés du document
|
Edit attributes: Modifier les propriétés du document
|
||||||
Existing document: Document existant
|
Existing document: Document existant
|
||||||
No document to download: Aucun document à télécharger
|
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é
|
No document found: Aucun document trouvé
|
||||||
The document is successfully registered: Le document est enregistré
|
The document is successfully registered: Le document est enregistré
|
||||||
The document is successfully updated: Le document est mis à jour
|
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 ?
|
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é
|
The document is successfully removed: Le document a été supprimé
|
||||||
|
|
||||||
|
|
||||||
# dropzone upload
|
# dropzone upload
|
||||||
File too big: Fichier trop volumineux
|
File too big: Fichier trop volumineux
|
||||||
Drop your file or click here: Cliquez ici ou faites glissez votre nouveau fichier dans cette zone
|
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\ChillCollectionType;
|
||||||
use Chill\MainBundle\Form\Type\ChillDateTimeType;
|
use Chill\MainBundle\Form\Type\ChillDateTimeType;
|
||||||
use Chill\MainBundle\Form\Type\CommentType;
|
use Chill\MainBundle\Form\Type\CommentType;
|
||||||
|
use Chill\MainBundle\Form\Type\PickUserDynamicType;
|
||||||
use Chill\MainBundle\Form\Type\PickUserLocationType;
|
use Chill\MainBundle\Form\Type\PickUserLocationType;
|
||||||
use Chill\MainBundle\Form\Type\ScopePickerType;
|
use Chill\MainBundle\Form\Type\ScopePickerType;
|
||||||
use Chill\MainBundle\Form\Type\UserPickerType;
|
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\MoneyType;
|
use Symfony\Component\Form\Extension\Core\Type\MoneyType;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
@ -45,14 +45,8 @@ class EventType extends AbstractType
|
|||||||
'class' => '',
|
'class' => '',
|
||||||
],
|
],
|
||||||
])
|
])
|
||||||
->add('moderator', UserPickerType::class, [
|
->add('moderator', PickUserDynamicType::class, [
|
||||||
'center' => $options['center'],
|
'label' => 'Pick a moderator',
|
||||||
'role' => $options['role'],
|
|
||||||
'placeholder' => 'Pick a moderator',
|
|
||||||
'attr' => [
|
|
||||||
'class' => '',
|
|
||||||
],
|
|
||||||
'required' => false,
|
|
||||||
])
|
])
|
||||||
->add('location', PickUserLocationType::class, [
|
->add('location', PickUserLocationType::class, [
|
||||||
'label' => 'event.fields.location',
|
'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">
|
<div class="col-10">
|
||||||
<h1>{{ 'Event edit'|trans }}</h1>
|
<h1>{{ "Event edit" | trans }}</h1>
|
||||||
|
|
||||||
{{ form_start(edit_form) }}
|
{{ form_start(edit_form) }}
|
||||||
{{ form_errors(edit_form) }}
|
{{ form_errors(edit_form) }}
|
||||||
@ -12,7 +16,7 @@
|
|||||||
{{ form_row(edit_form.name) }}
|
{{ form_row(edit_form.name) }}
|
||||||
{{ form_row(edit_form.date) }}
|
{{ 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.moderator) }}
|
||||||
{{ form_row(edit_form.location) }}
|
{{ form_row(edit_form.location) }}
|
||||||
{{ form_row(edit_form.organizationCost) }}
|
{{ form_row(edit_form.organizationCost) }}
|
||||||
@ -22,16 +26,22 @@
|
|||||||
|
|
||||||
<ul class="record_actions sticky-form-buttons">
|
<ul class="record_actions sticky-form-buttons">
|
||||||
<li class="cancel">
|
<li class="cancel">
|
||||||
<a href="{{ chill_return_path_or('chill_event_event_list') }}" class="btn btn-cancel">
|
<a
|
||||||
{{ 'List of events'|trans|chill_return_path_label }}
|
href="{{ chill_return_path_or('chill_event_event_list') }}"
|
||||||
|
class="btn btn-cancel"
|
||||||
|
>
|
||||||
|
{{ "List of events" | trans | chill_return_path_label }}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
{{ form_widget(edit_form.submit, { 'attr' : { 'class' : 'btn btn-update' } }) }}
|
{{
|
||||||
|
form_widget(edit_form.submit, {
|
||||||
|
attr: { class: "btn btn-update" }
|
||||||
|
})
|
||||||
|
}}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
{{ form_end(edit_form) }}
|
{{ form_end(edit_form) }}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% 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 %}
|
{% endblock %} {% block css %}
|
||||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
{{ encore_entry_link_tags("mod_async_upload") }}
|
||||||
{% endblock %}
|
{{ encore_entry_link_tags("mod_pickentity_type") }}
|
||||||
|
|
||||||
{% block css %}
|
{% endblock %} {% block title 'Event creation'|trans %} {% block event_content
|
||||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
-%}
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block title 'Event creation'|trans %}
|
|
||||||
|
|
||||||
{% block event_content -%}
|
|
||||||
<div class="col-10">
|
<div class="col-10">
|
||||||
<h1>{{ 'Event creation'|trans }}</h1>
|
<h1>{{ "Event creation" | trans }}</h1>
|
||||||
|
|
||||||
{{ form_start(form) }}
|
{{ form_start(form) }}
|
||||||
{{ form_errors(form) }}
|
{{ form_errors(form) }}
|
||||||
{{ form_row(form.circle) }}
|
{{ form_row(form.circle) }}
|
||||||
{{ form_row(form.name) }}
|
{{ form_row(form.name) }}
|
||||||
{{ form_row(form.date) }}
|
{{ 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.moderator) }}
|
||||||
{{ form_row(form.location) }}
|
{{ form_row(form.location) }}
|
||||||
{{ form_row(form.organizationCost) }}
|
{{ form_row(form.organizationCost) }}
|
||||||
|
|
||||||
{{ form_row(form.comment) }}
|
{{ form_row(form.comment) }}
|
||||||
{{ form_row(form.documents) }}
|
{{ form_row(form.documents) }}
|
||||||
|
|
||||||
<ul class="record_actions sticky-form-buttons">
|
<ul class="record_actions sticky-form-buttons">
|
||||||
<li class="cancel">
|
<li class="cancel">
|
||||||
<a href="{{ path('chill_event_list_most_recent') }}" class="btn btn-cancel">
|
<a
|
||||||
{{ 'Back to the most recent events'|trans }}
|
href="{{ path('chill_event_list_most_recent') }}"
|
||||||
|
class="btn btn-cancel"
|
||||||
|
>
|
||||||
|
{{ "Back to the most recent events" | trans }}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
{{ form_widget(form.submit, { 'attr' : { 'class' : 'btn btn-create' } }) }}
|
{{
|
||||||
|
form_widget(form.submit, { attr: { class: "btn btn-create" } })
|
||||||
|
}}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</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 %}
|
{# {% if is_granted('CHILL_EVENT_CREATE') %} #}
|
||||||
{{ parent() }}
|
<ul class="record_actions">
|
||||||
{{ encore_entry_script_tags('mod_pickentity_type') }}
|
<li>
|
||||||
{% endblock %}
|
<a
|
||||||
|
class="btn btn-create"
|
||||||
{% block css %}
|
href="{{
|
||||||
{{ parent() }}
|
chill_path_add_return_path(
|
||||||
{{ encore_entry_link_tags('mod_pickentity_type') }}
|
'chill_event__event_new_pickcenter'
|
||||||
{% endblock %}
|
)
|
||||||
|
}}"
|
||||||
{% block content %}
|
>{{ "Add an event" | trans }}</a
|
||||||
<h1>{{ block('title') }}</h1>
|
>
|
||||||
|
</li>
|
||||||
{{ filter|chill_render_filter_order_helper }}
|
</ul>
|
||||||
|
{# {% endif %} #} {% if events|length > 0 %}
|
||||||
{# {% if is_granted('CHILL_EVENT_CREATE') %} #}
|
<div class="flex-table">
|
||||||
<ul class="record_actions">
|
{% for e in events %}
|
||||||
<li><a class="btn btn-create" href="{{ chill_path_add_return_path('chill_event__event_new_pickcenter') }}">{{ 'Add an event'|trans }}</a></li>
|
<div class="item-bloc">
|
||||||
</ul>
|
<div class="item-row">
|
||||||
{# {% endif %} #}
|
<div class="item-col">
|
||||||
{% if events|length > 0 %}
|
<div class="denomination h2">
|
||||||
<div class="flex-table">
|
{{ e.name }}
|
||||||
{% 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>
|
|
||||||
</div>
|
</div>
|
||||||
{% if e.participations|length > 0 %}
|
<p>{{ e.type.name | localize_translatable_string }}</p>
|
||||||
<div class="item-row separator">
|
{% if e.moderator is not null %}
|
||||||
<strong>{{ 'Participations'|trans }} : </strong>
|
<p>
|
||||||
{% for part in e.participations|slice(0, 20) %}
|
{{ "Moderator" | trans }}:
|
||||||
{% include '@ChillMain/OnTheFly/_insert_vue_onthefly.html.twig' with {
|
{{ e.moderator | chill_entity_render_box }}
|
||||||
targetEntity: { name: 'person', id: part.person.id },
|
</p>
|
||||||
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 %}
|
{% endif %}
|
||||||
<div class="item-row">
|
</div>
|
||||||
<div class="item-col">
|
<div class="item-col">
|
||||||
{{ form_start(eventForms[e.id]) }}
|
<div class="container" style="text-align: right">
|
||||||
{{ form_widget(eventForms[e.id].person_id) }}
|
<p>{{ e.date|format_datetime('medium', 'medium') }}</p>
|
||||||
{{ form_end(eventForms[e.id]) }}
|
<p>
|
||||||
</div>
|
{{ 'count participations to this event'|trans({'count': e.participations|length}) }}
|
||||||
</div>
|
</p>
|
||||||
<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>
|
||||||
</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>
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
{{ chill_pagination(pagination) }}
|
{{ chill_pagination(pagination) }}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -173,10 +173,10 @@
|
|||||||
{{ form_widget(entry) }}
|
{{ form_widget(entry) }}
|
||||||
{{ form_errors(entry) }}
|
{{ form_errors(entry) }}
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
{% else %}
|
{% else %}
|
||||||
<li data-collection-empty-explain="1">
|
<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>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -28,7 +28,12 @@ use Symfony\Component\Form\FormBuilderInterface;
|
|||||||
|
|
||||||
final readonly class GeographicalUnitStatAggregator implements AggregatorInterface
|
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
|
public function addRole(): ?string
|
||||||
{
|
{
|
||||||
@ -41,10 +46,10 @@ final readonly class GeographicalUnitStatAggregator implements AggregatorInterfa
|
|||||||
|
|
||||||
$qb->andWhere(
|
$qb->andWhere(
|
||||||
$qb->expr()->andX(
|
$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(
|
$qb->expr()->orX(
|
||||||
'acp_geog_agg_location_history.endDate IS NULL',
|
'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,
|
Join::WITH,
|
||||||
$qb->expr()->andX(
|
$qb->expr()->andX(
|
||||||
'IDENTITY(acp_geog_agg_address_person_location.person) = IDENTITY(acp_geog_agg_location_history.personLocation)',
|
'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(
|
$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')
|
$qb->expr()->isNull('acp_geog_agg_address_person_location.validTo')
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -33,7 +33,13 @@ use Symfony\Component\Form\FormBuilderInterface;
|
|||||||
*/
|
*/
|
||||||
class GeographicalUnitStatFilter implements FilterInterface
|
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
|
public function addRole(): ?string
|
||||||
{
|
{
|
||||||
@ -46,18 +52,19 @@ class GeographicalUnitStatFilter implements FilterInterface
|
|||||||
'SELECT
|
'SELECT
|
||||||
1
|
1
|
||||||
FROM '.AccompanyingPeriod\AccompanyingPeriodLocationHistory::class.' acp_geog_filter_location_history
|
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
|
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)
|
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
|
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
|
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
|
LEFT JOIN acp_geog_filter_address.geographicalUnits acp_geog_filter_units
|
||||||
WHERE
|
WHERE
|
||||||
(acp_geog_filter_location_history.startDate <= :acp_geog_filter_date AND (
|
(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 > :acp_geog_filter_date
|
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_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
|
|
||||||
))
|
))
|
||||||
AND acp_geog_filter_units IN (:acp_geog_filter_units)
|
AND acp_geog_filter_units IN (:acp_geog_filter_units)
|
||||||
AND acp_geog_filter_location_history.period = acp.id
|
AND acp_geog_filter_location_history.period = acp.id
|
||||||
|
Loading…
x
Reference in New Issue
Block a user