diff --git a/CRM/Civicase/Hook/BuildForm/AddSalesOrderLineItemsToContribution.php b/CRM/Civicase/Hook/BuildForm/AddSalesOrderLineItemsToContribution.php
index 50c5c8bbd..26c5b1974 100644
--- a/CRM/Civicase/Hook/BuildForm/AddSalesOrderLineItemsToContribution.php
+++ b/CRM/Civicase/Hook/BuildForm/AddSalesOrderLineItemsToContribution.php
@@ -36,6 +36,8 @@ public function run(CRM_Core_Form &$form, $formName) {
'to_be_invoiced' => $toBeInvoiced,
'percent_value' => $percentValue,
'line_items' => json_encode($lineItems),
+ 'quotation_custom_field' => CRM_Core_BAO_CustomField::getCustomFieldID('Quotation', 'Opportunity_Details', TRUE),
+ 'case_custom_field' => CRM_Core_BAO_CustomField::getCustomFieldID('Case_Opportunity', 'Opportunity_Details', TRUE),
]);
}
diff --git a/Civi/Api4/Action/CaseSalesOrder/ContributionCreateAction.php b/Civi/Api4/Action/CaseSalesOrder/ContributionCreateAction.php
index d3d134586..38bffa9bd 100644
--- a/Civi/Api4/Action/CaseSalesOrder/ContributionCreateAction.php
+++ b/Civi/Api4/Action/CaseSalesOrder/ContributionCreateAction.php
@@ -4,6 +4,7 @@
use Civi\Api4\CaseSalesOrder;
use Civi\Api4\CaseSalesOrderContribution as Api4CaseSalesOrderContribution;
+use Civi\Api4\Contribution as Api4Contribution;
use Civi\Api4\Generic\AbstractAction;
use Civi\Api4\Generic\Result;
use Civi\Api4\Generic\Traits\DAOActionTrait;
@@ -178,6 +179,17 @@ private function linkCaseSalesOrderToContribution(int $salesOrderId, int $contri
->addValue('percent_value', $this->percentValue)
->addValue('contribution_id', $contributionId)
->execute();
+
+ $salesOrder = CaseSalesOrder::get()
+ ->addWhere('id', '=', $salesOrderId)
+ ->execute()
+ ->first();
+
+ Api4Contribution::update()
+ ->addValue('Opportunity_Details.Case_Opportunity', $salesOrder['case_id'])
+ ->addValue('Opportunity_Details.Quotation', $salesOrderId)
+ ->addWhere('id', '=', $contributionId)
+ ->execute();
}
/**
diff --git a/js/sales-order-contribution.js b/js/sales-order-contribution.js
index 1a74e349f..889d15593 100644
--- a/js/sales-order-contribution.js
+++ b/js/sales-order-contribution.js
@@ -1,4 +1,14 @@
(function ($, _) {
+ const waitForElement = function ($, elementPath, callBack) {
+ window.setTimeout(function () {
+ if ($(elementPath).length) {
+ callBack($, $(elementPath));
+ } else {
+ window.waitForElement($, elementPath, callBack);
+ }
+ }, 500);
+ };
+
$(document).one('crmLoad', function () {
const params = CRM.vars['uk.co.compucorp.civicase'];
const salesOrderId = params.sales_order;
@@ -6,6 +16,8 @@
const percentValue = params.percent_value;
const toBeInvoiced = params.to_be_invoiced;
const lineItems = JSON.parse(params.line_items);
+ const caseCustomField = params.case_custom_field;
+ const quotationCustomField = params.quotation_custom_field;
let count = 0;
const apiRequest = {};
@@ -37,6 +49,14 @@
$(``).insertBefore('#source');
$(``).insertBefore('#source');
$('#totalAmount, #totalAmountORaddLineitem, #totalAmountORPriceSet, #price_set_id, #choose-manual').hide();
+
+ waitForElement($, `[name^=${quotationCustomField}_]`, function ($, elem) {
+ $(`[name^=${quotationCustomField}_]`).val(caseSalesOrder.id).trigger('change');
+ });
+
+ waitForElement($, `[name^=${caseCustomField}_]`, function ($, elem) {
+ $(`[name^=${caseCustomField}_]`).val(caseSalesOrder.case_id).trigger('change');
+ });
});
}