/// <summary> /// Guarda un contrato con estatus de En Curso /// </summary> public void GuardarContratoEnCurso() { string resultado = ValidarContratoEnCurso(); if (!string.IsNullOrEmpty(resultado)) { vista.MostrarMensaje(resultado, ETipoMensajeIU.INFORMACION); return; } #region Se inicia la Transaccion dataContext.SetCurrentProvider("Outsourcing"); Guid firma = Guid.NewGuid(); try { dataContext.OpenConnection(firma); dataContext.BeginTransaction(firma); } catch(Exception) { if(dataContext.ConnectionState == ConnectionState.Open) dataContext.CloseConnection(firma); throw new Exception("Se encontraron inconsistencias al insertar el Contrato."); } #endregion try { ContratoFSLBO contrato = InterfazUsuarioADatos(); contrato.Estatus = EEstatusContrato.EnCurso; int? contratoID= GuardarContrato(contrato); if (contratoID != null) { #region SC0001 BEP1401 - Registra los pagos del Contrato contrato.ContratoID = contratoID; GeneradorPagosFSLBR generadorPagosFsl = new GeneradorPagosFSLBR(); SeguridadBO seguridadBo = new SeguridadBO(Guid.Empty, new UsuarioBO { Id = this.vista.UsuarioID }, new AdscripcionBO { Departamento = new DepartamentoBO(), Sucursal = new SucursalBO(), UnidadOperativa = new UnidadOperativaBO { Id = this.vista.UnidadAdscripcionID } }); generadorPagosFsl.GenerarPagos(dataContext, contrato, seguridadBo,true); #endregion dataContext.CommitTransaction(firma); vista.EstablecerPaqueteNavegacion(vista.Clave, contrato); vista.MostrarMensaje("Se ha guardado del contrato exitosamente.", ETipoMensajeIU.EXITO); vista.IrADetalle(); } else vista.MostrarMensaje("Inconsistencias al intentar guardar el contrato.", ETipoMensajeIU.ADVERTENCIA); } catch (Exception ex) { dataContext.RollbackTransaction(firma); throw new Exception(nombreClase + ".GuardarContratoEnCurso:" + ex.Message); } finally { if(dataContext.ConnectionState == ConnectionState.Open) dataContext.CloseConnection(firma); } }
/// <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> /// Actualiza el cierre de un contrato Full Service Leasing /// </summary> public void CerrarContrato() { Guid firma = Guid.NewGuid(); try { string resultado = finalizacionPRE.ValidarDatosCierre(); if (!string.IsNullOrEmpty(resultado)) { vista.MostrarMensaje(resultado, ETipoMensajeIU.INFORMACION); return; } } catch (Exception ex) { throw new Exception(nombreClase + ".CerrarContrato:" + ex.Message); } try { #region Transaccion dataContext.SetCurrentProvider("Outsourcing"); dataContext.OpenConnection(firma); dataContext.BeginTransaction(firma); #endregion ContratoFSLBO anterior = vista.UltimoObjeto; ContratoFSLBO actual = InterfazUsuarioADatos(); actual.FC = anterior.FC; actual.UC = anterior.UC; actual.Estatus = EEstatusContrato.EnCurso; var contratoBR = new ContratoFSLBR(); var seguridadBO = new SeguridadBO(Guid.Empty, new UsuarioBO { Id = vista.UsuarioID }, new AdscripcionBO { Departamento = new DepartamentoBO(), Sucursal = new SucursalBO(), UnidadOperativa = new UnidadOperativaBO { Id = vista.UnidadAdscripcionID } }); // Determinar si es Cierre anticipado bool cierreAnticipado = actual.CierreAnticipado(); // Terminar el Contrato contratoBR.Terminar(dataContext, actual, anterior, seguridadBO, cierreAnticipado); if (cierreAnticipado) { // Cancelar los pagos restantes var pagosFaltantes = ObtenerPagos(anterior, (DateTime)actual.CierreContrato.Fecha); var pagoBR = new PagoUnidadContratoBR(); foreach (var faltante in pagosFaltantes) { //SC0026, Generación de clase concreta segun el tipo de contrato var cancelado = new PagoUnidadContratoFSLBO(faltante) { Activo = false }; cancelado.Auditoria.FUA = vista.FUA; cancelado.Auditoria.UUA = vista.UUA; pagoBR.Actualizar(dataContext, cancelado, faltante, seguridadBO); } } var generadorPagoBR = new GeneradorPagosFSLBR(); // Calcular Ultimo Pago var pago = UltimoPago(anterior.ContratoID); var nuevoPago = ++pago; // Generar los pagos adicionales generadorPagoBR.GenerarPagoAdicional(dataContext, actual, nuevoPago, seguridadBO, true, true); dataContext.CommitTransaction(firma); RegresarADetalles(); } catch (Exception ex) { dataContext.RollbackTransaction(firma); throw new Exception(nombreClase + ".CerrarContrato:" + ex.Message); } finally { if (dataContext.ConnectionState == ConnectionState.Open) { dataContext.CloseConnection(firma); } } }