count(self::METHODS))CatalogValidator::invalid('payment_methods_override',__('Select a list of supported payment methods, or inherit defaults.','abece-booking')); foreach($value as $method){CatalogValidator::choice($method,'payment_methods_override',self::METHODS);$feature=match($method){'credit'=>'credits','bank_transfer'=>'bank_transfer','qr_payment'=>'bank_qr',default=>null};if($feature)\ABeCe\Booking\Edition\Entitlements::current()->require($feature);} return array_values(array_unique($value)); } public function methods(int $resource_id,string $currency,?int $customer_user_id,int $actor,bool $admin=false): array { $resource=$this->resources->find($resource_id);if(!$resource)throw new CatalogException('abece_booking_not_found',__('The item was not found.','abece-booking'),404); $settings=$this->settings->get();$override=$resource['payment_methods_override']??null;if(is_string($override))$override=json_decode($override,true); $methods=[]; foreach(self::METHODS as $method){ $feature=match($method){'credit'=>'credits','bank_transfer'=>'bank_transfer','qr_payment'=>'bank_qr',default=>null};if($feature&&!\ABeCe\Booking\Edition\Entitlements::current()->has($feature))continue; if($override!==null&&!in_array($method,$override,true))continue; if(in_array($method,['cash','manual'],true)){if($admin&&user_can($actor,Capabilities::MANAGE_CREDIT))$methods[]=$method;continue;} if(!$settings['enable_'.$method])continue; if($method==='credit'&&(!$customer_user_id||($admin&&!user_can($actor,Capabilities::MANAGE_CREDIT))))continue; $profile=null;if(in_array($method,['bank_transfer','qr_payment'],true)){$profile=$this->settings->profiles()->select($currency,$settings['bank_profiles']);if(!$profile)continue;} if($method==='qr_payment'&&!\ABeCe\Booking\Edition\Modules::current()->bankReady($profile,$currency))continue; $methods[]=$method; } return $methods; } public function requireMethod(mixed $method,array $booking,int $actor,bool $admin): void { CatalogValidator::choice($method,'payment_method',self::METHODS); if(!in_array($method,$this->methods($booking['resource_id'],$booking['currency'],$booking['customer_user_id'],$actor,$admin),true))throw new CatalogException('abece_booking_payment_method_disabled',__('This payment method is disabled or unavailable for this booking.','abece-booking'),400,'payment_method'); } }