Commit 3eda283f authored by Gabriel Detraz's avatar Gabriel Detraz Committed by chirac

Correction du problème de vente d'articles + simplification views et forms

parent 48be064b
......@@ -84,15 +84,13 @@ class FactureForm(FieldPermissionFormMixin, FormRevMixin, ModelForm):
return cleaned_data
class SelectUserArticleForm(FormRevMixin, Form):
class SelectArticleForm(FormRevMixin, Form):
"""
Form used to select an article during the creation of an invoice for a
member.
"""
article = forms.ModelChoiceField(
queryset=Article.objects.filter(
Q(type_user='All') | Q(type_user='Adherent')
),
queryset=Article.objects.none(),
label=_("Article"),
required=True
)
......@@ -104,31 +102,9 @@ class SelectUserArticleForm(FormRevMixin, Form):
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
super(SelectUserArticleForm, self).__init__(*args, **kwargs)
self.fields['article'].queryset = Article.find_allowed_articles(user)
class SelectClubArticleForm(Form):
"""
Form used to select an article during the creation of an invoice for a
club.
"""
article = forms.ModelChoiceField(
queryset=Article.objects.filter(
Q(type_user='All') | Q(type_user='Club')
),
label=_("Article"),
required=True
)
quantity = forms.IntegerField(
label=_("Quantity"),
validators=[MinValueValidator(1)],
required=True
)
def __init__(self, user, *args, **kwargs):
super(SelectClubArticleForm, self).__init__(*args, **kwargs)
self.fields['article'].queryset = Article.find_allowed_articles(user)
target_user = kwargs.pop('target_user')
super(SelectArticleForm, self).__init__(*args, **kwargs)
self.fields['article'].queryset = Article.find_allowed_articles(user, target_user)
class CustomInvoiceForm(FormRevMixin, ModelForm):
......
......@@ -222,7 +222,7 @@ class Facture(BaseInvoice):
return True, None
if len(Paiement.find_allowed_payments(user_request)) <= 0:
return False, _("There are no payment method which you can use.")
if len(Article.find_allowed_articles(user_request)) <= 0:
if len(Article.find_allowed_articles(user_request, user_request)) <= 0:
return False, _("There are no article that you can buy.")
return True, None
......@@ -595,15 +595,24 @@ class Article(RevMixin, AclMixin, models.Model):
)
@classmethod
def find_allowed_articles(cls, user):
"""Finds every allowed articles for an user.
def find_allowed_articles(cls, user, target_user):
"""Finds every allowed articles for an user, on a target user.
Args:
user: The user requesting articles.
target_user: The user to sell articles
"""
if target_user.is_class_club:
objects_pool = cls.objects.filter(
Q(type_user='All') | Q(type_user='Club')
)
else:
objects_pool = cls.objects.filter(
Q(type_user='All') | Q(type_user='Adherent')
)
if user.has_perm('cotisations.buy_every_article'):
return cls.objects.all()
return cls.objects.filter(available_for_everyone=True)
return objects_pool
return objects_pool.filter(available_for_everyone=True)
class Banque(RevMixin, AclMixin, models.Model):
......
......@@ -75,8 +75,7 @@ from .forms import (
DelPaiementForm,
BanqueForm,
DelBanqueForm,
SelectUserArticleForm,
SelectClubArticleForm,
SelectArticleForm,
RechargeForm,
CustomInvoiceForm
)
......@@ -110,16 +109,10 @@ def new_facture(request, user, userid):
creation=True
)
if request.user.is_class_club:
article_formset = formset_factory(SelectClubArticleForm)(
request.POST or None,
form_kwargs={'user': request.user}
)
else:
article_formset = formset_factory(SelectUserArticleForm)(
request.POST or None,
form_kwargs={'user': request.user}
)
article_formset = formset_factory(SelectArticleForm)(
request.POST or None,
form_kwargs={'user': request.user, 'target_user': user}
)
if invoice_form.is_valid() and article_formset.is_valid():
new_invoice_instance = invoice_form.save(commit=False)
......@@ -199,16 +192,12 @@ def new_custom_invoice(request):
)
# Building the invocie form and the article formset
invoice_form = CustomInvoiceForm(request.POST or None)
if request.user.is_class_club:
articles_formset = formset_factory(SelectClubArticleForm)(
request.POST or None,
form_kwargs={'user': request.user}
)
else:
articles_formset = formset_factory(SelectUserArticleForm)(
request.POST or None,
form_kwargs={'user': request.user}
)
article_formset = formset_factory(SelectArticleForm)(
request.POST or None,
form_kwargs={'user': request.user, 'target_user': user}
)
if invoice_form.is_valid() and articles_formset.is_valid():
new_invoice_instance = invoice_form.save()
for art_item in articles_formset:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment