mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-30 13:05:34 +08:00
741 lines
24 KiB
PHP
741 lines
24 KiB
PHP
<?php
|
|
/**
|
|
* Copyright 2026 ShopeX (https://www.shopex.cn)
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
/**
|
|
* 出入库单据相关处理
|
|
*/
|
|
class ediws_jdlvmi{
|
|
|
|
/**
|
|
* dealStockinItems
|
|
* @param mixed $iso_id ID
|
|
* @return mixed 返回值
|
|
*/
|
|
|
|
public function dealStockinItems($iso_id){
|
|
|
|
$iso = $this->getisoitems($iso_id);
|
|
|
|
if($iso['source'] == 'refundinfo'){//新的切换
|
|
$rs = $this->dealIsoItems($iso);
|
|
|
|
return true;
|
|
}
|
|
$return_sn = $iso['original_bn'];
|
|
$items = $iso['items'];
|
|
if($items){
|
|
|
|
$vopreturnMdl = app::get('console')->model('vopreturn');
|
|
|
|
$return_sn = $iso['original_bn'];
|
|
$vopreturn = $vopreturnMdl->db_dump(array('return_sn'=>$return_sn),'*');
|
|
|
|
if(empty($vopreturn)) return true;
|
|
if(in_array($vopreturn['in_status'],array('3'))){
|
|
return false;
|
|
}
|
|
|
|
$inItems = array();
|
|
|
|
$return_id = $vopreturn['id'];
|
|
$itemsMdl = app::get('console')->model('vopreturn_items');
|
|
|
|
foreach($items as $v){
|
|
|
|
$num = $v['in_nums'];
|
|
if($num<=0) continue;
|
|
|
|
$itemsMdl->db->exec("UPDATE sdb_console_vopreturn_items SET num=".$num." WHERE return_id=".$return_id." AND bm_id='".$v['product_id']."' and num=0 limit 1");
|
|
|
|
}
|
|
|
|
|
|
$time = time();
|
|
|
|
$vopreturnMdl->db->exec("UPDATE sdb_console_vopreturn set status='2',in_status='3',last_modified=".$time.",iostock_time=".$time." WHERE id=".$return_id."");
|
|
|
|
$logMsg = '入库完成';
|
|
app::get('ome')->model('operation_log')->write_log('vopreturn@console',$return_id,$logMsg);
|
|
|
|
//生成售后单
|
|
$this->syncAftersale($return_id);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
* confirm
|
|
* @param mixed $returnId ID
|
|
* @param mixed $branch_id ID
|
|
* @return mixed 返回值
|
|
*/
|
|
public function confirm($returnId,$branch_id=0){
|
|
|
|
|
|
list($rs,$msg) = $this->autoConfirm($returnId,$branch_id);
|
|
$msg = '确认'.$msg;
|
|
app::get('ome')->model('operation_log')->write_log('vopreturn@console',$returnId,$msg);
|
|
return [$rs, $msg];
|
|
|
|
}
|
|
|
|
/**
|
|
* _dealInItems
|
|
* @param mixed $addData 数据
|
|
* @return mixed 返回值
|
|
*/
|
|
public function _dealInItems($addData) {
|
|
if(empty($addData['items'])) {
|
|
return [true, ['msg'=>'缺少明细']];
|
|
}
|
|
|
|
$data = array(
|
|
'iostockorder_name' => date('Ymd') . '入库单',
|
|
'supplier' => '',
|
|
'supplier_id' => 0,
|
|
'branch' => $addData['branch_id'],
|
|
'extrabranch_id' => $addData['extrabranch_id'],
|
|
'type_id' => ome_iostock::DIRECT_STORAGE,
|
|
'iso_price' => 0,
|
|
'memo' => (string)$addData['memo'],
|
|
'operator' => $op['op_name'],
|
|
'original_bn' => $addData['original_bn'],
|
|
'original_id' => $addData['original_id'],
|
|
'products' => $products,
|
|
'appropriation_no' => '',
|
|
'bill_type' => $addData['bill_type'] ? $addData['bill_type'] : 'jdlreturn',
|
|
'iostockorder_bn' => $addData['io_bn'],
|
|
'io_bn' => $addData['io_bn'],
|
|
'logi_no' => $addData['logi_no'],
|
|
'business_bn' => $addData['business_bn'],
|
|
|
|
);
|
|
|
|
if($addData['source']) $data['source'] = $addData['source'];
|
|
$isoMdl = app::get('taoguaniostockorder')->model('iso');
|
|
|
|
$iso = $isoMdl->db_dump(array('iso_bn'=>$data['io_bn'],'type_id'=>$data['type_id'],'bill_type'=>$data['bill_type']),'iso_id');
|
|
|
|
if($iso){
|
|
return [false, ['msg'=>$data['io_bn'].':已存在']];
|
|
}
|
|
|
|
$itemsMdl = app::get('taoguaniostockorder')->model('iso_items');
|
|
kernel::database()->beginTransaction();
|
|
$products = [];
|
|
foreach ($addData['items'] as $v) {
|
|
$products[$v['product_id']] = [
|
|
'bn' => $v['bn'],
|
|
'name' => $v['name'],
|
|
'nums' => $v['nums'],
|
|
'price' => 0,
|
|
'partcode' => $v['partcode'],
|
|
];
|
|
|
|
kernel::database()->exec('UPDATE sdb_console_vopreturn_items SET split_num=split_num+'.$v['nums'].' WHERE id='.$v['return_item_id'].' AND qty >= split_num+'.$v['nums'].' limit 1');
|
|
|
|
$affect_rows = kernel::database()->affect_row();
|
|
if ($affect_rows !== 1) {
|
|
kernel::database()->rollBack();
|
|
|
|
return [false, ['msg'=>$v['partcode'].'确认失败:拆分数量超过申请数量']];
|
|
}
|
|
|
|
|
|
// $partcode = $v['partcode'];
|
|
// $items =$itemsMdl->db_dump(array('partcode'=>$partcode),'iso_items_id');
|
|
|
|
// if($items){
|
|
// return [false, ['msg'=>$partcode.':已存在']];
|
|
// }
|
|
}
|
|
|
|
$data['products'] = $products;
|
|
$op = kernel::single('ome_func')->getDesktopUser();
|
|
|
|
|
|
$iostockorder_instance = kernel::single('console_iostockorder');
|
|
$rs = $iostockorder_instance->save_iostockorder($data, $msg);
|
|
if($rs) {
|
|
|
|
kernel::database()->commit();
|
|
} else {
|
|
kernel::database()->rollBack();
|
|
}
|
|
return [$rs, ['msg'=>$msg,'iso_id'=>$rs]];
|
|
}
|
|
|
|
/**
|
|
* 获取_sku
|
|
* @param mixed $shop_id ID
|
|
* @param mixed $bn bn
|
|
* @return mixed 返回结果
|
|
*/
|
|
public function get_sku($shop_id,$bn){
|
|
|
|
|
|
$skuMdl = app::get('inventorydepth')->model('shop_skus');
|
|
$skus = $skuMdl->db_dump(array('shop_id'=>$shop_id,'shop_sku_id'=>$bn),'shop_product_bn');
|
|
|
|
|
|
if($skus){
|
|
$materials = $this->getMaterials($skus['shop_product_bn']);
|
|
|
|
return $materials;
|
|
}else{
|
|
return array();
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* autocheckIso
|
|
* @param mixed $iso_id ID
|
|
* @return mixed 返回值
|
|
*/
|
|
public function autocheckIso($iso_id) {
|
|
|
|
#库存状态判断
|
|
$isoObj = app::get('taoguaniostockorder')->model('iso');
|
|
$iso = $isoObj->dump($iso_id, 'check_status,branch_id,iso_bn,type_id,bill_type');
|
|
$branch_id = $iso['branch_id'];
|
|
if ($iso['check_status'] != '1') {
|
|
return [false, 'msg'=>'此单据已审核!'];
|
|
}
|
|
|
|
|
|
$oIso_items = app::get('taoguaniostockorder')->model('iso_items');
|
|
#需要判断可用库存是否足够
|
|
$iso_items = $oIso_items->getlist('bn,nums,nums as num,product_id', array('iso_id' => $iso_id), 0, -1);
|
|
|
|
$iso_data = array('check_status' => '2');
|
|
$result = $isoObj->update($iso_data, array('iso_id' => $iso_id, 'check_status'=>'1'));
|
|
if (is_bool($result)) {
|
|
return [false, ['msg'=>'更新状态失败']];
|
|
}
|
|
|
|
//新加在tu库存
|
|
if($iso['bill_type'] == 'JDMASTERRO'){
|
|
|
|
|
|
}
|
|
kernel::single('console_event_trigger_otherstockin')->create(array('iso_id' => $iso_id), false);
|
|
|
|
|
|
return [true, ['msg'=>'操作成功']];
|
|
}
|
|
|
|
/**
|
|
* autoConfirm
|
|
* @param mixed $returnId ID
|
|
* @param mixed $branch_id ID
|
|
* @return mixed 返回值
|
|
*/
|
|
public function autoConfirm($returnId,$branch_id=0){
|
|
$vopreturnMdl = app::get('console')->model('vopreturn');
|
|
|
|
if($branch_id){
|
|
$vopreturnMdl->update(array('in_branch_id'=>$branch_id),array('id'=>$returnId));
|
|
|
|
}
|
|
$oldRow = $vopreturnMdl->db_dump(array('id'=>$returnId,'bill_status'=>'1'), '*');
|
|
|
|
if(!in_array($oldRow['shop_type'],array('360buy'))){
|
|
return [false, '店铺类型错误或不是待读取状态'];
|
|
}
|
|
|
|
if($oldRow['status'] != '0') {
|
|
// return [false, '不可审核'];
|
|
}
|
|
|
|
$accountordersLib = kernel::single('ediws_accountorders');
|
|
|
|
$itemObj = app::get('console')->model('vopreturn_items');
|
|
$items = $itemObj->getList('*', ['return_id'=>$returnId, 'filter_sql'=>'qty > 0']);
|
|
|
|
$partcodeList = array();
|
|
|
|
foreach($items as $iv){
|
|
if(empty($iv['refundid'])) return [false, '退货单号为空'];
|
|
if(empty($iv['originsaleordid'])) return [false, '原始订单号为空'];
|
|
|
|
}
|
|
|
|
$shop_id = $oldRow['shop_id'];
|
|
|
|
$shops = $vopreturnMdl->db->selectrow("select shop_bn from sdb_ome_shop where shop_id='".$shop_id."'");
|
|
|
|
$shop_bn = $shops['shop_bn'];
|
|
|
|
$extrabranchs = $vopreturnMdl->db->selectrow("select branch_id from sdb_ome_extrabranch where branch_bn='".$shop_bn."'");
|
|
if(empty($items)) {
|
|
|
|
//return [false, '缺少明细'];
|
|
}
|
|
$in_branch_id = $oldRow['in_branch_id'];
|
|
if(!$in_branch_id) {
|
|
|
|
$error_msg = '缺少入库仓';
|
|
return [false, $error_msg];
|
|
}
|
|
|
|
$isoData = array();
|
|
|
|
|
|
$shop_id = $oldRow['shop_id'];
|
|
|
|
foreach($items as $v) {
|
|
|
|
|
|
if(empty($v['material_bn'])){
|
|
$bm = $this->get_sku($shop_id,$v['shop_product_bn']);
|
|
|
|
if($bm){
|
|
$material_bn = $bm['material_bn'];
|
|
$bm_id = $bm['bm_id'];
|
|
$vopreturnMdl->db->exec("UPDATE sdb_console_vopreturn_items SET material_bn='".$material_bn."',bm_id=".$bm_id." WHERE id=".$v['id']."");
|
|
$v['material_bn'] = $material_bn;
|
|
|
|
$v['bm_id'] = $bm_id;
|
|
|
|
}
|
|
}
|
|
|
|
if(empty($v['material_bn'])) {
|
|
|
|
return [false, $v['shop_product_bn'].'货品不存在'];
|
|
}
|
|
|
|
if($v['price']<=0 && $v['saleordid']){
|
|
$accorders = $accountordersLib->getPiriceByOrderId($v['shop_product_bn'],$v['saleordid']);
|
|
if($accorders){
|
|
|
|
$vopreturnMdl->db->exec("UPDATE sdb_console_vopreturn_items SET price='".$accorders['price']."' WHERE id=".$v['id']."");
|
|
|
|
}
|
|
}
|
|
|
|
|
|
$num = $v['qty'] - $v['split_num'];
|
|
|
|
if($num<=0) continue;
|
|
$bm_id = $v['bm_id'];
|
|
$addData= array(
|
|
'io_bn' => $v['refundid'],//退货单号
|
|
'original_bn' => $oldRow['return_sn'],//退供单号
|
|
'original_id' => $oldRow['id'],
|
|
'branch_id' => $in_branch_id,
|
|
'memo' =>'return',
|
|
'logi_no' => $oldRow['logi_no'],
|
|
'extrabranch_id'=> $extrabranchs['branch_id'],
|
|
'originsaleordid'=> $v['originsaleordid'],
|
|
'business_bn' => $v['originsaleordid'],//业务单号
|
|
'source' => 'refundinfo',
|
|
|
|
);
|
|
$products = [];
|
|
$products[] = [
|
|
'bn' => $v['material_bn'],
|
|
'name' => $v['product_name'],
|
|
'nums' => $v['qty'],
|
|
'product_id'=> $bm_id,
|
|
'price' => $v['price'],
|
|
'partcode' => $v['partcode'],
|
|
'return_item_id' => $v['id'],
|
|
];
|
|
|
|
$addData['items'] = $products;
|
|
$isoData[] = $addData;
|
|
}
|
|
|
|
$logMsg = array();
|
|
if($isoData){
|
|
foreach($isoData as $v){
|
|
list($rs,$msg) = $this->_dealInItems($v);
|
|
if(!$rs){
|
|
$logMsg[] = '生成失败,原因'.$msg;
|
|
}else{
|
|
$logMsg[] = '生成入库单:'.$msg['iso_id'].'入库单自动审核';
|
|
|
|
$this->autocheckIso($msg['iso_id']);
|
|
}
|
|
}
|
|
|
|
$logMsg = implode(',',$logMsg);
|
|
$status = '4';
|
|
if (!$itemObj->db_dump(['return_id' => $returnId, 'filter_sql' => 'split_num < qty'], 'id')) {
|
|
$status = '1';
|
|
}
|
|
|
|
$data = array('status'=>$status,'bill_status'=>'2');
|
|
$vopreturnMdl->update($data,array('id'=>$returnId));
|
|
}
|
|
|
|
|
|
return [true, $logMsg];
|
|
}
|
|
|
|
|
|
/**
|
|
* syncAftersale
|
|
* @param mixed $return_id ID
|
|
* @return mixed 返回值
|
|
*/
|
|
public function syncAftersale($return_id){
|
|
|
|
$vopreturnMdl = app::get('console')->model('vopreturn');
|
|
$itemsMdl = app::get('console')->model('vopreturn_items');
|
|
|
|
$vopreturn = $vopreturnMdl->db_dump(array('id'=>$return_id,'status'=>'2'),'*');
|
|
|
|
if(!$vopreturn) return false;
|
|
|
|
$items = $itemsMdl->getlist('*',array('return_id'=>$return_id));
|
|
|
|
$bm_ids = array_column($items, 'bm_id');
|
|
|
|
|
|
$bmExMdl = app::get('material')->model('basic_material_ext');
|
|
$bm_ext_list = $bmExMdl->getList('bm_id,retail_price', array('bm_id' => $bm_ids));
|
|
|
|
$bm_exts = array_column($bm_ext_list, null, 'bm_id');
|
|
|
|
$in_branch_id = $vopreturn['in_branch_id'];
|
|
$branch = app::get('ome')->model('branch')->db_dump([
|
|
'check_permission' => 'false',
|
|
'branch_id' => $in_branch_id
|
|
], 'branch_id,branch_bn,name');
|
|
|
|
$shop = app::get('ome')->model('shop')->db_dump([
|
|
'shop_id' => $vopreturn['shop_id']
|
|
], 'shop_bn,name');
|
|
|
|
foreach($items as $v){
|
|
$aftersale = array();
|
|
$retail_price = $bm_exts[$v['bm_id']] ? $bm_exts[$v['bm_id']]['retail_price'] : 0;
|
|
$price = $v['price'];
|
|
|
|
$amount = $retail_price*$v['num'];
|
|
$settlement_amount = $price*$v['num'];
|
|
$aftersale = array(
|
|
|
|
'bill_bn' => $vopreturn['return_sn'],
|
|
'bill_type' => 'jdlreturn',
|
|
'bill_id' => $v['id'],
|
|
'shop_id' => $vopreturn['shop_id'],
|
|
'shop_bn' => $shop['shop_bn'],
|
|
'shop_name' => $shop['name'],
|
|
'aftersale_time' => $vopreturn['iostock_time'] ? $vopreturn['iostock_time'] : time(),
|
|
'original_bn' => $vopreturn['return_sn'].'_'.$v['id'],
|
|
'original_id' => $vopreturn['id'],
|
|
'branch_id' => $in_branch_id,
|
|
'branch_bn' => $branch['branch_bn'],
|
|
'branch_name' => $branch['name'],
|
|
'logi_code' => $vopreturn['logi_name'],
|
|
'logi_no' => $vopreturn['logi_no'],
|
|
'po_bn' => $v['saleordid'],
|
|
'total_amount' => $amount,
|
|
'settlement_amount' => $settlement_amount,
|
|
'total_sale_price' => $settlement_amount,
|
|
'order_bn' => $v['saleordid'],
|
|
);
|
|
|
|
|
|
$itemsdf = array();
|
|
$itemsdf[] = array(
|
|
'material_bn' => $v['material_bn'],
|
|
'barcode' => $v['barcode'],
|
|
'material_name' => $v['product_name'],
|
|
'bm_id' => $v['bm_id'],
|
|
'nums' => $v['num'],
|
|
'price' => $retail_price,
|
|
'amount' => $amount,
|
|
'sale_price' => $settlement_amount,
|
|
'settlement_amount' => $settlement_amount,
|
|
|
|
|
|
);
|
|
|
|
$aftersale['items'] = $itemsdf;
|
|
|
|
|
|
|
|
list($result, $err_msg) = app::get('billcenter')->model('aftersales')->create_aftersales($aftersale);
|
|
|
|
|
|
}
|
|
|
|
$msg = '生成财务售后单';
|
|
app::get('ome')->model('operation_log')->write_log('vopreturn@console',$return_id,$msg);
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* 获取Materials
|
|
* @param mixed $bn bn
|
|
* @return mixed 返回结果
|
|
*/
|
|
public function getMaterials($bn){
|
|
$materialObj= app::get('material')->model('basic_material');
|
|
$material = $materialObj->dump(array('material_bn'=>$bn),'material_bn,bm_id');
|
|
if($material){
|
|
return $material;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* 获取isoitems
|
|
* @param mixed $iso_id ID
|
|
* @return mixed 返回结果
|
|
*/
|
|
public function getisoitems($iso_id){
|
|
|
|
$isoMdl = app::get('taoguaniostockorder')->model("iso");
|
|
$itemsMdl = app::get('taoguaniostockorder')->model("iso_items");
|
|
|
|
$isos = $isoMdl->db_dump(array('iso_id'=>$iso_id,'bill_type'=>'jdlreturn'),'business_bn,original_bn,original_id,iso_id,iso_bn,source');
|
|
|
|
if(!$isos){
|
|
return false;
|
|
}
|
|
|
|
$items = $itemsMdl->getlist('*',array('iso_id'=>$iso_id));
|
|
|
|
$items = array_column($items,null,'bn');
|
|
foreach($items as $k=>$v){
|
|
$items[$k]['in_nums'] = $v['normal_num']+$v['defective_num'];
|
|
}
|
|
|
|
|
|
$ioitems = array();
|
|
foreach($items as $v){
|
|
|
|
$in_nums = $v['in_nums'];
|
|
|
|
if($in_nums>1){
|
|
|
|
for($i=$in_nums;$i--;$i<0){
|
|
$v['in_nums'] = 1;
|
|
$ioitems[] = $v;
|
|
}
|
|
}else{
|
|
$v['in_nums'] = 1;
|
|
$ioitems[] = $v;
|
|
}
|
|
}
|
|
|
|
//平铺
|
|
$isos['items'] = $ioitems;
|
|
|
|
return $isos;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* dealIsoItems
|
|
* @param mixed $iso iso
|
|
* @return mixed 返回值
|
|
*/
|
|
public function dealIsoItems($iso){
|
|
|
|
$iso_id = $iso['iso_id'];
|
|
|
|
$items = $iso['items'];
|
|
$iso_bn = $iso['iso_bn'];
|
|
$vopreturnMdl = app::get('console')->model('vopreturn');
|
|
$itemsMdl = app::get('console')->model('vopreturn_items');
|
|
$logMdl = app::get('ome')->model('operation_log');
|
|
if($items){
|
|
|
|
$return_id = $iso['original_id'];
|
|
$vopreturnItems = $itemsMdl->getList('id,return_id,material_bn,bm_id,partcode,price,num,product_name,originsaleordid', ['return_id' => $return_id,'refundid'=>$iso_bn]);
|
|
|
|
if(!$vopreturnItems){
|
|
|
|
return [false, $iso_bn.'退货单号不存在'];
|
|
}
|
|
|
|
foreach($items as $v){
|
|
|
|
$in_nums = $v['normal_num']+$v['defective_num'];
|
|
|
|
$itemsMdl->db->exec("UPDATE sdb_console_vopreturn_items SET num=".$in_nums." WHERE return_id=".$return_id." AND bm_id='".$v['product_id']."' AND refundid='".$iso_bn."' and num=0 limit 1");
|
|
}
|
|
|
|
//更新主单状态
|
|
//
|
|
$vopData = ['in_status' => '2'];//部分入库
|
|
|
|
$logMsg = $iso_bn.'入库完成';
|
|
$itemList = $itemsMdl->db_dump(['return_id' => $return_id, 'filter_sql' => 'num < qty'], 'id');
|
|
if (!$itemList) {
|
|
$vopData['status'] = '2';//已完成
|
|
$vopData['in_status'] = '3';//全部入库
|
|
$vopData['iostock_time'] = time();//入库时间
|
|
}
|
|
$rsUp = $vopreturnMdl->update($vopData, ['id' => $return_id, 'status' => ['1', '4']]);
|
|
|
|
|
|
$logMdl->write_log('vopreturn@console', $return_id, $logMsg);
|
|
|
|
}
|
|
|
|
|
|
list($result,$msg) = $this->syncRefundAftersale($iso_id);
|
|
|
|
if($result){
|
|
$msg.='生成售后单成功,入库单号:'.$iso_bn;
|
|
}else{
|
|
$msg.='失败';
|
|
}
|
|
$logMdl->write_log('vopreturn@console',$return_id,$msg);
|
|
|
|
|
|
}
|
|
|
|
/**
|
|
* syncRefundAftersale
|
|
* @param mixed $iso_id ID
|
|
* @return mixed 返回值
|
|
*/
|
|
public function syncRefundAftersale($iso_id){
|
|
|
|
$isoMdl = app::get('taoguaniostockorder')->model('iso');
|
|
$itemsMdl = app::get('taoguaniostockorder')->model('iso_items');
|
|
|
|
$isos = $isoMdl->db_dump(array('iso_id'=>$iso_id,'bill_type'=>'jdlreturn','source'=>'refundinfo'),'business_bn,original_bn,original_id,iso_id,iso_bn,source');
|
|
|
|
if(!$isos){
|
|
return [false, $isos['iso_bn'].'入库单不存在'];
|
|
}
|
|
|
|
$isoitems = $itemsMdl->getlist('*',array('iso_id'=>$iso_id));
|
|
|
|
$vopreturnMdl = app::get('console')->model('vopreturn');
|
|
$itemsMdl = app::get('console')->model('vopreturn_items');
|
|
$return_id = $isos['original_id'];
|
|
$vopreturn = $vopreturnMdl->db_dump(array('id'=>$return_id),'*');
|
|
|
|
if(!$vopreturn) return [false, '退供单不存在'];
|
|
|
|
$aftersalesMdl = app::get('billcenter')->model('aftersales');
|
|
|
|
$aftersales = $aftersalesMdl->db_dump(array('original_bn'=>$isos['iso_bn'],'bill_type'=>'jdlreturn'),'id');
|
|
|
|
if($aftersales) return [false, '售后单已生成:'.$isos['iso_bn'].''];
|
|
|
|
$vopitems = $itemsMdl->getlist('*',array('return_id'=>$return_id));
|
|
|
|
$bm_ids = array_column($isoitems, 'product_id');
|
|
|
|
$vopitems = array_column($vopitems,null,'partcode');
|
|
|
|
$bmExMdl = app::get('material')->model('basic_material_ext');
|
|
$bm_ext_list = $bmExMdl->getList('bm_id,retail_price', array('bm_id' => $bm_ids));
|
|
|
|
$bm_exts = array_column($bm_ext_list, null, 'bm_id');
|
|
|
|
$in_branch_id = $vopreturn['in_branch_id'];
|
|
$branch = app::get('ome')->model('branch')->db_dump([
|
|
'check_permission' => 'false',
|
|
'branch_id' => $in_branch_id
|
|
], 'branch_id,branch_bn,name');
|
|
|
|
$shop = app::get('ome')->model('shop')->db_dump([
|
|
'shop_id' => $vopreturn['shop_id']
|
|
], 'shop_bn,name');
|
|
|
|
|
|
foreach ($isoitems as $v) {
|
|
|
|
$in_nums = $v['normal_num']+$v['defective_num'];
|
|
if ($in_nums == 0) {
|
|
continue;
|
|
}
|
|
|
|
$partcode = $v['partcode'];
|
|
$vopitem = $vopitems[$partcode];
|
|
$retail_price = $bm_exts[$v['product_id']] ? $bm_exts[$v['product_id']]['retail_price'] : 0;
|
|
$price = $vopitem['price'];
|
|
|
|
$amount = $retail_price*$in_nums;
|
|
$settlement_amount = $price*$in_nums;
|
|
|
|
$aftersale = array(
|
|
|
|
'bill_bn' => $vopreturn['return_sn'],
|
|
'bill_type' => 'jdlreturn',
|
|
'bill_id' => $vopreturn['id'],
|
|
'shop_id' => $vopreturn['shop_id'],
|
|
'shop_bn' => $shop['shop_bn'],
|
|
'shop_name' => $shop['name'],
|
|
'aftersale_time' => $vopreturn['iostock_time'] ? $vopreturn['iostock_time'] : time(),
|
|
'original_bn' => $isos['iso_bn'],
|
|
'original_id' => $isos['iso_id'],
|
|
'branch_id' => $in_branch_id,
|
|
'branch_bn' => $branch['branch_bn'],
|
|
'branch_name' => $branch['name'],
|
|
'logi_code' => 'JD',
|
|
'logi_name' => $vopreturn['logi_name'],
|
|
'logi_no' => $vopreturn['logi_no'],
|
|
'po_bn' => $isos['business_bn'],//原始订单号
|
|
'total_amount' => $amount,
|
|
'settlement_amount' => $settlement_amount,
|
|
'total_sale_price' => $settlement_amount,
|
|
'order_bn' => $isos['business_bn'],
|
|
|
|
);
|
|
|
|
$itemsdf = array();
|
|
$itemsdf[] = array(
|
|
'material_bn' => $v['bn'],
|
|
'barcode' => $v['barcode'],
|
|
'material_name' => $v['product_name'],
|
|
'bm_id' => $v['product_id'],
|
|
'nums' => $in_nums,
|
|
'price' => $retail_price,
|
|
'amount' => $amount,
|
|
'sale_price' => $settlement_amount,
|
|
'settlement_amount' => $settlement_amount,
|
|
|
|
);
|
|
|
|
$aftersale['items'] = $itemsdf;
|
|
|
|
|
|
//判断是否已生成
|
|
list($result, $err_msg) = $aftersalesMdl->create_aftersales($aftersale);
|
|
|
|
return [$result, $err_msg];
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
?>
|