/// <summary>
        /// Actualiza el cierre de un contrato de RD
        /// </summary>
        public void CerrarContrato()
        {
            string s;

            if ((s = this.ValidarCampos()) != null)
            {
                this.vista.MostrarMensaje(s, ETipoMensajeIU.ADVERTENCIA, null);
                return;
            }
            Guid firma = Guid.NewGuid();

            try {
                #region Transaccion

                dctx.SetCurrentProvider("Outsourcing");
                dctx.OpenConnection(firma);
                dctx.BeginTransaction(firma);

                #endregion

                ////Se obtiene la información a partir de la Interfaz de Usuario
                ContratoPSLBO bo = (ContratoPSLBO)this.InterfazUsuarioADato();

                GeneradorPagoPSLBR GenerarPagosBr = new GeneradorPagoPSLBR();
                var pagos = ObtenerPagosContrato(bo.ContratoID);
                ////Se crea el objeto de seguridad
                UsuarioBO usuario = new UsuarioBO()
                {
                    Id = this.vista.UsuarioID
                };
                AdscripcionBO adscripcion = new AdscripcionBO()
                {
                    UnidadOperativa = new UnidadOperativaBO()
                    {
                        Id = this.vista.UnidadOperativaID
                    }
                };
                SeguridadBO seguridadBO = new SeguridadBO(Guid.Empty, usuario, adscripcion);

                //Crear pago de adicional
                var ultimoPago = 0;
                if (pagos.Count > 0)
                {
                    ultimoPago = (int)ObtenerUltimoNumeroPago(pagos);
                }
                GenerarPagosBr.ModuloID = this.vista.ModuloID;
                GenerarPagosBr.GenerarPagoAdicional(dctx, bo, (ultimoPago + 1), seguridadBO, true, true);

                //Se actualiza en la base de datos
                this.controlador.Terminar(this.dctx, bo, (ContratoPSLBO)this.vista.UltimoObjeto, seguridadBO);
                dctx.CommitTransaction(firma);

                this.LimpiarSesion();
                this.vista.LimpiarPaqueteNavegacion("UltimoContratoPSLBO");
                this.vista.EstablecerPaqueteNavegacion("ContratoPSLBO", bo);
                this.vista.RedirigirADetalles();
            } catch (Exception ex) {
                dctx.RollbackTransaction(firma);
                throw new Exception(nombreClase + ".CerrarContrato:" + ex.Message);
            } finally {
                if (dctx.ConnectionState == ConnectionState.Open)
                {
                    dctx.CloseConnection(firma);
                }
            }
        }
        /// <summary>
        /// Registra un Contrato RO
        /// </summary>
        private void Registrar()
        {
            #region Se inicia la Transaccion
            dctx.SetCurrentProvider("Outsourcing");
            Guid firma = Guid.NewGuid();
            try {
                dctx.OpenConnection(firma);
                dctx.BeginTransaction(firma);
            } catch (Exception) {
                if (dctx.ConnectionState == ConnectionState.Open)
                {
                    dctx.CloseConnection(firma);
                }
                throw new Exception("Se encontraron inconsistencias al insertar el Contrato.");
            }
            #endregion

            try {
                //Se obtiene la información a partir de la Interfaz de Usuario
                ContratoPSLBO bo = (ContratoPSLBO)this.InterfazUsuarioADato();
                if (bo.Estatus == EEstatusContrato.EnPausa)
                {
                    #region LLenar el anexo por cambios en la renovación.
                    AnexosContratoPSLBO anexo = new AnexosContratoPSLBO();
                    anexo.FechaInicio             = bo.FechaInicioActual;
                    anexo.FechaFin                = bo.FechaPromesaActual;
                    anexo.FechaIntercambioUnidad  = null;
                    anexo.MontoTotalArrendamiento = bo.MontoTotalArrendamiento;
                    anexo.TipoAnexoContrato       = ETipoAnexoContrato.Contrato;
                    anexo.Vigente       = true;
                    anexo.ContratoPSLID = this.vista.ContratoID;
                    anexo.FC            = this.vista.FUA;
                    anexo.FUA           = this.vista.FUA;
                    anexo.UC            = this.vista.UUA;
                    anexo.UUA           = this.vista.UUA;

                    ArchivoBO archivo = new ArchivoBO();
                    archivo.Activo    = true;
                    archivo.Auditoria = new AuditoriaBO {
                        FC = this.vista.FUA, FUA = this.vista.FUA, UC = this.vista.UUA, UUA = this.vista.UUA
                    };
                    archivo.TipoAdjunto = ETipoAdjunto.AnexoContrato;
                    archivo.TipoArchivo = this.presentadorDocumentos.Vista.TiposArchivo.Find(x => x.Extension.ToUpper() == "PDF");

                    Random random = new Random();
                    archivo.Nombre      = "Anexo_" + DateTime.Now.ToShortDateString().Replace("/", string.Empty) + random.Next(99999).ToString() + ".pdf";
                    archivo.NombreCorto = archivo.Nombre;

                    Dictionary <string, object> dataSources = new Dictionary <string, object>();
                    #region Consulta periodoTarifario.
                    List <DiaPeriodoTarifaBO> lstTemp         = new List <DiaPeriodoTarifaBO>();
                    DiaPeriodoTarifaBR        periodoTarifaBR = new DiaPeriodoTarifaBR();
                    lstTemp = periodoTarifaBR.Consultar(dctx, new DiaPeriodoTarifaBO()
                    {
                        UnidadOperativaID = this.vista.UnidadOperativaID
                    });
                    if (lstTemp.Count == 1)
                    {
                        dataSources.Add("PeriodoTarifa", lstTemp[0]);
                    }
                    if (!string.IsNullOrEmpty(bo.Divisa.MonedaDestino.Codigo))
                    {
                        MonedaBO moneda = FacadeBR.ConsultarMoneda(this.dctx, new MonedaBO()
                        {
                            Codigo = bo.Divisa.MonedaDestino.Codigo
                        }).FirstOrDefault();
                        dataSources.Add("Moneda", moneda);
                    }
                    #endregion
                    dataSources["ContratoPSLBO"] = bo;
                    ContratoAnexoROCRPT reporteCorrectivo = new ContratoAnexoROCRPT(dataSources);
                    using (MemoryStream stream = new MemoryStream()) {
                        reporteCorrectivo.CreateDocument();
                        reporteCorrectivo.ExportToPdf(stream);
                        archivo.Archivo = stream.GetBuffer();
                    }
                    anexo.AgregarAnexo(archivo);
                    bo.AgregarAnexoContrato(anexo);
                    #endregion

                    #region Llenando información del pago
                    GeneradorPagoPSLBR generadorPago = new GeneradorPagoPSLBR();
                    //Cuando se genera el pago se llenan los campos de acumulados de tarifas
                    generadorPago.ObtenerPagos(new PagoContratoPSLBO(), bo, null, 0, ETipoPago.NORMAL);
                    #endregion
                }

                //Se crea el objeto de seguridad
                UsuarioBO usuario = new UsuarioBO()
                {
                    Id = this.vista.UsuarioID
                };
                AdscripcionBO adscripcion = new AdscripcionBO()
                {
                    UnidadOperativa = new UnidadOperativaBO()
                    {
                        Id = this.vista.UnidadOperativaID
                    }
                };
                SeguridadBO seguridadBO = new SeguridadBO(Guid.Empty, usuario, adscripcion);

                //Se inserta en la base de datos
                this.controlador.InsertarCompleto(this.dctx, bo, seguridadBO);
                //Se consulta lo insertado para recuperar los ID
                DataSet ds = this.controlador.ConsultarSet(this.dctx, bo);
                if (ds.Tables[0].Rows.Count <= 0)
                {
                    throw new Exception("Al consultar lo insertado no se encontraron coincidencias.");
                }
                if (ds.Tables[0].Rows.Count > 1)
                {
                    throw new Exception("Al consultar lo insertado se encontró más de una coincidencia.");
                }

                bo.ContratoID = this.controlador.DataRowToContratoPSLBO(ds.Tables[0].Rows[0]).ContratoID;

                //El proceso de generación de pagos es eliminado de esta sección
                dctx.CommitTransaction(firma);

                //Se despliega la información en la Interfaz de Usuario
                this.DatoAInterfazUsuario(bo);
            } catch (Exception ex) {
                dctx.RollbackTransaction(firma);
                throw new Exception(this.nombreClase + ".Registrar:" + ex.Message);
            } finally {
                if (dctx.ConnectionState == ConnectionState.Open)
                {
                    dctx.CloseConnection(firma);
                }
            }
        }