Sistem her 2 haftada bir şirketler için faturalar üretecektir.
Şirket, her ayın 1'inde ve 16'sında fatura alacaktır. (Her 2 haftada bir Cron Job aracılığıyla çalışacaktır. Sipariş tablosunu tarayarak 'fatura' tablosuna ekleyecektir. Alternatif var mı?)
orders
Tabloda müşteri siparişlerinin listesi vardır ve hangi şirkete ait olduğunu da gösterir ( orders.company_id
)
invoice
Tablosundan siparişlerin toplam maliyetini hesaplamak orders
masaya.
Makul fatura takibini nasıl tasarlayacağımı anlamaya çalışıyorum. Bazen bir şirket bana ücretleri göndermek zorunda kalacak, ya da bazen ücretleri gönderiyorum ( invoice.amount
)
Faturaları aşağıdakilerle izlemem gerekiyor:
- şirket bana miktarı gönderdiğinde
- tutarı şirkete ne zaman gönderdim
- şirketten ne kadar miktar alındı
- şirkete ne kadar miktar gönderdim
- tutarın tamamını aldım mı (değilse, Db'de ne güncellemem gerekir?)
- fatura durumu (Gönderilen Fatura, İptal Edildi, Alınan Tutar, Gönderilen Tutar)
İşte ben geldi veritabanı tasarımı:
şirket tablosu
mysql> select * from company;
+----+-----------+
| id | name |
+----+-----------+
| 1 | Company A |
| 2 | Company B |
+----+-----------+
Müşteriler web sitemden bir şirket seçebilir.
siparişler tablosu
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 |
+----+---------+------------+------------+---------------------+-----------+
iki müşteri ürünleri Şirket B'den ( orders.company_id = 2
) sipariş etmiştir . Emir alanlarının yeterli olmadığını biliyorum, sadece sizin için basitleştirilmiş.
sipariş_ürünleri tablosu
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 |
+----+----------+------------+--------------+-------+
Müşterilerin sipariş ettikleri ürünlerin listesi.
fatura tablosu
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 |
+----+------------+------------+---------------------+--------+-----------+
Fatura tabloları tasarımında oldukça sıkışıp kaldım. Nasıl yapılması gerektiğinden emin değilim. Faturalar 2 haftada bir oluşturulacaktır. Tablodan invoice.amount
hesaplandığı için sonuç örneğinden 55.00orders.company_id = 2
Eğer invoice.amount
-50,00 (eksi), bu ortalama Şirket bana ücretleri tutarı göndermesi gerekir.
Eğer invoice.amount
50,00, o ben şirketin ücretlerini göndermek gerekir anlamına gelir.
Status_id şu olabilir: (1) Gönderilen Fatura, (2) İptal Edildi, (3) Tamamlandı
Tabloya invoice_id
alan eklemem gerekir orders
mi? orders.invoice_id
'Fatura' tablosuna satır eklendiğinde alanı güncelleyin .
fatura_ödeme tablosu
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 |
+----+------------+-----------------+-------------+---------------------+---------------------+
İşlemi takip edip güncelleyebileceğim yer burası .. ödeme BACS üzerinden yapılacaktır.
Bu iyi masa tasarımı mı yoksa geliştirmek için neye ihtiyacım var? Hangi alanları ve tabloları eklemeliyim?
Fatura oluşturulduysa ve daha sonra değişiklikleri orders_products
veya orders
tabloları yapmam gerekiyorsa - invoice.amount
alanı yeniden hesaplamalı mı? (PHP / MySQL kullanacağım).
SQL Dökümü :
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');
Yanıtlamak için tabloları güncellemek / eklemek istediğinizde çekinmeyin.
Teşekkürler