Primero de todo creo que te falta una tabla, deberias tener
ordenes
idOrden
fecha
...
//Cabecera de la orden, datos generales, fecha cliente... etc DetalleOrden
idDetalle
idOrden
idProducto
cantidad
precio
IVA
//Lineas de la orden producto cantidad y precio aplicado Productos
idProducto
Nombre
Precio
IVA%
//Catalogo de productos con el nombre y el precio actual
Pagos
idPago
idOrden
Fecha
importe
//Pagos, identificador de la orden a la que corresponde, fecha y importe
Con esa estructura podriamos funcionar.
Sobre lo que nos pasas
NO entiendo esta operación
Código sql:
Ver original...
( SUM( productos.valor ) - productos.iva_total ) AS total
...
si el campo iva_total esta en productos luego deberia ser
Código sql:
Ver original...
SUM( productos.valor - productos.iva_total ) AS total
...
Si tienes el IVA includo en valor, luego no tines que sacarlo para comparar con pagos puesto que los pagos seran tambien con iva incluido... no?
Luego para ver la ordenes con saldo pendiente, divide y venceras...
Código sql:
Ver originalSELECT ordenes_id, SUM(pagos.importe_total)
FROM pagos
GROUP BY ordenes_id
Esto nos da lo pagado de cada orden...
Código sql:
Ver originalSELECT productos.ordenes_id,
SUM( productos.valor - productos.iva_total ) AS totalSinIva,
SUM( productos.valor ) AS totalConIva
FROM productos
GROUP BY productos.ordenes_id
Esto nos da el total de la orden (con o sin IVA, tu sabras)
Ahora solo falta mezclarlas...
Código SQL:
Ver originalSELECT ValorOrden.Orden,
(ValorOrden.totalConIva-IFNULL(PagosOrden.Pagado,0)) AS Pendiente
FROM (SELECT productos.ordenes_id AS Orden,
SUM( productos.valor - productos.iva_total ) AS totalSinIva,
SUM( productos.valor ) AS totalConIva
FROM productos
GROUP BY productos.ordenes_id) AS ValorOrden
LEFT JOIN
(SELECT ordenes_id AS Orden, SUM(pagos.importe_total) AS Pagado
FROM pagos
GROUP BY ordenes_id) AS PagosOrden
ON ValorOrden.Orden=PagosOrden.Orden
WHERE (ValorOrden.totalConIva-IFNULL(PagosOrden.Pagado,0))>0;
No lo he probado pero seria lago así.
Quim