Files
OMS/app/console/lib/receipt/stock.php
2025-12-28 23:13:25 +08:00

890 lines
34 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Copyright © ShopeX http://www.shopex.cn. All rights reserved.
* See LICENSE file for license details.
*/
/**
* 出入库单据相关处理
*/
class console_receipt_stock
{
private $_isoObj = null;
private $_itemsObj = null;
private $_isoInfo = array();
private $_items = array();
private static $iso_status = array(
'PARTIN' => 2,
'FINISH' => 3,
'CLOSE' => 4,
'CANCEL' => 4,
'FAILED' => 4,
);
/**
* __construct
* @return mixed 返回值
*/
public function __construct()
{
$this->_isoObj = app::get('taoguaniostockorder')->model("iso");
$this->_itemsObj = app::get('taoguaniostockorder')->model("iso_items");
$this->_branchLib = kernel::single('ome_branch');
}
/**
* 出入库据保存
* io 0 出库 1 入库
* 入库会有残损
* 出库不会
* $array $data
*/
public function do_save($data, $io, &$msg)
{
set_time_limit(0);
$iostock_update = true;
$auto_iostock = false;
$io_status = $data['io_status'];
// $shippackages = $data['shippackages'];
$approMdl = app::get('taoguanallocate')->model('appropriation');
$wmsdata =$data;
kernel::database()->beginTransaction();
//更新主表,让并发分出先后
$this->_isoObj->update(['iso_id' => $this->_isoInfo['iso_id']], array('iso_id' => $this->_isoInfo['iso_id']));
$iostockData = $this->_format_items($data, $io, $iostock_update, $auto_iostock,$diff_status);
if ($auto_iostock == true && $this->_isoInfo['iso_status'] == '1' && $io_status == 'FINISH') {
$msg = '因仓库反馈数量大于申请数量,人工介入';
$iso__update = array('receive_status' => console_const::_FINISH_CODE);
if (!$iostock_update) {
//是否需要确认
$iso__update['defective_status'] = '1'; #未确认
}
$iso_result = $this->_isoObj->update($iso__update, array('iso_id' => $this->_isoInfo['iso_id']));
kernel::database()->commit();
return true;
}
if ($io == '0') {
$stockLib = kernel::single('siso_receipt_iostock_stockout');
$wsoMdl = app::get('console')->model('wms_stockout');
$wsoRow = $wsoMdl->db_dump(['stockout_bn'=>$this->_isoInfo['iso_bn'], 'iso_status'=>'1'], 'id');
if($wsoRow) {
$wsoRs = $wsoMdl->update(['iso_id'=>$this->_isoInfo['iso_id'], 'iso_status'=>'2'], ['id'=>$wsoRow['id'], 'iso_status'=>'1']);
if(!is_bool($wsoRs)) {
app::get('ome')->model('operation_log')->write_log('wms_stockout@console',$wsoRow['id'], '出库完成');
}
}
} else {
$stockLib = kernel::single('siso_receipt_iostock_stockin');
$wsiMdl = app::get('console')->model('wms_stockin');
$wsiRow = $wsiMdl->db_dump(['stockin_bn'=>$this->_isoInfo['iso_bn'], 'iso_status'=>'1'], 'id');
if($wsiRow) {
$wsiRs = $wsiMdl->update(['iso_id'=>$this->_isoInfo['iso_id'], 'iso_status'=>'2'], ['id'=>$wsiRow['id'], 'iso_status'=>'1']);
if(!is_bool($wsiRs)) {
app::get('ome')->model('operation_log')->write_log('wms_stockin@console',$wsiRow['id'], '入库完成');
}
}
}
$stockLib->_typeId = $this->_isoInfo['type_id'];
if ($iostockData['items']) {
$result = $stockLib->create($iostockData, $data, $msg);
if (!$result) {
$msg = '出入库失败';
kernel::database()->rollBack();
return false;
}
}
$oper = kernel::single('ome_func')->getDesktopUser();
$io_update_data = array(
'iso_status' => self::$iso_status[$io_status],
'confirm' => 'Y',
'operator' => $oper['op_name'],
'complete_time' => time(),
);
if (!$iostock_update) {
//是否需要确认
$io_update_data['defective_status'] = '1'; #未确认
}
if ($io_status == 'FINISH' && $diff_status) {
$io_update_data['diff_status'] = $diff_status; #未确认
}
//是否有备注
if ($data['memo']) {
$memo = '';
if (!$this->_isoInfo['memo']) {
$memo .= $this->_isoInfo['memo'];
}
$memo .= htmlspecialchars($data['memo']);
$io_update_data['memo'] = $memo;
}
if($wmsdata['logi_no']){
$io_update_data['logi_no'] = $wmsdata['logi_no'];
}
if($wmsdata['logi_id']){
$io_update_data['logi_code'] = $wmsdata['logi_id'];
}
$iso_result = $this->_isoObj->update($io_update_data, array('iso_id' => $this->_isoInfo['iso_id'], 'iso_status|notin'=>['3','4']));
if (is_bool($iso_result)) {
$msg = '出入库单据状态更新失败';
kernel::database()->rollBack();
return false;
}
kernel::database()->commit();
if ($io == '0') {
//减冻结
$this->clear_stockout_store_freeze($iostockData, $io_status);
}
if ($io != '0' && $io_status == 'FINISH') {
$this->reduceArriveStore();
}
if ($this->_isoInfo['type_id'] == '4' && $io_status == 'FINISH') {
$filter = array('appropriation_no' => $this->_isoInfo['appropriation_no']);
$approMdl->update(array('process_status' => 5, 'delivery_time' => time()), $filter);
}
if ($this->_isoInfo['type_id'] == '40' && $io_status == 'FINISH') {
#调拔出库且为完成时执行调拔入库
$stockin_id = kernel::single('console_iostockdata')->allocate_out($this->_isoInfo['iso_id']);
//如果是补货自动审核
if($stockin_id && in_array($this->_isoInfo['bill_type'],array('transfer','replenishment','o2otransfer','returnnormal'))){
kernel::single('console_iostockorder')->doCkeck($stockin_id, 1);
}
}
if ($this->_isoInfo['type_id'] == '70' && $io_status == 'FINISH') {
if($this->_isoInfo['bill_type'] == 'oms_reship_diff') {
kernel::single('console_reship')->addReshipDiff($this->_isoInfo['iso_id']);
}
if ($this->_isoInfo['bill_type'] == 'vopjitrk' && app::get('billcenter')->is_installed()) {
kernel::single('console_vopreturn')->finishStockin($this->_isoInfo['iso_id']);
}
}
//JDL处理
if(in_array($this->_isoInfo['bill_type'],array('jdlreturn')) && $io_status == 'FINISH'){
kernel::single('ediws_jdlvmi')->dealStockinItems($this->_isoInfo['iso_id']);
}
if ($io_status == 'FINISH' && $wmsdata['packages']) {
$this->_processPackage($this->_isoInfo['iso_id'],$wmsdata['packages']);
}
return true;
}
/**
*
* 出入库单取消
* @param $data 出入库单数据
* @param $io 出 入标识
*/
public function cancel($data, $io)
{
$iostockdata = $this->_isoInfo;
$result = $this->_isoObj->update(array('iso_status' => '4'), array('iso_id' => $iostockdata['iso_id'], 'iso_status|notin'=>['3','4']));
if(is_bool($result)) {
return false;
}
//释放冻结库存
if ($io == '0') {
$iostockdata['items'] = $this->_items;
$this->clear_stockout_store_freeze($iostockdata, '');
}
//取消在途
if ($io != '0') {
$this->reduceArriveStore();
}
return $result;
}
/**
* 检查传过来的货号是否都存在于单据中
* @param iso_id 出入库单ID
* @param items array 货品明细
*/
public function checkBnexist($iso_id, $items)
{
#taoguaniostockorder_iso
$bn_array = array();
foreach ($items as $item) {
$bn_array[] = $item['bn'];
}
$bn_total = count($bn_array);
$bn_array = '\'' . implode('\',\'', $bn_array) . '\'';
$iso_items = $this->_isoObj->db->selectrow('SELECT count(iso_items_id) as count FROM sdb_taoguaniostockorder_iso_items WHERE iso_id=' . $iso_id . ' AND bn in (' . $bn_array . ')');
if ($bn_total != $iso_items['count']) {
#比较数目是否相等
return false;
}
return true;
}
/**
*
* 检查出入库单是否有效
* @param $iso_bn 出入库单编号
* @param $status 需要执行状态
* @msg 返回结果
*
*/
public function checkValid($iso_bn, $status, &$msg)
{
$iso = $this->checkExist($iso_bn);
if (!$iso) {
$msg = '单据号不存在!';
return false;
}
$iso_status = $iso['iso_status'];
switch ($status) {
case 'PARTIN':
case 'FINISH':
if ($iso_status == '3') {
$msg = '单据已完成,不可以入库';
return false;
}
if ($iso_status == '4') {
$msg = '单据已取消,不可以入库';
return false;
}
break;
case 'CANCEL':
case 'CLOSE':
if ($iso_status == '3' || $iso_status == '2') {
$msg = '单据已部分或全部入库,不可以取消';
return false;
}
if ($iso_status == '4') {
$msg = '单据已取消,不可以再次取消';
return false;
}
break;
}
return true;
}
/**
* 释放冻结库存
*
* array data 当有明细时,操作对应明细,否则操作所有
*/
public function clear_stockout_store_freeze($data, $io_status = '')
{
//$basicMaterialStock = kernel::single('material_basic_material_stock');
//$libBranchProduct = kernel::single('ome_branch_product');
$branch_id = $data['branch_id'];
//库存管控处理
$storeManageLib = kernel::single('ome_store_manage');
$storeManageLib->loadBranch(array('branch_id' => $branch_id));
$params = array();
$params['node_type'] = 'finishStockout';
$params['params'] = array('iso_id' => $data['iso_id'], 'branch_id' => $branch_id);
//释放冻结
$_items = $this->_items;
$productBns = array();
$items = $data['items'];
foreach ((array) $items as $item) {
if ($item['nums'] <= 0) {
continue;
}
$effective_num = isset($item['effective_num']) ? $item['effective_num'] : ($item['nums'] - $item['normal_num']);
$num = 0;
if ($io_status == 'FINISH' || $io_status == '') {
$num = $effective_num;
} else {
$num = $effective_num > 0 ? $item['nums'] : $effective_num;
}
$product_id = $item['product_id'];
if ($num > 0) {
$productBns[$item['bn']] = $item['bn'];
//库存管控处理
$params['params']['product_id'] = $product_id;
$params['params']['num'] = $num;
$params['params']['bn'] = $item['bn'];
$processResult = $storeManageLib->processBranchStore($params, $err_msg);
}
}
//当状态为全部完成时需将未产生过出入库记录释放冻结
if ($io_status == 'FINISH') {
$iostock_list = $this->getIostockList($this->_isoInfo['type_id'], $data['iso_id']);
foreach ($_items as $_item) {
$num = 0;
if ($_item['normal_num'] == 0 && !in_array($_item['bn'], $iostock_list)) {
$num = $_item['nums'] - $_item['normal_num'];
}
//处理之前部分出库
if (($_item['normal_num'] > 0 && $_item['nums'] > $_item['normal_num']) && in_array($_item['bn'], $iostock_list) && (in_array($_item['bn'], $productBns) == false)) {
$num = $_item['nums'] - $_item['normal_num'];
}
if ($num > 0) {
//库存管控处理
$params['params']['product_id'] = $_item['product_id'];
$params['params']['num'] = $num;
$params['params']['bn'] = $_item['bn'];
$processResult = $storeManageLib->processBranchStore($params, $err_msg);
}
}
}
//删除预占流水
if ($io_status == 'FINISH' || $io_status == '') {
$basicMStockFreezeLib = kernel::single('material_basic_material_stock_freeze');
$basicMStockFreezeLib->delOtherFreeze($data['iso_id'], material_basic_material_stock_freeze::__STOCKOUT);
}
}
/**
* 判断出入库明细是否存在
*
*/
public function checkExist($io_bn)
{
$iso = $this->_isoObj->dump(array('iso_bn' => $io_bn), '*');
if ($iso) {
$this->_isoInfo = $iso;
$iso_id = $iso['iso_id'];
$_items = $this->_itemsObj->getList('iso_id,iso_items_id,defective_num,normal_num,nums,price,product_id,bn', array('iso_id' => $iso_id));
$this->_items = array();
foreach ($_items as $k => $item) {
$this->_items[$item['bn']] = $item;
}
}
return $iso;
}
/**
* 查看差异数据
*/
public function difference_stock($iso_bn)
{
$iso = $this->_isoObj->dump(array('iso_bn' => $iso_bn), 'iso_id');
$iso_id = $iso['iso_id'];
$sql = 'SELECT i.nums,i.normal_num,i.defective_num,i.bn, p.material_name AS name FROM sdb_taoguaniostockorder_iso_items as i
LEFT JOIN sdb_material_basic_material as p ON i.bn=p.material_bn
WHERE i.iso_id=' . $iso_id . ' AND (i.normal_num!=i.nums OR i.defective_num>0)';
$iso_item = $this->_isoObj->db->select($sql);
return $iso_item;
}
public function _format_items($data, $io, &$iostock_update, &$auto_iostock, &$diff_status)
{
$itemDetailMdl = app::get('taoguaniostockorder')->model('iso_items_detail');
$isoItemDetailList = [];
foreach ($itemDetailMdl->getList('*', array('iso_id' => $this->_isoInfo['iso_id'])) as $detail) {
if (!$detail['iso_items_id']) continue;
// num > normal_num + defective_num
if ($detail['nums'] == $detail['normal_num'] + $detail['defective_num']) {
continue;
}
$detail['extendpro'] = $detail['extendpro'] ? @unserialize($detail['extendpro']) : [];
$isoItemDetailList[$detail['iso_items_id']][$detail['id']] = $detail;
}
$iostock_autoConf = app::get('ome')->getConf('ome.iostock.auto_finish');
$items = array();
$iostock = array(
'iso_id' => $this->_isoInfo['iso_id'],
'type_id' => $this->_isoInfo['type_id'],
'iso_bn' => $this->_isoInfo['iso_bn'],
'memo' => $data['memo'],
'operate_time' => $data['operate_time'],
'branch_id' => $this->_isoInfo['branch_id'],
);
foreach ($data['items'] as $item) {
$num = $io == '0' ? intval($item['num']) : intval($item['normal_num']);
if ($this->_items[$item['bn']]) {
$itemdata = array();
if ($num > 0) {
$itemdata['normal_num'] = $this->_items[$item['bn']]['normal_num'] + $num;
$effective_num = $this->_items[$item['bn']]['nums'] - $this->_items[$item['bn']]['normal_num'];
}
if ($item['defective_num'] > 0) {
$itemdata['defective_num'] = $this->_items[$item['bn']]['defective_num'] + $item['defective_num'];
$iostock_update = false;
}
if (($itemdata['normal_num'] + $itemdata['defective_num']) > $this->_items[$item['bn']]['nums']) {
//入库单允许超收
if ($iostock['type_id'] != '4' && $iostock_autoConf == 'true') {
$auto_iostock = true;
}
}
if (($itemdata['normal_num'] + $itemdata['defective_num']) != $this->_items[$item['bn']]['nums']) {
$diff_status = '1';
}
$this->_itemsObj->update($itemdata, array('iso_items_id' => $this->_items[$item['bn']]['iso_items_id'], 'iso_id' => $this->_items[$item['bn']]['iso_id']));
// 更新ISO DETAIL 明细
if ($item['details'] && $isoItemDetail = $isoItemDetailList[$this->_items[$item['bn']]['iso_items_id']]) {
if ($itemdata['normal_num'] == $this->_items[$item['bn']]['nums']) {
$itemDetailMdl->update([
'normal_num_upset_sql' => '`nums`',
],[
'iso_id' => $this->_items[$item['bn']]['iso_id'],
'iso_items_id' => $this->_items[$item['bn']]['iso_items_id'],
]);
} elseif ($itemdata['defective_num'] == $this->_items[$item['bn']]['nums']) {
$itemDetailMdl->update([
'defective_num_upset_sql' => '`nums`',
],[
'iso_id' => $this->_items[$item['bn']]['iso_id'],
'iso_items_id' => $this->_items[$item['bn']]['iso_items_id'],
]);
} elseif (in_array($this->_isoInfo['bill_type'],['vopjitrk'])) {
foreach ($item['details'] as $detail) {
$detail['normal_num'] = intval($detail['normal_num']);
$detail['defective_num'] = intval($detail['defective_num']);
if ($isoItemDetail[$detail['orderLineNo']]) {
$itemDetailMdl->update([
'normal_num_upset_sql' => '`normal_num` + '.$detail['normal_num'],
'defective_num_upset_sql' => '`defective_num` + '.$detail['defective_num'],
],[
'id' => $isoItemDetail[$detail['orderLineNo']]['id'],
'iso_id' => $this->_items[$item['bn']]['iso_id'],
'iso_items_id' => $this->_items[$item['bn']]['iso_items_id'],
'filter_sql' => '`nums` >= (`normal_num` + `defective_num` + '. $detail['normal_num'].' + '.$detail['defective_num'].')',
]);
}
}
}
}
if($num>0){
$items[$item['bn']] = array(
'bn' => $item['bn'],
'nums' => $num, #请求入库数量
'price' => $this->_items[$item['bn']]['price'],
'iso_items_id' => $this->_items[$item['bn']]['iso_items_id'],
'product_id' => $this->_items[$item['bn']]['product_id'],
'effective_num' => $effective_num,
);
}
if($item['batch']) {
$useLogModel = app::get('console')->model('useful_life_log');
$useful = [];
foreach ($item['batch'] as $bv) {
$tmpUseful = [];
$tmpUseful['product_id'] = $this->_items[$item['bn']]['product_id'];
$tmpUseful['bn'] = $item['bn'];
$tmpUseful['original_bn'] = $this->_isoInfo['iso_bn'];
$tmpUseful['original_id'] = $this->_isoInfo['iso_id'];
$tmpUseful['business_bn'] = $this->_isoInfo['business_bn'] ? $this->_isoInfo['business_bn'] : $this->_isoInfo['iso_bn'];
$tmpUseful['bill_type'] = 'iso';
$tmpUseful['sourcetb'] = 'iso';
$tmpUseful['create_time'] = time();
$tmpUseful['stock_status'] = '0';
$tmpUseful['num'] = $bv['num'];
$tmpUseful['normal_defective'] = $bv['normal_defective'];
$tmpUseful['product_time'] = $bv['product_time']?$bv['product_time']:0;
$tmpUseful['expire_time'] = $bv['expire_time']?$bv['expire_time']:0;
$tmpUseful['purchase_code'] = $bv['purchase_code'];
$tmpUseful['produce_code'] = $bv['produce_code'];
$useful[] = $tmpUseful;
}
$useLogModel->db->exec(ome_func::get_insert_sql($useLogModel, $useful));
}
}else{
//新差异处理使用,暂时跳过(下面代码先注释)
continue;
// todo 表里新增商品明细,$items也拼接上明细
// if ($iostock['type_id'] == '4') {
// $isoItemsMdl = app::get('taoguaniostockorder')->model("iso_items");
// $materialMdl = app::get('material')->model("basic_material");
// $materialExtMdl = app::get('material')->model("basic_material_ext");
// $materialInfo = $materialMdl->db_dump(array('material_bn' => $item['bn']), 'bm_id,material_bn,material_name');
// $extInfo = $materialExtMdl->db_dump(['bm_id' => $materialInfo['bm_id']], 'bm_id,retail_price');
// $moreItem = array(
// 'iso_id' => $iostock['iso_id'],
// 'iso_bn' => $iostock['iso_bn'],
// 'product_id' => $materialInfo['bm_id'],
// 'product_name' => $materialInfo['material_name'],
// 'bn' => $item['bn'],
// 'price' => $extInfo['retail_price'],
// 'nums' => 0,
// 'normal_num' => $item['normal_num'],
// 'defective_num' => $item['defective_num'] ? $item['defective_num'] : 0,
// );
// $isoItemsMdl->insert($moreItem);
//
// $items[$item['bn']] = array(
// 'bn' => $moreItem['bn'],
// 'nums' => $moreItem['normal_num'], #请求入库数量
// 'price' => $moreItem['price'],
// 'iso_items_id' => $moreItem['iso_items_id'],
// 'product_id' => $moreItem['product_id'],
// 'effective_num' => 0,
// );
// }
}
}
$iostock['items'] = $items;
return $iostock;
}
/**
* 扣除在途库存
*
* @return void
* @author
* */
private function reduceArriveStore()
{
$iso = $this->_isoInfo;
$items = $this->_items;
//取消在途
$storeManageLib = kernel::single('ome_store_manage');
$storeManageLib->loadBranch(array('branch_id' => $iso['branch_id']));
$params = array();
$params['node_type'] = 'deleteArriveStore';
$params['params'] = array(
'obj_id' => $iso['iso_id'],
'branch_id' => $iso['branch_id'],
'obj_type' => 'iostockorder',
);
$storeManageLib->processBranchStore($params, $err_msg);
}
public function getIostockList($type_id, $iso_id)
{
$db = kernel::database();
$sql = "SELECT bn FROM sdb_ome_iostock WHERE type_id in(" . $type_id . ") AND original_id=" . $iso_id . " AND nums>0";
$items = array();
$iso = $db->select($sql);
foreach ($iso as $v) {
$items[] = $v['bn'];
}
return $items;
}
//判断转仓单据是否存在 并获取数据
/**
* 检查ExistWarehouse
* @param mixed $io_bn io_bn
* @return mixed 返回验证结果
*/
public function checkExistWarehouse($io_bn){
$isoObj = app::get('warehouse')->model("iso");
$itemsObj = app::get('warehouse')->model("iso_items_simple");
$iso = $isoObj->dump(array('iso_bn'=>$io_bn),'*');
if ($iso){
$this->_isoInfo = $iso;
$iso_id = $iso['iso_id'];
$_items = $itemsObj->getList('iso_items_simple_id,iso_id,defective_num,normal_num,nums,price,product_id,bn',array('iso_id'=>$iso_id));
$this->_items= array();
foreach ($_items as $k=>$item){
$current_item_key = $item['bn'];
$this->_items[$current_item_key] = $item;
}
}
return $iso;
}
/**
* 检查出仓库单是否有效
* @param $iso_bn 出入库单编号
* @param $status 需要执行状态
* @msg 返回结果
*/
public function checkValidWarehouse($iso_bn,$status,&$msg){
$iso = $this->checkExistWarehouse($iso_bn);
if (!$iso){
$msg = '单据号不存在!';
return false;
}
$iso_status = $iso['iso_status'];
switch($status){
case 'PARTIN':
case 'FINISH':
if ($iso_status=='3'){
$msg = '单据已完成,不可以入库';
return false;
}
if ($iso_status == '4'){
$msg = '单据已取消,不可以入库';
return false;
}
break;
case 'CANCEL':
case 'CLOSE':
if ($iso_status=='3' || $iso_status=='2'){
$msg = '单据已部分或全部入库,不可以取消';
return false;
}
if ($iso_status == '4'){
$msg = '单据已取消,不可以再次取消';
return false;
}
break;
}
return true;
}
/**
*
* 出入库单取消
* @param $io_bn 出入库单号
* @param $io 出 入标识
*/
public function cancel_warehouse($io_bn){
$isoObj = app::get('warehouse')->model("iso");
$result = $isoObj->update(array('iso_status'=>'4'),array('iso_bn'=>$io_bn));
return $result;
}
/**
* 出入库据保存
* 入库会有残损
* 出库不会
* $array $data
*/
public function do_save_warehouse($data,&$msg){
set_time_limit(0);
$iostock_update = true;
$auto_iostock = false;
$io_status = $data['io_status'];
kernel::database()->beginTransaction();
$iostockData = $this->_format_items_warehouse($data,$iostock_update,$auto_iostock);
$isoObj = app::get('warehouse')->model("iso");
if($auto_iostock == true && $this->_isoInfo['iso_status']=='1' && $io_status == 'FINISH'){
$msg = '因仓库反馈数量大于申请数量,人工介入';
//$iso__update = array('receive_status'=>console_const::_FINISH_CODE);
if (!$iostock_update){#是否需要确认
$iso__update['defective_status'] = '1';#未确认
}
$iso_result = $isoObj->update($iso__update,array('iso_id'=>$this->_isoInfo['iso_id']));
kernel::database()->commit();
return true;
}
$stockLib = kernel::single('siso_receipt_iostock_stockinwarehouse');
$stockLib->_typeId = $this->_isoInfo['type_id'];
if($iostockData['items']){
$result = $stockLib->create($iostockData, $data, $msg);
if (!$result){
$msg = '出入库失败';
kernel::database()->rollBack();
return false;
}
}
$io_update_data = array('iso_status'=>self::$iso_status[$io_status],'confirm'=>'Y');
if (!$iostock_update){#是否需要确认
$io_update_data['defective_status'] = '1';#未确认
}
#是否有备注
if ($data['memo']){
$memo = '';
if (!$this->_isoInfo['memo']){
$memo.= $_isoInfo['memo'];
}
$memo.=htmlspecialchars($data['memo']);
$io_update_data['memo'] = $memo;
}
//当完成时更新完成时间
if($io_status == 'FINISH'){
$io_update_data["complete_time"] = time();
}
$iso_result = $isoObj->update($io_update_data,array('iso_id'=>$this->_isoInfo['iso_id']));
if (!$iso_result){
$msg = '出入库单据状态更新失败';
kernel::database()->rollBack();
return false;
}
kernel::database()->commit();
return true;
}
function _format_items_warehouse($data,&$iostock_update,&$auto_iostock){
$itemsObj = app::get('warehouse')->model("iso_items_simple");
$iostock_autoConf = app::get('ome')->getConf('ome.iostock.auto_finish');
$items = array();
$iostock = array(
'iso_id'=>$this->_isoInfo['iso_id'],
'type_id'=>$this->_isoInfo['type_id'],
'iso_bn'=>$this->_isoInfo['iso_bn'],
'memo'=>$data['memo'],
'operate_time'=>$data['operate_time'],
'branch_id'=>$this->_isoInfo['branch_id'],
);
foreach ($data['items'] as $item){
$num = intval($item['normal_num']);
$current_item_key = $item['bn'];
if($this->_items[$current_item_key]){ //存在的数据库明细数据
$itemdata = array();
if($num>0){
$itemdata['normal_num'] = $this->_items[$current_item_key]['normal_num']+$num;
}
if ($item['defective_num']>0){
$itemdata['defective_num'] = $this->_items[$current_item_key]['defective_num']+$item['defective_num'];
$iostock_update = false;
}
if(($itemdata['normal_num']+$itemdata['defective_num'])>$this->_items[$current_item_key]['nums']){
if($iostock_autoConf=='true'){
$auto_iostock = true;
}
}
$itemsObj->update($itemdata,array('iso_items_simple_id'=>$this->_items[$current_item_key]['iso_items_simple_id'],'iso_id'=>$this->_items[$current_item_key]['iso_id']));
$items[$current_item_key] = array(
'bn' => $item['bn'],
'nums' => $num,#请求入库数量
'price' => $this->_items[$current_item_key]['price'],
'iso_items_id' => $this->_items[$current_item_key]['iso_items_simple_id'],
'product_id' => $this->_items[$current_item_key]['product_id'],
);
}
}
$iostock['items'] = $items;
return $iostock;
}
function _processPackage($iso_id,$packages){
$bn_packages = $package_data = array();
foreach ($packages as $value) {
$bn =$value['bn'];
if($value['package_code']){
$bn_packages[$bn]['bn'] = $value['bn'];
$bn_packages[$bn]['package_code'] = $value['package_code'];
}
}
$items = $this->_itemsObj->getList('iso_id,iso_items_id,nums,product_id,bn', array('iso_id' => $iso_id));
$detailMdl = app::get('taoguaniostockorder')->model('iso_items_detail');
$items_details = $detailMdl->getlist('id,bn,extendpro',array('iso_id' => $iso_id));
if($items_details){
foreach($items_details as $iv){
$bn = $iv['bn'];
$package_code = $bn_packages[$bn] ? $bn_packages[$bn]['package_code'] : '';
if($package_code){
$extendpro = array('package_code'=>$package_code);
$extendpro = serialize($extendpro);
$updata = array('extendpro'=>$extendpro);
$detailMdl->update($updata,array('id'=>$iv['id']));
}
}
}else{
foreach($items as $v){
$bn = $v['bn'];
if($bn_packages[$bn]){
$package_code = $bn_packages[$bn]['package_code'];
$extendpro = array('package_code'=>$package_code);
$extendpro = serialize($extendpro);
$package_data[] = array(
'iso_items_id' => $v['iso_items_id'],
'iso_id' => $v['iso_id'],
'product_id' => $v['product_id'],
'product_name' => $v['product_name'],
'bn' => $v['bn'],
'nums' => $v['nums'],
'price' => $v['price'] ? $v['price'] : 0,
'extendpro' => $extendpro,
);
}
}
if($package_data){
$sql = kernel::single('ome_func')->get_insert_sql($detailMdl, $package_data);
$detailMdl->db->exec($sql);
}
}
//
}
}