import calendar from itertools import chain from django.conf import settings from django.core.mail import EmailMultiAlternatives from django.template.loader import render_to_string from store_order.models import OrderItem, Order def year_list(current_year, num_years=5): """ Return a list of years, starting at current year ending with (current year + num_years), the default is 5 """ return [(i, i) for i in range(current_year, current_year + num_years)] def month_list(): """ Return iterated list of months """ return [(i, calendar.month_name[i]) for i in range(1, len(calendar.month_name))] def get_renewals_by_user(user): """ Returns subscriptions (OrderItems) by user Each subscription """ from accounts.subscriptions import Subscription if not user: return None ordered_items = get_subscriptions().filter( order__user=user, gift_detail__exact=None ) order_items = list(chain(ordered_items)) subscriptions = [] for order_item in order_items: if order_item.product.child().renewal: subscriptions.append( Subscription( order_item.product.title, order_item.order.date, order_item.product.child().duration, ) ) return subscriptions def get_subscriptions_by_user(user): """ Returns subscriptions (OrderItems) by user Each subscription """ from accounts.subscriptions import Subscription if not user: return None ordered_items = get_subscriptions().filter( order__user=user, gift_detail__exact=None ) gifted_items = get_subscriptions().filter(gift_detail__email__iexact=user.email) order_items = list(chain(ordered_items, gifted_items)) subscriptions = [] for order_item in order_items: if not order_item.product.child().renewal: subscriptions.append( Subscription( order_item.product.title, order_item.order.date, order_item.product.child().duration, ) ) return subscriptions def get_subscriptions(order=None): """ Subscriptions are really OrderItems with a subscription product attached. """ from catalog.models import Subscription order_items = OrderItem.objects.filter( product__subclass_type__iexact=Subscription.__name__.lower() ) if order: order_items = order_items.filter(order=order) return order_items def send_change_of_address_email( title, account_number, date_effective, date_from, date_to, old_address, new_address ): template = "storefront/change_of_address_email.html" DEFAULT_FROM_EMAIL = getattr(settings, "DEFAULT_FROM_EMAIL") NOTIFICATIONS_EMAIL = getattr(settings, "NOTIFICATIONS_EMAIL", []) subject, from_email, to = ( "Change of Address Update", DEFAULT_FROM_EMAIL, NOTIFICATIONS_EMAIL, ) data = {"old_address": old_address, "new_address": new_address} data.update({"title": title, "account_number": account_number}) data.update( {"date_effective": date_effective, "date_from": date_from, "date_to": date_to} ) text_content = render_to_string(template, dictionary=data) html_content = render_to_string(template, dictionary=data) msg = EmailMultiAlternatives(subject, text_content, from_email, to) msg.attach_alternative(html_content, "text/html") msg.send() def send_new_account_email(email, password, user, profile, site): template = "storefront/new_account_email.html" DEFAULT_FROM_EMAIL = getattr(settings, "DEFAULT_FROM_EMAIL") subject, from_email, to = ("New Account", DEFAULT_FROM_EMAIL, email) data = {"email": email, "password": password, "site": site} data.update({"first_name": user.first_name, "last_name": user.last_name}) data.update( { "company": profile.company, "address1": profile.address1, "address2": profile.address2, "city": profile.city, "region": profile.region, "phone": profile.phone, "country": profile.country, } ) text_content = render_to_string(template, dictionary=data) html_content = render_to_string(template, dictionary=data) msg = EmailMultiAlternatives(subject, text_content, from_email, [to]) msg.attach_alternative(html_content, "text/html") msg.send()