From 9195addb372c8a1fc060d1a1af2dee142aa27167 Mon Sep 17 00:00:00 2001 From: Dave Shoreman Date: Tue, 28 May 2024 22:12:28 +0100 Subject: [PATCH] "Real" entity numbers in Invoice Settings preview This refactors the GeneratesCounter trait slightly, such that arbitrary entity numbers can be formatted according to the given padding/pattern. With that small abstraction we can use the trait in the PdfMock instance to show the exmple entity number using real patterns without actually incrementing it or checking the number is available in the database. --- app/Services/Pdf/PdfMock.php | 12 ++++++++++- app/Utils/Traits/GeneratesCounter.php | 29 ++++++++++++++++++++------- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/app/Services/Pdf/PdfMock.php b/app/Services/Pdf/PdfMock.php index 4d7f6a7a50dc..503472d2accf 100644 --- a/app/Services/Pdf/PdfMock.php +++ b/app/Services/Pdf/PdfMock.php @@ -27,11 +27,13 @@ use App\Models\PurchaseOrderInvitation; use App\Models\Quote; use App\Models\QuoteInvitation; use App\Models\Vendor; +use App\Utils\Traits\GeneratesCounter; use App\Utils\Traits\MakesHash; class PdfMock { use MakesHash; + use GeneratesCounter; private mixed $mock; @@ -206,6 +208,14 @@ class PdfMock */ public function getStubVariables(): array { + // Although $this->mock is the Invoice/etc entity, we need the invitation to get company details. + $entity_number = $this->getFormattedEntityNumber( + $this->mock->invitation, + 29, + $this->settings->counter_padding, + $this->settings->invoice_number_pattern + ); + return ['values' => [ '$client.shipping_postal_code' => '46420', @@ -370,7 +380,7 @@ class PdfMock '$company.phone' => $this->settings->phone, '$company.state' => $this->settings->state, '$credit.number' => '0029', - '$entity_number' => '0029', + '$entity_number' => $entity_number, '$credit_number' => '0029', '$global_margin' => '6.35mm', '$contact.phone' => '681-480-9828', diff --git a/app/Utils/Traits/GeneratesCounter.php b/app/Utils/Traits/GeneratesCounter.php index 731e39a504ea..39448d02dbb3 100644 --- a/app/Utils/Traits/GeneratesCounter.php +++ b/app/Utils/Traits/GeneratesCounter.php @@ -288,7 +288,6 @@ trait GeneratesCounter */ public function getNextProjectNumber(Project $project): string { - $entity_number = $this->getNextEntityNumber(Project::class, $project->client, false); return $this->replaceUserVars($project, $entity_number); @@ -412,7 +411,7 @@ trait GeneratesCounter * * @param string $pattern * @param string $prefix - * @return string The padded and prefixed entity number + * @return string The padded, prefixed and unique entity number */ private function checkEntityNumber($class, $entity, $counter, $padding, $pattern, $prefix = ''): string { @@ -420,11 +419,7 @@ trait GeneratesCounter $check_counter = 1; do { - $number = $this->padCounter($counter, $padding); - - $number = $this->applyNumberPattern($entity, $number, $pattern); - - $number = $this->prefixCounter($number, $prefix); + $number = $this->getFormattedEntityNumber($entity, $counter, $padding, $pattern); $check = $class::where('company_id', $entity->company_id)->where('number', $number)->withTrashed()->exists(); @@ -443,6 +438,26 @@ trait GeneratesCounter return $number; } + /** + * Formats the entity number according to pattern, prefix and padding. + * + * @param Collection $entity The entity ie App\Models\Client, Invoice, Quote etc + * @param int $counter The counter + * @param int $padding The padding + * @param string $pattern + * @param string $prefix + * + * @return string The padded and prefixed entity number + */ + public function getFormattedEntityNumber($entity, $counter, $padding, $pattern, $prefix = ''): string + { + $number = $this->padCounter($counter, $padding); + + $number = $this->applyNumberPattern($entity, $number, $pattern); + + return $this->prefixCounter($number, $prefix); + } + /*Check if a number is available for use. */ public function checkNumberAvailable($class, $entity, $number): bool {