package com.fp.general.rules.query.code;

import java.util.List;

import com.fp.base.persistence.util.helper.GeneralDescriptions;
import com.fp.bpm.query.Query;
import com.fp.dto.Response;
import com.fp.dto.query.QueryRequest;
import com.fp.dto.rules.QueryRule;
import com.fp.persistence.pgeneral.product.TgeneSubProduct;

/**
 * Clase que se encarga de completar descripcion del modulo, producto, y subproducto, dado un codigo de query alias.
 * 
 * @author Jorge Vaca
 * @version 2.1
 */
public class SubProductDesc extends QueryRule {

    /**
     * Metodo que completa descripciones de modulo, producto y sub producto.
     */
    @Override
    @SuppressWarnings("unchecked")
    public QueryRequest process(QueryRequest pQueryRequest) throws Exception {
        Response response = pQueryRequest.getResponse();
        Query qry = new Query();
        qry.process(pQueryRequest);
        List<Object> lobjects = (List<Object>) response.get("TGENESUBPRODUCT");
        if (lobjects == null) {
            return pQueryRequest;
        }
        for (Object obj : lobjects) {
            TgeneSubProduct subprod = (TgeneSubProduct) obj;
            if (subprod.getPk().getModulecode() == null) {
                continue;
            }
            // module descripion
            subprod.addAddtionalInfo("moduledesc", GeneralDescriptions.getModuledesc(subprod.getPk().getModulecode()));
            // product description
            subprod.addAddtionalInfo("productdesc",
                    GeneralDescriptions.getProductdesc(subprod.getPk().getModulecode(), subprod.getPk().getProductcode()));
            // subproduct description
            subprod.addAddtionalInfo("subproductdesc", GeneralDescriptions.getSubProductdesc(subprod.getPk().getModulecode(), subprod.getPk()
                    .getProductcode(), subprod.getPk().getSubproductcode()));
        }
        return pQueryRequest;
    }
}
