/// <summary> /// Cancela los pagos restantes de un contrato /// </summary> /// <param name="pagosList">Listado de Pagos</param> /// <param name="fechaCierre">Fecha de Cierre del Contrato</param> /// <param name="seguridadBo">Seguridad del Usuario Actual</param> private void CancelarPagosPosteriores(List <PagoUnidadContratoManttoBO> pagosList, DateTime?fechaCierre, SeguridadBO seguridadBo) { foreach (var pago in pagosList) { if (pago.FechaVencimiento >= fechaCierre && pago.EnviadoFacturacion == false) { var anterior = new PagoUnidadContratoManttoBO(pago); pago.Activo = false; anterior.Auditoria = new AuditoriaBO { FC = pago.Auditoria.FC, UC = pago.Auditoria.UC, FUA = pago.Auditoria.FUA, UUA = pago.Auditoria.UUA }; pagoCtrl.Actualizar(dctx, pago, anterior, seguridadBo); } } }
/// <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); } } }