From 2c4cfa409a75015260edbb2582a6d1793473ce0b Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 2 Oct 2020 08:19:42 +1000 Subject: [PATCH] Recurring invoice migrations --- app/Console/Commands/ImportMigrations.php | 2 +- app/Jobs/Util/Import.php | 53 +++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/app/Console/Commands/ImportMigrations.php b/app/Console/Commands/ImportMigrations.php index c9c891146cd3..54d1adfa9fd0 100644 --- a/app/Console/Commands/ImportMigrations.php +++ b/app/Console/Commands/ImportMigrations.php @@ -112,7 +112,7 @@ class ImportMigrations extends Command public function getCompany(Account $account): Company { - $company = factory(Company::class)->create([ + $company = Company::factory()->create([ 'account_id' => $account->id, ]); diff --git a/app/Jobs/Util/Import.php b/app/Jobs/Util/Import.php index f4b667d2133a..aa1b5ba99aac 100644 --- a/app/Jobs/Util/Import.php +++ b/app/Jobs/Util/Import.php @@ -22,6 +22,7 @@ use App\Factory\InvoiceFactory; use App\Factory\PaymentFactory; use App\Factory\ProductFactory; use App\Factory\QuoteFactory; +use App\Factory\RecurringInvoiceFactory; use App\Factory\TaxRateFactory; use App\Factory\UserFactory; use App\Http\Requests\Company\UpdateCompanyRequest; @@ -99,6 +100,7 @@ class Import implements ShouldQueue 'clients', 'products', 'invoices', + 'recurring_invoices', 'quotes', 'payments', 'credits', @@ -478,6 +480,57 @@ class Import implements ShouldQueue $product_repository = null; } + private function processRecurringInvoices(array $data) :void + { + RecurringInvoice::unguard(); + + $rules = [ + '*.client_id' => ['required'], + ]; + + $validator = Validator::make($data, $rules); + + if ($validator->fails()) { + throw new MigrationValidatorFailed(json_encode($validator->errors())); + } + + $invoice_repository = new InvoiceMigrationRepository(); + + foreach ($data as $key => $resource) { + $modified = $resource; + + if (array_key_exists('client_id', $resource) && ! array_key_exists('clients', $this->ids)) { + throw new ResourceDependencyMissing('Processing invoices failed, because of missing dependency - clients.'); + } + + $modified['client_id'] = $this->transformId('clients', $resource['client_id']); + $modified['user_id'] = $this->processUserId($resource); + $modified['company_id'] = $this->company->id; + $modified['line_items'] = $this->cleanItems($modified['line_items']); + + unset($modified['id']); + + $invoice = $invoice_repository->save( + $modified, + RecurringInvoiceFactory::create($this->company->id, $modified['user_id']) + ); + + $key = "recurring_invoices_{$resource['id']}"; + + $this->ids['recurring_invoices'][$key] = [ + 'old' => $resource['id'], + 'new' => $invoice->id, + ]; + } + + RecurringInvoice::reguard(); + + /*Improve memory handling by setting everything to null when we have finished*/ + $data = null; + $invoice_repository = null; + + } + private function processInvoices(array $data): void { Invoice::unguard();