Ejemplo n.º 1
0
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'})
Ejemplo n.º 2
0
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'})