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))
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 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.' )
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, }
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)
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.' )
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.')
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
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.')
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)
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)
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)
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
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