From c3176ab2554c6e5061d8d3e3f656a0488c740c59 Mon Sep 17 00:00:00 2001 From: Eileen McNaughton Date: Wed, 22 Mar 2023 22:22:37 +1300 Subject: [PATCH] Fix for issue when optional contact_id is blank --- CRM/Contribute/Import/Parser/Contribution.php | 14 +++++++++++++- .../Contribute/Import/Parser/ContributionTest.php | 5 +++-- .../Import/Parser/data/contributions.csv | 4 ++-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/CRM/Contribute/Import/Parser/Contribution.php b/CRM/Contribute/Import/Parser/Contribution.php index a379e26bff..6f47c715d3 100644 --- a/CRM/Contribute/Import/Parser/Contribution.php +++ b/CRM/Contribute/Import/Parser/Contribution.php @@ -232,7 +232,19 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Import_Parser { $params[$entity][$this->getFieldMetadata($mappedField['name'])['name']] = $this->getTransformedFieldValue($mappedField['name'], $fieldValue); } } - return $params; + return $this->removeEmptyValues($params); + } + + protected function removeEmptyValues($array) { + foreach ($array as $key => $value) { + if (is_array($value)) { + $array[$key] = $this->removeEmptyValues($value); + } + elseif ($value === '') { + unset($array[$key]); + } + } + return $array; } /** diff --git a/tests/phpunit/CRM/Contribute/Import/Parser/ContributionTest.php b/tests/phpunit/CRM/Contribute/Import/Parser/ContributionTest.php index 9f46ee1330..caaa624032 100644 --- a/tests/phpunit/CRM/Contribute/Import/Parser/ContributionTest.php +++ b/tests/phpunit/CRM/Contribute/Import/Parser/ContributionTest.php @@ -597,6 +597,7 @@ class CRM_Contribute_Import_Parser_ContributionTest extends CiviUnitTestCase { ['name' => ''], ['name' => 'trxn_id'], ['name' => 'contribution_campaign_id'], + ['name' => 'contribution_contact_id'], ]; // First we try to create without total_amount mapped. // It will fail in create mode as total_amount is required for create. @@ -616,7 +617,7 @@ class CRM_Contribute_Import_Parser_ContributionTest extends CiviUnitTestCase { $this->importCSV('contributions.csv', $fieldMappings, ['onDuplicate' => CRM_Import_Parser::DUPLICATE_SKIP]); $row = $this->getDataSource()->getRows()[0]; - $this->assertEquals('IMPORTED', $row[10]); + $this->assertEquals('IMPORTED', $row[11]); $contribution = Contribution::get()->addSelect('source', 'id')->execute()->first(); $this->assertEmpty($contribution['source']); @@ -635,7 +636,7 @@ class CRM_Contribute_Import_Parser_ContributionTest extends CiviUnitTestCase { $this->importCSV('contributions.csv', $fieldMappings, ['onDuplicate' => CRM_Import_Parser::DUPLICATE_UPDATE]); $row = $this->getDataSource()->getRows()[0]; - $this->assertEquals('IMPORTED', $row[10]); + $this->assertEquals('IMPORTED', $row[11]); $contribution = Contribution::get()->addSelect('source', 'id')->execute()->first(); $this->assertEquals('Call him back', $contribution['source']); } diff --git a/tests/phpunit/CRM/Contribute/Import/Parser/data/contributions.csv b/tests/phpunit/CRM/Contribute/Import/Parser/data/contributions.csv index a16d213fb7..7080b8ef97 100644 --- a/tests/phpunit/CRM/Contribute/Import/Parser/data/contributions.csv +++ b/tests/phpunit/CRM/Contribute/Import/Parser/data/contributions.csv @@ -1,2 +1,2 @@ -External Identifier,Total Amount,Receive Date,Financial Type,Soft Credit to,Source,Note,Transaction ID,Campaign ID -bob,65,2008-09-20,Donation,mum@example.com,Word of mouth,Call him back,999,1 +External Identifier,Total Amount,Receive Date,Financial Type,Soft Credit to,Source,Note,Transaction ID,Campaign ID,Blank column +bob,65,2008-09-20,Donation,mum@example.com,Word of mouth,Call him back,999,1, -- 2.25.1