-- -----------------------------------------------------------------------------
-- ------------------------------- HIRUKO RIS ----------------------------------
-- -----------------------------------------------------------------------------
--
-- ** TITULO      : CREATE_TRIGGER log_person_data
-- ** AUTOR       : felipe.arango@imexhs.com
-- ** DATE        : 22/03/2019
-- ** OBJETIVO    : almacenar los datos siendo utilizada como log
-- ** DESCRIPCION :
--	  insertar informacion en la tabla [persona_data_log] luego de actualizar la tabla
--	  [persona_data]
--
-- -----------------------------------------------------------------------------


CREATE FUNCTION FN_TRIGGER_PERSONA_DATA() RETURNS TRIGGER
AS
$$
	DECLARE
		OBJETO_VIEJO VARCHAR[];
		OBJETO_NUEVO VARCHAR[];
	BEGIN
		IF OLD.document != NEW.document THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"document":"',OLD.document,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"document":"',NEW.document,'"}')::VARCHAR);
		END IF;

		IF OLD.first_name != NEW.first_name THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"first_name":"',OLD.first_name,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"first_name":"',NEW.first_name,'"}')::VARCHAR);
		END IF;

		IF OLD.second_name != NEW.second_name THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"second_name":"',OLD.second_name,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"second_name":"',NEW.second_name,'"}')::VARCHAR);
		END IF;

		IF OLD.first_last_name != NEW.first_last_name THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"first_last_name":"',OLD.first_last_name,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"first_last_name":"',NEW.first_last_name,'"}')::VARCHAR);
		END IF;

		IF OLD.second_last_name != NEW.second_last_name THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"valor":"',OLD.second_last_name,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"valor":"',NEW.second_last_name,'"}')::VARCHAR);
		END IF;

		IF OLD.date_birth != NEW.date_birth THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"date_birth":"',OLD.date_birth,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"date_birth":"',NEW.date_birth,'"}')::VARCHAR);
		END IF;

		IF OLD.age_year != NEW.age_year THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"age_year":"',OLD.age_year,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"age_year":"',NEW.age_year,'"}')::VARCHAR);
		END IF;

		IF OLD.age_month != NEW.age_month THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"age_month":"',OLD.age_month,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"age_month":"',NEW.age_month,'"}')::VARCHAR);
		END IF;

		IF OLD.telephone != NEW.telephone THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"telephone":"',OLD.telephone,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"telephone":"',NEW.telephone,'"}')::VARCHAR);
		END IF;

		IF OLD.email != NEW.email THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"email":"',OLD.email,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"email":"',NEW.email,'"}')::VARCHAR);
		END IF;

		IF OLD.cellphone != NEW.cellphone THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"cellphone":"',OLD.cellphone,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"cellphone":"',NEW.cellphone,'"}')::VARCHAR);
		END IF;

		IF OLD.address != NEW.address THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"addres":"',OLD.address,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"addres":"',NEW.address,'"}')::VARCHAR);
		END IF;

		IF OLD.current != NEW.current THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"current":"',OLD.current,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"current":"',NEW.current,'"}')::VARCHAR);
		END IF;

		IF OLD.sex != NEW.sex THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"sex":"',OLD.sex,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"sex":"',NEW.sex,'"}')::VARCHAR);
		END IF;

		IF OLD.blood_type != NEW.blood_type THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"blood_type":"',OLD.blood_type,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"blood_type":"',NEW.blood_type,'"}')::VARCHAR);
		END IF;

		IF OLD.residential_zone != NEW.residential_zone THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"residential_zone":"',OLD.residential_zone,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"residential_zone":"',NEW.residential_zone,'"}')::VARCHAR);
		END IF;

		IF OLD.age_type != NEW.age_type THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"age_type":"',OLD.age_type,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"age_type":"',NEW.age_type,'"}')::VARCHAR);
		END IF;

		IF OLD.id_document_type != NEW.id_document_type THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"id_document_type":"',OLD.id_document_type,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"id_document_type":"',NEW.id_document_type,'"}')::VARCHAR);
		END IF;

		IF OLD.historia_clinica != NEW.historia_clinica THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"historia_clinica":"',OLD.historia_clinica,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"historia_clinica":"',NEW.historia_clinica,'"}')::VARCHAR);
		END IF;

		IF OLD.full_name != NEW.full_name THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"full_name":"',OLD.full_name,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"full_name":"',NEW.full_name,'"}')::VARCHAR);
		END IF;

		IF OLD.telephone_2 != NEW.telephone_2 THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"telephone_2":"',OLD.telephone_2,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"telephone_2":"',NEW.telephone_2,'"}')::VARCHAR);
		END IF;

		IF OLD.suburb != NEW.suburb THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"suburb":"',OLD.suburb,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"suburb":"',NEW.suburb,'"}')::VARCHAR);
		END IF;

		IF OLD.post_code != NEW.post_code THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"post_code":"',OLD.post_code,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"post_code":"',NEW.post_code,'"}')::VARCHAR);
		END IF;

		IF OLD.medicare_number != NEW.medicare_number THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"medicare_number":"',OLD.medicare_number,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"medicare_number":"',NEW.medicare_number,'"}')::VARCHAR);
		END IF;

		IF OLD.id_user_sonata != NEW.id_user_sonata THEN
			OBJETO_VIEJO := array_append(OBJETO_VIEJO, CONCAT('{"id_user_sonata":"',OLD.id_user_sonata,'"}')::VARCHAR);
			OBJETO_NUEVO := array_append(OBJETO_NUEVO, CONCAT('{"id_user_sonata":"',NEW.id_user_sonata,'"}')::VARCHAR);
		END IF;


		INSERT INTO "public"."log_person_data"(id_person_data,id_usuario, valor_anterior, valor_actual, activo)
		VALUES (old.id_person,old.id_user_sonata, concat('[',array_to_string(OBJETO_VIEJO,','),']')::jsonb, concat('[',array_to_string(OBJETO_NUEVO,','),']')::jsonb,true);
		RETURN NEW;
	END
$$
LANGUAGE plpgsql;

CREATE TRIGGER TR_PERSON_DATA_UPDATE_BEFORE BEFORE UPDATE ON person_data
FOR EACH ROW EXECUTE PROCEDURE FN_TRIGGER_PERSONA_DATA();
