parcoursmob/servers/web/exports/solidarity-transport.go

100 lines
3.1 KiB
Go

package exports
import (
"net/http"
"strings"
"time"
"github.com/rs/zerolog/log"
)
func (h *Handler) SolidarityTransportBookings(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.GetSolidarityTransportBookings(r.Context(), startDate, endDate, status, driverID, departureGeoLayer, departureGeoCode, destinationGeoLayer, destinationGeoCode, passengerAddressGeoLayer, passengerAddressGeoCode)
if err != nil {
log.Error().Err(err).Msg("Failed to get solidarity transport bookings")
w.WriteHeader(http.StatusInternalServerError)
return
}
// Render to Excel
h.renderer.XLSX.SolidarityTransportBookings(w, result)
}
func (h *Handler) SolidarityTransportDrivers(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.GetSolidarityTransportOverview(
r.Context(),
"", "", "", "", "", "", "", "", "", "", // booking filters (empty)
"", "", "", "", "", "", "", "", "", "", // history booking filters (empty)
archivedFilter,
driverAddressGeoLayer, driverAddressGeoCode,
)
if err != nil {
log.Error().Err(err).Msg("Failed to get solidarity transport drivers")
w.WriteHeader(http.StatusInternalServerError)
return
}
// Render to Excel
h.renderer.XLSX.SolidarityTransportDrivers(w, result)
}