96 lines
2.4 KiB
Go
Executable File
96 lines
2.4 KiB
Go
Executable File
package application
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"sort"
|
|
|
|
"git.coopgo.io/coopgo-apps/parcoursmob/utils/identification"
|
|
"git.coopgo.io/coopgo-apps/parcoursmob/utils/sorting"
|
|
agenda "git.coopgo.io/coopgo-platform/agenda/grpcapi"
|
|
agendastorage "git.coopgo.io/coopgo-platform/agenda/storage"
|
|
fleets "git.coopgo.io/coopgo-platform/fleets/grpcapi"
|
|
fleetstorage "git.coopgo.io/coopgo-platform/fleets/storage"
|
|
"git.coopgo.io/coopgo-platform/groups-management/storage"
|
|
mobilityaccounts "git.coopgo.io/coopgo-platform/mobility-accounts/grpcapi"
|
|
"github.com/rs/zerolog/log"
|
|
"google.golang.org/protobuf/types/known/timestamppb"
|
|
)
|
|
|
|
func (h *ApplicationHandler) Dashboard(w http.ResponseWriter, r *http.Request) {
|
|
|
|
g := r.Context().Value(identification.GroupKey)
|
|
if g == nil {
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
group := g.(storage.Group)
|
|
|
|
request := &mobilityaccounts.GetAccountsBatchRequest{
|
|
Accountids: group.Members,
|
|
}
|
|
|
|
resp, err := h.services.GRPC.MobilityAccounts.GetAccountsBatch(context.TODO(), request)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("")
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
var accounts = []any{}
|
|
|
|
// We only display the 10 last here
|
|
count := len(resp.Accounts)
|
|
min := count - 5
|
|
if min < 0 {
|
|
min = 0
|
|
}
|
|
|
|
for _, account := range resp.Accounts[min:] {
|
|
if filterAccount(r, account) {
|
|
a := account.ToStorageType()
|
|
accounts = append([]any{a}, accounts...)
|
|
}
|
|
}
|
|
|
|
members, _, err := h.groupmembers(group.ID)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("")
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
count_members := len(members)
|
|
|
|
events := []agendastorage.Event{}
|
|
|
|
eventsresp, err := h.services.GRPC.Agenda.GetEvents(context.TODO(), &agenda.GetEventsRequest{
|
|
Namespaces: []string{"parcoursmob_dispositifs"},
|
|
Mindate: timestamppb.Now(),
|
|
})
|
|
|
|
if err == nil {
|
|
for _, e := range eventsresp.Events {
|
|
events = append(events, e.ToStorageType())
|
|
}
|
|
}
|
|
|
|
sort.Sort(sorting.EventsByStartdate(events))
|
|
|
|
bookings := []fleetstorage.Booking{}
|
|
|
|
bookingsresp, err := h.services.GRPC.Fleets.GetBookings(context.TODO(), &fleets.GetBookingsRequest{
|
|
Namespaces: []string{"parcoursmob_dispositifs"},
|
|
})
|
|
|
|
if err == nil {
|
|
for _, b := range bookingsresp.Bookings {
|
|
bookings = append(bookings, b.ToStorageType())
|
|
}
|
|
}
|
|
|
|
h.Renderer.Dashboard(w, r, accounts, count, count_members, events, bookings)
|
|
|
|
}
|