Travel Exchange • Reports
HTML views with print-ready layout (A4)
Report error
(pymysql.err.OperationalError) (1525, "Incorrect DATE value: ''") [SQL: SELECT odp.id AS offer_day_product_id, o.id AS offer_id, o.branch_id, DATE(odp.odp_date_from) AS service_date, TIME_FORMAT(odp.pickup_time, '%%H:%%i') AS pickup_time_hm, TIME_FORMAT(odp.product_time, '%%H:%%i') AS flight_time_hm, TIME_FORMAT(odp.dropoff_time, '%%H:%%i') AS dropoff_time_hm, TRIM( CONCAT( COALESCE(NULLIF(odp.product_airline_code, ''), ''), CASE WHEN TRIM(COALESCE(odp.product_flight_num, '')) <> '' THEN CONCAT(' ', TRIM(odp.product_flight_num)) ELSE '' END ) ) AS flight_code, COALESCE(NULLIF(TRIM(odp.product_flight_num), ''), '') AS flight_num, COALESCE(NULLIF(TRIM(odp.product_airport_from_code), ''), '') AS airport_from_code, COALESCE(NULLIF(TRIM(odp.product_airport_to_code), ''), '') AS airport_to_code, CASE WHEN TRIM(COALESCE(odp.product_airline_code, '')) <> '' OR TRIM(COALESCE(odp.product_flight_num, '')) <> '' THEN TRIM( CONCAT( TRIM(COALESCE(odp.product_airline_code, '')), ' ', TRIM(COALESCE(odp.product_flight_num, '')) ) ) ELSE 'NO FLIGHT' END AS flight_display, CASE WHEN TRIM(COALESCE(odp.product_airport_from_code, '')) <> '' AND TRIM(COALESCE(odp.product_airport_to_code, '')) <> '' THEN CONCAT(TRIM(odp.product_airport_from_code), ' → ', TRIM(odp.product_airport_to_code)) WHEN TRIM(COALESCE(odp.product_airport_from_code, '')) <> '' THEN TRIM(odp.product_airport_from_code) WHEN TRIM(COALESCE(odp.product_airport_to_code, '')) <> '' THEN TRIM(odp.product_airport_to_code) ELSE '' END AS flight_leg, CONCAT( ' ', TRIM(COALESCE(odp.product_airline_code, '')), ' ', TRIM(COALESCE(odp.product_flight_num, '')), ' ', TRIM(COALESCE(odp.product_airport_from_code, '')), CASE WHEN TIME_FORMAT(odp.product_time, '%%H:%%i') IS NOT NULL THEN CONCAT(' (', TIME_FORMAT(odp.product_time, '%%H:%%i'), ')') ELSE '' END, ' - ', TRIM(COALESCE(odp.product_airport_to_code, '')), ' ' ) AS flight_csv_display, CASE WHEN LOWER(TRIM(COALESCE(odp.pickup_type, ''))) LIKE '%%hotel%%' THEN COALESCE( NULLIF(TRIM(d_pick_direct.name), ''), NULLIF(TRIM(odp.division_name), ''), '—' ) WHEN LOWER(TRIM(COALESCE(odp.dropoff_type, ''))) LIKE '%%hotel%%' THEN COALESCE( NULLIF(TRIM(d_drop_direct.name), ''), NULLIF(TRIM(odp.division_name), ''), '—' ) WHEN COALESCE(odp.is_incoming_fd, 0) = 1 THEN COALESCE( NULLIF(TRIM(l_drop.name), ''), NULLIF(TRIM(l_pick.name), ''), '—' ) WHEN COALESCE(odp.is_outgoing_fd, 0) = 1 THEN COALESCE( NULLIF(TRIM(l_pick.name), ''), NULLIF(TRIM(l_drop.name), ''), '—' ) ELSE COALESCE( NULLIF(TRIM(l_pick.name), ''), NULLIF(TRIM(l_drop.name), ''), '—' ) END AS hotel_name, COALESCE(NULLIF(TRIM(o.pax_name), ''), NULLIF(TRIM(odp.product_pax_name), ''), '—') AS passenger_name, o.file_number, o.ref_number, o.offer_status_id, COALESCE(NULLIF(TRIM(os.name), ''), CONCAT('Status #', o.offer_status_id)) AS offer_status_name, o.client_id, COALESCE(NULLIF(TRIM(c.name), ''), '—') AS client_name, o.client_brand_id, COALESCE(NULLIF(TRIM(cb.name), ''), '') AS client_brand_name, COALESCE(NULLIF(TRIM(cb.code), ''), '') AS client_brand_code, odp.supplier_id, COALESCE(NULLIF(TRIM(s.name), ''), '—') AS supplier_name, COALESCE(NULLIF(TRIM(odp.hotel_room_number), ''), '') AS hotel_room_number, COALESCE(NULLIF(TRIM(tc.name), ''), NULLIF(TRIM(p.name), ''), NULLIF(TRIM(odp.product_name), ''), NULLIF(TRIM(odp.service_group_name), ''), '') AS category_name, COALESCE(NULLIF(TRIM(odp.pickup_name), ''), '') AS pickup_type, COALESCE(NULLIF(TRIM(odp.product_name), ''), NULLIF(TRIM(odp.service_group_name), ''), '') AS service_name, '' AS comments, COALESCE(odp.pax_no, o.pax_no, 0) AS pax_total, COALESCE(odp.pax_adults, o.pax_adults, 0) AS adults, COALESCE(odp.pax_children, o.pax_children, 0) AS children, COALESCE(odp.pax_infants, o.pax_infants, 0) AS infants, COALESCE(odp.is_outgoing_fd, 0) AS is_outgoing_fd, COALESCE(odp.is_outgoing_fd_ignore, 0) AS is_outgoing_fd_ignore, COALESCE(odp.is_incoming_fd, 0) AS is_incoming_fd, COALESCE(odp.is_transfer_ignore, 0) AS is_transfer_ignore, COALESCE(NULLIF(TRIM(odp.is_transfer_ignore_reason), ''), '') AS is_transfer_ignore_reason, COALESCE(NULLIF(TRIM(odp.service_group_name), ''), '') AS service_group_name, COALESCE(NULLIF(TRIM(odp.product_name), ''), '') AS product_name, COALESCE(NULLIF(TRIM(odp.product_description), ''), '') AS product_description, COALESCE(NULLIF(TRIM(odp.division_name), ''), '') AS division_name, CASE WHEN LOWER(CONCAT_WS(' ', COALESCE(c.name, ''), COALESCE(cb.name, ''), COALESCE(cb.code, ''))) LIKE '%%bye bye%%' OR LOWER(CONCAT_WS(' ', COALESCE(c.name, ''), COALESCE(cb.name, ''), COALESCE(cb.code, ''))) LIKE '%%byebye%%' THEN 'Byebye' WHEN LOWER(CONCAT_WS(' ', COALESCE(c.name, ''), COALESCE(cb.name, ''), COALESCE(cb.code, ''))) LIKE '%%alltours%%' OR LOWER(CONCAT_WS(' ', COALESCE(c.name, ''), COALESCE(cb.name, ''), COALESCE(cb.code, ''))) LIKE '%%allt%%' THEN 'Alltours' ELSE 'Other' END AS operator_bucket, CASE WHEN COALESCE(odp.is_incoming_fd, 0) = 1 THEN 'arrival' WHEN COALESCE(odp.is_outgoing_fd, 0) = 1 THEN 'departure' ELSE 'unknown' END AS direction, CASE WHEN odp.pickup_time IS NULL THEN 1 ELSE 0 END AS pickup_missing FROM offer_day_products odp INNER JOIN offers o ON o.id = odp.offer_id LEFT JOIN offer_statuses os ON os.id = o.offer_status_id LEFT JOIN clients c ON c.id = o.client_id LEFT JOIN client_brands cb ON cb.id = o.client_brand_id LEFT JOIN suppliers s ON s.id = odp.supplier_id LEFT JOIN products p ON p.id = odp.product_id LEFT JOIN transfer_categories tc ON tc.id = p.transfer_category_id /* pickup/dropoff resolution by type */ LEFT JOIN divisions d_pick_direct ON d_pick_direct.id = odp.pickup_id LEFT JOIN locations l_pick ON l_pick.id = odp.pickup_id LEFT JOIN divisions d_drop_direct ON d_drop_direct.id = odp.dropoff_id LEFT JOIN locations l_drop ON l_drop.id = odp.dropoff_id WHERE 1 = 1 AND odp.service_group_id = 3 AND COALESCE(odp.is_optional, 0) = 0 AND (%(date_from)s IS NULL OR odp.odp_date_from >= %(date_from)s) AND (%(date_to)s IS NULL OR odp.odp_date_from <= %(date_to)s) AND (%(branch_id)s IS NULL OR o.branch_id = %(branch_id)s) ORDER BY service_date, flight_display, pickup_time_hm, hotel_name, ref_number, offer_day_product_id;] [parameters: {'date_from': '', 'date_to': '', 'branch_id': None}] (Background on this error at: https://sqlalche.me/e/20/e3q8)
Check DATABASE_URL and, if needed, adjust SQL in app/blueprints/reports/queries/.
Alltours Pick Ups
Flexible grouping by hotel, flight or date • GDPR-safe view without passenger names
From:
To:
Department: All departments
Current view 0 rows · 0 flights · 0 hotels · 0 pax · By hotel · Detailed rows
Department: All departments All Operators Active only By hotel Detailed rows
Quick presets One click for the common views, then tweak anything manually.
(All hotels)
Search and pick one exact hotel or pickup point from the current result set.
Rows0
Flights0
Hotels0
Pax0
Adults0
Children0
Infants0
GDPR mode is active for pick up lists. Passenger names are hidden in screen, print and Word export.
Report error
(pymysql.err.OperationalError) (1525, "Incorrect DATE value: ''") [SQL: SELECT odp.id AS offer_day_product_id, o.id AS offer_id, o.branch_id, DATE(odp.odp_date_from) AS service_date, TIME_FORMAT(odp.pickup_time, '%%H:%%i') AS pickup_time_hm, TIME_FORMAT(odp.product_time, '%%H:%%i') AS flight_time_hm, TIME_FORMAT(odp.dropoff_time, '%%H:%%i') AS dropoff_time_hm, TRIM( CONCAT( COALESCE(NULLIF(odp.product_airline_code, ''), ''), CASE WHEN TRIM(COALESCE(odp.product_flight_num, '')) <> '' THEN CONCAT(' ', TRIM(odp.product_flight_num)) ELSE '' END ) ) AS flight_code, COALESCE(NULLIF(TRIM(odp.product_flight_num), ''), '') AS flight_num, COALESCE(NULLIF(TRIM(odp.product_airport_from_code), ''), '') AS airport_from_code, COALESCE(NULLIF(TRIM(odp.product_airport_to_code), ''), '') AS airport_to_code, CASE WHEN TRIM(COALESCE(odp.product_airline_code, '')) <> '' OR TRIM(COALESCE(odp.product_flight_num, '')) <> '' THEN TRIM( CONCAT( TRIM(COALESCE(odp.product_airline_code, '')), ' ', TRIM(COALESCE(odp.product_flight_num, '')) ) ) ELSE 'NO FLIGHT' END AS flight_display, CASE WHEN TRIM(COALESCE(odp.product_airport_from_code, '')) <> '' AND TRIM(COALESCE(odp.product_airport_to_code, '')) <> '' THEN CONCAT(TRIM(odp.product_airport_from_code), ' → ', TRIM(odp.product_airport_to_code)) WHEN TRIM(COALESCE(odp.product_airport_from_code, '')) <> '' THEN TRIM(odp.product_airport_from_code) WHEN TRIM(COALESCE(odp.product_airport_to_code, '')) <> '' THEN TRIM(odp.product_airport_to_code) ELSE '' END AS flight_leg, CONCAT( ' ', TRIM(COALESCE(odp.product_airline_code, '')), ' ', TRIM(COALESCE(odp.product_flight_num, '')), ' ', TRIM(COALESCE(odp.product_airport_from_code, '')), CASE WHEN TIME_FORMAT(odp.product_time, '%%H:%%i') IS NOT NULL THEN CONCAT(' (', TIME_FORMAT(odp.product_time, '%%H:%%i'), ')') ELSE '' END, ' - ', TRIM(COALESCE(odp.product_airport_to_code, '')), ' ' ) AS flight_csv_display, CASE WHEN LOWER(TRIM(COALESCE(odp.pickup_type, ''))) LIKE '%%hotel%%' THEN COALESCE( NULLIF(TRIM(d_pick_direct.name), ''), NULLIF(TRIM(odp.division_name), ''), '—' ) WHEN LOWER(TRIM(COALESCE(odp.dropoff_type, ''))) LIKE '%%hotel%%' THEN COALESCE( NULLIF(TRIM(d_drop_direct.name), ''), NULLIF(TRIM(odp.division_name), ''), '—' ) WHEN COALESCE(odp.is_incoming_fd, 0) = 1 THEN COALESCE( NULLIF(TRIM(l_drop.name), ''), NULLIF(TRIM(l_pick.name), ''), '—' ) WHEN COALESCE(odp.is_outgoing_fd, 0) = 1 THEN COALESCE( NULLIF(TRIM(l_pick.name), ''), NULLIF(TRIM(l_drop.name), ''), '—' ) ELSE COALESCE( NULLIF(TRIM(l_pick.name), ''), NULLIF(TRIM(l_drop.name), ''), '—' ) END AS hotel_name, COALESCE(NULLIF(TRIM(o.pax_name), ''), NULLIF(TRIM(odp.product_pax_name), ''), '—') AS passenger_name, o.file_number, o.ref_number, o.offer_status_id, COALESCE(NULLIF(TRIM(os.name), ''), CONCAT('Status #', o.offer_status_id)) AS offer_status_name, o.client_id, COALESCE(NULLIF(TRIM(c.name), ''), '—') AS client_name, o.client_brand_id, COALESCE(NULLIF(TRIM(cb.name), ''), '') AS client_brand_name, COALESCE(NULLIF(TRIM(cb.code), ''), '') AS client_brand_code, odp.supplier_id, COALESCE(NULLIF(TRIM(s.name), ''), '—') AS supplier_name, COALESCE(NULLIF(TRIM(odp.hotel_room_number), ''), '') AS hotel_room_number, COALESCE(NULLIF(TRIM(tc.name), ''), NULLIF(TRIM(p.name), ''), NULLIF(TRIM(odp.product_name), ''), NULLIF(TRIM(odp.service_group_name), ''), '') AS category_name, COALESCE(NULLIF(TRIM(odp.pickup_name), ''), '') AS pickup_type, COALESCE(NULLIF(TRIM(odp.product_name), ''), NULLIF(TRIM(odp.service_group_name), ''), '') AS service_name, '' AS comments, COALESCE(odp.pax_no, o.pax_no, 0) AS pax_total, COALESCE(odp.pax_adults, o.pax_adults, 0) AS adults, COALESCE(odp.pax_children, o.pax_children, 0) AS children, COALESCE(odp.pax_infants, o.pax_infants, 0) AS infants, COALESCE(odp.is_outgoing_fd, 0) AS is_outgoing_fd, COALESCE(odp.is_outgoing_fd_ignore, 0) AS is_outgoing_fd_ignore, COALESCE(odp.is_incoming_fd, 0) AS is_incoming_fd, COALESCE(odp.is_transfer_ignore, 0) AS is_transfer_ignore, COALESCE(NULLIF(TRIM(odp.is_transfer_ignore_reason), ''), '') AS is_transfer_ignore_reason, COALESCE(NULLIF(TRIM(odp.service_group_name), ''), '') AS service_group_name, COALESCE(NULLIF(TRIM(odp.product_name), ''), '') AS product_name, COALESCE(NULLIF(TRIM(odp.product_description), ''), '') AS product_description, COALESCE(NULLIF(TRIM(odp.division_name), ''), '') AS division_name, CASE WHEN LOWER(CONCAT_WS(' ', COALESCE(c.name, ''), COALESCE(cb.name, ''), COALESCE(cb.code, ''))) LIKE '%%bye bye%%' OR LOWER(CONCAT_WS(' ', COALESCE(c.name, ''), COALESCE(cb.name, ''), COALESCE(cb.code, ''))) LIKE '%%byebye%%' THEN 'Byebye' WHEN LOWER(CONCAT_WS(' ', COALESCE(c.name, ''), COALESCE(cb.name, ''), COALESCE(cb.code, ''))) LIKE '%%alltours%%' OR LOWER(CONCAT_WS(' ', COALESCE(c.name, ''), COALESCE(cb.name, ''), COALESCE(cb.code, ''))) LIKE '%%allt%%' THEN 'Alltours' ELSE 'Other' END AS operator_bucket, CASE WHEN COALESCE(odp.is_incoming_fd, 0) = 1 THEN 'arrival' WHEN COALESCE(odp.is_outgoing_fd, 0) = 1 THEN 'departure' ELSE 'unknown' END AS direction, CASE WHEN odp.pickup_time IS NULL THEN 1 ELSE 0 END AS pickup_missing FROM offer_day_products odp INNER JOIN offers o ON o.id = odp.offer_id LEFT JOIN offer_statuses os ON os.id = o.offer_status_id LEFT JOIN clients c ON c.id = o.client_id LEFT JOIN client_brands cb ON cb.id = o.client_brand_id LEFT JOIN suppliers s ON s.id = odp.supplier_id LEFT JOIN products p ON p.id = odp.product_id LEFT JOIN transfer_categories tc ON tc.id = p.transfer_category_id /* pickup/dropoff resolution by type */ LEFT JOIN divisions d_pick_direct ON d_pick_direct.id = odp.pickup_id LEFT JOIN locations l_pick ON l_pick.id = odp.pickup_id LEFT JOIN divisions d_drop_direct ON d_drop_direct.id = odp.dropoff_id LEFT JOIN locations l_drop ON l_drop.id = odp.dropoff_id WHERE 1 = 1 AND odp.service_group_id = 3 AND COALESCE(odp.is_optional, 0) = 0 AND (%(date_from)s IS NULL OR odp.odp_date_from >= %(date_from)s) AND (%(date_to)s IS NULL OR odp.odp_date_from <= %(date_to)s) AND (%(branch_id)s IS NULL OR o.branch_id = %(branch_id)s) ORDER BY service_date, flight_display, pickup_time_hm, hotel_name, ref_number, offer_day_product_id;] [parameters: {'date_from': '', 'date_to': '', 'branch_id': None}] (Background on this error at: https://sqlalche.me/e/20/e3q8)