public function run($request)
 {
     //check if OrderCouponModifier exists
     if (DB::getConn()->hasTable("OrderCouponModifier")) {
         $this->log("OrderCouponModifier table exists");
         $query = DB::query("SELECT *\n\t\t\t\tFROM OrderModifier\n\t\t\t\tINNER JOIN `OrderAttribute` ON `OrderModifier`.`ID` = `OrderAttribute`.`ID`\n\t\t\t\tINNER JOIN `OrderCouponModifier` ON `OrderModifier`.`ID` = `OrderCouponModifier`.`ID`\n\t\t\t\tINNER JOIN `Order` ON `OrderAttribute`.`OrderID` = `Order`.`ID`;");
         foreach ($query as $row) {
             $newdata = $row;
             $newdata["ClassName"] = "OrderDiscountModifier";
             $newdata["ID"] = 0;
             if (!OrderDiscountModifier::get()->filter("OrderID", $newdata["OrderID"])->exists()) {
                 $newmodifier = new OrderDiscountModifier($newdata);
                 $newmodifier->write();
                 $discount = Discount::get()->byID($newdata["CouponID"]);
                 //set up discount values
                 if ($discount && $discount->exists()) {
                     $newmodifier->Discounts()->add($discount, array("DiscountAmount" => $newmodifier->Amount));
                 }
                 $this->log("Migrated modifier for Order " . $newdata["OrderID"] . " " . $newmodifier->ID);
             }
         }
     } else {
         $this->log("OrderCouponModifier table does not exist");
     }
 }
 /**
  * Get all discounts that have been applied to an order.
  *
  * @return ArrayList
  */
 public function Discounts()
 {
     $discounts = Discount::get()->leftJoin("OrderDiscountModifier_Discounts", "\"Discount\".\"ID\" = \"OrderDiscountModifier_Discounts\".\"DiscountID\"")->innerJoin("OrderAttribute", "(\"OrderDiscountModifier_Discounts\".\"OrderDiscountModifierID\" = \"OrderAttribute\".\"ID\")")->filter("OrderAttribute.OrderID", $this->owner->ID);
     $finalDiscounts = new ArrayList();
     foreach ($discounts as $discount) {
         $finalDiscounts->push($discount);
     }
     foreach ($this->owner->Items() as $item) {
         foreach ($item->Discounts() as $discount) {
             $finalDiscounts->push($discount);
         }
     }
     $finalDiscounts->removeDuplicates();
     return $finalDiscounts;
 }
 /**
  * Action that will find a discount based on the code
  *
  * @param type $data
  * @param type $form
  */
 public function doAddDiscount($data, $form)
 {
     $code_to_search = $data['DiscountCode'];
     // First check if the discount is already added (so we don't
     // query the DB if we don't have to).
     if (!$this->discount || $this->discount && $this->discount->Code != $code_to_search) {
         $code = Discount::get()->filter("Code", $code_to_search)->exclude("Expires:LessThan", date("Y-m-d"))->first();
         if ($code) {
             $this->discount = $code;
         }
     }
     $this->save();
     return $this->redirectBack();
 }
 /**
  * Get all discounts that have been applied to an order.
  */
 function Discounts()
 {
     return Discount::get()->leftJoin("OrderDiscountModifier_Discounts", "\"Discount\".\"ID\" = \"OrderDiscountModifier_Discounts\".\"DiscountID\"")->leftJoin("Product_OrderItem_Discounts", "\"Discount\".\"ID\" = \"Product_OrderItem_Discounts\".\"DiscountID\"")->innerJoin("OrderAttribute", "(\"OrderDiscountModifier_Discounts\".\"OrderDiscountModifierID\" = \"OrderAttribute\".\"ID\") OR \n\t\t\t\t(\"Product_OrderItem_Discounts\".\"Product_OrderItemID\" = \"OrderAttribute\".\"ID\")")->filter("OrderAttribute.OrderID", $this->owner->ID);
 }