Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
PurchaseOrderItemResource
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 2
12
0.00% covered (danger)
0.00%
0 / 1
 toArray
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
2
 processBalance
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace Domain\PurchaseOrder\Resources;
4
5use App\Models\PurchaseOrder\PurchaseOrderItem;
6use Domain\Integration\Resources\IntegrationResource;
7use Domain\Product\Resources\ProductResource;
8use Illuminate\Http\Request;
9use Illuminate\Http\Resources\Json\JsonResource;
10
11class PurchaseOrderItemResource extends JsonResource
12{
13    /**
14     * @property int $id
15     * @property PurchaseOrder $purchase_orders
16     * @property PurchaseOrderInvoiceItem $purchase_order_invoice_item
17     * @property Product $products
18     * @property number $amount
19     * @property number $balance
20     * @property Integration $integration
21     * @return array<string, mixed>
22     */
23    public function toArray(Request $request): array
24    {
25        $remainderBalance = $this->processBalance();
26
27        return [
28            'id'                          => $this->id,
29            'purchase_order'              => PurchaseOrderResource::make($this->whenLoaded('purchaseOrder')),
30            'purchase_order_invoice_item' => PurchaseOrderInvoiceItemResource::collection($this->whenLoaded('purchaseOrderInvoiceItem')),
31            'product'                     => ProductResource::make($this->whenLoaded('product')),
32            'amount'                      => $this->amount,
33            'balance'                     => $remainderBalance ?? $this->balance,
34            'integration'                 => IntegrationResource::make($this->whenLoaded('integration'))
35        ];
36    }
37
38    private function processBalance(): string|null
39    {
40        $remainBalance = PurchaseOrderItem::query()
41            ->leftJoin('purchase_order_invoice_items', 'purchase_order_invoice_items.purchase_order_item_id', '=', 'purchase_order_items.id')
42            ->selectRaw("(purchase_order_items.balance - sum(purchase_order_invoice_items.amount)) as remainderBalance")
43            ->where('purchase_order_items.id', $this->id)
44            ->groupBy(
45                'purchase_order_items.balance',
46                'purchase_order_items.id'
47            )
48            ->first();
49
50        if(isset($remainBalance)){
51            return $remainBalance->remainderbalance;
52        } else {
53            return null;
54        }
55    }
56}