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').'&nbsp; &nbsp; '.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,'','&nbsp; '.lang('day before').'&nbsp; -&nbsp; ',5),array('indays',empty($indays) ? '' : $indays,'','&nbsp; '.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')."&nbsp;&nbsp;&nbsp;&nbsp;<input class=\"checkbox\" type=\"checkbox\" name=\"select_all\" value=\"1\">&nbsp;".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\">&nbsp;".lang('delete orders').'&nbsp; &nbsp; &nbsp; '.
		"</td></tr>";
		trbasic("<input class=\"checkbox\" type=\"checkbox\" name=\"arcdeal[check]\" value=\"1\">&nbsp;".lang('check orders'),'',makeradio('arccheck',$checkarr,'1'),'');
		trbasic("<input class=\"checkbox\" type=\"checkbox\" name=\"arcdeal[send]\" value=\"1\">&nbsp;".lang('setting orders state'),'',makeradio('arcsend',$sendarr,'1'),'');
		trbasic("<input class=\"checkbox\" type=\"checkbox\" name=\"arcdeal[receive]\" value=\"1\">&nbsp;".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').'&nbsp;/&nbsp;'.lang($order['send'] ? 'sended' : 'nosend').'&nbsp;/&nbsp;'.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);
	}
}
?>