Fix breakage in message preview on workflow contributions
authorEileen McNaughton <emcnaughton@wikimedia.org>
Wed, 15 Jun 2022 03:44:52 +0000 (15:44 +1200)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Wed, 15 Jun 2022 05:09:49 +0000 (17:09 +1200)
CRM/Contribute/WorkflowMessage/Contribution/BasicContribution.ex.php
CRM/Contribute/WorkflowMessage/ContributionTrait.php
CRM/Financial/BAO/Order.php

index 23c035710532d43ba681fe6acea3ba3d207829a1..954385ac82e7b848b461c24511303598de345352 100644 (file)
@@ -54,6 +54,10 @@ class CRM_Contribute_WorkflowMessage_Contribution_BasicContribution extends Work
   private function addExampleData(GenericWorkflowMessage $messageTemplate): void {
     $messageTemplate->setContact(\Civi\Test::example('entity/Contact/Barb'));
     $messageTemplate->setContribution(\Civi\Test::example('entity/Contribution/Euro5990/completed'));
+    $mockOrder = new CRM_Financial_BAO_Order();
+    $mockOrder->setTemplateContributionID(50);
+    $mockOrder->setPriceSetToDefault('contribution');
+    $messageTemplate->setOrder($mockOrder);
   }
 
 }
index 4ecf20565bb278211be9a47bd010695067f2a367..2692957a035cf63eace4dced724d9af8d0a70bdb 100644 (file)
@@ -17,7 +17,7 @@ trait CRM_Contribute_WorkflowMessage_ContributionTrait {
 
   /**
    * @var int
-   * @scope tokenContext as contribution_id
+   * @scope tokenContext as contributionId
    */
   public $contributionId;
 
@@ -41,7 +41,7 @@ trait CRM_Contribute_WorkflowMessage_ContributionTrait {
    * @return \CRM_Financial_BAO_Order|null
    */
   private function getOrder(): ?CRM_Financial_BAO_Order {
-    if ($this->contributionId) {
+    if (!$this->order && $this->contributionId) {
       $this->order = new CRM_Financial_BAO_Order();
       $this->order->setTemplateContributionID($this->contributionId);
     }
@@ -65,6 +65,10 @@ trait CRM_Contribute_WorkflowMessage_ContributionTrait {
    * @return bool
    */
   public function getIsShowLineItems(): bool {
+    if (isset($this->isShowLineItems)) {
+      return $this->isShowLineItems;
+    }
+
     $order = $this->getOrder();
     if (!$order) {
       // This would only be the case transitionally.
@@ -72,7 +76,7 @@ trait CRM_Contribute_WorkflowMessage_ContributionTrait {
       // always have the contribution ID available as well as migrated ones.
       return FALSE;
     }
-    return $this->order->getPriceSetMetadata()['is_quick_config'];
+    return !$this->order->getPriceSetMetadata()['is_quick_config'];
   }
 
   /**
@@ -90,6 +94,21 @@ trait CRM_Contribute_WorkflowMessage_ContributionTrait {
     return $this;
   }
 
+  /**
+   * Set order object.
+   *
+   * Note this is only supported for core use (specifically in example work flow)
+   * as the contract might change.
+   *
+   * @param CRM_Financial_BAO_Order $order
+   *
+   * @return $this
+   */
+  public function setOrder(CRM_Financial_BAO_Order $order): self {
+    $this->order = $order;
+    return $this;
+  }
+
   /**
    * Extra variables to be exported to smarty based on being calculated.
    *
index 7374dce22293de79b7f13d1032c92531f0423ca7..66ac91b5f1b675f974d2e915893aa679f7b2c65b 100644 (file)
@@ -451,6 +451,12 @@ class CRM_Financial_BAO_Order {
       foreach ($this->getPriceOptions() as $fieldID => $valueID) {
         $this->setPriceSetIDFromSelectedField($fieldID);
       }
+      if (!$this->priceSetID && $this->getTemplateContributionID()) {
+        // Load the line items from the contribution.
+        foreach ($this->getLineItems() as $lineItem) {
+          return $lineItem['price_field_id.price_set_id'];
+        }
+      }
     }
     return $this->priceSetID;
   }
@@ -1099,6 +1105,7 @@ class CRM_Financial_BAO_Order {
         'entity_id',
         'entity_table',
         'price_field_id',
+        'price_field_id.price_set_id',
         'price_field_value_id',
         'financial_type_id',
         'label',