1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
/* ALGO de calcul de combinaisons d'articles pour un produit */
public static Vector combinaison(Vector pvListeArtDebut, Vector pvListeArtEnCours, Vector pvListeCombinaison,
Vector pvCombinaison, double pnQteTotale, double pnQteRest){
/* On retire de la liste des peres à traiter, l'actuel */
if (pvCombinaison.size()>0){
Vector vPremier = (Vector)pvCombinaison.get(0);
if (pvListeArtDebut.size()>0){
pvListeArtDebut.remove(vPremier);
}
}
/* Si tous les peres sont traites */
if (pvListeArtDebut != null || pvListeArtEnCours != null){
Vector vMax = maxi(pvListeArtEnCours);
pnQteRest = pnQteRest - ((Double)vMax.get(2)).doubleValue();
/* Si la Qte restante est > 0 alors on ajout l'article à la liste la combinaison */
if (pnQteRest > 0){
pvCombinaison.add(vMax);
combinaison(pvListeArtDebut,pvListeArtEnCours,pvListeCombinaison,pvCombinaison,pnQteTotale,pnQteRest);
}
/* */
else{
pvListeArtEnCours.remove(vMax);
if (pnQteRest < 0){
if (pvListeArtEnCours.size()>=1){
pnQteRest += ((Double)vMax.get(2)).doubleValue();
combinaison(pvListeArtDebut,pvListeArtEnCours,pvListeCombinaison,pvCombinaison,pnQteTotale,pnQteRest);
}
/* On a plus d'élément disponible à ajouter et la quantité n'est pas atteinte */
else{
for (Enumeration eArt = pvCombinaison.elements(); eArt.hasMoreElements();){
Vector vCombinaison = (Vector) eArt.nextElement();
pvListeArtEnCours.remove(vCombinaison);
}
pvCombinaison.remove((Vector)pvCombinaison.lastElement());
pnQteRest += ((Double)vMax.get(2)).doubleValue();
combinaison(pvListeArtDebut,pvListeArtEnCours,pvListeCombinaison,pvCombinaison,pnQteTotale,pnQteRest);
}
}
/* Cas où la quantité restante est nulle, donc une combinaison est terminée */
else{
pvCombinaison.add(vMax);
pvListeCombinaison.add(pvCombinaison);
if (pvListeArtEnCours.size()>=1){
pvCombinaison.remove((Vector)pvCombinaison.lastElement());
pvListeArtEnCours.remove(vMax);
pnQteRest += ((Double)vMax.get(2)).doubleValue();
combinaison(pvListeArtDebut,pvListeArtEnCours,pvListeCombinaison,pvCombinaison,pnQteTotale,pnQteRest);
}
else{
for (Enumeration eArt = pvCombinaison.elements(); eArt.hasMoreElements();){
Vector vCombinaison = (Vector) eArt.nextElement();
if (vCombinaison.equals(vMax)){
pvListeArtEnCours.remove(vCombinaison);
pnQteRest += ((Double)vCombinaison.get(2)).doubleValue();
}
}
pnQteRest += ((Double)((Vector)(pvCombinaison.lastElement())).get(2)).doubleValue();
pvCombinaison.remove(pvCombinaison.lastElement());
pvListeArtEnCours = pvListeArtDebut;
Vector vTemp = null;
for (Enumeration eArt = pvListeArtEnCours.elements(); eArt.hasMoreElements();){
vTemp = (Vector) eArt.nextElement();
if ((((Double)vMax.get(2)).doubleValue()<((Double)vTemp.get(2)).doubleValue()) && (((Double)(((Vector)(pvListeArtDebut.firstElement())).get(2))).doubleValue()>((Double)vTemp.get(2)).doubleValue())){
pvListeArtEnCours.remove(vTemp);
}
}
combinaison(pvListeArtDebut,pvListeArtEnCours,pvListeCombinaison,pvCombinaison,pnQteTotale,pnQteRest);
}
}
}
}
return pvListeCombinaison;
} |
Partager