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;
}