From a40be616f51e12b299633cc2557bcd3d9bfb5d79 Mon Sep 17 00:00:00 2001 From: Steve Sutton Date: Thu, 5 Sep 2019 11:00:56 -0400 Subject: [PATCH] Change how the renewal date update method is done. If the site is using same date for renewals then when renewing memberships it should use that date. If the site has different renewal dates for each membership then the renewal date should stay on the same day and month each year. --- classes/billingSupport.php | 64 ++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 23 deletions(-) diff --git a/classes/billingSupport.php b/classes/billingSupport.php index 0db862d..5e33aca 100644 --- a/classes/billingSupport.php +++ b/classes/billingSupport.php @@ -1782,32 +1782,50 @@ class GlmBillingSupport */ public function updateAccountRenewalDate( $account ) { + // Get billing Settings for the renewal dates. + $renewal_day_static = $this->config['settings']['renewal_day_static']; + $renewal_day = $this->config['settings']['renewal_day']; + $renewal_month = $this->config['settings']['renewal_month']; $days_after_expired = $this->config['settings']['days_after_expired']; $days_before_renewal = $this->config['settings']['days_before_renewal']; - // Grab current renewal date - $current_renewal_date = $this->wpdb->get_var( - $this->wpdb->prepare( - "SELECT renewal_date - FROM " . GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . "accounts - WHERE id = %d", - $account - ) - ); - if ( $current_renewal_date ) { - $renewal_date = new DateTime( $current_renewal_date ); - // Get earliest date this one can renewal with. - $earliest_date = $renewal_date->modify( '-' . $days_before_renewal . ' days + 1 year' ); - $year_part = substr( $current_renewal_date, 0, 4 ); - $the_rest = substr( $current_renewal_date, 4 ); - // Adjust the year to current year - $new_renewal_date = date( 'Y' ) . $the_rest; - $test_renewal_date = new DateTime( $new_renewal_date ); - if ( $test_renewal_date->getTimestamp() < $earliest_date->getTimestamp() ) { - // Adjust the year. - $new_renewal_date = ( date( 'Y' ) - 1 ) . $the_rest; - } + if ( $renewal_day_static ) { + // If the renewal days are alway the same then use that date. + $new_renewal_date = date( + 'Y-m-d', + mktime( + 0, 0, 0, + $renewal_day_static, + $renewal_month, + date( 'Y' ) + ) + ); } else { - $new_renewal_date = date( 'Y-m-d' ); + // Calculate the renewal date base on last renewal date. + // Grab current renewal date + $current_renewal_date = $this->wpdb->get_var( + $this->wpdb->prepare( + "SELECT renewal_date + FROM " . GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . "accounts + WHERE id = %d", + $account + ) + ); + if ( $current_renewal_date ) { + $renewal_date = new DateTime( $current_renewal_date ); + // Get earliest date this one can renewal with. + $earliest_date = $renewal_date->modify( '-' . $days_before_renewal . ' days + 1 year' ); + $year_part = substr( $current_renewal_date, 0, 4 ); + $the_rest = substr( $current_renewal_date, 4 ); + // Adjust the year to current year + $new_renewal_date = date( 'Y' ) . $the_rest; + $test_renewal_date = new DateTime( $new_renewal_date ); + if ( $test_renewal_date->getTimestamp() < $earliest_date->getTimestamp() ) { + // Adjust the year. + $new_renewal_date = ( date( 'Y' ) - 1 ) . $the_rest; + } + } else { + $new_renewal_date = date( 'Y-m-d' ); + } } $this->wpdb->update( -- 2.17.1