603 lines
25 KiB
PHP
603 lines
25 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
|
use Illuminate\Database\Seeder;
|
|
use App\Models\Harvest;
|
|
use App\Models\PlannedTask;
|
|
use App\Models\VarietyVariation;
|
|
use App\Models\VineyardRow;
|
|
|
|
class HarvestSeeder extends Seeder
|
|
{
|
|
use WithoutModelEvents;
|
|
|
|
/**
|
|
* Run the database seeds.
|
|
*/
|
|
public function run(): void
|
|
{
|
|
$rows = VineyardRow::with('varietyVariation.grapeVariety')
|
|
->get()
|
|
->groupBy(fn (VineyardRow $row) => $row->varietyVariation->grapeVariety->variety_name ?? $row->id);
|
|
|
|
$variations = VarietyVariation::with('grapeVariety')
|
|
->get()
|
|
->keyBy(fn (VarietyVariation $variation) => ($variation->grapeVariety->variety_name ?? $variation->id) . ':' . $variation->color);
|
|
|
|
$harvests = [
|
|
// Historical harvests from 2024
|
|
[
|
|
'variety' => 'Grüner Veltliner',
|
|
'color' => 'green',
|
|
'weight' => 850.50,
|
|
'sugar_content' => 19.5,
|
|
'date' => '2024-09-15',
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Excellent harvest, optimal ripeness',
|
|
'weather_conditions' => 'Sunny, 22°C',
|
|
'harvest_time' => '08:00:00',
|
|
'executed_at' => '2024-09-15',
|
|
],
|
|
[
|
|
'variety' => 'Riesling',
|
|
'color' => 'green',
|
|
'weight' => 720.30,
|
|
'sugar_content' => 21.2,
|
|
'date' => '2024-09-20',
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Premium quality, high sugar content',
|
|
'weather_conditions' => 'Partly cloudy, 20°C',
|
|
'harvest_time' => '07:30:00',
|
|
'executed_at' => '2024-09-20',
|
|
],
|
|
[
|
|
'variety' => 'Blaufränkisch',
|
|
'color' => 'blue',
|
|
'weight' => 950.00,
|
|
'sugar_content' => 22.8,
|
|
'date' => '2024-10-05',
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Best harvest of the season, ideal conditions',
|
|
'weather_conditions' => 'Sunny, 18°C',
|
|
'harvest_time' => '09:00:00',
|
|
'executed_at' => '2024-10-05',
|
|
],
|
|
[
|
|
'variety' => 'St. Laurent',
|
|
'color' => 'blue',
|
|
'weight' => 600.75,
|
|
'sugar_content' => 20.5,
|
|
'date' => '2024-10-01',
|
|
'quality' => 'good',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Good quality, smaller yield',
|
|
'weather_conditions' => 'Overcast, 16°C',
|
|
'harvest_time' => '10:00:00',
|
|
'planned_for' => '2025-09-22',
|
|
],
|
|
[
|
|
'variety' => 'Müller Thurgau',
|
|
'color' => 'green',
|
|
'weight' => 780.20,
|
|
'sugar_content' => 18.3,
|
|
'date' => '2024-09-10',
|
|
'quality' => 'good',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Early harvest, lighter wine',
|
|
'weather_conditions' => 'Sunny, 24°C',
|
|
'harvest_time' => '08:30:00',
|
|
'planned_for' => '2025-09-12',
|
|
],
|
|
|
|
// ========== HISTORICAL HARVESTS 2023 ==========
|
|
[
|
|
'variety' => 'Grüner Veltliner',
|
|
'color' => 'green',
|
|
'weight' => 920.00,
|
|
'sugar_content' => 19.2,
|
|
'date' => '2023-09-18',
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Main harvest for Cabinet wine, excellent quality',
|
|
'weather_conditions' => 'Sunny, 21°C',
|
|
'harvest_time' => '08:00:00',
|
|
'executed_at' => '2023-09-18',
|
|
],
|
|
[
|
|
'variety' => 'Grüner Veltliner',
|
|
'color' => 'green',
|
|
'weight' => 650.50,
|
|
'sugar_content' => 21.8,
|
|
'date' => '2023-10-12',
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Late harvest, higher sugar for semi-dry wine',
|
|
'weather_conditions' => 'Partly cloudy, 18°C',
|
|
'harvest_time' => '09:00:00',
|
|
'executed_at' => '2023-10-12',
|
|
],
|
|
[
|
|
'variety' => 'Müller Thurgau',
|
|
'color' => 'green',
|
|
'weight' => 890.75,
|
|
'sugar_content' => 17.8,
|
|
'date' => '2023-09-08',
|
|
'quality' => 'good',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Early harvest, aromatic profile',
|
|
'weather_conditions' => 'Sunny, 23°C',
|
|
'harvest_time' => '07:30:00',
|
|
'executed_at' => '2023-09-08',
|
|
],
|
|
[
|
|
'variety' => 'Chardonnay',
|
|
'color' => 'green',
|
|
'weight' => 580.30,
|
|
'sugar_content' => 20.5,
|
|
'date' => '2023-09-22',
|
|
'quality' => 'good',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Balanced harvest for unfiltered wine',
|
|
'weather_conditions' => 'Sunny, 20°C',
|
|
'harvest_time' => '08:00:00',
|
|
'executed_at' => '2023-09-22',
|
|
],
|
|
[
|
|
'variety' => 'Blaufränkisch',
|
|
'color' => 'blue',
|
|
'weight' => 1050.00,
|
|
'sugar_content' => 22.0,
|
|
'date' => '2023-10-08',
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Premium quality for classic red wine',
|
|
'weather_conditions' => 'Sunny, 17°C',
|
|
'harvest_time' => '09:30:00',
|
|
'executed_at' => '2023-10-08',
|
|
],
|
|
[
|
|
'variety' => 'St. Laurent',
|
|
'color' => 'blue',
|
|
'weight' => 720.50,
|
|
'sugar_content' => 20.8,
|
|
'date' => '2023-10-02',
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Main harvest for Moravian style',
|
|
'weather_conditions' => 'Partly cloudy, 16°C',
|
|
'harvest_time' => '08:30:00',
|
|
'executed_at' => '2023-10-02',
|
|
],
|
|
[
|
|
'variety' => 'St. Laurent',
|
|
'color' => 'blue',
|
|
'weight' => 480.25,
|
|
'sugar_content' => 19.5,
|
|
'date' => '2023-09-28',
|
|
'quality' => 'good',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Early harvest for lighter rosé style',
|
|
'weather_conditions' => 'Sunny, 19°C',
|
|
'harvest_time' => '07:00:00',
|
|
'executed_at' => '2023-09-28',
|
|
],
|
|
|
|
// ========== HISTORICAL HARVESTS 2022 ==========
|
|
[
|
|
'variety' => 'Grüner Veltliner',
|
|
'color' => 'green',
|
|
'weight' => 580.80,
|
|
'sugar_content' => 22.5,
|
|
'date' => '2022-10-20',
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Selection harvest, hand-picked clusters for premium wine',
|
|
'weather_conditions' => 'Cool, 14°C',
|
|
'harvest_time' => '10:00:00',
|
|
'executed_at' => '2022-10-20',
|
|
],
|
|
[
|
|
'variety' => 'Riesling',
|
|
'color' => 'green',
|
|
'weight' => 640.60,
|
|
'sugar_content' => 20.8,
|
|
'date' => '2022-10-05',
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Classic dry Riesling harvest, perfect acidity',
|
|
'weather_conditions' => 'Sunny, 18°C',
|
|
'harvest_time' => '08:00:00',
|
|
'executed_at' => '2022-10-05',
|
|
],
|
|
[
|
|
'variety' => 'Chardonnay',
|
|
'color' => 'green',
|
|
'weight' => 510.40,
|
|
'sugar_content' => 21.5,
|
|
'date' => '2022-09-25',
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Premium grapes for barrel aging',
|
|
'weather_conditions' => 'Sunny, 21°C',
|
|
'harvest_time' => '08:30:00',
|
|
'executed_at' => '2022-09-25',
|
|
],
|
|
[
|
|
'variety' => 'Blaufränkisch',
|
|
'color' => 'blue',
|
|
'weight' => 680.75,
|
|
'sugar_content' => 23.2,
|
|
'date' => '2022-10-12',
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Reserve selection, concentrated flavors',
|
|
'weather_conditions' => 'Sunny, 16°C',
|
|
'harvest_time' => '09:00:00',
|
|
'executed_at' => '2022-10-12',
|
|
],
|
|
[
|
|
'variety' => 'St. Laurent',
|
|
'color' => 'blue',
|
|
'weight' => 620.90,
|
|
'sugar_content' => 21.8,
|
|
'date' => '2022-10-05',
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Premium harvest for barrel aging',
|
|
'weather_conditions' => 'Partly cloudy, 17°C',
|
|
'harvest_time' => '08:00:00',
|
|
'executed_at' => '2022-10-05',
|
|
],
|
|
|
|
// ========== HISTORICAL HARVESTS 2021 ==========
|
|
[
|
|
'variety' => 'Riesling',
|
|
'color' => 'green',
|
|
'weight' => 420.50,
|
|
'sugar_content' => 28.5,
|
|
'date' => '2021-11-08',
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'botrytis-affected',
|
|
'notes' => 'Noble rot berries, individual selection for sweet wine',
|
|
'weather_conditions' => 'Foggy morning, 10°C',
|
|
'harvest_time' => '10:00:00',
|
|
'executed_at' => '2021-11-08',
|
|
],
|
|
|
|
// ========== HISTORICAL HARVESTS 2020 ==========
|
|
[
|
|
'variety' => 'Blaufränkisch',
|
|
'color' => 'blue',
|
|
'weight' => 550.00,
|
|
'sugar_content' => 23.8,
|
|
'date' => '2020-10-18',
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Exceptional vintage, archive quality',
|
|
'weather_conditions' => 'Perfect harvest weather, 15°C',
|
|
'harvest_time' => '09:00:00',
|
|
'executed_at' => '2020-10-18',
|
|
],
|
|
|
|
// Recent harvests (within last 30 days) - dynamic dates
|
|
[
|
|
'variety' => 'Chardonnay',
|
|
'color' => 'green',
|
|
'weight' => 420.50,
|
|
'sugar_content' => 20.8,
|
|
'date' => now()->subDays(5)->format('Y-m-d'),
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'First Chardonnay harvest - excellent for sparkling wine',
|
|
'weather_conditions' => 'Sunny, 19°C',
|
|
'harvest_time' => '07:00:00',
|
|
],
|
|
[
|
|
'variety' => 'Grüner Veltliner',
|
|
'color' => 'green',
|
|
'weight' => 320.75,
|
|
'sugar_content' => 19.2,
|
|
'date' => now()->subDays(12)->format('Y-m-d'),
|
|
'quality' => 'good',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Partial harvest from north section',
|
|
'weather_conditions' => 'Partly cloudy, 17°C',
|
|
'harvest_time' => '08:30:00',
|
|
],
|
|
[
|
|
'variety' => 'Riesling',
|
|
'color' => 'green',
|
|
'weight' => 280.40,
|
|
'sugar_content' => 22.5,
|
|
'date' => now()->subDays(18)->format('Y-m-d'),
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Late harvest - high sugar content for dessert wine',
|
|
'weather_conditions' => 'Cool, 12°C',
|
|
'harvest_time' => '09:00:00',
|
|
],
|
|
[
|
|
'variety' => 'Blaufränkisch',
|
|
'color' => 'blue',
|
|
'weight' => 450.00,
|
|
'sugar_content' => 21.5,
|
|
'date' => now()->subDays(8)->format('Y-m-d'),
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Premium selection for reserve wine',
|
|
'weather_conditions' => 'Sunny, 16°C',
|
|
'harvest_time' => '08:00:00',
|
|
],
|
|
|
|
// ========== FULLY AVAILABLE HARVESTS (Not yet used in production) ==========
|
|
[
|
|
'variety' => 'Grüner Veltliner',
|
|
'color' => 'green',
|
|
'weight' => 780.40,
|
|
'sugar_content' => 19.8,
|
|
'date' => now()->subDays(3)->format('Y-m-d'),
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Fresh harvest, excellent for young wine production',
|
|
'weather_conditions' => 'Sunny, 20°C',
|
|
'harvest_time' => '07:30:00',
|
|
],
|
|
[
|
|
'variety' => 'Müller Thurgau',
|
|
'color' => 'green',
|
|
'weight' => 650.25,
|
|
'sugar_content' => 18.0,
|
|
'date' => now()->subDays(6)->format('Y-m-d'),
|
|
'quality' => 'good',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Aromatic harvest, ready for processing',
|
|
'weather_conditions' => 'Partly cloudy, 19°C',
|
|
'harvest_time' => '08:00:00',
|
|
],
|
|
[
|
|
'variety' => 'Chardonnay',
|
|
'color' => 'green',
|
|
'weight' => 540.80,
|
|
'sugar_content' => 21.0,
|
|
'date' => now()->subDays(2)->format('Y-m-d'),
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Premium quality, suitable for barrel aging',
|
|
'weather_conditions' => 'Sunny, 21°C',
|
|
'harvest_time' => '07:00:00',
|
|
],
|
|
[
|
|
'variety' => 'Riesling',
|
|
'color' => 'green',
|
|
'weight' => 470.60,
|
|
'sugar_content' => 20.5,
|
|
'date' => now()->subDays(10)->format('Y-m-d'),
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Balanced acidity, perfect for classic dry style',
|
|
'weather_conditions' => 'Cool, 15°C',
|
|
'harvest_time' => '08:30:00',
|
|
],
|
|
[
|
|
'variety' => 'St. Laurent',
|
|
'color' => 'blue',
|
|
'weight' => 690.50,
|
|
'sugar_content' => 20.2,
|
|
'date' => now()->subDays(4)->format('Y-m-d'),
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Excellent color and tannins, available for production',
|
|
'weather_conditions' => 'Partly cloudy, 17°C',
|
|
'harvest_time' => '09:00:00',
|
|
],
|
|
[
|
|
'variety' => 'Blaufränkisch',
|
|
'color' => 'blue',
|
|
'weight' => 820.00,
|
|
'sugar_content' => 22.5,
|
|
'date' => now()->subDays(7)->format('Y-m-d'),
|
|
'quality' => 'excellent',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Rich concentration, ideal for reserve wine',
|
|
'weather_conditions' => 'Sunny, 18°C',
|
|
'harvest_time' => '08:30:00',
|
|
],
|
|
[
|
|
'variety' => 'Grüner Veltliner',
|
|
'color' => 'green',
|
|
'weight' => 560.30,
|
|
'sugar_content' => 18.5,
|
|
'date' => '2023-09-25',
|
|
'quality' => 'good',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Secondary harvest from 2023, still available',
|
|
'weather_conditions' => 'Overcast, 18°C',
|
|
'harvest_time' => '09:30:00',
|
|
'executed_at' => '2023-09-25',
|
|
],
|
|
[
|
|
'variety' => 'Chardonnay',
|
|
'color' => 'green',
|
|
'weight' => 390.75,
|
|
'sugar_content' => 19.8,
|
|
'date' => '2023-10-05',
|
|
'quality' => 'good',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Late 2023 harvest, clean and fresh',
|
|
'weather_conditions' => 'Sunny, 16°C',
|
|
'harvest_time' => '08:00:00',
|
|
'executed_at' => '2023-10-05',
|
|
],
|
|
[
|
|
'variety' => 'St. Laurent',
|
|
'color' => 'blue',
|
|
'weight' => 410.20,
|
|
'sugar_content' => 19.0,
|
|
'date' => '2022-09-28',
|
|
'quality' => 'good',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => 'Older harvest from 2022, still usable for blending',
|
|
'weather_conditions' => 'Partly cloudy, 19°C',
|
|
'harvest_time' => '10:00:00',
|
|
'executed_at' => '2022-09-28',
|
|
],
|
|
[
|
|
'variety' => 'Müller Thurgau',
|
|
'color' => 'green',
|
|
'weight' => 720.50,
|
|
'sugar_content' => 17.5,
|
|
'date' => '2022-09-15',
|
|
'quality' => 'good',
|
|
'grape_condition' => 'healthy',
|
|
'notes' => '2022 reserve harvest, light and aromatic',
|
|
'weather_conditions' => 'Sunny, 22°C',
|
|
'harvest_time' => '07:30:00',
|
|
'executed_at' => '2022-09-15',
|
|
],
|
|
|
|
// ========== PLANNED HARVESTS (Future - No completion data) ==========
|
|
// Note: These have minimal data since they're planned, not yet executed
|
|
[
|
|
'variety' => 'Grüner Veltliner',
|
|
'color' => 'green',
|
|
'weight' => 0, // Placeholder - actual weight unknown until harvest
|
|
'date' => now()->addYear()->addMonths(8)->format('Y-m-d'), // ~Sept 2026
|
|
'notes' => 'Planned harvest for premium wine production',
|
|
'planned_for' => now()->addYear()->addMonths(8)->format('Y-m-d'),
|
|
],
|
|
[
|
|
'variety' => 'Riesling',
|
|
'color' => 'green',
|
|
'weight' => 0,
|
|
'date' => now()->addYear()->addMonths(8)->addDays(10)->format('Y-m-d'), // ~Sept 2026
|
|
'notes' => 'Expected high sugar content for late harvest wine',
|
|
'planned_for' => now()->addYear()->addMonths(8)->addDays(10)->format('Y-m-d'),
|
|
],
|
|
[
|
|
'variety' => 'Chardonnay',
|
|
'color' => 'green',
|
|
'weight' => 0,
|
|
'date' => now()->addYear()->addMonths(9)->format('Y-m-d'), // ~Oct 2026
|
|
'notes' => 'Planned harvest for reserve Chardonnay',
|
|
'planned_for' => now()->addYear()->addMonths(9)->format('Y-m-d'),
|
|
],
|
|
[
|
|
'variety' => 'Blaufränkisch',
|
|
'color' => 'blue',
|
|
'weight' => 0,
|
|
'date' => now()->addYear()->addMonths(9)->addDays(5)->format('Y-m-d'), // ~Oct 2026
|
|
'notes' => 'Planned red grape harvest for full-bodied wine',
|
|
'planned_for' => now()->addYear()->addMonths(9)->addDays(5)->format('Y-m-d'),
|
|
],
|
|
[
|
|
'variety' => 'St. Laurent',
|
|
'color' => 'blue',
|
|
'weight' => 0,
|
|
'date' => now()->addYear()->addMonths(9)->addWeeks(1)->format('Y-m-d'), // ~Oct 2026
|
|
'notes' => 'Planned harvest for elegant red wine',
|
|
'planned_for' => now()->addYear()->addMonths(9)->addWeeks(1)->format('Y-m-d'),
|
|
],
|
|
];
|
|
|
|
// Track which rows have been used for which years
|
|
$rowYearUsage = [];
|
|
|
|
foreach ($harvests as $harvest) {
|
|
$varietyRows = $rows[$harvest['variety']] ?? collect();
|
|
$variationKey = $harvest['variety'] . ':' . $harvest['color'];
|
|
$variation = $variations[$variationKey] ?? null;
|
|
|
|
// Resolve a usable variety variation id; fall back to row assignment or any variation for the variety
|
|
$variationId = $variation?->id;
|
|
if (! $variationId && $varietyRows->isNotEmpty()) {
|
|
$variationId = $varietyRows->first()->variety_variation_id;
|
|
}
|
|
if (! $variationId) {
|
|
$variationId = \App\Models\VarietyVariation::whereHas(
|
|
'grapeVariety',
|
|
fn ($q) => $q->where('variety_name', $harvest['variety'])
|
|
)->value('id');
|
|
}
|
|
|
|
if ($varietyRows->isEmpty() || ! $variationId) {
|
|
continue;
|
|
}
|
|
|
|
// Get the year from the PLANNED date (not harvest date)
|
|
// Planned date is: planned_for > executed_at > date
|
|
$plannedDateField = $harvest['planned_for'] ?? $harvest['executed_at'] ?? $harvest['date'];
|
|
$plannedYear = is_string($plannedDateField)
|
|
? \Carbon\Carbon::parse($plannedDateField)->year
|
|
: now()->subDays((int)$plannedDateField)->year;
|
|
|
|
// Find a row that hasn't been used for this planned year
|
|
$row = null;
|
|
foreach ($varietyRows as $candidateRow) {
|
|
$rowYearKey = $candidateRow->id . '_' . $plannedYear;
|
|
if (!isset($rowYearUsage[$rowYearKey])) {
|
|
$row = $candidateRow;
|
|
$rowYearUsage[$rowYearKey] = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// If all rows for this variety already have a harvest this planned year, skip
|
|
if (!$row) {
|
|
continue;
|
|
}
|
|
|
|
$harvestModel = Harvest::updateOrCreate(
|
|
[
|
|
'vineyard_row_id' => $row->id,
|
|
'date' => $harvest['date'],
|
|
],
|
|
[
|
|
'variety_variation_id' => $variationId,
|
|
'weight' => $harvest['weight'] ?? null,
|
|
'sugar_content' => $harvest['sugar_content'] ?? null,
|
|
'quality' => $harvest['quality'] ?? null,
|
|
'grape_condition' => $harvest['grape_condition'] ?? null,
|
|
'notes' => $harvest['notes'] ?? null,
|
|
'weather_conditions' => $harvest['weather_conditions'] ?? null,
|
|
'harvest_time' => $harvest['harvest_time'] ?? null,
|
|
]
|
|
);
|
|
|
|
$plannedDate = $harvest['planned_for'] ?? null;
|
|
$executionDate = $harvest['executed_at'] ?? null;
|
|
|
|
// If harvest has completion data (sugar, weather, etc.), it's completed
|
|
// Set execution_date to the harvest date, regardless of 'planned_for'
|
|
$hasCompletionData = $harvestModel->sugar_content || $harvestModel->weather_conditions || $harvestModel->quality_rating;
|
|
if ($hasCompletionData && !$executionDate) {
|
|
$executionDate = $harvestModel->date?->format('Y-m-d');
|
|
}
|
|
|
|
$defaultDate = $executionDate ?? $harvestModel->date?->format('Y-m-d');
|
|
|
|
if ($plannedDate || $executionDate || $defaultDate) {
|
|
PlannedTask::updateOrCreate(
|
|
[
|
|
'type' => 'Harvest',
|
|
'taskable_id' => $harvestModel->getKey(),
|
|
'taskable_type' => Harvest::class,
|
|
],
|
|
[
|
|
'planned_date' => $plannedDate ?? $defaultDate,
|
|
'execution_date' => $executionDate,
|
|
'note' => $harvest['notes'],
|
|
]
|
|
);
|
|
}
|
|
}
|
|
|
|
if ($this->command) {
|
|
$this->command->info('✓ Created ' . count($harvests) . ' harvests');
|
|
}
|
|
}
|
|
}
|