package com.fp.armas.rules.save.solicitud;

import java.util.List;

import org.apache.commons.lang.StringUtils;

import com.fp.dto.rules.TransactionRule;
import com.fp.dto.save.SaveRequest;
import com.fp.persistence.commondb.PersistenceHelper;
import com.fp.persistence.parmas.soli.TarmInspeccion;
import com.fp.persistence.parmas.soli.TarmInspeccionArchivo;
import com.fp.sessionbeans.helper.Sequence;

/**
 * Clase que se encarga de completar informaci&oacute;n de una solicitud de control de armas.
 * 
 * @author C.P.
 * @version 2.1
 */
public class RegistroInspeccion extends TransactionRule {

    private static final long serialVersionUID = 1L;

    /*
     * (non-Javadoc)
     * 
     * @see com.fp.dto.rules.TransactionRule#normalProcess(com.fp.dto.save.SaveRequest)
     */
    @Override 
    public SaveRequest normalProcess(SaveRequest pSaveRequest) throws Exception {
    	 List<Object> inspeccion = (List<Object>)pSaveRequest.getSaveBeanModifiedRecords("INSPECCION");
    	 if(inspeccion!=null){
    		 List<Object> archivoList = (List<Object>)pSaveRequest.getSaveBeanModifiedRecords("INSPECCIONARCHIVO");
        	 TarmInspeccion tarmInspeccion = (TarmInspeccion)inspeccion.get(0);
        	 tarmInspeccion.setPk(Long.valueOf(getCodigoSolicitud()));
        	 tarmInspeccion.setNumordentrabajo(getNumeroTransaccion("TRA",tarmInspeccion.getPk().toString()));
        	 PersistenceHelper.getEntityManager().persist(tarmInspeccion);
        	 if(archivoList!=null && archivoList.size()>0){
        		 for(Object obj:archivoList){
            		 TarmInspeccionArchivo archivo=(TarmInspeccionArchivo)obj;
            		 archivo.setCinspeccion(tarmInspeccion.getPk());
            		 PersistenceHelper.getEntityManager().persist(archivo);
            	 }
        	 }
        	 PersistenceHelper.getEntityManager().flush();
        	 pSaveRequest.getResponse().put("numerotrabajo",  tarmInspeccion.getNumordentrabajo());
    	 }
    	 
        return pSaveRequest;
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.fp.dto.rules.TransactionRule#reverseProcess(com.fp.dto.save.SaveRequest)
     */
    @Override
    public SaveRequest reverseProcess(SaveRequest pSaveRequest) throws Exception {
        return pSaveRequest;
    }

    /**
     * Metodo que devuelve la secuencia de una solicitud de viaticos.
     * 
     * @return Codigo de la nueva solicitud de viaticos.
     * @throws Exception
     */
    private String getCodigoSolicitud() throws Exception {
        Sequence sequence = new Sequence();
        Integer solcitud = Integer.valueOf(sequence.getNextValue("CINSPECCION").toString());
        return solcitud.toString();
    }

    /**
     * Metodo para generar el numero de trabajo
     * @param prefijo
     * @param secuencia
     * @return String
     */
    private String getNumeroTransaccion(String prefijo,String secuencia){
		return prefijo+"-"+StringUtils.leftPad(secuencia, 9, '0');
    }
}
