mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-10-31 12:57:30 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			706 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			706 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Invoice Ninja (https://invoiceninja.com).
 | |
|  *
 | |
|  * @link https://github.com/invoiceninja/invoiceninja source repository
 | |
|  *
 | |
|  * @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
 | |
|  *
 | |
|  * @license https://www.elastic.co/licensing/elastic-license
 | |
|  */
 | |
| 
 | |
| namespace App\DataMapper;
 | |
| 
 | |
| use App\Utils\Traits\MakesHash;
 | |
| use stdClass;
 | |
| 
 | |
| /**
 | |
|  * CompanySettings.
 | |
|  */
 | |
| class CompanySettings extends BaseSettings
 | |
| {
 | |
|     use MakesHash;
 | |
|     /*Group settings based on functionality*/
 | |
| 
 | |
|     /*Invoice*/
 | |
|     public $auto_archive_invoice = false; // @implemented
 | |
| 
 | |
|     public $lock_invoices = 'off'; //off,when_sent,when_paid //@implemented
 | |
| 
 | |
|     public $enable_client_portal_tasks = false; //@ben to implement
 | |
|     public $show_all_tasks_client_portal = 'invoiced'; // all, uninvoiced, invoiced
 | |
|     public $enable_client_portal_password = false; //@implemented
 | |
|     public $enable_client_portal = true; //@implemented
 | |
|     public $enable_client_portal_dashboard = false; // @TODO There currently is no dashboard so this is pending
 | |
|     public $signature_on_pdf = false; //@implemented
 | |
|     public $document_email_attachment = false; //@TODO I assume this is 3rd party attachments on the entity to be included
 | |
| 
 | |
|     public $portal_design_id = '1'; //?@deprecated
 | |
| 
 | |
|     public $timezone_id = ''; //@implemented
 | |
|     public $date_format_id = ''; //@implemented
 | |
|     public $military_time = false; // @TODOImplemented in Tasks only?
 | |
| 
 | |
|     public $language_id = ''; //@implemented
 | |
|     public $show_currency_code = false; //@implemented
 | |
| 
 | |
|     public $company_gateway_ids = ''; //@implemented
 | |
| 
 | |
|     public $currency_id = '1'; //@implemented
 | |
| 
 | |
|     public $custom_value1 = ''; //@implemented
 | |
|     public $custom_value2 = ''; //@implemented
 | |
|     public $custom_value3 = ''; //@implemented
 | |
|     public $custom_value4 = ''; //@implemented
 | |
| 
 | |
|     public $default_task_rate = 0; // @TODO Where do we inject this?
 | |
| 
 | |
|     public $payment_terms = ''; //@implemented
 | |
|     public $send_reminders = true; //@TODO
 | |
| 
 | |
|     public $custom_message_dashboard = ''; // @TODO There currently is no dashboard so this is pending
 | |
|     public $custom_message_unpaid_invoice = '';
 | |
|     public $custom_message_paid_invoice = '';
 | |
|     public $custom_message_unapproved_quote = '';
 | |
|     public $auto_archive_quote = false; //@implemented
 | |
|     public $auto_convert_quote = true; //@implemented
 | |
|     public $auto_email_invoice = true; //@only used for Recurring Invoices, if set to false, we never send?
 | |
| 
 | |
|     public $entity_send_time = 0;
 | |
| 
 | |
|     public $inclusive_taxes = false; //@implemented
 | |
|     public $quote_footer = ''; //@implmented
 | |
| 
 | |
|     public $translations;
 | |
| 
 | |
|     public $counter_number_applied = 'when_saved'; // when_saved , when_sent //@implemented
 | |
|     public $quote_number_applied = 'when_saved'; // when_saved , when_sent //@implemented
 | |
| 
 | |
|     /* Counters */
 | |
|     public $invoice_number_pattern = ''; //@implemented
 | |
|     public $invoice_number_counter = 1; //@implemented
 | |
| 
 | |
|     public $recurring_invoice_number_pattern = ''; //@implemented
 | |
|     public $recurring_invoice_number_counter = 1; //@implemented
 | |
| 
 | |
|     public $quote_number_pattern = ''; //@implemented
 | |
|     public $quote_number_counter = 1; //@implemented
 | |
| 
 | |
|     public $client_number_pattern = ''; //@implemented
 | |
|     public $client_number_counter = 1; //@implemented
 | |
| 
 | |
|     public $credit_number_pattern = ''; //@implemented
 | |
|     public $credit_number_counter = 1; //@implemented
 | |
| 
 | |
|     public $task_number_pattern = ''; //@implemented
 | |
|     public $task_number_counter = 1; //@implemented
 | |
| 
 | |
|     public $expense_number_pattern = ''; //@implemented
 | |
|     public $expense_number_counter = 1; //@implemented
 | |
| 
 | |
|     public $recurring_expense_number_pattern = ''; 
 | |
|     public $recurring_expense_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
 | |
| 
 | |
|     public $ticket_number_pattern = ''; //@implemented
 | |
|     public $ticket_number_counter = 1; //@implemented
 | |
| 
 | |
|     public $payment_number_pattern = ''; //@implemented
 | |
|     public $payment_number_counter = 1; //@implemented
 | |
| 
 | |
|     public $project_number_pattern = ''; //@implemented
 | |
|     public $project_number_counter = 1; //@implemented
 | |
| 
 | |
|     public $shared_invoice_quote_counter = false; //@implemented
 | |
|     public $shared_invoice_credit_counter = false; //@implemented
 | |
|     public $recurring_number_prefix = ''; //@implemented
 | |
|     public $reset_counter_frequency_id = '0'; //@implemented
 | |
|     public $reset_counter_date = ''; //@implemented
 | |
|     public $counter_padding = 4; //@implemented
 | |
| 
 | |
|     public $auto_bill = 'off'; //off,always,optin,optout //@implemented
 | |
|     public $auto_bill_date = 'on_due_date'; // on_due_date , on_send_date //@implemented
 | |
| 
 | |
|     public $invoice_terms = ''; //@implemented
 | |
|     public $quote_terms = ''; //@implemented
 | |
|     public $invoice_taxes = 0; // ? used in AP only?
 | |
| 
 | |
|     public $invoice_design_id = 'Wpmbk5ezJn'; //@implemented
 | |
|     public $quote_design_id = 'Wpmbk5ezJn'; //@implemented
 | |
|     public $credit_design_id = 'Wpmbk5ezJn'; //@implemented
 | |
|     public $invoice_footer = ''; //@implemented
 | |
|     public $credit_footer = ''; //@implemented
 | |
|     public $credit_terms = ''; //@implemented
 | |
|     public $invoice_labels = ''; //@TODO used in AP only?
 | |
|     public $tax_name1 = ''; //@TODO where do we use this?
 | |
|     public $tax_rate1 = 0; //@TODO where do we use this?
 | |
|     public $tax_name2 = ''; //@TODO where do we use this?
 | |
|     public $tax_rate2 = 0; //@TODO where do we use this?
 | |
|     public $tax_name3 = ''; //@TODO where do we use this?
 | |
|     public $tax_rate3 = 0; //@TODO where do we use this?
 | |
|     public $payment_type_id = '0'; //@TODO where do we use this?
 | |
| 
 | |
|     public $valid_until = ''; //@implemented
 | |
| 
 | |
|     public $show_accept_invoice_terms = false; //@TODO ben to confirm
 | |
|     public $show_accept_quote_terms = false;  //@TODO ben to confirm
 | |
|     public $require_invoice_signature = false;  //@TODO ben to confirm
 | |
|     public $require_quote_signature = false;  //@TODO ben to confirm
 | |
| 
 | |
|     //email settings
 | |
|     public $email_sending_method = 'default'; //enum 'default','gmail' //@implemented
 | |
|     public $gmail_sending_user_id = '0'; //@implemented
 | |
| 
 | |
|     public $reply_to_email = ''; //@implemented
 | |
|     public $reply_to_name = ''; //@implemented
 | |
|     public $bcc_email = ''; //@TODO
 | |
|     public $pdf_email_attachment = false; //@implemented
 | |
|     public $ubl_email_attachment = false; //@implemented
 | |
| 
 | |
|     public $email_style = 'light'; //plain, light, dark, custom  //@implemented
 | |
|     public $email_style_custom = '';      //the template itself  //@implemented
 | |
|     public $email_subject_invoice = '';  //@implemented
 | |
|     public $email_subject_quote = '';  //@implemented
 | |
|     public $email_subject_credit = ''; //@implemented
 | |
|     public $email_subject_payment = ''; //@implemented
 | |
|     public $email_subject_payment_partial = ''; //@implemented
 | |
|     public $email_subject_statement = ''; //@implemented
 | |
|     public $email_template_invoice = ''; //@implemented
 | |
|     public $email_template_credit = ''; //@implemented
 | |
|     public $email_template_quote = ''; //@implemented
 | |
|     public $email_template_payment = ''; //@implemented
 | |
|     public $email_template_payment_partial = ''; //@implemented
 | |
|     public $email_template_statement = ''; //@implemented
 | |
|     public $email_subject_reminder1 = ''; //@implemented
 | |
|     public $email_subject_reminder2 = ''; //@implemented
 | |
|     public $email_subject_reminder3 = ''; //@implemented
 | |
|     public $email_subject_reminder_endless = ''; //@implemented
 | |
|     public $email_template_reminder1 = ''; //@implemented
 | |
|     public $email_template_reminder2 = ''; //@implemented
 | |
|     public $email_template_reminder3 = ''; //@implemented
 | |
|     public $email_template_reminder_endless = ''; //@implemented
 | |
|     public $email_signature = ''; //@implemented
 | |
|     public $enable_email_markup = true; //@TODO -
 | |
| 
 | |
|     public $email_subject_custom1 = ''; //@TODO
 | |
|     public $email_subject_custom2 = ''; //@TODO
 | |
|     public $email_subject_custom3 = ''; //@TODO
 | |
| 
 | |
|     public $email_template_custom1 = ''; //@TODO
 | |
|     public $email_template_custom2 = ''; //@TODO
 | |
|     public $email_template_custom3 = ''; //@TODO
 | |
| 
 | |
|     public $enable_reminder1 = false; //@implmemented
 | |
|     public $enable_reminder2 = false; //@implmemented
 | |
|     public $enable_reminder3 = false; //@implmemented
 | |
|     public $enable_reminder_endless = false; //@implmemented
 | |
| 
 | |
|     public $num_days_reminder1 = 0;//@implmemented
 | |
|     public $num_days_reminder2 = 0;//@implmemented
 | |
|     public $num_days_reminder3 = 0;//@implmemented
 | |
| 
 | |
|     public $schedule_reminder1 = ''; // (enum: after_invoice_date, before_due_date, after_due_date) implmemented
 | |
|     public $schedule_reminder2 = ''; // (enum: after_invoice_date, before_due_date, after_due_date) implmemented
 | |
|     public $schedule_reminder3 = ''; // (enum: after_invoice_date, before_due_date, after_due_date) implmemented
 | |
| 
 | |
|     public $reminder_send_time = 0; //number of seconds from UTC +0 to send reminders @TODO
 | |
| 
 | |
|     public $late_fee_amount1 = 0; //@implemented
 | |
|     public $late_fee_amount2 = 0; //@implemented
 | |
|     public $late_fee_amount3 = 0; //@implemented
 | |
| 
 | |
|     public $late_fee_percent1 = 0; //@implemented
 | |
|     public $late_fee_percent2 = 0; //@implemented
 | |
|     public $late_fee_percent3 = 0; //@implemented
 | |
| 
 | |
|     public $endless_reminder_frequency_id = '0'; //@implemented
 | |
|     public $late_fee_endless_amount = 0; //@implemented
 | |
|     public $late_fee_endless_percent = 0; //@implemented
 | |
| 
 | |
|     public $client_online_payment_notification = true; //@todo implement in notifications check this bool prior to sending payment notification to client
 | |
|     public $client_manual_payment_notification = true; //@todo implement in notifications check this bool prior to sending manual payment notification to client
 | |
| 
 | |
|     /* Company Meta data that we can use to build sub companies*/
 | |
| 
 | |
|     public $name = ''; //@implemented
 | |
|     public $company_logo = ''; //@implemented
 | |
|     public $website = ''; //@implemented
 | |
|     public $address1 = ''; //@implemented
 | |
|     public $address2 = ''; //@implemented
 | |
|     public $city = ''; //@implemented
 | |
|     public $state = ''; //@implemented
 | |
|     public $postal_code = ''; //@implemented
 | |
|     public $phone = ''; //@implemented
 | |
|     public $email = ''; //@implemented
 | |
|     public $country_id; //@implemented
 | |
|     public $vat_number = ''; //@implemented
 | |
|     public $id_number = ''; //@implemented
 | |
| 
 | |
|     public $page_size = 'A4';  //Letter, Legal, Tabloid, Ledger, A0, A1, A2, A3, A4, A5, A6
 | |
|     public $page_layout = 'portrait';
 | |
|     public $font_size = 7; //@implemented
 | |
|     public $primary_font = 'Roboto';
 | |
|     public $secondary_font = 'Roboto';
 | |
|     public $primary_color = '#298AAB';
 | |
|     public $secondary_color = '#7081e0';
 | |
| 
 | |
|     public $hide_paid_to_date = false; //@TODO where?
 | |
|     public $embed_documents = false; //@TODO where?
 | |
|     public $all_pages_header = false; //@deprecated 31-05-2021
 | |
|     public $all_pages_footer = false; //@deprecated 31-05-2021
 | |
|     public $pdf_variables = ''; //@implemented
 | |
| 
 | |
|     public $portal_custom_head = ''; //@TODO @BEN
 | |
|     public $portal_custom_css = ''; //@TODO @BEN
 | |
|     public $portal_custom_footer = ''; //@TODO @BEN
 | |
|     public $portal_custom_js = ''; //@TODO @BEN
 | |
| 
 | |
|     public $client_can_register = false; //@deorecated 04/06/2021
 | |
|     public $client_portal_terms = ''; //@TODO @BEN
 | |
|     public $client_portal_privacy_policy = ''; //@TODO @BEN
 | |
|     public $client_portal_enable_uploads = false; //@implemented
 | |
|     public $client_portal_allow_under_payment = false; //@implemented
 | |
|     public $client_portal_under_payment_minimum = 0; //@implemented
 | |
|     public $client_portal_allow_over_payment = false; //@implemented
 | |
| 
 | |
|     public $use_credits_payment = 'off'; //always, option, off //@implemented
 | |
|     public $hide_empty_columns_on_pdf = false;
 | |
|     public $email_from_name = '';
 | |
| 
 | |
|     public static $casts = [
 | |
|         'email_from_name'                    => 'string',
 | |
|         'show_all_tasks_client_portal'       => 'string',
 | |
|         'entity_send_time'                   => 'int',
 | |
|         'shared_invoice_credit_counter'      => 'bool',
 | |
|         'reply_to_name'                      => 'string',
 | |
|         'hide_empty_columns_on_pdf'          => 'bool',
 | |
|         'enable_reminder_endless'            => 'bool',
 | |
|         'use_credits_payment'                => 'string',
 | |
|         'recurring_invoice_number_pattern'   => 'string',
 | |
|         'recurring_invoice_number_counter'   => 'int',
 | |
|         'client_portal_under_payment_minimum'=> 'float',
 | |
|         'auto_bill_date'                     => 'string',
 | |
|         'primary_color'                      => 'string',
 | |
|         'secondary_color'                    => 'string',
 | |
|         'client_portal_allow_under_payment'  => 'bool',
 | |
|         'client_portal_allow_over_payment'   => 'bool',
 | |
|         'auto_bill'                          => 'string',
 | |
|         'lock_invoices'                      => 'string',
 | |
|         'client_portal_terms'                => 'string',
 | |
|         'client_portal_privacy_policy'       => 'string',
 | |
|         'client_can_register'                => 'bool',
 | |
|         'portal_design_id'					 => 'string',
 | |
|         'late_fee_endless_percent'           => 'float',
 | |
|         'late_fee_endless_amount'            => 'float',
 | |
|         'auto_email_invoice'                 => 'bool',
 | |
|         'reminder_send_time'                 => 'int',
 | |
|         'email_sending_method'               => 'string',
 | |
|         'gmail_sending_user_id'              => 'string',
 | |
|         'currency_id'                        => 'string',
 | |
|         'counter_number_applied'             => 'string',
 | |
|         'quote_number_applied'               => 'string',
 | |
|         'email_subject_custom1'              => 'string',
 | |
|         'email_subject_custom2'              => 'string',
 | |
|         'email_subject_custom3'              => 'string',
 | |
|         'email_template_custom1'             => 'string',
 | |
|         'email_template_custom2'             => 'string',
 | |
|         'email_template_custom3'             => 'string',
 | |
|         'enable_reminder1'                   => 'bool',
 | |
|         'enable_reminder2'                   => 'bool',
 | |
|         'enable_reminder3'                   => 'bool',
 | |
|         'num_days_reminder1'                 => 'int',
 | |
|         'num_days_reminder2'                 => 'int',
 | |
|         'num_days_reminder3'                 => 'int',
 | |
|         'schedule_reminder1'                 => 'string', // (enum: after_invoice_date, before_due_date, after_due_date)
 | |
|         'schedule_reminder2'                 => 'string', // (enum: after_invoice_date, before_due_date, after_due_date)
 | |
|         'schedule_reminder3'                 => 'string', // (enum: after_invoice_date, before_due_date, after_due_date)
 | |
|         'late_fee_amount1'                   => 'float',
 | |
|         'late_fee_amount2'                   => 'float',
 | |
|         'late_fee_amount3'                   => 'float',
 | |
|         'late_fee_percent1'                  => 'float',
 | |
|         'late_fee_percent2'                  => 'float',
 | |
|         'late_fee_percent3'                  => 'float',
 | |
|         'endless_reminder_frequency_id'      => 'integer',
 | |
|         'client_online_payment_notification' => 'bool',
 | |
|         'client_manual_payment_notification' => 'bool',
 | |
|         'document_email_attachment'          => 'bool',
 | |
|         'enable_client_portal_password'      => 'bool',
 | |
|         'enable_email_markup'                => 'bool',
 | |
|         'enable_client_portal_dashboard'     => 'bool',
 | |
|         'enable_client_portal'               => 'bool',
 | |
|         'email_template_statement'           => 'string',
 | |
|         'email_subject_statement'            => 'string',
 | |
|         'signature_on_pdf'                   => 'bool',
 | |
|         'quote_footer'                       => 'string',
 | |
|         'page_size'                          => 'string',
 | |
|         'page_layout'                        => 'string',
 | |
|         'font_size'                          => 'int',
 | |
|         'primary_font'                       => 'string',
 | |
|         'secondary_font'                     => 'string',
 | |
|         'hide_paid_to_date'                  => 'bool',
 | |
|         'embed_documents'                    => 'bool',
 | |
|         'all_pages_header'                   => 'bool',
 | |
|         'all_pages_footer'                   => 'bool',
 | |
|         'project_number_pattern'             => 'string',
 | |
|         'project_number_counter'             => 'int',
 | |
|         'task_number_pattern'                => 'string',
 | |
|         'task_number_counter'                => 'int',
 | |
|         'expense_number_pattern'             => 'string',
 | |
|         'expense_number_counter'             => 'int',
 | |
|         'recurring_expense_number_pattern'   => 'string',
 | |
|         'recurring_expense_number_counter'   => 'int',
 | |
|         'recurring_quote_number_pattern'     => 'string',
 | |
|         'recurring_quote_number_counter'     => 'int',
 | |
|         'vendor_number_pattern'              => 'string',
 | |
|         'vendor_number_counter'              => 'int',
 | |
|         'ticket_number_pattern'              => 'string',
 | |
|         'ticket_number_counter'              => 'int',
 | |
|         'payment_number_pattern'             => 'string',
 | |
|         'payment_number_counter'             => 'int',
 | |
|         'reply_to_email'                     => 'string',
 | |
|         'bcc_email'                          => 'string',
 | |
|         'pdf_email_attachment'               => 'bool',
 | |
|         'ubl_email_attachment'               => 'bool',
 | |
|         'email_style'                        => 'string',
 | |
|         'email_style_custom'                 => 'string',
 | |
|         'company_gateway_ids'                => 'string',
 | |
|         'address1'                           => 'string',
 | |
|         'address2'                           => 'string',
 | |
|         'city'                               => 'string',
 | |
|         'company_logo'                       => 'string',
 | |
|         'country_id'                         => 'string',
 | |
|         'client_number_pattern'              => 'string',
 | |
|         'client_number_counter'              => 'integer',
 | |
|         'credit_number_pattern'              => 'string',
 | |
|         'credit_number_counter'              => 'integer',
 | |
|         'currency_id'                        => 'string',
 | |
|         'custom_value1'                      => 'string',
 | |
|         'custom_value2'                      => 'string',
 | |
|         'custom_value3'                      => 'string',
 | |
|         'custom_value4'                      => 'string',
 | |
|         'custom_message_dashboard'           => 'string',
 | |
|         'custom_message_unpaid_invoice'      => 'string',
 | |
|         'custom_message_paid_invoice'        => 'string',
 | |
|         'custom_message_unapproved_quote'    => 'string',
 | |
|         'default_task_rate'                  => 'float',
 | |
|         'email_signature'                    => 'string',
 | |
|         'email_subject_invoice'              => 'string',
 | |
|         'email_subject_quote'                => 'string',
 | |
|         'email_subject_credit'               => 'string',
 | |
|         'email_subject_payment'              => 'string',
 | |
|         'email_subject_payment_partial'      => 'string',
 | |
|         'email_template_invoice'             => 'string',
 | |
|         'email_template_quote'               => 'string',
 | |
|         'email_template_credit'              => 'string',
 | |
|         'email_template_payment'             => 'string',
 | |
|         'email_template_payment_partial'     => 'string',
 | |
|         'email_subject_reminder1'            => 'string',
 | |
|         'email_subject_reminder2'            => 'string',
 | |
|         'email_subject_reminder3'            => 'string',
 | |
|         'email_subject_reminder_endless'     => 'string',
 | |
|         'email_template_reminder1'           => 'string',
 | |
|         'email_template_reminder2'           => 'string',
 | |
|         'email_template_reminder3'           => 'string',
 | |
|         'email_template_reminder_endless'    => 'string',
 | |
|         'inclusive_taxes'                    => 'bool',
 | |
|         'invoice_number_pattern'             => 'string',
 | |
|         'invoice_number_counter'             => 'integer',
 | |
|         'invoice_design_id'                  => 'string',
 | |
|         // 'invoice_fields'                     => 'string',
 | |
|         'invoice_taxes'                      => 'int',
 | |
|         //'enabled_item_tax_rates'             => 'int',
 | |
|         'invoice_footer'                     => 'string',
 | |
|         'invoice_labels'                     => 'string',
 | |
|         'invoice_terms'                      => 'string',
 | |
|         'credit_footer'                      => 'string',
 | |
|         'credit_terms'                       => 'string',
 | |
|         'name'                               => 'string',
 | |
|         'payment_terms'                      => 'string',
 | |
|         'payment_type_id'                    => 'string',
 | |
|         'phone'                              => 'string',
 | |
|         'postal_code'                        => 'string',
 | |
|         'quote_design_id'                    => 'string',
 | |
|         'credit_design_id'                   => 'string',
 | |
|         'quote_number_pattern'               => 'string',
 | |
|         'quote_number_counter'               => 'integer',
 | |
|         'quote_terms'                        => 'string',
 | |
|         'recurring_number_prefix'            => 'string',
 | |
|         'reset_counter_frequency_id'         => 'integer',
 | |
|         'reset_counter_date'                 => 'string',
 | |
|         'require_invoice_signature'          => 'bool',
 | |
|         'require_quote_signature'            => 'bool',
 | |
|         'state'                              => 'string',
 | |
|         'email'                              => 'string',
 | |
|         'vat_number'                         => 'string',
 | |
|         'id_number'                          => 'string',
 | |
|         'tax_name1'                          => 'string',
 | |
|         'tax_name2'                          => 'string',
 | |
|         'tax_name3'                          => 'string',
 | |
|         'tax_rate1'                          => 'float',
 | |
|         'tax_rate2'                          => 'float',
 | |
|         'tax_rate3'                          => 'float',
 | |
|         'show_accept_quote_terms'            => 'bool',
 | |
|         'show_accept_invoice_terms'          => 'bool',
 | |
|         'timezone_id'                        => 'string',
 | |
|         'valid_until'                        => 'string',
 | |
|         'date_format_id'                     => 'string',
 | |
|         'military_time'                      => 'bool',
 | |
|         'language_id'                        => 'string',
 | |
|         'show_currency_code'                 => 'bool',
 | |
|         'send_reminders'                     => 'bool',
 | |
|         'enable_client_portal_tasks'         => 'bool',
 | |
|         'auto_archive_invoice'               => 'bool',
 | |
|         'auto_archive_quote'                 => 'bool',
 | |
|         'auto_convert_quote'                 => 'bool',
 | |
|         'shared_invoice_quote_counter'       => 'bool',
 | |
|         'counter_padding'                    => 'integer',
 | |
|         //'design'                             => 'string',
 | |
|         'website'                            => 'string',
 | |
|         'pdf_variables'                  	 => 'object',
 | |
|         'portal_custom_head'                 => 'string',
 | |
|         'portal_custom_css'                  => 'string',
 | |
|         'portal_custom_footer'               => 'string',
 | |
|         'portal_custom_js'                   => 'string',
 | |
|         'client_portal_enable_uploads'       => 'bool',
 | |
|     ];
 | |
| 
 | |
|     public static $free_plan_casts = [
 | |
|         'currency_id'                        => 'string',
 | |
|         'company_gateway_ids'                => 'string',
 | |
|         'address1'                           => 'string',
 | |
|         'address2'                           => 'string',
 | |
|         'city'                               => 'string',
 | |
|         'company_logo'                       => 'string',
 | |
|         'country_id'                         => 'string',
 | |
|         'custom_value1'                      => 'string',
 | |
|         'custom_value2'                      => 'string',
 | |
|         'custom_value3'                      => 'string',
 | |
|         'custom_value4'                      => 'string',
 | |
|         'inclusive_taxes'                    => 'bool',
 | |
|         'name'                               => 'string',
 | |
|         'payment_terms'                      => 'string',
 | |
|         'payment_type_id'                    => 'string',
 | |
|         'phone'                              => 'string',
 | |
|         'postal_code'                        => 'string',
 | |
|         'state'                              => 'string',
 | |
|         'email'                              => 'string',
 | |
|         'vat_number'                         => 'string',
 | |
|         'id_number'                          => 'string',
 | |
|         'tax_name1'                          => 'string',
 | |
|         'tax_name2'                          => 'string',
 | |
|         'tax_name3'                          => 'string',
 | |
|         'tax_rate1'                          => 'float',
 | |
|         'tax_rate2'                          => 'float',
 | |
|         'tax_rate3'                          => 'float',
 | |
|         'timezone_id'                        => 'string',
 | |
|         'date_format_id'                     => 'string',
 | |
|         'military_time'                      => 'bool',
 | |
|         'language_id'                        => 'string',
 | |
|         'show_currency_code'                 => 'bool',
 | |
|         'website'                            => 'string',
 | |
|     ];
 | |
| 
 | |
|     /**
 | |
|      * Array of variables which
 | |
|      * cannot be modified client side.
 | |
|      */
 | |
|     public static $protected_fields = [
 | |
|         //	'credit_number_counter',
 | |
|         //	'invoice_number_counter',
 | |
|         //	'quote_number_counter',
 | |
|     ];
 | |
| 
 | |
|     public static $string_casts = [
 | |
|         'invoice_design_id',
 | |
|         'quote_design_id',
 | |
|         'credit_design_id',
 | |
|     ];
 | |
| 
 | |
|     /**
 | |
|      * Cast object values and return entire class
 | |
|      * prevents missing properties from not being returned
 | |
|      * and always ensure an up to date class is returned.
 | |
|      *
 | |
|      * @param $obj
 | |
|      */
 | |
|     public function __construct($obj)
 | |
|     {
 | |
|         //	parent::__construct($obj);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Provides class defaults on init.
 | |
|      *
 | |
|      * @return stdClass
 | |
|      */
 | |
|     public static function defaults(): stdClass
 | |
|     {
 | |
|         $config = json_decode(config('ninja.settings'));
 | |
| 
 | |
|         $data = (object) get_class_vars(self::class);
 | |
| 
 | |
|         unset($data->casts);
 | |
|         unset($data->protected_fields);
 | |
|         unset($data->free_plan_casts);
 | |
|         unset($data->string_casts);
 | |
| 
 | |
|         $data->timezone_id = (string) config('ninja.i18n.timezone_id');
 | |
|         $data->currency_id = (string) config('ninja.i18n.currency_id');
 | |
|         $data->language_id = (string) config('ninja.i18n.language_id');
 | |
|         $data->payment_terms = (string) config('ninja.i18n.payment_terms');
 | |
|         $data->military_time = (bool) config('ninja.i18n.military_time');
 | |
|         $data->date_format_id = (string) config('ninja.i18n.date_format_id');
 | |
|         $data->country_id = (string) config('ninja.i18n.country_id');
 | |
|         $data->translations = (object) [];
 | |
|         $data->pdf_variables = (object) self::getEntityVariableDefaults();
 | |
| 
 | |
|         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 $settings
 | |
|      *
 | |
|      * @return stdClass
 | |
|      */
 | |
|     public static function setProperties($settings): stdClass
 | |
|     {
 | |
|         $company_settings = (object) get_class_vars(self::class);
 | |
| 
 | |
|         foreach ($company_settings as $key => $value) {
 | |
|             if (! property_exists($settings, $key)) {
 | |
|                 $settings->{$key} = self::castAttribute($key, $company_settings->{$key});
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return $settings;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Stubs the notification defaults
 | |
|      *
 | |
|      * @return stdClass
 | |
|      */
 | |
|     public static function notificationDefaults() :stdClass
 | |
|     {
 | |
|         $notification = new stdClass;
 | |
|         $notification->email = [];
 | |
|         // $notification->email = ['all_notifications'];
 | |
| 
 | |
|         return $notification;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Defines entity variables for PDF generation
 | |
|      *
 | |
|      * @return stdClass The stdClass of PDF variables
 | |
|      */
 | |
|     public static function getEntityVariableDefaults() :stdClass
 | |
|     {
 | |
|         $variables = [
 | |
|             'client_details' => [
 | |
|                 '$client.name',
 | |
|                 '$client.number',
 | |
|                 '$client.vat_number',
 | |
|                 '$client.address1',
 | |
|                 '$client.address2',
 | |
|                 '$client.city_state_postal',
 | |
|                 '$client.country',
 | |
|                 '$client.phone',
 | |
|                 '$contact.email',
 | |
|             ],
 | |
|             'company_details' => [
 | |
|                 '$company.name',
 | |
|                 '$company.id_number',
 | |
|                 '$company.vat_number',
 | |
|                 '$company.website',
 | |
|                 '$company.email',
 | |
|                 '$company.phone',
 | |
|             ],
 | |
|             'company_address' => [
 | |
|                 '$company.address1',
 | |
|                 '$company.address2',
 | |
|                 '$company.city_state_postal',
 | |
|                 '$company.country',
 | |
|             ],
 | |
|             'invoice_details' => [
 | |
|                 '$invoice.number',
 | |
|                 '$invoice.po_number',
 | |
|                 '$invoice.date',
 | |
|                 '$invoice.due_date',
 | |
|                 '$invoice.total',
 | |
|                 '$invoice.balance_due',
 | |
|             ],
 | |
|             'quote_details' => [
 | |
|                 '$quote.number',
 | |
|                 '$quote.po_number',
 | |
|                 '$quote.date',
 | |
|                 '$quote.valid_until',
 | |
|                 '$quote.total',
 | |
|             ],
 | |
|             'credit_details' => [
 | |
|                 '$credit.number',
 | |
|                 '$credit.po_number',
 | |
|                 '$credit.date',
 | |
|                 '$credit.balance',
 | |
|                 '$credit.total',
 | |
|             ],
 | |
|             'product_columns' => [
 | |
|                 '$product.item',
 | |
|                 '$product.description',
 | |
|                 '$product.unit_cost',
 | |
|                 '$product.quantity',
 | |
|                 '$product.discount',
 | |
|                 '$product.tax',
 | |
|                 '$product.line_total',
 | |
|             ],
 | |
|             'task_columns' =>[
 | |
|                 '$task.service',
 | |
|                 '$task.description',
 | |
|                 '$task.rate',
 | |
|                 '$task.hours',
 | |
|                 '$task.discount',
 | |
|                 '$task.tax',
 | |
|                 '$task.line_total',
 | |
|             ],
 | |
|             'total_columns' => [
 | |
|                 '$net_subtotal',
 | |
|                 '$subtotal',
 | |
|                 '$discount',
 | |
|                 '$custom_surcharge1',
 | |
|                 '$custom_surcharge2',
 | |
|                 '$custom_surcharge3',
 | |
|                 '$custom_surcharge4',
 | |
|                 '$total_taxes',
 | |
|                 '$line_taxes',
 | |
|                 '$total',
 | |
|                 '$paid_to_date',
 | |
|                 '$outstanding',
 | |
|             ],
 | |
|             'statement_invoice_columns' => [
 | |
|                 '$invoice.number',
 | |
|                 '$invoice.date',
 | |
|                 '$due_date',
 | |
|                 '$total',
 | |
|                 '$balance',
 | |
|             ],
 | |
|             'statement_payment_columns' => [
 | |
|                 '$invoice.number',
 | |
|                 '$payment.date',
 | |
|                 '$method',
 | |
|                 '$statement_amount',
 | |
|             ],
 | |
|         ];
 | |
| 
 | |
|         return json_decode(json_encode($variables));
 | |
|     }
 | |
| }
 |