Compare commits
	
		
			No commits in common. "37c9021e762bb9f6ca15e049ca49f2b0746fc420" and "c047f8da63ccff9d775004b346664cb2d852d24d" have entirely different histories.
		
	
	
		
			37c9021e76
			...
			c047f8da63
		
	
		| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
FROM php:8.3.11-fpm AS php
 | 
					FROM php:8.3.11-fpm as php
 | 
				
			||||||
WORKDIR /app
 | 
					WORKDIR /app
 | 
				
			||||||
RUN ls /app
 | 
					RUN ls /app
 | 
				
			||||||
RUN apt-get update
 | 
					RUN apt-get update
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,17 +1,16 @@
 | 
				
			||||||
FROM composer:2.7.9 AS composer
 | 
					FROM composer:2.7.9 as composer
 | 
				
			||||||
WORKDIR /app
 | 
					WORKDIR /app
 | 
				
			||||||
COPY . /app
 | 
					COPY . /app
 | 
				
			||||||
RUN composer install --ignore-platform-reqs --no-dev
 | 
					RUN composer install --ignore-platform-reqs --no-dev
 | 
				
			||||||
RUN php artisan telescope:publish
 | 
					RUN php artisan telescope:publish
 | 
				
			||||||
RUN php artisan horizon:publish
 | 
					RUN php artisan horizon:publish
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FROM node:20.15.0-slim AS node
 | 
					FROM node:20.15.0-slim as node
 | 
				
			||||||
WORKDIR /app
 | 
					WORKDIR /app
 | 
				
			||||||
COPY . /app
 | 
					COPY . /app
 | 
				
			||||||
RUN cd packages/adrema-form && npm ci && npm run build && rm -R node_modules && cd ../../
 | 
					RUN npm install && npm run prod && npm run img && rm -R node_modules
 | 
				
			||||||
RUN npm ci && npm run prod && npm run img && rm -R node_modules
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
FROM nginx:1.21.6-alpine AS nginx
 | 
					FROM nginx:1.21.6-alpine as nginx
 | 
				
			||||||
WORKDIR /app
 | 
					WORKDIR /app
 | 
				
			||||||
COPY --from=node /app /app
 | 
					COPY --from=node /app /app
 | 
				
			||||||
COPY --from=composer /app/public/vendor /app/public/vendor
 | 
					COPY --from=composer /app/public/vendor /app/public/vendor
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,15 +1,14 @@
 | 
				
			||||||
FROM composer:2.7.9 AS composer
 | 
					FROM composer:2.7.9 as composer
 | 
				
			||||||
WORKDIR /app
 | 
					WORKDIR /app
 | 
				
			||||||
COPY . /app
 | 
					COPY . /app
 | 
				
			||||||
RUN composer install --ignore-platform-reqs --no-dev
 | 
					RUN composer install --ignore-platform-reqs --no-dev
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FROM node:20.15.0-slim AS node
 | 
					FROM node:20.15.0-slim as node
 | 
				
			||||||
WORKDIR /app
 | 
					WORKDIR /app
 | 
				
			||||||
COPY . /app
 | 
					COPY . /app
 | 
				
			||||||
RUN cd packages/adrema-form && npm ci && npm run build && rm -R node_modules && cd ../../
 | 
					RUN npm install && npm run prod && npm run img && rm -R node_modules
 | 
				
			||||||
RUN npm ci && npm run prod && npm run img && rm -R node_modules
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
FROM zoomyboy/adrema-base:latest AS php
 | 
					FROM zoomyboy/adrema-base:latest as php
 | 
				
			||||||
COPY --chown=www-data:www-data . /app
 | 
					COPY --chown=www-data:www-data . /app
 | 
				
			||||||
COPY --chown=www-data:www-data --from=node /app/public /app/public
 | 
					COPY --chown=www-data:www-data --from=node /app/public /app/public
 | 
				
			||||||
COPY --chown=www-data:www-data --from=composer /app/vendor /app/vendor
 | 
					COPY --chown=www-data:www-data --from=composer /app/vendor /app/vendor
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,7 @@ fi
 | 
				
			||||||
if [ $1 == "app" ]; then
 | 
					if [ $1 == "app" ]; then
 | 
				
			||||||
    # --------------------------- ensure appkey is set ----------------------------
 | 
					    # --------------------------- ensure appkey is set ----------------------------
 | 
				
			||||||
    wait_for_db
 | 
					    wait_for_db
 | 
				
			||||||
    php -r '$connection = new PDO("mysql:host='$DB_HOST';dbname='$DB_DATABASE'", "'$DB_USERNAME'", "'$DB_PASSWORD'"); $connection->query("DESCRIBE migrations");' > /dev/null || php artisan migrate --seed --force
 | 
					    php -r '$connection = new PDO("mysql:host='$DB_HOST';dbname='$DB_DATABASE'", "'$DB_USERNAME'", "'$DB_PASSWORD'"); $connection->query("DESCRIBE migrations");' > /dev/null || ( php artisan migrate --seed --force && php artisan db:seed )
 | 
				
			||||||
    su www-data -c 'php artisan migrate --force'
 | 
					    su www-data -c 'php artisan migrate --force'
 | 
				
			||||||
    php artisan scout:sync-index-settings
 | 
					    php artisan scout:sync-index-settings
 | 
				
			||||||
    php-fpm -F -R -O
 | 
					    php-fpm -F -R -O
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										14
									
								
								README.md
								
								
								
								
							
							
						
						
									
										14
									
								
								README.md
								
								
								
								
							| 
						 | 
					@ -100,22 +100,28 @@ Bei dem Setup wird im Daten-Verzeichniss ein Ordner `./data/setup` angelegt. Hie
 | 
				
			||||||
    git clone https://git.zoomyboy.de/silva/adrema.git
 | 
					    git clone https://git.zoomyboy.de/silva/adrema.git
 | 
				
			||||||
    ```
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
2. Kopieren der Beispiel Environmentvariablen-Datei
 | 
					2. Kopieren der Beispiel Docker-Compose für das Entwickeln und nach Wünschen anpassen
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```cmd
 | 
				
			||||||
 | 
					    cp docker-compose.dev.yml docker-compose.yml
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					3. Kopieren der Beispiel Environmentvariablen-Datei
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ```cmd
 | 
					    ```cmd
 | 
				
			||||||
    cp .app.env.example .app.env
 | 
					    cp .app.env.example .app.env
 | 
				
			||||||
    ```
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
3. Submodule aktuallisieren
 | 
					4. Submodule aktuallisieren
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ```cmd
 | 
					    ```cmd
 | 
				
			||||||
    git submodule update --init
 | 
					    git submodule update --init
 | 
				
			||||||
    ```
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
4. Container erstellen
 | 
					5. Container erstellen
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ```cmd
 | 
					    ```cmd
 | 
				
			||||||
    docker compose build
 | 
					    docker compose build
 | 
				
			||||||
    ```
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
5. Mit Schritt 3 und den folgenden der [Installation des Produktivsystems](#installation-des-produktivsystems) fortfahren
 | 
					6. Mit Schritt 3 und den folgenden der [Installation des Produktivsystems](#installation-des-produktivsystems) fortfahren
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -61,7 +61,7 @@ class InsertMemberAction
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return tap(Member::updateOrCreate(['nami_id' => $member->id], $payload), function ($insertedMember) use ($member) {
 | 
					        return tap(Member::updateOrCreate(['nami_id' => $member->id], $payload), function ($insertedMember) use ($member) {
 | 
				
			||||||
            $insertedMember->bankAccount->update([
 | 
					            $insertedMember->bankAccount()->updateOrCreate([
 | 
				
			||||||
                'iban' => $member->bankAccount->iban,
 | 
					                'iban' => $member->bankAccount->iban,
 | 
				
			||||||
                'bic' => $member->bankAccount->bic,
 | 
					                'bic' => $member->bankAccount->bic,
 | 
				
			||||||
                'blz' => $member->bankAccount->blz,
 | 
					                'blz' => $member->bankAccount->blz,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,16 +48,7 @@ class NamiPutMemberAction
 | 
				
			||||||
            'id' => $member->nami_id,
 | 
					            'id' => $member->nami_id,
 | 
				
			||||||
            'version' => $member->version,
 | 
					            'version' => $member->version,
 | 
				
			||||||
            'keepdata' => $member->keepdata,
 | 
					            'keepdata' => $member->keepdata,
 | 
				
			||||||
            'bankAccount' => BankAccount::from([
 | 
					            'bankAccount' => BankAccount::from([]),
 | 
				
			||||||
                'bankName' => $member->bankAccount->bank_name,
 | 
					 | 
				
			||||||
                'id' => $member->bankAccount->nami_id,
 | 
					 | 
				
			||||||
                'memberId' => $member->mitgliedsnr,
 | 
					 | 
				
			||||||
                'iban' => $member->bankAccount->iban,
 | 
					 | 
				
			||||||
                'bic' => $member->bankAccount->bic,
 | 
					 | 
				
			||||||
                'blz' => $member->bankAccount->blz,
 | 
					 | 
				
			||||||
                'person' => $member->bankAccount->person,
 | 
					 | 
				
			||||||
                'accountNumber' => $member->bankAccount->account_number,
 | 
					 | 
				
			||||||
            ]),
 | 
					 | 
				
			||||||
        ]);
 | 
					        ]);
 | 
				
			||||||
        $response = $api->putMember($namiMember, $activity ? $activity->nami_id : null, $subactivity ? $subactivity->nami_id : null);
 | 
					        $response = $api->putMember($namiMember, $activity ? $activity->nami_id : null, $subactivity ? $subactivity->nami_id : null);
 | 
				
			||||||
        Member::withoutEvents(function () use ($response, $member) {
 | 
					        Member::withoutEvents(function () use ($response, $member) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,6 +12,4 @@ class BankAccount extends Model
 | 
				
			||||||
    use HasFactory;
 | 
					    use HasFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public $guarded = [];
 | 
					    public $guarded = [];
 | 
				
			||||||
 | 
					 | 
				
			||||||
    public $primaryKey = 'member_id';
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,8 +9,7 @@ use Zoomyboy\LaravelNami\Data\Member as NamiMember;
 | 
				
			||||||
use Zoomyboy\LaravelNami\Data\MembershipEntry as NamiMembershipEntry;
 | 
					use Zoomyboy\LaravelNami\Data\MembershipEntry as NamiMembershipEntry;
 | 
				
			||||||
use Spatie\LaravelData\Attributes\DataCollectionOf;
 | 
					use Spatie\LaravelData\Attributes\DataCollectionOf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class FullMember extends Data
 | 
					class FullMember extends Data {
 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @param DataCollection<int, NamiCourse> $courses
 | 
					     * @param DataCollection<int, NamiCourse> $courses
 | 
				
			||||||
     * @param DataCollection<int, NamiMembershipEntry> $memberships
 | 
					     * @param DataCollection<int, NamiMembershipEntry> $memberships
 | 
				
			||||||
| 
						 | 
					@ -21,6 +20,6 @@ class FullMember extends Data
 | 
				
			||||||
        public DataCollection $courses,
 | 
					        public DataCollection $courses,
 | 
				
			||||||
        #[DataCollectionOf(NamiMembershipEntry::class)]
 | 
					        #[DataCollectionOf(NamiMembershipEntry::class)]
 | 
				
			||||||
        public DataCollection $memberships,
 | 
					        public DataCollection $memberships,
 | 
				
			||||||
    ) {
 | 
					    ) {}
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -304,17 +304,12 @@ class Member extends Model implements Geolocatable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static function booted()
 | 
					    public static function booted()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        static::created(function (self $model): void {
 | 
					 | 
				
			||||||
            $model->bankAccount()->create([]);
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        static::deleting(function (self $model): void {
 | 
					        static::deleting(function (self $model): void {
 | 
				
			||||||
            $model->memberships->each->delete();
 | 
					            $model->memberships->each->delete();
 | 
				
			||||||
            $model->courses->each->delete();
 | 
					            $model->courses->each->delete();
 | 
				
			||||||
            $model->invoicePositions->each(function ($position) {
 | 
					            $model->invoicePositions->each(function ($position) {
 | 
				
			||||||
                $position->delete();
 | 
					                $position->delete();
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            $model->bankAccount()->delete();
 | 
					 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,10 +6,17 @@ use App\Member\BankAccount;
 | 
				
			||||||
use Illuminate\Database\Eloquent\Factories\Factory;
 | 
					use Illuminate\Database\Eloquent\Factories\Factory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @extends Factory<BankAccount>
 | 
					 * @template TModel of \App\Member\BankAccount
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @extends \Illuminate\Database\Eloquent\Factories\Factory<TModel>
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
class BankAccountFactory extends Factory
 | 
					class BankAccountFactory extends Factory
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * The name of the factory's corresponding model.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var class-string<TModel>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    protected $model = BankAccount::class;
 | 
					    protected $model = BankAccount::class;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					@ -20,17 +27,7 @@ class BankAccountFactory extends Factory
 | 
				
			||||||
    public function definition(): array
 | 
					    public function definition(): array
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return [
 | 
					        return [
 | 
				
			||||||
            'bank_name' => $this->faker->name(),
 | 
					            //
 | 
				
			||||||
            'bic' => $this->faker->swiftBicNumber(),
 | 
					 | 
				
			||||||
            'iban' => $this->faker->iban('DE'),
 | 
					 | 
				
			||||||
            'blz' => $this->faker->name(),
 | 
					 | 
				
			||||||
            'person' => $this->faker->name(),
 | 
					 | 
				
			||||||
            'account_number' => $this->faker->name(),
 | 
					 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    public function inNami(int $namiId): self
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        return $this->state(['nami_id' => $namiId]);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -93,13 +93,6 @@ class MemberFactory extends Factory
 | 
				
			||||||
        return $this->state(['nami_id' => $namiId]);
 | 
					        return $this->state(['nami_id' => $namiId]);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function withBankAccount(BankAccountFactory $factory): self
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        return $this->afterCreating(function ($member) use ($factory) {
 | 
					 | 
				
			||||||
            $member->bankAccount->update($factory->make()->toArray());
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public function sameFamilyAs(Member $member): self
 | 
					    public function sameFamilyAs(Member $member): self
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return $this->state([
 | 
					        return $this->state([
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,11 +7,11 @@ use App\Actions\PullMembershipsAction;
 | 
				
			||||||
use App\Activity;
 | 
					use App\Activity;
 | 
				
			||||||
use App\Confession;
 | 
					use App\Confession;
 | 
				
			||||||
use App\Country;
 | 
					use App\Country;
 | 
				
			||||||
use App\Gender;
 | 
					use App\Fee;
 | 
				
			||||||
use App\Group;
 | 
					use App\Group;
 | 
				
			||||||
use App\Member\Actions\NamiPutMemberAction;
 | 
					use App\Member\Actions\NamiPutMemberAction;
 | 
				
			||||||
use App\Member\BankAccount;
 | 
					 | 
				
			||||||
use App\Member\Member;
 | 
					use App\Member\Member;
 | 
				
			||||||
 | 
					use App\Nationality;
 | 
				
			||||||
use App\Payment\Subscription;
 | 
					use App\Payment\Subscription;
 | 
				
			||||||
use App\Region;
 | 
					use App\Region;
 | 
				
			||||||
use App\Subactivity;
 | 
					use App\Subactivity;
 | 
				
			||||||
| 
						 | 
					@ -20,130 +20,52 @@ use Phake;
 | 
				
			||||||
use Zoomyboy\LaravelNami\Fakes\MemberFake;
 | 
					use Zoomyboy\LaravelNami\Fakes\MemberFake;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uses(DatabaseTransactions::class);
 | 
					uses(DatabaseTransactions::class);
 | 
				
			||||||
covers(NamiPutMemberAction::class);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
beforeEach(function () {
 | 
					it('testItPutsAMember', function (array $memberAttributes, array $storedAttributes) {
 | 
				
			||||||
 | 
					    Fee::factory()->create();
 | 
				
			||||||
    $this->stubIo(PullMemberAction::class, fn ($mock) => $mock);
 | 
					    $this->stubIo(PullMemberAction::class, fn ($mock) => $mock);
 | 
				
			||||||
    $this->stubIo(PullMembershipsAction::class, fn ($mock) => $mock);
 | 
					    $this->stubIo(PullMembershipsAction::class, fn ($mock) => $mock);
 | 
				
			||||||
    Group::factory()->inNami(55)->create();
 | 
					 | 
				
			||||||
    $this->withoutExceptionHandling()->login()->loginNami();
 | 
					    $this->withoutExceptionHandling()->login()->loginNami();
 | 
				
			||||||
 | 
					    $country = Country::factory()->create();
 | 
				
			||||||
 | 
					    $region = Region::factory()->create();
 | 
				
			||||||
 | 
					    $nationality = Nationality::factory()->inNami(565)->create();
 | 
				
			||||||
 | 
					    $subscription = Subscription::factory()->forFee()->create();
 | 
				
			||||||
 | 
					    $group = Group::factory()->inNami(55)->create();
 | 
				
			||||||
 | 
					    $confession = Confession::factory()->inNami(567)->create(['is_null' => true]);
 | 
				
			||||||
    app(MemberFake::class)->stores(55, 993);
 | 
					    app(MemberFake::class)->stores(55, 993);
 | 
				
			||||||
    Confession::factory()->inNami(567)->create(['is_null' => true]);
 | 
					    $activity = Activity::factory()->hasAttached(Subactivity::factory()->name('Biber')->inNami(55))->name('Leiter')->inNami(6)->create();
 | 
				
			||||||
    $activity = Activity::factory()->inNami(6)->create();
 | 
					    $subactivity = $activity->subactivities->first();
 | 
				
			||||||
    Subactivity::factory()->hasAttached($activity)->inNami(55)->create();
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
it('pulls member and memberships befre pushing', function () {
 | 
					    $member = Member::factory()
 | 
				
			||||||
    $member = Member::factory()->defaults()->create();
 | 
					        ->for($country)
 | 
				
			||||||
 | 
					        ->for($subscription)
 | 
				
			||||||
 | 
					        ->for($region)
 | 
				
			||||||
 | 
					        ->for($nationality)
 | 
				
			||||||
 | 
					        ->for($group)
 | 
				
			||||||
 | 
					        ->emailBillKind()
 | 
				
			||||||
 | 
					        ->create($memberAttributes);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    NamiPutMemberAction::run($member, Activity::first(), Subactivity::first());
 | 
					    NamiPutMemberAction::run($member, $activity, $subactivity);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    app(MemberFake::class)->assertStored(55, [
 | 
				
			||||||
 | 
					        'ersteTaetigkeitId' => 6,
 | 
				
			||||||
 | 
					        'ersteUntergliederungId' => 55,
 | 
				
			||||||
 | 
					        'konfessionId' => 567,
 | 
				
			||||||
 | 
					        ...$storedAttributes,
 | 
				
			||||||
 | 
					    ]);
 | 
				
			||||||
 | 
					    $this->assertDatabaseHas('members', [
 | 
				
			||||||
 | 
					        'nami_id' => 993,
 | 
				
			||||||
 | 
					    ]);
 | 
				
			||||||
    Phake::verify(app(PullMemberAction::class))->handle(55, 993);
 | 
					    Phake::verify(app(PullMemberAction::class))->handle(55, 993);
 | 
				
			||||||
    Phake::verify(app(PullMembershipsAction::class))->handle($member);
 | 
					    Phake::verify(app(PullMembershipsAction::class))->handle($member);
 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
it('sets nami id of member', function () {
 | 
					 | 
				
			||||||
    $member = Member::factory()->defaults()->create();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    NamiPutMemberAction::run($member, Activity::first(), Subactivity::first());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    $this->assertDatabaseHas('members', ['nami_id' => 993]);
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
it('stores member attributes', function (array $memberAttributes, array $storedAttributes) {
 | 
					 | 
				
			||||||
    $member = Member::factory()->defaults()->create($memberAttributes);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    NamiPutMemberAction::run($member, Activity::first(), Subactivity::first());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    app(MemberFake::class)->assertStored(55, $storedAttributes);
 | 
					 | 
				
			||||||
})->with([
 | 
					})->with([
 | 
				
			||||||
    [['firstname' => 'Phi'], ['vorname' => 'Phi']],
 | 
					    [
 | 
				
			||||||
    [['lastname' => 'Phi'], ['nachname' => 'Phi']],
 | 
					        ['email_parents' => 'a@b.de'], ['emailVertretungsberechtigter' => 'a@b.de'],
 | 
				
			||||||
    [['nickname' => 'Nick'], ['spitzname' => 'Nick']],
 | 
					    ],
 | 
				
			||||||
    [['email' => 'a@b.de'], ['email' => 'a@b.de']],
 | 
					    [
 | 
				
			||||||
    [['zip' => '5566'], ['plz' => '5566']],
 | 
					        ['keepdata' => true], ['wiederverwendenFlag' => true],
 | 
				
			||||||
    [['location' => 'SG'], ['ort' => 'SG']],
 | 
					    ],
 | 
				
			||||||
    [['further_address' => 'SG'], ['nameZusatz' => 'SG']],
 | 
					    [
 | 
				
			||||||
    [['other_country' => 'SG'], ['staatsangehoerigkeitText' => 'SG']],
 | 
					        ['keepdata' => false], ['wiederverwendenFlag' => false],
 | 
				
			||||||
    [['address' => 'Add'], ['strasse' => 'Add']],
 | 
					    ],
 | 
				
			||||||
    [['main_phone' => '+49 212 5566234'], ['telefon1' => '+49 212 5566234']],
 | 
					 | 
				
			||||||
    [['mobile_phone' => '+49 212 5566234'], ['telefon2' => '+49 212 5566234']],
 | 
					 | 
				
			||||||
    [['work_phone' => '+49 212 5566234'], ['telefon3' => '+49 212 5566234']],
 | 
					 | 
				
			||||||
    [['email_parents' => 'a@b.de'], ['emailVertretungsberechtigter' => 'a@b.de']],
 | 
					 | 
				
			||||||
    [['keepdata' => true], ['wiederverwendenFlag' => true]],
 | 
					 | 
				
			||||||
    [['keepdata' => false], ['wiederverwendenFlag' => false]],
 | 
					 | 
				
			||||||
    fn () => [['joined_at' => now()], ['eintrittsdatum' => now()->format('Y-m-d') . ' 00:00:00']],
 | 
					 | 
				
			||||||
    [['fax' => '555'], ['telefax' => '555']],
 | 
					 | 
				
			||||||
    [[], ['konfessionId' => 567]],
 | 
					 | 
				
			||||||
    [[], ['ersteTaetigkeitId' => 6]],
 | 
					 | 
				
			||||||
    [[], ['ersteUntergliederungId' => 55]],
 | 
					 | 
				
			||||||
]);
 | 
					]);
 | 
				
			||||||
 | 
					 | 
				
			||||||
it('stores related models', function () {
 | 
					 | 
				
			||||||
    Subscription::factory()->forFee(3)->create();
 | 
					 | 
				
			||||||
    $member = Member::factory()->defaults()
 | 
					 | 
				
			||||||
        ->for(Country::factory()->inNami(1)->create())
 | 
					 | 
				
			||||||
        ->for(Region::factory()->inNami(2)->create())
 | 
					 | 
				
			||||||
        ->for(Gender::factory()->inNami(4)->create())
 | 
					 | 
				
			||||||
        ->create();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    NamiPutMemberAction::run($member, Activity::first(), Subactivity::first());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    app(MemberFake::class)->assertStored(55, ['regionId' => 2, 'landId' => 1, 'beitragsartId' => 3, 'geschlechtId' => 4]);
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
it('stores bank account with empty values', function () {
 | 
					 | 
				
			||||||
    $member = Member::factory()->defaults()->create(['mitgliedsnr' => 56]);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    NamiPutMemberAction::run($member, Activity::first(), Subactivity::first());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    app(MemberFake::class)->assertStored(55, ['kontoverbindung' => json_encode([
 | 
					 | 
				
			||||||
        'id' => '',
 | 
					 | 
				
			||||||
        'zahlungsKonditionId' => null,
 | 
					 | 
				
			||||||
        'mitgliedsNummer' => 56,
 | 
					 | 
				
			||||||
        'institut' => '',
 | 
					 | 
				
			||||||
        'kontoinhaber' => '',
 | 
					 | 
				
			||||||
        'kontonummer' => '',
 | 
					 | 
				
			||||||
        'bankleitzahl' => '',
 | 
					 | 
				
			||||||
        'iban' => '',
 | 
					 | 
				
			||||||
        'bic' => ''
 | 
					 | 
				
			||||||
    ])]);
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
it('updates existing member', function () {
 | 
					 | 
				
			||||||
    app(MemberFake::class)->updatesSuccessfully(55, 103)->shows(55, 103);
 | 
					 | 
				
			||||||
    $member = Member::factory()->defaults()->inNami(103)->create(['version' => 50]);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    NamiPutMemberAction::run($member, Activity::first(), Subactivity::first());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    app(MemberFake::class)->assertUpdated(55, 103, ['id' => 103, 'version' => 50]);
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
it('updates bank account with filled values', function () {
 | 
					 | 
				
			||||||
    app(MemberFake::class)->updatesSuccessfully(55, 103)->shows(55, 103);
 | 
					 | 
				
			||||||
    $member = Member::factory()->defaults()
 | 
					 | 
				
			||||||
        ->withBankAccount(BankAccount::factory()->inNami(30)->state([
 | 
					 | 
				
			||||||
            'bank_name' => 'Stadt',
 | 
					 | 
				
			||||||
            'bic' => 'SOLSDE33',
 | 
					 | 
				
			||||||
            'iban' => 'DE50',
 | 
					 | 
				
			||||||
            'blz' => 'ssss',
 | 
					 | 
				
			||||||
            'person' => 'Pill',
 | 
					 | 
				
			||||||
            'account_number' => 'ddf',
 | 
					 | 
				
			||||||
        ]))
 | 
					 | 
				
			||||||
        ->inNami(103)
 | 
					 | 
				
			||||||
        ->create(['mitgliedsnr' => 56]);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    NamiPutMemberAction::run($member, Activity::first(), Subactivity::first());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    app(MemberFake::class)->assertUpdated(55, 103, ['kontoverbindung' => json_encode([
 | 
					 | 
				
			||||||
        'id' => 30,
 | 
					 | 
				
			||||||
        'zahlungsKonditionId' => null,
 | 
					 | 
				
			||||||
        'mitgliedsNummer' => 56,
 | 
					 | 
				
			||||||
        'institut' => 'Stadt',
 | 
					 | 
				
			||||||
        'kontoinhaber' => 'Pill',
 | 
					 | 
				
			||||||
        'kontonummer' => 'ddf',
 | 
					 | 
				
			||||||
        'bankleitzahl' => 'ssss',
 | 
					 | 
				
			||||||
        'iban' => 'DE50',
 | 
					 | 
				
			||||||
        'bic' => 'SOLSDE33'
 | 
					 | 
				
			||||||
    ])]);
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue