package com.fitbank.bpm.common;

import com.fitbank.common.RequestData;
import com.fitbank.dto.management.Detail;
import com.fitbank.dto.management.Field;

public class ExecuteOriginTransaction extends AbstractFitSend {

    private static final long serialVersionUID = 1L;

    public Detail execute(Detail pDetail, Detail pAuth) throws Exception {
        pDetail = this.copyControlFields(pAuth, pDetail);

        for (Field f : pDetail.getFields()) {
            if ((f.getName().compareTo("RESPONSE") == 0)
                    || (f.getName().indexOf("_USER_") == 0)
                    || (f.getName().compareTo("_AUT_ESTADO") == 0)) {
                f.setValue(null);
            }
        }

        RequestData.setOrigin(pDetail);
        RequestData.getOrigin().findFieldByNameCreate("__EVENT__")
                .setValue("com.fitbank.bpm.common.ExecuteOriginTransaction");
        pDetail.findFieldByNameCreate("_BPMEND").setValue("1");
        return pDetail;
    }

    private Detail copyControlFields(Detail pAuth, Detail pDetail) {
        for (Field f : pAuth.getFields()) {
            if (pDetail.findFieldByName(f.getName()) == null) {
                pDetail.findFieldByNameCreate(f.getName()).setValue(
                        f.getValue());
            }
        }

        return pDetail;
    }
}