Browse Source

Template tags calls form permission

This commit will make the templatetags to pull the form rendering
permission from the form object.

Also there will be two attributes set in the form when redering
purchase_permitted, and reason. This will allow a better information to
be displayed on the template.
master
andrefsp 13 years ago
parent
commit
72c3d7cf4a

+ 6
- 5
oscar/apps/basket/forms.py View File

127
             else:
127
             else:
128
                 self._create_product_fields(instance)
128
                 self._create_product_fields(instance)
129
 
129
 
130
-    def is_allowed_to_purchase(self, product, desired_qty):
131
-        return product.is_purchase_permitted(user=self.request.user,
132
-                                                quantity=desired_qty)
130
+
131
+    def is_purchase_permitted(self, user, product, desired_qty):
132
+        return product.is_purchase_permitted(user=user, quantity=desired_qty)
133
 
133
 
134
     def cleaned_options(self):
134
     def cleaned_options(self):
135
         """
135
         """
156
                                                 self.cleaned_options())
156
                                                 self.cleaned_options())
157
         desired_qty = current_qty + self.cleaned_data.get('quantity', 1)
157
         desired_qty = current_qty + self.cleaned_data.get('quantity', 1)
158
 
158
 
159
-        is_available, reason = self.is_allowed_to_purchase(product, desired_qty)
159
+        is_permitted, reason = self.is_purchase_permitted(self.request.user,
160
+                                                    product, desired_qty)
160
 
161
 
161
-        if not is_available:
162
+        if not is_permitted:
162
             raise forms.ValidationError(reason)
163
             raise forms.ValidationError(reason)
163
         return self.cleaned_data
164
         return self.cleaned_data
164
 
165
 

+ 4
- 0
oscar/templates/oscar/catalogue/partials/add_to_basket_form.html View File

3
 
3
 
4
 {% if product.is_available_to_buy %}
4
 {% if product.is_available_to_buy %}
5
     {% basket_form request product as basket_form %}
5
     {% basket_form request product as basket_form %}
6
+    {% if basket_form.purchase_permitted %}
6
     <form action="{% url basket:add %}" method="post" class="form-stacked">
7
     <form action="{% url basket:add %}" method="post" class="form-stacked">
7
         {% csrf_token %}
8
         {% csrf_token %}
8
         {% include "partials/form_fields.html" with form=basket_form %}
9
         {% include "partials/form_fields.html" with form=basket_form %}
10
 			<button type="submit" class="btn btn-large btn-primary btn-full" value="Add to basket">{% trans "Add to basket" %}</button>
11
 			<button type="submit" class="btn btn-large btn-primary btn-full" value="Add to basket">{% trans "Add to basket" %}</button>
11
         </div>
12
         </div>
12
     </form>
13
     </form>
14
+    {% else %}
15
+        {{ basket_form.reason }}
16
+    {% endif %}
13
 {% else %}
17
 {% else %}
14
 	{% if has_active_alert %}
18
 	{% if has_active_alert %}
15
 	<p>{% trans "You have an active stock alert for this product." %}</p>
19
 	<p>{% trans "You have an active stock alert for this product." %}</p>

+ 5
- 0
oscar/templates/oscar/catalogue/partials/add_to_basket_form_compact.html View File

2
 {% load i18n %}
2
 {% load i18n %}
3
 
3
 
4
 {% basket_form request product as basket_form single %}
4
 {% basket_form request product as basket_form single %}
5
+
6
+{% if basket_form.purchase_permitted %}
5
 <form action="{% url basket:add %}" method="post">
7
 <form action="{% url basket:add %}" method="post">
6
     {% csrf_token %}
8
     {% csrf_token %}
7
     {{ basket_form.as_p }}
9
     {{ basket_form.as_p }}
9
         <button type="submit" class="btn btn-primary btn-full">{% trans "Add to basket" %}</button>
11
         <button type="submit" class="btn btn-primary btn-full">{% trans "Add to basket" %}</button>
10
     {% endif %}
12
     {% endif %}
11
 </form>
13
 </form>
14
+{% else %}
15
+    {{ basket_form.reason }}
16
+{% endif %}

+ 14
- 5
oscar/templatetags/basket_tags.py View File

24
             "{%% basket_form request product_var as "
24
             "{%% basket_form request product_var as "
25
             "form_var %%}" % tokens[0])
25
             "form_var %%}" % tokens[0])
26
 
26
 
27
-    request, product_var, form_var = tokens[1], tokens[2], tokens[4]
27
+    request_var, product_var, form_var = tokens[1], tokens[2], tokens[4]
28
 
28
 
29
     quantity_type = tokens[5] if len(tokens) == 6 else QNT_MULTIPLE
29
     quantity_type = tokens[5] if len(tokens) == 6 else QNT_MULTIPLE
30
     if quantity_type not in (QNT_SINGLE, QNT_MULTIPLE):
30
     if quantity_type not in (QNT_SINGLE, QNT_MULTIPLE):
31
         raise template.TemplateSyntaxError(
31
         raise template.TemplateSyntaxError(
32
             "%r tag only accepts the following quantity types: "
32
             "%r tag only accepts the following quantity types: "
33
             "'single', 'multiple'" % tokens[0])
33
             "'single', 'multiple'" % tokens[0])
34
-    return BasketFormNode(request, product_var, form_var, quantity_type)
34
+    return BasketFormNode(request_var, product_var, form_var, quantity_type)
35
 
35
 
36
 
36
 
37
 class BasketFormNode(template.Node):
37
 class BasketFormNode(template.Node):
44
 
44
 
45
     def render(self, context):
45
     def render(self, context):
46
         try:
46
         try:
47
-            request = self.request_var.resolve(context)
47
+            self.request = self.request_var.resolve(context)
48
             product = self.product_var.resolve(context)
48
             product = self.product_var.resolve(context)
49
         except template.VariableDoesNotExist:
49
         except template.VariableDoesNotExist:
50
             return ''
50
             return ''
53
             initial = {}
53
             initial = {}
54
             if not product.is_group:
54
             if not product.is_group:
55
                 initial['product_id'] = product.id
55
                 initial['product_id'] = product.id
56
-            context[self.form_var] = self.form_class(
57
-                request, instance=product, initial=initial)
56
+            self.form = self.form_class(
57
+                self.request, instance=product, initial=initial)
58
+
59
+            user = self.request.user
60
+            is_permitted, reason = self.form.is_purchase_permitted(user,
61
+                                                                product, 1)
62
+
63
+            self.form.purchase_permitted = is_permitted
64
+            self.form.reason = reason
65
+
66
+            context[self.form_var] = self.form
58
         return ''
67
         return ''

Loading…
Cancel
Save