mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
INA-6 |Added purchase order number counter
This commit is contained in:
parent
7e5e10e5f1
commit
4e4420dd32
@ -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 = [
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user