package models import ( "github.com/sujit-baniya/fiber-boilerplate/app" "gorm.io/gorm" ) // PlantillaDocumento es la fuente de verdad de las plantillas base usadas por // la automatización con IA: cotización, contrato, acta de proyecto y cuenta de cobro. // Editar una plantilla aquí actualiza automáticamente todos los canales (Telegram, // chat propio, Claude directo) que generan ese tipo de documento. type PlantillaDocumento struct { gorm.Model Tipo string `json:"tipo" gorm:"column:tipo;size:30;not null;index"` // cotizacion | contrato | acta | cuenta_cobro Nombre string `json:"nombre" gorm:"column:nombre;size:150;not null"` ContenidoHTML string `json:"contenido_html" gorm:"column:contenido_html;type:text"` // Go text/template Version int `json:"version" gorm:"column:version;default:1"` Activa bool `json:"activa" gorm:"column:activa;default:true"` Notas string `json:"notas" gorm:"column:notas;type:text"` } func (PlantillaDocumento) TableName() string { return "plantillas_documento" } func GetAllPlantillasDocumento(limit, offset int, search, tipo string) ([]PlantillaDocumento, int64, error) { var items []PlantillaDocumento var total int64 db := app.Http.Database.DB.Model(&PlantillaDocumento{}) if search != "" { db = db.Where("nombre ILIKE ?", "%"+search+"%") } if tipo != "" { db = db.Where("tipo = ?", tipo) } if err := db.Count(&total).Error; err != nil { return nil, 0, err } if err := db.Order("tipo ASC, version DESC").Limit(limit).Offset(offset).Find(&items).Error; err != nil { return nil, 0, err } return items, total, nil } func GetPlantillaDocumentoByID(id uint) (*PlantillaDocumento, error) { var item PlantillaDocumento if err := app.Http.Database.DB.First(&item, id).Error; err != nil { return nil, err } return &item, nil } // GetPlantillaDocumentoActiva retorna la plantilla activa más reciente para un tipo dado. // Es la que usan los endpoints de generación (cotizaciones, contratos, etc). func GetPlantillaDocumentoActiva(tipo string) (*PlantillaDocumento, error) { var item PlantillaDocumento if err := app.Http.Database.DB. Where("tipo = ? AND activa = ?", tipo, true). Order("version DESC"). First(&item).Error; err != nil { return nil, err } return &item, nil } func CreatePlantillaDocumento(p PlantillaDocumento) error { return app.Http.Database.DB.Create(&p).Error } func UpdatePlantillaDocumento(id uint, updates map[string]interface{}) error { return app.Http.Database.DB.Model(&PlantillaDocumento{}).Where("id = ?", id).Updates(updates).Error } func DeletePlantillaDocumento(id uint) error { return app.Http.Database.DB.Delete(&PlantillaDocumento{}, id).Error }