diff --git a/app/Console/Commands/DemoMode.php b/app/Console/Commands/DemoMode.php index bcd8673a45aa..f2b42ceb7f24 100644 --- a/app/Console/Commands/DemoMode.php +++ b/app/Console/Commands/DemoMode.php @@ -128,7 +128,7 @@ class DemoMode extends Command { $faker = \Faker\Factory::create(); - $this->count = 50; + $this->count = 25; $this->info('Creating Small Account and Company'); @@ -486,7 +486,7 @@ class DemoMode extends Command if (rand(0, 1)) { $invoice->assigned_user_id = $assigned_user_id; } - + $invoice->number = $this->getNextRecurringInvoiceNumber($client); $invoice->save(); } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 7ff6bd5e65bd..8163eff9fe12 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -163,6 +163,7 @@ class Kernel extends HttpKernel protected $middlewarePriority = [ + SetDomainNameDb::class, SetDb::class, SetWebDb::class, UrlSetDb::class, @@ -170,7 +171,6 @@ class Kernel extends HttpKernel SetEmailDb::class, SetInviteDb::class, SetDbByCompanyKey::class, - SetDomainNameDb::class, TokenAuth::class, ContactTokenAuth::class, ContactKeyLogin::class, diff --git a/app/Http/Middleware/CheckClientExistence.php b/app/Http/Middleware/CheckClientExistence.php index fb6f089c5244..bab04bc5678a 100644 --- a/app/Http/Middleware/CheckClientExistence.php +++ b/app/Http/Middleware/CheckClientExistence.php @@ -32,7 +32,6 @@ class CheckClientExistence ->where('email', auth('contact')->user()->email) ->whereNotNull('email') ->where('email', '<>', '') - ->where('account_id', auth('contact')->user()->client->company->account->id) ->whereNull('deleted_at') ->distinct('company_id') ->distinct('email') @@ -40,6 +39,9 @@ class CheckClientExistence ->whereHas('client', function ($query) { return $query->whereNull('deleted_at'); }) + ->whereHas('client.company', function ($query){ + return $query->where('account_id', auth('contact')->user()->client->company->account->id); + }) ->get(); if (count($multiple_contacts) == 0) { diff --git a/app/Jobs/Company/CompanyExport.php b/app/Jobs/Company/CompanyExport.php index e663b3e86968..15ee35a35b6d 100644 --- a/app/Jobs/Company/CompanyExport.php +++ b/app/Jobs/Company/CompanyExport.php @@ -71,6 +71,8 @@ class CompanyExport implements ShouldQueue MultiDB::setDb($this->company->db); + $this->company = Company::where('company_key', $this->company->company_key)->first(); + set_time_limit(0); $this->export_data['app_version'] = config('ninja.app_version'); @@ -114,6 +116,16 @@ class CompanyExport implements ShouldQueue })->toArray(); + $this->export_data['users'] = $this->company->users()->withTrashed()->cursor()->map(function ($user){ + + $user->account_id = $this->encodePrimaryKey($user->account_id); + $user->id = $this->encodePrimaryKey($user->id); + + return $user; + + })->toArray(); + + $this->export_data['client_contacts'] = $this->company->client_contacts->map(function ($client_contact){ $client_contact = $this->transformArrayOfKeys($client_contact, ['id', 'company_id', 'user_id',' client_id']); @@ -140,11 +152,7 @@ class CompanyExport implements ShouldQueue })->toArray(); - $temp_co = $this->company; - $temp_co->id = $this->encodePrimaryKey($temp_co->id); - $temp_co->account_id = $this->encodePrimaryKey($temp_co->account_id); - - $this->export_data['company'] = $temp_co->toArray(); + $this->export_data['company'] = $this->company->toArray(); $this->export_data['company_gateways'] = $this->company->company_gateways->map(function ($company_gateway){ @@ -273,7 +281,7 @@ class CompanyExport implements ShouldQueue $payment = $this->transformBasicEntities($payment); $payment = $this->transformArrayOfKeys($payment, ['client_id','project_id', 'vendor_id', 'client_contact_id', 'invitation_id', 'company_gateway_id']); - return $project; + return $payment; })->toArray(); @@ -370,15 +378,6 @@ class CompanyExport implements ShouldQueue })->makeHidden(['id'])->toArray(); - $this->export_data['users'] = $this->company->users()->withTrashed()->cursor()->map(function ($user){ - - $user->account_id = $this->encodePrimaryKey($user->account_id); - $user->id = $this->encodePrimaryKey($user->id); - - return $user; - - })->makeHidden(['ip'])->toArray(); - $this->export_data['vendors'] = $this->company->vendors->map(function ($vendor){ return $this->transformBasicEntities($vendor); diff --git a/tests/Feature/Import/ImportCompanyTest.php b/tests/Feature/Import/ImportCompanyTest.php index f884a3a89898..a30fe6f1144e 100644 --- a/tests/Feature/Import/ImportCompanyTest.php +++ b/tests/Feature/Import/ImportCompanyTest.php @@ -11,6 +11,7 @@ namespace Tests\Feature\Import; use App\Jobs\Import\CSVImport; +use App\Models\Account; use App\Models\Client; use App\Models\Expense; use App\Models\Invoice; @@ -35,6 +36,8 @@ class ImportCompanyTest extends TestCase { use MakesHash; + public $account; + public function setUp() :void { parent::setUp(); @@ -45,47 +48,75 @@ class ImportCompanyTest extends TestCase $this->withoutExceptionHandling(); + + $this->account = Account::factory()->create(); } public function testBackupJsonRead() { - $backup_json_file = base_path().'/tests/Feature/Import/backup.json'; + $backup_json_file_zip = base_path().'/tests/Feature/Import/backup.zip'; + + $zip = new \ZipArchive; + $res = $zip->open($backup_json_file_zip); + + if ($res === TRUE) { + $zip->extractTo(sys_get_temp_dir()); + $zip->close(); + } + + $backup_json_file = sys_get_temp_dir() . "/backup/backup.json"; $this->assertTrue(is_array(json_decode(file_get_contents($backup_json_file),1))); + + unlink($backup_json_file); } public function testImportUsers() { + $backup_json_file_zip = base_path().'/tests/Feature/Import/backup.zip'; - $backup_json_file = base_path().'/tests/Feature/Import/backup.json'; + $zip = new \ZipArchive; + $res = $zip->open($backup_json_file_zip); + if ($res === TRUE) { + $zip->extractTo(sys_get_temp_dir()); + $zip->close(); + } - $backup_json_file = json_decode(file_get_contents($backup_json_file)); + $backup_json_file = sys_get_temp_dir() . "/backup/backup.json"; - $this->assertTrue(property_exists($backup_json_file, 'app_version')); - $this->assertTrue(property_exists($backup_json_file, 'users')); + $backup_json_object = json_decode(file_get_contents($backup_json_file)); + + $this->assertTrue(property_exists($backup_json_object, 'app_version')); + $this->assertTrue(property_exists($backup_json_object, 'users')); + + unlink($backup_json_file); + + User::all()->each(function ($user){ + $user->forceDelete(); + }); User::unguard(); - foreach ($backup_json_file->users as $user) + foreach ($backup_json_object->users as $user) { + $user_array = (array)$user; + unset($user_array['laravel_through_key']); + unset($user_array['hashed_id']); $new_user = User::firstOrNew( ['email' => $user->email], - (array)$user, + array_merge($user_array, ['account_id' => $this->account->id]), ); - $new_user->account_id = $this->account->id; $new_user->save(['timestamps' => false]); -nlog($new_user->toArray()); - - $this->ids['users']["{$user->id}"] = $new_user->id; - -nlog($this->ids); + $this->ids['users']["{$user->hashed_id}"] = $new_user->id; } User::reguard(); + + $this->assertEquals(2, User::count()); } diff --git a/tests/Feature/Import/backup.json b/tests/Feature/Import/backup.json deleted file mode 100644 index a49c25849b4b..000000000000 --- a/tests/Feature/Import/backup.json +++ /dev/null @@ -1 +0,0 @@ -{"app_version":"5.1.62","activities":[{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"VWPe9OYbLy","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":5,"ip":"","is_system":false,"notes":"","created_at":1620971761,"updated_at":1620971761,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"VWPe9OYbLy","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":4,"ip":"","is_system":false,"notes":"","created_at":1620971762,"updated_at":1620971762,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"QnXe0O3dxr","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":5,"ip":"","is_system":false,"notes":"","created_at":1620971762,"updated_at":1620971762,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"QnXe0O3dxr","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":4,"ip":"","is_system":false,"notes":"","created_at":1620971763,"updated_at":1620971763,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"Wjneg6DdwZ","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":5,"ip":"","is_system":false,"notes":"","created_at":1620971763,"updated_at":1620971763,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"Wjneg6DdwZ","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":4,"ip":"","is_system":false,"notes":"","created_at":1620971764,"updated_at":1620971764,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"VolejLBbjN","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":5,"ip":"","is_system":false,"notes":"","created_at":1620971764,"updated_at":1620971764,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"VolejLBbjN","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":4,"ip":"","is_system":false,"notes":"","created_at":1620971765,"updated_at":1620971765,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"WpmbkDKdzJ","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":5,"ip":"","is_system":false,"notes":"","created_at":1620971765,"updated_at":1620971765,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"WpmbkDKdzJ","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":4,"ip":"","is_system":false,"notes":"","created_at":1620971766,"updated_at":1620971766,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":49,"ip":"","is_system":false,"notes":"Noe Reynolds Beatrice Reichel Updated user Noe Reynolds Beatrice Reichel","created_at":1620971766,"updated_at":1620971766,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""}],"backups":[{"id":68,"activity_id":"kQBeXqoayK","json_backup":"","html_backup":"\n