From b2595b3629f22cb9c5c30feda84dd4c5b515e831 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Mon, 28 Sep 2015 12:34:24 +0200 Subject: [PATCH] mv payment to utils --- app/records/models.py | 62 +----------------------------------- app/records/utils.py | 74 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 61 deletions(-) create mode 100644 app/records/utils.py diff --git a/app/records/models.py b/app/records/models.py index 27b07cd..bcdaf11 100644 --- a/app/records/models.py +++ b/app/records/models.py @@ -17,7 +17,7 @@ from mezzanine.core.models import CONTENT_STATUS_DRAFT, CONTENT_STATUS_PUBLISHED from mezzanine.blog.models import BlogPost from mezzanine.utils.models import upload_to -from .utils import * +from utils import * # Auto-generated Django models with manage.py inspectdb on the old database # You'll have to do the following manually to clean this up: @@ -293,63 +293,3 @@ class Podcast(BlogPost): #visu1 = models.IntegerField() # ordre : on laisse tombé ? # published --> status / 0 --> CONTENT_STATUS_DRAFT = 1 / 1 CONTENT_STATUS_PUBLISHED = 2 - - - - -def payment_complete(sender, **kwargs): - """Performs the same logic as the code in - cartridge.shop.models.Order.complete(), but fetches the session, - order, and cart objects from storage, rather than relying on the - request object being passed in (which it isn't, since this is - triggered on PayPal IPN callback).""" - - ipn_obj = sender - print sender - if ipn_obj.custom and ipn_obj.invoice: - s_key, cart_pk = ipn_obj.custom.split(',') - SessionStore = import_module(settings.SESSION_ENGINE) \ - .SessionStore - session = SessionStore(s_key) - - try: - cart = Cart.objects.get(id=cart_pk) - try: - order = Order.objects.get( - transaction_id=ipn_obj.invoice) - print order - # order = Order.objects.get(key=s_key) - for field in order.session_fields: - if field in session: - del session[field] - try: - del session["order"] - except KeyError: - pass - - # Since we're manually changing session data outside of - # a normal request, need to force the session object to - # save after modifying its data. - session.save() - - for item in cart: - try: - variation = ProductVariation.objects.get( - sku=item.sku) - except ProductVariation.DoesNotExist: - pass - else: - variation.update_stock(item.quantity * -1) - variation.product.actions.purchased() - - code = session.get('discount_code') - if code: - DiscountCode.objects.active().filter(code=code) \ - .update(uses_remaining=F('uses_remaining') - 1) - cart.delete() - except Order.DoesNotExist: - pass - except Cart.DoesNotExist: - pass - -valid_ipn_received.connect(payment_complete) diff --git a/app/records/utils.py b/app/records/utils.py new file mode 100644 index 0000000..8442b5f --- /dev/null +++ b/app/records/utils.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from __future__ import unicode_literals + +from django.db import models +from django.utils.translation import ugettext_lazy as _ + +import datetime +import os +import fnmatch +from importlib import import_module +from mezzanine.conf import settings + +from cartridge.shop.models import Product, Category, Cart, Order, ProductVariation, DiscountCode +from paypal.standard.ipn.signals import valid_ipn_received + + +def payment_complete(sender, **kwargs): + """Performs the same logic as the code in + cartridge.shop.models.Order.complete(), but fetches the session, + order, and cart objects from storage, rather than relying on the + request object being passed in (which it isn't, since this is + triggered on PayPal IPN callback).""" + + ipn_obj = sender + print sender + if ipn_obj.custom and ipn_obj.invoice: + s_key, cart_pk = ipn_obj.custom.split(',') + SessionStore = import_module(settings.SESSION_ENGINE) \ + .SessionStore + session = SessionStore(s_key) + + try: + cart = Cart.objects.get(id=cart_pk) + try: + order = Order.objects.get( + transaction_id=ipn_obj.invoice) + print order + # order = Order.objects.get(key=s_key) + for field in order.session_fields: + if field in session: + del session[field] + try: + del session["order"] + except KeyError: + pass + + # Since we're manually changing session data outside of + # a normal request, need to force the session object to + # save after modifying its data. + session.save() + + for item in cart: + try: + variation = ProductVariation.objects.get( + sku=item.sku) + except ProductVariation.DoesNotExist: + pass + else: + variation.update_stock(item.quantity * -1) + variation.product.actions.purchased() + + code = session.get('discount_code') + if code: + DiscountCode.objects.active().filter(code=code) \ + .update(uses_remaining=F('uses_remaining') - 1) + cart.delete() + except Order.DoesNotExist: + pass + except Cart.DoesNotExist: + pass + +valid_ipn_received.connect(payment_complete) -- 2.39.5