Преглед на файлове

回款管理增加红冲坏账

cqpCow преди 1 година
родител
ревизия
b2602ef5b9
променени са 4 файла, в които са добавени 139 реда и са изтрити 83 реда
  1. 70 21
      app/Service/PaymentReceiptService.php
  2. 27 27
      app/Service/PurchaseOrderService.php
  3. 5 5
      app/Service/ReturnExchangeOrderService.php
  4. 37 30
      app/Service/SalesOrderService.php

+ 70 - 21
app/Service/PaymentReceiptService.php

@@ -214,7 +214,7 @@ class PaymentReceiptService extends Service
         $customer = PaymentReceipt::where('del_time',0)
             ->where('id',$data['id'])
             ->first();
-        if(empty($customer)) return [false,'记录不存在或已被删除'];
+        if(empty($customer)) return [false,'收付款记录不存在或已被删除'];
         $customer = $customer->toArray();
         $array = [
             $customer['account'],
@@ -263,10 +263,11 @@ class PaymentReceiptService extends Service
             ->get()->toArray();
         $infos_map = [];
         foreach ($infos as $value){
-            if(isset($infos_map[$value['data_order_no']])){
-                $infos_map[$value['data_order_no']] += $value['amount'];
+            $keys = $value['data_order_no'] . $value['data_type'];
+            if(isset($infos_map[$keys])){
+                $infos_map[$keys] += $value['amount'];
             }else{
-                $infos_map[$value['data_order_no']] = $value['amount'];
+                $infos_map[$keys] = $value['amount'];
             }
         }
         $emp_map = Employee::whereIn('id',array_unique($emp_id))
@@ -294,13 +295,42 @@ class PaymentReceiptService extends Service
                     }
                 }
             }elseif ($value['type'] == PaymentReceiptInfo::type_three){
-                $total = ($order[$value['data_order_no']] ?? 0) + ($getDifferentAmountALL[$value['data_order_no']] ?? 0);
+                $total = $has_amount = 0;
+                $receipt_amount = $value['amount'];
+                if($customer['type'] == PaymentReceipt::type_one){
+                    //坏账金额
+                    $bad_amount = $infos_map[$value['data_order_no'] . PaymentReceipt::type_four] ?? 0;
+                    //除了本单外的已收金额
+                    $has_amount = $infos_map[$value['data_order_no'] . PaymentReceipt::type_one] ?? 0;
+
+                    //总回款金额 = 合同金额 - 退换货金额 - 已收金额 - 坏账金额
+                    $total = ($order[$value['data_order_no']] ?? 0) - ($getDifferentAmountALL[$value['data_order_no']] ?? 0) - $bad_amount - $has_amount;
+
+                }elseif($customer['type'] == PaymentReceipt::type_three){
+                    //已回款金额
+                    $one = $infos_map[$value['data_order_no'] . PaymentReceipt::type_one] ?? 0;
+                    //除了本单外的已红冲金额
+                    $has_amount = $infos_map[$value['data_order_no'] . PaymentReceipt::type_three] ?? 0;
+                    //总红冲金额 = 已回款金额 - 已红冲金额
+                    $total = $one - $has_amount;
+
+                }elseif($customer['type'] == PaymentReceipt::type_four){
+                    //已回款金额
+                    $one = $infos_map[$value['data_order_no'] . PaymentReceipt::type_one] ?? 0;
+                    //已红冲金额
+                    $three = $infos_map[$value['data_order_no'] . PaymentReceipt::type_three] ?? 0;
+                    //除了本单外的已坏账金额
+                    $has_amount = $infos_map[$value['data_order_no'] . PaymentReceipt::type_four] ?? 0;
+                    //总坏账金额 = 合同金额 - 退换货金额 - 已收金额 + 已红冲金额 - 坏账金额
+                    $total = ($order[$value['data_order_no']] ?? 0) - ($getDifferentAmountALL[$value['data_order_no']] ?? 0) - $one + $three - $has_amount;
+                }
+
                 $tmp = [
                     'data_order_no' => $value['data_order_no'],
                     'amount' => $value['amount'],
                     'total_amount' => $total,
-                    'has_amount' => $infos_map[$value['data_order_no']] ?? 0,
-                    'receipt_amount' => $customer['state'] == PaymentReceipt::STATE_TWO ? $value['amount'] : 0
+                    'has_amount' => $has_amount,
+                    'receipt_amount' => $receipt_amount
                 ];
                 $customer['amount_list'][] = $tmp;
             }
@@ -434,10 +464,11 @@ class PaymentReceiptService extends Service
             ->get()->toArray();
         $map = [];
         foreach ($info1 as $value){
-            if(isset($map[$value['payment_receipt_id']])){
-                $map[$value['payment_receipt_id']] += $value['amount'];
+            $key = $value['payment_receipt_id'] . $value['data_type'];
+            if(isset($map[$key])){
+                $map[$key] += $value['amount'];
             }else{
-                $map[$value['payment_receipt_id']] = $value['amount'];
+                $map[$key] = $value['amount'];
             }
         }
 
@@ -464,26 +495,43 @@ class PaymentReceiptService extends Service
             }
         }
 
-        $finished = $not_finished = 0;
+        //四个金额类型
+        $one = $two = $three = $four = 0;
         foreach ($order as $key => $value){
-            $tmp = $info[$value['id']] ?? '';
-            $order[$key]['belong'] = $tmp;
+            $keys = $value['id'] . $value['type'];
+
+            //归属人
+            $order[$key]['belong'] = $info[$value['id']] ?? '';
             $order[$key]['state_title'] = PaymentReceipt::$name[$value['state']] ?? '';
+            $order[$key]['type_title'] = PaymentReceipt::$model_type[$value['type']] ?? '';
             $order[$key]['payment_receipt_date'] = $value['payment_receipt_date'] ? date('Y-m-d',$value['payment_receipt_date']) : '';
-            $amount = $map[$value['id']] ?? 0;
+
+            //统计每个收付款单 =》总收付款金额
+            $amount = $map[$keys] ?? 0;
             $order[$key]['amount'] = $amount;
-            $finished += $amount;
+
+            if($value['type'] == PaymentReceipt::type_one){
+                $one += $amount;
+            }elseif($value['type'] == PaymentReceipt::type_two){
+                $two += $amount;
+            }elseif($value['type'] == PaymentReceipt::type_three){
+                $three += $amount;
+            }elseif($value['type'] == PaymentReceipt::type_four){
+                $four += $amount;
+            }
         }
 
-        $return['receipt_amount'] = $finished;
-        $return['not_receipt_amount'] = $not_finished;
+        $return['receipt_amount'] = $one;
+        $return['not_receipt_amount'] = 0;
+        $return['red_amount'] = $three;
+        $return['bad_amount'] = $four;
         $return['all_count'] = count($order);
         $return['list'] = $order;
 
         return $return;
     }
 
-    //列表里
+    //列表里 默认:(收款)
     public function getPaymentReceiptDataCountList($data){
         $data_order_no = [];
         foreach ($data as $value){
@@ -498,10 +546,11 @@ class PaymentReceiptService extends Service
 
         $return = [];
         foreach ($order as $value){
-            if(isset($return[$value['data_order_no']])){
-                $return[$value['data_order_no']] += $value['amount'];
+            $key = $value['data_order_no'] . $value['data_type'];
+            if(isset($return[$key])){
+                $return[$key] += $value['amount'];
             }else{
-                $return[$value['data_order_no']] = $value['amount'];
+                $return[$key] = $value['amount'];
             }
         }
 

+ 27 - 27
app/Service/PurchaseOrderService.php

@@ -6,6 +6,7 @@ use App\Model\BasicType;
 use App\Model\BookingList;
 use App\Model\Depart;
 use App\Model\Employee;
+use App\Model\PaymentReceipt;
 use App\Model\PurchaseOrder;
 use App\Model\PurchaseOrderFile;
 use App\Model\PurchaseOrderInfo;
@@ -253,7 +254,7 @@ 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'];
+            $order['return_exchange_amount'] += $value['difference_amount'];
         }
 
         //总社id
@@ -275,9 +276,11 @@ class PurchaseOrderService extends Service
 
         //回款单信息
         $order['payment_receipt_list'] = (new PaymentReceiptService())->getPaymentReceiptDataList($order);
-        //总回款金额 = 采购金额 - 退换货金额
-        $total = $order['purchase_total'] - $order['return_exchange_amount'];
-        $order['payment_receipt_list']['not_receipt_amount'] = $total - $order['payment_receipt_list']['receipt_amount'];
+        //总回款金额 = 采购金额 - 退换货金额 - 坏账金额
+        $total = $order['purchase_total'] - $order['return_exchange_amount'] - $order['payment_receipt_list']['bad_amount'];
+        //未回款金额 = 总回款金额 - 已回款金额 + 红冲金额(退还给客户的钱)
+        $order['payment_receipt_list']['not_receipt_amount'] = $total - $order['payment_receipt_list']['receipt_amount'] + $order['payment_receipt_list']['red_amount'];
+
         $order['not_payment_receipt_amount'] = $order['payment_receipt_list']['not_receipt_amount'];
 
         return [true, $order];
@@ -440,14 +443,9 @@ class PurchaseOrderService extends Service
             }
         }
 
-        $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);
-        }
+        $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);
         //获取发货信息
         $invoice_map = (new InvoiceOrderService())->getInvoiceData($data['data']);
         foreach ($data['data'] as $key => $value){
@@ -462,24 +460,26 @@ class PurchaseOrderService extends Service
             $data['data'][$key]['storehouse_title'] = $storehouse[$value['storehouse_id']] ?? '';
             $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']] ?? [];
-            $fee1 = $tmp[BookingList::type_one] ?? 0; //收款金额
-            $fee2 = $tmp[BookingList::type_two] ?? 0; //坏账金额
-            $fee3 = $tmp[BookingList::type_three] ?? 0; //退款金额
-            $fee4 = $tmp[BookingList::type_four] ?? 0; //补收金额
-
-            //已收金额
-            $data['data'][$key]['fee1'] = $fee1 + $fee4;
+
+            $one = $for_amount_list[$value['order_number'] . PaymentReceipt::type_one] ?? 0;
+            $data['data'][$key]['payment_receipt_amount'] = $one;
+            $three = $for_amount_list[$value['order_number'] . PaymentReceipt::type_three] ?? 0;
+            $data['data'][$key]['red_amount'] = $three;
+            $four = $for_amount_list[$value['order_number'] . PaymentReceipt::type_four] ?? 0;
+            $data['data'][$key]['bad_amount'] = $four;
+            $return_exchange_amount = $getDifferentAmountALL[$value['id']] ?? 0;
+            $data['data'][$key]['return_exchange_amount'] = $return_exchange_amount;
+
+            //最终已收金额
+            $fee1 = $one - $three;
+            $data['data'][$key]['fee1'] = $fee1;
             //未收金额
-            $data['data'][$key]['fee2'] = $value['purchase_total'] - ($fee1 + $fee4);
+            $fee2 = $value['purchase_total'] - $return_exchange_amount - $fee1;
+            $data['data'][$key]['fee2'] = $fee2;
             //坏账金额
-            $data['data'][$key]['fee3'] = $fee2;
-            //最终金额
-            $data['data'][$key]['fee4'] = $value['purchase_total'] + $fee4 - $fee3;
+            $data['data'][$key]['fee3'] = $four;
+            //红冲金额
+            $data['data'][$key]['fee4'] = $three;
 
             //发货信息 分社向总社采购
             $invoice_state = "未发货";

+ 5 - 5
app/Service/ReturnExchangeOrderService.php

@@ -575,7 +575,7 @@ class ReturnExchangeOrderService extends Service
         return $sales_order_product;
     }
 
-    //获取差异金额
+    //获取差异金额(合同和采购详情中统计的)
     public function getDifferentAmount($id = 0, $type = 0){
         if(empty($id)) return [];
 
@@ -592,12 +592,12 @@ 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)
+//            ->where('state',ReturnExchangeOrder::State_two)
             ->whereIn('data_id',$id)
             ->where('type',$type)
             ->select('id','model_type','order_number','difference_amount','state','data_id')
@@ -614,7 +614,7 @@ class ReturnExchangeOrderService extends Service
         return $return;
     }
 
-    //获取审核过的差异金额
+    //获取差异金额(收付款单详情中统计的)
     public function getDifferentAmountALL2($order_no = [], $type = 0){
         if(empty($order_no)) return [];
 
@@ -627,7 +627,7 @@ class ReturnExchangeOrderService extends Service
         $order_map = array_column($order,'order_number','id');
 
         $result = ReturnExchangeOrder::where('del_time',0)
-            ->where('state',ReturnExchangeOrder::State_two)
+//            ->where('state',ReturnExchangeOrder::State_two)
             ->whereIn('data_id',$id)
             ->where('type',$type)
             ->select('id','model_type','order_number','difference_amount','state','data_id')

+ 37 - 30
app/Service/SalesOrderService.php

@@ -462,8 +462,18 @@ class SalesOrderService extends Service
      * @return array
      */
     public function salesOrderDel($data){
-        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
-        $sale_order = SalesOrder::where('id',$data['id'])->first();
+        if(empty($data['id']) && empty($data['order_number'])) return [false,'请选择数据!'];
+        if(! empty($data['id'])){
+            $sale_order = SalesOrder::where('del_time',0)
+                ->where('id',$data['id'])
+                ->first();
+        }else{
+            $sale_order = SalesOrder::where('del_time',0)
+                ->where('order_number',$data['order_number'])
+                ->first();
+            $data['id'] = empty($sale_order->id) ? 0 : $sale_order->id;
+        }
+
         if(empty($sale_order)) return [false,'合同不存在或已被删除'];
         $sale_order = $sale_order->toArray();
         if($sale_order['state'] > 0) return [false,'请确认合同状态,删除失败'];
@@ -663,16 +673,18 @@ 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['return_exchange_amount'] += $value['difference_amount'];
         }
 
         //回款单信息
         $sales['payment_receipt_list'] = (new PaymentReceiptService())->getPaymentReceiptDataList($sales);
-        //总回款金额 = 合同金额 - 退换货金额
-        $total = $sales['contract_fee'] - $sales['return_exchange_amount'];
-        $sales['payment_receipt_list']['not_receipt_amount'] = $total - $sales['payment_receipt_list']['receipt_amount'];
+        //总回款金额 = 合同金额 - 退换货金额 - 坏账金额
+        $total = $sales['contract_fee'] - $sales['return_exchange_amount'] - $sales['payment_receipt_list']['bad_amount'];
+        //未回款金额 = 总回款金额 - 已回款金额 + 红冲金额
+        $sales['payment_receipt_list']['not_receipt_amount'] = $total - $sales['payment_receipt_list']['receipt_amount'] + $sales['payment_receipt_list']['red_amount'];
         $sales['not_payment_receipt_amount'] = $sales['payment_receipt_list']['not_receipt_amount'];
 
+
         //详情里的收付款信息
 //        $sales['payment_receipt'] = (new PaymentReceiptService())->getPaymentReceiptDeatail($sales);
 
@@ -899,11 +911,8 @@ class SalesOrderService extends Service
             }
         }
 
-        $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'));
-        }
+        $for_amount_list = (new PaymentReceiptService())->getPaymentReceiptDataCountList($data['data']);
+        $getDifferentAmountALL = (new ReturnExchangeOrderService())->getDifferentAmountALL(array_column($data['data'],'id'));
 
         //获取分社订货合同关联的发货单
         $invoiceData = $this->getInvoiceOrderData($data['data']);
@@ -911,9 +920,6 @@ class SalesOrderService extends Service
         //分派的总社或分社
         $dispatch = $this->getDispatchData($data['data']);
 
-        //获取金额列表
-        $money = (new BookingListService())->getAllAmount(array_column($data['data'],'id'), BookingList::data_type_one);
-
         //指派金额
         $fee = [];
         $sales_o_info = SalesOrderOtherFee::where('del_time',0)
@@ -954,24 +960,25 @@ class SalesOrderService extends Service
             $tmp = $invoiceData[$value['id']] ?? [];
             $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']] ?? [];
-            $fee1 = $tmp[BookingList::type_one] ?? 0; //收款金额
-            $fee2 = $tmp[BookingList::type_two] ?? 0; //坏账金额
-            $fee3 = $tmp[BookingList::type_three] ?? 0; //退款金额
-            $fee4 = $tmp[BookingList::type_four] ?? 0; //补收金额
-
-            //已收金额
-            $data['data'][$key]['fee1'] = $fee1 + $fee4;
+            $one = $for_amount_list[$value['order_number'] . PaymentReceipt::type_one] ?? 0;
+            $data['data'][$key]['payment_receipt_amount'] = $one;
+            $three = $for_amount_list[$value['order_number'] . PaymentReceipt::type_three] ?? 0;
+            $data['data'][$key]['red_amount'] = $three;
+            $four = $for_amount_list[$value['order_number'] . PaymentReceipt::type_four] ?? 0;
+            $data['data'][$key]['bad_amount'] = $four;
+            $return_exchange_amount = $getDifferentAmountALL[$value['id']] ?? 0;
+            $data['data'][$key]['return_exchange_amount'] = $return_exchange_amount;
+
+            //最终已收金额
+            $fee1 = $one - $three;
+            $data['data'][$key]['fee1'] = $fee1;
             //未收金额
-            $data['data'][$key]['fee2'] = $value['contract_fee'] - ($fee1 + $fee4);
+            $fee2 = $value['contract_fee'] - $return_exchange_amount - $fee1;
+            $data['data'][$key]['fee2'] = $fee2;
             //坏账金额
-            $data['data'][$key]['fee3'] = $fee2;
-            //最终金额
-            $data['data'][$key]['fee4'] = $value['contract_fee'] + $fee4 - $fee3;
+            $data['data'][$key]['fee3'] = $four;
+            //红冲金额
+            $data['data'][$key]['fee4'] = $three;
         }
 
         return $data;