Appearance
Reports
Overview
Reports provide analytics and insights into your business performance. View sales data, popular items, customer trends, and more.
Key Purpose: Analyze business performance with data and insights.
Purpose
This page lets you generate, view, and export analytical reports covering sales, items, categories, channels, customers, payments, loyalty, offers, inventory, and time-based performance across your locations.
Key Concepts
- Date Range Filtering: All reports accept a date range with presets (Today, Yesterday, Last 7 days, Last 30 days, This month, Last month) or a custom range; the backend defaults to the last 7 days when no range is specified.
- Location Scoping: Reports can be filtered by location; when a location is selected, the system uses that location's timezone and currency for aggregation and display.
- Completed Transactions Only: Revenue and order metrics are calculated exclusively from transactions with a "Complete" status, ensuring that pending, cancelled, or refunded orders do not inflate reported figures.
- Period Comparison: Reports support comparing the selected period against the previous period or the same period from the prior year, showing percentage changes for key metrics.
- Export Formats: Report data can be exported as CSV, Excel, or PDF; scheduled reports can also be delivered automatically via email on a daily, weekly, or monthly cadence.
Actions
Generate a Sales Report
View total revenue, order count, and average order value for a selected date range, broken down by day, week, month, channel, or dining option.
View Item Performance
Analyze which products sell the most by quantity and revenue, identify top sellers and underperformers, and review category-level performance.
Compare Periods
Select a comparison baseline (previous period or same period last year) to see percentage changes in revenue, order count, and average order value.
Export Report Data
Download the current report as CSV, Excel, or PDF for offline analysis, or configure a scheduled email delivery for recurring reports.
Filter by Channel or Location
Narrow report data to a specific order channel (Online Ordering, Kiosk, In-House, Deliveroo, Uber Eats) or a specific location to isolate performance metrics.
Location
- Backoffice Route:
/reports - Backend Controller:
app/Http/Controllers/Api/ReportController.php - Vue Component:
src/views/reports/index.vue
Report Types
Sales Report
| Property | Value |
|---|---|
| Route | /reports/sales |
| Description | Revenue and transaction data |
Metrics:
- Total revenue
- Number of orders
- Average order value
- Revenue by day/week/month
- Revenue by channel
- Revenue by dining option
Filters:
- Date range
- Location
- Channel
- Dining option
Items Report
| Property | Value |
|---|---|
| Route | /reports/items |
| Description | Product performance data |
Metrics:
- Items sold (quantity)
- Revenue per item
- Top selling items
- Least selling items
- Category performance
Filters:
- Date range
- Location
- Category
Category Report
| Property | Value |
|---|---|
| Route | /reports/categories |
| Description | Category performance data |
Metrics:
- Revenue by category
- Items sold by category
- Category percentage of total
- Category trends
Channel Report
| Property | Value |
|---|---|
| Route | /reports/channels |
| Description | Performance by order channel |
Metrics:
- Revenue by channel
- Orders by channel
- Average order value by channel
- Channel trends
Channels:
- Online Ordering
- Kiosk
- In-House/QR
- Deliveroo
- Uber Eats
Customer Report
| Property | Value |
|---|---|
| Route | /reports/customers |
| Description | Customer analytics |
Metrics:
- New customers
- Returning customers
- Customer lifetime value
- Order frequency
- Top customers
Payment Report
| Property | Value |
|---|---|
| Route | /reports/payments |
| Description | Payment method breakdown |
Metrics:
- Revenue by payment method
- Transaction count by method
- Refund totals
- Failed payment rate
Loyalty Report
| Property | Value |
|---|---|
| Route | /reports/loyalty |
| Description | Loyalty program analytics |
Metrics:
- Points issued
- Points redeemed
- Active loyalty members
- Redemption rate
- Points liability
Offer Report
| Property | Value |
|---|---|
| Route | /reports/offers |
| Description | Promotion performance |
Metrics:
- Discount given
- Coupon usage
- Offer redemptions
- Revenue impact
Inventory Report
| Property | Value |
|---|---|
| Route | /reports/inventory |
| Description | Stock and inventory data |
Metrics:
- Current stock levels
- Low stock items
- Stock movements
- Sold out incidents
Time Report
| Property | Value |
|---|---|
| Route | /reports/time |
| Description | Performance by time of day |
Metrics:
- Revenue by hour
- Orders by hour
- Peak hours
- Slow periods
Report Features
Date Range Selection
| Property | Value |
|---|---|
| Presets | Today, Yesterday, Last 7 days, Last 30 days, This month, Last month, Custom |
Description: Select time period for report data.
Comparison
| Property | Value |
|---|---|
| Options | Previous period, Same period last year |
Description: Compare current data to historical data.
Export
| Property | Value |
|---|---|
| Formats | CSV, Excel, PDF |
Description: Download report data for external analysis.
Scheduling
| Property | Value |
|---|---|
| Options | Daily, Weekly, Monthly |
Description: Automatically receive reports via email.
Business Logic
Data Aggregation
Report requested
│
▼
Query transactions for date range
│
▼
Apply filters (location, channel, etc.)
│
▼
Aggregate data:
├── Sum totals
├── Calculate averages
├── Group by dimension
└── Calculate percentages
│
▼
Return formatted reportReal-Time vs Historical
- Today: Real-time data, updates continuously
- Past dates: Cached/aggregated data, faster queries
Key Metrics Explained
Average Order Value (AOV)
AOV = Total Revenue / Number of Orders
Example:
Revenue: €5,000
Orders: 200
AOV: €25.00Customer Lifetime Value (CLV)
CLV = Average Order Value × Purchase Frequency × Customer Lifespan
Example:
AOV: €25
Frequency: 2 orders/month
Lifespan: 12 months
CLV: €25 × 2 × 12 = €600Repeat Customer Rate
Repeat Rate = Customers with 2+ orders / Total Customers
Example:
Total customers: 1,000
Repeat customers: 350
Rate: 35%Customer Impact
Reports don't directly affect customers but help merchants:
- Identify popular items
- Optimize pricing
- Plan staffing
- Improve marketing
- Manage inventory
Relations
Depends On
- Transactions: Order data
- Customers: Customer data
- Inventory: Stock data
- Loyalty: Points data
Affects
- Business decisions
- Menu optimization
- Marketing strategy
Related Features
Business Rules
- All revenue metrics (total amount, average order value) are computed only from transactions with a "Complete" status; incomplete or cancelled orders are excluded.
- When no date range is provided, the backend defaults to the last 7 days starting from the current date.
- Date filtering uses MongoDB date queries and respects the selected location's timezone; if the end date is today, no upper bound is applied so real-time data is included.
- The currency displayed in reports is determined by the selected location's currency setting; if no location is selected, the system default currency is used.
- Stats queries aggregate three core metrics in a single operation: completed transaction count, total item quantity, and total revenue sum.
FAQs
- "Why do my report totals not match my transaction list?" Reports only include transactions with a "Complete" status; any orders that are pending, cancelled, or refunded are excluded from revenue calculations.
- "Can I see real-time data for today?" Yes, when the selected end date is today, the backend does not apply an upper date bound, so all completed transactions up to the current moment are included.
- "How do I get reports automatically?" Configure scheduled report delivery under the Scheduling section; reports can be emailed daily, weekly, or monthly to specified recipients.
- "Why does the currency change between locations?" Each location has its own currency setting; when you filter a report by location, the report uses that location's currency for all monetary values.
- "What does the comparison feature compare against?" You can compare against the previous period of equal length (e.g., last 7 days vs the 7 days before that) or the same period from the previous year.
Troubleshooting
Problem: Report data seems incorrect
Causes:
- Wrong date range selected
- Filters applied
- Data sync delay
- Timezone issue
Solutions:
- Verify date range
- Check/clear filters
- Wait for sync
- Check timezone settings
Problem: Report loading slowly
Causes:
- Large date range
- Many transactions
- Complex filters
Solutions:
- Use smaller date range
- Wait for processing
- Simplify filters
Problem: Export not working
Causes:
- Too much data
- Browser blocking download
- Permission issue
Solutions:
- Reduce date range
- Allow downloads in browser
- Check user permissions
Examples
Daily Sales Summary
═══════════════════════════════════════
DAILY SALES REPORT
January 15, 2024
═══════════════════════════════════════
OVERVIEW
─────────────────────────────────────
Total Revenue: €1,245.50
Total Orders: 52
Average Order Value: €23.95
─────────────────────────────────────
BY CHANNEL
─────────────────────────────────────
Online Ordering: €687.00 (55.1%) 28 orders
Kiosk: €412.50 (33.1%) 18 orders
In-House: €146.00 (11.7%) 6 orders
─────────────────────────────────────
BY DINING OPTION
─────────────────────────────────────
Delivery: €523.00 (42.0%) 20 orders
Pickup: €476.50 (38.3%) 22 orders
Dine-in: €246.00 (19.7%) 10 orders
─────────────────────────────────────
TOP ITEMS
─────────────────────────────────────
1. Margherita Pizza 32 sold €400.00
2. Cheeseburger 28 sold €279.60
3. French Fries 45 sold €157.50
4. Cola 38 sold €95.00
5. Garlic Bread 22 sold €99.00
─────────────────────────────────────
COMPARISON (vs Yesterday)
─────────────────────────────────────
Revenue: +12.3% (€1,109.00 → €1,245.50)
Orders: +8.3% (48 → 52)
AOV: +3.7% (€23.10 → €23.95)
─────────────────────────────────────Weekly Performance
json
{
"period": "2024-01-08 to 2024-01-14",
"summary": {
"total_revenue": 8567.50,
"total_orders": 342,
"average_order_value": 25.05,
"new_customers": 45,
"returning_customers": 127
},
"daily_breakdown": [
{ "date": "2024-01-08", "revenue": 1023.50, "orders": 41 },
{ "date": "2024-01-09", "revenue": 987.00, "orders": 38 },
{ "date": "2024-01-10", "revenue": 1156.00, "orders": 45 },
{ "date": "2024-01-11", "revenue": 1234.50, "orders": 52 },
{ "date": "2024-01-12", "revenue": 1567.00, "orders": 63 },
{ "date": "2024-01-13", "revenue": 1678.50, "orders": 68 },
{ "date": "2024-01-14", "revenue": 921.00, "orders": 35 }
],
"top_items": [
{ "name": "Margherita Pizza", "quantity": 156, "revenue": 1950.00 },
{ "name": "Cheeseburger", "quantity": 134, "revenue": 1339.66 },
{ "name": "Caesar Salad", "quantity": 89, "revenue": 890.00 }
],
"channel_breakdown": {
"online_ordering": { "revenue": 4712.00, "orders": 188 },
"kiosk": { "revenue": 2856.50, "orders": 114 },
"in_house": { "revenue": 999.00, "orders": 40 }
}
}Scheduled Report Email
Subject: Weekly Sales Report - Mario's Restaurant
Hi,
Here's your weekly sales report for January 8-14, 2024.
📊 HIGHLIGHTS
• Total Revenue: €8,567.50 (+15% vs last week)
• Orders: 342 (+12% vs last week)
• Average Order: €25.05
🏆 TOP PERFORMER
Margherita Pizza - 156 sold (€1,950 revenue)
📈 TREND
Weekend sales up 23% compared to last weekend.
View full report: [Link to dashboard]
Best regards,
Upvendo Reports