Timesheet migration + factory

Ein erster Entwurf für eine Datenbank zur Arbeitszeiterfassung.

Links: https://carbon.nesbot.com/docs/#api-addsub

Migration

<?php
// create_time_registration_table.php

use App\Models\User;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('time_registrations', function (Blueprint $table) {
            $table->id();
            $table->foreignIdFor(User::class);
            $table->dateTime('start_time')->default(now());
            $table->dateTime('end_time')->nullable();
            $table->string('hours')->virtualAs('TIMEDIFF(end_time,start_time)');
            $table->string('description')->nullable();
            $table->timestamps();
            $table->softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('time_registrations');
    }
};

Factory

<?php
// TimeRegistrationFactory.php

namespace Database\Factories;

use App\Models\User;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\TimeRegistration>
 */
class TimeRegistrationFactory extends Factory
{
    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        // https://carbon.nesbot.com/docs/#api-addsub
        $days = rand(0, 10);
        $sTime = rand(390, 540);
        $eTime = $sTime + rand(15, 540);
        $startTime = Carbon::today()->subDays($days)->addMinutes($sTime);
        $endTime = Carbon::today()->subDays($days)->addMinutes($eTime);

        return [
            // Between now and 180 days ago with random time
            'start_time' => $startTime,
            'end_time' => $endTime,
            'user_id' => User::factory()->withPersonalTeam()->create(),
            //'end_time' => date('H:i:s', rand(1, 54000)), // 00:00:00 - 15:00:00,
        ];
    }
}

DatabaseSeeder.php

// DatabaseSeeder.php

public function run(): void
{
    $users = User::factory(10)->withPersonalTeam()->create();

    User::factory()->withPersonalTeam()->create([
        'name' => 'Admin',
        'email' => 'admin@example.com',
    ]);

    $TimeRegistration =  TimeRegistration::factory(100)
        ->recycle($users)
        ->create();
}

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert