def ajustement_titre(request, cpt_id): """permet d'ajuster les titres""" compte = get_object_or_404(Compte.objects.select_related(), pk=cpt_id) if compte.type != 't': messages.error(request, "ce n'est pas un compte titre") return http.HttpResponseRedirect(reverse("index")) titre_compte = compte.titre.all().distinct().order_by('nom') titres_forms = [] if request.method == 'POST': i = 0 date_ope_form = gsb_forms.ajout_ope_date_form(request.POST, initial={'date': gsb.utils.today}) for titre in titre_compte: i += 1 titres_forms.append(gsb_forms.ajout_ope_bulk_form(request.POST, prefix=str(i), initial={'titre': titre, 'nombre': 0, 'montant': 0})) if all([form.is_valid() for form in titres_forms]) and date_ope_form.is_valid(): date_ope = date_ope_form.cleaned_data['date'] for form in titres_forms: compte_titre = compte nb = form.cleaned_data['nombre'] titre = form.cleaned_data['titre'] cours = form.cleaned_data['cours'] if nb > 0: compte_titre.ajustement_titre(date_ope, titre, nb, cours) messages.success(request, "ajustement effectue pour le titre %s" % titre) return http.HttpResponseRedirect(compte.get_absolute_url()) else: i = 0 date_ope_form = gsb_forms.ajout_ope_date_form(initial={'date': gsb.utils.today}) for titre in titre_compte: i += 1 titres_forms.append(gsb_forms.ajout_ope_bulk_form(prefix=str(i), initial={'compte': compte, 'titre': titre, 'date': gsb.utils.today, 'nombre': 0, 'montant': 0})) return render(request, 'gsb/maj_compte_titre.djhtm', {'date_ope_form': date_ope_form, 'forms': titres_forms, 'compte_id': compte.id, 'titre': 'ajustement sur les titres suivants'})
def ajout_ope_titre_bulk(request, cpt_id): """view qui s'occupe d'achat ou de vente pour l'ensemble des titres d'un compte""" compte = get_object_or_404(Compte.objects.select_related(), pk=cpt_id) if compte.type != 't': messages.error(request, "ce n'est pas un compte titre") return http.HttpResponseRedirect(reverse("index")) titre_compte = Titre.objects.filter(compte=compte.id).annotate(nombre_actuel=models.Sum('ope_titre__nombre')) titres_forms = [] if request.method == 'POST': i = 0 date_ope_form = gsb_forms.ajout_ope_date_form(request.POST, initial={'date': gsb.utils.today}) for titre in titre_compte: if titre.nombre_actuel > 0.001: # on affiche pas ceux qui n'ont plus ds le portfeuille i += 1 titres_forms.append(gsb_forms.ajout_ope_bulk_form(request.POST, prefix=str(i), initial={'titre': titre, 'nombre': 0, 'montant': 0})) if all([form.is_valid() for form in titres_forms]) and date_ope_form.is_valid(): date_ope = date_ope_form.cleaned_data['date'] for form in titres_forms: compte_titre = compte nb = form.cleaned_data['nombre'] if nb > 0: # on achete compte_titre.achat(titre=form.cleaned_data['titre'], nombre=form.cleaned_data['nombre'], prix=form.cleaned_data['cours'], date=date_ope, frais=form.cleaned_data['frais'] if form.cleaned_data['frais'] else 0) messages.info(request, "nouvel achat de %s %s @ %s le %s soit %s %s" % ( form.cleaned_data['nombre'], form.cleaned_data['titre'].nom, form.cleaned_data['cours'], date_ope, '{0:.2f}'.format(form.cleaned_data['cours'] * form.cleaned_data['nombre']), settings.DEVISE_GENERALE)) else: if nb < 0: #on vent compte_titre.vente(titre=form.cleaned_data['titre'], nombre=form.cleaned_data['nombre'] * -1, prix=form.cleaned_data['cours'], date=date_ope, frais=form.cleaned_data['frais'] if form.cleaned_data['frais'] else 0) messages.info(request, "nouvel vente de {0:s} {1:s} @ {2:s} le {3:s} soit {4:s} {5:s}".format( form.cleaned_data['nombre'], form.cleaned_data['titre'].nom, form.cleaned_data['cours'], date_ope, '{0:.2f}'.format(form.cleaned_data['cours'] * form.cleaned_data['nombre']), settings.DEVISE_GENERALE)) else: #uniquement mise a jour des cours if not nb and form.cleaned_data['cours']: titre = form.cleaned_data['titre'] if not Cours.objects.filter(titre=titre, date=date_ope).exists(): titre.cours_set.create(valeur=form.cleaned_data['cours'], date=date_ope) messages.success(request, "cours crée pour %s" % titre) else: cours = titre.cours_set.get(date=date_ope) cours.valeur = form.cleaned_data['cours'] cours.save() messages.success(request, "cours maj pour %s" % titre) return http.HttpResponseRedirect(compte.get_absolute_url()) else: i = 0 date_ope_form = gsb_forms.ajout_ope_date_form(initial={'date': gsb.utils.today}) for titre in titre_compte: if titre.nombre_actuel > 0.001: i += 1 titres_forms.append(gsb_forms.ajout_ope_bulk_form(prefix=str(i), initial={'compte': compte, 'titre': titre, 'date': gsb.utils.today, 'nombre': 0, 'montant': 0} ) ) return render(request, 'gsb/maj_compte_titre.djhtm', {'date_ope_form': date_ope_form, 'forms': titres_forms, 'compte_id': compte.id, 'titre': 'opération sur les titres suivants'})