Berater uebertragen: kompletten Berater- und Kundenstamm an einen anderen Berater
Ticket dev/_tickets/2026-09-08.md #1: neuer Punkt "Berater uebertragen" im Superadmin (/admin/user/transfer). Vorschau zeigt Firstline, Downline, geparkte Sponsor-Bezuege, Kunden, Kundenabos und Portal-Logins; nach Bestaetigung wird alles in einer Transaktion umgehaengt und wie die User-Bereinigung protokolliert (user_clean_up_logs, shopping_user_member_logs, SysLog). Bestellungen, Umsaetze und Provisionsdaten bleiben beim bisherigen Berater. Ziel unterhalb der Firstline der Quelle wird abgelehnt (Kreis im Baum). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
60f9985313
commit
ef7e333bd4
17 changed files with 902 additions and 0 deletions
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Requests\UserTransfer;
|
||||
|
||||
/**
|
||||
* Ausführung der Übertragung: zusätzlich zur Auswahl ist die bewusste
|
||||
* Bestätigung per Checkbox Pflicht — die Umhängung betrifft den ganzen Baum.
|
||||
*/
|
||||
class ExecuteConsultantTransferRequest extends PreviewConsultantTransferRequest
|
||||
{
|
||||
/**
|
||||
* @return array<string, array<int, mixed>>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return array_merge(parent::rules(), [
|
||||
'confirm_transfer' => ['accepted'],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function messages(): array
|
||||
{
|
||||
return array_merge(parent::messages(), [
|
||||
'confirm_transfer.accepted' => __('msg.transfer_confirm_checkbox_missing'),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Requests\UserTransfer;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
/**
|
||||
* Auswahl von Quell- und Zielberater für die Übertragung eines Berater-Stamms
|
||||
* (dev/_tickets/2026-09-08.md, Ticket #1).
|
||||
*/
|
||||
class PreviewConsultantTransferRequest extends FormRequest
|
||||
{
|
||||
public function authorize(): bool
|
||||
{
|
||||
// Die Route liegt hinter der superadmin-Middleware.
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, array<int, mixed>>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'source_user_id' => ['required', 'integer', 'exists:users,id'],
|
||||
'target_user_id' => ['required', 'integer', 'exists:users,id', 'different:source_user_id'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function messages(): array
|
||||
{
|
||||
return [
|
||||
'source_user_id.required' => __('msg.transfer_error_source_required'),
|
||||
'target_user_id.required' => __('msg.transfer_error_target_required'),
|
||||
'target_user_id.different' => __('msg.transfer_error_same_user'),
|
||||
];
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue