feat: automatización de cotizaciones, contratos, actas y cuentas de cobro con IA
Implementa las 4 fases de la especificación de automatización: módulo de plantillas/tarifas editable por el equipo, generación de PDF (HTML+JS vía Chrome headless) para cotizaciones/contratos/arquitecturas/cuentas de cobro, chat propio en el dashboard reutilizando el mismo motor y tools del bot de Telegram, y nuevas tools del agente para crear estos documentos end-to-end. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
772a4a5656
commit
516220a8a1
@@ -0,0 +1,52 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
|
||||
)
|
||||
|
||||
func slugifyProyecto(s string) string {
|
||||
s = strings.ToLower(s)
|
||||
replacer := strings.NewReplacer(
|
||||
" ", "-", "á", "a", "é", "e", "í", "i", "ó", "o", "ú", "u",
|
||||
"ñ", "n", "ü", "u",
|
||||
)
|
||||
s = replacer.Replace(s)
|
||||
var b strings.Builder
|
||||
for _, r := range s {
|
||||
if (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '-' {
|
||||
b.WriteRune(r)
|
||||
}
|
||||
}
|
||||
return strings.Trim(b.String(), "-")
|
||||
}
|
||||
|
||||
// CrearProyectoSimple crea un proyecto para un cliente a partir del flujo de
|
||||
// automatización con IA ("nombre, stack, cliente asociado"). El stack se antepone
|
||||
// a la descripción; la creación de repo/estructura inicial queda fuera de este
|
||||
// alcance (requiere integración con un proveedor Git, no cubierta aún).
|
||||
func CrearProyectoSimple(clienteID uint, nombre, stack, descripcion string) (*models.Proyecto, error) {
|
||||
if clienteID == 0 {
|
||||
return nil, fmt.Errorf("cliente_id requerido")
|
||||
}
|
||||
if strings.TrimSpace(nombre) == "" {
|
||||
return nil, fmt.Errorf("nombre requerido")
|
||||
}
|
||||
if stack != "" {
|
||||
descripcion = fmt.Sprintf("Stack: %s\n\n%s", stack, descripcion)
|
||||
}
|
||||
p := &models.Proyecto{
|
||||
ClienteID: clienteID,
|
||||
Nombre: nombre,
|
||||
Slug: slugifyProyecto(nombre),
|
||||
Descripcion: descripcion,
|
||||
Color: "#8eb02f",
|
||||
Estado: "activo",
|
||||
}
|
||||
if err := models.CreateProyecto(p); err != nil {
|
||||
return nil, fmt.Errorf("no se pudo crear el proyecto: %w", err)
|
||||
}
|
||||
return p, nil
|
||||
}
|
||||
Reference in New Issue
Block a user