argument('order_id'); $shopping_order = ShoppingOrder::find($order_id); if (! $shopping_order) { $this->error("Shopping Order #{$order_id} nicht gefunden."); return self::FAILURE; } $this->info("=== Debug trackNewPartner fuer Order #{$order_id} ==="); $this->newLine(); // 1. Bestelldaten $this->info('[1] Bestelldaten:'); $this->table(['Feld', 'Wert'], [ ['id', $shopping_order->id], ['auth_user_id', $shopping_order->auth_user_id ?? 'NULL'], ['member_id', $shopping_order->member_id ?? 'NULL'], ['payment_for', $shopping_order->payment_for], ['paid', $shopping_order->paid], ['txaction', $shopping_order->txaction], ['mode', $shopping_order->mode], ['created_at', $shopping_order->created_at], ]); // 2. Prüfe payment_for == 1 (Voraussetzung im Payment.php) if ($shopping_order->payment_for != 1) { $this->warn("[!] payment_for = {$shopping_order->payment_for} (nicht 1/registration). trackNewPartner wird nur bei payment_for=1 aufgerufen!"); } // 3. Neuer User $this->newLine(); $this->info('[2] Neuer User (auth_user_id):'); if (! $shopping_order->auth_user_id) { $this->error(' auth_user_id ist NULL -> ABBRUCH (return)'); return self::SUCCESS; } $new_user = User::find($shopping_order->auth_user_id); if (! $new_user) { $this->error(" User #{$shopping_order->auth_user_id} nicht gefunden -> ABBRUCH (return)"); return self::SUCCESS; } $this->table(['Feld', 'Wert'], [ ['id', $new_user->id], ['email', $new_user->email], ['m_sponsor', $new_user->m_sponsor ?? 'NULL'], ['active', $new_user->active], ['created_at', $new_user->created_at], ]); if (! $new_user->m_sponsor) { $this->error(' m_sponsor ist NULL -> ABBRUCH (return)'); return self::SUCCESS; } $sponsor_id = $new_user->m_sponsor; $this->info(" Sponsor ID: {$sponsor_id}"); // 4. Registration Date $registration_date = $shopping_order->created_at; $this->newLine(); $this->info("[3] Registration Date: {$registration_date}"); // 5. Aktive Incentives $this->newLine(); $this->info('[4] Aktive Incentives pruefen:'); $all_incentives = Incentive::query()->get(); $this->info(" Incentives gesamt: {$all_incentives->count()}"); foreach ($all_incentives as $incentive) { $is_active = $incentive->status == 1; $in_range = $registration_date >= $incentive->qualification_start && $registration_date <= $incentive->qualification_end; $status_icon = $is_active ? 'AKTIV' : 'INAKTIV'; $range_icon = $in_range ? 'IM ZEITRAUM' : 'AUSSERHALB'; $this->table(['Feld', 'Wert'], [ ['Incentive', "#{$incentive->id}: {$incentive->name}"], ['Status', "{$incentive->status} ({$status_icon})"], ['qualification_start', $incentive->qualification_start], ['qualification_end', $incentive->qualification_end], ['Registration Date', "{$registration_date} ({$range_icon})"], ]); if (! $is_active) { $this->warn(' -> Uebersprungen: Incentive nicht aktiv'); continue; } if (! $in_range) { $this->warn(' -> Uebersprungen: Registration Date ausserhalb Qualifikationszeitraum'); continue; } $this->info(" -> MATCH! Incentive #{$incentive->id} ist aktiv und Registration Date liegt im Zeitraum."); // 6. Participant prüfen $this->newLine(); $this->info("[5] Participant-Check: Sponsor #{$sponsor_id} in Incentive #{$incentive->id}"); $participant = IncentiveParticipant::where('incentive_id', $incentive->id) ->where('user_id', $sponsor_id) ->first(); if (! $participant) { $this->error(" Sponsor #{$sponsor_id} ist KEIN Teilnehmer in Incentive #{$incentive->id} -> SKIP"); // Zeige alle Teilnehmer-User-IDs $participant_ids = IncentiveParticipant::where('incentive_id', $incentive->id) ->pluck('user_id') ->toArray(); $this->info(' Teilnehmer User-IDs: '.implode(', ', array_slice($participant_ids, 0, 20)) .(count($participant_ids) > 20 ? '... (+'.count($participant_ids) - 20 .')' : '')); continue; } $this->info(" Participant gefunden: #{$participant->id} (User #{$participant->user_id})"); $this->table(['Feld', 'Wert'], [ ['participant.id', $participant->id], ['user_id', $participant->user_id], ['total_points', $participant->total_points], ['qualified_partners', $participant->qualified_partners], ['accepted_terms_at', $participant->accepted_terms_at ?? 'NULL'], ]); // 7. Tracking-Eintrag prüfen $this->newLine(); $this->info('[6] Tracking-Eintrag (incentive_new_partners):'); $existing = IncentiveNewPartner::where('participant_id', $participant->id) ->where('user_id', $new_user->id) ->first(); if ($existing) { $this->warn(" Eintrag existiert bereits: #{$existing->id} (erstellt: {$existing->created_at})"); } else { $this->info(' Kein Eintrag vorhanden -> wuerde neu erstellt werden.'); } // 8. Zusammenfassung $this->newLine(); $this->info('=== ERGEBNIS ==='); $this->info('trackNewPartner WUERDE erfolgreich laufen fuer:'); $this->info(" Neuer Partner: User #{$new_user->id} ({$new_user->email})"); $this->info(" Sponsor/Teilnehmer: User #{$sponsor_id} (Participant #{$participant->id})"); $this->info(" Incentive: #{$incentive->id} ({$incentive->name})"); $this->info(" Einmalpunkte: {$incentive->points_partner_onetime}"); } // Prüfe den Query wie er im Code steht $this->newLine(); $this->info('[7] Exakter Query wie im Code:'); $matched_incentives = Incentive::query() ->active() ->where('qualification_start', '<=', $registration_date) ->where('qualification_end', '>=', $registration_date) ->get(); $this->info(" Incentive::active()->where(start <= {$registration_date})->where(end >= {$registration_date})"); $this->info(" Ergebnis: {$matched_incentives->count()} Incentive(s)"); foreach ($matched_incentives as $mi) { $this->info(" -> #{$mi->id}: {$mi->name}"); } return self::SUCCESS; } }