Change how the renewal date update method is done.
authorSteve Sutton <steve@gaslightmedia.com>
Thu, 5 Sep 2019 15:00:56 +0000 (11:00 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Thu, 5 Sep 2019 15:00:56 +0000 (11:00 -0400)
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

index 0db862d..5e33aca 100644 (file)
@@ -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(