PHP File Manager
Editing File: Queue.php
<?php /* * Copyright (C) Wayne Purton-Smith - All Rights Reserved * Unauthorized copying of this file or removing this paragraph, via any medium is strictly prohibited * Proprietary and confidential * Written by Wayne Purton-Smith <waynepurtonsmith@hotmail.co.uk> February 2014 */ class Queue extends CI_Controller { function __construct() { parent::__construct(); $this->users->denyRestricted('orders'); } public function index($mode = NULL, $sub_mode = NULL, $tri_mode = NULL) { if(($requested_order_id = (int) $this->input->post('request_order')) > 0) { $order_info = $this->orders->get($requested_order_id); if(!empty($order_info)) { $order_info->formatted_delivery_date = date('l, jS F Y', $order_info->delivery_date); } exit_with_json(array ( 'success' => !empty($order_info), 'info' => $order_info, 'items' => $this->orders->getOrderItems($requested_order_id, $this->input->post('request_order_item')) )); } $orders_filters = array(); $customer_id = NULL; $head_data['page_title'] = 'Orders'; $page_segment = 2; $orders_filters['retail_orders'] = false; $orders_filters['exclude_review'] = true; $orders_filters['exclude_pending'] = true; $data['review_mode'] = false; if($mode == 'today') { $orders_filters['order_date_from'] = strtotime('today 00:00:00'); $orders_filters['order_date_to'] = strtotime('today 23:59:59'); $head_data['page_title'] = 'Today\'s orders'; $page_segment = 3; $default_order = 'delivery_date'; } elseif($mode == 'tomorrow') { $orders_filters['delivery_date_from'] = strtotime('tomorrow 00:00:00'); $orders_filters['delivery_date_to'] = strtotime('tomorrow 23:59:59'); $head_data['page_title'] = 'Tomorrow\'s orders'; $page_segment = 3; $default_order = 'delivery_date'; } elseif($mode == 'unpaid') { $orders_filters['unpaid'] = true; $head_data['page_title'] = 'Outstanding orders'; $page_segment = 3; } elseif($mode == 'paid') { $orders_filters['unpaid'] = false; $head_data['page_title'] = 'Fully paid orders'; $page_segment = 3; } elseif($mode == 'location') { $orders_filters['delivery_address'] = str_replace('-', ' ', urldecode($sub_mode)); $page_segment = 4; if($tri_mode == 'trays') { $orders_filters['has_trays'] = true; $orders_filters['group_trays'] = false; $page_segment = 5; } } elseif($mode == 'recurring') { $head_data['page_title'] = 'Recurring orders'; $orders_filters['recurring'] = true; $data['recurring_orders'] = true; $template_name = 'recurring'; $page_segment = 3; } elseif($mode == 'retail') { $head_data['page_title'] = 'Retail orders'; $orders_filters['retail_orders'] = true; } elseif($mode == 'customer') { $customer_id = $sub_mode; } elseif($mode == 'status') { if(strlen(($sub_mode = trim($sub_mode)))) { foreach($this->orders->getOrderStatuses() as $status_type) { if(url_title($status_type->label, '-', true) === $sub_mode) { $head_data['page_title'] = $status_type->label . ' orders'; $orders_filters['status'] = $status_type->status_id; break; } } } } elseif($mode == 'to-dispatch') { $this->load->model('shipping/ups', 'upsShipping'); $this->load->model('shipping/interlink', 'interlinkShipping'); $head_data['page_title'] = 'Orders ready for dispatchment'; $orders_filters['ready_to_dispatch'] = true; $orders_filters['priority_order'] = false; $orders_filters['order_by'] = array('delivery-type' => 'asc', 'due-days' => 'asc'); $orders_filters['has_dispatched'] = false; $template_name = 'dispatch'; } elseif($mode == 'to-pack') { $head_data['page_title'] = 'Orders to be packaged'; $orders_filters['dispatchment_status'] = DISPATCHMENT_PACKED; } elseif($mode == 'awaiting-pickup') { $head_data['page_title'] = 'Packages awaiting pickup by couriers'; $orders_filters['dispatchment_status'] = DISPATCHMENT_PACKED; $orders_filters['has_tracking_number'] = true; $orders_filters['priority_order'] = false; $orders_filters['order_by'] = array('courier-pickup' => 'desc'); $template_name = 'courier-pickup'; } elseif($mode == 'gone') { $head_data['page_title'] = 'Recently dispatched orders'; $orders_filters['dispatched_date_from'] = strtotime('-2 weeks 00:00:00'); $orders_filters['has_dispatched'] = true; } elseif($mode == 'review') { $show_date_splits = false; $head_data['page_title'] = 'Orders to review'; $orders_filters['to_review'] = true; $orders_filters['exclude_review'] = false; $data['review_mode'] = true; } elseif($mode == 'approve') { if(($order_id = (int) $sub_mode) > 0) { $this->orders->changeOrderData($order_id, 'needs_review', false); redirect($this->agent->referrer()); exit; } redirect('/orders'); exit; } if($mode != 'to-dispatch') { $orders_filters['order_by'] = ($this->input->get('sort')) ? (array) $this->input->get('sort') : array('order-date' => 'desc'); } if($this->input->get('search') !== NULL) { $orders_filters['customer_details'] = format_whitespace(rawurldecode($this->input->get('search'))); } $search_data = (array) $this->input->get('search'); $sort_data = (array) $this->input->get('sort'); if(!empty($sort_data)) { $orders_filters['priority_order'] = false; } $search_start_time = microtime(); $found_orders = $this->orders->get(NULL, $customer_id, $orders_filters, $this->uri->segment($page_segment), $this->common->default_per_page); $total_orders = $this->common->countPreviousQuery(); $total_search_time = round(abs($search_start_time - microtime()), 2); if($mode == 'location') { if(isset($found_orders[0]->delivery_address_1)) { $head_data['page_title'] = array(); foreach(array('address_1', 'address_2', 'address_3', 'town', 'county', 'postcode') as $address_component) { $head_data['page_title'][] = (isset($found_orders[0]->{'delivery_' . $address_component})) ? $found_orders[0]->{'delivery_' . $address_component} : NULL; } $head_data['page_title'] = 'Orders located at ' . implode(', ', array_filter($head_data['page_title'])); } else { $head_data['page_title'] = 'Orders by location'; } } $head_data['small_title'] = '<span class="pull-right">' . number_format($total_orders) . ' orders</span>'; $this->load->view('header', $head_data); //$data['total_orders'] = $this->common->countPreviousQuery(); $data['mode'] = $mode; $data['orders'] = $found_orders; $data['date_split'] = NULL; $data['total_orders'] = $total_orders; $data['page_segment'] = $page_segment; $data['mode_segment'] = ($page_segment === 2) ? '' : $mode; $template_name = (isset($template_name)) ? $template_name : 'overview'; $show_date_splits = (isset($show_date_splits)) ? $show_date_splits : ((empty($search_data) && (empty($sort_data) || isset($sort_data['delivery-date']) || isset($sort_data['order-date'])))); $data['show_date_splits'] = $show_date_splits; $data['sort_date'] = (isset($sort_data['delivery-date'])) ? 'delivery_date' : ((isset($default_order)) ? $default_order : 'ordered_date'); $data['sortable_columns'] = array('order-date', 'delivery-date', 'paid', 'price', 'dispatched', 'completed', 'trays'); $data['sort_data'] = $sort_data; $query_data = array(); if($search_data) { $query_data['search'] = $search_data; } if($sort_data) { $query_data['sort'] = $sort_data; } $uri_suffix = ($query_data) ? '?' . rawurldecode(http_build_query($query_data)) : ''; $data['viewing_url'] = '/orders/' . ((!is_numeric($mode)) ? $mode . ((!is_numeric($sub_mode)) ? '/' . $sub_mode : '') : ''); $data['current_url'] = current_url() . $uri_suffix; $data['current_suffix'] = $uri_suffix; $data['total_search_time'] = $total_search_time; $this->load->view('orders/' . $template_name, $data); $this->load->view('footer'); } public function book() { if($this->input->post('load')) { $search_query = trim(htmlspecialchars_decode(rawurldecode($this->input->post('query')), ENT_QUOTES)); $data = array(); $skip_from = 0; $limit_results = 30; $orders_filters['exclude_review'] = true; if(($order_number = is_order_number($search_query))) { $orders_filters['number'] = $order_number; } else { $orders_filters['customer_details'] = $search_query; $orders_filters['priority_order'] = false; $orders_filters['order_by'] = array('order-date' => 'desc'); if(($_skip_from = (int) $this->input->post('skip')) >= 0) { $skip_from = $_skip_from; } } $orders = $this->orders->get(NULL, NULL, $orders_filters, $skip_from, $limit_results); $orders_sql = $this->db->last_query(); if(!empty($orders)) { if(isset($orders->order_id)) { $orders = array($orders); } foreach($orders as $order_info) { $order_info->ordered_date_text = date('d/m/Y', $order_info->ordered_date); $order_info->delivery_date_text = date('d F Y', $order_info->delivery_date); $order_info->noth = ($order_info->referral == 21); $order_info->items = $this->orders->getOrderItems($order_info->order_id); } } exit_with_json(array ( 'success' => !empty($orders), 'skip' => $skip_from, 'next_skip' => ($skip_from === 0) ? 2 : ($skip_from + 1), 'limit' => $limit_results, 'can_load' => ($this->orders->getNextRowId() > 0), 'query' => $orders_sql, 'data' => $orders )); } $head_data['page_title'] = 'Orderbook'; $head_data['hide_sidebar'] = true; $this->load->view('header', $head_data); $this->load->view('orders/orderbook'); $this->load->view('footer'); } public function product($mode_status = NULL) { $status_types = array ( 'stock-to-pick' => array('title' => 'picked from stock', 'types' => 1, 'button' => 'picked'), 'to-pack' => array('title' => 'packaged', 'types' => 5, 'button' => 'packed') ); if(!isset($status_types[$mode_status])) { redirect('/orders'); exit; } $status_type = $status_types[$mode_status]; $status_label = $status_type['title']; $button_text = $status_type['button']; if($this->input->post('process_item')) { if(($next_step = $this->orders->getOrderItemStatusStep($this->input->post('item_id'), 'next'))) { exit_with_json(array('success' => $this->orders->updateOrderItemStatus($this->input->post('item_id'), $next_step->status_id))); } exit_with_json(array('success' => false)); } if($this->input->post('update_product_status') !== NULL) { exit_with_json(array('success' => $this->orders->updateOrderItemStatus($this->input->post('item_id'), $this->input->post('update_product_status')))); } if($this->input->post('get_items')) { $order_items = $this->orders->getOrderItems(NULL, NULL, NULL, array ( 'status' => $status_type['types'], 'order_info' => true, 'include_to_review' => false, 'exclude_pending' => true )); foreach($order_items as $item_info) { $item_info->progress = $this->orders->getOrderItemProgress($item_info->item_id); foreach($item_info->progress as $progress_info) { $progress_info->date_changed_str = ($progress_info->date_changed) ? date('l jS M Y - H:i', $progress_info->date_changed) : NULL; } } exit_with_json(array ( 'success' => !empty($order_items), 'polled' => array ( 'timestamp' => time(), 'datestamp' => array ( 'date' => date('l, jS F Y'), 'time' => date('g:iA') ) ), 'data' => array ( 'user_name' => $this->users->first_name, 'mode_status' => $mode_status, 'status_label' => 'Items to be ' . $status_label, 'button_text' => $button_text ), 'items' => $order_items )); } $this->load->view('tools/signpad'); } public function review($mode = NULL) { if($this->input->post('save_review')) { exit_with_json(array('success' => $this->orders->saveReview($this->input->post('order_id'), $this->input->post()))); } $head_data['page_title'] = 'Orders to accept'; $this->load->view('header', $head_data); $data['orders'] = $this->orders->get(NULL, NULL, array('to_review' => true, 'exclude_review' => false)); $data['total_orders'] = $this->common->countPreviousQuery(); $data['all_products'] = $this->products->getProducts(NULL, NULL, NULL, array('options_only' => true, 'include_dummy' => false), false, -1); //preprint($data['all_products']);exit; $data['products_dropdown'] = $this->products->productsComboxBox('actual_item[]', -1, 'class="form-control"', true, true, true); $this->load->view('orders/review', $data); $this->load->view('footer'); } public function view($order_id = NULL, $mode = NULL) { if(($order_id = (int) $order_id) <= 0 || !($order_info = $this->orders->get($order_id))) { redirect('/orders'); exit; } if($mode == 'email-confirmation') { $this->orders->sendConfirmationEmail($order_id); redirect('/orders/view/' . $order_id); exit; } if(($order_item_id = (int) $this->input->post('delete_item'))) { exit_with_json(array('success' => $this->orders->removeOrderItem($order_item_id))); } if($this->input->post('get_item') !== NULL) { $json_data = array ( 'success' => false, 'item' => NULL, 'extra_options' => NULL ); if(($order_item_id = (int) $this->input->post('get_item')) > 0) { $order_item = $this->orders->getOrderItems(NULL, $order_item_id); $json_data['success'] = !empty($order_item); $json_data['item'] = $order_item; $json_data['extra_options'] = (!empty($order_item)) ? $this->orders->getOrderItemOptions($order_item_id) : array(); } exit_with_json($json_data); } if($this->input->post('review_order')) { $all_products = $this->products->getProducts(NULL, NULL, NULL, array('include_dummy' => false, 'options_only' => true), false, -1); $order_items = $this->orders->getOrderItems($order_id); $review_data = array ( 'delivery_notes' => ($order_info->delivery_notes) ? nl2br(input_value($order_info->delivery_notes)) : '<em>None</em>', 'internal_notes' => ($order_info->internal_notes) ? nl2br(input_value($order_info->internal_notes)) : '<em>None</em>', 'order_items' => array(), 'dropdown' => $this->products->productsComboxBox('actual_item[]', NULL, 'class="form-control"', true, false, true) ); foreach($order_items as $i => $item_info) { if($item_info->product_id == 1) { $matching_item = $highest_match = false; foreach($all_products as $j => $product_info) { similar_text(strtolower($product_info->name), strtolower($item_info->name), $matching_percent); if($matching_percent > $highest_match) { $highest_match = $matching_percent; $matching_item = $product_info; } } } else { $matching_item = $highest_match = false; } $review_data['order_items'][] = array ( 'item' => $item_info, 'matching' => $matching_item, 'score' => $highest_match ); } exit_with_json($review_data); } if($this->input->post('save_review')) { exit_with_json(array('success' => $this->orders->saveReview($order_id, $this->input->post()))); } if($this->input->post('save_order_item')) { exit_with_json(array ( 'success' => $this->orders->saveOrderItem($this->input->post() + array('order_id' => $order_id), $this->input->post('item_id')) )); } if($this->input->post('add_payment')) { $this->orders->orderPayment($order_id, $this->input->post('payment_type'), $this->input->post('paid_amount'), $this->input->post('date_paid')); redirect('/orders/view/' . $order_id); exit; } if($this->input->post('change_delivery_info')) { $this->orders->changeDeliveryDetails($order_id, $this->input->post('date'), $this->input->post('type'), $this->input->post('charges')); redirect('/orders/view/' . $order_id); exit; } if($this->input->post('confirm_delivery_date')) { exit_with_json(array('success' => $this->orders->confirmDeliveryDate($order_id))); } if($this->input->post('unlock') || $this->input->post('lock')) { if($this->input->post('unlock')) { $this->session->set_tempdata('unlock_order_' . $order_id, 1, 600); } else { $this->session->unset_tempdata('unlock_order_' . $order_id); } redirect('/orders/view/' . $order_id); exit; } if($this->input->post('update_note')) { $this->orders->updateOrderNote($order_id, $this->input->post('note'), SYSTEM_NOTE_INTERNAL); if($this->input->is_ajax_request()) { if(($order_info = $this->orders->get($order_id))) { exit_with_json(array('success' => true, 'order_id' => $order_id, 'note' => nl2br($order_info->internal_notes))); } exit_with_json(array('success' => true)); } else { redirect('/orders/view/' . $order_id); exit; } } if($this->input->post('update_status') !== NULL) { exit_with_json(array('success' => $this->orders->updateOrderStatus($order_id, $this->input->post('update_status')))); } if($this->input->post('update_product_status') !== NULL) { exit_with_json(array('success' => $this->orders->updateOrderItemStatus($this->input->post('item_id'), $this->input->post('update_product_status')))); } if($this->input->post('change_priority') !== NULL) { exit_with_json(array('success' => $this->orders->changeOrderPriority($order_id, $this->input->post('change_priority')))); } $simple_template = (bool) $this->input->get('simple'); if($simple_template) { $head_data['hide_sidebar'] = true; } $head_data['page_title'] = 'Order #' . $order_info->order_number; if($order_info->ref_order_number) { $head_data['small_title'] = '<span class="label label-danger imported-order-notice">IMPORTED ORDER</span>'; } $this->load->view('header', $head_data); $data['order_info'] = $order_info; $data['order_items'] = $this->orders->getOrderItems($order_id); $data['order_payments'] = $this->orders->getPayments($order_id); $data['tracking_numbers'] = $this->orders->getOrderTrackingNumbers($order_id); $data['order_locked'] = (time() > $order_info->delivery_date && !$this->session->tempdata('unlock_order_' . $order_id)); $data['items_required'] = $this->products->getRequiredItemsForOrder($order_info->order_id); $data['progress_list'] = $this->orders->getOrderStatuses(); $data['formatted_address'] = format_address($order_info->delivery_address_1, $order_info->delivery_address_2, $order_info->delivery_address_3, $order_info->delivery_town, $order_info->delivery_county, $order_info->delivery_postcode, $order_info->delivery_country); $data['short_formatted_address'] = format_address($order_info->delivery_address_1, $order_info->delivery_town, $order_info->delivery_county, $order_info->delivery_postcode, $order_info->delivery_country); $data['review_info'] = $this->orders->getOrderReviewReasons($order_info); if($order_info->needs_review) { $data['all_products'] = $this->products->getProducts(NULL, NULL, NULL, array('options_only' => true, 'include_dummy' => false), false, -1); $data['products_dropdown'] = $this->products->productsComboxBox('actual_item[]', -1, 'class="form-control"', true, true, true); } if($order_info->discount_code) { $this->load->model('offers'); $data['offer_info'] = $this->offers->explainOffer($this->offers->get($order_info->discount_code, NULL, array('include_deleted' => true))); } $template_name = ($simple_template) ? 'simple' : 'new-view'; $this->load->view('orders/' . $template_name, $data); $this->load->view('footer'); } public function import() { $this->load->model('import'); if($this->input->post('upload_csv')) { $csv_data = ($this->input->post('csv_data')) ? (($decoded_data = @base64_decode($this->input->post('csv_data'))) ? $decoded_data : false) : false; $parsed_data = $this->import->parseCSV($csv_data); exit_with_json(array ( 'success' => !empty($parsed_data), 'data' => (empty($parsed_data)) ? NULL : array ( 'headers' => array_keys($parsed_data[0]), 'rows' => $this->import->convertKeys($parsed_data) ), 'raw' => $parsed_data )); } $head_data['page_title'] = 'Import orders'; $this->load->view('header', $head_data); $this->load->view('orders/import'); $this->load->view('footer'); } public function search() { $query_data = rawurldecode($this->input->get('q')); //decode_post_data($query_data); $components = http_build_query(array('search' => $query_data)); redirect('/orders/' . (($components) ? '?' . $components : '')); exit; } public function edit($mode = NULL, $sub_mode = NULL) { $order_info = NULL; $customer_info = NULL; if(($order_id = (int) $mode) > 0) { if(!($order_info = $this->orders->get($order_id))) { redirect('/orders'); exit; } $data['order_info'] = $order_info; $data['is_update'] = true; } elseif($mode == 'customer' && ($customer_id = (int) $sub_mode) > 0) { if(!($customer_info = $this->customers->get($customer_id))) { redirect('/orders/edit'); exit; } $data['select_customer'] = $customer_id; } if($this->input->post('submit_order')) { if($this->orders->saveOrder($this->input->post() + array('push_first_step' => true), $this->input->post('order_id'))) { $this->common->keepResponseMessage(); $created_ids = $this->orders->getCreatedOrderIds(); redirect('/orders/view/' . $created_ids[0]); exit; } } if($this->input->post('search_items')) { $items = array_filter(explode("\n", trim($this->input->post('search_items')))); $_products = $this->products; $found_items = array(); array_map(function($item_name) use($_products, &$found_items) { foreach($_products->findSimilarProduct($item_name) as $item_info) { $found_items[] = (int) $item_info->product_id; } }, $items); exit_with_json(array('success' => !empty($found_items), 'items' => $found_items)); } $this->load->model('customers'); $head_data['page_title'] = (($order_info) ? 'Editing order #' . $order_info->order_number : (($customer_info) ? 'Create order for ' . (($formatted_name = format_name($customer_info->first_name, $customer_info->last_name)) ? $formatted_name : $customer_info->business) : 'Create new order')); $this->load->view('header', $head_data); $data['customers'] = $this->customers->get(); $product_categories = $this->products->getCategories(); $data['product_categories'] = $product_categories; $data['delivery_dates'] = (is_array($this->input->post('delivery_date'))) ? $this->input->post('delivery_date') : array(1); $data['delivery_times'] = (is_array($this->input->post('delivery_time'))) ? $this->input->post('delivery_time') : array(1); $this->load->view('orders/edit', $data); $this->load->view('footer'); } public function delete($order_id = NULL) { if(($order_id = (int) $order_id) > 0) { if(!$this->orders->deleteOrder($order_id)) { $this->common->keepResponseMessage(); redirect('/orders/view/' . $order_id); exit; } } redirect('/orders'); } public function ups_shipping() { $this->load->model('shipping/ups', 'upsShipping'); if($this->input->post('get_transit') || $this->input->post('get_rate') || $this->input->post('confirm_rate')) { if(($order_id = (int) $this->input->post('order_id')) > 0 && ($order_info = $this->orders->get($order_id))) { $post_data = array ( 'description' => 'Order #' . $order_info->order_number, 'service' => $this->input->post('service'), 'pickup_date' => ($this->input->post('pickup_date')) ? strtotime($this->input->post('pickup_date')) : $this->upsShipping->earliestPickupDate($order_info->delivery_date), 'actual_pickup_date' => $this->input->post('actual_pickup_date'), 'estimated_arrival_date' => $this->input->post('estimated_arrival_date'), 'total_cost' => $order_info->total_inc_vat, 'items' => array() ); $item_weights = $this->input->post('weights'); if($this->input->post('one_package')) { $post_data['items'] = array ( array ( 'name' => 'Packaged items', 'weight' => (($item_weight = array_values(array_filter($item_weights)))) ? (float) $item_weight[0] : 1 ) ); } else { $order_items = $this->orders->getOrderItems($order_id); foreach($order_items as $item_info) { $post_data['items'][] = array ( 'name' => $item_info->name, 'weight' => (isset($item_weights[$item_info->item_id]) && ($item_weight = (float) $item_weights[$item_info->item_id]) > 0) ? $item_weight : 1 ); } } $customer_name = ($order_info->delivery_business) ? $order_info->delivery_business : format_display($order_info->delivery_first_name, $order_info->delivery_last_name); $request = $this->upsShipping->setRelatedOrderId($order_id)->setAddress('origin', array ( 'name' => $this->config->item('company_name'), 'company' => $this->config->item('company_name'), 'full_name' => $this->config->item('company_name'), 'address' => array ( 'address_1' => $this->config->item('company_address_1'), 'address_2' => $this->config->item('company_address_2'), 'town' => $this->config->item('company_town'), 'postcode' => $this->config->item('company_postcode'), 'country_code' => 'GB' ), 'phone' => $this->config->item('company_phone') )) ->setAddress('destination', array ( 'name' => $customer_name, 'full_name' => $customer_name, 'company' => $order_info->delivery_business, 'address' => array ( 'address_1' => $order_info->delivery_address_1, 'address_2' => $order_info->delivery_address_2, 'address_3' => $order_info->delivery_address_3, 'town' => $order_info->delivery_town, 'county' => $order_info->delivery_county, 'postcode' => $order_info->delivery_postcode, 'country_code' => $order_info->delivery_country_code, 'residential' => true ), 'phone' => ($order_info->delivery_phone) ? $order_info->delivery_phone : $order_info->delivery_mobile )); if($this->input->post('get_transit')) { exit_with_json($request->timeInTransit($post_data)); } elseif($this->input->post('get_rate')) { exit_with_json($request->getShippingRates($post_data)); } elseif($this->input->post('confirm_rate')) { $shipment_confirmation = $request->confirmShipment($post_data); if(!isset($shipment_confirmation->digestString)) { exit_with_json($shipment_confirmation); } $shipment_acceptance = $this->upsShipping->acceptShipment($shipment_confirmation->digestString); exit_with_json(array_merge((array) $shipment_acceptance, array('shipmentConfirmation' => $shipment_confirmation))); } } } elseif($this->input->post('track') !== NULL) { exit_with_json($this->upsShipping->track($this->input->post('track'))); } exit_with_json(array('success' => false)); } public function interlink_shipping() { $this->load->model('shipping/interlink', 'interlinkShipping'); if($this->input->post('get_services') || $this->input->post('save_shipment')) { if(($order_id = (int) $this->input->post('order_id')) > 0 && ($order_info = $this->orders->get($order_id))) { $customer_name = ($order_info->delivery_business) ? $order_info->delivery_business : format_display($order_info->delivery_first_name, $order_info->delivery_last_name); $post_data = array ( 'description' => 'Order #' . $order_info->order_number, 'service' => $this->input->post('service'), 'pickup_date' => ($this->input->post('pickup_date')) ? strtotime($this->input->post('pickup_date')) : $this->upsShipping->earliestPickupDate($order_info->delivery_date), 'actual_pickup_date' => $this->input->post('actual_pickup_date'), 'estimated_arrival_date' => $this->input->post('estimated_arrival_date') ); $item_weights = $this->input->post('weights'); if($this->input->post('one_package')) { $post_data['items'] = array ( array ( 'name' => 'Packaged items', 'weight' => (($item_weight = array_values(array_filter($item_weights)))) ? (float) $item_weight[0] : 1 ) ); } else { $order_items = $this->orders->getOrderItems($order_id); foreach($order_items as $item_info) { $post_data['items'][] = array ( 'name' => $item_info->name, 'weight' => (isset($item_weights[$item_info->item_id]) && ($item_weight = (float) $item_weights[$item_info->item_id]) > 0) ? $item_weight : 1 ); } } $this->interlinkShipping->setRelatedOrderId($order_id)->setAddress('origin', array ( 'contactDetails' => array ( 'contactName' => $this->config->item('company_name'), 'telephone' => $this->config->item('company_phone') ), 'address' => array ( 'organisation' => $this->config->item('company_name'), 'street' => $this->config->item('company_address_1'), 'locality' => $this->config->item('company_address_2'), 'town' => $this->config->item('company_town'), 'county' => $this->config->item('company_county'), 'postcode' => $this->config->item('company_postcode'), 'countryCode' => 'GB' ) )) ->setAddress('destination', array ( 'contactDetails' => array ( 'contactName' => $customer_name, 'telephone' => ($order_info->delivery_phone) ? $order_info->delivery_phone : $order_info->delivery_mobile, 'mobile' => $order_info->delivery_mobile, 'email' => $order_info->delivery_email ), 'address' => array ( 'organisation' => $customer_name, 'street' => $order_info->delivery_address_1, 'locality' => $order_info->delivery_address_2, 'town' => $order_info->delivery_town, 'county' => $order_info->delivery_county, 'postcode' => $order_info->delivery_postcode, 'countryCode' => $order_info->delivery_country_code ) )); if($this->input->post('get_services')) { exit_with_json($this->interlinkShipping->getServices($post_data)); } elseif($this->input->post('save_shipment')) { exit_with_json($this->interlinkShipping->createShipment($post_data)); } } } exit_with_json(array('success' => false)); } public function cancel_shipping($mode = NULL) { $result = false; if(($order_id = (int) $mode) > 0 && ($order_info = $this->orders->get($order_id)) && isset($order_info->courier_service)) { if($order_info->courier_service == 'UPS') { $this->load->model('shipping/ups', 'upsShipping'); $result = $this->upsShipping->cancelShipment($order_id); } else { $this->load->model('shipping/interlink', 'interlinkShipping'); $result = $this->interlinkShipping->cancelShipment($order_id); } } exit; if($this->input->is_ajax_request()) { exit_with_json(array('success' => $result)); } else { redirect($this->agent->referrer()); } } public function invoice($order_id = NULL, $sub_mode = NULL) { $this->load->model('invoice'); $page_copies = ($this->input->get('_bakersPanelAccess')) ? 2 : 1; if($this->invoice->generateOrderInvoice($order_id, false, ($sub_mode == 'email'), ($sub_mode == 'detailed'), $page_copies)) { redirect('/orders/view/' . $order_id); exit; } } public function payment($mode = NULL, $payment_id = 0) { switch($mode) { case 'refund': $this->load->model('payment/paypal'); if(SYSTEM_IS_TEST) { $this->paypal->test('wayne-seller@rdit.co.uk'); } $this->paypal->refundPayment($payment_id); break; case 'delete': $this->orders->removePayment($payment_id); break; case 'invoice': $this->load->model('invoice'); $this->invoice->generatePaymentInvoice($payment_id); exit; break; } redirect($this->agent->referrer()); } public function recurring($mode = NULL, $recurring_id = 0) { if($mode == 'edit') { $order_info = (($recurring_id = (int) $recurring_id) > 0) ? $this->orders->get(NULL, NULL, array('recurring_id' => $recurring_id)) : NULL; if(!isset($order_info->order_id)) { $order_info = $this->orders->get($recurring_id); } if(!isset($order_info->order_id)) { redirect('/orders/recurring'); exit; } if($this->input->post('save_recurring_order')) { if(($new_recurring_id = $this->orders->saveRecurringOrder($this->input->post('order_id'), $this->input->post()))) { $this->common->keepResponseMessage(); redirect('/orders/recurring/edit/' . $new_recurring_id); exit; } } $head_data['page_title'] = ($order_info) ? 'Edit recurring order' : 'New recurring order'; if(isset($order_info->order_number)) { $head_data['small_title'] = ' for order <a href="/orders/view/' . $order_info->order_id . '" target="_blank">#' . $order_info->order_number . '</a>'; } $this->load->view('header', $head_data); $data['order_info'] = $order_info; $data['recurring_info'] = ($order_info) ? $this->orders->recurrenceInterval($order_info->repeat_date, $order_info->repeat_day, $order_info->repeat_week, $order_info->repeat_month, true) : NULL; $this->load->view('orders/edit-recurring', $data); $this->load->view('footer'); } elseif($mode == 'delete') { $this->orders->deleteRecurrence($recurring_id); redirect('/orders/recurring'); } elseif($mode == 'run') { $this->load->model('tasks'); $this->tasks->checkAndAddRecurringOrders(true); //echo '<pre>', implode("\n", $this->tasks->getLog()), '</pre>'; //exit; redirect('/orders/recurring'); } else { redirect('/orders/recurring'); } } public function mark($mark_type = NULL, $order_id = NULL, $send_email = NULL) { $mark_type = ($this->input->post('mark_type')) ? $this->input->post('mark_type') : $mark_type; $order_id = (is_array($this->input->post('order_id'))) ? $this->input->post('order_id') : $order_id; if(is_array($order_id) || ($order_id = (int) $order_id) > 0) { switch($mark_type) { default: redirect('/orders'); exit; break; case 'complete': $this->orders->markAsComplete($order_id); break; case 'dispatched': $this->orders->markAsDispatched($order_id, (bool) $send_email); break; case 'paid': $this->orders->markAsPaid($order_id); break; case 'trays_collected': $this->orders->updateTrayCount($order_id, 0); break; case 'delete': $this->orders->deleteOrder($order_id); break; } redirect($this->agent->referrer()); exit; } redirect('/orders'); exit; } }
Cancel