public static DateTime GetPrevisionPago(EFormaPago forma_pago, DateTime fecha_base, long dias_credito, long dia_extracto) { switch (forma_pago) { case EFormaPago.Contado: return(fecha_base); case EFormaPago.XDiasFechaFactura: return(fecha_base.AddDays(dias_credito)); case EFormaPago.XDiasMes: { DateTime f; f = fecha_base.AddMonths(1); f = new DateTime(f.Year, f.Month, 1); return(f.AddDays(dias_credito - 1)); } case EFormaPago.MesVencido: { DateTime f; f = fecha_base.AddMonths(1); f = new DateTime(f.Year, f.Month, (dias_credito != 0) ? (int)dias_credito : 1); if (fecha_base.Day <= dia_extracto) { return(f); } else { return(f.AddMonths(1)); } } case EFormaPago.Trimestral: { DateTime f = fecha_base; switch ((int)(fecha_base.Month % 3)) { case 1: f = fecha_base.AddMonths(3); break; case 2: f = fecha_base.AddMonths(2); break; case 0: f = fecha_base.AddMonths(1); break; } try { return(DateAndTime.Parse(Convert.ToInt32(dias_credito), f.Month, f.Year)); } catch { return(f); } } } return(fecha_base); }