Компания будет получать счета 1 и 16 числа каждого месяца.(Он будет запускаться через Cron Job каждые 2 недели. Он просматривает таблицу заказов и затем добавляет в таблицу 'invoice'. Есть ли альтернатива?)
В таблице orders
есть список заказов клиентов ион также указывает, к какой компании он принадлежит (orders.company_id
)
. В таблице invoice
рассчитывается общая стоимость заказов из таблицы orders
.
Я пытаюсь понять, как разработать разумное отслеживание счетов.Когда-нибудь компании придется отправить мне комиссионные, или когда-нибудь я отправлю им комиссионные (invoice.amount
)
Мне нужно отследить счета-фактуры со следующими данными:
- когда компания прислала мне сумму
- когда я отправил сумму в компанию
- сколько было получено суммы от компании
- сколько было сделаноЯ отправил в компанию
- получил ли я полную сумму (если нет, что мне нужно обновить на БД?)
- статус счета (Счет отправлен, отменен, сумма получена, суммаОтправлено)
Вот дизайн базы данных, который я придумал:
таблица компании
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 |
+----+---------+------------+------------+---------------------+-----------+
два клиента заказали продукцию у Компания B (orders.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
равно 55,00, поскольку оно было рассчитано из orders.company_id = 2
таблицы
Если invoice.amount
равно -50,00 (минус), это означает, что компании потребуется отправить мне сумму вознаграждения.
Если invoice.amount
- 50,00, это означает, что мне нужно отправить компании пошлины.
Status_id может быть: (1) Счет отправлен, (2) Отменен, (3) Завершен.
Нужно ли добавлять поле invoice_id
в таблицу orders
?Обновите поле 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');
Не стесняйтесь, вы хотите обновить / добавить таблицы для ответа здесь.
Спасибо