Kode Isi File reports.html
Kode Isi File reports.html
Bantu buatkan kode isi file reports.html
FarmerSmartAI - Halaman Laporan
Berikut kode lengkap untuk file reports.html (halaman laporan dan analitik) FarmerSmartAI:
```html
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Laporan & Analitik - FarmerSmartAI</title>
<style>
:root {
--primary: #2e7d32;
--primary-dark: #1b5e20;
--primary-light: #4caf50;
--secondary: #ff9800;
--accent: #8bc34a;
--light: #f5f5f5;
--dark: #333;
--gray: #757575;
--white: #ffffff;
--warning: #ff9800;
--danger: #f44336;
--success: #4caf50;
--info: #2196f3;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
body {
background-color: #f0f4f0;
color: var(--dark);
}
.dashboard {
display: grid;
grid-template-columns: 250px 1fr;
min-height: 100vh;
}
/* Sidebar */
.sidebar {
background-color: var(--primary);
color: white;
padding: 20px 0;
}
.logo {
display: flex;
align-items: center;
padding: 0 20px 20px;
border-bottom: 1px solid rgba(255,255,255,0.1);
margin-bottom: 20px;
}
.logo-icon {
font-size: 2rem;
margin-right: 10px;
}
.logo h1 {
font-size: 1.5rem;
}
.sidebar ul {
list-style: none;
}
.sidebar li {
padding: 15px 20px;
border-bottom: 1px solid rgba(255,255,255,0.05);
cursor: pointer;
transition: background 0.3s;
display: flex;
align-items: center;
}
.sidebar li i {
margin-right: 10px;
width: 20px;
text-align: center;
}
.sidebar li:hover {
background-color: var(--primary-dark);
}
.sidebar li.active {
background-color: var(--primary-dark);
border-left: 4px solid var(--accent);
}
/* Main Content */
.main-content {
padding: 20px;
overflow-y: auto;
}
.header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 25px;
padding-bottom: 15px;
border-bottom: 1px solid #e0e0e0;
}
.header h1 {
color: var(--primary);
font-size: 1.8rem;
}
.user-info {
display: flex;
align-items: center;
}
.user-avatar {
width: 40px;
height: 40px;
border-radius: 50%;
background-color: var(--primary);
display: flex;
align-items: center;
justify-content: center;
color: white;
font-weight: bold;
margin-right: 10px;
}
/* Report Controls */
.report-controls {
background: white;
border-radius: 10px;
padding: 20px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
margin-bottom: 30px;
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 15px;
}
.date-range {
display: flex;
align-items: center;
gap: 10px;
}
.date-input {
padding: 8px 12px;
border: 1px solid #ddd;
border-radius: 5px;
font-size: 0.9rem;
}
.report-type {
display: flex;
gap: 10px;
}
.btn {
padding: 8px 15px;
border: none;
border-radius: 5px;
cursor: pointer;
font-weight: 600;
transition: background 0.3s;
display: inline-flex;
align-items: center;
justify-content: center;
}
.btn i {
margin-right: 5px;
}
.btn-primary {
background-color: var(--primary);
color: white;
}
.btn-primary:hover {
background-color: var(--primary-dark);
}
.btn-outline {
background-color: transparent;
border: 1px solid var(--primary);
color: var(--primary);
}
.btn-outline:hover {
background-color: var(--light);
}
.btn-success {
background-color: var(--success);
color: white;
}
.btn-success:hover {
background-color: #388e3c;
}
/* Report Cards */
.report-cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
margin-bottom: 30px;
}
.report-card {
background: white;
border-radius: 10px;
padding: 20px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
text-align: center;
transition: transform 0.3s;
}
.report-card:hover {
transform: translateY(-5px);
}
.report-icon {
width: 60px;
height: 60px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
margin: 0 auto 15px;
color: white;
}
.report-icon.yield {
background-color: var(--success);
}
.report-icon.water {
background-color: var(--info);
}
.report-icon.finance {
background-color: #9c27b0;
}
.report-icon.chemicals {
background-color: var(--warning);
}
.report-value {
font-size: 1.8rem;
font-weight: bold;
margin: 10px 0;
}
.report-label {
color: var(--gray);
font-size: 0.9rem;
}
.report-trend {
display: flex;
align-items: center;
justify-content: center;
margin-top: 10px;
font-size: 0.8rem;
}
.trend-up {
color: var(--success);
}
.trend-down {
color: var(--danger);
}
/* Charts Section */
.charts-section {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(450px, 1fr));
gap: 20px;
margin-bottom: 30px;
}
@media (max-width: 768px) {
.charts-section {
grid-template-columns: 1fr;
}
}
.chart-container {
background: white;
border-radius: 10px;
padding: 20px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
.chart-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
}
.chart-header h2 {
color: var(--primary);
font-size: 1.3rem;
}
.chart-actions select {
padding: 5px 10px;
border-radius: 5px;
border: 1px solid #ddd;
}
.chart {
height: 300px;
position: relative;
}
/* Report Tables */
.tables-section {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(500px, 1fr));
gap: 20px;
margin-bottom: 30px;
}
@media (max-width: 768px) {
.tables-section {
grid-template-columns: 1fr;
}
}
.table-container {
background: white;
border-radius: 10px;
padding: 20px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
.table-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
}
.table-header h2 {
color: var(--primary);
font-size: 1.3rem;
}
.data-table {
width: 100%;
border-collapse: collapse;
}
.data-table th {
background-color: var(--light);
padding: 12px 15px;
text-align: left;
font-weight: 600;
color: var(--dark);
border-bottom: 1px solid #ddd;
}
.data-table td {
padding: 12px 15px;
border-bottom: 1px solid #f0f0f0;
}
.data-table tr:last-child td {
border-bottom: none;
}
.data-table tr:hover {
background-color: #f9f9f9;
}
.status-badge {
padding: 5px 10px;
border-radius: 20px;
font-size: 0.8rem;
font-weight: 600;
}
.status-completed {
background-color: #e8f5e9;
color: var(--success);
}
.status-pending {
background-color: #fff3e0;
color: var(--warning);
}
.status-failed {
background-color: #ffebee;
color: var(--danger);
}
/* Export Section */
.export-section {
background: white;
border-radius: 10px;
padding: 20px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
.export-options {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 15px;
margin-top: 20px;
}
.export-option {
border: 1px solid #e0e0e0;
border-radius: 8px;
padding: 20px;
text-align: center;
transition: all 0.3s;
cursor: pointer;
}
.export-option:hover {
border-color: var(--primary);
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}
.export-icon {
font-size: 2rem;
color: var(--primary);
margin-bottom: 10px;
}
.export-option h3 {
margin-bottom: 10px;
}
.export-option p {
color: var(--gray);
font-size: 0.9rem;
}
/* Responsive Design */
@media (max-width: 768px) {
.dashboard {
grid-template-columns: 1fr;
}
.sidebar {
display: none;
}
.mobile-menu-btn {
display: block;
background: none;
border: none;
font-size: 1.5rem;
color: var(--primary);
cursor: pointer;
}
.report-controls {
flex-direction: column;
align-items: flex-start;
}
.date-range {
flex-direction: column;
align-items: flex-start;
width: 100%;
}
.date-input {
width: 100%;
}
.report-type {
width: 100%;
justify-content: space-between;
}
}
.mobile-menu-btn {
display: none;
}
</style>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
</head>
<body>
<div class="dashboard">
<!-- Sidebar -->
<div class="sidebar">
<div class="logo">
<i class="fas fa-seedling logo-icon"></i>
<h1>FarmerSmartAI</h1>
</div>
<ul>
<li><a href="index.html" style="color: white; text-decoration: none;"><i class="fas fa-home"></i> Beranda</a></li>
<li><a href="field_monitoring.html" style="color: white; text-decoration: none;"><i class="fas fa-map-marked-alt"></i> Monitoring Lahan</a></li>
<li><a href="farmer_smart_ai_dashboard.html" style="color: white; text-decoration: none;"><i class="fas fa-tachometer-alt"></i> Dashboard</a></li>
<li><a href="ai_recommendations.html" style="color: white; text-decoration: none;"><i class="fas fa-robot"></i> Rekomendasi AI</a></li>
<li><a href="harvest_prediction.html" style="color: white; text-decoration: none;"><i class="fas fa-chart-line"></i> Prediksi Panen</a></li>
<li class="active"><i class="fas fa-clipboard-list"></i> Laporan</li>
<li><i class="fas fa-cog"></i> Pengaturan</li>
</ul>
</div>
<!-- Main Content -->
<div class="main-content">
<div class="header">
<div>
<button class="mobile-menu-btn">
<i class="fas fa-bars"></i>
</button>
<h1>Laporan & Analitik</h1>
</div>
<div class="user-info">
<div class="user-avatar">PS</div>
<span>Petani Smart</span>
</div>
</div>
<!-- Report Controls -->
<div class="report-controls">
<div class="date-range">
<label for="startDate">Dari:</label>
<input type="date" id="startDate" class="date-input" value="2023-01-01">
<label for="endDate">Sampai:</label>
<input type="date" id="endDate" class="date-input" value="2023-12-31">
</div>
<div class="report-type">
<button class="btn btn-outline">
<i class="fas fa-sync-alt"></i> Refresh
</button>
<button class="btn btn-primary" id="generateReport">
<i class="fas fa-chart-bar"></i> Generate Laporan
</button>
</div>
</div>
<!-- Report Cards -->
<div class="report-cards">
<div class="report-card">
<div class="report-icon yield">
<i class="fas fa-weight-hanging"></i>
</div>
<div class="report-value">7.8 ton/ha</div>
<div class="report-label">Rata-rata Hasil Panen</div>
<div class="report-trend trend-up">
<i class="fas fa-arrow-up"></i> 12.8% dari periode sebelumnya
</div>
</div>
<div class="report-card">
<div class="report-icon water">
<i class="fas fa-tint"></i>
</div>
<div class="report-value">1.2 juta L</div>
<div class="report-label">Penggunaan Air</div>
<div class="report-trend trend-down">
<i class="fas fa-arrow-down"></i> 15.3% lebih efisien
</div>
</div>
<div class="report-card">
<div class="report-icon finance">
<i class="fas fa-money-bill-wave"></i>
</div>
<div class="report-value">Rp 42,5 Jt</div>
<div class="report-label">Pendapatan Bersih</div>
<div class="report-trend trend-up">
<i class="fas fa-arrow-up"></i> 18.2% dari periode sebelumnya
</div>
</div>
<div class="report-card">
<div class="report-icon chemicals">
<i class="fas fa-flask"></i>
</div>
<div class="report-value">320 kg</div>
<div class="report-label">Penggunaan Pupuk</div>
<div class="report-trend trend-down">
<i class="fas fa-arrow-down"></i> 8.5% lebih efisien
</div>
</div>
</div>
<!-- Charts Section -->
<div class="charts-section">
<div class="chart-container">
<div class="chart-header">
<h2>Trend Hasil Panen</h2>
<div class="chart-actions">
<select id="yieldRange">
<option value="6">6 Bulan</option>
<option value="12" selected>1 Tahun</option>
<option value="24">2 Tahun</option>
</select>
</div>
</div>
<div class="chart" id="yieldChart">
<canvas id="yieldCanvas"></canvas>
</div>
</div>
<div class="chart-container">
<div class="chart-header">
<h2>Pembiayaan per Kategori</h2>
<div class="chart-actions">
<select id="financeRange">
<option value="3">3 Bulan</option>
<option value="6" selected>6 Bulan</option>
<option value="12">1 Tahun</option>
</select>
</div>
</div>
<div class="chart" id="financeChart">
<canvas id="financeCanvas"></canvas>
</div>
</div>
</div>
<!-- Report Tables -->
<div class="tables-section">
<div class="table-container">
<div class="table-header">
<h2>Riwayat Aktivitas</h2>
<button class="btn btn-outline">
<i class="fas fa-filter"></i> Filter
</button>
</div>
<table class="data-table">
<thead>
<tr>
<th>Tanggal</th>
<th>Aktivitas</th>
<th>Lokasi</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr>
<td>15 Jul 2023</td>
<td>Pemupukan Kalium</td>
<td>Area Utara</td>
<td><span class="status-badge status-completed">Selesai</span></td>
</tr>
<tr>
<td>12 Jul 2023</td>
<td>Irigasi Tambahan</td>
<td>Seluruh Area</td>
<td><span class="status-badge status-completed">Selesai</span></td>
</tr>
<tr>
<td>10 Jul 2023</td>
<td>Penyemprotan Pestisida</td>
<td>Area Timur</td>
<td><span class="status-badge status-completed">Selesai</span></td>
</tr>
<tr>
<td>5 Jul 2023</td>
<td>Pemantauan Kesehatan Tanaman</td>
<td>Seluruh Area</td>
<td><span class="status-badge status-completed">Selesai</span></td>
</tr>
<tr>
<td>1 Jul 2023</td>
<td>Pemupukan Nitrogen</td>
<td>Area Selatan</td>
<td><span class="status-badge status-pending">Dalam Proses</span></td>
</tr>
</tbody>
</table>
</div>
<div class="table-container">
<div class="table-header">
<h2>Penggunaan Sumber Daya</h2>
<button class="btn btn-outline">
<i class="fas fa-download"></i> Ekspor
</button>
</div>
<table class="data-table">
<thead>
<tr>
<th>Sumber Daya</th>
<th>Jumlah</th>
<th>Biaya</th>
<th>Trend</th>
</tr>
</thead>
<tbody>
<tr>
<td>Air Irigasi</td>
<td>1.2 juta L</td>
<td>Rp 1.800.000</td>
<td><span class="trend-down"><i class="fas fa-arrow-down"></i> 15%</span></td>
</tr>
<tr>
<td>Pupuk NPK</td>
<td>150 kg</td>
<td>Rp 2.250.000</td>
<td><span class="trend-up"><i class="fas fa-arrow-up"></i> 5%</span></td>
</tr>
<tr>
<td>Pupuk KCL</td>
<td>100 kg</td>
<td>Rp 1.500.000</td>
<td><span class="trend-up"><i class="fas fa-arrow-up"></i> 8%</span></td>
</tr>
<tr>
<td>Pestisida</td>
<td>25 L</td>
<td>Rp 1.750.000</td>
<td><span class="trend-down"><i class="fas fa-arrow-down"></i> 12%</span></td>
</tr>
<tr>
<td>Tenaga Kerja</td>
<td>120 jam</td>
<td>Rp 3.600.000</td>
<td><span class="trend-up"><i class="fas fa-arrow-up"></i> 3%</span></td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- Export Section -->
<div class="export-section">
<div class="chart-header">
<h2>Ekspor Laporan</h2>
<button class="btn btn-success">
<i class="fas fa-file-export"></i> Ekspor Semua
</button>
</div>
<div class="export-options">
<div class="export-option">
<div class="export-icon">
<i class="fas fa-file-pdf"></i>
</div>
<h3>Laporan PDF</h3>
<p>Ekspor laporan lengkap dalam format PDF</p>
<button class="btn btn-outline" style="margin-top: 10px;">
<i class="fas fa-download"></i> Unduh
</button>
</div>
<div class="export-option">
<div class="export-icon">
<i class="fas fa-file-excel"></i>
</div>
<h3>Data Excel</h3>
<p>Ekspor data mentah dalam format Excel</p>
<button class="btn btn-outline" style="margin-top: 10px;">
<i class="fas fa-download"></i> Unduh
</button>
</div>
<div class="export-option">
<div class="export-icon">
<i class="fas fa-chart-bar"></i>
</div>
<h3>Grafik & Visual</h3>
<p>Ekspor grafik dan visualisasi data</p>
<button class="btn btn-outline" style="margin-top: 10px;">
<i class="fas fa-download"></i> Unduh
</button>
</div>
<div class="export-option">
<div class="export-icon">
<i class="fas fa-file-csv"></i>
</div>
<h3>Data CSV</h3>
<p>Ekspor data dalam format CSV untuk analisis</p>
<button class="btn btn-outline" style="margin-top: 10px;">
<i class="fas fa-download"></i> Unduh
</button>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
// Initialize when page loads
document.addEventListener('DOMContentLoaded', function() {
initCharts();
setupEventListeners();
// Mobile menu toggle
const mobileMenuBtn = document.querySelector('.mobile-menu-btn');
const sidebar = document.querySelector('.sidebar');
if (mobileMenuBtn) {
mobileMenuBtn.addEventListener('click', function() {
sidebar.style.display = sidebar.style.display === 'block' ? 'none' : 'block';
});
}
});
// Initialize Charts
function initCharts() {
// Yield Trend Chart
const yieldCtx = document.getElementById('yieldCanvas').getContext('2d');
const yieldChart = new Chart(yieldCtx, {
type: 'line',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
datasets: [
{
label: 'Hasil Panen (ton/ha)',
data: [6.2, 6.5, 6.8, 7.1, 7.3, 7.5, 7.8, 7.6, 7.4, 7.2, 7.0, 6.8],
borderColor: '#4caf50',
backgroundColor: 'rgba(76, 175, 80, 0.1)',
borderWidth: 3,
fill: true,
tension: 0.4
},
{
label: 'Rata-rata Historis',
data: [5.8, 6.0, 6.2, 6.5, 6.7, 6.9, 7.0, 6.9, 6.7, 6.5, 6.3, 6.1],
borderColor: '#ff9800',
backgroundColor: 'rgba(255, 152, 0, 0.1)',
borderWidth: 2,
fill: false,
tension: 0.4,
borderDash: [5, 5]
}
]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: false,
min: 5,
max: 8,
title: {
display: true,
text: 'Ton per Hektar'
}
}
},
plugins: {
legend: {
display: true,
position: 'top'
}
}
}
});
// Finance Breakdown Chart
const financeCtx = document.getElementById('financeCanvas').getContext('2d');
const financeChart = new Chart(financeCtx, {
type: 'doughnut',
data: {
labels: ['Pupuk', 'Pestisida', 'Air', 'Tenaga Kerja', 'Lainnya'],
datasets: [{
data: [35, 20, 15, 25, 5],
backgroundColor: [
'rgba(76, 175, 80, 0.7)',
'rgba(255, 152, 0, 0.7)',
'rgba(33, 150, 243, 0.7)',
'rgba(156, 39, 176, 0.7)',
'rgba(158, 158, 158, 0.7)'
],
borderColor: [
'rgba(76, 175, 80, 1)',
'rgba(255, 152, 0, 1)',
'rgba(33, 150, 243, 1)',
'rgba(156, 39, 176, 1)',
'rgba(158, 158, 158, 1)'
],
borderWidth: 1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'bottom'
},
tooltip: {
callbacks: {
label: function(context) {
return `${context.label}: ${context.parsed}%`;
}
}
}
}
}
});
// Update charts when range selector changes
document.getElementById('yieldRange').addEventListener('change', function() {
// In a real app, this would fetch new data based on the selected range
console.log('Yield range changed to:', this.value);
});
document.getElementById('financeRange').addEventListener('change', function() {
// In a real app, this would fetch new data based on the selected range
console.log('Finance range changed to:', this.value);
});
}
// Setup event listeners
function setupEventListeners() {
// Generate report button
document.getElementById('generateReport').addEventListener('click', function() {
const startDate = document.getElementById('startDate').value;
const endDate = document.getElementById('endDate').value;
// Show loading state
this.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Membuat Laporan...';
this.disabled = true;
// Simulate API call delay
setTimeout(() => {
// Reset button
this.innerHTML = '<i class="fas fa-chart-bar"></i> Generate Laporan';
this.disabled = false;
// Show success message
alert(`Laporan berhasil dibuat untuk periode ${startDate} hingga ${endDate}`);
// In a real app, this would update the charts and tables with new data
updateReportData(startDate, endDate);
}, 2000);
});
// Export buttons
const exportButtons = document.querySelectorAll('.export-option .btn');
exportButtons.forEach(button => {
button.addEventListener('click', function() {
const format = this.closest('.export-option').querySelector('h3').textContent;
// Show loading state
const originalText = this.innerHTML;
this.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Memproses...';
this.disabled = true;
// Simulate export process
setTimeout(() => {
// Reset button
this.innerHTML = originalText;
this.disabled = false;
// Show success message
alert(`Ekspor ${format} berhasil! File akan diunduh otomatis.`);
// In a real app, this would trigger the actual file download
}, 1500);
});
});
}
// Update report data based on date range
function updateReportData(startDate, endDate) {
// In a real app, this would fetch new data from an API
// For demo purposes, we'll just log the dates and simulate data updates
console.log(`Fetching data for range: ${startDate} to ${endDate}`);
// Simulate updating the report cards with new data
const reportCards = document.querySelectorAll('.report-card .report-value');
reportCards.forEach(card => {
const currentValue = parseFloat(card.textContent);
// Add small random variation to simulate new data
const variation = (Math.random() * 0.1) - 0.05; // -5% to +5%
const newValue = currentValue * (1 + variation);
// Format based on content type
if (card.textContent.includes('ton')) {
card.textContent = newValue.toFixed(1) + ' ton/ha';
} else if (card.textContent.includes('Rp')) {
card.textContent = 'Rp ' + (newValue / 1000000).toFixed(1) + ' Jt';
} else if (card.textContent.includes('L')) {
card.textContent = (newValue / 1000000).toFixed(1) + ' juta L';
} else if (card.textContent.includes('kg')) {
card.textContent = Math.round(newValue) + ' kg';
}
});
// Update trend indicators
const trends = document.querySelectorAll('.report-trend');
trends.forEach(trend => {
const isPositive = Math.random() > 0.3; // 70% chance of positive trend
const percentage = (Math.random() * 10 + 5).toFixed(1); // 5-15%
if (isPositive) {
trend.className = 'report-trend trend-up';
trend.innerHTML = `<i class="fas fa-arrow-up"></i> ${percentage}% dari periode sebelumnya`;
} else {
trend.className = 'report-trend trend-down';
trend.innerHTML = `<i class="fas fa-arrow-down"></i> ${percentage}% dari periode sebelumnya`;
}
});
}
// Initialize with current date range
const today = new Date();
const firstDay = new Date(today.getFullYear(), today.getMonth(), 1);
const lastDay = new Date(today.getFullYear(), today.getMonth() + 1, 0);
// Format dates as YYYY-MM-DD
function formatDate(date) {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
// Set default date range to current month
document.getElementById('startDate').value = formatDate(firstDay);
document.getElementById('endDate').value = formatDate(lastDay);
</script>
</body>
</html>
```
Fitur Halaman Reports:
1. Kontrol Laporan - Panel untuk memilih periode laporan:
· Pilih tanggal mulai dan akhir
· Tombol refresh dan generate laporan
· Filter berdasarkan rentang waktu
2. Kartu Ringkasan - 4 kartu metrik utama:
· Rata-rata hasil panen dengan trend
· Penggunaan air dengan efisiensi
· Pendapatan bersih dengan pertumbuhan
· Penggunaan pupuk dengan efisiensi
3. Grafik Interaktif - Visualisasi data:
· Trend Hasil Panen: Line chart perbandingan dengan rata-rata historis
· Pembiayaan per Kategori: Doughnut chart breakdown biaya operasional
4. Tabel Data - Tampilan data terstruktur:
· Riwayat Aktivitas: Log semua aktivitas pertanian dengan status
· Penggunaan Sumber Daya: Detail konsumsi dan biaya dengan indikator trend
5. Sistem Ekspor - Berbagai format ekspor:
· Laporan PDF lengkap
· Data Excel untuk analisis lebih lanjut
· Grafik dan visualisasi
· Data CSV untuk pemrosesan data
6. Fungsi Real-time:
· Pembaruan data berdasarkan periode yang dipilih
· Indikator loading saat memproses
· Notifikasi keberhasilan operasi
7. Desain Responsif - Tampilan optimal di semua perangkat
Halaman ini memberikan alat analitik 𝗒ang komprehensif untuk melacak 𝗄inerja pertanian, mengidentifikasi tren, dan membuat keputusan berbasis data yang lebih baik
Bersambung ke: Kode Isi File 𝗌𝖾ttings.html
Comments
Post a Comment