funcion para setear comentarios __agenda_04_add_comments_or_signature_to_student

CREATE OR REPLACE FUNCTION public.__agenda_04_add_comments_or_signature_to_student( __p_id_colaborator INTEGER, __p_id_sede INTEGER, __p_data JSONB) RETURNS jsonb LANGUAGE 'plpgsql' COST 100 VOLATILE AS $BODY$ DECLARE --CONSTANTES __ERROR_ANP CONSTANT CHARACTER VARYING DEFAULT 'Acción no permitida'; __ERROR_NEE CONSTANT CHARACTER VARYING DEFAULT 'No existen estudiantes en este curso'; __ERROR_EA CONSTANT CHARACTER VARYING DEFAULT 'Se ingreso un array vacio'; __MSJ_ERROR CONSTANT CHARACTER VARYING DEFAULT 'Hubo un error'; __MSJ_SUCCESS CONSTANT CHARACTER VARYING DEFAULT 'Se actualizó'; __STATUS_500 CONSTANT INTEGER DEFAULT 500; __STATUS_ERROR CONSTANT INTEGER DEFAULT 400; __STATUS_SUCCESS CONSTANT INTEGER DEFAULT 200; __MAX_LENGTH CONSTANT INTEGER DEFAULT 250; __FORMAT_DATE CONSTANT CHARACTER VARYING DEFAULT 'dd/mm/yyyy'; __FORMAT_TIME CONSTANT CHARACTER VARYING DEFAULT 'hh12:mi am'; --VARIABLES __result JSONB; __result_json JSONB; __msj_excep TEXT; __v_id_estudiante INTEGER; __v_id_colaborador INTEGER; __v_comentario CHARACTER VARYING(280); __v_id_tutor INTEGER; __v_year_actual INTEGER; -- VARIABLES PARA HALLAR EL TUTOR __v_nid_aula INTEGER; __v_id_programa INTEGER; __v_fec_fin DATE; BEGIN IF __p_id_colaborator IS NULL THEN RAISE EXCEPTION USING ERRCODE = 'SMILE', MESSAGE = __ERROR_ANP; END IF; IF __p_id_sede IS NULL THEN RAISE EXCEPTION USING ERRCODE = 'SMILE', MESSAGE = __ERROR_ANP; END IF; IF __p_data = '[]' THEN RAISE EXCEPTION USING ERRCODE = 'SMILE', MESSAGE = __ERROR_EA; END IF; --------------------------------- ---- OBTENEMOS EL AULA ACTUAL ---- SELECT EXTRACT(YEAR FROM NOW())::INTEGER INTO __v_year_actual; ------------------------------------------------------------------------------------------ ---- ITERAMOS SOBRE LA EL OBJETO DATA QUE MANDAMOS PARA ASIGNAR LOS COMENTARIOS ------------------------------------------------------------------------------------------ FOR __v_id_estudiante, __v_comentario IN SELECT unw->>'id_estudiante', unw->>'comentario' FROM JSONB_ARRAY_ELEMENTS(__p_data) AS unw LOOP ---VALIDAMOS SI EL COMENTARIO NO SOBREPASA EL LIMITE ESTABLECIDO IF LENGTH(__v_comentario) > __MAX_LENGTH THEN RAISE EXCEPTION USING ERRCODE = 'SMILE', MESSAGE = __ERROR_ANP; END IF; ---OBTENEMOS EL ID DEL TUTOR POR CADA ALUMNO QUE TENGAMOS SELECT p.tipo_programa, p.fec_fin INTO __v_id_programa, __v_fec_fin FROM PLAN_INST.periodo p, (SELECT _id_tipo_programa FROM persona_x_aula WHERE __id_persona = __v_id_estudiante AND _id_sede = __p_id_sede AND year_academico = __v_year_actual) p_x_a WHERE p._id_sede = __p_id_sede AND p.year_acad = __v_year_actual AND p.tipo_programa = p_x_a._id_tipo_programa GROUP BY tipo_programa, p.fec_fin ORDER BY p.fec_fin; ---- SELECT __id_aula INTO __v_nid_aula FROM persona_x_aula WHERE __id_persona = __v_id_estudiante AND _id_sede = __p_id_sede AND _id_tipo_programa = __v_id_programa AND year_academico = __v_year_actual; ---- OBTENEMOS LA INFORMACION DEL TUTOR -- SELECT p.nid_persona INTO __v_id_tutor FROM persona p, aula a WHERE p.nid_persona = a.id_tutor AND a.nid_aula = __v_nid_aula; UPDATE sima.detalle_alumno sd SET agenda_comentarios = (SELECT JSONB_SET(COALESCE(sd.agenda_comentarios,'[]'::JSONB), ARRAY[JSONB_ARRAY_LENGTH(COALESCE(sd.agenda_comentarios,('[]')::JSONB))::TEXT], JSONB_BUILD_OBJECT('idx' , gen_random_uuid(), 'id_estudiante' , __v_id_estudiante, 'id_colaborador' , __p_id_colaborator, 'fecha' , CONCAT(to_char(now()::DATE, __FORMAT_DATE), ' ', to_char(current_timestamp, __FORMAT_TIME)), 'comentario' , __v_comentario, -- SI EL ID QUE HAYAMOS DEL TUTOR ES IGUAL AL ID DE LA PERSONA QUE ASIGNO EL COMENTARIO MARCAMOS COMO 'firmado' , CASE WHEN __p_id_colaborator = __v_id_tutor THEN true ELSE false END ), TRUE )) WHERE nid_persona = __v_id_estudiante; END LOOP; -------------- FIN -------------- __result = JSONB_BUILD_OBJECT('msj' , 'Ejecución correcta'); RETURN __result; EXCEPTION WHEN SQLSTATE 'SMILE' THEN __result = JSONB_BUILD_OBJECT('status', __STATUS_ERROR , 'msj' , SQLERRM); RETURN __result; WHEN OTHERS THEN GET STACKED DIAGNOSTICS __msj_excep = PG_EXCEPTION_CONTEXT; __result = JSONB_BUILD_OBJECT('status', __STATUS_500, 'msj' , 'Hubo un error', 'stack_error', CONCAT(SQLERRM, ' - ', __msj_excep)); RETURN __result; END; $BODY$;

Be the first to comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.