public CerrarContratoManttoPRE(ICerrarContratoManttoVIS vistaActual, IucHerramientasManttoVIS vistaHerramientas, IucContratoManttoVIS vistaContrato, IucLineaContratoManttoVIS vistaLinea)
        {
            try
            {
                this.vista = vistaActual;

                this.presentadorContrato     = new ucContratoManttoPRE(vistaContrato, vistaLinea);
                this.presentadorHerramientas = new ucHerramientasManttoPRE(vistaHerramientas);

                this.controlador    = new ContratoManttoBR();
                this.pagoCtrl       = new PagoUnidadContratoBR();
                this.generadorPagos = new GeneradorPagosManttoBR();

                this.dctx = FacadeBR.ObtenerConexion();
            }
            catch (Exception ex)
            {
                this.vista.MostrarMensaje("Inconsistencia en los parámetros de configuración", ETipoMensajeIU.ERROR, this.nombreClase + ".CerrarContratoManttoPRE:" + ex.Message);
            }
        }
        /// <summary>
        /// Metodo que genera el pago adicional
        /// </summary>
        public void GenerarPagoAdicional()
        {
            try
            {
                string validacion = this.ValidarPagoAdicional();
                if (!String.IsNullOrEmpty(validacion))
                {
                    this.vista.MostrarMensaje("No se puede generar el pago Adicional: " + validacion, ETipoMensajeIU.INFORMACION);
                    return;
                }

                ContratoBO        contratoBo     = null;
                IGeneradorPagosBR generadorPagos = null;
                SeguridadBO       seguridadBo    = this.CrearObjetoSeguridad();
                List <ContratoBO> contratos      = new List <ContratoBO>();
                switch (vista.TipoContrato)
                {
                case ETipoContrato.RD:
                    contratoBo = new ContratoRDBO {
                        ContratoID = this.vista.ContratoID
                    };
                    var contratosRd = new ContratoRDBR().ConsultarCompleto(this.dctx, (ContratoRDBO)contratoBo, false);
                    contratos.AddRange(contratosRd);
                    generadorPagos = new GeneradorPagoRDBR();
                    break;

                case ETipoContrato.FSL:
                    contratoBo = new ContratoFSLBO {
                        ContratoID = this.vista.ContratoID
                    };
                    var contratosFsl = new ContratoFSLBR().ConsultarCompleto(this.dctx, (ContratoFSLBO)contratoBo);
                    contratos.AddRange(contratosFsl);
                    generadorPagos = new GeneradorPagosFSLBR();
                    break;

                case ETipoContrato.CM:
                case ETipoContrato.SD:
                    contratoBo = new ContratoManttoBO {
                        ContratoID = this.vista.ContratoID
                    };
                    var contratosMantto = new ContratoManttoBR().ConsultarCompleto(this.dctx, (ContratoManttoBO)contratoBo, true, false);
                    contratos.AddRange(contratosMantto);
                    generadorPagos = new GeneradorPagosManttoBR();
                    break;
                }
                if (generadorPagos == null)
                {
                    throw new Exception("No se pudo determinar el Tipo del Pago a Generar.");
                }

                generadorPagos.GenerarPagoAdicional(this.dctx, contratos.First(), (ultimoPagoContrato.NumeroPago.Value + 1), seguridadBo, false, true);
                PagoUnidadContratoBO pagoBo = new PagoUnidadContratoBOF {
                    ReferenciaContrato = new ReferenciaContratoBO()
                    {
                        ReferenciaContratoID = this.vista.ContratoID
                    }
                };
                PagoUnidadContratoBR pagoBr = new PagoUnidadContratoBR();
                var pagos = pagoBr.Consultar(this.dctx, (PagoUnidadContratoBO)pagoBo);

                this.Inicializar();

                this.vista.MostrarMensaje("El pago " + pagos.Last().NumeroPago.ToString() + " con Fecha " + pagos.Last().FechaVencimiento.Value.ToShortDateString() + " se ha Creado con Éxito.", ETipoMensajeIU.EXITO);
            }
            catch (Exception ex)
            {
                this.vista.MostrarMensaje("Error al generar el pago Adicional", ETipoMensajeIU.ERROR, NombreClase + ".GenerarPagoAdicional: " + ex.GetBaseException().Message);
            }
        }
        /// <summary>
        /// Ejecuta la llamada al método que actualiza el contrato en la base de datos
        /// </summary>
        private void Editar()
        {
            #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 del contrato a partir de la vista
                var bo = (ContratoManttoBO)this.InterfazUsuarioADato();

                //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 actualiza en la base de datos
                this.controlador.ActualizarCompleto(dctx, bo, (ContratoManttoBO)this.vista.UltimoObjeto, seguridadBO);

                #region SC0001 BEP1401 - Registra los pagos del Contrato

                if (bo.Estatus == EEstatusContrato.EnCurso)
                {
                    GeneradorPagosManttoBR generadorPagos = new GeneradorPagosManttoBR();
                    generadorPagos.GenerarPagos(dctx, bo, seguridadBO, true);
                }

                dctx.CommitTransaction(firma);
                #endregion
            }catch (Exception ex) {
                dctx.RollbackTransaction(firma);
                throw new Exception(string.Format("{0}.Editar:{1}{2}", nombreClase, Environment.NewLine, ex.Message));
            }
            finally
            {
                if (dctx.ConnectionState == ConnectionState.Open)
                {
                    dctx.CloseConnection(firma);
                }
            }
        }
        /// <summary>
        /// Registra un Contrato RD
        /// </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
                ContratoManttoBO bo = (ContratoManttoBO)this.InterfazUsuarioADato();

                //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.DataRowToContratoManttoBO(ds.Tables[0].Rows[0]).ContratoID;

                #region SC0001 BEP1401 - Registra los pagos del Contrato
                if (bo.Estatus == EEstatusContrato.EnCurso)
                {
                    GeneradorPagosManttoBR generadorPagos = new GeneradorPagosManttoBR();
                    generadorPagos.GenerarPagos(dctx, bo, seguridadBO, true);
                }

                #endregion

                //Se despliega la información en la Interfaz de Usuario
                this.DatoAInterfazUsuario(bo);

                dctx.CommitTransaction(firma);
            }
            catch (Exception ex)
            {
                dctx.RollbackTransaction(firma);
                throw new Exception(this.nombreClase + ".Registrar:" + ex.Message);
            }
            finally
            {
                if (dctx.ConnectionState == ConnectionState.Open)
                {
                    dctx.CloseConnection(firma);
                }
            }
        }