Myślę, że już to komplikujesz.
Utwórz użytkownika tabeli:
pk id_user
nm_user
fl_status (active, canceled, pendent, etc)
utworzyć subskrypcję stolik jednego użytkownika na wielu subskrypcji:
pk id_subscription
fk id_user
fl_type (maybe there are different subscriptions, with different prices)
dt_in
dt_out
Tworzenie tantiemy tabeli o jeden abonament wielu płatności:
pk id_payment
fk id_subscription
fl_type (card, payment order, something else)
fl_status (generated, sent, confirmed, canceled because of subscription canceled, canceled because of something else, etc)
dt_generated
dt_sent
dt_confirmed
dt_canceled
[I think you will need another fields to follow and confirm the payment, but it depends of your payment model)
Teraz musisz zbudować kilka robotów, które będą działać codziennie w określonym czasie.
Jeśli otrzymasz wszystkich aktywnych klientów i ostatnią wypłatę każdego, dowiesz się, czy należy wygenerować nową płatność, jeśli ostatnia potwierdzona płatność została wykonana więcej niż x dni w porównaniu z faktyczną datą (zależy to od tego, czy jest opłacony z góry, opłacony z góry, itp.). Jeśli tak, wygenerował nowe zlecenie płatnicze.
Robot wyśle wiadomość e-mail lub coś w tym zamówieniu (i oznacz ją jako).
Inny robot potwierdzi płatność za pomocą Twojego modelu płatności.
Oczywiście trzeba bardzo dobrze zdefiniować swój model, ponieważ każdy status użytkownika potrzebuje robota, aby wszystko działało, dopóki nie zostanie anulowane lub wysłane do sędziego z powodu braku płatności. to dużo pracy, ale nie ma nic wielkiego.
ps: jeśli będzie to bardziej złożony system, baza danych będzie się utrzymywać, będziesz mieć wszystkie potrzebne informacje, będziesz mieć dziennik każdego zamówienia, wiesz, co się stało z każdym z nich, ponieważ mają daty i status. Możesz oszacować, ile miesięcy będzie trzeba, ile zapłacisz po dniu, po dwóch, i tak dalej.
Chciałbym rozdzielić płatności na faktury i tabelę płatności i użyłbym bardziej standardowych nazw pól ("identyfikator", "identyfikator subskrypcji" itp.) Innych niż to, które wygląda na OK. Agile Toolkit może obsługiwać różne układy projektów baz danych: http: // agiletoolkit.org/learn/understand/model/add – romaninsh