package br.com.unisis.unispat.model.dao.procedures;

import java.math.BigDecimal;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;

import org.hibernate.HibernateException;
import org.hibernate.Session;


import br.com.unisis.unispat.model.entity.Tpt102;
import br.com.unisis.unispat.model.entity.procedures.INDICE_DIAIn;
import br.com.unisis.unispat.model.entity.procedures.INDICE_DIAOut;
import flex.messaging.FlexContext;

public class INDICE_DIA {

	public static INDICE_DIAOut executaProcedure(Object parametro) {
		// Cria variavel de retorno
		INDICE_DIAOut procedureBean = new INDICE_DIAOut();
		
		try {

			// Verifica sessao do usuario
			Tpt102 tpt102 = (Tpt102) FlexContext.getFlexSession().getAttribute(
					"loggedUser");
			String config = Integer.toString(tpt102.getId().getCdempgrp());
			Session sessao = br.com.unisis.unispat.util.HibernateUtil
					.getSessionFactory(config).openSession();

			// Converte o parametro recebido na classe que enviara a variaveis
			// para a procedure
			INDICE_DIAIn INDICE_DIAIn = (INDICE_DIAIn) parametro;

			// Cria a conexao com o banco
			Connection con = sessao.connection();

			// Cria a classe que executa a procedure
			CallableStatement st = null;
			st = con.prepareCall("{call INDICE_DIA(?, ?, ?, ?, ?,)}");

			// seta os parametros de entrada da procedure
			st.setInt(1, INDICE_DIAIn.getEmp());
			st.setInt(2, INDICE_DIAIn.getMoeda());
			st.setInt(3, INDICE_DIAIn.getAno());
			st.setInt(4, INDICE_DIAIn.getMes());
			st.setInt(5, INDICE_DIAIn.getDia());

			// Executa a procedure
			st.executeUpdate();
			
			// Pega os valores de retorno da procedure e coloca na procedureBean
			procedureBean.setIndice(st.getBigDecimal("INDICE"));

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return procedureBean;
	}
}
