removed .md
This commit is contained in:
parent
8f3687175e
commit
107003bb03
@ -1,249 +0,0 @@
|
|||||||
# Modern Dashboard Setup Guide
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
Your React frontend now has a beautiful modern dashboard that consumes data from Frappe Dashboard Chart and Number Card doctypes.
|
|
||||||
|
|
||||||
## What's Been Created
|
|
||||||
|
|
||||||
### 1. Backend API File
|
|
||||||
**File**: `frappe_dashboard_api.py`
|
|
||||||
- Copy this to your Frappe app: `asset_lite/api/dashboard_api.py`
|
|
||||||
- Contains endpoints:
|
|
||||||
- `get_number_cards()` - Returns KPI counts (total assets, work orders by status)
|
|
||||||
- `list_dashboard_charts()` - Lists all public Dashboard Chart docs
|
|
||||||
- `get_dashboard_chart_data(chart_name)` - Returns chart-ready JSON for any Report-based Dashboard Chart
|
|
||||||
- `get_repair_cost_by_item(year)` - Example specialized chart endpoint
|
|
||||||
|
|
||||||
### 2. Frontend Components
|
|
||||||
|
|
||||||
#### `src/pages/ModernDashboard.tsx` (NEW)
|
|
||||||
Modern dashboard matching your reference image with:
|
|
||||||
- Gradient KPI cards (pink, cyan, emerald)
|
|
||||||
- Tab switcher (Variation 1 / Variation 2)
|
|
||||||
- Work Order Status chart with bar visualization
|
|
||||||
- Bandwidth Reports chart (multi-dataset bars)
|
|
||||||
- Progress bars for metrics
|
|
||||||
- Message statistics cards
|
|
||||||
- Author rankings with trend indicators
|
|
||||||
|
|
||||||
#### `src/components/SimpleChart.tsx`
|
|
||||||
Lightweight SVG-based chart renderer:
|
|
||||||
- Bar charts (single & stacked)
|
|
||||||
- Pie charts
|
|
||||||
- No external dependencies
|
|
||||||
|
|
||||||
#### `src/components/ChartTile.tsx`
|
|
||||||
Reusable tile that fetches and displays a Dashboard Chart by name
|
|
||||||
|
|
||||||
### 3. API Integration
|
|
||||||
|
|
||||||
#### `src/config/api.ts`
|
|
||||||
Added endpoints:
|
|
||||||
```typescript
|
|
||||||
DASHBOARD_NUMBER_CARDS: '/api/method/asset_lite.api.dashboard_api.get_number_cards'
|
|
||||||
DASHBOARD_LIST_CHARTS: '/api/method/asset_lite.api.dashboard_api.list_dashboard_charts'
|
|
||||||
DASHBOARD_CHART_DATA: '/api/method/asset_lite.api.dashboard_api.get_dashboard_chart_data'
|
|
||||||
```
|
|
||||||
|
|
||||||
#### `src/services/apiService.ts`
|
|
||||||
Added methods:
|
|
||||||
- `getNumberCards()`
|
|
||||||
- `listDashboardCharts(publicOnly)`
|
|
||||||
- `getDashboardChartData(chartName, filters)`
|
|
||||||
|
|
||||||
#### `src/hooks/useApi.ts`
|
|
||||||
Added hooks:
|
|
||||||
- `useNumberCards()` - Fetches KPI card data
|
|
||||||
- `useDashboardChart(chartName, filters)` - Fetches specific chart data
|
|
||||||
- `useChartsList(publicOnly)` - Lists available charts
|
|
||||||
|
|
||||||
### 4. Routing
|
|
||||||
**File**: `src/App.tsx`
|
|
||||||
- `/dashboard` route already points to `ModernDashboard` component
|
|
||||||
- Protected by authentication
|
|
||||||
- Includes sidebar navigation
|
|
||||||
|
|
||||||
## Installation Steps
|
|
||||||
|
|
||||||
### Step 1: Deploy Backend API
|
|
||||||
```bash
|
|
||||||
# Navigate to your Frappe app directory
|
|
||||||
cd frappe-bench/apps/asset_lite
|
|
||||||
|
|
||||||
# Create the api directory if it doesn't exist
|
|
||||||
mkdir -p asset_lite/api
|
|
||||||
|
|
||||||
# Copy the Python file
|
|
||||||
cp /path/to/frappe_dashboard_api.py asset_lite/api/dashboard_api.py
|
|
||||||
|
|
||||||
# Restart your Frappe server
|
|
||||||
bench restart
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 2: Verify Dashboard Charts in Frappe
|
|
||||||
Ensure these Dashboard Charts exist and are marked as "Public":
|
|
||||||
- Up & Down Time Chart
|
|
||||||
- Work Order Status Chart
|
|
||||||
- Maintenance - Asset wise Count
|
|
||||||
- Asset Maintenance Assignees Status Count
|
|
||||||
- Asset Maintenance Frequency Chart
|
|
||||||
- PPM Status
|
|
||||||
- PPM Template Counts
|
|
||||||
- Repair Cost
|
|
||||||
|
|
||||||
Each chart should:
|
|
||||||
- Chart Type: "Report"
|
|
||||||
- Use Report Chart: ✓ checked
|
|
||||||
- Have a Report Name configured
|
|
||||||
- Have X Field set
|
|
||||||
- Have Y Axis fields configured in child table
|
|
||||||
- Is Public: ✓ checked
|
|
||||||
|
|
||||||
### Step 3: Test the API Endpoints
|
|
||||||
```bash
|
|
||||||
# Test number cards
|
|
||||||
curl -X GET "https://seeraasm-med.seeraarabia.com/api/method/asset_lite.api.dashboard_api.get_number_cards" \
|
|
||||||
-H "Authorization: token YOUR_API_KEY:YOUR_API_SECRET"
|
|
||||||
|
|
||||||
# Test chart data
|
|
||||||
curl -X GET "https://seeraasm-med.seeraarabia.com/api/method/asset_lite.api.dashboard_api.get_dashboard_chart_data?chart_name=Work%20Order%20Status%20Chart" \
|
|
||||||
-H "Authorization: token YOUR_API_KEY:YOUR_API_SECRET"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 4: Run Frontend
|
|
||||||
```bash
|
|
||||||
cd frappe-frontend
|
|
||||||
npm install
|
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
Navigate to: `http://localhost:5173/dashboard`
|
|
||||||
|
|
||||||
## Dashboard Features
|
|
||||||
|
|
||||||
### KPI Cards (Top Row)
|
|
||||||
- **Total Assets**: Pink gradient, shows count from Asset doctype
|
|
||||||
- **Work Orders**: Cyan gradient, shows open + in progress count
|
|
||||||
- **Completed**: Green gradient, shows completed work orders
|
|
||||||
|
|
||||||
### Charts Section
|
|
||||||
- **Work Order Status**: Bar chart from "Work Order Status Chart" Dashboard Chart
|
|
||||||
- **Bandwidth Reports**: Multi-dataset chart from "Maintenance - Asset wise Count"
|
|
||||||
- Both support tab switching and dynamic data loading
|
|
||||||
|
|
||||||
### Additional Sections
|
|
||||||
- Top Authors ranking (mock data for now)
|
|
||||||
- Progress metrics with colored bars
|
|
||||||
- Message statistics at bottom
|
|
||||||
|
|
||||||
## Customization
|
|
||||||
|
|
||||||
### Change Chart Names
|
|
||||||
Edit `src/pages/ModernDashboard.tsx` lines with `useDashboardChart`:
|
|
||||||
```typescript
|
|
||||||
const { data: workOrderChart } = useDashboardChart('Your Chart Name Here');
|
|
||||||
```
|
|
||||||
|
|
||||||
### Add More KPI Cards
|
|
||||||
1. Add new field in backend `get_number_cards()` function
|
|
||||||
2. Update TypeScript interface in `src/services/apiService.ts`
|
|
||||||
3. Add card in `ModernDashboard.tsx` KPI grid
|
|
||||||
|
|
||||||
### Customize Colors
|
|
||||||
Tailwind gradient classes used:
|
|
||||||
- `from-pink-400 to-pink-300`
|
|
||||||
- `from-cyan-400 to-cyan-300`
|
|
||||||
- `from-emerald-400 to-emerald-300`
|
|
||||||
|
|
||||||
Change these to any Tailwind color you want.
|
|
||||||
|
|
||||||
### Add Filters to Charts
|
|
||||||
Pass filters to chart hook:
|
|
||||||
```typescript
|
|
||||||
const { data: chart } = useDashboardChart('Chart Name', {
|
|
||||||
from_date: '2025-01-01',
|
|
||||||
to_date: '2025-12-31',
|
|
||||||
status: 'Open'
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
### Charts Not Loading
|
|
||||||
1. Check browser console for API errors
|
|
||||||
2. Verify Dashboard Chart docname is correct (case-sensitive)
|
|
||||||
3. Ensure chart is marked "Public" or user has permission
|
|
||||||
4. Check that Report exists and returns data
|
|
||||||
|
|
||||||
### Number Cards Show Zero
|
|
||||||
1. Verify Work Order statuses match those in `get_number_cards()` function
|
|
||||||
2. Adjust status filters in Python code if your statuses differ:
|
|
||||||
```python
|
|
||||||
work_orders_open = frappe.db.count("Work Order", {"status": ["in", ["Your", "Custom", "Statuses"]]})
|
|
||||||
```
|
|
||||||
|
|
||||||
### CORS Errors
|
|
||||||
1. Check Vite proxy configuration in `vite.config.ts`
|
|
||||||
2. Ensure Frappe CORS settings allow your frontend domain
|
|
||||||
3. Verify cookies are being sent (credentials: 'include')
|
|
||||||
|
|
||||||
## API Reference
|
|
||||||
|
|
||||||
### GET /api/method/asset_lite.api.dashboard_api.get_number_cards
|
|
||||||
Returns:
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"total_assets": 123,
|
|
||||||
"work_orders_open": 7,
|
|
||||||
"work_orders_in_progress": 3,
|
|
||||||
"work_orders_completed": 42
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### GET /api/method/asset_lite.api.dashboard_api.get_dashboard_chart_data
|
|
||||||
Params:
|
|
||||||
- `chart_name` (required): Dashboard Chart docname
|
|
||||||
- `report_filters` (optional): JSON string of filters
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"labels": ["A", "B", "C"],
|
|
||||||
"datasets": [
|
|
||||||
{
|
|
||||||
"name": "Series 1",
|
|
||||||
"values": [10, 20, 15],
|
|
||||||
"color": "#4F46E5"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"type": "Bar",
|
|
||||||
"options": {},
|
|
||||||
"source": {"report": "Report Name"}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Next Steps
|
|
||||||
|
|
||||||
1. **Replace Mock Data**: Update TOP AUTHORS section with real user activity data
|
|
||||||
2. **Add Real-time Updates**: Use WebSocket or polling to refresh charts every N seconds
|
|
||||||
3. **Add Date Range Picker**: Let users filter charts by date range
|
|
||||||
4. **Export Features**: Add PDF/Excel export for charts
|
|
||||||
5. **Drill-down**: Make chart bars/slices clickable to view detail pages
|
|
||||||
6. **Responsive Design**: Already responsive, but test on mobile/tablet
|
|
||||||
7. **Dark Mode**: Add theme toggle using Tailwind dark: classes
|
|
||||||
|
|
||||||
## Support
|
|
||||||
|
|
||||||
If you encounter issues:
|
|
||||||
1. Check Frappe logs: `bench logs`
|
|
||||||
2. Check browser console for frontend errors
|
|
||||||
3. Verify API responses in Network tab
|
|
||||||
4. Ensure all Dashboard Charts are properly configured in Frappe
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Created**: 2025-10-30
|
|
||||||
**Version**: 1.0
|
|
||||||
**Frontend**: React + TypeScript + Vite + TailwindCSS
|
|
||||||
**Backend**: Frappe v15+ with custom API module
|
|
||||||
|
|
||||||
@ -1,181 +0,0 @@
|
|||||||
# Deploy Asset API to Frappe Server
|
|
||||||
|
|
||||||
## Issue
|
|
||||||
When trying to create/edit/delete assets, you get an error: "Failed to save asset" or "Failed to create asset"
|
|
||||||
|
|
||||||
This happens because the Asset API endpoints are not deployed on your Frappe server yet.
|
|
||||||
|
|
||||||
## Solution
|
|
||||||
|
|
||||||
Follow these steps to deploy the Asset API:
|
|
||||||
|
|
||||||
### Step 1: SSH into Your Frappe Server
|
|
||||||
|
|
||||||
```bash
|
|
||||||
ssh user@seeraasm-med.seeraarabia.com
|
|
||||||
```
|
|
||||||
|
|
||||||
Replace `user` with your actual SSH username.
|
|
||||||
|
|
||||||
### Step 2: Navigate to the Asset Lite App API Directory
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd frappe-bench/apps/asset_lite/asset_lite/api/
|
|
||||||
```
|
|
||||||
|
|
||||||
If the `api` directory doesn't exist, create it:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
mkdir -p frappe-bench/apps/asset_lite/asset_lite/api/
|
|
||||||
cd frappe-bench/apps/asset_lite/asset_lite/api/
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 3: Create the Asset API File
|
|
||||||
|
|
||||||
Create a new file called `asset_api.py`:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
nano asset_api.py
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 4: Copy the API Code
|
|
||||||
|
|
||||||
Copy the **ENTIRE contents** of the file `frappe_asset_api.py` from your project folder and paste it into the editor.
|
|
||||||
|
|
||||||
The file contains these API endpoints:
|
|
||||||
- `get_assets` - Get list of assets with filters
|
|
||||||
- `get_asset_details` - Get details of a specific asset
|
|
||||||
- `create_asset` - Create a new asset
|
|
||||||
- `update_asset` - Update an existing asset
|
|
||||||
- `delete_asset` - Delete an asset
|
|
||||||
- `get_asset_filters` - Get filter options
|
|
||||||
- `get_asset_stats` - Get asset statistics
|
|
||||||
- `search_assets` - Search assets by keyword
|
|
||||||
|
|
||||||
### Step 5: Save and Exit
|
|
||||||
|
|
||||||
In nano:
|
|
||||||
- Press `Ctrl + O` (to save)
|
|
||||||
- Press `Enter` (to confirm)
|
|
||||||
- Press `Ctrl + X` (to exit)
|
|
||||||
|
|
||||||
### Step 6: Create __init__.py (if needed)
|
|
||||||
|
|
||||||
Make sure there's an `__init__.py` file in the api directory:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
touch __init__.py
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 7: Restart Frappe
|
|
||||||
|
|
||||||
Go back to the bench directory and restart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd ~/frappe-bench
|
|
||||||
bench restart
|
|
||||||
```
|
|
||||||
|
|
||||||
Or if using supervisor:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo supervisorctl restart all
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 8: Test the API
|
|
||||||
|
|
||||||
Open your browser console and try creating an asset again. You should now see detailed logs:
|
|
||||||
|
|
||||||
```
|
|
||||||
[useAssetMutations] Creating asset with data: {...}
|
|
||||||
[useAssetMutations] Create asset response: {...}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Verify Deployment
|
|
||||||
|
|
||||||
You can verify the API is deployed by checking if the endpoint exists:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
curl -X GET "https://seeraasm-med.seeraarabia.com/api/method/asset_lite.api.asset_api.get_assets?limit=1"
|
|
||||||
```
|
|
||||||
|
|
||||||
You should get a response (even if it's an authentication error, that means the endpoint exists).
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
### Error: "Module has no attribute 'asset_api'"
|
|
||||||
|
|
||||||
**Cause:** The file wasn't created in the right location or Frappe hasn't reloaded.
|
|
||||||
|
|
||||||
**Solution:**
|
|
||||||
1. Check the file exists: `ls -la ~/frappe-bench/apps/asset_lite/asset_lite/api/asset_api.py`
|
|
||||||
2. Restart Frappe: `cd ~/frappe-bench && bench restart`
|
|
||||||
|
|
||||||
### Error: "Not permitted to create asset"
|
|
||||||
|
|
||||||
**Cause:** Your user doesn't have permissions for the Asset doctype.
|
|
||||||
|
|
||||||
**Solution:**
|
|
||||||
1. Log in to Frappe desk as Administrator
|
|
||||||
2. Go to User Permissions
|
|
||||||
3. Grant your user "Create" permission for Asset doctype
|
|
||||||
|
|
||||||
### Error: "Asset doctype not found"
|
|
||||||
|
|
||||||
**Cause:** The Asset Lite app doesn't have an Asset doctype, or it's named differently.
|
|
||||||
|
|
||||||
**Solution:**
|
|
||||||
Check what doctypes are available:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd ~/frappe-bench
|
|
||||||
bench console
|
|
||||||
```
|
|
||||||
|
|
||||||
Then in the console:
|
|
||||||
|
|
||||||
```python
|
|
||||||
import frappe
|
|
||||||
frappe.get_all('DocType', filters={'module': 'Asset Lite'}, fields=['name'])
|
|
||||||
```
|
|
||||||
|
|
||||||
You may need to adjust the doctype name in the API code.
|
|
||||||
|
|
||||||
## Expected Behavior After Deployment
|
|
||||||
|
|
||||||
✅ **Create Asset:** Form data is saved, new asset is created with auto-generated ID
|
|
||||||
✅ **Edit Asset:** Changes are saved to existing asset
|
|
||||||
✅ **Delete Asset:** Asset is deleted after confirmation
|
|
||||||
✅ **Duplicate Asset:** New asset is created based on existing one
|
|
||||||
✅ **Export/Print:** Asset data is exported or printed
|
|
||||||
|
|
||||||
## Console Debugging
|
|
||||||
|
|
||||||
After deployment, when you try to save an asset, you should see in the browser console:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
[useAssetMutations] Creating asset with data: {
|
|
||||||
asset_name: "Test Asset",
|
|
||||||
company: "Test Company",
|
|
||||||
custom_asset_type: "Medical Equipment",
|
|
||||||
// ... other fields
|
|
||||||
}
|
|
||||||
|
|
||||||
[useAssetMutations] Create asset response: {
|
|
||||||
success: true,
|
|
||||||
asset: { name: "ACC-ASS-2025-00097", ... },
|
|
||||||
message: "Asset created successfully"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
If you see errors instead, they will now show the actual backend error message.
|
|
||||||
|
|
||||||
## Need Help?
|
|
||||||
|
|
||||||
If you continue having issues:
|
|
||||||
|
|
||||||
1. Check the Frappe error logs: `tail -f ~/frappe-bench/logs/error.log`
|
|
||||||
2. Check the worker logs: `tail -f ~/frappe-bench/logs/worker.error.log`
|
|
||||||
3. Verify your user has the correct permissions in Frappe
|
|
||||||
4. Make sure the Asset doctype exists in your Asset Lite app
|
|
||||||
|
|
||||||
@ -1,150 +0,0 @@
|
|||||||
# Backend Deployment Guide
|
|
||||||
|
|
||||||
## Quick Deploy
|
|
||||||
|
|
||||||
Copy the updated `frappe_dashboard_api.py` to your Frappe server:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Step 1: Copy file to Frappe app
|
|
||||||
scp frappe_dashboard_api.py user@your-server:/tmp/
|
|
||||||
|
|
||||||
# Step 2: SSH to server
|
|
||||||
ssh user@your-server
|
|
||||||
|
|
||||||
# Step 3: Move to correct location
|
|
||||||
cd /path/to/frappe-bench/apps/asset_lite
|
|
||||||
mkdir -p asset_lite/api
|
|
||||||
cp /tmp/frappe_dashboard_api.py asset_lite/api/dashboard_api.py
|
|
||||||
|
|
||||||
# Step 4: Restart Frappe
|
|
||||||
bench restart
|
|
||||||
|
|
||||||
# Step 5: Test the API
|
|
||||||
curl "https://seeraasm-med.seeraarabia.com/api/method/asset_lite.api.dashboard_api.get_number_cards"
|
|
||||||
```
|
|
||||||
|
|
||||||
## What This API Does
|
|
||||||
|
|
||||||
### 1. `get_number_cards()`
|
|
||||||
Returns counts for KPI cards:
|
|
||||||
- Total Assets
|
|
||||||
- Open Work Orders
|
|
||||||
- Work Orders In Progress
|
|
||||||
- Completed Work Orders
|
|
||||||
|
|
||||||
### 2. `list_dashboard_charts()`
|
|
||||||
Lists all public Dashboard Charts with their configuration
|
|
||||||
|
|
||||||
### 3. `get_dashboard_chart_data(chart_name, filters)`
|
|
||||||
**Supports BOTH:**
|
|
||||||
- **Report Charts** - Uses the Report's query and x/y field configuration
|
|
||||||
- **Custom Charts** - Queries the source doctype directly based on `based_on` and `value_based_on` fields
|
|
||||||
|
|
||||||
### 4. `get_repair_cost_by_item(year)`
|
|
||||||
Specialized endpoint for repair cost analysis
|
|
||||||
|
|
||||||
## What Was Fixed
|
|
||||||
|
|
||||||
### Issue 1: "Unknown column 'label'"
|
|
||||||
- ✅ Removed `label` field from queries
|
|
||||||
- ✅ Now only queries `y_field` and `color`
|
|
||||||
|
|
||||||
### Issue 2: "DashboardChart object has no attribute 'get_chart_data'"
|
|
||||||
- ✅ Replaced with custom SQL queries
|
|
||||||
- ✅ Reads `document_type`, `based_on`, `value_based_on` fields
|
|
||||||
- ✅ Builds appropriate GROUP BY queries
|
|
||||||
|
|
||||||
### Issue 3: Empty datasets
|
|
||||||
- ✅ Added proper error handling
|
|
||||||
- ✅ Logs errors to Frappe error log
|
|
||||||
- ✅ Returns meaningful error messages
|
|
||||||
|
|
||||||
## Chart Types Supported
|
|
||||||
|
|
||||||
### Report Charts (with "Use Report Chart" checked)
|
|
||||||
Examples from your Frappe:
|
|
||||||
- Up & Down Time Chart
|
|
||||||
- Work Order Status Chart
|
|
||||||
- PPM Status
|
|
||||||
- PPM Template Counts
|
|
||||||
- Repair Cost
|
|
||||||
|
|
||||||
**Configuration Required:**
|
|
||||||
- Chart Type: Report
|
|
||||||
- Report Name: Valid report name
|
|
||||||
- Use Report Chart: ✓ checked
|
|
||||||
- X Field: Field name for X-axis
|
|
||||||
- Y Axis: At least one row with y_field and color
|
|
||||||
|
|
||||||
### Custom Charts (DocType-based)
|
|
||||||
Examples from your Frappe:
|
|
||||||
- Maintenance - Asset wise Count
|
|
||||||
- Asset Maintenance Assignees Status Count
|
|
||||||
- Asset Maintenance Frequency Chart
|
|
||||||
|
|
||||||
**Configuration Required:**
|
|
||||||
- Chart Type: Custom
|
|
||||||
- Document Type: Source doctype (e.g., "Asset Maintenance")
|
|
||||||
- Based On: Field to group by (e.g., "assigned_to")
|
|
||||||
- Value Based On: Field to count (optional, defaults to "name")
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
### Charts still showing "No data"
|
|
||||||
|
|
||||||
1. **Check chart exists:**
|
|
||||||
```sql
|
|
||||||
SELECT name, chart_name, chart_type, document_type, based_on
|
|
||||||
FROM `tabDashboard Chart`
|
|
||||||
WHERE name = 'Up & Down Time Chart';
|
|
||||||
```
|
|
||||||
|
|
||||||
2. **Check if Public:**
|
|
||||||
```sql
|
|
||||||
SELECT name, is_public FROM `tabDashboard Chart`;
|
|
||||||
```
|
|
||||||
|
|
||||||
3. **Test API directly:**
|
|
||||||
```bash
|
|
||||||
# In browser (while logged in):
|
|
||||||
https://seeraasm-med.seeraarabia.com/api/method/asset_lite.api.dashboard_api.get_dashboard_chart_data?chart_name=Up%20%26%20Down%20Time%20Chart
|
|
||||||
```
|
|
||||||
|
|
||||||
4. **Check Frappe logs:**
|
|
||||||
```bash
|
|
||||||
bench logs
|
|
||||||
# or
|
|
||||||
tail -f logs/web.error.log
|
|
||||||
```
|
|
||||||
|
|
||||||
### API returns 404
|
|
||||||
- Backend file not copied to correct location
|
|
||||||
- App name is not `asset_lite` (update paths in API calls)
|
|
||||||
|
|
||||||
### API returns 500
|
|
||||||
- Check Frappe error logs
|
|
||||||
- Verify chart configuration matches what API expects
|
|
||||||
|
|
||||||
## Next Steps After Deploy
|
|
||||||
|
|
||||||
1. Deploy this file to your Frappe server
|
|
||||||
2. Restart: `bench restart`
|
|
||||||
3. Hard refresh your React dashboard (Ctrl+Shift+R)
|
|
||||||
4. Check browser console for data logs
|
|
||||||
5. Charts should now display with real data!
|
|
||||||
|
|
||||||
## Expected Console Output (Success)
|
|
||||||
|
|
||||||
After successful deployment, you should see:
|
|
||||||
```
|
|
||||||
Up & Down Time Chart data: {labels: ["up", "down"], datasets: [{values: [7092, 16]}], type: "Pie"}
|
|
||||||
Work Order Status Chart data: {labels: ["Open", "Completed"], datasets: [{values: [3, 2]}], type: "Bar"}
|
|
||||||
Maintenance - Asset wise Count data: {labels: ["Asset1", "Asset2"], datasets: [{values: [10, 5]}], type: "Bar"}
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**File to deploy:** `frappe_dashboard_api.py`
|
|
||||||
**Location:** `asset_lite/api/dashboard_api.py`
|
|
||||||
**Restart:** `bench restart`
|
|
||||||
|
|
||||||
@ -1,210 +0,0 @@
|
|||||||
# Charts Not Showing - Troubleshooting Guide
|
|
||||||
|
|
||||||
## Step 1: Check Browser Console
|
|
||||||
|
|
||||||
1. Open your browser's Developer Tools (F12)
|
|
||||||
2. Go to the **Console** tab
|
|
||||||
3. Look for error messages for each chart
|
|
||||||
4. Look for API call logs showing chart data
|
|
||||||
|
|
||||||
You should see logs like:
|
|
||||||
```
|
|
||||||
Up & Down Time Chart data: {labels: [...], datasets: [...]}
|
|
||||||
```
|
|
||||||
|
|
||||||
If you see errors instead, note them down.
|
|
||||||
|
|
||||||
## Step 2: Verify Backend API is Deployed
|
|
||||||
|
|
||||||
The Python file `frappe_dashboard_api.py` must be copied to your Frappe server:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# SSH to your Frappe server
|
|
||||||
cd frappe-bench/apps/asset_lite
|
|
||||||
|
|
||||||
# Create api directory if it doesn't exist
|
|
||||||
mkdir -p asset_lite/api
|
|
||||||
|
|
||||||
# Copy the file
|
|
||||||
cp /path/to/frappe_dashboard_api.py asset_lite/api/dashboard_api.py
|
|
||||||
|
|
||||||
# Restart Frappe
|
|
||||||
bench restart
|
|
||||||
```
|
|
||||||
|
|
||||||
## Step 3: Test API Directly
|
|
||||||
|
|
||||||
Open a new browser tab and try accessing the API directly:
|
|
||||||
|
|
||||||
### Test Number Cards
|
|
||||||
```
|
|
||||||
https://seeraasm-med.seeraarabia.com/api/method/asset_lite.api.dashboard_api.get_number_cards
|
|
||||||
```
|
|
||||||
|
|
||||||
**Expected Response:**
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"message": {
|
|
||||||
"total_assets": 7109,
|
|
||||||
"work_orders_open": 3,
|
|
||||||
"work_orders_in_progress": 1,
|
|
||||||
"work_orders_completed": 2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Test Chart Data
|
|
||||||
```
|
|
||||||
https://seeraasm-med.seeraarabia.com/api/method/asset_lite.api.dashboard_api.get_dashboard_chart_data?chart_name=Work%20Order%20Status%20Chart
|
|
||||||
```
|
|
||||||
|
|
||||||
**Expected Response:**
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"message": {
|
|
||||||
"labels": ["Open", "Completed", "Pending"],
|
|
||||||
"datasets": [{
|
|
||||||
"name": "Count",
|
|
||||||
"values": [10, 20, 5],
|
|
||||||
"color": "#4F46E5"
|
|
||||||
}],
|
|
||||||
"type": "Bar"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Step 4: Check Dashboard Chart Names
|
|
||||||
|
|
||||||
The chart names in React MUST match EXACTLY (including spaces and capitalization) with your Frappe Dashboard Chart docnames.
|
|
||||||
|
|
||||||
In Frappe, go to: **Desk → Dashboard Chart List**
|
|
||||||
|
|
||||||
Current names in React code:
|
|
||||||
- `Up & Down Time Chart`
|
|
||||||
- `Work Order Status Chart`
|
|
||||||
- `Maintenance - Asset wise Count`
|
|
||||||
- `Asset Maintenance Assignees Status Count`
|
|
||||||
- `Asset Maintenance Frequency Chart`
|
|
||||||
- `PPM Status`
|
|
||||||
- `PPM Template Counts`
|
|
||||||
|
|
||||||
If your Frappe charts have different names, update them in `ModernDashboard.tsx` line 12-18.
|
|
||||||
|
|
||||||
## Step 5: Verify Dashboard Chart Configuration
|
|
||||||
|
|
||||||
Each Dashboard Chart in Frappe must have:
|
|
||||||
|
|
||||||
1. **Chart Type:** "Report"
|
|
||||||
2. **Use Report Chart:** ✓ (checked)
|
|
||||||
3. **Report Name:** A valid report name
|
|
||||||
4. **X Field:** The field to use for X-axis (e.g., `status`, `item_name`)
|
|
||||||
5. **Y Axis Fields:** At least one entry in child table with:
|
|
||||||
- Y Field (e.g., `count`, `amount`)
|
|
||||||
- Color (e.g., `#4F46E5`)
|
|
||||||
- Label (e.g., `Count`)
|
|
||||||
6. **Is Public:** ✓ (checked) OR user has permission
|
|
||||||
|
|
||||||
## Step 6: Check Network Tab
|
|
||||||
|
|
||||||
1. Open Developer Tools (F12)
|
|
||||||
2. Go to **Network** tab
|
|
||||||
3. Refresh the dashboard page
|
|
||||||
4. Look for API calls to `get_dashboard_chart_data`
|
|
||||||
5. Click on each call and check:
|
|
||||||
- **Status Code:** Should be 200
|
|
||||||
- **Response:** Should contain chart data
|
|
||||||
|
|
||||||
### Common Errors:
|
|
||||||
|
|
||||||
**404 Not Found**
|
|
||||||
- Backend API file not deployed
|
|
||||||
- Endpoint path is wrong
|
|
||||||
|
|
||||||
**500 Internal Server Error**
|
|
||||||
- Chart doesn't exist in Frappe
|
|
||||||
- Report has an error
|
|
||||||
- Python code has a bug
|
|
||||||
|
|
||||||
**401 Unauthorized**
|
|
||||||
- Not logged in
|
|
||||||
- Session expired
|
|
||||||
|
|
||||||
**403 Forbidden**
|
|
||||||
- Chart is not Public
|
|
||||||
- User doesn't have permission
|
|
||||||
|
|
||||||
## Step 7: Quick Fixes
|
|
||||||
|
|
||||||
### If API endpoint doesn't exist (404):
|
|
||||||
```bash
|
|
||||||
# On Frappe server
|
|
||||||
cd frappe-bench/apps/asset_lite
|
|
||||||
ls -la asset_lite/api/ # Check if dashboard_api.py exists
|
|
||||||
bench restart
|
|
||||||
```
|
|
||||||
|
|
||||||
### If chart names don't match:
|
|
||||||
Edit `src/pages/ModernDashboard.tsx` and update chart names to match exactly.
|
|
||||||
|
|
||||||
### If charts are private:
|
|
||||||
In Frappe, for each Dashboard Chart:
|
|
||||||
1. Open the chart
|
|
||||||
2. Check **Is Public**
|
|
||||||
3. Save
|
|
||||||
|
|
||||||
### If using wrong report:
|
|
||||||
The backend expects Report-based charts. Regular charts won't work.
|
|
||||||
|
|
||||||
## Step 8: Enable Debug Mode
|
|
||||||
|
|
||||||
Add this to see what's being fetched:
|
|
||||||
|
|
||||||
Open `src/hooks/useApi.ts` and check if errors are being caught properly.
|
|
||||||
|
|
||||||
## Step 9: Test with Mock Data
|
|
||||||
|
|
||||||
Temporarily add mock data to verify charts render:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// In ModernDashboard.tsx, replace chart fetch with:
|
|
||||||
const mockData = {
|
|
||||||
labels: ['A', 'B', 'C'],
|
|
||||||
datasets: [{
|
|
||||||
name: 'Test',
|
|
||||||
values: [10, 20, 15],
|
|
||||||
color: '#4F46E5'
|
|
||||||
}],
|
|
||||||
type: 'Bar'
|
|
||||||
};
|
|
||||||
|
|
||||||
const { data: workOrderChart } = { data: mockData, loading: false, error: null };
|
|
||||||
```
|
|
||||||
|
|
||||||
If charts appear with mock data, the problem is the API. If not, it's the chart rendering logic.
|
|
||||||
|
|
||||||
## Step 10: Contact Support
|
|
||||||
|
|
||||||
If none of the above work, provide:
|
|
||||||
1. Browser console errors
|
|
||||||
2. Network tab screenshots showing API responses
|
|
||||||
3. Frappe Dashboard Chart configuration screenshots
|
|
||||||
4. Frappe error logs: `bench logs`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Quick Checklist
|
|
||||||
|
|
||||||
- [ ] `frappe_dashboard_api.py` copied to `asset_lite/api/dashboard_api.py`
|
|
||||||
- [ ] Frappe server restarted (`bench restart`)
|
|
||||||
- [ ] Chart names in React match Frappe exactly
|
|
||||||
- [ ] All charts are marked "Is Public" in Frappe
|
|
||||||
- [ ] Charts are "Report" type with "Use Report Chart" checked
|
|
||||||
- [ ] Each chart has X Field and Y Axis configured
|
|
||||||
- [ ] Can access API endpoint directly in browser
|
|
||||||
- [ ] Browser console shows no 404/500 errors
|
|
||||||
- [ ] Logged in user has permissions
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Most Common Issue:** Backend API file not deployed to Frappe server yet!
|
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user