- Updated the FeaturedGroupService to include 'variants.eventDates' in the items query. - Introduced a BelongsToMany relationship in EventDate for selected variants. - Modified PurchaseItemResource and PurchaseItemSnapshotFactory to handle multiple event dates for variants. - Enhanced StartCheckoutService to load event dates for variants. - Updated TicketGeneratorService to accommodate event dates in ticket generation. - Created migrations to support multi-value event dates and allow multiple variant values per attribute. - Adjusted seeders to reflect new event date handling and added new attributes. - Added tests to ensure correct functionality for multi-date variants and their integration with ticket generation.
68 lines
1.6 KiB
PHP
68 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Domains\Event\Models;
|
|
|
|
use App\Domains\Catalog\Models\Variant;
|
|
use App\Domains\Tenant\Models\Tenant;
|
|
use Carbon\CarbonInterface;
|
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
|
use Illuminate\Support\Carbon;
|
|
|
|
#[Fillable([
|
|
'tenant_code',
|
|
'date',
|
|
'time_start',
|
|
'time_end',
|
|
])]
|
|
class EventDate extends Model
|
|
{
|
|
use HasFactory;
|
|
|
|
public $timestamps = false;
|
|
|
|
protected function casts(): array
|
|
{
|
|
return [
|
|
'date' => 'date:Y-m-d',
|
|
];
|
|
}
|
|
|
|
/** @return BelongsTo<Tenant, $this> */
|
|
public function tenant(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Tenant::class, 'tenant_code', 'codigo');
|
|
}
|
|
|
|
/** @return HasMany<Variant, $this> */
|
|
public function variants(): HasMany
|
|
{
|
|
return $this->hasMany(Variant::class);
|
|
}
|
|
|
|
/** @return BelongsToMany<Variant, $this> */
|
|
public function selectedByVariants(): BelongsToMany
|
|
{
|
|
return $this->belongsToMany(
|
|
Variant::class,
|
|
'variant_event_dates',
|
|
'event_date_id',
|
|
'variant_id',
|
|
);
|
|
}
|
|
|
|
public function startsAt(): CarbonInterface
|
|
{
|
|
return Carbon::parse($this->date->format('Y-m-d').' '.$this->time_start);
|
|
}
|
|
|
|
public function endsAt(): CarbonInterface
|
|
{
|
|
return Carbon::parse($this->date->format('Y-m-d').' '.$this->time_end);
|
|
}
|
|
}
|