From 4e4420dd326a5821047a8f79cdffbff78f296a02 Mon Sep 17 00:00:00 2001 From: Nikola Cirkovic Date: Sun, 5 Jun 2022 05:59:33 +0200 Subject: [PATCH] INA-6 |Added purchase order number counter --- app/DataMapper/CompanySettings.php | 12 ++++--- app/Utils/Traits/GeneratesCounter.php | 52 ++++++++++++++++++--------- 2 files changed, 44 insertions(+), 20 deletions(-) diff --git a/app/DataMapper/CompanySettings.php b/app/DataMapper/CompanySettings.php index a3d272a5c410..8f9dfe2408f4 100644 --- a/app/DataMapper/CompanySettings.php +++ b/app/DataMapper/CompanySettings.php @@ -98,11 +98,11 @@ class CompanySettings extends BaseSettings public $expense_number_pattern = ''; //@implemented public $expense_number_counter = 1; //@implemented - public $recurring_expense_number_pattern = ''; - public $recurring_expense_number_counter = 1; + public $recurring_expense_number_pattern = ''; + public $recurring_expense_number_counter = 1; - public $recurring_quote_number_pattern = ''; - public $recurring_quote_number_counter = 1; + public $recurring_quote_number_pattern = ''; + public $recurring_quote_number_counter = 1; public $vendor_number_pattern = ''; //@implemented public $vendor_number_counter = 1; //@implemented @@ -276,6 +276,9 @@ class CompanySettings extends BaseSettings public $email_from_name = ''; public $auto_archive_invoice_cancelled = false; + + public $purchase_order_number_counter = 1; //TODO + public static $casts = [ 'page_numbering_alignment' => 'string', 'page_numbering' => 'bool', @@ -474,6 +477,7 @@ class CompanySettings extends BaseSettings 'portal_custom_footer' => 'string', 'portal_custom_js' => 'string', 'client_portal_enable_uploads' => 'bool', + 'purchase_order_number_counter' => 'integer', ]; public static $free_plan_casts = [ diff --git a/app/Utils/Traits/GeneratesCounter.php b/app/Utils/Traits/GeneratesCounter.php index b9606621246a..3dd2bcefb330 100644 --- a/app/Utils/Traits/GeneratesCounter.php +++ b/app/Utils/Traits/GeneratesCounter.php @@ -18,6 +18,7 @@ use App\Models\Expense; use App\Models\Invoice; use App\Models\Payment; use App\Models\Project; +use App\Models\PurchaseOrder; use App\Models\Quote; use App\Models\RecurringExpense; use App\Models\RecurringInvoice; @@ -44,8 +45,8 @@ trait GeneratesCounter $is_client_counter = false; - $counter_string = $this->getEntityCounter($entity, $client); - $pattern = $this->getNumberPattern($entity, $client); + $counter_string = $this->getEntityCounter($entity, $client); + $pattern = $this->getNumberPattern($entity, $client); if ((strpos($pattern, 'clientCounter') !== false) || (strpos($pattern, 'client_counter') !==false) ) { @@ -71,9 +72,9 @@ trait GeneratesCounter $counter_entity = $client->company; } - //If it is a quote - we need to + //If it is a quote - we need to $pattern = $this->getNumberPattern($entity, $client); - + if(strlen($pattern) > 1 && (stripos($pattern, 'counter') === false)){ $pattern = $pattern.'{$counter}'; } @@ -127,9 +128,9 @@ trait GeneratesCounter break; case Quote::class: - if ($this->hasSharedCounter($client, 'quote')) + if ($this->hasSharedCounter($client, 'quote')) return 'invoice_number_counter'; - + return 'quote_number_counter'; break; case RecurringInvoice::class: @@ -145,14 +146,17 @@ trait GeneratesCounter return 'payment_number_counter'; break; case Credit::class: - if ($this->hasSharedCounter($client, 'credit')) + if ($this->hasSharedCounter($client, 'credit')) return 'invoice_number_counter'; - + return 'credit_number_counter'; break; case Project::class: return 'project_number_counter'; break; + case PurchaseOrder::class: + return 'purchase_order_number_counter'; + break; default: return 'default_number_counter'; @@ -188,6 +192,20 @@ trait GeneratesCounter return $this->replaceUserVars($credit, $entity_number); + } + /** + * Gets the next purchase order number. + * + * @param PurchaseOrder $purchase_order The purchase order + * + * @return string The next purchase order number. + */ + public function getNextPurchaseOrderNumber(Client $client, ?PurchaseOrder $purchase_order) :string + { + $entity_number = $this->getNextEntityNumber(PurchaseOrder::class, $client); + + return $this->replaceUserVars($purchase_order, $entity_number); + } /** @@ -385,7 +403,7 @@ trait GeneratesCounter * * @return bool True if has shared counter, False otherwise. */ - public function hasSharedCounter(Client $client, string $type = 'quote') : bool + public function hasSharedCounter(Client $client, string $type = 'quote') : bool { if($type == 'quote') return (bool) $client->getSetting('shared_invoice_quote_counter'); @@ -438,9 +456,9 @@ trait GeneratesCounter public function checkNumberAvailable($class, $entity, $number) :bool { - if ($entity = $class::whereCompanyId($entity->company_id)->whereNumber($number)->withTrashed()->exists()) + if ($entity = $class::whereCompanyId($entity->company_id)->whereNumber($number)->withTrashed()->exists()) return false; - + return true; } @@ -504,7 +522,7 @@ trait GeneratesCounter if($reset_counter_frequency == 0) return; - + $timezone = Timezone::find($client->getSetting('timezone_id')); $reset_date = Carbon::parse($client->getSetting('reset_counter_date'), $timezone->name); @@ -558,6 +576,7 @@ trait GeneratesCounter $settings->invoice_number_counter = 1; $settings->quote_number_counter = 1; $settings->credit_number_counter = 1; + $settings->purchase_order_number_counter = 1; $client->company->settings = $settings; $client->company->save(); @@ -622,6 +641,7 @@ trait GeneratesCounter $settings->task_number_counter = 1; $settings->expense_number_counter = 1; $settings->recurring_expense_number_counter =1; + $settings->purchase_order_number_counter = 1; $company->settings = $settings; $company->save(); @@ -644,7 +664,7 @@ trait GeneratesCounter $search = []; $replace = []; - + $search[] = '{$counter}'; $replace[] = $counter; @@ -659,7 +679,7 @@ trait GeneratesCounter $search[] = '{$year}'; $replace[] = Carbon::now($entity->company->timezone()->name)->format('Y'); - + if (strstr($pattern, '{$user_id}') || strstr($pattern, '{$userId}')) { $user_id = $entity->user_id ? $entity->user_id : 0; $search[] = '{$user_id}'; @@ -683,7 +703,7 @@ trait GeneratesCounter $search[] = '{$vendor_id_number}'; $replace[] = $entity->id_number; } - + if ($entity instanceof Expense) { if ($entity->vendor) { $search[] = '{$vendor_id_number}'; @@ -708,7 +728,7 @@ trait GeneratesCounter $search[] = '{$expense_id_number}'; $replace[] = $entity->id_number; } - + if ($entity->client || ($entity instanceof Client)) { $client = $entity->client ?: $entity;