diff --git a/Resources/translations/messages.fr.yml b/Resources/translations/messages.fr.yml
index b1bb9ec4d..ec2ffc9e1 100644
--- a/Resources/translations/messages.fr.yml
+++ b/Resources/translations/messages.fr.yml
@@ -14,6 +14,8 @@ birthdate: date de naissance
dateOfBirth: date de naissance
dateofbirth: date de naissance
'Unknown date of birth': 'Date de naissance inconnue'
+Birthdate before: Date de naissance avant le
+Birthdate after: Date de naissance après le
Nationality: Nationalité
nationality: nationalité
'Without nationality': 'Sans nationalité'
@@ -85,7 +87,7 @@ Reset: 'Remise à zéro'
'The person has been created': 'Le dossier a été créé'
'Person search results': 'Recherche de personnes'
'Search within persons': 'Recherche parmi les personnes'
-'%total% persons matching the search %pattern%': '{0} Aucune personne ne correspond aux termes de recherche "%pattern%" | {1} Une personne a été trouvée par la recherche "%pattern%" | ]1,Inf] %total% personnes correspondent aux termes de recherche "%pattern%".'
+'%total% persons matching the search pattern:': '{0} Aucune personne ne correspond aux termes de recherche : | {1} Une personne a été trouvée par la recherche : | ]1,Inf] %total% personnes correspondent aux termes de recherche :'
'Last opening since %last_opening%': 'Dernière ouverture le %last_opening%.'
'Person accompanying period - %name%': 'Historique du dossier - %name%'
'Opening date': 'Date d''ouverture'
diff --git a/Resources/views/Person/list.html.twig b/Resources/views/Person/list.html.twig
index 30676268b..4d7288d9a 100644
--- a/Resources/views/Person/list.html.twig
+++ b/Resources/views/Person/list.html.twig
@@ -16,7 +16,12 @@
#}
{{ 'Person search results'|trans }}
-{{ '%total% persons matching the search %pattern%'|transchoice( total, {'%pattern%': pattern, '%total%' : total}) }}
+
+ {{ '%total% persons matching the search pattern:'|transchoice( total, { '%total%' : total}) }}
+
+ {{ pattern }}
+
+
{{ 'Results %start%-%end% of %total%'|trans({ '%start%' : start, '%end%': start + persons|length, '%total%' : total } ) }}
@@ -64,6 +69,11 @@
{{ 'Add a person'|trans }}
+
+
+ {{ 'Advanced search'|trans }}
+
+
{% if preview == true and persons|length < total %}
@@ -71,14 +81,15 @@
{% endif %}
-
-
- {{ 'Advanced search'|trans }}
-
-
-
-
+{% else %}
+
{% endif %}
{% if preview == false %}
diff --git a/Search/PersonSearch.php b/Search/PersonSearch.php
index 2181e8332..e3e199763 100644
--- a/Search/PersonSearch.php
+++ b/Search/PersonSearch.php
@@ -122,7 +122,8 @@ class PersonSearch extends AbstractSearch implements ContainerAwareInterface,
array(
'persons' => $this->search($terms, $start, $limit, $options),
'pattern' => $this->recomposePattern($terms, array('nationality',
- 'firstname', 'lastname', 'birthdate', 'gender'), $terms['_domain']),
+ 'firstname', 'lastname', 'birthdate', 'gender',
+ 'birthdate-before','birthdate-after'), $terms['_domain']),
'total' => $total,
'start' => $start,
'search_name' => self::NAME,
@@ -194,16 +195,32 @@ class PersonSearch extends AbstractSearch implements ContainerAwareInterface,
->setParameter('lastname', '%'.$terms['lastname'].'%');
}
- if (array_key_exists('birthdate', $terms)) {
+ foreach (['birthdate', 'birthdate-before', 'birthdate-after'] as $key)
+ if (array_key_exists($key, $terms)) {
try {
- $date = new \DateTime($terms['birthdate']);
+ $date = new \DateTime($terms[$key]);
} catch (\Exception $ex) {
throw new ParsingException('The date is '
. 'not parsable', 0, $ex);
}
- $qb->andWhere($qb->expr()->eq('p.birthdate', ':birthdate'))
- ->setParameter('birthdate', $date);
+ switch($key) {
+ case 'birthdate':
+ $qb->andWhere($qb->expr()->eq('p.birthdate', ':birthdate'))
+ ->setParameter('birthdate', $date);
+ break;
+ case 'birthdate-before':
+ $qb->andWhere($qb->expr()->lt('p.birthdate', ':birthdatebefore'))
+ ->setParameter('birthdatebefore', $date);
+ break;
+ case 'birthdate-after':
+ $qb->andWhere($qb->expr()->gt('p.birthdate', ':birthdateafter'))
+ ->setParameter('birthdateafter', $date);
+ break;
+ default:
+ throw new \LogicException("this case $key should not exists");
+ }
+
}
if (array_key_exists('gender', $terms)) {
@@ -271,10 +288,18 @@ class PersonSearch extends AbstractSearch implements ContainerAwareInterface,
'label' => 'Last name',
'required' => false
])
+ ->add('birthdate-after', ChillDateType::class, [
+ 'label' => 'Birthdate after',
+ 'required' => false
+ ])
->add('birthdate', ChillDateType::class, [
'label' => 'Birthdate',
'required' => false
])
+ ->add('birthdate-before', ChillDateType::class, [
+ 'label' => 'Birthdate before',
+ 'required' => false
+ ])
->add('gender', ChoiceType::class, [
'choices' => [
'Man' => Person::MALE_GENDER,
@@ -299,11 +324,13 @@ class PersonSearch extends AbstractSearch implements ContainerAwareInterface,
.' ';
}
- $string .= empty($data['birthdate']) ?
- ''
- :
- 'birthdate:'.$data['birthdate']->format('Y-m-d').' '
- ;
+ foreach (['birthdate', 'birthdate-before', 'birthdate-after'] as $key) {
+ $string .= empty($data[$key]) ?
+ ''
+ :
+ $key.':'.$data[$key]->format('Y-m-d').' '
+ ;
+ }
return $string;
}
@@ -315,18 +342,25 @@ class PersonSearch extends AbstractSearch implements ContainerAwareInterface,
$data[$key] = $terms[$key] ?? null;
}
- // parse birthdate
- if (\array_key_exists('birthdate', $terms)) {
- try {
- $date = new \DateTime($terms['birthdate']);
- } catch (\Exception $ex) {
- throw new ParsingException('The date is '
- . 'not parsable', 0, $ex);
+ // parse dates
+ foreach (['birthdate', 'birthdate-before', 'birthdate-after'] as $key) {
+ if (\array_key_exists($key, $terms)) {
+ try {
+ $date = new \DateTime($terms[$key]);
+ } catch (\Exception $ex) {
+ throw new ParsingException("The date for $key is "
+ . 'not parsable', 0, $ex);
+ }
}
+ $data[$key] = $date ?? null;
}
- $data['birthdate'] = $date ?? null;
return $data;
}
+
+ public function getAdvancedSearchTitle()
+ {
+ return 'Search within persons';
+ }
}
\ No newline at end of file