CREATE DOMAIN CLASEFACTURA AS
VARCHAR(1) CHARACTER SET ISO8859_1
COLLATE ISO8859_1;

CREATE DOMAIN REFERENCIAS AS
VARCHAR(8) CHARACTER SET ISO8859_1
COLLATE ISO8859_1;

CREATE TABLE FACTURASCLIENTE (
    CODIGO            CODIGOS NOT NULL,
    FECHAALTA         FECHAS NOT NULL,
    USUARIO           NOMBRES NOT NULL,
    CLASEFACTURA      CLASEFACTURA NOT NULL,
    REFERENCIA        REFERENCIAS,
    FECHAFACTURA      FECHAS NOT NULL,
    FECHAVENCIMIENTO  FECHAS,
    PAGADA            VARCHAR(1) NOT NULL,
    BASEIMPONIBLE     IMPORTES2,
    IVA               PORCENTAJES,
    IMPORTEIVA        IMPORTES2,
    IMPORTETOTAL      IMPORTES2,
    OBSERVACIONES     OBSERVACIONES,
    FORMAPAGO         OBSERVACIONES,
    CODIGOCONTACTO    CODIGOS,
    NIFCIF            NIFCIFS,
    NOMBRE            NOMBRES,
    CALLE             CALLES,
    PROVINCIA         PROVINCIAS,
    CODIGOPOSTAL      CODIGOSPOSTALES,
    POBLACION         POBLACIONES,
    CODIGOOBRA        CODIGOS,
    DESCUENTO         PORCENTAJES,
    IMPORTEDESCUENTO  IMPORTES2
);

ALTER TABLE FACTURASCLIENTE ADD CONSTRAINT PK_FACTURASCLIENTE PRIMARY KEY (CODIGO);
ALTER TABLE FACTURASCLIENTE ADD CONSTRAINT FK_FACTURASCLIENTE FOREIGN KEY (CODIGOCONTACTO) REFERENCES CONTACTOS (CODIGO);
ALTER TABLE FACTURASCLIENTE ADD CONSTRAINT FK_FACTURASCLIENTE2 FOREIGN KEY (CODIGOOBRA) REFERENCES OBRAS (CODIGO);



CREATE TABLE DETALLESFACTURASCLIENTE (
    CODIGOFACTURA  CODIGOS NOT NULL,
    NUMCONCEPTO    NUMCONCEPTOS NOT NULL,
    DESCRIPCION    DESCRIPCIONES,
    CANTIDAD       CANTIDADES,
    IMPORTEUNIDAD  IMPORTES2,
    IMPORTETOTAL   IMPORTES2,
    POSICION       SMALLINT NOT NULL,
    TIPO           CHAR(1)
);

ALTER TABLE DETALLESFACTURASCLIENTE ADD CONSTRAINT PK_DETALLESFACTURASCLIENTE PRIMARY KEY (CODIGOFACTURA, NUMCONCEPTO);
ALTER TABLE DETALLESFACTURASCLIENTE ADD CONSTRAINT FK_DETALLESFACTURASCLIENTE FOREIGN KEY (CODIGOFACTURA) REFERENCES FACTURASCLIENTE (CODIGO);



CREATE TABLE RECIBOSCLIENTE (
    CODIGO          CODIGOS NOT NULL,
    FECHAALTA       FECHAS NOT NULL,
    USUARIO         NOMBRES NOT NULL,
    FECHARECIBO     FECHAS NOT NULL,
    IMPORTE         IMPORTES2,
    TEXTO           OBSERVACIONES,
    CODIGOCONTACTO  CODIGOS,
    NIFCIF          NIFCIFS,
    NOMBRE          NOMBRES,
    CALLE           CALLES,
    PROVINCIA       PROVINCIAS,
    CODIGOPOSTAL    CODIGOSPOSTALES,
    POBLACION       POBLACIONES,
    CODIGOOBRA      CODIGOS
);
ALTER TABLE RECIBOSCLIENTE ADD CONSTRAINT PK_RECIBOSCLIENTE PRIMARY KEY (CODIGO);
ALTER TABLE RECIBOSCLIENTE ADD CONSTRAINT FK_RECIBOSCLIENTE FOREIGN KEY (CODIGOCONTACTO) REFERENCES CONTACTOS (CODIGO);
ALTER TABLE RECIBOSCLIENTE ADD CONSTRAINT FK_RECIBOSCLIENTE2 FOREIGN KEY (CODIGOOBRA) REFERENCES OBRAS (CODIGO);

CREATE GENERATOR GEN_FACTURASCLIENTE;
SET GENERATOR GEN_FACTURASCLIENTE TO 1;

CREATE GENERATOR GEN_RECIBOSCLIENTE;
SET GENERATOR GEN_RECIBOSCLIENTE TO 1;




/**PROCEDURES**/

DECLARE EXTERNAL FUNCTION LPAD
    CSTRING(255),
    INTEGER,
    CSTRING(1)
RETURNS CSTRING(255) FREE_IT
ENTRY_POINT 'IB_UDF_lpad' MODULE_NAME 'ib_udf'


DAR_REFERENCIA_FACTURACLIENTE

OUTPUT REFERENCIA VARCAHR 8
VARIABLES AUX INTEGER

BEGIN
    AUX = 0;
    SELECT COALESCE(MAX(CAST(SUBSTRING(REFERENCIA from 1 for 2) AS INTEGER)), 0)
    FROM FACTURASCLIENTE
    where (SUBSTRING(REFERENCIA from 4 for 4) = SUBSTRING(CURRENT_DATE FROM 1 FOR 4))
    and (CLASEFACTURA <> 'P')
    INTO AUX;
    AUX = AUX + 1;
    REFERENCIA = LPAD(CAST(AUX AS VARCHAR(2)), 2, '0') || '/' || SUBSTRING(CURRENT_DATE FROM 1 FOR 4);
    SUSPEND;
END


DAR_REFERENCIA_FACTURAPROFORMA

IDEM

BEGIN
    AUX = 0;
    SELECT COALESCE(MAX(CAST(SUBSTRING(REFERENCIA from 1 for 2) AS INTEGER)), 0)
    FROM FACTURASCLIENTE
    where (SUBSTRING(REFERENCIA from 4 for 4) = SUBSTRING(CURRENT_DATE FROM 1 FOR 4))
    and (CLASEFACTURA = 'P')
    INTO AUX;
    AUX = AUX + 1;
    REFERENCIA = LPAD(CAST(AUX AS VARCHAR(2)), 2, '0') || '/' || SUBSTRING(CURRENT_DATE FROM 1 FOR 4);
    SUSPEND;
END




