public function execute() { $id = waRequest::get('id'); $model = new shopNotificationModel(); $n = $model->getById($id); $params_model = new shopNotificationParamsModel(); $params = $params_model->getParams($id); // Orders used as sample data for testing $om = new shopOrderModel(); $test_orders = $om->where("paid_date IS NOT NULL AND state_id <> 'deleted'")->order('id DESC')->limit(10)->fetchAll('id'); shopHelper::workupOrders($test_orders); $im = new shopOrderItemsModel(); foreach ($im->getByField('order_id', array_keys($test_orders), true) as $i) { $test_orders[$i['order_id']]['items'][] = $i; } foreach ($test_orders as &$o) { $o['items'] = ifset($o['items'], array()); $o['total_formatted'] = waCurrency::format('%{s}', $o['total'], $o['currency']); } $this->view->assign('n', $n); $this->view->assign('params', $params); $this->view->assign('transports', self::getTransports()); $this->view->assign('events', $this->getEvents()); $this->view->assign('test_orders', $test_orders); $this->view->assign('default_email_from', $this->getConfig()->getGeneralSettings('email')); $this->view->assign('sms_from', $this->getSmsFrom()); $this->view->assign('routes', wa()->getRouting()->getByApp('shop')); }
public function execute() { $contact = wa()->getUser(); $scm = new shopCustomerModel(); // Customer orders $om = new shopOrderModel(); $orders = $om->where('contact_id=?', $contact->getId())->order('id DESC')->fetchAll('id'); // Items for all orders, one query $im = new shopOrderItemsModel(); foreach ($im->getByField('order_id', array_keys($orders), true) as $row) { $orders[$row['order_id']]['items'][] = $row; } // Params for all orders, one query $opm = new shopOrderParamsModel(); foreach ($opm->getByField('order_id', array_keys($orders), true) as $row) { $orders[$row['order_id']]['params'][$row['name']] = $row['value']; } // Prepare order data for template $url_tmpl = wa()->getRouteUrl('/frontend/myOrder', array('id' => '%ID%')); $workflow = new shopWorkflow(); foreach ($orders as $k => &$o) { if ($o['state_id'] == 'deleted') { unset($orders[$k]); continue; } $o['id_str'] = shopHelper::encodeOrderId($o['id']); $o['total_formatted'] = waCurrency::format('%{s}', $o['total'], $o['currency']); $o['shipping_name'] = ifset($o['params']['shipping_name'], ''); $o['payment_name'] = ifset($o['params']['payment_name'], ''); $o['state'] = $workflow->getStateById($o['state_id']); $o['url'] = str_replace('%ID%', $o['id'], $url_tmpl); } $this->view->assign('orders', array_values($orders)); $this->view->assign('my_nav_selected', 'orders'); // Set up layout and template from theme $this->setThemeTemplate('my.orders.html'); if (!waRequest::isXMLHttpRequest()) { $this->setLayout(new shopFrontendLayout()); $this->getResponse()->setTitle(_w('Orders')); $this->view->assign('breadcrumbs', self::getBreadcrumbs()); $this->layout->assign('nofollow', true); } }
private function _getOrderData($order_id) { $order_model = new shopOrderModel(); $order = $order_model->getById($order_id); if (!$order) { return false; } $order_items_model = new shopOrderItemsModel(); $items_res = $order_items_model->getByField('order_id', $order_id, true); $items = array(); $total_price = 0; $sku_model = new shopProductSkusModel(); $ret = new stdClass(); foreach ($items_res as $product) { $skus = $sku_model->getDataByProductId($product['product_id']); $product['product'] = reset($skus); $product_id = $product['product_id']; if ($product['sku_id'] != $product['product']['id']) { $product_id .= 's' . $product['sku_id']; } $items[] = array('product_id' => $product_id, 'qnt' => $product['quantity'], 'price' => $product['price'], 'product_name' => $product['name']); $total_price = $total_price + $product['price'] * $product['quantity']; } $ret->order_id = $order_id; $ret->items = $items; $ret->revenue = $total_price; $ret->state = $this->_switchState($order['state_id']); $ret->order = $order; return $ret; }
public function execute() { $id = waRequest::request('id'); $fm = new shopFollowupModel(); // Save data when POST came if ($id && waRequest::post()) { if (waRequest::post('delete')) { $f = $fm->getById($id); if ($f) { /** * @event followup_delete * * Notify plugins about deleted followup * * @param array[string]int $params['id'] followup_id * @return void */ wa()->event('followup_delete', $f); $fm->deleteById($id); } exit; } $followup = waRequest::post('followup'); if ($followup && is_array($followup)) { $empty_row = $fm->getEmptyRow(); $followup = array_intersect_key($followup, $empty_row) + $empty_row; unset($followup['id']); $followup['delay'] = (double) str_replace(',', '.', ifempty($followup['delay'], '3')) * 24 * 3600; if (empty($followup['name'])) { $followup['name'] = _w('<no name>'); } $followup['from'] = $followup['from'] ? $followup['from'] : null; $followup['source'] = $followup['source'] ? $followup['source'] : null; if ($followup['from'] === 'other') { $followup['from'] = waRequest::post('from'); } if ($id && $id !== 'new') { unset($followup['last_cron_time']); $fm->updateById($id, $followup); $just_created = false; } else { $followup['last_cron_time'] = date('Y-m-d H:i:s'); $id = $fm->insert($followup); $just_created = true; } $f = $fm->getById($id); if ($f) { $f['just_created'] = $just_created; /** * Notify plugins about created or modified followup * @event followup_save * @param array[string]int $params['id'] followup_id * @param array[string]bool $params['just_created'] * @return void */ wa()->event('followup_save', $f); } } } // List of all follow-ups $followups = $fm->getAll('id'); // Get data to show in form $followup = null; if ($id) { if (empty($followups[$id])) { if ($followups) { $followup = reset($followups); } } else { $followup = $followups[$id]; } } $test_orders = array(); if (empty($followup)) { $followup = $fm->getEmptyRow(); $followup['body'] = self::getDefaultBody(); } else { // Orders used as sample data for testing $om = new shopOrderModel(); $test_orders = $om->where("paid_date IS NOT NULL AND state_id <> 'deleted'")->order('id DESC')->limit(10)->fetchAll('id'); shopHelper::workupOrders($test_orders); $im = new shopOrderItemsModel(); foreach ($im->getByField('order_id', array_keys($test_orders), true) as $i) { $test_orders[$i['order_id']]['items'][] = $i; } foreach ($test_orders as &$o) { $o['items'] = ifset($o['items'], array()); $o['total_formatted'] = waCurrency::format('%{s}', $o['total'], $o['currency']); } } $this->view->assign('followup', $followup); $this->view->assign('followups', $followups); $this->view->assign('test_orders', $test_orders); $this->view->assign('last_cron', wa()->getSetting('last_followup_cli')); $this->view->assign('cron_ok', wa()->getSetting('last_followup_cli') + 3600 * 36 > time()); $this->view->assign('cron_command', 'php ' . wa()->getConfig()->getRootPath() . '/cli.php shop followup'); $this->view->assign('default_email_from', $this->getConfig()->getGeneralSettings('email')); $this->view->assign('routes', wa()->getRouting()->getByApp('shop')); }
public function execute() { $steps = $this->getConfig()->getCheckoutSettings(); $current_step = waRequest::param('step', waRequest::request('step')); if (!$current_step) { $current_step = key($steps); } $title = _w('Checkout'); if ($current_step == 'success') { $order_id = waRequest::get('order_id'); if (!$order_id) { $order_id = wa()->getStorage()->get('shop/order_id'); $payment_success = false; } else { $payment_success = true; $this->view->assign('payment_success', true); } if (!$order_id) { wa()->getResponse()->redirect(wa()->getRouteUrl('shop/frontend')); } $order_model = new shopOrderModel(); $order = $order_model->getById($order_id); if ($order) { $order['_id'] = $order['id']; } if (!$payment_success) { $order_params_model = new shopOrderParamsModel(); $order['params'] = $order_params_model->get($order_id); $order_items_model = new shopOrderItemsModel(); $order['items'] = $order_items_model->getByField('order_id', $order_id, true); $payment = ''; if (!empty($order['params']['payment_id'])) { try { /** * @var waPayment $plugin */ $plugin = shopPayment::getPlugin(null, $order['params']['payment_id']); $payment = $plugin->payment(waRequest::post(), shopPayment::getOrderData($order, $plugin), true); } catch (waException $ex) { $payment = $ex->getMessage(); } } $order['id'] = shopHelper::encodeOrderId($order_id); $this->getResponse()->addGoogleAnalytics($this->getGoogleAnalytics($order)); } else { $order['id'] = shopHelper::encodeOrderId($order_id); } $this->view->assign('order', $order); if (isset($payment)) { $this->view->assign('payment', $payment); } } else { $cart = new shopCart(); if (!$cart->count() && $current_step != 'error') { $current_step = 'error'; $this->view->assign('error', _w('Your shopping cart is empty. Please add some products to cart, and then proceed to checkout.')); } if ($current_step != 'error') { if (waRequest::method() == 'post') { if (waRequest::post('wa_auth_login')) { $login_action = new shopLoginAction(); $login_action->run(); } else { $redirect = false; foreach ($steps as $step_id => $step) { if ($step_id == $current_step) { $step_instance = $this->getStep($step_id); if ($step_instance->execute()) { $redirect = true; } } elseif ($redirect) { $this->redirect(wa()->getRouteUrl('/frontend/checkout', array('step' => $step_id))); } } // last step if ($redirect) { if ($this->createOrder()) { $this->redirect(wa()->getRouteUrl('/frontend/checkout', array('step' => 'success'))); } } } } else { $this->view->assign('error', ''); } $title .= ' - ' . $steps[$current_step]['name']; $steps[$current_step]['content'] = $this->getStep($current_step)->display(); $this->view->assign('checkout_steps', $steps); } } $this->getResponse()->setTitle($title); $this->view->assign('checkout_current_step', $current_step); /** * @event frontend_checkout * @return array[string]string $return[%plugin_id%] html output */ $event_params = array('step' => $current_step); $this->view->assign('frontend_checkout', wa()->event('frontend_checkout', $event_params)); if (waRequest::isXMLHttpRequest()) { $this->setThemeTemplate('checkout.' . $current_step . '.html'); } else { $this->setLayout(new shopFrontendLayout()); $this->setThemeTemplate('checkout.html'); } }