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
| def details_produit(request,categ_stock,id_produit,limite_nb_historique=5):
lst_lieu_stockage=LIEU_STOCKAGE.objects.filter(categorie_stockage__slug_nom=categ_stock).order_by('nom','info_complementaire')
#---
if request.method == "POST":
grp_form = formset_factory(VariationStockProduitQuantifie_ALocaliser)
form = grp_form(request.POST, prefix='recup_historiq')
if form.is_valid():
#On enregistre dans la BDD apres quelques test et on réaffiche la même page avec le formulaire re initialisé à 0
for data in form.cleaned_data:
if data['qte']!=0:#Test si la quantitée a été modifiée
if PRODUIT_LOCALISE.objects.filter(produit__pk=id_produit,lieu_stockage__pk=data['id_stockage']).exists():#Test si le produit existe déjà dans la localisation voulue
prod_loc = PRODUIT_LOCALISE.objects.get(produit__pk=id_produit,lieu_stockage__pk=data['id_stockage'])
else:#Creation de la localisation du produit avant eregiostrement de l'historique
prod_loc = PRODUIT_LOCALISE(produit=PRODUIT_QUANTIFIE.objects.get(pk=id_produit), lieu_stockage=LIEU_STOCKAGE.objects.get(pk=data['id_stockage']))
prod_loc.save()
#On creer l'enregistrement dans l'historique
new_histo = HISTORIQUE_CONSOMMATION(produit_localise=prod_loc, qte=data['qte'],)
new_histo.save()
# ATTENTION RESTE A TESTER SI ON NE RETIRE PAS PLUS QUE LE STOCK EN COURS ! SINON LANCER UNE ERREUR...
grp_form = formset_factory(VariationStockProduitQuantifie_ALocaliser, extra=0)
form = grp_form(prefix='recup_historiq', initial=[{'qte':0,'id_stockage':lieu.pk,'lieux_stockage':lieu.nom,} for lieu in lst_lieu_stockage],) #
#---
data_queryset=STOCK_PAR_STOCKAGE.objects.filter(produit_localise__produit__pk=id_produit) \
.values('dt_histo__date',
'produit_localise__lieu_stockage__nom',
'produit_localise__lieu_stockage__info_complementaire',
'produit_localise__produit__type_unite__nom',) \
.order_by('dt_histo__date',
'produit_localise__lieu_stockage__nom',
'produit_localise__lieu_stockage__info_complementaire',) \
.annotate(lieu_stockage_affichage=Case(
When(produit_localise__lieu_stockage__info_complementaire='/', then='produit_localise__lieu_stockage__nom'),
default=Concat('produit_localise__lieu_stockage__nom',V(' - '), 'produit_localise__lieu_stockage__info_complementaire',output_field=TextField()),
output_field=TextField()
),
total=Sum('qte'),
)
historique_10der=HISTORIQUE_CONSOMMATION.objects.filter(produit_localise__produit__pk=id_produit).order_by('-dt_histo')[0:10]
info_produit=PRODUIT_LOCALISE.objects.filter(produit__pk=id_produit)[0]
#---
context={'categ_stock':categ_stock,'id_produit':id_produit,'titre_page':'Détails','data_queryset':data_queryset,'lst_lieu_stockage':lst_lieu_stockage,'historique_10der':historique_10der,'form':form,'info_produit':info_produit}
return render(request, 'suivi_stock/details_produit.html',context) |
Partager