# Les opérateurs de filtres SearchElements

La classe ElementSearchFilter est une interface permettant d'efféctuer des requêtes de filtres SQL facilement à l'aide de classe implémentant celle-ci.

# Classe Contains

La classe Contains permet de réaliser facilement un filtre de type contains sur un Smart Field.

# Constructeur

<?php
new Contains($attrId, $value);

# Exemple

  • Recherche des utilisateurs dont le prénom contient Jean :
<?php
use Anakeen\Search\Filters\Contains;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Iuser as iuser;

$s = new SearchElements("IUSER");
$s->addFilter(new Contains(iuser::us_fname, "Jean"));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getRawValue("us_fname") . " \n";
}
  • Résultat :
Jean-Marie
Jean
Jean
Jean-Baptiste
Jean-Christophe
Jean
Jeanne-Maureen
Jean-Pierre
Jean-Pierre
Jeanne
Jean-Baptiste

# Classe ContainsValues

La classe ContainsValues permet de réaliser facilement un filtre vérifiant si les valeurs sont incluses dans l'ensemble de valeurs de certains type de Smart Fields.
La classe ContainsValues est compatibles avec les Smart Fields de type suivants :

  • text,
  • htmltext,
  • longtext,
  • int,
  • double,
  • money,
  • date,
  • timestamp,
  • time,
  • enum,
  • docid,
  • account.

# Constructeur

<?php
new ContainsValues($attrId, $values);

# Exemple

  • Recherche de toutes les factures dont le client (DEVCLIENT) possède l'identifiant 97729;
<?php
use Anakeen\Search\Filters\ContainsValues;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;

$s = new SearchElements("DEVBILL");
$s->addFilter(new ContainsValues(devbill::bill_clients, "97729"));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getRawValue("bill_title") . " \n";
}
  • Résultat :
Bill0001
Bill0063
Bill0088
Bill0218
Bill0229
Bill0242
Bill0268

# Classe DocumentTitle

La classe DocumentTile permet de réaliser facilement un filtre dont le titre d'un Smart Element est égal à la valeur indiquée.

# Constructeur

<?php

new DocumentTitle($attrId, $value);

# Exemple

  • Recherche le titre des factures dont l'auteur est Jean
<?php
use Anakeen\Search\Filters\DocumentTitle;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;

$s = new SearchElements("DEVBILL");
$s->addFilter(new DocumentTitle(devbill::bill_author, "Jean"));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getRawValue(devbill::bill_title) . " \n";
}
  • Résultat :
Bill0090
Bill0091
Bill0092

# Classe Filename | FilenameContains | FilenameEquals

La classe Filename permet de réaliser facilement un filtre sur le titre d'un fichier. La classe Filename est compatible avec les Smart Fields de type suivants :

  • file,
  • image.

Note

La classe Filename est ascendante de deux autres classes (FilenameContains et FilenameEquals) reprenant exactement les mêmes fonctionnalités à l'exception du type de résultat attendu :

  • FilenameContains : le nom du fichier contient la valeur en argument,
  • FilenameEquals : le nom du fichier est égal à la valeur en argument.

# Constructeur

<?php
new Filename($attrId, $value);

# Exemple

  • Recherche d'un fichier dont le nom contient le mot RAPPORT :
<?php
use Anakeen\Search\Filters\Filename;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\File as file;

$s = new SearchElements("FILE");
$s->addFilter(new Filename(file::fi_file, "RAPPORT"));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getRawValue("fi_title") . " \n";
}

Dans le cadre de cette requête, l'utilisation de la classe FilenameContains renverra le même résultat que Filename, tandis que l'utilisation de la classe FilenameEquals ne renverra rien.
En effet, RAPPORT n'est qu'une chaîne de caractères appartenant au nom du fichier.

# Classe HasApplicationTag

La classe HasApplicationTag permet de réaliser facilement un filtre sur tous les Smart Elements possédant un tag applicatif.

# Constructeur

<?php
new HasApplicationTag($value);

# Exemple

  • Ajout d'un tag applicatif sur le Smart Element 98128 :
<?php
use Anakeen\Core\SEManager;

$doc = SEManager::getDocument("98128");
$doc->addATag("Test");
  • Recherche de factures et leur auteur ayant comme tag applicatif Test :
<?php
use Anakeen\Search\Filters\HasApplicationTag;
use Anakeen\Search\SearchElements;
use Anakeen\Core\SEManager;

$s = new SearchElements();
$s->addFilter(new HasApplicationTag("Test"));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getTitle() . " \n";
}
  • Résultat :
Bill0020 BARBIER Lou

# HasUserTag

La classe HasUserTag permet de réaliser facilement un filtre sur les Smart Element possédant un tag utilisateur.

# Constructeur

<?php
new HasUserTag($uid, $value);

# Exemple

  • Recherche de facture possédant un tag utilisateur Test:
<?php
use Anakeen\Core\Account;
use Anakeen\Core\SEManager;
use Anakeen\Search\Filters\HasUserTag;
use Anakeen\Search\SearchElements;

$user = SEManager::getDocument(98521);
$uid = Account::getUidFromFid($user->id);
$s = new SearchElements();
$s->addFilter(new HasUserTag($uid, "Test"));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getTitle() . " \n";
}
  • Résultat :
Bill0020 BARBIER Lou

# IdentifiersIn

La classe IdentifiersIn permet de réaliser facilement un filtre déterminant si l'identifiant d'un Smart Element est inclus dans un ensemble.
La classe IdentifiersIn n'accepte que des valeurs de type int.

# Constructeur

<?php
new IdentifiersIn($value);

# Exemple

  • Recherche de personne associées à la Smart Structure DEVPERSON dans une liste d'identifiants :
<?php
use Anakeen\Router\ApiV2Response;
use Anakeen\Search\Filters\IdentifiersIn;
use Anakeen\Search\SearchElements;

$s = new SearchElements("DEVPERSON");
$s->addFilter(new IdentifiersIn(array(93982, 93999, 98520, 97593, 98427, 1011, 95394)));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getTitle() . " \n";
}
  • Résultat :
BOULICAUT Lisa

# IsEmpty

La classe IsEmpty permet de réaliser facilement un filtre qui teste si la valeur du Smart Field est null ou non.

<?php
new IsEmpty($attrid);

# Exemple

  • Recherche de factures et leur auteur où il n'y a pas de date de facturation.
<?php
use Anakeen\Search\Filters\IsEmpty;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;

$s = new SearchElements("DEVBILL");
$s->addFilter(new IsEmpty(devbill::bill_billdate));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getTitle() . " \n";
}
  • Résultat :
Bill0001 ACKERER Kathleen
Bill0002 ACKERER Kathleen
Bill0003 ADAMZIK Jack
Bill0004 ADAMZIK Jack
Bill0005 ADAMZIK Jack
Bill0006 ALEZRA Joyce
Bill0007 ALEZRA Joyce
Bill0008 AMSELEM Noé
[...]

# IsEqual

La classe IsEqual permet de réaliser facilement un filtre qui teste si la valeur d'un Smart Field est égale à la valeur en argument.

# Constructeur

<?php
new IsEqual($attrId, $value);

# Exemple

  • Recherche de facture dont l'auteur est DUPUIS Rose :
<?php
use Anakeen\Search\Filters\IsEqual;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;

$s = new SearchElements("DEVBILL");
$s->addFilter(new IsEqual(devbill::bill_author_display, "DUPUIS Rose"));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getTitle() . " \n";
}
  • Résultat :
Bill0094 DUPUIS Rose
Bill0095 DUPUIS Rose
Bill0096 DUPUIS Rose

# isGreater

La classe IsGreater permet de réaliser facilement un filtre qui teste si la valeur d'un Smart Field est supérieure (ou égal si la variable $EQUAL vaut true) à la valeur en argument.
La classe IsGreater est compatible avec les Smart Fields de type suivants :

  • int,
  • double,
  • money,
  • date,
  • timestamp,
  • time.

# Constructeur

<?php
new IsGreater($attrId, $value);

# Exemple

  • Recherche de factures et leur auteur dont la date de facturation est supérieure au 01/09/2019 :
<?php
use Anakeen\Search\Filters\IsGreater;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;

$s = new SearchElements("DEVBILL");
$s->addFilter(new IsGreater(devbill::bill_billdate, "01/09/2019"));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getTitle() . $r->getRawValue(devbill::bill_billdate) . " \n";
}
  • Résultat :
Bill0081 DECRESSAIN Robin 2019-09-05
Bill0102 FAYE Noémie 2019-09-02

# IsLesser

La classe IsLesser permet de réaliser facilement un filtre qui teste si la valeur d'un Smart Field est inférieure (ou égal si la variable $EQUAL vaut true) à la valeur en argument.
La classe IsLesser est compatible avec les Smart Fields de type suivantes :

  • int,
  • double,
  • money,
  • date,
  • timestamp,
  • time.

# Constructeur

<?php
new IsLesser($attrId, $value);

# Exemple

  • Recherche de factures et leur auteur dont la date de facturation est inférieure au 01/09/2019 :
<?php
use Anakeen\Search\Filters\IsLesser;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;

$s = new SearchElements("DEVBILL");
$s->addFilter(new IsLesser(devbill::bill_billdate, "01/09/2019"));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getTitle() . $r->getRawValue(devbill::bill_billdate) . " \n";
}
  • Résultat :
Bill0086 DIVE Manon 2019-08-15
Bill0280 VERNICK Léna 2019-06-13

# IsNotEmpty

La classe IsNotEmpty permet de réaliser facilement un filtre qui teste si la valeur du Smart Field n'est pas null.

# Constructeur

<?php
new IsNotEmpty($attrId);

# Exemple

  • Recherche de factures et leur auteur où une date de facturation a été émise.
<?php
use Anakeen\Search\Filters\IsNotEmpty;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;

$s = new SearchElements("DEVBILL");
$s->addFilter(new IsNotEmpty(devbill::bill_billdate));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getTitle() . " \n";
}
  • Résultat :
Bill0081 DECRESSAIN Robin 2019-09-05
Bill0086 DIVE Manon 2019-08-15
Bill0102 FAYE Noémie 2019-09-02
Bill0280 VERNICK Léna 2019-06-13

# IsNotEqual

La classe IsNotEqual permet de réaliser facilement un filtre qui teste si la valeur d'un Smart Field est différente de la valeur en argument.

# Constructeur

<?php
new IsNotEqual($attrId, $value);

# Exemple

  • Recherche de factures et leurs auteur qui n'est pas DUPUIS Rose :
<?php
use Anakeen\Search\Filters\IsNotEqual;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;

$s = new SearchElements("DEVBILL");
$s->addFilter(new IsNotEqual(devbill::bill_author_display, "DUPUIS Rose"));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getTitle() . " \n";
}
  • Résultat :
Bill0001 ACKERER Kathleen
Bill0002 ACKERER Kathleen
Bill0003 ADAMZIK Jack
Bill0004 ADAMZIK Jack
Bill0005 ADAMZIK Jack
Bill0006 ALEZRA Joyce
Bill0007 ALEZRA Joyce
Bill0008 AMSELEM Noé
[...]

# NameEquals

La classe NameEquals permet de réaliser facilement un filtre permettant de tester si le nom d'un Smart Element est égal à la valeur en argument. La classe NameEquals est compatible avec les Smart Fields de type text seulement.

# Constructeur

<?php
new NameEquals($value);

# Exemple

  • Recherche du titre de Smart Elements dont le nom est TST_RENDER_0100
<?php
use Anakeen\Search\Filters\NameEquals;
use Anakeen\Search\SearchElements;

$s = new SearchElements("TST_RENDER");
$s->addFilter(new NameEquals("TST_RENDER_0100"));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getTitle() . " \n";
}
  • Résultat :
0100Document: : setTabPlacement(left)

# OneContains

La classe OneContains permet de réaliser facilement un filtre permettant de tester si une des valeurs d'un Smart Field multivalué contient la valeur en argument.
La classe OneContains est compatibles avec les Smart Fields de type suivant :

  • text,
  • htmltext,
  • longtext.

# Constructeur

<?php
new OneContains($attrId, $value);

# Exemple

  • Recherche de factures et leur auteur dont le nom d'un client contient Jean :
<?php
use Anakeen\Search\Filters\OneContains;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;

$s = new SearchElements("DEVBILL");
$s->addFilter(new OneContains(devbill::bill_clientname, "Jean"));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getTitle() . $r->getRawValue(devbill::bill_author) . " \n";
}
  • Résultat :
Bill0027 BENISTON Jules
Bill0063 CASSIER Louis
Bill0072 CHARMANTIER Margaux
Bill0145 KLINKERT Léonie
Bill0249 STONE Emma
Bill0265 THUILLIER Eric

# OneGreaterThan

La classe OneGreaterThan permet de réaliser facilement un filtre permettant de tester si une des valeurs d'un Smart Field multivalué est supérieure (ou égale si la variable $EQUAL vaut true) à la valeur en argument.
La classe OneGreaterThan est compatible avec les Smart Fields de type suivant :

  • int,
  • double,
  • money,
  • date,
  • timestamp,
  • time.

# Constructeur

<?php
new OneGreaterThan($attrId, $value);

# Exemple

  • Recherche des titres de Smart Elements pour lequel une valeur de test_ddui_all__double_array est supérieure à 3.0 :
<?php
use Anakeen\Search\Filters\OneGreaterThan;
use Anakeen\Search\SearchElements;

$s = new SearchElements("TST_DDUI_ALLTYPE");
$s->addFilter(new OneGreaterThan("test_ddui_all__double_array", 3.0));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getTitle() . " \n";
}
  • Résultat :
test_SetLink
Tout complet

# OneLesserThan

La classe OneLesserThan permet de réaliser facilement un filtre permettant de tester si une des valeurs d'un Smart Field multivalué est inférieure (ou égale si la variable $EQUAL vaut true) à la valeur en argument.
La classe OneLesserThan est compatible avec les Smart Fields de type suivant :

  • int,
  • double,
  • money,
  • date,
  • timestamp,
  • time.

# Constructeur

<?php
new OneLesserThan($attrId, $value);

# Exemple

  • Recherche des titres de Smart Elements pour lequel une valeur de test_ddui_all__double_array est inférieure à 30.0 :
<?php
use Anakeen\Search\Filters\OneLesserThan;
use Anakeen\Search\SearchElements;

$s = new SearchElements("TST_DDUI_ALLTYPE");
$s->addFilter(new OneLesserThan("test_ddui_all__double_array", 30.0));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getTitle() . " \n";
}
  • Résultat :
test_SetLink
Tout complet

# StartsWith

La classe StartsWith permet de réaliser facilement un filtre qui teste si une chaîne de caractère commence par la chaîne de caractère en argument.
La classe StartsWith hérite de la classe Contains et est donc compatible avec les types de Smart Fields suivants :

  • text,
  • htmltext,
  • longtext.

# Constructeur

<?php
new StartsWith($attrId, $value);

# Exemple

  • Recherche de factures et leur auteur dont le contenu commence par Content :
<?php
use Anakeen\Search\Filters\StartsWith;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;

$s = new SearchElements("DEVBILL");
$s->addFilter(new StartsWith(devbill::bill_content, "Content"));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getTitle() . $r->getRawValue(devbill::bill_content) . " \n";
}
  • Résultat :
Bill0001 ACKERER Kathleen Content for the bill number 0001 Writed by "ACKERER Kathleen".
Bill0002 ACKERER Kathleen Content for the bill number 0001 Writed by "ACKERER Kathleen".
[...]

# TitleContains

La classe TitleContains permet de réaliser facilement un filtre contains sur le titre d'un Smart Element.
La classe TitleContains est compatible avec les Smart Fields de type text.

# Constructeur

<?php
new TitleContains($value);

# Exemple

  • Recherche des Smart Elements dont le titre contient Manon :
<?php
use Anakeen\Search\Filters\TitleContains;
use Anakeen\Search\SearchElements;

$s = new SearchElements("DEVBILL");
$s->addFilter(new TitleContains("Manon"));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getTitle() . " \n";
}
  • Résultat :
Bill0086 DIVE Manon
Bill0169 MAROLLEAU Manon
Bill0170 MAROLLEAU Manon
Bill0171 MAROLLEAU Manon

# OneDocumentTitle

La classe OneDocumentTitle permet de réaliser facilement un filtre permettant de tester si un des titres de Smart Element d'un Smart Field multivalué contient la valeur en argument.

# Constructeur

<?php
new OneDocumentTitle($attrId, $value);

# Exemple

  • Recherche de Smart Element lié aux comptes contenant Granget
<?php
use Anakeen\Search\Filters\OneDocumentTitle;
use Anakeen\Search\SearchElements;

$s = new SearchElements("TST_DDUI_ALLTYPE");
$s->addFilter(new OneDocumentTitle("test_ddui_all__account_multiple", "Granget"));
$res = $s->search()->getResults();
foreach ($res as $r) {
  print $r->getTitle() . $r->getRawValue("test_ddui_all__account_multiple") . " \n";
}
  • Résultat :
test_SetLink
{
  98429,
  98428
}

Toutcomplet
{
  98429,
  98428
}

# OrOperator

La classe OrOperator permet d'utiliser l'opérateur logique "OR" sur plusieurs filtres.

# Constructeur

<?php
new OrOperator(ElementSearchFilter ...$filters);

Jointure

Les filtres qui utilisent des jointures ne peuvent pas toujours être utilisés avec cet opérateur. L'opérateur ne peut gérer qu'une seule jointure. Il faut que toutes les conditions du filtre utilisent la même jointure. Dans le cas contraire, une exception sera levée.

# Exemple

  • Recherche des factures dont le titre contient Adam ou le prix (bill_cost) est supérieur à 1700€.
<?php
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as DevbillFields;

$s = new SearchElements("DEVBILL");
$s->addFilter(
  new \Anakeen\Search\Filters\OrOperator(
    new \Anakeen\Search\Filters\TitleContains("Adam"),
    new \Anakeen\Search\Filters\IsGreater(DevbillFields::bill_cost, 1700)
  )
);

$results = $s->search()->getResults();

printf("| %-25s | %-10s |\n", "Title", DevbillFields::bill_cost);
print str_pad(" ", 40, "-") . "\n";
foreach ($results as $result) {
  printf("| %-25s | %10d |\n", $result->getTitle(), $result->getRawValue(DevbillFields::bill_cost));
}
  • Résultat :

4 éléments dont le coût est > 1700 et 3 éléments contenant "Adam" (un des éléments remplit les 2 conditions).

| Title                     | bill_cost  |
 ---------------------------------------
| Bill 0001 NOIROT Eliott   |       1828 |
| Bill 0003 NOIROT Eliott   |       1831 |
| Bill 0004 ROMAGNY Anna    |       1937 |
| Bill 0006 THOUROUDE Adam  |       1531 |
| Bill 0007 THOUROUDE Adam  |       1845 |
| Bill 0008 THOUROUDE Adam  |        972 |

# AndOperator À partir de la version 2021.01

La classe AndOperator permet d'utiliser l'opérateur logique "AND" sur plusieurs filtres.

# Constructeur

<?php
new AndOperator(ElementSearchFilter ...$filters);

Jointure

Les filtres qui utilisent des jointures ne peuvent pas toujours être utilisés avec cet opérateur. L'opérateur ne peut gérer qu'une seule jointure. Il faut que toutes les conditions du filtre utilisent la même jointure. Dans le cas contraire, une exception est levée.

# Exemple

  • Recherche des factures dont le titre contient Victor et le prix (bill_cost) est inférieur à 1500€.
<?php
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as DevbillFields;

$s = new SearchElements("DEVBILL");
$s->addFilter(
  new \Anakeen\Search\Filters\AndOperator(
    new \Anakeen\Search\Filters\TitleContains("Victor"),
    new \Anakeen\Search\Filters\IsLesser(DevbillFields::bill_cost, 1500)
  )
);

$results = $s->search()->getResults();

printf("| %-25s | %-10s |\n", "Title", DevbillFields::bill_cost);
print str_pad(" ", 40, "-") . "\n";
foreach ($results as $result) {
  printf("| %-25s | %10d |\n", $result->getTitle(), $result->getRawValue(DevbillFields::bill_cost));
}
  • Résultat :

3 éléments remplissent les 2 conditions (titre contient "Victor" et bill_cost < 1400).

| Title                     | bill_cost  |
 ---------------------------------------
| Bill 0077 CHARVET Victor  |        558 |
| Bill 0131 GIRAUT Victor   |        727 |
| Bill 0165 LEBRETON Victor |       1428 |

# NotOperator

La classe NotOperator permet d'utiliser l'opérateur logique "NOT" sur plusieurs filtres.

# Constructeur

<?php
new NotOperator(ElementSearchFilter ...$filters);

# Exemple

  • Recherche des factures dont le prix (bill_cost) n'est pas inférieur à 1900€.
<?php
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as DevbillFields;

$s = new SearchElements("DEVBILL");
$s->addFilter(
  new \Anakeen\Search\Filters\NotOperator(new \Anakeen\Search\Filters\IsLesser(DevbillFields::bill_cost, 1900))
);

$results = $s->search()->getResults();

printf("| %-25s | %-10s |\n", "Title", DevbillFields::bill_cost);
print str_pad(" ", 40, "-") . "\n";
foreach ($results as $result) {
  printf("| %-25s | %10d |\n", $result->getTitle(), $result->getRawValue(DevbillFields::bill_cost));
}
  • Résultat :

14 éléments n'ont pas un cout inférieur à 1900€.

| Title                     | bill_cost  |t=test1
 ---------------------------------------
| Bill 0003 AIMAR Elizabeth |       1982 |
| Bill 0034 BLANC Edward    |       1985 |
| Bill 0066 CHANZY Martha   |       1940 |
| Bill 0076 CHARVET Victor  |       1948 |
| Bill 0093 DAUVIN Paul     |       1959 |
| Bill 0095 DESBIEZ Simon   |       1954 |
| Bill 0100 DOJAT Carolyn   |       1934 |
| Bill 0122 GARROUSTE Charlie |       1919 |
| Bill 0154 JOLY Alice      |       1915 |
| Bill 0164 LANNOU Margaux  |       1940 |
| Bill 0193 OGEE Philip     |       1992 |
| Bill 0195 OGIEN Jeremy    |       1941 |
| Bill 0208 RASSE Evelyn    |       1952 |
| Bill 0216 RENNE Martin    |       1931 |