git-svn-id: https://192.168.0.254/svn/Proyectos.LuisLeon_FactuGES/tags/1.0.9@15 c93665c3-c93d-084d-9b98-7d5f4a9c3376
1151 lines
35 KiB
Plaintext
1151 lines
35 KiB
Plaintext
/*
|
||
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ó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ículos de un mismo albarán (ya que en un albarán puede existir varias lineas con el mismo artículo).
|
||
Para cada artículo de albarán le ponemos el pedido con el que esta asociado, la situacion y el almacén de donde salió.
|
||
Se quitan todos los artículos que no tengamos en catálogo (ID_ARTICULO nulo, lineas de detalle libres) -> esta premisa la cambiamos para que
|
||
no se falsee la situación de los pedidos, asi pues todo articulo que no este en el catálogo lo pondremos con ID_ARTICULO 0.
|
||
Se quitan también aquellos que no seán inventariables -> esta premisa falsearía la situació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álogo con el fin de no falsear la situació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ículos de un mismo pedido (ya que en un pedido puede existir varias lineas con el mismo artículo).
|
||
Se quitan todos los artículos que no tengamos en catálogo (ID_ARTICULO nulo, lineas de detalle libres) -> esta premisa la cambiamos para que
|
||
no se falsee la situación de los pedidos, asi pues todo articulo que no este en el catálogo lo pondremos con ID_ARTICULO 0.
|
||
Se quitan también aquellos que no seán inventariables -> esta premisa nos falsearí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álogo con el fin de no falsear la situació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í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ó o va a salir ya que un mismo pedido podría tener varios albaranes con distintos almacenes de origen*/
|
||
/*Aquellos articulos que no tengan ID_PEDIDO es porque el albará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í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ía la consulta de la segunda disparando tiempos, por ello teniendo las*/
|
||
/*dos vistas ejecutadas hacemos una union obteniendo todos los artículos del pedido, tanto recibidos como pendientes,*/
|
||
/*luego haremos la agrupació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ículos del pedido de cliente*/
|
||
/*Despreciamos aquellas tuplas cuya cantidad pedida sea null, porque son articulos añadidos en el albarán que*/
|
||
/*no está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í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ículos servidos - num. artí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ículos de un mismo albarán (ya que en un albarán puede existir varias lineas con el mismo artículo).
|
||
Para cada artículo de albarán le ponemos el pedido con el que esta asociado y el almacén donde se recibio.
|
||
Se quitan todos los artículos que no tengamos en catálogo (ID_ARTICULO nulo, lineas de detalle libres)-> esta premisa la cambiamos para que
|
||
no se falsee la situación de los pedidos, asi pues todo articulo que no este en el catálogo lo pondremos con ID_ARTICULO 0.
|
||
Se quitan también aquellos que no seán inventariables -> esta premisa nos falsearía la situació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álogo con el fin de no falsear la situació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ículos de un mismo pedido (ya que en un pedido puede existir varias lineas con el mismo artículo).
|
||
Para cada artículo de pedido le ponemos el pedido con el que esta asociado y el almacén donde será recibido.
|
||
Se quitan todos los artículos que no tengamos en catálogo (ID_ARTICULO nulo, lineas de detalle libres)-> esta premisa la cambiamos para que
|
||
no se falsee la situación de los pedidos, asi pues todo articulo que no este en el catálogo lo pondremos con ID_ARTICULO 0.
|
||
Se quitan también aquellos que no seá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álogo con el fin de no falsear la situació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í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ó ya que un mismo pedido podría tener varios albaranes con distintos almacenes de destino*/
|
||
/*Aquellos articulos que no tengan ID_PEDIDO es porque el albará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ía la consulta de la segunda disparando tiempos, por ello teniendo las dos vistas ejecutadas hacemos una union*/
|
||
/*obteniendo todos los artículos del pedido, tanto recibidos como pendientes, luego haremos la agrupació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ículos del pedido de proveedor*/
|
||
/*Despreciamos aquellas tuplas cuya cantidad pedida sea null, porque son articulos añadidos en el albarán que*/
|
||
/*no está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én para algún albará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én origen, es decir que no se contabilizarán*/
|
||
/*aquellos albaranes que se manden directamente al cliente sin pasar por almacén*/
|
||
/*Serán salidas en el momento que el albarán este enviado o servido, si esta pendiente estará 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ón y luego una agrupació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ía no he recibido, y que tienen un almacé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á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én destino, es decir que no se contabilizará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ón y luego una agrupació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á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ón y luego una agrupació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é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;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
CREATE VIEW V_FACTURAS_CLIENTE(
|
||
ID,
|
||
ID_EMPRESA,
|
||
REFERENCIA,
|
||
ID_COMISION_LIQUIDADA,
|
||
FECHA_FACTURA,
|
||
SITUACION,
|
||
BASE_IMPONIBLE,
|
||
DESCUENTO,
|
||
IMPORTE_DESCUENTO,
|
||
IVA,
|
||
IMPORTE_IVA,
|
||
RE,
|
||
IMPORTE_RE,
|
||
IMPORTE_TOTAL,
|
||
OBSERVACIONES,
|
||
ID_CLIENTE,
|
||
NIF_CIF,
|
||
NOMBRE,
|
||
CALLE,
|
||
POBLACION,
|
||
PROVINCIA,
|
||
CODIGO_POSTAL,
|
||
FECHA_ALTA,
|
||
FECHA_MODIFICACION,
|
||
USUARIO,
|
||
ID_FORMA_PAGO,
|
||
RECARGO_EQUIVALENCIA,
|
||
ID_TIPO_IVA,
|
||
IMPORTE_NETO,
|
||
IMPORTE_PORTE,
|
||
ID_AGENTE,
|
||
REFERENCIA_COMISION)
|
||
AS
|
||
SELECT FACTURAS_CLIENTE.ID,
|
||
FACTURAS_CLIENTE.ID_EMPRESA,
|
||
FACTURAS_CLIENTE.REFERENCIA,
|
||
FACTURAS_CLIENTE.ID_COMISION_LIQUIDADA,
|
||
FACTURAS_CLIENTE.FECHA_FACTURA,
|
||
V_FAC_CLI_SITUACION.SITUACION,
|
||
FACTURAS_CLIENTE.BASE_IMPONIBLE,
|
||
FACTURAS_CLIENTE.DESCUENTO,
|
||
FACTURAS_CLIENTE.IMPORTE_DESCUENTO,
|
||
FACTURAS_CLIENTE.IVA,
|
||
FACTURAS_CLIENTE.IMPORTE_IVA,
|
||
FACTURAS_CLIENTE.RE,
|
||
FACTURAS_CLIENTE.IMPORTE_RE,
|
||
FACTURAS_CLIENTE.IMPORTE_TOTAL,
|
||
FACTURAS_CLIENTE.OBSERVACIONES,
|
||
FACTURAS_CLIENTE.ID_CLIENTE,
|
||
FACTURAS_CLIENTE.NIF_CIF,
|
||
FACTURAS_CLIENTE.NOMBRE,
|
||
FACTURAS_CLIENTE.CALLE,
|
||
FACTURAS_CLIENTE.POBLACION,
|
||
FACTURAS_CLIENTE.PROVINCIA,
|
||
FACTURAS_CLIENTE.CODIGO_POSTAL,
|
||
FACTURAS_CLIENTE.FECHA_ALTA,
|
||
FACTURAS_CLIENTE.FECHA_MODIFICACION,
|
||
FACTURAS_CLIENTE.USUARIO,
|
||
FACTURAS_CLIENTE.ID_FORMA_PAGO,
|
||
FACTURAS_CLIENTE.RECARGO_EQUIVALENCIA,
|
||
FACTURAS_CLIENTE.ID_TIPO_IVA,
|
||
FACTURAS_CLIENTE.IMPORTE_NETO,
|
||
FACTURAS_CLIENTE.IMPORTE_PORTE,
|
||
CLIENTES_DATOS.ID_AGENTE,
|
||
COMISIONES_LIQUIDADAS.REFERENCIA
|
||
FROM V_FAC_CLI_SITUACION
|
||
LEFT JOIN FACTURAS_CLIENTE
|
||
ON (FACTURAS_CLIENTE.ID = V_FAC_CLI_SITUACION.ID_FACTURA)
|
||
LEFT JOIN COMISIONES_LIQUIDADAS
|
||
ON (COMISIONES_LIQUIDADAS.ID = FACTURAS_CLIENTE.ID_COMISION_LIQUIDADA)
|
||
LEFT JOIN CLIENTES_DATOS
|
||
ON (CLIENTES_DATOS.ID_CLIENTE = FACTURAS_CLIENTE.ID_CLIENTE);A |