Ogni 2 settimane, il sistema genererà le fatture per le aziende.
La società riceverà una fattura il 1 ° e il 16 ° ogni mese. (Verrà eseguito tramite Cron Job ogni 2 settimane. Scansionerà la tabella degli ordini e quindi si aggiungerà alla tabella 'fattura'. Esistono alternative?)
C'è un elenco di ordini dei clienti nella orders
tabella e indica anche a quale società appartiene ( orders.company_id
)
La invoice
tabella calcola il costo totale degli ordini dalla orders
tabella.
Sto cercando di capire come progettare un monitoraggio delle fatture ragionevole. A volte la compagnia dovrà inviarmi le tasse o a volte le invierò le tasse ( invoice.amount
)
Devo tenere traccia delle fatture con quanto segue:
- quando la società mi ha inviato l'importo
- quando ho inviato l'importo alla società
- quanto importo è stato ricevuto dalla società
- quanto importo ho inviato alla società
- ho ricevuto l'intero importo (in caso contrario, cosa devo aggiornare sul Db?)
- stato della fattura (fattura inviata, annullata, importo ricevuto, importo inviato)
Ecco la progettazione del database che ho ideato:
tavolo aziendale
mysql> select * from company;
+----+-----------+
| id | name |
+----+-----------+
| 1 | Company A |
| 2 | Company B |
+----+-----------+
I clienti possono selezionare un'azienda dal mio sito Web.
tabella degli ordini
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 |
+----+---------+------------+------------+---------------------+-----------+
due clienti hanno ordinato i prodotti dall'azienda B ( orders.company_id = 2
). So che i campi degli ordini non sono sufficienti, sono solo semplificati per te.
tabella ordini_prodotti
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 |
+----+----------+------------+--------------+-------+
Elenco dei prodotti che i clienti hanno ordinato.
tabella delle fatture
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 |
+----+------------+------------+---------------------+--------+-----------+
È qui che sono piuttosto bloccato sul design delle tabelle delle fatture. Non sono sicuro di come dovrebbe essere fatto. Le fatture verranno generate ogni 2 settimane. Dall'esempio di risultato invoice.amount
è 55,00 perché è stato calcolato dalla orders.company_id = 2
tabella
Se invoice.amount
è -50,00 (meno), significa che la società dovrà inviarmi l'importo delle commissioni.
Se invoice.amount
è di 50,00, significa che devo inviare alla compagnia le commissioni.
Lo status_id potrebbe essere: (1) Fattura inviata, (2) Annullato, (3) Completato
Devo aggiungere un invoice_id
campo nella orders
tabella? Aggiorna il orders.invoice_id
campo quando la riga è stata inserita nella tabella 'fattura'.
tabella 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 |
+----+------------+-----------------+-------------+---------------------+---------------------+
Qui è dove posso monitorare e aggiornare la transazione .. il pagamento verrà effettuato tramite BACS.
È un buon design da tavolo o cosa devo migliorare? Quali campi e tabelle dovrei aggiungere?
Se la fattura è stata generata e successivamente devo apportare le modifiche orders_products
o le orders
tabelle, dovrebbe ricalcolare il invoice.amount
campo? (Userò PHP / MySQL).
Dump 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');
Sentiti libero di voler aggiornare / aggiungere tabelle per rispondere qui.
Grazie