Skip to content

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

PropertyValue
Route/reports/sales
DescriptionRevenue 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

PropertyValue
Route/reports/items
DescriptionProduct performance data

Metrics:

  • Items sold (quantity)
  • Revenue per item
  • Top selling items
  • Least selling items
  • Category performance

Filters:

  • Date range
  • Location
  • Category

Category Report

PropertyValue
Route/reports/categories
DescriptionCategory performance data

Metrics:

  • Revenue by category
  • Items sold by category
  • Category percentage of total
  • Category trends

Channel Report

PropertyValue
Route/reports/channels
DescriptionPerformance 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

PropertyValue
Route/reports/customers
DescriptionCustomer analytics

Metrics:

  • New customers
  • Returning customers
  • Customer lifetime value
  • Order frequency
  • Top customers

Payment Report

PropertyValue
Route/reports/payments
DescriptionPayment method breakdown

Metrics:

  • Revenue by payment method
  • Transaction count by method
  • Refund totals
  • Failed payment rate

Loyalty Report

PropertyValue
Route/reports/loyalty
DescriptionLoyalty program analytics

Metrics:

  • Points issued
  • Points redeemed
  • Active loyalty members
  • Redemption rate
  • Points liability

Offer Report

PropertyValue
Route/reports/offers
DescriptionPromotion performance

Metrics:

  • Discount given
  • Coupon usage
  • Offer redemptions
  • Revenue impact

Inventory Report

PropertyValue
Route/reports/inventory
DescriptionStock and inventory data

Metrics:

  • Current stock levels
  • Low stock items
  • Stock movements
  • Sold out incidents

Time Report

PropertyValue
Route/reports/time
DescriptionPerformance by time of day

Metrics:

  • Revenue by hour
  • Orders by hour
  • Peak hours
  • Slow periods

Report Features

Date Range Selection

PropertyValue
PresetsToday, Yesterday, Last 7 days, Last 30 days, This month, Last month, Custom

Description: Select time period for report data.


Comparison

PropertyValue
OptionsPrevious period, Same period last year

Description: Compare current data to historical data.


Export

PropertyValue
FormatsCSV, Excel, PDF

Description: Download report data for external analysis.


Scheduling

PropertyValue
OptionsDaily, 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 report

Real-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.00

Customer 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 = €600

Repeat 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

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:

  1. Wrong date range selected
  2. Filters applied
  3. Data sync delay
  4. Timezone issue

Solutions:

  1. Verify date range
  2. Check/clear filters
  3. Wait for sync
  4. Check timezone settings

Problem: Report loading slowly

Causes:

  1. Large date range
  2. Many transactions
  3. Complex filters

Solutions:

  1. Use smaller date range
  2. Wait for processing
  3. Simplify filters

Problem: Export not working

Causes:

  1. Too much data
  2. Browser blocking download
  3. Permission issue

Solutions:

  1. Reduce date range
  2. Allow downloads in browser
  3. 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