withoutGlobalScope(YearScope::class) ->when($year !== null, fn (Builder $query): Builder => $query->where('year', $year)) ->where('order_status_id', '<>', Order::STATUS_PAID) ->whereHas('products_sku', function (Builder $query): void { $query->withoutGlobalScope(YearScope::class); }) ->whereDoesntHave('products_sku', function (Builder $query): void { $query ->withoutGlobalScope(YearScope::class) ->where(function (Builder $query): void { $query ->whereNull('statement_number') ->orWhereRaw("TRIM(statement_number) = ''") ->orWhereNull('upd_number') ->orWhereRaw("TRIM(upd_number) = ''"); }); }); } public function markPaidIfAllMafsHavePaymentData(Order|int|null $order): bool { if ($order === null) { return false; } $order = $order instanceof Order ? $order : Order::query()->withoutGlobalScope(YearScope::class)->find($order); if (!$order) { return false; } $mafsQuery = ProductSKU::query() ->withoutGlobalScope(YearScope::class) ->where('order_id', $order->id); if (!(clone $mafsQuery)->exists()) { return false; } $hasIncompleteMafs = (clone $mafsQuery) ->where(function ($query): void { $query ->whereNull('statement_number') ->orWhereRaw("TRIM(statement_number) = ''") ->orWhereNull('upd_number') ->orWhereRaw("TRIM(upd_number) = ''"); }) ->exists(); if ($hasIncompleteMafs) { return false; } if ((int) $order->order_status_id !== Order::STATUS_PAID) { $order->update(['order_status_id' => Order::STATUS_PAID]); } return true; } }