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")
예제 #3
0
 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")      
예제 #4
0
    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")
예제 #5
0
    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")