From 1e10bc3613cf8f5236e08ed5a6574fcd53f530a6 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 29 Sep 2020 09:25:45 +1000 Subject: [PATCH 01/16] Working on recurring migration --- app/Traits/GenerateMigrationResources.php | 88 +++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/app/Traits/GenerateMigrationResources.php b/app/Traits/GenerateMigrationResources.php index cb4d897bc51c..2d98b03f0849 100644 --- a/app/Traits/GenerateMigrationResources.php +++ b/app/Traits/GenerateMigrationResources.php @@ -353,6 +353,65 @@ trait GenerateMigrationResources return $credits; } + protected function getRecurringInvoices() + { + $invoices = []; + + $export_invoices = Invoice::where('account_id', $this->account->id) + ->where('amount', '>=', '0') + ->where('is_recurring', true) + ->withTrashed() + ->get(); + + //determine the status + //determine remaining cycles + //set the frequency_id + + foreach ($export_invoices as $invoice) { + $invoices[] = [ + 'id' => $invoice->id, + 'client_id' => $invoice->client_id, + 'user_id' => $invoice->user_id, + 'company_id' => $invoice->account_id, + 'status_id' => $this->transformRecurringStatusId($invoice->invoice_status_id), + 'design_id' => $invoice->invoice_design_id, + 'number' => $invoice->invoice_number, + 'discount' => $invoice->discount, + 'is_amount_discount' => $invoice->is_amount_discount ?: false, + 'po_number' => $invoice->po_number, + 'date' => $invoice->invoice_date, + 'last_sent_date' => $invoice->last_sent_date, + 'due_date' => $invoice->due_date, + 'uses_inclusive_taxes' => $this->account->inclusive_taxes, + 'is_deleted' => $invoice->is_deleted, + 'footer' => $invoice->invoice_footer, + 'public_notes' => $invoice->public_notes, + 'private_notes' => $invoice->private_notes, + 'terms' => $invoice->terms, + 'tax_name1' => $invoice->tax_name1, + 'tax_name2' => $invoice->tax_name2, + 'tax_rate1' => $invoice->tax_rate1, + 'tax_rate2' => $invoice->tax_rate2, + 'custom_value1' => $invoice->custom_value1, + 'custom_value2' => $invoice->custom_value2, + 'next_send_date' => null, + 'amount' => $invoice->amount ?: 0, + 'balance' => $invoice->balance ?: 0, + 'partial' => $invoice->partial ?: 0, + 'partial_due_date' => $invoice->partial_due_date, + 'line_items' => $this->getInvoiceItems($invoice->invoice_items), + 'created_at' => $invoice->created_at ? $invoice->created_at->toDateString() : null, + 'updated_at' => $invoice->updated_at ? $invoice->updated_at->toDateString() : null, + 'deleted_at' => $invoice->deleted_at ? $invoice->deleted_at->toDateString() : null, + //'invitations' => $this->getResourceInvitations($invoice->invitations, 'invoice_id'), + ]; + } + + return $invoices; + + + } + protected function getInvoices() { $invoices = []; @@ -406,6 +465,35 @@ trait GenerateMigrationResources return $invoices; } + /* + V5 + const STATUS_DRAFT = 1; + const STATUS_ACTIVE = 2; + const STATUS_PAUSED = 3; + const STATUS_COMPLETED = 4; + const STATUS_PENDING = -1; + */ + private function transformRecurringStatusId($invoice) + { + if($invoice->is_deleted == FALSE && + $invoice->deleted_at == NULL && + $invoice->is_recurring == TRUE && + $invoice->is_public == TRUE && + $invoice->frequency_id > 0 && + $invoice->start_date <= now() && + ($invoice->end_date == NULL || $invoice->end_date >= now())) { + + return 2; + } + + if($invoice->is_public == 0) + return 1; + + if($invoice->end_date < now()) + return 4; + + } + /* define('INVOICE_STATUS_DRAFT', 1); define('INVOICE_STATUS_SENT', 2); From 42ada7e3f899117b7b09b76ed462552aaf3ebe97 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 2 Oct 2020 07:38:42 +1000 Subject: [PATCH 02/16] Recurring migration --- app/Traits/GenerateMigrationResources.php | 200 +++++++++++++++------- 1 file changed, 142 insertions(+), 58 deletions(-) diff --git a/app/Traits/GenerateMigrationResources.php b/app/Traits/GenerateMigrationResources.php index 2d98b03f0849..298d05534d35 100644 --- a/app/Traits/GenerateMigrationResources.php +++ b/app/Traits/GenerateMigrationResources.php @@ -336,6 +336,8 @@ trait GenerateMigrationResources 'tax_name2' => $credit->tax_name2, 'tax_rate1' => $credit->tax_rate1, 'tax_rate2' => $credit->tax_rate2, + 'tax_name3' => '', + 'tax_rate3' => 0, 'custom_value1' => $credit->custom_value1, 'custom_value2' => $credit->custom_value2, 'next_send_date' => null, @@ -353,64 +355,6 @@ trait GenerateMigrationResources return $credits; } - protected function getRecurringInvoices() - { - $invoices = []; - - $export_invoices = Invoice::where('account_id', $this->account->id) - ->where('amount', '>=', '0') - ->where('is_recurring', true) - ->withTrashed() - ->get(); - - //determine the status - //determine remaining cycles - //set the frequency_id - - foreach ($export_invoices as $invoice) { - $invoices[] = [ - 'id' => $invoice->id, - 'client_id' => $invoice->client_id, - 'user_id' => $invoice->user_id, - 'company_id' => $invoice->account_id, - 'status_id' => $this->transformRecurringStatusId($invoice->invoice_status_id), - 'design_id' => $invoice->invoice_design_id, - 'number' => $invoice->invoice_number, - 'discount' => $invoice->discount, - 'is_amount_discount' => $invoice->is_amount_discount ?: false, - 'po_number' => $invoice->po_number, - 'date' => $invoice->invoice_date, - 'last_sent_date' => $invoice->last_sent_date, - 'due_date' => $invoice->due_date, - 'uses_inclusive_taxes' => $this->account->inclusive_taxes, - 'is_deleted' => $invoice->is_deleted, - 'footer' => $invoice->invoice_footer, - 'public_notes' => $invoice->public_notes, - 'private_notes' => $invoice->private_notes, - 'terms' => $invoice->terms, - 'tax_name1' => $invoice->tax_name1, - 'tax_name2' => $invoice->tax_name2, - 'tax_rate1' => $invoice->tax_rate1, - 'tax_rate2' => $invoice->tax_rate2, - 'custom_value1' => $invoice->custom_value1, - 'custom_value2' => $invoice->custom_value2, - 'next_send_date' => null, - 'amount' => $invoice->amount ?: 0, - 'balance' => $invoice->balance ?: 0, - 'partial' => $invoice->partial ?: 0, - 'partial_due_date' => $invoice->partial_due_date, - 'line_items' => $this->getInvoiceItems($invoice->invoice_items), - 'created_at' => $invoice->created_at ? $invoice->created_at->toDateString() : null, - 'updated_at' => $invoice->updated_at ? $invoice->updated_at->toDateString() : null, - 'deleted_at' => $invoice->deleted_at ? $invoice->deleted_at->toDateString() : null, - //'invitations' => $this->getResourceInvitations($invoice->invitations, 'invoice_id'), - ]; - } - - return $invoices; - - - } protected function getInvoices() { @@ -465,6 +409,146 @@ trait GenerateMigrationResources return $invoices; } + protected function getRecurringInvoices() + { + $invoices = []; + + $export_invoices = Invoice::where('account_id', $this->account->id) + ->where('amount', '>=', '0') + ->where('is_recurring', true) + ->withTrashed() + ->get(); + + foreach ($export_invoices as $invoice) { + $invoices[] = [ + 'id' => $invoice->id, + 'client_id' => $invoice->client_id, + 'user_id' => $invoice->user_id, + 'company_id' => $invoice->account_id, + 'status_id' => $this->transformRecurringStatusId($invoice->invoice_status_id), + 'design_id' => $invoice->invoice_design_id, + 'number' => '', + //'number' => $invoice->invoice_number, + 'discount' => $invoice->discount, + 'is_amount_discount' => $invoice->is_amount_discount ?: false, + 'po_number' => $invoice->po_number, + 'date' => $invoice->invoice_date, + 'last_sent_date' => $invoice->last_sent_date, + 'due_date' => $invoice->due_date, + 'uses_inclusive_taxes' => $this->account->inclusive_taxes, + 'is_deleted' => $invoice->is_deleted, + 'footer' => $invoice->invoice_footer, + 'public_notes' => $invoice->public_notes, + 'private_notes' => $invoice->private_notes, + 'terms' => $invoice->terms, + 'tax_name1' => $invoice->tax_name1, + 'tax_name2' => $invoice->tax_name2, + 'tax_rate1' => $invoice->tax_rate1, + 'tax_rate2' => $invoice->tax_rate2, + 'tax_name3' => '', + 'tax_rate3' => 0, + 'custom_value1' => $invoice->custom_value1, + 'custom_value2' => $invoice->custom_value2, + 'custom_value3' => '', + 'custom_value4' => '', + 'next_send_date' => $invoice->getNextSendDate()->format('Y-m-d'), + 'amount' => $invoice->amount ?: 0, + 'balance' => $invoice->balance ?: 0, + 'partial' => $invoice->partial ?: 0, + 'partial_due_date' => $invoice->partial_due_date, + 'line_items' => $this->getInvoiceItems($invoice->invoice_items), + 'created_at' => $invoice->created_at ? $invoice->created_at->toDateString() : null, + 'updated_at' => $invoice->updated_at ? $invoice->updated_at->toDateString() : null, + 'deleted_at' => $invoice->deleted_at ? $invoice->deleted_at->toDateString() : null, + 'frequency_id' => $this->transformFrequencyId($invoice), + 'due_date_days' => $this->transformDueDate($invoice), + //'invitations' => $this->getResourceInvitations($invoice->invitations, 'invoice_id'), + ]; + } + + return $invoices; + + + } + + private function transformDueDate($invoice) + { + //weekly recurring invoice get the payment terms + if($invoice->frequency_id == 1) + return 'terms'; + + $due_date_parts = explode("-", $invoice->due_date); + return (string)$due_date_parts[2]; + } + + //v4 + // define('FREQUENCY_WEEKLY', 1); + // define('FREQUENCY_TWO_WEEKS', 2); + // define('FREQUENCY_FOUR_WEEKS', 3); + // define('FREQUENCY_MONTHLY', 4); + // define('FREQUENCY_TWO_MONTHS', 5); + // define('FREQUENCY_THREE_MONTHS', 6); + // define('FREQUENCY_FOUR_MONTHS', 7); + // define('FREQUENCY_SIX_MONTHS', 8); + // define('FREQUENCY_ANNUALLY', 9); + // define('FREQUENCY_TWO_YEARS', 10); + + //v5 + // const FREQUENCY_DAILY = 1; + // const FREQUENCY_WEEKLY = 2; + // const FREQUENCY_TWO_WEEKS = 3; + // const FREQUENCY_FOUR_WEEKS = 4; + // const FREQUENCY_MONTHLY = 5; + // const FREQUENCY_TWO_MONTHS = 6; + // const FREQUENCY_THREE_MONTHS = 7; + // const FREQUENCY_FOUR_MONTHS = 8; + // const FREQUENCY_SIX_MONTHS = 9; + // const FREQUENCY_ANNUALLY = 10; + // const FREQUENCY_TWO_YEARS = 11; + // const FREQUENCY_THREE_YEARS = 12; + + + private function transformFrequencyId($invoice) + { + switch ($invoice->frequency_id) { + case 1: + return 2; + break; + case 2: + return 3; + break; + case 3: + return 4; + break; + case 4: + return 5; + break; + case 5: + return 6; + break; + case 6: + return 7; + break; + case 7: + return 8; + break; + case 8: + return 9; + break; + case 9: + return 10; + break; + case 10: + return 11; + break; + + + default: + # code... + break; + } + } + /* V5 const STATUS_DRAFT = 1; From 4c87d6864ad77a7f7ddd81b41b750f56ceab8f14 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 2 Oct 2020 08:19:29 +1000 Subject: [PATCH 03/16] Recurring migrations --- app/Traits/GenerateMigrationResources.php | 64 ++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/app/Traits/GenerateMigrationResources.php b/app/Traits/GenerateMigrationResources.php index 298d05534d35..d64914eabc8f 100644 --- a/app/Traits/GenerateMigrationResources.php +++ b/app/Traits/GenerateMigrationResources.php @@ -451,7 +451,6 @@ trait GenerateMigrationResources 'custom_value2' => $invoice->custom_value2, 'custom_value3' => '', 'custom_value4' => '', - 'next_send_date' => $invoice->getNextSendDate()->format('Y-m-d'), 'amount' => $invoice->amount ?: 0, 'balance' => $invoice->balance ?: 0, 'partial' => $invoice->partial ?: 0, @@ -460,14 +459,77 @@ trait GenerateMigrationResources 'created_at' => $invoice->created_at ? $invoice->created_at->toDateString() : null, 'updated_at' => $invoice->updated_at ? $invoice->updated_at->toDateString() : null, 'deleted_at' => $invoice->deleted_at ? $invoice->deleted_at->toDateString() : null, + 'next_send_date' => $invoice->getNextSendDate()->format('Y-m-d'), 'frequency_id' => $this->transformFrequencyId($invoice), 'due_date_days' => $this->transformDueDate($invoice), + 'remaining_cycles' => $this->getRemainingCycles($invoice), //'invitations' => $this->getResourceInvitations($invoice->invitations, 'invoice_id'), ]; } return $invoices; + } + + /* Determine the number of remaining cycles */ + private function getRemainingCycles($invoice) + { + if(empty($invoice->end_date) || !$invoice->end_date) + return -1; + + $start_date = $invoice->getNextSendDate(); + $end_date = Carbon::parse($invoice->end_date); + + //v4 + // define('FREQUENCY_WEEKLY', 1); + // define('FREQUENCY_TWO_WEEKS', 2); + // define('FREQUENCY_FOUR_WEEKS', 3); + // define('FREQUENCY_MONTHLY', 4); + // define('FREQUENCY_TWO_MONTHS', 5); + // define('FREQUENCY_THREE_MONTHS', 6); + // define('FREQUENCY_FOUR_MONTHS', 7); + // define('FREQUENCY_SIX_MONTHS', 8); + // define('FREQUENCY_ANNUALLY', 9); + // define('FREQUENCY_TWO_YEARS', 10); + + switch ($invoice->frequency_id) { + case 1: + return (int)$end_date->diffInWeeks($start_date); + break; + case 2: + return (int)$end_date->diffInWeeks($start_date)/2; + break; + case 3: + return (int)$end_date->diffInWeeks($start_date)/4; + break; + case 4: + return (int)$end_date->diffInMonths($start_date); + break; + case 5: + return (int)$end_date->diffInMonths($start_date)/2; + break; + case 6: + return (int)$end_date->diffInMonths($start_date)/3; + break; + case 7: + return (int)$end_date->diffInMonths($start_date)/4; + break; + case 8: + return (int)$end_date->diffInMonths($start_date)/5; + break; + case 9: + return (int)$end_date->diffInYears($start_date); + break; + case 10: + return (int)$end_date->diffInYears($start_date)/2; + break; + + default: + return -1; + + break; + } + } From 9afd6c6fc24907933c7e0ed77998faad4139cd33 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 2 Oct 2020 16:34:12 +1000 Subject: [PATCH 04/16] recurring migration --- app/Http/Controllers/Migration/StepsController.php | 1 + app/Traits/GenerateMigrationResources.php | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Migration/StepsController.php b/app/Http/Controllers/Migration/StepsController.php index 4bcb82dcdb03..fffb799d5c2d 100644 --- a/app/Http/Controllers/Migration/StepsController.php +++ b/app/Http/Controllers/Migration/StepsController.php @@ -243,6 +243,7 @@ class StepsController extends BaseController 'clients' => $this->getClients(), 'products' => $this->getProducts(), 'invoices' => $this->getInvoices(), + 'recurring_invoices' => $this->getRecurringInvoices(), 'quotes' => $this->getQuotes(), 'payments' => array_merge($this->getPayments(), $this->getCredits()), 'credits' => $this->getCreditsNotes(), diff --git a/app/Traits/GenerateMigrationResources.php b/app/Traits/GenerateMigrationResources.php index d64914eabc8f..222f8deabe9f 100644 --- a/app/Traits/GenerateMigrationResources.php +++ b/app/Traits/GenerateMigrationResources.php @@ -15,6 +15,7 @@ use App\Models\PaymentTerm; use App\Models\Product; use App\Models\TaxRate; use App\Models\User; +use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Crypt; trait GenerateMigrationResources @@ -425,7 +426,7 @@ trait GenerateMigrationResources 'client_id' => $invoice->client_id, 'user_id' => $invoice->user_id, 'company_id' => $invoice->account_id, - 'status_id' => $this->transformRecurringStatusId($invoice->invoice_status_id), + 'status_id' => $this->transformRecurringStatusId($invoice), 'design_id' => $invoice->invoice_design_id, 'number' => '', //'number' => $invoice->invoice_number, From 2384e3d3e875d9fcb63385a0f6e48ad35c4fb8ad Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 5 Oct 2020 08:56:02 +1100 Subject: [PATCH 05/16] Recurring migration --- app/Traits/GenerateMigrationResources.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/Traits/GenerateMigrationResources.php b/app/Traits/GenerateMigrationResources.php index 222f8deabe9f..e9d0191d22bf 100644 --- a/app/Traits/GenerateMigrationResources.php +++ b/app/Traits/GenerateMigrationResources.php @@ -460,7 +460,7 @@ trait GenerateMigrationResources 'created_at' => $invoice->created_at ? $invoice->created_at->toDateString() : null, 'updated_at' => $invoice->updated_at ? $invoice->updated_at->toDateString() : null, 'deleted_at' => $invoice->deleted_at ? $invoice->deleted_at->toDateString() : null, - 'next_send_date' => $invoice->getNextSendDate()->format('Y-m-d'), + 'next_send_date' => $this->getNextSendDateForMigration($invoice), 'frequency_id' => $this->transformFrequencyId($invoice), 'due_date_days' => $this->transformDueDate($invoice), 'remaining_cycles' => $this->getRemainingCycles($invoice), @@ -472,6 +472,16 @@ trait GenerateMigrationResources } + private function getNextSendDateForMigration($invoice) + { + + if($next_send_date = $invoice->getNextSendDate()) + return $next_send_date->format('Y-m-d'); + + return null; + + } + /* Determine the number of remaining cycles */ private function getRemainingCycles($invoice) { From 5ecd4da153fd305c14876a6dcf8341f7970dc2b9 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 6 Oct 2020 11:44:22 +1100 Subject: [PATCH 06/16] minor fix for recurring numbers --- app/Traits/GenerateMigrationResources.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Traits/GenerateMigrationResources.php b/app/Traits/GenerateMigrationResources.php index e9d0191d22bf..72fbb220f581 100644 --- a/app/Traits/GenerateMigrationResources.php +++ b/app/Traits/GenerateMigrationResources.php @@ -364,6 +364,7 @@ trait GenerateMigrationResources $export_invoices = Invoice::where('account_id', $this->account->id) ->where('amount', '>=', '0') ->where('invoice_type_id', '=', INVOICE_TYPE_STANDARD) + ->where('is_recurring', false) ->withTrashed() ->get(); From f6315cb640bdff0f2f4c85ce1955f6ef94da07a5 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 7 Oct 2020 10:09:34 +1100 Subject: [PATCH 07/16] Disable custom designs in migration to V5 --- app/Traits/GenerateMigrationResources.php | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/app/Traits/GenerateMigrationResources.php b/app/Traits/GenerateMigrationResources.php index 72fbb220f581..ea6d822f2afe 100644 --- a/app/Traits/GenerateMigrationResources.php +++ b/app/Traits/GenerateMigrationResources.php @@ -319,7 +319,7 @@ trait GenerateMigrationResources 'user_id' => $credit->user_id, 'company_id' => $credit->account_id, 'status_id' => $credit->invoice_status_id, - 'design_id' => $credit->invoice_design_id, + 'design_id' => $this->getDesignId($credit->invoice_design_id), 'number' => $credit->invoice_number, 'discount' => $credit->discount ?: 0, 'is_amount_discount' => $credit->is_amount_discount ?: false, @@ -375,7 +375,7 @@ trait GenerateMigrationResources 'user_id' => $invoice->user_id, 'company_id' => $invoice->account_id, 'status_id' => $this->transformStatusId($invoice->invoice_status_id), - 'design_id' => $invoice->invoice_design_id, + 'design_id' => $this->getDesignId($invoice->invoice_design_id), 'number' => $invoice->invoice_number, 'discount' => $invoice->discount, 'is_amount_discount' => $invoice->is_amount_discount ?: false, @@ -411,6 +411,15 @@ trait GenerateMigrationResources return $invoices; } + /*We cant migrate custom designs*/ + private function getDesignId($design_id) + { + if($design_id >= 11) + return 1; + + return $design_id; + } + protected function getRecurringInvoices() { $invoices = []; @@ -428,9 +437,8 @@ trait GenerateMigrationResources 'user_id' => $invoice->user_id, 'company_id' => $invoice->account_id, 'status_id' => $this->transformRecurringStatusId($invoice), - 'design_id' => $invoice->invoice_design_id, + 'design_id' => $this->getDesignId($invoice->invoice_design_id), 'number' => '', - //'number' => $invoice->invoice_number, 'discount' => $invoice->discount, 'is_amount_discount' => $invoice->is_amount_discount ?: false, 'po_number' => $invoice->po_number, @@ -769,7 +777,7 @@ trait GenerateMigrationResources 'user_id' => $quote->user_id, 'company_id' => $quote->account_id, 'status_id' => $quote->invoice_status_id, - 'design_id' => $quote->invoice_design_id, + 'design_id' => $this->getDesignId($quote->invoice_design_id), 'number' => $quote->invoice_number, 'discount' => $quote->discount, 'is_amount_discount' => $quote->is_amount_discount ?: false, From 5d6b86b6c2de263444b8597cd273ac83bb3f2d5e Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 14 Oct 2020 07:46:55 +1100 Subject: [PATCH 08/16] Fix for type casting language id --- app/Traits/GenerateMigrationResources.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Traits/GenerateMigrationResources.php b/app/Traits/GenerateMigrationResources.php index ea6d822f2afe..fcc963e035de 100644 --- a/app/Traits/GenerateMigrationResources.php +++ b/app/Traits/GenerateMigrationResources.php @@ -201,7 +201,7 @@ trait GenerateMigrationResources $settings->currency_id = $client->currency_id ? (string) $client->currency_id : (string) $client->account->currency_id; if ($client->language_id) { - $settings->language_id = $client->language_id; + $settings->language_id = (string)$client->language_id; } return $settings; From 0d1c279f64540c25cee20fac53c8c7aa89001d9f Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 28 Oct 2020 16:26:08 +1100 Subject: [PATCH 09/16] Fixes for payment meta data types --- .../Controllers/Migration/StepsController.php | 4 +- app/Traits/GenerateMigrationResources.php | 98 +++++++++---------- 2 files changed, 51 insertions(+), 51 deletions(-) diff --git a/app/Http/Controllers/Migration/StepsController.php b/app/Http/Controllers/Migration/StepsController.php index fffb799d5c2d..c4414b9708c1 100644 --- a/app/Http/Controllers/Migration/StepsController.php +++ b/app/Http/Controllers/Migration/StepsController.php @@ -162,7 +162,7 @@ class StepsController extends BaseController $companyService = (new CompanyService(session('MIGRATION_ACCOUNT_TOKEN'))) ->endpoint(session('MIGRATION_ENDPOINT')) ->start(); - + if ($companyService->isSuccessful()) { return view('migration.companies', ['companies' => $companyService->getCompanies()]); } @@ -245,8 +245,8 @@ class StepsController extends BaseController 'invoices' => $this->getInvoices(), 'recurring_invoices' => $this->getRecurringInvoices(), 'quotes' => $this->getQuotes(), - 'payments' => array_merge($this->getPayments(), $this->getCredits()), 'credits' => $this->getCreditsNotes(), + 'payments' => array_merge($this->getPayments(), $this->getCredits()), 'documents' => $this->getDocuments(), 'company_gateways' => $this->getCompanyGateways(), 'client_gateway_tokens' => $this->getClientGatewayTokens(), diff --git a/app/Traits/GenerateMigrationResources.php b/app/Traits/GenerateMigrationResources.php index fcc963e035de..3ad1147f5dae 100644 --- a/app/Traits/GenerateMigrationResources.php +++ b/app/Traits/GenerateMigrationResources.php @@ -217,14 +217,14 @@ trait GenerateMigrationResources 'company_id' => $contact->account_id, 'user_id' => $contact->user_id, 'client_id' => $contact->client_id, - 'first_name' => $contact->first_name, - 'last_name' => $contact->last_name, - 'phone' => $contact->phone, - 'custom_value1' => $contact->custom_value1, - 'custom_value2' => $contact->custom_value2, + 'first_name' => $contact->first_name ?: '', + 'last_name' => $contact->last_name ?: '', + 'phone' => $contact->phone ?: '', + 'custom_value1' => $contact->custom_value1 ?: '', + 'custom_value2' => $contact->custom_value2 ?: '', 'email' => $contact->email, - 'is_primary' => $contact->is_primary, - 'send_email' => $contact->send_invoice, + 'is_primary' => (bool)$contact->is_primary, + 'send_email' => (bool)$contact->send_invoice, 'confirmed' => $contact->confirmation_token ? true : false, 'email_verified_at' => $contact->created_at->toDateTimeString(), 'last_login' => $contact->last_login, @@ -249,10 +249,10 @@ trait GenerateMigrationResources $transformed[] = [ 'company_id' => $product->account_id, 'user_id' => $product->user_id, - 'custom_value1' => $product->custom_value1, - 'custom_value2' => $product->custom_value2, - 'product_key' => $product->product_key, - 'notes' => $product->notes, + 'custom_value1' => $product->custom_value1 ?: '', + 'custom_value2' => $product->custom_value2 ?: '', + 'product_key' => $product->product_key ?: '', + 'notes' => $product->notes ?: '', 'cost' => $product->cost ?: 0, 'quantity' => $product->qty ?: 0, 'tax_name1' => $product->tax_name1, @@ -279,9 +279,9 @@ trait GenerateMigrationResources foreach ($users as $user) { $transformed[] = [ 'id' => $user->id, - 'first_name' => $user->first_name, - 'last_name' => $user->last_name, - 'phone' => $user->phone, + 'first_name' => $user->first_name ?: '', + 'last_name' => $user->last_name ?: '', + 'phone' => $user->phone ?: '', 'email' => $user->email, 'confirmation_code' => $user->confirmation_code, 'failed_logins' => $user->failed_logins, @@ -323,24 +323,24 @@ trait GenerateMigrationResources 'number' => $credit->invoice_number, 'discount' => $credit->discount ?: 0, 'is_amount_discount' => $credit->is_amount_discount ?: false, - 'po_number' => $credit->po_number, + 'po_number' => $credit->po_number ?: '', 'date' => $credit->invoice_date, 'last_sent_date' => $credit->last_sent_date, 'due_date' => $credit->due_date, 'uses_inclusive_taxes' => $this->account->inclusive_taxes, 'is_deleted' => $credit->is_deleted, - 'footer' => $credit->invoice_footer, - 'public_notes' => $credit->public_notes, - 'private_notes' => $credit->private_notes, - 'terms' => $credit->terms, + 'footer' => $credit->invoice_footer ?: '', + 'public_notes' => $credit->public_notes ?: '', + 'private_notes' => $credit->private_notes ?: '', + 'terms' => $credit->terms ?: '', 'tax_name1' => $credit->tax_name1, 'tax_name2' => $credit->tax_name2, 'tax_rate1' => $credit->tax_rate1, 'tax_rate2' => $credit->tax_rate2, 'tax_name3' => '', 'tax_rate3' => 0, - 'custom_value1' => $credit->custom_value1, - 'custom_value2' => $credit->custom_value2, + 'custom_value1' => $credit->custom_value1 ?: '', + 'custom_value2' => $credit->custom_value2 ?: '', 'next_send_date' => null, 'amount' => $credit->amount ?: 0, 'balance' => $credit->balance ?: 0, @@ -379,22 +379,22 @@ trait GenerateMigrationResources 'number' => $invoice->invoice_number, 'discount' => $invoice->discount, 'is_amount_discount' => $invoice->is_amount_discount ?: false, - 'po_number' => $invoice->po_number, + 'po_number' => $invoice->po_number ?: '', 'date' => $invoice->invoice_date, 'last_sent_date' => $invoice->last_sent_date, 'due_date' => $invoice->due_date, 'uses_inclusive_taxes' => $this->account->inclusive_taxes, 'is_deleted' => $invoice->is_deleted, - 'footer' => $invoice->invoice_footer, - 'public_notes' => $invoice->public_notes, - 'private_notes' => $invoice->private_notes, - 'terms' => $invoice->terms, + 'footer' => $invoice->invoice_footer ?: '', + 'public_notes' => $invoice->public_notes ?: '', + 'private_notes' => $invoice->private_notes ?: '', + 'terms' => $invoice->terms ?: '', 'tax_name1' => $invoice->tax_name1, 'tax_name2' => $invoice->tax_name2, 'tax_rate1' => $invoice->tax_rate1, 'tax_rate2' => $invoice->tax_rate2, - 'custom_value1' => $invoice->custom_value1, - 'custom_value2' => $invoice->custom_value2, + 'custom_value1' => $invoice->custom_value1 ?: '', + 'custom_value2' => $invoice->custom_value2 ?: '', 'next_send_date' => null, 'amount' => $invoice->amount ?: 0, 'balance' => $invoice->balance ?: 0, @@ -441,24 +441,24 @@ trait GenerateMigrationResources 'number' => '', 'discount' => $invoice->discount, 'is_amount_discount' => $invoice->is_amount_discount ?: false, - 'po_number' => $invoice->po_number, + 'po_number' => $invoice->po_number ?: '', 'date' => $invoice->invoice_date, 'last_sent_date' => $invoice->last_sent_date, 'due_date' => $invoice->due_date, 'uses_inclusive_taxes' => $this->account->inclusive_taxes, - 'is_deleted' => $invoice->is_deleted, + 'is_deleted' => (bool)$invoice->is_deleted, 'footer' => $invoice->invoice_footer, - 'public_notes' => $invoice->public_notes, - 'private_notes' => $invoice->private_notes, - 'terms' => $invoice->terms, + 'public_notes' => $invoice->public_notes ?: '', + 'private_notes' => $invoice->private_notes ?: '', + 'terms' => $invoice->terms ?: '', 'tax_name1' => $invoice->tax_name1, 'tax_name2' => $invoice->tax_name2, 'tax_rate1' => $invoice->tax_rate1, 'tax_rate2' => $invoice->tax_rate2, 'tax_name3' => '', 'tax_rate3' => 0, - 'custom_value1' => $invoice->custom_value1, - 'custom_value2' => $invoice->custom_value2, + 'custom_value1' => $invoice->custom_value1 ?: '', + 'custom_value2' => $invoice->custom_value2 ?: '', 'custom_value3' => '', 'custom_value4' => '', 'amount' => $invoice->amount ?: 0, @@ -781,22 +781,22 @@ trait GenerateMigrationResources 'number' => $quote->invoice_number, 'discount' => $quote->discount, 'is_amount_discount' => $quote->is_amount_discount ?: false, - 'po_number' => $quote->po_number, + 'po_number' => $quote->po_number ?: '', 'date' => $quote->invoice_date, 'last_sent_date' => $quote->last_sent_date, 'due_date' => $quote->due_date, 'uses_inclusive_taxes' => $this->account->inclusive_taxes, - 'is_deleted' => $quote->is_deleted, - 'footer' => $quote->invoice_footer, - 'public_notes' => $quote->public_notes, - 'private_notes' => $quote->private_notes, - 'terms' => $quote->terms, + 'is_deleted' => (bool)$quote->is_deleted, + 'footer' => $quote->invoice_footer ?: '', + 'public_notes' => $quote->public_notes ?: '', + 'private_notes' => $quote->private_notes ?: '', + 'terms' => $quote->terms ?: '', 'tax_name1' => $quote->tax_name1, 'tax_name2' => $quote->tax_name2, 'tax_rate1' => $quote->tax_rate1, 'tax_rate2' => $quote->tax_rate2, - 'custom_value1' => $quote->custom_value1, - 'custom_value2' => $quote->custom_value2, + 'custom_value1' => $quote->custom_value1 ?: '', + 'custom_value2' => $quote->custom_value2 ?: '', 'next_send_date' => null, 'amount' => $quote->amount ?: 0, 'balance' => $quote->balance ?: 0, @@ -865,9 +865,9 @@ trait GenerateMigrationResources 'applied' => $payment->amount ?: 0, 'refunded' => $payment->refunded ?: 0, 'date' => $payment->payment_date, - 'transaction_reference' => $payment->transaction_reference, + 'transaction_reference' => $payment->transaction_reference ?: '', 'payer_id' => $payment->payer_id, - 'is_deleted' => $payment->is_deleted, + 'is_deleted' => (bool)$payment->is_deleted, 'exchange_rate' => $payment->exchange_rate ? number_format((float) $payment->exchange_rate, 6) : null, 'exchange_currency_id' => $payment->exchange_currency_id, 'currency_id' => isset($payment->client->currency->id) ? $payment->client->currency->id : $this->account->currency_id, @@ -1036,10 +1036,10 @@ trait GenerateMigrationResources } $meta = new \stdClass(); - $meta->exp_month = $exp_month; - $meta->exp_year = $exp_year; - $meta->brand = $payment_method->payment_type->name; - $meta->last4 = str_replace(',', '', ($payment_method->expiration)); + $meta->exp_month = (string)$exp_month; + $meta->exp_year = (string)$exp_year; + $meta->brand = (string)$payment_method->payment_type->name; + $meta->last4 = (string)str_replace(',', '', ($payment_method->expiration)); $meta->type = $payment_method->payment_type->gateway_type_id; return $meta; From aff75e1d59c1d52d8012ddc71b02e665cebf825f Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 30 Oct 2020 19:52:45 +1100 Subject: [PATCH 10/16] Tasks, Expenses migration --- .../Controllers/Migration/StepsController.php | 4 + app/Traits/GenerateMigrationResources.php | 174 +++++++++++++++++- 2 files changed, 173 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/Migration/StepsController.php b/app/Http/Controllers/Migration/StepsController.php index c4414b9708c1..cf7be9928e6a 100644 --- a/app/Http/Controllers/Migration/StepsController.php +++ b/app/Http/Controllers/Migration/StepsController.php @@ -250,6 +250,10 @@ class StepsController extends BaseController 'documents' => $this->getDocuments(), 'company_gateways' => $this->getCompanyGateways(), 'client_gateway_tokens' => $this->getClientGatewayTokens(), + 'expense_categories' => $this->getExpenseCategories(), + 'task_statuses' => $this->getTaskStatuses(), + 'expenses' => $this->getExpenses(), + 'tasks' => $this->getTasks(), ]; $file = storage_path("migrations/{$fileName}.zip"); diff --git a/app/Traits/GenerateMigrationResources.php b/app/Traits/GenerateMigrationResources.php index 3ad1147f5dae..1211e222735e 100644 --- a/app/Traits/GenerateMigrationResources.php +++ b/app/Traits/GenerateMigrationResources.php @@ -8,11 +8,15 @@ use App\Models\AccountGatewayToken; use App\Models\Contact; use App\Models\Credit; use App\Models\Document; +use App\Models\Expense; +use App\Models\ExpenseCategory; use App\Models\Invoice; use App\Models\Payment; use App\Models\PaymentMethod; use App\Models\PaymentTerm; use App\Models\Product; +use App\Models\Task; +use App\Models\TaskStatus; use App\Models\TaxRate; use App\Models\User; use Illuminate\Support\Carbon; @@ -909,7 +913,7 @@ trait GenerateMigrationResources private function getDocuments() { - $documents = Document::where('account_id', $this->account->id)->get(); + $documents = Document::where('account_id', $this->account->id)->withTrashed()->get(); $transformed = []; @@ -939,7 +943,7 @@ trait GenerateMigrationResources private function getCompanyGateways() { - $account_gateways = AccountGateway::where('account_id', $this->account->id)->get(); + $account_gateways = AccountGateway::where('account_id', $this->account->id)->withTrashed()->get(); $transformed = []; @@ -971,7 +975,7 @@ trait GenerateMigrationResources private function getClientGatewayTokens() { - $payment_methods = PaymentMethod::where('account_id', $this->account->id)->get(); + $payment_methods = PaymentMethod::where('account_id', $this->account->id)->withTrashed()->get(); $transformed = []; @@ -1001,7 +1005,7 @@ trait GenerateMigrationResources private function getPaymentTerms() { - $payment_terms = PaymentTerm::where('account_id', 0)->orWhere('account_id', $this->account->id)->get(); + $payment_terms = PaymentTerm::where('account_id', 0)->orWhere('account_id', $this->account->id)->withTrashed()->get(); $transformed = []; @@ -1015,7 +1019,10 @@ trait GenerateMigrationResources 'user_id' => 0, 'company_id' => $this->account->id, 'num_days' => $payment_term->num_days, - 'deleted_at' => $payment_term->deleted_at, + 'is_deleted' => $payment_term->is_deleted, + 'created_at' => $payment_term->created_at ? $payment_term->created_at->toDateString() : null, + 'updated_at' => $payment_term->updated_at ? $payment_term->updated_at->toDateString() : null, + 'deleted_at' => $payment_term->deleted_at ? $payment_term->deleted_at->toDateString() : null, ]; } @@ -1023,6 +1030,163 @@ trait GenerateMigrationResources return $transformed; } + + private function getTaskStatuses() + { + $task_statuses = TaskStatus::where('account_id', $this->account->id)->withTrashed()->get(); + + if($task_statuses->count() == 0) + { + $defaults = [ + 'backlog', + 'ready_to_do', + 'in_progress', + 'done', + ]; + for ($i=0; $iname = trans('texts.' . $defaults[$i]); + $status->sort_order = $i; + $status->save(); + } + + $task_statuses = TaskStatus::where('account_id', $this->account->id)->withTrashed()->get(); + + } + + $transformed = []; + + foreach($task_statuses as $task_status) + { + $transformed[] = [ + 'name' => $task_status->name ?: '', + 'id' => $task_status->id, + 'company_id' => $this->account->id, + 'user_id' => $task_status->user_id, + 'status_sort_order' => $task_status->sort_order, + 'is_deleted' => $task_status->is_deleted, + 'created_at' => $task_status->created_at ? $task_status->created_at->toDateString() : null, + 'updated_at' => $task_status->updated_at ? $task_status->updated_at->toDateString() : null, + 'deleted_at' => $task_status->deleted_at ? $task_status->deleted_at->toDateString() : null, + ]; + } + + return $transformed; + + } + + private function getExpenseCategories() + { + $expense_categories = ExpenseCategory::where('account_id', $this->account->id)->withTrashed()->get(); + + $transformed = []; + + foreach ($expense_categories as $category) + { + $transformed[] = [ + 'name' => $category->name ?: '', + 'company_id' => $this->account->id, + 'id' => $category->id, + 'user_id' => $category->user_id, + 'is_deleted' => $category->is_deleted, + 'created_at' => $category->created_at ? $category->created_at->toDateString() : null, + 'updated_at' => $category->updated_at ? $category->updated_at->toDateString() : null, + 'deleted_at' => $category->deleted_at ? $category->deleted_at->toDateString() : null, + ]; + } + + return $transformed; + } + + private function getExpenses() + { + $expenses = Expense::where('account_id', $this->account->id)->withTrashed()->get(); + + $transformed = []; + + foreach ($expenses as $expense) + { + $transformed[] = [ + 'id' => $expense->id, + 'company_id' => $this->account->id, + 'user_id' => $expense->user_id, + 'amount' => $expense->amount, + 'bank_id' => $expense->bank_id, + 'client_id' => $expense->client_id, + 'custom_value1' => $expense->custom_value1, + 'custom_value2' => $expense->custom_value2, + 'custom_value3' => '', + 'custom_value4' => '', + 'exchange_rate' => $expense->exchange_rate, + 'category_id' => $expense->expense_category_id, + 'currency_id' => $expense->expense_currency_id, + 'date' => $expense->expense_date, + 'foreign_amount' => 0, + 'invoice_currency_id' => $expense->invoice_currency_id, + 'invoice_documents' => $expense->invoice_documents, + 'invoice_id' => $expense->invoice_id, + 'payment_date' => $expense->payment_date, + 'payment_type_id' => $expense->payment_type_id, + 'private_notes' => $expense->private_notes, + 'public_notes' => $expense->public_notes, + 'recurring_expense_id' => $expense->recurring_expense_id, + 'should_be_invoiced' => $expense->should_be_invoiced, + 'tax_name1' => $expense->tax_name1, + 'tax_name2' => $expense->tax_name2, + 'tax_name3' => '', + 'tax_rate1' => $expense->tax_rate1, + 'tax_rate2' => $expense->tax_rate2, + 'tax_rate3' => 0, + 'transaction_id' => $expense->transaction_id, + 'transaction_reference' => $expense->transaction_reference, + 'vendor_id' => $expense->vendor_id, + 'is_deleted' => $expense->is_deleted, + 'created_at' => $expense->created_at ? $expense->created_at->toDateString() : null, + 'updated_at' => $expense->updated_at ? $expense->updated_at->toDateString() : null, + 'deleted_at' => $expense->deleted_at ? $expense->deleted_at->toDateString() : null, + ]; + } + + return $transformed; + + } + + private function getTasks() + { + $tasks = Task::where('account_id', $this->account->id) + ->withTrashed() + ->get(); + + $transformed = []; + + foreach ($tasks as $task) + { + $transformed[] = [ + 'id' => $task->id, + 'company_id' => $this->account->id, + 'client_id' => $task->client_id, + 'custom_value1' => $task->custom_value1, + 'custom_value2' => $task->custom_value2, + 'custom_value3' => $task->custom_value3, + 'custom_value4' => $task->custom_value4, + 'description' => $task->description, + 'invoice_id' => $task->invoice_id, + 'is_running' => $task->is_running, + 'project_id' => $task->project_id, + 'status_id' => $task->task_status_id, + 'status_sort_order' => $task->task_status_sort_order, + 'time_log' => $task->time_log, + 'user_id' => $task->user_id, + 'is_deleted' => $task->is_deleted, + 'created_at' => $task->created_at ? $task->created_at->toDateString() : null, + 'updated_at' => $task->updated_at ? $task->updated_at->toDateString() : null, + 'deleted_at' => $task->deleted_at ? $task->deleted_at->toDateString() : null, + ]; + } + + return $transformed; + } + private function convertMeta($payment_method) { $expiry = explode('-', $payment_method->expiration); From 38c017fdf85a09d697e73235785fc9d1fe7fd413 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 30 Oct 2020 22:53:50 +1100 Subject: [PATCH 11/16] Migration for projects --- .../Controllers/Migration/StepsController.php | 1 + app/Traits/GenerateMigrationResources.php | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/app/Http/Controllers/Migration/StepsController.php b/app/Http/Controllers/Migration/StepsController.php index cf7be9928e6a..684b41c14c0c 100644 --- a/app/Http/Controllers/Migration/StepsController.php +++ b/app/Http/Controllers/Migration/StepsController.php @@ -252,6 +252,7 @@ class StepsController extends BaseController 'client_gateway_tokens' => $this->getClientGatewayTokens(), 'expense_categories' => $this->getExpenseCategories(), 'task_statuses' => $this->getTaskStatuses(), + 'projects' => $this->getProjects(), 'expenses' => $this->getExpenses(), 'tasks' => $this->getTasks(), ]; diff --git a/app/Traits/GenerateMigrationResources.php b/app/Traits/GenerateMigrationResources.php index 1211e222735e..0b05fcb04daf 100644 --- a/app/Traits/GenerateMigrationResources.php +++ b/app/Traits/GenerateMigrationResources.php @@ -15,6 +15,7 @@ use App\Models\Payment; use App\Models\PaymentMethod; use App\Models\PaymentTerm; use App\Models\Product; +use App\Models\Project; use App\Models\Task; use App\Models\TaskStatus; use App\Models\TaxRate; @@ -1187,6 +1188,41 @@ trait GenerateMigrationResources return $transformed; } + private function getProjects() + { + $projects = Project::where('account_id', $this->account->id) + ->withTrashed() + ->get(); + + $transformed = []; + + foreach ($projects as $project) + { + $transformed[] = [ + 'id' => $project->id, + 'company_id' => $this->account->id, + 'client_id' => $project->client_id, + 'custom_value1' => $project->custom_value1, + 'custom_value2' => $project->custom_value2, + 'custom_value3' => $project->custom_value3, + 'custom_value4' => $project->custom_value4, + 'budgeted_hours' => $project->budgeted_hours, + 'due_date' => $project->due_date, + 'name' => $project->name, + 'private_notes' => $project->private_notes, + 'public_notes' => '', + 'task_rate' => $project->task_rate, + 'user_id' => $project->user_id, + 'is_deleted' => $project->is_deleted, + 'created_at' => $project->created_at ? $project->created_at->toDateString() : null, + 'updated_at' => $project->updated_at ? $project->updated_at->toDateString() : null, + 'deleted_at' => $project->deleted_at ? $project->deleted_at->toDateString() : null, + ]; + } + + return $transformed; + } + private function convertMeta($payment_method) { $expiry = explode('-', $payment_method->expiration); From 0bdda6a529bb98551785873a88a9a3783ab4cc9a Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 30 Oct 2020 22:55:14 +1100 Subject: [PATCH 12/16] Migration for projects --- app/Http/Controllers/Migration/StepsController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Migration/StepsController.php b/app/Http/Controllers/Migration/StepsController.php index 684b41c14c0c..2bc2764c982a 100644 --- a/app/Http/Controllers/Migration/StepsController.php +++ b/app/Http/Controllers/Migration/StepsController.php @@ -241,6 +241,7 @@ class StepsController extends BaseController 'tax_rates' => $this->getTaxRates(), 'payment_terms' => $this->getPaymentTerms(), 'clients' => $this->getClients(), + 'projects' => $this->getProjects(), 'products' => $this->getProducts(), 'invoices' => $this->getInvoices(), 'recurring_invoices' => $this->getRecurringInvoices(), @@ -252,7 +253,6 @@ class StepsController extends BaseController 'client_gateway_tokens' => $this->getClientGatewayTokens(), 'expense_categories' => $this->getExpenseCategories(), 'task_statuses' => $this->getTaskStatuses(), - 'projects' => $this->getProjects(), 'expenses' => $this->getExpenses(), 'tasks' => $this->getTasks(), ]; From d5ea6fec60d0eac08aa0f0c41fd2e68c6c7c3e22 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 30 Oct 2020 23:01:18 +1100 Subject: [PATCH 13/16] Fixes for query --- app/Traits/GenerateMigrationResources.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Traits/GenerateMigrationResources.php b/app/Traits/GenerateMigrationResources.php index 0b05fcb04daf..a0dab67e730c 100644 --- a/app/Traits/GenerateMigrationResources.php +++ b/app/Traits/GenerateMigrationResources.php @@ -914,7 +914,7 @@ trait GenerateMigrationResources private function getDocuments() { - $documents = Document::where('account_id', $this->account->id)->withTrashed()->get(); + $documents = Document::where('account_id', $this->account->id)->get(); $transformed = []; From b6e651849218faa104663653539e7b4a58d2fa8c Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 30 Oct 2020 23:15:45 +1100 Subject: [PATCH 14/16] Fixes for type status --- app/Traits/GenerateMigrationResources.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Traits/GenerateMigrationResources.php b/app/Traits/GenerateMigrationResources.php index a0dab67e730c..34821ee69d8f 100644 --- a/app/Traits/GenerateMigrationResources.php +++ b/app/Traits/GenerateMigrationResources.php @@ -1048,6 +1048,7 @@ trait GenerateMigrationResources $status = TaskStatus::createNew(); $status->name = trans('texts.' . $defaults[$i]); $status->sort_order = $i; + $status->is_deleted = false; $status->save(); } @@ -1065,7 +1066,7 @@ trait GenerateMigrationResources 'company_id' => $this->account->id, 'user_id' => $task_status->user_id, 'status_sort_order' => $task_status->sort_order, - 'is_deleted' => $task_status->is_deleted, + 'is_deleted' => $task_status->is_deleted ?: false, 'created_at' => $task_status->created_at ? $task_status->created_at->toDateString() : null, 'updated_at' => $task_status->updated_at ? $task_status->updated_at->toDateString() : null, 'deleted_at' => $task_status->deleted_at ? $task_status->deleted_at->toDateString() : null, From fac2c80fe73711ebb199d840679e137ffec9e5d0 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sat, 31 Oct 2020 08:12:45 +1100 Subject: [PATCH 15/16] migration for vendors --- .../Controllers/Migration/StepsController.php | 1 + app/Traits/GenerateMigrationResources.php | 110 ++++++++++++++++++ 2 files changed, 111 insertions(+) diff --git a/app/Http/Controllers/Migration/StepsController.php b/app/Http/Controllers/Migration/StepsController.php index 2bc2764c982a..858a8d029703 100644 --- a/app/Http/Controllers/Migration/StepsController.php +++ b/app/Http/Controllers/Migration/StepsController.php @@ -241,6 +241,7 @@ class StepsController extends BaseController 'tax_rates' => $this->getTaxRates(), 'payment_terms' => $this->getPaymentTerms(), 'clients' => $this->getClients(), + 'vendors' => $this->getVendors(), 'projects' => $this->getProjects(), 'products' => $this->getProducts(), 'invoices' => $this->getInvoices(), diff --git a/app/Traits/GenerateMigrationResources.php b/app/Traits/GenerateMigrationResources.php index 34821ee69d8f..bbbf2358323e 100644 --- a/app/Traits/GenerateMigrationResources.php +++ b/app/Traits/GenerateMigrationResources.php @@ -20,6 +20,7 @@ use App\Models\Task; use App\Models\TaskStatus; use App\Models\TaxRate; use App\Models\User; +use App\Models\Vendor; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Crypt; @@ -1223,6 +1224,115 @@ trait GenerateMigrationResources return $transformed; } + + + protected function getVendors() + { + $vendor_query = Vendor::where('account_id', $this->account->id)->withTrashed()->get(); + + $vendors = []; + + foreach ($vendor_query as $vendor) { + $vendors[] = [ + 'id' => $vendor->id, + 'company_id' => $vendor->account_id, + 'user_id' => $vendor->user_id, + 'name' => $vendor->name, + //'balance' => $vendor->balance ?: 0, + //'paid_to_date' => $vendor->paid_to_date ?: 0, + 'address1' => $vendor->address1, + 'address2' => $vendor->address2, + 'city' => $vendor->city, + 'state' => $vendor->state, + 'postal_code' => $vendor->postal_code, + 'country_id' => $vendor->country_id, + 'phone' => $vendor->work_phone, + 'private_notes' => $vendor->private_notes, + 'website' => $vendor->website, + //'industry_id' => $vendor->industry_id, + //'size_id' => $vendor->size_id, + 'is_deleted' => $vendor->is_deleted, + 'vat_number' => $vendor->vat_number, + 'id_number' => $vendor->id_number, + 'custom_value1' => $vendor->custom_value1, + 'custom_value2' => $vendor->custom_value2, + 'custom_value3' => '', + 'custom_value4' => '', + 'transaction_name' => '', + 'shipping_address1' => $vendor->shipping_address1, + 'shipping_address2' => $vendor->shipping_address2, + 'shipping_city' => $vendor->shipping_city, + 'shipping_state' => $vendor->shipping_state, + 'shipping_postal_code' => $vendor->shipping_postal_code, + 'shipping_country_id' => $vendor->shipping_country_id, + 'contacts' => $this->getVendorContacts($vendor->vendor_contacts), + ]; + } + + return $vendors; + } + + + protected function getVendorContacts($contacts) + { + $transformed = []; + + foreach ($contacts as $contact) { + $transformed[] = [ + 'id' => $contact->id, + 'company_id' => $contact->account_id, + 'user_id' => $contact->user_id, + 'vendor_id' => $contact->vendor_id, + 'first_name' => $contact->first_name ?: '', + 'last_name' => $contact->last_name ?: '', + 'phone' => $contact->phone ?: '', + 'custom_value1' => $contact->custom_value1 ?: '', + 'custom_value2' => $contact->custom_value2 ?: '', + 'custom_value3' => '', + 'custom_value4' => '', + 'email' => $contact->email, + 'is_primary' => (bool)$contact->is_primary, + 'send_email' => (bool)$contact->send_invoice ?: false, + 'confirmed' => $contact->confirmation_token ? true : false, + 'email_verified_at' => $contact->created_at->toDateTimeString(), + 'last_login' => $contact->last_login, + 'password' => $contact->password ?: '', + 'is_locked' => false, + 'confirmed' => true, + // 'remember_token' => $contact->remember_token, + // 'contact_key' => $contact->contact_key, + ]; + } + + return $transformed; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + private function convertMeta($payment_method) { From c19cebef8057720aa651432aea9386813d30fb6a Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sat, 31 Oct 2020 11:45:49 +1100 Subject: [PATCH 16/16] Fixes for migration --- app/Traits/GenerateMigrationResources.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/Traits/GenerateMigrationResources.php b/app/Traits/GenerateMigrationResources.php index bbbf2358323e..231642fd2e70 100644 --- a/app/Traits/GenerateMigrationResources.php +++ b/app/Traits/GenerateMigrationResources.php @@ -1259,12 +1259,6 @@ trait GenerateMigrationResources 'custom_value3' => '', 'custom_value4' => '', 'transaction_name' => '', - 'shipping_address1' => $vendor->shipping_address1, - 'shipping_address2' => $vendor->shipping_address2, - 'shipping_city' => $vendor->shipping_city, - 'shipping_state' => $vendor->shipping_state, - 'shipping_postal_code' => $vendor->shipping_postal_code, - 'shipping_country_id' => $vendor->shipping_country_id, 'contacts' => $this->getVendorContacts($vendor->vendor_contacts), ]; }