/**
  * Show a list of all repeating orders.
  * @return HTML
  */
 function admin()
 {
     $shopAdminCode = EcommerceConfig::get("EcommerceRole", "admin_permission_code");
     if (!Permission::check("ADMIN") && !Permission::check($shopAdminCode)) {
         return Security::permissionFailure($this, _t('OrderReport.PERMISSIONFAILURE', 'Sorry you do not have permission for this function. Please login as an Adminstrator'));
     }
     RepeatOrder::create_automatically_created_orders();
     $params = array("AllRepeatOrders" => DataObject::get("RepeatOrder", "\"Status\" = 'Active'"));
     Requirements::javascript(THIRDPARTY_DIR . "/jquery/jquery.js");
     //Requirements::block(THIRDPARTY_DIR."/jquery/jquery.js");
     //Requirements::javascript(Director::protocol()."ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js");
     Requirements::javascript("ecommerce_repeatorders/javascript/RepeatOrdersPage_admin.js");
     Requirements::themedCSS("RepeatOrdersPage_admin");
     return $this->renderWith(array('RepeatOrdersPage_admin', 'Page'), $params);
 }
 /**
  * Save the changes
  */
 public function doSave($data, $form, $request)
 {
     $data = Convert::raw2sql($data);
     $member = Member::currentUser();
     if (!$member) {
         $form->sessionMessage('Could not find customer details.', 'bad');
         Director::redirectBack();
         return false;
     }
     if ($member->IsShopAdmin()) {
         $form->sessionMessage('Repeat orders can not be created by Shop Administrators.  Only customers can create repeat orders.', 'bad');
         Director::redirectBack();
         return false;
     }
     if (isset($data['OrderID'])) {
         $order = DataObject::get_one('Order', 'Order.ID = \'' . $data['OrderID'] . '\' AND MemberID = \'' . $member->ID . '\'');
         if ($order) {
             $repeatOrder = RepeatOrder::create_repeat_order_from_order($order);
         } else {
             $form->sessionMessage('Could not find originating order.', 'bad');
             Director::redirectBack();
             return false;
         }
     } else {
         $repeatOrderID = intval($data['RepeatOrderID']);
         $repeatOrder = DataObject::get_one('RepeatOrder', 'RepeatOrder.ID = \'' . $repeatOrderID . '\' AND MemberID = \'' . $member->ID . '\'');
     }
     if ($repeatOrder) {
         if ($repeatOrderItems = $repeatOrder->OrderItems()) {
             foreach ($repeatOrderItems as $repeatOrderItem) {
                 $repeatOrderItem->ProductID = $data["Product"]["ID"][$repeatOrderItem->ProductID];
                 $repeatOrderItem->Quantity = $data["Product"]["Quantity"][$repeatOrderItem->ProductID];
                 for ($i = 1; $i < 6; $i++) {
                     $alternativeField = "Alternative" . $i . "ID";
                     $repeatOrderItem->{$alternativeField} = $data["Product"][$alternativeField][$repeatOrderItem->ProductID];
                 }
                 $repeatOrderItem->write();
             }
         }
         $params = array();
         if (isset($data['Start']) && strtotime($data['Start']) > strtotime(Date("Y-m-d"))) {
             $params['Start'] = $data['Start'];
         } else {
             $params["Start"] = Date("Y-m-d");
         }
         if (isset($data['End']) && strtotime($data['End']) > strtotime($params["Start"])) {
             $params['End'] = $data['End'];
         } else {
             $params["End"] = Date("Y-m-d", strtotime("+1 year"));
         }
         if (isset($data['Period'])) {
             $params['Period'] = $data['Period'];
         } else {
             $data['Period'] = RepeatOrder::default_period_key();
         }
         if (isset($data['DeliveryDay'])) {
             $params['DeliveryDay'] = $data['DeliveryDay'];
         } else {
             $data['DeliveryDay'] = RepeatOrder::default_delivery_day_key();
         }
         if (isset($data['PaymentMethod'])) {
             $params['PaymentMethod'] = $data['PaymentMethod'];
         } else {
             $data['PaymentMethod'] = RepeatOrder::default_payment_method_key();
         }
         if (isset($data['Notes'])) {
             $params['Notes'] = $data['Notes'];
         }
         $repeatOrder->update($params);
         $repeatOrder->Status = 'Pending';
         $repeatOrder->write();
     } else {
         $form->sessionMessage('Could not find repeat order.', 'bad');
         Director::redirectBack();
         return false;
     }
     Director::redirect(RepeatOrdersPage::get_repeat_order_link('view', $repeatOrder->ID));
     return true;
 }
 /**
  * Create a RepeatOrder from a regular Order and its Order Items
  * @param Order $Order
  * @return RepeatOrder
  */
 public static function create_repeat_order_from_order(Order $Order)
 {
     $repeatOrder = new RepeatOrder();
     $repeatOrder->Status = 'Pending';
     $repeatOrder->MemberID = $Order->MemberID;
     $repeatOrder->write();
     $orderItems = $Order->Items();
     if ($orderItems) {
         foreach ($orderItems as $orderItem) {
             $buyable = $orderItem->Buyable();
             if ($buyable && $buyable instanceof Product) {
                 $repeatOrder_orderItem = new RepeatOrder_OrderItem();
                 $repeatOrder_orderItem->OrderID = $repeatOrder->ID;
                 $repeatOrder_orderItem->ProductID = $orderItem->BuyableID;
                 $repeatOrder_orderItem->Quantity = $orderItem->Quantity;
                 $repeatOrder_orderItem->write();
             }
         }
     }
     $repeatOrder->write();
     return $repeatOrder;
 }