File "WorkOrder.php"

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

<?php

namespace App\Http\Resources\Admin;

use App\Models\SiteSetting;
use Illuminate\Http\Resources\Json\JsonResource;

class WorkOrder extends JsonResource
{
    public function toArray($request)
    {

        $order_items = [];
        $user = $this->user;

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

            foreach ($item->customizationSvg as $svg){
                $svgs[] = [
                    'order_id' => $svg->order_id,
                    'order_item_id' => $svg->order_item_id,
                    'customization_index' => $svg->customization_index,
                    'url' => $svg->customization_svg_url,
                ];
            }

            $order_items[] = [
                'product_id' => $item->product?->id,
                'product_description' => $item->product?->description,
                'product_sku' => $item->productPrice?->supplier_prod_number,
                'product_image' => $item->product?->featured_image?->preview,
                'product' => $item->product?->name,
                'quantity' => $item->quantity,
                'product_customization' => json_decode($item->customization ?? '[]'),
                'sketch_file' => $item->productPrice?->product_sketch_media,
                'template' => $item->template_media ?: 'N/A',
                'image' => $item->imageUrl ?: 'N/A',
                'variations' => $variations,
                'notes' => $item->notes,
                'customization_svgs' => $svgs,
                'template_pages' => getTemplatePngs($this->user_id, $item->id),
            ];
        }

        //Business Information
        $site_email = SiteSetting::where('key', 'Site Email')->first();
        $site_phone = SiteSetting::where('key', 'Site Phone')->first();
        $location_1 = SiteSetting::where('key', 'Location')->first();
        $location_2 = SiteSetting::where('key', 'Location 2')->first();

        $business_information = [
            'site_email' => $site_email->value ?? "NA",
            'site_phone' => $site_phone->value ?? "NA",
            'location_1' => $location_1->value ?? "NA",
            'location_2' => $location_2->value ?? "NA",
        ];

        return [
            'invoice'  => $this->invoice ? [
                "invoice_number"  => $this->invoice->invoice_number,
                "invoice_date" => $this->invoice->created_at->format('m/d/Y')
            ] : null,
            'assigned_to' => $this->assigned_to?->name,
            'rush_order' => $this->rush_order,
            'rush_order_fee' => ($this->rush_order_fee ?? 0).'%',
            'order_number' => $this->order_number,
            'tracking_number' => $this->tracking_number,
            'payment_status' => $this->payment_status,
            'payment_date' => $this->formated_payment_date,
            'payment_type' => $this->payment_type,
            'cc_details' => $this->payment ? [
                'last_four' => $this->payment->last_four,
                'card_type' => $this->payment->account_type,
                'payment_date' => $this->payment->created_at->format('m/d/Y'),
                'transaction_id' => $this->payment->transaction_id
            ] : [],
            'cheque_number' => $this->cheque_number,
            'purchase_order_number' => $this->purchase_order_number ?? 'N/A',
            'purchase_order_copy' => $this->purchase_order_copy_url ?? 'N/A',
            'date_pick_or_ship_by' => $this->date_pick_or_ship_by?->format('m/d/Y'),
            'event_date' => $this->event_date?->format('m/d/Y'),
            'created_at' => $this->created_at?->format('m/d/Y H:i:s'),
            'delivery_type' => $this->delivery_type,
            'pickup_location_title' => $this->pickLocation?->title,
            'pickup_location_address' => $this->pickLocation?->address,
            'billing_details' => [
                'billing_company_name' => $this->billing_company_name,
                'billing_primary_contact_name' => $this->billing_primary_contact_name,
                'billing_primary_contact_email' => $this->billing_primary_contact_email,
                'billing_secondary_contact_name' => $this->billing_secondary_contact_name,
                'billing_secondary_contact_email' => $this->billing_secondary_contact_email,
                'billing_address_line_1' => $this->billing_address_line_1,
                'billing_address_line_2' => $this->billing_address_line_2,
                'billing_city' => $this->billing_city,
                'billing_state' => $this->billing_state,
                'billing_zipcode' => $this->billing_zipcode,
                'billing_phone_number' => $this->billing_phone_number,
            ],
            'shipping_details' => $this->delivery_type == 'Shipping' ? [
                'career_code' => str_replace('_', ' ', $this->career_code),
                'service_code' => str_replace('_', ' ', $this->service_code),
                'package_type_code' => str_replace('_', ' ', $this->package_type_code),
                'shipping_company_name' => $this->shipping_company_name,
                'shipping_primary_contact_name' => $this->shipping_primary_contact_name,
                'shipping_primary_contact_email' => $this->shipping_primary_contact_email,
                'shipping_secondary_contact_name' => $this->shipping_secondary_contact_name,
                'shipping_secondary_contact_email' => $this->shipping_secondary_contact_email,
                'shipping_address_line_1' => $this->shipping_address_line_1,
                'shipping_address_line_2' => $this->shipping_address_line_2,
                'shipping_city' => $this->shipping_city,
                'shipping_state' => $this->shipping_state,
                'shipping_zipcode' => $this->shipping_zipcode,
            ] : [],
            'description' => $this->description,
            'current_status' => $this->current_status?->name,
            'stock_location' => $this->stockLocation ? $this->stockLocation->location : null,
            'business_information' => $business_information,
            'products' => $order_items,
            'user' => $user ? [
                'name' => $user->name,
                'email' => $user->email,
                'phone_number' => $user->phone_number,
            ] : [],
            'relational_shipping_address' => $this->shipping_address ? [
                'company_name' => $this->shipping_address->company_name,
                'primary_contact_name' => $this->shipping_address->primary_contact_name,
                'primary_contact_email' => $this->shipping_address->primary_contact_email,
                'secondary_contact_name' => $this->shipping_address->secondary_contact_name,
                'secondary_contact_email' => $this->shipping_address->secondary_contact_email,
                'address_line_1' => $this->shipping_address->address_line_1,
                'address_line_2' => $this->shipping_address->address_line_2,
                'city' => $this->shipping_address->city,
                'state' => $this->shipping_address->state->name,
                'zipcode' => $this->shipping_address->zipcode,
                'phone_number' => $this->shipping_address->phone_number,
            ] : [],
            'relational_billing_address' => $this->billing_address ? [
                'company_name' => $this->billing_address->company_name,
                'primary_contact_name' => $this->billing_address->primary_contact_name,
                'primary_contact_email' => $this->billing_address->primary_contact_email,
                'secondary_contact_name' => $this->billing_address->secondary_contact_name,
                'secondary_contact_email' => $this->billing_address->secondary_contact_email,
                'address_line_1' => $this->billing_address->address_line_1,
                'address_line_2' => $this->billing_address->address_line_2,
                'city' => $this->billing_address->city,
                'state' => $this->billing_address->state->name,
                'zipcode' => $this->billing_address->zipcode,
                'phone_number' => $this->billing_address->phone_number,
            ] : [],
        ];
    }
}