]> git.agnieray.net Git - galette.git/commitdiff
Add member number; closes #190
authorJohan Cwiklinski <johan@x-tnd.be>
Mon, 1 Nov 2021 07:33:17 +0000 (08:33 +0100)
committerJohan Cwiklinski <johan@x-tnd.be>
Sun, 7 Nov 2021 08:17:58 +0000 (09:17 +0100)
17 files changed:
galette/includes/fields_defs/members_fields.php
galette/includes/routes/ajax.routes.php
galette/install/scripts/mysql.sql
galette/install/scripts/pgsql.sql
galette/install/scripts/upgrade-to-0.96-mysql.sql
galette/install/scripts/upgrade-to-0.96-pgsql.sql
galette/lib/Galette/Entity/Adherent.php
galette/lib/Galette/Features/Replacements.php
galette/lib/Galette/Filters/MembersList.php
galette/lib/Galette/IO/PdfMembersCards.php
galette/lib/Galette/Repository/Members.php
galette/templates/default/gestion_adherents.tpl
galette/templates/default/preferences.tpl
tests/Galette/Entity/tests/units/FieldsConfig.php
tests/Galette/Entity/tests/units/ListsConfig.php
tests/Galette/Entity/tests/units/PdfModel.php
tests/Galette/Repository/tests/units/Members.php

index 614f2480b28bcc947f4bbdf01e7dedf4048fa670..4a797ef4ad9aad63414cb9f32ac89725c1c72bdb 100644 (file)
@@ -39,7 +39,7 @@ use Galette\Entity\FieldsCategories;
 
 $members_fields = array(
     'id_adh' => array(
-        'label'    => _T("Member number:"),
+        'label'    => _T("Member id:"),
         'propname' => 'id',
         'required' => false,
         'visible'  => FieldsConfig::NOBODY,
@@ -319,6 +319,14 @@ $members_fields = array(
         'position' => 25,
         'category' => FieldsCategories::ADH_CATEGORY_CONTACT
     ),
+    'num_adh'       => array(
+        'label'    => _T("Member number:"),
+        'propname' => 'number',
+        'required' => false,
+        'visible'  => FieldsConfig::MANAGER,
+        'position' => 26,
+        'category' => FieldsCategories::ADH_CATEGORY_IDENTITY
+    ),
     'list_adh_name' => array(
         'label'    => _T("Name"),
         'propname' => 'sname',
index a502395e0d73dc4a22e53657813622e46e6f10bb..bcfac2d7136079e94604171126c7f1d2f014d03e 100644 (file)
@@ -7,7 +7,7 @@
  *
  * PHP version 5
  *
- * Copyright © 2014-2020 The Galette Team
+ * Copyright © 2014-2021 The Galette Team
  *
  * This file is part of Galette (http://galette.tuxfamily.org).
  *
@@ -28,7 +28,7 @@
  * @package   Galette
  *
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2014-2020 The Galette Team
+ * @copyright 2014-2021 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.tuxfamily.org
  * @since     0.8.2dev 2014-11-11
@@ -277,7 +277,7 @@ $app->group('/ajax', function () use ($authenticate) {
             if ($search !== null) {
                 $filters->filter_str = $search;
                 if (is_numeric($search)) {
-                    $filters->field_filter = Members::FILTER_NUMBER;
+                    $filters->field_filter = Members::FILTER_ID;
                 }
             }
 
index 87fe5461c3314fcb70f1ed6623f1f165523b3707..1b840a1e524420015c3d150fd8140705a2aaa053 100644 (file)
@@ -39,6 +39,7 @@ CREATE TABLE galette_adherents (
   gpgid text DEFAULT NULL,
   fingerprint varchar(255) DEFAULT NULL,
   parent_id int(10) unsigned DEFAULT NULL,
+  num_adh varchar(255) DEFAULT NULL,
   PRIMARY KEY (id_adh),
   UNIQUE (login_adh),
   FOREIGN KEY (id_statut) REFERENCES galette_statuts (id_statut) ON DELETE RESTRICT ON UPDATE CASCADE,
index 0468df30b3ea76dc3036e9fbc4be275fb3bb89f1..9f37f365da4df7cc0a7981405e7d91ecaa6454c8 100644 (file)
@@ -226,6 +226,7 @@ CREATE TABLE galette_adherents (
     gpgid text DEFAULT NULL,
     fingerprint character varying(255) DEFAULT NULL,
     parent_id integer DEFAULT NULL REFERENCES galette_adherents(id_adh) ON DELETE RESTRICT ON UPDATE CASCADE,
+    num_adh character varying(255) DEFAULT NULL,
     PRIMARY KEY (id_adh)
 );
 -- add index for faster search on login_adh (auth)
index 5aeb2a98253c0712c4f16d4074ce3ed0b6dc690b..173cfbaf7881b672226f1a5d95b38c16f27ea7eb 100644 (file)
@@ -37,4 +37,7 @@ ALTER TABLE galette_adherents DROP column jabber_adh;
 -- cleanup fields config
 DELETE FROM galette_fields_config WHERE field_id IN ('url_adh', 'icq_adh', 'msn_adh', 'jabber_adh');
 
+-- add num_adh column
+ALTER TABLE galette_adherents ADD COLUMN num_adh varchar(255) DEFAULT NULL;
+
 UPDATE galette_database SET version = 0.960;
\ No newline at end of file
index a19b1cc0667e6128496dea2f5d35d01a6a5efedc..cef49cf2e2532274c2287e05b573ddc9447a236b 100644 (file)
@@ -45,4 +45,7 @@ ALTER TABLE galette_adherents DROP column jabber_adh;
 -- cleanup fields config table
 DELETE FROM galette_fields_config WHERE field_id IN ('url_adh', 'icq_adh', 'msn_adh', 'jabber_adh');
 
+-- add num_adh column
+ALTER TABLE galette_adherents ADD COLUMN num_adh character varying (255) DEFAULT NULL;
+
 UPDATE galette_database SET version = 0.960;
\ No newline at end of file
index 72be6ff8a317bef6633a4ab861e37b00126170e9..a7ccd3d08062f4d454f3913134ac185aa9709bae 100644 (file)
@@ -118,6 +118,7 @@ use Galette\Features\Dynamics;
  * @property string $days_remaining
  * @property-read integer $parent_id
  * @property Social $social Social networks/Contact
+ * @property string $number Member number
  *
  */
 class Adherent
@@ -185,6 +186,7 @@ class Adherent
     private $_children;
     private $_duplicate = false;
     private $_socials;
+    private $_number;
 
     private $_row_classes;
 
@@ -411,6 +413,7 @@ class Adherent
         $this->_due_date = $r->date_echeance;
         $this->_others_infos = $r->info_public_adh;
         $this->_others_infos_admin = $r->info_adh;
+        $this->_number = $r->num_adh;
 
         if ($r->parent_id !== null) {
             $this->_parent = (int)$r->parent_id;
@@ -1504,6 +1507,10 @@ class Adherent
                 $values['parent_id'] = new Expression('NULL');
             }
 
+            if (!$this->_number) {
+                $values['num_adh'] = new Expression('NULL');
+            }
+
             //fields that cannot be null
             $notnull = [
                 '_surname'  => 'prenom_adh',
index 473b40173c41f761a6728de2a2e7a7b6d89419ee..21e06a88745bb098af46b531ec511425f35d69e7 100644 (file)
@@ -254,6 +254,10 @@ trait Replacements
                 'title'     => _T("Member's ID"),
                 'pattern'   => '/{ID_ADH}/',
             ],
+            'adh_num'            =>  [
+                'title'     => _T("Member number"),
+                'pattern'   => '/{NUM_ADH}/',
+            ],
             'adh_name'          =>  [
                 'title'     => _T("Name"),
                 'pattern'    => '/{NAME_ADH}/',
@@ -623,6 +627,7 @@ trait Replacements
             array(
                 'adh_title'         => $member->stitle,
                 'adh_id'            => $member->id,
+                'adh_num'           => $member->number,
                 'adh_name'          => $member->sfullname,
                 'adh_last_name'     => $member->name,
                 'adh_first_name'    => $member->surname,
index 363822b95bd73298e30023112ec65c741ced356a..46b1e1eca398f4fdaacbddf6d44504959ea44484 100644 (file)
@@ -7,7 +7,7 @@
  *
  * PHP version 5
  *
- * Copyright © 2009-2014 The Galette Team
+ * Copyright © 2009-2021 The Galette Team
  *
  * This file is part of Galette (http://galette.tuxfamily.org).
  *
@@ -28,7 +28,7 @@
  * @package   Galette
  *
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2009-2014 The Galette Team
+ * @copyright 2009-2021 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.tuxfamily.org
  * @since     march, 3rd 2009
@@ -49,7 +49,7 @@ use Galette\Repository\Members;
  * @package   Galette
  *
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2009-2014 The Galette Team
+ * @copyright 2009-2021 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.tuxfamily.org
  *
@@ -149,7 +149,7 @@ class MembersList extends Pagination
                 }
             } else {
                 Analog::log(
-                    '[MembersList] Unable to get proprety `' . $name . '`',
+                    '[MembersList] Unable to get property `' . $name . '`',
                     Analog::WARNING
                 );
             }
@@ -270,6 +270,7 @@ class MembersList extends Pagination
     {
         $filter_options = array(
             Members::FILTER_NAME            => _T("Name"),
+            Members::FILTER_NUMBER          => _T("Member number"),
             Members::FILTER_COMPANY_NAME    => _T("Company name"),
             Members::FILTER_ADDRESS         => _T("Address"),
             Members::FILTER_MAIL            => _T("Email,URL,IM"),
@@ -278,7 +279,7 @@ class MembersList extends Pagination
         );
 
         if ($prefs->pref_show_id) {
-            $filter_options[Members::FILTER_NUMBER] = _T("Member number");
+            $filter_options[Members::FILTER_ID] = _T("Member ID");
         }
 
         $view->assign(
index eabe4758176b1f7d98e8f793abe00e75b1b1683d..5f68969db93c558627f6cedd09cf69b2f85113e1 100644 (file)
@@ -220,6 +220,9 @@ class PdfMembersCards extends Pdf
                 case 7:
                     $email .= $member->job;
                     break;
+                case 8:
+                    $email .= $member->number;
+                    break;
             }
 
             // Select strip color according to status
index 3e4d2fa37f5380319c11c9438cc1b4d410802f72..424fea671aa6066ef4409f580e3347a20b24b1d4 100644 (file)
@@ -98,7 +98,8 @@ class Members
     public const FILTER_DC_PUBINFOS = 9;
     public const FILTER_W_PUBINFOS = 10;
     public const FILTER_WO_PUBINFOS = 11;
-    public const FILTER_NUMBER = 12;
+    public const FILTER_ID = 12;
+    public const FILTER_NUMBER = 13;
 
     public const MEMBERSHIP_ALL = 0;
     public const MEMBERSHIP_UP2DATE = 3;
@@ -1077,6 +1078,9 @@ class Members
                         );
                         break;
                     case self::FILTER_NUMBER:
+                        $select->where->equalTo('a.num_adh', $this->filters->filter_str);
+                        break;
+                    case self::FILTER_ID:
                         $select->where->equalTo('a.id_adh', $this->filters->filter_str);
                         break;
                 }
index 453d4de7b09b2965e37e4e2e5f0a2f7bd2874736..bb46503a929d69d4490418dbdf75be094d242337 100644 (file)
@@ -126,7 +126,7 @@ We have to use a template file, so Smarty will do its work (like replacing varia
         {if $preferences->pref_show_id}
                     <th class="id_row">
                         <a href="{path_for name="members" data=["option" => "order", "value" => "Galette\Repository\Members::ORDERBY_ID"|constant]}">
-                            {_T string="Mbr num"}
+                            {_T string="Mbr id"}
                             {if $filters->orderby eq constant('galette\Repository\Members::ORDERBY_ID')}
                                 {if $filters->ordered eq constant('Galette\Filters\MembersList::ORDER_ASC')}
                             <img src="{base_url}/{$template_subdir}images/down.png" width="10" height="6" alt=""/>
index 37c30906c238ca55b50bf05ca02e5eaad291c79d..2d7da82d5e266cc89b238c7569d0159498f34d88 100644 (file)
                         <option value="5" {if $pref.pref_card_address eq 5}selected="selected"{/if}>{_T string="Zip - Town"}</option>
                         <option value="6" {if $pref.pref_card_address eq 6}selected="selected"{/if}>{_T string="Nickname"}</option>
                         <option value="7" {if $pref.pref_card_address eq 7}selected="selected"{/if}>{_T string="Profession"}</option>
+                        <option value="8" {if $pref.pref_card_address eq 8}selected="selected"{/if}>{_T string="Member nubmer"}</option>
                     </select>
                     <span class="exemple">{_T string="(Choose address printed below name)"}</span>
                 </p>
index 6658476bc248307dcfb9bde3885b5d6687b70a71..8313f4574684680d9eb94e7b9930a863dac1ba70 100644 (file)
@@ -182,7 +182,7 @@ class FieldsConfig extends atoum
         $this->array($categorized)
             ->hasSize(3);
         $this->array($categorized[\Galette\Entity\FieldsCategories::ADH_CATEGORY_IDENTITY])
-            ->hasSize(12);
+            ->hasSize(13);
         $this->array($categorized[\Galette\Entity\FieldsCategories::ADH_CATEGORY_GALETTE])
             ->hasSize(11);
         $this->array($categorized[\Galette\Entity\FieldsCategories::ADH_CATEGORY_CONTACT])
@@ -271,7 +271,7 @@ class FieldsConfig extends atoum
         $this->boolean($town['required'])->isFalse();
         $this->integer($town['visible'])->isIdenticalTo(\Galette\Entity\FieldsConfig::NOBODY);
 
-        $gsm2 = $fields[\Galette\Entity\FieldsCategories::ADH_CATEGORY_IDENTITY][12];
+        $gsm2 = $fields[\Galette\Entity\FieldsCategories::ADH_CATEGORY_IDENTITY][13];
         $this->array($gsm2)->isIdenticalTo($gsm);
     }
 
@@ -323,7 +323,7 @@ class FieldsConfig extends atoum
         $categorized = $fields_config->getCategorizedFields();
         $this->integer(
             count($categorized[\Galette\Entity\FieldsCategories::ADH_CATEGORY_IDENTITY])
-        )->isIdenticalTo(12);
+        )->isIdenticalTo(13);
 
         //new object instanciation should add missing field back
         $fields_config = new \Galette\Entity\FieldsConfig(
@@ -387,7 +387,7 @@ class FieldsConfig extends atoum
 
         $this->object($elements[0])->isInstanceOf('\stdClass');
         $this->integer($elements[0]->id)->isIdenticalTo(1);
-        $this->array($elements[0]->elements)->hasSize(7);
+        $this->array($elements[0]->elements)->hasSize(8);
 
         $this->object($elements[1])->isInstanceOf('\stdClass');
         $this->integer($elements[1]->id)->isIdenticalTo(3);
@@ -450,7 +450,7 @@ class FieldsConfig extends atoum
 
         $this->object($elements['fieldsets'][0])->isInstanceOf('\stdClass');
         $this->integer($elements['fieldsets'][0]->id)->isIdenticalTo(1);
-        $this->array($elements['fieldsets'][0]->elements)->hasSize(10);
+        $this->array($elements['fieldsets'][0]->elements)->hasSize(11);
 
         $this->object($elements['fieldsets'][1])->isInstanceOf('\stdClass');
         $this->integer($elements['fieldsets'][1]->id)->isIdenticalTo(3);
index 1bde22bfdcd3a44d397f4deca3ecb1417123553f..ec6e3aacd467a463d845def454d8dbbdbd916b1e 100644 (file)
@@ -225,7 +225,7 @@ class ListsConfig extends atoum
         $this->boolean($town['required'])->isFalse();
         $this->integer($town['visible'])->isIdenticalTo(\Galette\Entity\FieldsConfig::NOBODY);
 
-        $gsm2 = $fields[\Galette\Entity\FieldsCategories::ADH_CATEGORY_IDENTITY][10]; //12 in FieldsConfig but 10 here
+        $gsm2 = $fields[\Galette\Entity\FieldsCategories::ADH_CATEGORY_IDENTITY][11]; //13 in FieldsConfig but 11 here
         $this->array($gsm2)->isIdenticalTo($gsm);
         // /copied from FieldsConfig::testSetFields to ensure it works as expected from here.
     }
index 6bfa46d5e6ae5d265963d177f8a7b8977f502f9f..dc7e3b297c6d48a4bbc552f4adea392eb1f09996 100644 (file)
@@ -142,6 +142,7 @@ class PdfModel extends GaletteTestCase
         $expected = $main_expected + [
             'adh_title'         => '/{TITLE_ADH}/',
             'adh_id'            => '/{ID_ADH}/',
+            'adh_num'           => '/{NUM_ADH}/',
             'adh_name'          => '/{NAME_ADH}/',
             'adh_last_name'     => '/{LAST_NAME_ADH}/',
             'adh_first_name'    => '/{FIRST_NAME_ADH}/',
@@ -383,7 +384,7 @@ Au milieu
 
         $this->array($legend['main']['patterns'])->hasSize(8);
         $this->array($legend['member']['patterns'])
-            ->hasSize(26)
+            ->hasSize(27)
             ->hasKeys(['label_dynfield_' . $adf->getId() . '_adh', 'dynfield_' . $adf->getId() . '_adh']);
         $this->array($legend['contribution']['patterns'])
             ->hasSize(14)
index 8f3c489559beb53c0ec3cc9bd3509539f33908f7..bf3d64366bb0bf2453dc2984faee69664c089924 100644 (file)
@@ -7,7 +7,7 @@
  *
  * PHP version 5
  *
- * Copyright © 2017 The Galette Team
+ * Copyright © 2017-2021 The Galette Team
  *
  * This file is part of Galette (http://galette.tuxfamily.org).
  *
@@ -28,7 +28,7 @@
  * @package   GaletteTests
  *
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2017 The Galette Team
+ * @copyright 2017-2021 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @version   SVN: $Id$
  * @link      http://galette.tuxfamily.org
@@ -46,7 +46,7 @@ use Galette\GaletteTestCase;
  * @name      Members
  * @package   GaletteTests
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2017 The Galette Team
+ * @copyright 2017-2021 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.tuxfamily.org
  * @since     2017-04-15
@@ -340,7 +340,7 @@ class Members extends GaletteTestCase
         //search on member number
         $filters = new \Galette\Filters\MembersList();
         $filters->filter_str = $this->mids[2];
-        $filters->field_filter = \Galette\Repository\Members::FILTER_NUMBER;
+        $filters->field_filter = \Galette\Repository\Members::FILTER_ID;
         $members = new \Galette\Repository\Members($filters);
         $list = $members->getList();