def handle_noargs(self, **options): # SET A DATE RANGE OF 1 DAY start_date = (datetime.now() - timedelta(days=1)) end_date = datetime.now() seen = {} items = [] # MAKE A LIST OF ORDERS THAT WERE MADE IN THE LAST DAY (PAID OR NOT, WE DON'T CARE) orders = Order.objects.filter( date_confirmed__range=(start_date, end_date), ).order_by('-date_confirmed') # UNIQUE-IFY THE LIST AGAINST EMAIL ADDRESS SO WE ONLY HAVE THE MOST RECENT ONE for o in orders: marker = o.owner.email if marker in seen: continue seen[marker] = 1 items.append(o) # NOW WE HAVE THE MOST RECENT ORDER. IF IT ISN'T PAID, AND HASNT ALREADY # HAD AN EMAIL, LET'S EMAIL THEM. sent = [] for i in items: if i.date_paid: continue if i.status == Order.STATUS_PAYMENT_FLAGGED or i.status == Order.STATUS_PAID: continue if i.reminder_email_sent == True: continue abandoned_basket(i) # send the email i.reminder_email_sent = True # update the order i.save() sent.append(i) if sent: _admin_cron_update(data=sent, subject_line="ABANDONED BASKET emails sent today")
def handle_noargs(self, **options): # SET A DATE RANGE OF 1 DAY start_date = (datetime.now() - timedelta(days=1)) end_date = datetime.now() seen = {} items = [] # MAKE A LIST OF ORDERS THAT WERE MADE IN THE LAST DAY (PAID OR NOT, WE DON'T CARE) orders = Order.objects.filter( date_confirmed__range=(start_date, end_date), ).order_by('-date_confirmed') # UNIQUE-IFY THE LIST AGAINST EMAIL ADDRESS SO WE ONLY HAVE THE MOST RECENT ONE for o in orders: marker = o.owner.email if marker in seen: continue seen[marker] = 1 items.append(o) # NOW WE HAVE THE MOST RECENT ORDER. IF IT ISN'T PAID, AND HASNT ALREADY # HAD AN EMAIL, LET'S EMAIL THEM. sent = [] for i in items: if i.date_paid: continue if i.status == Order.STATUS_PAYMENT_FLAGGED or i.status == Order.STATUS_PAID: continue if i.reminder_email_sent == True: continue abandoned_basket(i) # send the email i.reminder_email_sent = True # update the order i.save() sent.append(i) if sent: _admin_cron_update( data=sent, subject_line="ABANDONED BASKET emails sent today")
def handle_noargs(self, **options): # GET ALL CUSTOMER PACKAGES THAT HAVE BEEN SHIPPED BETWEEN # 2-4 WEEKS AGO AND HAVEN'T RECEIVED A REVIEW EMAIL YET items = [] three_weeks = (datetime.now() - timedelta(days=21)) four_weeks = (datetime.now() - timedelta(days=28)) packages = CustomerPackage.objects.filter( posted__range=(four_weeks, three_weeks), review_email_sent__isnull=True, ) for p in packages: # SEND THE EMAIL AND UPDATE THE PACKAGE product_review(p.order) p.review_email_sent = datetime.now() p.save() items.append(package) # SEND A LIST OF REVIEW EMAILS SENT TO ADMIN if items: _admin_cron_update(data=items, subject_line="REVIEW emails sent today")
def handle_noargs(self, **options): # GATHER UP A LIST OF PACKAGES SENT MORE THAN 2 MONTHS AGO # THAT HAVEN'T ALREADY RECEIVED A REORDER EMAIL two_months = (datetime.now() - timedelta(days=60)) four_months = (datetime.now() - timedelta(days=120)) packages = CustomerPackage.objects.filter( posted__range=(four_months, two_months), reorder_email_sent__isnull=True).order_by('-posted') # UNIQUIFY THE LIST BASED ON SHOPPER unique_packages = [] seen = {} for p in packages: marker = p.order.owner.email if marker in seen: continue seen[marker] = 1 unique_packages.append(p) # NOW START THE PROCESSING admin_data = [] for p in packages: # IF THE CUSTOMER HAS ALREADY ORDERED SINCE THEN, LET'S STOP THIS recent_paid_orders = Order.objects.filter(owner=p.order.owner, date_paid__isnull=False, status=Order.STATUS_PAID) if recent_paid_orders.count() > 0: continue # DO SOME FILTERING BASED ON THE ITEMS IN THEIR BASKET exclude = False for x in p.get_items(): # IF THIS UNIQUE PRODUCT ISN'T ACTIVE FOR ANY REASON if x.unique_product.is_active == False: exclude = True break # IF WE DON'T HAVE ENOUGH STOCKS items = p.get_items().filter(unique_product=x.unique_product) stocks = x.unique_product.stocks() if stocks.count() < items.count(): exclude = True break if x.unique_product.parent_product.is_active == False: exclude = True break # IF ANY OF HTE EXCLUSIONS MATCHED, THEN PASS THIS PACKAGE if exclude == True: continue # OTHERWISE, LET'S SEND THEM AN EMAIL! _reorder_email(p.order) p.reorder_email_sent = datetime.now() p.save() admin_data.append(p) if len(admin_data) > 0: _admin_cron_update( data=admin_data, subject_line="minrivertea.com - 2 month reminder emails sent")
def handle_noargs(self, **options): # GATHER UP A LIST OF PACKAGES SENT MORE THAN 2 MONTHS AGO # THAT HAVEN'T ALREADY RECEIVED A REORDER EMAIL two_months = (datetime.now() - timedelta(days=60)) four_months = (datetime.now() - timedelta(days=120)) packages = CustomerPackage.objects.filter( posted__range=(four_months, two_months), reorder_email_sent__isnull=True ).order_by('-posted') # UNIQUIFY THE LIST BASED ON SHOPPER unique_packages = [] seen = {} for p in packages: marker = p.order.owner.email if marker in seen: continue seen[marker] = 1 unique_packages.append(p) # NOW START THE PROCESSING admin_data = [] for p in packages: # IF THE CUSTOMER HAS ALREADY ORDERED SINCE THEN, LET'S STOP THIS recent_paid_orders = Order.objects.filter( owner=p.order.owner, date_paid__isnull=False, status=Order.STATUS_PAID ) if recent_paid_orders.count() > 0: continue # DO SOME FILTERING BASED ON THE ITEMS IN THEIR BASKET exclude = False for x in p.get_items(): # IF THIS UNIQUE PRODUCT ISN'T ACTIVE FOR ANY REASON if x.unique_product.is_active == False: exclude = True break # IF WE DON'T HAVE ENOUGH STOCKS items = p.get_items().filter(unique_product=x.unique_product) stocks = x.unique_product.stocks() if stocks.count() < items.count(): exclude = True break if x.unique_product.parent_product.is_active == False: exclude = True break # IF ANY OF HTE EXCLUSIONS MATCHED, THEN PASS THIS PACKAGE if exclude == True: continue # OTHERWISE, LET'S SEND THEM AN EMAIL! _reorder_email(p.order) p.reorder_email_sent = datetime.now() p.save() admin_data.append(p) if len(admin_data) > 0: _admin_cron_update(data=admin_data, subject_line="minrivertea.com - 2 month reminder emails sent")