from django.contrib.contenttypes.models import ContentType from django.utils.translation import ugettext_lazy as _ from django.core.urlresolvers import reverse from django.conf import settings from django.contrib import messages from django.http import HttpResponseRedirect from django.db.models import Count from django.shortcuts import HttpResponse from istore.core.loading import get_classes from istore.apps.promotions.conf import PROMOTION_CLASSES SingleProduct, RawHTML, Image, MultiImage, \ AutomaticProductList, PagePromotion, \ HandPickedProductList = get_classes('promotions.models', ['SingleProduct', 'RawHTML', 'Image', 'MultiImage', 'AutomaticProductList', 'PagePromotion', 'HandPickedProductList']) SelectForm, RawHTMLForm, PagePromotionForm, HandPickedProductListForm, OrderedProductFormSet = get_classes('dashboard.promotions.forms', ['PromotionTypeSelectForm', 'RawHTMLForm', 'PagePromotionForm', 'HandPickedProductListForm', 'OrderedProductFormSet']) class ListView(generic.TemplateView): template_name = 'dashboard/promotions/promotion_list.html' def get_context_data(self): # Need to load all promotions of all types and chain them together # no pagination required for now. data = [] num_promotions = 0 for klass in PROMOTION_CLASSES:
from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404 from django.views.generic import ListView, DetailView, CreateView from django.db.models import Avg from django.contrib import messages from django.db.models import get_model from django.utils.translation import ugettext_lazy as _ from istore.core.loading import get_classes from istore.apps.catalogue.reviews.signals import review_added SignedInUserProductReviewForm, AnonymousUserProductReviewForm, VoteForm = get_classes( 'catalogue.reviews.forms', ['SignedInUserProductReviewForm', 'AnonymousUserProductReviewForm', 'VoteForm']) Vote = get_model('reviews', 'vote') class CreateProductReview(CreateView): template_name = "catalogue/reviews/review_form.html" model = get_model('reviews', 'productreview') product_model = get_model('catalogue', 'product') review_form = SignedInUserProductReviewForm anonymous_review_form = AnonymousUserProductReviewForm view_signal = review_added def get(self, request, *args, **kwargs): if request.user.is_authenticated(): product = self.get_product() try: self.model.objects.get(user=request.user, product=product) messages.warning( self.request, _("You have already reviewed this product!"))
from django.utils import simplejson as json from django.db.models import get_model from django.http import HttpResponseRedirect, Http404, HttpResponse from django.views.generic import FormView, View from django.utils.translation import ugettext_lazy as _ from django.core.exceptions import ObjectDoesNotExist from extra_views import ModelFormSetView from istore.core import ajax from istore.apps.basket.signals import basket_addition, voucher_addition from istore.templatetags.currency_filters import currency from istore.core.loading import get_class, get_classes Applicator = get_class('offer.utils', 'Applicator') (BasketLineForm, AddToBasketForm, BasketVoucherForm, SavedLineFormSet, SavedLineForm, ProductSelectionForm) = get_classes( 'basket.forms', ('BasketLineForm', 'AddToBasketForm', 'BasketVoucherForm', 'SavedLineFormSet', 'SavedLineForm', 'ProductSelectionForm')) Repository = get_class('shipping.repository', ('Repository')) def get_messages(basket, offers_before, offers_after, include_buttons=True): """ Return the messages about offer changes """ # Look for changes in offers offers_lost = set(offers_before.keys()).difference( set(offers_after.keys())) offers_gained = set(offers_after.keys()).difference( set(offers_before.keys()))
( ProductForm, ProductSearchForm, CategoryForm, StockRecordForm, StockAlertSearchForm, ProductCategoryFormSet, ProductImageFormSet, ProductRecommendationFormSet, ) = get_classes( "dashboard.catalogue.forms", ( "ProductForm", "ProductSearchForm", "CategoryForm", "StockRecordForm", "StockAlertSearchForm", "ProductCategoryFormSet", "ProductImageFormSet", "ProductRecommendationFormSet", ), ) Product = get_model("catalogue", "Product") Category = get_model("catalogue", "Category") ProductImage = get_model("catalogue", "ProductImage") ProductCategory = get_model("catalogue", "ProductCategory") ProductClass = get_model("catalogue", "ProductClass") # StockRecord = get_model('partner', 'StockRecord') # StockAlert = get_model('partner', 'StockAlert')
from istore.core.loading import get_classes SingleProduct, RawHTML, Image, MultiImage, PagePromotion, AutomaticProductList, HandPickedProductList = get_classes( "promotions.models", [ "SingleProduct", "RawHTML", "Image", "MultiImage", "PagePromotion", "AutomaticProductList", "HandPickedProductList", ], ) def get_promotion_classes(): return (RawHTML, Image, SingleProduct, AutomaticProductList, HandPickedProductList) PROMOTION_CLASSES = get_promotion_classes()
from django.dispatch import receiver from django.db import IntegrityError import logging from istore.core.loading import get_class, get_classes UserSearch, UserRecord, ProductRecord, UserProductView = get_classes( 'analytics.models', ['UserSearch', 'UserRecord', 'ProductRecord', 'UserProductView']) product_viewed, product_search = get_classes('catalogue.signals', ['product_viewed', 'product_search']) basket_addition = get_class('basket.signals', 'basket_addition') order_placed = get_class('order.signals', 'order_placed') # Helpers logger = logging.getLogger('istore.analytics') def _record_product_view(product): try: record, __ = ProductRecord.objects.get_or_create(product=product) record.num_views += 1 record.save() except IntegrityError: # get_or_create sometimes fails due to MySQL's weird transactions, fail # silently logger.error("IntegrityError on ProductRecord.objects." "get_or_create(product=product)")
from django.core.urlresolvers import reverse from django.contrib import messages from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404 from django.utils.translation import ugettext_lazy as _ from istore.core.loading import get_classes, get_class ConditionalOffer = get_model('offer', 'ConditionalOffer') Condition = get_model('offer', 'Condition') Range = get_model('offer', 'Range') Product = get_model('catalogue', 'Product') OrderDiscount = get_model('order', 'OrderDiscount') Benefit = get_model('offer', 'Benefit') MetaDataForm, ConditionForm, BenefitForm, RestrictionsForm, OfferSearchForm = get_classes( 'dashboard.offers.forms', [ 'MetaDataForm', 'ConditionForm', 'BenefitForm', 'RestrictionsForm', 'OfferSearchForm']) OrderDiscountCSVFormatter = get_class( 'dashboard.offers.reports', 'OrderDiscountCSVFormatter') class OfferListView(ListView): model = ConditionalOffer context_object_name = 'offers' template_name = 'dashboard/offers/offer_list.html' form_class = OfferSearchForm def get_queryset(self): qs = self.model._default_manager.filter( offer_type=ConditionalOffer.SITE) qs = self.sort_queryset(qs)
from django.core import exceptions from django.core.urlresolvers import reverse from django.db.models.loading import get_model from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404 from django.template.loader import render_to_string from django.utils.translation import ungettext, ugettext_lazy as _ from django.views.generic import (ListView, DeleteView, CreateView, UpdateView) from istore.views.generic import BulkEditMixin from istore.core.loading import get_classes Range = get_model('offer', 'Range') Product = get_model('catalogue', 'Product') RangeForm, RangeProductForm = get_classes('dashboard.ranges.forms', ['RangeForm', 'RangeProductForm']) RangeProductFileUpload = get_model('ranges', 'RangeProductFileUpload') class RangeListView(ListView): model = Range context_object_name = 'ranges' template_name = 'dashboard/ranges/range_list.html' class RangeCreateView(CreateView): model = Range template_name = 'dashboard/ranges/range_form.html' form_class = RangeForm def get_success_url(self):
import logging from django.http import Http404, HttpResponseRedirect, HttpResponseBadRequest from django.core.urlresolvers import reverse from django.contrib import messages from django.contrib.auth import login from django.db.models import get_model from django.utils.translation import ugettext as _ from django.views.generic import DetailView, TemplateView, FormView, \ DeleteView, UpdateView, CreateView from istore.apps.shipping.methods import NoShippingRequired from istore.core.loading import get_class, get_classes ShippingAddressForm, GatewayForm = get_classes('checkout.forms', ['ShippingAddressForm', 'GatewayForm']) OrderTotalCalculator = get_class('checkout.calculators', 'OrderTotalCalculator') CheckoutSessionData = get_class('checkout.utils', 'CheckoutSessionData') pre_payment, post_payment = get_classes('checkout.signals', ['pre_payment', 'post_payment']) OrderNumberGenerator, OrderCreator = get_classes('order.utils', ['OrderNumberGenerator', 'OrderCreator']) UserAddressForm = get_class('address.forms', 'UserAddressForm') Repository = get_class('shipping.repository', 'Repository') AccountAuthView = get_class('customer.views', 'AccountAuthView') # RedirectRequired, UnableToTakePayment, PaymentError = get_classes( # 'payment.exceptions', ['RedirectRequired', 'UnableToTakePayment', 'PaymentError']) UnableToPlaceOrder = get_class('order.exceptions', 'UnableToPlaceOrder') OrderPlacementMixin = get_class('checkout.mixins', 'OrderPlacementMixin') CheckoutSessionMixin = get_class('checkout.session', 'CheckoutSessionMixin') Order = get_model('order', 'Order') ShippingAddress = get_model('order', 'ShippingAddress') CommunicationEvent = get_model('order', 'CommunicationEvent')
from django.db.models import Q, get_model from django.contrib import messages from django.utils.translation import ugettext_lazy as _ from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse from django.views.generic import ListView, DetailView, DeleteView, UpdateView from istore.views.generic import BulkEditMixin from istore.core.compat import get_user_model from istore.core.loading import get_classes UserSearchForm, ProductAlertSearchForm, ProductAlertUpdateForm = get_classes( 'dashboard.users.forms', ('UserSearchForm', 'ProductAlertSearchForm', 'ProductAlertUpdateForm')) ProductAlert = get_model('customer', 'ProductAlert') User = get_user_model() class IndexView(ListView, BulkEditMixin): template_name = 'dashboard/users/index.html' paginate_by = 25 model = User actions = ('make_active', 'make_inactive', ) current_view = 'dashboard:users-index' form_class = UserSearchForm desc_template = _('%(main_filter)s %(email_filter)s %(name_filter)s') description = '' def get_queryset(self): queryset = self.model.objects.all().order_by('-date_joined') self.desc_ctx = { 'main_filter': _('All users'), 'email_filter': '',
from django import forms from django.conf import settings from django.forms.models import inlineformset_factory from django.utils.translation import ugettext_lazy as _ from istore.forms.fields import ExtendedURLField from istore.core.loading import get_classes from istore.apps.promotions.conf import PROMOTION_CLASSES RawHTML, SingleProduct, PagePromotion, HandPickedProductList, OrderedProduct = get_classes('promotions.models', ['RawHTML', 'SingleProduct', 'PagePromotion', 'HandPickedProductList', 'OrderedProduct']) class PromotionTypeSelectForm(forms.Form): choices = [] for klass in PROMOTION_CLASSES: choices.append((klass.classname(), klass._meta.verbose_name)) promotion_type = forms.ChoiceField(choices=tuple(choices), label=_("Promotion type")) class RawHTMLForm(forms.ModelForm): class Meta: model = RawHTML exclude = ('display_type',) class HandPickedProductListForm(forms.ModelForm): class Meta: model = HandPickedProductList
from istore.core.loading import get_class, get_classes OrderReportGenerator = get_class("order.reports", "OrderReportGenerator") ProductReportGenerator, UserReportGenerator = get_classes( "analytics.reports", ["ProductReportGenerator", "UserReportGenerator"] ) OpenBasketReportGenerator, SubmittedBasketReportGenerator = get_classes( "basket.reports", ["OpenBasketReportGenerator", "SubmittedBasketReportGenerator"] ) OfferReportGenerator = get_class("offer.reports", "OfferReportGenerator") VoucherReportGenerator = get_class("voucher.reports", "VoucherReportGenerator") class GeneratorRepository(object): generators = [ OrderReportGenerator, ProductReportGenerator, UserReportGenerator, OpenBasketReportGenerator, SubmittedBasketReportGenerator, VoucherReportGenerator, OfferReportGenerator, ] def get_report_generators(self): return self.generators def get_generator(self, code): for generator in self.generators: if generator.code == code:
from django.contrib import messages from django.contrib.auth.models import User from django.core.urlresolvers import reverse_lazy, reverse from django.db.models import get_model from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404 from django.utils.translation import ugettext_lazy as _ from django.template.loader import render_to_string from django.views import generic from istore.apps.dashboard.partners.forms import UserEmailForm, ExistingUserForm, NewUserForm from istore.core.loading import get_classes Partner = get_model('partner', 'Partner') PartnerSearchForm, PartnerCreateForm = get_classes( 'dashboard.partners.forms', ['PartnerSearchForm', 'PartnerCreateForm']) class PartnerListView(generic.ListView): model = Partner context_object_name = 'partners' template_name = 'dashboard/partners/partner_list.html' form_class = PartnerSearchForm def get_queryset(self): qs = self.model._default_manager.all() qs = self.sort_queryset(qs) self.description = _("All partners") # We track whether the queryset is filtered to determine whether we # show the search form 'reset' button.
from django.core.urlresolvers import reverse from django.core.exceptions import ObjectDoesNotExist from django.http import HttpResponseRedirect, Http404 from django.contrib import messages from django.utils.translation import ugettext as _ from django.contrib.auth import (authenticate, login as auth_login, logout as auth_logout) from django.contrib.auth.forms import PasswordChangeForm from django.contrib.sites.models import get_current_site from django.conf import settings from django.db.models import get_model from istore.views.generic import PostActionMixin from istore.apps.customer.utils import get_password_reset_url from istore.core.loading import get_class, get_profile_class, get_classes from istore.core.compat import get_user_model Dispatcher = get_class('customer.utils', 'Dispatcher') EmailAuthenticationForm, EmailUserCreationForm, SearchByDateRangeForm = get_classes( 'customer.forms', ['EmailAuthenticationForm', 'EmailUserCreationForm', 'SearchByDateRangeForm']) ProfileForm = get_class('customer.forms', 'ProfileForm') UserAddressForm = get_class('address.forms', 'UserAddressForm') user_registered = get_class('customer.signals', 'user_registered') Order = get_model('order', 'Order') Line = get_model('basket', 'Line') Basket = get_model('basket', 'Basket') UserAddress = get_model('address', 'UserAddress') Email = get_model('customer', 'Email') UserAddress = get_model('address', 'UserAddress') CommunicationEventType = get_model('customer', 'CommunicationEventType') ProductAlert = get_model('customer', 'ProductAlert')