up
This commit is contained in:
@@ -148,6 +148,21 @@ func CreateProyecto(p *Proyecto) error {
|
||||
return app.Http.Database.DB.Create(p).Error
|
||||
}
|
||||
|
||||
func CalcularProgresoDesdeFases(proyectoID uint) int {
|
||||
var total, completados int64
|
||||
app.Http.Database.DB.Model(&ProyectoFase{}).Where("proyecto_id = ?", proyectoID).Count(&total)
|
||||
if total == 0 {
|
||||
return 0
|
||||
}
|
||||
app.Http.Database.DB.Model(&ProyectoFase{}).Where("proyecto_id = ? AND estado = ?", proyectoID, "completado").Count(&completados)
|
||||
return int((completados * 100) / total)
|
||||
}
|
||||
|
||||
func ActualizarProgresoProyecto(proyectoID uint) error {
|
||||
nuevo := CalcularProgresoDesdeFases(proyectoID)
|
||||
return app.Http.Database.DB.Model(&Proyecto{}).Where("id = ?", proyectoID).Update("progreso", nuevo).Error
|
||||
}
|
||||
|
||||
func UpdateProyecto(p *Proyecto) error {
|
||||
return app.Http.Database.DB.Model(&Proyecto{}).Where("id = ?", p.ID).Updates(map[string]interface{}{
|
||||
"nombre": p.Nombre,
|
||||
|
||||
@@ -150,6 +150,9 @@ func PortalDashboard(c *fiber.Ctx) error {
|
||||
|
||||
clienteIDs := models.GetClienteIDsForPortalUser(fullUser)
|
||||
proyectos, _ := models.GetProyectosByClienteIDs(clienteIDs)
|
||||
for i := range proyectos {
|
||||
_ = models.ActualizarProgresoProyecto(proyectos[i].ID)
|
||||
}
|
||||
|
||||
// Si partner: agrupar proyectos por cliente
|
||||
type ClienteProyectos struct {
|
||||
@@ -208,6 +211,7 @@ func PortalProyecto(c *fiber.Ctx) error {
|
||||
avances, _ := models.GetAvancesByProyecto(proy.ID, true)
|
||||
entregables, _ := models.GetEntregablesByProyecto(proy.ID, true)
|
||||
tickets, _ := models.GetTicketsByPortalUser(u.ID)
|
||||
_ = models.ActualizarProgresoProyecto(proy.ID)
|
||||
|
||||
return c.Render("portal/proyecto", fiber.Map{
|
||||
"portalUser": fullUser,
|
||||
@@ -230,6 +234,9 @@ func PortalGetProyectos(c *fiber.Ctx) error {
|
||||
fullUser, _ := models.GetPortalUserByID(u.ID)
|
||||
clienteIDs := models.GetClienteIDsForPortalUser(fullUser)
|
||||
proyectos, _ := models.GetProyectosByClienteIDs(clienteIDs)
|
||||
for i := range proyectos {
|
||||
_ = models.ActualizarProgresoProyecto(proyectos[i].ID)
|
||||
}
|
||||
return c.JSON(proyectos)
|
||||
}
|
||||
|
||||
@@ -265,6 +272,7 @@ func PortalGetProyectoData(c *fiber.Ctx) error {
|
||||
facturas, _ := models.GetFacturasByCliente(proy.ClienteID, true)
|
||||
facturasNoLeidas := models.CountUnreadFacturaNotifs(u.ID)
|
||||
documentos, _ := models.GetDocumentosByProyecto(proy.ID)
|
||||
_ = models.ActualizarProgresoProyecto(proy.ID)
|
||||
|
||||
return c.JSON(fiber.Map{
|
||||
"proyecto": proy,
|
||||
|
||||
@@ -195,11 +195,13 @@ func CreateFase(c *fiber.Ctx) error {
|
||||
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
f.ParseEntregables()
|
||||
_ = models.ActualizarProgresoProyecto(uint(proyID))
|
||||
return c.Status(201).JSON(f)
|
||||
}
|
||||
|
||||
func UpdateFase(c *fiber.Ctx) error {
|
||||
faseID, _ := strconv.ParseUint(c.Params("faseID"), 10, 32)
|
||||
proyID, _ := strconv.ParseUint(c.Params("id"), 10, 32)
|
||||
type Req struct {
|
||||
Nombre string `json:"nombre"`
|
||||
Descripcion string `json:"descripcion"`
|
||||
@@ -241,14 +243,17 @@ func UpdateFase(c *fiber.Ctx) error {
|
||||
if err := models.UpdateProyectoFase(f); err != nil {
|
||||
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
_ = models.ActualizarProgresoProyecto(uint(proyID))
|
||||
return c.JSON(fiber.Map{"ok": true})
|
||||
}
|
||||
|
||||
func DeleteFase(c *fiber.Ctx) error {
|
||||
faseID, _ := strconv.ParseUint(c.Params("faseID"), 10, 32)
|
||||
proyID, _ := strconv.ParseUint(c.Params("id"), 10, 32)
|
||||
if err := models.DeleteProyectoFase(uint(faseID)); err != nil {
|
||||
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
_ = models.ActualizarProgresoProyecto(uint(proyID))
|
||||
return c.JSON(fiber.Map{"ok": true})
|
||||
}
|
||||
|
||||
@@ -257,6 +262,7 @@ func ApplyTemplate(c *fiber.Ctx) error {
|
||||
if err := models.ApplyFaseTemplate(uint(id)); err != nil {
|
||||
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
_ = models.ActualizarProgresoProyecto(uint(id))
|
||||
fases, _ := models.GetFasesByProyecto(uint(id))
|
||||
return c.JSON(fases)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user