public function updateHeatmapCredits($memberId) { $memberCreditsExp = MemberCredits::get()->filter(array('ProductID' => array(1, 2, 3), 'MemberID' => $memberId, 'ExpireDate:GreaterThan' => date('Y-m-d H:i:s')))->subtract(MemberCredits::get()->filter(array('ProductID' => array(1, 2, 3), 'MemberID' => $memberId, 'Credits:LessThan' => 1)))->sort(array('ExpireDate' => 'ASC'))->First(); if ($memberCreditsExp) { $memberCreditsExp->Credits = $memberCreditsExp->Credits - 1; $memberCreditsExp->write(); return true; } $memberCreditsNonExp = MemberCredits::get()->filter(array('ProductID' => array(4, 5, 6, 7), 'MemberID' => $memberId))->subtract(MemberCredits::get()->filter(array('ProductID' => array(4, 5, 6, 7), 'MemberID' => $memberId, 'Credits:LessThan' => 1)))->sort(array('Created' => 'ASC'))->First(); if ($memberCreditsNonExp) { $memberCreditsNonExp->Credits = $memberCreditsNonExp->Credits - 1; $memberCreditsNonExp->write(); return true; } return false; }
public function updateSubscriptionsRoutine() { //Get InfusionSoft Api $app = $this->getInfusionSoftApi(); $date = date('Y-m-d', strtotime("-1 days")); $subscriptions = Subscription::get()->filter(array('Status' => 1, 'ExpireDate:LessThan' => $date)); if ($subscriptions) { foreach ($subscriptions as $subscription) { //Get user details $subscriptionId = $subscription->SubscriptionID; $isContactId = $subscription->Member()->ISContactID; $isProductId = $subscription->Product()->ISProductID; $emailAddress = $subscription->Member()->Email; $productId = $subscription->ProductID; $member = $subscription->Member(); $subscriptionPayStatus = $this->getSubscriptionPayStatus($subscriptionId, $isContactId, $isProductId); if ($subscriptionPayStatus) { //Update the subscription $nextBillDate = $this->getSubscriptionNextBillDate($subscription->SubscriptionID); $renewalExpireDate = date('Y-m-d H:i:s', strtotime($nextBillDate)); $renewalStartDate = date('Y-m-d H:i:s', strtotime($renewalExpireDate . "-30 days")); $subscription->StartDate = $renewalStartDate; $subscription->ExpireDate = $renewalExpireDate; $subscription->IsTrial = 0; $subscription->SubscriptionCount += 1; $subscription->write(); //Get current credit card $creditCard = $this->getCurrentCreditCard($member->ID); //Create billing history record $billingHistory = new MemberBillingHistory(); $billingHistory->MemberID = $member->ID; $billingHistory->CreditCardID = $creditCard->ID; $billingHistory->ProductID = $productId; $billingHistory->SubscriptionID = $subscription->ID; $billingHistory->write(); //Update member credits $memberCredits = MemberCredits::get()->filter(array('MemberID' => $member->ID, 'SubscriptionID' => $subscription->ID))->first(); $memberCredits->Credits = $subscription->Product()->Credits; $memberCredits->ExpireDate = $renewalExpireDate; $memberCredits->write(); //Update Infusionsoft contact $isTagId = $this->getISTagIdByProduct($productId); $app->grpRemove($isContactId, $isTagId); $app->grpAssign($isContactId, $isTagId); // Update subscription contacts $app->grpRemove($isContactId, 2216); $returnFields = array('_AWofmonths'); $conDat = $app->loadCon($isContactId, $returnFields); $conDat = array('_AWofmonths' => $conDat['_AWofmonths'] + 1, '_AttentionWizard' => 'Paid and Current', 'ContactType' => 'AW Customer', '_AWcanceldate' => null); $app->updateCon($isContactId, $conDat); // Remove previous cancel tags $app->grpRemove($isContactId, 2226); $app->grpRemove($isContactId, 2758); $app->grpRemove($isContactId, 2682); $app->grpRemove($isContactId, 2680); $app->grpRemove($isContactId, 2694); $app->grpRemove($isContactId, 3019); } else { //Set the subscription to inactive $result = $this->setSubscriptionStatus($subscription->SubscriptionID, 'Inactive'); if (is_int($result)) { //Update Infusionsoft contact //get the current date $curdate = $app->infuDate(date('j-n-Y')); // Custom fields populated $conDat = array('_AttentionWizard' => 'Cancelled due to card decline', '_AWcanceldate' => $curdate); $app->updateCon($isContactId, $conDat); // Remove tag trial member $app->grpRemove($isContactId, 2216); if ($this->isTrialMember($member->ID)) { // Add Cancel after trial tag $app->grpAssign($isContactId, 2226); // Add CXL Card declined tag $app->grpAssign($isContactId, 2682); } else { // Add CXL Card declined tag $app->grpAssign($isContactId, 2682); } // Note is added if ($this->isTrialMember($member->ID)) { $conActionDat = array('ContactId' => $isContactId, 'ActionType' => 'UPDATE', 'ActionDescription' => "Cancelled AW Trial", 'CreationDate' => $curdate, 'CreationNotes' => "Credit card charge failed", 'ActionDate' => $curdate, 'CompletionDate' => $curdate, 'UserID' => 1); } else { $conActionDat = array('ContactId' => $isContactId, 'ActionType' => 'UPDATE', 'ActionDescription' => "Payment declined by Auth.net - account cancelled", 'CreationDate' => $curdate, 'CreationNotes' => "Credit card charge failed", 'ActionDate' => $curdate, 'CompletionDate' => $curdate, 'UserID' => 1); } $conActionID = $app->dsAdd("ContactAction", $conActionDat); //Set the subscription inactive on site $subscription->Status = 0; $subscription->write(); //Send a notification email to support $email = new Email(); $email->setSubject("AW Notification - auto payment failed"); $email->setFrom('*****@*****.**'); $email->setTo('*****@*****.**'); $email->setTemplate('PaymentFailedEmail'); $email->populateTemplate(array('emailAddress' => $emailAddress, 'subscriptionId' => $subscription->SubscriptionID)); $email->send(); } } } } }