From ae3cd11fd3bffe46873693a02ab2d7544f159a9a Mon Sep 17 00:00:00 2001
From: s j <sj@1729.be>
Date: Fri, 7 Jun 2024 12:08:01 +0000
Subject: [PATCH] imp: configurable start period for new subscriptions

---
 config/install/commerce_foodbox.settings.yml | 1 +
 src/EventSubscriber/OrderEventSubscriber.php | 9 ++++++---
 src/Form/CommerceFoodboxConfigForm.php       | 7 +++++++
 3 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/config/install/commerce_foodbox.settings.yml b/config/install/commerce_foodbox.settings.yml
index baf43ff..85f6166 100644
--- a/config/install/commerce_foodbox.settings.yml
+++ b/config/install/commerce_foodbox.settings.yml
@@ -10,3 +10,4 @@ settlement_journal:
 statement_journal:
 invalid_periods:
 double_value_periods:
+new_subscription_period:
diff --git a/src/EventSubscriber/OrderEventSubscriber.php b/src/EventSubscriber/OrderEventSubscriber.php
index ceb6ee6..9dee915 100644
--- a/src/EventSubscriber/OrderEventSubscriber.php
+++ b/src/EventSubscriber/OrderEventSubscriber.php
@@ -149,12 +149,15 @@ class OrderEventSubscriber implements EventSubscriberInterface {
         }
 
         // Determine start period for subscription.
-        
+
         $orderPeriodService = \Drupal::service('commerce_order_period.default');
+        $new_subscription_period = \Drupal::config('commerce_foodbox.settings')->get('new_subscription_period');
+        if (! $new_subscription_period || empty($new_subscription_period)) {
+            $new_subscription_period = 'now';
+        }
         $startPeriod = $orderPeriodService->getPeriodName(
           1,
-          // Use strtotime("+4 days") for thursday -> W+2.
-          $orderPeriodService->getPeriodNameForDate(date('Y-m-d', strtotime('now')))
+          $orderPeriodService->getPeriodNameForDate(date('Y-m-d', strtotime($new_subscription_period)))
         );
 
         if ($order->hasField('field_req_start_date') && $order->get('field_req_start_date')->value) {
diff --git a/src/Form/CommerceFoodboxConfigForm.php b/src/Form/CommerceFoodboxConfigForm.php
index a3401d5..f2b7e21 100644
--- a/src/Form/CommerceFoodboxConfigForm.php
+++ b/src/Form/CommerceFoodboxConfigForm.php
@@ -88,6 +88,12 @@ class CommerceFoodboxConfigForm extends ConfigFormBase {
       '#required' => TRUE,
     ];
 
+    $form['new_subscription_period'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Period start for new subscriptions in strtotime format (1 week will be added, eg "now - 2 days" or "now + 4 days").'),
+      '#default_value' => $config->get('new_subscription_period'),
+    ];
+
     $form['prepayment_journal'] = [
       '#type' => 'entity_autocomplete',
       '#target_type' => 'accounting_journal',
@@ -196,6 +202,7 @@ class CommerceFoodboxConfigForm extends ConfigFormBase {
     $this->config('commerce_foodbox.settings')
       ->set('subscription_producttype', $form_state->getValue('producttype'))
       ->set('subscription_purchasedentityfield', $form_state->getValue('purchasedentityfield'))
+      ->set('new_subscription_period', $form_state->getValue('new_subscription_period'))
       ->set('prepayment_journal', $form_state->getValue('prepayment_journal'))
       ->set('settlement_journal', $form_state->getValue('settlement_journal'))
       ->set('statement_journal', $form_state->getValue('statement_journal'))
-- 
GitLab