Added User\License model
This commit is contained in:
parent
1c993522c6
commit
676a2113b4
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Factories\Engelsystem\Models\User;
|
||||
|
||||
use Engelsystem\Models\User\License;
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
|
||||
class LicenseFactory extends Factory
|
||||
{
|
||||
/** @var string */
|
||||
protected $model = License::class;
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function definition()
|
||||
{
|
||||
$drive_car = $this->faker->boolean(.8);
|
||||
$drive_3_5t = $drive_car && $this->faker->boolean(.7);
|
||||
$drive_7_5t = $drive_3_5t && $this->faker->boolean();
|
||||
$drive_12t = $drive_7_5t && $this->faker->boolean(.3);
|
||||
$drive_forklift = ($drive_car && $this->faker->boolean(.1))
|
||||
|| ($drive_12t && $this->faker->boolean(.7));
|
||||
|
||||
return [
|
||||
'has_car' => $drive_car && $this->faker->boolean(.7),
|
||||
'drive_forklift' => $drive_forklift,
|
||||
'drive_car' => $drive_car,
|
||||
'drive_3_5t' => $drive_3_5t,
|
||||
'drive_7_5t' => $drive_7_5t,
|
||||
'drive_12t' => $drive_12t,
|
||||
];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Engelsystem\Migrations;
|
||||
|
||||
use Engelsystem\Database\Migration\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
|
||||
class CreateUserLicensesTable extends Migration
|
||||
{
|
||||
use Reference;
|
||||
|
||||
/**
|
||||
* Run the migration
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
$this->schema->create('users_licenses', function (Blueprint $table) {
|
||||
$this->referencesUser($table, true);
|
||||
$table->boolean('has_car')->default(false);
|
||||
$table->boolean('drive_forklift')->default(false);
|
||||
$table->boolean('drive_car')->default(false);
|
||||
$table->boolean('drive_3_5t')->default(false);
|
||||
$table->boolean('drive_7_5t')->default(false);
|
||||
$table->boolean('drive_12t')->default(false);
|
||||
});
|
||||
|
||||
if ($this->schema->hasTable('UserDriverLicenses')) {
|
||||
$licenses = $this->schema->getConnection()
|
||||
->table('UserDriverLicenses')
|
||||
->get();
|
||||
$table = $this->schema->getConnection()
|
||||
->table('users_licenses');
|
||||
|
||||
foreach ($licenses as $license) {
|
||||
$table->insert([
|
||||
'user_id' => $license->user_id,
|
||||
'has_car' => $license->has_car,
|
||||
'drive_forklift' => $license->has_license_forklift,
|
||||
'drive_car' => $license->has_license_car,
|
||||
'drive_3_5t' => $license->has_license_3_5t_transporter,
|
||||
'drive_7_5t' => $license->has_license_7_5t_truck,
|
||||
'drive_12t' => $license->has_license_12_5t_truck,
|
||||
]);
|
||||
}
|
||||
|
||||
$this->schema->drop('UserDriverLicenses');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migration
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
$this->schema->create('UserDriverLicenses', function (Blueprint $table) {
|
||||
$this->referencesUser($table, true);
|
||||
$table->boolean('has_car');
|
||||
$table->boolean('has_license_car');
|
||||
$table->boolean('has_license_3_5t_transporter');
|
||||
$table->boolean('has_license_7_5t_truck');
|
||||
$table->boolean('has_license_12_5t_truck');
|
||||
$table->boolean('has_license_forklift');
|
||||
});
|
||||
|
||||
$licenses = $this->schema->getConnection()
|
||||
->table('users_licenses')
|
||||
->get();
|
||||
$table = $this->schema->getConnection()
|
||||
->table('UserDriverLicenses');
|
||||
|
||||
foreach ($licenses as $license) {
|
||||
$table->insert([
|
||||
'user_id' => $license->user_id,
|
||||
'has_car' => $license->has_car,
|
||||
'has_license_car' => $license->drive_car,
|
||||
'has_license_3_5t_transporter' => $license->drive_3_5t,
|
||||
'has_license_7_5t_truck' => $license->drive_7_5t,
|
||||
'has_license_12_5t_truck' => $license->drive_12t,
|
||||
'has_license_forklift' => $license->drive_forklift,
|
||||
]);
|
||||
}
|
||||
|
||||
$this->schema->drop('users_licenses');
|
||||
}
|
||||
}
|
|
@ -182,7 +182,6 @@ function angeltype_controller()
|
|||
|
||||
$angeltype = load_angeltype();
|
||||
$user_angeltype = UserAngelType_by_User_and_AngelType($user->id, $angeltype);
|
||||
$user_driver_license = UserDriverLicense($user->id);
|
||||
$members = Users_by_angeltype($angeltype);
|
||||
|
||||
$days = angeltype_controller_shiftsFilterDays($angeltype);
|
||||
|
@ -209,7 +208,7 @@ function angeltype_controller()
|
|||
auth()->can('admin_user_angeltypes') || $isSupporter,
|
||||
auth()->can('admin_angel_types'),
|
||||
$isSupporter,
|
||||
$user_driver_license,
|
||||
$user->license,
|
||||
$user,
|
||||
$shiftsFilterRenderer,
|
||||
$shiftCalendarRenderer,
|
||||
|
|
|
@ -12,14 +12,12 @@ function user_driver_license_required_hint()
|
|||
{
|
||||
$user = auth()->user();
|
||||
|
||||
$angeltypes = User_angeltypes($user->id);
|
||||
$user_driver_license = UserDriverLicense($user->id);
|
||||
|
||||
// User has already entered data, no hint needed.
|
||||
if (!empty($user_driver_license)) {
|
||||
if ($user->license->wantsToDrive()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$angeltypes = User_angeltypes($user->id);
|
||||
foreach ($angeltypes as $angeltype) {
|
||||
if ($angeltype['requires_driver_license']) {
|
||||
return sprintf(
|
||||
|
@ -105,38 +103,34 @@ function user_driver_license_edit_controller()
|
|||
throw_redirect(user_driver_license_edit_link());
|
||||
}
|
||||
|
||||
$user_driver_license = UserDriverLicense($user_source->id);
|
||||
if (empty($user_driver_license)) {
|
||||
$wants_to_drive = false;
|
||||
$user_driver_license = UserDriverLicense_new();
|
||||
} else {
|
||||
$wants_to_drive = true;
|
||||
}
|
||||
|
||||
$driverLicense = $user_source->license;
|
||||
if ($request->hasPostData('submit')) {
|
||||
$wants_to_drive = $request->has('wants_to_drive');
|
||||
if ($wants_to_drive) {
|
||||
$user_driver_license['has_car'] = $request->has('has_car');
|
||||
$user_driver_license['has_license_car'] = $request->has('has_license_car');
|
||||
$user_driver_license['has_license_3_5t_transporter'] = $request->has('has_license_3_5t_transporter');
|
||||
$user_driver_license['has_license_7_5t_truck'] = $request->has('has_license_7_5t_truck');
|
||||
$user_driver_license['has_license_12_5t_truck'] = $request->has('has_license_12_5t_truck');
|
||||
$user_driver_license['has_license_forklift'] = $request->has('has_license_forklift');
|
||||
if ($request->has('wants_to_drive')) {
|
||||
$driverLicense->has_car = $request->has('has_car');
|
||||
$driverLicense->drive_car = $request->has('has_license_car');
|
||||
$driverLicense->drive_3_5t = $request->has('has_license_3_5t_transporter');
|
||||
$driverLicense->drive_7_5t = $request->has('has_license_7_5t_truck');
|
||||
$driverLicense->drive_12t= $request->has('has_license_12t_truck');
|
||||
$driverLicense->drive_forklift = $request->has('has_license_forklift');
|
||||
|
||||
if ($driverLicense->wantsToDrive()) {
|
||||
$driverLicense->save();
|
||||
|
||||
if (UserDriverLicense_valid($user_driver_license)) {
|
||||
if (empty($user_driver_license['user_id'])) {
|
||||
$user_driver_license = UserDriverLicenses_create($user_driver_license, $user_source->id);
|
||||
} else {
|
||||
UserDriverLicenses_update($user_driver_license);
|
||||
}
|
||||
engelsystem_log('Driver license information updated.');
|
||||
success(__('Your driver license information has been saved.'));
|
||||
throw_redirect(user_link($user_source->id));
|
||||
} else {
|
||||
error(__('Please select at least one driving license.'));
|
||||
}
|
||||
} elseif (!empty($user_driver_license['user_id'])) {
|
||||
UserDriverLicenses_delete($user_source->id);
|
||||
} else {
|
||||
$driverLicense->has_car = false;
|
||||
$driverLicense->drive_car = false;
|
||||
$driverLicense->drive_3_5t = false;
|
||||
$driverLicense->drive_7_5t = false;
|
||||
$driverLicense->drive_12t = false;
|
||||
$driverLicense->drive_forklift = false;
|
||||
$driverLicense->save();
|
||||
|
||||
engelsystem_log('Driver license information removed.');
|
||||
success(__('Your driver license information has been removed.'));
|
||||
throw_redirect(user_link($user_source->id));
|
||||
|
@ -145,6 +139,6 @@ function user_driver_license_edit_controller()
|
|||
|
||||
return [
|
||||
sprintf(__('Edit %s driving license information'), $user_source->name),
|
||||
UserDriverLicense_edit_view($user_source, $wants_to_drive, $user_driver_license)
|
||||
UserDriverLicense_edit_view($user_source, $driverLicense)
|
||||
];
|
||||
}
|
||||
|
|
|
@ -21,7 +21,6 @@ $includeFiles = [
|
|||
__DIR__ . '/../includes/model/ShiftTypes_model.php',
|
||||
__DIR__ . '/../includes/model/Stats.php',
|
||||
__DIR__ . '/../includes/model/UserAngelTypes_model.php',
|
||||
__DIR__ . '/../includes/model/UserDriverLicenses_model.php',
|
||||
__DIR__ . '/../includes/model/UserGroups_model.php',
|
||||
__DIR__ . '/../includes/model/User_model.php',
|
||||
__DIR__ . '/../includes/model/UserWorkLog_model.php',
|
||||
|
|
|
@ -91,11 +91,10 @@ function Users_by_angeltype($angeltype)
|
|||
'UserAngelTypes.id AS user_angeltype_id',
|
||||
'UserAngelTypes.confirm_user_id',
|
||||
'UserAngelTypes.supporter',
|
||||
'UserDriverLicenses.user_id AS wants_to_drive',
|
||||
'UserDriverLicenses.*'
|
||||
'users_licenses.*'
|
||||
)
|
||||
->join('UserAngelTypes', 'users.id', '=', 'UserAngelTypes.user_id')
|
||||
->leftJoin('UserDriverLicenses', 'users.id', '=', 'UserDriverLicenses.user_id')
|
||||
->leftJoin('users_licenses', 'users.id', '=', 'users_licenses.user_id')
|
||||
->where('UserAngelTypes.angeltype_id', '=', $angeltype['id'])
|
||||
->orderBy('users.name')
|
||||
->get();
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<?php
|
||||
|
||||
use Engelsystem\Models\User\License;
|
||||
use Engelsystem\Models\User\User;
|
||||
use Engelsystem\ShiftCalendarRenderer;
|
||||
use Engelsystem\ShiftsFilterRenderer;
|
||||
|
@ -129,7 +130,7 @@ function AngelType_edit_view($angeltype, $supporter_mode)
|
|||
* @param array|null $user_angeltype
|
||||
* @param bool $admin_angeltypes
|
||||
* @param bool $supporter
|
||||
* @param array|null $user_driver_license
|
||||
* @param License $user_driver_license
|
||||
* @param User|null $user
|
||||
* @return string
|
||||
*/
|
||||
|
@ -153,7 +154,7 @@ function AngelType_view_buttons($angeltype, $user_angeltype, $admin_angeltypes,
|
|||
'add'
|
||||
);
|
||||
} else {
|
||||
if ($angeltype['requires_driver_license'] && empty($user_driver_license)) {
|
||||
if ($angeltype['requires_driver_license'] && !$user_driver_license->wantsToDrive()) {
|
||||
error(__('This angeltype requires a driver license. Please enter your driver license information!'));
|
||||
}
|
||||
|
||||
|
@ -205,13 +206,13 @@ function AngelType_view_members($angeltype, $members, $admin_user_angeltypes, $a
|
|||
$member->name = User_Nick_render($member) . User_Pronoun_render($member);
|
||||
$member['dect'] = $member->contact->dect;
|
||||
if ($angeltype['requires_driver_license']) {
|
||||
$member['wants_to_drive'] = icon_bool($member['wants_to_drive']);
|
||||
$member['has_car'] = icon_bool($member['has_car']);
|
||||
$member['has_license_car'] = icon_bool($member['has_license_car']);
|
||||
$member['has_license_3_5t_transporter'] = icon_bool($member['has_license_3_5t_transporter']);
|
||||
$member['has_license_7_5t_truck'] = icon_bool($member['has_license_7_5t_truck']);
|
||||
$member['has_license_12_5t_truck'] = icon_bool($member['has_license_12_5t_truck']);
|
||||
$member['has_license_forklift'] = icon_bool($member['has_license_forklift']);
|
||||
$member['wants_to_drive'] = icon_bool($member->license->wantsToDrive());
|
||||
$member['has_car'] = icon_bool($member->license->has_car);
|
||||
$member['has_license_car'] = icon_bool($member->license->drive_car);
|
||||
$member['has_license_3_5t_transporter'] = icon_bool($member->license->drive_3_5t);
|
||||
$member['has_license_7_5t_truck'] = icon_bool($member->license->drive_7_5t);
|
||||
$member['has_license_12t_truck'] = icon_bool($member->license->drive_12t);
|
||||
$member['has_license_forklift'] = icon_bool($member->license->drive_forklift);
|
||||
}
|
||||
|
||||
if ($angeltype['restricted'] && empty($member['confirm_user_id'])) {
|
||||
|
@ -302,7 +303,7 @@ function AngelType_view_table_headers($angeltype, $supporter, $admin_angeltypes)
|
|||
'has_license_car' => __('Car'),
|
||||
'has_license_3_5t_transporter' => __('3,5t Transporter'),
|
||||
'has_license_7_5t_truck' => __('7,5t Truck'),
|
||||
'has_license_12_5t_truck' => __('12,5t Truck'),
|
||||
'has_license_12t_truck' => __('12t Truck'),
|
||||
'has_license_forklift' => __('Forklift'),
|
||||
'actions' => ''
|
||||
];
|
||||
|
@ -323,7 +324,7 @@ function AngelType_view_table_headers($angeltype, $supporter, $admin_angeltypes)
|
|||
* @param bool $admin_user_angeltypes
|
||||
* @param bool $admin_angeltypes
|
||||
* @param bool $supporter
|
||||
* @param array $user_driver_license
|
||||
* @param License $user_driver_license
|
||||
* @param User $user
|
||||
* @param ShiftsFilterRenderer $shiftsFilterRenderer
|
||||
* @param ShiftCalendarRenderer $shiftCalendarRenderer
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
<?php
|
||||
|
||||
use Engelsystem\Models\User\License;
|
||||
use Engelsystem\Models\User\User;
|
||||
|
||||
/**
|
||||
* Edit a user's driving license information.
|
||||
*
|
||||
* @param User $user_source The user
|
||||
* @param bool $wants_to_drive true, if the user wants to drive
|
||||
* @param array $user_driver_license The user driver license
|
||||
* @param License $user_driver_license The user driver license
|
||||
* @return string
|
||||
*/
|
||||
function UserDriverLicense_edit_view($user_source, $wants_to_drive, $user_driver_license)
|
||||
function UserDriverLicense_edit_view($user_source, $user_driver_license)
|
||||
{
|
||||
return page_with_title(sprintf(__('Edit %s driving license information'), User_Nick_render($user_source)), [
|
||||
buttons([
|
||||
|
@ -19,34 +19,34 @@ function UserDriverLicense_edit_view($user_source, $wants_to_drive, $user_driver
|
|||
msg(),
|
||||
form([
|
||||
form_info(__('Privacy'), __('Your driving license information is only visible for supporters and admins.')),
|
||||
form_checkbox('wants_to_drive', __('I am willing to drive a car for the event'), $wants_to_drive),
|
||||
form_checkbox('wants_to_drive', __('I am willing to drive a car for the event'), $user_driver_license->wantsToDrive()),
|
||||
div('m-3', [
|
||||
form_checkbox(
|
||||
'has_car',
|
||||
__('I have my own car with me and am willing to use it for the event (You\'ll get reimbursed for fuel)'),
|
||||
$user_driver_license['has_car']
|
||||
$user_driver_license->has_car
|
||||
),
|
||||
heading(__('Driver license'), 3),
|
||||
form_checkbox('has_license_car', __('Car'), $user_driver_license['has_license_car']),
|
||||
form_checkbox('has_license_car', __('Car'), $user_driver_license->drive_car),
|
||||
form_checkbox(
|
||||
'has_license_3_5t_transporter',
|
||||
__('Transporter 3,5t'),
|
||||
$user_driver_license['has_license_3_5t_transporter']
|
||||
$user_driver_license->drive_3_5t
|
||||
),
|
||||
form_checkbox(
|
||||
'has_license_7_5t_truck',
|
||||
__('Truck 7,5t'),
|
||||
$user_driver_license['has_license_7_5t_truck']
|
||||
$user_driver_license->drive_7_5t
|
||||
),
|
||||
form_checkbox(
|
||||
'has_license_12_5t_truck',
|
||||
__('Truck 12,5t'),
|
||||
$user_driver_license['has_license_12_5t_truck']
|
||||
'has_license_12t_truck',
|
||||
__('Truck 12t'),
|
||||
$user_driver_license->drive_12t
|
||||
),
|
||||
form_checkbox(
|
||||
'has_license_forklift',
|
||||
__('Forklift'),
|
||||
$user_driver_license['has_license_forklift']
|
||||
$user_driver_license->drive_forklift
|
||||
)
|
||||
], 'driving_license'),
|
||||
form_submit('submit', __('Save'))
|
||||
|
|
|
@ -2059,8 +2059,8 @@ msgid "7,5t Truck"
|
|||
msgstr "7,5t LKW"
|
||||
|
||||
#: includes/view/AngelTypes_view.php:305
|
||||
msgid "12,5t Truck"
|
||||
msgstr "12,5t LKW"
|
||||
msgid "12t Truck"
|
||||
msgstr "12t LKW"
|
||||
|
||||
#: includes/view/AngelTypes_view.php:306
|
||||
#: includes/view/UserDriverLicenses_view.php:49
|
||||
|
@ -2462,8 +2462,8 @@ msgid "Truck 7,5t"
|
|||
msgstr "7,5t LKW"
|
||||
|
||||
#: includes/view/UserDriverLicenses_view.php:44
|
||||
msgid "Truck 12,5t"
|
||||
msgstr "12,5t LKW"
|
||||
msgid "Truck 12t"
|
||||
msgstr "12t LKW"
|
||||
|
||||
#: includes/view/UserWorkLog_view.php:15
|
||||
#, php-format
|
||||
|
|
|
@ -1821,8 +1821,8 @@ msgid "7,5t Truck"
|
|||
msgstr "Caminhão 7,5t"
|
||||
|
||||
#: includes/view/AngelTypes_view.php:184
|
||||
msgid "12,5t Truck"
|
||||
msgstr "Caminhão 12,5t"
|
||||
msgid "12t Truck"
|
||||
msgstr "Caminhão 12t"
|
||||
|
||||
#: includes/view/AngelTypes_view.php:185
|
||||
#: includes/view/UserDriverLicenses_view.php:31
|
||||
|
@ -2184,8 +2184,8 @@ msgid "Truck 7,5t"
|
|||
msgstr "Caminhão 7,5t"
|
||||
|
||||
#: includes/view/UserDriverLicenses_view.php:30
|
||||
msgid "Truck 12,5t"
|
||||
msgstr "Caminhão 12,5t"
|
||||
msgid "Truck 12t"
|
||||
msgstr "Caminhão 12t"
|
||||
|
||||
#: includes/view/User_view.php:7
|
||||
msgid "Please select..."
|
||||
|
|
|
@ -110,11 +110,12 @@ class Controller extends BaseController
|
|||
'licenses' => [
|
||||
'type' => 'gauge',
|
||||
'help' => 'The total number of licenses',
|
||||
['labels' => ['type' => 'has_car'], 'value' => $this->stats->licenses('has_car')],
|
||||
['labels' => ['type' => 'forklift'], 'value' => $this->stats->licenses('forklift')],
|
||||
['labels' => ['type' => 'car'], 'value' => $this->stats->licenses('car')],
|
||||
['labels' => ['type' => '3.5t'], 'value' => $this->stats->licenses('3.5t')],
|
||||
['labels' => ['type' => '7.5t'], 'value' => $this->stats->licenses('7.5t')],
|
||||
['labels' => ['type' => '12.5t'], 'value' => $this->stats->licenses('12.5t')],
|
||||
['labels' => ['type' => '12t'], 'value' => $this->stats->licenses('12t')],
|
||||
],
|
||||
'users_email' => [
|
||||
'type' => 'gauge',
|
||||
|
|
|
@ -15,6 +15,7 @@ use Engelsystem\Models\NewsComment;
|
|||
use Engelsystem\Models\OAuth;
|
||||
use Engelsystem\Models\Question;
|
||||
use Engelsystem\Models\Room;
|
||||
use Engelsystem\Models\User\License;
|
||||
use Engelsystem\Models\User\PasswordReset;
|
||||
use Engelsystem\Models\User\PersonalData;
|
||||
use Engelsystem\Models\User\Settings;
|
||||
|
@ -232,24 +233,21 @@ class Stats
|
|||
/**
|
||||
* @param string|null $vehicle
|
||||
* @return int
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function licenses(string $vehicle = null): int
|
||||
public function licenses(string $vehicle): int
|
||||
{
|
||||
$mapping = [
|
||||
'forklift' => 'has_license_forklift',
|
||||
'car' => 'has_license_car',
|
||||
'3.5t' => 'has_license_3_5t_transporter',
|
||||
'7.5t' => 'has_license_7_5t_truck',
|
||||
'12.5t' => 'has_license_12_5t_truck',
|
||||
'has_car' => 'has_car',
|
||||
'forklift' => 'drive_forklift',
|
||||
'car' => 'drive_car',
|
||||
'3.5t' => 'drive_3_5t',
|
||||
'7.5t' => 'drive_7_5t',
|
||||
'12t' => 'drive_12t',
|
||||
];
|
||||
|
||||
$query = $this
|
||||
->getQuery('UserDriverLicenses');
|
||||
|
||||
if (!is_null($vehicle)) {
|
||||
$query->where($mapping[$vehicle], '=', true);
|
||||
}
|
||||
$query = (new License())
|
||||
->getQuery()
|
||||
->where($mapping[$vehicle], true);
|
||||
|
||||
return $query->count();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
|
||||
namespace Engelsystem\Models\User;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Query\Builder as QueryBuilder;
|
||||
|
||||
/**
|
||||
* @property bool $has_car
|
||||
* @property bool $drive_forklift
|
||||
* @property bool $drive_car
|
||||
* @property bool $drive_3_5t
|
||||
* @property bool $drive_7_5t
|
||||
* @property bool $drive_12t
|
||||
*
|
||||
* @method static QueryBuilder|License[] whereHasCar($value)
|
||||
* @method static QueryBuilder|License[] whereDriveForklift($value)
|
||||
* @method static QueryBuilder|License[] whereDriveCar($value)
|
||||
* @method static QueryBuilder|License[] whereDrive35T($value)
|
||||
* @method static QueryBuilder|License[] whereDrive75T($value)
|
||||
* @method static QueryBuilder|License[] whereDrive12T($value)
|
||||
*/
|
||||
class License extends HasUserModel
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
/** @var string The table associated with the model */
|
||||
protected $table = 'users_licenses';
|
||||
|
||||
/** @var array Default attributes */
|
||||
protected $attributes = [
|
||||
'has_car' => false,
|
||||
'drive_forklift' => false,
|
||||
'drive_car' => false,
|
||||
'drive_3_5t' => false,
|
||||
'drive_7_5t' => false,
|
||||
'drive_12t' => false,
|
||||
];
|
||||
|
||||
/** The attributes that are mass assignable */
|
||||
protected $fillable = [
|
||||
'user_id',
|
||||
'has_car',
|
||||
'drive_forklift',
|
||||
'drive_car',
|
||||
'drive_3_5t',
|
||||
'drive_7_5t',
|
||||
'drive_12t',
|
||||
];
|
||||
|
||||
/** @var string[] */
|
||||
protected $casts = [
|
||||
'has_car' => 'boolean',
|
||||
'drive_forklift' => 'boolean',
|
||||
'drive_car' => 'boolean',
|
||||
'drive_3_5t' => 'boolean',
|
||||
'drive_7_5t' => 'boolean',
|
||||
'drive_12t' => 'boolean',
|
||||
];
|
||||
|
||||
/**
|
||||
* If the user wants to drive at the event
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function wantsToDrive(): bool
|
||||
{
|
||||
return $this->drive_forklift
|
||||
|| $this->drive_car
|
||||
|| $this->drive_3_5t
|
||||
|| $this->drive_7_5t
|
||||
|| $this->drive_12t;
|
||||
}
|
||||
}
|
|
@ -27,6 +27,7 @@ use Illuminate\Database\Query\Builder as QueryBuilder;
|
|||
* @property Carbon $updated_at
|
||||
*
|
||||
* @property-read QueryBuilder|Contact $contact
|
||||
* @property-read QueryBuilder|License $license
|
||||
* @property-read QueryBuilder|PersonalData $personalData
|
||||
* @property-read QueryBuilder|Settings $settings
|
||||
* @property-read QueryBuilder|State $state
|
||||
|
@ -93,6 +94,16 @@ class User extends BaseModel
|
|||
->withDefault();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return HasOne
|
||||
*/
|
||||
public function license()
|
||||
{
|
||||
return $this
|
||||
->hasOne(License::class)
|
||||
->withDefault();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return HasOne
|
||||
*/
|
||||
|
|
|
@ -84,10 +84,10 @@ class ControllerTest extends TestCase
|
|||
->with('metrics return')
|
||||
->willReturn($response);
|
||||
|
||||
$stats->expects($this->exactly(5))
|
||||
$stats->expects($this->exactly(6))
|
||||
->method('licenses')
|
||||
->withConsecutive(['forklift'], ['car'], ['3.5t'], ['7.5t'], ['12.5t'])
|
||||
->willReturnOnConsecutiveCalls(3, 15, 9, 7, 1);
|
||||
->withConsecutive(['has_car'], ['forklift'], ['car'], ['3.5t'], ['7.5t'], ['12t'])
|
||||
->willReturnOnConsecutiveCalls(6, 3, 15, 9, 7, 1);
|
||||
$stats->expects($this->exactly(2))
|
||||
->method('arrivedUsers')
|
||||
->withConsecutive([false], [true])
|
||||
|
|
|
@ -12,6 +12,7 @@ use Engelsystem\Models\NewsComment;
|
|||
use Engelsystem\Models\OAuth;
|
||||
use Engelsystem\Models\Question;
|
||||
use Engelsystem\Models\Room;
|
||||
use Engelsystem\Models\User\License;
|
||||
use Engelsystem\Models\User\PasswordReset;
|
||||
use Engelsystem\Models\User\PersonalData;
|
||||
use Engelsystem\Models\User\Settings;
|
||||
|
@ -123,6 +124,22 @@ class StatsTest extends TestCase
|
|||
], $themes->toArray());
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \Engelsystem\Controllers\Metrics\Stats::licenses
|
||||
*/
|
||||
public function testLicenses()
|
||||
{
|
||||
$this->addUsers();
|
||||
|
||||
$stats = new Stats($this->database);
|
||||
$this->assertEquals(1, $stats->licenses('has_car'));
|
||||
$this->assertEquals(1, $stats->licenses('forklift'));
|
||||
$this->assertEquals(2, $stats->licenses('car'));
|
||||
$this->assertEquals(0, $stats->licenses('3.5t'));
|
||||
$this->assertEquals(0, $stats->licenses('7.5t'));
|
||||
$this->assertEquals(1, $stats->licenses('12t'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \Engelsystem\Controllers\Metrics\Stats::worklogSeconds
|
||||
*/
|
||||
|
@ -394,11 +411,17 @@ class StatsTest extends TestCase
|
|||
$this->addUser(['arrived' => 1], [], ['email_human' => true, 'email_goody' => true, 'email_news' => true]);
|
||||
$this->addUser(['arrived' => 1], ['pronoun' => 'unicorn'], ['language' => 'lo_RM', 'email_shiftinfo' => true]);
|
||||
$this->addUser(['arrived' => 1, 'got_voucher' => 2], ['shirt_size' => 'XXL'], ['language' => 'lo_RM']);
|
||||
$this->addUser(['arrived' => 1, 'got_voucher' => 9, 'force_active' => true], [], ['theme' => 1]);
|
||||
$this->addUser(
|
||||
['arrived' => 1, 'got_voucher' => 9, 'force_active' => true],
|
||||
[],
|
||||
['theme' => 1],
|
||||
['drive_car' => true, 'drive_12t' => true]
|
||||
);
|
||||
$this->addUser(
|
||||
['arrived' => 1, 'got_voucher' => 3],
|
||||
['pronoun' => 'per'],
|
||||
['theme' => 1, 'email_human' => true]
|
||||
['theme' => 1, 'email_human' => true],
|
||||
['has_car' => true, 'drive_forklift' => true, 'drive_car' => true]
|
||||
);
|
||||
$this->addUser(['arrived' => 1, 'active' => 1, 'got_shirt' => true, 'force_active' => true]);
|
||||
$this->addUser(['arrived' => 1, 'active' => 1, 'got_shirt' => true], ['shirt_size' => 'L'], ['theme' => 4]);
|
||||
|
@ -411,7 +434,7 @@ class StatsTest extends TestCase
|
|||
*
|
||||
* @return User
|
||||
*/
|
||||
protected function addUser(array $state = [], $personalData = [], $settings = []): User
|
||||
protected function addUser(array $state = [], $personalData = [], $settings = [], $license = []): User
|
||||
{
|
||||
$name = 'user_' . Str::random(5);
|
||||
|
||||
|
@ -443,6 +466,11 @@ class StatsTest extends TestCase
|
|||
->associate($user)
|
||||
->save();
|
||||
|
||||
$license = new License($license);
|
||||
$license->user()
|
||||
->associate($user)
|
||||
->save();
|
||||
|
||||
return $user;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
namespace Engelsystem\Test\Unit\Models\User;
|
||||
|
||||
use Engelsystem\Models\User\License;
|
||||
use Engelsystem\Test\Unit\Models\ModelTest;
|
||||
|
||||
class LicenseTest extends ModelTest
|
||||
{
|
||||
/**
|
||||
* @covers \Engelsystem\Models\User\License::wantsToDrive
|
||||
*/
|
||||
public function testWantsToDrive()
|
||||
{
|
||||
$license = new License();
|
||||
$this->assertFalse($license->wantsToDrive());
|
||||
|
||||
$license->has_car = true;
|
||||
$this->assertFalse($license->wantsToDrive());
|
||||
|
||||
$license->drive_car = true;
|
||||
$this->assertTrue($license->wantsToDrive());
|
||||
|
||||
// True if a user wants to drive anything
|
||||
$license = new License(['drive_forklift' => true]);
|
||||
$this->assertTrue($license->wantsToDrive());
|
||||
|
||||
$license = new License(['drive_car' => true]);
|
||||
$this->assertTrue($license->wantsToDrive());
|
||||
|
||||
$license = new License(['drive_3_5t' => true]);
|
||||
$this->assertTrue($license->wantsToDrive());
|
||||
|
||||
$license = new License(['drive_7_5t' => true]);
|
||||
$this->assertTrue($license->wantsToDrive());
|
||||
|
||||
$license = new License(['drive_12t' => true]);
|
||||
$this->assertTrue($license->wantsToDrive());
|
||||
}
|
||||
}
|
|
@ -11,6 +11,7 @@ use Engelsystem\Models\OAuth;
|
|||
use Engelsystem\Models\Question;
|
||||
use Engelsystem\Models\User\Contact;
|
||||
use Engelsystem\Models\User\HasUserModel;
|
||||
use Engelsystem\Models\User\License;
|
||||
use Engelsystem\Models\User\PersonalData;
|
||||
use Engelsystem\Models\User\Settings;
|
||||
use Engelsystem\Models\User\State;
|
||||
|
@ -69,11 +70,20 @@ class UserTest extends ModelTest
|
|||
'force_active' => true,
|
||||
],
|
||||
],
|
||||
[
|
||||
License::class,
|
||||
'license',
|
||||
[
|
||||
'has_car' => true,
|
||||
'drive_car' => true,
|
||||
],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \Engelsystem\Models\User\User::contact
|
||||
* @covers \Engelsystem\Models\User\User::license
|
||||
* @covers \Engelsystem\Models\User\User::personalData
|
||||
* @covers \Engelsystem\Models\User\User::settings
|
||||
* @covers \Engelsystem\Models\User\User::state
|
||||
|
|
Loading…
Reference in New Issue