Page MenuHomePhorge

D4812.1777280937.diff
No OneTemporary

Authored By
Unknown
Size
2 KB
Referenced Files
None
Subscribers
None

D4812.1777280937.diff

diff --git a/src/app/Observers/UserObserver.php b/src/app/Observers/UserObserver.php
--- a/src/app/Observers/UserObserver.php
+++ b/src/app/Observers/UserObserver.php
@@ -116,18 +116,6 @@
if (\App\Tenant::getConfig($user->tenant_id, 'pgp.enable')) {
\App\Jobs\PGP\KeyDeleteJob::dispatch($user->id, $user->email);
}
-
- // Debit the reseller's wallet with the user negative balance
- $balance = 0;
- foreach ($user->wallets as $wallet) {
- // Note: here we assume all user wallets are using the same currency.
- // It might get changed in the future
- $balance += $wallet->balance;
- }
-
- if ($balance < 0 && $user->tenant && ($wallet = $user->tenant->wallet())) {
- $wallet->debit($balance * -1, "Deleted user {$user->email}");
- }
}
}
diff --git a/src/app/Wallet.php b/src/app/Wallet.php
--- a/src/app/Wallet.php
+++ b/src/app/Wallet.php
@@ -119,14 +119,15 @@
// Calculate cost, fee, and end of period
[$cost, $fee, $endDate] = $this->entitlementCosts($entitlement, $trial);
- // Note: Degraded pays nothing, but we get the money from a tenant.
- // Therefore $cost = 0, but $profit < 0.
- if ($isDegraded) {
- $cost = 0;
+ // No balance changes for degraded users
+ if (!$isDegraded) {
+ $charges += $cost;
+ // limit profit by wallet balance so a reseller can't build profit by users building debt
+ $profit += min($cost, $this->balance);
+ // We always take the full fee
+ $profit -= $fee;
}
- $charges += $cost;
- $profit += $cost - $fee;
// if we're in dry-run, you know...
if (!$apply) {
@@ -562,7 +563,8 @@
}
$charges += $cost;
- $profit += $cost - $fee;
+ $profit += min($cost, $this->balance);
+ $profit -= $fee;
if ($cost == 0) {
continue;
@@ -619,6 +621,14 @@
$amount = abs($amount) * -1;
}
+ if ($this->balance < 0 && ($this->balance + $amount) > 0) {
+ // We already took our fee when the wallet went below 0
+ // TODO a bonus topup could result in reseller wallet balance, which we don't want I think.
+ // But I suppose that's a fundamental of paying out a percentage of wallet credit, and not payments.
+ $negativeBalance = abs($this->balance);
+ $this->addTenantProfit($negativeBalance);
+ }
+
$this->balance += $amount;
$this->save();

File Metadata

Mime Type
text/plain
Expires
Mon, Apr 27, 9:08 AM (5 d, 10 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18858339
Default Alt Text
D4812.1777280937.diff (2 KB)

Event Timeline