diff --git a/app/Console/Commands/CheckData.php b/app/Console/Commands/CheckData.php index ac6c388684fb..97b442b5b207 100644 --- a/app/Console/Commands/CheckData.php +++ b/app/Console/Commands/CheckData.php @@ -484,6 +484,9 @@ class CheckData extends Command } } + + $this->logMessage("{$this->wrong_paid_to_dates} clients with incorrect paid to dates"); + } @@ -648,25 +651,19 @@ ORDER BY clients.id; private function clientBalanceQuery() { $results = \DB::select( \DB::raw(" - SELECT - SUM(invoices.balance) as invoice_balance, - SUM(credits.balance) as credit_balance, - clients.id as client_id, - clients.balance as client_balance - FROM invoices - INNER JOIN - clients ON - clients.id=invoices.client_id - INNER JOIN - credits ON - credits.client_id = clients.id - WHERE invoices.is_deleted = false - AND invoices.status_id > 1 - AND credits.is_deleted = false - AND credits.status_id > 1 - GROUP BY clients.id - HAVING invoice_balance != clients.balance - ORDER BY clients.id; + SELECT + SUM(invoices.balance) as invoice_balance, + clients.id as client_id, + clients.balance as client_balance + FROM clients + LEFT JOIN + invoices ON + clients.id=invoices.client_id + WHERE invoices.is_deleted = false + AND invoices.status_id > 1 + GROUP BY clients.id + HAVING invoice_balance != clients.balance + ORDER BY clients.id; ") ); return $results; @@ -686,7 +683,12 @@ ORDER BY clients.id; { $client = (array)$client; - $invoice_balance = $client['invoice_balance'] - $client['credit_balance']; + // $credit_balance = Credit::withTrashed()->where('is_deleted', 0) + // ->where('client_id', $client['client_id']) + // ->where('status_id', '>', 1)->sum('balance'); + + // $invoice_balance = $client['invoice_balance'] - $credit_balance; + $invoice_balance = $client['invoice_balance']; $ledger = CompanyLedger::where('client_id', $client['client_id'])->orderBy('id', 'DESC')->first(); @@ -701,8 +703,8 @@ ORDER BY clients.id; if($this->option('client_balance')){ $this->logMessage("# {$client_object->id} " . $client_object->present()->name.' - '.$client_object->number." Fixing {$client_object->balance} to {$invoice_balance}"); - $client->balance = $invoice_balance; - $client->save(); + $client_object->balance = $invoice_balance; + $client_object->save(); $ledger->adjustment = $invoice_balance; $ledger->balance = $invoice_balance; diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 2b790cf3709f..697dd36283ce 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -19,6 +19,7 @@ use App\Factory\UserFactory; use App\Filters\UserFilters; use App\Http\Controllers\Traits\VerifiesUserEmail; use App\Http\Requests\User\AttachCompanyUserRequest; +use App\Http\Requests\User\BulkUserRequest; use App\Http\Requests\User\CreateUserRequest; use App\Http\Requests\User\DestroyUserRequest; use App\Http\Requests\User\DetachCompanyUserRequest; @@ -534,8 +535,9 @@ class UserController extends BaseController * ), * ) */ - public function bulk() + public function bulk(BulkUserRequest $request) { + /* Validate restore() here and check if restoring the user will exceed their user quote (hosted only)*/ $action = request()->input('action'); $ids = request()->input('ids'); diff --git a/app/Http/Requests/User/BulkUserRequest.php b/app/Http/Requests/User/BulkUserRequest.php new file mode 100644 index 000000000000..3e87d64668db --- /dev/null +++ b/app/Http/Requests/User/BulkUserRequest.php @@ -0,0 +1,48 @@ +user()->isAdmin(); + } + + public function rules() + { + + $rules = []; + + if(Ninja::isHosted() && $this->action && $this->action == 'restore') + $rules['ids'] = new CanRestoreUserRule(); + + return $rules; + } + + protected function prepareForValidation() + { + $input = $this->all(); + + $this->replace($input); + } +} diff --git a/app/Http/ValidationRules/Ninja/CanAddUserRule.php b/app/Http/ValidationRules/Ninja/CanAddUserRule.php index e568fa13298f..98ae76016d76 100644 --- a/app/Http/ValidationRules/Ninja/CanAddUserRule.php +++ b/app/Http/ValidationRules/Ninja/CanAddUserRule.php @@ -11,6 +11,7 @@ namespace App\Http\ValidationRules\Ninja; +use App\Models\CompanyUser; use Illuminate\Contracts\Validation\Rule; /** @@ -30,7 +31,16 @@ class CanAddUserRule implements Rule */ public function passes($attribute, $value) { - return auth()->user()->company()->account->users->count() < auth()->user()->company()->account->num_users; + + $count = CompanyUser::query() + ->with('user') + ->where('account_id', auth()->user()->account_id) + ->distinct() + ->select('user_id') + ->count(); + + return $count < auth()->user()->company()->account->num_users; + //return auth()->user()->company()->account->users->count() < auth()->user()->company()->account->num_users; } /** diff --git a/app/Http/ValidationRules/Ninja/CanRestoreUserRule.php b/app/Http/ValidationRules/Ninja/CanRestoreUserRule.php new file mode 100644 index 000000000000..45bf5ec7f351 --- /dev/null +++ b/app/Http/ValidationRules/Ninja/CanRestoreUserRule.php @@ -0,0 +1,56 @@ +with(['company_user' => function ($query){ + return $query->whereNull('company_user.deleted_at'); + }]) + ->where('account_id', 1) + ->distinct() + ->select('users.id') + ->count(); + + return $count < auth()->user()->company()->account->num_users; + //return auth()->user()->company()->account->users->count() < auth()->user()->company()->account->num_users; + } + + /** + * @return string + */ + public function message() + { + return ctrans('texts.limit_users', ['limit' => auth()->user()->company()->account->num_users]); + } +} diff --git a/app/Jobs/Account/CreateAccount.php b/app/Jobs/Account/CreateAccount.php index 246b323b7b47..a34f266c764d 100644 --- a/app/Jobs/Account/CreateAccount.php +++ b/app/Jobs/Account/CreateAccount.php @@ -116,7 +116,7 @@ class CreateAccount $spaa9f78->fresh(); if(Ninja::isHosted()){ -nlog("welcome"); + App::forgetInstance('translator'); $t = app('translator'); $t->replace(Ninja::transformTranslations($sp035a66->settings)); diff --git a/app/Jobs/Mail/PaymentFailedMailer.php b/app/Jobs/Mail/PaymentFailedMailer.php index 9d84a7459502..87663e159b16 100644 --- a/app/Jobs/Mail/PaymentFailedMailer.php +++ b/app/Jobs/Mail/PaymentFailedMailer.php @@ -36,7 +36,7 @@ class PaymentFailedMailer implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, UserNotifies; - public PaymentHash $payment_hash; + public ?PaymentHash $payment_hash; public string $error; diff --git a/app/Mail/Admin/PaymentFailureObject.php b/app/Mail/Admin/PaymentFailureObject.php index 9094536ed1ff..b190d4a0a5db 100644 --- a/app/Mail/Admin/PaymentFailureObject.php +++ b/app/Mail/Admin/PaymentFailureObject.php @@ -33,7 +33,7 @@ class PaymentFailureObject public $amount; - public PaymentHash $payment_hash; + public ?PaymentHash $payment_hash; // private $invoices; /** diff --git a/app/PaymentDrivers/BaseDriver.php b/app/PaymentDrivers/BaseDriver.php index 778ebc5ff6f1..9b8d2ca04a12 100644 --- a/app/PaymentDrivers/BaseDriver.php +++ b/app/PaymentDrivers/BaseDriver.php @@ -71,7 +71,7 @@ class BaseDriver extends AbstractPaymentDriver public $payment_method; /* PaymentHash */ - public PaymentHash $payment_hash; + public ?PaymentHash $payment_hash; /* Array of payment methods */ public static $methods = [];