diff --git a/app/Http/Requests/Client/StoreClientRequest.php b/app/Http/Requests/Client/StoreClientRequest.php index c93e2c8299a4..80a3f55d3752 100644 --- a/app/Http/Requests/Client/StoreClientRequest.php +++ b/app/Http/Requests/Client/StoreClientRequest.php @@ -68,6 +68,7 @@ class StoreClientRequest extends Request $rules['contacts'] = 'array'; $rules['contacts.*.email'] = 'bail|nullable|distinct|sometimes|email'; $rules['contacts.*.password'] = [ + 'bail', 'nullable', 'sometimes', 'string', @@ -82,8 +83,8 @@ class StoreClientRequest extends Request $rules['id'] = new CanStoreClientsRule(auth()->user()->company()->id); } - $rules['number'] = ['nullable', Rule::unique('clients')->where('company_id', auth()->user()->company()->id)]; - $rules['id_number'] = ['nullable', Rule::unique('clients')->where('company_id', auth()->user()->company()->id)]; + $rules['number'] = ['bail', 'nullable', Rule::unique('clients')->where('company_id', auth()->user()->company()->id)]; + $rules['id_number'] = ['bail', 'nullable', Rule::unique('clients')->where('company_id', auth()->user()->company()->id)]; return $rules; } @@ -92,37 +93,30 @@ class StoreClientRequest extends Request { $input = $this->all(); - $settings = ClientSettings::defaults(); - $tmp = []; + /* Default settings */ + $settings = (array)ClientSettings::defaults(); - $tmp['settings'] = (array)$settings; - - nlog("seeetings"); - nlog($tmp['settings']); - - if (array_key_exists('settings', $input)) - nlog($input['settings']); + /* Stub settings if they don't exist */ + if(!array_key_exists('settings', $input)) + $input['settings'] = []; + + /* Merge default into base settings */ + $input['settings'] = array_merge($input['settings'], $settings); - if (array_key_exists('settings', $input) && ! empty($input['settings'])) { - foreach ($input['settings'] as $key => $value) { - if ($key == 'default_task_rate') { - $value = floatval($value); - } - - $tmp['settings'][$key] = $value; + /* Type enforcement */ + foreach ($input['settings'] as $key => $value) + { + if ($key == 'default_task_rate') { + $value = floatval($value); + $input['settings'][$key] = $value; } } - $input['settings'] = $tmp['settings']; - + /* Convert hashed IDs to IDs*/ $input = $this->decodePrimaryKeys($input); - if (isset($input['group_settings_id'])) { - $input['group_settings_id'] = $this->decodePrimaryKey($input['group_settings_id']); - } - //is no settings->currency_id is set then lets dive in and find either a group or company currency all the below may be redundant!! - if (! property_exists($settings, 'currency_id') && isset($input['group_settings_id'])) { + if (! array_key_exists('currency_id', $input['settings']) && isset($input['group_settings_id'])) { $group_settings = GroupSetting::find($input['group_settings_id']); if ($group_settings && property_exists($group_settings->settings, 'currency_id') && isset($group_settings->settings->currency_id)) { @@ -130,7 +124,8 @@ class StoreClientRequest extends Request } else { $input['settings']['currency_id'] = (string) auth()->user()->company()->settings->currency_id; } - } elseif (! property_exists($settings, 'currency_id')) { + + } elseif (! array_key_exists('currency_id', $input['settings'])) { $input['settings']['currency_id'] = (string) auth()->user()->company()->settings->currency_id; } @@ -145,8 +140,6 @@ class StoreClientRequest extends Request unset($input['settings']['language_id']); } - // $input['settings'] = $settings; - if (isset($input['country_code'])) { $input['country_id'] = $this->getCountryCode($input['country_code']); } @@ -155,15 +148,11 @@ class StoreClientRequest extends Request $input['shipping_country_id'] = $this->getCountryCode($input['shipping_country_code']); } - /* If there is no number, just unset it here. */ + /* If there is a client number, just unset it here. */ if (array_key_exists('number', $input) && (is_null($input['number']) || empty($input['number']))) { unset($input['number']); } - -nlog($input); - - $this->replace($input); } diff --git a/app/Http/Requests/Request.php b/app/Http/Requests/Request.php index 9f9b466f87f4..b565f754902c 100644 --- a/app/Http/Requests/Request.php +++ b/app/Http/Requests/Request.php @@ -77,6 +77,10 @@ class Request extends FormRequest public function decodePrimaryKeys($input) { + if (array_key_exists('group_settings_id', $input) && is_string($input['group_settings_id'])) { + $input['group_settings_id'] = $this->decodePrimaryKey($input['group_settings_id']); + } + if (array_key_exists('group_id', $input) && is_string($input['group_id'])) { $input['group_id'] = $this->decodePrimaryKey($input['group_id']); } diff --git a/composer.lock b/composer.lock index 1b6f71f137e1..7c80aaca2f3e 100644 --- a/composer.lock +++ b/composer.lock @@ -378,16 +378,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.228.0", + "version": "3.228.1", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "4ff51d01da43aa3bd36eef921a9cd4e0ff843fab" + "reference": "53b7f43945b19bb0700c75d4c5f130055096e817" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/4ff51d01da43aa3bd36eef921a9cd4e0ff843fab", - "reference": "4ff51d01da43aa3bd36eef921a9cd4e0ff843fab", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/53b7f43945b19bb0700c75d4c5f130055096e817", + "reference": "53b7f43945b19bb0700c75d4c5f130055096e817", "shasum": "" }, "require": { @@ -463,9 +463,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.228.0" + "source": "https://github.com/aws/aws-sdk-php/tree/3.228.1" }, - "time": "2022-06-21T18:13:25+00:00" + "time": "2022-06-22T18:16:48+00:00" }, { "name": "bacon/bacon-qr-code", diff --git a/tests/Unit/ClientSettingsTest.php b/tests/Unit/ClientSettingsTest.php index 1923ae0c73fb..f7ca65ca4eb1 100644 --- a/tests/Unit/ClientSettingsTest.php +++ b/tests/Unit/ClientSettingsTest.php @@ -32,6 +32,7 @@ class ClientSettingsTest extends TestCase $this->makeTestData(); $this->faker = \Faker\Factory::create(); + } public function testClientBaseline() @@ -90,7 +91,7 @@ class ClientSettingsTest extends TestCase $response->assertStatus(200); $arr = $response->json(); -nlog($arr); + $this->assertEquals('1', $arr['data']['settings']['currency_id']); $this->assertEquals('1', $arr['data']['settings']['language_id']); $this->assertEquals('1', $arr['data']['settings']['payment_terms']); @@ -100,13 +101,13 @@ nlog($arr); } public function testClientIllegalCurrency() - {nlog("illegal"); + { $data = [ 'name' => $this->faker->firstName(), 'id_number' => 'Cooliox2', 'settings' => [ - 'currency_id' => '2', + 'currency_id' => 'a', 'language_id' => '1', 'payment_terms' => '1', 'valid_until' => '2', @@ -127,8 +128,6 @@ nlog($arr); nlog($message); } -nlog($response->json()); - $response->assertStatus(302); }