public function execute() { $order_id = waRequest::request('order_id', 0, 'int'); $id = waRequest::request('id', 0, 'int'); $to = waRequest::request('to'); $nm = new shopNotificationModel(); $n = $nm->getById($id); if (!$n) { $this->errors = sprintf_wp('%s entry not found', _w('Notification')); return; } $om = new shopOrderModel(); $o = $om->getById($order_id); if (!$o) { $this->errors = _w('Order not found'); return; } shopHelper::workupOrders($o, true); $opm = new shopOrderParamsModel(); $o['params'] = $opm->get($order_id); try { $contact = $o['contact_id'] ? new shopCustomer($o['contact_id']) : wa()->getUser(); $contact->getName(); } catch (Exception $e) { $contact = new shopCustomer(wa()->getUser()->getId()); } $cm = new shopCustomerModel(); $customer = $cm->getById($contact->getId()); if (!$customer) { $customer = $cm->getEmptyRow(); } $workflow = new shopWorkflow(); // send notifications shopNotifications::sendOne($id, array('order' => $o, 'customer' => $contact, 'status' => $workflow->getStateById($o['state_id'])->getName()), $to); }
public function execute() { $lazy = waRequest::get('lazy', 0, waRequest::TYPE_INT); $offset = waRequest::get('offset', 0, waRequest::TYPE_INT); $limit = 30; $model = new shopDiscountcardsPluginOrderModel(); $sql = "SELECT count(*) " . $this->getSql(); $total_count = (int) $model->query($sql)->fetchField(); $sql = "SELECT * " . $this->getSql() . " LIMIT {$offset}, {$limit}"; $discountcards_orders = $model->query($sql)->fetchAll(); $discountcards_model = new shopDiscountcardsPluginModel(); $order_model = new shopOrderModel(); $workflow = new shopWorkflow(); foreach ($discountcards_orders as &$discountcards_order) { $order = $order_model->getOrder($discountcards_order['order_id']); $discountcards_order['order'] = $order; $discountcards_order['order_id_encode'] = shopHelper::encodeOrderId($order['id']); if ($discountcard = $discountcards_model->getByField('discountcard', $discountcards_order['discountcard'])) { $discountcards_order['_discountcard'] = $discountcard; } $discountcards_order['state'] = $workflow->getStateById($order['state_id']); } unset($discountcards_order); $this->view->assign(array('discountcards_orders' => $discountcards_orders, 'offset' => $offset, 'limit' => $limit, 'count' => count($discountcards_orders), 'total_count' => $total_count, 'lazy' => $lazy)); }
public function execute() { $action_id = waRequest::get('id', null, waRequest::TYPE_STRING_TRIM); if (!$action_id) { throw new waException('No action id given.'); } $chunk_size = 100; $offset = (int) waRequest::get('offset'); $workflow = new shopWorkflow(); $order_model = new shopOrderModel(); // collect orders under which has performed actions $updated_orders_ids = array(); $hash = $this->getHash(); if ($hash === null) { return; } $collection = new shopOrdersCollection($hash); $total_count = $collection->count(); $orders = $collection->getOrders('*', $offset, $chunk_size); foreach ($orders as $order) { $actions = $workflow->getStateById($order['state_id'])->getActions(); if (isset($actions[$action_id])) { $actions[$action_id]->run($order['id']); $updated_orders_ids[] = $order['id']; } } if (!$updated_orders_ids) { return; } $this->response = array('offset' => $offset + count($orders), 'total_count' => $total_count); // sidebar counters if ($this->response['offset'] >= $this->response['total_count']) { $order_model = new shopOrderModel(); $state_counters = $order_model->getStateCounters(); $pending_count = (!empty($state_counters['new']) ? $state_counters['new'] : 0) + (!empty($state_counters['processing']) ? $state_counters['processing'] : 0) + (!empty($state_counters['paid']) ? $state_counters['paid'] : 0); $this->response['state_counters'] = $state_counters; $this->response['pending_count'] = $pending_count; } $collection = new shopOrdersCollection('id/' . implode(',', $updated_orders_ids)); $total_count = $collection->count(); $orders = $collection->getOrders('*,contact', 0, $total_count); // orders for update items in table shopHelper::workupOrders($orders); $this->response['orders'] = array_values($orders); }
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 _getOrder($id) { $order = $this->getModel()->getOrder($id); if (!$order) { return false; } $workflow = new shopWorkflow(); $order['state'] = $workflow->getStateById($order['state_id']); $order = shopHelper::workupOrders($order, true); $sku_ids = array(); $stock_ids = array(); foreach ($order['items'] as $item) { if ($item['stock_id']) { $stock_ids[] = $item['stock_id']; } if ($item['sku_id']) { $sku_ids[] = $item['sku_id']; } } $sku_ids = array_unique($sku_ids); $stock_ids = array_unique($stock_ids); // extend items by stocks $stocks = $this->getStocks($stock_ids); foreach ($order['items'] as &$item) { if (!empty($stocks[$item['stock_id']])) { $item['stock'] = $stocks[$item['stock_id']]; } } unset($item); $skus = $this->getSkus($sku_ids); $sku_stocks = $this->getSkuStocks($sku_ids); foreach ($order['items'] as &$item) { // product and existing sku if (isset($skus[$item['sku_id']])) { $s = $skus[$item['sku_id']]; // for that counts that lower than low_count-thresholds show icon if ($s['count'] !== null) { if (isset($item['stock'])) { if (isset($sku_stocks[$s['id']][$item['stock']['id']])) { $count = $sku_stocks[$s['id']][$item['stock']['id']]['count']; if ($count <= $item['stock']['low_count']) { $item['stock_icon'] = shopHelper::getStockCountIcon($count, $item['stock']['id'], true); } } } else { if ($s['count'] <= shopStockModel::LOW_DEFAULT) { $item['stock_icon'] = shopHelper::getStockCountIcon($s['count'], null, true); } } } } } unset($item); return $order; }
public function execute() { $id = waRequest::request('id', 0, 'int'); if (!$id || !wa()->getUser()->getRights('shop', 'orders')) { $this->redirect(wa()->getAppUrl()); } // Order $om = new shopOrderModel(); $order = $om->getOrder($id); shopHelper::workupOrders($order, true); $order['tax'] = (double) $order['tax']; $order['discount'] = (double) $order['discount']; // Order params $opm = new shopOrderParamsModel(); $order['params'] = $opm->get($order['id']); // Order subtotal $order_subtotal = 0; foreach ($order['items'] as $i) { $order_subtotal += $i['price'] * $i['quantity']; } // Format addresses $settings = wa('shop')->getConfig()->getCheckoutSettings(); $form_fields = ifset($settings['contactinfo']['fields'], array()); $formatter = new waContactAddressSeveralLinesFormatter(); $shipping_address = shopHelper::getOrderAddress($order['params'], 'shipping'); $shipping_address = $formatter->format(array('data' => $shipping_address)); $shipping_address = $shipping_address['value']; if (isset($form_fields['address.billing'])) { $billing_address = shopHelper::getOrderAddress($order['params'], 'billing'); $billing_address = $formatter->format(array('data' => $billing_address)); $billing_address = $billing_address['value']; if ($billing_address === $shipping_address) { $billing_address = null; } } else { $billing_address = null; } // Order history $log_model = new shopOrderLogModel(); $log = $log_model->getLog($order['id']); // Customer $contact = $customer = self::getCustomer($order); $top = array(); foreach (array('email', 'phone') as $f) { if ($v = $contact->get($f, 'top,html')) { $top[] = array('id' => $f, 'name' => waContactFields::get($f)->getName(), 'value' => is_array($v) ? implode(', ', $v) : $v); } } // Workflow stuff: actions and state $workflow = new shopWorkflow(); $workflow_state = $workflow->getStateById($order['state_id']); $workflow_buttons = array(); foreach ($workflow_state->getActions() as $a_id => $action) { if ($a_id === 'edit' || $a_id === 'delete') { continue; } $workflow_buttons[] = $action->getButton(); } $this->view->assign('top', $top); $this->view->assign('log', $log); $this->view->assign('order', $order); $this->view->assign('uniqid', uniqid('f')); $this->view->assign('customer', $customer); $this->view->assign('workflow_state', $workflow_state); $this->view->assign('workflow_buttons', $workflow_buttons); $this->view->assign('shipping_address', $shipping_address); $this->view->assign('billing_address', $billing_address); $this->view->assign('order_subtotal', $order_subtotal); $this->view->assign('currency', ifempty($order['currency'], wa()->getConfig()->getCurrency())); wa()->getResponse()->setTitle(_w('Order') . ' ' . $order['id_str']); parent::execute(); }
/** * Helper to send one message: used during real sending, as well as for test emails from follow-ups settings page. */ public static function sendOne($f, $o, $customer, $contact, $to, $view = null, $general = null) { if (!$view) { $view = wa()->getView(); } if (!$general) { $general = wa('shop')->getConfig()->getGeneralSettings(); } $workflow = new shopWorkflow(); $items_model = new shopOrderItemsModel(); $o['items'] = $items_model->getItems($o['id']); foreach ($o['items'] as &$i) { if (!empty($i['file_name'])) { $i['download_link'] = wa()->getRouteUrl('/frontend/myOrderDownload', array('id' => $o['id'], 'code' => $o['params']['auth_code'], 'item' => $i['id']), true); } } unset($i); // Assign template vars $view->clearAllAssign(); $view->assign('followup', $f); // row from shop_followup $view->assign('order', $o); // row from shop_order, + 'params' key $view->assign('customer', $contact); // shopCustomer $view->assign('order_url', wa()->getRouteUrl('/frontend/myOrderByCode', array('id' => $o['id'], 'code' => $o['params']['auth_code']), true)); $view->assign('status', $workflow->getStateById($o['state_id'])->getName()); // $shipping_address, $billing_address foreach (array('shipping', 'billing') as $k) { $address = shopHelper::getOrderAddress($o['params'], $k); $formatter = new waContactAddressOneLineFormatter(array('image' => false)); $address = $formatter->format(array('data' => $address)); $view->assign($k . '_address', $address['value']); } // Build email from template $subject = $view->fetch('string:' . $f['subject']); $body = $view->fetch('string:' . $f['body']); $from = $general['email']; if ($f['from']) { $from = $f['from']; } // Send the message $message = new waMailMessage($subject, $body); $message->setTo($to); $message->setFrom($from, $general['name']); return $message->send(); }
public function execute() { $encoded_order_id = waRequest::param('id'); $order_id = shopHelper::decodeOrderId($encoded_order_id); if (!$order_id) { // fall back to non-encoded id $order_id = $encoded_order_id; $encoded_order_id = shopHelper::encodeOrderId($order_id); } // Check that order exists and belongs to this user $om = new shopOrderModel(); $order = $om->getOrder($order_id); if (!$order || !$this->isAuth($order)) { throw new waException(_w('Order not found'), 404); } if ($order['paid_date']) { foreach ($order['items'] as &$i) { if (!empty($i['file_name'])) { $i['download_link'] = wa()->getRouteUrl('/frontend/myOrderDownload', array('id' => $order['id'], 'code' => $order['params']['auth_code'], 'item' => $i['id']), true); } } unset($i); } $workflow = new shopWorkflow(); $order_params_model = new shopOrderParamsModel(); $order['params'] = $order_params_model->get($order['id']); $order['id_str'] = $encoded_order_id; $order['state'] = $workflow->getStateById($order['state_id']); // Order subtotal $subtotal = 0; foreach ($order['items'] as $item) { $subtotal += $item['price'] * $item['quantity']; } // Order comment $lm = new shopOrderLogModel(); $l = $lm->getByField(array('action_id' => 'create', 'order_id' => $order['id'])); $order['comment'] = ifempty($l['text']); $order['payment_name'] = ifset($order['params']['payment_name'], ''); $order['shipping_name'] = ifset($order['params']['shipping_name'], ''); // Shipping and billing addresses $settings = wa('shop')->getConfig()->getCheckoutSettings(); $form_fields = ifset($settings['contactinfo']['fields'], array()); $formatter = new waContactAddressSeveralLinesFormatter(); $shipping_address = shopHelper::getOrderAddress($order['params'], 'shipping'); if ($shipping_address) { $shipping_address = $formatter->format(array('data' => $shipping_address)); $shipping_address = $shipping_address['value']; } if (isset($form_fields['address.billing'])) { $billing_address = shopHelper::getOrderAddress($order['params'], 'billing'); $billing_address = $formatter->format(array('data' => $billing_address)); $billing_address = $billing_address['value']; } else { $billing_address = null; } if (wa()->getUser()->getId() == $order['contact_id']) { $contact = wa()->getUser(); } else { $contact = new waContact($order['contact_id']); } $payment = ''; if (!empty($order['params']['payment_id']) && !$order['paid_date']) { try { $plugin = shopPayment::getPlugin(null, $order['params']['payment_id']); $payment = $plugin->payment(waRequest::post(), shopPayment::getOrderData($order, $plugin), false); } catch (waException $ex) { $payment = $ex->getMessage(); } } $this->view->assign('payment', $payment); $tracking = ''; if (!empty($order['params']['shipping_id']) && !empty($order['params']['tracking_number'])) { try { $plugin = shopShipping::getPlugin(null, $order['params']['shipping_id']); $tracking = $plugin->tracking($order['params']['tracking_number']); } catch (waException $ex) { $tracking = $ex->getMessage(); } } $this->view->assign('tracking', $tracking); $this->view->assign('order', $order); $this->view->assign('contact', $contact); $this->view->assign('shipping_address', $shipping_address); $this->view->assign('billing_address', $billing_address); $this->view->assign('subtotal', $subtotal); // Set up layout and template from theme $this->setThemeTemplate('my.order.html'); $this->view->assign('my_nav_selected', 'orders'); if (!waRequest::isXMLHttpRequest()) { $this->setLayout(new shopFrontendLayout()); $this->getResponse()->setTitle(_w('Order') . ' ' . $encoded_order_id); $this->view->assign('breadcrumbs', self::getBreadcrumbs()); $this->layout->assign('nofollow', true); } }