www.gusucode.com > 08CMS空白站群系统 3.3 繁体 UTF-8 > upload/adminm/orders.inc.php

    <?
!defined('M_COM') && exit('No Permission');
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,catalogs,currencys,pfields,cotypes');
$oid = empty($oid) ? 0 : max(0,intval($oid));
if(empty($oid)){
	$page = !empty($page) ? max(1, intval($page)) : 1;
	submitcheck('bfilter') && $page = 1;
	$viewdetail = empty($viewdetail) ? '' : $viewdetail;
	$checked = isset($checked) ? $checked : '-1';
	$send = isset($send) ? $send : '-1';
	$receive = isset($receive) ? $receive : '-1';
	$indays = empty($indays) ? 0 : max(0,intval($indays));
	$outdays = empty($outdays) ? 0 : max(0,intval($outdays));
	
	$filterstr = '';
	foreach(array('viewdetail','checked','send','receive','indays','outdays') as $k){
		$filterstr .= "&$k=".urlencode($$k);
	}

	$wheresql = "WHERE mid=$memberid";
	if($checked != '-1') $wheresql .= " AND checked='$checked'";
	if($send != '-1') $wheresql .= " AND send='$send'";
	if($receive != '-1') $wheresql .= " AND receive='$receive'";
	if(!empty($indays)) $wheresql .= " AND createdate>'".($timestamp - 86400 * $indays)."'";
	if(!empty($outdays)) $wheresql .= " AND createdate<'".($timestamp - 86400 * $outdays)."'";

	if(!submitcheck('barcsedit') && !submitcheck('barcscancel')){
		m_guide(24);
		$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',"?action=orders");
		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),'');
		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) * $mrowpp).",$mrowpp");
			$pagetmp--;
		} while(!$db->num_rows($query) && $pagetmp);
		$itemstr = '';
		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']);
			$itemstr .= "<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=\"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=\"?action=orders&oid=$order[oid]\">".lang('edit')."</a></td></tr>\n";
		}
		$counts = $db->result_one("SELECT count(*) FROM {$tblprefix}orders $wheresql");
		$multi = multi($counts, $mrowpp, $page, "?action=orders$filterstr");

		tabheader(lang('orders list')."&nbsp;&nbsp;&nbsp;&nbsp;<input class=\"checkbox\" type=\"checkbox\" name=\"select_all\" value=\"1\">&nbsp;".lang('selectallpage'),'','',10);
		trcategory(array("<input class=\"checkbox\" type=\"checkbox\" name=\"chkall\" onclick=\"checkall(this.form, 'selectid', 'chkall')\">",lang('orders sncode'),lang(' orders allamount'),lang('payed'),lang('checked'),lang('sended'),lang('received'),lang('orders date'),lang('detail')));
		echo $itemstr;
		tabfooter();
		echo $multi;
		echo "<input class=\"button\" type=\"submit\" name=\"barcscancel\" value=\"".lang('cancel orders')."\">&nbsp; &nbsp; <input class=\"button\" type=\"submit\" name=\"barcsedit\" value=\"".lang('received')."\"></form>";
	}else{
		if(empty($selectid) && empty($select_all)) mcmessage(lang('confirmselect orders'),M_REFERER);
		if(!empty($select_all)){
			$selectid = array();
			$npage = empty($npage) ? 1 : $npage;
			if(empty($pages)){
				$counts = $db->result_one("SELECT count(*) FROM {$tblprefix}orders $wheresql");
				$pages = @ceil($counts / $mrowpp);
			}
			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,$mrowpp");
				while($item = $db->fetch_array($query)){
					$selectid[] = $item['oid'];
				}
			}
		}
		if($selectid && submitcheck('barcsedit')) $db->query("UPDATE {$tblprefix}orders SET receive=1 WHERE send=1 AND oid IN (".mimplode($selectid).")");
		if($selectid && submitcheck('barcscancel')){//未审订单才可以自行删除
			$value = 0;
			$oids = array();
			$query = $db->query("SELECT oid,payed FROM {$tblprefix}orders WHERE checked=0 AND  oid IN (".mimplode($selectid).")");
			while($order = $db->fetch_array($query)){
				$oids[] = $order['oid'];
				$value += $order['payed'];
			}
			$db->query("DELETE FROM {$tblprefix}orders WHERE checked=0 AND  oid IN (".mimplode($selectid).")",'SILENT');
			$oids && $db->query("DELETE FROM {$tblprefix}purchases WHERE oid IN (".mimplode($oids).")",'SILENT');
			$value && $curuser->updatecrids(array(0 => $value),1,lang('cancel orders'));
		}

		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";
				echo "?action=orders&page=$page$filterstr$transtr";
				mcmessage(lang('operating')."<br>
						".lang('all')." $pages ".lang('page0').",".lang('dealing')." $npage ".lang('page0')."<br><br>
						<a href=\"?action=orders&page=$page$filterstr\">>>".lang('pause')."</a>",
						"?action=orders&page=$page$filterstr$transtr",
						500);
			}
		}
		mcmessage(lang('orders operate finish'),"?action=orders&page=$page$filterstr");
	}
}
else{
	if(!$order = $db->fetch_one("SELECT * FROM {$tblprefix}orders WHERE oid=$oid AND mid='$memberid'")) mcmessage(lang('confirmchoose orders'),M_REFERER);
	if(!submitcheck('borderdetail') && !submitcheck('borderlist') && !submitcheck('borderinfo')){
		$shidsarr = array('0' => lang('nosetting'));
		foreach($shipings as $k =>$v) $shidsarr[$k] = $v['cname'];
		tabheader(lang('orders based setting'),'orderdetail','?action=orders&oid='.$oid);
		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','?action=orders&oid='.$oid);
		$a_field = new cls_field;
		$submitstr = '';
		foreach($pfields as $k => $field){
			if(!$field['isadmin']){
				$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'] && mcmessage(lang('checked orders cannot modify'),M_REFERER);
		/////////////////////////////////////////////先处理订单中的数量变更
		$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'");
		mcmessage(lang('orders modify finish'),M_REFERER);
	}elseif(submitcheck('borderinfo')){
		$order['checked'] && mcmessage(lang('checked orders cannot modify'),M_REFERER);
		$c_upload = new cls_upload;	
		$pfields = fields_order($pfields);
		$a_field = new cls_field;
		$sqlstr = "";
		foreach($pfields as $k => $field){
			if(!$field['isadmin']){
				$a_field->init();
				$a_field->field = $field;
				$a_field->deal('cartnew');
				if(!empty($a_field->error)){
					$c_upload->rollback();
					mcmessage($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'");
		mcmessage(lang('orders modify finish'),M_REFERER);
	}
}
?>