42 lines
1.8 KiB
PHP
42 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace Modules\Tms\Services;
|
|
|
|
use App\Business;
|
|
use Modules\Tms\Models\CustomsClearance;
|
|
use Modules\Tms\Models\Shipment;
|
|
use Modules\Tms\Models\Vehicle;
|
|
use Modules\Tms\Models\Driver;
|
|
use Modules\Tms\Models\Carrier;
|
|
|
|
class TmsDashboardService
|
|
{
|
|
public function getStats(Business $business): array
|
|
{
|
|
$business_id = $business->id;
|
|
|
|
return [
|
|
'total_shipments' => Shipment::where('business_id', $business_id)->count(),
|
|
'pending' => Shipment::where('business_id', $business_id)->whereIn('status', ['draft', 'scheduled'])->count(),
|
|
'at_customs' => Shipment::where('business_id', $business_id)->where('status', 'at_customs')->count(),
|
|
'in_transit' => Shipment::where('business_id', $business_id)->where('status', 'in_transit')->count(),
|
|
'delivered' => Shipment::where('business_id', $business_id)->where('status', 'delivered')->count(),
|
|
'customs_pending' => CustomsClearance::where('business_id', $business_id)
|
|
->whereNotIn('status', ['cleared', 'released', 'cancelled'])
|
|
->count(),
|
|
'vehicles' => Vehicle::where('business_id', $business_id)->where('is_active', true)->count(),
|
|
'drivers' => Driver::where('business_id', $business_id)->where('is_active', true)->count(),
|
|
'carriers' => Carrier::where('business_id', $business_id)->where('is_active', true)->count(),
|
|
];
|
|
}
|
|
|
|
public function getRecentShipments(Business $business, int $limit = 10)
|
|
{
|
|
return Shipment::where('business_id', $business->id)
|
|
->with(['contact:id,name', 'driver:id,name', 'vehicle:id,plate_number', 'customsClearance:id,shipment_id,ref_no,status'])
|
|
->orderByDesc('created_at')
|
|
->limit($limit)
|
|
->get();
|
|
}
|
|
}
|