- 修正所有模組 Controller 的 Model 引用路徑 (App\Modules\...) - 更新 ProductionOrder 與 ProductionOrderItem 模型結構以符合新版邏輯 - 修復 resources/js/utils/format.ts 在處理空值時導致 toLocaleString 崩潰的問題 - 清除全域路徑與 Controller 遷移殘留檔案
54 lines
2.0 KiB
PHP
54 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Modules\Core\Controllers;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
|
|
use App\Modules\Inventory\Models\Product;
|
|
use App\Modules\Procurement\Models\Vendor;
|
|
use App\Modules\Procurement\Models\PurchaseOrder;
|
|
use App\Modules\Inventory\Models\Warehouse;
|
|
use App\Modules\Inventory\Models\Inventory;
|
|
use App\Modules\Inventory\Models\WarehouseProductSafetyStock;
|
|
use Inertia\Inertia;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class DashboardController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
$centralDomains = config('tenancy.central_domains', []);
|
|
|
|
$demoPort = config('tenancy.demo_tenant_port');
|
|
if ((!$demoPort || request()->getPort() != $demoPort) && in_array(request()->getHost(), $centralDomains)) {
|
|
return redirect()->route('landlord.dashboard');
|
|
}
|
|
|
|
// 計算低庫存數量:各商品在各倉庫的總量 < 安全庫存
|
|
$lowStockCount = DB::table('warehouse_product_safety_stocks as ss')
|
|
->join(DB::raw('(SELECT warehouse_id, product_id, SUM(quantity) as total_qty FROM inventories WHERE deleted_at IS NULL GROUP BY warehouse_id, product_id) as inv'),
|
|
function ($join) {
|
|
$join->on('ss.warehouse_id', '=', 'inv.warehouse_id')
|
|
->on('ss.product_id', '=', 'inv.product_id');
|
|
})
|
|
->whereRaw('inv.total_qty <= ss.safety_stock')
|
|
->count();
|
|
|
|
$stats = [
|
|
'productsCount' => Product::count(),
|
|
'vendorsCount' => Vendor::count(),
|
|
'purchaseOrdersCount' => PurchaseOrder::count(),
|
|
'warehousesCount' => Warehouse::count(),
|
|
'totalInventoryValue' => Inventory::join('products', 'inventories.product_id', '=', 'products.id')
|
|
->sum('inventories.quantity'),
|
|
'pendingOrdersCount' => PurchaseOrder::where('status', 'pending')->count(),
|
|
'lowStockCount' => $lowStockCount,
|
|
];
|
|
|
|
return Inertia::render('Dashboard', [
|
|
'stats' => $stats,
|
|
]);
|
|
}
|
|
}
|