只有在库存为0的缺货状态下报缺货登记,有库存需先下单再报缺货登记

2016-07-07 15:00 来源:www.chinab4c.com 作者:ecshop专家

最近公司系统做了个库存管理,方便各分部门领取物品及统计每月每个部门使用经费,所以使用了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);
}


更改到此结束,我试验成功了,满足了我现在的需求,但是还有许多不足之处,请大家指正!谢谢!

回答:
感谢分享!!

感恩你,

太好了,越多人分享越爽.

感谢分享,不知道还有用不

感谢分享!!我也觉得那个缺货登记不怎么好。。。最好能后台设置是否开启缺货登记。。。