format($format) === $date; } // Params $reportType = $_GET['type'] ?? 'countries_origin'; // countries_origin, countries_dest, cities_origin, cities_dest, shippers $startDate = $_GET['start_date'] ?? date('Y-m-01'); // Default to first day of current month $endDate = $_GET['end_date'] ?? date('Y-m-t'); // Default to last day of current month if (!validate_date($startDate)) $startDate = date('Y-m-01'); if (!validate_date($endDate)) $endDate = date('Y-m-t'); // Build Query $where = "s.payment_status = 'paid' AND DATE(s.created_at) BETWEEN ? AND ?"; $params = [$startDate, $endDate]; $groupBy = ''; $selectName = ''; $join = ''; $orderBy = 'total_amount DESC'; $pageTitle = t('shipments_by_origin_country'); switch ($reportType) { case 'countries_origin': $selectName = "COALESCE(co.name_en, 'Unknown') as name"; $join = "LEFT JOIN cities c ON s.origin_city = c.name_en LEFT JOIN countries co ON c.country_id = co.id"; $groupBy = "co.name_en"; $pageTitle = t('shipments_by_origin_country'); break; case 'countries_dest': $selectName = "COALESCE(co.name_en, 'Unknown') as name"; $join = "LEFT JOIN cities c ON s.destination_city = c.name_en LEFT JOIN countries co ON c.country_id = co.id"; $groupBy = "co.name_en"; $pageTitle = t('shipments_by_dest_country'); break; case 'cities_origin': $selectName = "s.origin_city as name"; $groupBy = "s.origin_city"; $pageTitle = t('shipments_by_origin_city'); break; case 'cities_dest': $selectName = "s.destination_city as name"; $groupBy = "s.destination_city"; $pageTitle = t('shipments_by_dest_city'); break; case 'shippers': $selectName = "s.shipper_name as name"; // simplified, could join users table $groupBy = "s.shipper_name"; $pageTitle = t('shipments_by_shipper'); break; default: $reportType = 'countries_origin'; $selectName = "COALESCE(co.name_en, 'Unknown') as name"; $join = "LEFT JOIN cities c ON s.origin_city = c.name_en LEFT JOIN countries co ON c.country_id = co.id"; $groupBy = "co.name_en"; $pageTitle = t('shipments_by_origin_country'); break; } $sql = " SELECT $selectName, COUNT(s.id) as shipment_count, SUM(s.total_price) as total_amount, SUM(s.platform_fee) as total_profit FROM shipments s $join WHERE $where GROUP BY $groupBy ORDER BY $orderBy "; try { $stmt = db()->prepare($sql); $stmt->execute($params); $results = $stmt->fetchAll(); } catch (PDOException $e) { $results = []; $error = "Database error: " . $e->getMessage(); } // Calculate totals for footer $totalShipments = 0; $grandTotalAmount = 0.0; $grandTotalProfit = 0.0; foreach ($results as $row) { $totalShipments += $row['shipment_count']; $grandTotalAmount += $row['total_amount']; $grandTotalProfit += $row['total_profit']; } render_header(t('summary_report'), 'reports_summary', true); ?>
= e(get_setting('company_address')) ?>
= e(get_setting('company_email')) ?> | = e(get_setting('company_phone')) ?>
= e(t('generated')) ?>: = date('d M Y, H:i') ?>
= e(t('analyze_performance')) ?>
= e(t('no_paid_shipments')) ?>
| = e(t('name')) ?> | = e(t('stats_shipments')) ?> | = e(t('total_amount')) ?> | = e(t('profit')) ?> |
|---|---|---|---|
| = e($row['name']) ?> | = number_format((int)$row['shipment_count']) ?> | = format_currency((float)$row['total_amount']) ?> | = format_currency((float)$row['total_profit']) ?> |
| = e(t('total_label')) ?> | = number_format($totalShipments) ?> | = format_currency($grandTotalAmount) ?> | = format_currency($grandTotalProfit) ?> |