Add basic stock handling

This commit is contained in:
Nathan Chapman 2022-10-26 09:29:51 -06:00
parent 481575e968
commit 11d3b740aa
5 changed files with 42 additions and 7 deletions

View File

@ -366,6 +366,14 @@ class Order(models.Model):
objects = OrderManager()
def minus_stock(self):
for line in self.lines.all():
line.minus_stock()
def add_stock(self):
for line in self.lines.all():
line.add_stock()
def get_total_quantity(self):
return sum([line.quantity for line in self])
@ -443,6 +451,16 @@ class OrderLine(models.Model):
def quantity_unfulfilled(self):
return self.quantity - self.quantity_fulfilled
def minus_stock(self):
if self.variant.track_inventory:
self.variant.stock -= self.quantity
self.variant.save()
def add_stock(self):
if self.variant.track_inventory:
self.variant.stock += self.quantity
self.variant.save()
class TrackingNumber(models.Model):
order = models.ForeignKey(

View File

@ -11,7 +11,7 @@
{% csrf_token %}
{{form.as_p}}
<p class="form__submit">
<input class="action-button" type="submit" value="Create variant"> or <a href="{% url 'dashboard:product-detail' product.pk %}">cancel</a>
<input class="action-button" type="submit" value="Save changes"> or <a href="{% url 'dashboard:product-detail' product.pk %}">cancel</a>
</p>
</form>
</section>

View File

@ -234,6 +234,11 @@ class OrderCancelView(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
'status': OrderStatus.CANCELED
}
def form_valid(self, form):
form.instance.add_stock()
form.instance.save()
return super().form_valid(form)
def get_success_url(self):
return reverse('dashboard:order-detail', kwargs={'pk': self.object.pk})

View File

@ -10,7 +10,6 @@
<h1>Welcome to our new website!</h1>
<h4>NEW COOL LOOK, SAME GREAT COFFEE</h4>
</div>
{# Home > Category > "Coffee/Merchandise" #}
<article>
<div class="breadcrumbs">
<menu>

View File

@ -35,7 +35,7 @@ from accounts.forms import (
AddressForm as AccountAddressForm, CustomerUpdateForm
)
from core.models import (
ProductCategory, Product, ProductOption,
ProductCategory, Product, ProductVariant, ProductOption,
Order, Transaction, OrderLine, Coupon, ShippingRate
)
from core.forms import ShippingRateForm
@ -79,7 +79,12 @@ class CartAddProductView(SingleObjectMixin, FormView):
return reverse('storefront:cart-detail')
def get_form(self, form_class=None):
variants = self.get_object().variants.all()
variants = self.get_object().variants.filter(
Q(track_inventory=False) | Q(
track_inventory=True,
stock__gt=0
)
)
options = ProductOption.objects.filter(products__pk=self.get_object().pk)
if form_class is None:
form_class = self.get_form_class()
@ -168,8 +173,10 @@ class ProductCategoryDetailView(DetailView):
Prefetch(
'product_set',
queryset=Product.objects.filter(
visible_in_listings=True
)
Q(visible_in_listings=True),
Q(variants__track_inventory=False) |
Q(variants__track_inventory=True) & Q(variants__stock__gt=0)
).distinct()
)
)
return object_list
@ -192,7 +199,12 @@ class ProductDetailView(FormMixin, DetailView):
form_class = AddToCartForm
def get_form(self, form_class=None):
variants = self.object.variants.all()
variants = self.object.variants.filter(
Q(track_inventory=False) | Q(
track_inventory=True,
stock__gt=0
)
)
options = ProductOption.objects.filter(products__pk=self.object.pk)
if form_class is None:
form_class = self.get_form_class()
@ -370,6 +382,7 @@ def paypal_order_transaction_capture(request, transaction_id):
cart = Cart(request)
order = Order.objects.get(pk=request.session.get('order_id'))
order.status = OrderStatus.UNFULFILLED
order.minus_stock()
try:
coupon = Coupon.objects.get(
code=request.session.get('coupon_code')