Frage

Wir sind gerade in der Planung eines Web-App, dass Angebote Abonnements für unsere Kunden. Die Bezugsperioden variieren und können auf unbestimmte Zeit von unseren Kunden verlängert werden, sind aber immer mindestens ein Monat (30 Tage).

Wenn ein Kunde meldet sich, die Kundeninformationen (Rechnungsanschrift, Telefonnummer und so weiter) in einem customers Tabelle gespeichert und ein Abonnement ist in der subscriptions Tabelle erstellt:

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

Jeder Monat werden wir Schleife durch den subscriptions Tisch (CronJob bevorzugt) und Rechnungen für die abgelaufene Bezugsfrist schaffen, die in ihrem eigenen Tisch untergebracht sind - invoices. Je nach Kundenwunsch werden die Rechnungen manuell ausgedruckt und per Post geschickt, oder einfach nur an den Kunden per E-Mail.

Aufgrund der Natur unserer Kunden und das Produkt benötigen wir eine Vielzahl von verschiedenen Zahlungsalternativen einschließlich Weisung und Kartenzahlungen anbieten zu können, daher können einige Rechnungen müssen manuell gehandhabt und von unseren Mitarbeitern als bezahlt registriert sein.

Der 15. jeden Monat werden die invoices Tabelle durchgeschleift und wenn keine Zahlung für die tatsächliche Rechnung markiert wurde, wird die entsprechende Abonnement entfernt werden. Wenn es eine Zahlung registriert ist, wird der end_date in der subscriptions Tabelle um weitere 30 Tage erhöht (oder das, was jetzt unsere Zeit unseres Kunde entschieden hat).

Sehen wir Kopfschmerzen nach Daten vorwärts und rückwärts Griff nicht-zahlende Kunden erhöht wird und Abonnements erstreckt? Wäre es eine bessere Idee, neue Abonnements hinzufügen, wie Kunden ihr Abonnement verlängert?

War es hilfreich?

Lösung

Eine der Anwendungen, dass ich gearbeitet hatte auf dieses Problem, und wir lösen es von Spur zu halten, was Abonnement ein Benutzer hatte, aber nicht Tracking das Ablaufdatum. Dann hielten wir den Überblick über den Zeitpunkt sie angeblich auf auf ihrem Konto in Rechnung gestellt werden - so dass, wenn wir das, was Abonnement jemand war sehen wollten, könnten wir nur die neuesten Abonnement Rekord für ihr Konto abzurufen, und wenn wir wollten das sehen nächstes Mal, wenn sie in Rechnung gestellt würde, wir würden nur ihre next_bill_date überprüfen.

Durch denen es auf diese Weise tun, können Sie einen Benutzer Abonnement verfolgen und sehen, wenn sie aktualisiert haben / herabgestuft, aber Ihr Abrechnungscode bleibt einfach - und Sie nie zu Überschneidungen zu kümmern (weil Abonnements nicht Enddaten haben behandeln).

Andere Tipps

Ich glaube nicht, seine erforderlich, mehrere Abonnements Aufzeichnungen für einen einzelnen Kunden zu erstellen, solange Sie nur einen einzigen Abonnementtyp haben. Wenn der Abrechnungszeitraum ist zu einem festen Preis immer monatlich, veränderte das Abonnement end_date genügt. Alles, was Sie wissen müssen, ist, wenn sein Abonnement abgelaufen ist, so dass Sie die Rechnungsstellung zu stoppen. Also, wenn er sein Abonnement verlängert, brauchen Sie nur einen einzelnen Datensatz zu aktualisieren, so wird die Abrechnung im nächsten Monat wieder aufzunehmen.

Außerdem glaube ich, wäre es eine bessere Idee, um Flagge unbezahlte Abonnements anstatt sie zu löschen. Wenn ein Kunde eine monatliche Zahlung, Flagge das Abonnement als unbezahlte missen waren so zukünftigen Rechnungen (und Service) gestoppt. Wann / wenn sie zahlen tun, Kennzeichen entfernen Sie das Abonnement so Service / Rechnung nächsten Monaten wieder aufgenommen wird.

würde ich die Abonnementtabelle verwendet nur den Überblick über Abonnements zu halten. Dies bedeutet, dass, wenn der Kunde sein Abonnement erstreckt, wird ein neuer Datensatz eingefügt.

Darüber hinaus ich an den Kunden Tabellenspalte ein subscription_end Datum hinzufügen würde über Trigger auf dem Einsatz von neuen Abonnements aktualisiert werden.

Dies ist zwar eine Denormalisierung ist ein solches Verfahren ermöglicht es, Ihre Webanwendung an den Kunden Zugriff auf den Dienst zu überprüfen, ohne dass beitreten (Reduzierung der db Server-Last). Tatsächlich werden nur die Charge wird das Abonnement des Tabelle abzufragen haben.

Darüber hinaus könnte die Abonnements Geschichte hält nützlich sein

  • im Fall von Streitigkeiten mit einem Kunden
  • im Falle einer Änderung in der Geschäftslogik des Unternehmens (zum Beispiel geben besten Kunden auf ihre Treue Rabatt basiert)
  • für künftige Statistiken

Wenn Sie Ihre Benutzerbasis und Abonnements Geschichte riesig werden wird mantain, könnten Sie in regelmäßigen Abständen Sicherungs entscheiden, indem sie in einem geeigneten Format zu exportieren (ich würde immer xml verwenden, aber einige Unternehmen arbeitete ich mit bevorzugten csv).

Für Abonnement Geschichte eines einzigen Kunden-Tracking würde ich sagen, es ist besser, neue Abonnements hinzuzufügen.

Sie sparen sich auch die Kopfschmerzen herauszufinden, warum ein Abonnement am Januar bestellt, 30. März nicht auslaufen (Sie wissen schon, im Februar der kürzeste Monat zu sein ...).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top