[Authorize(Roles = "administrador,carga_informacion,operador")] //Obtiene todo el contexto de entidad y seguimiento activo de una entidad  de la apertura activa
        public dynamic getSeguimientoAperturaActivaEntidad(string cod_entidad)
        {
            string token = HttpHelpers.GetTokenFromHeader(HttpContext);

            if (token == "")
            {
                return(Unauthorized());
            }

            Base helper = new Base(AppSettings, token, HttpContext.Connection.RemoteIpAddress.ToString());

            if (helper.Role == "carga_informacion")
            {
                cod_entidad = helper.CiaId;
            }

            dynamic seguimientoActivoEntidad = SgmntController.seguimientoAperturaActivaEntidad(cod_entidad);

            return(new
            {
                status = "success",
                mensaje = "encontrado",
                codigo = "200",
                data = seguimientoActivoEntidad
            });
        }
Exemple #2
0
        public object validacionPartesEF([FromBody] dynamic objetoRecibido) // objetoRecibido = {cod_entidad:cod_entidad}
        {
            inicializaDatos(objetoRecibido.cod_entidad.ToString());
            this.cambio_2 = this.aperturaDatos.mCompra;
            this.cambio_4 = this.aperturaDatos.mUFV;
            this.cambio_5 = this.aperturaDatos.mEuroBS;
            this.margenEF = this.aperturaDatos.margen_partes_ef;
            this.factorTC = this.aperturaDatos.factor_tc;

            this.archivosEntidadCadena = ArchivosController.encadenaArchivosDeEntidadMes(this.codigoEntidad, this.mesControl);
            /////////////////////////////// Validacion de Partes de Producción y Siniestros  con Estados Financieros ///////////////////////////////////////////
            int estadoValidezEF = this.validaPartesEF();

            dynamic segEntidad = SgmntController.seguimientoAperturaActivaEntidad(this.codigoEntidad);

            if (estadoValidezEF < Convert.ToInt16(segEntidad.estado)) // si el estado de error de la validacion es peor que el de seguimiento actual, entonces se guarda el peor en el estado del seguimiento:   estados 1 E grave, 2 error , 3 advertencia 4 valido
            {
                SgmntController.modificaEstado(segEntidad.id_seguimiento_envio, estadoValidezEF);
            }

            foreach (Error error in this.errores)
            {
                if (!error.valido)
                {
                    error.id_seguimiento_envio = segEntidad.id_seguimiento_envio;;
                    ErroresController.insertarError(error);
                }
            }
            con.Close();
            this.resultado.status       = "success";
            this.resultado.validoEF     = estadoValidezEF > 2;
            this.resultado.validacionEF = listaValEF; //cada item  contiene { validacion:'titulo', data:{datos de la validacion}, valido: true or false, error:{error con descripcion}, tipo_parte: 'produccion o siniestro' }

            return(this.resultado);
        }
Exemple #3
0
        public object validacionSIF([FromBody] dynamic objetoRecibido)// objetoRecibido = {cod_entidad:cod_entidad}
        {
            inicializaDatos(objetoRecibido.cod_entidad.ToString());
            this.archivosEntidadCadena = ArchivosController.encadenaArchivosDeEntidadMes(this.codigoEntidad, this.mesControl);
            // realiza la validacion_________________________________________________>>>>>>
            dynamic valContenido   = this.realizarValidacionContenido();
            int     estadoValidezC = valContenido.estadoValidez;

            // obtiene el estado de validez que tiene seguimiento_envio ya guardado en la validacion de formato
            dynamic segEntidad    = SgmntController.seguimientoAperturaActivaEntidad(this.codigoEntidad);
            int     estadoValidez = Convert.ToInt16(segEntidad.estado);

            ////------------------------------------- se añade val EF dentro del proceso por un error al llamar en paralelo  ----------------------------------------
            this.cambio_2 = this.aperturaDatos.mCompra;
            this.cambio_4 = this.aperturaDatos.mUFV;
            this.cambio_5 = this.aperturaDatos.mEuroBS;
            this.margenEF = this.aperturaDatos.margen_partes_ef;
            this.factorTC = this.aperturaDatos.factor_tc;

            this.archivosEntidadCadena = ArchivosController.encadenaArchivosDeEntidadMes(this.codigoEntidad, this.mesControl);
            ////////_____________________________>>>> Validacion de Partes de Producción y Siniestros  con Estados Financieros ///////////////////////////////////////////
            int estadoValidezEF = this.validaPartesEF();

            estadoValidez = Math.Min(estadoValidez, Math.Min(estadoValidezC, estadoValidezEF));
            SgmntController.modificaEstado(segEntidad.id_seguimiento_envio, estadoValidez);

            foreach (Error error in this.errores)
            {
                if (!error.valido)
                {
                    error.id_seguimiento_envio = segEntidad.id_seguimiento_envio;
                    ErroresController.insertarError(error);
                }
            }

            List <dynamic> constantes = ConstantesController.obtieneConstantesDeDimension("estado_seguimiento");
            dynamic        estadoSeg  = constantes.Where(x => x.codigo == estadoValidez.ToString()).FirstOrDefault();

            this.con.Close();
            this.resultado.status             = "success";
            this.resultado.estadoValidez      = estadoValidez;
            this.resultado.estadoValidez_desc = estadoSeg.valor + " - " + estadoSeg.descripcion;

            this.resultado.estadoValidezC = estadoValidezC;
            this.resultado.validoC        = estadoValidezC > 2;
            this.resultado.datosC         = this.listaValCont;

            this.resultado.estadoValidezEF = estadoValidezEF;
            this.resultado.validoEF        = estadoValidezEF > 2;
            this.resultado.datosEF         = listaValEF;

            return(this.resultado);
        }
Exemple #4
0
        public dynamic getSeguimientoAperturaActivaEntidad(string cod_entidad)
        {
            dynamic seguimientoActivoEntidad = SgmntController.seguimientoAperturaActivaEntidad(cod_entidad);

            return(new
            {
                status = "success",
                mensaje = "encontrado",
                codigo = "200",
                data = seguimientoActivoEntidad
            });
        }
Exemple #5
0
        // puede ser   envios/2016-03-31    o    envios/apertura_activa
        public dynamic get_SeguimientoEntidades(string aperActiva_fCorte)
        {
            List <dynamic> listaActivos = SgmntController.getSeguimientoEntidades(aperActiva_fCorte);

            return(new
            {
                status = "success",
                mensaje = "encontrados",
                codigo = "200",
                data = listaActivos
            });
        }
Exemple #6
0
        public object validacionConsultaPartesEF(string web_reporte, int idSeguimientoEnvio) //objetoRecibido = {id_seguimiento_envio }
        {
            try
            {
                // my code
                string token = HttpHelpers.GetTokenFromHeader(HttpContext);
                if (token == "")
                {
                    return(Unauthorized());
                }

                Base helper = new Base(AppSettings, token, HttpContext.Connection.RemoteIpAddress.ToString());

                List <Error> erroresLista            = ErroresController.getErroresDeSeguimiento(idSeguimientoEnvio);
                dynamic      seguimientoEntidadDatos = SgmntController.getSeguimientoEntidadDatos(idSeguimientoEnvio);
                this.codigoEntidad      = seguimientoEntidadDatos.cod_entidad.ToString();
                this.erroresDiccionario = ConstantesController.obtieneConstantesDeDimension("error");
                this.aperturaDatos      = AperturaController.getAperturaDeSeguimiento(idSeguimientoEnvio);

                this.fechaCorte = this.aperturaDatos.fecha_corte;
                this.anoControl = this.fechaCorte.Year;
                this.mesControl = this.fechaCorte.Month;
                this.diaControl = this.fechaCorte.Day;

                this.cambio_2 = this.aperturaDatos.mCompra;
                this.cambio_4 = this.aperturaDatos.mUFV;
                this.cambio_5 = this.aperturaDatos.mEuroBS;
                this.margenEF = this.aperturaDatos.margen_partes_ef;
                this.factorTC = this.aperturaDatos.factor_tc;

                this.archivosEntidadCadena = ArchivosController.encadenaArchivosDeEntidadMes(this.codigoEntidad, this.mesControl);

                ////////////////////// FORMATO ////////////////////////////////////////////////
                IEnumerable <Error> erroresF = erroresLista.Where(x => x.cod_error.Substring(0, 1) == "0").OrderBy(x => x.cod_error);
                bool validoF       = true;
                int  estadoValidez = 4;
                foreach (Error errorF in erroresF)
                {
                    errorF.desc_error    = descError(errorF.cod_error);
                    errorF.estadoValidez = estadoValidezDeError(errorF);
                    if (errorF.estadoValidez < estadoValidez)
                    {
                        estadoValidez = errorF.estadoValidez;
                    }
                }
                if (estadoValidez > 1) // si no hay EE
                {
                    // //////////////////////////////Validacion contenidos SIf y varios
                    dynamic valContenido   = this.realizarValidacionContenido();
                    int     estadoValidezC = valContenido.estadoValidez;
                    this.resultado.estadoValidezC = estadoValidezC;
                    this.resultado.validoC        = estadoValidezC > 2;
                    if (web_reporte == "web") //si es WEB se carga en una lista
                    {
                        this.resultado.datosC      = this.listaValCont;
                        this.resultado.validacionC = null;
                    }
                    else if (web_reporte == "reporte") //  sie es en para reporte se separa en objetos que tinen la misma estuctura
                    {
                        this.resultado.validacionC = valContenido;
                        this.resultado.datosC      = null;
                    }

                    /////////////////////////////// Validacion de Partes de Producción y Siniestros  con Estados Financieros ///////////////////////////////////////////
                    int estadoValidezEF = this.validaPartesEF();
                    this.resultado.estadoValidezEF = estadoValidezEF;
                    this.resultado.validoEF        = estadoValidezEF > 2;
                    this.resultado.datosEF         = listaValEF;

                    // del resultado gral
                    estadoValidez = Math.Min(estadoValidez, Math.Min(estadoValidezC, estadoValidezEF));
                }
                else
                {
                    validoF = false;
                }

                this.resultado.aperturaDatos           = this.aperturaDatos;
                this.resultado.seguimientoEntidadDatos = seguimientoEntidadDatos;


                List <dynamic> constantes = ConstantesController.obtieneConstantesDeDimension("estado_seguimiento");
                dynamic        estadoSeg  = constantes.Where(x => x.codigo == estadoValidez.ToString()).FirstOrDefault();

                this.con.Close();
                this.resultado.status             = "success";
                this.resultado.estadoValidez      = estadoValidez;
                this.resultado.estadoValidez_desc = estadoSeg.valor + " - " + estadoSeg.descripcion;

                this.resultado.validoF  = validoF;
                this.resultado.erroresF = erroresF;

                return(this.resultado);
            }
            catch (Exception ex)
            {
                return(new
                {
                    status = "error",
                    mensaje = ex.Message
                });
            }
        }
Exemple #7
0
        public object validacionSIF([FromBody] dynamic objetoRecibido)// objetoRecibido = {cod_entidad:cod_entidad}
        {
            try
            {
                // my code
                string token = HttpHelpers.GetTokenFromHeader(HttpContext);
                if (token == "")
                {
                    return(Unauthorized());
                }

                Base helper = new Base(AppSettings, token, HttpContext.Connection.RemoteIpAddress.ToString());
                if (helper.Role == "carga_informacion")
                {
                    objetoRecibido.cod_entidad = helper.CiaId;
                }

                inicializaDatos(objetoRecibido.cod_entidad.ToString());
                this.archivosEntidadCadena = ArchivosController.encadenaArchivosDeEntidadMes(this.codigoEntidad, this.mesControl);
                // realiza la validacion_________________________________________________>>>>>>
                dynamic valContenido   = this.realizarValidacionContenido();
                int     estadoValidezC = valContenido.estadoValidez;

                // obtiene el estado de validez que tiene seguimiento_envio ya guardado en la validacion de formato
                dynamic segEntidad    = SgmntController.seguimientoAperturaActivaEntidad(this.codigoEntidad);
                int     estadoValidez = Convert.ToInt16(segEntidad.estado);

                ////------------------------------------- se añade val EF dentro del proceso por un error al llamar en paralelo  ----------------------------------------
                this.cambio_2 = this.aperturaDatos.mCompra;
                this.cambio_4 = this.aperturaDatos.mUFV;
                this.cambio_5 = this.aperturaDatos.mEuroBS;
                this.margenEF = this.aperturaDatos.margen_partes_ef;
                this.factorTC = this.aperturaDatos.factor_tc;

                this.archivosEntidadCadena = ArchivosController.encadenaArchivosDeEntidadMes(this.codigoEntidad, this.mesControl);
                ////////_____________________________>>>> Validacion de Partes de Producción y Siniestros  con Estados Financieros ///////////////////////////////////////////
                int estadoValidezEF = this.validaPartesEF();

                estadoValidez = Math.Min(estadoValidez, Math.Min(estadoValidezC, estadoValidezEF));
                SgmntController.modificaEstado(segEntidad.id_seguimiento_envio, estadoValidez);

                foreach (Error error in this.errores)
                {
                    if (!error.valido)
                    {
                        error.id_seguimiento_envio = segEntidad.id_seguimiento_envio;
                        ErroresController.insertarError(error);
                    }
                }

                List <dynamic> constantes = ConstantesController.obtieneConstantesDeDimension("estado_seguimiento");
                dynamic        estadoSeg  = constantes.Where(x => x.codigo == estadoValidez.ToString()).FirstOrDefault();

                this.con.Close();
                this.resultado.status             = "success";
                this.resultado.estadoValidez      = estadoValidez;
                this.resultado.estadoValidez_desc = estadoSeg.valor + " - " + estadoSeg.descripcion;

                this.resultado.estadoValidezC = estadoValidezC;
                this.resultado.validoC        = estadoValidezC > 2;
                this.resultado.datosC         = this.listaValCont;

                this.resultado.estadoValidezEF = estadoValidezEF;
                this.resultado.validoEF        = estadoValidezEF > 2;
                this.resultado.datosEF         = listaValEF;

                return(this.resultado);
            }
            catch (Exception ex)
            {
                return(new
                {
                    status = "error",
                    mensaje = ex.Message
                });
            }
        }
Exemple #8
0
        [Authorize(Roles = "carga_informacion,operador,administrador")] // definir sólo los roles que pueden invocar a esta acción
        public object validacionFormato([FromBody] dynamic objetoRecibido)
        {
            try
            {
                // my code
                string token = HttpHelpers.GetTokenFromHeader(HttpContext);
                if (token == "")
                {
                    return(Unauthorized());
                }

                Base helper = new Base(AppSettings, token, HttpContext.Connection.RemoteIpAddress.ToString());


                // some stuff


                //if (helper.CiaId == "101")
                //{

                //}
                // end my code


                if (helper.Role == "carga_informacion")
                {
                    objetoRecibido.cod_entidad = helper.CiaId;
                }

                inicializaDatos(objetoRecibido.cod_entidad.ToString());
                bool correcto = true;
                int  validezF = 4; //valido

                foreach (var item in objetoRecibido.archivosCargados)
                {
                    ArchivoCargado env = new ArchivoCargado();
                    env.nombre = item.nombre.ToString();
                    env.texto  = item.texto.ToString();
                    archivosEnv.Add(env);
                }

                // ####  PROCESOS DE VALIDACION

                this.resultado.erroresF = this.errores;
                // #### Verifica si la entidad con la que el usuario se hace log, existe y esta activa, caso contrario se sale con errorF:  error de Entida no existente
                if (correcto && !validarEntidad())
                {
                    correcto = false;
                    validezF = 1;
                    return(resultado);
                }

                // #### Verifica que los archivos enviados son los correctos correctos.  Si no estan todos los archivos correctos, retorna mostrando los errores
                if (correcto && !validarArchivosEnviadosNombres(this.archivosEnv))
                {
                    correcto = false;
                    validezF = 1;
                }

                // #### SI  LOS ARCHIVOS SON LOS CORRECTOS SE REALIZA ESTA PARTE
                // convierte el campo validaciones a un JSON y transforma el texto en un Array de filas y columnas
                if (correcto)
                {
                    this.transformaDatos(this.archivosEnv);
                }

                // #### VERIFICA LAS VALIDACIONES JSON
                // #### Se realiza la  Validacion de formato de texto (columnas, y typos de datos),
                // llegando aqui se cargan las listas de departamentos, monedas, modalidades, modalidadesRamos, modalidadesRamosPolizas
                // la funcion devuelve V EE o A; segun el error o advertencia en caso de las validaciones mayor que 0.
                string estadoValidaFormato = "";
                if (correcto)
                {
                    estadoValidaFormato = this.validarFormatoTexto(this.archivosEnv);
                }

                if (correcto && estadoValidaFormato != "V")                //si es distinto de valido se setea el estadoEnvio segun el error //////////////////////////
                {
                    validezF = estadoValidaFormato == "EE" ? 1 : 3;        // es Error 1: EE o 3:  Advertencia
                    correcto = estadoValidaFormato == "EE" ? false : true; // En esta validacion de formato solo puede ser EE A o V, si no es EE es correcto
                }

                // antes de insertar se eliminan los registros de los archivos , de igual manera si hubieron errors se eliminan los registros
                eliminarDeTablaVal("A", this.codigoEntidad, this.fechaCorte);
                eliminarDeTablaVal("B", this.codigoEntidad, this.fechaCorte);
                eliminarDeTablaVal("C", this.codigoEntidad, this.fechaCorte);
                eliminarDeTablaVal("D", this.codigoEntidad, this.fechaCorte);
                eliminarDeTablaVal("E", this.codigoEntidad, this.fechaCorte);
                eliminarDeTablaVal("F", this.codigoEntidad, this.fechaCorte);
                eliminarDeTablaVal("G", this.codigoEntidad, this.fechaCorte);
                eliminarDeTablaVal("H", this.codigoEntidad, this.fechaCorte);
                //ingresa los datos a las tablas
                if (correcto)
                {
                    foreach (var arch in this.archivosEnv)
                    {
                        int i = 0;
                        foreach (var registro in arch.objetosFila)
                        {
                            try
                            {
                                insertarITF(arch.codigo, registro);
                                i++;
                            }
                            catch (System.Exception ex)
                            {
                                // EE - 00 "No se pudo guardar la información, por favor intente de enviar nuevamente todos los archivos, ",
                                errores.Add(err("000", arch.nombre, "Si continua el error, comuniquese con la APS, comunicando el siguiente mensaje:  \n Error de tabla al insertar, " + ex.Message, 0, 0));
                                eliminarDeTablaVal("A", this.codigoEntidad, this.fechaCorte);
                                eliminarDeTablaVal("B", this.codigoEntidad, this.fechaCorte);
                                eliminarDeTablaVal("C", this.codigoEntidad, this.fechaCorte);
                                eliminarDeTablaVal("D", this.codigoEntidad, this.fechaCorte);
                                eliminarDeTablaVal("E", this.codigoEntidad, this.fechaCorte);
                                eliminarDeTablaVal("F", this.codigoEntidad, this.fechaCorte);
                                eliminarDeTablaVal("G", this.codigoEntidad, this.fechaCorte);
                                eliminarDeTablaVal("H", this.codigoEntidad, this.fechaCorte);
                                correcto = false;
                                validezF = 1;
                                break;
                            }
                        }
                    }
                }

                // borra los errores relacionados con seguiiento_envios no vigentes
                ErroresController.borrarErroresDelLaMismaApertura(this.codigoEntidad);
                int idSeguimiento = SgmntController.insertarSeguimientoEnvio(this.codigoEntidad, validezF);
                int estadoValidez = 4;
                foreach (Error errorF in this.errores)
                {
                    errorF.id_seguimiento_envio = idSeguimiento;
                    errorF.creado_por           = helper.UsuarioId;
                    ErroresController.insertarError(errorF);

                    errorF.desc_error = descError(errorF.cod_error);
                    if (errorF.estadoValidez < estadoValidez)
                    {
                        estadoValidez = errorF.estadoValidez;
                    }
                }
                con.Close();
                List <dynamic> constantes = ConstantesController.obtieneConstantesDeDimension("estado_seguimiento");
                dynamic        estadoSeg  = constantes.Where(x => x.codigo == estadoValidez.ToString()).LastOrDefault();


                this.resultado.status             = "success";
                this.resultado.validoF            = correcto;
                this.resultado.estadoValidez      = estadoValidez;
                this.resultado.estadoValidez_desc = estadoSeg.valor + " - " + estadoSeg.descripcion;
                this.resultado.tipoValidacion     = "formato";
                this.resultado.erroresF           = this.errores;
                // resultado.env = this.archivosEnv;
                return(this.resultado);
            }
            catch (Exception ex)
            {
                return(new
                {
                    status = "error",
                    mensaje = ex.Message
                });
            }
        }
        public object consolidacionDeEntidad([FromBody] dynamic objObservaciones)
        {
            string token = HttpHelpers.GetTokenFromHeader(HttpContext);

            if (token == "")
            {
                return(Unauthorized());
            }

            Base helper = new Base(AppSettings, token, HttpContext.Connection.RemoteIpAddress.ToString());

            List <dynamic> enviosAct = SgmntController.getSeguimientoEntidades("apertura_activa");

            enviosAct = enviosAct.Where(x => x.valido && (x.estado_cierre == null || x.estado_cierre == "")).ToList();

            this.fechaCorte = con.Query <DateTime>("Select fecha_corte from aperturas where activo").FirstOrDefault();
            con.Close();
            this.inicializaGlobalVars();

            string         estadoCierre   = this.esMesSolvencia ? "consolidado" : "cerrado";
            List <dynamic> listaRes       = new List <dynamic>();
            bool           procesoExitoso = true;
            Exception      excepcion      = null; // TO DO habilitar error para visualizar errores, deshabilitar en produccion

            if (objObservaciones.observaciones == null)
            {
                objObservaciones.observaciones = "";
            }

            if (enviosAct.Count > 0)
            {
                // dynamic consolidacionActiva = this.obtieneUltimaConsolidacion().data;
                //INICIALIZA PROCESO CONSOLIDACION
                int id_consolidacion = this.insertConsolidacion(objObservaciones.observaciones.ToString(), helper);

                foreach (dynamic envio in enviosAct)
                {
                    try
                    {
                        // Realiza la consolidacion por cada entidad que ha eviado y la info sea valida y activa, y no haya sido consolidaa
                        if (envio.valido && (envio.estado_cierre == null || envio.estado_cierre == ""))
                        {
                            this.ctxSeguimiento = envio;
                            this.codigoEntidad  = ctxSeguimiento.cod_entidad;

                            // llena las tablas iftPartesProduccionSiniestros,
                            this.llenaIftPartesProduccionSiniestros(this.codigoEntidad);
                            // llena las tablas iftPartesProduccionRamos,
                            this.llenaIftPartesProduccionRamos(this.codigoEntidad);
                            // llena iftPartesSiniestrosRamos
                            this.llenaIftPartesSiniestrosRamos(this.codigoEntidad);
                            // llena tabla , iftPartesSegurosLargoPlazo
                            this.llenaIftPartesSegurosLargoPlazo(this.codigoEntidad);
                            // Se realiza la consolidacion
                            // carga los saldos totales de la tabla val_balance_estado_resultados
                            this.llenaSaldosTotales(this.codigoEntidad);
                            //  1  realiza la carga a la tabla iftBalanceEstadoResultados  sin duplicados
                            this.consolidaInfoMensualAntesDeCierre(this.codigoEntidad);
                            // 2. Consolida PartesProduccionCorredoras  iftPartesProduccionCorredoras
                            this.consolidaProduccionCorredoras(this.codigoEntidad);

                            // 3 inserta las excepciones  Caso BUPA 201
                            this.insertarComodines();

                            if (esMesSolvencia)
                            {
                                //inserta campos vacios por la entidad en las tablas iftPatrimonioTecnico y tMSPrevisionales
                                this.insertaPatrimonioTecnicoVacio();
                                this.insertaMargenSolvenciaPrevisionalesVacio();
                            }
                            this.paso = 1;

                            // llama al metodo que realiza pasos para el cierre
                            this.procedimientosHastaMargenSolvencia(this.codigoEntidad);
                            // llama  a los procedimientos siguientes para informacion estadistica WEB y SIG
                            this.procedimientosCierreHastaSIG(this.codigoEntidad);

                            this.informacionFinancieraOLAP();


                            ////_____________________________ se crea la respuesta  que es una lista de las compañias enviadas ________________________
                            object seguimientoConsolidacion = new
                            {
                                id_seguimiento_envio = envio.id_seguimiento_envio,
                                cod_entidad          = envio.cod_entidad,
                                id_consolidacion     = id_consolidacion,
                                estado_cierre        = estadoCierre
                            };
                            // asigna el valor de id_consolidacion al seguimiento y le asigna su estadoCierre
                            con.Execute(@"UPDATE seguimiento_envios SET id_consolidacion = @id_consolidacion, estado_cierre = @estado_cierre
                            WHERE id_seguimiento_envio = @id_seguimiento_envio", seguimientoConsolidacion);
                            con.Close();

                            listaRes.Add(seguimientoConsolidacion);
                        }
                    }
                    catch (Exception e)
                    {
                        procesoExitoso = false;
                        excepcion      = e;
                        break;
                    };
                }
                ;

                estadoCierre = procesoExitoso ? estadoCierre : ""; //  si no hubo error se cambi al estado Consolidado o cerrado , segun si fue normal o trimestral, caso contrario "consolidacion.estado" vuelve al valor que tenia originalmente
                this.estadoConsolidacion(id_consolidacion, estadoCierre, false);
            }
            con.Close();
            conSegSql.Close();
            return(new
            {
                status = "success",
                calculo_solvencia = this.esMesSolvencia,
                errorEnCierre = !procesoExitoso,
                excepcion = excepcion,
                paso = this.paso,
                data = new
                {
                    lista = listaRes,
                    estadoCierre = estadoCierre
                }
            });
        }
        public object cerrarConsolidados([FromBody] List <dynamic> consolidadosOb) //consolidadosOB tiene los objetos envio  con mPatTecnico y mMSPrevisional de cada entidad
        {
            List <dynamic> enviosAct           = SgmntController.getSeguimientoEntidades("apertura_activa");
            List <dynamic> consolidacionesList = enviosAct.Where(x => x.estado_cierre != null && x.estado_cierre == "consolidado").Select(x => x.id_consolidacion).Distinct().ToList();

            this.fechaCorte = con.Query <DateTime>("Select fecha_corte from aperturas where activo").FirstOrDefault();
            con.Close();
            this.inicializaGlobalVars();
            List <dynamic> listaRes = new List <dynamic>();

            bool      procesoExitoso = true;
            Exception excepcion      = null;

            // Ya no se realiza este paso y aque pueden ser varias consolidaciones para un periodo
            // dynamic consolidacionActiva = this.obtieneUltimaConsolidacion().data;
            // //INICIALIZA PROCESO CONSOLIDACION
            // int id_consolidacion = consolidacionActiva.id_consolidacion;

            string estadoCierre = "cerrado";

            foreach (dynamic consolidacionId in consolidacionesList)
            {
                int            id_consolidacion    = Convert.ToInt32(consolidacionId);
                List <dynamic> enviosConsolidacion = enviosAct.Where(x => x.id_consolidacion == id_consolidacion).ToList();
                // return consolidacionesList;
                foreach (dynamic envio in enviosConsolidacion)
                {
                    try
                    {
                        if ((bool)envio.valido == true && envio.estado_cierre == "consolidado" && envio.id_consolidacion == id_consolidacion)
                        {
                            this.ctxSeguimiento = envio;
                            this.codigoEntidad  = envio.cod_entidad;

                            dynamic consolidadoOBItem = consolidadosOb.Where(x => x.id_seguimiento_envio == envio.id_seguimiento_envio).FirstOrDefault();
                            //inserta los valores de PAtrimonioTecnico y MSprevisional
                            decimal valorPT            = Convert.ToDecimal(consolidadoOBItem.mPatTecnico.ToString().Replace(".", ",")); //envio.mPatTecnico.ToString().ToDecimal();
                            decimal valorMSprevisional = Convert.ToDecimal(consolidadoOBItem.mMSPrevisional.ToString().Replace(".", ","));

                            this.insertarPatrimonioTecnico(valorPT);
                            this.insertarMSolvenciaPrevisional(valorMSprevisional);

                            //______________________ Continua con los pasos Hasta Margen de Solvencia _______________________
                            // llama al metodo que  realiza solo los pasos hasta el calculo de Margen de solvencia e indicadores
                            this.procedimientosHastaMargenSolvencia(this.codigoEntidad);


                            // Todos los consolidados pasan a estado cerrado
                            object seguimientoConsolidacion = new
                            {
                                id_seguimiento_envio = (int)envio.id_seguimiento_envio,
                                id_consolidacion     = (int)envio.id_consolidacion,
                                estado_cierre        = estadoCierre.ToString()
                            };

                            // asigna  al seguimiento su estadoCierre
                            con.Execute(@"UPDATE seguimiento_envios SET id_consolidacion = @id_consolidacion, estado_cierre = @estado_cierre
                            WHERE id_seguimiento_envio = @id_seguimiento_envio", seguimientoConsolidacion);
                            con.Close();

                            listaRes.Add(seguimientoConsolidacion);
                        }
                    }
                    catch (Exception e)
                    {
                        procesoExitoso = false;
                        excepcion      = e;
                        break;
                    }
                }

                string estado_cierre = procesoExitoso ? estadoCierre : "consolidado"; //  si no hubo error se cambi al estado Consolidado o cerrado , segun si fue normal o trimestral, caso contrario "consolidacion.estado" vuelve al valor que tenia originalmente
                this.estadoConsolidacion(id_consolidacion, estado_cierre, false);
            }

            con.Close();
            conSegSql.Close();
            return(new
            {
                status = "success",
                calculo_solvencia = this.esMesSolvencia,
                errorEnCierre2 = !procesoExitoso,
                excepcion = excepcion,
                data = new
                {
                    lista = listaRes,
                    estadoCierre = procesoExitoso ? estadoCierre : "consolidado"
                }
            });
        }