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'); + }); }); }