mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-07 19:04:41 -04:00
Refactor for invoice number generator
This commit is contained in:
parent
e669718adb
commit
dbfee7d519
@ -132,23 +132,30 @@ trait GeneratesCounter
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function getNextQuoteNumber(Client $client)
|
public function getNextQuoteNumber(Client $client)
|
||||||
|
{
|
||||||
|
return $this->getNextEntityNumber(Quote::class, $client);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getNextEntityNumber($entity, Client $client)
|
||||||
{
|
{
|
||||||
//Reset counters if enabled
|
//Reset counters if enabled
|
||||||
$this->resetCounters($client);
|
$this->resetCounters($client);
|
||||||
|
|
||||||
$used_counter = 'quote_number_counter';
|
$is_client_counter = false;
|
||||||
|
|
||||||
if ($this->hasSharedCounter($client)) {
|
$counter_pattern = $this->getNumberPattern($entity, $client);
|
||||||
$used_counter = 'invoice_number_counter';
|
$counter_string = $this->getEntityCounter($entity, $client);
|
||||||
}
|
|
||||||
|
$pattern = $client->getSetting($counter_pattern);
|
||||||
|
|
||||||
|
nlog($counter_pattern);
|
||||||
|
nlog($counter_string);
|
||||||
|
nlog($pattern);
|
||||||
|
|
||||||
//todo handle if we have specific client patterns in the future
|
|
||||||
$pattern = $client->getSetting('quote_number_pattern');
|
|
||||||
//Determine if we are using client_counters
|
|
||||||
if (strpos($pattern, 'clientCounter') || strpos($pattern, 'client_counter')) {
|
if (strpos($pattern, 'clientCounter') || strpos($pattern, 'client_counter')) {
|
||||||
|
|
||||||
if (property_exists($client->settings, $used_counter)) {
|
if (property_exists($client->settings, $counter_string)) {
|
||||||
$counter = $client->settings->{$used_counter};
|
$counter = $client->settings->{$counter_string};
|
||||||
} else {
|
} else {
|
||||||
$counter = 1;
|
$counter = 1;
|
||||||
}
|
}
|
||||||
@ -156,8 +163,8 @@ trait GeneratesCounter
|
|||||||
$counter_entity = $client;
|
$counter_entity = $client;
|
||||||
} elseif (strpos($pattern, 'groupCounter') || strpos($pattern, 'group_counter')) {
|
} elseif (strpos($pattern, 'groupCounter') || strpos($pattern, 'group_counter')) {
|
||||||
|
|
||||||
if (property_exists($client->group_settings, $used_counter)) {
|
if (property_exists($client->group_settings, $counter_string)) {
|
||||||
$counter = $client->group_settings->{$used_counter};
|
$counter = $client->group_settings->{$counter_string};
|
||||||
} else {
|
} else {
|
||||||
$counter = 1;
|
$counter = 1;
|
||||||
}
|
}
|
||||||
@ -165,22 +172,82 @@ trait GeneratesCounter
|
|||||||
$counter_entity = $client->group_settings;
|
$counter_entity = $client->group_settings;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$counter = $client->company->settings->{$used_counter};
|
$counter = $client->company->settings->{$counter_string};
|
||||||
$counter_entity = $client->company;
|
$counter_entity = $client->company;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Return a valid counter
|
|
||||||
$pattern = $client->getSetting('quote_number_pattern');
|
//If it is a quote - we need to
|
||||||
|
$pattern = $this->getNumberPattern($entity, $client);
|
||||||
|
|
||||||
$padding = $client->getSetting('counter_padding');
|
$padding = $client->getSetting('counter_padding');
|
||||||
|
|
||||||
$quote_number = $this->checkEntityNumber(Quote::class, $client, $counter, $padding, $pattern);
|
$entity_number = $this->checkEntityNumber($entity, $client, $counter, $padding, $pattern);
|
||||||
|
|
||||||
// if($this->recurring_id)
|
$this->incrementCounter($counter_entity, $counter_string);
|
||||||
// $quote_number = $this->prefixCounter($quote_number, $client->getSetting('recurring_number_prefix'));
|
|
||||||
|
|
||||||
$this->incrementCounter($counter_entity, $used_counter);
|
return $entity_number;
|
||||||
|
|
||||||
return $quote_number;
|
}
|
||||||
|
|
||||||
|
private function getNumberPattern($entity, Client $client)
|
||||||
|
{
|
||||||
|
$pattern_string = '';
|
||||||
|
|
||||||
|
switch ($entity) {
|
||||||
|
case Invoice::class:
|
||||||
|
$pattern_string = 'invoice_number_pattern';
|
||||||
|
break;
|
||||||
|
case Quote::class:
|
||||||
|
$pattern_string = 'quote_number_pattern';
|
||||||
|
break;
|
||||||
|
case RecurringInvoice::class:
|
||||||
|
$pattern_string = 'recurring_invoice_number_pattern';
|
||||||
|
break;
|
||||||
|
case Payment::class:
|
||||||
|
$pattern_string = 'payment_number_pattern';
|
||||||
|
break;
|
||||||
|
case Credit::class:
|
||||||
|
$pattern_string = 'credit_number_pattern';
|
||||||
|
break;
|
||||||
|
case Project::class:
|
||||||
|
$pattern_string = 'project_number_pattern';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $client->getSetting($pattern_string);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getEntityCounter($entity, $client)
|
||||||
|
{
|
||||||
|
switch ($entity) {
|
||||||
|
case Invoice::class:
|
||||||
|
return 'invoice_number_counter';
|
||||||
|
break;
|
||||||
|
case Quote::class:
|
||||||
|
|
||||||
|
if ($this->hasSharedCounter($client))
|
||||||
|
return 'invoice_number_counter';
|
||||||
|
|
||||||
|
return 'quote_number_counter';
|
||||||
|
break;
|
||||||
|
case RecurringInvoice::class:
|
||||||
|
return 'recurring_invoice_number_counter';
|
||||||
|
break;
|
||||||
|
case Payment::class:
|
||||||
|
return 'payment_number_counter';
|
||||||
|
break;
|
||||||
|
case Credit::class:
|
||||||
|
return 'credit_number_counter';
|
||||||
|
break;
|
||||||
|
case Project::class:
|
||||||
|
return 'project_number_counter';
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return 'default_number_counter';
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getNextRecurringInvoiceNumber(Client $client)
|
public function getNextRecurringInvoiceNumber(Client $client)
|
||||||
@ -194,10 +261,7 @@ trait GeneratesCounter
|
|||||||
//todo handle if we have specific client patterns in the future
|
//todo handle if we have specific client patterns in the future
|
||||||
$pattern = $client->company->settings->recurring_invoice_number_pattern;
|
$pattern = $client->company->settings->recurring_invoice_number_pattern;
|
||||||
|
|
||||||
//Determine if we are using client_counters
|
if (strpos($pattern, 'clientCounter') || strpos($pattern, 'client_counter')) {
|
||||||
if (strpos($pattern, 'client_counter') === false) {
|
|
||||||
$counter = $client->company->settings->recurring_invoice_number_counter;
|
|
||||||
} else {
|
|
||||||
|
|
||||||
if (property_exists($client->settings, 'recurring_invoice_number_counter')) {
|
if (property_exists($client->settings, 'recurring_invoice_number_counter')) {
|
||||||
$counter = $client->settings->recurring_invoice_number_counter;
|
$counter = $client->settings->recurring_invoice_number_counter;
|
||||||
@ -205,14 +269,24 @@ trait GeneratesCounter
|
|||||||
$counter = 1;
|
$counter = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
$is_client_counter = true;
|
$counter_entity = $client;
|
||||||
|
|
||||||
|
} elseif (strpos($pattern, 'groupCounter') || strpos($pattern, 'group_counter')) {
|
||||||
|
|
||||||
|
if (property_exists($client->group_settings, 'recurring_invoice_number_counter')) {
|
||||||
|
$counter = $client->group_settings->recurring_invoice_number_counter;
|
||||||
|
} else {
|
||||||
|
$counter = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$counter_entity = $client->group_settings;
|
||||||
|
} else {
|
||||||
|
$counter = $client->company->settings->recurring_invoice_number_counter;
|
||||||
|
$counter_entity = $client->company;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Return a valid counter
|
|
||||||
$pattern = '';
|
|
||||||
$padding = $client->getSetting('counter_padding');
|
$padding = $client->getSetting('counter_padding');
|
||||||
$invoice_number = $this->checkEntityNumber(RecurringInvoice::class, $client, $counter, $padding, $pattern);
|
$invoice_number = $this->checkEntityNumber(RecurringInvoice::class, $client, $counter, $padding, $pattern);
|
||||||
//$invoice_number = $this->prefixCounter($invoice_number, $client->getSetting('recurring_number_prefix'));
|
|
||||||
|
|
||||||
//increment the correct invoice_number Counter (company vs client)
|
//increment the correct invoice_number Counter (company vs client)
|
||||||
if ($is_client_counter) {
|
if ($is_client_counter) {
|
||||||
@ -380,7 +454,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) : bool
|
public function hasSharedCounter(Client $client) : bool
|
||||||
{
|
{
|
||||||
return (bool) $client->getSetting('shared_invoice_quote_counter');
|
return (bool) $client->getSetting('shared_invoice_quote_counter');
|
||||||
}
|
}
|
||||||
@ -442,6 +516,9 @@ trait GeneratesCounter
|
|||||||
$settings->invoice_number_counter = 0;
|
$settings->invoice_number_counter = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!property_exists($settings, $counter_name))
|
||||||
|
$settings->{$counter_name} = 1;
|
||||||
|
|
||||||
$settings->{$counter_name} = $settings->{$counter_name} + 1;
|
$settings->{$counter_name} = $settings->{$counter_name} + 1;
|
||||||
|
|
||||||
$entity->settings = $settings;
|
$entity->settings = $settings;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user