|
@@ -798,39 +798,64 @@ class CheckService extends Service
|
|
|
// if($sales_order_type == SalesOrder::Order_type_two) return [true, self::minus_one];
|
|
|
// }
|
|
|
|
|
|
+ //合同 退货
|
|
|
+ $construction_pro = [];
|
|
|
+ if($order['type'] == ReturnExchangeOrder::Order_type){
|
|
|
+ //查找合同下 已经下施工的产品
|
|
|
+ $construction_id = Construction::where('del_time',0)
|
|
|
+ ->where('sales_order_id', $order['data_id'])
|
|
|
+ ->selcet('id')
|
|
|
+ ->get()->toArray();
|
|
|
+ $construction_id = array_column($construction_id,'id');
|
|
|
+ $product = ConstructionProductInfo::where('del_time',0)
|
|
|
+ ->whereIn('construction_id',$construction_id)
|
|
|
+ ->select('product_id','number')
|
|
|
+ ->get()->toArray();
|
|
|
+ foreach ($product as $value){
|
|
|
+ if(isset($construction_pro[$value['product_id']])){
|
|
|
+ $construction_pro[$value['product_id']] += $value['number'];
|
|
|
+ }else{
|
|
|
+ $construction_pro[$value['product_id']] = $value['number'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
$result = ReturnExchangeOrderProductInfo::where('del_time',0)
|
|
|
->where('return_exchange_id',$order['id'])
|
|
|
->get()->toArray();
|
|
|
if(empty($result)) return [false,'退换货单产品信息不存在或已被删除'];
|
|
|
- $insert = $insert2 = [];
|
|
|
+ $insert = [];
|
|
|
$time = time();
|
|
|
foreach ($result as $value){
|
|
|
$key = $value['product_id'] . $value['storehouse_id'];
|
|
|
$prefix = ReturnExchangeOrder::$prefix[$value['return_or_exchange']] ?? '';
|
|
|
if($value['return_or_exchange'] == ReturnExchangeOrderProductInfo::type_one){
|
|
|
//退货
|
|
|
- if(isset($insert[$key])){
|
|
|
- $insert[$key]['number'] += $value['number'];
|
|
|
+ if($order['type'] == ReturnExchangeOrder::Order_type){
|
|
|
+ //合同
|
|
|
+ $c_number = $construction_pro[$value['product_id']] ?? 0;
|
|
|
+ if($c_number == 0) {
|
|
|
+ //未下施工 这个退货不需要加回来 不需要流水
|
|
|
+ continue;
|
|
|
+ }else{
|
|
|
+ if($c_number >= $value['number']) {
|
|
|
+ //加回来退货的数据
|
|
|
+ $number = $value['number'];
|
|
|
+ }else{
|
|
|
+ //加回来施工的数量
|
|
|
+ $number = $c_number;
|
|
|
+ }
|
|
|
+ }
|
|
|
}else{
|
|
|
- $insert[$key] = [
|
|
|
- 'product_id' => $value['product_id'],
|
|
|
- 'number' => $value['number'],
|
|
|
- 'order_type' => $prefix,
|
|
|
- 'order_number' => $order['order_number'],
|
|
|
- 'crt_time' => $time,
|
|
|
- 'storehouse_id' => $value['storehouse_id'],
|
|
|
- 'depart_id' => $order['depart_id'],
|
|
|
- 'top_depart_id' => $order['top_depart_id'],
|
|
|
- ];
|
|
|
+ // 采购
|
|
|
+ $number = -($value['number']);
|
|
|
}
|
|
|
- }else{
|
|
|
- //换货
|
|
|
- if(isset($insert2[$key])){
|
|
|
- $insert2[$key]['number'] += -($value['number']);
|
|
|
+ if(isset($insert[$key])){
|
|
|
+ $insert[$key]['number'] += $number;
|
|
|
}else{
|
|
|
- $insert2[$key] = [
|
|
|
+ $insert[$key] = [
|
|
|
'product_id' => $value['product_id'],
|
|
|
- 'number' => -($value['number']),
|
|
|
+ 'number' => $number,
|
|
|
'order_type' => $prefix,
|
|
|
'order_number' => $order['order_number'],
|
|
|
'crt_time' => $time,
|
|
@@ -840,18 +865,13 @@ class CheckService extends Service
|
|
|
];
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
$insert = array_values($insert);
|
|
|
+ if(empty($insert)) return [true, self::minus_one];
|
|
|
+
|
|
|
$bool = InOutRecord::insert($insert);
|
|
|
if(! $bool) return [false,'流水写入失败'];
|
|
|
|
|
|
- if(! empty($insert2)) {
|
|
|
- $insert2 = array_values($insert2);
|
|
|
- $bool = InOutRecord::insert($insert2);
|
|
|
- if(! $bool) return [false,'流水写入失败'];
|
|
|
- }
|
|
|
-
|
|
|
return [true,''];
|
|
|
}
|
|
|
|
|
@@ -1053,16 +1073,17 @@ class CheckService extends Service
|
|
|
|
|
|
public function reject_record_construction($data,$order){
|
|
|
//获取单据最新数据时间 正常施工数据
|
|
|
+ $crt_time = 0;
|
|
|
$latest = InOutRecord::where('del_time',0)
|
|
|
->where('order_number',$data['order_number'])
|
|
|
->where('number','<',0)
|
|
|
->select('crt_time')
|
|
|
->orderBy('crt_time', 'desc')
|
|
|
->first();
|
|
|
- $latest = $latest->toArray();
|
|
|
+ if(! empty($latest)) $crt_time = $latest->crt_time;
|
|
|
|
|
|
$result = InOutRecord::where('del_time',0)
|
|
|
- ->where('crt_time',$latest['crt_time'])
|
|
|
+ ->where('crt_time',$crt_time)
|
|
|
->where('order_number',$data['order_number'])
|
|
|
->where('number','<',0)
|
|
|
->select('product_id','storehouse_id','number','depart_id','order_number','top_depart_id','order_type')
|
|
@@ -1085,16 +1106,17 @@ class CheckService extends Service
|
|
|
|
|
|
public function reject_record_purchase($data,$order){
|
|
|
//获取单据最新数据时间 正常采购入库数据
|
|
|
+ $crt_time = 0;
|
|
|
$latest = InOutRecord::where('del_time',0)
|
|
|
->where('order_number',$data['order_number'])
|
|
|
->where('number','>',0)
|
|
|
->select('crt_time')
|
|
|
->orderBy('crt_time', 'desc')
|
|
|
->first();
|
|
|
- $latest = $latest->toArray();
|
|
|
+ if(! empty($latest)) $crt_time = $latest->crt_time;
|
|
|
|
|
|
$result = InOutRecord::where('del_time',0)
|
|
|
- ->where('crt_time',$latest['crt_time'])
|
|
|
+ ->where('crt_time',$crt_time)
|
|
|
->where('order_number',$data['order_number'])
|
|
|
->where('number','>',0)
|
|
|
->select('product_id','storehouse_id','number','depart_id','order_number','top_depart_id','order_type')
|
|
@@ -1117,67 +1139,35 @@ class CheckService extends Service
|
|
|
|
|
|
public function reject_record_return_exchange($data,$order){
|
|
|
if($order['model_type'] == ReturnExchangeOrder::Model_type_three) return [true, self::minus_one];
|
|
|
-// if($order['type'] == ReturnExchangeOrder::Order_type){
|
|
|
-// //快递件不记录流水
|
|
|
-// $sales_order_type = SalesOrder::where('id',$order['data_id'])->value('sales_order_type');
|
|
|
-// if($sales_order_type == SalesOrder::Order_type_two) return [true, self::minus_one];
|
|
|
-// }
|
|
|
|
|
|
- $result = ReturnExchangeOrderProductInfo::where('del_time',0)
|
|
|
- ->where('return_exchange_id',$order['id'])
|
|
|
+ //获取单据最新数据时间 正常退换货流水数据
|
|
|
+ $crt_time = 0;
|
|
|
+ $latest = InOutRecord::where('del_time',0)
|
|
|
+ ->where('order_number',$data['order_number'])
|
|
|
+ ->select('crt_time')
|
|
|
+ ->orderBy('crt_time', 'desc')
|
|
|
+ ->first();
|
|
|
+ if(! empty($latest)) $crt_time = $latest->crt_time;
|
|
|
+
|
|
|
+ $result = InOutRecord::where('del_time',0)
|
|
|
+ ->where('crt_time',$crt_time)
|
|
|
+ ->where('order_number',$data['order_number'])
|
|
|
+ ->select('product_id','storehouse_id','number','depart_id','order_number','top_depart_id','order_type')
|
|
|
->get()->toArray();
|
|
|
- if(empty($result)) return [false,'退换货单产品信息不存在或已被删除'];
|
|
|
- $insert = $insert2 = [];
|
|
|
- $time = time();
|
|
|
- foreach ($result as $value){
|
|
|
- $key = $value['product_id'] . $value['storehouse_id'];
|
|
|
- $prefix = ReturnExchangeOrder::$prefix[$value['return_or_exchange']] ?? '';
|
|
|
- if($value['return_or_exchange'] == ReturnExchangeOrderProductInfo::type_one){
|
|
|
- //退货 扣出
|
|
|
- if(isset($insert[$key])){
|
|
|
- $insert[$key]['number'] += -($value['number']);
|
|
|
- }else{
|
|
|
- $insert[$key] = [
|
|
|
- 'product_id' => $value['product_id'],
|
|
|
- 'number' => -($value['number']),
|
|
|
- 'order_type' => $prefix,
|
|
|
- 'order_number' => $order['order_number'],
|
|
|
- 'crt_time' => $time,
|
|
|
- 'storehouse_id' => $value['storehouse_id'],
|
|
|
- 'depart_id' => $order['depart_id'],
|
|
|
- 'top_depart_id' => $order['top_depart_id'],
|
|
|
- ];
|
|
|
- }
|
|
|
- }else{
|
|
|
- //换货 加回
|
|
|
- if(isset($insert2[$key])){
|
|
|
- $insert2[$key]['number'] += $value['number'];
|
|
|
- }else{
|
|
|
- $insert2[$key] = [
|
|
|
- 'product_id' => $value['product_id'],
|
|
|
- 'number' => $value['number'],
|
|
|
- 'order_type' => $prefix,
|
|
|
- 'order_number' => $order['order_number'],
|
|
|
- 'crt_time' => $time,
|
|
|
- 'storehouse_id' => $value['storehouse_id'],
|
|
|
- 'depart_id' => $order['depart_id'],
|
|
|
- 'top_depart_id' => $order['top_depart_id'],
|
|
|
- ];
|
|
|
- }
|
|
|
- }
|
|
|
+ if(empty($result)) return [false,'退换货流水数据未找到'];
|
|
|
|
|
|
+ //生成对冲数据
|
|
|
+ $time = time();
|
|
|
+ foreach ($result as $key => $value){
|
|
|
+ $result[$key]['number'] = - $value['number'];
|
|
|
+ $result[$key]['crt_time'] = $time;
|
|
|
}
|
|
|
- $insert = array_values($insert);
|
|
|
- $bool = InOutRecord::insert($insert);
|
|
|
- if(! $bool) return [false,'流水写入失败'];
|
|
|
|
|
|
- if(! empty($insert2)) {
|
|
|
- $insert2 = array_values($insert2);
|
|
|
- $bool = InOutRecord::insert($insert2);
|
|
|
- if(! $bool) return [false,'流水写入失败'];
|
|
|
- }
|
|
|
+ $bool = InOutRecord::insert($result);
|
|
|
+ if(! $bool) return [false, '流水写入失败'];
|
|
|
|
|
|
- return [true,''];
|
|
|
+ //写入流水
|
|
|
+ return [true, ''];
|
|
|
}
|
|
|
|
|
|
public function getOrderDetail($data,$user){
|