From 9568c630f00b7fee36ae5fd0aeb2ff2d87dab12f Mon Sep 17 00:00:00 2001
From: philipp lang <philipp@aweos.de>
Date: Sat, 10 Apr 2021 01:39:39 +0200
Subject: [PATCH] sync members

---
 app/Initialize/InitializeMembers.php          | 90 ++++++++-----------
 app/Member/Member.php                         |  5 +-
 ...2017_07_04_223230_create_members_table.php |  9 +-
 3 files changed, 42 insertions(+), 62 deletions(-)

diff --git a/app/Initialize/InitializeMembers.php b/app/Initialize/InitializeMembers.php
index 48068339..9e8e26ab 100644
--- a/app/Initialize/InitializeMembers.php
+++ b/app/Initialize/InitializeMembers.php
@@ -2,6 +2,13 @@
 
 namespace App\Initialize;
 
+use App\Gender;
+use App\Confession;
+use App\Country;
+use App\Member\Member;
+use App\Region;
+use App\Nationality;
+
 class InitializeMembers {
 
     private $bar;
@@ -15,60 +22,35 @@ class InitializeMembers {
     public function handle() {
         $allMembers = collect([]);
 
-        $this->bar->task('Finde Mitglieder', function() use (&$allMembers) {
-            $allMembers = collect($this->api->allMembers()->data);
-        });
-
-        $this->bar->tasks($allMembers, function($member) {
-            return "Synchronisiere {$member->entries_vorname} {$member->entries_nachname}";
-        }, function($member) {
-            $data = $this->api->getMember($member->id)->data;
-            $gender = \App\Gender::where('nami_id', $data->geschlechtId)->where('is_null', false)->first();
-
-            $confession = $data->konfessionId
-                ? \App\Confession::where('nami_id', $data->konfessionId)->first()
-                : null
-            ;
-            $region = \App\Region::where('nami_id', $data->regionId)->where('is_null', false)->first();
-            $country = \App\Country::where('nami_id', $data->landId)->first();
-            $nationality = \App\Nationality::where('nami_id', $data->staatsangehoerigkeitId)->first();
-
-            $sub = null;
-
-            $attributes = [
-                'firstname' => $data->vorname,
-                'lastname' => $data->nachname,
-                'nickname' => $data->spitzname,
-                'joined_at' => $data->eintrittsdatum,
-                'birthday' => $data->geburtsDatum,
-                'keepdata' => $data->wiederverwendenFlag,
-                'sendnewspaper' => $data->zeitschriftenversand,
-                'address' => $data->strasse,
-                'zip' => $data->plz,
-                'city' => $data->ort,
-                'nickname' => $data->spitzname,
-                'other_country' => $data->staatsangehoerigkeitText,
-                'further_address' => $data->nameZusatz,
-                'phone' => $data->telefon1,
-                'mobile' => $data->telefon2,
-                'business_phone' => $data->telefon3,
-                'fax' => $data->telefax,
-                'email' => $data->email,
-                'email_parents' => $data->emailVertretungsberechtigter,
-                'nami_id' => $data->id,
-                'active' => $data->status == 'Aktiv'
-            ];
-
-            $m = new \App\Member\Member($attributes);
-
-            $m->gender()->associate($gender);
-            $m->country()->associate($country);
-            $m->region()->associate($region);
-            // $m->way()->associate(\Setting::get('defaultWay'));
-            $m->confession()->associate($confession);
-            $m->nationality()->associate($nationality);
-
-            $m->save();
+        $this->bar->task('Synchronisiere Mitglieder', function() {
+            $this->api->group(auth()->user()->getNamiGroupId())->members()->each(function($member) {
+                $m = Member::create([
+                    'firstname' => $member->firstname,
+                    'lastname' => $member->lastname,
+                    'nickname' => $member->nickname,
+                    'joined_at' => $member->joined_at,
+                    'birthday' => $member->birthday,
+                    'sendnewspaper' => true,           // @todo implement in nami api
+                    'address' => $member->address,
+                    'zip' => $member->zip,
+                    'location' => $member->location,
+                    'nickname' => $member->nickname,
+                    'other_country' => $member->other_country,
+                    'further_address' => $member->further_address,
+                    'main_phone' => $member->main_phone,
+                    'mobile_phone' => $member->mobile_phone,
+                    'work_phone' => $member->work_phone,
+                    'fax' => $member->fax,
+                    'email' => $member->email,
+                    'email_parents' => $member->email_parents,
+                    'nami_id' => $member->id,
+                    'gender_id' => Gender::firstOrFail('nami_id', $member->gender_id)->id,
+                    'confession_id' => optional(Confession::firstWhere('nami_id', $member->confession_id))->id,
+                    'region_id' => 1,       // @todo implement in nami api
+                    'country_id' => 1,      // @todo implement in nami api
+                    'nationality_id' => 1,  // @todo implement in nami api
+                ]);
+            });
         });
     }
 }
diff --git a/app/Member/Member.php b/app/Member/Member.php
index 715642e8..8d6a5f71 100644
--- a/app/Member/Member.php
+++ b/app/Member/Member.php
@@ -10,12 +10,11 @@ class Member extends Model
 {
     use Notifiable;
 
-    public $fillable = ['firstname', 'lastname', 'nickname', 'other_country', 'birthday', 'joined_at', 'sendnewspaper', 'address', 'further_address', 'zip', 'city', 'phone', 'mobile', 'business_phone', 'fax', 'email', 'email_parents', 'nami_id', 'active', 'letter_address', 'country_id', 'way_id', 'nationality_id', 'subscription_id', 'region_id', 'gender_id', 'confession_id'];
+    public $fillable = ['firstname', 'lastname', 'nickname', 'other_country', 'birthday', 'joined_at', 'sendnewspaper', 'address', 'further_address', 'zip', 'location', 'main_phone', 'mobile_phone', 'work_phone', 'fax', 'email', 'email_parents', 'nami_id', 'letter_address', 'country_id', 'way_id', 'nationality_id', 'subscription_id', 'region_id', 'gender_id', 'confession_id'];
 
     public $dates = ['joined_at', 'birthday'];
 
     public $casts = [
-        'active' => 'boolean',
         'sendnewspaper' => 'boolean',
         'gender_id' => 'integer',
         'way_id' => 'integer',
@@ -30,7 +29,7 @@ class Member extends Model
              ->orWhere('lastname', 'LIKE', '%'.$text.'%')
              ->orWhere('address', 'LIKE', '%'.$text.'%')
              ->orWhere('zip', 'LIKE', '%'.$text.'%')
-             ->orWhere('city', 'LIKE', '%'.$text.'%');
+             ->orWhere('location', 'LIKE', '%'.$text.'%');
     }
 
 
diff --git a/database/migrations/2017_07_04_223230_create_members_table.php b/database/migrations/2017_07_04_223230_create_members_table.php
index 55d74ebf..053960f3 100644
--- a/database/migrations/2017_07_04_223230_create_members_table.php
+++ b/database/migrations/2017_07_04_223230_create_members_table.php
@@ -28,15 +28,14 @@ class CreateMembersTable extends Migration
             $table->string('address');
             $table->string('further_address')->nullable();
             $table->string('zip');
-            $table->string('city');
+            $table->string('location');
             $table->string('region_id')->nullable();
-            $table->string('phone')->nullable();
-            $table->string('mobile')->nullable();
-            $table->string('business_phone')->nullable();
+            $table->string('main_phone')->nullable();
+            $table->string('mobile_phone')->nullable();
+            $table->string('work_phone')->nullable();
             $table->string('fax')->nullable();
             $table->string('email')->nullable();
             $table->string('email_parents')->nullable();
-            $table->boolean('active')->default(1);
             $table->integer('nami_id')->nullable();
             $table->integer('nationality_id')->unsigned();
             $table->integer('subscription_id')->nullable();