Exemple #1
0
def form(request):
    if request.method == "POST":
        form = ContactForm(request.POST)
        if form.is_valid():
            new_data = form.cleaned_data
            t = loader.get_template('email/contact_us.txt')
            c = Context({
                'request_type': new_data['inquiry'],
                'name': new_data['name'],
                'email': new_data['sender'],    
                'request_text': new_data['contents'] })
            subject = new_data['subject']
            shop_config = Config.get_shop_config()
            shop_email = shop_config.store_email
            if not shop_email:
                log.warn('No email address configured for the shop.  Using admin settings.')
                shop_email = settings.ADMINS[0][1]
            try:
                body = t.render(c)
                send_mail(subject, body, shop_email,
                         [shop_email], fail_silently=False)
            except SocketError, e:
                if settings.DEBUG:
                    log.error('Error sending mail: %s' % e)
                    log.warn('Ignoring email error, since you are running in DEBUG mode.  Email was:\nTo:%s\nSubject: %s\n---\n%s', shop_email, subject, body)
                else:
                    log.fatal('Error sending mail: %s' % e)
                    raise IOError('Could not send email, please check to make sure your email settings are correct, and that you are not being blocked by your ISP.')                
            
            return http.HttpResponseRedirect('%s/contact/thankyou/' % (settings.SHOP_BASE))
Exemple #2
0
def displayDoc(request, id, doc):
    # Create the HttpResponse object with the appropriate PDF headers for an invoice or a packing slip
    order = get_object_or_404(Order, pk=id)

    if doc == "invoice":
        filename = "mystore-invoice.pdf"
        template = "invoice.rml"
    elif doc == "packingslip":
        filename = "mystore-packingslip.pdf"
        template = "packing-slip.rml"
    elif doc == "shippinglabel":
        filename = "mystore-shippinglabel.pdf"
        template = "shipping-label.rml"
    else:
        return HttpResponseRedirect('/admin')
    response = HttpResponse(mimetype='application/pdf')
    response['Content-Disposition'] = 'attachment; filename=%s' % filename
    shopDetails = Config.get_shop_config()
    t = loader.get_template('pdf/%s' % template)
    templatedir = os.path.normpath(settings.TEMPLATE_DIRS[0])
    c = Context({
        'filename': filename,
        'templateDir': templatedir,
        'shopDetails': shopDetails,
        'order': order
    })
    pdf = trml2pdf.parseString(smart_str(t.render(c)))
    response.write(pdf)
    return response
Exemple #3
0
def send_welcome_email(email, first_name, last_name):
    t = loader.get_template('registration/welcome.txt')
    shop_config = Config.get_shop_config()
    shop_email = shop_config.store_email
    subject = ugettext("Welcome to %s") % shop_config.store_name
    c = Context({
        'first_name': first_name,
        'last_name': last_name,
        'company_name': shop_config.store_name,
        'site_url': shop_config.site.domain,
    })
    body = t.render(c)
    try:
        send_mail(subject, body, shop_email, [email], fail_silently=False)
    except SocketError, e:
        if settings.DEBUG:
            log.error('Error sending mail: %s' % e)
            log.warn(
                'Ignoring email error, since you are running in DEBUG mode.  Email was:\nTo:%s\nSubject: %s\n---\n%s',
                email, subject, body)
        else:
            log.fatal('Error sending mail: %s' % e)
            raise IOError(
                'Could not send email, please check to make sure your email settings are correct, and that you are not being blocked by your ISP.'
            )
Exemple #4
0
def displayDoc(request, id, doc):
    # Create the HttpResponse object with the appropriate PDF headers for an invoice or a packing slip
    order = get_object_or_404(Order, pk=id)

    if doc == "invoice":
        filename = "mystore-invoice.pdf"
        template = "invoice.rml"
    elif doc == "packingslip":
        filename = "mystore-packingslip.pdf"
        template = "packing-slip.rml"
    elif doc == "shippinglabel":
        filename = "mystore-shippinglabel.pdf"
        template = "shipping-label.rml"
    else:
        return HttpResponseRedirect('/admin')
    response = HttpResponse(mimetype='application/pdf')
    response['Content-Disposition'] = 'attachment; filename=%s' % filename
    shopDetails = Config.get_shop_config()
    t = loader.get_template('pdf/%s' % template)
    templatedir = os.path.normpath(settings.TEMPLATE_DIRS[0])
    c = Context({
                'filename' : filename,
                'templateDir' : templatedir,
                'shopDetails' : shopDetails,
                'order' : order
                })
    pdf = trml2pdf.parseString(smart_str(t.render(c)))
    response.write(pdf)
    return response
def settings(request):
    shop_config = Config.get_shop_config()
    cart = Cart.get_session_cart(request)

    all_categories = Category.objects.all()

    # handle secure requests
    media_url = site_settings.MEDIA_URL
    secure = request_is_secure(request)
    if secure:
        try:
            media_url = site_settings.MEDIA_SECURE_URL
        except AttributeError:
            media_url = media_url.replace("http://", "https://")

    return {
        "shop_base": site_settings.SHOP_BASE,
        "shop": shop_config,
        "shop_name": shop_config.store_name,
        "media_url": media_url,
        "cart_count": cart.numItems,
        "cart": cart,
        "categories": all_categories,
        "is_secure": secure,
        "request": request,
    }
def settings(request):
    shop_config = Config.get_shop_config()
    cart = Cart.get_session_cart(request)

    all_categories = Category.objects.all()

    # handle secure requests
    media_url = site_settings.MEDIA_URL
    secure = request_is_secure(request)
    if secure:
        try:
            media_url = site_settings.MEDIA_SECURE_URL
        except AttributeError:
            media_url = media_url.replace('http://', 'https://')

    return {
        'shop_base': site_settings.SHOP_BASE,
        'shop': shop_config,
        'shop_name': shop_config.store_name,
        'media_url': media_url,
        'cart_count': cart.numItems,
        'cart': cart,
        'categories': all_categories,
        'is_secure': secure,
        'request': request,
    }
Exemple #7
0
    def test_new_account(self):
        """
        Validate account creation process
        """
        from satchmo.shop.models import Config
        shop_config = Config.get_shop_config()
        subject = u"Welcome to %s" % shop_config.store_name
        response = self.client.get('/accounts/register/')
        self.assertContains(response,
                            "Please Enter Your Account Information",
                            count=1,
                            status_code=200)
        response = self.client.post(
            '/accounts/register/', {
                'email': '*****@*****.**',
                'first_name': 'Paul',
                'last_name': 'Test',
                'password': '******',
                'password2': 'pass1',
                'newsletter': '0'
            })
        self.assertRedirects(response,
                             domain + '/accounts/register/complete/',
                             status_code=302,
                             target_status_code=200)
        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(mail.outbox[0].subject, subject)

        response = self.client.get('/accounts/')
        self.assertContains(response,
                            "Welcome, Paul Test.",
                            count=1,
                            status_code=200)
Exemple #8
0
def one_step(request):
    payment_module = config_get_group('PAYMENT_AUTOSUCCESS')

    #First verify that the customer exists
    contact = Contact.from_request(request, create=False)
    if contact is None:
        url = lookup_url(payment_module, 'satchmo_checkout-step1')
        return http.HttpResponseRedirect(url)
    #Verify we still have items in the cart
    if request.session.get('cart', False):
        tempCart = Cart.objects.get(id=request.session['cart'])
        if tempCart.numItems == 0:
            template = lookup_template(payment_module,
                                       'checkout/empty_cart.html')
            return render_to_response(template, RequestContext(request))
    else:
        template = lookup_template(payment_module, 'checkout/empty_cart.html')
        return render_to_response(template, RequestContext(request))

    # Create a new order
    newOrder = Order(contact=contact)
    pay_ship_save(newOrder, tempCart, contact, shipping="", discount="")

    request.session['orderID'] = newOrder.id

    newOrder.add_status(status='Pending', notes="Order successfully submitted")

    orderpayment = OrderPayment(order=newOrder,
                                amount=newOrder.balance,
                                payment=payment_module.KEY.value)
    orderpayment.save()

    #Now, send a confirmation email
    if payment_module['EMAIL'].value:
        shop_config = Config.get_shop_config()
        shop_email = shop_config.store_email
        shop_name = shop_config.store_name
        t = loader.get_template('email/order_complete.txt')
        c = Context({'order': newOrder, 'shop_name': shop_name})
        subject = "Thank you for your order from %s" % shop_name

        try:
            email = orderToProcess.contact.email
            body = t.render(c)
            send_mail(subject, body, shop_email, [email], fail_silently=False)
        except SocketError, e:
            if settings.DEBUG:
                log.error('Error sending mail: %s' % e)
                log.warn(
                    'Ignoring email error, since you are running in DEBUG mode.  Email was:\nTo:%s\nSubject: %s\n---\n%s',
                    email, subject, body)
            else:
                log.fatal('Error sending mail: %s' % e)
                raise IOError(
                    'Could not send email, please check to make sure your email settings are correct, and that you are not being blocked by your ISP.'
                )
Exemple #9
0
def one_step(request):
    payment_module = config_get_group('PAYMENT_AUTOSUCCESS')

    #First verify that the customer exists
    contact = Contact.from_request(request, create=False)
    if contact is None:
        url = lookup_url(payment_module, 'satchmo_checkout-step1')
        return http.HttpResponseRedirect(url)
    #Verify we still have items in the cart
    if request.session.get('cart', False):
        tempCart = Cart.objects.get(id=request.session['cart'])
        if tempCart.numItems == 0:
            template = lookup_template(payment_module, 'checkout/empty_cart.html')
            return render_to_response(template, RequestContext(request))
    else:
        template = lookup_template(payment_module, 'checkout/empty_cart.html')
        return render_to_response(template, RequestContext(request))

    # Create a new order
    newOrder = Order(contact=contact)
    pay_ship_save(newOrder, tempCart, contact,
        shipping="", discount="")
        
    request.session['orderID'] = newOrder.id
        
    newOrder.add_status(status='Pending', notes = "Order successfully submitted")

    orderpayment = OrderPayment(order=newOrder, amount=newOrder.balance, payment=payment_module.KEY.value)
    orderpayment.save()

    #Now, send a confirmation email
    if payment_module['EMAIL'].value:
        shop_config = Config.get_shop_config()
        shop_email = shop_config.store_email
        shop_name = shop_config.store_name
        t = loader.get_template('email/order_complete.txt')
        c = Context({'order': newOrder,
                      'shop_name': shop_name})
        subject = "Thank you for your order from %s" % shop_name
             
        try:
            email = orderToProcess.contact.email
            body = t.render(c)
            send_mail(subject, body, shop_email,
                      [email], fail_silently=False)
        except SocketError, e:
            if settings.DEBUG:
                log.error('Error sending mail: %s' % e)
                log.warn('Ignoring email error, since you are running in DEBUG mode.  Email was:\nTo:%s\nSubject: %s\n---\n%s', email, subject, body)
            else:
                log.fatal('Error sending mail: %s' % e)
                raise IOError('Could not send email, please check to make sure your email settings are correct, and that you are not being blocked by your ISP.')    
Exemple #10
0
    def __init__(self, countries, areas, *args, **kwargs):
        super(ContactInfoForm, self).__init__(*args, **kwargs)
        if areas is not None and countries is None:
            self.fields['state'] = forms.ChoiceField(choices=areas, initial=selection)
            self.fields['ship_state'] = forms.ChoiceField(choices=areas, initial=selection, required=False)
        if countries is not None:
            self.fields['country'] = forms.ChoiceField(choices=countries)

        shop_config = Config.get_shop_config()
        self._local_only = shop_config.in_country_only
        country = shop_config.sales_country
        if not country:
            self._default_country = 'US'
        else:
            self._default_country = country.iso2_code
Exemple #11
0
def send_welcome_email(email, first_name, last_name):
    t = loader.get_template('registration/welcome.txt')
    shop_config = Config.get_shop_config()
    shop_email = shop_config.store_email
    subject = ugettext("Welcome to %s") % shop_config.store_name
    c = Context({
        'first_name': first_name,
        'last_name': last_name,
        'company_name': shop_config.store_name,
        'site_url': shop_config.site.domain,
    })
    body = t.render(c)
    try:
        send_mail(subject, body, shop_email, [email], fail_silently=False)
    except SocketError, e:
        if settings.DEBUG:
            log.error('Error sending mail: %s' % e)
            log.warn('Ignoring email error, since you are running in DEBUG mode.  Email was:\nTo:%s\nSubject: %s\n---\n%s', email, subject, body)
        else:
            log.fatal('Error sending mail: %s' % e)
            raise IOError('Could not send email, please check to make sure your email settings are correct, and that you are not being blocked by your ISP.')
Exemple #12
0
    def test_new_account(self):
        """
        Validate account creation process
        """
        from satchmo.shop.models import Config
        shop_config = Config.get_shop_config()
        subject = u"Welcome to %s" % shop_config.store_name
        response = self.client.get('/accounts/register/')
        self.assertContains(response, "Please Enter Your Account Information",
                            count=1, status_code=200)
        response = self.client.post('/accounts/register/', {'email': '*****@*****.**',
                                    'first_name': 'Paul',
                                    'last_name' : 'Test',
                                    'password' : 'pass1',
                                    'password2' : 'pass1',
                                    'newsletter': '0'})
        self.assertRedirects(response, domain +'/accounts/register/complete/', status_code=302, target_status_code=200)
        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(mail.outbox[0].subject, subject)

        response = self.client.get('/accounts/')
        self.assertContains(response, "Welcome, Paul Test.", count=1, status_code=200)
Exemple #13
0
def get_area_country_options(request):
    """Return form data for area and country selection in address forms
    """
    shop_config = Config.get_shop_config()
    local_only = shop_config.in_country_only
    default_iso2 = shop_config.sales_country
    if (default_iso2):
        default_iso2 = default_iso2.iso2_code
    else:
        default_iso2 = 'US'

    if local_only:
        iso2 = default_iso2
    else:
        iso2 = request.GET.get('iso2', default_iso2)

    default_country = Country.objects.get(iso2_code=iso2)

    options = {}
    areas = countries = None

    area_choices = default_country.adminarea_set.all()
    if area_choices:
        areas = [('', selection)]
        for area in area_choices:
            value_to_choose = (area.abbrev or area.name, area.name)
            areas.append(value_to_choose)

    if not local_only:
        options['country'] = default_country.iso2_code
        countries = [(default_country.iso2_code, default_country.name)]
        for country in Country.objects.filter(active=True):
            country_to_choose = (country.iso2_code, country.printable_name)
            #Make sure the default only shows up once
            if country.iso2_code != default_country.iso2_code:
                countries.append(country_to_choose)

    return (areas, countries, local_only and default_country or None)
Exemple #14
0
def get_area_country_options(request):
    """Return form data for area and country selection in address forms
    """
    shop_config = Config.get_shop_config()
    local_only = shop_config.in_country_only
    default_iso2 = shop_config.sales_country
    if (default_iso2):
        default_iso2 = default_iso2.iso2_code
    else:
        default_iso2 = 'US'

    if local_only:
        iso2 = default_iso2
    else:
        iso2 = request.GET.get('iso2', default_iso2)

    default_country = Country.objects.get(iso2_code=iso2)

    options = {}
    areas = countries = None

    area_choices = default_country.adminarea_set.all()
    if area_choices:
        areas = [('', selection)]
        for area in area_choices:
            value_to_choose = (area.abbrev or area.name, area.name)
            areas.append(value_to_choose)

    if not local_only:
        options['country'] = default_country.iso2_code
        countries = [(default_country.iso2_code, default_country.name)]
        for country in Country.objects.filter(active=True):
            country_to_choose = (country.iso2_code, country.printable_name)
            #Make sure the default only shows up once
            if country.iso2_code != default_country.iso2_code:
                countries.append(country_to_choose)

    return (areas, countries, local_only and default_country or None)
Exemple #15
0
def credit_confirm_info(request, payment_module):
    """A view which shows and requires credit card selection"""
    if not request.session.get('orderID'):
        url = urlresolvers.reverse('satchmo_checkout-step1')
        return HttpResponseRedirect(url)

    if request.session.get('cart'):
        tempCart = Cart.objects.get(id=request.session['cart'])
        if tempCart.numItems == 0:
            template = lookup_template(payment_module,
                                       'checkout/empty_cart.html')
            return render_to_response(template, RequestContext(request))
    else:
        template = lookup_template(payment_module, 'checkout/empty_cart.html')
        return render_to_response(template, RequestContext(request))

    orderToProcess = Order.objects.get(id=request.session['orderID'])

    # Check if the order is still valid
    if not orderToProcess.validate(request):
        context = RequestContext(
            request, {'message': _('Your order is no longer valid.')})
        return render_to_response('shop_404.html', context)

    if request.POST:
        #Do the credit card processing here & if successful, empty the cart and update the status
        credit_processor = payment_module.MODULE.load_module('processor')
        processor = credit_processor.PaymentProcessor(payment_module)
        processor.prepareData(orderToProcess)
        results, reason_code, msg = processor.process()

        log.info(
            """Processing credit card transaction with %s
Order #%i
Results=%s
Response=%s
Reason=%s""", payment_module.key, orderToProcess.id, results, reason_code, msg)

        if results:
            tempCart.empty()
            #Update status

            orderToProcess.add_status(status='Pending',
                                      notes="Order successfully submitted")

            #Now, send a confirmation email
            shop_config = Config.get_shop_config()
            shop_email = shop_config.store_email
            shop_name = shop_config.store_name
            t = loader.get_template('email/order_complete.txt')
            c = Context({'order': orderToProcess, 'shop_name': shop_name})
            subject = "Thank you for your order from %s" % shop_name

            try:
                email = orderToProcess.contact.email
                body = t.render(c)
                send_mail(subject,
                          body,
                          shop_email, [email],
                          fail_silently=False)
            except SocketError, e:
                if settings.DEBUG:
                    log.error('Error sending mail: %s' % e)
                    log.warn(
                        'Ignoring email error, since you are running in DEBUG mode.  Email was:\nTo:%s\nSubject: %s\n---\n%s',
                        email, subject, body)
                else:
                    log.fatal('Error sending mail: %s' % e)
                    raise IOError(
                        'Could not send email, please check to make sure your email settings are correct, and that you are not being blocked by your ISP.'
                    )

            #Redirect to the success page
            url = lookup_url(payment_module, 'satchmo_checkout-success')
            return HttpResponseRedirect(url)
        #Since we're not successful, let the user know via the confirmation page
        else:
            errors = msg
Exemple #16
0
def credit_confirm_info(request, payment_module):
    """A view which shows and requires credit card selection"""
    if not request.session.get('orderID'):
        url = urlresolvers.reverse('satchmo_checkout-step1')
        return HttpResponseRedirect(url)

    if request.session.get('cart'):
        tempCart = Cart.objects.get(id=request.session['cart'])
        if tempCart.numItems == 0:
            template = lookup_template(payment_module, 'checkout/empty_cart.html')
            return render_to_response(template, RequestContext(request))
    else:
        template = lookup_template(payment_module, 'checkout/empty_cart.html')
        return render_to_response(template, RequestContext(request))

    orderToProcess = Order.objects.get(id=request.session['orderID'])

    # Check if the order is still valid
    if not orderToProcess.validate(request):
        context = RequestContext(request,
            {'message': _('Your order is no longer valid.')})
        return render_to_response('shop_404.html', context)

    if request.POST:
        #Do the credit card processing here & if successful, empty the cart and update the status
        credit_processor = payment_module.MODULE.load_module('processor')
        processor = credit_processor.PaymentProcessor(payment_module)
        processor.prepareData(orderToProcess)
        results, reason_code, msg = processor.process()
        
        log.info("""Processing credit card transaction with %s
Order #%i
Results=%s
Response=%s
Reason=%s""", payment_module.key, orderToProcess.id, results, reason_code, msg)

        if results:
            tempCart.empty()
            #Update status
            
            orderToProcess.add_status(status='Pending', notes = "Order successfully submitted")

            #Now, send a confirmation email
            shop_config = Config.get_shop_config()
            shop_email = shop_config.store_email
            shop_name = shop_config.store_name
            t = loader.get_template('email/order_complete.txt')
            c = Context({'order': orderToProcess,
                          'shop_name': shop_name})
            subject = "Thank you for your order from %s" % shop_name
                     
            try:
                email = orderToProcess.contact.email
                body = t.render(c)
                send_mail(subject, body, shop_email,
                          [email], fail_silently=False)
            except SocketError, e:
                if settings.DEBUG:
                    log.error('Error sending mail: %s' % e)
                    log.warn('Ignoring email error, since you are running in DEBUG mode.  Email was:\nTo:%s\nSubject: %s\n---\n%s', email, subject, body)
                else:
                    log.fatal('Error sending mail: %s' % e)
                    raise IOError('Could not send email, please check to make sure your email settings are correct, and that you are not being blocked by your ISP.')    
            
            #Redirect to the success page
            url = lookup_url(payment_module, 'satchmo_checkout-success')
            return HttpResponseRedirect(url)
        #Since we're not successful, let the user know via the confirmation page
        else:
            errors = msg