From 1696c63ba4e2610f566a7e6222cadb838df93542 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sat, 10 Apr 2021 12:01:36 +1000 Subject: [PATCH] fixes for endless recursion --- app/Utils/Traits/GeneratesCounter.php | 17 ++++++++++-- tests/Unit/GeneratesCounterTest.php | 39 +++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/app/Utils/Traits/GeneratesCounter.php b/app/Utils/Traits/GeneratesCounter.php index caaa448842d4..f02b169c9fa8 100644 --- a/app/Utils/Traits/GeneratesCounter.php +++ b/app/Utils/Traits/GeneratesCounter.php @@ -46,7 +46,7 @@ trait GeneratesCounter $counter_string = $this->getEntityCounter($entity, $client); $pattern = $this->getNumberPattern($entity, $client); - if (strpos($pattern, 'clientCounter') || strpos($pattern, 'client_counter')) { + if ((strpos($pattern, 'clientCounter') !== false) || (strpos($pattern, 'client_counter') !==false) ) { if (property_exists($client->settings, $counter_string)) { $counter = $client->settings->{$counter_string}; @@ -55,7 +55,7 @@ trait GeneratesCounter } $counter_entity = $client; - } elseif (strpos($pattern, 'groupCounter') || strpos($pattern, 'group_counter')) { + } elseif ((strpos($pattern, 'groupCounter') !== false) || (strpos($pattern, 'group_counter') !== false)) { if (property_exists($client->group_settings, $counter_string)) { $counter = $client->group_settings->{$counter_string}; @@ -73,6 +73,10 @@ trait GeneratesCounter //If it is a quote - we need to $pattern = $this->getNumberPattern($entity, $client); + if(strlen($pattern) > 1 && (stripos($pattern, 'counter') === false)){ + $pattern = $pattern.'{$counter}'; + } + $padding = $client->getSetting('counter_padding'); if($is_recurring) @@ -333,6 +337,7 @@ trait GeneratesCounter */ private function checkEntityNumber($class, $entity, $counter, $padding, $pattern, $prefix = '') { + $check = false; do { @@ -347,6 +352,11 @@ trait GeneratesCounter $counter++; } while ($check); + + nlog($counter); + nlog($pattern); + nlog($number); + return $number; } @@ -482,6 +492,9 @@ trait GeneratesCounter } switch ($company->reset_counter_frequency_id) { + case RecurringInvoice::FREQUENCY_DAILY: + $reset_date->addDay(); + break; case RecurringInvoice::FREQUENCY_WEEKLY: $reset_date->addWeek(); break; diff --git a/tests/Unit/GeneratesCounterTest.php b/tests/Unit/GeneratesCounterTest.php index e6535fd8ab10..dad4066938a4 100644 --- a/tests/Unit/GeneratesCounterTest.php +++ b/tests/Unit/GeneratesCounterTest.php @@ -73,6 +73,45 @@ class GeneratesCounterTest extends TestCase $this->assertTrue($this->hasSharedCounter($this->client)); } + public function testNoCounterBeingSpecifiedInCounterStringStub() + { + $settings = $this->client->company->settings; + $settings->invoice_number_counter = 1; + $settings->invoice_number_pattern = 'test-{$counter}'; + $settings->shared_invoice_quote_counter = 1; + $this->client->company->settings = $settings; + $this->client->company->save(); + + $this->client->settings = $settings; + $this->client->save(); + $this->client->fresh(); + + $invoice_number = $this->getNextInvoiceNumber($this->client, $this->invoice); + + $this->assertEquals('test-0001', $invoice_number); + + } + + public function testNoCounterBeingSpecifiedInCounterStringWithFix() + { + $settings = $this->client->company->settings; + $settings->invoice_number_counter = 100; + $settings->invoice_number_pattern = 'test-'; + $settings->shared_invoice_quote_counter = 100; + $this->client->company->settings = $settings; + $this->client->company->save(); + + $this->client->settings = $settings; + $this->client->save(); + $this->client->fresh(); + + $invoice_number = $this->getNextInvoiceNumber($this->client, $this->invoice); + + $this->assertEquals('test-0100', $invoice_number); + + } + + public function testInvoiceNumberValue() { $invoice_number = $this->getNextInvoiceNumber($this->client, $this->invoice);