Skip to content

Commit

Permalink
feature: Se crea el servicio para retornar la informacion de una eval…
Browse files Browse the repository at this point in the history
  • Loading branch information
faidercamilo26 committed Dec 11, 2024
1 parent dbe55b3 commit 0e4c3f8
Show file tree
Hide file tree
Showing 13 changed files with 831 additions and 125 deletions.
5 changes: 5 additions & 0 deletions .env2
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
EVALUACION_CUMPLIDO_PROV_MID_HTTP_PORT=8090
EVALUACION_CUMPLIDO_PROV_MID_RUN_MODE=dev
EVALUACIONES_CUMPLIDOS_PROVEEDORES_CRUD=http://localhost:8080/v1
EVALUACION_CUMPLIDO_PROV_MID_AMAZON_API=http://api.intranetoas.udistrital.edu.co:8104/v1
EVALUACION_CUMPLIDO_PROV_MID_ADMINISTRATIVA_JBPM=http://busservicios.intranetoas.udistrital.edu.co:8282/wso2eiserver/services/administrativa_produccion
4 changes: 3 additions & 1 deletion conf/app.conf
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@ EnableDocs = true

UrlEvaluacionesCumplidosProveedoresCrud=${EVALUACIONES_CUMPLIDOS_PROVEEDORES_CRUD}
UrlAmazonApi=${EVALUACION_CUMPLIDO_PROV_MID_AMAZON_API}
UrlAdministrativaJBPM=${EVALUACION_CUMPLIDO_PROV_MID_ADMINISTRATIVA_JBPM}
UrlAdministrativaJBPM=${EVALUACION_CUMPLIDO_PROV_MID_ADMINISTRATIVA_JBPM}
UrlCrudRevisionCumplidosProveedores=${EVALUACION_CUMPLIDO_PROV_MID_REVISION_CUMPLIDOS_PROVEEDORES_CRUD}
UrlMidRevisionCumplidosProveedores=${EVALUACION_CUMPLIDO_PROV_MID_REVISION_CUMPLIDOS_PROVEEDORES_MID}
43 changes: 43 additions & 0 deletions controllers/informacion_evaluacion.controller.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package controllers

import (
"github.com/astaxie/beego"
"github.com/udistrital/evaluacion_cumplido_prov_mid/services"
"github.com/udistrital/utils_oas/errorhandler"
"github.com/udistrital/utils_oas/requestresponse"
)

// InformacionEvaluacionController operations for InformacionEvaluacionController
type InformacionEvaluacionController struct {
beego.Controller
}

// URLMapping ...
func (c *InformacionEvaluacionController) URLMapping() {
c.Mapping("ObtenerInformacionEvaluacion", c.ObtenerInformacionEvaluacion)

}

// ObtenerInformacionEvaluacion ...
// @Title ObtenerInformacionEvaluacion
// @Description get InformacionEvaluacionController by asignacion_id
// @Param id path string true "The key for staticblock"
// @Success 200 {object} models.InformacionEvaluacion
// @Failure 400 :id is empty
// @router /:asignacion_id [get]
func (c *InformacionEvaluacionController) ObtenerInformacionEvaluacion() {

defer errorhandler.HandlePanic(&c.Controller)

asignacion_id := c.Ctx.Input.Param(":asignacion_id")

data, err := services.ObtenerInformacionEvaluacion(asignacion_id)
if err == nil {
c.Ctx.Output.SetStatus(200)
c.Data["json"] = requestresponse.APIResponseDTO(true, 200, data)
} else {
c.Ctx.Output.SetStatus(400)
c.Data["json"] = requestresponse.APIResponseDTO(false, 400, nil, err.Error())
}
c.ServeJSON()
}
93 changes: 93 additions & 0 deletions helpers/contrato.helper.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package helpers

import (
"fmt"

"github.com/astaxie/beego"
"github.com/udistrital/evaluacion_cumplido_prov_mid/models"
)

func ObtenerContratoGeneral(numero_contrato_suscrito string, vigencia_contrato string) (contrato_general models.ContratoGeneral, outputError error) {
defer func() {
if err := recover(); err != nil {
outputError = fmt.Errorf("%v", err)
panic(outputError)
}
}()

var contrato []models.ContratoGeneral
//fmt.Println("Url contrato general: ", beego.AppConfig.String("UrlAmazonApi")+"/contrato_general/?query=ContratoSuscrito.NumeroContratoSuscrito:"+numero_contrato_suscrito+",VigenciaContrato:"+vigencia_contrato)
if response, err := GetJsonTest(beego.AppConfig.String("UrlAmazonApi")+"/contrato_general/?query=ContratoSuscrito.NumeroContratoSuscrito:"+numero_contrato_suscrito+",VigenciaContrato:"+vigencia_contrato, &contrato); (err == nil) && (response == 200) {
if len(contrato) > 0 {
return contrato[0], nil
} else {
outputError = fmt.Errorf("No se encontró contrato")
return contrato[0], outputError
}
} else {
outputError = fmt.Errorf("Error al obtener el contrato general")
return contrato_general, outputError
}
}

func ObtenerDependenciasSupervisor(documento_supervisor string) (dependencias_supervisor []models.Dependencia, outputError error) {
defer func() {
if err := recover(); err != nil {
outputError = fmt.Errorf("%v", err)
}
}()

var respuesta_peticion map[string]interface{}
fmt.Println("Url dependencias: ", beego.AppConfig.String("UrlAdministrativaJBPM")+"/dependencias_supervisor/"+documento_supervisor)
if response, err := GetJsonWSO2Test(beego.AppConfig.String("UrlAdministrativaJBPM")+"/dependencias_supervisor/"+documento_supervisor, &respuesta_peticion); err == nil && response == 200 {
if respuesta_peticion != nil {
if dependenciasMap, ok := respuesta_peticion["dependencias"].(map[string]interface{}); ok {

for _, depList := range dependenciasMap {

if list, ok := depList.([]interface{}); ok {

for _, dep := range list {

depMap := dep.(map[string]interface{})
dependencia := models.Dependencia{

Codigo: depMap["codigo"].(string),
Nombre: depMap["nombre"].(string),
}
dependencias_supervisor = append(dependencias_supervisor, dependencia)
}

} else {
outputError = fmt.Errorf("No se encontraron dependencias para el supervisor con documento: " + documento_supervisor)
return dependencias_supervisor, outputError
}
}
}
} else {
outputError = fmt.Errorf("No se encontraron dependencias para el supervisor con documento: " + documento_supervisor)
return dependencias_supervisor, outputError
}
}
return dependencias_supervisor, nil
}

func ObtenerNombrePersonaNatural(documento_persona string) (nombre_persona string, outputError error) {
defer func() {
if err := recover(); err != nil {
outputError = fmt.Errorf("%v", err)
panic(outputError.Error())
}
}()

var informacion []models.InformacionPersonaNatural
//fmt.Println("Url informacion persona: ", beego.AppConfig.String("UrlAmazonApi")+"/informacion_persona_natural/?fields=PrimerNombre,SegundoNombre,PrimerApellido,SegundoApellido&limit=0&query=Id:"+documento_persona)
if response, err := GetJsonTest(beego.AppConfig.String("UrlAmazonApi")+"/informacion_persona_natural/?fields=PrimerNombre,SegundoNombre,PrimerApellido,SegundoApellido&limit=0&query=Id:"+documento_persona, &informacion); err != nil && response != 200 {
outputError = fmt.Errorf("Error al obtener la información de la persona")
return nombre_persona, outputError
}

nombre_persona = informacion[0].PrimerNombre + " " + informacion[0].SegundoNombre + " " + informacion[0].PrimerApellido + " " + informacion[0].SegundoApellido

return nombre_persona, nil
}
143 changes: 143 additions & 0 deletions helpers/resultado_evaluacion.helper.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
package helpers

import (
"fmt"
"strconv"
"strings"

"github.com/astaxie/beego"
"github.com/udistrital/evaluacion_cumplido_prov_mid/models"
)

// Funcion para calcular la clasificacion de la evaluacion, por el momento este dato se calcula desde el cliente
func CalcularClasificacionEvaluacion(resultados_finales models.Resultado) (resultado_clasificacion models.Clasificacion, puntaje_total_evaluacion int, outputError error) {
defer func() {
if err := recover(); err != nil {
outputError = fmt.Errorf("%v", err)
panic(outputError.Error())
}
}()

var valor_clasificacion int
var codigo_abreviacion_clasificacion string

// Calcular la clasificación de la evaluación
for _, item := range resultados_finales.ResultadosIndividuales {
valor_clasificacion += item.Respuesta.ValorAsignado
}

switch {
case valor_clasificacion >= 0 && valor_clasificacion <= 45:
codigo_abreviacion_clasificacion = "ML"
case valor_clasificacion >= 46 && valor_clasificacion <= 79:
codigo_abreviacion_clasificacion = "BN"
case valor_clasificacion >= 80 && valor_clasificacion <= 100:
codigo_abreviacion_clasificacion = "EX"
}

var respuesta_clasificacion map[string]interface{}
var clasificacion []models.Clasificacion

if response, err := GetJsonTest(beego.AppConfig.String("UrlEvaluacionesCumplidosProveedoresCrud")+"/clasificacion/?query=CodigoAbreviacion:"+codigo_abreviacion_clasificacion+",Activo:true&limit=1", &respuesta_clasificacion); err != nil && response != 200 {
outputError = fmt.Errorf("Error al obtener la clasificación de la evaluación")
return resultado_clasificacion, 0, outputError
}

LimpiezaRespuestaRefactor(respuesta_clasificacion, &clasificacion)

resultado_clasificacion = clasificacion[0]

return resultado_clasificacion, valor_clasificacion, nil
}

func ObtenerResultadoEvaluacion(asignacion_evaluacion_id int) (resultado_evaluacion models.ResultadoEvaluacion, outputError error) {
defer func() {
if err := recover(); err != nil {
outputError = fmt.Errorf("%v", err)
panic(outputError.Error())
}
}()

var respuesta_resultado_evaluacion map[string]interface{}
var resultado []models.ResultadoEvaluacion

//fmt.Println("URL resultado evaluacion: ", beego.AppConfig.String("UrlEvaluacionesCumplidosProveedoresCrud")+"/resultado_evaluacion/?query=AsignacionEvaluadorId.Id:"+strconv.Itoa(asignacion_evaluacion_id)+",Activo:true&limit=1")
if response, err := GetJsonTest(beego.AppConfig.String("UrlEvaluacionesCumplidosProveedoresCrud")+"/resultado_evaluacion/?query=AsignacionEvaluadorId.Id:"+strconv.Itoa(asignacion_evaluacion_id)+",Activo:true&limit=1", &respuesta_resultado_evaluacion); err != nil && response != 200 {
outputError = fmt.Errorf("Error al obtener el resultado de la evaluación")
return resultado_evaluacion, outputError
}

data := respuesta_resultado_evaluacion["Data"].([]interface{})
if len(data[0].(map[string]interface{})) == 0 {
outputError = fmt.Errorf("El Evaluador no tiene registrado un resultado de la evaluación")
return resultado_evaluacion, outputError
}

LimpiezaRespuestaRefactor(respuesta_resultado_evaluacion, &resultado)

resultado_evaluacion = resultado[0]

return resultado_evaluacion, nil
}

func ObtenerItemsEvaluador(asignacion_evaluador_id int) (items_evaluador []models.Item, items_evaluador_formateados string, outputError error) {
defer func() {
if err := recover(); err != nil {
outputError = fmt.Errorf("%v", err)
panic(outputError.Error())
}
}()

var respuesta_items_evaluador map[string]interface{}
var items []models.AsignacionEvaluadorItem

if response, err := GetJsonTest(beego.AppConfig.String("UrlEvaluacionesCumplidosProveedoresCrud")+"/asignacion_evaluador_item/?query=AsignacionEvaluadorId.Id:"+strconv.Itoa(asignacion_evaluador_id)+",Activo:true&limit=-1", &respuesta_items_evaluador); err != nil && response != 200 {
outputError = fmt.Errorf("Error al obtener los items del evaluador")
return items_evaluador, items_evaluador_formateados, outputError
}

data := respuesta_items_evaluador["Data"].([]interface{})
if len(data[0].(map[string]interface{})) == 0 {
outputError = fmt.Errorf("El Evaluador no tiene items asignados")
return items_evaluador, items_evaluador_formateados, outputError
}

LimpiezaRespuestaRefactor(respuesta_items_evaluador, &items)

for _, item := range items {
items_evaluador = append(items_evaluador, item.ItemId)
items_evaluador_formateados += strconv.Itoa(item.Id) + ", "
}

return items_evaluador, strings.TrimSuffix(items_evaluador_formateados, ", "), nil
}

func ObtenerItemsEvaluacion(evaluacion_id int) (items_evaluacion []models.Item, items_evaluador_formateados string, outputError error) {
defer func() {
if err := recover(); err != nil {
outputError = fmt.Errorf("%v", err)
panic(outputError.Error())
}
}()

var respuesta_items_evaluacion map[string]interface{}

//fmt.Println("URL items evaluacion: ", beego.AppConfig.String("UrlEvaluacionesCumplidosProveedoresCrud")+"/item/?query=EvaluacionId.Id:"+strconv.Itoa(evaluacion_id)+",Activo:true&limit=-1")
if response, err := GetJsonTest(beego.AppConfig.String("UrlEvaluacionesCumplidosProveedoresCrud")+"/item/?query=EvaluacionId.Id:"+strconv.Itoa(evaluacion_id)+",Activo:true&limit=-1", &respuesta_items_evaluacion); err != nil && response != 200 {
outputError = fmt.Errorf("Error al obtener los items de la evaluación")
return items_evaluacion, items_evaluador_formateados, outputError
}

if len(respuesta_items_evaluacion) == 0 {
outputError = fmt.Errorf("La evaluación no tiene items asignados")
return items_evaluacion, items_evaluador_formateados, outputError
}

LimpiezaRespuestaRefactor(respuesta_items_evaluacion, &items_evaluacion)

for _, item := range items_evaluacion {
items_evaluador_formateados += strconv.Itoa(item.Id) + ", "
}

return items_evaluacion, strings.TrimSuffix(items_evaluador_formateados, ", "), nil
}
12 changes: 12 additions & 0 deletions models/cambio_estado_asignacion_evaluador.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package models

import "time"

type CambioEstadoAsignacionEvaluador struct {
Id int
EstadoAsignacionEvaluadorId EstadoAsignacionEvaluador
AsignacionEvaluadorId AsignacionEvaluador
Activo bool
FechaCreacion time.Time
FechaModificacion int16
}
8 changes: 8 additions & 0 deletions models/estado_asignacion_evaluador.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package models

type EstadoAsignacionEvaluador struct {
Id int
Nombre string
CodigoAbreviacion string
Descripcion string
}
26 changes: 26 additions & 0 deletions models/informacion_evaluacion.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package models

type InformacionEvaluacion struct {
NombreEvaluador string `json:"NombreEvaluador"`
Cargo string `json:"Cargo"`
CodigoAbreviacionRol string `json:"CodigoAbreviacionRol"`
DependenciaEvaluadora string `json:"DependenciaEvaluadora"`
FechaEvaluacion string `json:"FechaEvaluacion"`
EmpresaProveedor string `json:"EmpresaProveedor"`
ObjetoContrato string `json:"ObjetoContrato"`
PuntajeTotalEvaluacion int `json:"PuntajeTotalEvaluacion"`
Clasificacion string `json:"Clasificacion"`
ItemsEvaluados []Item `json:"ItemsEvaluados"`
Evaluadores []Evaluador `json:"Evaluadores"`
ResultadoEvaluacion Resultado `json:"ResultadoEvaluacion"`
}

type Evaluador struct {
Documento string `json:"Documento"`
Cargo string `json:"Cargo"`
Rol string `json:"Rol"`
ItemsEvaluados string `json:"ItemEvaluado"`
PuntajeEvaluacion int `json:"PuntajeEvaluacion"`
EstadoEvaluacion string `json:"EstadoEvaluacion"`
Observaciones string `json:"Observaciones"`
}
9 changes: 9 additions & 0 deletions routers/commentsRouter_controllers.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,15 @@ func init() {
Filters: nil,
Params: nil})

beego.GlobalControllerRouter["github.com/udistrital/evaluacion_cumplido_prov_mid/controllers:InformacionEvaluacionController"] = append(beego.GlobalControllerRouter["github.com/udistrital/evaluacion_cumplido_prov_mid/controllers:InformacionEvaluacionController"],
beego.ControllerComments{
Method: "ObtenerInformacionEvaluacion",
Router: "/:asignacion_id",
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})

beego.GlobalControllerRouter["github.com/udistrital/evaluacion_cumplido_prov_mid/controllers:ResultadoEvaluacionController"] = append(beego.GlobalControllerRouter["github.com/udistrital/evaluacion_cumplido_prov_mid/controllers:ResultadoEvaluacionController"],
beego.ControllerComments{
Method: "GuardarResultadoEvaluacion",
Expand Down
5 changes: 5 additions & 0 deletions routers/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ func init() {
beego.NSInclude(
&controllers.DocumentoEvaluacionController{},
),
),
beego.NSNamespace("/informacion-evaluacion",
beego.NSInclude(
&controllers.InformacionEvaluacionController{},
),
))

beego.AddNamespace(ns)
Expand Down
Loading

0 comments on commit 0e4c3f8

Please sign in to comment.