diff --git a/cotisations/forms.py b/cotisations/forms.py index 341ccc4c..4c79fe0e 100644 --- a/cotisations/forms.py +++ b/cotisations/forms.py @@ -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): diff --git a/cotisations/models.py b/cotisations/models.py index ac601665..fe89aa5d 100644 --- a/cotisations/models.py +++ b/cotisations/models.py @@ -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): diff --git a/cotisations/views.py b/cotisations/views.py index 193f4321..82db074b 100644 --- a/cotisations/views.py +++ b/cotisations/views.py @@ -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: