package com.fp.armas.task;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fp.persistence.commondb.PersistenceHelper;
import com.fp.persistence.parmas.soli.TarmBodega;
import com.fp.persistence.parmas.soli.TarmDecomisoArma;
import com.fp.persistence.parmas.soli.TarmDecomisoArmaTransaccion;
import com.fp.simple.action.TaskAction;

/**
 * Clase que se encarga de setear a nulos aquellas armas que recibieron asignacion de codigos
 *  
 */
public class RechazarActa extends TaskAction {
	private static String SQL = "select o from TarmBodega o where o.pk in (select max(t.pk) from TarmBodega t where t.carma=:ccarma and t.ccentrocontrol=:ccentrocontrol) order by o.carma";

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.fp.simple.action.TaskAction#assignOwner(com.fp.dto.Request)
	 */
	@SuppressWarnings("unchecked")
	@Override
	public void assignOwner(Object pParam) throws Exception {   	
		HashMap<String, Object> m = (HashMap<String, Object>) pParam;
		Map<String, Object> mrequest = (Map<String, Object>) m.get("request");
		Long numeroTransacion=Long.parseLong(mrequest.get("numerotransaccion").toString());
		if (numeroTransacion == null) {
			return;
		}

		List<TarmDecomisoArma> lstDecomisoArma = PersistenceHelper.getEntityManager().
				createQuery("select o from TarmDecomisoArma o where o.cdecomisoarmatransaccion=:decomiso",TarmDecomisoArma.class)
				.setParameter("decomiso", numeroTransacion).getResultList();
		
		for(TarmDecomisoArma decomisoArma:lstDecomisoArma){
			bodegaEliminar(numeroTransacion, decomisoArma.getCarma());
			decomisoArma.setCdecomisoarmatransaccion(null);
			PersistenceHelper.saveOrUpdate(decomisoArma);
			
		}

	}

	/**
	 * @param ccentrocontrol
	 * @param decomisoArma
	 */
	private void bodegaEliminar(Long numeroTransacion,
			String carma) throws Exception {
		TarmDecomisoArmaTransaccion tarmDecomisoArmaTransaccion = TarmDecomisoArmaTransaccion
				.find(PersistenceHelper.getEntityManager(), numeroTransacion);

		String ccentrocontrol = tarmDecomisoArmaTransaccion.getCcentrocontrol();
		TarmBodega tarmBodegas = (TarmBodega) PersistenceHelper
				.getEntityManager().createQuery(SQL)
				.setParameter("ccentrocontrol", ccentrocontrol)
				.setParameter("ccarma", carma)
				.getSingleResult();
		PersistenceHelper.getEntityManager().remove(tarmBodegas);
		PersistenceHelper.getEntityManager().flush();
	}

}
