File "OrderRepeatResource.php"

Full Path: /home/clickysoft/public_html/jmapi5.clickysoft.net/app/Http/Resources/User/OrderRepeatResource.php
File size: 4.2 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Http\Resources\User;

use Illuminate\Http\Resources\Json\JsonResource;

class OrderRepeatResource extends JsonResource
{
    public function toArray($request)
    {
        $orderItems = $customization_array = [];

        foreach ($this->items as $item) {
            $variations = [];
            foreach ($item->itemVariations as $variation){
                $variations[] = [
                    'id' => $variation->variation?->id,
                    'type' => $variation->variation?->type,
                    'value' => $variation->variation?->value,
                ];
            }

            foreach ($item->orderItemCustomizations as $customization){
                $customization_array['url'][] = $customization->mediaUrl;
            }

            $product = $item->product;

            $productVariations = [];
            foreach ($product->variations ?? [] as $variation){
                $v = $variation->variation;
                if($v){
                    $productVariations[$v->type][] = ['id' => $v->id, 'value' => $v->value];
                }
            }

            $productPrices = [];
            foreach ($product->prices ?? [] as $price){
                $combinations = $ranges = [];

                foreach ($price->combinations ?? [] as $combination){
                    $combinations[] = [
                        'variation_id' => $combination->variation_id,
                    ];
                }

                foreach ($price->priceRanges ?? [] as $range){
                    $ranges[] = [
                        'qty_from'  => $range->qty_from,
                        'qty_to'    => $range->qty_to,
                        'price'     => $range->price,
                    ];
                }

                $productPrices[$price->id] = [
                    'price_id'               => $price->id,
                    'supplier_prod_number'   => $price->supplier_prod_number,
                    'product_sketch'         => $price->product_sketch_media,
                    'min_price'              => $price->min_price,
                    'max_price'              => $price->max_price,
                    'combination'            => $combinations,
                    'ranges'                 => $ranges,
                ];
            }

            $productDetails = [
                'id'                => $product->id,
                'sku'               => $product->sku,
                'name'              => $product->name,
                'description'       => $product->description,
                'category'          => $product->category?->name,
                'featured_image'    => $product->featured_image ? [
                $product->featured_image->url,
                $product->featured_image->thumbnail,
                $product->featured_image->preview
                ] :[],
                'gallery_images'    => $product->gallery_images,
                'variations'        => $productVariations,
                'product_prices'    => $productPrices
            ];

            $orderItems[] = [
                'item_id' => $item->id,
                'product_id' => $item->product_id,
                'price_id' => $item->price_id,
                'quantity' => $item->quantity,
                'price' => $item->price,
                'customization' => json_decode($item->customization ?? '[]'),
                'template' => $item->template_media,
                'image' => $item->imageUrl,
                'variations' => $variations,
                'notes' => $item->notes,
                'approved_consent' => $item->approved_consent ? 'Yes': 'No',
                'product_detail' => $productDetails
            ];
        }

        return [
            'rush_order' => $this->rush_order,
            'shipping_address_id' => $this->shipping_address_id,
            'billing_address_id' => $this->billing_address_id,
            'pickup_location_id' => $this->pickup_location_id,
            'delivery_date' => $this->delivery_date?->format('m-d-Y'),
            'event_date' => $this->event_date?->format('m-d-Y'),
            'delivery_type' => $this->delivery_type,
            'description' => $this->description,
            'products' => $orderItems,
        ];
    }
}