Example #1
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);
 }