Skip to content
Snippets Groups Projects
Unverified Commit b92a611a authored by totten's avatar totten Committed by GitHub
Browse files

Merge pull request #25778 from eileenmcnaughton/560

#4156 Fix failure to update organization_name on employees during merge
parents c16f4e28 607fe366
Branches
Tags
No related merge requests found
......@@ -9,6 +9,7 @@
+--------------------------------------------------------------------+
*/
use Civi\Api4\Contact;
use Civi\Api4\CustomGroup;
/**
......@@ -685,7 +686,18 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m
// This parameter causes blank fields to be be emptied out.
// We can probably remove.
$params['updateBlankLocInfo'] = TRUE;
if (empty($params['contact_type']) || ($params['contact_type'] === 'Organization' && empty($params['organization_name']))) {
// Ensuring this is set addresses https://lab.civicrm.org/dev/core/-/issues/4156
// but not that RM_Dedupe_MergerTest::testMergeWithEmployer covers this scenario
// so refactoring of this is safe.
$contact = Contact::get(FALSE)->addWhere('id', '=', $contactID)->addSelect('organization_name', 'contact_type')->execute()->first();
$params['contact_type'] = $contact['contact_type'];
if (empty($params['organization_name']) && $params['contact_type'] === 'Organization') {
$params['organization_name'] = $contact['organization_name'];
}
}
$data = self::formatProfileContactParams($params, $contactID);
CRM_Contact_BAO_Contact::create($data);
}
......@@ -707,13 +719,12 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m
int $contactID
) {
$data = $contactDetails = [];
$data = ['contact_type' => $params['contact_type']];
// get the contact details (hier)
$details = CRM_Contact_BAO_Contact::getHierContactDetails($contactID, []);
$contactDetails = $details[$contactID];
$data['contact_type'] = $contactDetails['contact_type'] ?? NULL;
$data['contact_sub_type'] = $contactDetails['contact_sub_type'] ?? NULL;
//fix contact sub type CRM-5125
......@@ -993,10 +1004,6 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m
}
}
if (!isset($data['contact_type'])) {
$data['contact_type'] = 'Individual';
}
return $data;
}
......
<?php
use Civi\Api4\Contact;
/**
* Class CRM_Dedupe_DedupeMergerTest
*
......@@ -812,7 +814,7 @@ class CRM_Dedupe_MergerTest extends CiviUnitTestCase {
// update the text custom field for duplicate contact 1 with value 'def'
$this->callAPISuccess('Contact', 'create', [
'id' => $duplicateContactID1,
"{$customFieldName}" => 'def',
$customFieldName => 'def',
]);
$this->assertCustomFieldValue($duplicateContactID1, 'def', $customFieldName);
......@@ -1453,7 +1455,28 @@ WHERE
CRM_Core_DAO_AllCoreTables::flush();
$contact1 = $this->individualCreate();
$contact2 = $this->individualCreate(['api.Im.create' => ['name' => 'chat_handle']]);
$this->callAPISuccess('Contact', 'merge', ['to_keep_id' => $contact1, 'to_remove_id' => $contact2]);
$this->callAPISuccess('Contact', 'merge', [
'to_keep_id' => $contact1,
'to_remove_id' => $contact2,
]);
}
/**
* Test that organization name is updated for employees of merged organizations..
*
* @throws \CRM_Core_Exception
*/
public function testMergeWithEmployer(): void {
$organizationToRemoveID = $this->organizationCreate(['organization_name' => 'remove']);
$organizationToKeepID = $this->organizationCreate(['organization_name' => 'keep']);
$individualID = $this->createContactWithEmployerRelationship([
'contact_id_b' => $organizationToRemoveID,
]);
$employerName = Contact::get()->addSelect('organization_name')->addWhere('id', '=', $individualID)->execute()->first()['organization_name'];
$this->assertEquals('remove', $employerName);
$this->callAPISuccess('Contact', 'merge', ['to_keep_id' => $organizationToKeepID, 'to_remove_id' => $organizationToRemoveID, 'mode' => 'aggressive']);
$employerName = Contact::get()->addSelect('organization_name')->addWhere('id', '=', $individualID)->execute()->first()['organization_name'];
$this->assertEquals('keep', $employerName);
}
/**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment