/// <summary> /// Calcula los pagos pendientes a partir de la nueva frecuencia /// </summary> /// <param name="frecuenciaNueva"></param> public void CalcularPagosPendientes(EFrecuencia?frecuenciaNueva) { if (!this.vista.ListaPagosFaltantes.Any()) { this.vista.ListaPagosFaltantes = new List <PagoUnidadContratoRDBO>(); this.vista.EstablecerPagosPendientes(this.vista.ListaPagosFaltantes); this.vista.CantidadPagosFaltantes = 0; return; } if (frecuenciaNueva == null) { frecuenciaNueva = this.vista.ContratoAntiguo.FrecuenciaFacturacion; } List <PagoUnidadContratoRDBO> listaPagosPendientes = new List <PagoUnidadContratoRDBO>(); DateTime?fechaContrato = this.vista.ContratoOriginal.FechaContrato; DateTime?fechaPromesa = this.vista.ContratoOriginal.FechaPromesaDevolucion; DateTime fechaHoy = DateTime.Now; if (fechaContrato == fechaPromesa) { fechaPromesa = (DateTime?)fechaPromesa.Value.AddDays(1); } if (this.vista.DiasRestantes <= 0) { this.vista.ListaPagosFaltantes = listaPagosPendientes; this.vista.EstablecerPagosPendientes(listaPagosPendientes); this.vista.CantidadPagosFaltantes = 0; return; } if (this.vista.ListaPagosFacturados.Any()) { var ultimoPago = this.vista.ListaPagosFacturados.Last(); Int32 diasAAgregar = 0; Int32 diasFaltantes = this.vista.DiasRestantes.Value; switch (frecuenciaNueva.Value) { case EFrecuencia.DIARIA: diasAAgregar = 1; break; case EFrecuencia.SEMANAL: diasAAgregar = 7; break; case EFrecuencia.QUINCENAL: diasAAgregar = 15; break; case EFrecuencia.MENSUAL: diasAAgregar = 30; break; } DateTime fechaVencimientoSiguiente = ultimoPago.FechaVencimiento.Value.AddDays((Double)ultimoPago.DiasFacturar.Value); while (diasFaltantes > 0) { var pagoNuevo = new PagoUnidadContratoRDBO() { ReferenciaContrato = new ReferenciaContratoBO(ultimoPago.ReferenciaContrato), NumeroPago = listaPagosPendientes.Any() ? (short)(listaPagosPendientes.Last().NumeroPago + 1) : (short)(ultimoPago.NumeroPago + 1), Origen = EOrigenPago.SISTEMA, TipoPago = ETipoPago.NORMAL, FechaVencimiento = listaPagosPendientes.Any() ? listaPagosPendientes.Last().FechaVencimiento.Value.AddDays(diasAAgregar) : fechaVencimientoSiguiente, DiasFacturar = (diasFaltantes - diasAAgregar) > 0 ? diasAAgregar : diasFaltantes }; diasFaltantes = (diasFaltantes - diasAAgregar); listaPagosPendientes.Add(pagoNuevo); } } this.vista.ListaPagosFaltantes = listaPagosPendientes; this.vista.EstablecerPagosPendientes(listaPagosPendientes); this.vista.CantidadPagosFaltantes = listaPagosPendientes.Count; }
/// <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); }