The Automated Daily Executive Summary digest automatically compiles an end-of-day overview of business performance and delivers it directly to organization owners, executives, and managers via Email, SMS, or Both.
Overview
Staying informed about day-to-day retail and accounting performance shouldn't require manually pulling reports or logging in late at night. The Automated Daily Summary compiles all critical daily metrics as soon as the business day winds down.
Key Highlights
- Decoupled Delivery Schedule: Configurable delivery time (e.g.
21:00) independent of physical cashier shift closures or store operating hours. - Multi-Channel Dispatch: Send responsive, beautifully styled HTML emails, ultra-compact SMS messages, or both simultaneously.
- Smart Formatting: Fully respects the organization's regional settings, including Date Format (
Do MMMM YYYY,DD/MM/YYYY, etc.), Timezone, and Currency Symbol & Decimals. - Stock Tracking Awareness: Automatically respects the organization's
allow_stock_trackingpreference. If stock tracking is disabled for service-based businesses, inventory health warnings are gracefully suppressed. - Automated Deduplication: Enforces unique logging per day to prevent duplicate dispatches during recurring cron sweeps.
- Instant Test Dispatch: Test summary compilation and delivery on demand with a single click from the settings interface.
Accessing Configuration
- Navigate to Settings in the main sidebar.
- Click on Preferences.
- Scroll to the Daily Summary Digest card (marked with an envelope icon).
Configuration Settings
| Setting | Type | Options / Format | Default | Description |
|---|---|---|---|---|
| Automated Daily Summary Digest | Toggle | ON / OFF |
OFF |
Master switch to enable or disable automatic daily compilation and dispatch. |
| Delivery Channel | Select | Email Only, SMS Only, Email and SMS (Both) |
Both |
The channel(s) through which the daily summary will be sent. |
| Daily Delivery Time | Time | HH:MM (24-hour, e.g. 21:00) |
21:00 |
The local time of day when the digest should be generated and dispatched. |
| Active Days of Week | Select | Every Day (Mon - Sun), Monday - Saturday, Monday - Friday |
Mon - Sat |
Select which days of the week summaries should be delivered. |
| Recipient Email Addresses | Text | Comma-separated emails (e.g. ceo@example.com, manager@example.com) |
Org Email | Optional custom recipient email addresses. Defaults to organization email if left blank. |
| Recipient Phone Numbers | Text | Comma-separated phones (e.g. +233240000000, +233200000000) |
Org Phone | Optional custom recipient phone numbers for SMS delivery. Defaults to organization phone if left blank. |
What is Included in the Digest?
The Daily Executive Summary aggregates six core areas:
1. Sales & Invoices
- Total net sales revenue for the day.
- Order volume breakdown: Count of finalized sales receipts vs. issued invoices.
2. Payment Collections by Mode
- Total cash and digital payments received today (
payment_intransactions). - Breakdown grouped by payment method (e.g. Cash, MTN Mobile Money, Telecel Cash, Bank Transfer, POS Terminal).
- Transaction count per payment mode.
3. Expenses & Net Cash Flow
- Net expenses incurred on the date.
- Estimated net operational cash/digital flow (
Collections - Expenses).
4. Cashier Shift Handover
- Total physical cash submitted by cashiers/tellers to vault or bank verification.
- Handover verification status (indicates whether cash is verified or pending manager audit).
5. Inventory Health Alerts (Retail / Stock Businesses)
- Count of out-of-stock items requiring restocking.
- Count of items currently below their reorder threshold (
restock). - Note: Omitted automatically if
Enable Stock Trackingis disabled.
6. Top Performing Products
- The top 3 revenue-generating products sold today, with total quantity sold and gross revenue.
Testing Delivery On-Demand
You can preview and test your daily summary configuration at any time without waiting for the scheduled cron run:
- In Settings > Preferences, locate the Daily Summary Digest card.
- Click the purple "Send Test Summary" button in the card header.
- The system will compile metrics for the current day and immediately dispatch the summary via your configured channels.
- A notification toast will confirm successful delivery or alert you if any delivery credentials (e.g., SMTP or SMS credits) need attention.
Production Deployment Guide
In production environments, the summary is processed by the scheduled runner:
cron/send_daily_summary.php
How the Runner Works
- The script evaluates all active organizations where
enable_daily_summaryis enabled. - It computes current local time in each organization's configured Timezone (
organizations.timezone). - If the current local time has reached or passed the configured
daily_summary_timeand the current day is an active delivery day, it dispatches the summary. - Strict deduplication ensures that each organization receives at most one scheduled summary per date.
Option A: Linux Crontab (Recommended)
Add a cron entry on your Linux/cPanel server to execute every 15 minutes:
# Open crontab editor
crontab -e
# Add execution entry (run every 15 minutes)
*/15 * * * * /usr/bin/php /var/www/html/qobooks/cron/send_daily_summary.php >> /var/log/qobooks_daily_summary.log 2>&1
Tip: Replace
/usr/bin/phpwith your server's actual PHP CLI path (runwhich phpto check) and/var/www/html/qobookswith your actual project root.
Option B: Windows Task Scheduler
If hosting on Windows Server or local WAMP/IIS:
- Open Task Scheduler (
taskschd.msc). - Click Create Task and name it
QoBooks Daily Summary Processor. - Set Security Options to Run whether user is logged on or not.
- Under Triggers, click New:
- Begin the task: On a schedule.
- Settings: Daily.
- Advanced settings: Check Repeat task every: 15 minutes for a duration of 1 day.
- Under Actions, click New:
- Action: Start a program.
- Program/script:
C:\wamp64\bin\php\php8.x.x\php.exe - Add arguments:
C:\wamp64\www\qobooks\cron\send_daily_summary.php
- Save and test by right-clicking the task and choosing Run.
Option C: External Web-Cron Services (EasyCron, UptimeRobot, Cloudflare Workers)
If your hosting environment restricts CLI crontab access, you can trigger the runner via HTTP:
- Set a secret token in your environment or configuration:
// In config or .env define('CRON_SECRET', 'your-secure-random-token-here'); - Configure your external cron service to call the endpoint every 15 minutes:
GET https://your-domain.com/cron/send_daily_summary.php?token=your-secure-random-token-here
Requests without the matching token or CLI environment will receive a 403 Forbidden response to protect against unauthorized triggers.
Troubleshooting & Best Practices
1. Emails Not Delivering
- Verify SMTP settings under Settings > Notifications.
- Test SMTP connection using the built-in email test tool.
- Check spam/junk folders and ensure your sender domain has proper SPF, DKIM, and DMARC DNS records.
2. SMS Messages Not Delivering
- Check available SMS credits in Integrations > Hubtel or the SMS helper balance.
- Ensure phone numbers include country code format (e.g.
+233240000000).
3. Summary Sending at Wrong Time
- Verify the organization's timezone in Settings > Organization.
- Ensure the server clock is synchronized with NTP (
timedatectlor Windows Time Service).
4. Database Audit & Logs
- All dispatches and status codes are stored in the database table:
SELECT * FROM daily_summary_logs ORDER BY id DESC LIMIT 10; - The log records
channel,email_recipients,phone_recipients,sales_total,collections_total,expenses_total,status(sent,partial,failed), and anyerror_message.