/** * @return array */ public function availableGatewaysIds() { if (!$this->relationLoaded('account_gateways')) { $this->load('account_gateways'); } $gatewayTypes = []; $gatewayIds = []; foreach ($this->account_gateways as $accountGateway) { $paymentDriver = $accountGateway->paymentDriver(); $gatewayTypes = array_unique(array_merge($gatewayTypes, $paymentDriver->gatewayTypes())); } foreach (Cache::get('gateways') as $gateway) { $paymentDriverClass = AccountGateway::paymentDriverClass($gateway->provider); $paymentDriver = new $paymentDriverClass(); $available = true; foreach ($gatewayTypes as $type) { if ($paymentDriver->handles($type)) { $available = false; break; } } if ($available) { $gatewayIds[] = $gateway->id; } } return $gatewayIds; }