diff --git a/app/Http/Requests/User/UpdateUserRequest.php b/app/Http/Requests/User/UpdateUserRequest.php index 966d8b24d5d3..eda9afb9fc74 100644 --- a/app/Http/Requests/User/UpdateUserRequest.php +++ b/app/Http/Requests/User/UpdateUserRequest.php @@ -45,9 +45,6 @@ class UpdateUserRequest extends Request { $input = $this->all(); - // if (isset($input['company_user']) && ! auth()->user()->isAdmin()) { - // unset($input['company_user']); - // } $this->replace($input); } diff --git a/app/Http/ValidationRules/UniqueUserRule.php b/app/Http/ValidationRules/UniqueUserRule.php index e6eb7be90782..b9bca3a2e5bc 100644 --- a/app/Http/ValidationRules/UniqueUserRule.php +++ b/app/Http/ValidationRules/UniqueUserRule.php @@ -60,12 +60,6 @@ class UniqueUserRule implements Rule */ private function checkIfEmailExists($email) : bool { - $current_db = config('database.default'); - - $result = MultiDB::checkUserEmailExists($email); - - MultiDB::setDb($current_db); - - return $result; + return MultiDB::checkUserEmailExists($email); } } diff --git a/app/Http/ValidationRules/User/AttachableUser.php b/app/Http/ValidationRules/User/AttachableUser.php index 226d67b702cb..db7cec97a3e3 100644 --- a/app/Http/ValidationRules/User/AttachableUser.php +++ b/app/Http/ValidationRules/User/AttachableUser.php @@ -20,6 +20,7 @@ use Illuminate\Contracts\Validation\Rule; */ class AttachableUser implements Rule { + public $message; public function __construct() { @@ -39,7 +40,7 @@ class AttachableUser implements Rule */ public function message() { - return "Cannot add the same user to the same company"; + return $this->message; } /** @@ -63,9 +64,16 @@ class AttachableUser implements Rule ->where('company_id', auth()->user()->company()->id) ->exists(); - if($user_already_attached) + //If the user is already attached or isn't link to this account - return false + if($user_already_attached) { + $this->message = ctrans('texts.user_duplicate_error'); return false; + } + if($user->account_id != auth()->user()->account_id){ + $this->message = ctrans('texts.user_cross_linked_error'); + return false; + } return true; } diff --git a/app/Http/ValidationRules/ValidUserForCompany.php b/app/Http/ValidationRules/ValidUserForCompany.php index cb3825704606..967ca56591d7 100644 --- a/app/Http/ValidationRules/ValidUserForCompany.php +++ b/app/Http/ValidationRules/ValidUserForCompany.php @@ -26,14 +26,7 @@ class ValidUserForCompany implements Rule */ public function passes($attribute, $value) { - $current_db = config('database.default'); - - $result = MultiDB::checkUserAndCompanyCoExist($value, auth()->user()->company()->company_key, auth()->user()->company()->id); - - - MultiDB::setDb($current_db); - - return $result; + return MultiDB::checkUserAndCompanyCoExist($value, auth()->user()->company()->company_key, auth()->user()->company()->id); } /** diff --git a/app/Jobs/Util/Import.php b/app/Jobs/Util/Import.php index 074716d9468e..f21a9817840b 100644 --- a/app/Jobs/Util/Import.php +++ b/app/Jobs/Util/Import.php @@ -423,7 +423,8 @@ class Import implements ShouldQueue $rules = [ '*.first_name' => ['string'], '*.last_name' => ['string'], - '*.email' => ['distinct'], + //'*.email' => ['distinct'], + '*.email' => ['distinct', 'email', new ValidUserForCompany(), new AttachableUser()], ]; // if (config('ninja.db.multi_db_enabled')) { diff --git a/app/Libraries/MultiDB.php b/app/Libraries/MultiDB.php index 83519d6c46e4..51afc34ae331 100644 --- a/app/Libraries/MultiDB.php +++ b/app/Libraries/MultiDB.php @@ -106,8 +106,8 @@ class MultiDB $current_db = config('database.default'); foreach (self::$dbs as $db) { - if (User::on($db)->where(['email' => $email])->get()->count() >= 1) { // if user already exists, validation will fail - if (Company::on($db)->where(['company_key' => $company_key])->get()->count() >= 1) { + if (User::on($db)->where(['email' => $email])->exists()) { + if (Company::on($db)->where(['company_key' => $company_key])->exists()) { self::setDb($current_db); return true; } else { diff --git a/app/Services/Invoice/UpdateReminder.php b/app/Services/Invoice/UpdateReminder.php index c9a0078e6d7a..60faac74f108 100644 --- a/app/Services/Invoice/UpdateReminder.php +++ b/app/Services/Invoice/UpdateReminder.php @@ -38,7 +38,7 @@ class UpdateReminder extends AbstractService $this->invoice->next_send_date = null; $this->invoice->save(); - return; //exit early + return $this->invoice; //exit early } $date_collection = collect(); diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index 09ecf7a16aee..e329553bd1f9 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -4252,6 +4252,8 @@ $LANG = array( 'contact_details' => 'Contact Details', 'download_backup_subject' => 'Your company backup is ready for download', 'account_passwordless_login' => 'Account passwordless login', + 'user_duplicate_error' => 'Cannot add the same user to the same company', + 'user_cross_linked_error' => 'User exists but cannot be crossed linked to multiple accounts', ); return $LANG; diff --git a/tests/Integration/CheckRemindersTest.php b/tests/Integration/CheckRemindersTest.php index f58cc42339fa..78c5ab89f483 100644 --- a/tests/Integration/CheckRemindersTest.php +++ b/tests/Integration/CheckRemindersTest.php @@ -25,7 +25,6 @@ class CheckRemindersTest extends TestCase { use MockAccountData; use DatabaseTransactions; - use MakesReminders; public function setUp() :void { diff --git a/tests/MockAccountData.php b/tests/MockAccountData.php index f20b0a4737fa..ad5225270ddc 100644 --- a/tests/MockAccountData.php +++ b/tests/MockAccountData.php @@ -192,10 +192,10 @@ trait MockAccountData if (! $user) { $user = User::factory()->create([ - 'account_id' => $this->account->id, - 'confirmation_code' => $this->createDbHash(config('database.default')), - 'email' => 'user@example.com', - ]); + 'account_id' => $this->account->id, + 'confirmation_code' => $this->createDbHash(config('database.default')), + 'email' => 'user@example.com', + ]); } $user->password = Hash::make('ALongAndBriliantPassword');