diff --git a/.env.example b/.env.example index 377939c6d2c9..63f81969dae6 100644 --- a/.env.example +++ b/.env.example @@ -51,7 +51,7 @@ ERROR_EMAIL= NINJA_ENVIRONMENT=selfhost -PHANTOMJS_KEY= +PHANTOMJS_CLOUD_KEY='a-demo-key-with-low-quota-per-ip-address' PHANTOMJS_SECRET= SELF_UPDATER_REPO_VENDOR = invoiceninja diff --git a/app/DataMapper/CompanySettings.php b/app/DataMapper/CompanySettings.php index ab73fd7bb3a3..cb409a45f1d9 100644 --- a/app/DataMapper/CompanySettings.php +++ b/app/DataMapper/CompanySettings.php @@ -610,17 +610,17 @@ class CompanySettings extends BaseSettings '$task.line_total', ], 'total_columns' => [ - '$total_taxes', - '$line_taxes', '$subtotal', '$discount', + '$total_taxes', + '$line_taxes', '$custom_surcharge1', '$custom_surcharge2', '$custom_surcharge3', '$custom_surcharge4', - '$paid_to_date', - '$client.balance', '$total', + '$paid_to_date', + '$outstanding', ], ]; diff --git a/app/Http/Controllers/SelfUpdateController.php b/app/Http/Controllers/SelfUpdateController.php index 7745f0942bd7..f3601b784bc8 100644 --- a/app/Http/Controllers/SelfUpdateController.php +++ b/app/Http/Controllers/SelfUpdateController.php @@ -74,8 +74,8 @@ class SelfUpdateController extends BaseController try { $res = $repo->pull(); } catch (GitException $e) { - info($e->getMessage()); + info($e->getMessage()); return response()->json(['message'=>$e->getMessage()], 500); } info('Are there any changes to pull? '.$repo->hasChanges()); diff --git a/app/Http/Requests/Design/StoreDesignRequest.php b/app/Http/Requests/Design/StoreDesignRequest.php index e7ce3d132608..1420a12484e7 100644 --- a/app/Http/Requests/Design/StoreDesignRequest.php +++ b/app/Http/Requests/Design/StoreDesignRequest.php @@ -51,6 +51,10 @@ class StoreDesignRequest extends Request $input['design']['includes'] = ''; } + if (! array_key_exists('footer', $input['design']) || is_null($input['design']['footer'])) { + $input['design']['footer'] = ''; + } + $this->replace($input); } } diff --git a/app/Http/Requests/Design/UpdateDesignRequest.php b/app/Http/Requests/Design/UpdateDesignRequest.php index e042a4b366a9..331bcc96d653 100644 --- a/app/Http/Requests/Design/UpdateDesignRequest.php +++ b/app/Http/Requests/Design/UpdateDesignRequest.php @@ -14,7 +14,6 @@ namespace App\Http\Requests\Design; use App\Http\Requests\Request; use App\Models\Design; use App\Utils\Traits\ChecksEntityStatus; -use Illuminate\Support\Facades\Log; class UpdateDesignRequest extends Request { @@ -47,6 +46,14 @@ class UpdateDesignRequest extends Request $input['design']['task'] = ''; } + if (! array_key_exists('includes', $input['design']) || is_null($input['design']['includes'])) { + $input['design']['includes'] = ''; + } + + if (! array_key_exists('footer', $input['design']) || is_null($input['design']['footer'])) { + $input['design']['footer'] = ''; + } + $this->replace($input); } } diff --git a/app/Jobs/Cron/RecurringInvoicesCron.php b/app/Jobs/Cron/RecurringInvoicesCron.php index 1ce5a0772112..34b5f6e2f4c0 100644 --- a/app/Jobs/Cron/RecurringInvoicesCron.php +++ b/app/Jobs/Cron/RecurringInvoicesCron.php @@ -44,9 +44,11 @@ class RecurringInvoicesCron if (! config('ninja.db.multi_db_enabled')) { - $recurring_invoices = RecurringInvoice::whereDate('next_send_date', '=', now())->cursor(); + $recurring_invoices = RecurringInvoice::whereDate('next_send_date', '=', now()) + ->where('status_id', RecurringInvoice::STATUS_ACTIVE) + ->cursor(); - Log::info(now()->format('Y-m-d') . ' Sending Recurring Invoices. Count = '.$recurring_invoices->count().' On Database # '.$db); + Log::info(now()->format('Y-m-d') . ' Sending Recurring Invoices. Count = '.$recurring_invoices->count()); $recurring_invoices->each(function ($recurring_invoice, $key) { @@ -62,7 +64,9 @@ class RecurringInvoicesCron MultiDB::setDB($db); - $recurring_invoices = RecurringInvoice::whereDate('next_send_date', '=', now())->cursor(); + $recurring_invoices = RecurringInvoice::whereDate('next_send_date', '=', now()) + ->where('status_id', RecurringInvoice::STATUS_ACTIVE) + ->cursor(); Log::info(now()->format('Y-m-d') . ' Sending Recurring Invoices. Count = '.$recurring_invoices->count().' On Database # '.$db); diff --git a/app/Models/Gateway.php b/app/Models/Gateway.php index fe41ae3a476a..f6673e793494 100644 --- a/app/Models/Gateway.php +++ b/app/Models/Gateway.php @@ -53,4 +53,32 @@ class Gateway extends StaticModel { return in_array($this->id, [62, 67, 68]); //static table ids of the custom gateways } + + public function getHelp() + { + $link = ''; + + if ($this->id == 1) { + $link = 'http://reseller.authorize.net/application/?id=5560364'; + } elseif ($this->id == 15) { + $link = 'https://www.paypal.com/us/cgi-bin/webscr?cmd=_login-api-run'; + } elseif ($this->id == 24) { + $link = 'https://www.2checkout.com/referral?r=2c37ac2298'; + } elseif ($this->id == 35) { + $link = 'https://bitpay.com/dashboard/signup'; + } elseif ($this->id == 18) { + $link = 'https://applications.sagepay.com/apply/2C02C252-0F8A-1B84-E10D-CF933EFCAA99'; + } elseif ($this->id == 20) { + $link = 'https://dashboard.stripe.com/account/apikeys'; + } + + $key = 'texts.gateway_help_'.$this->id; + $str = trans($key, [ + 'link' => "Click here", + 'complete_link' => url('/complete'), + ]); + + return $key != $str ? $str : ''; + } + } diff --git a/app/Models/RecurringInvoice.php b/app/Models/RecurringInvoice.php index 80ca04894b46..44d3f68028bb 100644 --- a/app/Models/RecurringInvoice.php +++ b/app/Models/RecurringInvoice.php @@ -372,8 +372,6 @@ class RecurringInvoice extends BaseModel /* Return early if nothing to send back! */ if( $this->status_id == self::STATUS_COMPLETED || - $this->status_id == self::STATUS_DRAFT || - $this->status_id == self::STATUS_PAUSED || $this->remaining_cycles == 0 || !$this->next_send_date) { diff --git a/app/Repositories/UserRepository.php b/app/Repositories/UserRepository.php index 012423b67470..2c344ae66ce2 100644 --- a/app/Repositories/UserRepository.php +++ b/app/Repositories/UserRepository.php @@ -105,6 +105,9 @@ class UserRepository extends BaseRepository public function destroy(array $data, User $user) { + +info("destroy user"); + if (array_key_exists('company_user', $data)) { $this->forced_includes = 'company_users'; @@ -118,10 +121,10 @@ class UserRepository extends BaseRepository $cu->forceDelete(); } - $user->delete(); - event(new UserWasDeleted($user, $company, Ninja::eventVars())); + $user->delete(); + return $user->fresh(); } @@ -130,6 +133,9 @@ class UserRepository extends BaseRepository */ public function delete($user) { + +info("delete user"); + $company = auth()->user()->company(); $cu = CompanyUser::whereUserId($user->id) @@ -141,11 +147,12 @@ class UserRepository extends BaseRepository $cu->delete(); } + event(new UserWasDeleted($user, $company, Ninja::eventVars())); + $user->is_deleted = true; $user->save(); $user->delete(); - event(new UserWasDeleted($user, $company, Ninja::eventVars())); return $user->fresh(); } diff --git a/app/Utils/HtmlEngine.php b/app/Utils/HtmlEngine.php index 54bb3c296309..abe051a35c59 100644 --- a/app/Utils/HtmlEngine.php +++ b/app/Utils/HtmlEngine.php @@ -237,6 +237,7 @@ class HtmlEngine $data['$client.email'] = &$data['$email']; $data['$client.balance'] = ['value' => Number::formatMoney($this->client->balance, $this->client), 'label' => ctrans('texts.account_balance')]; + $data['$outstanding'] = ['value' => Number::formatMoney($this->client->balance, $this->client), 'label' => ctrans('texts.account_balance')]; $data['$client_balance'] = ['value' => Number::formatMoney($this->client->balance, $this->client), 'label' => ctrans('texts.account_balance')]; $data['$paid_to_date'] = ['value' => Number::formatMoney($this->client->paid_to_date, $this->client), 'label' => ctrans('texts.paid_to_date')]; diff --git a/app/Utils/Traits/MakesInvoiceValues.php b/app/Utils/Traits/MakesInvoiceValues.php index 54f2a56513d4..b958be54a098 100644 --- a/app/Utils/Traits/MakesInvoiceValues.php +++ b/app/Utils/Traits/MakesInvoiceValues.php @@ -314,6 +314,8 @@ trait MakesInvoiceValues $data['$client_name'] = ['value' => $this->present()->clientName() ?: ' ', 'label' => ctrans('texts.client_name')]; $data['$client.name'] = &$data['$client_name']; $data['$client.balance'] = ['value' => Number::formatMoney($this->client->balance, $this->client), 'label' => ctrans('texts.account_balance')]; + $data['$outstanding'] = ['value' => Number::formatMoney($this->client->balance, $this->client), 'label' => ctrans('texts.account_balance')]; + $data['$client_balance'] = ['value' => Number::formatMoney($this->client->balance, $this->client), 'label' => ctrans('texts.account_balance')]; $data['$paid_to_date'] = ['value' => Number::formatMoney($this->client->paid_to_date, $this->client), 'label' => ctrans('texts.paid_to_date')]; diff --git a/database/migrations/2020_09_27_215800_update_gateway_table_visible_column.php b/database/migrations/2020_09_27_215800_update_gateway_table_visible_column.php new file mode 100644 index 000000000000..66558cbb13fa --- /dev/null +++ b/database/migrations/2020_09_27_215800_update_gateway_table_visible_column.php @@ -0,0 +1,31 @@ +update(['visible' => 0]); + + Gateway::whereIn('id', [1,15,20,39])->update(['visible' => 1]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +}