📘 Module 9: Reports & Dashboard
1. Daily Sales Report & Total Revenue Calculation
ව්යාපාරික තීරණ ගැනීමට දත්ත විශ්ලේෂණය ඉතා වැදගත්. අපි මුලින්ම දෛනික විකුණුම් වාර්තාවක් (Daily Sales Report) සාදමු.
වාර්තා සඳහා නව Controller එකක් සාදා ගනිමු.
php artisan make:controller ReportController
දැන් routes/web.php file එකේ report page එක සඳහා route එකක් එකතු කරමු.
// In routes/web.php
use App\Http\Controllers\ReportController;
// ...
Route::get('/reports/daily', [ReportController::class, 'daily'])->name('reports.daily')->middleware('auth');
Controller Logic: ReportController.php
// In ReportController.php
use App\Models\Sale;
use Carbon\Carbon;
class ReportController extends Controller
{
public function daily()
{
$today = Carbon::today();
// Get all sales for today, along with the related product information
$sales = Sale::with('product')->whereDate('created_at', $today)->get();
// Calculate the total revenue for today
$totalRevenue = $sales->sum('total_price');
return view('reports.daily', compact('sales', 'totalRevenue', 'today'));
}
}
දැන් resources/views/reports/daily.blade.php නමින් view එකක් සාදා, එම දත්ත table එකක පෙන්වමු.
2. Product Stock Report (Low Stock Alerts)
භාණ්ඩ තොග කළමනාකරණය සඳහා stock report එකක් අත්යවශ්ය වේ. මෙහිදී තොග අවසන් වීමට ආසන්න භාණ්ඩ (low stock items) හඳුනාගැනීම පහසු වේ.
Controller එකේ සහ route file එකේ stock report සඳහා නව method සහ route එකක් එකතු කරන්න. Logic එක මෙසේය:
// In ReportController.php
use App\Models\Product;
// ...
public function stock()
{
// Order by quantity in ascending order to see low stock items first
$products = Product::orderBy('quantity', 'asc')->get();
return view('reports.stock', compact('products'));
}
View Logic: reports/stock.blade.php
{{-- In reports/stock.blade.php inside a @foreach loop --}}
<tr class="{{ $product->quantity < 10 ? 'table-danger' : '' }}">
<td>{{ $product->name }}</td>
<td>{{ $product->quantity }}</td>
</tr>
3. Dashboard Charts with Chart.js
Dashboard එකේ දත්ත ප්රස්ථාර (charts) මගින් පෙන්වීමෙන්, විකුණුම් රටා (sales trends) පහසුවෙන් හඳුනාගත හැක. අපි මේ සඳහා Chart.js නම් JavaScript library එක භාවිතා කරමු.
පළමුව, Dashboard view එකට Chart.js CDN එක එකතු කරන්න.
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
දෙවනුව, chart එක ඇඳීමට HTML <canvas> element එකක් එකතු කරන්න.
<canvas id="salesChart"></canvas>
Controller එකෙන් chart එකට අවශ්ය දත්ත query කර view එකට pass කරන්න. View එකේදී, JavaScript මගින් එම දත්ත භාවිතා කර chart එක නිර්මාණය කරයි.
// In dashboard.blade.php
const ctx = document.getElementById('salesChart');
// Data passed from the controller, safely encoded as JSON
const salesData = @json($salesDataForChart);
new Chart(ctx, {
type: 'bar', // Chart type: bar, line, pie etc.
data: {
labels: salesData.labels, // X-axis labels (e.g., Dates)
datasets: [{
label: 'Daily Revenue',
data: salesData.data, // Y-axis data (e.g., Revenue)
borderWidth: 1,
backgroundColor: 'rgba(75, 192, 192, 0.2)',
borderColor: 'rgba(75, 192, 192, 1)'
}]
},
options: { /* ... Chart options ... */ }
});
4. Sinhala Explanation of Queries & Aggregate Functions
Queries (ප්රශ්න කිරීම්) සහ Aggregate Functions (සමස්ත ශ්රිත)
Query එකක් කියන්නේ අපි database එකෙන් දත්ත ඉල්ලන ප්රශ්නයක්. උදාහරණයක් ලෙස, "අද දවසේ සියලුම sales මොනවාද?" යනු query එකකි.
Aggregate Functions යනු දත්ත තීරු (columns) වල ඇති අගයන් සමූහයක් මත ක්රියාත්මක වී, එක තනි ප්රතිඵලයක් (single value) ලබා දෙන විශේෂ ශ්රිත වේ.
පාසල් පන්තියක ලකුණු උදාහරණයෙන් තේරුම් ගනිමු:
SUM()(එකතුව): පන්තියේ සියලුම ළමයින්ගේ ලකුණු වල එකතුව කීයද?
(අපේ project එකේ:SUM('total_price')මගින් මුළු ආදායම සෙවීම)COUNT()(ගණන): පන්තියේ ළමයින් කී දෙනෙක් ඉන්නවාද?
(අපේ project එකේ: අද දවසේ sales කීයක් සිදුවී ඇත්දැයි සෙවීම)AVG()(සාමාන්යය): ලකුණු වල සාමාන්යය කීයද?MAX()(උපරිමය): ලබාගත් වැඩිම ලකුණ කීයද?MIN()(අවමය): ලබාගත් අඩුම ලකුණ කීයද?
මෙම functions මගින් database එකේ ඇති විශාල දත්ත ප්රමාණයක් සාරාංශ කර (summarize) වටිනා තොරතුරු ලබා ගැනීමට උපකාරී වේ.