Pregunta

Sólo estamos en la etapa de planificación de una aplicación web que ofrece suscripciones a nuestros clientes. Los periodos de suscripción varía y puede prolongarse indefinidamente por nuestros clientes, pero están siempre al menos un mes (30 días).

Cuando un cliente se inscribe, la información del cliente (dirección, número de teléfono, etc.) se almacenan en una tabla customers y una suscripción se crea en la tabla subscriptions:

id    |    start_date    |     end_date    | customer_id
--------------------------------------------------------
1     |    2010-12-31    |     2011-01-31  | 1

Cada mes vamos a recorrer la tabla subscriptions (cronjob preferentemente) y crear facturas para el pasado periodo de suscripción, que se alojan en su propia mesa - invoices. Dependiendo del cliente, se imprimen las facturas manualmente y se envían por correo, o simplemente enviado por correo electrónico al cliente.

Debido a la naturaleza de nuestros clientes y el producto, tenemos que ofrecer una variedad de diferentes alternativas de pago incluyendo transferencia bancaria y pagos con tarjeta, por lo tanto, pueden necesitar ser manejado y registrado como pagado por nuestro personal manualmente algunas facturas.

La 15ª cada mes, la mesa invoices se bucle a través y si ningún pago ha sido marcado para la factura real, se eliminará la suscripción de acuerdo. Si hay un pago registrado, el end_date en la tabla subscriptions se incrementa en otros 30 días (o lo que ahora nuestro período de nuestro cliente ha elegido).

estamos mirando dolores de cabeza mediante el incremento de las fechas delante y hacia atrás a manejar a los clientes que no pagan y que se extiende suscripciones? ¿Sería una mejor idea de añadir nuevas suscripciones ya que los clientes se extiende su suscripción?

¿Fue útil?

Solución

Una de las aplicaciones que he trabajado tenido este problema, y ??lo resolvió mediante el seguimiento de lo que la suscripción de un usuario tenía, pero no seguimiento de la fecha de caducidad. A continuación, hemos mantenido un registro de la fecha en que se supone que deben ser facturados en su cuenta - por lo que si lo que queríamos ver lo suscripción alguien estaba en, podríamos recuperar los últimos registro de suscripción por su cuenta, y si queríamos ver el próxima vez que se habían pueden facturar, nos acaba de comprobar su next_bill_date.

Al hacerlo de esta manera, se puede realizar un seguimiento de suscripciones de un usuario y ver cuando se ha realizado la actualización / degradado, pero su facturación estancias código simple - y que nunca tenga que preocuparse de superposiciones (porque las suscripciones no tienen fechas de finalización a tratar con).

Otros consejos

No creo que la necesaria para crear varios registros de suscripción para un solo cliente, siempre y cuando usted tiene solamente un único tipo de suscripción. Si el período de facturación mensual es siempre a un precio fijo, alterando será suficiente la fecha_final suscripción. Todo lo que necesita saber es cuando su suscripción se agota para que pueda detener la facturación. Por lo tanto, si se extiende su suscripción, sólo tiene que actualizar un registro único por lo que la facturación se reanudará el próximo mes.

Además, creo que sería una mejor idea de los desembolsos pendientes bandera en lugar de eliminarlos. Si un cliente no pudiera cumplir un pago mensual, la bandera de la suscripción como sin pagar facturas por lo futuras (y servicios) ha sido detenido. Cuando / si lo hacen de pago, que desmarcar la suscripción de modo que se reanude servicio / próximos meses factura.

Yo usaría la tabla de suscripción para realizar un seguimiento de sólo suscripciones. Esto significa que, cuando el cliente se extiende a su suscripción, se inserta un nuevo registro.

Por otra parte me gustaría añadir a la tabla de clientes una columna de fecha subscription_end a actualizar a través de gatillo de inserción de nuevas suscripciones.

Si bien esta es una desnormalización, un método tal permitirá su aplicación web para comprobar el acceso del cliente al servicio sin ningún tipo de join (reducir la carga del servidor db). De hecho, sólo el lote tendrá que consultar la tabla de la suscripción.

Por otra parte, manteniendo la historia suscripciones podría ser útil

  • en caso de litigio con un cliente
  • en caso de cambio en la lógica de negocio de la empresa (por ejemplo, para dar mejores clientes descuento basado en su fidelidad)
  • para las estadísticas futuras

Cuando su base de usuarios y la historia suscripciones se volverán a MANTENER enorme, que podría decidir hacer copias de seguridad periódicamente, mediante la exportación en un formato conveniente (siempre me gustaría utilizar XML, pero parte de la empresa que trabajó con csv preferido).

Para el seguimiento de la historia de suscripción de un solo cliente diría que es mejor añadir nuevas suscripciones.

También podrá ahorrarse el dolor de cabeza de averiguar, ¿por qué ordenó una suscripción de enero, 30 se vence en marzo (ya sabes, siendo febrero el mes más corto ...).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top