feat(event): record date reschedules

This commit is contained in:
ncoronel 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(),
$eventDate,
$request->validated(),
$request->user(),
)
);
}

View File

@ -2,11 +2,13 @@
namespace App\Domains\Event\Services;
use App\Domains\Auth\Models\User;
use App\Domains\Catalog\Models\Variant;
use App\Domains\Catalog\Services\VariantReplacementService;
use App\Domains\Event\Events\EventDateRescheduled;
use App\Domains\Event\Events\EventDateSuspended;
use App\Domains\Event\Models\EventDate;
use App\Domains\Event\Models\EventDateReschedule;
use App\Domains\Tenant\Models\Tenant;
use App\Domains\Ticket\Models\Ticket;
use Illuminate\Support\Collection;
@ -75,9 +77,13 @@ class EventService
}
/** @param array{date: string} $data */
public function rescheduleDateForTenant(Tenant $tenant, EventDate $eventDate, array $data): EventDate
{
return DB::transaction(function () use ($tenant, $eventDate, $data): EventDate {
public function rescheduleDateForTenant(
Tenant $tenant,
EventDate $eventDate,
array $data,
?User $createdBy = null,
): EventDate {
return DB::transaction(function () use ($tenant, $eventDate, $data, $createdBy): EventDate {
$source = $this->lockedDateForTenant($tenant, $eventDate);
if ($source->suspended_at !== null) {
@ -125,6 +131,15 @@ class EventService
$source->update(['rescheduled_to_event_date_id' => $destination->getKey()]);
$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(
$tenant->codigo,
$source->getKey(),

View File

@ -270,6 +270,14 @@ class AdminAppEventControllerTest extends TestCase
});
$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();
$replacement = $variant->replacement()->firstOrFail();
$this->assertSame($original->id, $variant->event_date_id);
@ -315,6 +323,14 @@ class AdminAppEventControllerTest extends TestCase
])->assertOk()->assertJsonPath('data.status', 'rescheduled');
$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();
$latestReplacement = $replacement->replacement()->firstOrFail();
$this->assertSame($replacement->inventory_id, $latestReplacement->inventory_id);