2012-02-16 9 views
0

会社は毎月1日と16日に請求書を受け取ります。 (2週間ごとにCron Jobを実行し、注文テーブルをスキャンしてから請求書テーブルに追加します)請求書とトラッキングを生成

ordersテーブルに顧客の注文リストがあります。それが属している会社orders.company_id

テーブルordersから注文の合計コストを計算します。

私は合理的な請求書トラッキングを設計する方法を理解しようとしています。いつか同社は私に手数料を送信する必要がありますかいつか私は彼らに手数料、私は次のように請求書を追跡する必要がある(invoice.amount

を送信:会社は私の量を送った

  • 私は会社に金額を送らなかった
  • 私は会社
  • に送ら
  • どのくらいの量がやった会社から受信されたどのくらいの量
  • は私が全額を受け取りました(そうでない場合は、私は、DBに更新するために何が必要なのでしょうか?)
  • 請求書のステータスここでは(請求書送信、キャンセル、受取額、送信された金額)

がデータベースであります

mysql> select * from company; 
+----+-----------+ 
| id | name  | 
+----+-----------+ 
| 1 | Company A | 
| 2 | Company B | 
+----+-----------+ 

お客様が私のウェブサイトから会社を選択することができます

会社テーブル:デザインは、私が思い付いたてきました。

受注テーブル

mysql> select * from orders; 
+----+---------+------------+------------+---------------------+-----------+ 
| id | user_id | company_id | total_cost | order_date   | status_id | 
+----+---------+------------+------------+---------------------+-----------+ 
| 1 |  5 |   2 |  25.00 | 2012-02-03 23:30:24 |   1 | 
| 2 |  7 |   2 |  30.00 | 2012-02-13 18:06:12 |   1 | 
+----+---------+------------+------------+---------------------+-----------+ 

2人の顧客が会社Borders.company_id = 2)から製品を注文しました。私は注文フィールドが十分ではないことを知っている、あなたのために単純化されています。

orders_productsテーブルの顧客が注文したものを製品の

mysql> select * from orders_products; 
+----+----------+------------+--------------+-------+ 
| id | order_id | product_id | product_name | cost | 
+----+----------+------------+--------------+-------+ 
| 1 |  1 |   34 | Chair  | 10.00 | 
| 2 |  1 |   25 | TV   | 10.00 | 
| 3 |  1 |   27 | Desk   | 2.50 | 
| 4 |  1 |   36 | Laptop  | 2.50 | 
| 5 |  2 |   75 | PHP Book  | 25.00 | 
| 6 |  2 |   74 | MySQL Book | 5.00 | 
+----+----------+------------+--------------+-------+ 

一覧。

請求書テーブル

mysql> select * from invoice; 
+----+------------+------------+---------------------+--------+-----------+ 
| id | company_id | invoice_no | invoice_date  | amount | status_id | 
+----+------------+------------+---------------------+--------+-----------+ 
| 7 |   2 |  123 | 2012-02-16 23:59:59 | 55.00 |   1 | 
+----+------------+------------+---------------------+--------+-----------+ 

私は請求書テーブルの設計にはかなりこだわっています場所です。どのようにしたらいいのか分かりません。請求書は2週間ごとに生成されます。結果の一例invoice.amountから、invoice.amountは-50.00(マイナス)であれば、それは会社が私に手数料量を送信する必要があります意味orders.company_id = 2テーブルから

を計算されているので、55.00です。

invoice.amountが50.00の場合は、会社に料金を送付する必要があることを意味します。

STATUS_IDは次のようになります。(1)請求書が送信され、(2)キャンセル、(3)

を完了し、私はordersテーブルにinvoice_idフィールドを追加する必要がありますか?行が '請求書'テーブルに挿入されると、orders.invoice_idフィールドが更新されます。

invoice_paymentテーブル

mysql> select * from invoice_payment; 
+----+------------+-----------------+-------------+---------------------+---------------------+ 
| id | invoice_id | amount_received | amount_sent | date_received  | date_sent   | 
+----+------------+-----------------+-------------+---------------------+---------------------+ 
| 1 |   1 |   0.00 |  55.00 | 0000-00-00 00:00:00 | 2012-02-18 22:20:53 | 
+----+------------+-----------------+-------------+---------------------+---------------------+ 

私が追跡し、トランザクションを更新することができますここでは支払いがBACSを介して行われます。..です。

この優れたテーブルデザインは何ですか?また改善すべき点はありますか?どのフィールドとテーブルを追加するべきですか?

請求書が生成されていると、後で私はorders_productsまたはordersテーブルに変更を加える必要がある場合 - それはinvoice.amountフィールドを再計算する必要がありますか? (私はPHP/MySQLを使用します)。

SQLダンプ:あなたがアップデートしたい

CREATE TABLE IF NOT EXISTS `company` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(25) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; 

INSERT INTO `company` (`id`, `name`) VALUES 
(1, 'Company A'), 
(2, 'Company B'); 

CREATE TABLE IF NOT EXISTS `invoice` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `company_id` int(11) NOT NULL, 
    `invoice_no` int(11) NOT NULL, 
    `invoice_date` datetime NOT NULL, 
    `amount` decimal(6,2) NOT NULL, 
    `status_id` tinyint(1) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ; 


INSERT INTO `invoice` (`id`, `company_id`, `invoice_no`, `invoice_date`, `amount`, `status_id`) VALUES 
(7, 2, 123, '2012-02-16 23:59:59', '55.00', 1); 


CREATE TABLE IF NOT EXISTS `invoice_payment` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `invoice_id` int(11) NOT NULL, 
    `amount_received` decimal(6,2) NOT NULL, 
    `amount_sent` decimal(6,2) NOT NULL, 
    `date_received` datetime NOT NULL, 
    `date_sent` datetime NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; 

INSERT INTO `invoice_payment` (`id`, `invoice_id`, `amount_received`, `amount_sent`, `date_received`, `date_sent`) VALUES 
(1, 1, '0.00', '55.00', '0000-00-00 00:00:00', '2012-02-18 22:20:53'); 


CREATE TABLE IF NOT EXISTS `orders` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `user_id` int(11) NOT NULL, 
    `company_id` int(11) NOT NULL, 
    `total_cost` decimal(6,2) NOT NULL, 
    `order_date` datetime NOT NULL, 
    `status_id` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; 


INSERT INTO `orders` (`id`, `user_id`, `company_id`, `total_cost`, `order_date`, `status_id`) VALUES 
(1, 5, 2, '25.00', '2012-02-03 23:30:24', 1), 
(2, 7, 2, '30.00', '2012-02-13 18:06:12', 1); 


CREATE TABLE IF NOT EXISTS `orders_products` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `order_id` int(11) NOT NULL, 
    `product_id` int(11) NOT NULL, 
    `product_name` varchar(100) NOT NULL, 
    `cost` decimal(6,2) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ; 

INSERT INTO `orders_products` (`id`, `order_id`, `product_id`, `product_name`, `cost`) VALUES 
(1, 1, 34, 'Chair', '10.00'), 
(2, 1, 25, 'TV', '10.00'), 
(3, 1, 27, 'Desk', '2.50'), 
(4, 1, 36, 'Laptop', '2.50'), 
(5, 2, 75, 'PHP Book', '25.00'), 
(6, 2, 74, 'MySQL Book', '5.00'); 

お気軽に/ここに答えるためにテーブルを追加します。 SimplyFi -

おかげ

+0

2012年です。COTSやFOSSアカウンティングを使用する代わりに、独自のアカウンティングシステムを作成する魅力的な理由はありますか? –

+0

@Catcallあなたは何を意味するのかよくわかりません...私はすでに顧客が製品を注文できるようにシステムを開発しました。バックエンドでは、注文のリストなどが表示されます。 –

+0

私はGoogleが独自の会計システムを作成しておらず、Facebookは独自の会計システムを書いていないことを意味します。なぜあなたはあなた自身の会計システムを書いているのですか?時には、車輪を再発明する良い理由があります。会計は、通常、正当な理由ではありません。 –

答えて

0

Geminiのための私のアドオンを見てください。それに応じて請求書をブランド化することができます。また、生成時に顧客に自動電子メールを送信したり、支払いを記録したり、受信しなかった支払い(通知)を送信したり、システムに統合するために使用できる完全なRESTベースのAPIがあります。それが特徴とする定期的な請求から利益を得ることもできるかもしれません。

負のインボイス金額が記載されている場合、それらは実質的に「クレジットノート」(私があなたの投稿から理解したもの)です。一般的に、請求書はクライアントに発行された後に変更するべきではありません。金額の修正(すなわち、追加または減算)が必要な場合は、新しい請求書を発行する必要があります(追加金額の場合) 、または減額された金額のクレジットメモ。

また、数週間以内に新しい請求書を受け取り、アカウントの残高を把握し、必要な場合には請求書やクレジットカードを発行するだけで、お客様のお金を返金しないことをお勧めします。周りのお金を移動することはコストがかかるので、必要でない場合は、その必要はありません。ちょうど私の2セント

関連する問題