www.gusucode.com > 08CMS空白站群系统 3.3 繁体 UTF-8 > upload/admina/orders.inc.php
<? (!defined('M_COM') || !defined('M_ADMIN')) && exit('No Permission'); aheader(); !checkapermission(76) && amessage(lang('no_apermission')); if($sid && $sid_self) amessage(lang('msite admin item !')); include_once M_ROOT."./include/arcedit.cls.php"; include_once M_ROOT."./include/archive.fun.php"; include_once M_ROOT."./include/upload.cls.php"; include_once M_ROOT."./include/fields.fun.php"; include_once M_ROOT."./include/fields.cls.php"; load_cache('shipings,channels,acatalogs,currencys,commus,pfields,cotypes'); $catalogs = &$acatalogs; if($action == 'ordersedit'){ $page = !empty($page) ? max(1, intval($page)) : 1; submitcheck('bfilter') && $page = 1; $viewdetail = empty($viewdetail) ? '' : $viewdetail; $shid = empty($shid) ? '0' : $shid; $checked = isset($checked) ? $checked : '-1'; $send = isset($send) ? $send : '-1'; $receive = isset($receive) ? $receive : '-1'; $mname = empty($mname) ? '' : $mname; $indays = empty($indays) ? 0 : max(0,intval($indays)); $outdays = empty($outdays) ? 0 : max(0,intval($outdays)); $wheresql = ''; $shid && $wheresql .= ($wheresql ? " AND " : "")."shid='$shid'"; if($checked != '-1') $wheresql .= " AND checked='$checked'"; $send != '-1' && $wheresql .= ($wheresql ? " AND " : "")."send='$send'"; $receive != '-1' && $wheresql .= ($wheresql ? " AND " : "")."receive='$receive'"; $mname && $wheresql .= ($wheresql ? " AND " : "")."mname LIKE '%".str_replace(array(' ','*'),'%',addcslashes($mname,'%_'))."%'"; $indays && $wheresql .= ($wheresql ? " AND " : "")."createdate>'".($timestamp - 86400 * $indays)."'"; $outdays && $wheresql .= ($wheresql ? " AND " : "")."createdate<'".($timestamp - 86400 * $outdays)."'"; $filterstr = ''; foreach(array('viewdetail','shid','checked','send','receive','mname','indays','outdays') as $k){ $filterstr .= "&$k=".rawurlencode($$k); } $wheresql = $wheresql ? "WHERE $wheresql" : ""; if(!submitcheck('barcsedit')){ $shidsarr = array('0' => lang('nolimit shiping')); foreach($shipings as $k =>$v) $shidsarr[$k] = $v['cname']; $checkedarr = array('-1' => lang('nolimit'),'0' => lang('nocheck'),'1' => lang('checked')); $sendarr = array('-1' => lang('nolimit'),'0' => lang('nosend'),'1' => lang('sended')); $receivearr = array('-1' => lang('nolimit'),'0' => lang('noreceive'),'1' => lang('received')); tabheader(lang('filter0 orders').viewcheck('viewdetail',$viewdetail,'tbodyfilter').' '.strbutton('bfilter','filter0'),'arcsedit',"?entry=orders&action=ordersedit&page=$page"); echo "<tbody id=\"tbodyfilter\" style=\"display: ".(empty($viewdetail) ? 'none' : '')."\">"; trbasic(lang('weather checked'),'',makeradio('checked',$checkedarr,$checked),''); trbasic(lang('weather sended'),'',makeradio('send',$sendarr,$send),''); trbasic(lang('weather received'),'',makeradio('receive',$receivearr,$receive),''); trbasic(lang('shiping'),'',makeradio('shid',$shidsarr,$shid),''); trbasic(lang('search member'),'mname',$mname,'text',lang('agsearchkey')); trrange(lang('add date'),array('outdays',empty($outdays) ? '' : $outdays,'',' '.lang('day before').' - ',5),array('indays',empty($indays) ? '' : $indays,'',' '.lang('day in'),5)); echo "</tbody>"; tabfooter(); $pagetmp = $page; do{ $query = $db->query("SELECT * FROM {$tblprefix}orders $wheresql ORDER BY oid DESC LIMIT ".(($pagetmp - 1) * $atpp).",$atpp"); $pagetmp--; } while(!$db->num_rows($query) && $pagetmp); $strorder = ''; while($order = $db->fetch_array($query)){ $oid = $order['oid']; $checkedstr = $order['checked'] ? 'Y' : '-'; $sendstr = $order['send'] ? 'Y' : '-'; $receivestr = $order['receive'] ? 'Y' : '-'; $order['createdate'] = date("$dateformat",$order['createdate']); $strorder .= "<tr><td align=\"center\" class=\"item1\" width=\"30\"><input class=\"checkbox\" type=\"checkbox\" name=\"selectid[$oid]\" value=\"$oid\"></td>\n". "<td class=\"item2\">$order[ordersn]</td>\n". "<td align=\"center\" class=\"item1\">$order[mname]</td>\n". "<td align=\"center\" class=\"item2\" width=\"60\">$order[totalfee]</td>\n". "<td align=\"center\" class=\"item1\" width=\"60\">$order[payed]</td>\n". "<td align=\"center\" class=\"item2\" width=\"40\">$checkedstr</td>\n". "<td align=\"center\" class=\"item1\" width=\"40\">$sendstr</td>\n". "<td align=\"center\" class=\"item2\" width=\"40\">$receivestr</td>\n". "<td align=\"center\" class=\"item1\" width=\"70\">$order[createdate]</td>\n". "<td align=\"center\" class=\"item2\" width=\"40\"><a href=\"?entry=orders&action=orderdetail&oid=$order[oid]\">".lang('detail')."</a></td></tr>\n"; } $ordercount = $db->result_one("SELECT count(*) FROM {$tblprefix}orders $wheresql"); $multi = multi($ordercount, $atpp, $page, "?entry=orders&action=ordersedit$filterstr"); tabheader(lang('orders list')." <input class=\"checkbox\" type=\"checkbox\" name=\"select_all\" value=\"1\"> ".lang('selectallpage'),'','',11); trcategory(array("<input class=\"checkbox\" type=\"checkbox\" name=\"chkall\" onclick=\"checkall(this.form, 'selectid', 'chkall')\">",lang('orders sncode'),lang('member'),lang(' orders allamount'),lang('payed'),lang('checked'),lang('sended'),lang('received'),lang('orders date'),lang('edit'))); echo $strorder; tabfooter(); echo $multi; $checkarr = array('1' => lang('check'),'0' => lang('uncheck')); $sendarr = array('1' => lang('sended'),'0' => lang('nosend')); $receivearr = array('1' => lang('received'),'0' => lang('noreceive')); tabheader(lang('operate item')); echo "<tr><td class=\"item1\" colspan=\"2\">". "<input class=\"checkbox\" type=\"checkbox\" name=\"arcdeal[delete]\" value=\"1\"> ".lang('delete orders').' '. "</td></tr>"; trbasic("<input class=\"checkbox\" type=\"checkbox\" name=\"arcdeal[check]\" value=\"1\"> ".lang('check orders'),'',makeradio('arccheck',$checkarr,'1'),''); trbasic("<input class=\"checkbox\" type=\"checkbox\" name=\"arcdeal[send]\" value=\"1\"> ".lang('setting orders state'),'',makeradio('arcsend',$sendarr,'1'),''); trbasic("<input class=\"checkbox\" type=\"checkbox\" name=\"arcdeal[receive]\" value=\"1\"> ".lang('setting orders state'),'',makeradio('arcreceive',$receivearr,'1'),''); tabfooter('barcsedit'); }else{ if(empty($arcdeal) && empty($dealstr)){ amessage(lang('confirmselect operate item'),"?entry=orders&action=ordersedit&page=$page$filterstr"); } if(empty($selectid) && empty($select_all)){ amessage(lang('confirmselect orders'),"?entry=orders&action=ordersedit&page=$page$filterstr"); } if(!empty($select_all)){ if(empty($dealstr)){ $dealstr = implode(',',array_keys(array_filter($arcdeal))); }else{ $arcdeal = array(); foreach(array_filter(explode(',',$dealstr)) as $k) $arcdeal[$k] = 1; } $parastr = ""; foreach(array('arccheck,arcsend','arcreceive') as $k) $parastr .= "&$k=".$$k; $selectid = array(); $npage = empty($npage) ? 1 : $npage; if(empty($pages)){ $ordercount = $db->result_one("SELECT count(*) FROM {$tblprefix}orders $wheresql"); $pages = @ceil($ordercount / $atpp); } if($npage <= $pages){ $fromstr = empty($fromid) ? "" : "oid<$fromid"; $nwheresql = !$wheresql ? ($fromstr ? "WHERE $fromstr" : "") : ($wheresql.($fromstr ? " AND " : "").$fromstr); $query = $db->query("SELECT oid FROM {$tblprefix}orders $nwheresql ORDER BY oid DESC LIMIT 0,$atpp"); while($item = $db->fetch_array($query)){ $selectid[] = $item['oid']; } } } $auser = new cls_userinfo; $aedit = new cls_arcedit; foreach($selectid as $oid){ if($order = $db->fetch_one("SELECT * FROM {$tblprefix}orders WHERE oid=$oid")){ if(!empty($arcdeal['delete'])){ if(!$order['send'] && $order['payed']){//如果是已发货订单,只是删除记录,未发货定单则为退订,需要退回已支付的款项 $auser->activeuser($order['mid']); $auser->updatecrids(array(0 => $order['payed']),1,lang('orders modify')); $auser->init(); } $db->query("DELETE FROM {$tblprefix}orders WHERE oid='$oid'",'SILENT'); $db->query("DELETE FROM {$tblprefix}purchases WHERE oid='$oid'",'SILENT'); continue; } if(!empty($arcdeal['check']) && $arccheck != $order['checked']){ if(empty($order['send'])){//已发货的订单不能修改审核状态 $query = $db->query("SELECT * FROM {$tblprefix}purchases WHERE oid='$oid'");//购买统计的相关操作 while($item = $db->fetch_array($query)){ $aedit->set_aid($item['aid']); $aedit->basic_data(); $aedit->arc_nums('orders',$arccheck ? $item['nums'] : (-$item['nums']),0); $aedit->arc_nums('ordersum',$arccheck ? $item['nums'] * $item['price'] : (-$item['nums'] * $item['price']),0); $enablestock && $aedit->updatefield('storage',$arccheck ? max(0,$aedit->archive['storage'] - $item['nums']) : ($aedit->archive['storage'] + $item['nums']),'sub'); $aedit->updatedb(); $aedit->auser->basedeal('purchase',$arccheck,$item['nums'],1); $aedit->init(); } $db->query("UPDATE {$tblprefix}orders SET checked='$arccheck' WHERE oid='$oid'"); $order['checked'] = $arccheck; } } if(!empty($arcdeal['send']) && $arcsend != $order['send']){ if($order['checked'] && !$order['receive']){//只有已审订单及未收货订单才可以修改订单发货状态 $db->query("UPDATE {$tblprefix}orders SET send='$arcsend' WHERE oid='$oid' AND checked='1'"); $order['send'] = $arcsend; } } if(!empty($arcdeal['receive']) && $arcreceive != $order['receive']){ if($order['send']){//只有已发货的订单才可以修改订单的收货状态 $db->query("UPDATE {$tblprefix}orders SET receive='$arcreceive' WHERE oid='$oid'"); } } } } unset($aedit,$auser); if(!empty($select_all)){ $npage ++; if($npage <= $pages){ $fromid = min($selectid); $transtr = ''; $transtr .= "&select_all=1"; $transtr .= "&pages=$pages"; $transtr .= "&npage=$npage"; $transtr .= "&barcsedit=1"; $transtr .= "&fromid=$fromid"; amessage(lang('operating')."<br> ".lang('all')." $pages ".lang('page0').",".lang('dealing')." $npage ".lang('page0')."<br><br> <a href=\"?entry=orders&action=ordersedit&page=$page$filterstr\">>>".lang('pause')."</a>", "?entry=orders&action=ordersedit&page=$page$filterstr$transtr$parastr&dealstr=$dealstr", 500); } } adminlog(lang('orders admin'),lang('orders list admin operate')); amessage(lang('orders operate finish'),"?entry=orders&action=ordersedit&page=$page$filterstr"); } } elseif($action == 'orderdetail' && $oid){ $forward = empty($forward) ? M_REFERER : $forward; empty($oid) && amessage(lang('confirmchoose orders'),$forward); if(!$order = $db->fetch_one("SELECT * FROM {$tblprefix}orders WHERE oid=$oid")) amessage(lang('confirmchoose orders'),$forward); if(!submitcheck('borderdetail') && !submitcheck('borderlist') && !submitcheck('borderinfo')){ a_guide('orderdetail'); $shidsarr = array('0' => lang('nosetting')); foreach($shipings as $k =>$v) $shidsarr[$k] = $v['cname']; tabheader(lang('orders based setting'),'orderdetail','?entry=orders&action=orderdetail&oid='.$oid.'&forward='.urlencode($forward)); trbasic(lang('orders sncode'),'',$order['ordersn'],''); trbasic(lang('orders state'),'',lang($order['checked'] ? 'checked' : 'nocheck').' / '.lang($order['send'] ? 'sended' : 'nosend').' / '.lang($order['receive'] ? 'received' : 'noreceive'),''); trbasic(lang('member cname'),'',$order['mname'],''); trbasic(lang('goods fee ( yuan )'),'',$order['orderfee'],''); trbasic(lang('ship fee ( yuan )'),'',$order['shipingfee'],''); trbasic(lang('orders fee allamount ( yuan )'),'',$order['totalfee'],''); trbasic(lang('payed cash ( yuan )'),'ordernew[payed]',$order['payed']); !empty($enableship) && trbasic(lang('shiping'),'ordernew[shid]',makeoption($shidsarr,$order['shid']),'select'); tabfooter(); tabheader(lang('orders goods list'),'','','7'); trcategory(array(lang('delete'),lang('goods cname'),lang('catalog'),lang('channel'),lang('weight'),lang('price'),lang('amount'))); $query = $db->query("SELECT c.*,a.sid,a.arcurl,a.subject,a.caid,a.chid FROM {$tblprefix}purchases c LEFT JOIN {$tblprefix}archives a ON (a.aid=c.aid) WHERE oid='$oid'"); while($item = $db->fetch_array($query)){ $cid = $item['cid']; $item['arcurl'] = view_arcurl($item); $item['catalog'] = empty($catalogs[$item['caid']]) ? lang('nocata') : $catalogs[$item['caid']]['title']; $item['channel'] = $channels[$item['chid']]['cname']; $item['createdate'] = date("$dateformat", $item['createdate']); echo "<tr><td align=\"center\" class=\"item1\" width=\"40\"><input class=\"checkbox\" type=\"checkbox\" name=\"delete[$cid]\" value=\"$cid\">\n". "<td class=\"item2\"><a href=\"$item[arcurl]\" target=\"_blank\">".mhtmlspecialchars($item['subject'])."</a></td>\n". "<td align=\"center\" class=\"item1\">$item[catalog]</td>\n". "<td align=\"center\" class=\"item2\">$item[channel]</td>\n". "<td align=\"center\" class=\"item1\" width=\"40\">$item[weight]</td>\n". "<td align=\"center\" class=\"item2\" width=\"40\">$item[price]</td>\n". "<td align=\"center\" class=\"item1\" width=\"70\"><input type=\"text\" size=\"4\" name=\"purchasesnew[$cid][nums]\" value=\"$item[nums]\"><input type=\"hidden\" name=\"purchasesnew[$cid][oldnums]\" value=\"$item[nums]\"></td></tr>\n"; } tabfooter('borderdetail',lang('modify')); tabheader(lang('orders message setting'),'orderdetail','?entry=orders&action=orderdetail&oid='.$oid.'&forward='.urlencode($forward)); $a_field = new cls_field; $submitstr = ''; foreach($pfields as $k => $field){ $a_field->init(); $a_field->field = $field; $a_field->oldvalue = !isset($order[$k]) ? '' : $order[$k]; $a_field->trfield('cartnew'); $submitstr .= $a_field->submitstr; } tabfooter('borderinfo',lang('modify')); }elseif(submitcheck('borderdetail')){ $order['checked'] && amessage(lang('checked orders cannot modify'),$forward); /////////////////////////////////////////////先处理订单中的数量变更 $num_alter = $sh_alter = 0; //在设置发货中处理库存量 if(!empty($delete)){ foreach($delete as $cid){ $num_alter = 1; $db->query("DELETE FROM {$tblprefix}purchases WHERE cid='$cid'",'SILENT'); } } if(!empty($purchasesnew)){ foreach($purchasesnew as $cid => $purchasenew){ $purchasenew['nums'] = max(0,intval($purchasenew['nums'])); if($purchasenew['nums'] != $purchasenew['oldnums']){//应该可以自由变更数量 $num_alter = 1; $db->query("UPDATE {$tblprefix}purchases SET nums='$purchasenew[nums]' WHERE cid='$cid'"); } } } $sqlstr = ''; /////////////////////////////////////////////送货方式的修改 if($enableship && $ordernew['shid'] != $order['shid']){ $order['shid'] = $ordernew['shid']; $sqlstr .= ($sqlstr ? ',' : '')."shid='$order[shid]'"; $sh_alter = 1; } /////////////////////////////////////////////重计各种费用 if($num_alter || $sh_alter){ $order['orderfee'] = $order['weight'] = 0; $query = $db->query("SELECT * FROM {$tblprefix}purchases WHERE oid='$oid'"); while($item = $db->fetch_array($query)){ $order['orderfee'] += $item['nums'] * $item['price']; $order['weight'] += $item['nums'] * $item['weight']; } $order['shipingfee'] = calshipingfee($order['orderfee'],$order['shid'],$order['weight']); $order['totalfee'] = $order['orderfee'] + $order['shipingfee']; $sqlstr .= ($sqlstr ? ',' : '')."weight='$order[weight]'"; $sqlstr .= ($sqlstr ? ',' : '')."orderfee='$order[orderfee]'"; $sqlstr .= ($sqlstr ? ',' : '')."shipingfee='$order[shipingfee]'"; $sqlstr .= ($sqlstr ? ',' : '')."totalfee='$order[totalfee]'"; } /////////////////////////////////////////////支付费用的修改//支付有可能会超出定价本身,因为可能有附加的条件 $ordernew['payed'] = max(0,round($ordernew['payed'],2)); if($dvalue = $ordernew['payed'] - $order['payed']){//只需要考虑会员当前现金与加扣的值的比较 $auser = new cls_userinfo; $auser->activeuser($order['mid']); $dvalue > 0 && $dvalue = min($auser->infos['currency0'],$dvalue); if($dvalue){ $auser->updatecrids(array(0 => - $dvalue),1,lang('orders modify')); $order['payed'] += $dvalue; $sqlstr .= ($sqlstr ? ',' : '')."payed='$order[payed]'"; } } $sqlstr && $db->query("UPDATE {$tblprefix}orders SET $sqlstr WHERE oid='$oid'"); amessage(lang('orders modify finish'),$forward); }elseif(submitcheck('borderinfo')){ $order['checked'] && amessage(lang('checked orders cannot modify'),$forward); $c_upload = new cls_upload; $pfields = fields_order($pfields); $a_field = new cls_field; $sqlstr = ""; foreach($pfields as $k => $field){ $a_field->init(); $a_field->field = $field; $a_field->deal('cartnew'); if(!empty($a_field->error)){ $c_upload->rollback(); amessage($a_field->error,M_REFERER); } $sqlstr .= ($sqlstr ? ',': '').$k."='".$a_field->newvalue."'"; } $c_upload->saveuptotal(1); unset($a_field,$c_upload); $db->query("UPDATE {$tblprefix}orders SET $sqlstr WHERE oid='$oid'"); amessage(lang('orders modify finish'),$forward); } } ?>