INA-6 |Added purchase order number counter

This commit is contained in:
Nikola Cirkovic 2022-06-05 05:59:33 +02:00
parent 7e5e10e5f1
commit 4e4420dd32
2 changed files with 44 additions and 20 deletions

View File

@ -98,11 +98,11 @@ class CompanySettings extends BaseSettings
public $expense_number_pattern = ''; //@implemented public $expense_number_pattern = ''; //@implemented
public $expense_number_counter = 1; //@implemented public $expense_number_counter = 1; //@implemented
public $recurring_expense_number_pattern = ''; public $recurring_expense_number_pattern = '';
public $recurring_expense_number_counter = 1; public $recurring_expense_number_counter = 1;
public $recurring_quote_number_pattern = ''; public $recurring_quote_number_pattern = '';
public $recurring_quote_number_counter = 1; public $recurring_quote_number_counter = 1;
public $vendor_number_pattern = ''; //@implemented public $vendor_number_pattern = ''; //@implemented
public $vendor_number_counter = 1; //@implemented public $vendor_number_counter = 1; //@implemented
@ -276,6 +276,9 @@ class CompanySettings extends BaseSettings
public $email_from_name = ''; public $email_from_name = '';
public $auto_archive_invoice_cancelled = false; public $auto_archive_invoice_cancelled = false;
public $purchase_order_number_counter = 1; //TODO
public static $casts = [ public static $casts = [
'page_numbering_alignment' => 'string', 'page_numbering_alignment' => 'string',
'page_numbering' => 'bool', 'page_numbering' => 'bool',
@ -474,6 +477,7 @@ class CompanySettings extends BaseSettings
'portal_custom_footer' => 'string', 'portal_custom_footer' => 'string',
'portal_custom_js' => 'string', 'portal_custom_js' => 'string',
'client_portal_enable_uploads' => 'bool', 'client_portal_enable_uploads' => 'bool',
'purchase_order_number_counter' => 'integer',
]; ];
public static $free_plan_casts = [ public static $free_plan_casts = [

View File

@ -18,6 +18,7 @@ use App\Models\Expense;
use App\Models\Invoice; use App\Models\Invoice;
use App\Models\Payment; use App\Models\Payment;
use App\Models\Project; use App\Models\Project;
use App\Models\PurchaseOrder;
use App\Models\Quote; use App\Models\Quote;
use App\Models\RecurringExpense; use App\Models\RecurringExpense;
use App\Models\RecurringInvoice; use App\Models\RecurringInvoice;
@ -44,8 +45,8 @@ trait GeneratesCounter
$is_client_counter = false; $is_client_counter = false;
$counter_string = $this->getEntityCounter($entity, $client); $counter_string = $this->getEntityCounter($entity, $client);
$pattern = $this->getNumberPattern($entity, $client); $pattern = $this->getNumberPattern($entity, $client);
if ((strpos($pattern, 'clientCounter') !== false) || (strpos($pattern, 'client_counter') !==false) ) { if ((strpos($pattern, 'clientCounter') !== false) || (strpos($pattern, 'client_counter') !==false) ) {
@ -71,9 +72,9 @@ trait GeneratesCounter
$counter_entity = $client->company; $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); $pattern = $this->getNumberPattern($entity, $client);
if(strlen($pattern) > 1 && (stripos($pattern, 'counter') === false)){ if(strlen($pattern) > 1 && (stripos($pattern, 'counter') === false)){
$pattern = $pattern.'{$counter}'; $pattern = $pattern.'{$counter}';
} }
@ -127,9 +128,9 @@ trait GeneratesCounter
break; break;
case Quote::class: case Quote::class:
if ($this->hasSharedCounter($client, 'quote')) if ($this->hasSharedCounter($client, 'quote'))
return 'invoice_number_counter'; return 'invoice_number_counter';
return 'quote_number_counter'; return 'quote_number_counter';
break; break;
case RecurringInvoice::class: case RecurringInvoice::class:
@ -145,14 +146,17 @@ trait GeneratesCounter
return 'payment_number_counter'; return 'payment_number_counter';
break; break;
case Credit::class: case Credit::class:
if ($this->hasSharedCounter($client, 'credit')) if ($this->hasSharedCounter($client, 'credit'))
return 'invoice_number_counter'; return 'invoice_number_counter';
return 'credit_number_counter'; return 'credit_number_counter';
break; break;
case Project::class: case Project::class:
return 'project_number_counter'; return 'project_number_counter';
break; break;
case PurchaseOrder::class:
return 'purchase_order_number_counter';
break;
default: default:
return 'default_number_counter'; return 'default_number_counter';
@ -188,6 +192,20 @@ trait GeneratesCounter
return $this->replaceUserVars($credit, $entity_number); 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. * @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') if($type == 'quote')
return (bool) $client->getSetting('shared_invoice_quote_counter'); return (bool) $client->getSetting('shared_invoice_quote_counter');
@ -438,9 +456,9 @@ trait GeneratesCounter
public function checkNumberAvailable($class, $entity, $number) :bool 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 false;
return true; return true;
} }
@ -504,7 +522,7 @@ trait GeneratesCounter
if($reset_counter_frequency == 0) if($reset_counter_frequency == 0)
return; return;
$timezone = Timezone::find($client->getSetting('timezone_id')); $timezone = Timezone::find($client->getSetting('timezone_id'));
$reset_date = Carbon::parse($client->getSetting('reset_counter_date'), $timezone->name); $reset_date = Carbon::parse($client->getSetting('reset_counter_date'), $timezone->name);
@ -558,6 +576,7 @@ trait GeneratesCounter
$settings->invoice_number_counter = 1; $settings->invoice_number_counter = 1;
$settings->quote_number_counter = 1; $settings->quote_number_counter = 1;
$settings->credit_number_counter = 1; $settings->credit_number_counter = 1;
$settings->purchase_order_number_counter = 1;
$client->company->settings = $settings; $client->company->settings = $settings;
$client->company->save(); $client->company->save();
@ -622,6 +641,7 @@ trait GeneratesCounter
$settings->task_number_counter = 1; $settings->task_number_counter = 1;
$settings->expense_number_counter = 1; $settings->expense_number_counter = 1;
$settings->recurring_expense_number_counter =1; $settings->recurring_expense_number_counter =1;
$settings->purchase_order_number_counter = 1;
$company->settings = $settings; $company->settings = $settings;
$company->save(); $company->save();
@ -644,7 +664,7 @@ trait GeneratesCounter
$search = []; $search = [];
$replace = []; $replace = [];
$search[] = '{$counter}'; $search[] = '{$counter}';
$replace[] = $counter; $replace[] = $counter;
@ -659,7 +679,7 @@ trait GeneratesCounter
$search[] = '{$year}'; $search[] = '{$year}';
$replace[] = Carbon::now($entity->company->timezone()->name)->format('Y'); $replace[] = Carbon::now($entity->company->timezone()->name)->format('Y');
if (strstr($pattern, '{$user_id}') || strstr($pattern, '{$userId}')) { if (strstr($pattern, '{$user_id}') || strstr($pattern, '{$userId}')) {
$user_id = $entity->user_id ? $entity->user_id : 0; $user_id = $entity->user_id ? $entity->user_id : 0;
$search[] = '{$user_id}'; $search[] = '{$user_id}';
@ -683,7 +703,7 @@ trait GeneratesCounter
$search[] = '{$vendor_id_number}'; $search[] = '{$vendor_id_number}';
$replace[] = $entity->id_number; $replace[] = $entity->id_number;
} }
if ($entity instanceof Expense) { if ($entity instanceof Expense) {
if ($entity->vendor) { if ($entity->vendor) {
$search[] = '{$vendor_id_number}'; $search[] = '{$vendor_id_number}';
@ -708,7 +728,7 @@ trait GeneratesCounter
$search[] = '{$expense_id_number}'; $search[] = '{$expense_id_number}';
$replace[] = $entity->id_number; $replace[] = $entity->id_number;
} }
if ($entity->client || ($entity instanceof Client)) { if ($entity->client || ($entity instanceof Client)) {
$client = $entity->client ?: $entity; $client = $entity->client ?: $entity;