Many improvements

This commit is contained in:
Arnaud Delcasse 2025-09-16 08:54:51 +02:00
parent 9ab7b66b68
commit 8c0b6f7d5c
15 changed files with 367 additions and 31 deletions

View File

@ -37,6 +37,10 @@ func ReadConfig() (*viper.Viper, error) {
"dashboard": map[string]any{
"enabled": true,
},
"members": map[string]any{
"enabled": true,
"profile_optional_fields": []map[string]any{},
},
"beneficiaries": map[string]any{
"enabled": true,
"validated_profile": map[string]any{
@ -46,6 +50,67 @@ func ReadConfig() (*viper.Viper, error) {
"documents": []string{},
},
},
"profile_optional_fields": []map[string]any{
{
"name": "gender",
"label": "Genre",
"type": "select",
"options": []map[string]string{
{"value": "0", "label": "Inconnu"},
{"value": "1", "label": "Masculin"},
{"value": "2", "label": "Féminin"},
{"value": "9", "label": "Sans objet"},
},
},
{
"name": "social_situation",
"label": "Situation sociale",
"type": "select",
"options": []map[string]string{
{"value": "", "label": "Inconnu"},
{"value": "BRSA", "label": "BRSA"},
{"value": "Demandeur d'emploi", "label": "Demandeur d'emploi"},
{"value": "Chantier d'insertion", "label": "Chantier d'insertion"},
{"value": "Jeune -25", "label": "Jeune -25"},
},
},
{
"name": "registration_reason",
"label": "Motif d'inscription",
"type": "select",
"options": []map[string]string{
{"value": "", "label": "Inconnu"},
{"value": "Pas de permis", "label": "Pas de permis"},
{"value": "Pas de véhicule", "label": "Pas de véhicule"},
{"value": "Perte d'autonomie", "label": "Perte d'autonomie"},
{"value": "Autre", "label": "Autre"},
},
},
{
"name": "status",
"label": "Statut (prioritaire / non prioritaire)",
"type": "select",
"options": []map[string]string{
{"value": "Non prioritaire", "label": "Non prioritaire"},
{"value": "Prioritaire", "label": "Prioritaire"},
},
},
{
"name": "last_subscription_date",
"label": "Date de dernière adhésion",
"type": "date",
},
{
"name": "previous_solidarity_transports_count",
"label": "Nombre de transports solidaires précédents",
"type": "number",
},
{
"name": "comment",
"label": "Commentaire",
"type": "textarea",
},
},
},
"journeys": map[string]any{
"enabled": true,
@ -68,10 +133,10 @@ func ReadConfig() (*viper.Viper, error) {
"drivers": map[string]any{
"documents_types": []string{"membership_form", "driving_licence", "identity_proof", "other"},
"validated_profile": map[string]any{
"enabled": false,
"enabled": true,
"required": map[string]any{
"fields": []string{},
"documents": []string{},
"documents": []string{"driving_licence"},
},
},
},

2
go.mod
View File

@ -53,7 +53,7 @@ require (
git.coopgo.io/coopgo-platform/payments v0.0.0-20250616162131-77f7b00b8fc3
git.coopgo.io/coopgo-platform/routing-service v0.0.0-20250304234521-faabcc54f536
git.coopgo.io/coopgo-platform/sms v0.0.0-20250523074631-1f1e7fc6b7af
git.coopgo.io/coopgo-platform/solidarity-transport v0.0.0-20250616110116-d71da5accdfd
git.coopgo.io/coopgo-platform/solidarity-transport v0.0.0-20250910141021-fc5b33e88c2c
github.com/arran4/golang-ical v0.3.1
github.com/coreos/go-oidc/v3 v3.11.0
github.com/gorilla/securecookie v1.1.1

2
go.sum
View File

@ -42,6 +42,8 @@ git.coopgo.io/coopgo-platform/solidarity-transport v0.0.0-20250610065958-2f0a45c
git.coopgo.io/coopgo-platform/solidarity-transport v0.0.0-20250610065958-2f0a45ced0a2/go.mod h1:jnSYIECcH/nL8bLBwYD2WmJSPgWUC2rioOXxivWBTBM=
git.coopgo.io/coopgo-platform/solidarity-transport v0.0.0-20250616110116-d71da5accdfd h1:2mvQWRfKHxihCxF1tOH1JgJinxqGDE96x4drlEloQNM=
git.coopgo.io/coopgo-platform/solidarity-transport v0.0.0-20250616110116-d71da5accdfd/go.mod h1:jnSYIECcH/nL8bLBwYD2WmJSPgWUC2rioOXxivWBTBM=
git.coopgo.io/coopgo-platform/solidarity-transport v0.0.0-20250910141021-fc5b33e88c2c h1:U7EgF5Asj6a65nNXo6m4luR27CL5nDfxhY6GFWX46uU=
git.coopgo.io/coopgo-platform/solidarity-transport v0.0.0-20250910141021-fc5b33e88c2c/go.mod h1:jnSYIECcH/nL8bLBwYD2WmJSPgWUC2rioOXxivWBTBM=
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
github.com/DATA-DOG/go-sqlmock v1.3.2/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU=

View File

@ -128,16 +128,18 @@ func (h *ApplicationHandler) AdministrationCreateGroup(w http.ResponseWriter, r
}
modules := map[string]any{
"beneficiaries": r.FormValue("modules.beneficiaries") == "on",
"journeys": r.FormValue("modules.journeys") == "on",
"vehicles": r.FormValue("modules.vehicles") == "on",
"vehicles_management": r.FormValue("modules.vehicles_management") == "on",
"events": r.FormValue("modules.events") == "on",
"agenda": r.FormValue("modules.agenda") == "on",
"groups": r.FormValue("modules.groups") == "on",
"administration": r.FormValue("modules.administration") == "on",
"support": r.FormValue("modules.support") == "on",
"group_module": r.FormValue("modules.group_module") == "on",
"beneficiaries": r.FormValue("modules.beneficiaries") == "on",
"journeys": r.FormValue("modules.journeys") == "on",
"vehicles": r.FormValue("modules.vehicles") == "on",
"vehicles_management": r.FormValue("modules.vehicles_management") == "on",
"events": r.FormValue("modules.events") == "on",
"agenda": r.FormValue("modules.agenda") == "on",
"groups": r.FormValue("modules.groups") == "on",
"administration": r.FormValue("modules.administration") == "on",
"support": r.FormValue("modules.support") == "on",
"group_module": r.FormValue("modules.group_module") == "on",
"organized_carpool": r.FormValue("modules.organized_carpool") == "on",
"solidarity_transport": r.FormValue("modules.solidarity_transport") == "on",
}
groupid := uuid.NewString()

View File

@ -313,6 +313,7 @@ func (h *ApplicationHandler) BeneficiaryDisplay(w http.ResponseWriter, r *http.R
Passengerid: beneficiaryID,
StartDate: timestamppb.New(time.Now().Add(-36 * 730 * time.Hour)),
EndDate: timestamppb.New(time.Now().Add(12 * 730 * time.Hour)),
Status: "VALIDATED",
})
solidarityTransportStats := map[string]int64{
"count": 0,

View File

@ -65,7 +65,8 @@ func (h *ApplicationHandler) JourneysSearch(w http.ResponseWriter, r *http.Reque
destination := r.FormValue("destination")
kb_results := []any{}
searched := false
passengerid := r.FormValue("passengerid")
solidarityTransportExcludeDriver := r.FormValue("solidarity_transport_exclude_driver")
var (
departuregeo *geojson.Feature
@ -74,11 +75,26 @@ func (h *ApplicationHandler) JourneysSearch(w http.ResponseWriter, r *http.Reque
// carpoolresults []any
)
if departuredate != "" && departuretime != "" && departure != "" && destination != "" {
searched = true
var err error
if departure == "" && passengerid != "" {
log.Debug().Msg("departure empty and passengerid set")
p, err := h.services.GetAccount(passengerid)
if err != nil {
log.Error().Err(err).Msg("could not retrieve passenger")
w.WriteHeader(http.StatusNotFound)
return
}
departureBytes, err := json.Marshal(p.Data["address"])
if err != nil {
log.Error().Err(err).Any("address", p.Data["address"]).Msg("could not marshal address")
} else {
departuregeo, err = geojson.UnmarshalFeature(departureBytes)
}
}
var err error
searched := false
if departure != "" {
log.Debug().Str("departure", departure).Msg("departure value")
departuregeo, err = geojson.UnmarshalFeature([]byte(departure))
if err != nil {
log.Error().Err(err).Msg("error unmarshalling departure")
@ -86,12 +102,19 @@ func (h *ApplicationHandler) JourneysSearch(w http.ResponseWriter, r *http.Reque
return
}
}
if destination != "" {
destinationgeo, err = geojson.UnmarshalFeature([]byte(destination))
if err != nil {
log.Error().Err(err).Msg("error unmarshalling destination")
w.WriteHeader(http.StatusBadRequest)
return
}
}
if departuredate != "" && departuretime != "" && departure != "" && destination != "" {
searched = true
// SOLIDARITY TRANSPORT
drivers, err = h.services.GetAccountsInNamespacesMap([]string{"solidarity_drivers", "organized_carpool_drivers"})
@ -121,6 +144,9 @@ func (h *ApplicationHandler) JourneysSearch(w http.ResponseWriter, r *http.Reque
}
}
}
if dj.DriverId == solidarityTransportExcludeDriver {
continue
}
if !yield(dj) {
return
}
@ -247,7 +273,7 @@ func (h *ApplicationHandler) JourneysSearch(w http.ResponseWriter, r *http.Reque
return
}
h.Renderer.JourneysSearch(w, r, carpool_results, transit_results, vehicle_results, searched, departuregeo, destinationgeo, departuredate, departuretime, driverJourneys, drivers, organizedCarpools, beneficiaries, kb_results)
h.Renderer.JourneysSearch(w, r, carpool_results, transit_results, vehicle_results, searched, departuregeo, destinationgeo, departuredate, departuretime, driverJourneys, drivers, organizedCarpools, beneficiaries, kb_results, passengerid)
}
func (h *ApplicationHandler) vehicleRequest(vehiclech chan fleetsstorage.Vehicle, start time.Time, end time.Time) {

View File

@ -144,6 +144,54 @@ func (h *ApplicationHandler) OrganizedCarpoolCreateDriver(w http.ResponseWriter,
h.Renderer.OrganizedCarpoolCreateDriver(w, r)
}
func (h *ApplicationHandler) OrganizedCarpoolUpdateDriver(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
driverID := vars["driverid"]
driver, err := h.services.GetAccount(driverID)
if err != nil {
log.Error().Err(err).Msg("Issue retrieving driver account")
w.WriteHeader(http.StatusInternalServerError)
return
}
if r.Method == "POST" {
dataMap, err := parseOrganizedCarpoolDriversUpdateForm(r)
if err != nil {
log.Error().Err(err).Msg("")
w.WriteHeader(http.StatusBadRequest)
return
}
data, err := structpb.NewValue(dataMap)
if err != nil {
log.Error().Err(err).Msg("")
w.WriteHeader(http.StatusInternalServerError)
return
}
request := &mobilityaccounts.UpdateDataRequest{
Account: &mobilityaccounts.Account{
Id: driverID,
Namespace: "organized_carpool_drivers",
Data: data.GetStructValue(),
},
}
resp, err := h.services.GRPC.MobilityAccounts.UpdateData(context.TODO(), request)
if err != nil {
log.Error().Err(err).Msg("")
w.WriteHeader(http.StatusInternalServerError)
return
}
http.Redirect(w, r, fmt.Sprintf("/app/organized-carpool/drivers/%s", resp.Account.Id), http.StatusFound)
return
}
h.Renderer.OrganizedCarpoolUpdateDriver(w, r, driver)
}
func (h *ApplicationHandler) OrganizedCarpoolDriverDisplay(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
driverID := vars["driverid"]
@ -637,3 +685,76 @@ func parseOrganizedCarpoolDriversForm(r *http.Request) (map[string]any, error) {
return dataMap, nil
}
func parseOrganizedCarpoolDriversUpdateForm(r *http.Request) (map[string]any, error) {
if err := r.ParseForm(); err != nil {
return nil, err
}
log.Info().Any("form content", r.Form).Msg("parsing update form")
var date *time.Time
if r.PostFormValue("birthdate") != "" {
d, err := time.Parse("2006-01-02", r.PostFormValue("birthdate"))
if err != nil {
return nil, err
}
date = &d
}
formData := OrganizedCarpoolDriversForm{
FirstName: r.PostFormValue("first_name"),
LastName: r.PostFormValue("last_name"),
Email: r.PostFormValue("email"),
Birthdate: date,
PhoneNumber: r.PostFormValue("phone_number"),
FileNumber: r.PostFormValue("file_number"),
Gender: r.PostFormValue("gender"),
}
if r.PostFormValue("address") != "" {
var a any
json.Unmarshal([]byte(r.PostFormValue("address")), &a)
formData.Address = a
}
if r.PostFormValue("address_destination") != "" {
var a any
json.Unmarshal([]byte(r.PostFormValue("address_destination")), &a)
formData.AddressDestination = a
}
validate := formvalidators.New()
if err := validate.Struct(formData); err != nil {
return nil, err
}
d, err := json.Marshal(formData)
if err != nil {
return nil, err
}
var dataMap map[string]any
err = json.Unmarshal(d, &dataMap)
if err != nil {
return nil, err
}
// Handle other_properties for update form
if r.PostFormValue("other_properties") != "" {
var otherProps map[string]any
if err := json.Unmarshal([]byte(r.PostFormValue("other_properties")), &otherProps); err == nil {
if dataMap["other_properties"] == nil {
dataMap["other_properties"] = make(map[string]any)
}
for k, v := range otherProps {
dataMap["other_properties"].(map[string]any)[k] = v
}
}
}
return dataMap, nil
}

View File

@ -4,6 +4,7 @@ import (
"context"
"net/http"
groupsmanagement "git.coopgo.io/coopgo-platform/groups-management/grpcapi"
"git.coopgo.io/coopgo-platform/solidarity-transport/servers/grpc/proto/gen"
"git.coopgo.io/coopgo-platform/solidarity-transport/servers/grpc/transformers"
"github.com/gorilla/mux"
@ -72,6 +73,32 @@ func (h *ApplicationHandler) SolidarityTransportExternalBookingProposal(w http.R
w.WriteHeader(http.StatusInternalServerError)
return
}
// NOTIFY GROUP MEMBERS
groupsrequest := &groupsmanagement.GetGroupsRequest{
Namespaces: []string{"parcoursmob_organizations"},
Member: booking.PassengerId,
}
groupsresp, err := h.services.GRPC.GroupsManagement.GetGroups(context.TODO(), groupsrequest)
if err != nil {
log.Error().Err(err).Msg("")
}
if len(groupsresp.Groups) > 0 {
members, _, err := h.groupmembers(groupsresp.Groups[0].Id)
if err != nil {
log.Error().Err(err).Msg("could not retrieve groupe members")
} else {
for _, m := range members {
if email, ok := m.Data["email"].(string); ok {
h.emailing.Send("solidarity_transport.booking_driver_decline", email, map[string]string{
"bookingid": booking.Id,
"baseUrl": h.config.GetString("base_url"),
})
}
}
}
}
}
}
}

View File

@ -52,6 +52,15 @@ const (
)
func (h *ApplicationHandler) SolidarityTransportOverview(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
tab := r.FormValue("tab")
startdateStr := r.FormValue("date_start")
enddateStr := r.FormValue("date_end")
bookingstatusStr := r.FormValue("status")
filters := map[string]string{}
hist_filters := map[string]string{}
accounts, err := h.solidarityDrivers(r)
if err != nil {
log.Error().Err(err).Msg("issue getting solidarity drivers")
@ -69,9 +78,32 @@ func (h *ApplicationHandler) SolidarityTransportOverview(w http.ResponseWriter,
beneficiariesMap = map[string]mobilityaccountsstorage.Account{}
}
// Get filters
startdate := time.Now()
enddate := time.Now().Add(24 * 365 * time.Hour)
bookingstatus := ""
if tab == "solidarityService" {
if startdateStr != "" {
startdate, _ = time.Parse("2006-01-02", startdateStr)
}
if enddateStr != "" {
enddate, _ = time.Parse("2006-01-02", enddateStr)
enddate = enddate.Add(24 * time.Hour)
}
bookingstatus = bookingstatusStr
filters = map[string]string{
"tab": tab,
"date_start": startdateStr,
"date_end": enddateStr,
"status": bookingstatusStr,
}
}
bookingsproto, err := h.services.GRPC.SolidarityTransport.GetSolidarityTransportBookings(context.Background(), &gen.GetSolidarityTransportBookingsRequest{
StartDate: timestamppb.Now(),
EndDate: timestamppb.New(time.Now().Add(24 * 365 * time.Hour)),
StartDate: timestamppb.New(startdate),
EndDate: timestamppb.New(enddate),
Status: bookingstatus,
})
if err != nil {
log.Error().Err(err).Msg("issue retreving bookings")
@ -85,9 +117,33 @@ func (h *ApplicationHandler) SolidarityTransportOverview(w http.ResponseWriter,
bookings = append(bookings, booking)
}
}
// filters
hist_enddate := time.Now()
hist_startdate := time.Now().Add(-1 * 24 * 365 * time.Hour)
hist_bookingstatus := ""
if tab == "solidarityHistory" {
if startdateStr != "" {
hist_startdate, _ = time.Parse("2006-01-02", startdateStr)
}
if enddateStr != "" {
enddate, _ = time.Parse("2006-01-02", enddateStr)
hist_enddate = enddate.Add(24 * time.Hour)
}
hist_bookingstatus = bookingstatusStr
hist_filters = map[string]string{
"tab": tab,
"date_start": startdateStr,
"date_end": enddateStr,
"status": bookingstatusStr,
}
}
bookingshistoryproto, err := h.services.GRPC.SolidarityTransport.GetSolidarityTransportBookings(context.Background(), &gen.GetSolidarityTransportBookingsRequest{
EndDate: timestamppb.Now(),
StartDate: timestamppb.New(time.Now().Add(-1 * 24 * 365 * time.Hour)),
EndDate: timestamppb.New(hist_enddate),
StartDate: timestamppb.New(hist_startdate),
Status: hist_bookingstatus,
})
if err != nil {
log.Error().Err(err).Msg("issue retreving bookings")
@ -115,7 +171,7 @@ func (h *ApplicationHandler) SolidarityTransportOverview(w http.ResponseWriter,
return cmp.Compare(a.Journey.PassengerPickupDate.Unix(), b.Journey.PassengerPickupDate.Unix())
})
h.Renderer.SolidarityTransportOverview(w, r, accounts, accountsMap, beneficiariesMap, bookings, bookingshistory)
h.Renderer.SolidarityTransportOverview(w, r, accounts, accountsMap, beneficiariesMap, bookings, bookingshistory, filters, hist_filters, tab)
}
func (h *ApplicationHandler) SolidarityTransportCreateDriver(w http.ResponseWriter, r *http.Request) {

View File

@ -141,6 +141,7 @@ func main() {
application.HandleFunc("/solidarity-transport/bookings/{bookingid}/waitconfirmation", applicationHandler.SolidarityTransportBookingStatus("waitconfirmation"))
application.HandleFunc("/organized-carpool/", applicationHandler.OrganizedCarpoolOverview)
application.HandleFunc("/organized-carpool/drivers/create", applicationHandler.OrganizedCarpoolCreateDriver)
application.HandleFunc("/organized-carpool/drivers/{driverid}/update", applicationHandler.OrganizedCarpoolUpdateDriver)
application.HandleFunc("/organized-carpool/drivers/{driverid}/trips", applicationHandler.OrganizedCarpoolAddTrip)
application.HandleFunc("/organized-carpool/drivers/{driverid}/archive", applicationHandler.OrganizedCarpoolArchiveDriver)
application.HandleFunc("/organized-carpool/drivers/{driverid}/unarchive", applicationHandler.OrganizedCarpoolUnarchiveDriver)

View File

@ -44,7 +44,12 @@ func (renderer *Renderer) BeneficiariesList(w http.ResponseWriter, r *http.Reque
func (renderer *Renderer) BeneficiaryCreate(w http.ResponseWriter, r *http.Request) {
files := renderer.ThemeConfig.GetStringSlice("views.beneficiaries.create.files")
profileFields := renderer.GlobalConfig.Get("modules.beneficiaries.profile_optional_fields")
state := NewState(r, renderer.ThemeConfig, beneficiariesMenu)
state.ViewState = map[string]any{
"profile_optional_fields": profileFields,
}
renderer.Render("beneficiaries_create", w, r, files, state)
}
@ -55,6 +60,8 @@ type BeneficiariesDisplayState struct {
func (renderer *Renderer) BeneficiaryDisplay(w http.ResponseWriter, r *http.Request, beneficiary any, bookings []fleetsstorage.Booking, organizations []any, beneficiaries_file_types []string, file_types_map map[string]string, documents any, event interface{}, diags []any, solidarityTransportStats any) {
files := renderer.ThemeConfig.GetStringSlice("views.beneficiaries.display.files")
profileFields := renderer.GlobalConfig.Get("modules.beneficiaries.profile_optional_fields")
state := NewState(r, renderer.ThemeConfig, beneficiariesMenu)
state.ViewState = map[string]any{
"beneficiary": beneficiary,
@ -66,14 +73,20 @@ func (renderer *Renderer) BeneficiaryDisplay(w http.ResponseWriter, r *http.Requ
"event": event,
"diags": diags,
"solidarity_transport_stats": solidarityTransportStats,
"profile_optional_fields": profileFields,
}
renderer.Render("beneficiaries_display", w, r, files, state)
}
func (renderer *Renderer) BeneficiaryUpdate(w http.ResponseWriter, r *http.Request, beneficiary any) {
files := renderer.ThemeConfig.GetStringSlice("views.beneficiaries.update.files")
profileFields := renderer.GlobalConfig.Get("modules.beneficiaries.profile_optional_fields")
state := NewState(r, renderer.ThemeConfig, beneficiariesMenu)
state.ViewState = beneficiary
state.ViewState = map[string]any{
"beneficiary": beneficiary,
"profile_optional_fields": profileFields,
}
renderer.Render("beneficiaries_update", w, r, files, state)
}

View File

@ -36,9 +36,10 @@ func (s BeneficiariesCovoiturage) JSONWithLimits(a int, b int) template.JS {
return s.JSON()
}
func (renderer *Renderer) JourneysSearch(w http.ResponseWriter, r *http.Request, carpools []*geojson.FeatureCollection, transitjourneys any, vehicles any, searched bool, departure any, destination any, departuredate string, departuretime string, driverJourneys any, solidarityDrivers any, organizedCarpools any, beneficiaries any, kbData any) {
func (renderer *Renderer) JourneysSearch(w http.ResponseWriter, r *http.Request, carpools []*geojson.FeatureCollection, transitjourneys any, vehicles any, searched bool, departure any, destination any, departuredate string, departuretime string, driverJourneys any, solidarityDrivers any, organizedCarpools any, beneficiaries any, kbData any, passengerid string) {
files := renderer.ThemeConfig.GetStringSlice("views.journeys.search.files")
state := NewState(r, renderer.ThemeConfig, journeysMenu)
journeyTabs := renderer.ThemeConfig.Get("journey_tabs")
state.ViewState = map[string]any{
"searched": searched,
"departuredate": departuredate,
@ -54,6 +55,8 @@ func (renderer *Renderer) JourneysSearch(w http.ResponseWriter, r *http.Request,
"querystring": r.URL.RawQuery,
"beneficiaries": beneficiaries,
"kb_data": kbData,
"passengerid": passengerid,
"journey_tabs": journeyTabs,
}
renderer.Render("journeys", w, r, files, state)

View File

@ -12,19 +12,26 @@ const membersMenu = "members"
func (renderer *Renderer) MemberDisplay(w http.ResponseWriter, r *http.Request, admins any, groups []string) {
files := renderer.ThemeConfig.GetStringSlice("views.members.display.files")
profileFields := renderer.GlobalConfig.Get("modules.members.profile_optional_fields")
state := NewState(r, renderer.ThemeConfig, membersMenu)
state.ViewState = map[string]any{
"admins": admins,
"groups": groups,
"admins": admins,
"groups": groups,
"profile_optional_fields": profileFields,
}
renderer.Render("members_list", w, r, files, state)
}
func (renderer *Renderer) MemberUpdate(w http.ResponseWriter, r *http.Request, user any) {
files := renderer.ThemeConfig.GetStringSlice("views.members.update.files")
profileFields := renderer.GlobalConfig.Get("modules.members.profile_optional_fields")
state := NewState(r, renderer.ThemeConfig, membersMenu)
state.ViewState = user
state.ViewState = map[string]any{
"user": user,
"profile_optional_fields": profileFields,
}
renderer.Render("members_update", w, r, files, state)
}
@ -53,7 +60,6 @@ func (renderer *Renderer) MembersList(w http.ResponseWriter, r *http.Request, ac
state := NewState(r, renderer.ThemeConfig, membersMenu)
state.ViewState = map[string]any{
"list": MembersListState{
Count: len(accounts),
CacheId: cacheid,

View File

@ -29,6 +29,16 @@ func (renderer *Renderer) OrganizedCarpoolCreateDriver(w http.ResponseWriter, r
renderer.Render("organized carpool driver creation", w, r, files, state)
}
func (renderer *Renderer) OrganizedCarpoolUpdateDriver(w http.ResponseWriter, r *http.Request, driver any) {
files := renderer.ThemeConfig.GetStringSlice("views.organized_carpool.driver_update.files")
state := NewState(r, renderer.ThemeConfig, organizedCarpoolMenu)
state.ViewState = map[string]any{
"driver": driver,
}
renderer.Render("organized carpool driver update", w, r, files, state)
}
func (renderer *Renderer) OrganizedCarpoolDriverDisplay(w http.ResponseWriter, r *http.Request, driver mobilityaccountsstorage.Account, trips any, documents any) {
files := renderer.ThemeConfig.GetStringSlice("views.organized_carpool.driver_display.files")
state := NewState(r, renderer.ThemeConfig, organizedCarpoolMenu)

View File

@ -8,7 +8,7 @@ import (
const solidarityTransportMenu = "solidarity_transport"
func (renderer *Renderer) SolidarityTransportOverview(w http.ResponseWriter, r *http.Request, drivers any, driversMap any, passengersMap any, bookings any, bookingsHistory any) {
func (renderer *Renderer) SolidarityTransportOverview(w http.ResponseWriter, r *http.Request, drivers any, driversMap any, passengersMap any, bookings any, bookingsHistory any, filters any, hist_filters any, tab string) {
files := renderer.ThemeConfig.GetStringSlice("views.solidarity_transport.overview.files")
state := NewState(r, renderer.ThemeConfig, solidarityTransportMenu)
state.ViewState = map[string]any{
@ -17,6 +17,9 @@ func (renderer *Renderer) SolidarityTransportOverview(w http.ResponseWriter, r *
"passengers_map": passengersMap,
"bookings": bookings,
"bookings_history": bookingsHistory,
"filters": filters,
"hist_filters": hist_filters,
"tab": tab,
}
renderer.Render("solidarity transport overview", w, r, files, state)