/**
  * 根据条件获得物流涉及的国家,按position排序
  *
  * @param int $delivery_id
  * @return array
  */
 public function get_delivery_countries_by_position($query_struct)
 {
     $results = array();
     $result = array();
     $delivery_countries = $this->query_assoc($query_struct);
     foreach ($delivery_countries as $key => $value) {
         if (Mycountry::instance($value['country_id'])->get('active') == 0) {
             $delivery_countries[$key]['disable'] = true;
         }
     }
     return $delivery_countries;
 }
 /**
  * get carrier_country data
  *
  * @param Array $where
  * @param Array $orderby
  * @param Int $limit
  * @param Int $offset
  * @param Int $in
  * @return Array
  */
 private function _data($where = NULL, $in = NULL, $orderby = NULL, $limit = 0, $offset = 1000)
 {
     $list = array();
     $orm = ORM::factory('carrier_country');
     if (!empty($where)) {
         $orm->where($where);
     }
     if (!empty($in)) {
         $orm->in('site_id', $in);
     }
     if (!empty($orderby)) {
         $orm->orderby($orderby);
     }
     $orm_list = $orm->find_all($limit, $offset);
     $list = array();
     foreach ($orm_list as $key => $rs) {
         $list[$key] = $rs->as_array();
         $list[$key]['site'] = Mysite::instance($rs->site_id)->get();
         $list[$key]['carrier'] = Mycarrier::instance($rs->carrier_id)->get();
         $list[$key]['country'] = Mycountry::instance($rs->country_id)->get();
     }
     return $list;
 }
 /**
  * 根据国家和订单的价格或重量得到所有的物流方式以及计算的费用
  *
  * @param 	String $iso_code     国家简码
  * @param 	float  $total        订单价格
  * @param 	int    $weight       订单重量
  * @return 	array  $deliveries
  */
 public function get_cart_deliveries_by_country($iso_code, $total, $weight = 0)
 {
     $whole_country_ids = array();
     $results = array();
     $country = Mycountry::instance()->get_by_iso($iso_code);
     if (empty($country['id']) || !isset($country)) {
         return array();
     }
     $country_id = $country['id'];
     if (!is_array($country) || count($country) == 0) {
         die('error');
     }
     $deliveries = $this->get_deliveries($site_id);
     foreach ($deliveries as $key => $rs) {
         //指定配送国家和费用
         $result = $this->get_delivery_price($rs['id'], $country_id, $total, $weight);
         if (isset($result) && !empty($result)) {
             $results[$result['id']] = $result;
         }
     }
     $results = array_merge($results);
     return $results;
 }
Exemple #4
0
 function get_country()
 {
     $return_struct = array();
     $countrys = array();
     // 修改返回状态数据
     $return_struct['status'] = 1;
     $return_struct['code'] = 200;
     $return_struct['msg'] = 'ok';
     $request_data = $this->input->get();
     $query_country_ids = explode('-', $request_data['country_ids']);
     if (!empty($query_country_ids)) {
         foreach ($query_country_ids as $id) {
             $countrys[] = Mycountry::instance($id)->get('name');
         }
     }
     if (empty($countrys)) {
         $return_struct['status'] = 0;
         $return_struct['code'] = 501;
         $return_struct['msg'] = 'error';
     }
     $countrys_str = implode(',', $countrys);
     $return_struct['content'] = $countrys_str;
     header('Content-Type: text/javascript; charset=UTF-8');
     exit(json_encode($return_struct));
 }
Exemple #5
0
 /**
  * 添加订单
  */
 function do_add()
 {
     /*权限检查*/
     role::check('order_add');
     if ($_POST) {
         $post = new Validation($_POST);
         $post->pre_filter('trim');
         $post->add_rules('shipping_firstname', 'required', 'length[1,200]');
         $post->add_rules('shipping_lastname', 'required', 'length[1,200]');
         $post->add_rules('shipping_country', 'required', 'length[1,200]');
         $post->add_rules('shipping_state', 'length[1,200]');
         $post->add_rules('shipping_city', 'required', 'length[1,200]');
         $post->add_rules('shipping_address', 'required', 'length[1,200]');
         $post->add_rules('shipping_zip', 'required', 'length[1,200]');
         $post->add_rules('shipping_phone', 'required', 'length[1,200]');
         $post->add_rules('shipping_mobile', 'length[1,200]');
         $post->add_rules('billing_firstname', 'length[1,200]');
         $post->add_rules('billing_lastname', 'length[1,200]');
         $post->add_rules('billing_country', 'length[1,200]');
         $post->add_rules('billing_state', 'length[1,200]');
         $post->add_rules('billing_city', 'length[1,200]');
         $post->add_rules('billing_address', 'length[1,200]');
         $post->add_rules('billing_zip', 'length[1,200]');
         $post->add_rules('billing_phone', 'length[1,200]');
         $post->add_rules('billing_mobile', 'length[1,200]');
         $post->add_rules('good_price', 'required', 'length[1,200]');
         $post->add_rules('shipping_price', 'required', 'length[1,200]');
         if (!$post->validate()) {
             $errors = $post->errors();
             log::write('form_error', $errors, __FILE__, __LINE__);
             remind::set(Kohana::lang('o_order.user_address_wrong'), 'order/order_add/add_again', 'error');
         }
         /* 添加主订单详情*/
         $order_data = array();
         $user_id = $this->input->post('user_id');
         $email = $this->input->post('email');
         $carrier = $this->input->post('carrier');
         $currency_code = $this->input->post('code');
         if ($user_id && $email && $currency_code) {
             /* 订单用户信息*/
             $order_data['user_id'] = $user_id;
             $order_data['email'] = $email;
             /* 订单币种信息*/
             $currency = Mycurrency::instance()->get_by_code($currency_code);
             $order_data['currency'] = $currency_code;
             $order_data['conversion_rate'] = $currency['conversion_rate'];
             /* 订单国家*/
             $order_data['shipping_country'] = Mycountry::instance($post->shipping_country)->get('iso_code');
             $order_data['billing_country'] = Mycountry::instance($post->billing_country)->get('iso_code');
             /* 订单时间和IP信息*/
             $order_data['data_add'] = date('Y-m-d H:i:s', time());
             $order_data['IP'] = tool::get_long_ip();
             /* 订单号生成*/
             $order_num = '';
             do {
                 $temp = sprintf("%14.0f", date('ymd') . "00000" + rand(0, 99999) . "0000");
                 $exist_data = array();
                 $exist_data['order_num'] = $temp;
                 if (!Myorder::instance()->exist($exist_data)) {
                     $order_num = $temp;
                     break;
                 }
             } while (1);
             $order_data['order_num'] = $order_num;
             $order_data['order_status'] = '1';
             $order_data['pay_status'] = '1';
             $order_data['ship_status'] = '1';
             $order_data['user_status'] = 'NULL';
             $order_data['order_source'] = 'manual';
             $order_data['total'] = $post->good_price + $post->shipping_price;
             $order_data['total_products'] = $post->good_price;
             $order_data['total_shipping'] = $post->shipping_price;
             $order_data['total_real'] = $order_data['total'] / $order_data['conversion_rate'];
             $order_data['total_discount'] = '0.00';
             $order_data['total_paid'] = '0.00';
             $order_data['shipping_firstname'] = $post->shipping_firstname;
             $order_data['shipping_lastname'] = $post->shipping_lastname;
             $order_data['shipping_state'] = $post->shipping_state;
             $order_data['shipping_city'] = $post->shipping_city;
             $order_data['shipping_address'] = $post->shipping_address;
             $order_data['shipping_zip'] = $post->shipping_zip;
             $order_data['shipping_phone'] = $post->shipping_phone;
             $order_data['shipping_mobile'] = $post->shipping_mobile;
             $order_data['billing_firstname'] = $post->billing_firstname;
             $order_data['billing_lastname'] = $post->billing_lastname;
             $order_data['billing_state'] = $post->billing_state;
             $order_data['billing_city'] = $post->billing_city;
             $order_data['billing_address'] = $post->billing_address;
             $order_data['billing_zip'] = $post->billing_zip;
             $order_data['billing_phone'] = $post->billing_phone;
             $order_data['billing_mobile'] = $post->billing_mobile;
             $order_data['carrier'] = $carrier;
             $order_data['active'] = 1;
         } else {
             remind::set(Kohana::lang('o_order.data_trans_wrong'), 'order/order_add', 'error');
         }
         /* 添加订单,返回订单数据*/
         $order_id = Myorder::instance()->add($order_data);
         $order = Myorder::instance($order_id)->get();
         /* 添加订单产品信息*/
         $session = Session::instance();
         $cart_data = $session->get('cart_data');
         if (isset($cart_data) && is_array($cart_data) && count($cart_data) && !empty($order['order_num'])) {
             foreach ($cart_data as $key => $rs) {
                 $good_full_data = ProductService::get_instance()->get($key);
                 $order_product_detail_data = array();
                 $order_product_detail_data['order_id'] = $order['id'];
                 $order_product_detail_data['product_type'] = ProductService::PRODUCT_TYPE_GOODS;
                 $order_product_detail_data['dly_status'] = 'storage';
                 //$order_product_detail_data['product_id']            = $good_full_data['product_id'];
                 $order_product_detail_data['good_id'] = $key;
                 $order_product_detail_data['quantity'] = $rs;
                 $order_product_detail_data['sendnum'] = '0';
                 $order_product_detail_data['price'] = $good_full_data['price'];
                 $order_product_detail_data['discount_price'] = $good_full_data['price'];
                 $order_product_detail_data['weight'] = $good_full_data['weight'];
                 //$order_product_detail_data['name']                = $good_full_data['name_manage'];
                 $order_product_detail_data['name'] = $good_full_data['title'];
                 $order_product_detail_data['SKU'] = $good_full_data['sku'];
                 $order_product_detail_data['brief'] = $good_full_data['brief'];
                 $order_product_detail_data['date_add'] = date('Y-m-d H:i:s', time());
                 $order_product_detail_data['link'] = product::permalink($good_full_data);
                 order::do_order_product_detail_data_by_good(&$order_product_detail_data, $good_full_data, $good_full_data['default_image_id']);
                 $order_product_detail = Myorder_product::instance()->add($order_product_detail_data);
             }
         }
         /*验证是否添加成功,添加成功返回订单号*/
         if (!empty($order['order_num']) && $order_product_detail) {
             remind::set(Kohana::lang('o_order.add_order_success') . $order['order_num'], 'order/order', 'success');
         } else {
             remind::set(Kohana::lang('o_order.add_order_wrong'), 'order/order_add', 'error');
         }
     }
 }
Exemple #6
0
 /**
  * ajax编辑
  */
 function ajax_edit()
 {
     $return_struct = array('status' => 0, 'code' => 501, 'msg' => 'Not Implemented');
     //权限验证
     role::check('user_edit');
     $countries = array();
     $id = intval($this->input->get('id'));
     if (!$id) {
         $return_struct['code'] = 400;
         $return_struct['msg'] = Kohana::lang('o_global.bad_request');
         exit(json_encode($return_struct));
     }
     $address = Myaddress::instance($id)->get();
     $query_struct = array('where' => array('active' => 1), 'orderby' => array('position' => 'DESC', 'name' => 'ASC'));
     $site_countries = Mycountry::instance()->query_assoc($query_struct);
     foreach ($site_countries as $val) {
         $countries[$val['iso_code']] = $val['name'];
     }
     $return_template = $this->template = new View('user/address_edit');
     $this->template->address = $address;
     $this->template->countries = $countries;
     $return_str = $return_template->render();
     $return_struct['status'] = 1;
     $return_struct['code'] = 200;
     $return_struct['msg'] = 'Success';
     $return_struct['content'] = $return_str;
     exit(json_encode($return_struct));
 }
Exemple #7
0
 /**
  *  订单导出
  */
 public function do_export($id = 0)
 {
     // 初始化返回数据
     $return_data = array();
     //请求结构体
     $request_data = array();
     try {
         //权限验证
         role::check('order_export');
         if ($id < 1) {
             throw new MyRuntimeException(Kohana::lang('o_global.data_load_error'), 403);
         }
         if (!$id) {
             throw new MyRuntimeException(Kohana::lang('o_global.data_load_error'), 403);
         }
         if ($_POST) {
             /* 验证是否选择了订单 */
             if (!isset($_POST['order_ids'])) {
                 throw new MyRuntimeException(Kohana::lang('o_order.select_order_export'), 403);
             }
             $order_ids = $this->input->post('order_ids');
             //array(1,2);
             /* 得到当前的导出配置 */
             $data = Myorder_export::instance($id)->get();
             $output_field_ids = unserialize($data['export_ids']);
             /* 导出格式错误 */
             if (!is_array($output_field_ids) || count($output_field_ids) < 1) {
                 throw new MyRuntimeException(Kohana::lang('o_order.order_export_config_error'), 403);
             }
             $xls = export::instance();
             //$xls->debug(true);//开测试模式
             $xls->set_output_field_ids($output_field_ids);
             /* 订单状态,支付状态,物流状态 */
             $order_status = Kohana::config('order.order_status');
             $pay_status = Kohana::config('order.pay_status');
             $ship_status = Kohana::config('order.ship_status');
             $result = array();
             foreach ($order_ids as $order_id) {
                 $order = Myorder::instance($order_id)->get();
                 $shipping_country_name = Mycountry::instance()->get_name_by_iso_code($order['shipping_country']);
                 $billing_country_name = Mycountry::instance()->get_name_by_iso_code($order['billing_country']);
                 $order_products = Myorder_product::instance()->order_product_details(array('order_id' => $order['id']));
                 $order['shipping_country_name'] = $shipping_country_name;
                 $order['billing_country_name'] = $billing_country_name;
                 $order['pay_status_name'] = $pay_status[$order['pay_status']]['name'];
                 $order['ship_status_name'] = $ship_status[$order['ship_status']]['name'];
                 $order['order_status_name'] = $order_status[$order['order_status']]['name'];
                 $order['ip'] = long2ip($order['ip']);
                 if (is_array($order_products) && count($order_products) > 0) {
                     foreach ($order_products as $key => $value) {
                         $order_products[$key]['total'] = round($value['discount_price'] * $value['quantity'] * $order['conversion_rate'], 2);
                     }
                 }
                 $order['product'] = $order_products;
                 $xls->set_order_line($order);
             }
             $xls->output();
             exit;
         }
     } catch (MyRuntimeException $ex) {
         $return_struct['status'] = 0;
         $return_struct['code'] = $ex->getCode();
         $return_struct['msg'] = $ex->getMessage();
         var_dump($return_struct);
         exit;
         //TODO 异常处理
         //throw $ex;
         if ($this->is_ajax_request()) {
             $this->template = new View('layout/empty_html');
             $this->template->content = $return_struct['msg'];
         } else {
             $this->template->return_struct = $return_struct;
             $content = new View('info');
             $this->template->content = $content;
             /* 请求结构数据绑定 */
             $this->template->content->request_data = $request_data;
             /* 返回结构体绑定 */
             $this->template->content->return_struct = $return_struct;
         }
     }
 }
Exemple #8
0
 /**
  * 获取订单指定物流的运费
  *
  * @param  mixed  $delivery_ids
  * @param  string $country_iso
  * @param  array  $delivery_cats
  * @return array  $price_arr
  */
 public static function get_delivery_price_selected($delivery_ids, $country_iso, $delivery_cats = array())
 {
     if (empty($delivery_cats)) {
         $delivery_cats = self::_get_cart_delivary_data();
     }
     if (empty($delivery_cats)) {
         return array();
     }
     $country = Mycountry::instance()->get_by_iso($country_iso);
     if (empty($country)) {
         return array();
     }
     $country_id = $country['id'];
     $price_arr = array();
     if (!is_array($delivery_ids)) {
         $delivery_id = $delivery_ids;
         $delivery = DeliveryService::get_instance()->get($delivery_id);
         $cat_id = $delivery['delivery_category_id'];
         if (key_exists($cat_id, $delivery_cats)) {
             $condition = array('delivery_id' => $delivery_id, 'country_id' => $country_id, 'weight' => $delivery_cats[$cat_id]['weight'], 'total_price' => $delivery_cats[$cat_id]['total_price']);
             $price = self::get_delivery_price_by_condition($condition);
             $price_arr[$delivery_id] = $price;
         } else {
             $price_arr[$delivery_id] = -1;
         }
     } else {
         foreach ($delivery_ids as $delivery_id) {
             $delivery = DeliveryService::get_instance()->get($delivery_id);
             $cat_id = $delivery['delivery_category_id'];
             if (key_exists($cat_id, $delivery_cats)) {
                 $condition = array('delivery_id' => $delivery_id, 'country_id' => $country_id, 'weight' => $delivery_cats[$cat_id]['weight'], 'total_price' => $delivery_cats[$cat_id]['total_price']);
                 $price = self::get_delivery_price_by_condition($condition);
                 $price_arr[$delivery_id] = $price;
             } else {
                 $price_arr[$delivery_id] = -1;
             }
         }
     }
     return $price_arr;
 }
 /**
  * 根据物流id以及国家iso和订单的价格或重量得到费用
  * @param   int    $delivery_id  物流id
  * @param 	String $iso_code     国家简码
  * @param 	float  $total        订单价格
  * @param 	int    $weight       订单重量
  * @return 	array  $deliveries
  */
 public function get_final_delivery_price($delivery_id, $iso_code, $total, $weight = 0)
 {
     $delivery = array();
     $country = Mycountry::instance()->get_by_iso($iso_code);
     if (empty($country['id']) || !isset($country)) {
         return array();
     }
     $country_id = $country['id'];
     $result = $this->get($delivery_id);
     $delivery = $this->get_delivery_price($delivery_id, $country_id, $total, $weight);
     return $delivery;
 }
Exemple #10
0
 /**
  * 批量删除国家
  */
 public function batch_delete()
 {
     //初始化返回数据
     $return_data = array();
     //请求结构体
     $request_data = array();
     try {
         $country_ids = $this->input->post('country_ids');
         if (is_array($country_ids) && count($country_ids) > 0) {
             /* 删除失败的 */
             $failed_country_names = '';
             /* 执行操作 */
             foreach ($country_ids as $country_id) {
                 if (!Mycountry::instance($country_id)->delete()) {
                     $failed_country_names .= ' | ' . $country_id;
                 } else {
                     //删除国家对应的物流
                     Delivery_countryService::get_instance()->delete_delivery_by_country($country_id);
                 }
             }
             if (empty($failed_country_names)) {
                 throw new MyRuntimeException(Kohana::lang('o_site.delete_country_success'), 403);
             } else {
                 /* 中转提示页面的停留时间 */
                 $return_struct['action']['time'] = 10;
                 $failed_country_names = trim($failed_country_names, ' | ');
                 throw new MyRuntimeException(Kohana::lang('o_site.delete_country_error', $failed_country_names), 403);
             }
         } else {
             throw new MyRuntimeException(Kohana::lang('o_global.data_load_error'), 403);
         }
     } catch (MyRuntimeException $ex) {
         $return_struct['status'] = 0;
         $return_struct['code'] = $ex->getCode();
         $return_struct['msg'] = $ex->getMessage();
         //TODO 异常处理
         //throw $ex;
         if ($this->is_ajax_request()) {
             $this->template = new View('layout/empty_html');
             $this->template->content = $return_struct['msg'];
         } else {
             $this->template->return_struct = $return_struct;
             $content = new View('info');
             $this->template->content = $content;
             /* 请求结构数据绑定 */
             $this->template->content->request_data = $request_data;
             /* 返回结构体绑定 */
             $this->template->content->return_struct = $return_struct;
         }
     }
 }