DROP VIEW V_INF_VENTAS_ARTICULOS; DROP VIEW V_INF_ULTVEN_PORCLIENTE; DROP VIEW V_INF_ULTVEN_PORARTICULO; DROP VIEW V_INF_FEC_ULTVEN_PORCLIENTE; DROP VIEW V_INF_FEC_ULTVEN_PORARTICULO; DROP VIEW V_INF_ULTCOM_PORARTICULO; DROP VIEW V_INF_ULTCOM; DROP VIEW V_INF_FEC_ULTCOM; DROP VIEW V_INV_DETALLE_RESERVAS; DROP VIEW V_ARTICULOS; /* VISTAS RELATIVAS A PEDIDOS Y ALBARANES */ DROP VIEW V_HISTORICO_MOVIMIENTOS; DROP VIEW V_HIS_MOV_AUX; DROP VIEW V_HIS_MOV_ALB_CLI; DROP VIEW V_HIS_MOV_ALB_PROV; DROP VIEW V_HIS_MOV_REGULARIZACIONES; 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_ART_SIN_ALBARAN; DROP VIEW V_PED_CLI_PROCESO; DROP VIEW V_PED_CLI_CON_ALBARANES; DROP VIEW V_PED_CLI_PENDIENTES_PROCESO; 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_PED_PROV_ART_SIN_ALBARAN; DROP VIEW V_PEDIDOS_PROVEEDOR; DROP VIEW V_PED_PROV_SITUACION; DROP VIEW V_PED_PROV_PROCESO; DROP VIEW V_PED_PROV_CON_ALBARANES; DROP VIEW V_PED_PROV_PENDIENTES_PROCESO; 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; /* VISTAS GENERALES */ DROP VIEW V_AGENTES_COMISIONES_DET_FAC; DROP VIEW V_FACTURAS_CLIENTE; DROP VIEW V_FACTURAS_PROVEEDOR; DROP VIEW V_FAC_CLI_SITUACION; DROP VIEW V_FAC_PRO_SITUACION; DROP VIEW V_REC_FAC_CLI_COBRADOS; DROP VIEW V_REC_FAC_PRO_PAGADOS; DROP VIEW V_RECIBOS_CLIENTE; DROP VIEW V_REMESAS_CLIENTE; DROP VIEW V_REC_CLI_COMPENSADOS; DROP VIEW V_RECIBOS_PROVEEDOR; DROP VIEW V_REMESAS_PROVEEDOR; DROP VIEW V_REC_PRO_COMPENSADOS; DROP VIEW V_REC_CLI_SITUACION; DROP VIEW V_REC_PRO_SITUACION; DROP VIEW V_REC_FAC_CLI; DROP VIEW V_REC_FAC_PRO; DROP VIEW V_AGENTES; DROP VIEW V_ALBARANES_PROVEEDOR; DROP VIEW V_PROVEEDORES; DROP VIEW V_CLIENTES; DROP VIEW V_CONTACTOS; CREATE VIEW V_CONTACTOS( ID, ID_CATEGORIA, NIF_CIF, NOMBRE, CALLE, POBLACION, PROVINCIA, CODIGO_POSTAL, TELEFONO_1, TELEFONO_2, MOVIL_1, MOVIL_2, FAX, EMAIL_1, EMAIL_2, PAGINA_WEB, NOTAS, FECHA_ALTA, FECHA_MODIFICACION, USUARIO, ID_EMPRESA, REFERENCIA) AS SELECT CONTACTOS.ID, CONTACTOS_CATEGORIAS.ID_CATEGORIA, CONTACTOS.NIF_CIF, CONTACTOS.NOMBRE, CONTACTOS.CALLE, CONTACTOS.POBLACION, CONTACTOS.PROVINCIA, CONTACTOS.CODIGO_POSTAL, CONTACTOS.TELEFONO_1, CONTACTOS.TELEFONO_2, CONTACTOS.MOVIL_1, CONTACTOS.MOVIL_2, CONTACTOS.FAX, CONTACTOS.EMAIL_1, CONTACTOS.EMAIL_2, CONTACTOS.PAGINA_WEB, CONTACTOS.NOTAS, CONTACTOS.FECHA_ALTA, CONTACTOS.FECHA_MODIFICACION, CONTACTOS.USUARIO, EMPRESAS_CONTACTOS.ID_EMPRESA, CONTACTOS.REFERENCIA FROM CONTACTOS INNER JOIN CONTACTOS_CATEGORIAS ON (CONTACTOS_CATEGORIAS.ID_CONTACTO = CONTACTOS.ID) INNER JOIN EMPRESAS_CONTACTOS ON (EMPRESAS_CONTACTOS.ID_CONTACTO = CONTACTOS.ID); CREATE VIEW V_CLIENTES( ID, ID_CATEGORIA, NIF_CIF, NOMBRE, CALLE, POBLACION, PROVINCIA, CODIGO_POSTAL, TELEFONO_1, TELEFONO_2, MOVIL_1, MOVIL_2, FAX, EMAIL_1, EMAIL_2, PAGINA_WEB, NOTAS, FECHA_ALTA, FECHA_MODIFICACION, USUARIO, ID_EMPRESA, REFERENCIA, ID_AGENTE, GRUPO_CLIENTE, NOMBRE_COMERCIAL, BLOQUEADO, REGIMEN_IVA, MOTIVO_BLOQUEO, RECARGO_EQUIVALENCIA, ID_TIPO_IVA, ID_FORMA_PAGO, TIENDA_WEB, AGENTE, RAPEL, EMAIL_ADMINISTRACION, VENCIMIENTO_FACTURAS_1, VENCIMIENTO_FACTURAS_2, VENCIMIENTO_FACTURAS_3) AS SELECT V_CONTACTOS.ID, V_CONTACTOS.ID_CATEGORIA, V_CONTACTOS.NIF_CIF, V_CONTACTOS.NOMBRE, V_CONTACTOS.CALLE, V_CONTACTOS.POBLACION, V_CONTACTOS.PROVINCIA, V_CONTACTOS.CODIGO_POSTAL, V_CONTACTOS.TELEFONO_1, V_CONTACTOS.TELEFONO_2, V_CONTACTOS.MOVIL_1, V_CONTACTOS.MOVIL_2, V_CONTACTOS.FAX, V_CONTACTOS.EMAIL_1, V_CONTACTOS.EMAIL_2, V_CONTACTOS.PAGINA_WEB, V_CONTACTOS.NOTAS, V_CONTACTOS.FECHA_ALTA, V_CONTACTOS.FECHA_MODIFICACION, V_CONTACTOS.USUARIO, V_CONTACTOS.ID_EMPRESA, V_CONTACTOS.REFERENCIA, CLIENTES_DATOS.ID_AGENTE, CLIENTES_DATOS.GRUPO_CLIENTE, CLIENTES_DATOS.NOMBRE_COMERCIAL, CLIENTES_DATOS.BLOQUEADO, CLIENTES_DATOS.REGIMEN_IVA, CLIENTES_DATOS.MOTIVO_BLOQUEO, CLIENTES_DATOS.RECARGO_EQUIVALENCIA, CLIENTES_DATOS.ID_TIPO_IVA, CLIENTES_DATOS.ID_FORMA_PAGO, CLIENTES_DATOS.TIENDA_WEB, CONTACTOS.NOMBRE AS AGENTE, CLIENTES_DATOS.RAPEL, CLIENTES_DATOS.EMAIL_ADMINISTRACION, CLIENTES_DATOS.VENCIMIENTO_FACTURAS_1, CLIENTES_DATOS.VENCIMIENTO_FACTURAS_2, CLIENTES_DATOS.VENCIMIENTO_FACTURAS_3 FROM V_CONTACTOS LEFT OUTER JOIN CLIENTES_DATOS ON (V_CONTACTOS.ID = CLIENTES_DATOS.ID_CLIENTE) LEFT OUTER JOIN CONTACTOS ON (CLIENTES_DATOS.ID_AGENTE = CONTACTOS.ID) WHERE V_CONTACTOS.ID_CATEGORIA = 1; CREATE VIEW V_PROVEEDORES( ID, ID_CATEGORIA, NIF_CIF, NOMBRE, CALLE, POBLACION, PROVINCIA, CODIGO_POSTAL, TELEFONO_1, TELEFONO_2, MOVIL_1, MOVIL_2, FAX, EMAIL_1, EMAIL_2, PAGINA_WEB, NOTAS, FECHA_ALTA, FECHA_MODIFICACION, USUARIO, ID_EMPRESA, REFERENCIA, DESCUENTO, REGIMEN_IVA, ID_TIPO_IVA, ID_FORMA_PAGO, TIENDA_WEB, EMAIL_ADMINISTRACION, VENCIMIENTO_FACTURAS_1, VENCIMIENTO_FACTURAS_2, VENCIMIENTO_FACTURAS_3) AS SELECT V_CONTACTOS.ID, V_CONTACTOS.ID_CATEGORIA, V_CONTACTOS.NIF_CIF, V_CONTACTOS.NOMBRE, V_CONTACTOS.CALLE, V_CONTACTOS.POBLACION, V_CONTACTOS.PROVINCIA, V_CONTACTOS.CODIGO_POSTAL, V_CONTACTOS.TELEFONO_1, V_CONTACTOS.TELEFONO_2, V_CONTACTOS.MOVIL_1, V_CONTACTOS.MOVIL_2, V_CONTACTOS.FAX, V_CONTACTOS.EMAIL_1, V_CONTACTOS.EMAIL_2, V_CONTACTOS.PAGINA_WEB, V_CONTACTOS.NOTAS, V_CONTACTOS.FECHA_ALTA, V_CONTACTOS.FECHA_MODIFICACION, V_CONTACTOS.USUARIO, V_CONTACTOS.ID_EMPRESA, V_CONTACTOS.REFERENCIA, PROVEEDORES_DATOS.DESCUENTO, PROVEEDORES_DATOS.REGIMEN_IVA, PROVEEDORES_DATOS.ID_TIPO_IVA, PROVEEDORES_DATOS.ID_FORMA_PAGO, PROVEEDORES_DATOS.TIENDA_WEB, PROVEEDORES_DATOS.EMAIL_ADMINISTRACION, PROVEEDORES_DATOS.VENCIMIENTO_FACTURAS_1, PROVEEDORES_DATOS.VENCIMIENTO_FACTURAS_2, PROVEEDORES_DATOS.VENCIMIENTO_FACTURAS_3 FROM PROVEEDORES_DATOS INNER JOIN V_CONTACTOS ON (PROVEEDORES_DATOS.ID_PROVEEDOR = V_CONTACTOS.ID) WHERE V_CONTACTOS.ID_CATEGORIA = 2; CREATE VIEW V_ALBARANES_PROVEEDOR( ID, ID_EMPRESA, ID_PROVEEDOR, NOMBRE, FECHA_ALBARAN, REFERENCIA, REFERENCIA_PROVEEDOR, TIPO, ID_ALBARAN_DEV, REFERENCIA_ALB_DEV, ID_FAC_ALB_DEV, REFERENCIA_FAC_ALB_DEV, ID_ALMACEN, NOMBRE_ALMACEN, ID_PEDIDO, REF_PED_PROVEEDOR, ID_FACTURA, REF_FACTURA, REF_FACTURA_PROV, 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, NUM_COPIAS) AS SELECT ALBARANES_PROVEEDOR.ID, ALBARANES_PROVEEDOR.ID_EMPRESA, ALBARANES_PROVEEDOR.ID_PROVEEDOR, CONTACTOS.NOMBRE, ALBARANES_PROVEEDOR.FECHA_ALBARAN, ALBARANES_PROVEEDOR.REFERENCIA, ALBARANES_PROVEEDOR.REFERENCIA_PROVEEDOR, ALBARANES_PROVEEDOR.TIPO, ALBARANES_PROVEEDOR.ID_ALBARAN_DEV, ALB_DEV.REFERENCIA, ALB_DEV.ID_FACTURA, FAC_PROV_ALB_DEV.REFERENCIA, ALBARANES_PROVEEDOR.ID_ALMACEN, ALMACENES.NOMBRE AS NOMBRE_ALMACEN, ALBARANES_PROVEEDOR.ID_PEDIDO, PEDIDOS_PROVEEDOR.REFERENCIA AS REF_PED_PROVEEDOR, ALBARANES_PROVEEDOR.ID_FACTURA, FACTURAS_PROVEEDOR.REFERENCIA AS REF_FACTURA, ALBARANES_PROVEEDOR.REF_FACTURA_PROV, ALBARANES_PROVEEDOR.CALLE, ALBARANES_PROVEEDOR.CODIGO_POSTAL, ALBARANES_PROVEEDOR.POBLACION, ALBARANES_PROVEEDOR.PROVINCIA, ALBARANES_PROVEEDOR.PERSONA_CONTACTO, ALBARANES_PROVEEDOR.TELEFONO, ALBARANES_PROVEEDOR.IMPORTE_NETO, ALBARANES_PROVEEDOR.IMPORTE_PORTE, ALBARANES_PROVEEDOR.DESCUENTO, ALBARANES_PROVEEDOR.IMPORTE_DESCUENTO, ALBARANES_PROVEEDOR.BASE_IMPONIBLE, ALBARANES_PROVEEDOR.IVA, ALBARANES_PROVEEDOR.IMPORTE_IVA, ALBARANES_PROVEEDOR.IMPORTE_TOTAL, ALBARANES_PROVEEDOR.OBSERVACIONES, ALBARANES_PROVEEDOR.INCIDENCIAS, ALBARANES_PROVEEDOR.INCIDENCIAS_ACTIVAS, ALBARANES_PROVEEDOR.FECHA_ALTA, ALBARANES_PROVEEDOR.FECHA_MODIFICACION, ALBARANES_PROVEEDOR.USUARIO, ALBARANES_PROVEEDOR.ID_FORMA_PAGO, IMPRESIONES.NUM_COPIAS FROM ALBARANES_PROVEEDOR INNER JOIN CONTACTOS ON (CONTACTOS.ID = ALBARANES_PROVEEDOR.ID_PROVEEDOR) LEFT OUTER JOIN ALBARANES_PROVEEDOR ALB_DEV ON (ALB_DEV.ID = ALBARANES_PROVEEDOR.ID_ALBARAN_DEV) LEFT OUTER JOIN FACTURAS_PROVEEDOR FAC_PROV_ALB_DEV ON (FAC_PROV_ALB_DEV.ID = ALB_DEV.ID_FACTURA) LEFT OUTER JOIN PEDIDOS_PROVEEDOR ON (PEDIDOS_PROVEEDOR.ID = ALBARANES_PROVEEDOR.ID_PEDIDO) LEFT OUTER JOIN FACTURAS_PROVEEDOR ON (FACTURAS_PROVEEDOR.ID = ALBARANES_PROVEEDOR.ID_FACTURA) LEFT OUTER JOIN ALMACENES ON (ALMACENES.ID = ALBARANES_PROVEEDOR.ID_ALMACEN) LEFT JOIN IMPRESIONES ON ((IMPRESIONES.ID_TABLA = ALBARANES_PROVEEDOR.ID) AND (IMPRESIONES.TABLA = 'ALBARANESPROVEEDOR')); CREATE VIEW V_AGENTES( ID, ID_CATEGORIA, NIF_CIF, NOMBRE, CALLE, POBLACION, PROVINCIA, CODIGO_POSTAL, TELEFONO_1, TELEFONO_2, MOVIL_1, MOVIL_2, FAX, EMAIL_1, EMAIL_2, PAGINA_WEB, NOTAS, FECHA_ALTA, FECHA_MODIFICACION, USUARIO, ID_EMPRESA, REFERENCIA) AS SELECT V_CONTACTOS.ID, V_CONTACTOS.ID_CATEGORIA, V_CONTACTOS.NIF_CIF, V_CONTACTOS.NOMBRE, V_CONTACTOS.CALLE, V_CONTACTOS.POBLACION, V_CONTACTOS.PROVINCIA, V_CONTACTOS.CODIGO_POSTAL, V_CONTACTOS.TELEFONO_1, V_CONTACTOS.TELEFONO_2, V_CONTACTOS.MOVIL_1, V_CONTACTOS.MOVIL_2, V_CONTACTOS.FAX, V_CONTACTOS.EMAIL_1, V_CONTACTOS.EMAIL_2, V_CONTACTOS.PAGINA_WEB, V_CONTACTOS.NOTAS, V_CONTACTOS.FECHA_ALTA, V_CONTACTOS.FECHA_MODIFICACION, V_CONTACTOS.USUARIO, V_CONTACTOS.ID_EMPRESA, V_CONTACTOS.REFERENCIA FROM V_CONTACTOS WHERE V_CONTACTOS.ID_CATEGORIA = 3; CREATE VIEW V_REC_FAC_PRO( ID_FACTURA, NUM_RECIBOS) AS SELECT FACTURAS_PROVEEDOR.ID, COUNT(RECIBOS_PROVEEDOR.ID) FROM FACTURAS_PROVEEDOR LEFT JOIN RECIBOS_PROVEEDOR ON (RECIBOS_PROVEEDOR.ID_FACTURA = FACTURAS_PROVEEDOR.ID) GROUP BY FACTURAS_PROVEEDOR.ID; CREATE VIEW V_REC_FAC_CLI( ID_FACTURA, NUM_RECIBOS) AS SELECT FACTURAS_CLIENTE.ID, COUNT(RECIBOS_CLIENTE.ID) FROM FACTURAS_CLIENTE LEFT JOIN RECIBOS_CLIENTE ON (RECIBOS_CLIENTE.ID_FACTURA = FACTURAS_CLIENTE.ID) GROUP BY FACTURAS_CLIENTE.ID; CREATE VIEW V_REC_PRO_SITUACION( ID_RECIBO, SITUACION) AS SELECT RECIBOS_PROVEEDOR.ID, CASE WHEN (COUNT(PAGOS_PROVEEDOR.ID_RECIBO)=0) THEN 'PENDIENTE' WHEN (MOD(COUNT(PAGOS_PROVEEDOR.ID_RECIBO), 2)=0) THEN 'DEVUELTO' ELSE 'PAGADO' END FROM RECIBOS_PROVEEDOR LEFT JOIN PAGOS_PROVEEDOR ON (PAGOS_PROVEEDOR.ID_RECIBO = RECIBOS_PROVEEDOR.ID) GROUP BY RECIBOS_PROVEEDOR.ID; CREATE VIEW V_REC_CLI_SITUACION( ID_RECIBO, SITUACION) AS SELECT RECIBOS_CLIENTE.ID, CASE WHEN (COUNT(PAGOS_CLIENTE.ID_RECIBO)=0) THEN 'PENDIENTE' WHEN (MOD(COUNT(PAGOS_CLIENTE.ID_RECIBO), 2)=0) THEN 'DEVUELTO' ELSE 'COBRADO' END FROM RECIBOS_CLIENTE LEFT JOIN PAGOS_CLIENTE ON (PAGOS_CLIENTE.ID_RECIBO = RECIBOS_CLIENTE.ID) GROUP BY RECIBOS_CLIENTE.ID; CREATE VIEW V_REC_PRO_COMPENSADOS ( ID_RECIBO, IMPORTE_TOTAL_COMPENSADO ) as select ID_RECIBO_COMPENSADO, SUM((IMPORTE + OTROS_GASTOS)) as IMPORTE_TOTAL from RECIBOS_PROVEEDOR where ID_RECIBO_COMPENSADO is not null group by ID_RECIBO_COMPENSADO; CREATE VIEW V_RECIBOS_PROVEEDOR( ID, ID_RECIBO_COMPENSADO, REFERENCIA_REC_COMPENSADO, REFERENCIA, REFERENCIA_PROVEEDOR, SITUACION, ID_FACTURA, ID_REMESA, REFERENCIA_REMESA, FECHA_EMISION, FECHA_VENCIMIENTO, DESCRIPCION, OBSERVACIONES, IMPORTE, OTROS_GASTOS, IMPORTE_TOTAL, REFERENCIA_FACTURA_PROV, FECHA_FACTURA, FORMA_PAGO_FACTURA, IMPORTE_FACTURA, ID_EMPRESA, ID_PROVEEDOR, NOMBRE_PROVEEDOR, NIF_CIF_PROVEEDOR, ENTIDAD_PROVEEDOR, SUCURSAL_PROVEEDOR, DC_PROVEEDOR, CUENTA_PROVEEDOR, FECHA_ALTA, FECHA_MODIFICACION, USUARIO) AS SELECT RECIBOS_PROVEEDOR.ID, RECIBOS_PROVEEDOR.ID_RECIBO_COMPENSADO, RECIBO_COMPENSADO1.REFERENCIA, RECIBOS_PROVEEDOR.REFERENCIA, RECIBOS_PROVEEDOR.REFERENCIA_PROVEEDOR, CASE WHEN RECIBOS_PROVEEDOR.ID_RECIBO_COMPENSADO IS NULL THEN V_REC_PRO_SITUACION.SITUACION ELSE RECIBO_COMPENSADO2.SITUACION END, RECIBOS_PROVEEDOR.ID_FACTURA, RECIBOS_PROVEEDOR.ID_REMESA, REMESAS_PROVEEDOR.REFERENCIA as REFERENCIA_REMESA, RECIBOS_PROVEEDOR.FECHA_EMISION, RECIBOS_PROVEEDOR.FECHA_VENCIMIENTO, RECIBOS_PROVEEDOR.DESCRIPCION, RECIBOS_PROVEEDOR.OBSERVACIONES, RECIBOS_PROVEEDOR.IMPORTE, RECIBOS_PROVEEDOR.OTROS_GASTOS, COALESCE(RECIBOS_PROVEEDOR.IMPORTE, 0) + COALESCE(RECIBOS_PROVEEDOR.OTROS_GASTOS, 0) + COALESCE(V_REC_PRO_COMPENSADOS.IMPORTE_TOTAL_COMPENSADO, 0), FACTURAS_PROVEEDOR.REFERENCIA_PROVEEDOR, FACTURAS_PROVEEDOR.FECHA_FACTURA, FORMAS_PAGO.DESCRIPCION, FACTURAS_PROVEEDOR.IMPORTE_TOTAL, FACTURAS_PROVEEDOR.ID_EMPRESA, CONTACTOS.ID as ID_PROVEEDOR, CONTACTOS.NOMBRE, CONTACTOS.NIF_CIF, CONTACTOS_DATOS_BANCO.ENTIDAD, CONTACTOS_DATOS_BANCO.SUCURSAL, CONTACTOS_DATOS_BANCO.DC, CONTACTOS_DATOS_BANCO.CUENTA, RECIBOS_PROVEEDOR.FECHA_ALTA, RECIBOS_PROVEEDOR.FECHA_MODIFICACION, RECIBOS_PROVEEDOR.USUARIO FROM RECIBOS_PROVEEDOR LEFT JOIN V_REC_PRO_SITUACION ON (V_REC_PRO_SITUACION.ID_RECIBO = RECIBOS_PROVEEDOR.ID) LEFT JOIN FACTURAS_PROVEEDOR ON (FACTURAS_PROVEEDOR.ID = RECIBOS_PROVEEDOR.ID_FACTURA) LEFT JOIN FORMAS_PAGO ON (FORMAS_PAGO.ID = FACTURAS_PROVEEDOR.ID_FORMA_PAGO) LEFT JOIN CONTACTOS ON (CONTACTOS.ID = FACTURAS_PROVEEDOR.ID_PROVEEDOR) LEFT JOIN CONTACTOS_DATOS_BANCO ON (CONTACTOS_DATOS_BANCO.ID_CONTACTO = CONTACTOS.ID) LEFT JOIN REMESAS_PROVEEDOR ON (REMESAS_PROVEEDOR.ID = RECIBOS_PROVEEDOR.ID_REMESA) LEFT JOIN V_REC_PRO_COMPENSADOS ON (V_REC_PRO_COMPENSADOS.ID_RECIBO = RECIBOS_PROVEEDOR.ID) LEFT JOIN RECIBOS_PROVEEDOR RECIBO_COMPENSADO1 ON (RECIBO_COMPENSADO1.ID = RECIBOS_PROVEEDOR.ID_RECIBO_COMPENSADO) LEFT JOIN V_REC_PRO_SITUACION RECIBO_COMPENSADO2 ON (RECIBO_COMPENSADO2.ID_RECIBO = RECIBOS_PROVEEDOR.ID_RECIBO_COMPENSADO); CREATE VIEW V_REC_CLI_COMPENSADOS ( ID_RECIBO, IMPORTE_TOTAL_COMPENSADO ) as select ID_RECIBO_COMPENSADO, SUM((IMPORTE + OTROS_GASTOS)) as IMPORTE_TOTAL from RECIBOS_CLIENTE where ID_RECIBO_COMPENSADO is not null group by ID_RECIBO_COMPENSADO; CREATE VIEW V_RECIBOS_CLIENTE( ID, ID_RECIBO_COMPENSADO, REFERENCIA_REC_COMPENSADO, REFERENCIA, SITUACION, ID_FACTURA, ID_REMESA, REFERENCIA_REMESA, FECHA_EMISION, FECHA_VENCIMIENTO, DESCRIPCION, OBSERVACIONES, IMPORTE, OTROS_GASTOS, IMPORTE_TOTAL, FECHA_FACTURA, FORMA_PAGO_FACTURA, IMPORTE_FACTURA, ID_EMPRESA, ID_CLIENTE, NOMBRE_CLIENTE, NIF_CIF_CLIENTE, ENTIDAD_CLIENTE, SUCURSAL_CLIENTE, DC_CLIENTE, CUENTA_CLIENTE, FECHA_ALTA, FECHA_MODIFICACION, USUARIO, NUM_COPIAS) AS SELECT RECIBOS_CLIENTE.ID, RECIBOS_CLIENTE.ID_RECIBO_COMPENSADO, RECIBO_COMPENSADO1.REFERENCIA, RECIBOS_CLIENTE.REFERENCIA, CASE WHEN RECIBOS_CLIENTE.ID_RECIBO_COMPENSADO IS NULL THEN V_REC_CLI_SITUACION.SITUACION ELSE RECIBO_COMPENSADO2.SITUACION END, RECIBOS_CLIENTE.ID_FACTURA, RECIBOS_CLIENTE.ID_REMESA, REMESAS_CLIENTE.REFERENCIA as REFERENCIA_REMESA, RECIBOS_CLIENTE.FECHA_EMISION, RECIBOS_CLIENTE.FECHA_VENCIMIENTO, RECIBOS_CLIENTE.DESCRIPCION, RECIBOS_CLIENTE.OBSERVACIONES, RECIBOS_CLIENTE.IMPORTE, RECIBOS_CLIENTE.OTROS_GASTOS, COALESCE(RECIBOS_CLIENTE.IMPORTE, 0) + COALESCE(RECIBOS_CLIENTE.OTROS_GASTOS, 0) + COALESCE(V_REC_CLI_COMPENSADOS.IMPORTE_TOTAL_COMPENSADO, 0), FACTURAS_CLIENTE.FECHA_FACTURA, FORMAS_PAGO.DESCRIPCION, FACTURAS_CLIENTE.IMPORTE_TOTAL, FACTURAS_CLIENTE.ID_EMPRESA, CONTACTOS.ID as ID_CLIENTE, CONTACTOS.NOMBRE, CONTACTOS.NIF_CIF, CONTACTOS_DATOS_BANCO.ENTIDAD, CONTACTOS_DATOS_BANCO.SUCURSAL, CONTACTOS_DATOS_BANCO.DC, CONTACTOS_DATOS_BANCO.CUENTA, RECIBOS_CLIENTE.FECHA_ALTA, RECIBOS_CLIENTE.FECHA_MODIFICACION, RECIBOS_CLIENTE.USUARIO, IMPRESIONES.NUM_COPIAS FROM RECIBOS_CLIENTE LEFT JOIN V_REC_CLI_SITUACION ON (V_REC_CLI_SITUACION.ID_RECIBO = RECIBOS_CLIENTE.ID) LEFT JOIN FACTURAS_CLIENTE ON (FACTURAS_CLIENTE.ID = RECIBOS_CLIENTE.ID_FACTURA) LEFT JOIN FORMAS_PAGO ON (FORMAS_PAGO.ID = FACTURAS_CLIENTE.ID_FORMA_PAGO) LEFT JOIN CONTACTOS ON (CONTACTOS.ID = FACTURAS_CLIENTE.ID_CLIENTE) LEFT JOIN CONTACTOS_DATOS_BANCO ON (CONTACTOS_DATOS_BANCO.ID_CONTACTO = CONTACTOS.ID) LEFT JOIN REMESAS_CLIENTE ON (REMESAS_CLIENTE.ID = RECIBOS_CLIENTE.ID_REMESA) LEFT JOIN V_REC_CLI_COMPENSADOS ON (V_REC_CLI_COMPENSADOS.ID_RECIBO = RECIBOS_CLIENTE.ID) LEFT JOIN RECIBOS_CLIENTE RECIBO_COMPENSADO1 ON (RECIBO_COMPENSADO1.ID = RECIBOS_CLIENTE.ID_RECIBO_COMPENSADO) LEFT JOIN V_REC_CLI_SITUACION RECIBO_COMPENSADO2 ON (RECIBO_COMPENSADO2.ID_RECIBO = RECIBOS_CLIENTE.ID_RECIBO_COMPENSADO) LEFT JOIN IMPRESIONES ON ((IMPRESIONES.ID_TABLA = RECIBOS_CLIENTE.ID) AND (IMPRESIONES.TABLA = 'RECIBOSCLIENTE')); CREATE VIEW V_REMESAS_CLIENTE( ID, ID_EMPRESA, REFERENCIA, TIPO, FECHA_REMESA, DESCRIPCION, ID_DATOS_BANCO, FECHA_ALTA, FECHA_MODIFICACION, USUARIO, NOMBRE, ENTIDAD, SUCURSAL, DC, CUENTA, SUFIJO_N19, SUFIJO_N58, NUM_COPIAS, IMPORTE_TOTAL) AS SELECT REMESAS_CLIENTE.ID, REMESAS_CLIENTE.ID_EMPRESA, REMESAS_CLIENTE.REFERENCIA, REMESAS_CLIENTE.TIPO, REMESAS_CLIENTE.FECHA_REMESA, REMESAS_CLIENTE.DESCRIPCION, REMESAS_CLIENTE.ID_DATOS_BANCO, REMESAS_CLIENTE.FECHA_ALTA, REMESAS_CLIENTE.FECHA_MODIFICACION, REMESAS_CLIENTE.USUARIO, EMPRESAS_DATOS_BANCO.NOMBRE, EMPRESAS_DATOS_BANCO.ENTIDAD, EMPRESAS_DATOS_BANCO.SUCURSAL, EMPRESAS_DATOS_BANCO.DC, EMPRESAS_DATOS_BANCO.CUENTA, EMPRESAS_DATOS_BANCO.SUFIJO_N19, EMPRESAS_DATOS_BANCO.SUFIJO_N58, IMPRESIONES.NUM_COPIAS, SUM(COALESCE(RECIBOS_CLIENTE.IMPORTE,0) + COALESCE(RECIBOS_CLIENTE.OTROS_GASTOS,0) + COALESCE(V_REC_CLI_COMPENSADOS.IMPORTE_TOTAL_COMPENSADO,0)) as IMPORTE_TOTAL FROM REMESAS_CLIENTE LEFT OUTER JOIN EMPRESAS_DATOS_BANCO ON (EMPRESAS_DATOS_BANCO.ID = REMESAS_CLIENTE.ID_DATOS_BANCO) LEFT OUTER JOIN RECIBOS_CLIENTE ON (RECIBOS_CLIENTE.ID_REMESA = REMESAS_CLIENTE.ID) LEFT OUTER JOIN V_REC_CLI_COMPENSADOS ON (V_REC_CLI_COMPENSADOS.ID_RECIBO = RECIBOS_CLIENTE.ID) LEFT JOIN IMPRESIONES ON ((IMPRESIONES.ID_TABLA = REMESAS_CLIENTE.ID) AND (IMPRESIONES.TABLA = 'REMESASCLIENTE')) GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18; CREATE VIEW V_REC_FAC_PRO_PAGADOS( ID_FACTURA, NUM_REC_PAGADOS) AS SELECT RECIBOS_PROVEEDOR.ID_FACTURA, COUNT(V_REC_PRO_SITUACION.ID_RECIBO) FROM V_REC_PRO_SITUACION LEFT JOIN RECIBOS_PROVEEDOR ON (RECIBOS_PROVEEDOR.ID = V_REC_PRO_SITUACION.ID_RECIBO) WHERE (V_REC_PRO_SITUACION.SITUACION = 'PAGADO') GROUP BY RECIBOS_PROVEEDOR.ID_FACTURA ; CREATE VIEW V_REC_FAC_CLI_COBRADOS( ID_FACTURA, NUM_REC_COBRADOS) AS SELECT RECIBOS_CLIENTE.ID_FACTURA, COUNT(V_REC_CLI_SITUACION.ID_RECIBO) FROM V_REC_CLI_SITUACION LEFT JOIN RECIBOS_CLIENTE ON (RECIBOS_CLIENTE.ID = V_REC_CLI_SITUACION.ID_RECIBO) WHERE (V_REC_CLI_SITUACION.SITUACION = 'COBRADO') GROUP BY RECIBOS_CLIENTE.ID_FACTURA ; CREATE VIEW V_FAC_PRO_SITUACION( ID_FACTURA, SITUACION) AS SELECT ID_FACTURA, CASE WHEN ((SUM(NUM_RECIBOS) = 0) OR (SUM(NUM_REC_PAGADOS) = 0)) THEN 'PENDIENTE' WHEN (SUM(NUM_RECIBOS) = SUM(NUM_REC_PAGADOS)) THEN 'PAGADA' ELSE 'PARCIALMENTE PAGADA' END AS SITUACION FROM ( SELECT ID_FACTURA, NUM_RECIBOS, 0 AS NUM_REC_PAGADOS FROM V_REC_FAC_PRO UNION ALL SELECT ID_FACTURA, 0 AS NUM_RECIBOS, NUM_REC_PAGADOS FROM V_REC_FAC_PRO_PAGADOS ) GROUP BY ID_FACTURA; CREATE VIEW V_FAC_CLI_SITUACION( ID_FACTURA, SITUACION) AS SELECT ID_FACTURA, CASE WHEN ((SUM(NUM_RECIBOS) = 0) OR (SUM(NUM_REC_COBRADOS) = 0)) THEN 'PENDIENTE' WHEN (SUM(NUM_RECIBOS) = SUM(NUM_REC_COBRADOS)) THEN 'PAGADA' ELSE 'PARCIALMENTE PAGADA' END AS SITUACION FROM ( SELECT ID_FACTURA, NUM_RECIBOS, 0 AS NUM_REC_COBRADOS FROM V_REC_FAC_CLI UNION ALL SELECT ID_FACTURA, 0 AS NUM_RECIBOS, NUM_REC_COBRADOS FROM V_REC_FAC_CLI_COBRADOS ) GROUP BY ID_FACTURA; CREATE VIEW V_FACTURAS_PROVEEDOR( ID, ID_EMPRESA, REFERENCIA, TIPO, REFERENCIA_PROVEEDOR, FECHA_FACTURA, SITUACION, BASE_IMPONIBLE, DESCUENTO, IMPORTE_DESCUENTO, IVA, IMPORTE_IVA, RE, IMPORTE_RE, IMPORTE_TOTAL, OBSERVACIONES, ID_PROVEEDOR, 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, NUM_COPIAS) AS SELECT FACTURAS_PROVEEDOR.ID, FACTURAS_PROVEEDOR.ID_EMPRESA, FACTURAS_PROVEEDOR.REFERENCIA, CASE WHEN (FACTURAS_PROVEEDOR.IMPORTE_TOTAL < 0) THEN 'A' ELSE 'F' END AS TIPO, FACTURAS_PROVEEDOR.REFERENCIA_PROVEEDOR, FACTURAS_PROVEEDOR.FECHA_FACTURA, V_FAC_PRO_SITUACION.SITUACION, FACTURAS_PROVEEDOR.BASE_IMPONIBLE, FACTURAS_PROVEEDOR.DESCUENTO, FACTURAS_PROVEEDOR.IMPORTE_DESCUENTO, FACTURAS_PROVEEDOR.IVA, FACTURAS_PROVEEDOR.IMPORTE_IVA, FACTURAS_PROVEEDOR.RE, FACTURAS_PROVEEDOR.IMPORTE_RE, FACTURAS_PROVEEDOR.IMPORTE_TOTAL, FACTURAS_PROVEEDOR.OBSERVACIONES, FACTURAS_PROVEEDOR.ID_PROVEEDOR, FACTURAS_PROVEEDOR.NIF_CIF, FACTURAS_PROVEEDOR.NOMBRE, FACTURAS_PROVEEDOR.CALLE, FACTURAS_PROVEEDOR.POBLACION, FACTURAS_PROVEEDOR.PROVINCIA, FACTURAS_PROVEEDOR.CODIGO_POSTAL, FACTURAS_PROVEEDOR.FECHA_ALTA, FACTURAS_PROVEEDOR.FECHA_MODIFICACION, FACTURAS_PROVEEDOR.USUARIO, FACTURAS_PROVEEDOR.ID_FORMA_PAGO, FACTURAS_PROVEEDOR.RECARGO_EQUIVALENCIA, FACTURAS_PROVEEDOR.ID_TIPO_IVA, FACTURAS_PROVEEDOR.IMPORTE_NETO, FACTURAS_PROVEEDOR.IMPORTE_PORTE, IMPRESIONES.NUM_COPIAS FROM V_FAC_PRO_SITUACION LEFT JOIN FACTURAS_PROVEEDOR ON (FACTURAS_PROVEEDOR.ID = V_FAC_PRO_SITUACION.ID_FACTURA) LEFT JOIN PROVEEDORES_DATOS ON (PROVEEDORES_DATOS.ID_PROVEEDOR = FACTURAS_PROVEEDOR.ID_PROVEEDOR) LEFT JOIN IMPRESIONES ON ((IMPRESIONES.ID_TABLA = FACTURAS_PROVEEDOR.ID) AND (IMPRESIONES.TABLA = 'FACTURASPROVEEDOR')); CREATE VIEW V_FACTURAS_CLIENTE( ID, ID_EMPRESA, REFERENCIA, TIPO, 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, NUM_COPIAS, NUM_CORREOS) AS SELECT FACTURAS_CLIENTE.ID, FACTURAS_CLIENTE.ID_EMPRESA, FACTURAS_CLIENTE.REFERENCIA, CASE WHEN (FACTURAS_CLIENTE.IMPORTE_TOTAL < 0) THEN 'A' ELSE 'F' END AS TIPO, 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, IMPRESIONES.NUM_COPIAS, REGISTRO_CORREOS.NUM_CORREOS 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) LEFT JOIN IMPRESIONES ON ((IMPRESIONES.ID_TABLA = FACTURAS_CLIENTE.ID) AND (IMPRESIONES.TABLA = 'FACTURASCLIENTE')) LEFT JOIN REGISTRO_CORREOS ON ((REGISTRO_CORREOS.ID_TABLA = FACTURAS_CLIENTE.ID) AND (REGISTRO_CORREOS.TABLA = 'FACTURASCLIENTE')); CREATE VIEW V_AGENTES_COMISIONES_DET_FAC( ID_FACTURA, ID_EMPRESA, FECHA, REFERENCIA, SITUACION, ID_COMISION_LIQUIDADA, ID_CLIENTE, ID_AGENTE, ID_ARTICULO, ID_PROVEEDOR, IMPORTE_TOTAL, COMISION, IMPORTE_COMISION) AS SELECT V_FACTURAS_CLIENTE.ID, V_FACTURAS_CLIENTE.ID_EMPRESA, V_FACTURAS_CLIENTE.FECHA_FACTURA, V_FACTURAS_CLIENTE.REFERENCIA, V_FACTURAS_CLIENTE.SITUACION, V_FACTURAS_CLIENTE.ID_COMISION_LIQUIDADA, V_FACTURAS_CLIENTE.ID_CLIENTE, V_FACTURAS_CLIENTE.ID_AGENTE, FACTURAS_CLIENTE_DETALLES.ID_ARTICULO, ARTICULOS.ID_PROVEEDOR, FACTURAS_CLIENTE_DETALLES.IMPORTE_TOTAL, COALESCE(AGENTES_COMISIONES.COMISION, 0) as COMISION, (CASE COALESCE(AGENTES_COMISIONES.COMISION, 0) WHEN 0 THEN 0 ELSE ((FACTURAS_CLIENTE_DETALLES.IMPORTE_TOTAL * AGENTES_COMISIONES.COMISION)/100) END) as IMPORTE_COMISION FROM V_FACTURAS_CLIENTE LEFT JOIN FACTURAS_CLIENTE_DETALLES ON (FACTURAS_CLIENTE_DETALLES.ID_FACTURA = V_FACTURAS_CLIENTE.ID) LEFT JOIN ARTICULOS ON (ARTICULOS.ID = FACTURAS_CLIENTE_DETALLES.ID_ARTICULO) LEFT JOIN AGENTES_COMISIONES ON ((AGENTES_COMISIONES.ID_AGENTE = V_FACTURAS_CLIENTE.ID_AGENTE) AND (AGENTES_COMISIONES.ID_PROVEEDOR = ARTICULOS.ID_PROVEEDOR)) WHERE (FACTURAS_CLIENTE_DETALLES.TIPO_DETALLE = 'Concepto') AND (ARTICULOS.ID is not null) AND (ARTICULOS.COMISIONABLE = 1); /* 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, REFERENCIA_CLIENTE, TIPO, ID_ALBARAN_DEV, REFERENCIA_ALB_DEV, ID_FAC_ALB_DEV, REFERENCIA_FAC_ALB_DEV, 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_PREVISTA_ENVIO, FECHA_ENVIO, FECHA_RECEPCION, ID_AGENTE, AGENTE, NUM_COPIAS) AS SELECT ALBARANES_CLIENTE.ID, ALBARANES_CLIENTE.ID_EMPRESA, ALBARANES_CLIENTE.ID_CLIENTE, CLIENTES.NOMBRE, ALBARANES_CLIENTE.FECHA_ALBARAN, ALBARANES_CLIENTE.REFERENCIA, ALBARANES_CLIENTE.REFERENCIA_CLIENTE, ALBARANES_CLIENTE.TIPO, ALBARANES_CLIENTE.ID_ALBARAN_DEV, ALB_DEV.REFERENCIA, ALB_DEV.ID_FACTURA, FAC_CLI_ALB_DEV.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_PREVISTA_ENVIO, ALBARANES_CLIENTE.FECHA_ENVIO, ALBARANES_CLIENTE.FECHA_RECEPCION, CLIENTES_DATOS.ID_AGENTE, AGENTES.NOMBRE, IMPRESIONES.NUM_COPIAS FROM ALBARANES_CLIENTE INNER JOIN V_ALB_CLI_SITUACION ON (V_ALB_CLI_SITUACION.ID = ALBARANES_CLIENTE.ID) INNER JOIN CONTACTOS CLIENTES ON (CLIENTES.ID = ALBARANES_CLIENTE.ID_CLIENTE) LEFT OUTER JOIN ALBARANES_CLIENTE ALB_DEV ON (ALB_DEV.ID = ALBARANES_CLIENTE.ID_ALBARAN_DEV) LEFT OUTER JOIN FACTURAS_CLIENTE FAC_CLI_ALB_DEV ON (FAC_CLI_ALB_DEV.ID = ALB_DEV.ID_FACTURA) LEFT OUTER JOIN CLIENTES_DATOS ON (CLIENTES_DATOS.ID_CLIENTE = ALBARANES_CLIENTE.ID_CLIENTE) LEFT OUTER JOIN CONTACTOS AGENTES ON (AGENTES.ID = CLIENTES_DATOS.ID_AGENTE) 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 ALMACENES ON (ALMACENES.ID = ALBARANES_CLIENTE.ID_ALMACEN) LEFT JOIN IMPRESIONES ON ((IMPRESIONES.ID_TABLA = ALBARANES_CLIENTE.ID) AND (IMPRESIONES.TABLA = 'ALBARANESCLIENTE')) ; /*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_DETALLES.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 INNER JOIN ALBARANES_CLIENTE ON (ALBARANES_CLIENTE_DETALLES.ID_ALBARAN = ALBARANES_CLIENTE.ID) INNER 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 LEFT JOIN ARTICULOS ON (ALBARANES_CLIENTE_DETALLES.ID_ARTICULO = ARTICULOS.ID) WHERE (ALBARANES_CLIENTE_DETALLES.ID_ARTICULO is not null) AND (ARTICULOS.INVENTARIABLE = 1) */ group BY ALBARANES_CLIENTE_DETALLES.ID_ALBARAN, ALBARANES_CLIENTE_DETALLES.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 /*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 LEFT JOIN ARTICULOS ON (PEDIDOS_CLIENTE_DETALLES.ID_ARTICULO = ARTICULOS.ID) 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 ALL 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; /*Aqui tendremos todos los pedidos de cliente pendientes o en proceso*/ CREATE VIEW V_PED_CLI_PENDIENTES_PROCESO( ID_PEDIDO) AS SELECT distinct V_PED_CLI_ARTICULOS.id_pedido FROM V_PED_CLI_ARTICULOS WHERE (V_PED_CLI_ARTICULOS.CANTIDAD_PEDIDA > V_PED_CLI_ARTICULOS.CANTIDAD_SERVIDA) ; /*Aqui tendremos todos los pedidos de cliente que tienen algun albaran relacionado*/ CREATE VIEW V_PED_CLI_CON_ALBARANES( ID_PEDIDO) AS SELECT distinct ID_PEDIDO FROM (SELECT DISTINCT ALBARANES_CLIENTE_DETALLES.ID_PEDIDO, ALBARANES_CLIENTE_DETALLES.ID_ALBARAN FROM ALBARANES_CLIENTE_DETALLES) GROUP BY ID_PEDIDO having COUNT(ID_ALBARAN) > 0 ; /*Aqui tendremos todos los pedidos de cliente en proceso*/ CREATE VIEW V_PED_CLI_PROCESO( ID_PEDIDO) AS select v_ped_cli_pendientes_proceso.ID_PEDIDO from v_ped_cli_pendientes_proceso inner join v_ped_cli_con_albaranes on (v_ped_cli_con_albaranes.ID_PEDIDO = v_ped_cli_pendientes_proceso.ID_PEDIDO) ; CREATE VIEW V_PED_CLI_ART_SIN_ALBARAN( ID, ID_PEDIDO, ID_EMPRESA, REFERENCIA_PEDIDO, REFERENCIA_CLI_PEDIDO, FECHA_PEDIDO, FECHA_PREVISTA_PEDIDO, ID_CLIENTE, CALLE, CODIGO_POSTAL, POBLACION, PROVINCIA, PERSONA_CONTACTO, TELEFONO, IVA, ID_FORMA_PAGO, CLIENTE, ID_ARTICULO, FAMILIA, REFERENCIA, REFERENCIA_PROVEEDOR, DESCRIPCION, CANTIDAD_PEDIDA, CANTIDAD_RESERVADA, CANTIDAD_ENVIADA, CANTIDAD_SERVIDA, CANTIDAD_PENDIENTE, PRECIO_COSTE, DESCUENTO, PRECION_NETO) AS SELECT V_PED_CLI_ARTICULOS.ID_PEDIDO || 0 || V_PED_CLI_ARTICULOS.ID_ARTICULO as ID, /*Para tener un ID unico sobre el que poder consultar en la sentencia de selección del grid*/ V_PED_CLI_ARTICULOS.ID_PEDIDO, PEDIDOS_CLIENTE.ID_EMPRESA, PEDIDOS_CLIENTE.referencia, PEDIDOS_CLIENTE.referencia_cliente, PEDIDOS_CLIENTE.fecha_pedido, PEDIDOS_CLIENTE.fecha_prevista_envio, PEDIDOS_CLIENTE.id_cliente, PEDIDOS_CLIENTE.CALLE, PEDIDOS_CLIENTE.CODIGO_POSTAL, PEDIDOS_CLIENTE.POBLACION, PEDIDOS_CLIENTE.PROVINCIA, PEDIDOS_CLIENTE.PERSONA_CONTACTO, PEDIDOS_CLIENTE.TELEFONO, PEDIDOS_CLIENTE.IVA, PEDIDOS_CLIENTE.ID_FORMA_PAGO, CONTACTOS.nombre, V_PED_CLI_ARTICULOS.ID_ARTICULO, articulos.familia, articulos.referencia, articulos.referencia_prov, articulos.descripcion, V_PED_CLI_ARTICULOS.CANTIDAD_PEDIDA, V_PED_CLI_ARTICULOS.CANTIDAD_RESERVADA, V_PED_CLI_ARTICULOS.CANTIDAD_ENVIADA, V_PED_CLI_ARTICULOS.CANTIDAD_SERVIDA, V_PED_CLI_ARTICULOS.CANTIDAD_PENDIENTE, ARTICULOS.PRECIO_COSTE, CLIENTES_DTOS_PROVEEDORES.DESCUENTO, (ARTICULOS.PRECIO_COSTE * CLIENTES_DTOS_PROVEEDORES.DESCUENTO)/100 as PRECIO_NETO from V_PED_CLI_ARTICULOS left join PEDIDOS_CLIENTE on (PEDIDOS_CLIENTE.id = V_PED_CLI_ARTICULOS.id_pedido) left join CONTACTOS on (contactos.id = PEDIDOS_CLIENTE.id_cliente) left join articulos on (articulos.id = V_PED_CLI_ARTICULOS.ID_ARTICULO) LEFT OUTER JOIN CLIENTES_DTOS_PROVEEDORES ON ((CLIENTES_DTOS_PROVEEDORES.ID_PROVEEDOR = ARTICULOS.ID_PROVEEDOR) AND (CLIENTES_DTOS_PROVEEDORES.ID_CLIENTE = contactos.id)) where cantidad_pendiente > 0; /*Aqui tendremos la situacion de todos los pedidos, por lógica de grupos*/ CREATE VIEW V_PED_CLI_SITUACION( ID_PEDIDO, SITUACION) AS select id_pedido, case when sum(enpro) = 3 then 'EN PROCESO' when sum(enpro) = 2 then 'PENDIENTE' when sum(enpro) = 1 then 'SERVIDO' end from ( select id as id_pedido, 1 as ser, 1 as pend, 1 as enpro from pedidos_cliente union select id_pedido, 0 as ser, 1 as pend, 1 as enpro from v_ped_cli_pendientes_proceso union select id_pedido, 0 as ser, 0 as pend, 1 as enpro from v_ped_cli_proceso ) group by id_pedido ; /*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_DETALLES.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 INNER JOIN ALBARANES_PROVEEDOR ON (ALBARANES_PROVEEDOR_DETALLES.ID_ALBARAN = ALBARANES_PROVEEDOR.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 LEFT JOIN ARTICULOS ON (ALBARANES_PROVEEDOR_DETALLES.ID_ARTICULO = ARTICULOS.ID) WHERE (ALBARANES_PROVEEDOR_DETALLES.ID_ARTICULO is not null) AND (ARTICULOS.INVENTARIABLE = 1) */ GROUP BY ALBARANES_PROVEEDOR_DETALLES.ID_ALBARAN, ALBARANES_PROVEEDOR_DETALLES.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) /*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 LEFT JOIN ARTICULOS ON (PEDIDOS_PROVEEDOR_DETALLES.ID_ARTICULO = ARTICULOS.ID) 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 ALL 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_PENDIENTES_PROCESO( ID_PEDIDO) AS SELECT distinct V_PED_PROV_ARTICULOS.id_pedido FROM V_PED_PROV_ARTICULOS WHERE (V_PED_PROV_ARTICULOS.CANTIDAD_PEDIDA > V_PED_PROV_ARTICULOS.CANTIDAD_RECIBIDA) ; CREATE VIEW V_PED_PROV_CON_ALBARANES( ID_PEDIDO) AS SELECT distinct ID_PEDIDO FROM (SELECT DISTINCT ALBARANES_PROVEEDOR_DETALLES.ID_PEDIDO, ALBARANES_PROVEEDOR_DETALLES.ID_ALBARAN FROM ALBARANES_PROVEEDOR_DETALLES) GROUP BY ID_PEDIDO having COUNT(ID_ALBARAN) > 0; ; CREATE VIEW V_PED_PROV_PROCESO( ID_PEDIDO) AS select v_ped_prov_pendientes_proceso.ID_PEDIDO from v_ped_prov_pendientes_proceso inner join v_ped_prov_con_albaranes on (v_ped_prov_con_albaranes.ID_PEDIDO = v_ped_prov_pendientes_proceso.ID_PEDIDO) ; CREATE VIEW V_PED_PROV_ART_SIN_ALBARAN( ID, ID_PEDIDO, ID_EMPRESA, REFERENCIA_PEDIDO, FECHA_PEDIDO, FECHA_CONFIRMACION, ID_PROVEEDOR, CALLE, CODIGO_POSTAL, POBLACION, PROVINCIA, PERSONA_CONTACTO, TELEFONO, IVA, ID_FORMA_PAGO, PROVEEDOR, ID_ARTICULO, FAMILIA, REFERENCIA, REFERENCIA_PROVEEDOR, DESCRIPCION, CANTIDAD_PEDIDA, CANTIDAD_RECIBIDA, CANTIDAD_PENDIENTE, PRECIO_COSTE, DESCUENTO, PRECIO_NETO, PRECIO_PORTE) AS SELECT V_PED_PROV_ARTICULOS.ID_PEDIDO || 0 || V_PED_PROV_ARTICULOS.ID_ARTICULO as ID, /*Para tener un ID unico sobre el que poder consultar en la sentencia de selección del grid*/ V_PED_PROV_ARTICULOS.ID_PEDIDO, PEDIDOS_PROVEEDOR.ID_EMPRESA, PEDIDOS_PROVEEDOR.referencia, PEDIDOS_PROVEEDOR.fecha_pedido, PEDIDOS_PROVEEDOR.fecha_confirmacion, PEDIDOS_PROVEEDOR.id_proveedor, PEDIDOS_PROVEEDOR.CALLE, PEDIDOS_PROVEEDOR.CODIGO_POSTAL, PEDIDOS_PROVEEDOR.POBLACION, PEDIDOS_PROVEEDOR.PROVINCIA, PEDIDOS_PROVEEDOR.PERSONA_CONTACTO, PEDIDOS_PROVEEDOR.TELEFONO, PEDIDOS_PROVEEDOR.IVA, PEDIDOS_PROVEEDOR.ID_FORMA_PAGO, CONTACTOS.nombre, V_PED_PROV_ARTICULOS.ID_ARTICULO, articulos.familia, articulos.referencia, articulos.referencia_prov, articulos.descripcion, V_PED_PROV_ARTICULOS.CANTIDAD_PEDIDA, V_PED_PROV_ARTICULOS.CANTIDAD_RECIBIDA, V_PED_PROV_ARTICULOS.CANTIDAD_PENDIENTE, ARTICULOS.PRECIO_COSTE, ARTICULOS.DESCUENTO, ARTICULOS.PRECIO_NETO, ARTICULOS.PRECIO_PORTE from V_PED_PROV_ARTICULOS left join PEDIDOS_PROVEEDOR on (PEDIDOS_PROVEEDOR.id = V_PED_PROV_ARTICULOS.id_pedido) left join CONTACTOS on (contactos.id = PEDIDOS_PROVEEDOR.id_proveedor) left join articulos on (articulos.id = V_PED_PROV_ARTICULOS.ID_ARTICULO) where cantidad_pendiente > 0; CREATE VIEW V_PED_PROV_SITUACION( ID_PEDIDO, SITUACION) AS select id_pedido, case when sum(enpro) = 3 then 'PARCIAL' when sum(enpro) = 2 then 'PENDIENTE' when sum(enpro) = 1 then 'RECIBIDO' end as situacion from ( select id as id_pedido, 1 as ser, 1 as pend, 1 as enpro from pedidos_proveedor union select id_pedido, 0 as ser, 1 as pend, 1 as enpro from v_ped_prov_pendientes_proceso union select id_pedido, 0 as ser, 0 as pend, 1 as enpro from v_ped_prov_proceso ) group by id_pedido ; CREATE VIEW V_PEDIDOS_CLIENTE( ID, ID_EMPRESA, ID_CLIENTE, NOMBRE, REFERENCIA, REFERENCIA_CLIENTE, 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, REF_TIENDA_WEB, FECHA_PREVISTA_ENVIO, NUM_COPIAS) AS SELECT PEDIDOS_CLIENTE.ID, PEDIDOS_CLIENTE.ID_EMPRESA, PEDIDOS_CLIENTE.ID_CLIENTE, V_CLIENTES.NOMBRE, PEDIDOS_CLIENTE.REFERENCIA, PEDIDOS_CLIENTE.REFERENCIA_CLIENTE, 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, PEDIDOS_CLIENTE.REF_TIENDA_WEB, PEDIDOS_CLIENTE.FECHA_PREVISTA_ENVIO, IMPRESIONES.NUM_COPIAS FROM V_PED_CLI_SITUACION INNER JOIN PEDIDOS_CLIENTE ON (PEDIDOS_CLIENTE.ID = V_PED_CLI_SITUACION.ID_PEDIDO) INNER JOIN V_CLIENTES ON (PEDIDOS_CLIENTE.ID_CLIENTE = V_CLIENTES.ID) LEFT JOIN IMPRESIONES ON ((IMPRESIONES.ID_TABLA = PEDIDOS_CLIENTE.ID) AND (IMPRESIONES.TABLA = 'PEDIDOSCLIENTE')); 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, NUM_COPIAS) 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, IMPRESIONES.NUM_COPIAS FROM PEDIDOS_PROVEEDOR INNER JOIN V_PROVEEDORES ON (PEDIDOS_PROVEEDOR.ID_PROVEEDOR = V_PROVEEDORES.ID) INNER JOIN V_PED_PROV_SITUACION ON (V_PED_PROV_SITUACION.ID_PEDIDO = PEDIDOS_PROVEEDOR.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 JOIN IMPRESIONES ON ((IMPRESIONES.ID_TABLA = PEDIDOS_PROVEEDOR.ID) AND (IMPRESIONES.TABLA = 'PEDIDOSPROVEEDOR')); 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 ALL 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 PEDIDOS_PROVEEDOR.ID_ALMACEN, V_PED_PROV_ARTICULOS.ID_ARTICULO, SUM(V_PED_PROV_ARTICULOS.CANTIDAD_PENDIENTE) FROM V_PED_PROV_ARTICULOS LEFT JOIN PEDIDOS_PROVEEDOR ON (PEDIDOS_PROVEEDOR.ID = V_PED_PROV_ARTICULOS.ID_PEDIDO) WHERE (PEDIDOS_PROVEEDOR.ID_ALMACEN IS NOT NULL) GROUP BY PEDIDOS_PROVEEDOR.ID_ALMACEN, V_PED_PROV_ARTICULOS.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( TIPO, ID_ALMACEN, ID_ARTICULO, CANTIDAD) AS SELECT 'ALB', ID_ALMACEN, ID_ARTICULO, CANTIDAD FROM V_INV_ENTRADAS_ALB UNION ALL SELECT 'MOV', 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 ALL 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, PENDIENTE_RECEPCION, RESERVA) AS SELECT ID_ALMACEN, ID_ARTICULO, CANTIDAD as STOCK, 0 as PENDIENTES, 0 as RESERVADAS FROM V_INV_STOCK UNION ALL SELECT ID_ALMACEN, ID_ARTICULO, 0 as STOCK, CANTIDAD as PENDIENTES, 0 AS RESERVADAS FROM V_INV_ENTRADAS_PENDIENTES UNION ALL 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, PRECIO_NETO, STOCK, UNIDADES_ALMACEN, COSTE_UNIDADES, RESERVA, PENDIENTE_RECEPCION) AS SELECT ID_ALMACEN, ALMACENES.ID_EMPRESA, ALMACENES.NOMBRE, ID_ARTICULO, ARTICULOS.REFERENCIA, ARTICULOS.FAMILIA, ARTICULOS.DESCRIPCION, ARTICULOS.REFERENCIA_PROV, COALESCE(ARTICULOS.PRECIO_NETO,0) as PRECIO_NETO, (SUM(STOCK) - SUM(RESERVA)) as STOCK, SUM(STOCK) as UNIDADES_ALMACEN, /*Si las unidades son negativas no se tiene en cuenta el coste*/ CASE WHEN (SUM(STOCK) < 0) THEN 0 ELSE (COALESCE(ARTICULOS.PRECIO_NETO,0) * SUM(STOCK)) END as COSTE_UNIDADES, 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.ELIMINADO = 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, ARTICULOS.PRECIO_NETO; /************************************************************************/ /* HISTORICO MOVIMIENTOS ************************************************/ /************************************************************************/ /*Las siguientes vista nos presentará el historico de movimientos de todos los artículos*/ CREATE VIEW V_HIS_MOV_REGULARIZACIONES( FECHA, ID_ALMACEN, ID_ARTICULO, TIPO_MOVIMIENTO, CANTIDAD, CAUSA) AS SELECT FECHA_MOVIMIENTO, ID_ALMACEN, ID_ARTICULO, CASE WHEN TIPO = 'E' THEN 'Entrada' ELSE 'Salida' END, CASE WHEN TIPO = 'S' THEN (-1)* CANTIDAD ELSE CANTIDAD END, 'Regularización por - ' || CAUSA FROM MOVIMIENTOS; CREATE VIEW V_HIS_MOV_ALB_PROV( FECHA, ID_ALMACEN, ID_ARTICULO, TIPO_MOVIMIENTO, CANTIDAD, CAUSA) AS SELECT ALBARANES_PROVEEDOR.FECHA_ALBARAN, V_ALB_PROV_DETALLES.ID_ALMACEN, V_ALB_PROV_DETALLES.ID_ARTICULO, CASE WHEN V_ALB_PROV_DETALLES.CANTIDAD < 0 THEN 'Salida' ELSE 'Entrada' END, V_ALB_PROV_DETALLES.CANTIDAD, CASE WHEN ALBARANES_PROVEEDOR.IMPORTE_TOTAL < 0 THEN 'Orden de devolución ' || ALBARANES_PROVEEDOR.REFERENCIA ELSE 'Albarán de proveedor ' || ALBARANES_PROVEEDOR.REFERENCIA END FROM V_ALB_PROV_DETALLES LEFT JOIN ALBARANES_PROVEEDOR ON (V_ALB_PROV_DETALLES.ID_ALBARAN = ALBARANES_PROVEEDOR.ID) WHERE (V_ALB_PROV_DETALLES.ID_ALMACEN IS NOT NULL); CREATE VIEW V_HIS_MOV_ALB_CLI( FECHA, ID_ALMACEN, ID_ARTICULO, TIPO_MOVIMIENTO, CANTIDAD, CAUSA) AS SELECT ALBARANES_CLIENTE.FECHA_ALBARAN, V_ALB_CLI_DETALLES.ID_ALMACEN, V_ALB_CLI_DETALLES.ID_ARTICULO, CASE WHEN V_ALB_CLI_DETALLES.CANTIDAD < 0 THEN 'Entrada' ELSE 'Salida' END, (-1)*V_ALB_CLI_DETALLES.CANTIDAD, CASE WHEN ALBARANES_CLIENTE.IMPORTE_TOTAL < 0 THEN 'Orden de devolución de cliente ' || ALBARANES_CLIENTE.REFERENCIA ELSE 'Albarán de cliente ' || ALBARANES_CLIENTE.REFERENCIA END FROM V_ALB_CLI_DETALLES LEFT JOIN ALBARANES_CLIENTE ON (V_ALB_CLI_DETALLES.ID_ALBARAN = ALBARANES_CLIENTE.ID) WHERE (V_ALB_CLI_DETALLES.ID_ALMACEN IS NOT NULL) AND (V_ALB_CLI_DETALLES.SITUACION in ('ENVIADO', 'SERVIDO')); CREATE VIEW V_HIS_MOV_AUX( FECHA, ID_ALMACEN, ID_ARTICULO, TIPO_MOVIMIENTO, CANTIDAD, CAUSA) AS SELECT FECHA, ID_ALMACEN, ID_ARTICULO, TIPO_MOVIMIENTO, CANTIDAD, CAUSA FROM V_HIS_MOV_ALB_PROV UNION ALL SELECT FECHA, ID_ALMACEN, ID_ARTICULO, TIPO_MOVIMIENTO, CANTIDAD, CAUSA FROM V_HIS_MOV_ALB_CLI UNION ALL SELECT FECHA, ID_ALMACEN, ID_ARTICULO, TIPO_MOVIMIENTO, CANTIDAD, CAUSA FROM V_HIS_MOV_REGULARIZACIONES; CREATE VIEW V_HISTORICO_MOVIMIENTOS( FECHA, ID_ALMACEN, ID_EMPRESA, NOMBRE_ALMACEN, ID_ARTICULO, FAMILIA, REFERENCIA, REFERENCIA_PROV, DESCRIPCION, TIPO_MOVIMIENTO, CANTIDAD, CAUSA) AS SELECT V_HIS_MOV_AUX.FECHA, V_HIS_MOV_AUX.ID_ALMACEN, ALMACENES.ID_EMPRESA, ALMACENES.NOMBRE, V_HIS_MOV_AUX.ID_ARTICULO, ARTICULOS.FAMILIA, ARTICULOS.REFERENCIA, ARTICULOS.REFERENCIA_PROV, ARTICULOS.DESCRIPCION, V_HIS_MOV_AUX.TIPO_MOVIMIENTO, V_HIS_MOV_AUX.CANTIDAD, V_HIS_MOV_AUX.CAUSA FROM V_HIS_MOV_AUX LEFT JOIN ALMACENES ON (ALMACENES.ID = V_HIS_MOV_AUX.ID_ALMACEN) LEFT JOIN ARTICULOS ON (ARTICULOS.ID = V_HIS_MOV_AUX.ID_ARTICULO) WHERE (V_HIS_MOV_AUX.ID_ARTICULO <> 0) AND (ARTICULOS.INVENTARIABLE = 1); CREATE VIEW V_REMESAS_PROVEEDOR( ID, ID_EMPRESA, REFERENCIA, TIPO, FECHA_REMESA, DESCRIPCION, ID_DATOS_BANCO, FECHA_ALTA, FECHA_MODIFICACION, USUARIO, NOMBRE, ENTIDAD, SUCURSAL, DC, CUENTA, SUFIJO_N19, SUFIJO_N58, NUM_COPIAS, IMPORTE_TOTAL) AS SELECT REMESAS_PROVEEDOR.ID, REMESAS_PROVEEDOR.ID_EMPRESA, REMESAS_PROVEEDOR.REFERENCIA, REMESAS_PROVEEDOR.TIPO, REMESAS_PROVEEDOR.FECHA_REMESA, REMESAS_PROVEEDOR.DESCRIPCION, REMESAS_PROVEEDOR.ID_DATOS_BANCO, REMESAS_PROVEEDOR.FECHA_ALTA, REMESAS_PROVEEDOR.FECHA_MODIFICACION, REMESAS_PROVEEDOR.USUARIO, EMPRESAS_DATOS_BANCO.NOMBRE, EMPRESAS_DATOS_BANCO.ENTIDAD, EMPRESAS_DATOS_BANCO.SUCURSAL, EMPRESAS_DATOS_BANCO.DC, EMPRESAS_DATOS_BANCO.CUENTA, EMPRESAS_DATOS_BANCO.SUFIJO_N19, EMPRESAS_DATOS_BANCO.SUFIJO_N58, IMPRESIONES.NUM_COPIAS, SUM(COALESCE(RECIBOS_PROVEEDOR.IMPORTE,0) + COALESCE(RECIBOS_PROVEEDOR.OTROS_GASTOS,0) + COALESCE(V_REC_PRO_COMPENSADOS.IMPORTE_TOTAL_COMPENSADO,0)) as IMPORTE_TOTAL FROM REMESAS_PROVEEDOR LEFT OUTER JOIN EMPRESAS_DATOS_BANCO ON (EMPRESAS_DATOS_BANCO.ID = REMESAS_PROVEEDOR.ID_DATOS_BANCO) LEFT OUTER JOIN RECIBOS_PROVEEDOR ON (RECIBOS_PROVEEDOR.ID_REMESA = REMESAS_PROVEEDOR.ID) LEFT OUTER JOIN V_REC_PRO_COMPENSADOS ON (V_REC_PRO_COMPENSADOS.ID_RECIBO = RECIBOS_PROVEEDOR.ID) LEFT JOIN IMPRESIONES ON ((IMPRESIONES.ID_TABLA = REMESAS_PROVEEDOR.ID) AND (IMPRESIONES.TABLA = 'REMESASPROVEEDOR')) GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18; /*Vista para ver para quien estan reservados los articulos del inventario*/ CREATE VIEW V_INV_DETALLE_RESERVAS( ID_ALB, ID_EMPRESA, REFERENCIA_ALB, SITUACION_ALB, FECHA_PREVISTA_ENVIO_ALB, ID_ALMACEN_ALB, ALMACEN_ALB, ID_CLIENTE_ALB, CLIENTE_ALB, ID_ART, FAMILIA_ART, REFERENCIA_ART, REFERENCIA_PROV_ART, DESCRIPCION_ART, CANTIDAD_ART) AS SELECT ALBARANES_CLIENTE_DETALLES.ID_ALBARAN, ALBARANES_CLIENTE.ID_EMPRESA, ALBARANES_CLIENTE.REFERENCIA, V_ALB_CLI_SITUACION.SITUACION, ALBARANES_CLIENTE.FECHA_PREVISTA_ENVIO, ALBARANES_CLIENTE.ID_ALMACEN, ALMACENES.NOMBRE AS ALMACEN, ALBARANES_CLIENTE.ID_CLIENTE, CONTACTOS.NOMBRE AS CLIENTE, ARTICULOS.ID, ARTICULOS.FAMILIA, ARTICULOS.REFERENCIA, ARTICULOS.REFERENCIA_PROV, ARTICULOS.DESCRIPCION, 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 CONTACTOS ON (ALBARANES_CLIENTE.ID_CLIENTE = CONTACTOS.ID) LEFT JOIN ALMACENES ON (ALBARANES_CLIENTE.ID_ALMACEN = ALMACENES.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) /*Quitamos aquellos detalles que no tengan cabecera existente aquellos que no se correspondan con un almacén es decir albaranes libres que el albaran este pendiente (los articulos estan reservados en el almacen) aquellos que no se correspondan con artículos existentes en el catalogo y que no sean inventariables*/ WHERE (ALBARANES_CLIENTE.ID IS NOT NULL) AND (ALBARANES_CLIENTE.ID_ALMACEN IS NOT NULL) AND (V_ALB_CLI_SITUACION.SITUACION = 'PENDIENTE') AND (ARTICULOS.ID is not null) AND (ARTICULOS.ELIMINADO = 0) AND (ARTICULOS.INVENTARIABLE = 1) GROUP BY ALBARANES_CLIENTE_DETALLES.ID_ALBARAN, ALBARANES_CLIENTE.ID_EMPRESA, ALBARANES_CLIENTE.REFERENCIA, V_ALB_CLI_SITUACION.SITUACION, ALBARANES_CLIENTE.FECHA_PREVISTA_ENVIO, ALBARANES_CLIENTE.ID_ALMACEN, ALMACENES.NOMBRE, ALBARANES_CLIENTE.ID_CLIENTE, CONTACTOS.NOMBRE, ARTICULOS.ID, ARTICULOS.FAMILIA, ARTICULOS.REFERENCIA, ARTICULOS.REFERENCIA_PROV, ARTICULOS.DESCRIPCION; CREATE VIEW V_ARTICULOS( ID, ID_EMPRESA, REFERENCIA, DESCRIPCION, FAMILIA, IMAGEN, COMISIONABLE, FECHA_ALTA, FECHA_MODIFICACION, USUARIO, REFERENCIA_PROV, PRECIO_COSTE, PRECIO_PORTE, DESCUENTO, PRECIO_NETO, INVENTARIABLE, ID_PROVEEDOR, NOMBRE_PROVEEDOR, ELIMINADO, TIENDA_WEB) AS SELECT ARTICULOS.ID, ARTICULOS.ID_EMPRESA, ARTICULOS.REFERENCIA, ARTICULOS.DESCRIPCION, ARTICULOS.FAMILIA, ARTICULOS.IMAGEN, ARTICULOS.COMISIONABLE, ARTICULOS.FECHA_ALTA, ARTICULOS.FECHA_MODIFICACION, ARTICULOS.USUARIO, ARTICULOS.REFERENCIA_PROV, ARTICULOS.PRECIO_COSTE, ARTICULOS.PRECIO_PORTE, ARTICULOS.DESCUENTO, ARTICULOS.PRECIO_NETO, ARTICULOS.INVENTARIABLE, ARTICULOS.ID_PROVEEDOR, CONTACTOS.NOMBRE AS NOMBRE_PROVEEDOR, ARTICULOS.ELIMINADO, ARTICULOS.TIENDA_WEB FROM ARTICULOS LEFT OUTER JOIN CONTACTOS ON (CONTACTOS.ID = ARTICULOS.ID_PROVEEDOR) WHERE (ARTICULOS.ELIMINADO = 0); /* **********************************************************************/ /* INFORMES *************************************************************/ /* **********************************************************************/ CREATE VIEW V_INF_FEC_ULTCOM( ID_EMPRESA, ID_ARTICULO, FECHA) AS select facturas_proveedor.ID_EMPRESA, facturas_proveedor_detalles.ID_ARTICULO, max(facturas_proveedor.FECHA_FACTURA) from facturas_proveedor_detalles left join facturas_proveedor on (facturas_proveedor.id = facturas_proveedor_detalles.id_factura) WHERE (ID_ARTICULO IS NOT NULL) AND (ID_ARTICULO > 0) and (facturas_proveedor_detalles.cantidad > 0) group by facturas_proveedor.ID_EMPRESA, facturas_proveedor_detalles.ID_ARTICULO ; CREATE VIEW V_INF_ULTCOM( ID_EMPRESA, ID_ARTICULO, IMPORTE_UNIDAD_COMPRA, IMPORTE_NETO_COMPRA, IMPORTE_PORTE_COMPRA) AS select facturas_proveedor.id_empresa, facturas_proveedor_detalles.ID_ARTICULO, avg(facturas_proveedor_detalles.IMPORTE_UNIDAD) as IMPORTE_UNIDAD_COMPRA, avg(facturas_proveedor_detalles.IMPORTE_UNIDAD - (facturas_proveedor_detalles.IMPORTE_UNIDAD * (facturas_proveedor_detalles.DESCUENTO / 100))) AS IMPORTE_NETO_COMPRA, avg(facturas_proveedor_detalles.IMPORTE_PORTE) as IMPORTE_PORTE_COMPRA from facturas_proveedor_detalles left outer join facturas_proveedor on (facturas_proveedor.id = facturas_proveedor_detalles.id_factura) left outer join v_inf_fec_ultcom on (v_inf_fec_ultcom.id_empresa = facturas_proveedor.id_empresa) and (v_inf_fec_ultcom.id_articulo = facturas_proveedor_detalles.id_articulo) WHERE (facturas_proveedor_detalles.ID_ARTICULO IS NOT NULL) AND (facturas_proveedor_detalles.ID_ARTICULO > 0) /*Quitamos conceptos libres*/ and (facturas_proveedor_detalles.cantidad > 0) /*Quitamos los abonos*/ and (facturas_proveedor.FECHA_FACTURA = v_inf_fec_ultcom.fecha) /*nos quedamos con las ultimas compras*/ group by 1, 2 ; CREATE VIEW V_INF_ULTCOM_PORARTICULO( ID_EMPRESA, ID_ARTICULO, IMPORTE_UNIDAD_COMPRA, IMPORTE_NETO_COMPRA, IMPORTE_PORTE_COMPRA) AS select articulos.id_empresa, articulos.id, coalesce(v_inf_ultcom.importe_unidad_compra, articulos.precio_coste), coalesce(v_inf_ultcom.importe_neto_compra, articulos.precio_neto), coalesce(v_inf_ultcom.importe_porte_compra, articulos.precio_porte) from articulos left join v_inf_ultcom on ((v_inf_ultcom.id_empresa = articulos.id_empresa) and (v_inf_ultcom.id_articulo = articulos.id)) ; CREATE VIEW V_INF_FEC_ULTVEN_PORARTICULO( ID_EMPRESA, ID_ARTICULO, FECHA) AS select facturas_cliente.ID_EMPRESA, facturas_cliente_detalles.ID_ARTICULO, max(facturas_cliente.FECHA_FACTURA) from facturas_cliente_detalles left join facturas_cliente on (facturas_cliente.id = facturas_cliente_detalles.id_factura) WHERE (ID_ARTICULO IS NOT NULL) AND (ID_ARTICULO > 0) and (facturas_cliente_detalles.cantidad > 0) group by facturas_cliente.ID_EMPRESA, facturas_cliente_detalles.ID_ARTICULO ; CREATE VIEW V_INF_FEC_ULTVEN_PORCLIENTE( ID_EMPRESA, ID_CLIENTE, ID_ARTICULO, FECHA) AS select facturas_cliente.ID_EMPRESA, facturas_cliente.ID_CLIENTE, facturas_cliente_detalles.ID_ARTICULO, max(facturas_cliente.FECHA_FACTURA) from facturas_cliente_detalles left join facturas_cliente on (facturas_cliente.id = facturas_cliente_detalles.id_factura) WHERE (ID_ARTICULO IS NOT NULL) AND (ID_ARTICULO > 0) and (facturas_cliente_detalles.cantidad > 0) group by facturas_cliente.ID_EMPRESA, facturas_cliente.ID_CLIENTE, facturas_cliente_detalles.ID_ARTICULO ; CREATE VIEW V_INF_ULTVEN_PORARTICULO( ID_EMPRESA, ID_ARTICULO, IMPORTE_UNIDAD_VENTA, IMPORTE_NETO_VENTA, IMPORTE_PORTE_VENTA) AS select facturas_cliente.id_empresa, facturas_cliente_detalles.ID_ARTICULO, avg(facturas_cliente_detalles.IMPORTE_UNIDAD) as IMPORTE_UNIDAD_VENTA, avg(facturas_cliente_detalles.IMPORTE_UNIDAD - (facturas_cliente_detalles.IMPORTE_UNIDAD * (facturas_cliente_detalles.DESCUENTO / 100))) AS IMPORTE_NETO_VENTA, avg(facturas_cliente_detalles.IMPORTE_PORTE) as IMPORTE_PORTE_VENTA from facturas_cliente_detalles inner join facturas_cliente on (facturas_cliente.id = facturas_cliente_detalles.id_factura) inner join v_inf_fec_ultven_PORARTICULO on (v_inf_fec_ultven_PORARTICULO.id_empresa = facturas_cliente.id_empresa) and (v_inf_fec_ultven_PORARTICULO.id_articulo = facturas_cliente_detalles.id_articulo) WHERE (facturas_cliente_detalles.ID_ARTICULO IS NOT NULL) AND (facturas_cliente_detalles.ID_ARTICULO > 0) /*Quitamos conceptos libres*/ and (facturas_cliente_detalles.cantidad > 0) /*Quitamos los abonos*/ and (facturas_cliente.FECHA_FACTURA = v_inf_fec_ultven_PORARTICULO.fecha) /*nos quedamos con las ultimas compras*/ group by 1, 2 ; CREATE VIEW V_INF_ULTVEN_PORCLIENTE( ID_EMPRESA, ID_CLIENTE, ID_ARTICULO, IMPORTE_UNIDAD_VENTA, IMPORTE_NETO_VENTA, IMPORTE_PORTE_VENTA) AS select facturas_cliente.id_empresa, facturas_cliente.id_cliente, facturas_cliente_detalles.ID_ARTICULO, avg(facturas_cliente_detalles.IMPORTE_UNIDAD) as IMPORTE_UNIDAD_VENTA, avg(facturas_cliente_detalles.IMPORTE_UNIDAD - (facturas_cliente_detalles.IMPORTE_UNIDAD * (facturas_cliente_detalles.DESCUENTO / 100))) AS IMPORTE_NETO_VENTA, avg(facturas_cliente_detalles.IMPORTE_PORTE) as IMPORTE_PORTE_VENTA from facturas_cliente_detalles inner join facturas_cliente on (facturas_cliente.id = facturas_cliente_detalles.id_factura) inner join v_inf_fec_ultven_porcliente on (v_inf_fec_ultven_porcliente.id_empresa = facturas_cliente.id_empresa) and (v_inf_fec_ultven_porcliente.id_cliente = facturas_cliente.id_cliente) and (v_inf_fec_ultven_porcliente.id_articulo = facturas_cliente_detalles.id_articulo) WHERE (facturas_cliente_detalles.ID_ARTICULO IS NOT NULL) AND (facturas_cliente_detalles.ID_ARTICULO > 0) /*Quitamos conceptos libres*/ and (facturas_cliente_detalles.cantidad > 0) /*Quitamos los abonos*/ and (facturas_cliente.FECHA_FACTURA = v_inf_fec_ultven_porcliente.fecha) /*nos quedamos con las ultimas compras*/ group by 1, 2, 3 ; /* Al igual que en Varela tendremos esta vista para hacer todos los informes que queramos de ventas, ya que estará desglosado por artículo */ CREATE VIEW V_INF_VENTAS_ARTICULOS( ID_FACTURA, ID_EMPRESA, REFERENCIA_FACTURA, FECHA_FACTURA, IMPORTE_TOTAL_FACTURA, ID_COMISION_FACTURA, ID_ARTICULO, FAMILIA, REFERENCIA, REFERENCIA_PROV, DESCRIPCION, COMISIONABLE, INVENTARIABLE, IMPORTE_UNIDAD_COSTE, DESCUENTO_PROVEEDOR_COSTE, IMPORTE_NETO_COSTE, IMPORTE_PORTE_COSTE, CANTIDAD, IMPORTE_UNIDAD_VENTA, DESCUENTO_CLIENTE_VENTA, IMPORTE_NETO_VENTA, IMPORTE_PORTE_VENTA, IMPORTE_TOTAL_VENTA, NIF_CIF_PROVEEDOR, NOMBRE_PROVEEDOR, CALLE_PROVEEDOR, POBLACION_PROVEEDOR, PROVINCIA_PROVEEDOR, NIF_CIF_CLIENTE, NOMBRE_CLIENTE, NOMBRE_COMERCIAL_CLIENTE, CALLE_CLIENTE, POBLACION_CLIENTE, PROVINCIA_CLIENTE, NIF_CIF_AGENTE, NOMBRE_AGENTE, CALLE_AGENTE, POBLACION_AGENTE, PROVINCIA_AGENTE, COMISION_AGENTE, IMPORTE_COMISION_AGENTE) AS select FACTURAS_CLIENTE.ID, FACTURAS_CLIENTE.ID_EMPRESA, FACTURAS_CLIENTE.REFERENCIA, FACTURAS_CLIENTE.FECHA_FACTURA, FACTURAS_CLIENTE.IMPORTE_TOTAL, FACTURAS_CLIENTE.ID_COMISION_LIQUIDADA, FACTURAS_CLIENTE_DETALLES.ID_ARTICULO, ARTICULOS.FAMILIA, ARTICULOS.REFERENCIA, ARTICULOS.REFERENCIA_PROV, ARTICULOS.DESCRIPCION, ARTICULOS.COMISIONABLE, ARTICULOS.INVENTARIABLE, ARTICULOS.PRECIO_COSTE, ARTICULOS.DESCUENTO, ARTICULOS.PRECIO_NETO, ARTICULOS.PRECIO_PORTE, FACTURAS_CLIENTE_DETALLES.CANTIDAD, FACTURAS_CLIENTE_DETALLES.IMPORTE_UNIDAD as importe_unidad_venta, FACTURAS_CLIENTE_DETALLES.DESCUENTO, case when FACTURAS_CLIENTE_DETALLES.CANTIDAD < 0 then /*En caso de ser un abono el importe neto venta debe ser negativo para que los informes no salgan falseados*/ (-1)*(FACTURAS_CLIENTE_DETALLES.IMPORTE_UNIDAD - (FACTURAS_CLIENTE_DETALLES.IMPORTE_UNIDAD * (FACTURAS_CLIENTE_DETALLES.DESCUENTO/100))) else FACTURAS_CLIENTE_DETALLES.IMPORTE_UNIDAD - (FACTURAS_CLIENTE_DETALLES.IMPORTE_UNIDAD * (FACTURAS_CLIENTE_DETALLES.DESCUENTO/100)) end as importe_neto_venta, FACTURAS_CLIENTE_DETALLES.IMPORTE_PORTE as importe_porte_venta, FACTURAS_CLIENTE_DETALLES.IMPORTE_TOTAL, PROVEEDORES.NIF_CIF, PROVEEDORES.NOMBRE, PROVEEDORES.CALLE, PROVEEDORES.POBLACION, PROVEEDORES.PROVINCIA, CLIENTES.NIF_CIF, CLIENTES.NOMBRE, CLIENTES_DATOS.NOMBRE_COMERCIAL, CLIENTES.CALLE, CLIENTES.POBLACION, CLIENTES.PROVINCIA, AGENTES.NIF_CIF, AGENTES.NOMBRE, AGENTES.CALLE, AGENTES.POBLACION, AGENTES.PROVINCIA, COALESCE(AGENTES_COMISIONES.COMISION, 0) AS COMISION, (CASE COALESCE(AGENTES_COMISIONES.COMISION, 0) WHEN 0 THEN 0 ELSE ((FACTURAS_CLIENTE_DETALLES.IMPORTE_TOTAL * AGENTES_COMISIONES.COMISION)/100) END) as IMPORTE_COMISION from FACTURAS_CLIENTE_DETALLES left join ARTICULOS on (ARTICULOS.ID = FACTURAS_CLIENTE_DETALLES.ID_ARTICULO) left join CONTACTOS PROVEEDORES on (PROVEEDORES.ID = ARTICULOS.ID_PROVEEDOR) left join FACTURAS_CLIENTE on (FACTURAS_CLIENTE.ID = FACTURAS_CLIENTE_DETALLES.ID_FACTURA) left join CONTACTOS CLIENTES on (CLIENTES.ID = FACTURAS_CLIENTE.ID_CLIENTE) left join CLIENTES_DATOS on (CLIENTES_DATOS.ID_CLIENTE = CLIENTES.ID) left join CONTACTOS AGENTES on (AGENTES.ID = CLIENTES_DATOS.ID_AGENTE) left join AGENTES_COMISIONES on ((AGENTES_COMISIONES.ID_AGENTE = AGENTES.ID) and (AGENTES_COMISIONES.ID_PROVEEDOR = PROVEEDORES.ID)) where (FACTURAS_CLIENTE_DETALLES.ID_ARTICULO is not null) and (FACTURAS_CLIENTE_DETALLES.ID_ARTICULO > 0) /*Quitamos conceptos libres*/ /*and (FACTURAS_CLIENTE_DETALLES.cantidad > 0) Quitamos los abonos*/ and (ARTICULOS.INVENTARIABLE = 1);