瀏覽代碼

退换货能选择已确认以后的合同进行退换货,
退换货确认以后,将退换货金额加到回款中

cqpCow 1 年之前
父節點
當前提交
d2ac3f94c7

+ 5 - 5
app/Service/CheckService.php

@@ -697,11 +697,11 @@ class CheckService extends Service
             $model->state = ReturnExchangeOrder::State_two;
             $model->save();
 
-            if($model->data_type == ReturnExchangeOrder::Order_type){
-                SalesOrder::where('id', $model->data_id)->update([
-                    'state' => SalesOrder::State_six
-                ]);
-            }
+//            if($model->data_type == ReturnExchangeOrder::Order_type){
+//                SalesOrder::where('id', $model->data_id)->update([
+//                    'state' => SalesOrder::State_six
+//                ]);
+//            }
         }else{
             $model->state = ReturnExchangeOrder::State_zero;
             $model->save();

+ 5 - 1
app/Service/PaymentReceiptService.php

@@ -7,6 +7,7 @@ use App\Model\Employee;
 use App\Model\PaymentReceipt;
 use App\Model\PaymentReceiptInfo;
 use App\Model\PurchaseOrder;
+use App\Model\ReturnExchangeOrder;
 use App\Model\SalesOrder;
 use Illuminate\Support\Facades\DB;
 
@@ -246,11 +247,13 @@ class PaymentReceiptService extends Service
                 ->whereIn('order_number',$order_no)
                 ->pluck('contract_fee','order_number')
                 ->toArray();
+            $getDifferentAmountALL = (new ReturnExchangeOrderService())->getDifferentAmountALL2(array_keys($order));
         }else{
             $order = PurchaseOrder::where('del_time',0)
                 ->whereIn('order_number',$order_no)
                 ->pluck('purchase_total','order_number')
                 ->toArray();
+            $getDifferentAmountALL = (new ReturnExchangeOrderService())->getDifferentAmountALL2(array_keys($order), ReturnExchangeOrder::Order_type2);
         }
         $infos = PaymentReceiptInfo::where('del_time',0)
             ->where('type',PaymentReceiptInfo::type_three)
@@ -289,10 +292,11 @@ class PaymentReceiptService extends Service
                     }
                 }
             }elseif ($value['type'] == PaymentReceiptInfo::type_three){
+                $total = ($order[$value['data_order_no']] ?? 0) + ($getDifferentAmountALL[$value['data_order_no']] ?? 0);
                 $tmp = [
                     'data_order_no' => $value['data_order_no'],
                     'amount' => $value['amount'],
-                    'total_amount' => $order[$value['data_order_no']] ?? 0,
+                    'total_amount' => $total,
                     'has_amount' => $infos_map[$value['data_order_no']] ?? 0,
                     'receipt_amount' => $customer['state'] == PaymentReceipt::STATE_TWO ? $value['amount'] : 0
                 ];

+ 14 - 4
app/Service/PurchaseOrderService.php

@@ -251,6 +251,10 @@ class PurchaseOrderService extends Service
 
         //退换货信息
         $order['return_exchange'] = (new ReturnExchangeOrderService())->getDifferentAmount($order['id'],ReturnExchangeOrder::Order_type2);
+        $order['return_exchange_amount'] = 0;
+        foreach ($order['return_exchange'] as $value){
+            if($value['state'] == ReturnExchangeOrder::State_two) $order['return_exchange_amount'] += $value['difference_amount'];
+        }
 
         //总社id
         $top_depart_id = $user['head'] ?? [];
@@ -269,9 +273,11 @@ class PurchaseOrderService extends Service
         }
         $order['is_show_confirm'] = $is_show_confirm;
 
-        //收付款单信息
+        //款单信息
         $order['payment_receipt_list'] = (new PaymentReceiptService())->getPaymentReceiptDataList($order);
-        $order['payment_receipt_list']['not_receipt_amount'] = $order['purchase_total'] - $order['payment_receipt_list']['receipt_amount'];
+        //总回款金额 = 采购金额 - 退换货金额
+        $total = $order['purchase_total'] - $sales['return_exchange_amount'];
+        $order['payment_receipt_list']['not_receipt_amount'] = $total - $order['payment_receipt_list']['receipt_amount'];
         $order['not_payment_receipt_amount'] = $order['payment_receipt_list']['not_receipt_amount'];
 
         return [true, $order];
@@ -434,8 +440,11 @@ class PurchaseOrderService extends Service
             }
         }
 
-        $for_amount_list = [];
-        if(! empty($ergs['for_amount_list'])) $for_amount_list = (new PaymentReceiptService())->getPaymentReceiptDataCountList($data['data']);
+        $for_amount_list = $getDifferentAmountALL = [];
+        if(! empty($ergs['for_amount_list'])) {
+            $for_amount_list = (new PaymentReceiptService())->getPaymentReceiptDataCountList($data['data']);
+            $getDifferentAmountALL = (new ReturnExchangeOrderService())->getDifferentAmountALL(array_column($data['data'],'id'), ReturnExchangeOrder::Order_type2);
+        }
 
         //获取金额列表
         $money = (new BookingListService())->getAllAmount(array_column($data['data'],'id'), BookingList::data_type_two);
@@ -454,6 +463,7 @@ class PurchaseOrderService extends Service
             $data['data'][$key]['supplier_title'] = $supplier_tmp['title'] ?? '';
             $data['data'][$key]['product'] = $product[$value['id']] ?? [];
             $data['data'][$key]['payment_receipt_amount'] = $for_amount_list[$value['order_number']] ?? 0;
+            $data['data'][$key]['return_exchange_amount'] = $getDifferentAmountALL[$value['id']] ?? 0;
 
             //合同对应的金额数据
             $tmp = $money[$value['id']] ?? [];

+ 53 - 0
app/Service/ReturnExchangeOrderService.php

@@ -591,4 +591,57 @@ class ReturnExchangeOrderService extends Service
 
         return $result;
     }
+
+    //获取审核过的差异金额
+    public function getDifferentAmountALL($id = [], $type = 0){
+        if(empty($id)) return [];
+
+        $result = ReturnExchangeOrder::where('del_time',0)
+            ->where('state',ReturnExchangeOrder::State_two)
+            ->whereIn('data_id',$id)
+            ->where('type',$type)
+            ->select('id','model_type','order_number','difference_amount','state','data_id')
+            ->get()->toArray();
+        $return = [];
+        foreach ($result as $value){
+            if(isset($return[$value['data_id']])){
+                $return[$value['data_id']] += $value['difference_amount'];
+            }else{
+                $return[$value['data_id']] = $value['difference_amount'];
+            }
+        }
+
+        return $return;
+    }
+
+    //获取审核过的差异金额
+    public function getDifferentAmountALL2($order_no = [], $type = 0){
+        if(empty($order_no)) return [];
+
+        if(! $type){
+            $order = SalesOrder::whereIn('order_number',$order_no)->select('id','order_number')->get()->toArray();
+        }else{
+            $order = PurchaseOrder::whereIn('order_number',$order_no)->select('id','order_number')->get()->toArray();
+        }
+        $id = array_column($order,'id');
+        $order_map = array_column($order,'order_number','id');
+
+        $result = ReturnExchangeOrder::where('del_time',0)
+            ->where('state',ReturnExchangeOrder::State_two)
+            ->whereIn('data_id',$id)
+            ->where('type',$type)
+            ->select('id','model_type','order_number','difference_amount','state','data_id')
+            ->get()->toArray();
+        $return = [];
+        foreach ($result as $value){
+            $order_nos = $order_map[$value['data_id']] ?? "";
+            if(isset($return[$order_nos])){
+                $return[$order_nos] += $value['difference_amount'];
+            }else{
+                $return[$order_nos] = $value['difference_amount'];
+            }
+        }
+
+        return $return;
+    }
 }

+ 18 - 6
app/Service/SalesOrderService.php

@@ -14,6 +14,7 @@ use App\Model\OrderOperation;
 use App\Model\PaymentReceipt;
 use App\Model\PaymentReceiptInfo;
 use App\Model\Product;
+use App\Model\ReturnExchangeOrder;
 use App\Model\SalesOrder;
 use App\Model\SalesOrderInfo;
 use App\Model\SalesOrderOtherFee;
@@ -658,10 +659,16 @@ class SalesOrderService extends Service
 
         //退换货信息
         $sales['return_exchange'] = (new ReturnExchangeOrderService())->getDifferentAmount($data['id']);
+        $sales['return_exchange_amount'] = 0;
+        foreach ($sales['return_exchange'] as $value){
+            if($value['state'] == ReturnExchangeOrder::State_two) $sales['return_exchange_amount'] += $value['difference_amount'];
+        }
 
-        //收付款单信息
+        //款单信息
         $sales['payment_receipt_list'] = (new PaymentReceiptService())->getPaymentReceiptDataList($sales);
-        $sales['payment_receipt_list']['not_receipt_amount'] = $sales['contract_fee'] - $sales['payment_receipt_list']['receipt_amount'];
+        //总回款金额 = 合同金额 - 退换货金额
+        $total = $sales['contract_fee'] - $sales['return_exchange_amount'];
+        $sales['payment_receipt_list']['not_receipt_amount'] = $total - $sales['payment_receipt_list']['receipt_amount'];
         $sales['not_payment_receipt_amount'] = $sales['payment_receipt_list']['not_receipt_amount'];
 
         //详情里的收付款信息
@@ -706,8 +713,8 @@ class SalesOrderService extends Service
         }
         if(! empty($data['add_return'])) {
             //能下退换货单的合同状态
-            $model->where('state','>=',SalesOrder::State_five);
-            $model->where('state','<',SalesOrder::State_seven);
+            $model->where('state','>=',SalesOrder::State_two);
+//            $model->where('state','<',SalesOrder::State_seven);
         }
         if(! empty($data['sales_order_id'])) $model->where('id',$data['sales_order_id']);
         if(! empty($data['order_list'])){
@@ -815,6 +822,7 @@ class SalesOrderService extends Service
             if(empty($data['payment_receipt']['amount'])) return [false,'回款金额不能为空'];
             $res = $this->checkNumber($data['payment_receipt']['amount']);
             if(! $res) return [false, '回款金额请输入不超过两位小数并且大于0的数值'];
+            if($data['contract_fee'] < $data['payment_receipt']['amount']) return [false, '回款金额不能大于合同金额'];
             if(! empty($data['payment_receipt']['payment_receipt_date'])) $data['payment_receipt']['payment_receipt_date'] = $this->changeDateToDate($data['payment_receipt']['payment_receipt_date']);
         }
 
@@ -889,8 +897,11 @@ class SalesOrderService extends Service
             }
         }
 
-        $for_amount_list = [];
-        if(! empty($ergs['for_amount_list'])) $for_amount_list = (new PaymentReceiptService())->getPaymentReceiptDataCountList($data['data']);
+        $for_amount_list  = $getDifferentAmountALL = [];
+        if(! empty($ergs['for_amount_list'])) {
+            $for_amount_list = (new PaymentReceiptService())->getPaymentReceiptDataCountList($data['data']);
+            $getDifferentAmountALL = (new ReturnExchangeOrderService())->getDifferentAmountALL(array_column($data['data'],'id'));
+        }
 
         //获取分社订货合同关联的发货单
         $invoiceData = $this->getInvoiceOrderData($data['data']);
@@ -941,6 +952,7 @@ class SalesOrderService extends Service
             $data['data'][$key]['invoice_arr'] = implode(',', $tmp);
             $data['data'][$key]['dispatch_company'] = $dispatch[$value['id']] ?? '';
             $data['data'][$key]['payment_receipt_amount'] = $for_amount_list[$value['order_number']] ?? 0;
+            $data['data'][$key]['return_exchange_amount'] = $getDifferentAmountALL[$value['id']] ?? 0;
 
             //合同对应的金额数据
             $tmp = $money[$value['id']] ?? [];