Seera/DEPLOY_BACKEND.md
2025-11-03 13:38:27 +05:30

151 lines
4.0 KiB
Markdown

# 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`