diff --git a/app/DataMapper/ClientSettings.php b/app/DataMapper/ClientSettings.php index 205fed4fff99..290666afe53b 100644 --- a/app/DataMapper/ClientSettings.php +++ b/app/DataMapper/ClientSettings.php @@ -62,12 +62,13 @@ class ClientSettings extends BaseSettings public $client_number_prefix; public $client_number_pattern; - + public $credit_number_prefix; public $credit_number_pattern; public $credit_number_counter; public $shared_invoice_quote_counter; + public $counter_padding; /** * Settings which which are unique to client settings diff --git a/app/DataMapper/CompanySettings.php b/app/DataMapper/CompanySettings.php index 1ab089192efe..c7141902a76c 100644 --- a/app/DataMapper/CompanySettings.php +++ b/app/DataMapper/CompanySettings.php @@ -87,6 +87,7 @@ class CompanySettings extends BaseSettings public $client_number_prefix; public $client_number_pattern; + public $client_number_counter; public $credit_number_prefix; public $credit_number_pattern; @@ -98,6 +99,7 @@ class CompanySettings extends BaseSettings public $recurring_number_prefix; public $reset_counter_frequency_id; public $reset_counter_date; + public $counter_padding; /** * Cast object values and return entire class @@ -143,6 +145,8 @@ class CompanySettings extends BaseSettings 'invoice_number_counter' => 1, 'quote_number_counter' => 1, 'credit_number_counter' => 1, + 'client_number_counter' => 1, + 'counter_padding' => 0, 'translations' => (object) [], ]; diff --git a/app/Models/Client.php b/app/Models/Client.php index a56501065228..6f4c6715fa8d 100644 --- a/app/Models/Client.php +++ b/app/Models/Client.php @@ -9,6 +9,7 @@ use App\Models\Company; use App\Models\Country; use App\Models\Filterable; use App\Models\Timezone; +use App\Utils\Traits\GeneratesNumberCounter; use App\Utils\Traits\MakesHash; use Hashids\Hashids; use Illuminate\Database\Eloquent\SoftDeletes; @@ -20,6 +21,7 @@ class Client extends BaseModel use MakesHash; use SoftDeletes; use Filterable; + use GeneratesNumberCounter; protected $presenter = 'App\Models\Presenters\ClientPresenter'; diff --git a/app/Models/Credit.php b/app/Models/Credit.php new file mode 100644 index 000000000000..538af9ca385a --- /dev/null +++ b/app/Models/Credit.php @@ -0,0 +1,10 @@ +getCounter($entity); + } public function hasSharedCounter() : bool @@ -21,16 +28,24 @@ trait GeneratesNumberCounter } - public function incrementCounter($entity) + private function incrementCounter($entity) { } - public function entity_name($entity) + private function entity_name($entity) { return strtolower(class_basename($entity)); } + public function getCounter($entity) : int + { + $counter = $this->entity_name($entity) . '_number_counter'; + + return $this->getSettingsByKey( $counter )->{$counter}; + + } + } \ No newline at end of file diff --git a/tests/Unit/GenerateNumberTest.php b/tests/Unit/GenerateNumberTest.php new file mode 100644 index 000000000000..9ff728ed8e4d --- /dev/null +++ b/tests/Unit/GenerateNumberTest.php @@ -0,0 +1,101 @@ +faker = \Faker\Factory::create(); + + Model::reguard(); + } + + + public function testEntityName() + { + + $this->assertEquals($this->entity_name(Client::class), 'client'); + + } + + public function testCounterVariables() + { + $account = factory(\App\Models\Account::class)->create(); + $company = factory(\App\Models\Company::class)->create([ + 'account_id' => $account->id, + ]); + + $account->default_company_id = $company->id; + $account->save(); + + $user = factory(\App\Models\User::class)->create([ + // 'account_id' => $account->id, + 'confirmation_code' => $this->createDbHash(config('database.default')) + ]); + + + $userPermissions = collect([ + 'view_invoice', + 'view_client', + 'edit_client', + 'edit_invoice', + 'create_invoice', + 'create_client' + ]); + + $userSettings = DefaultSettings::userSettings(); + + $user->companies()->attach($company->id, [ + 'account_id' => $account->id, + 'is_owner' => 1, + 'is_admin' => 1, + 'permissions' => $userPermissions->toJson(), + 'settings' => json_encode($userSettings), + 'is_locked' => 0, + ]); + + factory(\App\Models\Client::class)->create(['user_id' => $user->id, 'company_id' => $company->id])->each(function ($c) use ($user, $company){ + + factory(\App\Models\ClientContact::class,1)->create([ + 'user_id' => $user->id, + 'client_id' => $c->id, + 'company_id' => $company->id, + 'is_primary' => 1 + ]); + + factory(\App\Models\ClientContact::class,2)->create([ + 'user_id' => $user->id, + 'client_id' => $c->id, + 'company_id' => $company->id + ]); + + }); + + $client = Client::whereUserId($user->id)->whereCompanyId($company->id)->first(); + + $this->assertEquals($client->getCounter(Client::class), 1); + } +}