Projects/3BIT/winter-semester/IIS/xnecasr00/database/seeders/WateringSeeder.php
2026-04-14 19:28:46 +02:00

104 lines
3.5 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\PlannedTask;
use App\Models\Treatment;
use App\Models\VineyardRow;
use App\Models\Watering;
class WateringSeeder extends Seeder
{
use WithoutModelEvents;
/**
* Run the database seeds.
*/
public function run(): void
{
$rows = VineyardRow::with('varietyVariation.grapeVariety')
->get()
->keyBy(fn (VineyardRow $row) => $row->varietyVariation->grapeVariety->variety_name ?? $row->id);
$schedules = [
[
'variety' => 'Grüner Veltliner',
'treatment_note' => 'Irrigation cycle before flowering',
'watering_note' => 'Applied via drip system to maintain soil moisture',
'time_interval' => 72,
'amount' => 120.50,
'planned_for' => now()->addDays(5)->format('Y-m-d'),
],
[
'variety' => 'Müller Thurgau',
'treatment_note' => 'Post-harvest irrigation',
'watering_note' => 'Deep soak to support root recovery',
'time_interval' => 96,
'amount' => 150.00,
'planned_for' => now()->addWeeks(3)->format('Y-m-d'),
],
[
'variety' => 'Riesling',
'treatment_note' => 'Summer watering cycle',
'watering_note' => 'Regular irrigation during dry period',
'time_interval' => 48,
'amount' => 100.00,
'completed_at' => now()->subDays(10)->format('Y-m-d'),
],
[
'variety' => 'Blaufränkisch',
'treatment_note' => 'Emergency drought response irrigation',
'watering_note' => 'Deep root watering to prevent vine stress',
'time_interval' => 24,
'amount' => 200.00,
'planned_for' => now()->subDays(3)->format('Y-m-d'),
],
];
foreach ($schedules as $schedule) {
$row = $rows[$schedule['variety']] ?? null;
if (! $row) {
continue;
}
$treatment = Treatment::updateOrCreate(
[
'row_id' => $row->id,
'note' => $schedule['treatment_note'],
],
[]
);
$watering = Watering::updateOrCreate(
['treatment_id' => $treatment->treatment_id],
[
'time_interval' => $schedule['time_interval'],
'amount' => $schedule['amount'],
'note' => $schedule['watering_note'],
]
);
$plannedDate = $schedule['planned_for'] ?? null;
$completedDate = $schedule['completed_at'] ?? null;
$defaultDate = $plannedDate ?? $completedDate;
if ($plannedDate || $completedDate || $defaultDate) {
PlannedTask::updateOrCreate(
[
'type' => 'Watering',
'taskable_id' => $watering->getKey(),
'taskable_type' => Watering::class,
],
[
'planned_date' => $plannedDate ?? $defaultDate,
'execution_date' => $completedDate,
'note' => $schedule['treatment_note'],
]
);
}
}
}
}