2週間ごとの請求書を作成したい。請求書には、 1 ~ 15 と 16 ~ 31 の間の 1 つ以上の注文を含めることができますorder_date
。それを行う方法は何ですか?
テーブルの設計が次のとおりであるとします。
order table
- order_id (PK)
- user_id (FK)
- total
- status
- order_date
- invoice_id (FK, default is 0)
invoice table
- invoice_id (PK)
- invoice_date
- total (total of all orders that is linked to order.invoice_id)
- status (Paid, Unpaid, etc)
//order.invoice_id can have multiple same invoice id
最初の解決策:
2 週間ごとに Crob Job を介して実行します。注文テーブルをスキャンし (1 ~ 15 または 16 ~ 31 の order_date と status = 1 を検索)、invoice テーブルに追加して、order.invoice_id を更新します。
今日の日付が 2010 年 6 月 11 日である場合、invoice テーブルに行が挿入され、invoice_date は 2010 年 6 月 1 日になります。
2 番目の解決策:
order.status をバックエンドから手動で 1 に変更すると、「最初のソリューション」と同様の機能が実行されます (Cron ジョブを除く)。
擬似コード:
NowDate = Date();
//Invoice Date can be 01 or 16 date current month
InvoiceDate = InvoiceDate(NowDate)
if (there is invoice for InvoiceDate) {
invoiceNumber = getNumber(invoice)
} else {
invoiceNumber = new Invoice(InvoiceDate)
}
new Order(invoiceNumber, orderitems)
どちらが良いですか、それとも他のより良い解決策がありますか?