File: D:/HostingSpaces/SBogers10/shop.komma.nl/app/Products/Product/ProductResource.php
<?php
namespace App\Products\Product;
use App\Products\ProductGroup\ProductGroup;
use App\Properties\Resources\Property;
use Illuminate\Http\Resources\Json\Resource;
use Komma\KMS\Documents\Resources\Document as DocumentResource;
use Komma\KMS\Globalization\RegionInfo;
use Komma\KMS\Globalization\RegionInfoInterface;
/**
* Class ProductResource
*
* @see Product
* @see ProductGroup
* @see ProductTranslation
*
* @mixin Product
* @package App\Products\Product
*/
class ProductResource extends Resource
{
/**
* @var RegionInfo
*/
private $regionInfo;
public function __construct($resource)
{
$this->regionInfo = app(RegionInfoInterface::class);
parent::__construct($resource);
}
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @see Product
* @return array
*/
public function toArray($request)
{
return [
'productableClass' => get_class($this->resource),
'id' => $this->id,
'active' => $this->active,
'currencySymbol' => $this->regionInfo->getCurrencySymbol(),
'stockKeeping_unit' => $this->stock_keeping_unit,
// 'groups' => $this->whenLoaded('groups', ProductGroupResource::collection($this->groups)), //Dont go back up to prevent infinite loops. Go from product composite to product group, to product instead.
'translation' => $this->whenLoaded('translation', new ProductTranslationResource($this->translation)),
'translations' => $this->whenLoaded('translations', ProductTranslationResource::collection($this->translations)),
'properties' => $this->whenLoaded('properties', Property::collection($this->properties)),
'imageUrl' => $this->whenLoaded('images', $this->images->where('medium_image_url', '!=', null)->first()->medium_image_url ?? url('/img/placeholders/productable_placeholder.svg')),
'displayName' => $this->getDisplayName(),
'sidebarName' => $this->getSidebarName(),
'price' => $this->price,
'priceInc' => $this->getPriceInc(),
'priceEx' => $this->getPriceEx(),
'vatAmount' => $this->getVatAmount(),
'priceFormatted' => $this->regionInfo->getNumberFormat()->centsToCurrency($this->price, true, true),
'priceIncFormatted' => $this->regionInfo->getNumberFormat()->centsToCurrency($this->getPriceInc(), true, true),
'priceExFormatted' => $this->regionInfo->getNumberFormat()->centsToCurrency($this->getPriceEx(), true, true),
'vatAmountFormatted' => $this->regionInfo->getNumberFormat()->centsToCurrency($this->getVatAmount(), true, true),
'images' => DocumentResource::collection($this->images),
'documents' => DocumentResource::collection($this->documents)
];
}
}