chenqp преди 7 месеца
родител
ревизия
c40539ba35
променени са 4 файла, в които са добавени 48 реда и са изтрити 14 реда
  1. 3 1
      app/Service/ExportFileService.php
  2. 16 3
      app/Service/PaymentReceiptService.php
  3. 25 10
      app/Service/PurchaseOrderSpecialService.php
  4. 4 0
      config/header/44.php

+ 3 - 1
app/Service/ExportFileService.php

@@ -1262,6 +1262,7 @@ class ExportFileService extends Service
                                 'fee1' => "",
                                 'fee2' => "",
                                 'fee3' => "",
+                                'fee4' => "",
                                 'crt_time' => "",
                                 'state_title' => "",
                                 'product_title' => $val['title'],
@@ -1282,6 +1283,7 @@ class ExportFileService extends Service
                                 'fee1' => $value['fee1'],
                                 'fee2' => $value['fee2'],
                                 'fee3' => $value['fee3'],
+                                'fee4' => $value['fee4'],
                                 'crt_time' => $value['crt_time'],
                                 'state_title' => $value['state_title'],
                                 'product_title' => $val['title'],
@@ -1295,7 +1297,7 @@ class ExportFileService extends Service
                 }
             });
 
-        $header = ['虚拟采购单号','关联单号','供应商','采购金额','其他费用','产品总计','已结金额','未结金额','红冲金额','创建时间','订单状态','产品名称','产品编码','产品规格','产品单价','产品数量'];
+        $header = ['虚拟采购单号','关联单号','供应商','采购金额','其他费用','产品总计','已结金额','未结金额','红冲金额','坏账金额','创建时间','订单状态','产品名称','产品编码','产品规格','产品单价','产品数量'];
 
         return $this->saveExportData($return,$header);
     }

+ 16 - 3
app/Service/PaymentReceiptService.php

@@ -546,9 +546,9 @@ class PaymentReceiptService extends Service
             $return_exchange = (new ReturnExchangeOrderService())->getDifferentAmountALL(array_column($result,'id'));
 
             if($data['type'] == PaymentReceipt::type_one){
+                // order_number => amount
                 $return_exchange_array = [];
                 foreach ($result_map as $key => $value){
-                    // order_number => amount
                     if(isset($return_exchange[$key])) $return_exchange_array[$value] = $return_exchange[$key];
                 }
 
@@ -676,7 +676,7 @@ class PaymentReceiptService extends Service
             //总金额
             $result = PurchaseOrderSpecial::where('del_time',0)
                 ->whereIn('order_number',$search)
-                ->select('id','order_number','purchase_total as total_amount','other_fee')
+                ->select('id','order_number','purchase_total as total_amount','other_fee','sales_order_id')
                 ->get()->toArray();
             $result_map = array_column($result,null,'order_number');
             if(count($search) != count($result)) {
@@ -685,6 +685,8 @@ class PaymentReceiptService extends Service
                 }
             }
 
+            $result_map = array_column($result,'order_number','sales_order_id');
+
             //收付款金额
             $info = PaymentReceiptInfo::where('del_time',0)
                 ->where('type',PaymentReceiptInfo::type_three)
@@ -703,12 +705,23 @@ class PaymentReceiptService extends Service
                 }
             }
 
+            //退货退款金额
+            $return_exchange = (new ReturnExchangeOrderService())->getDifferentAmountALL(array_column($result,'sales_order_id'));
+
             if($data['type'] == PaymentReceipt::type_one){
+                // order_number => amount
+                $return_exchange_array = [];
+                foreach ($result_map as $key => $value){
+                    if(isset($return_exchange[$key])) $return_exchange_array[$value] = $return_exchange[$key];
+                }
+
                 foreach ($result as $value){
-                    //收款  = 总金额(订单金额 + 其他费用) - 已收
+                    //收款  = 总金额(订单金额 + 其他费用) - 已收 - 退换货
                     $tmp_receipt = $info_array[$value['order_number']] ?? 0;
                     $total = bcadd($value['total_amount'],$value['other_fee'],2);
+                    $tmp_return = $return_exchange_array[$value['order_number']] ?? 0;
                     $max = bcsub($total, $tmp_receipt, 2);
+                    $max = bcsub($max, $tmp_return, 2);
                     if($map[$value['order_number']] > $max) return [false, $value['order_number'] . '的金额填写上限是' . $max];
                 }
             }elseif($data['type'] == PaymentReceipt::type_three){

+ 25 - 10
app/Service/PurchaseOrderSpecialService.php

@@ -141,8 +141,8 @@ class PurchaseOrderSpecialService extends Service
         $order['supplier_title'] = $supplier->title ?? '';
         $order['state_title'] = PurchaseOrderSpecial::$name[$order['state']] ?? '';
         $order['type_title'] = PurchaseOrderSpecial::$type[$order['type']] ?? '';
-        $sales = SalesOrder::where('id',$order['sales_order_id'])->value('order_number');
-        $order['sales_order_number'] = $sales;
+        $sales_order_number = SalesOrder::where('id',$order['sales_order_id'])->value('order_number');
+        $order['sales_order_number'] = $sales_order_number;
         $emp_map = Employee::whereIn('id',array_unique(array_merge_recursive([$order['purchase_id']],[$order['crt_id']])))
             ->pluck('emp_name','id')
             ->toArray();
@@ -167,17 +167,24 @@ class PurchaseOrderSpecialService extends Service
         $order['crt_name'] = $emp_map[$order['crt_id']] ?? '';
         $order['crt_time'] = $order['crt_time'] ? date("Y-m-d H:i:s",$order['crt_time']): '';
 
+        //退换货信息
+        $order['return_exchange'] = (new ReturnExchangeOrderService())->getDifferentAmount($order['sales_order_id']);
+        $order['return_exchange_amount'] = 0;
+        foreach ($order['return_exchange'] as $value){
+            if($value['state'] == ReturnExchangeOrder::State_two)  $order['return_exchange_amount'] += $value['difference_amount'];
+        }
+
         //回款单信息 审核过的
-        $order['payment_receipt_list'] = (new PaymentReceiptService())->getPaymentReceiptDataList($order,PaymentReceipt::data_type_three);
-        //坏账金额 = 红冲金额
-        $order['payment_receipt_list']['bad_amount'] = $order['payment_receipt_list']['red_amount'];
+        $sales['order_number'] = $order['sales_order_number'];
+        $order['payment_receipt_list'] = (new PaymentReceiptService())->getPaymentReceiptDataList($sales, PaymentReceipt::data_type_one);
+        //坏账金额 = 已审核退货退款金额 - 红冲金额
+        $order['payment_receipt_list']['bad_amount'] = bcsub($order['return_exchange_amount'], $order['payment_receipt_list']['red_amount'],2);
         //未回款金额 = 总金额 - 已回款金额 - 坏账金额 - 红冲
-        $total = bcadd($order['purchase_total'], $order['other_fee'],2);
-        $not_receipt_amount = bcsub($total,$order['payment_receipt_list']['receipt_amount'],2);
-        $order['payment_receipt_list']['not_receipt_amount'] = $not_receipt_amount;
+        $total = bcadd($order['purchase_total'],$order['other_fee'],2);
+        $order['payment_receipt_list']['not_receipt_amount'] = bcsub(bcsub(bcsub($total, $order['payment_receipt_list']['receipt_amount'],2), $order['payment_receipt_list']['bad_amount'], 2),$order['payment_receipt_list']['red_amount'],2);
         //回款单信息 审核过的
 
-        $order['not_payment_receipt_amount'] =  bcsub($total,$order['payment_receipt_list']['not_confirm_receipt_amount'],2);
+        $order['not_payment_receipt_amount'] = bcsub($total,$order['payment_receipt_list']['not_confirm_receipt_amount'],2);
 
 
         return [true, $order];
@@ -275,6 +282,7 @@ class PurchaseOrderSpecialService extends Service
             ->toArray();
 
         list($for_amount_list, $for_amount_list1) = (new PaymentReceiptService())->getPaymentReceiptDataCountList(array_column($data['data'],'order_number'));
+        list($getDifferentAmountALL,$getDifferentAmountALL1) = (new ReturnExchangeOrderService())->getDifferentAmountALLNew(array_column($data['data'],'sales_order_id'));
 
         foreach ($data['data'] as $key => $value){
             $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']) : '';
@@ -295,19 +303,26 @@ class PurchaseOrderSpecialService extends Service
             //已红冲
             $three = $for_amount_list[$value['order_number'] . PaymentReceipt::type_three] ?? 0;
             $data['data'][$key]['red_amount'] = $three;
+            //已退货退款
+            $return_exchange_amount = $getDifferentAmountALL[$value['sales_order_id']] ?? 0;
+            $data['data'][$key]['return_exchange_amount'] = $return_exchange_amount;
             //用于计算--------
 
             //用于统计--------
             $red = $for_amount_list1[$value['order_number'] . PaymentReceipt::type_three] ?? 0;
+            $return_exchange_amount1 = $getDifferentAmountALL1[$value['sales_order_id']] ?? 0;
+            $bad = bcsub($return_exchange_amount1 ,$red,2);
             //已收金额
             $fee1 = bcsub($one1 ,$red,2);
             $data['data'][$key]['fee1'] = $fee1;
             //未收金额
             $total = bcadd($value['purchase_total'],$value['other_fee'],2);
-            $fee2 = bcsub($total, $fee1,2);
+            $fee2 = bcsub(bcsub($total, $bad, 2),$red,2);
             $data['data'][$key]['fee2'] = $fee2;
             //红冲金额
             $data['data'][$key]['fee3'] = $red;
+            //坏账金额
+            $data['data'][$key]['fee4'] = $bad;
             //用于统计--------
         }
 

+ 4 - 0
config/header/44.php

@@ -43,6 +43,10 @@ return [
         'value' => '红冲金额',
     ],
     [
+        'key' => 'fee4',
+        'value' => '坏账金额',
+    ],
+    [
         'key' => 'state_title',
         'value' => '状态',
     ],