Add Woo Manager Pro with multi-store switching and free-tier limits.
Deploy Ladill Woo Manager / deploy (push) Successful in 51s
Deploy Ladill Woo Manager / deploy (push) Successful in 51s
Free: 1 store and 20 products. Pro/Business mirrors Invoice pricing (GHS 49/149) with wallet renewals, Paystack prepay, session-based store switcher, and scoped UI. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -3,8 +3,8 @@
|
||||
namespace App\Http\Controllers\Woo;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Controllers\Woo\Concerns\ResolvesWooContext;
|
||||
use App\Models\WooOrder;
|
||||
use App\Models\WooStore;
|
||||
use App\Services\Woo\FulfillmentSyncService;
|
||||
use App\Services\Woo\OrderSyncService;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
@@ -14,6 +14,8 @@ use Illuminate\View\View;
|
||||
|
||||
class OrderController extends Controller
|
||||
{
|
||||
use ResolvesWooContext;
|
||||
|
||||
public function __construct(
|
||||
private FulfillmentSyncService $sync,
|
||||
private OrderSyncService $orderSync,
|
||||
@@ -21,15 +23,12 @@ class OrderController extends Controller
|
||||
|
||||
public function index(Request $request): View
|
||||
{
|
||||
$user = $request->user();
|
||||
$store = $this->currentStore($request);
|
||||
$search = trim((string) $request->query('q', ''));
|
||||
$storeFilter = $request->query('store');
|
||||
|
||||
$storeIds = WooStore::query()->where('user_id', $user->id)->pluck('id');
|
||||
|
||||
$orders = WooOrder::query()
|
||||
->whereIn('woo_store_id', $storeIds)
|
||||
->when($storeFilter, fn ($q) => $q->where('woo_store_id', $storeFilter))
|
||||
->when($store, fn ($q) => $q->where('woo_store_id', $store->id))
|
||||
->when(! $store, fn ($q) => $q->whereRaw('1 = 0'))
|
||||
->when($search !== '', function ($query) use ($search) {
|
||||
$like = '%'.$search.'%';
|
||||
$query->where(function ($inner) use ($like) {
|
||||
@@ -43,15 +42,13 @@ class OrderController extends Controller
|
||||
->paginate(20)
|
||||
->withQueryString();
|
||||
|
||||
$stores = WooStore::query()->where('user_id', $user->id)->orderBy('site_name')->get();
|
||||
|
||||
return view('woo.orders.index', compact('orders', 'stores', 'search', 'storeFilter'));
|
||||
return view('woo.orders.index', compact('orders', 'search', 'store'));
|
||||
}
|
||||
|
||||
public function updateStatus(Request $request, WooOrder $order): RedirectResponse
|
||||
{
|
||||
$order->load('store');
|
||||
abort_if($order->store?->user_id !== $request->user()->id, 403);
|
||||
$store = $this->currentStoreOrFail($request);
|
||||
abort_if($order->woo_store_id !== $store->id, 404);
|
||||
|
||||
$validated = $request->validate([
|
||||
'fulfillment_status' => ['required', Rule::in(array_keys(WooOrder::FULFILLMENT_STATUSES))],
|
||||
@@ -65,16 +62,7 @@ class OrderController extends Controller
|
||||
|
||||
public function sync(Request $request): RedirectResponse
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'store' => ['required', 'integer'],
|
||||
]);
|
||||
|
||||
$store = WooStore::query()
|
||||
->where('user_id', $request->user()->id)
|
||||
->whereKey((int) $validated['store'])
|
||||
->where('status', WooStore::STATUS_ACTIVE)
|
||||
->firstOrFail();
|
||||
|
||||
$store = $this->currentStoreOrFail($request);
|
||||
$count = $this->orderSync->syncOrders($store);
|
||||
|
||||
return back()->with('success', sprintf(
|
||||
|
||||
Reference in New Issue
Block a user