diff --git a/base/src/org/compiere/process/RfQResponseRank.java b/base/src/org/compiere/process/RfQResponseRank.java
index 20012ec030..3147959332 100644
--- a/base/src/org/compiere/process/RfQResponseRank.java
+++ b/base/src/org/compiere/process/RfQResponseRank.java
@@ -33,6 +33,10 @@ import org.compiere.util.Env;
*
* @author Jorg Janke
* @version $Id: RfQResponseRank.java,v 1.2 2006/07/30 00:51:02 jjanke Exp $
+ *
+ * @author Teo Sarca, teo.sarca@gmail.com
+ *
BF [ 2892595 ] RfQResponseRank - ranking is not good
+ * https://sourceforge.net/tracker/?func=detail&aid=2892595&group_id=176962&atid=879332
*/
public class RfQResponseRank extends SvrProcess
{
@@ -84,8 +88,8 @@ public class RfQResponseRank extends SvrProcess
if (responses.length == 1)
{
responses[0].setIsSelectedWinner(true);
- responses[0].save();
- throw new IllegalArgumentException("Only one completed RfQ Response found");
+ responses[0].saveEx();
+ return "Only one completed RfQ Response found";
}
// Rank
@@ -146,28 +150,31 @@ public class RfQResponseRank extends SvrProcess
{
Arrays.sort(respQtys, respQtys[0]);
int lastRank = 1; // multiple rank #1
- BigDecimal lastAmt = Env.ZERO;
- for (int rank = 0; rank < respQtys.length; rank++)
+ BigDecimal lastAmt = Env.ZERO;
+ int rank = 0;
+ for (int k = 0; k < respQtys.length; k++)
{
- MRfQResponseLineQty qty = respQtys[rank];
+ MRfQResponseLineQty qty = respQtys[k];
if (!qty.isActive() || qty.getRanking() == 999)
+ {
continue;
+ }
BigDecimal netAmt = qty.getNetAmt();
if (netAmt == null)
{
qty.setRanking(999);
+ qty.saveEx();
log.fine(" - Rank 999: " + qty);
+ continue;
}
- else
+
+ if (lastAmt.compareTo(netAmt) != 0)
{
- if (lastAmt.compareTo(netAmt) != 0)
- {
- lastRank = rank+1;
- lastAmt = qty.getNetAmt();
- }
- qty.setRanking(lastRank);
- log.fine(" - Rank " + lastRank + ": " + qty);
+ lastRank = rank+1;
+ lastAmt = qty.getNetAmt();
}
+ qty.setRanking(lastRank);
+ log.fine(" - Rank " + lastRank + ": " + qty);
qty.save();
//
if (rank == 0) // Update RfQ
@@ -175,6 +182,7 @@ public class RfQResponseRank extends SvrProcess
rfqQty.setBestResponseAmt(qty.getNetAmt());
rfqQty.save();
}
+ rank++;
}
}
} // for all rfq line qtys