File: D:/HostingSpaces/SBogers10/shop.komma.nl/app/Orders/Product/OrderedProduct.php
<?php
namespace App\Orders\Product;
use App\Shipments\Shipment;
use App\Vat\FinancialProperties;
use App\Vat\HasFinancialPropertiesInterface;
use Komma\KMS\Core\Attributes\Models\Traits\HasThumbnailInterface;
use Komma\KMS\Core\Attributes\Models\Traits\HasThumbnailTrait;
use App\Discounts\DiscountableInterface;
use App\Discounts\Discount;
use App\Orders\Models\Order;
use App\Orders\OrderedProductableInterface;
use App\Orders\ProductGroup\OrderedProductGroup;
use App\Products\Product\Product;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\MorphTo;
/**
* App\Orders\Product\OrderedProduct
*
* @property int $id
* @property int $orderable_id
* @property string $orderable_type
* @property int $product_id
* @property string $name The name that you can show to a customer. Will be in the language that the product was ordered in
* @property int $active
* @property int $price Total price with discounts applied.
* @property string $vat_scenario_enum The vat_scenario_enum at the moment of ordering. Ase in combination with the vat_percentage column
* @property int $vat_percentage The vat percentage at the moment of ordering
* @property string $stock_keeping_unit
* @property int $quantity Total amount with discounts applied
* @property int|null $shipment_id
* @property int $status
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read Model|\Eloquent $orderable
* @property-read \Illuminate\Database\Eloquent\Collection|OrderedProductGroup[] $orderedGroups
* @property-read int|null $ordered_groups_count
* @property-read Product $product
* @property-read Shipment|null $shipment
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct query()
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct whereActive($value)
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct whereOrderableId($value)
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct whereOrderableType($value)
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct wherePrice($value)
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct whereProductId($value)
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct whereQuantity($value)
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct whereShipmentId($value)
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct whereStatus($value)
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct whereStockKeepingUnit($value)
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct whereVatPercentage($value)
* @method static \Illuminate\Database\Eloquent\Builder|OrderedProduct whereVatScenarioEnum($value)
* @mixin \Eloquent
*/
class OrderedProduct extends Model implements HasThumbnailInterface, OrderedProductableInterface, HasFinancialPropertiesInterface
{
use HasThumbnailTrait;
use FinancialProperties;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['active', 'name', 'price', 'vat_scenario_enum', 'vat_percentage', 'stock_keeping_unit', 'quantity', 'discount', 'status'];
/**
* Return the order or product group this ordered product belongs to
*
* @see Order
* @see OrderedProductGroup
* @return MorphTo
*/
public function orderable(): MorphTo
{
return $this->morphTo();
}
public function getPrice(): float
{
return $this->price;
}
/**
* Return the product
*
* @return BelongsTo
*/
public function product():BelongsTo
{
return $this->belongsTo(Product::class);
}
/**
* Return the groups
*
* @return BelongsToMany
*/
public function orderedGroups()
{
return $this->belongsToMany(OrderedProductGroup::class);
}
public function shipment() {
return $this->belongsTo(Shipment::class);
}
}