/**
  * Excluded products that can not be purchased
  * We all make a record of all the products that are in the current list
  * For efficiency sake, we do both these things at the same time.
  * IMPORTANT: Adjusts allProducts and returns it...
  * @todo: cache data per user ....
  * @return DataList
  */
 protected function removeExcludedProductsAndSaveIncludedProducts()
 {
     if (is_array($this->canBePurchasedArray) && is_array($this->canNOTbePurchasedArray)) {
         //already done!
     } else {
         $this->canNOTbePurchasedArray = array();
         $this->canBePurchasedArray = array();
         if ($this->config()->get("actively_check_for_can_purchase")) {
             foreach ($this->allProducts as $buyable) {
                 if (!$buyable->canPurchase()) {
                     $this->canNOTbePurchasedArray[$buyable->ID] = $buyable->ID;
                 } else {
                     $this->canBePurchasedArray[$buyable->ID] = $buyable->ID;
                 }
             }
         } else {
             if ($this->rawCount > 0) {
                 $this->canBePurchasedArray = $this->allProducts->map("ID", "ID")->toArray();
             } else {
                 $this->canBePurchasedArray = array();
             }
         }
         if (count($this->canNOTbePurchasedArray)) {
             $this->allProducts = $this->allProducts->Exclude(array("ID" => $this->canNOTbePurchasedArray));
         }
     }
     return $this->allProducts;
 }