A cada 2 semanas, o sistema gera as faturas para as empresas.
A empresa receberá uma fatura nos dias 1 e 16 todos os meses. (Ele será executado via Cron Job a cada 2 semanas. Ele digitaliza a tabela de pedidos e depois é adicionada à tabela 'fatura'. Existe alternativa?)
Há uma lista de pedidos de clientes na orders
tabela e também indica a qual empresa pertence ( orders.company_id
)
A invoice
tabela calcula o custo total dos pedidos da orders
tabela.
Estou tentando descobrir como criar um rastreamento razoável de faturas. Em algum momento, a empresa terá que me enviar as taxas ou em algum momento eu as envio ( invoice.amount
)
Preciso acompanhar as faturas com o seguinte:
- quando a empresa me enviou o valor
- quando enviei o valor para a empresa
- quanto foi recebido da empresa
- quanto eu enviei para a empresa
- recebi o valor total (caso contrário, o que preciso atualizar no banco de dados?)
- status da fatura (fatura enviada, cancelada, valor recebido, valor enviado)
Aqui está o design do banco de dados que eu criei:
mesa da empresa
mysql> select * from company;
+----+-----------+
| id | name |
+----+-----------+
| 1 | Company A |
| 2 | Company B |
+----+-----------+
Os clientes podem selecionar uma empresa no meu site.
tabela de pedidos
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 |
+----+---------+------------+------------+---------------------+-----------+
dois clientes encomendaram os produtos da empresa B ( orders.company_id = 2
). Eu sei que os campos de pedidos não são suficientes, apenas simplificados para você.
tabela 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 |
+----+----------+------------+--------------+-------+
Lista de produtos solicitados pelos clientes.
tabela de faturas
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 |
+----+------------+------------+---------------------+--------+-----------+
É aqui que estou bastante atolado no design das tabelas de faturas. Não tenho certeza de como isso deve ser feito. As faturas serão geradas a cada 2 semanas. No exemplo do resultado invoice.amount
é 55,00 porque foi calculado a partir da orders.company_id = 2
tabela
Se o valor invoice.amount
for -50,00 (menos), significa que a empresa precisará me enviar o valor das taxas.
Se o valor invoice.amount
for 50,00, significa que preciso enviar as taxas à empresa.
O status_id pode ser: (1) Fatura enviada, (2) Cancelada, (3) Concluída
Preciso adicionar invoice_id
campo na orders
tabela? Atualize o orders.invoice_id
campo quando a linha tiver sido inserida na tabela 'fatura'.
tabela 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 |
+----+------------+-----------------+-------------+---------------------+---------------------+
É aqui que eu posso rastrear e atualizar a transação. O pagamento será feito via BACS.
Este projeto de boas tabelas ou o que eu preciso melhorar? Quais campos e tabelas devo adicionar?
Se a fatura foi gerada e, posteriormente, preciso fazer alterações orders_products
ou orders
tabelas - ela deve recalcular o invoice.amount
campo? (Eu vou estar usando PHP / MySQL).
Despejo 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');
Sinta-se à vontade para atualizar / adicionar tabelas à resposta aqui.
obrigado