alter table "FACTURAS_CLIENTE" drop "FECHA_PAGADO";

ALTER TABLE RECIBOS_CLIENTE
ADD FECHA_EMISION DATE;



DROP VIEW V_AGENTES_COMISIONES_DET_FAC;
DROP VIEW V_FACTURAS_CLIENTE;
DROP VIEW V_FAC_CLI_SITUACION;
DROP VIEW V_REC_FAC_CLI_COBRADOS;
DROP VIEW V_RECIBOS_CLIENTE;

CREATE VIEW V_RECIBOS_CLIENTE(
    ID,
    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)
AS
SELECT RECIBOS_CLIENTE.ID, RECIBOS_CLIENTE.REFERENCIA,
       V_REC_CLI_SITUACION.SITUACION,
       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,
       RECIBOS_CLIENTE.IMPORTE + RECIBOS_CLIENTE.OTROS_GASTOS,

       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

FROM V_REC_CLI_SITUACION
LEFT JOIN RECIBOS_CLIENTE
ON (RECIBOS_CLIENTE.ID = V_REC_CLI_SITUACION.ID_RECIBO)
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);

CREATE VIEW V_REC_FAC_CLI_COBRADOS(
    ID_FACTURA,
    NUM_REC_COBRADOS)
AS
SELECT V_RECIBOS_CLIENTE.ID_FACTURA, COUNT(V_RECIBOS_CLIENTE.ID)
FROM V_RECIBOS_CLIENTE
WHERE (V_RECIBOS_CLIENTE.SITUACION = 'COBRADO')
GROUP BY V_RECIBOS_CLIENTE.ID_FACTURA;

CREATE VIEW V_FAC_CLI_SITUACION(
    ID_FACTURA,
    SITUACION)
AS
SELECT V_REC_FAC_CLI.ID_FACTURA,
CASE
    WHEN ((V_REC_FAC_CLI.NUM_RECIBOS = 0)
         OR (COALESCE (V_REC_FAC_CLI_COBRADOS.NUM_REC_COBRADOS,0) = 0)) THEN 'PENDIENTE'
    WHEN (V_REC_FAC_CLI.NUM_RECIBOS = COALESCE (V_REC_FAC_CLI_COBRADOS.NUM_REC_COBRADOS, 0)) THEN 'PAGADA'
    ELSE 'PARCIALMENTE PAGADA'
END
FROM V_REC_FAC_CLI
LEFT JOIN V_REC_FAC_CLI_COBRADOS
ON (V_REC_FAC_CLI_COBRADOS.ID_FACTURA = V_REC_FAC_CLI.ID_FACTURA);

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);
  
  
  
 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)); 


CREATE VIEW V_REMESAS_CLIENTE(
  ID,
  ID_EMPRESA,
  REFERENCIA,
  FECHA_REMESA,
  DESCRIPCION,
  ID_DATOS_BANCO,
  FECHA_ALTA,
  FECHA_MODIFICACION,
  USUARIO,
  NOMBRE,
  ENTIDAD,
  SUCURSAL,
  DC,
  CUENTA,
  SUFIJO_N19,
  SUFIJO_N58,
  IMPORTE_TOTAL
)
AS
SELECT
  REMESAS_CLIENTE.ID,
  REMESAS_CLIENTE.ID_EMPRESA,
  REMESAS_CLIENTE.REFERENCIA,
  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,
  SUM(RECIBOS_CLIENTE.IMPORTE + RECIBOS_CLIENTE.OTROS_GASTOS) 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)
GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16;





CREATE TABLE FACTURAS_PROVEEDOR (
    ID                     TIPO_ID NOT NULL,
    ID_EMPRESA             TIPO_ID,
    REFERENCIA             VARCHAR(255),
    REFERENCIA_PROVEEDOR   VARCHAR(255),    
    FECHA_FACTURA          DATE,
    VENCIMIENTO            INTEGER,
    SITUACION              VARCHAR(255),
    BASE_IMPONIBLE         TIPO_IMPORTE,
    DESCUENTO              TIPO_PORCENTAJE,
    IMPORTE_DESCUENTO      TIPO_IMPORTE,
    IVA                    TIPO_PORCENTAJE,
    IMPORTE_IVA            TIPO_IMPORTE,
    RE                     TIPO_PORCENTAJE,
    IMPORTE_RE             TIPO_IMPORTE,
    IMPORTE_TOTAL          TIPO_IMPORTE,
    OBSERVACIONES          TIPO_NOTAS,
    ID_PROVEEDOR           TIPO_ID,
    NIF_CIF                VARCHAR(15),
    NOMBRE                 VARCHAR(255),
    CALLE                  VARCHAR(255),
    POBLACION              VARCHAR(255),
    PROVINCIA              VARCHAR(255),
    CODIGO_POSTAL          VARCHAR(10),
    FECHA_ALTA             TIMESTAMP,
    FECHA_MODIFICACION     TIMESTAMP,
    USUARIO                TIPO_USUARIO,
    ID_FORMA_PAGO          TIPO_ID,
    IMPORTE_NETO           TIPO_IMPORTE,
    IMPORTE_PORTE          TIPO_IMPORTE,
    ID_TIPO_IVA            TIPO_ID,
    RECARGO_EQUIVALENCIA   TIPO_BOOLEANO
);
ALTER TABLE FACTURAS_PROVEEDOR ADD CONSTRAINT PK_FACTURAS_PROVEEDOR PRIMARY KEY (ID);
ALTER TABLE FACTURAS_PROVEEDOR ADD CONSTRAINT FK_FACTURAS_PROVEEDOR_EMPRESAS FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION;

/* Trigger: TRI_INSERT_FACTURAS_PROVEEDOR */
CREATE TRIGGER TRI_INSERT_FACTURAS_PROVEEDOR FOR FACTURAS_PROVEEDOR
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;

/* Trigger: TRI_UPDATE_FACTURAS_PROVEEDOR */
CREATE TRIGGER TRI_UPDATE_FACTURAS_PROVEEDOR FOR FACTURAS_PROVEEDOR
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;



CREATE TABLE FACTURAS_PROVEEDOR_DETALLES (
    ID                  TIPO_ID NOT NULL,
    ID_FACTURA          TIPO_ID NOT NULL,
    POSICION            INTEGER,
    TIPO_DETALLE        VARCHAR(10),
    ID_ARTICULO         TIPO_ID,
    CONCEPTO            TIPO_CONCEPTO,
    CANTIDAD            INTEGER,
    IMPORTE_UNIDAD      TIPO_IMPORTE,
    DESCUENTO           TIPO_PORCENTAJE,
    IMPORTE_PORTE       TIPO_IMPORTE,
    IMPORTE_TOTAL       TIPO_IMPORTE,
    VISIBLE             TIPO_BOOLEANO,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP
);
ALTER TABLE FACTURAS_PROVEEDOR_DETALLES ADD CONSTRAINT PK_FACTURAS_PROVEEDOR_DETALLES PRIMARY KEY (ID);
ALTER TABLE FACTURAS_PROVEEDOR_DETALLES ADD CONSTRAINT FK_FACTURAS_PRO_DET_ID_FACTURA FOREIGN KEY (ID_FACTURA) REFERENCES FACTURAS_PROVEEDOR (ID) ON DELETE CASCADE ON UPDATE CASCADE;

/* Trigger: TRI_INSERT_FACTURAS_PROVEEDOR_DET */
CREATE TRIGGER TRI_INSERT_FACTURAS_PROV_DET FOR FACTURAS_PROVEEDOR_DETALLES
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;

/* Trigger: TRI_UPDATE_FACTURAS_PROVEEDOR_DET */
CREATE TRIGGER TRI_UPDATE_FACTURAS_PROV_DET FOR FACTURAS_PROVEEDOR_DETALLES
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;


CREATE GENERATOR GEN_FACTURAS_PROVEEDOR_ID;
SET GENERATOR GEN_FACTURAS_PROVEEDOR_ID TO 1;

CREATE GENERATOR GEN_FACTURA_PROV_DETALLES_ID;
SET GENERATOR GEN_FACTURA_PROV_DETALLES_ID TO 1;

CREATE TABLE RECIBOS_PROVEEDOR (
    ID                  TIPO_ID NOT NULL,
    ID_FACTURA          TIPO_ID,
    REFERENCIA          VARCHAR(255),
    REFERENCIA_PROVEEDOR VARCHAR(255),
    FECHA_EMISION       DATE,
    FECHA_VENCIMIENTO   DATE,
    DESCRIPCION         VARCHAR(255),
    OBSERVACIONES       VARCHAR(255),
    IMPORTE             TIPO_IMPORTE,
    OTROS_GASTOS        TIPO_IMPORTE,
    FECHA_ALTA          DATE,
    FECHA_MODIFICACION  DATE,
    USUARIO             TIPO_USUARIO
);
ALTER TABLE RECIBOS_PROVEEDOR ADD CONSTRAINT PK_RECIBOS_PROVEEDOR PRIMARY KEY (ID);
ALTER TABLE RECIBOS_PROVEEDOR ADD CONSTRAINT FK_RECIBOS_PROVEEDOR FOREIGN KEY (ID_FACTURA) REFERENCES FACTURAS_PROVEEDOR (ID) ON DELETE CASCADE ON UPDATE CASCADE;

/* Trigger: TRI_INSERT_RECIBOS_PROVEEDOR */
CREATE TRIGGER TRI_INSERT_RECIBOS_PROVEEDOR FOR RECIBOS_PROVEEDOR
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;

/* Trigger: TRI_UPDATE_RECIBOS_PROVEEDOR */
CREATE TRIGGER TRI_UPDATE_RECIBOS_PROVEEDOR FOR RECIBOS_PROVEEDOR
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;

CREATE GENERATOR GEN_RECIBOS_PROVEEDOR_ID;
SET GENERATOR GEN_RECIBOS_PROVEEDOR_ID TO 1;

CREATE TABLE PAGOS_PROVEEDOR (
    ID                  TIPO_ID NOT NULL,
    ID_RECIBO           TIPO_ID,
    TIPO                VARCHAR(255),
    FECHA_PAGO          DATE,
    TITULAR             VARCHAR(255),
    ENTIDAD             VARCHAR(15),
    SUCURSAL            VARCHAR(15),
    DC                  VARCHAR(15),
    CUENTA              VARCHAR(15),
    FECHA_ALTA          DATE,
    FECHA_MODIFICACION  DATE,
    USUARIO             TIPO_USUARIO
);
ALTER TABLE PAGOS_PROVEEDOR ADD CONSTRAINT PK_PAGOS_PROVEEDOR PRIMARY KEY (ID);
ALTER TABLE PAGOS_PROVEEDOR ADD CONSTRAINT FK_PAGOS_PROVEEDOR FOREIGN KEY (ID_RECIBO) REFERENCES RECIBOS_PROVEEDOR (ID);

/* Trigger: TRI_INSERT_PAGOS_CLIENTE */
CREATE TRIGGER TRI_INSERT_PAGOS_PROVEEDOR FOR PAGOS_PROVEEDOR
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;

/* Trigger: TRI_UPDATE_PAGOS_CLIENTE */
CREATE TRIGGER TRI_UPDATE_PAGOS_PROVEEDOR FOR PAGOS_PROVEEDOR
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;

CREATE GENERATOR GEN_PAGOS_PROVEEDOR_ID;
SET GENERATOR GEN_PAGOS_PROVEEDOR_ID TO 1;


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_RECIBOS_PROVEEDOR(
    ID,
    REFERENCIA,
    REFERENCIA_PROVEEDOR,
    SITUACION,
    ID_FACTURA,
    FECHA_EMISION,
    FECHA_VENCIMIENTO,
    DESCRIPCION,
    OBSERVACIONES,
    IMPORTE,
    OTROS_GASTOS,
    IMPORTE_TOTAL,
    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.REFERENCIA, RECIBOS_PROVEEDOR.REFERENCIA_PROVEEDOR,
       V_REC_PRO_SITUACION.SITUACION,
       RECIBOS_PROVEEDOR.ID_FACTURA,
       RECIBOS_PROVEEDOR.FECHA_EMISION, RECIBOS_PROVEEDOR.FECHA_VENCIMIENTO, RECIBOS_PROVEEDOR.DESCRIPCION,
       RECIBOS_PROVEEDOR.OBSERVACIONES, RECIBOS_PROVEEDOR.IMPORTE, RECIBOS_PROVEEDOR.OTROS_GASTOS,
       RECIBOS_PROVEEDOR.IMPORTE + RECIBOS_PROVEEDOR.OTROS_GASTOS,

       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 V_REC_PRO_SITUACION
LEFT JOIN RECIBOS_PROVEEDOR
ON (RECIBOS_PROVEEDOR.ID = V_REC_PRO_SITUACION.ID_RECIBO)
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);


/*CREAR
REF_FACTURAS_PROVEEDOR*/



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_PRO_PAGADOS(
    ID_FACTURA,
    NUM_REC_PAGADOS)
AS
SELECT V_RECIBOS_PROVEEDOR.ID_FACTURA, COUNT(V_RECIBOS_PROVEEDOR.ID)
FROM V_RECIBOS_PROVEEDOR
WHERE (V_RECIBOS_PROVEEDOR.SITUACION = 'PAGADO')
GROUP BY V_RECIBOS_PROVEEDOR.ID_FACTURA;


CREATE VIEW V_FAC_PRO_SITUACION(
    ID_FACTURA,
    SITUACION)
AS
SELECT V_REC_FAC_PRO.ID_FACTURA,
CASE
    WHEN ((V_REC_FAC_PRO.NUM_RECIBOS = 0)
         OR (COALESCE (V_REC_FAC_PRO_PAGADOS.NUM_REC_PAGADOS,0) = 0)) THEN 'PENDIENTE'
    WHEN (V_REC_FAC_PRO.NUM_RECIBOS = COALESCE (V_REC_FAC_PRO_PAGADOS.NUM_REC_PAGADOS, 0)) THEN 'PAGADA'
    ELSE 'PARCIALMENTE PAGADA'
END
FROM V_REC_FAC_PRO
LEFT JOIN V_REC_FAC_PRO_PAGADOS
ON (V_REC_FAC_PRO_PAGADOS.ID_FACTURA = V_REC_FAC_PRO.ID_FACTURA);


CREATE VIEW V_FACTURAS_PROVEEDOR(
    ID,
    ID_EMPRESA,
    REFERENCIA,
    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)
AS
SELECT FACTURAS_PROVEEDOR.ID,
  FACTURAS_PROVEEDOR.ID_EMPRESA,
  FACTURAS_PROVEEDOR.REFERENCIA,
  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
  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);