diff --git a/app/DataMapper/CompanySettings.php b/app/DataMapper/CompanySettings.php index 1153285ecc4e..8309b3a14847 100644 --- a/app/DataMapper/CompanySettings.php +++ b/app/DataMapper/CompanySettings.php @@ -12,6 +12,7 @@ namespace App\DataMapper; use App\DataMapper\CompanySettings; +use App\Utils\Traits\MakesHash; /** * CompanySettings @@ -19,6 +20,7 @@ use App\DataMapper\CompanySettings; class CompanySettings extends BaseSettings { + use MakesHash; /*Group settings based on functionality*/ /*Invoice*/ diff --git a/app/Http/Controllers/CompanyController.php b/app/Http/Controllers/CompanyController.php index 6c8522b69248..0c0b4d5b524f 100644 --- a/app/Http/Controllers/CompanyController.php +++ b/app/Http/Controllers/CompanyController.php @@ -204,8 +204,6 @@ class CompanyController extends BaseController $company = $this->company_repo->save($request->all(), $company); - $company->saveSettings($request->input('settings'), $company); - $this->uploadLogo($request->file('company_logo'), $company, $company); auth()->user()->companies()->attach($company->id, [ diff --git a/app/Http/Controllers/QuoteController.php b/app/Http/Controllers/QuoteController.php index 6ac1d77bfc9e..a7ee69764900 100644 --- a/app/Http/Controllers/QuoteController.php +++ b/app/Http/Controllers/QuoteController.php @@ -640,6 +640,11 @@ class QuoteController extends BaseController $quote = CloneQuoteFactory::create($quote, auth()->user()->id); return $this->itemResponse($quote); break; + case 'approve': + break; + case 'convert': + //convert quote to an invoice make sure we link the two entities!!! + break; case 'history': # code... break; diff --git a/app/Http/Requests/Company/StoreCompanyRequest.php b/app/Http/Requests/Company/StoreCompanyRequest.php index 6b1e39bdb4b0..afe2b0b4b72d 100644 --- a/app/Http/Requests/Company/StoreCompanyRequest.php +++ b/app/Http/Requests/Company/StoreCompanyRequest.php @@ -16,9 +16,11 @@ use App\Http\Requests\Request; use App\Http\ValidationRules\ValidSettingsRule; use App\Models\ClientContact; use App\Models\Company; +use App\Utils\Traits\MakesHash; class StoreCompanyRequest extends Request { + use MakesHash; /** * Determine if the user is authorized to make this request. * @@ -64,16 +66,12 @@ class StoreCompanyRequest extends Request } + $company_settings->invoice_design_id = $this->encodePrimaryKey(1); + $company_settings->quote_design_id = $this->encodePrimaryKey(1); + $company_settings->credit_design_id = $this->encodePrimaryKey(1); + $input['settings'] = $company_settings; -// \Log::error($input); -// if(array_key_exists('settings', $input) && property_exists($input['settings'], 'pdf_variables') && empty((array) $input['settings']->pdf_variables)) -// { -// $input['settings']['pdf_variables'] = CompanySettings::getEntityVariableDefaults(); -// } - - -// \Log::error($input); $this->replace($input); } diff --git a/app/Http/Requests/Company/UpdateCompanyRequest.php b/app/Http/Requests/Company/UpdateCompanyRequest.php index 28e14f4b13f6..4c87e458246b 100644 --- a/app/Http/Requests/Company/UpdateCompanyRequest.php +++ b/app/Http/Requests/Company/UpdateCompanyRequest.php @@ -49,4 +49,10 @@ class UpdateCompanyRequest extends Request return $rules; } + + protected function prepareForValidation() + { + + } + } diff --git a/app/Http/ValidationRules/PaymentAppliedValidAmount.php b/app/Http/ValidationRules/PaymentAppliedValidAmount.php index 7b43ed1cbe79..31dc43eb953e 100644 --- a/app/Http/ValidationRules/PaymentAppliedValidAmount.php +++ b/app/Http/ValidationRules/PaymentAppliedValidAmount.php @@ -68,7 +68,7 @@ class PaymentAppliedValidAmount implements Rule { foreach(request()->input('invoices') as $invoice) { - $invoice_amounts =+ $invoice['amount']; + $invoice_amounts += $invoice['amount']; } } diff --git a/app/Http/ValidationRules/ValidSettingsRule.php b/app/Http/ValidationRules/ValidSettingsRule.php index 388a633287a7..db44959162b5 100644 --- a/app/Http/ValidationRules/ValidSettingsRule.php +++ b/app/Http/ValidationRules/ValidSettingsRule.php @@ -48,6 +48,6 @@ class ValidSettingsRule implements Rule */ public function message() { - return $this->return_data[0]." is not a valid ".$this->return_data[1]; + return $this->return_data[0]." is not a valid ".$this->return_data[1]. " ( ".$this->return_data[2]." )"; } } diff --git a/app/Repositories/CompanyRepository.php b/app/Repositories/CompanyRepository.php index b75ab0fb1900..6c6329dd7fc3 100644 --- a/app/Repositories/CompanyRepository.php +++ b/app/Repositories/CompanyRepository.php @@ -49,8 +49,13 @@ class CompanyRepository extends BaseRepository $company->fill($data); + if(array_key_exists('settings', $data)) + $company->saveSettings($data['settings'], $company); + $company->save(); +//\Log::error(print_r($company->settings,1)); + return $company; } diff --git a/app/Transformers/PaymentTransformer.php b/app/Transformers/PaymentTransformer.php index 35e89174de1b..e3c3cfcfbfd1 100644 --- a/app/Transformers/PaymentTransformer.php +++ b/app/Transformers/PaymentTransformer.php @@ -91,13 +91,9 @@ class PaymentTransformer extends EntityTransformer 'type_id'=> (string) $payment->type_id, 'project_id' => (string) $this->encodePrimaryKey($payment->project_id), 'vendor_id' => (string) $this->encodePrimaryKey($payment->vendor_id), -/* - 'private_notes' => $payment->private_notes ?: '', - 'exchange_rate' => (float) $payment->exchange_rate, - 'exchange_currency_id' => (int) $payment->exchange_currency_id, - 'refunded' => (float) $payment->refunded, - 'payment_status_id' => (string) $payment->payment_status_id, -*/ + 'currency_id' => (string) $payment->currency_id ?: '', + 'exchange_rate' => (string) $payment->exchange_rate ?: '', + 'exchange_currency_id' => (string) $payment->exchange_currency_id ?: '', ]; } } diff --git a/app/Transformers/QuoteTransformer.php b/app/Transformers/QuoteTransformer.php index 67019bcd3814..75ddd9ad37df 100644 --- a/app/Transformers/QuoteTransformer.php +++ b/app/Transformers/QuoteTransformer.php @@ -79,9 +79,9 @@ class QuoteTransformer extends EntityTransformer 'amount' => (float) $quote->amount, 'balance' => (float) $quote->balance, 'client_id' => (string) $this->encodePrimaryKey($quote->client_id), - 'status_id' => (string) ($quote->status_id ?: 1), - 'design_id' => (string) ($quote->design_id ?: 1), - 'invoice_id' => (string) ($quote->invoice_id ?: 1), + 'status_id' => (string)$quote->status_id, + 'design_id' => (string)$quote->design_id, + 'invoice_id' => (string)$quote->invoice_id, 'updated_at' => (int)$quote->updated_at, 'archived_at' => (int)$quote->deleted_at, 'created_at' => (int)$quote->created_at, diff --git a/app/Utils/Traits/ClientGroupSettingsSaver.php b/app/Utils/Traits/ClientGroupSettingsSaver.php index 3858f5fb54d6..eaee401c2220 100644 --- a/app/Utils/Traits/ClientGroupSettingsSaver.php +++ b/app/Utils/Traits/ClientGroupSettingsSaver.php @@ -97,7 +97,7 @@ trait ClientGroupSettingsSaver if (!property_exists($settings, $key)) { continue; } elseif (!$this->checkAttribute($value, $settings->{$key})) { - return [$key, $value]; + return [$key, $value, $settings->{$key}]; } continue; @@ -111,7 +111,7 @@ trait ClientGroupSettingsSaver /*Catch all filter */ if (!$this->checkAttribute($value, $settings->{$key})) { - return [$key, $value]; + return [$key, $value, $settings->{$key}]; } } diff --git a/app/Utils/Traits/CompanySettingsSaver.php b/app/Utils/Traits/CompanySettingsSaver.php index 8a8d5d66d62f..9d7ef3c38f1a 100644 --- a/app/Utils/Traits/CompanySettingsSaver.php +++ b/app/Utils/Traits/CompanySettingsSaver.php @@ -30,23 +30,18 @@ trait CompanySettingsSaver */ public function saveSettings($settings, $entity) { - if (!$settings) { + /* No Settings, No Save!*/ + if (!$settings) return; - } - - //unset protected properties. - foreach (CompanySettings::$protected_fields as $field) { + + //Unset Protected Properties. + foreach (CompanySettings::$protected_fields as $field) unset($settings[$field]); - } $settings = $this->checkSettingType($settings); $company_settings = CompanySettings::defaults(); - //Iterate and set CURRENT settings - // foreach($this->settings as $key => $value) - // $company_settings->{$key} = $value; - //Iterate and set NEW settings foreach ($settings as $key => $value) { if (is_null($settings->{$key})) { @@ -57,7 +52,9 @@ trait CompanySettingsSaver } $entity->settings = $company_settings; + $entity->save(); + } /** @@ -72,6 +69,7 @@ trait CompanySettingsSaver public function validateSettings($settings) { $settings = (object)$settings; + $casts = CompanySettings::$casts; if(property_exists($settings, 'pdf_variables')) @@ -88,22 +86,22 @@ trait CompanySettingsSaver if (!property_exists($settings, $key)) { continue; } elseif (!$this->checkAttribute($value, $settings->{$key})) { - return [$key, $value]; + return [$key, $value, $settings->{$key}]; } continue; } /* Handles unset settings or blank strings */ - if (!property_exists($settings, $key) || is_null($settings->{$key}) || !isset($settings->{$key}) || $settings->{$key} == '') { + if (!property_exists($settings, $key) || is_null($settings->{$key}) || !isset($settings->{$key}) || $settings->{$key} == '') continue; - } + /*Catch all filter */ - if (!$this->checkAttribute($value, $settings->{$key})) { - return [$key, $value]; - } + if (!$this->checkAttribute($value, $settings->{$key})) + return [$key, $value, $settings->{$key}]; + } return true; @@ -123,10 +121,29 @@ trait CompanySettingsSaver private function checkSettingType($settings) : \stdClass { $settings = (object)$settings; + $casts = CompanySettings::$casts; foreach ($casts as $key => $value) { + if(in_array($key, SettingsSaver::$string_casts)) + { + $value = "string"; + + if (!property_exists($settings, $key)) { + continue; + } elseif ($this->checkAttribute($value, $settings->{$key})) { + if (substr($key, -3) == '_id') { + settype($settings->{$key}, 'string'); + } else { + settype($settings->{$key}, $value); + } + } else { + unset($settings->{$key}); + } + + continue; + } /*Separate loop if it is a _id field which is an integer cast as a string*/ if (substr($key, -3) == '_id' || substr($key, -14) == 'number_counter') { $value = "integer"; @@ -147,9 +164,9 @@ trait CompanySettingsSaver } /* Handles unset settings or blank strings */ - if (!property_exists($settings, $key) || is_null($settings->{$key}) || !isset($settings->{$key}) || $settings->{$key} == '') { + if (!property_exists($settings, $key) || is_null($settings->{$key}) || !isset($settings->{$key}) || $settings->{$key} == '') continue; - } + /*Catch all filter */ if ($this->checkAttribute($value, $settings->{$key})) { @@ -162,7 +179,9 @@ trait CompanySettingsSaver unset($settings->{$key}); } } + return $settings; + } /** @@ -173,6 +192,7 @@ trait CompanySettingsSaver */ private function checkAttribute($key, $value) :bool { + switch ($key) { case 'int': case 'integer': @@ -196,5 +216,6 @@ trait CompanySettingsSaver default: return false; } + } } diff --git a/app/Utils/Traits/SettingsSaver.php b/app/Utils/Traits/SettingsSaver.php index fb901583d386..2e2beccc04b1 100644 --- a/app/Utils/Traits/SettingsSaver.php +++ b/app/Utils/Traits/SettingsSaver.php @@ -19,7 +19,11 @@ use App\DataMapper\CompanySettings; */ trait SettingsSaver { - + public static $string_casts = [ + 'invoice_design_id', + 'quote_design_id', + 'credit_design_id', + ]; /** * Saves a setting object * @@ -73,14 +77,23 @@ trait SettingsSaver foreach ($casts as $key => $value) { - /*Separate loop if it is a _id field which is an integer cast as a string*/ - if (substr($key, -3) == '_id' || substr($key, -14) == 'number_counter') { - $value = "integer"; - + if(in_array($key, self::$string_casts)){ + $value = "string"; if (!property_exists($settings, $key)) { continue; } elseif (!$this->checkAttribute($value, $settings->{$key})) { - return [$key, $value]; + return [$key, $value, $settings->{$key}]; + } + + continue; + } + /*Separate loop if it is a _id field which is an integer cast as a string*/ + elseif (substr($key, -3) == '_id' || substr($key, -14) == 'number_counter') { + $value = "integer"; + if (!property_exists($settings, $key)) { + continue; + } elseif (!$this->checkAttribute($value, $settings->{$key})) { + return [$key, $value, $settings->{$key}]; } continue; @@ -94,7 +107,7 @@ trait SettingsSaver /*Catch all filter */ if (!$this->checkAttribute($value, $settings->{$key})) { - return [$key, $value]; + return [$key, $value, $settings->{$key}]; } } @@ -124,8 +137,7 @@ trait SettingsSaver foreach ($casts as $key => $value) { - /*Separate loop if it is a _id field which is an integer cast as a string*/ - if (substr($key, -3) == '_id' || substr($key, -14) == 'number_counter') { + if (substr($key, -3) == '_id' || substr($key, -14) == 'number_counter') { $value = "integer"; if (!property_exists($settings, $key)) { @@ -159,6 +171,7 @@ trait SettingsSaver unset($settings->{$key}); } } + return $settings; } diff --git a/tests/Feature/CompanyTest.php b/tests/Feature/CompanyTest.php index 4eea974245ab..48f3e8b1a0e1 100644 --- a/tests/Feature/CompanyTest.php +++ b/tests/Feature/CompanyTest.php @@ -124,7 +124,7 @@ class CompanyTest extends TestCase $settings = CompanySettings::defaults(); $settings->custom_value1 = 'test'; $settings->invoice_design_id = '2'; - $settings->quote_design_id = 1; + $settings->quote_design_id = '1'; $company->settings = $settings; // $this->withoutExceptionHandling(); diff --git a/tests/MockAccountData.php b/tests/MockAccountData.php index 28a3a581c957..d0d8c2de534d 100644 --- a/tests/MockAccountData.php +++ b/tests/MockAccountData.php @@ -394,11 +394,6 @@ trait MockAccountData $line_items[] = $item; - $item = InvoiceItemFactory::create(); - $item->quantity = 1; - $item->cost =10; - - $line_items[] = $item; // $line_items[] = $item; // $line_items[] = $item; // $line_items[] = $item; diff --git a/tests/Unit/Migration/migration.json b/tests/Unit/Migration/migration.json index 3c2f0c5783e4..6e879d6f5f01 100644 --- a/tests/Unit/Migration/migration.json +++ b/tests/Unit/Migration/migration.json @@ -32,7 +32,7 @@ "country_id": "840", "invoice_terms": "", "enabled_item_tax_rates": false, - "invoice_design_id": 1, + "invoice_design_id": "1", "phone": "", "email": "", "language_id": "1",