/** * 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; }