100 lines
3.1 KiB
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)
|
|
}
|