public Decimal AdicionarCalificacionYDetallesParaUnProceso(Decimal ID_PROVEEDOR,
            Decimal TOTAL_CALIFICACION,
            String OBSERVACIONES,
            String TIPO_PROCESO,
            String APROBADO,
            DateTime FECHA,
            String CONTROL_ACTUALIZACION_ESTADO_PROVEEDOR,
            List<calificacionProveedores> listaCriteriosEvaluados,
            Byte[] ARCHIVO,
            Int32 ARCHIVO_TAMANO,
            String ARCHIVO_EXTENSION,
            String ARCHIVO_TYPE)
        {
            Decimal ID_CALIFICACION = 0;
            Decimal ID_DETALLE = 0;
            Decimal ID_DOCUMENTO_EVALUACION = 0;
            Boolean verificador = true;

            Conexion conexion = new Conexion(Empresa);
            conexion.IniciarTransaccion();

            try
            {
                ID_CALIFICACION = AdicionarAlmCalificacionProveedor(ID_PROVEEDOR, TOTAL_CALIFICACION, OBSERVACIONES, TIPO_PROCESO, APROBADO, FECHA, CONTROL_ACTUALIZACION_ESTADO_PROVEEDOR, conexion);

                if (ID_CALIFICACION <= 0)
                {
                    conexion.DeshacerTransaccion();
                    ID_CALIFICACION = 0;
                }
                else
                {
                    foreach (calificacionProveedores calificacionCriterio in listaCriteriosEvaluados)
                    {
                        ID_DETALLE = AdicionarAlmDetalleCalificacion(calificacionCriterio.ID_CRITERIO, ID_CALIFICACION, calificacionCriterio.CALFICACION, conexion);

                        if (ID_DETALLE <= 0)
                        {
                            conexion.DeshacerTransaccion();
                            ID_CALIFICACION = 0;
                            verificador = false;
                            break;
                        }
                    }

                    if (verificador == true)
                    {
                        if (ARCHIVO != null)
                        {
                            ID_DOCUMENTO_EVALUACION = Convert.ToDecimal(conexion.ExecuteEscalarParaAdicionaDocumentoCalificacionProveedor(ID_CALIFICACION, TIPO_PROCESO, ARCHIVO, ARCHIVO_EXTENSION, ARCHIVO_TAMANO, ARCHIVO_TYPE, Usuario));

                            if (ID_DOCUMENTO_EVALUACION <= 0)
                            {
                                conexion.DeshacerTransaccion();
                                ID_CALIFICACION = 0;
                                verificador = false;
                            }
                        }
                    }
                }

                if (verificador == true)
                {
                    conexion.AceptarTransaccion();
                }
            }
            catch
            {
                conexion.DeshacerTransaccion();
                ID_CALIFICACION = 0;
            }
            finally
            {
                conexion.Desconectar();
            }

            return ID_CALIFICACION;
        }