Closed JuanCamiloMartinezLopez closed 5 months ago
@faidercamilo26 se comparte la petición de jbpm para la consulta de contratos asociados a una o varias dependencias, en una o varias vigencias, para el desarrollo de la issue:
curl --location 'http://busservicios.intranetoas.udistrital.edu.co:8282/administrativa/contratos_dependencias' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"dependencias":"'\''DEP12'\'','\''DEP626'\''","vigencias":"2017,2018"}
tambien se puede enviar {"dependencias":"'DEP12','DEP626'","vigencias":"2017,2018"}
Se ha estado trabajando en la función FiltrosDependencia() que es la encargada de traer todos los datos de numero de contrato suscrito y vigencia de todos los datos que coincidan con los filtros, sin embargo, se esta presentando un error, se adjunta el codigo trabajado y capturas del error que se esta presentando:
func FiltrosDependencia(dependencias []string, vigencias []string) (contratos []models.ContratoDependencia, outputError map[string]interface{}) {
defer func() {
if err := recover(); err != nil {
outputError := map[string]interface{}{
"Succes": false,
"Status": 502,
"Message": "Error al filtrar los pagos",
"Funcion": "FiltrosDependencia",
"Error": err,
}
panic(outputError)
}
}()
type contratoDependencia struct {
Dependencias string `json:"dependencias"`
Vigencias string `json:"vigencias"`
}
//Se agregan los años actuales de vigencias de la OATI, en un futuro cuando hayan más solo se debe agregar el año al slice
var vigencias_oficina = []string{"2017", "2018", "2019", "2020", "2021", "2022", "2023"}
var parametro_dependencia string
var parametro_vigencia string
if len(dependencias) == 0 {
outputError := map[string]interface{}{
"Succes": false,
"Status": 502,
"Message": "Debe procporcionar como minimo una dependencia",
"Funcion": "FiltrosDependencia",
}
return nil, outputError
} else if len(vigencias) == 0 {
for _, vigencia_oficina := range vigencias_oficina {
parametro_vigencia += vigencia_oficina
}
} else {
for j, dependencia := range dependencias {
if j == (len(dependencias) - 1) {
parametro_dependencia += "'" + dependencia + "'"
} else {
parametro_dependencia += "'" + dependencia + "',"
}
}
for i, vigencia := range vigencias {
if i == (len(vigencias) - 1) {
parametro_vigencia += vigencia
} else {
parametro_vigencia += vigencia + ","
}
}
}
//fmt.Println("dependencias: " + parametro_dependencia)
//fmt.Println("vigencias: " + parametro_vigencia)
parametro := contratoDependencia{
Dependencias: parametro_dependencia,
Vigencias: parametro_vigencia,
}
var respuesta_peticion map[string]interface{}
fmt.Println("URL: " + beego.AppConfig.String("UrlPruebasAdministrativaJBPM") + "/contratos_dependencias")
err := sendJson(beego.AppConfig.String("UrlPruebasAdministrativaJBPM")+"/contratos_dependencias", "POST", &respuesta_peticion, parametro)
if err == nil {
LimpiezaRespuestaRefactor(respuesta_peticion, &contratos)
return contratos, nil
} else {
outputError = map[string]interface{}{"funcion": "/FiltrosDependencia", "err": err.Error(), "status": "404"}
fmt.Println(err)
return nil, outputError
}
return
}
Se realiza toda la lógica para el helper FiltrosDependencia() que es el encargado de filtrar los números de contratos suscritos y vigencias con una lista de dependencias y vigencias, cabe aclarar que es obligatorio para esta función que se ingrese mínimo una dependencia, pero las vigencias son opcionales, sino se proporciona ninguna, el helper retornara las dependencias que coincidan con todas las vigencias disponibles. Para realizar el retorno correcto con las etiquetas y el tipo de valor necesario para esta función se crea el nuevo modelo ContratoSuscritoDependencia.
Anteriormente se tenia el “EOF” el cual se debia a problemas en la configuración que se tenia para enviar la petición “POST” por lo tanto en el documento de utilidades se crea la función sendJson3 que se encarga de realizar las peticiones realizando las configuraciones correspondientes, se crea en utilidades.go porque es posible que se pueda utilizar globalmente en otras partes del código.
func sendJson3(url string, trequest string, target interface{}, datajson interface{}) error {
// Convertir datajson en un Formato Json para poderlo enviar como parametro
b := new(bytes.Buffer)
if datajson != nil {
if err := json.NewEncoder(b).Encode(datajson); err != nil {
fmt.Println(err)
beego.Error(err)
}
}
// Crear una nueva solicitud POST con el cuerpo del JSON
req, err := http.NewRequest(trequest, url, b)
if err != nil {
fmt.Println("Error al crear la solicitud POST:", err)
return err
}
//Configurar el encabezado Accept
req.Header.Set("Accept", "application/json")
// Configurar el encabezado Content-Type
req.Header.Set("Content-Type", "application/json")
// Configurar el cliente HTTP con tiempo de espera y tamaño de búfer
client := &http.Client{
Timeout: time.Second * 10, // Tiempo de espera máximo de 10 segundos
Transport: &http.Transport{
MaxIdleConns: 100, // Número máximo de conexiones inactivas permitidas
MaxIdleConnsPerHost: 100, // Número máximo de conexiones inactivas permitidas por host
},
}
// Realizar la solicitud POST
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error al enviar la solicitud POST:", err)
return err
}
defer func() {
if err := resp.Body.Close(); err != nil {
beego.Error(err)
}
}()
return json.NewDecoder(resp.Body).Decode(target)
}
Buen trabajo @faidercamilo26
Se requiere desarrollar un endpoint para que mediante la consulta un servicio de JBPM (faltante) se obtienen los número contratos y vigencias correspondientes, los cuales se usarán para como input del helper
Sub Tareas
Criterios de aceptación
Requerimientos
No aplica
Definition of Ready - DoR
Definition of Done - DoD - Desarrollo