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
|
# site : site a reapprovisionner
# pays : pays du site à réapprovisionner
# quantite : quantite demandee (peut être égale à la valeur par défaut calculée à partir des stocks disponibles sur site et du seuil de confort)
def liste_medicaments_a_expedier(pays,site,quantite):
# liste des médicaments à retourner
medicaments = []
# seuil du site
seuil = Parametrage.objects.get(asp_par_loc = site).asp_par_con
# Medicaments disponibles sur le site a réapprovisionner
medicament_disponible_site = [m.med_num for m in Medicament.objects.filter(Q(med_dru = 1) & Q(med_sit = site) & Q(med_eta=1))]
placebo_disponible_site = [m.med_num for m in Medicament.objects.filter(Q(med_dru = 2) & Q(med_sit = site) & Q(med_eta=1))]
# Medicaments disponibles dans le pays du site a réapprovisionner
medicament_disponible_pays = [m.med_num for m in Medicament.objects.filter(Q(med_dru = 1) & Q(med_sit = pays) & Q(med_eta=1))]
placebo_disponible_pays = [m.med_num for m in Medicament.objects.filter(Q(med_dru = 2) & Q(med_sit = pays) & Q(med_eta=1))]
# quantités à commander calculées en fonction du seuil
quantite_medicament_a_commander = seuil - len(medicament_disponible_site)
quantite_placebo_a_commander = seuil - len(placebo_disponible_site)
# si les stocks sont suffisants
if quantite_medicament_a_commander<=len(medicament_disponible_pays) and quantite_placebo_a_commander<=len(placebo_disponible_pays):
medicaments = medicament_disponible_pays[:int(quantite_medicament_a_commander)] + placebo_disponible_pays[:int(quantite_placebo_a_commander)]
# si les stocks sont insuffisants -> nouveau calcul des quantités à expédier
else:
if len(medicament_disponible_pays) < len(placebo_disponible_pays):
quantite_equilibre = len(medicament_disponible_pays) + len(medicament_disponible_site)
elif len(medicament_disponible_pays) > len(placebo_disponible_pays):
quantite_equilibre = len(placebo_disponible_pays) + len(placebo_disponible_site)
else:
quantite_equilibre = len(placebo_disponible_pays) + min(len(medicament_disponible_site),len(placebo_disponible_site))
medicaments = medicament_disponible_pays[:int(quantite_equilibre - len(medicament_disponible_site))] + placebo_disponible_pays[:int(quantite_equilibre - len(placebo_disponible_site))]
return medicaments |
Partager