class AddFuncaoAtualizaSaldos < ActiveRecord::Migration[5.2]
	def change

		reversible do |dir|
			dir.up do
				execute "

					CREATE OR REPLACE FUNCTION somar_valores_movimentacoes(
							conta_id_param INT
					)
					RETURNS DECIMAL AS
					$$
					DECLARE
							total DECIMAL := 0;
							vl_debito DECIMAL:= 0;
							vl_credito DECIMAL:= 0;
					BEGIN
							SELECT SUM(valor)
							INTO vl_debito
							FROM contabilidade_movimentacoes_do_plano_de_contas mov
							INNER JOIN contabilidade_contas_por_eventos_contabeis contas
							ON mov.conta_por_evento_contabil_id = contas.id
							WHERE contas.conta_id = conta_id_param AND mov.tipo_de_lancamento = 0;
							
							SELECT SUM(valor)
							INTO vl_credito
							FROM contabilidade_movimentacoes_do_plano_de_contas mov
							INNER JOIN contabilidade_contas_por_eventos_contabeis contas
							ON mov.conta_por_evento_contabil_id = contas.id
							WHERE contas.conta_id = conta_id_param AND mov.tipo_de_lancamento = 1;
					
							total := coalesce(vl_debito,0) - coalesce(vl_credito,0);
							UPDATE contabilidade_contas SET saldo = total WHERE id = conta_id_param;
							UPDATE configuracoes SET atualizacao_contas_pcasp = CURRENT_TIMESTAMP;
							
							RETURN total;
					END;
					$$
					LANGUAGE plpgsql;

				"
			end
		end

	end
end
