/// <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>
        /// 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);
        }