Ejemplo n.º 1
0
 public function action_complete($order_id = null)
 {
     if (!$this->check_logged()) {
         \Messages::error('You must be logged in if you want to continue with your order.');
         \Response::redirect(\Uri::create('order/checkout/address'));
     }
     $user = \Sentry::user();
     $order = \Order\Model_Order::find(array('where' => array('id' => $order_id, 'user_id' => $user->get('id'))));
     \Theme::instance()->set_partial('content', $this->view_dir . 'complete')->set('user', $user, false)->set('order', $order, false);
 }
Ejemplo n.º 2
0
 public static function credit_account($user_id = null, $new_amount = 0)
 {
     if (is_numeric($user_id) && \Sentry::user_exists((int) $user_id)) {
         $user = \Sentry::user((int) $user_id);
     } else {
         $user = \Sentry::user();
     }
     $out['credit'] = false;
     if ($user->get('metadata.credit_account') != 1) {
         return $out;
     }
     $out['credit'] = true;
     if ($month = $user->get('metadata.purchase_limit_period')) {
         $start = strtotime(date('m-01-Y', strtotime("-{$month} month")));
         $orders_total = 0;
         $orders = \Order\Model_Order::find(array('where' => array(array('created_at', '>', $start), 'user_id' => $user->get('id'), 'finished' => 1)));
         if ($orders) {
             foreach ($orders as $order) {
                 $orders_total += $order->total_price + $order->shipping_price;
             }
         }
         if ($orders_total + $new_amount > $user->get('metadata.purchase_limit_value')) {
             $out['over_limit'] = true;
             $out['over_limit_amount'] = $orders_total + $new_amount - $user->get('metadata.purchase_limit_value');
         } else {
             $out['over_limit'] = false;
             $out['over_limit_amount'] = 0;
         }
         $out['orders_total'] = $orders_total;
         $out['limit'] = $user->get('metadata.purchase_limit_value');
         $out['period'] = $user->get('metadata.purchase_limit_period');
     }
     if (is_numeric(\Session::get('order.id'))) {
         $order = \Order\Model_Order::find_one_by_id(\Session::get('order.id'));
         if (isset($order)) {
             $new_amount = $order->total_price + $order->shipping_price - $order->discount_amount;
         }
     }
     $out['current_total'] = $new_amount;
     return $out;
 }
Ejemplo n.º 3
0
 /**
  * Order details
  *
  * @access public
  * @param  int		$id = Order ID
  * @return void
  */
 public function action_order($id = false)
 {
     \View::set_global('title', 'Order');
     \Config::load('order::order', 'order');
     // Get current user
     $user = \Sentry::user();
     $user_ids = array($user->id);
     $master_user = false;
     if (isset($user['metadata']['master']) && $user['metadata']['master']) {
         $master_user = true;
     }
     // Get all orders from subusers if this is master user
     if ($master_user) {
         $user_group = $user->groups();
         $user_group = $user_group[0];
         $users = \Sentry::group($user_group['id'])->users();
         // Reset to empty array if there are no result found by query
         if (is_null($users)) {
             $users = array();
         }
         foreach ($users as $subuser) {
             array_push($user_ids, $subuser['id']);
         }
     }
     // Get order
     $order = \Order\Model_Order::find(function ($query) use($user_ids, $id) {
         $query->where('id', $id);
         $query->and_where('user_id', 'IN', $user_ids);
         $query->and_where('finished', 1);
     });
     if (!$order) {
         \Messages::error('Order with that ID does not exist or has been deleted.');
         \Response::redirect(\Uri::front_create('user/account/orders'));
     }
     // Load order config
     \Config::load('order::order', 'order');
     // Get order products
     $items = \Order\Model_Products::find(array('where' => array('order_id' => $id)));
     \Theme::instance()->set_partial('content', $this->view_dir . 'order')->set('items', $items, false)->set('order', $order[0], false)->set('order_status', \Config::get('order.status', array()), false)->set('user', $user, false);
 }
Ejemplo n.º 4
0
 public function get_search_sales_by_month()
 {
     $years = \Order\Model_Order::find(array('where' => array(array('total_price', 'is not', NULL))));
     $year_list = array();
     $month_list = array();
     foreach ($years as $year) {
         $year = date('Y', $year->created_at);
         if (!in_array($year, $year_list)) {
             $year_list += array($year => $year);
         }
     }
     $get_first_year = $year_list;
     rsort($get_first_year);
     krsort($year_list);
     if (\Input::get()) {
         if (\Input::get('year') != 'select') {
             $choose_year = \Input::get('year') ? \Input::get('year') : $get_first_year[0];
             for ($i = 1; $i <= 12; $i++) {
                 $timestamp = mktime(0, 0, 1, $i, 1, date("Y"));
                 $month = date("F", $timestamp);
                 $results = \DB::query('SELECT sum(total_price) as total_amount from orders where year(FROM_UNIXTIME(created_at)) = ' . $choose_year . ' and month(FROM_UNIXTIME(created_at)) = ' . $i)->execute();
                 array_push($month_list, array('month' => array('name' => $month, 'amount' => number_format($results[0]['total_amount'], 2))));
             }
         }
     }
     return array('items' => $month_list, 'years' => $year_list);
 }
Ejemplo n.º 5
0
 /**
  * Update Order
  * 
  * @param type $id  = Order ID
  */
 public function action_update($id = false)
 {
     if (!is_numeric($id)) {
         \Response::redirect('admin/order/list');
     }
     // Get order to edit
     if (!($order = \Order\Model_Order::find_one_by_id($id))) {
         \Response::redirect('admin/order/list');
     }
     \View::set_global('title', 'Edit Order');
     if (\Input::post('order_details', false) && \Input::post('customer_details', false)) {
         try {
             $fields = array('status', 'shipping_method', 'tracking_no');
             $events = array();
             foreach ($fields as $field) {
                 $config = \Config::get('details.' . $field, array());
                 if (isset($config[\Input::post($field)]) && $order->{$field}) {
                     $value = $config[\Input::post($field)];
                 } else {
                     $value = \Inflector::humanize(\Input::post($field));
                 }
                 if (isset($config[$order->{$field}])) {
                     $old_value = $config[$order->{$field}];
                 } else {
                     $old_value = \Inflector::humanize($order->{$field});
                 }
                 if ($order->{$field} != \Input::post($field)) {
                     $events[] = \Inflector::humanize($field) . ' changed. ' . $old_value . ' => ' . $value;
                 }
                 $data[$field] = \Input::post($field);
             }
             // Send to customer
             if (\Input::post('send_to_customer_payment')) {
                 //echo 'send_to_customer_payment'; exit;
             }
             if (\Input::post('send_to_customer_shipping')) {
                 //echo 'send_to_customer_shipping'; exit;
             }
             $order->set($data);
             if ($order->save() && !empty($events)) {
                 foreach ($events as $event) {
                     $order_history = Model_History::forge(array('order_id' => $order->id, 'event' => $event));
                     $order_history->save();
                 }
             }
             \Messages::success('Order successfully updated.');
             if (\Input::post('status') == 'shipped_to_customer') {
                 $this->sendNoticeShipped(\Order\Model_Order::find_one_by_id($id));
             }
             // if(\Input::post('exit')) \Response::redirect(\Uri::create('admin/order/list'));
             // \Response::redirect(\Uri::admin('current'));
         } catch (\Database_Exception $e) {
             \Messages::error('<strong>' . 'There was an error while trying to update order.' . '</strong>');
         }
         // }
         //       if(\Input::post('customer_details', false))
         // {
         $val = Model_Order::validate('update');
         if ($val->run()) {
             try {
                 $order->set(\Input::post());
                 if ($order->save()) {
                     $order_history = Model_History::forge(array('order_id' => $order->id, 'event' => 'Customer details edited.'));
                     $order_history->save();
                     // \Messages::success('Order successfully updated.');
                     if (\Input::post('exit')) {
                         \Response::redirect(\Uri::create('admin/order/list'));
                     }
                     \Response::redirect(\Uri::admin('current'));
                 }
             } catch (\Database_Exception $e) {
                 \Messages::error('<strong>' . 'There was an error while trying to update order.' . '</strong>');
             }
         } else {
             // Delete uploaded images if there is news saving error
             if (isset($this->_image_data)) {
                 foreach ($this->_image_data as $image_data) {
                     $this->delete_image($image_data['saved_as']);
                 }
             }
             if ($val->error() != array()) {
                 // show validation errors
                 \Messages::error('<strong>There was an error while trying to update member</strong>');
                 foreach ($val->error() as $e) {
                     \Messages::error($e->get_message());
                 }
             }
         }
     }
     if (\Input::post('upload_type', false) && \Input::post('upload', false)) {
         $this->uploads($id);
     }
     if (\Input::post('order_edit', false)) {
         $post = \Input::post();
         \Messages::success('Order successfully updated.');
         if (\Input::post('exit')) {
             \Response::redirect(\Uri::create('admin/order/list'));
         }
         \Response::redirect(\Uri::admin('current'));
     }
     $user = $this->get_user($order->user_id);
     $orders = \Order\Model_Order::find(array('order_by' => array('id' => 'asc')));
     $this_class = $this;
     $get_user = function ($user_id) use($this_class) {
         return $this_class->get_user($user_id);
     };
     $get_attributes = function ($attributes) use($this_class) {
         return $this_class->attributes_to_string($attributes);
     };
     \Theme::instance()->set_partial('content', $this->view_dir . 'update')->set(compact('user', 'order', 'orders'), null, false)->set('get_user', $get_user, false)->set('get_attributes', $get_attributes, false);
 }
Ejemplo n.º 6
0
 public function get_search_items2($user_id = false)
 {
     // Override group_id if its a search
     $user_id = \Input::get('user_id', $user_id);
     if ($user_id && \Sentry::user_exists((int) $user_id)) {
         $user = \Sentry::user((int) $user_id);
     }
     $items = \Order\Model_Order::find(function ($query) {
         if (isset($user)) {
             $query->where('user_id', $user->id);
         }
         $query->order_by('main_number', 'desc');
         $query->order_by('id', 'asc');
     });
     foreach (\Input::get() as $key => $value) {
         if (!empty($value) || $value == '0') {
             switch ($key) {
                 case 'title':
                     foreach ($items as $number => $item) {
                         $full_name = $item->first_name . ' ' . $item->last_name;
                         if (stripos($item->company, $value) === false) {
                             if (stripos($full_name, $value) === false) {
                                 unset($items[$number]);
                             }
                         }
                     }
                     break;
                 case 'email':
                     foreach ($items as $number => $item) {
                         if (stripos($item->email, $value) === false) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'custom_order_status':
                     if (array_key_exists($value, \Config::get('details.status', array()))) {
                         foreach ($items as $number => $item) {
                             if ($item->status != $value) {
                                 unset($items[$number]);
                             }
                         }
                     }
                     break;
                 case 'order_total_from':
                     is_numeric($value) or $value = 0;
                     foreach ($items as $number => $item) {
                         $item_details = \Order\Model_Order::order_info($item->id);
                         if ($item_details['total_price'] < $value) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'order_total_to':
                     is_numeric($value) or $value = 0;
                     foreach ($items as $number => $item) {
                         $item_details = \Order\Model_Order::order_info($item->id);
                         if ($item_details['total_price'] > $value) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'date_from':
                     if ($date = strtotime($value)) {
                         foreach ($items as $number => $item) {
                             if ($item->created_at < $date) {
                                 unset($items[$number]);
                             }
                         }
                     }
                     break;
                 case 'date_to':
                     if ($date = strtotime($value)) {
                         foreach ($items as $number => $item) {
                             if ($item->created_at > $date) {
                                 unset($items[$number]);
                             }
                         }
                     }
                     break;
                 case 'sch_from':
                     if ($date = strtotime($value)) {
                         foreach ($items as $number => $item) {
                             if ($item->sch_delivery < $date) {
                                 unset($items[$number]);
                             }
                         }
                     }
                     break;
                 case 'sch_to':
                     if ($date = strtotime($value)) {
                         foreach ($items as $number => $item) {
                             if ($item->sch_delivery > $date) {
                                 unset($items[$number]);
                             }
                         }
                     }
                     break;
                 case 'status':
                     foreach ($items as $number => $item) {
                         if ($value == 'false') {
                             break;
                         }
                         if (stripos($item->status, $value) === false) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'invoice_status':
                     foreach ($items as $number => $item) {
                         if ($value == 'false') {
                             break;
                         }
                         if (stripos($item->invoice_status, $value) === false) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'delivery_status':
                     foreach ($items as $number => $item) {
                         if ($value == 'false') {
                             break;
                         }
                         if (stripos($item->delivery_status, $value) === false) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'user_group':
                     foreach ($items as $number => $item) {
                         if ($value == 'false') {
                             break;
                         }
                         if (!\Sentry::user_exists((int) $item->user_id) || !\Sentry::user((int) $item->user_id)->in_group($value)) {
                             unset($items[$number]);
                         }
                     }
                     break;
             }
         }
     }
     // Reset to empty array if there are no result found by query
     if (is_null($items)) {
         $items = array();
     }
     // Initiate pagination
     $pagination = \Hybrid\Pagination::make(array('total_items' => count($items), 'per_page' => \Input::get('per_page', 10), 'uri_segment' => null));
     // Remove unwanted items, and show only required ones
     $items = array_slice($items, $pagination->offset, $pagination->per_page);
     return array('items' => $items, 'pagination' => $pagination);
 }
 public function get_search_sales_by_date()
 {
     $years = \Order\Model_Order::find(array('where' => array(array('total_price', 'is not', NULL))));
     $year_list = array();
     foreach ($years as $year) {
         $year = date('Y', $year->created_at);
         if (!in_array($year, $year_list)) {
             $year_list += array($year => $year);
         }
     }
     $get_first_year = $year_list;
     rsort($get_first_year);
     krsort($year_list);
     $choose_year = \Input::get('year') ? \Input::get('year') : $get_first_year[0];
     $month_list = array();
     for ($i = 0; $i < 12; $i++) {
         $timestamp = mktime(0, 0, 1, date("m") + $i, date("d"), date("Y"));
         $month = date("F", $timestamp);
         $month_list += array($i + 1 => $month);
     }
     $choose_month = \Input::get('month') ? \Input::get('month') : 1;
     $number_of_days = cal_days_in_month(null, $choose_month, $choose_year);
     $items = array();
     if (\Input::get()) {
         for ($i = 1; $i <= $number_of_days; $i++) {
             $results = \DB::query('SELECT sum(total_price) as total_price from orders where year(FROM_UNIXTIME(created_at)) = ' . $choose_year . ' and month(FROM_UNIXTIME(created_at)) = ' . $choose_month . ' and day(FROM_UNIXTIME(created_at)) = ' . $i)->execute();
             array_push($items, array('amount' => $results[0]['total_price'], 'date' => $i . '/' . $choose_month . '/' . $choose_year));
         }
     }
     return array('months' => $month_list, 'years' => $year_list, 'dates' => $items);
 }