--TRIGGER PARA CREAR LA REFERENCIA DE LA LIQUIDACION
PROMPT 'TG_AD74A90T00_01';
create or replace TRIGGER TG_AD74A90T00_01 
BEFORE INSERT ON AD74A90T00 REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW

DECLARE
    
    c_valor_fijo    VARCHAR2(3) := 'TLA';
    c_guion         VARCHAR2(1) := '_';
    v_cp_31         ad74a31t00.cp_31%TYPE;
    v_ref_recibo_90 ad74a90t00.referencia_recibo_90%TYPE;
    v_correlativo   VARCHAR2(2);

BEGIN
    --Primero busca el código postal del ayuntamiento
    BEGIN
        SELECT  cp_31
        INTO    v_cp_31
        FROM    ad74a31t00--Tabla de ayuntamientos
        WHERE   id_ayuntamiento_31 = :new.id_ayuntamiento_90;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
                        v_cp_31 := NULL;
    END;
    
    --Calcula el Máximo + 1 del correlativo del campo referencia_recibo_90
    --SELECT NVL(MAX(TO_NUMBER(DECODE(LENGTH(referencia_recibo_90), 17, MAX(TO_NUMBER(SUBSTR(referencia_recibo_90, LENGTH(referencia_recibo_90) - 1, 2)))))), 0) + 1
    SELECT NVL(MAX(TO_NUMBER(SUBSTR(referencia_recibo_90, LENGTH(referencia_recibo_90) - 1, 2))), 0) + 1
    INTO v_correlativo
    FROM ad74a90t00
    WHERE id_ayuntamiento_90 = :new.id_ayuntamiento_90
    AND   anyo_desde_90 = :new.anyo_desde_90;
    
    --Si la longitud del resultado del cálculo del correlativo es uno, se le añade un cero por la izquierda
    IF LENGTH(v_correlativo) = 1 THEN
        v_correlativo := '0' || v_correlativo;
    END IF;  
    
    /** Con todos los valores obtenidos compone el campo 'referencia_recibo_90' con el formato TLA_CP_ANYODESDE_NN
        TLA: Valor fijo para Teleasistencia
        CP:  Código postal de ese Ayuntamiento de la tabla AD74A31T00
        ANYODESDE: Año desde de la tabla AD74A90T00
        NN: Número correlativo por Ayuntamiento y año
    **/
    v_ref_recibo_90 := c_valor_fijo || c_guion || v_cp_31 || c_guion || :new.anyo_desde_90 || c_guion || v_correlativo;
    
    :new.referencia_recibo_90 := v_ref_recibo_90;
    
END;

/ 

COMMIT;