75 lines
2.7 KiB
PHP
75 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace App\Domains\Event\Actions\CreateEvent;
|
|
|
|
use App\Enumerations\EatingHabit;
|
|
use App\Models\Event;
|
|
use App\Models\Tenant;
|
|
use App\RelationModels\EventEatingHabits;
|
|
use App\RelationModels\EventLocalGroups;
|
|
|
|
class CreateEventCommand {
|
|
private CreateEventRequest $request;
|
|
public function __construct(CreateEventRequest $request) {
|
|
$this->request = $request;
|
|
}
|
|
public function execute(): CreateEventResponse {
|
|
$response = new CreateEventResponse();
|
|
|
|
|
|
|
|
$prefix = $this->request->begin->format('Y-m_');
|
|
if (!str_starts_with($this->request->name, $prefix)) {
|
|
$this->request->name = $prefix . $this->request->name;
|
|
}
|
|
|
|
|
|
$event = Event::create([
|
|
'tenant' => app('tenant')->slug,
|
|
'name' => $this->request->name,
|
|
'location' => $this->request->location,
|
|
'postal_code' => $this->request->postalCode,
|
|
'email' => $this->request->email,
|
|
'start_date' => $this->request->begin,
|
|
'end_date' => $this->request->end,
|
|
'early_bird_end' => $this->request->earlyBirdEnd,
|
|
'registration_final_end' => $this->request->registrationFinalEnd,
|
|
'early_bird_end_amount_increase' => $this->request->earlyBirdEndAmountIncrease,
|
|
'account_owner' => $this->request->accountOwner,
|
|
'account_iban' => $this->request->accountIban,
|
|
'participation_fee_type' => $this->request->participationFeeType->slug,
|
|
'pay_per_day' => $this->request->payPerDay,
|
|
'pay_direct' => $this->request->payDirect,
|
|
'total_max_amount' => 0,
|
|
'support_per_person' => 0,
|
|
'support_flat' => 0,
|
|
]);
|
|
|
|
if ($event !== null) {
|
|
EventEatingHabits::create([
|
|
'event_id' => $event->id,
|
|
'eating_habit_id' => EatingHabit::where('slug', EatingHabit::EATING_HABIT_VEGAN)->first()->id,
|
|
]);
|
|
|
|
EventEatingHabits::create([
|
|
'event_id' => $event->id,
|
|
'eating_habit_id' => EatingHabit::where('slug', EatingHabit::EATING_HABIT_VEGETARIAN)->first()->id,
|
|
]);
|
|
|
|
if (app('tenant')->slug === 'lv') {
|
|
foreach(Tenant::where(['is_active_local_group' => true])->get() as $tenant) {
|
|
EventLocalGroups::create(['event_id' => $event->id, 'local_group_id' => $tenant->id]);
|
|
}
|
|
} else {
|
|
EventLocalGroups::create(['event_id' => $event->id, 'local_group_id' => app('tenant')->id]);
|
|
}
|
|
|
|
|
|
$response->success = true;
|
|
$response->event = $event;
|
|
}
|
|
|
|
return $response;
|
|
}
|
|
}
|