package exports import ( "net/http" "strings" "time" "github.com/rs/zerolog/log" ) func (h *Handler) OrganizedCarpoolBookings(w http.ResponseWriter, r *http.Request) { // Parse query parameters var startDate, endDate *time.Time if startDateStr := r.URL.Query().Get("start_date"); startDateStr != "" { if parsed, err := time.Parse("2006-01-02", startDateStr); err == nil { startDate = &parsed } } if endDateStr := r.URL.Query().Get("end_date"); endDateStr != "" { if parsed, err := time.Parse("2006-01-02", endDateStr); err == nil { endDate = &parsed } } status := r.URL.Query().Get("status") driverID := r.URL.Query().Get("driver_id") // Parse geography parameters departureGeo := r.URL.Query().Get("departure_geo") destinationGeo := r.URL.Query().Get("destination_geo") passengerAddressGeo := r.URL.Query().Get("passenger_address_geo") departureGeoLayer, departureGeoCode := "", "" if departureGeo != "" { parts := strings.SplitN(departureGeo, ":", 2) if len(parts) == 2 { departureGeoLayer, departureGeoCode = parts[0], parts[1] } } destinationGeoLayer, destinationGeoCode := "", "" if destinationGeo != "" { parts := strings.SplitN(destinationGeo, ":", 2) if len(parts) == 2 { destinationGeoLayer, destinationGeoCode = parts[0], parts[1] } } passengerAddressGeoLayer, passengerAddressGeoCode := "", "" if passengerAddressGeo != "" { parts := strings.SplitN(passengerAddressGeo, ":", 2) if len(parts) == 2 { passengerAddressGeoLayer, passengerAddressGeoCode = parts[0], parts[1] } } // Get bookings data result, err := h.applicationHandler.GetOrganizedCarpoolBookings(r.Context(), startDate, endDate, status, driverID, departureGeoLayer, departureGeoCode, destinationGeoLayer, destinationGeoCode, passengerAddressGeoLayer, passengerAddressGeoCode) if err != nil { log.Error().Err(err).Msg("Failed to get organized carpool bookings") w.WriteHeader(http.StatusInternalServerError) return } // Render to Excel h.renderer.XLSX.OrganizedCarpoolBookings(w, result) } func (h *Handler) OrganizedCarpoolDrivers(w http.ResponseWriter, r *http.Request) { // Parse query parameters - same as web page archivedFilter := r.URL.Query().Get("archived") == "true" driverAddressGeo := r.URL.Query().Get("driver_address_geo") // Parse driver address geography parameter driverAddressGeoLayer, driverAddressGeoCode := "", "" if driverAddressGeo != "" { parts := strings.SplitN(driverAddressGeo, ":", 2) if len(parts) == 2 { driverAddressGeoLayer, driverAddressGeoCode = parts[0], parts[1] } } // Get drivers data through overview (same as web page) result, err := h.applicationHandler.GetOrganizedCarpoolOverview( r.Context(), "", "", "", "", "", "", "", "", "", "", // booking filters (empty) "", "", "", "", "", "", "", "", "", "", // history booking filters (empty) archivedFilter, driverAddressGeoLayer, driverAddressGeoCode, ) if err != nil { log.Error().Err(err).Msg("Failed to get organized carpool drivers") w.WriteHeader(http.StatusInternalServerError) return } // Render to Excel h.renderer.XLSX.OrganizedCarpoolDrivers(w, result) }