This repository has been archived on 2024-11-28. You can view files and clone it, but cannot push or open issues or pull requests.
LuisLeon_FactuGES/SCRIPTS/VISTAS.SQL

1079 lines
33 KiB
Plaintext
Raw Permalink Normal View History

/*
VISTAS RELATIVAS A PEDIDOS Y ALBARANES
*/
DROP VIEW V_INVENTARIO;
DROP VIEW V_INVENTARIO_AUX;
DROP VIEW V_INV_STOCK;
DROP VIEW V_INV_STOCK_AUX;
DROP VIEW V_INV_ENTRADAS_PENDIENTES;
DROP VIEW V_INV_SALIDAS;
DROP VIEW V_INV_SALIDAS_AUX;
DROP VIEW V_INV_SALIDAS_MOV;
DROP VIEW V_INV_ENTRADAS;
DROP VIEW V_INV_ENTRADAS_AUX;
DROP VIEW V_INV_ENTRADAS_MOV;
DROP VIEW V_INV_ENTRADAS_ALB;
DROP VIEW V_INV_RESERVAS;
DROP VIEW V_INV_SALIDAS_ALB;
DROP VIEW V_PED_CLI_ART_PEND_PEDIR_PROV;
DROP VIEW V_PEDIDOS_CLIENTE;
DROP VIEW V_PED_CLI_SITUACION;
DROP VIEW V_PED_CLI_ARTICULOS;
DROP VIEW V_PED_CLI_ARTICULOS_AUX;
DROP VIEW V_PED_CLI_ART_SITUACION_CANT;
DROP VIEW V_PED_CLI_ART_SITUACION;
DROP VIEW V_PED_CLI_DETALLES;
DROP VIEW V_ALB_CLI_DETALLES;
DROP VIEW V_ALBARANES_CLIENTE;
DROP VIEW V_ALB_CLI_SITUACION;
DROP VIEW V_PEDIDOS_PROVEEDOR;
DROP VIEW V_PED_PROV_SITUACION;
DROP VIEW V_PED_PROV_PARCIALMENTE;
DROP VIEW V_PED_PROV_RECIBIDOS;
DROP VIEW V_PED_PROV_NUM_ARTICULOS;
DROP VIEW V_PED_PROV_ARTICULOS_RECIBIDOS2;
DROP VIEW V_PED_PROV_ARTICULOS;
DROP VIEW V_PED_PROV_ARTICULOS_AUX;
DROP VIEW V_PED_PROV_ARTICULOS_RECIBIDOS;
DROP VIEW V_PED_PROV_DETALLES;
DROP VIEW V_ALB_PROV_DETALLES;
/* Situaci<63>n de los albaranes de cliente */
CREATE VIEW V_ALB_CLI_SITUACION(
ID,
SITUACION)
AS
SELECT ALBARANES_CLIENTE.ID,
case when (FECHA_RECEPCION is not null) then 'SERVIDO'
when (FECHA_ENVIO is null) then 'PENDIENTE'
when (FECHA_ENVIO <= current_date) then 'ENVIADO'
when (FECHA_ENVIO > current_date) then 'PENDIENTE'
else 'N/A'
end as SITUACION
FROM ALBARANES_CLIENTE;
CREATE VIEW V_ALBARANES_CLIENTE(
ID,
ID_EMPRESA,
ID_CLIENTE,
NOMBRE,
FECHA_ALBARAN,
REFERENCIA,
SITUACION,
ID_ALMACEN,
NOMBRE_ALMACEN,
ID_PEDIDO,
REF_PEDIDO,
ID_FACTURA,
REF_FACTURA,
CALLE,
CODIGO_POSTAL,
POBLACION,
PROVINCIA,
PERSONA_CONTACTO,
TELEFONO,
IMPORTE_NETO,
IMPORTE_PORTE,
DESCUENTO,
IMPORTE_DESCUENTO,
BASE_IMPONIBLE,
IVA,
IMPORTE_IVA,
IMPORTE_TOTAL,
OBSERVACIONES,
INCIDENCIAS,
INCIDENCIAS_ACTIVAS,
FECHA_ALTA,
FECHA_MODIFICACION,
USUARIO,
ID_FORMA_PAGO,
FECHA_ENVIO,
FECHA_RECEPCION)
AS
SELECT
ALBARANES_CLIENTE.ID,
ALBARANES_CLIENTE.ID_EMPRESA,
ALBARANES_CLIENTE.ID_CLIENTE,
V_CLIENTES.NOMBRE,
ALBARANES_CLIENTE.FECHA_ALBARAN,
ALBARANES_CLIENTE.REFERENCIA,
V_ALB_CLI_SITUACION.SITUACION,
ALBARANES_CLIENTE.ID_ALMACEN,
ALMACENES.NOMBRE AS NOMBRE_ALMACEN,
ALBARANES_CLIENTE.ID_PEDIDO,
PEDIDOS_CLIENTE.REFERENCIA AS REF_PEDIDO,
ALBARANES_CLIENTE.ID_FACTURA,
FACTURAS_CLIENTE.REFERENCIA AS REF_FACTURA,
ALBARANES_CLIENTE.CALLE,
ALBARANES_CLIENTE.CODIGO_POSTAL,
ALBARANES_CLIENTE.POBLACION,
ALBARANES_CLIENTE.PROVINCIA,
ALBARANES_CLIENTE.PERSONA_CONTACTO,
ALBARANES_CLIENTE.TELEFONO,
ALBARANES_CLIENTE.IMPORTE_NETO,
ALBARANES_CLIENTE.IMPORTE_PORTE,
ALBARANES_CLIENTE.DESCUENTO,
ALBARANES_CLIENTE.IMPORTE_DESCUENTO,
ALBARANES_CLIENTE.BASE_IMPONIBLE,
ALBARANES_CLIENTE.IVA,
ALBARANES_CLIENTE.IMPORTE_IVA,
ALBARANES_CLIENTE.IMPORTE_TOTAL,
ALBARANES_CLIENTE.OBSERVACIONES,
ALBARANES_CLIENTE.INCIDENCIAS,
ALBARANES_CLIENTE.INCIDENCIAS_ACTIVAS,
ALBARANES_CLIENTE.FECHA_ALTA,
ALBARANES_CLIENTE.FECHA_MODIFICACION,
ALBARANES_CLIENTE.USUARIO,
ALBARANES_CLIENTE.ID_FORMA_PAGO,
ALBARANES_CLIENTE.FECHA_ENVIO,
ALBARANES_CLIENTE.FECHA_RECEPCION
FROM
ALBARANES_CLIENTE
LEFT OUTER JOIN V_CLIENTES ON (ALBARANES_CLIENTE.ID_CLIENTE = V_CLIENTES.ID)
LEFT OUTER JOIN PEDIDOS_CLIENTE ON (PEDIDOS_CLIENTE.ID = ALBARANES_CLIENTE.ID_PEDIDO)
LEFT OUTER JOIN FACTURAS_CLIENTE ON (FACTURAS_CLIENTE.ID = ALBARANES_CLIENTE.ID_FACTURA)
LEFT OUTER JOIN V_ALB_CLI_SITUACION ON (V_ALB_CLI_SITUACION.ID = ALBARANES_CLIENTE.ID)
LEFT OUTER JOIN ALMACENES ON (ALMACENES.ID = ALBARANES_CLIENTE.ID_ALMACEN);
/*Agrupa los art<72>culos de un mismo albar<61>n (ya que en un albar<61>n puede existir varias lineas con el mismo art<72>culo).
Para cada art<72>culo de albar<61>n le ponemos el pedido con el que esta asociado, la situacion y el almac<61>n de donde sali<6C>.
Se quitan todos los art<72>culos que no tengamos en cat<61>logo (ID_ARTICULO nulo, lineas de detalle libres) -> esta premisa la cambiamos para que
no se falsee la situaci<63>n de los pedidos, asi pues todo articulo que no este en el cat<61>logo lo pondremos con ID_ARTICULO 0.
Se quitan tambi<62>n aquellos que no se<73>n inventariables -> esta premisa falsear<61>a la situaci<63>n de los pedidos*/
CREATE VIEW V_ALB_CLI_DETALLES(
ID_ALBARAN,
ID_PEDIDO,
SITUACION,
ID_ALMACEN,
ID_ARTICULO,
CANTIDAD)
AS
SELECT ALBARANES_CLIENTE_DETALLES.ID_ALBARAN,
ALBARANES_CLIENTE.ID_PEDIDO,
V_ALB_CLI_SITUACION.SITUACION,
ALBARANES_CLIENTE.ID_ALMACEN,
COALESCE(ALBARANES_CLIENTE_DETALLES.ID_ARTICULO, 0),
SUM(COALESCE(ALBARANES_CLIENTE_DETALLES.CANTIDAD, 0))
FROM ALBARANES_CLIENTE_DETALLES
LEFT JOIN ALBARANES_CLIENTE
ON (ALBARANES_CLIENTE_DETALLES.ID_ALBARAN = ALBARANES_CLIENTE.ID)
LEFT JOIN ARTICULOS
ON (ALBARANES_CLIENTE_DETALLES.ID_ARTICULO = ARTICULOS.ID)
LEFT JOIN V_ALB_CLI_SITUACION
ON (ALBARANES_CLIENTE_DETALLES.ID_ALBARAN = V_ALB_CLI_SITUACION.ID)
/*Mantenemos los articulos inventariables y aquellos que no existan en nuestro cat<61>logo con el fin de no falsear la situaci<63>n de los pedidos
WHERE (ALBARANES_CLIENTE_DETALLES.ID_ARTICULO is not null)
AND (ARTICULOS.INVENTARIABLE = 1)
*/
group BY ALBARANES_CLIENTE_DETALLES.ID_ALBARAN,
ALBARANES_CLIENTE.ID_PEDIDO,
V_ALB_CLI_SITUACION.SITUACION,
ALBARANES_CLIENTE.ID_ALMACEN,
ALBARANES_CLIENTE_DETALLES.ID_ARTICULO;
/*Agrupa los art<72>culos de un mismo pedido (ya que en un pedido puede existir varias lineas con el mismo art<72>culo).
Se quitan todos los art<72>culos que no tengamos en cat<61>logo (ID_ARTICULO nulo, lineas de detalle libres) -> esta premisa la cambiamos para que
no se falsee la situaci<63>n de los pedidos, asi pues todo articulo que no este en el cat<61>logo lo pondremos con ID_ARTICULO 0.
Se quitan tambi<62>n aquellos que no se<73>n inventariables -> esta premisa nos falsear<61>a la situacion de los pedidos*/
CREATE VIEW V_PED_CLI_DETALLES(
ID_PEDIDO,
ID_ARTICULO,
CANTIDAD)
AS
SELECT PEDIDOS_CLIENTE_DETALLES.ID_PEDIDO,
COALESCE(PEDIDOS_CLIENTE_DETALLES.ID_ARTICULO, 0),
SUM(COALESCE(PEDIDOS_CLIENTE_DETALLES.CANTIDAD, 0)) AS CANTIDAD
FROM PEDIDOS_CLIENTE_DETALLES
LEFT JOIN ARTICULOS
ON (PEDIDOS_CLIENTE_DETALLES.ID_ARTICULO = ARTICULOS.ID)
/*Mantenemos los articulos inventariables y aquellos que no existan en nuestro cat<61>logo con el fin de no falsear la situaci<63>n de los pedidos
WHERE (PEDIDOS_CLIENTE_DETALLES.ID_ARTICULO is not null)
AND (ARTICULOS.INVENTARIABLE = 1)
*/
GROUP BY PEDIDOS_CLIENTE_DETALLES.ID_PEDIDO,
PEDIDOS_CLIENTE_DETALLES.ID_ARTICULO;
/*Agrupa todos los art<72>culos de un pedido por situacion (a partir de albaranes de cliente) de cada uno de los pedidos asociados en los albaranes existentes*/
/*No le ponemos el almacen donde sali<6C> o va a salir ya que un mismo pedido podr<64>a tener varios albaranes con distintos almacenes de origen*/
/*Aquellos articulos que no tengan ID_PEDIDO es porque el albar<61>n al que pertenecen no tiene pedido asociado por ello no los tendremos en cuenta*/
CREATE VIEW V_PED_CLI_ART_SITUACION(
ID_PEDIDO,
SITUACION,
ID_ARTICULO,
CANTIDAD)
AS
SELECT ID_PEDIDO, SITUACION, ID_ARTICULO, SUM(CANTIDAD) AS CANTIDAD
FROM V_ALB_CLI_DETALLES
WHERE (ID_PEDIDO is not null)
GROUP BY ID_PEDIDO,
SITUACION,
ID_ARTICULO;
/*Nos desglosa las cantidades del art<72>culo*/
CREATE VIEW V_PED_CLI_ART_SITUACION_CANT(
ID_PEDIDO,
ID_ARTICULO,
CANTIDAD_RESERVADA,
CANTIDAD_ENVIADA,
CANTIDAD_SERVIDA)
AS
SELECT ID_PEDIDO, ID_ARTICULO,
COALESCE((CASE SITUACION when 'PENDIENTE' THEN CANTIDAD END), 0) as CANTIDAD_RESERVADA,
COALESCE((CASE SITUACION when 'ENVIADO' THEN CANTIDAD END), 0) as CANTIDAD_ENVIADA,
COALESCE((CASE SITUACION when 'SERVIDO' THEN CANTIDAD END), 0) as CANTIDAD_SERVIDA
FROM V_PED_CLI_ART_SITUACION;
/*Al igual que en la parte de proveedores, no hacemos LEFT JOIN entre V_PED_CLI_DETALLES y V_PED_CLI_ART_SITUACION_CANT,*/
/*porque por cada tupla de la primera repetir<69>a la consulta de la segunda disparando tiempos, por ello teniendo las*/
/*dos vistas ejecutadas hacemos una union obteniendo todos los art<72>culos del pedido, tanto recibidos como pendientes,*/
/*luego haremos la agrupaci<63>n sobre este resultado*/
CREATE VIEW V_PED_CLI_ARTICULOS_AUX(
ID_PEDIDO,
ID_ARTICULO,
CANTIDAD_PEDIDA,
CANTIDAD_RESERVADA,
CANTIDAD_ENVIADA,
CANTIDAD_SERVIDA)
AS
SELECT
V_PED_CLI_DETALLES.ID_PEDIDO,
V_PED_CLI_DETALLES.ID_ARTICULO,
V_PED_CLI_DETALLES.CANTIDAD AS CANTIDAD_PEDIDA,
0 AS CANTIDAD_RESERVADA,
0 AS CANTIDAD_ENVIADA,
0 AS CANTIDAD_SERVIDA
FROM V_PED_CLI_DETALLES
UNION
SELECT
V_PED_CLI_ART_SITUACION_CANT.ID_PEDIDO,
V_PED_CLI_ART_SITUACION_CANT.ID_ARTICULO,
NULL AS CANTIDAD_PEDIDA,
V_PED_CLI_ART_SITUACION_CANT.CANTIDAD_RESERVADA AS CANTIDAD_RESERVADA,
V_PED_CLI_ART_SITUACION_CANT.CANTIDAD_ENVIADA AS CANTIDAD_ENVIADA,
V_PED_CLI_ART_SITUACION_CANT.CANTIDAD_SERVIDA AS CANTIDAD_SERVIDA
FROM V_PED_CLI_ART_SITUACION_CANT;
/*A partir de la vista anterior obtenemos el estado de cada uno de los art<72>culos del pedido de cliente*/
/*Despreciamos aquellas tuplas cuya cantidad pedida sea null, porque son articulos a<>adidos en el albar<61>n que*/
/*no est<73>n en su pedido correspondiente por lo tanto no los tendremos en cuenta para saber si los articulos del*/
/*pedido se han recibido todos. De todas formas no tiene mucho sentido este caso*/
/*Esta vista nos determina el estado de cada uno de los art<72>culos del pedido de cliente*/
CREATE VIEW V_PED_CLI_ARTICULOS(
ID_PEDIDO,
ID_ARTICULO,
CANTIDAD_PEDIDA,
CANTIDAD_RESERVADA,
CANTIDAD_ENVIADA,
CANTIDAD_SERVIDA,
CANTIDAD_PENDIENTE)
AS
SELECT ID_PEDIDO,
ID_ARTICULO,
SUM(CANTIDAD_PEDIDA),
SUM(CANTIDAD_RESERVADA) as CANTIDAD_RESERVADA,
SUM(CANTIDAD_ENVIADA) as CANTIDAD_ENVIADA,
SUM(CANTIDAD_SERVIDA) as CANTIDAD_SERVIDA,
(SUM(CANTIDAD_PEDIDA) - (SUM(CANTIDAD_RESERVADA) +
SUM(CANTIDAD_ENVIADA) +
SUM(CANTIDAD_SERVIDA))) as CANTIDAD_PENDIENTE
FROM V_PED_CLI_ARTICULOS_AUX
GROUP BY ID_PEDIDO,
ID_ARTICULO
HAVING SUM(CANTIDAD_PEDIDA) IS NOT NULL;
/*POR COMENTAR*/
CREATE VIEW V_PED_CLI_SITUACION (
ID_PEDIDO,
SITUACION)
AS
/*ANTERIOR
SELECT ID_PEDIDO,
CASE
WHEN HAY_ALBARANES = 0 THEN 'PENDIENTE'
WHEN (CANTIDAD_PENDIENTE <= 0) AND (CANTIDAD_PEDIDA <= CANTIDAD_SERVIDA) THEN 'SERVIDO'
ELSE 'EN PROCESO'
END AS SITUACION
FROM
(SELECT V_PED_CLI_ARTICULOS.ID_PEDIDO,
SUM(V_PED_CLI_ARTICULOS.CANTIDAD_PEDIDA) AS CANTIDAD_PEDIDA,
SUM(V_PED_CLI_ARTICULOS.CANTIDAD_RESERVADA) AS CANTIDAD_RESERVADA,
SUM(V_PED_CLI_ARTICULOS.CANTIDAD_ENVIADA) AS CANTIDAD_ENVIADA,
SUM(V_PED_CLI_ARTICULOS.CANTIDAD_SERVIDA) AS CANTIDAD_SERVIDA,
SUM(V_PED_CLI_ARTICULOS.CANTIDAD_PENDIENTE) AS CANTIDAD_PENDIENTE,
CASE
WHEN COUNT(ALBARANES_CLIENTE.ID) > 0 THEN 1
ELSE 0
END AS HAY_ALBARANES
FROM ALBARANES_CLIENTE
RIGHT OUTER JOIN V_PED_CLI_ARTICULOS ON (ALBARANES_CLIENTE.ID_PEDIDO =
V_PED_CLI_ARTICULOS.ID_PEDIDO)
GROUP BY V_PED_CLI_ARTICULOS.ID_PEDIDO);
*/
SELECT
PEDIDOS_CLIENTE.ID,
/* Si (num. art<72>culos servidos - num. art<72>culos pedidos) = 0 -> Ped. servido
Si no
Si el pedido tiene albaranes -> Ped. servido
Si no -> Ped. pendiente
*/
CASE
WHEN
( COALESCE(
(SELECT
COUNT(V_PED_CLI_ARTICULOS.ID_ARTICULO)
FROM
V_PED_CLI_ARTICULOS
WHERE (V_PED_CLI_ARTICULOS.CANTIDAD_PEDIDA <= V_PED_CLI_ARTICULOS.CANTIDAD_SERVIDA)
AND (V_PED_CLI_ARTICULOS.ID_PEDIDO = PEDIDOS_CLIENTE.ID)
GROUP BY ID_PEDIDO), 0)
-
COALESCE(
(SELECT
COUNT(V_PED_CLI_DETALLES.ID_ARTICULO)
FROM
V_PED_CLI_DETALLES
WHERE (V_PED_CLI_DETALLES.ID_PEDIDO = PEDIDOS_CLIENTE.ID)
GROUP BY ID_PEDIDO), 0)
= 0)
AND
( COALESCE(
(SELECT
COUNT(V_PED_CLI_DETALLES.ID_ARTICULO)
FROM
V_PED_CLI_DETALLES
WHERE (V_PED_CLI_DETALLES.ID_PEDIDO = PEDIDOS_CLIENTE.ID)
GROUP BY ID_PEDIDO), 0)
<> 0) THEN 'SERVIDO'
ELSE
CASE
WHEN
(COALESCE(
(SELECT
COUNT(ALBARANES_CLIENTE.ID)
FROM
ALBARANES_CLIENTE
WHERE (ALBARANES_CLIENTE.ID_PEDIDO = PEDIDOS_CLIENTE.ID)
GROUP BY ALBARANES_CLIENTE.ID_PEDIDO), 0)
<> 0) THEN 'EN PROCESO'
ELSE 'PENDIENTE'
END
END AS SITUACION
FROM
PEDIDOS_CLIENTE;
/*Agrupa los art<72>culos de un mismo albar<61>n (ya que en un albar<61>n puede existir varias lineas con el mismo art<72>culo).
Para cada art<72>culo de albar<61>n le ponemos el pedido con el que esta asociado y el almac<61>n donde se recibio.
Se quitan todos los art<72>culos que no tengamos en cat<61>logo (ID_ARTICULO nulo, lineas de detalle libres)-> esta premisa la cambiamos para que
no se falsee la situaci<63>n de los pedidos, asi pues todo articulo que no este en el cat<61>logo lo pondremos con ID_ARTICULO 0.
Se quitan tambi<62>n aquellos que no se<73>n inventariables -> esta premisa nos falsear<61>a la situaci<63>n de los pedidos */
CREATE VIEW V_ALB_PROV_DETALLES(
ID_ALBARAN,
ID_PEDIDO,
ID_ALMACEN,
ID_ARTICULO,
CANTIDAD)
AS
SELECT ALBARANES_PROVEEDOR_DETALLES.ID_ALBARAN,
ALBARANES_PROVEEDOR.ID_PEDIDO,
ALBARANES_PROVEEDOR.ID_ALMACEN,
COALESCE(ALBARANES_PROVEEDOR_DETALLES.ID_ARTICULO, 0),
SUM (COALESCE(ALBARANES_PROVEEDOR_DETALLES.CANTIDAD, 0)) AS CANTIDAD
FROM ALBARANES_PROVEEDOR_DETALLES
LEFT JOIN ALBARANES_PROVEEDOR
ON (ALBARANES_PROVEEDOR_DETALLES.ID_ALBARAN = ALBARANES_PROVEEDOR.ID)
LEFT JOIN ARTICULOS
ON (ALBARANES_PROVEEDOR_DETALLES.ID_ARTICULO = ARTICULOS.ID)
/*Mantenemos los articulos inventariables y aquellos que no existan en nuestro cat<61>logo con el fin de no falsear la situaci<63>n de los pedidos
WHERE (ALBARANES_PROVEEDOR_DETALLES.ID_ARTICULO is not null)
AND (ARTICULOS.INVENTARIABLE = 1)
*/
GROUP BY ALBARANES_PROVEEDOR_DETALLES.ID_ALBARAN,
ALBARANES_PROVEEDOR.ID_PEDIDO,
ALBARANES_PROVEEDOR.ID_ALMACEN,
ALBARANES_PROVEEDOR_DETALLES.ID_ARTICULO;
/*Agrupa los art<72>culos de un mismo pedido (ya que en un pedido puede existir varias lineas con el mismo art<72>culo).
Para cada art<72>culo de pedido le ponemos el pedido con el que esta asociado y el almac<61>n donde ser<65> recibido.
Se quitan todos los art<72>culos que no tengamos en cat<61>logo (ID_ARTICULO nulo, lineas de detalle libres)-> esta premisa la cambiamos para que
no se falsee la situaci<63>n de los pedidos, asi pues todo articulo que no este en el cat<61>logo lo pondremos con ID_ARTICULO 0.
Se quitan tambi<62>n aquellos que no se<73>n inventariables -> esta premisa nos falsearia la situacion de los pedidos*/
CREATE VIEW V_PED_PROV_DETALLES(
ID_PEDIDO,
ID_ALMACEN,
ID_ARTICULO,
CANTIDAD)
AS
SELECT PEDIDOS_PROVEEDOR_DETALLES.ID_PEDIDO,
PEDIDOS_PROVEEDOR.ID_ALMACEN,
COALESCE(PEDIDOS_PROVEEDOR_DETALLES.ID_ARTICULO, 0),
SUM(COALESCE(PEDIDOS_PROVEEDOR_DETALLES.CANTIDAD, 0))
FROM PEDIDOS_PROVEEDOR_DETALLES
LEFT JOIN PEDIDOS_PROVEEDOR
ON (PEDIDOS_PROVEEDOR_DETALLES.ID_PEDIDO = PEDIDOS_PROVEEDOR.ID)
LEFT JOIN ARTICULOS
ON (PEDIDOS_PROVEEDOR_DETALLES.ID_ARTICULO = ARTICULOS.ID)
/*Mantenemos los articulos inventariables y aquellos que no existan en nuestro cat<61>logo con el fin de no falsear la situaci<63>n de los pedidos
WHERE (PEDIDOS_PROVEEDOR_DETALLES.ID_ARTICULO is not null)
AND (ARTICULOS.INVENTARIABLE = 1)
*/
GROUP BY PEDIDOS_PROVEEDOR_DETALLES.ID_PEDIDO,
PEDIDOS_PROVEEDOR.ID_ALMACEN,
PEDIDOS_PROVEEDOR_DETALLES.ID_ARTICULO;
/*Agrupa todos los art<72>culos recibidos (por albaranes de proveedor) de cada uno de los pedidos asociados en los albaranes existentes*/
/*No le ponemos el almacen donde se recibi<62> ya que un mismo pedido podr<64>a tener varios albaranes con distintos almacenes de destino*/
/*Aquellos articulos que no tengan ID_PEDIDO es porque el albar<61>n al que pertenecen no tiene pedido asociado por ello no los tendremos en cuenta*/
CREATE VIEW V_PED_PROV_ARTICULOS_RECIBIDOS(
ID_PEDIDO,
ID_ARTICULO,
CANTIDAD)
AS
SELECT ID_PEDIDO, ID_ARTICULO, SUM(CANTIDAD) AS CANTIDAD
FROM V_ALB_PROV_DETALLES
WHERE (ID_PEDIDO is not null)
GROUP BY ID_PEDIDO, ID_ARTICULO;
/*No hacemos LEFT JOIN entre V_PED_PROV_DETALLES y V_PED_PROV_ARTICULOS_RECIBIDOS, porque por cada tupla de la primera*/
/*repetir<69>a la consulta de la segunda disparando tiempos, por ello teniendo las dos vistas ejecutadas hacemos una union*/
/*obteniendo todos los art<72>culos del pedido, tanto recibidos como pendientes, luego haremos la agrupaci<63>n sobre este resultado*/
CREATE VIEW V_PED_PROV_ARTICULOS_AUX(
ID_PEDIDO,
ID_ARTICULO,
CANTIDAD_PEDIDA,
CANTIDAD_RECIBIDA)
AS
SELECT
V_PED_PROV_DETALLES.ID_PEDIDO,
V_PED_PROV_DETALLES.ID_ARTICULO,
V_PED_PROV_DETALLES.CANTIDAD AS CANTIDAD_PEDIDA,
0 as CANTIDAD_RECIBIDA
FROM V_PED_PROV_DETALLES
UNION
SELECT
V_PED_PROV_ARTICULOS_RECIBIDOS.ID_PEDIDO,
V_PED_PROV_ARTICULOS_RECIBIDOS.ID_ARTICULO,
NULL as CANTIDAD_PEDIDA,
V_PED_PROV_ARTICULOS_RECIBIDOS.CANTIDAD AS CANTIDAD_RECIBIDA
FROM V_PED_PROV_ARTICULOS_RECIBIDOS;
/*A partir de la vista anterior obtenemos el estado de cada uno de los art<72>culos del pedido de proveedor*/
/*Despreciamos aquellas tuplas cuya cantidad pedida sea null, porque son articulos a<>adidos en el albar<61>n que*/
/*no est<73>n en su pedido correspondiente por lo tanto no los tendremos en cuenta para saber si los articulos del*/
/*pedido se han recibido todos. De todas formas no tiene mucho sentido este caso*/
CREATE VIEW V_PED_PROV_ARTICULOS(
ID_PEDIDO,
ID_ALMACEN,
ID_ARTICULO,
CANTIDAD_PEDIDA,
CANTIDAD_RECIBIDA,
CANTIDAD_PENDIENTE)
AS
SELECT ID_PEDIDO,
PEDIDOS_PROVEEDOR.ID_ALMACEN,
ID_ARTICULO,
SUM(CANTIDAD_PEDIDA) as CANTIDAD_PEDIDA,
SUM(CANTIDAD_RECIBIDA) as CANTIDAD_RECIBIDA,
SUM(CANTIDAD_PEDIDA) - SUM(CANTIDAD_RECIBIDA) as CANTIDAD_PENDIENTE
FROM V_PED_PROV_ARTICULOS_AUX
LEFT JOIN PEDIDOS_PROVEEDOR
ON (PEDIDOS_PROVEEDOR.ID = V_PED_PROV_ARTICULOS_AUX.ID_PEDIDO)
GROUP BY ID_PEDIDO,
PEDIDOS_PROVEEDOR.ID_ALMACEN,
ID_ARTICULO
HAVING SUM(CANTIDAD_PEDIDA) IS NOT NULL;
/*POR COMENTAR*/
CREATE VIEW V_PED_PROV_ARTICULOS_RECIBIDOS2(
ID_PEDIDO,
CANTIDAD)
AS
select ID_PEDIDO, count(CANTIDAD_PENDIENTE)
from V_PED_PROV_ARTICULOS
where (CANTIDAD_PENDIENTE <= 0)
group by ID_PEDIDO;
CREATE VIEW V_PED_PROV_NUM_ARTICULOS(
ID_PEDIDO,
CANTIDAD)
AS
select ID_PEDIDO, count(ID_ARTICULO)
from V_PED_PROV_DETALLES
group by ID_PEDIDO;
CREATE VIEW V_PED_PROV_RECIBIDOS(
ID_PEDIDO)
AS
SELECT V_PED_PROV_ARTICULOS_RECIBIDOS2.ID_PEDIDO
from V_PED_PROV_ARTICULOS_RECIBIDOS2
LEFT JOIN V_PED_PROV_NUM_ARTICULOS
on (V_PED_PROV_NUM_ARTICULOS.ID_PEDIDO = V_PED_PROV_ARTICULOS_RECIBIDOS2.ID_PEDIDO)
where V_PED_PROV_ARTICULOS_RECIBIDOS2.CANTIDAD = V_PED_PROV_NUM_ARTICULOS.CANTIDAD;
CREATE VIEW V_PED_PROV_PARCIALMENTE(
ID_PEDIDO)
AS
Select ID_PEDIDO
from v_ped_prov_articulos_recibidos
where id_pedido not in (select ID_PEDIDO from V_PED_PROV_RECIBIDOS);
CREATE VIEW V_PED_PROV_SITUACION(
ID_PEDIDO,
SITUACION)
AS
/*ANTERIOR A LA VISTA ACTUAL
SELECT ID_PEDIDO,
CASE
WHEN (HAY_ALBARANES = 0) OR (CANTIDAD_RECIBIDA <= 0) THEN 'PENDIENTE'
WHEN (CANTIDAD_PENDIENTE <= 0) THEN 'RECIBIDO'
ELSE 'PARCIAL'
END AS SITUACION
FROM
(SELECT V_PED_PROV_ARTICULOS.ID_PEDIDO,
SUM(V_PED_PROV_ARTICULOS.CANTIDAD_PEDIDA) AS CANTIDAD_PEDIDA,
SUM(V_PED_PROV_ARTICULOS.CANTIDAD_RECIBIDA) AS CANTIDAD_RECIBIDA,
SUM(V_PED_PROV_ARTICULOS.CANTIDAD_PENDIENTE) AS CANTIDAD_PENDIENTE,
CASE
WHEN COUNT(ALBARANES_PROVEEDOR.ID) > 0 THEN 1
ELSE 0
END AS HAY_ALBARANES
FROM ALBARANES_PROVEEDOR
RIGHT OUTER JOIN V_PED_PROV_ARTICULOS ON (ALBARANES_PROVEEDOR.ID_PEDIDO =
V_PED_PROV_ARTICULOS.ID_PEDIDO)
GROUP BY V_PED_PROV_ARTICULOS.ID_PEDIDO);
*/
select ID, 'PENDIENTE'
from PEDIDOS_PROVEEDOR
where (ID not in (select ID_PEDIDO from v_ped_prov_parcialmente))
and (ID not in (select ID_PEDIDO from v_ped_prov_recibidos))
union
select ID_PEDIDO, 'PARCIAL'
from v_ped_prov_parcialmente
union
select ID_PEDIDO, 'RECIBIDO'
from v_ped_prov_recibidos;
CREATE VIEW V_PEDIDOS_CLIENTE(
ID,
ID_EMPRESA,
ID_CLIENTE,
NOMBRE,
REFERENCIA,
SITUACION,
FECHA_PEDIDO,
CALLE,
CODIGO_POSTAL,
POBLACION,
PROVINCIA,
PERSONA_CONTACTO,
TELEFONO,
OBSERVACIONES,
INCIDENCIAS,
INCIDENCIAS_ACTIVAS,
FECHA_ALTA,
FECHA_MODIFICACION,
USUARIO,
IMPORTE_NETO,
IMPORTE_PORTE,
DESCUENTO,
IMPORTE_DESCUENTO,
BASE_IMPONIBLE,
IVA,
IMPORTE_IVA,
IMPORTE_TOTAL,
ID_FORMA_PAGO)
AS
SELECT
PEDIDOS_CLIENTE.ID,
PEDIDOS_CLIENTE.ID_EMPRESA,
PEDIDOS_CLIENTE.ID_CLIENTE,
V_CLIENTES.NOMBRE,
PEDIDOS_CLIENTE.REFERENCIA,
V_PED_CLI_SITUACION.SITUACION,
PEDIDOS_CLIENTE.FECHA_PEDIDO,
PEDIDOS_CLIENTE.CALLE,
PEDIDOS_CLIENTE.CODIGO_POSTAL,
PEDIDOS_CLIENTE.POBLACION,
PEDIDOS_CLIENTE.PROVINCIA,
PEDIDOS_CLIENTE.PERSONA_CONTACTO,
PEDIDOS_CLIENTE.TELEFONO,
PEDIDOS_CLIENTE.OBSERVACIONES,
PEDIDOS_CLIENTE.INCIDENCIAS,
PEDIDOS_CLIENTE.INCIDENCIAS_ACTIVAS,
PEDIDOS_CLIENTE.FECHA_ALTA,
PEDIDOS_CLIENTE.FECHA_MODIFICACION,
PEDIDOS_CLIENTE.USUARIO,
PEDIDOS_CLIENTE.IMPORTE_NETO,
PEDIDOS_CLIENTE.IMPORTE_PORTE,
PEDIDOS_CLIENTE.DESCUENTO,
PEDIDOS_CLIENTE.IMPORTE_DESCUENTO,
PEDIDOS_CLIENTE.BASE_IMPONIBLE,
PEDIDOS_CLIENTE.IVA,
PEDIDOS_CLIENTE.IMPORTE_IVA,
PEDIDOS_CLIENTE.IMPORTE_TOTAL,
PEDIDOS_CLIENTE.ID_FORMA_PAGO
FROM
PEDIDOS_CLIENTE
LEFT OUTER JOIN V_CLIENTES ON (PEDIDOS_CLIENTE.ID_CLIENTE = V_CLIENTES.ID)
LEFT OUTER JOIN V_PED_CLI_SITUACION ON (V_PED_CLI_SITUACION.ID_PEDIDO = PEDIDOS_CLIENTE.ID);
CREATE VIEW V_PEDIDOS_PROVEEDOR(
ID,
ID_EMPRESA,
ID_PROVEEDOR,
NOMBRE,
REFERENCIA,
SITUACION,
FECHA_ENVIO,
FECHA_PEDIDO,
FECHA_CONFIRMACION,
FECHA_ENTREGA,
ID_ALMACEN,
NOMBRE_ALMACEN,
OBSERVACIONES,
IMPORTE_TOTAL,
INCIDENCIAS,
INCIDENCIAS_ACTIVAS,
CALLE,
POBLACION,
PROVINCIA,
CODIGO_POSTAL,
PERSONA_CONTACTO,
TELEFONO,
FECHA_ALTA,
FECHA_MODIFICACION,
USUARIO,
ID_PEDIDO_CLIENTE,
REF_PED_CLIENTE,
IMPORTE_NETO,
IMPORTE_PORTE,
DESCUENTO,
IMPORTE_DESCUENTO,
BASE_IMPONIBLE,
IVA,
IMPORTE_IVA,
ID_FORMA_PAGO)
AS
SELECT
PEDIDOS_PROVEEDOR.ID,
PEDIDOS_PROVEEDOR.ID_EMPRESA,
PEDIDOS_PROVEEDOR.ID_PROVEEDOR,
V_PROVEEDORES.NOMBRE,
PEDIDOS_PROVEEDOR.REFERENCIA,
V_PED_PROV_SITUACION.SITUACION,
PEDIDOS_PROVEEDOR.FECHA_ENVIO,
PEDIDOS_PROVEEDOR.FECHA_PEDIDO,
PEDIDOS_PROVEEDOR.FECHA_CONFIRMACION,
PEDIDOS_PROVEEDOR.FECHA_ENTREGA,
PEDIDOS_PROVEEDOR.ID_ALMACEN,
ALMACENES.NOMBRE AS NOMBRE_ALMACEN,
PEDIDOS_PROVEEDOR.OBSERVACIONES,
PEDIDOS_PROVEEDOR.IMPORTE_TOTAL,
PEDIDOS_PROVEEDOR.INCIDENCIAS,
PEDIDOS_PROVEEDOR.INCIDENCIAS_ACTIVAS,
PEDIDOS_PROVEEDOR.CALLE,
PEDIDOS_PROVEEDOR.POBLACION,
PEDIDOS_PROVEEDOR.PROVINCIA,
PEDIDOS_PROVEEDOR.CODIGO_POSTAL,
PEDIDOS_PROVEEDOR.PERSONA_CONTACTO,
PEDIDOS_PROVEEDOR.TELEFONO,
PEDIDOS_PROVEEDOR.FECHA_ALTA,
PEDIDOS_PROVEEDOR.FECHA_MODIFICACION,
PEDIDOS_PROVEEDOR.USUARIO,
PEDIDOS_PROVEEDOR.ID_PEDIDO_CLIENTE,
PEDIDOS_CLIENTE.REFERENCIA AS REF_PED_CLIENTE,
PEDIDOS_PROVEEDOR.IMPORTE_NETO,
PEDIDOS_PROVEEDOR.IMPORTE_PORTE,
PEDIDOS_PROVEEDOR.DESCUENTO,
PEDIDOS_PROVEEDOR.IMPORTE_DESCUENTO,
PEDIDOS_PROVEEDOR.BASE_IMPONIBLE,
PEDIDOS_PROVEEDOR.IVA,
PEDIDOS_PROVEEDOR.IMPORTE_IVA,
PEDIDOS_PROVEEDOR.ID_FORMA_PAGO
FROM
PEDIDOS_PROVEEDOR
LEFT OUTER JOIN V_PROVEEDORES ON (PEDIDOS_PROVEEDOR.ID_PROVEEDOR = V_PROVEEDORES.ID)
LEFT OUTER JOIN ALMACENES ON (ALMACENES.ID = PEDIDOS_PROVEEDOR.ID_ALMACEN)
LEFT OUTER JOIN PEDIDOS_CLIENTE ON (PEDIDOS_CLIENTE.ID = PEDIDOS_PROVEEDOR.ID_PEDIDO_CLIENTE)
LEFT OUTER JOIN V_PED_PROV_SITUACION ON (V_PED_PROV_SITUACION.ID_PEDIDO = PEDIDOS_PROVEEDOR.ID);
CREATE VIEW V_PED_CLI_ART_PEND_PEDIR_PROV(
ID_PEDIDO,
ID_ARTICULO,
CANT_PEDIDA_CLIENTE,
ID_PROVEEDOR,
CANT_PEDIDA_PROVEEDOR,
CANT_PENDIENTE_PEDIR)
AS
SELECT
V_PED_CLI_ARTICULOS.ID_PEDIDO,
V_PED_CLI_ARTICULOS.ID_ARTICULO,
V_PED_CLI_ARTICULOS.CANTIDAD_PENDIENTE AS CANT_PED_CLI,
ARTICULOS.ID_PROVEEDOR,
SUM(COALESCE(V_PED_PROV_ARTICULOS.CANTIDAD_PEDIDA, 0)) AS CANT_PED_PROV,
V_PED_CLI_ARTICULOS.CANTIDAD_PENDIENTE - SUM(COALESCE(V_PED_PROV_ARTICULOS.CANTIDAD_PEDIDA, 0)) AS CANT_PEND_PEDIR
FROM
V_PED_CLI_ARTICULOS
LEFT OUTER JOIN ARTICULOS ON (ARTICULOS.ID = V_PED_CLI_ARTICULOS.ID_ARTICULO)
LEFT OUTER JOIN PEDIDOS_PROVEEDOR ON (PEDIDOS_PROVEEDOR.ID_PEDIDO_CLIENTE = V_PED_CLI_ARTICULOS.ID_PEDIDO)
LEFT OUTER JOIN V_PED_PROV_ARTICULOS ON
((V_PED_PROV_ARTICULOS.ID_PEDIDO = PEDIDOS_PROVEEDOR.ID) AND
(V_PED_PROV_ARTICULOS.ID_ARTICULO = V_PED_CLI_ARTICULOS.ID_ARTICULO))
WHERE (V_PED_CLI_ARTICULOS.ID_ARTICULO <> 0)
AND (ARTICULOS.INVENTARIABLE = 1)
GROUP BY
V_PED_CLI_ARTICULOS.ID_PEDIDO,
V_PED_CLI_ARTICULOS.ID_ARTICULO,
V_PED_CLI_ARTICULOS.CANTIDAD_PENDIENTE,
ARTICULOS.ID_PROVEEDOR
HAVING
V_PED_CLI_ARTICULOS.CANTIDAD_PENDIENTE - SUM(COALESCE(V_PED_PROV_ARTICULOS.CANTIDAD_PEDIDA, 0)) > 0;
/*
INVENTARIO
*/
/*Todos los articulos reservados en almac<61>n para alg<6C>n albar<61>n (Pendiente))*/
CREATE VIEW V_INV_RESERVAS(
ID_ALMACEN,
ID_ARTICULO,
CANTIDAD)
AS
SELECT ID_ALMACEN, ID_ARTICULO, SUM(CANTIDAD)
FROM V_ALB_CLI_DETALLES
WHERE (ID_ALMACEN IS NOT NULL)
AND (SITUACION = 'PENDIENTE')
GROUP BY ID_ALMACEN, ID_ARTICULO;
/*Todas las salidas de articulos a partir de los movimientos libres realizados por el usuario*/
CREATE VIEW V_INV_SALIDAS_MOV(
ID_ALMACEN,
ID_ARTICULO,
CANTIDAD)
AS
SELECT ID_ALMACEN, ID_ARTICULO, SUM(CANTIDAD)
FROM MOVIMIENTOS
WHERE TIPO = 'S'
GROUP BY ID_ALMACEN, ID_ARTICULO;
/*Todas las salidas de articulos a partir de los albaranes de cliente*/
/*No tendremos en cuenta los albaranes que no tengan un almac<61>n origen, es decir que no se contabilizar<61>n*/
/*aquellos albaranes que se manden directamente al cliente sin pasar por almac<61>n*/
/*Ser<65>n salidas en el momento que el albar<61>n este enviado o servido, si esta pendiente estar<61> reservado*/
CREATE VIEW V_INV_SALIDAS_ALB(
ID_ALMACEN,
ID_ARTICULO,
CANTIDAD)
AS
SELECT ID_ALMACEN, ID_ARTICULO, SUM(CANTIDAD)
FROM V_ALB_CLI_DETALLES
WHERE (ID_ALMACEN IS NOT NULL)
AND (SITUACION in ('ENVIADO', 'SERVIDO'))
GROUP BY ID_ALMACEN, ID_ARTICULO;
/*Al igual que en las vistas de articulos de pedido de proveedor y cliente, es mucho m<>s r<>pido y mejor para este*/
/*caso una uni<6E>n y luego una agrupaci<63>n que un FULL OUTER JOIN*/
CREATE VIEW V_INV_SALIDAS_AUX(
ID_ALMACEN,
ID_ARTICULO,
CANTIDAD)
AS
SELECT ID_ALMACEN,
ID_ARTICULO,
CANTIDAD
FROM V_INV_SALIDAS_ALB
UNION
SELECT ID_ALMACEN,
ID_ARTICULO,
CANTIDAD
FROM V_INV_SALIDAS_MOV;
/*Todos los articulos pedidos a proveedor y que todav<61>a no he recibido, y que tienen un almac<61>n destino*/
CREATE VIEW V_INV_ENTRADAS_PENDIENTES(
ID_ALMACEN,
ID_ARTICULO,
CANTIDAD)
AS
SELECT ID_ALMACEN, ID_ARTICULO, SUM(CANTIDAD_PENDIENTE)
FROM V_PED_PROV_ARTICULOS
WHERE (ID_ALMACEN IS NOT NULL)
GROUP BY ID_ALMACEN, ID_ARTICULO;
/*Todas las salidas de almacen, bien por albar<61>n o por movimiento libre, a partir de la vista auxiliar anterior*/
CREATE VIEW V_INV_SALIDAS(
ID_ALMACEN,
ID_ARTICULO,
CANTIDAD)
AS
SELECT
ID_ALMACEN,
ID_ARTICULO,
SUM(CANTIDAD) as CANTIDAD
FROM V_INV_SALIDAS_AUX
GROUP BY ID_ALMACEN,
ID_ARTICULO;
/*Todas las entradas de articulos a partir de los albaranes de proveedor*/
/*No tendremos en cuenta los albaranes que no tengan un almac<61>n destino, es decir que no se contabilizar<61>n*/
/*aquellos albaranes que se manden directamente al cliente*/
CREATE VIEW V_INV_ENTRADAS_ALB(
ID_ALMACEN,
ID_ARTICULO,
CANTIDAD)
AS
SELECT ID_ALMACEN, ID_ARTICULO, SUM(CANTIDAD)
FROM V_ALB_PROV_DETALLES
WHERE (ID_ALMACEN IS NOT NULL)
GROUP BY ID_ALMACEN, ID_ARTICULO;
/*Todas las entradas de articulos a partir de los movimientos libres realizados por el usuario*/
CREATE VIEW V_INV_ENTRADAS_MOV(
ID_ALMACEN,
ID_ARTICULO,
CANTIDAD)
AS
SELECT ID_ALMACEN, ID_ARTICULO, SUM(CANTIDAD)
FROM MOVIMIENTOS
WHERE TIPO = 'E'
GROUP BY ID_ALMACEN, ID_ARTICULO;
/*Al igual que en las vistas de articulos de pedido de proveedor y cliente, es mucho m<>s r<>pido y mejor para este*/
/*caso una uni<6E>n y luego una agrupaci<63>n que un FULL OUTER JOIN*/
CREATE VIEW V_INV_ENTRADAS_AUX(
ID_ALMACEN,
ID_ARTICULO,
CANTIDAD)
AS
SELECT ID_ALMACEN,
ID_ARTICULO,
CANTIDAD
FROM V_INV_ENTRADAS_ALB
UNION
SELECT ID_ALMACEN,
ID_ARTICULO,
CANTIDAD
FROM V_INV_ENTRADAS_MOV;
/*Todas las entradas en almacen, bien por albar<61>n o por movimiento libre, a partir de la vista auxiliar anterior*/
CREATE VIEW V_INV_ENTRADAS(
ID_ALMACEN,
ID_ARTICULO,
CANTIDAD)
AS
SELECT
ID_ALMACEN,
ID_ARTICULO,
SUM(CANTIDAD) as CANTIDAD
FROM V_INV_ENTRADAS_AUX
GROUP BY ID_ALMACEN,
ID_ARTICULO;
/*Al igual que en las vistas de articulos de pedido de proveedor y cliente, es mucho m<>s r<>pido y mejor para este*/
/*caso una uni<6E>n y luego una agrupaci<63>n que un FULL OUTER JOIN*/
CREATE VIEW V_INV_STOCK_AUX(
ID_ALMACEN,
ID_ARTICULO,
CANTIDAD_ENTRADA,
CANTIDAD_SALIDA)
AS
SELECT ID_ALMACEN,
ID_ARTICULO,
CANTIDAD as CANTIDAD_ENTRADA,
0 as CANTIDAD_SALIDA
FROM V_INV_ENTRADAS
UNION
SELECT ID_ALMACEN,
ID_ARTICULO,
0 as CANTIDAD_ENTRADA,
CANTIDAD as CANTIDAD_SALIDA
FROM V_INV_SALIDAS;
/* Stock actual por articulo y almac<61>n, calculado a partir de la vista auxiliar anterior*/
CREATE VIEW V_INV_STOCK(
ID_ALMACEN,
ID_ARTICULO,
CANTIDAD)
AS
SELECT
ID_ALMACEN,
ID_ARTICULO,
(SUM(CANTIDAD_ENTRADA) - SUM(CANTIDAD_SALIDA)) as CANTIDAD
FROM V_INV_STOCK_AUX
GROUP BY ID_ALMACEN,
ID_ARTICULO;
/*Tomamos la misma filosofia que en los casos anteriores ya que los tiempos se reducen, que es una barbaridad*/
CREATE VIEW V_INVENTARIO_AUX(
ID_ALMACEN,
ID_ARTICULO,
STOCK,
RESERVA,
PENDIENTE_RECEPCION)
AS
SELECT ID_ALMACEN, ID_ARTICULO, CANTIDAD as STOCK, 0 as PENDIENTES, 0 as RESERVADAS
FROM V_INV_STOCK
UNION
SELECT ID_ALMACEN, ID_ARTICULO, 0 as STOCK, CANTIDAD as PENDIENTES, 0 AS RESERVADAS
FROM V_INV_ENTRADAS_PENDIENTES
UNION
SELECT ID_ALMACEN, ID_ARTICULO, 0 as STOCK, 0 as PENDIENTES, CANTIDAD AS RESERVADAS
FROM V_INV_RESERVAS;
/*Vista de inventario final OPTIMIZADISIMAAAA*/
CREATE VIEW V_INVENTARIO(
ID_ALMACEN,
ID_EMPRESA,
NOMBRE,
ID_ARTICULO,
REFERENCIA,
FAMILIA,
DESCRIPCION,
REFERENCIA_PROV,
STOCK,
RESERVA,
PENDIENTE_RECEPCION)
AS
SELECT ID_ALMACEN,
ALMACENES.ID_EMPRESA,
ALMACENES.NOMBRE,
ID_ARTICULO,
ARTICULOS.REFERENCIA,
ARTICULOS.FAMILIA,
ARTICULOS.DESCRIPCION,
ARTICULOS.REFERENCIA_PROV,
SUM(STOCK) as STOCK,
SUM(RESERVA) as RESERVA,
SUM(PENDIENTE_RECEPCION) as PENDIENTE_RECEPCION
FROM V_INVENTARIO_AUX
LEFT JOIN ARTICULOS
ON (ARTICULOS.ID = V_INVENTARIO_AUX.ID_ARTICULO)
LEFT JOIN ALMACENES
ON (ALMACENES.ID = V_INVENTARIO_AUX.ID_ALMACEN)
WHERE (ID_ARTICULO <> 0)
AND (ARTICULOS.INVENTARIABLE = 1)
GROUP BY ID_ALMACEN,
ALMACENES.ID_EMPRESA,
ALMACENES.NOMBRE,
ID_ARTICULO,
ARTICULOS.REFERENCIA,
ARTICULOS.FAMILIA,
ARTICULOS.DESCRIPCION,
ARTICULOS.REFERENCIA_PROV;