Setiap 2 minggu, sistem akan menghasilkan faktur untuk perusahaan.
Perusahaan akan menerima faktur pada tanggal 1 dan 16 setiap bulan. (Ini akan berjalan melalui Cron Job setiap 2 minggu. Memindai melalui tabel pesanan dan kemudian menambahkan ke tabel 'faktur'. Apakah ada alternatif?)
Ada daftar pesanan pelanggan dalam orders
tabel dan ini juga menunjukkan perusahaan yang menjadi miliknya ( orders.company_id
)
The invoice
meja menghitung total biaya pesanan dari orders
meja.
Saya mencoba mencari cara untuk merancang pelacakan faktur yang masuk akal. Kadang-kadang perusahaan harus mengirim saya biaya atau kadang saya mengirim mereka biaya ( invoice.amount
)
Saya perlu melacak faktur dengan yang berikut:
- ketika perusahaan telah mengirimi saya jumlahnya
- kapan saya mengirim jumlahnya ke perusahaan
- berapa jumlah yang telah diterima dari perusahaan
- berapa jumlah yang saya kirim ke perusahaan
- apakah saya menerima jumlah penuh (jika tidak, apa yang harus saya perbarui pada Db?)
- status faktur (Faktur Terkirim, Dibatalkan, Jumlah Diterima, Jumlah Terkirim)
Berikut adalah desain database yang saya buat:
meja perusahaan
mysql> select * from company;
+----+-----------+
| id | name |
+----+-----------+
| 1 | Company A |
| 2 | Company B |
+----+-----------+
Pelanggan dapat memilih perusahaan dari situs web saya.
tabel pesanan
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 |
+----+---------+------------+------------+---------------------+-----------+
dua pelanggan telah memesan produk dari Perusahaan B ( orders.company_id = 2
). Saya tahu bidang pesanan tidak cukup, cukup disederhanakan untuk Anda.
tabel 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 |
+----+----------+------------+--------------+-------+
Daftar produk yang dipesan pelanggan.
tabel faktur
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 |
+----+------------+------------+---------------------+--------+-----------+
Di sinilah saya cukup terjebak pada desain tabel faktur. Saya tidak yakin bagaimana itu harus dilakukan. Faktur akan dibuat setiap 2 minggu. Dari hasil contoh invoice.amount
adalah 55,00 karena sudah dihitung dari orders.company_id = 2
tabel
Jika invoice.amount
is -50.00 (minus), itu berarti perusahaan perlu mengirim saya jumlah biaya.
Jika invoice.amount
50,00, itu berarti saya harus mengirim biaya kepada perusahaan.
Status_id dapat berupa: (1) Faktur Terkirim, (2) Dibatalkan, (3) Selesai
Apakah saya perlu menambahkan invoice_id
bidang dalam orders
tabel? Perbarui orders.invoice_id
bidang saat baris telah dimasukkan ke tabel 'faktur'.
tabel faktur_pembayaran
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 |
+----+------------+-----------------+-------------+---------------------+---------------------+
Di sinilah saya dapat melacak dan memperbarui transaksi .. pembayaran akan dilakukan melalui BACS.
Apakah ini tabel yang bagus atau apa yang perlu saya tingkatkan? Bidang dan tabel apa yang harus saya tambahkan?
Jika faktur telah dibuat dan kemudian saya perlu membuat perubahan dalam orders_products
atau orders
tabel - haruskah ia menghitung ulang invoice.amount
bidang? (Saya akan menggunakan PHP / MySQL).
SQL Dump :
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');
Jangan ragu untuk memperbarui / menambahkan tabel ke Jawab di sini.
Terima kasih