cqpCow 1 éve
szülő
commit
954e036264
1 módosított fájl, 54 hozzáadás és 7 törlés
  1. 54 7
      app/Service/ReturnExchangeOrderService.php

+ 54 - 7
app/Service/ReturnExchangeOrderService.php

@@ -2,17 +2,12 @@
 
 namespace App\Service;
 
-use App\Model\Depart;
 use App\Model\Employee;
-use App\Model\InvoiceOrder;
-use App\Model\InvoiceOrderInfo;
-use App\Model\ProductRange;
 use App\Model\ReturnExchangeOrder;
 use App\Model\ReturnExchangeOrderProductInfo;
 use App\Model\ReturnExchangeOrderRange;
 use App\Model\SalesOrder;
-use App\Model\TakeOrder;
-use App\Model\TakeOrderInfo;
+use App\Model\SalesOrderProductInfo;
 use Illuminate\Support\Facades\DB;
 
 class ReturnExchangeOrderService extends Service
@@ -337,12 +332,33 @@ class ReturnExchangeOrderService extends Service
         $sale = SalesOrder::where('del_time',0)->where('id',$data['sales_order_id'])->first();
         if(empty($sale)) return [false,'合同不存在或已被删除'];
         if($sale['state'] < SalesOrder::State_two) 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'];
+            }
         }
+
+        //剩余能退
+        $id = $data['id'] ?? '';
+        $s_product = $this->getSaveReturnCompareMessage($id, $data['sales_order_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,'退货产品数量不能超过合同产品数据'];
+        }
+
+        //换货
         $product_submit_minus = $product_save_minus = [];
         if($data['model_type'] == ReturnExchangeOrder::Model_type_two){
             if(empty($data['product_two'])) return [false,'换货产品不能为空'];
@@ -357,7 +373,6 @@ class ReturnExchangeOrderService extends Service
                 }
             }
 
-            $id = $data['id'] ?? '';
             $product_save_minus = $this->getSaveDetailMinus($id);
             list($status,$msg) = (new ProductInventoryService())->compareStock(array_keys($product_submit_minus), $product_submit_minus, $product_save_minus);
             if(! $status) return [false, $msg];
@@ -403,4 +418,36 @@ class ReturnExchangeOrderService extends Service
 
         return $product_save;
     }
+
+    public function getSaveReturnCompareMessage($id = 0, $sales_order_id = 0){
+        $product_save = [];
+        $sub = ReturnExchangeOrderProductInfo::where('type',ReturnExchangeOrderProductInfo::type_one)
+            ->where('del_time',0)
+            ->when(! empty($id), function ($query) use ($id) {
+                return $query->where('return_exchange_id', '<>',$id);
+            })
+            ->get()->toArray();
+        foreach ($sub as $value){
+            if(isset($product_save[$value['product_id']])){
+                $product_save[$value['product_id']] += $value['number'];
+            }else{
+                $product_save[$value['product_id']] = $value['number'];
+            }
+        }
+
+        $sales_order_product = [];
+        $sales_product = SalesOrderProductInfo::where('del_time',0)
+            ->where('sales_order_id',$sales_order_id)
+            ->get()->toArray();
+        foreach ($sales_product as $value){
+            $product_save_tmp = $product_save[$value['product_id']] ?? 0;
+            if(isset($sales_order_product[$value['product_id']])){
+                $sales_order_product[$value['product_id']] += $value['number'];
+            }else{
+                $sales_order_product[$value['product_id']] = $value['number'] - $product_save_tmp;
+            }
+        }
+
+        return $sales_order_product;
+    }
 }