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); }