diff --git a/app/Http/Controllers/MigrationController.php b/app/Http/Controllers/MigrationController.php index afe76b9c1c80..c554a657e821 100644 --- a/app/Http/Controllers/MigrationController.php +++ b/app/Http/Controllers/MigrationController.php @@ -18,6 +18,7 @@ use App\Jobs\Mail\NinjaMailerJob; use App\Jobs\Mail\NinjaMailerObject; use App\Jobs\Util\StartMigration; use App\Mail\ExistingMigration; +use App\Mail\Migration\MaxCompanies; use App\Models\Company; use App\Models\CompanyToken; use Illuminate\Foundation\Bus\DispatchesJobs; @@ -231,19 +232,51 @@ class MigrationController extends BaseController nlog($request->all()); } + try { + return response()->json([ + '_id' => Str::uuid(), + 'method' => config('queue.default'), + 'started_at' => now(), + ], 200); + + } finally { + // Controller logic here + foreach ($companies as $company) { $is_valid = $request->file($company->company_index)->isValid(); if (!$is_valid) { - // We might want to send user something's wrong with migration or nope? continue; } $user = auth()->user(); + $company_count = $user->account->companies()->count(); + // Look for possible existing company (based on company keys). $existing_company = Company::whereRaw('BINARY `company_key` = ?', [$company->company_key])->first(); + if(!$existing_company && $company_count >=10) { + + $nmo = new NinjaMailerObject; + $nmo->mailable = new MaxCompanies($user->account->companies()->first()); + $nmo->company = $user->account->companies()->first(); + $nmo->settings = $user->account->companies()->first()->settings; + $nmo->to_user = $user; + NinjaMailerJob::dispatch($nmo); + return; + } + elseif($existing_company && $company_count > 10 ){ + + $nmo = new NinjaMailerObject; + $nmo->mailable = new MaxCompanies($user->account->companies()->first()); + $nmo->company = $user->account->companies()->first(); + $nmo->settings = $user->account->companies()->first()->settings; + $nmo->to_user = $user; + NinjaMailerJob::dispatch($nmo); + return; + } + $checks = [ 'existing_company' => $existing_company ? (bool)1 : false, 'force' => property_exists($company, 'force') ? (bool) $company->force : false, @@ -254,11 +287,11 @@ class MigrationController extends BaseController nlog('Migrating: Existing company without force. (CASE_01)'); $nmo = new NinjaMailerObject; - $nmo->mailable = new ExistingMigration(); - $nmo->company = $existing_company; - $nmo->settings = $existing_company->settings; + $nmo->mailable = new ExistingMigration($existing_company); + $nmo->company = $user->account->companies()->first(); + $nmo->settings = $user->account->companies()->first(); $nmo->to_user = $user; - + NinjaMailerJob::dispatch($nmo); return response()->json([ @@ -355,10 +388,7 @@ class MigrationController extends BaseController // } } - return response()->json([ - '_id' => Str::uuid(), - 'method' => config('queue.default'), - 'started_at' => now(), - ], 200); + } + } } diff --git a/app/Mail/ExistingMigration.php b/app/Mail/ExistingMigration.php index 60f7abdf95d4..366a4c146af5 100644 --- a/app/Mail/ExistingMigration.php +++ b/app/Mail/ExistingMigration.php @@ -10,14 +10,22 @@ class ExistingMigration extends Mailable { // use Queueable, SerializesModels; + public $company; + + public $settings; + + public $logo; + + public $company_name; + /** * Create a new message instance. * * @return void */ - public function __construct() + public function __construct($company) { - // + $this->company = $company; } /** @@ -27,8 +35,11 @@ class ExistingMigration extends Mailable */ public function build() { - return $this->from(config('mail.from.address'), config('mail.from.name')) + $this->settings = $this->company->settings; + $this->logo = $this->company->present()->logo(); + $this->company_name = $this->company->present()->name(); + return $this->from(config('mail.from.address'), config('mail.from.name')) ->view('email.migration.existing'); } } diff --git a/app/Mail/Migration/MaxCompanies.php b/app/Mail/Migration/MaxCompanies.php new file mode 100644 index 000000000000..af65f766b95e --- /dev/null +++ b/app/Mail/Migration/MaxCompanies.php @@ -0,0 +1,51 @@ +company = $company; + } + + /** + * Build the message. + * + * @return $this + */ + public function build() + { + $this->settings = $this->company->settings; + $this->logo = $this->company->present()->logo(); + $this->title = ctrans('texts.max_companies'); + $this->message = ctrans('texts.max_companies_desc'); + $this->whitelabel = $this->company->account->isPaid(); + + return $this->from(config('mail.from.address'), config('mail.from.name')) + ->view('email.migration.max_companies'); + } +} diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index 2619e20330fc..1bebb2cc44cf 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -4235,6 +4235,11 @@ $LANG = array( 'notification_quote_created_subject' => 'Quote :invoice was created for :client', 'notification_credit_created_subject' => 'Credit :invoice was created to :client', 'notification_credit_created_subject' => 'Credit :invoice was created for :client', + 'max_companies' => 'Maximum companies migrated', + 'max_companies_desc' => 'You have reached your maximum number of companies. Delete existing companies to migrate new ones.', + 'migration_already_completed' => 'Company already migrated', + 'migration_already_completed_desc' => 'Looks like you already migrated :company_name to the V5 version of the Invoice Ninja. In case you want to start over, you can force migrate to wipe existing data.', + ); return $LANG; diff --git a/resources/views/email/migration/existing.blade.php b/resources/views/email/migration/existing.blade.php index 1491488b17d6..3a4c1dbd6ca1 100644 --- a/resources/views/email/migration/existing.blade.php +++ b/resources/views/email/migration/existing.blade.php @@ -1,31 +1,18 @@ @component('email.template.master', ['design' => 'light', 'settings' => $settings]) -@slot('header') - @component('email.components.header') - Migration already completed - @endcomponent -@endslot + @slot('header') + @include('email.components.header', ['logo' => $logo]) + @endslot -@slot('greeting') - Hello, -@endslot +

{{ctrans('texts.migration_already_completed')}}

-Looks like you already migrated your data to V2 version of the Invoice Ninja. In case you want to start over, you can 'force' migrate to wipe existing data. - -@component('email.components.button', ['url' => url('/')]) - Visit portal -@endcomponent - - -@slot('signature') -Thank you,
-Invoice Ninja -@endslot - -@slot('footer') - @component('email.components.footer', ['url' => 'https://invoiceninja.com', 'url_text' => '© InvoiceNinja']) - For any info, please visit InvoiceNinja. - @endcomponent -@endslot +

{{ctrans('texts.migration_already_completed_desc', ['company_name' => $company_name])}}

+ @if(isset($whitelabel) && !$whitelabel) + @slot('footer') + @component('email.components.footer', ['url' => 'https://invoiceninja.com', 'url_text' => '© InvoiceNinja']) + For any info, please visit InvoiceNinja. + @endcomponent + @endslot + @endif @endcomponent diff --git a/resources/views/email/migration/max_companies.blade.php b/resources/views/email/migration/max_companies.blade.php new file mode 100644 index 000000000000..4d76f055b962 --- /dev/null +++ b/resources/views/email/migration/max_companies.blade.php @@ -0,0 +1,18 @@ +@component('email.template.master', ['design' => 'light', 'settings' => $settings]) + + @slot('header') + @include('email.components.header', ['logo' => $logo]) + @endslot + +

{{ctrans('texts.max_companies')}}

+ +

{{ctrans('texts.max_companies_desc')}}

+ + @if(isset($whitelabel) && !$whitelabel) + @slot('footer') + @component('email.components.footer', ['url' => 'https://invoiceninja.com', 'url_text' => '© InvoiceNinja']) + For any info, please visit InvoiceNinja. + @endcomponent + @endslot + @endif +@endcomponent