Scalr_Billing::getInfo PHP Method

getInfo() public method

public getInfo ( )
    public function getInfo()
    {
        if ($this->subscriptionId) {
            $subscription = $this->chargify->getSubscription($this->subscriptionId);
            $trialsDaysLeft = null;
            if ($subscription['subscription']['trial_ended_at']) {
                $trialsDaysLeft = round((strtotime($subscription['subscription']['trial_ended_at']) - time()) / 86400);
            }
            $retval = array('state' => ucfirst($subscription['subscription']['state']), 'nextAssessmentAtTimestamp' => $subscription['subscription']['next_assessment_at'] ? strtotime($subscription['subscription']['next_assessment_at']) : "", 'subscriptionActivatedAt' => $subscription['subscription']['activated_at'] ? strtotime($subscription['subscription']['activated_at']) : "", 'cancelledAt' => $subscription['subscription']['canceled_at'] ? strtotime($subscription['subscription']['canceled_at']) : "", 'createdAt' => $subscription['subscription']['created_at'] ? strtotime($subscription['subscription']['created_at']) : "", 'trialDaysLeft' => $trialsDaysLeft, 'trialEndedAt' => $subscription['subscription']['trial_ended_at'] ? strtotime($subscription['subscription']['trial_ended_at']) : "", 'nextAssessmentAt' => $subscription['subscription']['next_assessment_at'] ? date("M d Y", strtotime($subscription['subscription']['next_assessment_at'])) : "Unknown", 'ccNumber' => $subscription['subscription']['credit_card']['masked_card_number'], 'ccType' => ucfirst($subscription['subscription']['credit_card']['card_type']), 'productHandle' => $subscription['subscription']['product']['handle'], 'nextAmount' => (int) $subscription['subscription']['product']['price_in_cents'] / 100, 'productName' => $subscription['subscription']['product']['name'], 'productPrice' => (int) $subscription['subscription']['product']['price_in_cents'] / 100, 'balance' => -1 * (int) $subscription['subscription']['balance_in_cents'] / 100, 'couponCode' => $subscription['subscription']['coupon_code'], 'id' => (int) $subscription['subscription']['id'], 'delayedCancelAt' => $subscription['subscription']['delayed_cancel_at']);
            if ($retval['couponCode']) {
                try {
                    $coupon = $this->chargify->getCouponDetails($retval['couponCode']);
                    if ($coupon['coupon']['amount_in_cents']) {
                        $discount = (int) $coupon['coupon']['amount_in_cents'] / 100;
                        $retval['couponDiscount'] = '$' . $discount;
                        if ($coupon['coupon']['recurring']) {
                            $retval['couponDiscount'] .= " / month";
                            $retval['nextAmount'] = $retval['nextAmount'] - $discount;
                        }
                    } elseif ($coupon['coupon']['percentage']) {
                        $retval['couponDiscount'] = $coupon['coupon']['percentage'] . "%";
                        $discount = round((int) $retval['nextAmount'] / 100 * $coupon['coupon']['percentage']);
                        if ($coupon['coupon']['recurring']) {
                            $retval['couponDiscount'] .= " / month";
                            $retval['nextAmount'] = $retval['nextAmount'] - $discount;
                        }
                    }
                } catch (Exception $e) {
                }
                /*
                $customCoupon = $this->db->GetOne("SELECT id FROM billing.coupons WHERE chargify_coupon_id = ? AND scalr_account_id=? LIMIT 1", array(
                    $retval['couponCode'], $this->account->id
                ));
                if ($customCoupon)
                    $retval['couponCode'] = $customCoupon;
                */
            }
            try {
                $components = $this->chargify->getSubscriptionComponents($this->subscriptionId);
                // Scalr Compute Units
                if ($retval['productHandle'] == self::PAY_AS_YOU_GO) {
                    $freeSCUs = 5000;
                } else {
                    $freeSCUs = -1;
                }
                $priceSCU = 0.02;
                $retval['scu'] = array('usage' => $components[13490]['unit_balance'] > $freeSCUs ? $freeSCUs : $components[13490]['unit_balance'], 'limit' => $freeSCUs, 'paid' => $components[13490]['unit_balance'] > $freeSCUs ? $components[13490]['unit_balance'] - $freeSCUs : 0, 'price' => $priceSCU, 'current_usage' => $this->getCurrentScuUsage());
                $retval['scu']['cost'] = round($retval['scu']['paid'] * $retval['scu']['price'], 2);
                if ($retval['productHandle'] == self::PAY_AS_YOU_GO) {
                    $retval['nextAmount'] = $retval['nextAmount'] + $retval['scu']['cost'];
                }
                //Emerg support
                if ($retval['state'] == 'Active' || $retval['state'] == 'Past_due') {
                    if (in_array($retval['productHandle'], array(self::PACKAGE_WD, self::PACKAGE_MONOPOLY))) {
                        $retval['emergSupport'] = 'included';
                    } else {
                        $retval['emergSupport'] = $components['6026']['enabled'] ? 'enabled' : 'disabled';
                    }
                    if ($retval['emergSupport'] == 'included' || $retval['emergSupport'] == 'enabled') {
                        $retval['emergPhone'] = '[Emergency phone number: <b>' . \Scalr::config('scalr.billing.emergency_phone_number') . '</b>]';
                    }
                }
                $additionalEnvironments = (int) $components['6027']['allocated_quantity'];
                $retval['environmentsLimit'] = $additionalEnvironments + 1;
            } catch (Exception $e) {
            }
            $retval['isLegacyPlan'] = in_array($subscription['subscription']['product']['handle'], array(self::PACKAGE_BETA_LEGACY, self::PACKAGE_DEVELOPMENT_LEGACY, self::PACKAGE_MC_LEGACY, self::PACKAGE_PRODUCTION_LEGACY));
        }
        if ($this->customerId && !$this->subscriptionId) {
            // Development account
            $retval = array('state' => ucfirst('Active'), 'nextAssessmentAt' => false, 'ccNumber' => "", 'ccType' => "", 'nextAmount' => 0, 'productName' => "Development (LEGACY)", 'productPrice' => 0, 'balance' => 0, 'isLegacyPlan' => true, 'id' => false, 'type' => 'development');
        }
        $retval['realState'] = isset($retval['state']) ? $retval['state'] : null;
        switch ($retval['realState']) {
            case "Active":
                if (!$retval['delayedCancelAt']) {
                    $retval['state'] = 'Subscribed';
                } else {
                    $retval['nextAssessmentAt'] = false;
                    $retval['state'] = 'Unsubscribed';
                }
                break;
            case "Trialing":
                $retval['state'] = 'Trial';
                break;
            case "Trial_ended":
            case "Canceled":
                $retval['nextAssessmentAt'] = false;
                $retval['state'] = 'Unsubscribed';
                break;
            case "Past_due":
            case "Assessing":
                $retval['state'] = 'Behind on payment';
                break;
        }
        return $retval;
    }

Usage Example

Example #1
0
 public function billingInfoAction()
 {
     $this->response->data($this->billing->getInfo());
 }