From 8c0b6f7d5cde949d10471a59b7ab617782ec7a3f Mon Sep 17 00:00:00 2001 From: Arnaud Delcasse Date: Tue, 16 Sep 2025 08:54:51 +0200 Subject: [PATCH] Many improvements --- config.go | 69 +++++++++- go.mod | 2 +- go.sum | 2 + handlers/application/administration.go | 22 ++-- handlers/application/beneficiaries.go | 1 + handlers/application/journeys.go | 38 +++++- handlers/application/organized-carpool.go | 121 ++++++++++++++++++ .../application/solidarity-transport-ext.go | 27 ++++ handlers/application/solidarity-transport.go | 66 +++++++++- main.go | 1 + renderer/beneficiaries.go | 15 ++- renderer/journeys.go | 5 +- renderer/members.go | 14 +- renderer/organized-carpool.go | 10 ++ renderer/solidarity-transport.go | 5 +- 15 files changed, 367 insertions(+), 31 deletions(-) diff --git a/config.go b/config.go index 19907f5..5585147 100755 --- a/config.go +++ b/config.go @@ -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"}, }, }, }, diff --git a/go.mod b/go.mod index dc3d2ae..2eae516 100755 --- a/go.mod +++ b/go.mod @@ -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 diff --git a/go.sum b/go.sum index 4bca761..63b6bc2 100644 --- a/go.sum +++ b/go.sum @@ -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= diff --git a/handlers/application/administration.go b/handlers/application/administration.go index e426613..e9f9288 100755 --- a/handlers/application/administration.go +++ b/handlers/application/administration.go @@ -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() diff --git a/handlers/application/beneficiaries.go b/handlers/application/beneficiaries.go index 067e01a..5fdeab5 100755 --- a/handlers/application/beneficiaries.go +++ b/handlers/application/beneficiaries.go @@ -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, diff --git a/handlers/application/journeys.go b/handlers/application/journeys.go index 64c510f..d312ec4 100755 --- a/handlers/application/journeys.go +++ b/handlers/application/journeys.go @@ -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) { diff --git a/handlers/application/organized-carpool.go b/handlers/application/organized-carpool.go index 65cf9ed..5abd226 100644 --- a/handlers/application/organized-carpool.go +++ b/handlers/application/organized-carpool.go @@ -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 +} diff --git a/handlers/application/solidarity-transport-ext.go b/handlers/application/solidarity-transport-ext.go index 14a5b47..f45dc72 100644 --- a/handlers/application/solidarity-transport-ext.go +++ b/handlers/application/solidarity-transport-ext.go @@ -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"), + }) + } + } + } + } + } } } diff --git a/handlers/application/solidarity-transport.go b/handlers/application/solidarity-transport.go index c771737..c3826bf 100644 --- a/handlers/application/solidarity-transport.go +++ b/handlers/application/solidarity-transport.go @@ -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) { diff --git a/main.go b/main.go index 3071797..f77ba07 100755 --- a/main.go +++ b/main.go @@ -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) diff --git a/renderer/beneficiaries.go b/renderer/beneficiaries.go index 08f3b43..086eee9 100755 --- a/renderer/beneficiaries.go +++ b/renderer/beneficiaries.go @@ -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) } diff --git a/renderer/journeys.go b/renderer/journeys.go index a470557..00776c2 100755 --- a/renderer/journeys.go +++ b/renderer/journeys.go @@ -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) diff --git a/renderer/members.go b/renderer/members.go index ad96005..91fa11f 100755 --- a/renderer/members.go +++ b/renderer/members.go @@ -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, diff --git a/renderer/organized-carpool.go b/renderer/organized-carpool.go index 0437a4f..cd423b2 100644 --- a/renderer/organized-carpool.go +++ b/renderer/organized-carpool.go @@ -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) diff --git a/renderer/solidarity-transport.go b/renderer/solidarity-transport.go index 2a5a390..e14f626 100644 --- a/renderer/solidarity-transport.go +++ b/renderer/solidarity-transport.go @@ -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)