/// <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> /// Realiza el Cierre del Contrato /// </summary> public void CerrarContrato() { int numeroPago; string s; if ((s = ValidarCampos()) != null) { vista.MostrarMensaje(s, ETipoMensajeIU.ADVERTENCIA); 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 var bo = (ContratoManttoBO)InterfazUsuarioADato(); //Se crea el objeto de seguridad var usuario = new UsuarioBO { Id = vista.UsuarioID }; var adscripcion = new AdscripcionBO { UnidadOperativa = new UnidadOperativaBO { Id = vista.UnidadOperativaID } }; var seguridadBO = new SeguridadBO(Guid.Empty, usuario, adscripcion); bool cierreAnticipado = DateTime.Compare((DateTime)bo.CierreContrato.Fecha, (DateTime)bo.CalcularFechaTerminacionContrato()) < 0; #region SC0010 var pagos = ObtenerPagosContrato(bo.ContratoID); numeroPago = (int)ObtenerUltimoNumeroPago(pagos); numeroPago = numeroPago + 1; if (cierreAnticipado) { CancelarPagosPosteriores(pagos, bo.CierreContrato.Fecha, seguridadBO); } if (bo.Tipo == ETipoContrato.CM) { generadorPagos.GenerarPagoAdicional(dctx, bo, numeroPago, seguridadBO, true, true); } #endregion //Se actualiza en la base de datos controlador.Terminar(dctx, bo, (ContratoManttoBO)vista.UltimoObjeto, seguridadBO, cierreAnticipado); //Se despliega la información en la Interfaz de Usuario DatoAInterfazUsuario(bo); vista.UltimoObjeto = bo; LimpiarSesion(); vista.LimpiarPaqueteNavegacion("ContratoManttoBO"); vista.EstablecerPaqueteNavegacion("ContratoManttoBO", new ContratoManttoBO { ContratoID = vista.ContratoID }); dctx.CommitTransaction(firma); vista.RedirigirADetalles(); } catch (Exception ex) { dctx.RollbackTransaction(firma); throw new Exception(nombreClase + ".CerrarContrato:" + ex.Message); } finally { if (dctx.ConnectionState == ConnectionState.Open) { dctx.CloseConnection(firma); } } }