diff --git a/app/app/Enums/WorkspaceSuspensionStatus.php b/app/app/Enums/WorkspaceSuspensionStatus.php
new file mode 100644
index 000000000..6486494d8
--- /dev/null
+++ b/app/app/Enums/WorkspaceSuspensionStatus.php
@@ -0,0 +1,63 @@
+where('status', true);
+ $suspensions = WorkspaceSuspension::where('workspace_id', $workspaceId)
+ ->orderBy('suspended_at', 'desc')
+ ->get();
- return $query->orderBy('suspended_at', 'desc')->first();
+ foreach ($suspensions as $suspension) {
+ if (WorkspaceSuspensionStatus::isActive($suspension->status)) {
+ return $suspension;
+ }
+ }
+
+ return null;
}
public static function getGracePeriodExtension($workspaceId)
@@ -73,19 +81,30 @@ public static function saveGracePeriodExtension(Workspace $workspace, $value)
$workspace->save();
}
+ if ($extension !== null && !$workspace->active) {
+ $workspace->active = true;
+ $workspace->save();
+ }
+
if (!Schema::hasTable('workspace_suspensions')) {
return $workspace;
}
- $suspension = self::getActiveSuspension($workspace->id);
- if (!$suspension) {
+ $suspensions = WorkspaceSuspension::where('workspace_id', $workspace->id)->get();
+
+ if ($suspensions->isEmpty()) {
return $workspace;
}
- $suspension->grace_period_extension = $extension;
- $suspension->save();
+ foreach ($suspensions as $suspension) {
+ $suspension->grace_period_extension = $extension;
+ if ($extension !== null) {
+ $suspension->status = WorkspaceSuspensionStatus::NOT_SUSPENDED;
+ }
+ $suspension->save();
+ }
- return $suspension;
+ return $suspensions->first();
}
public static function suspendWorkspace(Workspace $workspace, $invoice = null, $daysPastDue = null, $threshold = null)
@@ -101,7 +120,7 @@ public static function suspendWorkspace(Workspace $workspace, $invoice = null, $
$suspension->workspace_id = $workspace->id;
$suspension->suspended_at = new DateTime();
$suspension->reason = 'payment_past_due';
- $suspension->status = true;
+ $suspension->status = WorkspaceSuspensionStatus::REAL_SUSPENSION;
$isNewSuspension = true;
}
@@ -111,7 +130,7 @@ public static function suspendWorkspace(Workspace $workspace, $invoice = null, $
if (!$suspension->reason) {
$suspension->reason = 'payment_past_due';
}
- $suspension->status = true;
+ $suspension->status = WorkspaceSuspensionStatus::REAL_SUSPENSION;
$suspension->save();
diff --git a/app/app/Http/Controllers/Admin/WorkspaceController.php b/app/app/Http/Controllers/Admin/WorkspaceController.php
index 8196346ea..ff7449b70 100755
--- a/app/app/Http/Controllers/Admin/WorkspaceController.php
+++ b/app/app/Http/Controllers/Admin/WorkspaceController.php
@@ -11,6 +11,7 @@
use App\PlanUsagePeriod;
use App\UserInvoice;
use App\Http\Requests\Admin\WorkspaceRequest;
+use App\Enums\WorkspaceSuspensionStatus;
use App\Helpers\MainHelper;
use App\Helpers\WorkspaceHelper;
use App\Helpers\BillingDataHelper;
@@ -49,7 +50,8 @@ public function create()
{
$gracePeriodExtension = null;
$activeSuspension = null;
- return view('admin.workspace.create_edit', compact('gracePeriodExtension', 'activeSuspension'));
+ $isWorkspaceSuspended = false;
+ return view('admin.workspace.create_edit', compact('gracePeriodExtension', 'activeSuspension', 'isWorkspaceSuspended'));
}
/**
@@ -62,7 +64,9 @@ public function store(WorkspaceRequest $request)
$workspace = new Workspace($request->except('grace_period_extension'));
$workspace->save();
- WorkspaceSuspensionHelper::saveGracePeriodExtension($workspace, $request->input('grace_period_extension'));
+ if ($request->exists('grace_period_extension')) {
+ WorkspaceSuspensionHelper::saveGracePeriodExtension($workspace, $request->input('grace_period_extension'));
+ }
header("X-Goto-URL: /admin/workspace/" . $workspace->id . "/edit");
}
@@ -86,7 +90,8 @@ public function edit(Workspace $workspace)
$planHistory = PlanUsagePeriod::where("workspace_id", $workspace->id)->get();
$gracePeriodExtension = WorkspaceSuspensionHelper::getGracePeriodExtension($workspace->id);
$activeSuspension = WorkspaceSuspensionHelper::getActiveSuspension($workspace->id);
- return view('admin.workspace.create_edit', compact('workspace', 'users', 'billingHistory', 'billingInfo', 'usageTriggers', 'routingACLs', 'planHistory', 'invoices', 'gracePeriodExtension', 'activeSuspension'));
+ $isWorkspaceSuspended = !empty($activeSuspension);
+ return view('admin.workspace.create_edit', compact('workspace', 'users', 'billingHistory', 'billingInfo', 'usageTriggers', 'routingACLs', 'planHistory', 'invoices', 'gracePeriodExtension', 'activeSuspension', 'isWorkspaceSuspended'));
}
/**
@@ -98,7 +103,9 @@ public function edit(Workspace $workspace)
public function update(WorkspaceRequest $request, Workspace $workspace)
{
$workspace->update($request->except('grace_period_extension'));
- WorkspaceSuspensionHelper::saveGracePeriodExtension($workspace, $request->input('grace_period_extension'));
+ if ($request->exists('grace_period_extension')) {
+ WorkspaceSuspensionHelper::saveGracePeriodExtension($workspace, $request->input('grace_period_extension'));
+ }
header("X-Goto-URL: /admin/workspace/" . $workspace->id . "/edit");
}
@@ -133,15 +140,16 @@ public function destroy(Workspace $workspace)
public function data()
{
$globalGracePeriod = WorkspaceSuspensionHelper::getGlobalGracePeriod();
+ $realSuspensionStatus = WorkspaceSuspensionStatus::REAL_SUSPENSION;
$activeSuspensionSelect = Schema::hasTable('workspace_suspensions')
- ? DB::raw('(select count(*) from workspace_suspensions ws_status where ws_status.workspace_id = workspaces.id and ws_status.status = 1) as active_suspension')
+ ? DB::raw("(select count(*) from workspace_suspensions ws_status where ws_status.workspace_id = workspaces.id and ws_status.status in ('" . $realSuspensionStatus . "', '1')) as active_suspension")
: DB::raw('0 as active_suspension');
$gracePeriodSources = array();
if (Schema::hasColumn('workspaces', 'grace_period_extension')) {
$gracePeriodSources[] = 'workspaces.grace_period_extension';
}
if (Schema::hasTable('workspace_suspensions')) {
- $gracePeriodSources[] = '(select ws.grace_period_extension from workspace_suspensions ws where ws.workspace_id = workspaces.id and ws.status = 1 and ws.grace_period_extension is not null order by ws.suspended_at desc limit 1)';
+ $gracePeriodSources[] = "(select ws.grace_period_extension from workspace_suspensions ws where ws.workspace_id = workspaces.id and ws.status in ('" . $realSuspensionStatus . "', '1') and ws.grace_period_extension is not null order by ws.suspended_at desc limit 1)";
}
$gracePeriodSources[] = (int) $globalGracePeriod;
$gracePeriodSelect = DB::raw('COALESCE(' . implode(', ', $gracePeriodSources) . ') as grace_period');
@@ -156,7 +164,7 @@ public function data()
));
return Datatables::of($workspaces)
- ->edit_column('active', '@if ($active_suspension > 0) Suspended @elseif ($active=="1") @else @endif')
+ ->edit_column('active', '@if ($active=="1") Active @elseif ($active_suspension > 0) Suspended @else Inactive @endif')
->edit_column('grace_period', '{{ $grace_period }} days')
->add_column('actions', ' {{ trans("admin/modal.edit") }}
{{ trans("admin/modal.support_tickets") }}
diff --git a/app/resources/views/admin/workspace/index.blade.php b/app/resources/views/admin/workspace/index.blade.php
index 701db8e5d..9a06ca05b 100755
--- a/app/resources/views/admin/workspace/index.blade.php
+++ b/app/resources/views/admin/workspace/index.blade.php
@@ -20,7 +20,7 @@
| {!! trans("admin/workspaces.name") !!} |
- {!! trans("admin/workspaces.active") !!} |
+ Account Status |
Grace Period |
{!! trans("admin/admin.created_at") !!} |
{!! trans("admin/admin.action") !!} |