feat(event): record date reschedules
This commit is contained in:
@@ -52,6 +52,7 @@ class EventController extends Controller
|
|||||||
$request->user()->tenant()->firstOrFail(),
|
$request->user()->tenant()->firstOrFail(),
|
||||||
$eventDate,
|
$eventDate,
|
||||||
$request->validated(),
|
$request->validated(),
|
||||||
|
$request->user(),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user