Emailing management, administration improvement, Carpooling in multimodal search

This commit is contained in:
2022-10-17 05:02:19 +02:00
parent 23f4603dec
commit c2c6a72f81
82 changed files with 1778 additions and 163 deletions

View File

@@ -6,7 +6,7 @@ import (
agendastorage "git.coopgo.io/coopgo-platform/agenda/storage"
)
const agendaMenu = "events"
const agendaMenu = "agenda"
func (renderer *Renderer) AgendaHome(w http.ResponseWriter, r *http.Request, events []agendastorage.Event, groups map[string]any) {
files := renderer.ThemeConfig.GetStringSlice("views.agenda.list.files")

View File

@@ -11,3 +11,14 @@ func (renderer *Renderer) AuthGroups(w http.ResponseWriter, r *http.Request, gro
renderer.RenderNoLayout("groups switch", w, r, files, state)
}
func (renderer *Renderer) AuthOnboarding(w http.ResponseWriter, r *http.Request, key string, onboarding any) {
files := renderer.ThemeConfig.GetStringSlice("views.auth.onboarding.files")
state := NewState(r, renderer.ThemeConfig, "")
state.ViewState = map[string]any{
"key": key,
"onboarding": onboarding,
}
renderer.RenderNoLayout("onboarding", w, r, files, state)
}

13
renderer/directory.go Normal file
View File

@@ -0,0 +1,13 @@
package renderer
import "net/http"
const directoryMenu = "directory"
func (renderer *Renderer) DirectoryHome(w http.ResponseWriter, r *http.Request) {
files := renderer.ThemeConfig.GetStringSlice("views.directory.home.files")
state := NewState(r, renderer.ThemeConfig, directoryMenu)
state.ViewState = map[string]any{}
renderer.Render("directory", w, r, files, state)
}

View File

@@ -5,6 +5,8 @@ import (
"fmt"
"html/template"
"time"
"gitlab.scity.coop/maas/navitia-golang/types"
)
func TimeFrom(d any) *time.Time {
@@ -68,6 +70,16 @@ func Dict(v ...interface{}) map[string]interface{} {
return dict
}
func WalkingLength(s types.Section) (l int) {
l = 0
if s.Mode == "walking" {
for _, p := range s.Path {
l = l + int(p.Length)
}
}
return
}
func strval(v interface{}) string {
switch v := v.(type) {
case string:
@@ -82,3 +94,7 @@ func strval(v interface{}) string {
return fmt.Sprintf("%v", v)
}
}
func Divide[V int | float64](a, b V) V {
return a / b
}

17
renderer/group.go Normal file
View File

@@ -0,0 +1,17 @@
package renderer
import "net/http"
const groupsettingsMenu = "groupsettings"
func (renderer *Renderer) GroupSettingsDisplay(w http.ResponseWriter, r *http.Request, group any, groupmembers []any, admins []any) {
files := renderer.ThemeConfig.GetStringSlice("views.group.settings.files")
state := NewState(r, renderer.ThemeConfig, groupsettingsMenu)
state.ViewState = map[string]any{
"group": group,
"members": groupmembers,
"admins": admins,
}
renderer.Render("group settings", w, r, files, state)
}

22
renderer/journeys.go Normal file
View File

@@ -0,0 +1,22 @@
package renderer
import "net/http"
const journeysMenu = "journeys"
func (renderer *Renderer) JourneysSearch(w http.ResponseWriter, r *http.Request, carpools any, transitjourneys any, vehicles []any, searched bool, departure any, destination any, departuredate string, departuretime string) {
files := renderer.ThemeConfig.GetStringSlice("views.journeys.search.files")
state := NewState(r, renderer.ThemeConfig, journeysMenu)
state.ViewState = map[string]any{
"searched": searched,
"departuredate": departuredate,
"departuretime": departuretime,
"departure": departure,
"destination": destination,
"journeys": transitjourneys,
"carpools": carpools,
"vehicles": vehicles,
}
renderer.Render("journeys", w, r, files, state)
}

22
renderer/mailer.go Normal file
View File

@@ -0,0 +1,22 @@
package renderer
import (
"fmt"
"git.coopgo.io/coopgo-platform/emailing"
"github.com/spf13/viper"
)
func NewEmailingHandler(cfg *viper.Viper) (*emailing.Mailer, error) {
templates_dir := cfg.GetString("templates.root")
theme := viper.New()
theme.SetConfigName("config")
theme.AddConfigPath(templates_dir)
err := theme.ReadInConfig()
if err != nil {
panic(fmt.Errorf("fatal error config file: %w", err))
}
return emailing.NewMailer(templates_dir, theme.Sub("emails"), cfg.Sub("emailing.smtp"))
}

View File

@@ -7,6 +7,7 @@ import (
"git.coopgo.io/coopgo-apps/parcoursmob/utils/icons"
"git.coopgo.io/coopgo-apps/parcoursmob/utils/identification"
"git.coopgo.io/coopgo-platform/emailing"
"git.coopgo.io/coopgo-platform/groups-management/storage"
"github.com/spf13/viper"
)
@@ -15,6 +16,7 @@ type Renderer struct {
TemplatesDir string
GlobalConfig *viper.Viper
ThemeConfig *viper.Viper
Mailer *emailing.Mailer
}
func NewRenderer(global *viper.Viper, templates_dir string) *Renderer {
@@ -50,6 +52,9 @@ func (renderer *Renderer) Render(name string, w http.ResponseWriter, r *http.Req
"genderISO5218": GenderISO5218,
"dict": Dict,
"json": JSON,
"walkingLength": WalkingLength,
"divideFloat64": Divide[float64],
"divideInt": Divide[int],
},
)
t = template.Must(t.ParseFiles(prefixed_files...))
@@ -72,6 +77,8 @@ func (renderer *Renderer) RenderNoLayout(name string, w http.ResponseWriter, r *
"genderISO5218": GenderISO5218,
"dict": Dict,
"json": JSON,
"divideFloat64": Divide[float64],
"divideInt": Divide[int],
},
)
@@ -119,7 +126,7 @@ func NewState(r *http.Request, themeConfig *viper.Viper, menuState string) Rende
ls := LayoutState{
AdministrationState: AdministrationState{
Display: modules["administration"].(bool),
Display: modules["administration"] != nil && modules["administration"].(bool),
Active: menuState == administrationMenu,
},
@@ -128,57 +135,66 @@ func NewState(r *http.Request, themeConfig *viper.Viper, menuState string) Rende
{
Title: "Tableau de bord",
Link: "/app/",
Active: menuState == "dashboard",
Active: menuState == dashboardMenu,
Icon: "hero:outline/home",
},
},
}
if modules["beneficiaries"].(bool) {
if modules["beneficiaries"] != nil && modules["beneficiaries"].(bool) {
ls.MenuItems = append(ls.MenuItems, MenuItem{
Title: "Bénéficiaires",
Link: "/app/beneficiaries/",
Active: menuState == "beneficiaries",
Active: menuState == beneficiariesMenu,
Icon: "hero:outline/user-group",
})
}
if modules["journeys"].(bool) {
if modules["journeys"] != nil && modules["journeys"].(bool) {
ls.MenuItems = append(ls.MenuItems, MenuItem{
Title: "Déplacements",
Link: "/app/journeys/",
Active: menuState == "journeys",
Active: menuState == journeysMenu,
Icon: "hero:outline/map",
})
}
if modules["vehicles"].(bool) {
if modules["vehicles"] != nil && modules["vehicles"].(bool) {
ls.MenuItems = append(ls.MenuItems, MenuItem{
Title: "Véhicules partagés",
Link: "/app/vehicles/",
Active: menuState == "vehicles",
Active: menuState == vehiclesMenu,
Icon: "tabler-icons:car",
})
}
if modules["vehicles_management"].(bool) {
if modules["vehicles_management"] != nil && modules["vehicles_management"].(bool) {
ls.MenuItems = append(ls.MenuItems, MenuItem{
Title: "Gestion des véhicules",
Link: "/app/vehicles-management/",
Active: menuState == "vehicles_management",
Active: menuState == vehiclesmanagementMenu,
Icon: "hero:outline/briefcase",
})
}
if modules["agenda"].(bool) {
if modules["agenda"] != nil && modules["agenda"].(bool) {
ls.MenuItems = append(ls.MenuItems, MenuItem{
Title: "Agenda dispositifs",
Link: "/app/agenda/",
Active: menuState == "agenda",
Active: menuState == agendaMenu,
Icon: "hero:outline/calendar",
})
}
if modules["directory"] != nil && modules["directory"].(bool) {
ls.MenuItems = append(ls.MenuItems, MenuItem{
Title: "Répertoire solutions",
Link: "/app/directory/",
Active: menuState == directoryMenu,
Icon: "hero:outline/document-text",
})
}
return RenderState{
IconSet: icons.NewIconSet(iconset),
Group: group,