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

import java.sql.Date;

import com.fp.common.helper.Constant;
import com.fp.dto.rules.TransactionRule;
import com.fp.dto.save.SaveRequest;
import com.fp.persistence.commondb.helper.FormatDates;
import com.fp.persistence.parmas.soli.TarmSolicitud;
import com.fp.sessionbeans.helper.Sequence;

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

    private static final long serialVersionUID = 1L;

    /**
     * Genera el secuencial de la solicitud completa datos generales de la solicitud en su creacion
     */
    @Override
    public SaveRequest normalProcess(SaveRequest pSaveRequest) throws Exception {
        if (Constant.ifYes((String) pSaveRequest.get("isnew")) || pSaveRequest.get("csolicitud") != null) {
            return pSaveRequest;
        }
        String codSolicitud = null;
        TarmSolicitud tarmsolicitud = (TarmSolicitud) pSaveRequest.getSaveBeanModifiedObject("SOLICITUD");
        if (tarmsolicitud == null) {
            return pSaveRequest;
        }
        codSolicitud = tarmsolicitud.getPk();
        if (codSolicitud == null) {
            codSolicitud = this.getCodigoSolicitud();
            tarmsolicitud.setPk(codSolicitud);
            tarmsolicitud.setFreal(FormatDates.getInstance().getDataBaseTimestamp());
            tarmsolicitud.setEstado("REG");
            tarmsolicitud.setEstadocodigo("ESTADOSOLICITUD");
            tarmsolicitud.setOrigenadquisicioncodigo("ORIGENADQUISICION");
            //tarmsolicitud.setTipopagocodigo("TIPOPAGOSOLICITUD");
            String freal = FormatDates.getInstance().getTransportDateFormat().format(tarmsolicitud.getFreal());
            Date f = new Date(FormatDates.getInstance().getTransportDateFormat().parse(freal).getTime());
            tarmsolicitud.setFregistro(f);
            pSaveRequest.getResponse().put("csolicitud", codSolicitud);
            pSaveRequest.put("csolicitud", codSolicitud);
        }
        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("SOLICTUDCONTROLARMAS").toString());
        return solcitud.toString();
    }

}
