diff --git a/app/Console/Commands/SendRecurringInvoices.php b/app/Console/Commands/SendRecurringInvoices.php index 55815f327710..e1b511856cc4 100644 --- a/app/Console/Commands/SendRecurringInvoices.php +++ b/app/Console/Commands/SendRecurringInvoices.php @@ -70,7 +70,9 @@ class SendRecurringInvoices extends Command ->get(); foreach ($accounts as $account) { - $account->checkCounterReset(); + + if(!$account->account_email_settings->is_disabled) + $account->checkCounterReset(); } } @@ -94,6 +96,11 @@ class SendRecurringInvoices extends Command $this->info(date('r') . ' Processing Invoice: '. $recurInvoice->id); $account = $recurInvoice->account; + + if($account->account_email_settings->is_disabled){ + continue; + } + $account->loadLocalizationSettings($recurInvoice->client); Auth::loginUsingId($recurInvoice->activeUser()->id); @@ -127,7 +134,7 @@ class SendRecurringInvoices extends Command foreach ($expenses as $expense) { $shouldSendToday = $expense->shouldSendToday(); - if (! $shouldSendToday) { + if (! $shouldSendToday || $expense->account->account_email_settings->is_disabled) { continue; } diff --git a/app/Console/Commands/SendReminders.php b/app/Console/Commands/SendReminders.php index d2ee903762b3..de24f7277328 100644 --- a/app/Console/Commands/SendReminders.php +++ b/app/Console/Commands/SendReminders.php @@ -109,7 +109,7 @@ class SendReminders extends Command /** @var Invoice $invoice */ foreach ($delayedAutoBillInvoices as $invoice) { - if ($invoice->isPaid()) { + if ($invoice->isPaid() || $invoice->account->is_deleted) { continue; } @@ -128,7 +128,7 @@ class SendReminders extends Command $this->info(date('r ') . $accounts->count() . ' accounts found with fees enabled'); foreach ($accounts as $account) { - if (! $account->hasFeature(FEATURE_EMAIL_TEMPLATES_REMINDERS)) { + if (! $account->hasFeature(FEATURE_EMAIL_TEMPLATES_REMINDERS) || $account->account_email_settings->is_disabled) { continue; } @@ -155,7 +155,7 @@ class SendReminders extends Command $this->info(date('r ') . count($accounts) . ' accounts found with reminders enabled'); foreach ($accounts as $account) { - if (! $account->hasFeature(FEATURE_EMAIL_TEMPLATES_REMINDERS)) { + if (! $account->hasFeature(FEATURE_EMAIL_TEMPLATES_REMINDERS) || $account->account_email_settings->is_disabled) { continue; } @@ -201,7 +201,7 @@ class SendReminders extends Command $account = $scheduledReport->account; $account->loadLocalizationSettings(); - if (! $account->hasFeature(FEATURE_REPORTS)) { + if (! $account->hasFeature(FEATURE_REPORTS) || $account->account_email_settings->is_disabled) { continue; } diff --git a/app/Http/Controllers/ClientPortalController.php b/app/Http/Controllers/ClientPortalController.php index d8c15ea434a2..c83ff2d30bed 100644 --- a/app/Http/Controllers/ClientPortalController.php +++ b/app/Http/Controllers/ClientPortalController.php @@ -67,6 +67,17 @@ class ClientPortalController extends BaseController $client = $invoice->client; $account = $invoice->account; + /* Forward requests from V4 to V5 if the domain is set */ + if(strlen($account->account_email_settings->forward_url_for_v5) >1){ + + if ($invoice->isType(INVOICE_TYPE_QUOTE)) + $entity = 'quote'; + else + $entity = 'invoice'; + + return redirect($account->account_email_settings->forward_url_for_v5."/client/".$entity."/".$invitationKey); + } + if (request()->silent) { session(['silent:' . $client->id => true]); return redirect(request()->url() . (request()->borderless ? '?borderless=true' : '')); diff --git a/app/Http/Controllers/Migration/StepsController.php b/app/Http/Controllers/Migration/StepsController.php index 68b2001620fb..e7e4d76a6822 100644 --- a/app/Http/Controllers/Migration/StepsController.php +++ b/app/Http/Controllers/Migration/StepsController.php @@ -6,6 +6,7 @@ use App\Http\Controllers\BaseController; use App\Http\Requests\MigrationAuthRequest; use App\Http\Requests\MigrationCompaniesRequest; use App\Http\Requests\MigrationEndpointRequest; +use App\Http\Requests\MigrationForwardRequest; use App\Http\Requests\MigrationTypeRequest; use App\Libraries\Utils; use App\Models\Account; @@ -15,6 +16,8 @@ use App\Services\Migration\CompleteService; use App\Traits\GenerateMigrationResources; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Storage; +use Validator; +use Illuminate\Http\Request; class StepsController extends BaseController { @@ -83,6 +86,36 @@ class StepsController extends BaseController ); } + public function forwardUrl(Request $request) + { + + $rules = [ + 'url' => 'nullable|url', + ]; + + $validator = Validator::make($request->all(), $rules); + + if ($validator->fails()) { + return back() + ->withErrors($validator) + ->withInput(); + } + + $account_settings = \Auth::user()->account->account_email_settings; + + if(strlen($request->input('url')) == 0) { + $account_settings->is_disabled = false; + } + else { + $account_settings->is_disabled = true; + } + + $account_settings->forward_url_for_v5 = rtrim($request->input('url'),'/'); + $account_settings->save(); + + return back(); + } + public function endpoint() { if ($this->shouldGoBack('endpoint')) { @@ -176,22 +209,28 @@ class StepsController extends BaseController ); } + $completeService = (new CompleteService(session('MIGRATION_ACCOUNT_TOKEN'))); + try { $migrationData = $this->generateMigrationData($request->all()); - $completeService = (new CompleteService(session('MIGRATION_ACCOUNT_TOKEN'))) - ->data($migrationData) + + $completeService->data($migrationData) ->endpoint(session('MIGRATION_ENDPOINT')) ->start(); } - finally { + catch(\Exception $e){ + info($e->getMessage()); + return view('migration.completed', ['customMessage' => $e->getMessage()]); + } + if ($completeService->isSuccessful()) { return view('migration.completed'); } return view('migration.completed', ['customMessage' => $completeService->getErrors()[0]]); - } + } public function completed() diff --git a/app/Http/Requests/MigrationForwardRequest.php b/app/Http/Requests/MigrationForwardRequest.php new file mode 100644 index 000000000000..3cb594e9132f --- /dev/null +++ b/app/Http/Requests/MigrationForwardRequest.php @@ -0,0 +1,30 @@ + 'nullable|url', + ]; + } +} diff --git a/app/Traits/GenerateMigrationResources.php b/app/Traits/GenerateMigrationResources.php index e958afdc904b..84e74b1d0115 100644 --- a/app/Traits/GenerateMigrationResources.php +++ b/app/Traits/GenerateMigrationResources.php @@ -171,7 +171,7 @@ info("get company"); 'all_pages_footer' => $this->account->all_pages_footer ? (bool) $this->account->all_pages_footer : true, 'all_pages_header' => $this->account->all_pages_header ? (bool) $this->account->all_pages_header : true, 'show_currency_code' => $this->account->show_currency_code ? (bool) $this->account->show_currency_code : false, - 'enable_client_portal_password' => $this->account->enable_portal_password ? (bool) $this->account->enable_portal_password : true, + 'enable_client_portal_password' => $this->account->enable_portal_password ? (bool) $this->account->enable_portal_password : false, 'send_portal_password' => $this->account->send_portal_password ? (bool) $this->account->send_portal_password : false, 'recurring_number_prefix' => $this->account->recurring_invoice_number_prefix ? $this->account->recurring_invoice_number_prefix : 'R', 'enable_client_portal' => $this->account->enable_client_portal ? (bool) $this->account->enable_client_portal : false, @@ -211,9 +211,53 @@ info("get company"); 'auto_archive_quote' => $this->account->auto_archive_quote ? (bool) $this->account->auto_archive_quote : false, 'auto_email_invoice' => $this->account->auto_email_invoice ? (bool) $this->account->auto_email_invoice : false, 'counter_padding' => $this->account->invoice_number_padding ?: 4, + 'reply_to_email' => $this->account->account_email_settings->reply_to_email ?: '', + 'bcc_email' => $this->account->account_email_settings->bcc_email ?: '', + 'email_subject_invoice' => $this->account->account_email_settings->email_subject_invoice ?: '', + 'email_subject_quote' => $this->account->account_email_settings->email_subject_quote ?: '', + 'email_subject_payment' => $this->account->account_email_settings->email_subject_payment ?: '', + 'email_template_invoice' => $this->account->account_email_settings->email_template_invoice ?: '', + 'email_template_quote' => $this->account->account_email_settings->email_template_quote ?: '', + 'email_template_payment' => $this->account->account_email_settings->email_template_payment ?: '', + 'email_subject_reminder1' => $this->account->account_email_settings->email_subject_reminder1 ?: '', + 'email_subject_reminder2' => $this->account->account_email_settings->email_subject_reminder2 ?: '', + 'email_subject_reminder3' => $this->account->account_email_settings->email_subject_reminder3 ?: '', + 'email_subject_reminder_endless' => $this->account->account_email_settings->email_subject_reminder4 ?: '', + 'email_template_reminder1' => $this->account->account_email_settings->email_template_reminder1 ?: '', + 'email_template_reminder2' => $this->account->account_email_settings->email_template_reminder2 ?: '', + 'email_template_reminder3' => $this->account->account_email_settings->email_template_reminder3 ?: '', + 'email_template_reminder_endless' => $this->account->account_email_settings->email_template_reminder4 ?: '', + 'late_fee_amount1' => $this->account->account_email_settings->late_fee1_amount ?: 0, + 'late_fee_amount2' => $this->account->account_email_settings->late_fee2_amount ?: 0, + 'late_fee_amount3' => $this->account->account_email_settings->late_fee3_amount ?: 0, + 'late_fee_percent1' => $this->account->account_email_settings->late_fee1_percent ?: 0, + 'late_fee_percent2' => $this->account->account_email_settings->late_fee2_percent ?: 0, + 'late_fee_percent3' => $this->account->account_email_settings->late_fee3_percent ?: 0, + 'enable_reminder1' => $this->account->enable_reminder1 ? true : false, + 'enable_reminder2' => $this->account->enable_reminder2 ? true : false, + 'enable_reminder3' => $this->account->enable_reminder3 ? true : false, + 'enable_reminder_endless' => $this->account->enable_reminder4 ? true : false, + 'num_days_reminder1' => $this->account->num_days_reminder1 ?: 0, + 'num_days_reminder2' => $this->account->num_days_reminder2 ?: 0, + 'num_days_reminder3' => $this->account->num_days_reminder3 ?: 0, + 'schedule_reminder1' => $this->buildReminderString($this->account->direction_reminder1, $this->account->field_reminder1), + 'schedule_reminder2' => $this->buildReminderString($this->account->direction_reminder2, $this->account->field_reminder2), + 'schedule_reminder3' => $this->buildReminderString($this->account->direction_reminder3, $this->account->field_reminder3), + 'endless_reminder_frequency_id' => $this->account->account_email_settings->reset_counter_frequency_id ? $this->transformFrequencyId($this->account->account_email_settings->reset_counter_frequency_id) : 0, + 'email_signature' => $this->account->email_footer ?: '', ]; } + private function buildReminderString($direction, $field) + { + + $direction_string = $direction == 1 ? "after_" : "before_"; + $field_string = $field == 1 ? "due_date" : "invoice_date"; + + return $direction_string.$field_string; + + } + public function getTaxRates() { info("get tax rates"); diff --git a/database/migrations/2021_06_22_234707_add_forward_url_for_v5.php b/database/migrations/2021_06_22_234707_add_forward_url_for_v5.php new file mode 100644 index 000000000000..07ba15532940 --- /dev/null +++ b/database/migrations/2021_06_22_234707_add_forward_url_for_v5.php @@ -0,0 +1,31 @@ +text('forward_url_for_v5')->default(''); + $table->boolean('is_disabled')->default(false); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/resources/views/accounts/management.blade.php b/resources/views/accounts/management.blade.php index d9efb89796dd..1c920624b7f6 100644 --- a/resources/views/accounts/management.blade.php +++ b/resources/views/accounts/management.blade.php @@ -264,9 +264,46 @@ - {!! Former::close() !!} +