/// <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); } } }
/// <summary> /// Decide que controlador usar para consultar pagos /// </summary> private List <PagoUnidadContratoBO> ConsultarPagos(Int32?pagoId, Int32?referenciaContratoId, Int32?unidadId, ETipoContrato?tipoContrato, Boolean esCompleto) { var listaPagos = new List <PagoUnidadContratoBO>(); PagoUnidadContratoBR pagoBr = null; PagoUnidadContratoBO pago = new PagoUnidadContratoBOF(); switch (tipoContrato) { case ETipoContrato.FSL: pagoBr = new PagoUnidadContratoFSLBR(); pago = new PagoUnidadContratoFSLBO() { Tarifa = new TarifaPagoEquipoBO() }; break; case ETipoContrato.RD: pagoBr = new PagoUnidadContratoRDBR(); pago = new PagoUnidadContratoRDBO() { Tarifa = new TarifaPagoEquipoBO() }; break; case ETipoContrato.CM: case ETipoContrato.SD: pagoBr = new PagoUnidadContratoBR(); pago = new PagoUnidadContratoManttoBO(tipoContrato.Value) { Tarifa = new TarifaPagoEquipoBO() }; break; } if (pagoId != null) { pago.PagoID = pagoId; } if (referenciaContratoId != null) { pago.ReferenciaContrato = new ReferenciaContratoBO() { ReferenciaContratoID = referenciaContratoId } } ; if (unidadId != null) { pago.Unidad = new UnidadBO() { UnidadID = unidadId } } ; switch (tipoContrato) { case ETipoContrato.FSL: listaPagos.AddRange(esCompleto ? ((PagoUnidadContratoFSLBR)pagoBr).ConsultarCompleto(this.dataContext, (PagoUnidadContratoFSLBO)pago, true) : ((PagoUnidadContratoFSLBR)pagoBr).Consultar(this.dataContext, (PagoUnidadContratoFSLBO)pago)); break; case ETipoContrato.RD: listaPagos.AddRange(esCompleto ? ((PagoUnidadContratoRDBR)pagoBr).ConsultarCompleto(this.dataContext, (PagoUnidadContratoRDBO)pago) : ((PagoUnidadContratoRDBR)pagoBr).Consultar(this.dataContext, (PagoUnidadContratoRDBO)pago)); break; case ETipoContrato.CM: case ETipoContrato.SD: listaPagos.AddRange(esCompleto ? pagoBr.ConsultarCompleto(this.dataContext, pago) : pagoBr.Consultar(this.dataContext, pago)); break; } return(listaPagos); }