|
@@ -37,7 +37,7 @@ class ReturnExchangeOrderService extends Service
|
|
|
ReturnExchangeOrderProductInfo::where('del_time',0)
|
|
|
->where('return_exchange_id',$data['id'])
|
|
|
->update(['del_time' => $time]);
|
|
|
- if(!empty($data['product_one'])){
|
|
|
+ if(! empty($data['product_one'])){
|
|
|
$sub = [];
|
|
|
foreach ($data['product_one'] as $value){
|
|
|
$sub[] = [
|
|
@@ -59,7 +59,7 @@ class ReturnExchangeOrderService extends Service
|
|
|
ReturnExchangeOrderProductInfo::insert($sub);
|
|
|
}
|
|
|
|
|
|
- if(!empty($data['product_two'])){
|
|
|
+ if(! empty($data['product_two'])){
|
|
|
$sub = [];
|
|
|
foreach ($data['product_two'] as $value){
|
|
|
$sub[] = [
|
|
@@ -107,11 +107,11 @@ class ReturnExchangeOrderService extends Service
|
|
|
$material_model->depart_id = $data['depart_id'] ?? 0;
|
|
|
$material_model->top_depart_id = $data['top_depart_id'] ?? 0;
|
|
|
$material_model->crt_id = $user['id'];
|
|
|
- $material_model->storehouse_id = $data['storehouse_id'];
|
|
|
+ $material_model->storehouse_id = $data['storehouse_id'] ?? 0;
|
|
|
$material_model->save();
|
|
|
$time = time();
|
|
|
|
|
|
- if(!empty($data['product_one'])){
|
|
|
+ if(! empty($data['product_one'])){
|
|
|
$sub = [];
|
|
|
foreach ($data['product_one'] as $value){
|
|
|
$sub[] = [
|
|
@@ -133,7 +133,7 @@ class ReturnExchangeOrderService extends Service
|
|
|
ReturnExchangeOrderProductInfo::insert($sub);
|
|
|
}
|
|
|
|
|
|
- if(!empty($data['product_two'])){
|
|
|
+ if(! empty($data['product_two'])){
|
|
|
$sub = [];
|
|
|
foreach ($data['product_two'] as $value){
|
|
|
$sub[] = [
|
|
@@ -183,7 +183,9 @@ class ReturnExchangeOrderService extends Service
|
|
|
|
|
|
if(empty($order)) return [false, '退换货订单不存在或已被删除'];
|
|
|
$order = $order->toArray();
|
|
|
- $order['storehouse_title'] = Storehouse::where('id',$order['storehouse_id'])->value('title');
|
|
|
+ $order['storehouse_title'] = "";
|
|
|
+ if($order['storehouse_id'] > 0) $order['storehouse_title'] = Storehouse::where('id',$order['storehouse_id'])->value('title');
|
|
|
+
|
|
|
if($order['type'] == ReturnExchangeOrder::Order_type){
|
|
|
$sales = SalesOrder::where('id',$order['data_id'])->value('order_number');
|
|
|
$order['data_title'] = $sales;
|
|
@@ -269,6 +271,7 @@ class ReturnExchangeOrderService extends Service
|
|
|
$model->whereBetween('crt_time',[$return[0],$return[1]]);
|
|
|
}
|
|
|
if(isset($data['type'])) $model->where('type',$data['type']);
|
|
|
+ if(! empty($data['model_type'])) $model->where('model_type',$data['model_type']);
|
|
|
if(! empty($data['order'])){
|
|
|
$search = -1;
|
|
|
if(isset($data['type'])) $search = $data['type'];
|
|
@@ -367,9 +370,18 @@ class ReturnExchangeOrderService extends Service
|
|
|
public function orderRule(&$data, $user, $is_check = true){
|
|
|
if($this->isEmpty($data,'model_type')) return [false,'单据类型不能为空!'];
|
|
|
if(! in_array($data['model_type'], ReturnExchangeOrder::$model_type)) return [false,'单据类型不存在'];
|
|
|
- if(empty($data['storehouse_id'])) return [false,'请选择仓库'];
|
|
|
+ //所属部门 以及 顶级部门
|
|
|
+ if(empty($data['depart_id'])) {
|
|
|
+ $data['depart_id'] = $this->getDepart($user);
|
|
|
+ $data['top_depart_id'] = $user['depart_map'][$data['depart_id']] ?? 0;
|
|
|
+ }
|
|
|
if(! isset($data['type'])) return [false,'退换单据类型不能为空'];
|
|
|
if(empty($data['data_id'])) return [false,'退换单据数据不能为空!'];
|
|
|
+
|
|
|
+ $res = $this->checkNumber($data['difference_amount']);
|
|
|
+ if(! $res) return [false, '金额请输入不超过两位小数并且大于等于0的数值'];
|
|
|
+
|
|
|
+ $total = 0;
|
|
|
if($data['type'] == ReturnExchangeOrder::Order_type){
|
|
|
$sale = SalesOrder::where('del_time',0)->where('id',$data['data_id'])->first();
|
|
|
if(empty($sale)) return [false,'合同不存在或已被删除'];
|
|
@@ -377,88 +389,107 @@ class ReturnExchangeOrderService extends Service
|
|
|
if($sale['sales_order_type'] != SalesOrder::Order_type_one) return [false, '非安装件合同'];
|
|
|
if($sale['state'] < SalesOrder::State_two) return [false,'合同未确认,不能进行退换货操作'];
|
|
|
$order_number = $sale['order_number'];
|
|
|
+ $total = $sale['contract_fee'];
|
|
|
}elseif ($data['type'] == ReturnExchangeOrder::Order_type2){
|
|
|
$purchase = PurchaseOrder::where('del_time',0)->where('id',$data['data_id'])->first();
|
|
|
if(empty($purchase)) return [false,'采购单不存在或已被删除'];
|
|
|
$purchase = $purchase->toArray();
|
|
|
if($purchase['state'] < PurchaseOrder::STATE_Four) return [false,'采购单未入库,不能进行退换货操作'];
|
|
|
$order_number = $purchase['order_number'];
|
|
|
+ $total = $purchase['purchase_total'];
|
|
|
}
|
|
|
if(! empty($order_number)){
|
|
|
list($status,$msg) = $this->limitingSendRequestBackgExpire("returnExchangeOrder" . $order_number);
|
|
|
if(! $status) return [false, $msg];
|
|
|
}
|
|
|
|
|
|
- //所属部门 以及 顶级部门
|
|
|
- if(empty($data['depart_id'])) {
|
|
|
- $data['depart_id'] = $this->getDepart($user);
|
|
|
- $data['top_depart_id'] = $user['depart_map'][$data['depart_id']] ?? 0;
|
|
|
- }
|
|
|
+ //换货
|
|
|
+ $product_submit_minus = $product_save_minus = [];
|
|
|
|
|
|
- //退货
|
|
|
- $return_submit_add = [];
|
|
|
- if(empty($data['product_one'])) return [false,'退货产品不能为空'];
|
|
|
- foreach ($data['product_one'] as $value){
|
|
|
- if(empty($value['number'])) return [false,'退货产品数量不能为空'];
|
|
|
- $res = $this->checkNumber($value['number']);
|
|
|
- if(! $res) return [false,'请输入正确的退货产品数量'];
|
|
|
- if(isset($return_submit_add[$value['product_id']])){
|
|
|
- $return_submit_add[$value['product_id']] += $value['number'];
|
|
|
- }else{
|
|
|
- $return_submit_add[$value['product_id']] = $value['number'];
|
|
|
- }
|
|
|
- }
|
|
|
+ if($data['model_type'] == ReturnExchangeOrder::Model_type_three){
|
|
|
+ //仅退款
|
|
|
|
|
|
- if($data['type'] == ReturnExchangeOrder::Order_type){
|
|
|
- //剩余能退
|
|
|
+ //剩余能退金额计算
|
|
|
$id = $data['id'] ?? 0;
|
|
|
- $s_product = $this->getSaveReturnCompareMessage($id, $data['data_id']);
|
|
|
+ $save_money = $this->getSaveReturnALLCompareMessage($id, $data['data_id'], $data['type']);
|
|
|
+ $save_money = $save_money[$data['data_id']] ?? 0;
|
|
|
+ $money = bcsub($total,$save_money,2);
|
|
|
|
|
|
- //比较
|
|
|
- foreach ($return_submit_add as $pro => $number){
|
|
|
- if(! isset($s_product[$pro])) return [false,'退货产品错误,合同中不存在该产品'];
|
|
|
- $s_number = $s_product[$pro];
|
|
|
+ if($data['difference_amount'] > $money) return [false,'剩余能退金额最大为'. $money];
|
|
|
+ }else{
|
|
|
+ if(empty($data['storehouse_id'])) return [false,'请选择仓库'];
|
|
|
|
|
|
- if($number > $s_number) return [false,'退货产品数量不能超过合同产品数据'];
|
|
|
+ //退货
|
|
|
+ $return_submit_add = [];
|
|
|
+ if(empty($data['product_one'])) return [false,'退货产品不能为空'];
|
|
|
+ foreach ($data['product_one'] as $value){
|
|
|
+ if(empty($value['number'])) return [false,'退货产品数量不能为空'];
|
|
|
+ $res = $this->checkNumber($value['number']);
|
|
|
+ if(! $res) return [false,'请输入正确的退货产品数量'];
|
|
|
+ if(isset($return_submit_add[$value['product_id']])){
|
|
|
+ $return_submit_add[$value['product_id']] += $value['number'];
|
|
|
+ }else{
|
|
|
+ $return_submit_add[$value['product_id']] = $value['number'];
|
|
|
+ }
|
|
|
}
|
|
|
- }elseif ($data['type'] == ReturnExchangeOrder::Order_type2){
|
|
|
- //剩余能退
|
|
|
- $id = $data['id'] ?? 0;
|
|
|
- $s_product = $this->getSaveReturnCompareMessage2($id, $data['data_id']);
|
|
|
|
|
|
- //比较
|
|
|
- foreach ($return_submit_add as $pro => $number){
|
|
|
- if(! isset($s_product[$pro])) return [false,'退货产品错误,采购单中不存在该产品'];
|
|
|
- $s_number = $s_product[$pro];
|
|
|
-
|
|
|
- if($number > $s_number) return [false,'退货产品数量不能超过合采购单产品数据'];
|
|
|
- }
|
|
|
- }
|
|
|
+ if($data['type'] == ReturnExchangeOrder::Order_type){
|
|
|
+ //剩余能退
|
|
|
+ $id = $data['id'] ?? 0;
|
|
|
+ list($s_product,$s_money) = $this->getSaveReturnCompareMessage($id, $data['data_id']);
|
|
|
+ $save_money = $s_money[$data['data_id']] ?? 0;
|
|
|
+ $money = bcsub($total,$save_money,2);
|
|
|
+ if($data['difference_amount'] > $money) return [false,'剩余能退金额最大为'. $money];
|
|
|
|
|
|
- //换货
|
|
|
- $product_submit_minus = $product_save_minus = $product_id = [];
|
|
|
- if($data['model_type'] == ReturnExchangeOrder::Model_type_two){
|
|
|
- if(empty($data['product_two'])) return [false,'换货产品不能为空'];
|
|
|
- foreach ($data['product_two'] as $value){
|
|
|
- if(empty($value['number'])) return [false,'换货产品数量不能为空'];
|
|
|
- $res = $this->checkNumber($value['number']);
|
|
|
- if(! $res) return [false,'请输入正确的换货产品数量'];
|
|
|
+ //比较
|
|
|
+ foreach ($return_submit_add as $pro => $number){
|
|
|
+ if(! isset($s_product[$pro])) return [false,'退货产品错误,合同中不存在该产品'];
|
|
|
+ $s_number = $s_product[$pro];
|
|
|
|
|
|
- $key = $value['product_id'] . ',' .$data['storehouse_id'];
|
|
|
- if(isset($product_submit_minus[$key])){
|
|
|
- $product_submit_minus[$key] += $value['number'];
|
|
|
- }else{
|
|
|
- $product_submit_minus[$key] = $value['number'];
|
|
|
+ if($number > $s_number) return [false,'退货产品数量不能超过合同产品数据'];
|
|
|
+ }
|
|
|
+ }elseif ($data['type'] == ReturnExchangeOrder::Order_type2){
|
|
|
+ //剩余能退
|
|
|
+ $id = $data['id'] ?? 0;
|
|
|
+ list($s_product,$s_money) = $this->getSaveReturnCompareMessage2($id, $data['data_id']);
|
|
|
+ $save_money = $s_money[$data['data_id']] ?? 0;
|
|
|
+ $money = bcsub($total,$save_money,2);
|
|
|
+ if($data['difference_amount'] > $money) return [false,'剩余能退金额最大为'. $money];
|
|
|
+
|
|
|
+ //比较
|
|
|
+ foreach ($return_submit_add as $pro => $number){
|
|
|
+ if(! isset($s_product[$pro])) return [false,'退货产品错误,采购单中不存在该产品'];
|
|
|
+ $s_number = $s_product[$pro];
|
|
|
+
|
|
|
+ if($number > $s_number) return [false,'退货产品数量不能超过合采购单产品数据'];
|
|
|
}
|
|
|
- $product_id[] = $value['product_id'];
|
|
|
}
|
|
|
|
|
|
- //是否校验库存
|
|
|
- ProductInventoryService::is_check($user,$data);
|
|
|
+ //换货
|
|
|
+ $product_id = [];
|
|
|
+ if($data['model_type'] == ReturnExchangeOrder::Model_type_two){
|
|
|
+ if(empty($data['product_two'])) return [false,'换货产品不能为空'];
|
|
|
+ foreach ($data['product_two'] as $value){
|
|
|
+ if(empty($value['number'])) return [false,'换货产品数量不能为空'];
|
|
|
+ $res = $this->checkNumber($value['number']);
|
|
|
+ if(! $res) return [false,'请输入正确的换货产品数量'];
|
|
|
+
|
|
|
+ $key = $value['product_id'] . ',' .$data['storehouse_id'];
|
|
|
+ if(isset($product_submit_minus[$key])){
|
|
|
+ $product_submit_minus[$key] += $value['number'];
|
|
|
+ }else{
|
|
|
+ $product_submit_minus[$key] = $value['number'];
|
|
|
+ }
|
|
|
+ $product_id[] = $value['product_id'];
|
|
|
+ }
|
|
|
|
|
|
- $product_save_minus = $this->getSaveDetailMinus($id);
|
|
|
- list($status,$msg) = (new ProductInventoryService())->compareStock($user,$product_id, $product_submit_minus, $product_save_minus);
|
|
|
- if(! $status) return [false, $msg];
|
|
|
+ //是否校验库存
|
|
|
+ ProductInventoryService::is_check($user,$data);
|
|
|
+
|
|
|
+ $product_save_minus = $this->getSaveDetailMinus($id);
|
|
|
+ list($status,$msg) = (new ProductInventoryService())->compareStock($user,$product_id, $product_submit_minus, $product_save_minus);
|
|
|
+ if(! $status) return [false, $msg];
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if($is_check){
|
|
@@ -499,11 +530,45 @@ class ReturnExchangeOrderService extends Service
|
|
|
return $product_save;
|
|
|
}
|
|
|
|
|
|
+ //剩余能退
|
|
|
+ public function getSaveReturnALLCompareMessage($id = 0, $order_id = 0, $type = 0){
|
|
|
+ $return = ReturnExchangeOrder::where('del_time',0)
|
|
|
+ ->where('type',$type)
|
|
|
+ ->where('data_id',$order_id)
|
|
|
+ ->when(! empty($id), function ($query) use ($id) {
|
|
|
+ return $query->where('id', '<>',$id);
|
|
|
+ })
|
|
|
+ ->select('data_id','difference_amount')->get()->toArray();
|
|
|
+
|
|
|
+ $total_save = [];
|
|
|
+ foreach ($return as $value){
|
|
|
+ if(isset($total_save[$value['data_id']])){
|
|
|
+ $total_save[$value['data_id']] += $value['difference_amount'];
|
|
|
+ }else{
|
|
|
+ $total_save[$value['data_id']] = $value['difference_amount'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $total_save;
|
|
|
+ }
|
|
|
+
|
|
|
//合同剩余能退
|
|
|
public function getSaveReturnCompareMessage($id = 0, $sales_order_id = 0){
|
|
|
$return = ReturnExchangeOrder::where('del_time',0)
|
|
|
->where('data_id',$sales_order_id)
|
|
|
- ->select('id')->get()->toArray();
|
|
|
+ ->where('type',ReturnExchangeOrder::Order_type)
|
|
|
+ ->select('id','data_id','difference_amount')->get()->toArray();
|
|
|
+
|
|
|
+ $total_save = [];
|
|
|
+ foreach ($return as $value){
|
|
|
+ if($id > 0 && $value['id'] == $id) continue;
|
|
|
+ if(isset($total_save[$value['data_id']])){
|
|
|
+ $total_save[$value['data_id']] += $value['difference_amount'];
|
|
|
+ }else{
|
|
|
+ $total_save[$value['data_id']] = $value['difference_amount'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
$return = array_column($return,'id');
|
|
|
$product_save = [];
|
|
|
$sub = ReturnExchangeOrderProductInfo::where('return_or_exchange',ReturnExchangeOrderProductInfo::type_one)
|
|
@@ -534,14 +599,25 @@ class ReturnExchangeOrderService extends Service
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- return $sales_order_product;
|
|
|
+ return [$sales_order_product, $total_save];
|
|
|
}
|
|
|
|
|
|
//采购剩余能退
|
|
|
public function getSaveReturnCompareMessage2($id = 0, $purchase_id = 0){
|
|
|
$return = ReturnExchangeOrder::where('del_time',0)
|
|
|
->where('data_id',$purchase_id)
|
|
|
- ->select('id')->get()->toArray();
|
|
|
+ ->where('type',ReturnExchangeOrder::Order_type2)
|
|
|
+ ->select('id','data_id','difference_amount')->get()->toArray();
|
|
|
+ $total_save = [];
|
|
|
+ foreach ($return as $value){
|
|
|
+ if($id > 0 && $value['id'] == $id) continue;
|
|
|
+ if(isset($total_save[$value['data_id']])){
|
|
|
+ $total_save[$value['data_id']] += $value['difference_amount'];
|
|
|
+ }else{
|
|
|
+ $total_save[$value['data_id']] = $value['difference_amount'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
$return = array_column($return,'id');
|
|
|
$product_save = [];
|
|
|
$sub = ReturnExchangeOrderProductInfo::where('return_or_exchange',ReturnExchangeOrderProductInfo::type_one)
|
|
@@ -572,7 +648,7 @@ class ReturnExchangeOrderService extends Service
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- return $sales_order_product;
|
|
|
+ return [$sales_order_product,$total_save];
|
|
|
}
|
|
|
|
|
|
//获取差异金额(合同和采购详情中统计的)
|
|
@@ -585,7 +661,7 @@ class ReturnExchangeOrderService extends Service
|
|
|
->select('id','model_type','order_number','difference_amount','state')
|
|
|
->get()->toArray();
|
|
|
foreach ($result as $key => $value){
|
|
|
- $result[$key]['model_type_title'] = ReturnExchangeOrder::$model_type[$value['model_type']] ?? "";
|
|
|
+ $result[$key]['model_type_title'] = ReturnExchangeOrder::$model_type_name[$value['model_type']] ?? "";
|
|
|
$result[$key]['state_title'] = ReturnExchangeOrder::$state[$value['state']] ?? "";
|
|
|
}
|
|
|
|