Esempio n. 1
0
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:
Esempio n. 2
0
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!"))
Esempio n. 3
0
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()))
Esempio n. 4
0
(
    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')

Esempio n. 5
0
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()
Esempio n. 6
0
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)")

Esempio n. 7
0
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)
Esempio n. 8
0
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):
Esempio n. 9
0
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')
Esempio n. 10
0
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': '',
Esempio n. 11
0
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
Esempio n. 12
0
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:
Esempio n. 13
0
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.
Esempio n. 14
0
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')