chenqp 1 年間 前
コミット
edd00cf19b

+ 0 - 13
app/Http/Controllers/Api/PurchaseOrderSpecialController.php

@@ -71,17 +71,4 @@ class PurchaseOrderSpecialController extends BaseController
             return $this->json_return(201,$data);
         }
     }
-
-    public function purchaseOrderConfirm(Request $request)
-    {
-        $service = new PurchaseOrderSpecialService();
-        $user = $request->userData->toArray();
-        list($status,$data) = $service->purchaseOrderConfirm($request->all(),$user);
-
-        if($status){
-            return $this->json_return(200,'',$data);
-        }else{
-            return $this->json_return(201,$data);
-        }
-    }
 }

+ 2 - 0
app/Model/PaymentReceipt.php

@@ -34,9 +34,11 @@ class PaymentReceipt extends UseScopeBaseModel
 
     const data_type_one = 1; // 合同
     const data_type_two = 2; // 采购
+    const data_type_three = 3; // 虚拟采购
     public static $data_type = [
         self::data_type_one => '合同',
         self::data_type_two => '采购',
+        self::data_type_three => '虚拟采购',
     ];
 
     const prefix = "T9RMO.";

+ 10 - 4
app/Model/PurchaseOrderSpecial.php

@@ -9,14 +9,20 @@ class PurchaseOrderSpecial extends UseScopeBaseModel
     const UPDATED_AT = 'upd_time';
     protected $dateFormat = 'U';
     const STATE_ZERO = 0;//未确认
-    const STATE_ONE = 1;//未入库
-    const STATE_TWO = 2;//已入库
+    const STATE_ONE = 1;//待确认
+    const STATE_TWO = 2;//已确认
     const prefix = 'XNCG';
     public static $name = [
         self::STATE_ZERO => '未确认',
-        self::STATE_ONE => '未入库',
-        self::STATE_TWO => '已入库',
+        self::STATE_ONE => '待确认',
+        self::STATE_TWO => '已确认',
     ];
 
+    const TYPE_ZERO = 0;//未确认
+    const TYPE_ONE = 1;//待确认
+    public static $type = [
+        self::TYPE_ZERO => '到店施工',
+        self::TYPE_ONE => '仅安装',
+    ];
     const range_function = '';
 }

+ 42 - 30
app/Service/CheckService.php

@@ -376,40 +376,52 @@ class CheckService extends Service
             }
         }
         foreach ($product_map as $key => $value){
-            $rate[$key] = sprintf("%.2f", round($value / $total, 2));
+            $rate[$key] = bcdiv($value / $total, 2);
         }
 
-        $model = new PurchaseOrderSpecial();
-        $model->order_number = $order_number;
-        $model->sales_order_id = $order['id'];
-        $model->supplier = $depart_id;
-        $model->type = $order['type'];
-        $model->depart_id = $head;
-        $model->top_depart_id = $head;
-        $model->crt_id = Employee::SPECIAL_ADMIN;
-        $model->purchase_id = Employee::SPECIAL_ADMIN;
-        $model->purchase_total = $fee['other_fee_1'] ?? 0;
-        $model->storehouse_id = $storehouse ?? 0;
-        $model->save();
-        if(empty($model->id)) return [false,'采购单主信息生成失败'];
-        $purchase_order_id = $model->id;
+        try {
+            DB::beginTransaction();
+            $model = new PurchaseOrderSpecial();
+            $model->order_number = $order_number;
+            $model->sales_order_id = $order['id'];
+            $model->supplier = $depart_id;
+            $model->type = $order['type'];
+            $model->depart_id = $head;
+            $model->top_depart_id = $head;
+            $model->crt_id = Employee::SPECIAL_ADMIN;
+            $model->purchase_id = Employee::SPECIAL_ADMIN;
+            $model->purchase_total = $fee['other_fee_1'] ?? 0;
+            $model->storehouse_id = $storehouse ?? 0;
+            $model->save();
+            if(empty($model->id)) return [false,'采购单主信息生成失败'];
+            $purchase_order_id = $model->id;
 
-        $insert = [];$product_total = 0;
-        foreach ($product as $value){
-            $rate_tmp = $rate[$value['product_id']] ?? 0;
-            $price = sprintf("%.2f", round($rate_tmp * $fee['other_fee_1'] / $value['number'], 2));
-            $product_total += $price * $value['number'];
-            $insert[] = [
-                'purchase_order_special_id' => $purchase_order_id,
-                'product_id' => $value['product_id'],
-                'order_number' => $order_number,
-                'number' => $value['number'],
-                'price' => $price,
-                'storehouse_id' => $storehouse,
-            ];
+            $insert = [];$product_total = 0;
+            foreach ($product as $value){
+                $rate_tmp = $rate[$value['product_id']] ?? 0;
+                $price = bcdiv(bcmul($rate_tmp, $fee['other_fee_1'],2),$value['number'],2);
+                $product_total += $price * $value['number'];
+                $insert[] = [
+                    'purchase_order_special_id' => $purchase_order_id,
+                    'product_id' => $value['product_id'],
+                    'order_number' => $order_number,
+                    'number' => $value['number'],
+                    'price' => $price,
+                    'storehouse_id' => $storehouse,
+                ];
+            }
+            PurchaseOrderSpecialInfo::insert($insert);
+            PurchaseOrderSpecial::where('id',$purchase_order_id)->update(['total' => $product_total]);
+
+            DB::commit();
+        }catch (\Throwable $exception){
+            DB::rollBack();
+            if (str_contains($exception->getMessage(), '1062') || str_contains($exception->getMessage(), 'Duplicate entry')) {
+                return [false, '网络波动,请重新操作!'];
+            }
+
+            return [false, $exception->getMessage()];
         }
-        PurchaseOrderSpecialInfo::insert($insert);
-        PurchaseOrderSpecial::where('id',$purchase_order_id)->update(['total' => $product_total]);
 
         return [true, ''];
     }

+ 93 - 0
app/Service/ExportFileService.php

@@ -43,6 +43,7 @@ use App\Model\PaymentReceiptInfo;
 use App\Model\Product;
 use App\Model\PurchaseOrder;
 use App\Model\PurchaseOrderInfo;
+use App\Model\PurchaseOrderSpecialInfo;
 use App\Model\ReturnExchangeOrder;
 use App\Model\ReturnExchangeOrderProductInfo;
 use App\Model\RollFilm;
@@ -71,6 +72,7 @@ class ExportFileService extends Service
     const type_six = 6;
     const type_seven = 7;
     const type_eight = 8;
+    const type_nine = 9;
 
     //导出文件方法
     protected static $fuc = [
@@ -82,6 +84,7 @@ class ExportFileService extends Service
         self::type_six => 'six',
         self::type_seven => 'seven',
         self::type_eight => 'eight',
+        self::type_nine => 'nine',
     ];
 
     protected static $fuc_name = [
@@ -93,6 +96,7 @@ class ExportFileService extends Service
         self::type_six => '退换货单',
         self::type_seven => '发货单',
         self::type_eight => '进销存报表',
+        self::type_nine => '虚拟采购单',
     ];
 
     public static $filename = "";
@@ -1207,6 +1211,95 @@ class ExportFileService extends Service
         return $this->saveExportData($return,$header,'jc');
     }
 
+    public function nine($ergs,$user){
+        $id = $ergs['id'];
+
+        // 导出数据
+        $return = [];
+
+        DB::table('purchase_order_special')
+            ->whereIn('id', $id)
+            ->select('order_number','id','depart_id','top_depart_id','mark','crt_time','state','crt_id','sales_order_id','supplier','purchase_id','purchase_total','other_fee','total','type')
+            ->orderBy('id','desc')
+            ->chunk(500,function ($data) use(&$return,$user,$ergs){
+                $data = Collect($data)->map(function ($object) {
+                    return (array)$object;
+                })->toArray();
+                $list['data'] = $data;
+
+                //订单数据
+                $service = new PurchaseOrderSpecialService();
+                $list = $service->fillListData($list,$user,$ergs);
+                //产品数据
+                $product = [];
+                $p_info = PurchaseOrderSpecialInfo::where('del_time',0)
+                    ->whereIn('purchase_order_special_id',array_column($data,'id'))
+                    ->get()->toArray();
+                $map = (new ProductService())->getProductDetail(array_column($p_info,'product_id'));
+                foreach ($p_info as $value){
+                    $tmp = $map[$value['product_id']] ?? [];
+                    $value['title'] = $tmp['title'] ?? "";
+                    $value['code'] = $tmp['code'] ?? "";
+                    $value['size'] = $tmp['size'] ?? "";
+                    $value['unit'] = $tmp['unit'] ?? "";
+                    $value['bar_code'] = $tmp['bar_code'] ?? "";
+                    $product[$value['purchase_order_special_id']][] = $value;
+                }
+
+                $flag = [];
+                foreach ($list['data'] as $value){
+                    $product_tmp = $product[$value['id']] ?? [];
+
+                    foreach ($product_tmp as $val){
+                        if(in_array($val['purchase_order_special_id'], $flag)){
+                            $return[] = [
+                                'order_number' => "",
+                                'sales_order_number' => "",
+                                'supplier_title' => "",
+                                'purchase_total' => "",
+                                'other_fee' => "",
+                                'total' => "",
+                                'fee1' => "",
+                                'fee2' => "",
+                                'fee3' => "",
+                                'crt_time' => "",
+                                'state_title' => "",
+                                'product_title' => $val['title'],
+                                'product_code' => $val['code'],
+                                'product_size' => $val['size'],
+                                'product_price' => $val['price'],
+                                'product_num' => $val['number'],
+                            ];
+                        }else{
+                            $flag[] = $val['purchase_order_special_id'];
+                            $return[] = [
+                                'order_number' => $value['order_number'],
+                                'sales_order_number' => $value['sales_order_number'],
+                                'supplier_title' => $value['supplier_title'],
+                                'purchase_total' => $value['purchase_total'],
+                                'other_fee' => $value['other_fee'],
+                                'total' => $value['total'],
+                                'fee1' => $value['fee1'],
+                                'fee2' => $value['fee2'],
+                                'fee3' => $value['fee3'],
+                                'crt_time' => $value['crt_time'],
+                                'state_title' => $value['state_title'],
+                                'product_title' => $val['title'],
+                                'product_code' => $val['code'],
+                                'product_size' => $val['size'],
+                                'product_price' => $val['price'],
+                                'product_num' => $val['number'],
+                            ];
+                        }
+                    }
+                }
+            });
+
+        $header = ['虚拟采购单号','关联单号','供应商','采购金额','其他费用','产品总计','已结金额','未结金额','红冲金额','创建时间','订单状态','产品名称','产品编码','产品规格','产品单价','产品数量'];
+
+        return $this->saveExportData($return,$header);
+    }
+
     public function saveExportData($data, $headers, $type = 'default',$file_name = ''){
         if(empty($file_name)) $file_name = self::$filename . "_". date("Y-m-d") . "_". rand(1000,9999);
         $filename =  $file_name . '.' . 'xlsx';

+ 83 - 8
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\PurchaseOrderSpecial;
 use App\Model\ReturnExchangeOrder;
 use App\Model\SalesOrder;
 use Illuminate\Support\Facades\DB;
@@ -460,12 +461,15 @@ class PaymentReceiptService extends Service
 
     public function customerRule(&$data, $user, $is_add = true){
         if(empty($data['order_number'])) return [false,'收付款单编号不能为空'];
-        if(empty($data['data_type'])) return [false,'单号类型不能为空'];
+        if(empty($data['data_type'])) return [false,'关联单号类型不能为空'];
+        if(! isset(PaymentReceipt::$data_type[$data['data_type']])) return [false, '关联单号类型不存在'];
         if(empty($data['type'])) return [false,'收付款类型不能为空'];
+        if(! isset(PaymentReceipt::$model_type[$data['type']])) return [false, '收付款类型不存在'];
         if(empty($data['amount_list']) || ! is_array($data['amount_list'])) return [false,'关联单号与金额不能为空'];
         foreach ($data['amount_list'] as $value){
             if(empty($value['data_order_no'])) return [false,'关联单号不能为空'];
             if(empty($value['amount'])) return [false,'金额不能为空'];
+            if(floatval($value['amount']) == 0) return [false, '金额请输入大于0的数值'];
             $res = $this->checkNumber($value['amount']);
             if(! $res) return [false, '金额请输入不超过两位小数并且大于0的数值'];
         }
@@ -491,9 +495,6 @@ class PaymentReceiptService extends Service
             if(! in_array($booking['state'],[PaymentReceipt::STATE_ZERO,PaymentReceipt::State_minus_one])) return [false,'请确认收付款单状态,编辑失败'];
         }
 
-//        list($status,$msg) = $this->limitingSendRequestBackgExpire("paymentReceipt" . $data['order_number']);
-//        if(! $status) return [false, $msg];
-
         list($status,$msg) = $this->checkRule($data);
         if(! $status) return [false, $msg];
 
@@ -514,11 +515,13 @@ class PaymentReceiptService extends Service
                 ->whereIn('order_number',$search)
                 ->select('id','order_number','contract_fee as total_amount')
                 ->get()->toArray();
+            $result_map = array_column($result,null,'order_number');
             if(count($search) != count($result)) {
-                foreach ($result as $value){
-                    if(! isset($map[$value['order_number']])) return [false, $value['order_number'] . '不存在或已被删除'];
+                foreach ($search as $value){
+                    if(! isset($result_map[$value])) return [false, $value . '不存在或已被删除'];
                 }
             }
+
             $result_map = array_column($result,'order_number','id');
 
             //收付款金额
@@ -594,11 +597,13 @@ class PaymentReceiptService extends Service
                 ->whereIn('order_number',$search)
                 ->select('id','order_number','purchase_total as total_amount')
                 ->get()->toArray();
+            $result_map = array_column($result,null,'order_number');
             if(count($search) != count($result)) {
-                foreach ($result as $value){
-                    if(! isset($map[$value['order_number']])) return [false, $value['order_number'] . '不存在或已被删除'];
+                foreach ($search as $value){
+                    if(! isset($result_map[$value])) return [false, $value . '不存在或已被删除'];
                 }
             }
+
             $result_map = array_column($result,'order_number','id');
 
             //收付款金额
@@ -667,6 +672,76 @@ class PaymentReceiptService extends Service
                     if($map[$value['order_number']] > $max) return [false, $value['order_number'] . '的金额填写上限是' . $max];
                 }
             }
+        }elseif ($data['data_type'] == PaymentReceipt::data_type_three){//虚拟采购
+            //总金额
+            $result = PurchaseOrderSpecial::where('del_time',0)
+                ->whereIn('order_number',$search)
+                ->select('id','order_number','purchase_total as total_amount','other_fee')
+                ->get()->toArray();
+            $result_map = array_column($result,null,'order_number');
+            if(count($search) != count($result)) {
+                foreach ($search as $value){
+                    if(! isset($result_map[$value])) return [false, $value . '不存在或已被删除'];
+                }
+            }
+
+            //收付款金额
+            $info = PaymentReceiptInfo::where('del_time',0)
+                ->where('type',PaymentReceiptInfo::type_three)
+                ->where('data_order_type',PaymentReceipt::data_type_three)
+                ->whereIn('data_order_no',$search)
+                ->where('data_type',$data['type'])
+                ->select('payment_receipt_id','data_order_no','amount')
+                ->get()->toArray();
+            $info_array = [];
+            foreach ($info as $value){
+                if($payment_receipt_id > 0 && $value['payment_receipt_id'] == $payment_receipt_id) continue;
+                if(isset($info_array[$value['data_order_no']])){
+                    $info_array[$value['data_order_no']] += $value['amount'];
+                }else{
+                    $info_array[$value['data_order_no']] = $value['amount'];
+                }
+            }
+
+            if($data['type'] == PaymentReceipt::type_one){
+                foreach ($result as $value){
+                    //收款  = 总金额(订单金额 + 其他费用) - 已收
+                    $tmp_receipt = $info_array[$value['order_number']] ?? 0;
+                    $total = bcadd($value['total_amount'],$value['other_fee'],2);
+                    $max = bcsub($total, $tmp_receipt, 2);
+                    if($map[$value['order_number']] > $max) return [false, $value['order_number'] . '的金额填写上限是' . $max];
+                }
+            }elseif($data['type'] == PaymentReceipt::type_three){
+                //收款金额(审核后)
+                $info_one = PaymentReceiptInfo::from('payment_receipt_info as a')
+                    ->leftJoin('payment_receipt as b','b.id','a.payment_receipt_id')
+                    ->where('b.state',PaymentReceipt::STATE_TWO)
+                    ->where('b.del_time',0)
+                    ->where('a.del_time',0)
+                    ->where('a.type',PaymentReceiptInfo::type_three)
+                    ->where('a.data_order_type',PaymentReceipt::data_type_three)
+                    ->whereIn('a.data_order_no',$search)
+                    ->where('a.data_type',PaymentReceipt::type_one)
+                    ->select('a.payment_receipt_id','a.data_order_no','a.amount')
+                    ->get()->toArray();
+                $info_one_array = [];
+                foreach ($info_one as $value){
+                    if(isset($info_one_array[$value['data_order_no']])){
+                        $info_one_array[$value['data_order_no']] += $value['amount'];
+                    }else{
+                        $info_one_array[$value['data_order_no']] = $value['amount'];
+                    }
+                }
+
+                foreach ($result as $value){
+                    //红冲 = 审核后的收款单金额 - 已红冲
+                    $tmp_receipt = $info_one_array[$value['order_number']] ?? 0;
+                    $tmp_return = $info_array[$value['order_number']] ?? 0;
+                    $max = bcsub($tmp_receipt, $tmp_return, 2);
+                    if($map[$value['order_number']] > $max) return [false, $value['order_number'] . '的金额填写上限是' . $max];
+                }
+            }
+
         }
 
         return [true, ''];

+ 72 - 132
app/Service/PurchaseOrderSpecialService.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;
@@ -35,61 +36,12 @@ class PurchaseOrderSpecialService extends Service
 
         try{
             DB::beginTransaction();
-            $material_model = PurchaseOrder::where('order_number',$data['order_number'])->first();
+            $material_model = PurchaseOrderSpecial::where('order_number',$data['order_number'])->first();
             $material_model->order_number = $data['order_number'];
-//            $material_model->depart_id = $data['depart_id'] ?? 0;
-//            $material_model->top_depart_id = $data['top_depart_id'] ?? 0;
-            $material_model->total = $data['total'] ?? 0;
             $material_model->other_fee = $data['other_fee'] ?? 0;
-            $material_model->discount_fee = $data['discount_fee'] ?? 0;
-            $material_model->purchase_total = $data['purchase_total'] ?? 0;
-            $material_model->supplier = $data['supplier'] ?? 0;
-            $material_model->purchase_id = $data['purchase_id'] ?? 0;
-            $material_model->order_type = $data['order_type'];
-            $material_model->sales_order_id = $data['sales_order_id'] ?? 0;
             $material_model->mark = $data['mark'] ?? '';
-            $material_model->storehouse_id = $data['storehouse_id'];
             $material_model->save();
 
-            $time = time();
-            PurchaseOrderInfo::where('order_number',$data['order_number'])
-                ->where('del_time',0)
-                ->update(['del_time' => time()]);
-            if(!empty($data['product'])){
-                $sub = [];
-                foreach ($data['product'] as $value){
-                    $sub[] = [
-                        'purchase_order_id' => $material_model->id,
-                        'order_number' => $data['order_number'],
-                        'storehouse_id' => $data['storehouse_id'] ?? 0,
-                        'product_id' => $value['product_id'],
-                        'number' => $value['number'],
-                        'basic_type_id' => $value['basic_type_id'],
-                        'price' => $value['price'],
-                        'mark' => $value['mark'] ?? '',
-                    ];
-                }
-                PurchaseOrderInfo::insert($sub);
-            }
-
-            PurchaseOrderFile::where('order_number',$data['order_number'])
-                ->where('del_time',0)
-                ->update(['del_time' => time()]);
-            if(! empty($data['file'])){
-                $insert = [];
-                foreach ($data['file'] as $value){
-                    $insert[] = [
-                        'purchase_order_id' => $material_model->id,
-                        'order_number' => $data['order_number'],
-                        'file' => $value['url'],
-                        'type' => PurchaseOrderFile::type_one,
-                        'name' => $value['name'],
-                        'crt_time' => $time,
-                    ];
-                }
-                PurchaseOrderFile::insert($insert);
-            }
-
             DB::commit();
         }catch (\Throwable $e){
             DB::rollBack();
@@ -179,16 +131,16 @@ class PurchaseOrderSpecialService extends Service
 
         $order = PurchaseOrderSpecial::where('order_number',$data['order_number'])
             ->where('del_time',0)
-            ->select('id','order_number','depart_id','mark','state','crt_id','sales_order_id','supplier','purchase_id','purchase_total','crt_time','storehouse_id','top_depart_id','total')
+            ->select('id','order_number','depart_id','mark','state','crt_id','sales_order_id','supplier','purchase_id','purchase_total','crt_time','storehouse_id','top_depart_id','total','other_fee')
             ->first();
-        if(empty($order)) return [false, '采购单不存在或已被删除'];
+        if(empty($order)) return [false, '虚拟采购单不存在或已被删除'];
         $order = $order->toArray();
         $order['file'] = [];
-        $order['order_type_title'] = "虚拟采购单";
         $order['storehouse_title'] = Storehouse::where('id',$order['storehouse_id'])->value('title');
-        $supplier = Supplier::where('id',$order['supplier'])->first();
+        $supplier = Depart::where('id',$order['supplier'])->first();
         $order['supplier_title'] = $supplier->title ?? '';
-        $order['state_title'] = PurchaseOrder::$name[$order['state']] ?? '';
+        $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;
         $emp_map = Employee::whereIn('id',array_unique(array_merge_recursive([$order['purchase_id']],[$order['crt_id']])))
@@ -215,6 +167,19 @@ 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['payment_receipt_list'] = (new PaymentReceiptService())->getPaymentReceiptDataList($order,PaymentReceipt::data_type_three);
+        //坏账金额 = 红冲金额
+        $order['payment_receipt_list']['bad_amount'] = $order['payment_receipt_list']['red_amount'];
+        //未回款金额 = 总金额 - 已回款金额 - 坏账金额 - 红冲
+        $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;
+        //回款单信息 审核过的
+
+        $order['not_payment_receipt_amount'] =  bcsub($order['purchase_total'],$order['payment_receipt_list']['not_confirm_receipt_amount'],2);
+
+
         return [true, $order];
     }
 
@@ -225,23 +190,19 @@ class PurchaseOrderSpecialService extends Service
      */
     public function del($data){
         if($this->isEmpty($data,'order_number')) return [false,'请选择数据!'];
-        $order = PurchaseOrder::where('del_time',0)->where('order_number',$data['order_number'])->first();
-        if(empty($order)) return [false,'采购单不存在或已被删除'];
+        $order = PurchaseOrderSpecial::where('del_time',0)->where('order_number',$data['order_number'])->first();
+        if(empty($order)) return [false,'虚拟采购单不存在或已被删除'];
         $order = $order->toArray();
-        if($order['state'] > PurchaseOrder::STATE_ZERO) return [false,'请确认采购单状态,删除失败!'];
+        if($order['state'] > PurchaseOrderSpecial::STATE_ZERO) return [false,'请确认虚拟采购单状态,删除失败!'];
 
         try{
             DB::beginTransaction();
-            PurchaseOrder::where('order_number',$data['order_number'])->where('del_time',0)->update([
+            PurchaseOrderSpecial::where('order_number',$data['order_number'])->where('del_time',0)->update([
                 'del_time'=>time()
             ]);
-            PurchaseOrderInfo::where('order_number',$data['order_number'])->where('del_time',0)->update([
+            PurchaseOrderSpecialInfo::where('order_number',$data['order_number'])->where('del_time',0)->update([
                 'del_time'=>time()
             ]);
-            PurchaseOrderFile::where('order_number',$data['order_number'])
-                ->where('del_time',0)
-                ->update(['del_time' => time()]);
-            (new RangeService())->RangeDelete($order['id'],SeeRange::type_five);
 
             DB::commit();
         }catch (\Throwable $e){
@@ -260,10 +221,9 @@ class PurchaseOrderSpecialService extends Service
      */
     public function getList($data,$user){
         $model = PurchaseOrderSpecial::Clear($user,$data);
-        $model = $model->where('del_time',0)->select('order_number','id','depart_id','top_depart_id','mark','crt_time','state','crt_id','sales_order_id','supplier','purchase_id','purchase_total','storehouse_id','total')
+        $model = $model->where('del_time',0)->select('order_number','id','depart_id','top_depart_id','mark','crt_time','state','crt_id','sales_order_id','supplier','purchase_id','purchase_total','storehouse_id','total','other_fee','type')
             ->orderby('id', 'desc');
         if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
-        if(! empty($data['depart_id'])) $model->where('depart_id', $data['depart_id']);
         if(isset($data['state'])) $model->where('state',$data['state']);
         if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
             $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
@@ -282,6 +242,13 @@ class PurchaseOrderSpecialService extends Service
                 $model->where('crt_time','<=',$end);
             }
         }
+        if(! empty($data['supplier_title'])) {
+            $id = Depart::where('del_time',0)
+                ->where('parent_id',0)
+                ->where('title', 'LIKE', '%'.$data['supplier_title'].'%')
+                ->select('id')->get()->toArray();
+            $model->whereIn('supplier',array_column($id,'id'));
+        }
 
         $list = $this->limit($model,'',$data);
         $list = $this->fillListData($list,$data,$user);
@@ -297,36 +264,51 @@ class PurchaseOrderSpecialService extends Service
     public function fillListData($data,$ergs,$user){
         if(empty($data['data'])) return $data;
 
-        $depart_id = array_unique(array_column($data['data'],'depart_id'));
-        $depart_map = Depart::whereIn('id',$depart_id)
-            ->pluck('title','id')
-            ->toArray();
-
         $emp_id = array_unique(array_merge_recursive(array_column($data['data'],'crt_id'),array_column($data['data'],'purchase_id')));
         $emp_map = Employee::whereIn('id',$emp_id)
                     ->pluck('emp_name','id')
                     ->toArray();
 
         $sales = SalesOrder::whereIn('id',array_unique(array_column($data['data'],'sales_order_id')))->pluck('order_number','id')->toArray();
-        $storehouse = Storehouse::whereIn('id',array_unique(array_column($data['data'],'storehouse_id')))
+        $supplier = Depart::whereIn('id',array_unique(array_column($data['data'],'supplier')))
             ->pluck('title','id')
             ->toArray();
-        $supplier = Supplier::whereIn('id',array_unique(array_column($data['data'],'supplier')))
-            ->select('title','id','is_main')
-            ->get()
-            ->toArray();
-        $supplier_map = array_column($supplier,null,'id');
+
+        list($for_amount_list, $for_amount_list1) = (new PaymentReceiptService())->getPaymentReceiptDataCountList(array_column($data['data'],'order_number'));
+
         foreach ($data['data'] as $key => $value){
-            $supplier_tmp = $supplier_map[$value['supplier']] ?? [];
             $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']) : '';
-            $data['data'][$key]['depart_name'] = $depart_map[$value['depart_id']] ?? '';
             $data['data'][$key]['crt_name'] = $emp_map[$value['crt_id']] ?? '';
             $data['data'][$key]['purchase_name'] = $emp_map[$value['purchase_id']] ?? '';
             $data['data'][$key]['state_title'] = PurchaseOrderSpecial::$name[$value['state']] ?? '';
             $data['data'][$key]['sales_order_number'] = $sales[$value['sales_order_id']] ?? '';
-            $data['data'][$key]['storehouse_title'] = $storehouse[$value['storehouse_id']] ?? '';
-            $data['data'][$key]['supplier_title'] = $supplier_tmp['title'] ?? '';
-            $data['data'][$key]['order_type_title'] = '虚拟采购单';
+            $data['data'][$key]['supplier_title'] = $supplier[$value['supplier']] ?? '';
+            $data['data'][$key]['type_title'] = PurchaseOrderSpecial::$type[$value['type']] ?? "";
+
+            //用于计算--------
+            //已收(审核后)
+            $one1 = $for_amount_list1[$value['order_number'] . PaymentReceipt::type_one] ?? 0;
+            $data['data'][$key]['checked_payment_receipt_amount'] = $one1;
+            //已收
+            $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;
+            //用于计算--------
+
+            //用于统计--------
+            $red = $for_amount_list1[$value['order_number'] . PaymentReceipt::type_three] ?? 0;
+            //已收金额
+            $fee1 = bcsub($one1 ,$red,2);
+            $data['data'][$key]['fee1'] = $fee1;
+            //未收金额
+            $total = bcadd($value['purchase_total'],$value['other_fee'],2);
+            $fee2 = bcsub($total, $fee1,2);
+            $data['data'][$key]['fee2'] = $fee2;
+            //红冲金额
+            $data['data'][$key]['fee3'] = $red;
+            //用于统计--------
         }
 
         return $data;
@@ -339,66 +321,24 @@ class PurchaseOrderSpecialService extends Service
      * @return array
      */
     public function orderRule(&$data, $user, $is_check = true){
-        if(empty($data['order_type'])) return [false,'采购订单类型不能为空'];
-        if($data['order_type'] == PurchaseOrder::Order_type_two && empty($data['sales_order_id'])) return [false, PurchaseOrder::$order_type[PurchaseOrder::Order_type_two] . '必须选择合同'];
-        if($this->isEmpty($data,'product')) return [false,'产品不能为空'];
-        if(empty($data['storehouse_id'])) return [false,'请选择仓库'];
-        if(! empty($data['other_fee'])){
-            $res = $this->checkNumber($data['other_fee']);
-            if(! $res) return [false, '其它费用请输入不超过两位小数并且大于0的数值'];
-        }
-        if(! empty($data['discount_fee'])){
-            $res = $this->checkNumber($data['discount_fee']);
-            if(! $res) return [false, '优惠金额请输入不超过两位小数并且大于0的数值'];
-        }
-        if(! empty($data['total'])){
-            $res = $this->checkNumber($data['total']);
-            if(! $res) return [false, '产品总价请输入不超过两位小数并且大于0的数值'];
-        }
-        if(! empty($data['purchase_total'])){
-            $res = $this->checkNumber($data['purchase_total']);
-            if(! $res) return [false, '采购总价请输入不超过两位小数并且大于0的数值'];
-        }
-        foreach ($data['product'] as $value){
-            if(empty($value['number'])) return [false,'产品数量不能为空'];
-            $res = $this->checkNumber($value['number']);
-            if(! $res) return [false,'请输入正确的产品数量'];
-        }
+        if(! isset($data['mark']) && ! isset($data['other_fee'])) return [false, '请填写更新的内容'];
+        if(isset($data['other_fee']) && ! is_numeric($data['other_fee'])) 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($is_check){
-            $order_number = (new OrderNoService())->createOrderNumber(PurchaseOrder::prefix);
-            if(empty($order_number)) return [false,'采购单号生成失败!'];
+            $order_number = (new OrderNoService())->createOrderNumber(PurchaseOrderSpecial::prefix);
+            if(empty($order_number)) return [false,'虚拟采购单号生成失败!'];
             $data['order_number'] = $order_number;
         }else{
-            if($this->isEmpty($data,'order_number')) return [false,'采购单号不能为空!'];
+            if($this->isEmpty($data,'order_number')) return [false,'虚拟采购单号不能为空!'];
+            $purchase = PurchaseOrderSpecial::where('del_time',0)->where('order_number',$data['order_number'])->first();
+            if(empty($purchase)) return [false, '虚拟采购单不存在或已被删除'];
+            if($purchase->state > PurchaseOrderSpecial::STATE_ZERO) return [false,'请确认虚拟采购单单据状态,修改失败'];
         }
 
         return [true, ''];
     }
-
-    /**
-     * 采购单确认
-     * @param $data
-     * @param $user
-     * @return array
-     */
-    public function purchaseOrderConfirm($data,$user){
-        if(empty($data['order_number'])) return [false, '请选择数据'];
-
-        $order = PurchaseOrder::where('order_number',$data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($order)) return [false, '采购订单不存在或已被删除'];
-        if($order->state != PurchaseOrder::STATE_ZERO) return [false, '请确认采购订单状态,操作失败'];
-
-        PurchaseOrder::where('order_number',$data['order_number'])
-            ->where('del_time',0)
-            ->update(['state' => PurchaseOrder::STATE_ONE]);
-
-        return [true,''];
-    }
 }

+ 53 - 0
config/header/44.php

@@ -0,0 +1,53 @@
+<?php
+/**
+ * '菜单ID' => [
+ *     '字段英文名' =》 '字段中文名'
+ * ]
+ */
+
+return [
+    [
+        'key' => 'order_number',
+        'value' => '虚拟采购单号',
+    ],
+    [
+        'key' => 'sales_order_number',
+        'value' => '关联单号',
+    ],
+    [
+        'key' => 'supplier_title',
+        'value' => '供应商',
+    ],
+    [
+        'key' => 'total',
+        'value' => '产品合计',
+    ],
+    [
+        'key' => 'purchase_total',
+        'value' => '采购金额',
+    ],
+    [
+        'key' => 'other_fee',
+        'value' => '其它费用',
+    ],
+    [
+        'key' => 'fee1',
+        'value' => '已结金额',
+    ],
+    [
+        'key' => 'fee2',
+        'value' => '未结金额',
+    ],
+    [
+        'key' => 'fee3',
+        'value' => '红冲金额',
+    ],
+    [
+        'key' => 'state_title',
+        'value' => '状态',
+    ],
+    [
+        'key' => 'crt_time',
+        'value' => '创建时间',
+    ],
+];

+ 1 - 0
routes/api.php

@@ -172,6 +172,7 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     //特殊采购单
     $route->any('purchaseOrderSpecialList', 'Api\PurchaseOrderSpecialController@purchaseOrderList');
     $route->any('purchaseOrderSpecialDetail', 'Api\PurchaseOrderSpecialController@purchaseOrderDetail');
+    $route->any('purchaseOrderEdit', 'Api\PurchaseOrderSpecialController@purchaseOrderEdit');
 
     //发货单
     $route->any('invoiceOrderList', 'Api\InvoiceOrderController@invoiceOrderList');