2011-03-22 15 views
6

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:

  1. Si su cycleDate.Day es el 31 y el mes en curso sólo tiene 29 días
  2. 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

  1. tiene esta cuenta ya ha facturado este mes?
  2. hace existe el día del ciclo en el mes en curso
  3. 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!

Respuesta

0

Ok, creo que he sido totalmente sobre -pensando esto. Esto es simple y cubre todo:

bool NeedToBill = ((DateTime.UTCNow – LastBillDate) >= 30 Days) 

No necesariamente facturar, en el mismo día, sin embargo está lo suficientemente cerca. Esto también agrega flexibilidad si la transacción fue denegada por un día, o si la tarea programada no se ejecutó durante 1 día la próxima vez que se ejecuta la recogerá.

+4

¿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 ... –

+0

DateTime.AddMonths tiene en cuenta los años bisiestos y las diferentes fechas de EOM. – gibbocool

6

Permitir solo la elección de un día de facturación entre 1 - 28. En mi experiencia, así es como la mayoría de las compañías de tarjetas de crédito/préstamos tratan con esto cuando se les da una opción.

+0

Si bien esto funciona, no es un gran problema apoyar al 29, 30 y 31. –

+1

Es cierto, pero lo simplifica para todos los usuarios. El OP solicitó la facturación el mismo día todos los meses, por lo que esta es la única respuesta posible. –

2

¿Qué significa el mismo día de cada mes?

Si soy un cliente, quiero que se me facture el día 16 cada mes. No hay problema. Si deseo que se me facture el día 31 en cada mes, el problema obvio no es que todos los meses tengan 31 días como lo indicó en su pregunta.

Por qué no comprobar el mes actual para el número de días. Si tiene menos de 31 días, haga que el último día del mes sea la fecha de la factura.

¿Hay algo más en el problema?

0

Yo diría que lo haga elegir entre 1-28, o cualquier día, pero cobrará el último día del mes si el mes actual tiene menos días que el día del mes elegido.

+0

no eligen fecha del ciclo = fecha de la cuenta creada – aron

+1

bien, entonces lo mismo, hágalo el día que crearon la cuenta o el último día del mes si el mes actual tiene menos días que el día del mes en que crearon el cuenta en –

Cuestiones relacionadas