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

import java.sql.Date;
import java.text.SimpleDateFormat;

import com.fp.dto.rules.TransactionRule;
import com.fp.dto.save.SaveRequest;
import com.fp.persistence.commondb.PersistenceHelper;
import com.fp.persistence.commondb.helper.FormatDates;
import com.fp.persistence.pviaticos.solicitud.ViaSolicitud;
import com.fp.persistence.pviaticos.solicitud.ViaSolicitudComentarios;
import com.fp.persistence.pviaticos.solicitud.ViaSolicitudComentariosKey;
import com.fp.persistence.pviaticos.solicitud.ViaSolicitudKey;
import com.fp.viaticos.rules.enums.EnumCodigos;

/**
 * Clase que se encarga de almacenar comentarios de la tarea y el estatus actual de la solicitud.
 * 
 * @author Jorge Vaca.
 * @version 2.1
 */
public class Comentarios extends TransactionRule {

    /**
     * Version de la clase.
     */
    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 {
        if (pSaveRequest.get("csolicitud") == null || pSaveRequest.get("BPMStatus") == null || pSaveRequest.get("tipo") == null) {
            return pSaveRequest;
        }
        String csolicitud = pSaveRequest.getString("csolicitud");
        // El estado y los comentarios solo van a la solicitud.
        ViaSolicitud vsol = ViaSolicitud.find(PersistenceHelper.getEntityManager(), new ViaSolicitudKey(csolicitud, EnumCodigos.SOLICITUD.getCodigo()));
        this.crearComentario(pSaveRequest, vsol);
        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;
    }

    private void crearComentario(SaveRequest pSaveRequest, ViaSolicitud vsol) throws Exception {
        ViaSolicitudComentariosKey key = new ViaSolicitudComentariosKey();
        key.setCod_solicitud(vsol.getPk().getCod_solicitud());
        key.setCod_tipo(vsol.getPk().getCod_tipo());

        ViaSolicitudComentarios comen = new ViaSolicitudComentarios(key);
        comen.setCod_estado(vsol.getCod_estado());
        comen.setCod_usuario(pSaveRequest.getUser());
        Date f = FormatDates.getInstance().getDataBaseDate();
        SimpleDateFormat sdf = FormatDates.getInstance().getHourSecondsFormat();
        comen.setFec_comentario(f);
        comen.setFec_hora(sdf.format(FormatDates.getInstance().getDataBaseTimestamp()));
        comen.setTxt_actividad(pSaveRequest.getString("taskname"));
        comen.setTxt_comentario(pSaveRequest.getString("BPMObs"));
        // Almacena en la base de datos el comentario.
        PersistenceHelper.getEntityManager().persist(comen);
    }
}
