/**
  * disconnect
  * --------------------------------------------------
  * Disconnecting the user from braintree.
  * @throws StripeNotConnected
  * --------------------------------------------------
  */
 public function disconnect()
 {
     /* Check valid connection */
     if (!$this->user->isStripeConnected()) {
         throw new StripeNotConnected();
     }
     /* Deleting connection */
     $this->user->connections()->where('service', 'stripe')->delete();
     /* Deleting all widgets, plans, subscribtions */
     foreach ($this->user->widgets() as $widget) {
         if ($widget->descriptor->category == 'stripe') {
             /* Saving data while it is accessible. */
             $dataID = 0;
             if (!is_null($widget->data)) {
                 $dataID = $widget->data->id;
             }
             $widget->delete();
             /* Deleting data if it was present. */
             if ($dataID > 0) {
                 Data::find($dataID)->delete();
             }
         }
     }
     /* Deleting all plans. */
     foreach ($this->user->stripePlans as $stripePlan) {
         StripeSubscription::where('plan_id', $stripePlan->id)->delete();
         $stripePlan->delete();
     }
 }
 /**
  * getNumberOfCustomers
  * --------------------------------------------------
  * Getting the number of customers.
  * @return The number of customers.
  * @throws StripeNotConnected
  * --------------------------------------------------
  */
 public function getNumberOfCustomers($update = False)
 {
     if ($update) {
         $this->updateSubscriptions();
     }
     $customerIDs = array();
     foreach (StripePlan::where('user_id', $this->user->id)->get() as $stripePlan) {
         foreach (StripeSubscription::where('plan_id', $stripePlan->id)->get() as $subscription) {
             if (!in_array($subscription->customer, $customerIDs)) {
                 array_push($customerIDs, $subscription->customer);
             }
         }
     }
     return count($customerIDs);
 }
 /**
  * handleSubscriptionCreation
  * --------------------------------------------------
  * Handling subscription creation.
  * On creation we'll have to delete a subscription.
  * @param eventThe specific stripe event.
  * --------------------------------------------------
  */
 private function handleSubscriptionCreation($event)
 {
     $subscriptionData = $event['data']['object'];
     StripeSubscription::where('subscription_id', $subscriptionData['id'])->first()->delete();
 }