/// <summary>
        ///     Process
        /// </summary>
        /// <returns>info</returns>
        protected override String DoIt()
        {
            //	Specific
            if (_M_Requisition_ID != 0)
            {
                log.Info("M_Requisition_ID=" + _M_Requisition_ID);
                MRequisition req = new MRequisition(GetCtx(), _M_Requisition_ID, Get_TrxName());
                if (!MRequisition.DOCSTATUS_Completed.Equals(req.GetDocStatus()))
                {
                    throw new Exception("@DocStatus@ = " + req.GetDocStatus());
                }
                MRequisitionLine[] lines = req.GetLines();
                for (int i = 0; i < lines.Length; i++)
                {
                    if (lines[i].GetC_OrderLine_ID() == 0)
                    {
                        Process(lines[i]);
                    }
                }
                CloseOrder();
                return(Msg.GetMsg(GetCtx(), "SuccessfullyCreatedPONo. " + createdPO));
            }   //	single Requisition

            //
            log.Info("AD_Org_ID=" + _AD_Org_ID
                     + ", M_Warehouse_ID=" + _M_Warehouse_ID
                     + ", DateDoc=" + _DateDoc_From + "/" + _DateDoc_To
                     + ", DateRequired=" + _DateRequired_From + "/" + _DateRequired_To
                     + ", PriorityRule=" + _PriorityRule
                     + ", AD_User_ID=" + _AD_User_ID
                     + ", M_Product_ID=" + _M_Product_ID
                     + ", ConsolidateDocument" + _ConsolidateDocument);

            StringBuilder sql = new StringBuilder("SELECT * FROM M_RequisitionLine rl ")
                                .Append("WHERE rl.C_OrderLine_ID IS NULL");

            if (_AD_Org_ID != 0)
            {
                sql.Append(" AND AD_Org_ID=" + _AD_Org_ID);
            }
            if (_M_Product_ID != 0)
            {
                sql.Append(" AND M_Product_ID=" + _M_Product_ID);
            }
            //	Requisition Header
            sql.Append(" AND EXISTS (SELECT * FROM M_Requisition r WHERE rl.M_Requisition_ID=r.M_Requisition_ID")
            .Append(" AND r.DocStatus='CO'");
            if (_M_Warehouse_ID != 0)
            {
                sql.Append(" AND r.M_Warehouse_ID=" + _M_Warehouse_ID);
            }
            //
            if (_DateDoc_From != null && _DateDoc_To != null)
            {
                sql.Append(" AND r.DateDoc BETWEEN " + _DateDoc_From + " AND " + _DateDoc_To);
            }
            else if (_DateDoc_From != null)
            {
                sql.Append(" AND r.DateDoc =>" + _DateDoc_From);
            }
            else if (_DateDoc_To != null)
            {
                sql.Append(" AND r.DateDoc <= " + _DateDoc_To);
            }
            //
            if (_DateRequired_From != null && _DateRequired_To != null)
            {
                sql.Append(" AND r.DateRequired BETWEEN " + _DateRequired_From + " AND " + _DateRequired_To);
            }
            else if (_DateRequired_From != null)
            {
                sql.Append(" AND r.DateRequired =>" + _DateRequired_From);
            }
            else if (_DateRequired_To != null)
            {
                sql.Append(" AND r.DateRequired <=" + _DateRequired_To);
            }
            //
            if (_PriorityRule != null)
            {
                sql.Append(" AND r.PriorityRule =>" + _PriorityRule);
            }
            if (_AD_User_ID != 0)
            {
                sql.Append(" AND r.AD_User_ID=" + _AD_User_ID);
            }
            //
            sql.Append(") ORDER BY ");


            if (!_ConsolidateDocument)
            {
                sql.Append("M_Requisition_ID, ");
            }
            sql.Append("M_Product_ID, C_Charge_ID, M_AttributeSetInstance_ID");

            DataTable   dt  = null;
            IDataReader idr = null;

            try
            {
                idr = DataBase.DB.ExecuteReader(sql.ToString(), null, Get_TrxName());
                dt  = new DataTable();
                dt.Load(idr);
                idr.Close();
                foreach (DataRow dr in dt.Rows)
                {
                    Process(new MRequisitionLine(GetCtx(), dr, Get_TrxName()));
                }
            }
            catch (Exception e)
            {
                if (idr != null)
                {
                    idr.Close();
                }
                log.Log(Level.SEVERE, sql.ToString(), e);
            }
            finally
            {
                dt = null;
                if (idr != null)
                {
                    idr.Close();
                }
            }

            CloseOrder();
            return(Msg.GetMsg(GetCtx(), "SuccessfullyCreatedPONo. " + createdPO));
        }