Ind*_*ial 6 mysql logic subscription invoices
我们正处于为客户提供订阅的网络应用程序的规划阶段.订阅期有所不同,可以由我们的客户无限期延长,但始终至少一个月(30天).
当客户注册时,客户信息(账单地址,电话号码等)存储在customers表中,并在表中创建订阅subscriptions:
id | start_date | end_date | customer_id
--------------------------------------------------------
1 | 2010-12-31 | 2011-01-31 | 1
Run Code Online (Sandbox Code Playgroud)
每个月我们都会遍历subscriptions表格(最好是cronjob)并为过去的订阅期创建发票,这些发票存放在他们自己的表格中invoices.根据客户的不同,发票可以手动打印出来并通过邮件发送,或者只是通过电子邮件发送给客户.
由于我们的客户和产品的性质,我们需要提供各种不同的付款方式,包括电汇和信用卡付款,因此一些发票可能需要手工处理并由我们的员工注册.
每月15日,invoices表格都会循环显示,如果没有为实际发票标记付款,则相应的订阅将被删除.如果有注册的付款后,end_date在subscriptions表由30天增加(或什么我们现在的时期我们的客户选择).
我们是通过增加日期向前和向后来处理非付费客户和扩展订阅来看待头痛吗?随着客户扩展订阅,添加新订阅会更好吗?
只要您只有一个订阅类型,我认为没有必要为单个客户创建多个订阅记录.如果结算周期始终是固定价格的月度,则更改订阅end_date就足够了.您需要知道的是,当他的订阅用完时,您可以停止开具发票.因此,如果他扩展了他的订阅,您只需更新一条记录,以便下个月恢复结算.
此外,我认为标记未付费订阅而不是删除它们会更好.如果客户错过了每月付款,请将订阅标记为未付款,以便停止将来的发票(和服务).当/如果他们支付,您取消订阅,以便恢复服务/下个月的发票.
我工作的其中一个应用程序遇到了这个问题,我们通过跟踪用户的订阅但没有跟踪到期日期来解决它.然后,我们跟踪他们应该在他们的帐户上收费的日期 - 所以,如果我们想看看有人在哪个订阅,我们可以只检索他们帐户的最新订阅记录,如果我们想看到下次他们被收费,我们只是检查他们的next_bill_date.
通过这种方式,您可以跟踪用户的订阅并查看他们何时升级/降级,但您的结算代码保持简单 - 您永远不必担心重叠(因为订阅没有结束日期来处理) .