cqp пре 5 месеци
родитељ
комит
efe15abe90

+ 6 - 0
app/Model/DeliveryNote.php

@@ -16,7 +16,13 @@ class DeliveryNote extends Model
     const UPDATED_AT = 'upd_time';
     protected $dateFormat = 'U';
 
+    const STATE_ZERO = 0;
+    const STATE_ONE = 1;
 
+    public static $name = [
+        self::STATE_ZERO => '已保存',
+        self::STATE_ONE => '已交车',
+    ];
 
     public function getBreakAttribute($value)
     {

+ 21 - 0
app/Model/DeliveryNoteDetail.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+class DeliveryNoteDetail extends Model
+{
+    protected $table = "delivery_note_detail"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+    const TYPE_ONE = 1;
+    const TYPE_TWO = 2;
+
+    public static $name = [
+        self::TYPE_ONE => '销售顾问',
+        self::TYPE_TWO => '安装主管',
+    ];
+}

+ 1 - 1
app/Service/CheckService.php

@@ -1352,7 +1352,7 @@ class CheckService extends Service
             ->where('order_number',$data['order_number'])
             ->select('product_id','storehouse_id','number','depart_id','order_number','top_depart_id','order_type','price')
             ->get()->toArray();
-        if(empty($result)) return [false,'退换货流水数据未找到'];
+        if(empty($result)) return [true, self::minus_one];
 
         //生成对冲数据
         $time = time();

+ 167 - 51
app/Service/ConstructionService.php

@@ -10,6 +10,7 @@ use App\Model\ConstructionProductInfo;
 use App\Model\Customer;
 use App\Model\CustomerInfo;
 use App\Model\DeliveryNote;
+use App\Model\DeliveryNoteDetail;
 use App\Model\Depart;
 use App\Model\Employee;
 use App\Model\EmployeeDepartPermission;
@@ -1071,72 +1072,150 @@ class ConstructionService extends Service
     }
 
     public function deliveryNoteEdit($data,$user){
-        $id = $user['id'];
+        list($status, $msg) = $this->deliveryNoteEditRule($data, $user);
+        if(! $status) return [false, $msg];
+        list($model, $new, $old) = $msg;
+
+        try {
+            if(isset($data['is_submit'])) $model->state = 1;
+
+            if(! isset($data['is_edit']) || $data['is_edit']) {
+                $model->upd_id = $user['id'];
+                $model->construction_order_number = $data['construction_order_number'] ?? '';
+                $model->sales_order_number = $data['sales_order_number'] ?? '';
+                $model->start_time = $data['start_time'] ?? '';
+                $model->end_time = $data['end_time'] ?? '';
+                $model->vin_no = $data['vin_no'] ?? '';
+                $model->system = $data['system'] ?? '';
+                $model->mile = $data['mile'] ?? '';
+                $model->is_wait = $data['is_wait'] ?? '';
+                $model->customer_name = $data['customer_name'] ?? '';
+                $model->customer_mobile = $data['customer_mobile'] ?? '';
+                $model->sale_man = $data['sale_man'] ?? '';
+                $model->install_man = $data['install_man'] ?? '';
+                $model->is_brash = $data['is_brash'] ?? '';
+                $model->is_chong = $data['is_chong'] ?? '';
+                $model->service_mark = $data['service_mark'] ?? '';
+                $model->mark = $data['mark'] ?? '';
+                $model->break = $data['break'] ? json_encode($data['break']):json_encode([]);
+                $model->break_mark = $data['break_mark'] ? json_encode($data['break_mark']):json_encode([]);
+                $model->project_id = $data['project_id'] ? json_encode($data['project_id']):json_encode([]);
+                $model->other_project_mark = $data['other_project_mark'] ?? '';
+                $model->img = $data['img'] ?? '';
+                $model->img1 = $data['img1'] ?? '';
+                $model->img2 = $data['img2'] ?? '';
+                $model->img3 = $data['img3'] ?? '';
+                $model->depart_id = $data['depart_id'] ?? 0;
+                $model->top_depart_id = $data['top_depart_id'] ?? 0;
+                $model->save();
+                $id = $model->id;
+
+                $time = time();
+                DeliveryNoteDetail::where('del_time',0)
+                    ->where('delivery_note_id', $id)
+                    ->update(['del_time' => $time]);
+
+                $insert = [];
+                if(! empty($data['sale_man'])){
+                    $array = explode(',', $data['sale_man']);
+                    foreach ($array as $value){
+                        $insert[] = [
+                            'delivery_note_id' => $id,
+                            'type' => DeliveryNoteDetail::TYPE_ONE,
+                            'data_id' => $value,
+                            'crt_time' => $time,
+                        ];
+                    }
+                }
+                if(! empty($data['install_man'])){
+                    $array = explode(',', $data['install_man']);
+                    foreach ($array as $value){
+                        $insert[] = [
+                            'delivery_note_id' => $id,
+                            'type' => DeliveryNoteDetail::TYPE_TWO,
+                            'data_id' => $value,
+                            'crt_time' => $time,
+                        ];
+                    }
+                }
+                if(! empty($insert)) DeliveryNoteDetail::insert($insert);
+            }
+
+        }catch (\Throwable $e){
+            return [false, $e->getMessage()];
+        }
+
+        return [true, ['file' => ['old' => $old, 'new' => $new]]];
+    }
+
+    public function deliveryNoteEditRule(&$data, $user){
+        if(empty($data['construction_order_number'])) return [false, '施工单编号不能为空'];
+        $construction = Construction::where('del_time',0)
+            ->where('order_number', $data['construction_order_number'])
+            ->first();
+        if(empty($construction)) return [false, '施工单:' . $data['construction_order_number'] . '不存在或已被删除'];
+        $construction = $construction->toArray();
+        $data['depart_id'] = $construction['depart_id'];
+        $data['top_depart_id'] = $construction['top_depart_id'];
+
+        //是否交车
+        $is_submit = 0;
+        if(isset($data['is_submit'])) $is_submit = 1;
+        //校验
+        if($is_submit && $construction['state'] != Construction::STATE_FOUR) return [false, '施工单:' . $data['construction_order_number'] . '未完结,无法交车'];
+
+        //校验
+        if(empty($data['sales_order_number'])) return [false, '销售订单号不能为空'];
+        list($status, $msg) = (new SalesOrderService())->detail(['order_number' => $data['sales_order_number']], $user);
+        if(! $status) return [false, $msg];
+
+        if($is_submit && $msg['payment_receipt_list']['not_receipt_amount'] > 0) return [false, '销售订单:' . $data['sales_order_number'] . '还有未回款金额, 交车失败'];
+
+        $new = $old = [];
         if(isset($data['id'])) {
             $model = DeliveryNote::where('id',$data['id'])->first();
-            if($model->del_time > 0) return [false,'交车单不存在或已被删除!'];
-            if($model->img3) return [false,'客户已签字,无法编辑!'];
+            if(empty($model) || $model->del_time > 0) return [false,'交车单不存在或已被删除!'];
+            if($is_submit){
+                if(! $model->img3) return [false, '保存并交车时,必须客户确认签字!'];
+            }else{
+                if($model->img3) return [false,'客户已确认签字,保存失败!'];
+            }
             $bool = DeliveryNote::where('del_time',0)
                 ->where('construction_order_number',$data['construction_order_number'])
                 ->where('id','<>',$data['id'])->first();
-            if($bool) return [false,'施工单已创建交车单!'];
+            if($bool) return [false,'施工单:' . $data['construction_order_number'] . '已创建交车单!'];
 
-            $new = $old = [];
-            if($model->img2 != "" && $data['img2'] != $model->img2) {
-                $old[] = $model->img2;
-            }else{
-                if($data['img2'] != "") $new[] = $data['img2'];
-            }
-            if($model->img3 != "" && $data['img3'] != $model->img3) {
-                $old[] = $model->img3;
-            }else{
-                if($data['img3'] != "") $new[] = $data['img3'];
+            $is_edit = 0;//不能编辑
+            if(! $model->img3){
+                $is_edit = 1;
+
+                if($model->img2 != "" && $data['img2'] != $model->img2) {
+                    $old[] = $model->img2;
+                }else{
+                    if($data['img2'] != "") $new[] = $data['img2'];
+                }
+                if($model->img3 != "" && $data['img3'] != $model->img3) {
+                    $old[] = $model->img3;
+                }else{
+                    if($data['img3'] != "") $new[] = $data['img3'];
+                }
             }
+
+            $data['is_edit'] = $is_edit;
         } else {
             $bool = DeliveryNote::where('del_time',0)
                 ->where('construction_order_number',$data['construction_order_number'])
                 ->first();
-            if($bool) return [false,'施工单已创建交车单!'];
+            if($bool) return [false,'施工单:' . $data['construction_order_number'] . '已创建交车单!'];
 
             $model = new DeliveryNote();
-            $model->crt_id = $id;
-            $new = [];
+            $model->crt_id = $user['id'];
             if($data['img2'] != "") $new[] = $data['img2'];
             if($data['img3'] != "") $new[] = $data['img3'];
+            if($is_submit && ! $data['img3']) return [false, '保存并交车时,必须客户确认签字!'];
         }
 
-        try {
-            $model->upd_id = $id;
-            $model->construction_order_number = $data['construction_order_number'] ?? '';
-            $model->sales_order_number = $data['sales_order_number'] ?? '';
-            $model->start_time = $data['start_time'] ?? '';
-            $model->end_time = $data['end_time'] ?? '';
-            $model->vin_no = $data['vin_no'] ?? '';
-            $model->system = $data['system'] ?? '';
-            $model->mile = $data['mile'] ?? '';
-            $model->is_wait = $data['is_wait'] ?? '';
-            $model->customer_name = $data['customer_name'] ?? '';
-            $model->customer_mobile = $data['customer_mobile'] ?? '';
-            $model->sale_man = $data['sale_man'] ?? '';
-            $model->install_man = $data['install_man'] ?? '';
-            $model->is_brash = $data['is_brash'] ?? '';
-            $model->is_chong = $data['is_chong'] ?? '';
-            $model->service_mark = $data['service_mark'] ?? '';
-            $model->mark = $data['mark'] ?? '';
-            $model->break = $data['break'] ? json_encode($data['break']):json_encode([]);
-            $model->break_mark = $data['break_mark'] ? json_encode($data['break_mark']):json_encode([]);
-            $model->project_id = $data['project_id'] ? json_encode($data['project_id']):json_encode([]);
-            $model->other_project_mark = $data['other_project_mark'] ?? '';
-            $model->img = $data['img'] ?? '';
-            $model->img1 = $data['img1'] ?? '';
-            $model->img2 = $data['img2'] ?? '';
-            $model->img3 = $data['img3'] ?? '';
-            $model->save();
-        }catch (\Throwable $e){
-            return [false, $e->getMessage()];
-        }
-
-        return [true, ['file' => ['old' => $old ?? [], 'new' => $new]]];
+        return [true, [$model, $new, $old]];
     }
 
     public function deliveryNoteList($data)
@@ -1144,26 +1223,59 @@ class ConstructionService extends Service
         $model = DeliveryNote::where('del_time',0)
             ->select("*")
             ->orderBy("id","desc");
+
+        if(! empty($data['customer_name'])) $model->where('customer_name', 'LIKE', '%'.$data['customer_name'].'%');
+        if(! empty($data['sales_order_number'])) $model->where('sales_order_number', 'LIKE', '%'.$data['sales_order_number'].'%');
+        if(! empty($data['sale_man_title'])) {
+            $id = $this->searchForMan($data['sale_man_title'], DeliveryNoteDetail::TYPE_ONE);
+            $model->whereIn('id', $id);
+        }
+        if(! empty($data['install_man_title'])) {
+            $id = $this->searchForMan($data['install_man_title'], DeliveryNoteDetail::TYPE_TWO);
+            $model->whereIn('id', $id);
+        }
+        if(! empty($data['end_time'][0]) && ! empty($data['end_time'][1])) {
+            $return = $this->changeDateToTimeStampAboutRange($data['end_time']);
+            $model->whereBetween('end_time',[$return[0],$return[1]]);
+        }
+
         $list = $this->limit($model,'', $data);
+        $list = $this->fillDeliveryNoteData($list);
 
-        return [true,$list];
+        return [true, $list];
     }
 
     public function fillDeliveryNoteData($data){
         if(empty($data['data'])) return $data;
 
         $emp = $this->returnMan($data['data']);
-
         foreach ($data['data'] as $key => $value){
             $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
             $data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? '';
             $data['data'][$key]['sale_man_title'] = $this->returnMan2($value['sale_man'],$emp);
             $data['data'][$key]['install_man_title'] = $this->returnMan2($value['install_man'],$emp);
+            $data['data'][$key]['state_title'] = DeliveryNote::$name[$value['state']] ?? "";
         }
 
         return $data;
     }
 
+    public function searchForMan($title, $type){
+        $emp = Employee::where('del_time',0)
+            ->where('emp_name', 'LIKE', '%'.$title.'%')
+            ->select('id')
+            ->get()->toArray();
+        $emp = array_column($emp,'id');
+        if(empty($emp)) return [];
+
+        $delivery_note_id = DeliveryNoteDetail::where('del_time',0)
+            ->where('type', $type)
+            ->whereIn('data_id', $emp)
+            ->select('delivery_note_id')
+            ->get()->toArray();
+        return array_unique(array_column($delivery_note_id,'delivery_note_id'));
+    }
+
     public function returnMan($data = []){
         if(empty($data)) return [];
 
@@ -1231,6 +1343,7 @@ class ConstructionService extends Service
         if(empty($data['id'])) return [false, '请选择删除的交车单数据'];
         $model = DeliveryNote::where('id', $data['id'])->first();
         if($model->del_time > 0) return [false, '交车单不存在或已被删除!'];
+        if($model->state > DeliveryNote::STATE_ZERO) return [false, '交车单已交车,删除失败'];
 
         $old = [];
         if($model->img2 != "" ) $old[] = $model->img2;
@@ -1243,6 +1356,9 @@ class ConstructionService extends Service
             ]
         );
 
+        DeliveryNoteDetail::where('del_time',0)
+            ->where('delivery_note_id', $data['id'])->update(['del_time' => time(),]);
+
         return [true, ['file' => ['old' => $old]]];
     }