'string', 'logo_url' => 'string', 'website' => 'string', 'address1' => 'string', 'address2' => 'string', 'city' => 'string', 'state' => 'string', 'postal_code' => 'string', 'phone' => 'string', 'email' => 'string', 'country_id' => 'string', 'vat_number' => 'string', 'id_number' => 'string', 'has_custom_design1' => 'bool', 'has_custom_design2' => 'bool', 'has_custom_design3' => 'bool', 'tax_rate1' => 'float', 'tax_rate2' => 'float', 'require_invoice_signature' => 'bool', 'require_quote_signature' => 'bool', 'show_accept_quote_terms' => 'bool', 'show_accept_invoice_terms' => 'bool', 'timezone_id' => 'string', 'date_format_id' => 'string', 'datetime_format_id' => 'string', 'military_time' => 'bool', 'language_id' => 'string', 'precision' => 'int', 'show_currency_symbol' => 'bool', 'show_currency_code' => 'bool', 'payment_terms' => 'int', 'custom_label1' => 'string', 'custom_label2' => 'string', 'custom_label3' => 'string', 'custom_label4' => 'string', 'custom_client_label1' => 'string', 'custom_client_label2' => 'string', 'custom_client_label3' => 'string', 'custom_client_label4' => 'string', 'custom_client_contact_label1' => 'string', 'custom_client_contact_label2' => 'string', 'custom_client_contact_label3' => 'string', 'custom_client_contact_label4' => 'string', 'custom_invoice_label1' => 'string', 'custom_invoice_label2' => 'string', 'custom_invoice_label3' => 'string', 'custom_invoice_label4' => 'string', 'custom_product_label1' => 'string', 'custom_product_label2' => 'string', 'custom_product_label3' => 'string', 'custom_product_label4' => 'string', 'custom_task_label1' => 'string', 'custom_task_label2' => 'string', 'custom_task_label3' => 'string', 'custom_task_label4' => 'string', 'custom_expense_label1' => 'string', 'custom_expense_label2' => 'string', 'custom_expense_label3' => 'string', 'custom_expense_label4' => 'string', 'custom_invoice_taxes1' => 'bool', 'custom_invoice_taxes2' => 'bool', 'default_task_rate' => 'float', 'send_reminders' => 'bool', 'show_tasks_in_portal' => 'bool', 'custom_message_dashboard' => 'string', 'custom_message_unpaid_invoice' => 'string', 'custom_message_paid_invoice' => 'string', 'custom_message_unapproved_quote' => 'string', 'lock_sent_invoices' => 'bool', 'auto_archive_invoice' => 'bool', 'inclusive_taxes' => 'bool', 'invoice_number_prefix' => 'string', 'invoice_number_pattern' => 'string', 'invoice_number_counter' => 'int', 'quote_number_prefix' => 'string', 'quote_number_pattern' => 'string', 'quote_number_counter' => 'int', 'client_number_prefix' => 'string', 'client_number_pattern' => 'string', 'client_number_counter' => 'int', 'credit_number_prefix' => 'string', 'credit_number_pattern' => 'string', 'credit_number_counter' => 'int', 'shared_invoice_quote_counter' => 'bool', 'recurring_invoice_number_prefix' => 'string', 'reset_counter_frequency_id' => 'int', 'reset_counter_date' => 'string', 'counter_padding' => 'int', 'design' => 'string', 'company_gateways' => 'string', ]; /** * Cast object values and return entire class * prevents missing properties from not being returned * and always ensure an up to date class is returned * * @return \stdClass */ public function __construct($obj) { // parent::__construct($obj); } /** * Provides class defaults on init * @return object */ public static function defaults() : \stdClass { $config = json_decode(config('ninja.settings')); $data = (object)get_class_vars(CompanySettings::class); unset($data->casts); $data->timezone_id = (string)config('ninja.i18n.timezone_id'); $data->language_id = (string)config('ninja.i18n.language_id'); $data->payment_terms = (int)config('ninja.i18n.payment_terms'); $data->datetime_format_id = (string)config('ninja.i18n.datetime_format_id'); $data->military_time = (bool )config('ninja.i18n.military_time'); $data->date_format_id = (string)config('ninja.i18n.date_format_id'); $data->start_of_week = (int) config('ninja.i18n.start_of_week'); $data->financial_year_start = (int)config('ninja.i18n.financial_year_start'); $data->country_id = (int)config('ninja.i18n.country_id'); $data->translations = (object) []; return self::setCasts($data, self::$casts); } /** * In case we update the settings object in the future we * need to provide a fallback catch on old settings objects which will * set new properties to the object prior to being returned. * * @param object $data The settings object to be checked */ public static function setProperties($settings) :\stdClass { $company_settings = (object)get_class_vars(CompanySettings::class); foreach($company_settings as $key => $value) { if(!property_exists($settings, $key)) $settings->{$key} = self::castAttribute($key, $company_settings->{$key}); } return $settings; } }