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

import java.util.List;
import com.fp.dto.rules.TransactionRule;
import com.fp.dto.save.SaveRequest;
import com.fp.persistence.parmas.soli.TarmCabRepDestruirArmas;
import com.fp.persistence.parmas.soli.TarmDetRepDestruirArmas;
import com.fp.sessionbeans.helper.Sequence;

/**
 * Registra las armas y el registro de armas
 * @author Christian Pazmino
 *
 */
public class ReporteArmasDecomisadas extends TransactionRule {

	private static final long serialVersionUID = 1L;

	@Override
	public SaveRequest normalProcess(SaveRequest pSaveRequest) throws Exception {
        if (this.isNew(pSaveRequest)) {
            return pSaveRequest;
        }
		
		
		 TarmCabRepDestruirArmas cabeceraReporteObj = (TarmCabRepDestruirArmas)pSaveRequest.getSaveBeanModifiedObject("CABREPORTEDESTRUIRARMAS");		 
		 if(cabeceraReporteObj != null){
			 cabeceraReporteObj.setPk(getCodigoReporte());
			 pSaveRequest.put("creporte", cabeceraReporteObj.getPk());
			 String nombreReporte="BAJ-"+cabeceraReporteObj.getPk()+".pdf";
			 pSaveRequest.getResponse().put("creporte", cabeceraReporteObj.getPk());
			 cabeceraReporteObj.setXpath(cabeceraReporteObj.getXpath()+"/cm:"+nombreReporte);
			 pSaveRequest.put("xpath", cabeceraReporteObj.getXpath());
			 pSaveRequest.getResponse().put("nombreReporte", nombreReporte);
			 
			 pSaveRequest.getResponse().put("creporte", cabeceraReporteObj.getPk());
			 pSaveRequest.getResponse().put("xpath", cabeceraReporteObj.getXpath());
			 
			 List<Object> armasReporteLst = pSaveRequest.getSaveBeanModifiedRecords("DETREPORTEDESTRUIRARMAS");
			 for (Object arma : armasReporteLst) {
				 TarmDetRepDestruirArmas armaObj = (TarmDetRepDestruirArmas)arma;
				 armaObj.setPk(getCodigoDetReporte());
				 armaObj.setCreporte(cabeceraReporteObj.getPk());				 
			 }
		}	
		 
		return pSaveRequest;
	}

	@Override
	public SaveRequest reverseProcess(SaveRequest pSaveRequest) throws Exception {
		return pSaveRequest;
	}
	
	private Integer getCodigoReporte() throws Exception{
		Sequence sequence = new Sequence();
		Integer creporte = sequence.getNextValue("TARMREPORTEDESTRUIRARMAS").intValue();
		return creporte;
	}
	
	private Integer getCodigoDetReporte() throws Exception{
		Sequence sequence = new Sequence();
		Integer carma = sequence.getNextValue("TARMDETREPORTEDESTRUIRARMAS").intValue();
		return carma;
	}

}
