diff --git a/pkg/services/mail_service.go b/pkg/services/mail_service.go
index 89bf12d..80108cd 100755
--- a/pkg/services/mail_service.go
+++ b/pkg/services/mail_service.go
@@ -77,3 +77,33 @@ func GeneratePasswordResetURL(email string, baseURL string) string {
uri := fmt.Sprintf("%s/reset-password?t=%s", baseURL, token)
return uri
}
+
+// SendPortalCredentialsEmail envía al usuario del portal su URL de acceso y contraseña inicial.
+func SendPortalCredentialsEmail(email, nombre, password string) {
+ loginURL := fmt.Sprintf("%s/portal/login", app.Http.Server.Url)
+ htmlBody := fmt.Sprintf(`
+
+
+
+
U
+
Portal de Clientes
+
Acceso a tu espacio de trabajo
+
+
Hola %s,
+
Tu cuenta en el Portal de Clientes ha sido creada. Usa los siguientes datos para ingresar:
+
+
Email: %s
+
Contraseña: %s
+
Enlace de acceso: %s
+
+
Ingresar al Portal
+
Si no esperabas este correo, puedes ignorarlo.
+
+`, nombre, email, password, loginURL, loginURL, loginURL)
+
+ go func() {
+ if err := app.Http.Mail.Send(email, "Acceso a tu Portal de Clientes - U-site", htmlBody, ""); err != nil {
+ log.Printf("[Portal] Error enviando credenciales a %s: %v", email, err)
+ }
+ }()
+}
diff --git a/resources/views/portal_usuarios.html b/resources/views/portal_usuarios.html
index 96a59df..2433f18 100644
--- a/resources/views/portal_usuarios.html
+++ b/resources/views/portal_usuarios.html
@@ -1,6 +1,6 @@
-
+
Usuarios del Portal
Accesos del portal de clientes
@@ -11,6 +11,15 @@
+
+
+
+
Los usuarios inician sesión en:
+
/portal/login
+
+
+
@@ -58,6 +67,9 @@
+
@@ -145,15 +157,33 @@
+
+
+
+
Enviar credenciales
+
Se enviará el correo con los datos de acceso al portal a .
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rest/controllers/portal_usuario_controller.go b/rest/controllers/portal_usuario_controller.go
index c6f2dd9..c2634e0 100644
--- a/rest/controllers/portal_usuario_controller.go
+++ b/rest/controllers/portal_usuario_controller.go
@@ -8,6 +8,7 @@ import (
"github.com/gofiber/fiber/v2"
"github.com/sujit-baniya/fiber-boilerplate/app"
"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
+ "github.com/sujit-baniya/fiber-boilerplate/pkg/services"
)
func PortalUsuariosIndex(c *fiber.Ctx) error {
@@ -172,3 +173,29 @@ func RemovePortalAcceso(c *fiber.Ctx) error {
}
return c.JSON(fiber.Map{"ok": true})
}
+
+// SendPortalCredentials envía las credenciales de acceso al portal al correo del usuario.
+func SendPortalCredentials(c *fiber.Ctx) error {
+ id, err := strconv.ParseUint(c.Params("id"), 10, 32)
+ if err != nil {
+ return c.Status(400).JSON(fiber.Map{"error": "ID inválido"})
+ }
+ u, err := models.GetPortalUserByID(uint(id))
+ if err != nil {
+ return c.Status(404).JSON(fiber.Map{"error": "Usuario no encontrado"})
+ }
+
+ type Req struct {
+ Password string `json:"password"`
+ }
+ var req Req
+ _ = c.BodyParser(&req)
+
+ password := req.Password
+ if password == "" {
+ password = "(la contraseña que configuraste)"
+ }
+
+ services.SendPortalCredentialsEmail(u.Email, u.Nombre, password)
+ return c.JSON(fiber.Map{"ok": true, "message": "Correo enviado a " + u.Email})
+}
diff --git a/rest/routes/user.go b/rest/routes/user.go
index b3b8a0b..5eafd6a 100755
--- a/rest/routes/user.go
+++ b/rest/routes/user.go
@@ -254,6 +254,7 @@ func UserRoutes(app fiber.Router) {
protected.Delete("/portal-usuarios/:id", controllers.DeletePortalUsuario)
protected.Post("/portal-usuarios/:id/acceso", controllers.AddPortalAcceso)
protected.Delete("/portal-usuarios/:id/acceso/:clienteID", controllers.RemovePortalAcceso)
+ protected.Post("/portal-usuarios/:id/send-credentials", controllers.SendPortalCredentials)
protected.Get("/facturas", middlewares.MenuMiddleware, controllers.FacturasIndex)
protected.Get("/loadfacturas", controllers.LoadFacturas)