add requires ifsg certificate

This commit is contained in:
Xu 2023-08-09 14:05:46 +02:00 committed by msquare
parent f345942e46
commit 8dd4af1bb6
9 changed files with 116 additions and 20 deletions

View File

@ -324,7 +324,7 @@ return [
], ],
# Instruction in accordance with § 43 Para. 1 of the German Infection Protection Act (IfSG) # Instruction in accordance with § 43 Para. 1 of the German Infection Protection Act (IfSG)
'ifsg_enabled' => (bool) env('IFSG_ENABLED', false), 'ifsg_enabled' => (bool) env('IFSG_ENABLED', true),
// Available locales in /resources/lang/ // Available locales in /resources/lang/
'locales' => [ 'locales' => [

View File

@ -0,0 +1,33 @@
<?php
declare(strict_types=1);
namespace Engelsystem\Migrations;
use Engelsystem\Database\Migration\Migration;
use Illuminate\Database\Schema\Blueprint;
class AddRequiresIfsgCerificateToAngeltypes extends Migration
{
use Reference;
/**
* Run the migration
*/
public function up(): void
{
$this->schema->table('angel_types', function (Blueprint $table): void {
$table->boolean('requires_ifsg_certificate')->default(false)->after('requires_driver_license');
});
}
/**
* Reverse the migration
*/
public function down(): void
{
$this->schema->table('angel_types', function (Blueprint $table): void {
$table->dropColumn('requires_ifsg_certificate');
});
}
}

View File

@ -123,6 +123,7 @@ function angeltype_edit_controller()
$angeltype->hide_register = $request->has('hide_register'); $angeltype->hide_register = $request->has('hide_register');
$angeltype->requires_driver_license = $request->has('requires_driver_license'); $angeltype->requires_driver_license = $request->has('requires_driver_license');
$angeltype->requires_ifsg_certificate = $request->has('requires_ifsg_certificate');
} }
$angeltype->description = strip_request_item_nl('description', $angeltype->description); $angeltype->description = strip_request_item_nl('description', $angeltype->description);
@ -139,6 +140,7 @@ function angeltype_edit_controller()
'Saved angeltype: ' . $angeltype->name . ($angeltype->restricted ? ', restricted' : '') 'Saved angeltype: ' . $angeltype->name . ($angeltype->restricted ? ', restricted' : '')
. ($angeltype->no_self_signup ? ', no_self_signup' : '') . ($angeltype->no_self_signup ? ', no_self_signup' : '')
. ($angeltype->requires_driver_license ? ', requires driver license' : '') . ', ' . ($angeltype->requires_driver_license ? ', requires driver license' : '') . ', '
. ($angeltype->requires_ifsg_certificate ? ', requires ifsg certificate' : '') . ', '
. $angeltype->contact_name . ', ' . $angeltype->contact_name . ', '
. $angeltype->contact_dect . ', ' . $angeltype->contact_dect . ', '
. $angeltype->contact_email . ', ' . $angeltype->contact_email . ', '

View File

@ -111,6 +111,18 @@ function AngelType_edit_view(AngelType $angeltype, bool $supporter_mode)
__('Requires driver license'), __('Requires driver license'),
$angeltype->requires_driver_license $angeltype->requires_driver_license
), ),
$supporter_mode && config('ifsg_enabled')?
form_info(
__('requires IfSG certificate'),
$angeltype->requires_ifsg_certificate
? __('Yes')
: __('No')
) :
form_checkbox(
'requires_ifsg_certificate',
__('requires IfSG certificate'),
$angeltype->requires_ifsg_certificate
),
$supporter_mode $supporter_mode
? form_info(__('Show on dashboard'), $angeltype->show_on_dashboard ? __('Yes') : __('No')) ? form_info(__('Show on dashboard'), $angeltype->show_on_dashboard ? __('Yes') : __('No'))
: form_checkbox('show_on_dashboard', __('Show on dashboard'), $angeltype->show_on_dashboard), : form_checkbox('show_on_dashboard', __('Show on dashboard'), $angeltype->show_on_dashboard),
@ -161,6 +173,12 @@ function AngelType_view_buttons(
icon('person-vcard') . __('my driving license') icon('person-vcard') . __('my driving license')
); );
} }
if ($angeltype->requires_ifsg_certificate) {
$buttons[] = button(
user_driver_license_edit_link($user),
icon('card-checklist') . __('my ifsg certificate')
);
}
if (is_null($user_angeltype)) { if (is_null($user_angeltype)) {
$buttons[] = button( $buttons[] = button(
@ -173,6 +191,10 @@ function AngelType_view_buttons(
error(__('This angeltype requires a driver license. Please enter your driver license information!')); error(__('This angeltype requires a driver license. Please enter your driver license information!'));
} }
if ($angeltype->requires_ifsg_certificate && !$user->license->ifsg_certificate) {
error(__('This angeltype requires an ifsg certificate. Please enter your ifsg certificate information!'));
}
if ($angeltype->restricted && !$user_angeltype->confirm_user_id) { if ($angeltype->restricted && !$user_angeltype->confirm_user_id) {
error(sprintf( error(sprintf(
__('You are unconfirmed for this angeltype. Please go to the introduction for %s to get confirmed.'), __('You are unconfirmed for this angeltype. Please go to the introduction for %s to get confirmed.'),

View File

@ -534,6 +534,11 @@ function User_view(
$needs_drivers_license = $needs_drivers_license || $angeltype->requires_driver_license; $needs_drivers_license = $needs_drivers_license || $angeltype->requires_driver_license;
} }
$needs_ifsg_certificate = false;
foreach ($user_angeltypes as $angeltype) {
$needs_ifsg_certificate = $needs_ifsg_certificate || $angeltype->requires_ifsg_certificate;
}
return page_with_title( return page_with_title(
'<span class="icon-icon_angel"></span> ' '<span class="icon-icon_angel"></span> '
. ( . (
@ -560,6 +565,10 @@ function User_view(
user_driver_license_edit_link($user_source), user_driver_license_edit_link($user_source),
icon('person-vcard') . __('driving license') icon('person-vcard') . __('driving license')
) : '', ) : '',
config('ifsg_enabled') && ($admin_user_privilege || ($its_me && $needs_drivers_license)) ? button(
page_link_to('settings/certificates'),
icon('card-checklist') . __('ifsg certificate')
) : '',
(($admin_user_privilege || $auth->can('admin_arrive')) && !$user_source->state->arrived) ? (($admin_user_privilege || $auth->can('admin_arrive')) && !$user_source->state->arrived) ?
form([ form([
form_hidden('action', 'arrived'), form_hidden('action', 'arrived'),

View File

@ -2207,21 +2207,33 @@ msgstr "Hier kannst Du Dein Theme ändern."
msgid "settings.theme.success" msgid "settings.theme.success"
msgstr "Theme wurde erfolgreich geändert." msgstr "Theme wurde erfolgreich geändert."
msgid settings.certificates msgid "settings.certificates"
msgstr "Zertifikate" msgstr "Zertifikate"
msgid settings.certificates.info msgid "settings.certificates.info"
msgstr "Hier kannst du deine gemachte Gesundheitsbelehrung eintragen" msgstr "Hier kannst du deine gemachte Gesundheitsbelehrung eintragen"
msgid settings.ifsg msgid "settings.ifsg"
msgstr "Kleines Frikadellendiplom ()" msgstr "Frikadellendiplom light: Du wurdest von c3gelb vor Ort nach ISfG §43 belehrt."
msgid settings.ifsg_full msgid "settings.ifsg_full"
msgstr "Großes Frikadellendiplom ()" msgstr "Frikadellendiplom: Du hast eine Belehrung nach §43 ISfG bei deinem Gesundheitsamt erhalten und innerhalb von 3 Monaten die Zweitbelehrung durch uns oder deinen Arbeitgeber/Koch/Verein bekommen. Zusätzlich ist die Zweibelehrung nicht älter als zwei Jahre."
msgid settings.certificates.success msgid "settings.certificates.success"
msgstr "Gesundheitsbelehrung wurde erfolgreich geändert." msgstr "Gesundheitsbelehrung wurde erfolgreich geändert."
msgid "requires IfSG certificate"
msgstr "benötigt eine Gesundheitsbelehrung"
msgid "ifsg certificate"
msgstr "Gesundheitsbelehrung"
msgid "my ifsg certificate"
msgstr "Meine Gesundheitsbelehrung"
msgid "This angeltype requires an ifsg certificate. Please enter your ifsg certificate information!"
msgstr "Dieser Engeltyp benötigt eine Gesundheitsbelehrung. Bitte trage deine Gesundheitsbelehrung ein!"
msgid "settings.language" msgid "settings.language"
msgstr "Sprache" msgstr "Sprache"

View File

@ -311,14 +311,29 @@ msgstr "Theme was changed successfully."
msgid settings.certificates msgid settings.certificates
msgstr "Certificates" msgstr "Certificates"
msgid settings.certificates.info msgid "settings.certificates.info"
msgstr "Here you can enter your health instruction"
msgid settings.ifsg msgid "settings.ifsg"
msgstr "Frikadellendiplom light: You were instructed from c3gelb about ISfG §43 on site."
msgid settings.ifsg_full msgid "settings.ifsg_full"
msgstr "Frikadellendiplom: You have gotten the instruction about §43 ISfG from your Health Department and a second instruction from us or your employer/chef/assosiation within 3 months. Additionally your second instruction is not older than 2 years."
msgid settings.certificates.success msgid "settings.certificates.success"
msgstr "IfSG certificate was changed successfully." msgstr "Health instruction was changed successfully."
msgid "requires IfSG certificate"
msgstr "requires health instruction"
msgid "ifsg certificate"
msgstr "health instruction"
msgid "my ifsg certificate"
msgstr "my health instruction"
msgid "This angeltype requires an ifsg certificate. Please enter your ifsg certificate information!"
msgstr ""This angeltype requires a health instruction. Please enter your health instruction information!""
msgid "settings.language" msgid "settings.language"
msgstr "Language" msgstr "Language"

View File

@ -225,7 +225,7 @@ class SettingsController extends BaseController
public function ifsgCertificate(): Response public function ifsgCertificate(): Response
{ {
$user = $this->auth->user(); $user = $this->auth->user();
if (config('ifsg_enabled')) { if (!config('ifsg_enabled')) {
throw new HttpNotFound('ifsg.disabled'); throw new HttpNotFound('ifsg.disabled');
} }
return $this->response->withView( return $this->response->withView(
@ -246,7 +246,7 @@ class SettingsController extends BaseController
'ifsg_certificate_full' => 'optional|checked' 'ifsg_certificate_full' => 'optional|checked'
]); ]);
if (config('ifsg_enabled')) { if (!config('ifsg_enabled')) {
throw new HttpNotFound('ifsg.disabled'); throw new HttpNotFound('ifsg.disabled');
} }

View File

@ -23,6 +23,7 @@ use Illuminate\Database\Query\Builder as QueryBuilder;
* @property string $contact_email * @property string $contact_email
* @property boolean $restricted # If users need an introduction * @property boolean $restricted # If users need an introduction
* @property boolean $requires_driver_license # If users must have a driver license * @property boolean $requires_driver_license # If users must have a driver license
* @property boolean $requires_ifsg_certificate # If users must have a ifsg certificate
* @property boolean $no_self_signup # Users can sign up for shifts * @property boolean $no_self_signup # Users can sign up for shifts
* @property boolean $show_on_dashboard # Show on public dashboard * @property boolean $show_on_dashboard # Show on public dashboard
* @property boolean $hide_register # Hide from registration page * @property boolean $hide_register # Hide from registration page
@ -59,6 +60,7 @@ class AngelType extends BaseModel
'restricted', 'restricted',
'requires_driver_license', 'requires_driver_license',
'requires_ifsg_certificate',
'no_self_signup', 'no_self_signup',
'show_on_dashboard', 'show_on_dashboard',
'hide_register', 'hide_register',
@ -66,11 +68,12 @@ class AngelType extends BaseModel
/** @var array<string, string> */ /** @var array<string, string> */
protected $casts = [ // phpcs:ignore protected $casts = [ // phpcs:ignore
'restricted' => 'boolean', 'restricted' => 'boolean',
'requires_driver_license' => 'boolean', 'requires_driver_license' => 'boolean',
'no_self_signup' => 'boolean', 'requires_ifsg_certificate' => 'boolean',
'show_on_dashboard' => 'boolean', 'no_self_signup' => 'boolean',
'hide_register' => 'boolean', 'show_on_dashboard' => 'boolean',
'hide_register' => 'boolean',
]; ];
public function neededBy(): HasMany public function neededBy(): HasMany