assign('shipping_list', shipping_list());
/* 载入支付方式 */
$smarty->assign('pay_list', payment_list());
/* 载入国家 */
$smarty->assign('country_list', get_regions());
/* 载入订单状态、付款状态、发货状态 */
$smarty->assign('os_list', get_status_list('order'));
$smarty->assign('ps_list', get_status_list('payment'));
$smarty->assign('ss_list', get_status_list('shipping'));
/* 模板赋值 */
$smarty->assign('ur_here', $_LANG['03_order_query']);
$smarty->assign('action_link', array('href' => 'order.php?act=list', 'text' => $_LANG['01_order_list']));
/* 显示模板 */
assign_query_info();
$smarty->display('order_query.htm');
}
/*------------------------------------------------------ */
//-- 订单列表
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'list')
{
/* 检查权限 */
admin_priv('order_list');
/* 模板赋值 */
$smarty->assign('ur_here', $_LANG['01_order_list']);
$smarty->assign('action_link', array('href' => 'order.php?act=order_query', 'text' => $_LANG['03_order_query']));
$smarty->assign('status_list', $_LANG['cs']); // 订单状态
$smarty->assign('os_unconfirmed', OS_UNCONFIRMED);
$smarty->assign('cs_await_pay', CS_AWAIT_PAY);
$smarty->assign('cs_await_ship', CS_AWAIT_SHIP);
$smarty->assign('full_page', 1);
$order_list = order_list();
$smarty->assign('order_list', $order_list['orders']);
$smarty->assign('filter', $order_list['filter']);
$smarty->assign('record_count', $order_list['record_count']);
$smarty->assign('page_count', $order_list['page_count']);
$smarty->assign('sort_order_time', '');
/* 显示模板 */
assign_query_info();
$smarty->display('order_list.htm');
}
elseif($_REQUEST['act'] == 'invoice_list')
{
admin_priv('invoice_manage');
$smarty->assign('ur_here',$_LANG['12_invoice_list']);
$smarty->assign('os_unconfirmed', OS_UNCONFIRMED);
$smarty->assign('cs_await_pay', CS_AWAIT_PAY);
$smarty->assign('cs_await_ship', CS_AWAIT_SHIP);
$smarty->assign('full_page', 1);
$order_list = order_list();
$smarty->assign('order_list', $order_list['orders']);
$smarty->assign('filter', $order_list['filter']);
$smarty->assign('record_count', $order_list['record_count']);
$smarty->assign('page_count', $order_list['page_count']);
$smarty->assign('sort_order_time', '');
assign_query_info();
$smarty->assign('act','invoice_list');
$smarty->display('order_list.htm');
}
/*------------------------------------------------------ */
//-- 排序、分页、查询
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'query')
{
/* 检查权限 */
/*增值税发票_更改_START_*/
if(isset($_REQUEST['act_detail'])&&$_REQUEST['act_detail']=='invoice_query')
{
admin_priv('invoice_manage');
$smarty->assign('act','invoice_list');
}
else
{
admin_priv('order_view');
}
/*增值税发票_更改_END_*/
$order_list = order_list();
$smarty->assign('order_list', $order_list['orders']);
$smarty->assign('filter', $order_list['filter']);
$smarty->assign('record_count', $order_list['record_count']);
$smarty->assign('page_count', $order_list['page_count']);
$sort_flag = sort_flag($order_list['filter']);
$smarty->assign($sort_flag['tag'], $sort_flag['img']);
make_json_result($smarty->fetch('order_list.htm'), '', array('filter' => $order_list['filter'], 'page_count' => $order_list['page_count']));
}
/*------------------------------------------------------ */
//-- 订单详情页面
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'info')
{
/* 根据订单id或订单号查询订单信息 */
if (isset($_REQUEST['order_id']))
{
$order_id = intval($_REQUEST['order_id']);
$order = order_info($order_id);
}
elseif (isset($_REQUEST['order_sn']))
{
$order_sn = trim($_REQUEST['order_sn']);
$order = order_info(0, $order_sn);
}
else
{
/* 如果参数不存在,退出 */
die('invalid parameter');
}
/* 如果订单不存在,退出 */
if (empty($order))
{
die('order does not exist');
}
/*付款方式_添加_START_*/
$payment_sql =
"SELECT pay_code FROM " . $GLOBALS['ecs']->table('payment') .
" WHERE pay_id = " . $order['pay_id'];
$order['pay_code'] = $GLOBALS['db']->getOne($payment_sql);
/*付款方式_添加_end_*/
/* 如果管理员属于某个办事处,检查该订单是否也属于这个办事处 */
$sql = "SELECT agency_id FROM " . $ecs->table('admin_user') . " WHERE user_id = '$_SESSION[admin_id]'";
$agency_id = $db->getOne($sql);
if ($agency_id > 0)
{
if ($order['agency_id'] != $agency_id)
{
sys_msg($_LANG['priv_error']);
}
}
//如果为预售活动则需要判断预售活动是否已经成功结束了,如果未成功结束则不允许发货
if($order['extension_code'] == PRE_SALE_CODE)
{
$pre_sale_id = $order['extension_id'];
$sql = "select is_finished from " . $ecs->table('goods_activity') . " where act_id = '" . $pre_sale_id . "'";
$is_finished = $db->getOne($sql);
if($is_finished == PSS_SUCCEED)
{
$smarty->assign('pre_sale_success', '1');
}
else
{
$smarty->assign('pre_sale_success', '0');
}
$smarty->assign('is_pre_sale', '1');
}
else
{
$smarty->assign('is_pre_sale', '0');
}
/* 取得上一个、下一个订单号 */
if (!empty($_COOKIE['ECSCP']['lastfilter']))
{
$filter = unserialize(urldecode($_COOKIE['ECSCP']['lastfilter']));
if (!empty($filter['composite_status']))
{
$where = '';
//综合状态
switch($filter['composite_status'])
{
case CS_AWAIT_PAY :
$where .= order_query_sql('await_pay');
break;
case CS_AWAIT_SHIP :
$where .= order_query_sql('await_ship');
break;
case CS_FINISHED :
$where .= order_query_sql('finished');
break;
default:
if ($filter['composite_status'] != -1)
{
$where .= " AND o.order_status = '$filter[composite_status]' ";
}
}
}
}
$sql = "SELECT MAX(order_id) FROM " . $ecs->table('order_info') . " as o WHERE supplier_id = '$order[supplier_id]' and order_id < '$order[order_id]'";
if ($agency_id > 0)
{
$sql .= " AND agency_id = '$agency_id'";
}
if (!empty($where))
{
$sql .= $where;
}
$smarty->assign('prev_id', $db->getOne($sql));
$sql = "SELECT MIN(order_id) FROM " . $ecs->table('order_info') . " as o WHERE supplier_id = '$order[supplier_id]' and order_id > '$order[order_id]'";
if ($agency_id > 0)
{
$sql .= " AND agency_id = '$agency_id'";
}
if (!empty($where))
{
$sql .= $where;
}
$smarty->assign('next_id', $db->getOne($sql));
/* 取得用户名 */
if ($order['user_id'] > 0)
{
$user = user_info($order['user_id']);
if (!empty($user))
{
$order['user_name'] = $user['user_name'];
}
}
/* 取得所有办事处 */
$sql = "SELECT agency_id, agency_name FROM " . $ecs->table('agency');
$smarty->assign('agency_list', $db->getAll($sql));
/* 取得区域名 */
$sql = "SELECT concat(IFNULL(c.region_name, ''), ' ', IFNULL(p.region_name, ''), " .
"' ', IFNULL(t.region_name, ''), ' ', IFNULL(d.region_name, '')) AS region " .
"FROM " . $ecs->table('order_info') . " AS o " .
"LEFT JOIN " . $ecs->table('region') . " AS c ON o.country = c.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS p ON o.province = p.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS t ON o.city = t.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS d ON o.district = d.region_id " .
"WHERE o.order_id = '$order[order_id]'";
$order['region'] = $db->getOne($sql);
/* 格式化金额 */
if ($order['order_amount'] < 0)
{
$order['money_refund'] = abs($order['order_amount']);
$order['formated_money_refund'] = price_format(abs($order['order_amount']));
}
/*增值税发票_添加_START_*/
/*增值税发票收票地址*/
if($order['inv_type'] == 'vat_invoice')
{
$order['inv_complete_address'] = get_inv_complete_address($order);
}
/*发票金额*/
$order['formatted_inv_money'] = price_format($order['inv_money']);
/*增值税发票_添加_END_*/
/* 其他处理 */
$order['order_time'] = local_date($_CFG['time_format'], $order['add_time']);
$order['pay_time'] = $order['pay_time'] > 0 ?
local_date($_CFG['time_format'], $order['pay_time']) : $_LANG['ps'][PS_UNPAYED];
$order['shipping_time'] = $order['shipping_time'] > 0 ?
local_date($_CFG['time_format'], $order['shipping_time']) : $_LANG['ss'][SS_UNSHIPPED];
$order['status'] = $_LANG['os'][$order['order_status']] . ',' . $_LANG['ps'][$order['pay_status']] . ',' . $_LANG['ss'][$order['shipping_status']];
$order['invoice_no'] = $order['shipping_status'] == SS_UNSHIPPED || $order['shipping_status'] == SS_PREPARING ? $_LANG['ss'][SS_UNSHIPPED] : $order['invoice_no'];
/* 取得订单的来源 */
if ($order['from_ad'] == 0)
{
$order['referer'] = empty($order['referer']) ? $_LANG['from_self_site'] : $order['referer'];
}
elseif ($order['from_ad'] == -1)
{
$order['referer'] = $_LANG['from_goods_js'] . ' ('.$_LANG['from'] . $order['referer'].')';
}
else
{
/* 查询广告的名称 */
$ad_name = $db->getOne("SELECT ad_name FROM " .$ecs->table('ad'). " WHERE ad_id='$order[from_ad]'");
$order['referer'] = $_LANG['from_ad_js'] . $ad_name . ' ('.$_LANG['from'] . $order['referer'].')';
}
/* 此订单的发货备注(此订单的最后一条操作记录) */
$sql = "SELECT action_note FROM " . $ecs->table('order_action').
" WHERE order_id = '$order[order_id]' AND shipping_status = 1 ORDER BY log_time DESC";
$order['invoice_note'] = $db->getOne($sql);
/* 取得订单商品总重量 */
$weight_price = order_weight_price($order['order_id']);
$order['total_weight'] = $weight_price['formated_weight'];
/* 参数赋值:订单 */
$smarty->assign('order', $order);
/* 取得用户信息 */
if ($order['user_id'] > 0)
{
/* 用户等级 */
if ($user['user_rank'] > 0)
{
$where = " WHERE rank_id = '$user[user_rank]' ";
}
else
{
$where = " WHERE min_points <= " . intval($user['rank_points']) . " ORDER BY min_points DESC ";
}
$sql = "SELECT rank_name FROM " . $ecs->table('user_rank') . $where;
$user['rank_name'] = $db->getOne($sql);
// 用户红包数量
$day = getdate();
$today = local_mktime(23, 59, 59, $day['mon'], $day['mday'], $day['year']);
$sql = "SELECT COUNT(*) " .
"FROM " . $ecs->table('bonus_type') . " AS bt, " . $ecs->table('user_bonus') . " AS ub " .
"WHERE bt.type_id = ub.bonus_type_id " .
"AND ub.user_id = '$order[user_id]' " .
"AND ub.order_id = 0 " .
"AND bt.use_start_date <= '$today' " .
"AND bt.use_end_date >= '$today'";
$user['bonus_count'] = $db->getOne($sql);
$smarty->assign('user', $user);
// 地址信息
$sql = "SELECT * FROM " . $ecs->table('user_address') . " WHERE user_id = '$order[user_id]'";
$smarty->assign('address_list', $db->getAll($sql));
}
/* 取得订单商品及货品 */
$goods_list = array();
$goods_attr = array();
$sql = "SELECT o.*, IF(o.product_id > 0, p.product_number, g.goods_number) AS storage, o.goods_attr, g.suppliers_id, IFNULL(b.brand_name, '') AS brand_name, p.product_sn
FROM " . $ecs->table('order_goods') . " AS o
LEFT JOIN " . $ecs->table('products') . " AS p
ON p.product_id = o.product_id
LEFT JOIN " . $ecs->table('goods') . " AS g
ON o.goods_id = g.goods_id
LEFT JOIN " . $ecs->table('brand') . " AS b
ON g.brand_id = b.brand_id
WHERE o.order_id = '$order[order_id]'";
$res = $db->query($sql);
while ($row = $db->fetchRow($res))
{
/* 虚拟商品支持 */
if ($row['is_real'] == 0)
{
/* 取得语言项 */
$filename = ROOT_PATH . 'plugins/' . $row['extension_code'] . '/languages/common_' . $_CFG['lang'] . '.php';
if (file_exists($filename))
{
include_once($filename);
if (!empty($_LANG[$row['extension_code'].'_link']))
{
$row['goods_name'] = $row['goods_name'] . sprintf($_LANG[$row['extension_code'].'_link'], $row['goods_id'], $order['order_sn']);
}
}
}
//手机专享价格修改 app jx
if($row['exclusive'] == '-1')
{
$row['formated_subtotal'] = price_format($row['goods_price'] * $row['goods_number']);
$row['formated_goods_price'] = price_format($row['goods_price']);
$row['exclusive'] = "没有手机专享价格";
}else
{
if($row['exclusive'] > $row['goods_price'])
{
$row['formated_subtotal'] = price_format($row['goods_price'] * $row['goods_number']);
$row['formated_goods_price'] = price_format($row['goods_price']);
$row['exclusive'] = "没有手机专享价格";
}else
{
$row['formated_subtotal'] = price_format($row['exclusive'] * $row['goods_number']);
$row['formated_goods_price'] = price_format($row['goods_price']);
$row['exclusive'] = price_format($row['exclusive']);
}
}
//手机专享价格修改 app jx
$goods_attr[] = explode(' ', trim($row['goods_attr'])); //将商品属性拆分为一个数组
if ($row['extension_code'] == 'package_buy')
{
$row['storage'] = '';
$row['brand_name'] = '';
$row['package_goods_list'] = get_package_goods($row['goods_id']);
}
$sql_back = "SELECT bg.*, bo.back_type FROM " . $ecs->table('back_goods') . " AS bg " .
" LEFT JOIN " . $ecs->table('back_order') . " AS bo " .
" ON bg.back_id = bo.back_id " .
" WHERE bo.order_id = " . $order['order_id'] .
" AND bg.goods_id = " . $row['goods_id'] .
" AND bg.product_id = " . $row['product_id'] .
" AND bg.status_back < 6";
$back_info = $db->getRow($sql_back);
if (count($back_info['back_id']) > 0)
{
switch ($back_info['status_back'])
{
case '3' : $sb = "已完成"; break;
case '5' : $sb = "已申请"; break;
//case '6' : $sb = ""; break;
//case '7' : $sb = ""; break;
default : $sb = "正在"; break;
}
switch ($back_info['back_type'])
{
case '1' : $bt = "退货"; break;
case '3' : $bt = "申请维修"; break;
case '4' : $bt = "退款"; break;
default : break;
}
$shouhou = $sb." ".$bt;
}
else
{
$shouhou = "正常";
}
$row['shouhou'] = $shouhou;
$goods_list[] = $row;
}
$attr = array();
$arr = array();
foreach ($goods_attr AS $index => $array_val)
{
foreach ($array_val AS $value)
{
$arr = explode(':', $value);//以 : 号将属性拆开
$attr[$index][] = @array('name' => $arr[0], 'value' => $arr[1]);
}
}
$smarty->assign('goods_attr', $attr);
$smarty->assign('goods_list', $goods_list);
/* 取得能执行的操作列表 */
$operable_list = operable_list($order);
$smarty->assign('operable_list', $operable_list);
/* 取得订单操作记录 */
$act_list = array();
$sql = "SELECT * FROM " . $ecs->table('order_action') . " WHERE order_id = '$order[order_id]' ORDER BY log_time DESC,action_id DESC";
$res = $db->query($sql);
while ($row = $db->fetchRow($res))
{
$row['order_status'] = $_LANG['os'][$row['order_status']];
$row['pay_status'] = $_LANG['ps'][$row['pay_status']];
$row['shipping_status'] = $_LANG['ss'][$row['shipping_status']];
$row['action_time'] = local_date($_CFG['time_format'], $row['log_time']);
$act_list[] = $row;
}
$smarty->assign('action_list', $act_list);
/* 取得是否存在实体商品 */
$smarty->assign('exist_real_goods', exist_real_goods($order['order_id']));
/* 是否打印订单,分别赋值 */
if (isset($_GET['print']))
{
$smarty->assign('shop_name', $_CFG['shop_name']);
$smarty->assign('shop_url', $ecs->url());
$smarty->assign('shop_address', $_CFG['shop_address']);
$smarty->assign('service_phone',$_CFG['service_phone']);
$smarty->assign('print_time', local_date($_CFG['time_format']));
$smarty->assign('action_user', $_SESSION['admin_name']);
$smarty->template_dir = '../' . DATA_DIR;
$smarty->display('order_print.html');
}
/* 打印快递单 */
elseif (isset($_GET['shipping_print']))
{
//$smarty->assign('print_time', local_date($_CFG['time_format']));
//发货地址所在地
$region_array = array();
$region_id = !empty($_CFG['shop_country']) ? $_CFG['shop_country'] . ',' : '';
$region_id .= !empty($_CFG['shop_province']) ? $_CFG['shop_province'] . ',' : '';
$region_id .= !empty($_CFG['shop_city']) ? $_CFG['shop_city'] . ',' : '';
$region_id .= !empty($_CFG['shop_district']) ? $_CFG['shop_district'] . ',' : '';
$region_id .= !empty($order['country']) ? $order['country'] . ',' : '';
$region_id .= !empty($order['province']) ? $order['province'] . ',' : '';
$region_id .= !empty($order['city']) ? $order['city'] . ',' : '';
$region_id .= !empty($order['district']) ? $order['district'] . ',' : '';
$region_id = substr($region_id, 0, -1);
$region = $db->getAll("SELECT region_id, region_name FROM " . $ecs->table("region") . " WHERE region_id IN ($region_id)");
if (!empty($region))
{
foreach($region as $region_data)
{
$region_array[$region_data['region_id']] = $region_data['region_name'];
}
}
$smarty->assign('shop_name', $_CFG['shop_name']);
$smarty->assign('order_id', $order_id);
$smarty->assign('province', $region_array[$_CFG['shop_province']]);
$smarty->assign('city', $region_array[$_CFG['shop_city']]);
$smarty->assign('shop_address', $_CFG['shop_address']);
$smarty->assign('service_phone',$_CFG['service_phone']);
$shipping = $db->getRow("SELECT * FROM " . $ecs->table("shipping") . " WHERE shipping_id = " . $order['shipping_id']);
//打印单模式
if ($shipping['print_model'] == 2)
{
/* 可视化 */
/* 快递单 */
$shipping['print_bg'] = empty($shipping['print_bg']) ? '' : get_site_root_url() . $shipping['print_bg'];
/* 取快递单背景宽高 */
if (!empty($shipping['print_bg']))
{
$_size = @getimagesize($shipping['print_bg']);
if ($_size != false)
{
$shipping['print_bg_size'] = array('width' => $_size[0], 'height' => $_size[1]);
}
}
if (empty($shipping['print_bg_size']))
{
$shipping['print_bg_size'] = array('width' => '1024', 'height' => '600');
}
/* 标签信息 */
$lable_box = array();
$lable_box['t_shop_country'] = $region_array[$_CFG['shop_country']]; //网店-国家
$lable_box['t_shop_city'] = $region_array[$_CFG['shop_city']]; //网店-城市
$lable_box['t_shop_province'] = $region_array[$_CFG['shop_province']]; //网店-省份
$lable_box['t_shop_name'] = $_CFG['shop_name']; //网店-名称
$lable_box['t_shop_district'] = ''; //网店-区/县
$lable_box['t_shop_tel'] = $_CFG['service_phone']; //网店-联系电话
$lable_box['t_shop_address'] = $_CFG['shop_address']; //网店-地址
$lable_box['t_customer_country'] = $region_array[$order['country']]; //收件人-国家
$lable_box['t_customer_province'] = $region_array[$order['province']]; //收件人-省份
$lable_box['t_customer_city'] = $region_array[$order['city']]; //收件人-城市
$lable_box['t_customer_district'] = $region_array[$order['district']]; //收件人-区/县
$lable_box['t_customer_tel'] = $order['tel']; //收件人-电话
$lable_box['t_customer_mobel'] = $order['mobile']; //收件人-手机
$lable_box['t_customer_post'] = $order['zipcode']; //收件人-邮编
$lable_box['t_customer_address'] = $order['address']; //收件人-详细地址
$lable_box['t_customer_name'] = $order['consignee']; //收件人-姓名
$gmtime_utc_temp = gmtime(); //获取 UTC 时间戳
$lable_box['t_year'] = date('Y', $gmtime_utc_temp); //年-当日日期
$lable_box['t_months'] = date('m', $gmtime_utc_temp); //月-当日日期
$lable_box['t_day'] = date('d', $gmtime_utc_temp); //日-当日日期
$lable_box['t_order_no'] = $order['order_sn']; //订单号-订单
$lable_box['t_order_postscript'] = $order['postscript']; //备注-订单
$lable_box['t_order_best_time'] = $order['best_time']; //送货时间-订单
$lable_box['t_pigeon'] = '√'; //√-对号
$lable_box['t_custom_content'] = ''; //自定义内容
//标签替换
$temp_config_lable = explode('||,||', $shipping['config_lable']);
if (!is_array($temp_config_lable))
{
$temp_config_lable[] = $shipping['config_lable'];
}
foreach ($temp_config_lable as $temp_key => $temp_lable)
{
$temp_info = explode(',', $temp_lable);
if (is_array($temp_info))
{
$temp_info[1] = $lable_box[$temp_info[0]];
}
$temp_config_lable[$temp_key] = implode(',', $temp_info);
}
$shipping['config_lable'] = implode('||,||', $temp_config_lable);
$smarty->assign('shipping', $shipping);
$smarty->display('print.htm');
}
elseif (!empty($shipping['shipping_print']))
{
/* 代码 */
echo $smarty->fetch("str:" . $shipping['shipping_print']);
}
else
{
$shipping_code = $db->getOne("SELECT shipping_code FROM " . $ecs->table('shipping') . " WHERE shipping_id=" . $order['shipping_id']);
if ($shipping_code)
{
include_once(ROOT_PATH . 'includes/modules/shipping/' . $shipping_code . '.php');
}
if (!empty($_LANG['shipping_print']))
{
echo $smarty->fetch("str:$_LANG[shipping_print]");
}
else
{
echo $_LANG['no_print_shipping'];
}
}
}
else
{
/* 模板赋值 */
$smarty->assign('ur_here', $_LANG['order_info']);
$smarty->assign('action_link', array('href' => 'order.php?act=list&' . list_link_postfix(), 'text' => $_LANG['01_order_list']));
/* 显示模板 */
assign_query_info();
$smarty->display('order_info.htm');
}
}
/*------------------------------------------------------ */
//-- 发货单列表
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'delivery_list')
{
admin_priv('delivery_order');
/* 查询 */
$result = delivery_list();
/* 模板赋值 */
$smarty->assign('ur_here', $_LANG['09_delivery_order']);
$smarty->assign('os_unconfirmed', OS_UNCONFIRMED);
$smarty->assign('cs_await_pay', CS_AWAIT_PAY);
$smarty->assign('cs_await_ship', CS_AWAIT_SHIP);
$smarty->assign('full_page', 1);
$smarty->assign('delivery_list', $result['delivery']);
$smarty->assign('filter', $result['filter']);
$smarty->assign('record_count', $result['record_count']);
$smarty->assign('page_count', $result['page_count']);
$smarty->assign('sort_update_time', '');
/* 显示模板 */
assign_query_info();
$smarty->display('delivery_list.htm');
}
/*------------------------------------------------------ */
//-- 搜索、排序、分页
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'delivery_query')
{
/* 检查权限 */
admin_priv('delivery_order');
$result = delivery_list();
$smarty->assign('delivery_list', $result['delivery']);
$smarty->assign('filter', $result['filter']);
$smarty->assign('record_count', $result['record_count']);
$smarty->assign('page_count', $result['page_count']);
$sort_flag = sort_flag($result['filter']);
$smarty->assign($sort_flag['tag'], $sort_flag['img']);
make_json_result($smarty->fetch('delivery_list.htm'), '', array('filter' => $result['filter'], 'page_count' => $result['page_count']));
}
/*------------------------------------------------------ */
//-- 发货单详细
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'delivery_info')
{
admin_priv('delivery_order');
$delivery_id = intval(trim($_REQUEST['delivery_id']));
/* 根据发货单id查询发货单信息 */
if (!empty($delivery_id))
{
$delivery_order = delivery_order_info($delivery_id);
}
else
{
die('order does not exist');
}
/* 如果管理员属于某个办事处,检查该订单是否也属于这个办事处 */
$sql = "SELECT agency_id FROM " . $ecs->table('admin_user') . " WHERE user_id = '" . $_SESSION['admin_id'] . "'";
$agency_id = $db->getOne($sql);
if ($agency_id > 0)
{
if ($delivery_order['agency_id'] != $agency_id)
{
sys_msg($_LANG['priv_error']);
}
/* 取当前办事处信息 */
$sql = "SELECT agency_name FROM " . $ecs->table('agency') . " WHERE agency_id = '$agency_id' LIMIT 0, 1";
$agency_name = $db->getOne($sql);
$delivery_order['agency_name'] = $agency_name;
}
/* 取得用户名 */
if ($delivery_order['user_id'] > 0)
{
$user = user_info($delivery_order['user_id']);
if (!empty($user))
{
$delivery_order['user_name'] = $user['user_name'];
}
}
/* 取得区域名 */
$sql = "SELECT concat(IFNULL(c.region_name, ''), ' ', IFNULL(p.region_name, ''), " .
"' ', IFNULL(t.region_name, ''), ' ', IFNULL(d.region_name, '')) AS region " .
"FROM " . $ecs->table('order_info') . " AS o " .
"LEFT JOIN " . $ecs->table('region') . " AS c ON o.country = c.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS p ON o.province = p.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS t ON o.city = t.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS d ON o.district = d.region_id " .
"WHERE o.order_id = '" . $delivery_order['order_id'] . "'";
$delivery_order['region'] = $db->getOne($sql);
/* 是否保价 */
$order['insure_yn'] = empty($order['insure_fee']) ? 0 : 1;
/* 取得发货单商品 */
$goods_sql = "SELECT *
FROM " . $ecs->table('delivery_goods') . "
WHERE delivery_id = " . $delivery_order['delivery_id'];
$goods_list = $GLOBALS['db']->getAll($goods_sql);
/* 是否存在实体商品 */
$exist_real_goods = 0;
if ($goods_list)
{
foreach ($goods_list as $value)
{
if ($value['is_real'])
{
$exist_real_goods++;
}
}
}
/* 取得订单操作记录 */
$act_list = array();
$sql = "SELECT * FROM " . $ecs->table('order_action') . " WHERE order_id = '" . $delivery_order['order_id'] . "' AND action_place = 1 ORDER BY log_time DESC,action_id DESC";
$res = $db->query($sql);
while ($row = $db->fetchRow($res))
{
$row['order_status'] = $_LANG['os'][$row['order_status']];
$row['pay_status'] = $_LANG['ps'][$row['pay_status']];
$row['shipping_status'] = ($row['shipping_status'] == SS_SHIPPED_ING) ? $_LANG['ss_admin'][SS_SHIPPED_ING] : $_LANG['ss'][$row['shipping_status']];
$row['action_time'] = local_date($_CFG['time_format'], $row['log_time']);
$act_list[] = $row;
}
$smarty->assign('action_list', $act_list);
/* 模板赋值 */
$smarty->assign('delivery_order', $delivery_order);
$smarty->assign('exist_real_goods', $exist_real_goods);
$smarty->assign('goods_list', $goods_list);
$smarty->assign('delivery_id', $delivery_id); // 发货单id
/* 显示模板 */
$smarty->assign('ur_here', $_LANG['delivery_operate'] . $_LANG['detail']);
$smarty->assign('action_link', array('href' => 'order.php?act=delivery_list&' . list_link_postfix(), 'text' => $_LANG['09_delivery_order']));
$smarty->assign('action_act', ($delivery_order['status'] == 2) ? 'delivery_ship' : 'delivery_cancel_ship');
assign_query_info();
$smarty->display('delivery_info.htm');
exit; //
}
/*------------------------------------------------------ */
//-- 发货单发货确认
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'delivery_ship')
{
admin_priv('delivery_order');
/* 定义当前时间 */
define('GMTIME_UTC', gmtime()); // 获取 UTC 时间戳
/* 取得参数 */
$delivery = array();
$order_id = intval(trim($_REQUEST['order_id'])); // 订单id
$delivery_id = intval(trim($_REQUEST['delivery_id'])); // 发货单id
$delivery['invoice_no'] = isset($_REQUEST['invoice_no']) ? trim($_REQUEST['invoice_no']) : '';
$action_note = isset($_REQUEST['action_note']) ? trim($_REQUEST['action_note']) : '';
/* 根据发货单id查询发货单信息 */
if (!empty($delivery_id))
{
$delivery_order = delivery_order_info($delivery_id);
}
else
{
die('order does not exist');
}
/* 查询订单信息 */
$order = order_info($order_id);
/* 检查此单发货商品库存缺货情况 */
$virtual_goods = array();
$delivery_stock_sql = "SELECT DG.goods_id, DG.is_real, DG.product_id, SUM(DG.send_number) AS sums, IF(DG.product_id > 0, P.product_number, G.goods_number) AS storage, G.goods_name, DG.send_number
FROM " . $GLOBALS['ecs']->table('delivery_goods') . " AS DG, " . $GLOBALS['ecs']->table('goods') . " AS G, " . $GLOBALS['ecs']->table('products') . " AS P
WHERE DG.goods_id = G.goods_id
AND DG.delivery_id = '$delivery_id'
AND DG.product_id = P.product_id
GROUP BY DG.product_id ";
$delivery_stock_result = $GLOBALS['db']->getAll($delivery_stock_sql);
/* 如果商品存在规格就查询规格,如果不存在规格按商品库存查询 */
if(!empty($delivery_stock_result))
{
foreach ($delivery_stock_result as $value)
{
if (($value['sums'] > $value['storage'] || $value['storage'] <= 0) && (($_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP) || ($_CFG['use_storage'] == '0' && $value['is_real'] == 0)))
{
/* 操作失败 */
$links[] = array('text' => $_LANG['order_info'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
sys_msg(sprintf($_LANG['act_good_vacancy'], $value['goods_name']), 1, $links);
break;
}
/* 虚拟商品列表 virtual_card*/
if ($value['is_real'] == 0)
{
$virtual_goods[] = array(
'goods_id' => $value['goods_id'],
'goods_name' => $value['goods_name'],
'num' => $value['send_number']
);
}
}
}
else
{
$delivery_stock_sql = "SELECT DG.goods_id, DG.is_real, SUM(DG.send_number) AS sums, G.goods_number, G.goods_name, DG.send_number
FROM " . $GLOBALS['ecs']->table('delivery_goods') . " AS DG, " . $GLOBALS['ecs']->table('goods') . " AS G
WHERE DG.goods_id = G.goods_id
AND DG.delivery_id = '$delivery_id'
GROUP BY DG.goods_id ";
$delivery_stock_result = $GLOBALS['db']->getAll($delivery_stock_sql);
foreach ($delivery_stock_result as $value)
{
if (($value['sums'] > $value['goods_number'] || $value['goods_number'] <= 0) && (($_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP) || ($_CFG['use_storage'] == '0' && $value['is_real'] == 0)))
{
/* 操作失败 */
$links[] = array('text' => $_LANG['order_info'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
sys_msg(sprintf($_LANG['act_good_vacancy'], $value['goods_name']), 1, $links);
break;
}
/* 虚拟商品列表 virtual_card*/
if ($value['is_real'] == 0)
{
$virtual_goods[] = array(
'goods_id' => $value['goods_id'],
'goods_name' => $value['goods_name'],
'num' => $value['send_number']
);
}
}
}
/* 发货 */
/* 处理虚拟卡 商品(虚货) */
if (is_array($virtual_goods) && count($virtual_goods) > 0)
{
foreach ($virtual_goods as $virtual_value)
{
virtual_card_shipping($virtual_value,$order['order_sn'], $msg, 'split');
}
}
/* 如果使用库存,且发货时减库存,则修改库存 */
if ($_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP)
{
foreach ($delivery_stock_result as $value)
{
/* 商品(实货)、超级礼包(实货) */
if ($value['is_real'] != 0)
{
//(货品)
if (!empty($value['product_id']))
{
$minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('products') . "
SET product_number = product_number - " . $value['sums'] . "
WHERE product_id = " . $value['product_id'];
$GLOBALS['db']->query($minus_stock_sql, 'SILENT');
}
$minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('goods') . "
SET goods_number = goods_number - " . $value['sums'] . "
WHERE goods_id = " . $value['goods_id'];
$GLOBALS['db']->query($minus_stock_sql, 'SILENT');
}
}
}
/* 修改发货单信息 */
$invoice_no = str_replace(',', '
', $delivery['invoice_no']);
$invoice_no = trim($invoice_no, '
');
$_delivery['invoice_no'] = $invoice_no;
$_delivery['status'] = 0; // 0,为已发货
$query = $db->autoExecute($ecs->table('delivery_order'), $_delivery, 'UPDATE', "delivery_id = $delivery_id", 'SILENT');
if (!$query)
{
/* 操作失败 */
$links[] = array('text' => $_LANG['delivery_sn'] . $_LANG['detail'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
sys_msg($_LANG['act_false'], 1, $links);
}
/* 标记订单为已确认 “已发货” */
/* 更新发货时间 */
$order_finish = get_all_delivery_finish($order_id);
$shipping_status = ($order_finish == 1) ? SS_SHIPPED : SS_SHIPPED_PART;
$arr['shipping_status'] = $shipping_status;
$arr['shipping_time'] = GMTIME_UTC; // 发货时间
$arr['invoice_no'] = trim($order['invoice_no'] . '
' . $invoice_no, '
');
update_order($order_id, $arr);
$sql_back_old = $db->getOne("SELECT back_id FROM " . $ecs->table('back_order') . " WHERE order_id = " . $order['order_id'] . " AND back_type = 4 AND status_back < 6 AND status_back != 3");
if (!empty($sql_back_old))
{
$db->query("UPDATE " . $ecs->table('back_order') . " SET status_back = 6 WHERE back_id = " . $sql_back_old);
$db->query("UPDATE " . $ecs->table('back_goods') . " SET status_back = 6 WHERE back_id = " . $sql_back_old);
}
/* 发货单发货记录log */
order_action($order['order_sn'], OS_CONFIRMED, $shipping_status, $order['pay_status'], $action_note, null, 1);
/* 如果当前订单已经全部发货 */
if ($order_finish)
{
/* 如果订单用户不为空,计算积分,并发给用户;发红包 */
if ($order['user_id'] > 0)
{
/* 取得用户信息 */
$user = user_info($order['user_id']);
/* 计算并发放积分 */
$integral = integral_to_give($order);
log_account_change($order['user_id'], 0, 0, intval($integral['rank_points']), intval($integral['custom_points']), sprintf($_LANG['order_gift_integral'], $order['order_sn']));
/* 发放红包 */
send_order_bonus($order_id,$order['supplier_id']);
}
/* 发送邮件 */
$cfg = $_CFG['send_ship_email'];
if ($cfg == '1')
{
$order['invoice_no'] = $invoice_no;
$tpl = get_mail_template('deliver_notice');
$smarty->assign('order', $order);
$smarty->assign('send_time', local_date($_CFG['time_format']));
$smarty->assign('shop_name', $_CFG['shop_name']);
$smarty->assign('send_date', local_date($_CFG['date_format']));
$smarty->assign('sent_date', local_date($_CFG['date_format']));
$smarty->assign('confirm_url', $ecs->url() . 'receive.php?id=' . $order['order_id'] . '&con=' . rawurlencode($order['consignee']));
$smarty->assign('send_msg_url',$ecs->url() . 'user.php?act=message_list&order_id=' . $order['order_id']);
$content = $smarty->fetch('str:' . $tpl['template_content']);
if (!send_mail($order['consignee'], $order['email'], $tpl['template_subject'], $content, $tpl['is_html']))
{
$msg = $_LANG['send_mail_fail'];
}
}
/* 如果需要,发短信 */
if ($GLOBALS['_CFG']['sms_order_shipped'] == '1' && $order['mobile'] != '')
{
include_once(ROOT_PATH.'sms/sms.php');
$content = sprintf($_CFG['sms_order_shipped_tpl'],$order['order_sn'],$order['consignee'],$order['address'],$GLOBALS['_CFG']['shop_name']);
//$content = '您的订单已发货,订单号为'.$order['order_sn'].'收货人为'.$order['consignee'].'收货地址为'.$order['address'].',请注意查收【'.$GLOBALS['_CFG']['shop_name'].'】';
sendSMS($order['mobile'],$content);
}
}
/* 清除缓存 */
clear_cache_files();
/* 操作成功 */
$links[] = array('text' => $_LANG['09_delivery_order'], 'href' => 'order.php?act=delivery_list');
$links[] = array('text' => $_LANG['delivery_sn'] . $_LANG['detail'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
sys_msg($_LANG['act_ok'], 0, $links);
}
/*------------------------------------------------------ */
//-- 发货单取消发货
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'delivery_cancel_ship')
{
/* 检查权限 */
admin_priv('delivery_order');
/* 取得参数 */
$delivery = '';
$order_id = intval(trim($_REQUEST['order_id'])); // 订单id
$delivery_id = intval(trim($_REQUEST['delivery_id'])); // 发货单id
$delivery['invoice_no'] = isset($_REQUEST['invoice_no']) ? trim($_REQUEST['invoice_no']) : '';
$action_note = isset($_REQUEST['action_note']) ? trim($_REQUEST['action_note']) : '';
/* 根据发货单id查询发货单信息 */
if (!empty($delivery_id))
{
$delivery_order = delivery_order_info($delivery_id);
}
else
{
die('order does not exist');
}
/* 查询订单信息 */
$order = order_info($order_id);
/* 取消当前发货单物流单号 */
$_delivery['invoice_no'] = '';
$_delivery['status'] = 2;
$query = $db->autoExecute($ecs->table('delivery_order'), $_delivery, 'UPDATE', "delivery_id = $delivery_id", 'SILENT');
if (!$query)
{
/* 操作失败 */
$links[] = array('text' => $_LANG['delivery_sn'] . $_LANG['detail'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
sys_msg($_LANG['act_false'], 1, $links);
exit;
}
/* 修改定单发货单号 */
$invoice_no_order = explode('
', $order['invoice_no']);
$invoice_no_delivery = explode('
', $delivery_order['invoice_no']);
foreach ($invoice_no_order as $key => $value)
{
$delivery_key = array_search($value, $invoice_no_delivery);
if ($delivery_key !== false)
{
unset($invoice_no_order[$key], $invoice_no_delivery[$delivery_key]);
if (count($invoice_no_delivery) == 0)
{
break;
}
}
}
$_order['invoice_no'] = implode('
', $invoice_no_order);
/* 更新配送状态 */
$order_finish = get_all_delivery_finish($order_id);
$shipping_status = ($order_finish == -1) ? SS_SHIPPED_PART : SS_SHIPPED_ING;
$arr['shipping_status'] = $shipping_status;
if ($shipping_status == SS_SHIPPED_ING)
{
$arr['shipping_time'] = ''; // 发货时间
}
$arr['invoice_no'] = $_order['invoice_no'];
update_order($order_id, $arr);
/* 发货单取消发货记录log */
order_action($order['order_sn'], $order['order_status'], $shipping_status, $order['pay_status'], $action_note, null, 1);
/* 如果使用库存,则增加库存 */
if ($_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP)
{
// 检查此单发货商品数量
$virtual_goods = array();
$delivery_stock_sql = "SELECT DG.goods_id, DG.product_id, DG.is_real, SUM(DG.send_number) AS sums
FROM " . $GLOBALS['ecs']->table('delivery_goods') . " AS DG
WHERE DG.delivery_id = '$delivery_id'
GROUP BY DG.goods_id ";
$delivery_stock_result = $GLOBALS['db']->getAll($delivery_stock_sql);
foreach ($delivery_stock_result as $key => $value)
{
/* 虚拟商品 */
if ($value['is_real'] == 0)
{
continue;
}
//(货品)
if (!empty($value['product_id']))
{
$minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('products') . "
SET product_number = product_number + " . $value['sums'] . "
WHERE product_id = " . $value['product_id'];
$GLOBALS['db']->query($minus_stock_sql, 'SILENT');
}
$minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('goods') . "
SET goods_number = goods_number + " . $value['sums'] . "
WHERE goods_id = " . $value['goods_id'];
$GLOBALS['db']->query($minus_stock_sql, 'SILENT');
}
}
/* 发货单全退回时,退回其它 */
if ($order['order_status'] == SS_SHIPPED_ING)
{
/* 如果订单用户不为空,计算积分,并退回 */
if ($order['user_id'] > 0)
{
/* 取得用户信息 */
$user = user_info($order['user_id']);
/* 计算并退回积分 */
$integral = integral_to_give($order);
log_account_change($order['user_id'], 0, 0, (-1) * intval($integral['rank_points']), (-1) * intval($integral['custom_points']), sprintf($_LANG['return_order_gift_integral'], $order['order_sn']));
/* todo 计算并退回红包 */
return_order_bonus($order_id);
}
}
/* 清除缓存 */
clear_cache_files();
/* 操作成功 */
$links[] = array('text' => $_LANG['delivery_sn'] . $_LANG['detail'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
sys_msg($_LANG['act_ok'], 0, $links);
}
/*------------------------------------------------------ */
//-- 退货单列表
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'back_list')
{
admin_priv('back_order');
/* 查询 */
$result = back_list();
/* 模板赋值 */
$smarty->assign('ur_here', $_LANG['10_back_order']);
$smarty->assign('os_unconfirmed', OS_UNCONFIRMED);
$smarty->assign('cs_await_pay', CS_AWAIT_PAY);
$smarty->assign('cs_await_ship', CS_AWAIT_SHIP);
$smarty->assign('full_page', 1);
$smarty->assign('back_list', $result['back']);
$smarty->assign('filter', $result['filter']);
$smarty->assign('record_count', $result['record_count']);
$smarty->assign('page_count', $result['page_count']);
$smarty->assign('sort_update_time', '');
/* 显示模板 */
assign_query_info();
$smarty->display('back_list.htm');
}
/*------------------------------------------------------ */
//-- 搜索、排序、分页
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'back_query')
{
admin_priv('back_order');
$result = back_list();
$smarty->assign('back_list', $result['back']);
$smarty->assign('filter', $result['filter']);
$smarty->assign('record_count', $result['record_count']);
$smarty->assign('page_count', $result['page_count']);
$sort_flag = sort_flag($result['filter']);
$smarty->assign($sort_flag['tag'], $sort_flag['img']);
make_json_result($smarty->fetch('back_list.htm'), '', array('filter' => $result['filter'], 'page_count' => $result['page_count']));
}
/*------------------------------------------------------ */
//-- 退货单详细
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'back_info')
{
admin_priv('back_order');
$back_id = intval(trim($_REQUEST['back_id']));
/* 根据发货单id查询发货单信息 */
if (!empty($back_id))
{
$back_order = back_order_info($back_id);
}
else
{
die('order does not exist');
}
/* 如果管理员属于某个办事处,检查该订单是否也属于这个办事处 */
$sql = "SELECT agency_id FROM " . $ecs->table('admin_user') . " WHERE user_id = '$_SESSION[admin_id]'";
$agency_id = $db->getOne($sql);
if ($agency_id > 0)
{
if ($back_order['agency_id'] != $agency_id)
{
sys_msg($_LANG['priv_error']);
}
/* 取当前办事处信息*/
$sql = "SELECT agency_name FROM " . $ecs->table('agency') . " WHERE agency_id = '$agency_id' LIMIT 0, 1";
$agency_name = $db->getOne($sql);
$back_order['agency_name'] = $agency_name;
}
/* 取得用户名 */
if ($back_order['user_id'] > 0)
{
$user = user_info($back_order['user_id']);
if (!empty($user))
{
$back_order['user_name'] = $user['user_name'];
}
}
/* 取得区域名 */
$sql = "SELECT concat(IFNULL(c.region_name, ''), ' ', IFNULL(p.region_name, ''), " .
"' ', IFNULL(t.region_name, ''), ' ', IFNULL(d.region_name, '')) AS region " .
"FROM " . $ecs->table('order_info') . " AS o " .
"LEFT JOIN " . $ecs->table('region') . " AS c ON o.country = c.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS p ON o.province = p.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS t ON o.city = t.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS d ON o.district = d.region_id " .
"WHERE o.order_id = '" . $back_order['order_id'] . "'";
$back_order['region'] = $db->getOne($sql);
/* 是否保价 */
$order['insure_yn'] = empty($order['insure_fee']) ? 0 : 1;
/* 取得发货单商品 */
$goods_sql = "SELECT *
FROM " . $ecs->table('back_goods') . "
WHERE back_id = " . $back_order['back_id'];
$goods_list = $GLOBALS['db']->getAll($goods_sql);
/* 是否存在实体商品 */
$exist_real_goods = 0;
if ($goods_list)
{
foreach ($goods_list as $value)
{
if ($value['is_real'])
{
$exist_real_goods++;
}
}
}
/* 模板赋值 */
$smarty->assign('back_order', $back_order);
$smarty->assign('exist_real_goods', $exist_real_goods);
$smarty->assign('goods_list', $goods_list);
$smarty->assign('back_id', $back_id); // 发货单id
/* 显示模板 */
$smarty->assign('ur_here', $_LANG['back_operate'] . $_LANG['detail']);
$smarty->assign('action_link', array('href' => 'order.php?act=back_list&' . list_link_postfix(), 'text' => $_LANG['10_back_order']));
assign_query_info();
$smarty->display('back_info.htm');
exit; //
}
/*------------------------------------------------------ */
//-- 修改订单(处理提交)
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'step_post')
{
/* 检查权限 */
admin_priv('order_edit');
/* 取得参数 step */
$step_list = array('user', 'edit_goods', 'add_goods', 'goods', 'consignee', 'shipping', 'payment', 'other', 'money', 'invoice');
$step = isset($_REQUEST['step']) && in_array($_REQUEST['step'], $step_list) ? $_REQUEST['step'] : 'user';
/* 取得参数 order_id */
$order_id = isset($_REQUEST['order_id']) ? intval($_REQUEST['order_id']) : 0;
if ($order_id > 0)
{
$old_order = order_info($order_id);
}
/* 取得参数 step_act 添加还是编辑 */
$step_act = isset($_REQUEST['step_act']) ? $_REQUEST['step_act'] : 'add';
/* 插入订单信息 */
if ('user' == $step)
{
/* 取得参数:user_id */
$user_id = ($_POST['anonymous'] == 1) ? 0 : intval($_POST['user']);
/* 插入新订单,状态为无效 */
$order = array(
'user_id' => $user_id,
'add_time' => gmtime(),
'order_status' => OS_INVALID,
'shipping_status' => SS_UNSHIPPED,
'pay_status' => PS_UNPAYED,
'from_ad' => 0,
'referer' => $_LANG['admin']
);
do
{
$order['order_sn'] = get_order_sn();
if ($db->autoExecute($ecs->table('order_info'), $order, 'INSERT', '', 'SILENT'))
{
break;
}
else
{
if ($db->errno() != 1062)
{
die($db->error());
}
}
}
while (true); // 防止订单号重复
$order_id = $db->insert_id();
/* todo 记录日志 */
admin_log($order['order_sn'], 'add', 'order');
/* 插入 pay_log */
$sql = 'INSERT INTO ' . $ecs->table('pay_log') . " (order_id, order_amount, order_type, is_paid)" .
" VALUES ('$order_id', 0, '" . PAY_ORDER . "', 0)";
$db->query($sql);
/* 下一步 */
ecs_header("Location: order.php?act=" . $step_act . "&order_id=" . $order_id . "&step=goods\n");
exit;
}
/* 编辑商品信息 */
elseif ('edit_goods' == $step)
{
if (isset($_POST['rec_id']))
{
foreach ($_POST['rec_id'] AS $key => $rec_id)
{
/*$sql = "SELECT goods_number ".
'FROM ' . $GLOBALS['ecs']->table('goods') .
"WHERE goods_id =".$_POST['goods_id'][$key];*/
$sql = "select og.goods_id,og.goods_attr_id,og.exclusive,og.send_store_number,og.send_store_id,oi.supplier_id ".
" from ". $GLOBALS['ecs']->table('order_goods') ." as og left join ". $GLOBALS['ecs']->table('order_info') .
" as oi on og.order_id=oi.order_id where og.rec_id=".$rec_id;
/* 取得参数 */
$goods_price = floatval($_POST['goods_price'][$key]);
$exclusive = floatval($_POST['exclusive'][$key]);
$goods_number = intval($_POST['goods_number'][$key]);
$goods_attr = $_POST['goods_attr'][$key];
$product_id = intval($_POST['product_id'][$key]);
if($product_id)
{
$sql = "SELECT product_number ".
'FROM ' . $GLOBALS['ecs']->table('products') .
" WHERE product_id =".$_POST['product_id'][$key];
}
$goods_number_all = $db->getOne($sql);
if($goods_number_all>=$goods_number)
{
/* 修改 */
$sql = "UPDATE " . $ecs->table('order_goods') .
" SET goods_price = '$goods_price', " .
"exclusive = '$exclusive',".
"goods_number = '$goods_number', " .
"goods_attr = '$goods_attr' " .
"WHERE rec_id = '$rec_id' LIMIT 1";
$db->query($sql);
}
else
{
sys_msg($_LANG['goods_num_err']);
}
}
/* 更新商品总金额和订单总金额 */
$goods_amount = order_amount($order_id);
update_order($order_id, array('goods_amount' => $goods_amount));
update_order_amount($order_id);
/* 更新 pay_log */
update_pay_log($order_id);
/* todo 记录日志 */
$sn = $old_order['order_sn'];
$new_order = order_info($order_id);
if ($old_order['total_fee'] != $new_order['total_fee'])
{
$sn .= ',' . sprintf($_LANG['order_amount_change'], $old_order['total_fee'], $new_order['total_fee']);
}
admin_log($sn, 'edit', 'order');
}
/* 跳回订单商品 */
ecs_header("Location: order.php?act=" . $step_act . "&order_id=" . $order_id . "&step=goods\n");
exit;
}
/* 添加商品 */
elseif ('add_goods' == $step)
{
/* 取得参数 */
$goods_id = intval($_POST['goodslist']);
$goods_price = $_POST['add_price'] != 'user_input' ? floatval($_POST['add_price']) : floatval($_POST['input_price']);
$goods_attr = '0';
for ($i = 0; $i < $_POST['spec_count']; $i++)
{
if (is_array($_POST['spec_' . $i]))
{
$temp_array = $_POST['spec_' . $i];
$temp_array_count = count($_POST['spec_' . $i]);
for ($j = 0; $j < $temp_array_count; $j++)
{
if($temp_array[$j]!==NULL)
{
$goods_attr .= ',' . $temp_array[$j];
}
}
}
else
{
if($_POST['spec_' . $i]!==NULL)
{
$goods_attr .= ',' . $_POST['spec_' . $i];
}
}
}
$goods_number = $_POST['add_number'];
$attr_list = $goods_attr;
$goods_attr = explode(',',$goods_attr);
$k = array_search(0,$goods_attr);
unset($goods_attr[$k]);
$sql = "SELECT attr_value ".
'FROM ' . $GLOBALS['ecs']->table('goods_attr') .
"WHERE goods_attr_id in($attr_list)";
$res = $db->query($sql);
while ($row = $db->fetchRow($res))
{
$attr_value[] = $row['attr_value'];
}
$attr_value = implode(",",$attr_value);
$sql = "SELECT * FROM " .$GLOBALS['ecs']->table('products'). " WHERE goods_id = '$goods_id' LIMIT 0, 1";
$prod = $GLOBALS['db']->getRow($sql);
if (is_spec($goods_attr) && !empty($prod))
{
$product_info = get_products_info($_REQUEST['goodslist'], $goods_attr);
}
//商品存在规格 是货品 检查该货品库存
if (is_spec($goods_attr) && !empty($prod))
{
if (!empty($goods_attr))
{
/* 取规格的货品库存 */
if ($goods_number > $product_info['product_number'])
{
$url = "order.php?act=" . $step_act . "&order_id=" . $order_id . "&step=goods";
echo ''.$_LANG['goods_num_err'] .'';
exit;
return false;
}
}
}
if(is_spec($goods_attr) && !empty($prod))
{
/* 插入订单商品 */
$sql = "INSERT INTO " . $ecs->table('order_goods') .
"(order_id, goods_id, goods_name, goods_sn, product_id, goods_number, market_price, " .
"goods_price, goods_attr, is_real, extension_code, parent_id, is_gift, goods_attr_id) " .
"SELECT '$order_id', goods_id, goods_name, goods_sn, " .$product_info['product_id'].", ".
"'$goods_number', market_price, '$goods_price', '" .$attr_value . "', " .
"is_real, extension_code, 0, 0 , '".implode(',',$goods_attr)."' " .
"FROM " . $ecs->table('goods') .
" WHERE goods_id = '$goods_id' LIMIT 1";
}
else
{
$sql = "INSERT INTO " . $ecs->table('order_goods') .
" (order_id, goods_id, goods_name, goods_sn, " .
"goods_number, market_price, goods_price, goods_attr, " .
"is_real, extension_code, parent_id, is_gift)" .
"SELECT '$order_id', goods_id, goods_name, goods_sn, " .
"'$goods_number', market_price, '$goods_price', '" . $attr_value. "', " .
"is_real, extension_code, 0, 0 " .
"FROM " . $ecs->table('goods') .
" WHERE goods_id = '$goods_id' LIMIT 1";
}
$db->query($sql);
/* 如果使用库存,且下订单时减库存,则修改库存 */
if ($_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_PLACE)
{
//(货品)
if (!empty($product_info['product_id']))
{
$sql = "UPDATE " . $ecs->table('products') . "
SET product_number = product_number - " . $goods_number . "
WHERE product_id = " . $product_info['product_id'];
$db->query($sql);
}
$sql = "UPDATE " . $ecs->table('goods') .
" SET `goods_number` = goods_number - '" . $goods_number . "' " .
" WHERE `goods_id` = '" . $goods_id . "' LIMIT 1";
$db->query($sql);
}
/* 更新商品总金额和订单总金额 */
update_order($order_id, array('goods_amount' => order_amount($order_id)));
update_order_amount($order_id);
/* 更新 pay_log */
update_pay_log($order_id);
/* todo 记录日志 */
$sn = $old_order['order_sn'];
$new_order = order_info($order_id);
if ($old_order['total_fee'] != $new_order['total_fee'])
{
$sn .= ',' . sprintf($_LANG['order_amount_change'], $old_order['total_fee'], $new_order['total_fee']);
}
admin_log($sn, 'edit', 'order');
/* 跳回订单商品 */
ecs_header("Location: order.php?act=" . $step_act . "&order_id=" . $order_id . "&step=goods\n");
exit;
}
/* 商品 */
elseif ('goods' == $step)
{
/* 下一步 */
if (isset($_POST['next']))
{
ecs_header("Location: order.php?act=" . $step_act . "&order_id=" . $order_id . "&step=consignee\n");
exit;
}
/* 完成 */
elseif (isset($_POST['finish']))
{
/* 初始化提示信息和链接 */
$msgs = array();
$links = array();
/* 如果已付款,检查金额是否变动,并执行相应操作 */
$order = order_info($order_id);
handle_order_money_change($order, $msgs, $links);
/* 显示提示信息 */
if (!empty($msgs))
{
sys_msg(join(chr(13), $msgs), 0, $links);
}
else
{
/* 跳转到订单详情 */
ecs_header("Location: order.php?act=info&order_id=" . $order_id . "\n");
exit;
}
}
}
/* 保存收货人信息 */
elseif ('consignee' == $step)
{
/* 保存订单 */
$order = $_POST;
$order['agency_id'] = get_agency_by_regions(array($order['country'], $order['province'], $order['city'], $order['district']));
update_order($order_id, $order);
/* 该订单所属办事处是否变化 */
$agency_changed = $old_order['agency_id'] != $order['agency_id'];
/* todo 记录日志 */
$sn = $old_order['order_sn'];
admin_log($sn, 'edit', 'order');
if (isset($_POST['next']))
{
/* 下一步 */
if (exist_real_goods($order_id))
{
/* 存在实体商品,去配送方式 */
ecs_header("Location: order.php?act=" . $step_act . "&order_id=" . $order_id . "&step=shipping\n");
exit;
}
else
{
/* 不存在实体商品,去支付方式 */
ecs_header("Location: order.php?act=" . $step_act . "&order_id=" . $order_id . "&step=payment\n");
exit;
}
}
elseif (isset($_POST['finish']))
{
/* 如果是编辑且存在实体商品,检查收货人地区的改变是否影响原来选的配送 */
if ('edit' == $step_act && exist_real_goods($order_id))
{
$order = order_info($order_id);
/* 取得可用配送方式 */
$region_id_list = array(
$order['country'], $order['province'], $order['city'], $order['district']
);
$shipping_list = available_shipping_list($region_id_list);
/* 判断订单的配送是否在可用配送之内 */
$exist = false;
foreach ($shipping_list AS $shipping)
{
if ($shipping['shipping_id'] == $order['shipping_id'])
{
$exist = true;
break;
}
}
/* 如果不在可用配送之内,提示用户去修改配送 */
if (!$exist)
{
// 修改配送为空,配送费和保价费为0
update_order($order_id, array('shipping_id' => 0, 'shipping_name' => ''));
$links[] = array('text' => $_LANG['step']['shipping'], 'href' => 'order.php?act=edit&order_id=' . $order_id . '&step=shipping');
sys_msg($_LANG['continue_shipping'], 1, $links);
}
}
/* 完成 */
if ($agency_changed)
{
ecs_header("Location: order.php?act=list\n");
}
else
{
ecs_header("Location: order.php?act=info&order_id=" . $order_id . "\n");
}
exit;
}
}
/* 保存配送信息 */
elseif ('shipping' == $step)
{
/* 如果不存在实体商品,退出 */
if (!exist_real_goods($order_id))
{
die ('Hacking Attemp');
}
/* 取得订单信息 */
$order_info = order_info($order_id);
$region_id_list = array($order_info['country'], $order_info['province'], $order_info['city'], $order_info['district']);
/* 保存订单 */
$shipping_id = $_POST['shipping'];
$pickup_point = isset($_POST['pickup_point']) ? $_POST['pickup_point'] : 0;
$shipping = shipping_area_info($shipping_id, $region_id_list);
$weight_amount = order_weight_price($order_id);
$shipping_fee = shipping_fee($shipping['shipping_code'], $shipping['configure'], $weight_amount['weight'], $weight_amount['amount'], $weight_amount['number']);
$order = array(
'shipping_id' => $shipping_id,
'shipping_name' => addslashes($shipping['shipping_name']),
'shipping_fee' => $shipping_fee,
'pickup_point' => $pickup_point
);
if (isset($_POST['insure']))
{
/* 计算保价费 */
$order['insure_fee'] = shipping_insure_fee($shipping['shipping_code'], order_amount($order_id), $shipping['insure']);
}
else
{
$order['insure_fee'] = 0;
}
update_order($order_id, $order);
update_order_amount($order_id);
/* 更新 pay_log */
update_pay_log($order_id);
/* 清除首页缓存:发货单查询 */
clear_cache_files('index.dwt');
/* todo 记录日志 */
$sn = $old_order['order_sn'];
$new_order = order_info($order_id);
if ($old_order['total_fee'] != $new_order['total_fee'])
{
$sn .= ',' . sprintf($_LANG['order_amount_change'], $old_order['total_fee'], $new_order['total_fee']);
}
admin_log($sn, 'edit', 'order');
if (isset($_POST['next']))
{
/* 下一步 */
ecs_header("Location: order.php?act=" . $step_act . "&order_id=" . $order_id . "&step=payment\n");
exit;
}
elseif (isset($_POST['finish']))
{
/* 初始化提示信息和链接 */
$msgs = array();
$links = array();
/* 如果已付款,检查金额是否变动,并执行相应操作 */
$order = order_info($order_id);
handle_order_money_change($order, $msgs, $links);
/* 如果是编辑且配送不支持货到付款且原支付方式是货到付款 */
if ('edit' == $step_act && $shipping['support_cod'] == 0)
{
$payment = payment_info($order['pay_id']);
if ($payment['is_cod'] == 1)
{
/* 修改支付为空 */
update_order($order_id, array('pay_id' => 0, 'pay_name' => ''));
$msgs[] = $_LANG['continue_payment'];
$links[] = array('text' => $_LANG['step']['payment'], 'href' => 'order.php?act=' . $step_act . '&order_id=' . $order_id . '&step=payment');
}
}
/* 显示提示信息 */
if (!empty($msgs))
{
sys_msg(join(chr(13), $msgs), 0, $links);
}
else
{
/* 完成 */
ecs_header("Location: order.php?act=info&order_id=" . $order_id . "\n");
exit;
}
}
}
/* 保存支付信息 */
elseif ('payment' == $step)
{
/* 取得支付信息 */
$pay_id = $_POST['payment'];
$payment = payment_info($pay_id);
/* 计算支付费用 */
$order_amount = order_amount($order_id);
if ($payment['is_cod'] == 1)
{
$order = order_info($order_id);
$region_id_list = array(
$order['country'], $order['province'], $order['city'], $order['district']
);
$shipping = shipping_area_info($order['shipping_id'], $region_id_list);
$pay_fee = pay_fee($pay_id, $order_amount, $shipping['pay_fee']);
}
else
{
$pay_fee = pay_fee($pay_id, $order_amount);
}
/* 保存订单 */
$order = array(
'pay_id' => $pay_id,
'pay_name' => addslashes($payment['pay_name']),
'pay_fee' => $pay_fee
);
update_order($order_id, $order);
update_order_amount($order_id);
/* 更新 pay_log */
update_pay_log($order_id);
/* todo 记录日志 */
$sn = $old_order['order_sn'];
$new_order = order_info($order_id);
if ($old_order['total_fee'] != $new_order['total_fee'])
{
$sn .= ',' . sprintf($_LANG['order_amount_change'], $old_order['total_fee'], $new_order['total_fee']);
}
admin_log($sn, 'edit', 'order');
if (isset($_POST['next']))
{
/* 下一步 */
ecs_header("Location: order.php?act=" . $step_act . "&order_id=" . $order_id . "&step=other\n");
exit;
}
elseif (isset($_POST['finish']))
{
/* 初始化提示信息和链接 */
$msgs = array();
$links = array();
/* 如果已付款,检查金额是否变动,并执行相应操作 */
$order = order_info($order_id);
handle_order_money_change($order, $msgs, $links);
/* 显示提示信息 */
if (!empty($msgs))
{
sys_msg(join(chr(13), $msgs), 0, $links);
}
else
{
/* 完成 */
ecs_header("Location: order.php?act=info&order_id=" . $order_id . "\n");
exit;
}
}
}
elseif ('other' == $step)
{
/* 保存订单 */
$order = array();
if (isset($_POST['pack']) && $_POST['pack'] > 0)
{
$pack = pack_info($_POST['pack']);
$order['pack_id'] = $pack['pack_id'];
$order['pack_name'] = addslashes($pack['pack_name']);
$order['pack_fee'] = $pack['pack_fee'];
}
else
{
$order['pack_id'] = 0;
$order['pack_name'] = '';
$order['pack_fee'] = 0;
}
if (isset($_POST['card']) && $_POST['card'] > 0)
{
$card = card_info($_POST['card']);
$order['card_id'] = $card['card_id'];
$order['card_name'] = addslashes($card['card_name']);
$order['card_fee'] = $card['card_fee'];
$order['card_message'] = $_POST['card_message'];
}
else
{
$order['card_id'] = 0;
$order['card_name'] = '';
$order['card_fee'] = 0;
$order['card_message'] = '';
}
/*增值税发票_删除_START_*/
//$order['inv_type'] = $_POST['inv_type'];
//$order['inv_payee'] = $_POST['inv_payee'];
/*增值税发票_删除_END_*/
$order['inv_content'] = $_POST['inv_content'];
$order['how_oos'] = $_POST['how_oos'];
$order['postscript'] = $_POST['postscript'];
$order['to_buyer'] = $_POST['to_buyer'];
update_order($order_id, $order);
update_order_amount($order_id);
/* 更新 pay_log */
update_pay_log($order_id);
/* todo 记录日志 */
$sn = $old_order['order_sn'];
admin_log($sn, 'edit', 'order');
if (isset($_POST['next']))
{
/* 下一步 */
ecs_header("Location: order.php?act=" . $step_act . "&order_id=" . $order_id . "&step=money\n");
exit;
}
elseif (isset($_POST['finish']))
{
/* 完成 */
ecs_header("Location: order.php?act=info&order_id=" . $order_id . "\n");
exit;
}
}
elseif ('money' == $step)
{
/* 取得订单信息 */
$old_order = order_info($order_id);
if ($old_order['user_id'] > 0)
{
/* 取得用户信息 */
$user = user_info($old_order['user_id']);
}
/* 保存信息 */
$order['goods_amount'] = $old_order['goods_amount'];
$order['discount'] = isset($_POST['discount']) && floatval($_POST['discount']) >= 0 ? round(floatval($_POST['discount']), 2) : 0;
$order['tax'] = round(floatval($_POST['tax']), 2);
$order['shipping_fee'] = isset($_POST['shipping_fee']) && floatval($_POST['shipping_fee']) >= 0 ? round(floatval($_POST['shipping_fee']), 2) : 0;
$order['insure_fee'] = isset($_POST['insure_fee']) && floatval($_POST['insure_fee']) >= 0 ? round(floatval($_POST['insure_fee']), 2) : 0;
$order['pay_fee'] = floatval($_POST['pay_fee']) >= 0 ? round(floatval($_POST['pay_fee']), 2) : 0;
$order['pack_fee'] = isset($_POST['pack_fee']) && floatval($_POST['pack_fee']) >= 0 ? round(floatval($_POST['pack_fee']), 2) : 0;
$order['card_fee'] = isset($_POST['card_fee']) && floatval($_POST['card_fee']) >= 0 ? round(floatval($_POST['card_fee']), 2) : 0;
$order['money_paid'] = $old_order['money_paid'];
$order['surplus'] = 0;
//$order['integral'] = 0;
$order['integral']=intval($_POST['integral']) >= 0 ? intval($_POST['integral']) : 0;
$order['integral_money']= 0;
$order['bonus_id'] = 0;
$order['bonus'] = 0;
/* 计算待付款金额 */
$order['order_amount'] = $order['goods_amount'] - $order['discount']
+ $order['tax']
+ $order['shipping_fee']
+ $order['insure_fee']
+ $order['pay_fee']
+ $order['pack_fee']
+ $order['card_fee']
- $order['money_paid'];
if ($order['order_amount'] > 0)
{
if ($old_order['user_id'] > 0)
{
/* 如果选择了红包,先使用红包支付 */
if ($_POST['bonus_id'] > 0)
{
/* todo 检查红包是否可用 */
$order['bonus_id'] = $_POST['bonus_id'];
$bonus = bonus_info($_POST['bonus_id']);
$order['bonus'] = $bonus['type_money'];
$order['order_amount'] -= $order['bonus'];
}
/* 使用红包之后待付款金额仍大于0 */
if ($order['order_amount'] > 0)
{
if($old_order['extension_code']!='exchange_goods')
{
/* 如果设置了积分,再使用积分支付 */
if (isset($_POST['integral']) && intval($_POST['integral']) > 0)
{
/* 检查积分是否足够 */
$order['integral'] = intval($_POST['integral']);
$order['integral_money'] = value_of_integral(intval($_POST['integral']));
if ($old_order['integral'] + $user['pay_points'] < $order['integral'])
{
sys_msg($_LANG['pay_points_not_enough']);
}
$order['order_amount'] -= $order['integral_money'];
}
}
else
{
if (intval($_POST['integral']) > $user['pay_points']+$old_order['integral'])
{
sys_msg($_LANG['pay_points_not_enough']);
}
}
if ($order['order_amount'] > 0)
{
/* 如果设置了余额,再使用余额支付 */
if (isset($_POST['surplus']) && floatval($_POST['surplus']) >= 0)
{
/* 检查余额是否足够 */
$order['surplus'] = round(floatval($_POST['surplus']), 2);
if ($old_order['surplus'] + $user['user_money'] + $user['credit_line'] < $order['surplus'])
{
sys_msg($_LANG['user_money_not_enough']);
}
/* 如果红包和积分和余额足以支付,把待付款金额改为0,退回部分积分余额 */
$order['order_amount'] -= $order['surplus'];
if ($order['order_amount'] < 0)
{
$order['surplus'] += $order['order_amount'];
$order['order_amount'] = 0;
}
}
}
else
{
/* 如果红包和积分足以支付,把待付款金额改为0,退回部分积分 */
$order['integral_money'] += $order['order_amount'];
$order['integral'] = integral_of_value($order['integral_money']);
$order['order_amount'] = 0;
}
}
else
{
/* 如果红包足以支付,把待付款金额设为0 */
$order['order_amount'] = 0;
}
}
}
update_order($order_id, $order);
/* 更新 pay_log */
update_pay_log($order_id);
/* todo 记录日志 */
$sn = $old_order['order_sn'];
$new_order = order_info($order_id);
if ($old_order['total_fee'] != $new_order['total_fee'])
{
$sn .= ',' . sprintf($_LANG['order_amount_change'], $old_order['total_fee'], $new_order['total_fee']);
}
admin_log($sn, 'edit', 'order');
/* 如果余额、积分、红包有变化,做相应更新 */
if ($old_order['user_id'] > 0)
{
$user_money_change = $old_order['surplus'] - $order['surplus'];
if ($user_money_change != 0)
{
log_account_change($user['user_id'], $user_money_change, 0, 0, 0, sprintf($_LANG['change_use_surplus'], $old_order['order_sn']));
}
$pay_points_change = $old_order['integral'] - $order['integral'];
if ($pay_points_change != 0)
{
log_account_change($user['user_id'], 0, 0, 0, $pay_points_change, sprintf($_LANG['change_use_integral'], $old_order['order_sn']));
}
if ($old_order['bonus_id'] != $order['bonus_id'])
{
if ($old_order['bonus_id'] > 0)
{
$sql = "UPDATE " . $ecs->table('user_bonus') .
" SET used_time = 0, order_id = 0 " .
"WHERE bonus_id = '$old_order[bonus_id]' LIMIT 1";
$db->query($sql);
}
if ($order['bonus_id'] > 0)
{
$sql = "UPDATE " . $ecs->table('user_bonus') .
" SET used_time = '" . gmtime() . "', order_id = '$order_id' " .
"WHERE bonus_id = '$order[bonus_id]' LIMIT 1";
$db->query($sql);
}
}
}
if (isset($_POST['finish']))
{
/* 完成 */
if ($step_act == 'add')
{
/* 订单改为已确认,(已付款) */
$arr['order_status'] = OS_CONFIRMED;
$arr['confirm_time'] = gmtime();
if ($order['order_amount'] <= 0)
{
$arr['pay_status'] = PS_PAYED;
$arr['pay_time'] = gmtime();
}
update_order($order_id, $arr);
}
/* 初始化提示信息和链接 */
$msgs = array();
$links = array();
/* 如果已付款,检查金额是否变动,并执行相应操作 */
$order = order_info($order_id);
handle_order_money_change($order, $msgs, $links);
/* 显示提示信息 */
if (!empty($msgs))
{
sys_msg(join(chr(13), $msgs), 0, $links);
}
else
{
ecs_header("Location: order.php?act=info&order_id=" . $order_id . "\n");
exit;
}
}
}
/* 保存发货后的配送方式和发货单号 */
elseif ('invoice' == $step)
{
/* 如果不存在实体商品,退出 */
if (!exist_real_goods($order_id))
{
die ('Hacking Attemp');
}
/* 保存订单 */
$shipping_id = $_POST['shipping'];
$pickup_point = isset($_POST['pickup_point']) ? $_POST['pickup_point'] : 0;
$shipping = shipping_info($shipping_id);
$invoice_no = trim($_POST['invoice_no']);
$invoice_no = str_replace(',', '
', $invoice_no);
$order = array(
'shipping_id' => $shipping_id,
'shipping_name' => addslashes($shipping['shipping_name']),
'invoice_no' => $invoice_no,
'pickup_point' => $pickup_point
);
update_order($order_id, $order);
/* todo 记录日志 */
$sn = $old_order['order_sn'];
admin_log($sn, 'edit', 'order');
if (isset($_POST['finish']))
{
ecs_header("Location: order.php?act=info&order_id=" . $order_id . "\n");
exit;
}
/*增值税发票_更改_START_*/
$order = array();
$arr = array('inv_type','inv_payee_type','inv_payee',
'inv_content','inv_money','inv_remark',
'vat_inv_company_name','vat_inv_taxpayer_id','vat_inv_registration_address',
'vat_inv_registration_phone','vat_inv_deposit_bank','vat_inv_bank_account',
'inv_consignee_name','inv_consignee_phone','inv_consignee_address',
'inv_consignee_province','inv_consignee_city','inv_consignee_district');
foreach($arr as $item)
{
$tmp = !empty($_REQUEST[$item])?trim($_REQUEST[$item]):'';;
if(!empty($tmp))
{
$order[$item] = $tmp;
}
}
/*发票金额*/
$orderinfo = order_info($_GET['order_id']);
$order['inv_money'] = $orderinfo['order_amount'];
/*发票金额*/
if(isset($order['inv_payee_type']) && $order['inv_payee_type'] == 'individual')
{
$order['inv_payee'] = '个人';
}
$inv_remark = trim($_REQUEST['inv_remark']);
$order['inv_remark'] = $inv_remark;
if(!empty($_REQUEST['is_ajax']) && $_REQUEST['is_ajax'] == '1')
{
require_once(ROOT_PATH . 'includes/cls_json.php');
$json = new JSON;
$result = array();
if(empty($order))
{
$result['result'] = 'fail';
}
else
{
if(update_order($order_id, $order) != false)
{
$result['result'] = 'success';
}
else
{
$result['result'] = 'fail';
}
}
echo $json->encode($result);
}
else
{
if(update_order($order_id, $order))
{
$msg_detail = '编辑成功!';
$msg_type = '0';
}
else
{
$msg_detail = '编辑失败!';
$msg_type = '1';
}
$link_text = '订单信息';
$link_href = 'order.php?act=info&order_id='.$order_id;
$links = array(array('text'=>$link_text,'href'=>$link_href));
$auto_redirect = true;
sys_msg($msg_detail, $msg_type,$links, $auto_redirect);
ecs_header("Location: order.php?act=info&order_id=" . $order_id . "\n");
}
/* todo 记录日志 */
$sn = $old_order['order_sn'];
admin_log($sn, 'edit', 'order');
exit;
/*增值税发票_更改_END_*/
}
}
/*------------------------------------------------------ */
//-- 修改订单(载入页面)
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'add' || $_REQUEST['act'] == 'edit')
{
/* 检查权限 */
admin_priv('order_edit');
/* 取得参数 order_id */
$order_id = isset($_GET['order_id']) ? intval($_GET['order_id']) : 0;
$smarty->assign('order_id', $order_id);
/* 取得参数 step */
/*增值税发票_更改_START_*/
$step_list = array('user', 'goods', 'consignee', 'shipping', 'payment', 'other', 'money','invoice');
/*增值税发票_更改_END_*/
$step = isset($_GET['step']) && in_array($_GET['step'], $step_list) ? $_GET['step'] : 'user';
$smarty->assign('step', $step);
/* 取得参数 act */
$act = $_GET['act'];
$smarty->assign('ur_here',$_LANG['add_order']);
$smarty->assign('step_act', $act);
/* 取得订单信息 */
if ($order_id > 0)
{
$order = order_info($order_id);
/* 发货单格式化 */
$order['invoice_no'] = str_replace('
', ',', $order['invoice_no']);
/* 如果已发货,就不能修改订单了(配送方式和发货单号除外) */
if ($order['shipping_status'] == SS_SHIPPED || $order['shipping_status'] == SS_RECEIVED)
{
if ($step != 'shipping')
{
sys_msg($_LANG['cannot_edit_order_shipped']);
}
else
{
$step = 'invoice';
$smarty->assign('step', $step);
}
}
$smarty->assign('order', $order);
}
else
{
if ($act != 'add' || $step != 'user')
{
die('invalid params');
}
}
/* 选择会员 */
if ('user' == $step)
{
// 无操作
}
/* 增删改商品 */
elseif ('goods' == $step)
{
$smarty->assign('ur_here',$_LANG['step']['goods']);
/* 取得订单商品 */
$goods_list = order_goods($order_id);
if (!empty($goods_list))
{
foreach ($goods_list AS $key => $goods)
{
/* 计算属性数 */
$attr = $goods['goods_attr'];
if ($attr == '')
{
$goods_list[$key]['rows'] = 1;
}
else
{
$goods_list[$key]['rows'] = count(explode(chr(13), $attr));
}
}
}
$smarty->assign('goods_list', $goods_list);
/* 取得商品总金额 */
$smarty->assign('goods_amount', order_amount($order_id));
}
// 设置收货人
elseif ('consignee' == $step)
{
/* 查询是否存在实体商品 */
$exist_real_goods = exist_real_goods($order_id);
$smarty->assign('exist_real_goods', $exist_real_goods);
$smarty->assign('ur_here',$_LANG['step']['consignee']);
/* 取得收货地址列表 */
if ($order['user_id'] > 0)
{
$smarty->assign('address_list', address_list($order['user_id']));
$address_id = isset($_REQUEST['address_id']) ? intval($_REQUEST['address_id']) : 0;
if ($address_id > 0)
{
$address = address_info($address_id);
if ($address)
{
$order['consignee'] = $address['consignee'];
$order['country'] = $address['country'];
$order['province'] = $address['province'];
$order['city'] = $address['city'];
$order['district'] = $address['district'];
$order['email'] = $address['email'];
$order['address'] = $address['address'];
$order['zipcode'] = $address['zipcode'];
$order['tel'] = $address['tel'];
$order['mobile'] = $address['mobile'];
$order['sign_building'] = $address['sign_building'];
$order['best_time'] = $address['best_time'];
$smarty->assign('order', $order);
}
}
}
if ($exist_real_goods)
{
/* 取得国家 */
$smarty->assign('country_list', get_regions());
if ($order['country'] > 0)
{
/* 取得省份 */
$smarty->assign('province_list', get_regions(1, $order['country']));
if ($order['province'] > 0)
{
/* 取得城市 */
$smarty->assign('city_list', get_regions(2, $order['province']));
if ($order['city'] > 0)
{
/* 取得区域 */
$smarty->assign('district_list', get_regions(3, $order['city']));
}
}
}
}
}
// 选择配送方式
elseif ('shipping' == $step)
{
$smarty->assign('ur_here',$_LANG['step']['shipping']);
/* 如果不存在实体商品 */
if (!exist_real_goods($order_id))
{
die ('Hacking Attemp');
}
/* 取得可用的配送方式列表 */
$region_id_list = array(
$order['country'], $order['province'], $order['city'], $order['district']
);
$shipping_info = shipping_info($order['shipping_id']);
$shipping_list = available_shipping_list($region_id_list,$order['supplier_id'], -1, $shipping_info['shipping_code']);
if($shipping_info['shipping_code'] == 'pups')
{
$pickup_point_list = get_pickup_info($order['city'], $order['supplier_id']);
$smarty->assign('pickup_point_list', $pickup_point_list);
}
/* 取得配送费用 */
$total = order_weight_price($order_id);
foreach ($shipping_list AS $key => $shipping)
{
$shipping_fee = shipping_fee($shipping['shipping_code'],
unserialize($shipping['configure']), $total['weight'], $total['amount'], $total['number']);
$shipping_list[$key]['shipping_fee'] = $shipping_fee;
$shipping_list[$key]['format_shipping_fee'] = price_format($shipping_fee);
$shipping_list[$key]['free_money'] = price_format($shipping['configure']['free_money']);
}
$smarty->assign('shipping_list', $shipping_list);
}
// 选择支付方式
elseif ('payment' == $step)
{
$smarty->assign('ur_here',$_LANG['step']['payment']);
/* 取得可用的支付方式列表 */
if (exist_real_goods($order_id))
{
/* 存在实体商品 */
$region_id_list = array(
$order['country'], $order['province'], $order['city'], $order['district']
);
$shipping_area = shipping_area_info($order['shipping_id'], $region_id_list);
$pay_fee = ($shipping_area['support_cod'] == 1) ? $shipping_area['pay_fee'] : 0;
$payment_list = available_payment_list($shipping_area['support_cod'], $pay_fee);
}
else
{
/* 不存在实体商品 */
$payment_list = available_payment_list(false);
}
/* 过滤掉使用余额支付 */
foreach ($payment_list as $key => $payment)
{
if ($payment['pay_code'] == 'balance')
{
unset($payment_list[$key]);
}
}
$smarty->assign('payment_list', $payment_list);
}
// 选择包装、贺卡
elseif ('other' == $step)
{
/* 查询是否存在实体商品 */
$exist_real_goods = exist_real_goods($order_id);
$smarty->assign('exist_real_goods', $exist_real_goods);
$smarty->assign('ur_here',$_LANG['step']['other']);
if ($exist_real_goods)
{
/* 取得包装列表 */
$smarty->assign('pack_list', pack_list());
/* 取得贺卡列表 */
$smarty->assign('card_list', card_list());
}
}
// 费用
elseif ('money' == $step)
{
/* 查询是否存在实体商品 */
$exist_real_goods = exist_real_goods($order_id);
$smarty->assign('exist_real_goods', $exist_real_goods);
$smarty->assign('ur_here',$_LANG['step']['money']);
/* 取得用户信息 */
if ($order['user_id'] > 0)
{
$user = user_info($order['user_id']);
/* 计算可用余额 */
$smarty->assign('available_user_money', $order['surplus'] + $user['user_money']);
/* 计算可用积分 */
$smarty->assign('available_pay_points', $order['integral'] + $user['pay_points']);
/* 取得用户可用红包
$user_bonus = user_bonus($order['user_id'], $order['goods_amount']);
if ($order['bonus_id'] > 0)
{
$bonus = bonus_info($order['bonus_id']);
$user_bonus[] = $bonus;
}
$smarty->assign('available_bonus', $user_bonus);*/
/* 取得用户可用红包 */
$user_bonus = user_bonus($order['user_id'], array($order['supplier_id']=>$order['goods_amount']));
if (!empty($user_bonus)){
$user_bonus1 = $user_bonus[$order['supplier_id']];
foreach($user_bonus1 as $key=>$val){
$user_bonus1[$key] = bonus_info($val['bonus_id']);
}
$smarty->assign('available_bonus', $user_bonus1);
}
}
}
// 发货后修改配送方式和发货单号
elseif ('invoice' == $step)
{
$region_id_list = array(
$order['country'], $order['province'], $order['city'], $order['district']
);
$shipping_info = shipping_info($order['shipping_id']);
$shipping_list = available_shipping_list($region_id_list, $order['supplier_id'], -1, $shipping_info['shipping_code']);
$smarty->assign('shipping_list', $shipping_list);
if($shipping_info['shipping_code'] == 'pups')
{
$pickup_point_list = get_pickup_info($order['city'], $order['supplier_id']);
$smarty->assign('pickup_point_list', $pickup_point_list);
}
/*增值税发票_更改_START_*/
$order['order_time'] = local_date($_CFG['time_format'], $order['add_time']);
if(!empty($_REQUEST['step_detail']))
{
$smarty->assign('step_detail',$_REQUEST['step_detail']);
if($_REQUEST['step_detail'] == 'edit')
{
$smarty->assign('ur_here',$_LANG['edit_invoice']);
$order['inv_consignee_regions'] = get_inv_consignee_regions($order);
}
elseif($_REQUEST['step_detail'] == 'info')
{
$action_link = array('text'=>'发票列表','href'=>'order.php?act=invoice_list&uselastfilter=1');
$smarty->assign('action_link',$action_link);
$order['inv_complete_address'] = get_inv_complete_address($order);
$order['formatted_inv_money'] = price_format($order['inv_money']);
$smarty->assign('ur_here',$_LANG['check_invoice']);
}
$_CFG['invoice_content'] = explode("\n",str_replace("\r",'',$_CFG['invoice_content']));
}
$smarty->assign('cfg',$_CFG);
$smarty->assign('order', $order);
/*增值税发票_更改_END_*/
}
/* 显示模板 */
assign_query_info();
$smarty->display('order_step.htm');
}
/*------------------------------------------------------ */
//-- 处理
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'process')
{
/* 取得参数 func */
$func = isset($_GET['func']) ? $_GET['func'] : '';
/* 删除订单商品 */
if ('drop_order_goods' == $func)
{
/* 检查权限 */
admin_priv('order_edit');
/* 取得参数 */
$rec_id = intval($_GET['rec_id']);
$step_act = $_GET['step_act'];
$order_id = intval($_GET['order_id']);
/* 如果使用库存,且下订单时减库存,则修改库存 */
if ($_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_PLACE)
{
$goods = $db->getRow("SELECT goods_id, goods_number FROM " . $ecs->table('order_goods') . " WHERE rec_id = " . $rec_id );
$sql = "UPDATE " . $ecs->table('goods') .
" SET `goods_number` = goods_number + '" . $goods['goods_number'] . "' " .
" WHERE `goods_id` = '" . $goods['goods_id'] . "' LIMIT 1";
$db->query($sql);
}
/* 删除 */
$sql = "DELETE FROM " . $ecs->table('order_goods') .
" WHERE rec_id = '$rec_id' LIMIT 1";
$db->query($sql);
/* 更新商品总金额和订单总金额 */
update_order($order_id, array('goods_amount' => order_amount($order_id)));
update_order_amount($order_id);
/* 跳回订单商品 */
ecs_header("Location: order.php?act=" . $step_act . "&order_id=" . $order_id . "&step=goods\n");
exit;
}
/* 取消刚添加或编辑的订单 */
elseif ('cancel_order' == $func)
{
$step_act = $_GET['step_act'];
$order_id = isset($_GET['order_id']) ? intval($_GET['order_id']) : 0;
if ($step_act == 'add')
{
/* 如果是添加,删除订单,返回订单列表 */
if ($order_id > 0)
{
$sql = "DELETE FROM " . $ecs->table('order_info') .
" WHERE order_id = '$order_id' LIMIT 1";
$db->query($sql);
}
ecs_header("Location: order.php?act=list\n");
exit;
}
else
{
/* 如果是编辑,返回订单信息 */
ecs_header("Location: order.php?act=info&order_id=" . $order_id . "\n");
exit;
}
}
/* 编辑订单时由于订单已付款且金额减少而退款 */
elseif ('refund' == $func)
{
/* 处理退款 */
$order_id = $_REQUEST['order_id'];
$refund_type = $_REQUEST['refund'];
$refund_note = $_REQUEST['refund_note'];
$refund_amount = $_REQUEST['refund_amount'];
$order = order_info($order_id);
order_refund($order, $refund_type, $refund_note, $refund_amount);
/* 修改应付款金额为0,已付款金额减少 $refund_amount */
update_order($order_id, array('order_amount' => 0, 'money_paid' => $order['money_paid'] - $refund_amount));
/* 返回订单详情 */
ecs_header("Location: order.php?act=info&order_id=" . $order_id . "\n");
exit;
}
/* 载入退款页面 */
elseif ('load_refund' == $func)
{
$refund_amount = floatval($_REQUEST['refund_amount']);
$smarty->assign('refund_amount', $refund_amount);
$smarty->assign('formated_refund_amount', price_format($refund_amount));
$anonymous = $_REQUEST['anonymous'];
$smarty->assign('anonymous', $anonymous); // 是否匿名
$order_id = intval($_REQUEST['order_id']);
$smarty->assign('order_id', $order_id); // 订单id
/* 显示模板 */
$smarty->assign('ur_here', $_LANG['refund']);
assign_query_info();
$smarty->display('order_refund.htm');
}
else
{
die('invalid params');
}
}
/*------------------------------------------------------ */
//-- 合并订单
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'merge')
{
admin_priv('merge_order');
/* 取得满足条件的订单 */
$sql = "SELECT o.order_sn, u.user_name " .
"FROM " . $ecs->table('order_info') . " AS o " .
"LEFT JOIN " . $ecs->table('users') . " AS u ON o.user_id = u.user_id " .
"WHERE o.user_id > 0 AND o.supplier_id='". $_SESSION['supplier_id'] ."' " .
"AND o.extension_code = '' " . order_query_sql('unprocessed');
$smarty->assign('order_list', $db->getAll($sql));
/* 模板赋值 */
$smarty->assign('ur_here', $_LANG['04_merge_order']);
$smarty->assign('action_link', array('href' => 'order.php?act=list', 'text' => $_LANG['01_order_list']));
/* 显示模板 */
assign_query_info();
$smarty->display('merge_order.htm');
}
/*------------------------------------------------------ */
//-- 订单打印模板(载入页面)
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'templates')
{
admin_priv('edit_order_print');
/* 读入订单打印模板文件 */
$file_path = ROOT_PATH. DATA_DIR . '/order_print.html';
$file_content = file_get_contents($file_path);
@fclose($file_content);
include_once(ROOT_PATH."includes/fckeditor/fckeditor.php");
/* 编辑器 */
$editor = new FCKeditor('FCKeditor1');
$editor->BasePath = "../includes/fckeditor/";
$editor->ToolbarSet = "Normal";
$editor->Width = "95%";
$editor->Height = "500";
$editor->Value = $file_content;
$fckeditor = $editor->CreateHtml();
$smarty->assign('fckeditor', $fckeditor);
/* 模板赋值 */
$smarty->assign('ur_here', $_LANG['edit_order_templates']);
$smarty->assign('action_link', array('href' => 'order.php?act=list', 'text' => $_LANG['01_order_list']));
$smarty->assign('act', 'edit_templates');
/* 显示模板 */
assign_query_info();
$smarty->display('order_templates.htm');
}
/*------------------------------------------------------ */
//-- 订单打印模板(提交修改)
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'edit_templates')
{
admin_priv('edit_order_print');
/* 更新模板文件的内容 */
$file_name = @fopen('../' . DATA_DIR . '/order_print.html', 'w+');
@fwrite($file_name, stripslashes($_POST['FCKeditor1']));
@fclose($file_name);
/* 提示信息 */
$link[] = array('text' => $_LANG['back_list'], 'href'=>'order.php?act=list');
sys_msg($_LANG['edit_template_success'], 0, $link);
}
/*------------------------------------------------------ */
//-- 操作订单状态(载入页面)
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'operate')
{
$order_id = '';
admin_priv('order_os_edit');
/* 取得订单id(可能是多个,多个sn)和操作备注(可能没有) */
if(isset($_REQUEST['order_id']))
{
$order_id= $_REQUEST['order_id'];
}
$batch = isset($_REQUEST['batch']); // 是否批处理
$action_note = isset($_REQUEST['action_note']) ? trim($_REQUEST['action_note']) : '';
/* 确认 */
if (isset($_POST['confirm']))
{
$require_note = false;
$action = $_LANG['op_confirm'];
$operation = 'confirm';
}
/*------------------------------------------------------ */
//-- start一键发货 增加 by
/*------------------------------------------------------ */
elseif (isset($_POST['to_shipping']))
{
$invoice_no = empty($_REQUEST['invoice_no']) ? '' : trim($_REQUEST['invoice_no']); //快递单号
if (!empty($invoice_no))
{
$order_id = intval(trim($order_id));
$action_note = trim($action_note);
/* 查询:根据订单id查询订单信息 */
if (!empty($order_id))
{
$order = order_info($order_id);
}
else
{
die('order does not exist');
}
/* 查询:根据订单是否完成 检查权限 */
if (order_finished($order))
{
admin_priv('order_view_finished');
}
else
{
admin_priv('order_view');
}
/* 查询:如果管理员属于某个办事处,检查该订单是否也属于这个办事处 */
$sql = "SELECT agency_id FROM " . $ecs->table('admin_user') . " WHERE user_id = '$_SESSION[admin_id]'";
$agency_id = $db->getOne($sql);
if ($agency_id > 0)
{
if ($order['agency_id'] != $agency_id)
{
sys_msg($_LANG['priv_error'], 0);
}
}
/* 查询:取得用户名 */
if ($order['user_id'] > 0)
{
$user = user_info($order['user_id']);
if (!empty($user))
{
$order['user_name'] = $user['user_name'];
}
}
/* 查询:取得区域名 */
$order['region'] = $db->getOne($sql);
/* 查询:其他处理 */
$order['order_time'] = local_date($_CFG['time_format'], $order['add_time']);
$order['invoice_no'] = $order['shipping_status'] == SS_UNSHIPPED || $order['shipping_status'] == SS_PREPARING ? $_LANG['ss'][SS_UNSHIPPED] : $order['invoice_no'];
/* 查询:是否保价 */
$order['insure_yn'] = empty($order['insure_fee']) ? 0 : 1;
/* 查询:是否存在实体商品 */
$exist_real_goods = exist_real_goods($order_id);
/* 查询:取得订单商品 */
$_goods = get_order_goods(array('order_id' => $order['order_id'], 'order_sn' =>$order['order_sn']));
$attr = $_goods['attr'];
$goods_list = $_goods['goods_list'];
unset($_goods);
/* 查询:商品已发货数量 此单可发货数量 */
if ($goods_list)
{
foreach ($goods_list as $key => $value)
{
}
foreach ($goods_list as $key=>$goods_value)
{
if (!$goods_value['goods_id'])
{
continue;
}
/* 超级礼包 */
if (($goods_value['extension_code'] == 'package_buy') && (count($goods_value['package_goods_list']) > 0))
{
$goods_list[$key]['package_goods_list'] = package_goods($goods_value['package_goods_list'], $goods_value['goods_number'], $goods_value['order_id'], $goods_value['extension_code'], $goods_value['goods_id']);
foreach ($goods_list[$key]['package_goods_list'] as $pg_key => $pg_value)
{
$goods_list[$key]['package_goods_list'][$pg_key]['readonly'] = '';
/* 使用库存 是否缺货 */
if ($pg_value['storage'] <= 0 && $_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP)
{
$goods_list[$key]['package_goods_list'][$pg_key]['send'] = $_LANG['act_good_vacancy'];
$goods_list[$key]['package_goods_list'][$pg_key]['readonly'] = 'readonly="readonly"';
}
/* 将已经全部发货的商品设置为只读 */
elseif ($pg_value['send'] <= 0)
{
$goods_list[$key]['package_goods_list'][$pg_key]['send'] = $_LANG['act_good_delivery'];
$goods_list[$key]['package_goods_list'][$pg_key]['readonly'] = 'readonly="readonly"';
}
}
}
else
{
$goods_list[$key]['sended'] = $goods_value['send_number'];
$goods_list[$key]['sended'] = $goods_value['goods_number'];
$goods_list[$key]['send'] = $goods_value['goods_number'] - $goods_value['send_number'];
$goods_list[$key]['readonly'] = '';
/* 是否缺货 */
if ($goods_value['storage'] <= 0 && $_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP)
{
$goods_list[$key]['send'] = $_LANG['act_good_vacancy'];
$goods_list[$key]['readonly'] = 'readonly="readonly"';
}
elseif ($goods_list[$key]['send'] <= 0)
{
$goods_list[$key]['send'] = $_LANG['act_good_delivery'];
$goods_list[$key]['readonly'] = 'readonly="readonly"';
}
}
}
}
$suppliers_id = 0;
$delivery['order_sn'] = trim($order['order_sn']);
$delivery['add_time'] = trim($order['order_time']);
$delivery['user_id'] = intval(trim($order['user_id']));
$delivery['how_oos'] = trim($order['how_oos']);
$delivery['shipping_id'] = trim($order['shipping_id']);
$delivery['shipping_fee'] = trim($order['shipping_fee']);
$delivery['consignee'] = trim($order['consignee']);
$delivery['address'] = trim($order['address']);
$delivery['country'] = intval(trim($order['country']));
$delivery['province'] = intval(trim($order['province']));
$delivery['city'] = intval(trim($order['city']));
$delivery['district'] = intval(trim($order['district']));
$delivery['sign_building'] = trim($order['sign_building']);
$delivery['email'] = trim($order['email']);
$delivery['zipcode'] = trim($order['zipcode']);
$delivery['tel'] = trim($order['tel']);
$delivery['mobile'] = trim($order['mobile']);
$delivery['best_time'] = trim($order['best_time']);
$delivery['postscript'] = trim($order['postscript']);
$delivery['how_oos'] = trim($order['how_oos']);
$delivery['insure_fee'] = floatval(trim($order['insure_fee']));
$delivery['shipping_fee'] = floatval(trim($order['shipping_fee']));
$delivery['agency_id'] = intval(trim($order['agency_id']));
$delivery['shipping_name'] = trim($order['shipping_name']);
/* 查询订单信息 */
$order = order_info($order_id);
/* 检查能否操作 */
$operable_list = operable_list($order);
/* 初始化提示信息 */
$msg = '';
/* 定义当前时间 */
/* 取得订单商品 */
$_goods = get_order_goods(array('order_id' => $order_id, 'order_sn' => $delivery['order_sn']));
$goods_list = $_goods['goods_list'];
/* 检查此单发货商品库存缺货情况 */
/* $goods_list已经过处理 超值礼包中商品库存已取得 */
$virtual_goods = array();
$package_virtual_goods = array();
/* 生成发货单 */
/* 获取发货单号和流水号 */
$delivery['delivery_sn'] = get_delivery_sn();
$delivery_sn = $delivery['delivery_sn'];
/* 获取当前操作员 */
$delivery['action_user'] = $_SESSION['admin_name'];
/* 获取发货单生成时间 */
define('GMTIME_UTC', gmtime());
$delivery['update_time'] = GMTIME_UTC;
$delivery_time = $delivery['update_time'];
$sql ="select add_time from ". $GLOBALS['ecs']->table('order_info') ." WHERE order_sn = '" . $delivery['order_sn'] . "'";
$delivery['add_time'] = $GLOBALS['db']->GetOne($sql);
/* 获取发货单所属供应商 */
$delivery['suppliers_id'] = $suppliers_id;
/* 设置默认值 */
$delivery['status'] = 2; // 正常
$delivery['order_id'] = $order_id;
/* 过滤字段项 */
$filter_fileds = array(
'order_sn', 'add_time', 'user_id', 'how_oos', 'shipping_id', 'shipping_fee',
'consignee', 'address', 'country', 'province', 'city', 'district', 'sign_building',
'email', 'zipcode', 'tel', 'mobile', 'best_time', 'postscript', 'insure_fee',
'agency_id', 'delivery_sn', 'action_user', 'update_time',
'suppliers_id', 'status', 'order_id', 'shipping_name'
);
$_delivery = array();
foreach ($filter_fileds as $value)
{
$_delivery[$value] = $delivery[$value];
}
/* 发货单入库 */
$query = $db->autoExecute($ecs->table('delivery_order'), $_delivery, 'INSERT', '', 'SILENT');
$delivery_id = $db->insert_id();
$sql_back_old = $db->getOne("SELECT back_id FROM " . $ecs->table('back_order') . " WHERE order_id = " . $order['order_id'] . " AND back_type = 4 AND status_back < 6 AND status_back != 3");
if (!empty($sql_back_old))
{
$db->query("UPDATE " . $ecs->table('back_order') . " SET status_back = 6 WHERE back_id = " . $sql_back_old);
$db->query("UPDATE " . $ecs->table('back_goods') . " SET status_back = 6 WHERE back_id = " . $sql_back_old);
}
if ($delivery_id)
{
$delivery_goods = array();
//发货单商品入库
if (!empty($goods_list))
{
foreach ($goods_list as $value)
{
// 商品(实货)(虚货)
if (empty($value['extension_code']) || $value['extension_code'] == 'virtual_card')
{
$delivery_goods = array('delivery_id' => $delivery_id,
'goods_id' => $value['goods_id'],
'product_id' => $value['product_id'],
'product_sn' => $value['product_sn'],
'goods_id' => $value['goods_id'],
'goods_name' => $value['goods_name'],
'brand_name' => $value['brand_name'],
'goods_sn' => $value['goods_sn'],
'send_number' => $value['goods_number'],
'parent_id' => 0,
'is_real' => $value['is_real'],
'goods_attr' => $value['goods_attr']
);
/* 如果是货品 */
if (!empty($value['product_id']))
{
$delivery_goods['product_id'] = $value['product_id'];
}
$query = $db->autoExecute($ecs->table('delivery_goods'), $delivery_goods, 'INSERT', '', 'SILENT');
$sql = "UPDATE ".$GLOBALS['ecs']->table('order_goods'). "
SET send_number = " . $value['goods_number'] . "
WHERE order_id = '" . $value['order_id'] . "'
AND goods_id = '" . $value['goods_id'] . "' ";
$GLOBALS['db']->query($sql, 'SILENT');
}
// 商品(超值礼包)
elseif ($value['extension_code'] == 'package_buy')
{
foreach ($value['package_goods_list'] as $pg_key => $pg_value)
{
$delivery_pg_goods = array('delivery_id' => $delivery_id,
'goods_id' => $pg_value['goods_id'],
'product_id' => $pg_value['product_id'],
'product_sn' => $pg_value['product_sn'],
'goods_name' => $pg_value['goods_name'],
'brand_name' => '',
'goods_sn' => $pg_value['goods_sn'],
'send_number' => $value['goods_number'],
'parent_id' => $value['goods_id'], // 礼包ID
'extension_code' => $value['extension_code'], // 礼包
'is_real' => $pg_value['is_real']
);
$query = $db->autoExecute($ecs->table('delivery_goods'), $delivery_pg_goods, 'INSERT', '', 'SILENT');
$sql = "UPDATE ".$GLOBALS['ecs']->table('order_goods'). "
SET send_number = " . $value['goods_number'] . "
WHERE order_id = '" . $value['order_id'] . "'
AND goods_id = '" . $pg_value['goods_id'] . "' ";
$GLOBALS['db']->query($sql, 'SILENT');
}
}
}
}
}
else
{
/* 操作失败 */
$links[] = array('text' => $_LANG['order_info'], 'href' => 'order.php?act=info&order_id=' . $order_id);
sys_msg($_LANG['act_false'], 1, $links);
}
unset($filter_fileds, $delivery, $_delivery, $order_finish);
/* 定单信息更新处理 */
if (true)
{
/* 标记订单为已确认 "发货中" */
/* 更新发货时间 */
$order_finish = get_order_finish($order_id);
$shipping_status = SS_SHIPPED_ING;
if ($order['order_status'] != OS_CONFIRMED && $order['order_status'] != OS_SPLITED && $order['order_status'] != OS_SPLITING_PART)
{
$arr['order_status'] = OS_CONFIRMED;
$arr['confirm_time'] = GMTIME_UTC;
}
$arr['order_status'] = $order_finish ? OS_SPLITED : OS_SPLITING_PART; // 全部分单、部分分单
$arr['shipping_status'] = $shipping_status;
update_order($order_id, $arr);
}
/* 记录log */
order_action($order['order_sn'], $arr['order_status'], $shipping_status, $order['pay_status'], $action_note);
/* 清除缓存 */
clear_cache_files();
/* 根据发货单id查询发货单信息 */
if (!empty($delivery_id))
{
$delivery_order = delivery_order_info($delivery_id);
}
elseif (!empty($order_sn))
{
$delivery_id = $GLOBALS['db']->getOne("SELECT delivery_id FROM " . $ecs->table('delivery_order') . " WHERE order_sn = " . $order_sn );
$delivery_order = delivery_order_info($delivery_id);
}
else
{
die('order does not exist');
}
/* 如果管理员属于某个办事处,检查该订单是否也属于这个办事处 */
$sql = "SELECT agency_id FROM " . $ecs->table('admin_user') . " WHERE user_id = '" . $_SESSION['admin_id'] . "'";
$agency_id = $db->getOne($sql);
if ($agency_id > 0)
{
if ($delivery_order['agency_id'] != $agency_id)
{
sys_msg($_LANG['priv_error']);
}
/* 取当前办事处信息 */
$sql = "SELECT agency_name FROM " . $ecs->table('agency') . " WHERE agency_id = '$agency_id' LIMIT 0, 1";
$agency_name = $db->getOne($sql);
$delivery_order['agency_name'] = $agency_name;
}
/* 取得用户名 */
if ($delivery_order['user_id'] > 0)
{
$user = user_info($delivery_order['user_id']);
if (!empty($user))
{
$delivery_order['user_name'] = $user['user_name'];
}
}
/* 取得区域名 */
$sql = "SELECT concat(IFNULL(c.region_name, ''), ' ', IFNULL(p.region_name, ''), " .
"' ', IFNULL(t.region_name, ''), ' ', IFNULL(d.region_name, '')) AS region " .
"FROM " . $ecs->table('order_info') . " AS o " .
"LEFT JOIN " . $ecs->table('region') . " AS c ON o.country = c.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS p ON o.province = p.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS t ON o.city = t.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS d ON o.district = d.region_id " .
"WHERE o.order_id = '" . $delivery_order['order_id'] . "'";
$delivery_order['region'] = $db->getOne($sql);
/* 是否保价 */
$order['insure_yn'] = empty($order['insure_fee']) ? 0 : 1;
/* 取得发货单商品 */
$goods_sql = "SELECT *
FROM " . $ecs->table('delivery_goods') . "
WHERE delivery_id = " . $delivery_order['delivery_id'];
$goods_list = $GLOBALS['db']->getAll($goods_sql);
/* 是否存在实体商品 */
$exist_real_goods = 0;
if ($goods_list)
{
foreach ($goods_list as $value)
{
if ($value['is_real'])
{
$exist_real_goods++;
}
}
}
/* 取得订单操作记录 */
$act_list = array();
$sql = "SELECT * FROM " . $ecs->table('order_action') . " WHERE order_id = '" . $delivery_order['order_id'] . "' AND action_place = 1 ORDER BY log_time DESC,action_id DESC";
$res = $db->query($sql);
while ($row = $db->fetchRow($res))
{
$row['order_status'] = $_LANG['os'][$row['order_status']];
$row['pay_status'] = $_LANG['ps'][$row['pay_status']];
$row['shipping_status'] = ($row['shipping_status'] == SS_SHIPPED_ING) ? $_LANG['ss_admin'][SS_SHIPPED_ING] : $_LANG['ss'][$row['shipping_status']];
$row['action_time'] = local_date($_CFG['time_format'], $row['log_time']);
$act_list[] = $row;
}
/*同步发货*/
/*判断支付方式是否支付宝*/
$alipay = false;
$order = order_info($delivery_order['order_id']); //根据订单ID查询订单信息,返回数组$order
$payment = payment_info($order['pay_id']); //取得支付方式信息
/* 定义当前时间 */
define('GMTIME_UTC', gmtime()); // 获取 UTC 时间戳
/* 根据发货单id查询发货单信息 */
if (!empty($delivery_id))
{
$delivery_order = delivery_order_info($delivery_id);
}
else
{
die('order does not exist');
}
/* 查询订单信息 */
$order = order_info($order_id);
/* 检查此单发货商品库存缺货情况 */
$virtual_goods = array();
$delivery_stock_sql = "SELECT DG.goods_id, DG.is_real, DG.product_id, SUM(DG.send_number) AS sums, IF(DG.product_id > 0, P.product_number, G.goods_number) AS storage, G.goods_name, DG.send_number
FROM " . $GLOBALS['ecs']->table('delivery_goods') . " AS DG, " . $GLOBALS['ecs']->table('goods') . " AS G, " . $GLOBALS['ecs']->table('products') . " AS P
WHERE DG.goods_id = G.goods_id
AND DG.delivery_id = '$delivery_id'
AND DG.product_id = P.product_id
GROUP BY DG.product_id ";
$delivery_stock_result = $GLOBALS['db']->getAll($delivery_stock_sql);
/* 如果商品存在规格就查询规格,如果不存在规格按商品库存查询 */
if(!empty($delivery_stock_result))
{
foreach ($delivery_stock_result as $value)
{
if (($value['sums'] > $value['storage'] || $value['storage'] <= 0) && (($_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP) || ($_CFG['use_storage'] == '0' && $value['is_real'] == 0)))
{
/* 操作失败 */
$links[] = array('text' => $_LANG['order_info'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
sys_msg(sprintf($_LANG['act_good_vacancy'], $value['goods_name']), 1, $links);
break;
}
/* 虚拟商品列表 virtual_card*/
if ($value['is_real'] == 0)
{
$virtual_goods[] = array(
'goods_id' => $value['goods_id'],
'goods_name' => $value['goods_name'],
'num' => $value['send_number']
);
}
}
}
else
{
$delivery_stock_sql = "SELECT DG.goods_id, DG.is_real, SUM(DG.send_number) AS sums, G.goods_number, G.goods_name, DG.send_number
FROM " . $GLOBALS['ecs']->table('delivery_goods') . " AS DG, " . $GLOBALS['ecs']->table('goods') . " AS G
WHERE DG.goods_id = G.goods_id
AND DG.delivery_id = '$delivery_id'
GROUP BY DG.goods_id ";
$delivery_stock_result = $GLOBALS['db']->getAll($delivery_stock_sql);
foreach ($delivery_stock_result as $value)
{
if (($value['sums'] > $value['goods_number'] || $value['goods_number'] <= 0) && (($_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP) || ($_CFG['use_storage'] == '0' && $value['is_real'] == 0)))
{
/* 操作失败 */
$links[] = array('text' => $_LANG['order_info'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
sys_msg(sprintf($_LANG['act_good_vacancy'], $value['goods_name']), 1, $links);
break;
}
/* 虚拟商品列表 virtual_card*/
if ($value['is_real'] == 0)
{
$virtual_goods[] = array(
'goods_id' => $value['goods_id'],
'goods_name' => $value['goods_name'],
'num' => $value['send_number'],
);
}
}
}
/* 发货 */
/* 处理虚拟卡 商品(虚货) */
if (is_array($virtual_goods) && count($virtual_goods) > 0)
{
foreach ($virtual_goods as $virtual_value)
{
virtual_card_shipping($virtual_value,$order['order_sn'], $msg, 'split');
}
}
/* 如果使用库存,且发货时减库存,则修改库存 */
if ($_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP)
{
foreach ($delivery_stock_result as $value)
{
/* 商品(实货)、超级礼包(实货) */
if ($value['is_real'] != 0)
{
//(货品)
if (!empty($value['product_id']))
{
$minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('products') . "
SET product_number = product_number - " . $value['sums'] . "
WHERE product_id = " . $value['product_id'];
$GLOBALS['db']->query($minus_stock_sql, 'SILENT');
}
$minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('goods') . "
SET goods_number = goods_number - " . $value['sums'] . "
WHERE goods_id = " . $value['goods_id'];
$GLOBALS['db']->query($minus_stock_sql, 'SILENT');
}
}
}
/* 修改发货单信息 */
$invoice_no = trim($invoice_no);
$_delivery['invoice_no'] = $invoice_no;
$_delivery['status'] = 0; // 0,为已发货
$query = $db->autoExecute($ecs->table('delivery_order'), $_delivery, 'UPDATE', "delivery_id = $delivery_id", 'SILENT');
if (!$query)
{
/* 操作失败 */
$links[] = array('text' => $_LANG['delivery_sn'] . $_LANG['detail'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
sys_msg($_LANG['act_false'], 1, $links);
}
/* 标记订单为已确认 "已发货" */
/* 更新发货时间 */
$order_finish = get_all_delivery_finish($order_id);
$shipping_status = ($order_finish == 1) ? SS_SHIPPED : SS_SHIPPED_PART;
$arr['shipping_status'] = $shipping_status;
$arr['shipping_time'] = GMTIME_UTC; // 发货时间
$arr['invoice_no'] = trim($order['invoice_no'] . '
' . $invoice_no, '
');
update_order($order_id, $arr);
/* 发货单发货记录log */
order_action($order['order_sn'], OS_CONFIRMED, $shipping_status, $order['pay_status'], $action_note, null, 1);
/* 如果当前订单已经全部发货 */
if ($order_finish)
{
/* 如果订单用户不为空,计算积分,并发给用户;发红包 */
if ($order['user_id'] > 0)
{
/* 取得用户信息 */
$user = user_info($order['user_id']);
/* 计算并发放积分 */
$integral = integral_to_give($order);
log_account_change($order['user_id'], 0, 0, intval($integral['rank_points']), intval($integral['custom_points']), sprintf($_LANG['order_gift_integral'], $order['order_sn']));
/* 发放红包 */
send_order_bonus($order_id,$order['supplier_id']);
}
/* 发送邮件 */
$cfg = $_CFG['send_ship_email'];
if ($cfg == '1')
{
$order['invoice_no'] = $invoice_no;
$tpl = get_mail_template('deliver_notice');
$smarty->assign('order', $order);
$smarty->assign('send_time', local_date($_CFG['time_format']));
$smarty->assign('shop_name', $_CFG['shop_name']);
$smarty->assign('send_date', local_date($_CFG['date_format']));
$smarty->assign('sent_date', local_date($_CFG['date_format']));
$smarty->assign('confirm_url', $ecs->url() . 'receive.php?id=' . $order['order_id'] . '&con=' . rawurlencode($order['consignee']));
$smarty->assign('send_msg_url',$ecs->url() . 'user.php?act=message_list&order_id=' . $order['order_id']);
$content = $smarty->fetch('str:' . $tpl['template_content']);
if (!send_mail($order['consignee'], $order['email'], $tpl['template_subject'], $content, $tpl['is_html']))
{
$msg = $_LANG['send_mail_fail'];
}
}
/* 如果需要,发短信 */
if ($GLOBALS['_CFG']['sms_order_shipped'] == '1' && $order['mobile'] != '')
{
include_once(ROOT_PATH.'sms/sms.php');
$content = sprintf($_CFG['sms_order_shipped_tpl'],$order['order_sn'],$order['consignee'],$order['address'],$GLOBALS['_CFG']['shop_name']);
//$content = '您的订单已发货,订单号为'.$order['order_sn'].'收货人为'.$order['consignee'].'收货地址为'.$order['address'].',请注意查收【'.$GLOBALS['_CFG']['shop_name'].'】';
sendSMS($order['mobile'],$content);
}
}
/* 清除缓存 */
clear_cache_files();
/* 操作成功 */
$links[] = array('text' => $_LANG['09_delivery_order'], 'href' => 'order.php?act=delivery_list');
$links[] = array('text' => $_LANG['delivery_sn'] . $_LANG['detail'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
sys_msg($_LANG['act_ok'], 0, $links);
}
}
/*------------------------------------------------------ */
//-- end一键发货 增加 by
/*------------------------------------------------------ */
/* 付款 */
elseif (isset($_POST['pay']))
{
admin_priv('order_ps_edit');
$require_note = $_CFG['order_pay_note'] == 1;
$action = $_LANG['op_pay'];
$operation = 'pay';
}
/* 未付款 */
elseif (isset($_POST['unpay']))
{
admin_priv('order_ps_edit');
$require_note = $_CFG['order_unpay_note'] == 1;
$order = order_info($order_id);
if ($order['money_paid'] > 0)
{
$show_refund = true;
}
$anonymous = $order['user_id'] == 0;
$action = $_LANG['op_unpay'];
$operation = 'unpay';
}
/* 配货 */
elseif (isset($_POST['prepare']))
{
$require_note = false;
$action = $_LANG['op_prepare'];
$operation = 'prepare';
}
/* 分单 */
elseif (isset($_POST['ship']))
{
admin_priv('order_ss_edit');
$order_id = intval(trim($order_id));
$action_note = trim($action_note);
/* 查询:根据订单id查询订单信息 */
if (!empty($order_id))
{
$order = order_info($order_id);
}
else
{
die('order does not exist');
}
/* 查询:如果管理员属于某个办事处,检查该订单是否也属于这个办事处 */
$sql = "SELECT agency_id FROM " . $ecs->table('admin_user') . " WHERE user_id = '$_SESSION[admin_id]'";
$agency_id = $db->getOne($sql);
if ($agency_id > 0)
{
if ($order['agency_id'] != $agency_id)
{
sys_msg($_LANG['priv_error'], 0);
}
}
/* 查询:取得用户名 */
if ($order['user_id'] > 0)
{
$user = user_info($order['user_id']);
if (!empty($user))
{
$order['user_name'] = $user['user_name'];
}
}
/* 查询:取得区域名 */
$sql = "SELECT concat(IFNULL(c.region_name, ''), ' ', IFNULL(p.region_name, ''), " .
"' ', IFNULL(t.region_name, ''), ' ', IFNULL(d.region_name, '')) AS region " .
"FROM " . $ecs->table('order_info') . " AS o " .
"LEFT JOIN " . $ecs->table('region') . " AS c ON o.country = c.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS p ON o.province = p.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS t ON o.city = t.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS d ON o.district = d.region_id " .
"WHERE o.order_id = '$order[order_id]'";
$order['region'] = $db->getOne($sql);
/* 查询:其他处理 */
$order['order_time'] = local_date($_CFG['time_format'], $order['add_time']);
$order['invoice_no'] = $order['shipping_status'] == SS_UNSHIPPED || $order['shipping_status'] == SS_PREPARING ? $_LANG['ss'][SS_UNSHIPPED] : $order['invoice_no'];
/* 查询:是否保价 */
$order['insure_yn'] = empty($order['insure_fee']) ? 0 : 1;
/* 查询:是否存在实体商品 */
$exist_real_goods = exist_real_goods($order_id);
/* 查询:取得订单商品 */
$_goods = get_order_goods(array('order_id' => $order['order_id'], 'order_sn' =>$order['order_sn']));
$attr = $_goods['attr'];
$goods_list = $_goods['goods_list'];
unset($_goods);
/* 查询:商品已发货数量 此单可发货数量 */
if ($goods_list)
{
foreach ($goods_list as $key=>$goods_value)
{
if (!$goods_value['goods_id'])
{
continue;
}
/* 超级礼包 */
if (($goods_value['extension_code'] == 'package_buy') && (count($goods_value['package_goods_list']) > 0))
{
$goods_list[$key]['package_goods_list'] = package_goods($goods_value['package_goods_list'], $goods_value['goods_number'], $goods_value['order_id'], $goods_value['extension_code'], $goods_value['goods_id']);
foreach ($goods_list[$key]['package_goods_list'] as $pg_key => $pg_value)
{
$goods_list[$key]['package_goods_list'][$pg_key]['readonly'] = '';
/* 使用库存 是否缺货 */
if ($pg_value['storage'] <= 0 && $_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP)
{
$goods_list[$key]['package_goods_list'][$pg_key]['send'] = $_LANG['act_good_vacancy'];
$goods_list[$key]['package_goods_list'][$pg_key]['readonly'] = 'readonly="readonly"';
}
/* 将已经全部发货的商品设置为只读 */
elseif ($pg_value['send'] <= 0)
{
$goods_list[$key]['package_goods_list'][$pg_key]['send'] = $_LANG['act_good_delivery'];
$goods_list[$key]['package_goods_list'][$pg_key]['readonly'] = 'readonly="readonly"';
}
}
}
else
{
$goods_list[$key]['sended'] = $goods_value['send_number'];
$goods_list[$key]['send'] = $goods_value['goods_number'] - $goods_value['send_number'];
$goods_list[$key]['readonly'] = '';
/* 是否缺货 */
if ($goods_value['storage'] <= 0 && $_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP)
{
$goods_list[$key]['send'] = $_LANG['act_good_vacancy'];
$goods_list[$key]['readonly'] = 'readonly="readonly"';
}
elseif ($goods_list[$key]['send'] <= 0)
{
$goods_list[$key]['send'] = $_LANG['act_good_delivery'];
$goods_list[$key]['readonly'] = 'readonly="readonly"';
}
}
}
}
/* 模板赋值 */
$smarty->assign('order', $order);
$smarty->assign('exist_real_goods', $exist_real_goods);
$smarty->assign('goods_attr', $attr);
$smarty->assign('goods_list', $goods_list);
$smarty->assign('order_id', $order_id); // 订单id
$smarty->assign('operation', 'split'); // 订单id
$smarty->assign('action_note', $action_note); // 发货操作信息
$suppliers_list = get_suppliers_list();
$suppliers_list_count = count($suppliers_list);
$smarty->assign('suppliers_name', suppliers_list_name()); // 取供货商名
$smarty->assign('suppliers_list', ($suppliers_list_count == 0 ? 0 : $suppliers_list)); // 取供货商列表
/* 显示模板 */
$smarty->assign('ur_here', $_LANG['order_operate'] . $_LANG['op_split']);
assign_query_info();
$smarty->display('order_delivery_info.htm');
exit;
}
/* 未发货 */
elseif (isset($_POST['unship']))
{
admin_priv('order_ss_edit');
$require_note = $_CFG['order_unship_note'] == 1;
$action = $_LANG['op_unship'];
$operation = 'unship';
}
/* 收货确认 */
elseif (isset($_POST['receive']))
{
$require_note = $_CFG['order_receive_note'] == 1;
$action = $_LANG['op_receive'];
$operation = 'receive';
}
/* 取消 */
elseif (isset($_POST['cancel']))
{
$require_note = $_CFG['order_cancel_note'] == 1;
$action = $_LANG['op_cancel'];
$operation = 'cancel';
$show_cancel_note = true;
$order = order_info($order_id);
if ($order['money_paid'] > 0)
{
$show_refund = true;
}
$anonymous = $order['user_id'] == 0;
}
/* 无效 */
elseif (isset($_POST['invalid']))
{
$require_note = $_CFG['order_invalid_note'] == 1;
$action = $_LANG['op_invalid'];
$operation = 'invalid';
}
/* 售后 */
elseif (isset($_POST['after_service']))
{
$require_note = true;
$action = $_LANG['op_after_service'];
$operation = 'after_service';
}
/* 退货 */
elseif (isset($_POST['return']))
{
$require_note = $_CFG['order_return_note'] == 1;
$order = order_info($order_id);
if ($order['money_paid'] > 0)
{
$show_refund = true;
}
$anonymous = $order['user_id'] == 0;
$action = $_LANG['op_return'];
$operation = 'return';
}
/* 指派 */
elseif (isset($_POST['assign']))
{
/* 取得参数 */
$new_agency_id = isset($_POST['agency_id']) ? intval($_POST['agency_id']) : 0;
if ($new_agency_id == 0)
{
sys_msg($_LANG['js_languages']['pls_select_agency']);
}
/* 查询订单信息 */
$order = order_info($order_id);
/* 如果管理员属于某个办事处,检查该订单是否也属于这个办事处 */
$sql = "SELECT agency_id FROM " . $ecs->table('admin_user') . " WHERE user_id = '$_SESSION[admin_id]'";
$admin_agency_id = $db->getOne($sql);
if ($admin_agency_id > 0)
{
if ($order['agency_id'] != $admin_agency_id)
{
sys_msg($_LANG['priv_error']);
}
}
/* 修改订单相关所属的办事处 */
if ($new_agency_id != $order['agency_id'])
{
$query_array = array('order_info', // 更改订单表的供货商ID
'delivery_order', // 更改订单的发货单供货商ID
'back_order'// 更改订单的退货单供货商ID
);
foreach ($query_array as $value)
{
$db->query("UPDATE " . $ecs->table($value) . " SET agency_id = '$new_agency_id' " .
"WHERE order_id = '$order_id'");
}
}
/* 操作成功 */
$links[] = array('href' => 'order.php?act=list&' . list_link_postfix(), 'text' => $_LANG['01_order_list']);
sys_msg($_LANG['act_ok'], 0, $links);
}
/* 订单删除 */
elseif (isset($_POST['remove']))
{
$require_note = false;
$operation = 'remove';
if (!$batch)
{
/* 检查能否操作 */
$order = order_info($order_id);
$operable_list = operable_list($order);
if (!isset($operable_list['remove']))
{
die('Hacking attempt');
}
/* 删除订单 */
$db->query("DELETE FROM ".$ecs->table('order_info'). " WHERE order_id = '$order_id'");
$db->query("DELETE FROM ".$ecs->table('order_goods'). " WHERE order_id = '$order_id'");
$db->query("DELETE FROM ".$ecs->table('order_action'). " WHERE order_id = '$order_id'");
$action_array = array('delivery', 'back');
del_delivery($order_id, $action_array);
/* todo 记录日志 */
admin_log($order['order_sn'], 'remove', 'order');
/* 返回 */
sys_msg($_LANG['order_removed'], 0, array(array('href'=>'order.php?act=list&' . list_link_postfix(), 'text' => $_LANG['return_list'])));
}
}
/* 发货单删除 */
elseif (isset($_REQUEST['remove_invoice']))
{
// 删除发货单
$delivery_id=$_REQUEST['delivery_id'];
$delivery_id = is_array($delivery_id) ? $delivery_id : array($delivery_id);
foreach($delivery_id as $value_is)
{
$value_is = intval(trim($value_is));
// 查询:发货单信息
$delivery_order = delivery_order_info($value_is);
// 如果status不是退货
if ($delivery_order['status'] != 1)
{
/* 处理退货 */
delivery_return_goods($value_is, $delivery_order);
}
// 如果status是已发货并且发货单号不为空
if ($delivery_order['status'] == 0 && $delivery_order['invoice_no'] != '')
{
/* 更新:删除订单中的发货单号 */
del_order_invoice_no($delivery_order['order_id'], $delivery_order['invoice_no']);
}
// 更新:删除发货单
$sql = "DELETE FROM ".$ecs->table('delivery_order'). " WHERE delivery_id = '$value_is'";
$db->query($sql);
}
/* 返回 */
sys_msg($_LANG['tips_delivery_del'], 0, array(array('href'=>'order.php?act=delivery_list' , 'text' => $_LANG['return_list'])));
}
/* 退货单删除 */
elseif (isset($_REQUEST['remove_back']))
{
$back_id = $_REQUEST['back_id'];
/* 删除退货单 */
if(is_array($back_id))
{
foreach ($back_id as $value_is)
{
$sql = "DELETE FROM ".$ecs->table('back_order'). " WHERE back_id = '$value_is'";
$db->query($sql);
}
}
else
{
$sql = "DELETE FROM ".$ecs->table('back_order'). " WHERE back_id = '$back_id'";
$db->query($sql);
}
/* 返回 */
sys_msg($_LANG['tips_back_del'], 0, array(array('href'=>'order.php?act=back_list' , 'text' => $_LANG['return_list'])));
}
/* 批量打印订单 */
elseif (isset($_POST['print']))
{
if (empty($_POST['order_id']))
{
sys_msg($_LANG['pls_select_order']);
}
/* 赋值公用信息 */
$smarty->assign('shop_name', $_CFG['shop_name']);
$smarty->assign('shop_url', $ecs->url());
$smarty->assign('shop_address', $_CFG['shop_address']);
$smarty->assign('service_phone',$_CFG['service_phone']);
$smarty->assign('print_time', local_date($_CFG['time_format']));
$smarty->assign('action_user', $_SESSION['admin_name']);
$html = '';
$order_sn_list = explode(',', $_POST['order_id']);
foreach ($order_sn_list as $order_sn)
{
/* 取得订单信息 */
$order = order_info(0, $order_sn);
if (empty($order))
{
continue;
}
/* 根据订单是否完成检查权限 */
if (order_finished($order))
{
if (!admin_priv('order_view_finished', '', false))
{
continue;
}
}
else
{
if (!admin_priv('order_view', '', false))
{
continue;
}
}
/* 如果管理员属于某个办事处,检查该订单是否也属于这个办事处 */
$sql = "SELECT agency_id FROM " . $ecs->table('admin_user') . " WHERE user_id = '$_SESSION[admin_id]'";
$agency_id = $db->getOne($sql);
if ($agency_id > 0)
{
if ($order['agency_id'] != $agency_id)
{
continue;
}
}
/* 取得用户名 */
if ($order['user_id'] > 0)
{
$user = user_info($order['user_id']);
if (!empty($user))
{
$order['user_name'] = $user['user_name'];
}
}
/* 取得区域名 */
$sql = "SELECT concat(IFNULL(c.region_name, ''), ' ', IFNULL(p.region_name, ''), " .
"' ', IFNULL(t.region_name, ''), ' ', IFNULL(d.region_name, '')) AS region " .
"FROM " . $ecs->table('order_info') . " AS o " .
"LEFT JOIN " . $ecs->table('region') . " AS c ON o.country = c.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS p ON o.province = p.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS t ON o.city = t.region_id " .
"LEFT JOIN " . $ecs->table('region') . " AS d ON o.district = d.region_id " .
"WHERE o.order_id = '$order[order_id]'";
$order['region'] = $db->getOne($sql);
/* 其他处理 */
$order['order_time'] = local_date($_CFG['time_format'], $order['add_time']);
$order['pay_time'] = $order['pay_time'] > 0 ?
local_date($_CFG['time_format'], $order['pay_time']) : $_LANG['ps'][PS_UNPAYED];
$order['shipping_time'] = $order['shipping_time'] > 0 ?
local_date($_CFG['time_format'], $order['shipping_time']) : $_LANG['ss'][SS_UNSHIPPED];
$order['status'] = $_LANG['os'][$order['order_status']] . ',' . $_LANG['ps'][$order['pay_status']] . ',' . $_LANG['ss'][$order['shipping_status']];
$order['invoice_no'] = $order['shipping_status'] == SS_UNSHIPPED || $order['shipping_status'] == SS_PREPARING ? $_LANG['ss'][SS_UNSHIPPED] : $order['invoice_no'];
/* 此订单的发货备注(此订单的最后一条操作记录) */
$sql = "SELECT action_note FROM " . $ecs->table('order_action').
" WHERE order_id = '$order[order_id]' AND shipping_status = 1 ORDER BY log_time DESC";
$order['invoice_note'] = $db->getOne($sql);
/* 参数赋值:订单 */
$smarty->assign('order', $order);
/* 取得订单商品 */
$goods_list = array();
$goods_attr = array();
$sql = "SELECT o.*, g.goods_number AS storage, o.goods_attr, IFNULL(b.brand_name, '') AS brand_name " .
"FROM " . $ecs->table('order_goods') . " AS o ".
"LEFT JOIN " . $ecs->table('goods') . " AS g ON o.goods_id = g.goods_id " .
"LEFT JOIN " . $ecs->table('brand') . " AS b ON g.brand_id = b.brand_id " .
"WHERE o.order_id = '$order[order_id]' ";
$res = $db->query($sql);
while ($row = $db->fetchRow($res))
{
/* 虚拟商品支持 */
if ($row['is_real'] == 0)
{
/* 取得语言项 */
$filename = ROOT_PATH . 'plugins/' . $row['extension_code'] . '/languages/common_' . $_CFG['lang'] . '.php';
if (file_exists($filename))
{
include_once($filename);
if (!empty($_LANG[$row['extension_code'].'_link']))
{
$row['goods_name'] = $row['goods_name'] . sprintf($_LANG[$row['extension_code'].'_link'], $row['goods_id'], $order['order_sn']);
}
}
}
$row['formated_subtotal'] = price_format($row['goods_price'] * $row['goods_number']);
$row['formated_goods_price'] = price_format($row['goods_price']);
$goods_attr[] = explode(' ', trim($row['goods_attr'])); //将商品属性拆分为一个数组
$goods_list[] = $row;
}
$attr = array();
$arr = array();
foreach ($goods_attr AS $index => $array_val)
{
foreach ($array_val AS $value)
{
$arr = explode(':', $value);//以 : 号将属性拆开
$attr[$index][] = @array('name' => $arr[0], 'value' => $arr[1]);
}
}
$smarty->assign('goods_attr', $attr);
$smarty->assign('goods_list', $goods_list);
$smarty->template_dir = '../' . DATA_DIR;
$html .= $smarty->fetch('order_print.html') .
'
订单号 | 下单时间 | 发票状态 | '. '发票类型 | 发票抬头 | 发票内容 | '. '单位名称 | 纳税人识别号 | 注册地址 | '. '注册电话 | 开户银行 | 银行账户 | '. '收票人姓名 | 收票人手机 | 收票人地址 | 发票金额 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
' .$item. ' | '; } else { $data .= ''.$item.' | '; } } $data .= '