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_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 = [
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user