Annotation: core.party_after_insert_trigger

CREATE OR REPLACE FUNCTION core.party_after_insert_trigger()
RETURNS trigger

Information: core.party_after_insert_trigger

Schema core
Function Name party_after_insert_trigger
Arguments
Owner postgres
Result Type trigger
Description

Implementation: core.party_after_insert_trigger

CREATE OR REPLACE FUNCTION core.party_after_insert_trigger()
 RETURNS trigger
 LANGUAGE plpgsql
AS $function$
    DECLARE _parent_account_id bigint;
    DECLARE _party_code text;
    DECLARE _account_id bigint;
BEGIN
    _party_code             := core.get_party_code(NEW.first_name, NEW.middle_name, NEW.last_name);
    _parent_account_id      := core.get_account_id_by_party_type_id(NEW.party_type_id);

    IF(COALESCE(NEW.party_name, '') = '') THEN
        NEW.party_name := REPLACE(TRIM(COALESCE(NEW.last_name, '') || ', ' || NEW.first_name || ' ' || COALESCE(NEW.middle_name, '')), ' ', '');
    END IF;

    --Create a new account
    IF(NEW.account_id IS NULL) THEN
        INSERT INTO core.accounts(account_master_id, account_number, currency_code, account_name, parent_account_id)
        SELECT core.get_account_master_id_by_account_id(_parent_account_id), _party_code, NEW.currency_code, _party_code || ' (' || NEW.party_name || ')', _parent_account_id
        RETURNING account_id INTO _account_id;
    
        UPDATE core.parties
        SET 
            account_id=_account_id, 
            party_code=_party_code
        WHERE core.parties.party_id=NEW.party_id;

        RETURN NEW;
    END IF;

    UPDATE core.parties
    SET 
        party_code=_party_code
    WHERE core.parties.party_id=NEW.party_id;

    RETURN NEW;
END
$function$