feat(event): record date reschedules

This commit is contained in:
2026-09-14 14:13:46 -03:00
parent 18a0d14fa8
commit 54827fbc58
3 changed files with 35 additions and 3 deletions

View File

@@ -52,6 +52,7 @@ class EventController extends Controller
$request->user()->tenant()->firstOrFail(), $request->user()->tenant()->firstOrFail(),
$eventDate, $eventDate,
$request->validated(), $request->validated(),
$request->user(),
) )
); );
} }

View File

@@ -2,11 +2,13 @@
namespace App\Domains\Event\Services; namespace App\Domains\Event\Services;
use App\Domains\Auth\Models\User;
use App\Domains\Catalog\Models\Variant; use App\Domains\Catalog\Models\Variant;
use App\Domains\Catalog\Services\VariantReplacementService; use App\Domains\Catalog\Services\VariantReplacementService;
use App\Domains\Event\Events\EventDateRescheduled; use App\Domains\Event\Events\EventDateRescheduled;
use App\Domains\Event\Events\EventDateSuspended; use App\Domains\Event\Events\EventDateSuspended;
use App\Domains\Event\Models\EventDate; use App\Domains\Event\Models\EventDate;
use App\Domains\Event\Models\EventDateReschedule;
use App\Domains\Tenant\Models\Tenant; use App\Domains\Tenant\Models\Tenant;
use App\Domains\Ticket\Models\Ticket; use App\Domains\Ticket\Models\Ticket;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
@@ -75,9 +77,13 @@ class EventService
} }
/** @param array{date: string} $data */ /** @param array{date: string} $data */
public function rescheduleDateForTenant(Tenant $tenant, EventDate $eventDate, array $data): EventDate public function rescheduleDateForTenant(
{ Tenant $tenant,
return DB::transaction(function () use ($tenant, $eventDate, $data): EventDate { EventDate $eventDate,
array $data,
?User $createdBy = null,
): EventDate {
return DB::transaction(function () use ($tenant, $eventDate, $data, $createdBy): EventDate {
$source = $this->lockedDateForTenant($tenant, $eventDate); $source = $this->lockedDateForTenant($tenant, $eventDate);
if ($source->suspended_at !== null) { if ($source->suspended_at !== null) {
@@ -125,6 +131,15 @@ class EventService
$source->update(['rescheduled_to_event_date_id' => $destination->getKey()]); $source->update(['rescheduled_to_event_date_id' => $destination->getKey()]);
$this->variantReplacementService->replaceEventDate($source, $effectiveDestination); $this->variantReplacementService->replaceEventDate($source, $effectiveDestination);
EventDateReschedule::query()->create([
'tenant_code' => $tenant->codigo,
'source_event_date_id' => $source->getKey(),
'destination_event_date_id' => $destination->getKey(),
'created_by_user_id' => $createdBy?->getKey(),
'previous_date' => $source->date->format('Y-m-d'),
'new_date' => $destination->date->format('Y-m-d'),
]);
EventDateRescheduled::dispatch( EventDateRescheduled::dispatch(
$tenant->codigo, $tenant->codigo,
$source->getKey(), $source->getKey(),

View File

@@ -270,6 +270,14 @@ class AdminAppEventControllerTest extends TestCase
}); });
$this->assertDatabaseCount('event_dates', 2); $this->assertDatabaseCount('event_dates', 2);
$this->assertDatabaseHas('event_date_reschedules', [
'tenant_code' => $tenant->codigo,
'source_event_date_id' => $original->id,
'destination_event_date_id' => $destination->id,
'created_by_user_id' => $admin->id,
'previous_date' => '2027-10-09',
'new_date' => '2027-10-20',
]);
$variant->refresh(); $variant->refresh();
$replacement = $variant->replacement()->firstOrFail(); $replacement = $variant->replacement()->firstOrFail();
$this->assertSame($original->id, $variant->event_date_id); $this->assertSame($original->id, $variant->event_date_id);
@@ -315,6 +323,14 @@ class AdminAppEventControllerTest extends TestCase
])->assertOk()->assertJsonPath('data.status', 'rescheduled'); ])->assertOk()->assertJsonPath('data.status', 'rescheduled');
$this->assertDatabaseCount('event_dates', 3); $this->assertDatabaseCount('event_dates', 3);
$this->assertDatabaseCount('event_date_reschedules', 2);
$this->assertDatabaseHas('event_date_reschedules', [
'tenant_code' => $tenant->codigo,
'source_event_date_id' => $destination->id,
'created_by_user_id' => $admin->id,
'previous_date' => '2027-10-20',
'new_date' => '2027-10-25',
]);
$replacement->refresh(); $replacement->refresh();
$latestReplacement = $replacement->replacement()->firstOrFail(); $latestReplacement = $replacement->replacement()->firstOrFail();
$this->assertSame($replacement->inventory_id, $latestReplacement->inventory_id); $this->assertSame($replacement->inventory_id, $latestReplacement->inventory_id);