lot of new functionalities
This commit is contained in:
99
servers/web/exports/organized-carpool.go
Normal file
99
servers/web/exports/organized-carpool.go
Normal file
@@ -0,0 +1,99 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user