/// <summary>
 /// Establece la Moneda de Compra Seleccionada previamente
 /// </summary>
 /// <param name="moneda"></param>
 public void EstablecerMonedaCompra(MonedaBO moneda)
 {
     if (moneda != null && moneda.Codigo != null && moneda.Codigo.Trim().Length > 0)
     {
         ddlMonedas.SelectedValue = moneda.Codigo;
     }
     else
     {
         ddlMonedas.SelectedIndex = 0;
     }
 }
        /// <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);
                }
            }
        }