File: D:/HostingSpaces/centrum8a/centrum8a.com/app/KommaApp/Shop/Orders/Product/OrderedProduct.php
<?php
namespace App\KommaApp\Shop\Orders\Product;
use App\KommaApp\Documents\Kms\DocumentableInterface;
use App\KommaApp\Documents\Models\Document;
use App\KommaApp\Images\Models\Image;
use App\KommaApp\Kms\Core\AbstractTranslatableModel;
use App\KommaApp\Shop\Categories\Kms\CategorizableInterface;
use App\KommaApp\Shop\Categories\Models\Category;
use App\KommaApp\Shop\Discounts\DiscountableInterface;
use App\KommaApp\Shop\Discounts\Discount;
use App\KommaApp\Shop\Orders\Models\Order;
use App\KommaApp\Shop\Orders\ProductGroup\OrderedProductGroup;
use App\KommaApp\Shop\Products\Product\Product;
use App\KommaApp\Shop\Products\ProductGroup\ProductGroup;
use App\KommaApp\Sites\Models\Site;
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\Database\Eloquent\Relations\MorphMany;
use Illuminate\Database\Eloquent\Relations\MorphToMany;
use App\KommaApp\Kms\Core\HasImagesInterface;
use Illuminate\Support\Collection;
/**
* Represents a basic ordered product that a user did order.
*
* Use the product method to get the product this orderedProduct was based of.
*
* Class Product
*
* @package App
* @property int $id
* @property int $order_id
* @property int $product_id
* @property int $active
* @property string $title
* @property int $price Total price with discounts applied
* @property string $stock_keeping_unit
* @property int $quantity Total amount with discounts applied
* @property string $discount Applied discount information. Example: 10% + 1 for free. Product level only
* @property \Carbon\Carbon|null $created_at
* @property \Carbon\Carbon|null $updated_at
* @property-read \App\KommaApp\Shop\Orders\Models\Order $order
* @property-read \Illuminate\Database\Eloquent\Collection|\App\KommaApp\Shop\Orders\ProductGroup\OrderedProductGroup[] $orderedGroups
* @property-read \App\KommaApp\Shop\Products\Product\Product $product
* @method static \Illuminate\Database\Eloquent\Builder|\App\KommaApp\Shop\Orders\Product\OrderedProduct whereActive($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\KommaApp\Shop\Orders\Product\OrderedProduct whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\KommaApp\Shop\Orders\Product\OrderedProduct whereDiscount($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\KommaApp\Shop\Orders\Product\OrderedProduct whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\KommaApp\Shop\Orders\Product\OrderedProduct whereOrderId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\KommaApp\Shop\Orders\Product\OrderedProduct wherePrice($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\KommaApp\Shop\Orders\Product\OrderedProduct whereProductId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\KommaApp\Shop\Orders\Product\OrderedProduct whereQuantity($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\KommaApp\Shop\Orders\Product\OrderedProduct whereStockKeepingUnit($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\KommaApp\Shop\Orders\Product\OrderedProduct whereTitle($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\KommaApp\Shop\Orders\Product\OrderedProduct whereUpdatedAt($value)
* @mixin \Eloquent
*/
class OrderedProduct extends Model
{
/*
* Transient properties on Eloquent models
* These are not saved to database.
*/
public $thumbnail = false;
/** @var Discount[] $discounts */
private $discounts = [];
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['title', 'active', 'price', 'stock_keeping_unit', 'quantity', 'discount'];
/**
* Return the order
*
* @return BelongsToMany
*/
public function order():BelongsToMany
{
return $this->belongsToMany(Order::class);
}
/**
* 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);
}
/**
* Price is in cents
*
* @return float
*/
public function getTotal(): float
{
return $this->price;
}
public function getName(): string
{
return $this->title;
}
/**
* Applies the discount to itself
*
* @param Discount $discount
* @return DiscountableInterface
*/
public function applyDiscount(Discount $discount): DiscountableInterface
{
$this->discounts = [];
}
}