Add RememberWeeks setting for remembering invoices
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
fe258198f4
commit
343b0d418d
|
@ -4,7 +4,6 @@ namespace App\Invoice\Actions;
|
||||||
|
|
||||||
use App\Invoice\BillDocument;
|
use App\Invoice\BillDocument;
|
||||||
use App\Invoice\BillKind;
|
use App\Invoice\BillKind;
|
||||||
use App\Invoice\Enums\InvoiceStatus;
|
|
||||||
use App\Invoice\Mails\BillMail;
|
use App\Invoice\Mails\BillMail;
|
||||||
use App\Invoice\Mails\RememberMail;
|
use App\Invoice\Mails\RememberMail;
|
||||||
use App\Invoice\Models\Invoice;
|
use App\Invoice\Models\Invoice;
|
||||||
|
|
|
@ -28,6 +28,8 @@ class InvoiceSettings extends LocalSettings implements Indexable, Storeable
|
||||||
|
|
||||||
public string $bic;
|
public string $bic;
|
||||||
|
|
||||||
|
public int $rememberWeeks;
|
||||||
|
|
||||||
public static function group(): string
|
public static function group(): string
|
||||||
{
|
{
|
||||||
return 'bill';
|
return 'bill';
|
||||||
|
|
|
@ -6,6 +6,7 @@ use App\Invoice\BillDocument;
|
||||||
use App\Invoice\BillKind;
|
use App\Invoice\BillKind;
|
||||||
use App\Invoice\Enums\InvoiceStatus;
|
use App\Invoice\Enums\InvoiceStatus;
|
||||||
use App\Invoice\InvoiceDocument;
|
use App\Invoice\InvoiceDocument;
|
||||||
|
use App\Invoice\InvoiceSettings;
|
||||||
use App\Invoice\RememberDocument;
|
use App\Invoice\RememberDocument;
|
||||||
use App\Invoice\Scopes\InvoiceFilterScope;
|
use App\Invoice\Scopes\InvoiceFilterScope;
|
||||||
use App\Member\Member;
|
use App\Member\Member;
|
||||||
|
@ -111,13 +112,14 @@ class Invoice extends Model
|
||||||
*
|
*
|
||||||
* @return Builder<self>
|
* @return Builder<self>
|
||||||
*/
|
*/
|
||||||
public function scopeWhereNeedsRemember(Builder $query): Builder
|
public function scopeWhereNeedsRemember(Builder $query, ?int $weeks = null): Builder
|
||||||
{
|
{
|
||||||
|
$weeks = $weeks ?: app(InvoiceSettings::class)->rememberWeeks;
|
||||||
return $query
|
return $query
|
||||||
->where('status', InvoiceStatus::SENT)
|
->where('status', InvoiceStatus::SENT)
|
||||||
->whereNotNull('sent_at')
|
->whereNotNull('sent_at')
|
||||||
->whereNotNull('last_remembered_at')
|
->whereNotNull('last_remembered_at')
|
||||||
->where('last_remembered_at', '<=', now()->subMonths(3));
|
->where('last_remembered_at', '<=', now()->subWeeks($weeks));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -26,6 +26,7 @@ class SettingIndexAction
|
||||||
'zip' => $settings->zip,
|
'zip' => $settings->zip,
|
||||||
'iban' => $settings->iban,
|
'iban' => $settings->iban,
|
||||||
'bic' => $settings->bic,
|
'bic' => $settings->bic,
|
||||||
|
'remember_weeks' => $settings->rememberWeeks,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ class SettingSaveAction
|
||||||
'zip' => $input['zip'] ?? '',
|
'zip' => $input['zip'] ?? '',
|
||||||
'iban' => $input['iban'] ?? '',
|
'iban' => $input['iban'] ?? '',
|
||||||
'bic' => $input['bic'] ?? '',
|
'bic' => $input['bic'] ?? '',
|
||||||
|
'rememberWeeks' => $input['remember_weeks'] ?? 1,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$settings->save();
|
$settings->save();
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Spatie\LaravelSettings\Migrations\SettingsMigration;
|
||||||
|
|
||||||
|
return new class extends SettingsMigration
|
||||||
|
{
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
$this->migrator->add('bill.rememberWeeks', 12);
|
||||||
|
}
|
||||||
|
};
|
|
@ -17,6 +17,7 @@
|
||||||
<f-text id="website" v-model="inner.website" label="Webseite"></f-text>
|
<f-text id="website" v-model="inner.website" label="Webseite"></f-text>
|
||||||
<f-text id="iban" v-model="inner.iban" label="IBAN"></f-text>
|
<f-text id="iban" v-model="inner.iban" label="IBAN"></f-text>
|
||||||
<f-text id="bic" v-model="inner.bic" label="BIC"></f-text>
|
<f-text id="bic" v-model="inner.bic" label="BIC"></f-text>
|
||||||
|
<f-text id="remember_weeks" v-model="inner.remember_weeks" type="number" label="Erinnerung alle X Wochen versenden"></f-text>
|
||||||
</form>
|
</form>
|
||||||
</setting-layout>
|
</setting-layout>
|
||||||
</page-layout>
|
</page-layout>
|
||||||
|
|
|
@ -6,6 +6,7 @@ use App\Invoice\Actions\InvoiceSendAction;
|
||||||
use App\Invoice\BillDocument;
|
use App\Invoice\BillDocument;
|
||||||
use App\Invoice\BillKind;
|
use App\Invoice\BillKind;
|
||||||
use App\Invoice\Enums\InvoiceStatus;
|
use App\Invoice\Enums\InvoiceStatus;
|
||||||
|
use App\Invoice\InvoiceSettings;
|
||||||
use App\Invoice\Mails\BillMail;
|
use App\Invoice\Mails\BillMail;
|
||||||
use App\Invoice\Mails\RememberMail;
|
use App\Invoice\Mails\RememberMail;
|
||||||
use App\Invoice\Models\Invoice;
|
use App\Invoice\Models\Invoice;
|
||||||
|
@ -76,6 +77,25 @@ class InvoiceSendActionTest extends TestCase
|
||||||
Mail::assertNotSent(RememberMail::class);
|
Mail::assertNotSent(RememberMail::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testItRemembersWhenWeeksSettingIsReached(): void
|
||||||
|
{
|
||||||
|
Mail::fake();
|
||||||
|
$this->withoutExceptionHandling()->login()->loginNami();
|
||||||
|
Invoice::factory()
|
||||||
|
->has(InvoicePosition::factory()->withMember(), 'positions')
|
||||||
|
->via(BillKind::EMAIL)
|
||||||
|
->status(InvoiceStatus::SENT)
|
||||||
|
->create(['sent_at' => now()->subYear(), 'last_remembered_at' => now()->subWeeks(5)->subDay()]);
|
||||||
|
|
||||||
|
app(InvoiceSettings::class)->fill(['rememberWeeks' => 6])->save();
|
||||||
|
InvoiceSendAction::run();
|
||||||
|
Mail::assertNotSent(RememberMail::class);
|
||||||
|
|
||||||
|
app(InvoiceSettings::class)->fill(['rememberWeeks' => 5])->save();
|
||||||
|
InvoiceSendAction::run();
|
||||||
|
Mail::assertSent(RememberMail::class);
|
||||||
|
}
|
||||||
|
|
||||||
public function testItDoesntSendPostInvoices(): void
|
public function testItDoesntSendPostInvoices(): void
|
||||||
{
|
{
|
||||||
Mail::fake();
|
Mail::fake();
|
||||||
|
|
|
@ -24,6 +24,7 @@ class SettingTest extends TestCase
|
||||||
'zip' => '12345',
|
'zip' => '12345',
|
||||||
'iban' => 'DE05',
|
'iban' => 'DE05',
|
||||||
'bic' => 'SOLSDE',
|
'bic' => 'SOLSDE',
|
||||||
|
'rememberWeeks' => 6
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$response = $this->get('/setting/bill');
|
$response = $this->get('/setting/bill');
|
||||||
|
@ -40,6 +41,7 @@ class SettingTest extends TestCase
|
||||||
'zip' => '12345',
|
'zip' => '12345',
|
||||||
'iban' => 'DE05',
|
'iban' => 'DE05',
|
||||||
'bic' => 'SOLSDE',
|
'bic' => 'SOLSDE',
|
||||||
|
'remember_weeks' => 6
|
||||||
], $response, 'data');
|
], $response, 'data');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,6 +79,7 @@ class SettingTest extends TestCase
|
||||||
'zip' => '12345',
|
'zip' => '12345',
|
||||||
'iban' => 'DE05',
|
'iban' => 'DE05',
|
||||||
'bic' => 'SOLSDE',
|
'bic' => 'SOLSDE',
|
||||||
|
'remember_weeks' => 10
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$response->assertRedirect('/setting/bill');
|
$response->assertRedirect('/setting/bill');
|
||||||
|
@ -84,5 +87,6 @@ class SettingTest extends TestCase
|
||||||
$this->assertEquals('DPSG Stamm Muster', $settings->from_long);
|
$this->assertEquals('DPSG Stamm Muster', $settings->from_long);
|
||||||
$this->assertEquals('DE05', $settings->iban);
|
$this->assertEquals('DE05', $settings->iban);
|
||||||
$this->assertEquals('SOLSDE', $settings->bic);
|
$this->assertEquals('SOLSDE', $settings->bic);
|
||||||
|
$this->assertEquals(10, $settings->rememberWeeks);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue