Escribí un código para mi nuevo sistema de facturación. El objetivo es facturar al cliente el mismo día de cada mes. (No es el primero o el último día del mes)Mejor patrón para un ciclo de facturación mensual
static bool NeedToBill(DateTime planLastBilled, DateTime cycleDate)
{
// is today the same date as the cycleDate AND is was the planLastBilled not the same day as today?
if (DateTime.UtcNow.Day.Equals(cycleDate.Day) && !DateTime.UtcNow.Day.Equals(planLastBilled))
return true;
else
return false;
}
Las trampas son 2:
- Si su cycleDate.Day es el 31 y el mes en curso sólo tiene 29 días
- cycleDate es 29 de febrero de 2012: solo se le cobrará en años bisiestos
¿Existe una práctica recomendada aquí?
así que parece que hay un montón cosas para comprobar
- tiene esta cuenta ya ha facturado este mes?
- hace existe el día del ciclo en el mes en curso
- es el día del ciclo superior o igual a la fecha actual (esto es ideal si la transacción no el día anterior)
Gracias!
¿Estás seguro de que esto funciona? Me parece que cambiará la fecha de facturación ~ 5 días al año, eventualmente cobrará de más a sus clientes (1 factura adicional cada 6 años). Suena como un buen caso para una demanda colectiva si su empresa tiene suficientes suscriptores ... –
DateTime.AddMonths tiene en cuenta los años bisiestos y las diferentes fechas de EOM. – gibbocool