diff --git a/app/DataMapper/CompanySettings.php b/app/DataMapper/CompanySettings.php index eff17eebade1..befa5cb8331f 100644 --- a/app/DataMapper/CompanySettings.php +++ b/app/DataMapper/CompanySettings.php @@ -151,7 +151,6 @@ class CompanySettings extends BaseSettings public $require_invoice_signature = false; public $require_quote_signature = false; - /* Company Meta data that we can use to build sub companies*/ public $name; diff --git a/app/Models/Client.php b/app/Models/Client.php index abb4159e05f5..44732f2fffa5 100644 --- a/app/Models/Client.php +++ b/app/Models/Client.php @@ -230,7 +230,7 @@ class Client extends BaseModel return $this->company->settings->{$setting}; } - + throw new \Exception("Settings corrupted", 1); diff --git a/app/Models/Presenters/ClientPresenter.php b/app/Models/Presenters/ClientPresenter.php index f11ebe7ef4cb..7cb4b62bc320 100644 --- a/app/Models/Presenters/ClientPresenter.php +++ b/app/Models/Presenters/ClientPresenter.php @@ -11,6 +11,8 @@ namespace App\Models\Presenters; +use App\Models\Country; + /** * Class ClientPresenter * @package App\Models\Presenters @@ -94,4 +96,62 @@ class ClientPresenter extends EntityPresenter { return $this->entity->website ?: ''; } + + /** + * Calculated company data fields + * using settings + */ + public function company_name() + { + + $settings = $this->entity->getMergedSettings(); + + return $settings->name ?: ctrans('texts.untitled_account'); + } + + public function company_address() + { + + $settings = $this->entity->getMergedSettings(); + + $str = ''; + + if ($settings->address1) { + $str .= e($settings->address1) . '
'; + } + if ($settings->address2) { + $str .= e($settings->address2) . '
'; + } + if ($cityState = $this->getCityState()) { + $str .= e($cityState) . '
'; + } + if ($country = Country::find($settings->country_id)) { + $str .= e($country->name) . '
'; + } + + return $str; + + } + + public function getCityState() + { + $settings = $this->entity->getMergedSettings(); + + $country = false; + + if($settings->country_id) + $country = Country::find($settings->country_id); + + $swap = $country && $country->swap_postal_code; + + $city = e($settings->city ?: ''); + $state = e($settings->state ?: ''); + $postalCode = e($settings->postal_code ?: ''); + + if ($city || $state || $postalCode) { + return $this->cityStateZip($city, $state, $postalCode, $swap); + } else { + return false; + } + } } diff --git a/app/Models/Presenters/CompanyPresenter.php b/app/Models/Presenters/CompanyPresenter.php index c4daa75d9462..dc5dcbbfb379 100644 --- a/app/Models/Presenters/CompanyPresenter.php +++ b/app/Models/Presenters/CompanyPresenter.php @@ -28,7 +28,7 @@ class CompanyPresenter extends EntityPresenter public function logo() { - return strlen($this->entity->logo > 0) ? $this->entity->logo : 'https://www.invoiceninja.com/wp-content/uploads/2019/01/InvoiceNinja-Logo-Round-300x300.png'; + return strlen($this->entity->getLogo() > 0) ? $this->entity->getLogo() : 'https://www.invoiceninja.com/wp-content/uploads/2019/01/InvoiceNinja-Logo-Round-300x300.png'; } public function address() diff --git a/tests/Feature/ClientPresenterTest.php b/tests/Feature/ClientPresenterTest.php new file mode 100644 index 000000000000..2e44f2160fee --- /dev/null +++ b/tests/Feature/ClientPresenterTest.php @@ -0,0 +1,53 @@ +makeTestData(); + + } + + public function testCompanyName() + { + + $settings = $this->client->company->settings; + + $settings->name = 'test'; + $this->client->company->settings = $settings; + $this->client->company->save(); + + $this->client->getSetting('name'); + + $merged_settings = $this->client->getMergedSettings(); + + $name = $this->client->present()->company_name(); + + $this->assertEquals('test', $merged_settings->name); + $this->assertEquals('test', $name); + } + + public function testCompanyAddress() + { + $this->assertNotNull($this->client->present()->company_address()); + } + +} \ No newline at end of file