Skip to content

Commit 45d16fa

Browse files
author
Dominic Tubach
committed
Don't reset amount admitted and status of clearing item if unchanged
1 parent d4912fe commit 45d16fa

File tree

3 files changed

+73
-4
lines changed

3 files changed

+73
-4
lines changed

Civi/Funding/ClearingProcess/Form/ClearingFormGenerator.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@
4646
* paymentDate: string,
4747
* recipient: string,
4848
* reason: string,
49-
* amount: float,
50-
* amountAdmitted: ?float,
49+
* amount: float|int,
50+
* amountAdmitted: float|int|null,
5151
* }
5252
*
5353
* @phpstan-type clearingFormDataT array{

Civi/Funding/ClearingProcess/Handler/Helper/AbstractClearingItemsFormDataPersister.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -260,10 +260,10 @@ private function handleFile(
260260
private function isClearingItemChanged(AbstractClearingItemEntity $clearingItem, array $record, ?int $fileId): bool {
261261
return $clearingItem->getFileId() !== $fileId
262262
|| $clearingItem->getReceiptNumber() !== $record['receiptNumber']
263-
|| $clearingItem->getPaymentDate() !== $record['paymentDate']
263+
|| $clearingItem->get('payment_date') !== $record['paymentDate']
264264
|| $clearingItem->getRecipient() !== $record['recipient']
265265
|| $clearingItem->getReason() !== $record['reason']
266-
|| $clearingItem->getAmount() !== $record['amount'];
266+
|| abs($clearingItem->getAmount() - $record['amount']) >= PHP_FLOAT_EPSILON;
267267
}
268268

269269
}

tests/phpunit/Civi/Funding/Api4/Action/RemoteFundingClearingProcess/SubmitFormActionTest.php

+69
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,75 @@ public function testStatusAndAmountIsReset(): void {
297297
], FundingClearingResourcesItem::get(FALSE)->execute()->single());
298298
}
299299

300+
public function testStatusAndAmountIsNotResetIfClearingItemUnchanged(): void {
301+
$clearingCostItem = ClearingCostItemFixture::addFixture(
302+
$this->clearingProcessBundle->getClearingProcess()->getId(),
303+
$this->costItem->getId(),
304+
['status' => 'accepted', 'amount' => 5, 'amount_admitted' => 4.1]
305+
);
306+
$clearingResourcesItem = ClearingResourcesItemFixture::addFixture(
307+
$this->clearingProcessBundle->getClearingProcess()->getId(),
308+
$this->resourcesItem->getId(),
309+
['status' => 'rejected', 'amount' => 3, 'amount_admitted' => 0.1]
310+
);
311+
312+
$result = RemoteFundingClearingProcess::submitForm()
313+
->setRemoteContactId($this->remoteContactId)
314+
->setId($this->clearingProcessBundle->getClearingProcess()->getId())
315+
->setData([
316+
'costItems' => [
317+
$this->costItem->getId() => [
318+
'records' => [
319+
[
320+
'_id' => $clearingCostItem->getId(),
321+
'receiptNumber' => $clearingCostItem->getReceiptNumber(),
322+
'paymentDate' => $clearingCostItem->getPaymentDate()->format('Y-m-d'),
323+
'recipient' => $clearingCostItem->getRecipient(),
324+
'reason' => $clearingCostItem->getReason(),
325+
'amount' => $clearingCostItem->getAmount(),
326+
'amountAdmitted' => $clearingCostItem->getAmountAdmitted(),
327+
'status' => $clearingCostItem->getStatus(),
328+
],
329+
],
330+
],
331+
],
332+
'resourcesItems' => [
333+
$this->resourcesItem->getId() => [
334+
'records' => [
335+
[
336+
'_id' => $clearingResourcesItem->getId(),
337+
'receiptNumber' => $clearingResourcesItem->getReceiptNumber(),
338+
'paymentDate' => $clearingResourcesItem->getPaymentDate()->format('Y-m-d'),
339+
'recipient' => $clearingResourcesItem->getRecipient(),
340+
'reason' => $clearingResourcesItem->getReason(),
341+
'amount' => $clearingResourcesItem->getAmount(),
342+
'amountAdmitted' => $clearingResourcesItem->getAmountAdmitted(),
343+
'status' => $clearingResourcesItem->getStatus(),
344+
],
345+
],
346+
],
347+
],
348+
'reportData' => ['foo' => 'bar'],
349+
'_action' => 'save',
350+
])
351+
->execute()
352+
->getArrayCopy();
353+
354+
static::assertSame(RemoteSubmitResponseActions::RELOAD_FORM, $result['action']);
355+
static::assertSame('Saved', $result['message']);
356+
static::assertArrayNotHasKey('errors', $result);
357+
static::assertEquals(new \stdClass(), $result['files']);
358+
359+
static::assertEquals(
360+
$clearingCostItem->toArray(),
361+
FundingClearingCostItem::get(FALSE)->execute()->single()
362+
);
363+
static::assertEquals(
364+
$clearingResourcesItem->toArray(),
365+
FundingClearingResourcesItem::get(FALSE)->execute()->single()
366+
);
367+
}
368+
300369
public function testModifyDoesNotChangeData(): void {
301370
$clearingProcess = $this->clearingProcessBundle->getClearingProcess();
302371
$clearingProcess->setStatus('review-requested');

0 commit comments

Comments
 (0)