Sunday Night Coupons

Purpose

The purpose of this campaign is to send out coupons every Sunday night to customers who have ordered in the past week. (You'll see references to 8 days below. I added a day to give a little overlap.)

Step Layout

These are the steps laid out for you. The logic steps are detailed below.



IsSundayNight? Logic

This logic step does a simple check to see if the current time is between 6 PM and Midnight on a Sunday night.

#if( $dateManager.isCurrentTimeBetween("Sun", "18:00", "Sun", "23:59"))
   #set( $result = 'OrderedInLast8Days?' )
#else
   #set( $result = 'Pause1Hour' )
#end

OrderedInLast8Days?

There's two ways to determine if a customer has ordered in the past 8 days.

The Long Painful Way
$logger.log($customer.orders.size())
#set( $hasOrdered = false )

#set( $sevenDaysAgo = $dateManager.currentTime())
$sevenDaysAgo.add("day", -7)
$logger.log($sevenDaysAgo.format("MM/dd/yyyy"))

#foreach( $order in $customer.orders )
   $logger.log($order.orderId)
   $logger.log($order.paymentDate.time)

   #if($order.paymentDate.time > $sevenDaysAgo.timeInMillis)
      $logger.log('order was within 8 days')
      #set( $hasOrdered = true )
   #else
      $logger.log('order was NOT within 8 days')
   #end
#end

#if($hasOrdered)
   #set( $result = 'DidOrder' )
#else
   #set( $result = 'DidNotOrder' )
#end



Discussion
  • Line 1: A log statement to see if this customer has placed any orders. A good thing to know, yes?
  • Line 2: create a flag variable and set it to false.
  • Line 4: I need a variable to check the payment dates against. So initialize a date variable. At first, it points to 'now'.
  • Line 5: move the date variable back 7 days
  • Line 14: If the payment date was within the last seven days, set the flag variable to true. (Could probably break out of the for-loop here...)
  • Line 20: If they have ordered, direct them to the 'DidOrder' step, otherwise, send them to the 'DidNotOrder' step.

The code block above makes liberal use of the $logger.log() function. This will print out any velocity object. This is an invaluable tool for developing logic blocks. It won't hurt to keep it in place for production runs.


The Better Way
#if($customer.hasPurchasedInLastDays(8))
   #set( $result = 'DidOrder' )
#else
   #set( $result = 'DidNotOrder' )
#end


Goto Logic Blocks

#set( $result = '_GOTO_:IsItSundayNight?' )


The goto blocks are nothing more than a simple GOTO directive back tot he IsItSundayNight? logic step.