只有在库存为0的缺货状态下报缺货登记,有库存需先下单再报缺货登记
最近公司系统做了个库存管理,方便各分部门领取物品及统计每月每个部门使用经费,所以使用了ecshop,但是有一处小功能不适合库存管理,也就是缺货登记,如果某个人在有库存的状态下(即商品不为0)下订单,但是下订单时数量大于库存,按照系统就要先报缺货登记再下单,但是有点不符合公司的要求,公司的要求是库存为0时才能包缺货登记,不为0时,要先把库存数量下单,然后在报缺货登记,于是我就下了一个ecshop(v2.7.2)在本地做测试。更改结果如下:
第一步:找到echop(根目录)/includes/inc_c**tant.php文件51行,这一处是报错、提示的六个级别,需要增加一个,我做为7.
代码如下:
/* 加入购物车失败的错误代码 */ define(‘ERR_NOT_EXISTS’,? ?? ?? ?? ?1); // 商品不存在 define(‘ERR_OUT_OF_STOCK’,? ?? ?? ? 2); // 商品缺货(0) define(‘ERR_NOT_ON_SALE’,? ?? ?? ???3); // 商品已下架 define(‘ERR_CANNT_ALONE_SALE’,? ?? ?4); // 商品不能单独销售 define(‘ERR_NO_BASIC_GOODS’,? ?? ???5); // 没有基本件 define(‘ERR_NEED_SELECT_ATTR’,? ?? ?6); // 需要用户选择属性 define(‘ERR_OUT_OF_STOCK_NUM’,? ?? ?7); // 商品缺货(不为0)
第二步:找到echop(根目录)/languages/zh_cn/common.php文件185行,这一行是再前台商品缺货或者订购数量大于库存时所报的提示,在下面加一行:
$_LANG[‘shortage’] = “对不起,该商品已经库存不足暂停销售。\n你现在要进行缺货登记来预订该商品吗?”; $_LANG[‘shortage2’] = “对不起,该商还有库存。\n请您先下订单购买,不足再下缺货登记!”;
第三步:找到echop(根目录)/includes/lib_order.php文件1082行,
检查:商品购买数量是否大于总库存
if ($num > $goods[‘goods_number’] ){$GLOBALS[‘err’]->add(sprintf($GLOBALS[‘_LANG’][‘shortage’], $goods[‘goods_number’]), ERR_OUT_OF_STOCK); return false;}原系统只是判断购买数量大于库存,但是没有考虑库存是否为0.所以作如下更改if (($num > $goods[‘goods_number’]) && ($goods[‘goods_number’] == 0)){$GLOBALS[‘err’]->add(sprintf($GLOBALS[‘_LANG’][‘shortage’], $goods[‘goods_number’]), ERR_OUT_OF_STOCK); return false;}else if(($num > $goods[‘goods_number’]) && ($goods[‘goods_number’] != 0)){$GLOBALS[‘err’]->add(sprintf($GLOBALS[‘_LANG’][‘shortage2’], $goods[‘goods_number’]), ERR_OUT_OF_STOCK_NUM); return false;} 再找到1220行左右if($row) //如果购物车已经有此物品,则更新{$num += $row[‘goods_number’];if ($GLOBALS[‘_CFG’][‘use_storage’] == 0 || $num <= $goods[‘goods_number’]){$goods_price = get_final_price($goods_id, $num, true, $spec);$sql = “UPDATE ” . $GLOBALS[‘ecs’]->table(‘cart’) . ” SET goods_number = ‘$num'” .” , goods_price = ‘$goods_price'”.” WHERE session_id = ‘” .SESS_ID. “‘ AND goods_id = ‘$goods_id’ “.” AND parent_id = 0 AND goods_attr = ‘” .get_goods_attr_info($spec). “‘ ” .” AND extension_code <> ‘package_buy’ ” .“AND rec_type = ‘CART_GENERAL_GOODS'”;$GLOBALS[‘db’]->query($sql);}else{$GLOBALS[‘err’]->add(sprintf($GLOBALS[‘_LANG’][‘shortage’], $num), ERR_OUT_OF_STOCK); return false;}}作如下更改else{$GLOBALS[‘err’]->add(sprintf($GLOBALS[‘_LANG’][‘shortage2’], $num), ERR_OUT_OF_STOCK_NUM); return false;}
第四步,找到echop(根目录)/js/common.js文件78行,
else if (result.error == 6) { openSpeDiv(result.message, result.goods_id, result.parent); }
再后面再加
else if (result.error == 6) { openSpeDiv(result.message, result.goods_id, result.parent); } else if (result.error == 7) { alert(result.message); }