فهرست منبع

施工单完成一半

cqpCow 1 سال پیش
والد
کامیت
16aa197fe1

+ 10 - 4
app/Model/SalesOrder.php

@@ -28,11 +28,17 @@ class SalesOrder extends Model
         self::Model_type_three
     ];
 
-    const State_zero = 0;//未锁定
-    const State_one = 1;//锁定
+    const State_zero = 0;//未派单
+    const State_one = 1;//已派销售
+    const State_two = 2;//已派公司或分社
+    const State_three = 3;//已下施工单
+    const State_four = 4;//退换货
     public static $state = [
-        self::State_zero => '未锁定',
-        self::State_one => '锁定',
+        self::State_zero => '未派单',
+        self::State_one => '已派销售',
+        self::State_two => '已派总设或分社',
+        self::State_three => '已下施工单',
+        self::State_four => '退换货',
     ];
 
     public static $prefix = [

+ 21 - 0
app/Model/SalesOrderRange.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+class SalesOrderRange extends Model
+{
+    protected $table = "sales_order_range"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+    const type_one = 1; // 部门
+    const type_two = 2; // 人
+    const type_three = 3; // 公司
+    public static $type = [
+        self::type_one,
+        self::type_two,
+        self::type_three,
+    ];
+}

+ 32 - 0
app/Scopes/SalesOrderScope.php

@@ -0,0 +1,32 @@
+<?php
+namespace App\Scopes;
+
+use App\Model\Employee;
+use App\Model\SalesOrderInfo;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Scope;
+
+class SalesOrderScope implements Scope
+{
+    public $user = [];
+
+    public function __construct($user = [])
+    {
+        $this->user = $user;
+    }
+
+    public function apply(Builder $builder, Model $model)
+    {
+        if($this->user['id'] != Employee::SPECIAL_ADMIN) {
+            $sales_order_id = SalesOrderInfo::where('del_time',0)
+                ->where('employee_id',$this->user['id'])
+                ->select('sales_order_id')
+                ->get()->toArray();
+            $sales_order_id = array_unique(array_column($sales_order_id,'sales_order_id'));
+            $builder->orWhere(function ($query) use ($sales_order_id){
+                $query->whereIn('id',$sales_order_id);
+            });
+        }
+    }
+}

+ 31 - 29
app/Service/ConstructionService.php

@@ -8,7 +8,6 @@ use App\Model\ConstructionInfo;
 use App\Model\ConstructionProductInfo;
 use App\Model\Customer;
 use App\Model\Employee;
-use App\Model\Product;
 use App\Model\SalesOrder;
 use Illuminate\Support\Facades\DB;
 
@@ -86,6 +85,14 @@ class ConstructionService extends Service
                         'product_id' => $value['product_id'],
                         'price' => $value['retail_price'],
                         'number' => $value['number'],
+                        'title' => $value['title'],
+                        'code' => $value['code'] ?? '',
+                        'size' => $value['size'] ?? '',
+                        'unit' => $value['unit'] ?? 0,
+                        'bar_code' => $value['bar_code'] ?? '',
+                        'cost' => $value['cost'] ?? 0,
+                        'depart_price' => $value['depart_price'] ?? 0,
+                        'retail_price' => $value['retail_price'] ?? 0,
                         'mark' => $value['mark'] ?? '',
                         'crt_time' => $time,
                     ];
@@ -168,7 +175,15 @@ class ConstructionService extends Service
                         'product_id' => $value['product_id'],
                         'price' => $value['retail_price'],
                         'number' => $value['number'],
-                        'mark' => $value['mark']?? '',
+                        'title' => $value['title'],
+                        'code' => $value['code'] ?? '',
+                        'size' => $value['size'] ?? '',
+                        'unit' => $value['unit'] ?? 0,
+                        'bar_code' => $value['bar_code'] ?? '',
+                        'cost' => $value['cost'] ?? 0,
+                        'depart_price' => $value['depart_price'] ?? 0,
+                        'retail_price' => $value['retail_price'] ?? 0,
+                        'mark' => $value['mark'] ?? '',
                         'crt_time' => $time,
                     ];
                 }
@@ -276,26 +291,9 @@ class ConstructionService extends Service
 
         $p_info = ConstructionProductInfo::where('del_time',0)
             ->where('construction_id',$construction['id'])
-            ->select('id','construction_id','product_id','mark','price','number')
-            ->get()->toArray();
-        $pro = Product::whereIn('id',array_column($p_info,'product_id'))
-            ->select('bar_code','code','cost','depart_price','size','title','id')
             ->get()->toArray();
-        $pro = array_column($pro,null,'id');
         foreach ($p_info as $value){
-            $p = $pro[$value['product_id']] ?? [];
-            $construction['product'][] = [
-                'product_id' => $value['product_id'],
-                'mark' => $value['mark'],
-                'retail_price' => $value['price'],
-                'number' => $value['number'],
-                'bar_code' => $p['bar_code'] ?? '',
-                'code' => $p['code'] ?? '',
-                'cost' => $p['cost'] ?? 0,
-                'depart_price' => $p['depart_price'] ?? 0,
-                'size' => $p['size'] ?? '',
-                'title' => $p['title'] ?? '',
-            ];
+            $construction['product'][] = $value;
         }
         $construction['crt_name'] = $emp_map[$construction['crt_id']] ?? '';
         $construction['crt_time'] = $construction['crt_time'] ? date("Y-m-d H:i:s",$construction['crt_time']): '';
@@ -323,16 +321,20 @@ class ConstructionService extends Service
         if(empty($data['order_number'])) return [false,'工单编号不能为空'];
         if(empty($data['construction_time'])) return [false,'实施日期不能为空'];
         $data['construction_time'] = $this->changeDateToDateMin($data['construction_time']);
+        if(empty($data['sales_order_id'])) return [false,'请选择合同'];
+        $sale = SalesOrder::where('del_time',0)->where('id',$data['sales_order_id'])->first();
+        if(empty($sale)) return [false,'合同不存在或已被删除'];
+        if($sale['state'] < SalesOrder::State_two) return [false,'合同未派单,不允许新建施工单'];
         if(empty($data['product'])) return [false,'请选择产品'];
-        foreach ($data['product'] as $value){
-            if(empty($value['number'])) return [false,'产品数量不能为空'];
-            $res = $this->checkNumber($value['number']);
-            if(! $res) return [false,'请输入正确的产品数量'];
-
-            if(empty($value['retail_price'])) return [false,'产品价格不能为空'];
-            $res = $this->checkNumber($value['retail_price']);
-            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(empty($value['retail_price'])) return [false,'产品价格不能为空'];
+//            $res = $this->checkNumber($value['retail_price']);
+//            if(! $res) return [false,'产品价格请输入不超过两位小数并且大于0的数值'];
+//        }
         if(! empty($data['construction_fee'])){
             $res = $this->checkNumber($data['construction_fee']);
             if(! $res) return [false,'施工费用请输入不超过两位小数并且大于0的数值'];

+ 3 - 3
app/Service/EmployeeService.php

@@ -841,11 +841,11 @@ class EmployeeService extends Service
                     if($value['is_main']) {//是总社
                         $top_tmp = $map[$value['depart_id']];
                         if(! empty($depart_map[$top_tmp]['is_main'])){
-                            //顶级部门是总公司  所有部门都有
+                            //顶级公司是总公司 所有部门都有
                             $rule = array_column($list,'id');
                         }else{
-                            //顶级部门不是总公司 自己以及自己之下
-                            $depart_id = array_merge(self::getAllIds($list,$value['depart_id']),[$value['depart_id']]);
+                            //顶级公司是分公司 分公司所有部门
+                            $depart_id = array_merge(self::getAllIds($list,$top_tmp),[$top_tmp]);
                             $rule = array_merge_recursive($rule,$depart_id);
                         }
                     }else{//不是总社

+ 1 - 1
app/Service/ProductInventoryService.php

@@ -14,7 +14,7 @@ use Illuminate\Support\Facades\DB;
 class ProductInventoryService extends Service
 {
     //获取产品真实库存
-    public static function getRealStock($product_id = [],$data){
+    public static function getRealStock($product_id = [],$data=[]){
         if(empty($product_id)) return [];
         $array = ProductInventory::whereIn('product_id',$product_id)
             ->where('number','>',0)

+ 37 - 7
app/Service/PurchaseOrderService.php

@@ -18,8 +18,14 @@ class PurchaseOrderService extends Service
             DB::beginTransaction();
             $material_model = PurchaseOrder::where('order_number',$data['order_number'])->first();
             $material_model->depart_id = $data['depart_id'] ?? 0;
+            $material_model->rate = $data['total'] ?? 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->supplier = $data['supplier'] ?? '';
+            $material_model->purchase_id = $data['purchase_id'] ?? 0;
             $material_model->order_type = $data['order_type'];
-            $material_model->contact_order_no = $data['contact_order_no'] ?? '';
+            $material_model->sales_order_id = $data['sales_order_id'] ?? 0;
             $material_model->mark = $data['mark'] ?? '';
             $material_model->save();
 
@@ -34,6 +40,7 @@ class PurchaseOrderService extends Service
                         'depart_id' => $data['depart_id'] ?? 0,
                         'product_id' => $value['product_id'],
                         'number' => $value['number'],
+                        'price' => $value['price'],
                         'mark' => $value['mark'] ?? '',
                     ];
                 }
@@ -56,8 +63,14 @@ class PurchaseOrderService extends Service
             DB::beginTransaction();
             $material_model = new PurchaseOrder();
             $material_model->depart_id = $data['depart_id'] ?? 0;
+            $material_model->rate = $data['total'] ?? 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->supplier = $data['supplier'] ?? '';
+            $material_model->purchase_id = $data['purchase_id'] ?? 0;
             $material_model->order_type = $data['order_type'];
-            $material_model->contact_order_no = $data['contact_order_no'] ?? '';
+            $material_model->sales_order_id = $data['sales_order_id'] ?? 0;
             $material_model->mark = $data['mark'] ?? '';
             $material_model->crt_id = $user['id'];
             $material_model->save();
@@ -70,6 +83,7 @@ class PurchaseOrderService extends Service
                         'depart_id' => $data['depart_id'] ?? 0,
                         'product_id' => $value['product_id'],
                         'number' => $value['number'],
+                        'price' => $value['price'],
                         'mark' => $value['mark'] ?? '',
                     ];
                 }
@@ -90,13 +104,13 @@ class PurchaseOrderService extends Service
 
         $order = PurchaseOrder::where('order_number',$data['order_number'])
             ->where('del_time',0)
-            ->select('id','order_number','depart_id','mark','state','crt_id','order_type','contact_order_no')
+            ->select('id','order_number','depart_id','mark','state','crt_id','order_type','sales_order_id','supplier','purchase_id','rate','total','other_fee','discount_fee')
             ->first();
         if(empty($order)) return [false, '采购订单不存在或已被删除'];
 
         $info = PurchaseOrderInfo::where('del_time',0)
             ->where('order_number',$data['order_number'])
-            ->select('id','order_number','depart_id','product_id','number','mark')
+            ->select('id','order_number','depart_id','product_id','number','mark','price')
             ->get()->toArray();
         $order['product'] = $info;
 
@@ -130,7 +144,7 @@ class PurchaseOrderService extends Service
 
     public function getList($data,$user){
         $model = PurchaseOrder::where('del_time',0)
-            ->select('order_number','id','depart_id','mark','crt_time','state','crt_id','order_type','contact_order_no')
+            ->select('order_number','id','depart_id','mark','crt_time','state','crt_id','order_type','sales_order_id','supplier','purchase_id')
             ->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']);
@@ -155,7 +169,7 @@ class PurchaseOrderService extends Service
             ->pluck('title','id')
             ->toArray();
 
-        $emp_id = array_unique(array_column($data['data'],'crt_id'));
+        $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();
@@ -164,6 +178,7 @@ class PurchaseOrderService extends Service
             $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]['order_type_title'] = PurchaseOrder::$order_type[$value['order_type']] ?? '';
         }
 
@@ -173,7 +188,22 @@ class PurchaseOrderService extends Service
     public function orderRule(&$data, $is_check = true){
         if(empty($data['order_type'])) return [false,'采购订单类型不能为空'];
         if($this->isEmpty($data,'product')) return [false,'产品不能为空'];
-
+        if(! empty($data['rate'])){
+            $res = $this->checkNumber($data['rate']);
+            if(! $res) return [false, '整单扣除率请输入不超过两位小数并且大于0的数值'];
+        }
+        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的数值'];
+        }
         foreach ($data['product'] as $value){
             if(empty($value['number'])) return [false,'产品数量不能为空'];
             $res = $this->checkNumber($value['number']);

+ 164 - 42
app/Service/SalesOrderService.php

@@ -9,6 +9,7 @@ use App\Model\Product;
 use App\Model\SalesOrder;
 use App\Model\SalesOrderInfo;
 use App\Model\SalesOrderProductInfo;
+use App\Model\SalesOrderRange;
 use Illuminate\Support\Facades\DB;
 
 class SalesOrderService extends Service
@@ -104,13 +105,25 @@ class SalesOrderService extends Service
             }
 
             if(! empty($data['product'])){
+                $pro = Product::whereIn('id',array_column($data['product'],'product_id'))
+                    ->select('bar_code','code','cost','depart_price','size','title','id','retail_price')
+                    ->get()->toArray();
+                $pro = array_column($pro,null,'id');
                 $insert = [];
                 foreach ($data['product'] as $value){
+                    $tmp = $pro[$value['product_id']] ?? [];
                     $insert[] = [
                         'sales_order_id' => $model->id,
                         'product_id' => $value['product_id'],
-                        'price' => $value['retail_price'],
                         'number' => $value['number'],
+                        'title' => $tmp['title'],
+                        'code' => $tmp['code'] ?? '',
+                        'size' => $tmp['size'] ?? '',
+                        'unit' => $tmp['unit'] ?? 0,
+                        'bar_code' => $tmp['bar_code'] ?? '',
+                        'cost' => $tmp['cost'] ?? 0,
+                        'depart_price' => $tmp['depart_price'] ?? 0,
+                        'retail_price' => $tmp['retail_price'] ?? 0,
                         'mark' => $value['mark'] ?? '',
                         'crt_time' => $time,
                     ];
@@ -212,13 +225,25 @@ class SalesOrderService extends Service
             }
 
             if(! empty($data['product'])){
+                $pro = Product::whereIn('id',array_column($data['product'],'product_id'))
+                    ->select('bar_code','code','cost','depart_price','size','title','id','retail_price')
+                    ->get()->toArray();
+                $pro = array_column($pro,null,'id');
                 $insert = [];
                 foreach ($data['product'] as $value){
+                    $tmp = $pro[$value['product_id']] ?? [];
                     $insert[] = [
                         'sales_order_id' => $model->id,
                         'product_id' => $value['product_id'],
-                        'price' => $value['retail_price'],
                         'number' => $value['number'],
+                        'title' => $tmp['title'],
+                        'code' => $tmp['code'] ?? '',
+                        'size' => $tmp['size'] ?? '',
+                        'unit' => $tmp['unit'] ?? 0,
+                        'bar_code' => $tmp['bar_code'] ?? '',
+                        'cost' => $tmp['cost'] ?? 0,
+                        'depart_price' => $tmp['depart_price'] ?? 0,
+                        'retail_price' => $tmp['retail_price'] ?? 0,
                         'mark' => $value['mark'] ?? '',
                         'crt_time' => $time,
                     ];
@@ -250,6 +275,9 @@ class SalesOrderService extends Service
             SalesOrderProductInfo::where('del_time',0)
                 ->where('sales_order_id',$data['id'])
                 ->update(['del_time' => time()]);
+            SalesOrderRange::where('del_time',0)
+                ->where('sales_order_id',$data['id'])
+                ->update(['del_time' => time()]);
 
             DB::commit();
         }catch (\Exception $exception){
@@ -320,26 +348,9 @@ class SalesOrderService extends Service
 
         $sales_p_info = SalesOrderProductInfo::where('del_time',0)
             ->where('sales_order_id',$sales['id'])
-            ->select('id','sales_order_id','product_id','mark','price','number')
-            ->get()->toArray();
-        $pro = Product::whereIn('id',array_column($sales_p_info,'product_id'))
-            ->select('bar_code','code','cost','depart_price','size','title','id')
             ->get()->toArray();
-        $pro = array_column($pro,null,'id');
         foreach ($sales_p_info as $value){
-            $p = $pro[$value['product_id']] ?? [];
-            $sales['product'][] = [
-                'product_id' => $value['product_id'],
-                'mark' => $value['mark'],
-                'retail_price' => $value['price'],
-                'number' => $value['number'],
-                'bar_code' => $p['bar_code'] ?? '',
-                'code' => $p['code'] ?? '',
-                'cost' => $p['cost'] ?? 0,
-                'depart_price' => $p['depart_price'] ?? 0,
-                'size' => $p['size'] ?? '',
-                'title' => $p['title'] ?? '',
-            ];
+            $sales['product'][] = $value;
         }
         $sales['crt_name'] = $emp_map[$sales['crt_id']] ?? '';
         $sales['crt_time'] = $sales['crt_time'] ? date("Y-m-d H:i:s",$sales['crt_time']): '';
@@ -353,6 +364,26 @@ class SalesOrderService extends Service
             ->select('title','id','sales_order_type','model_type','order_number','selling_price','vin_no','car_type','order_type','deal_type','customer_id','sign_time','contract_state','crt_id','crt_time','mark','product_total','rate','construction_time','handover_time','expire_time','other_fee','discount_fee','contract_fee','contract_type','pay_way','send_state','logistics_company','logistics_number','car_type','year','mileage','color','original_set','processing','state')
             ->orderby('id', 'desc');
 
+        if($user['id'] != Employee::SPECIAL_ADMIN){
+            //单据中选择的签订负责协同人
+            $sales_order_id = SalesOrderInfo::where('del_time',0)
+                ->where('employee_id',$user['id'])
+                ->select('sales_order_id')
+                ->get()->toArray();
+            $sales_order_id = array_unique(array_column($sales_order_id,'sales_order_id'));
+            $model->whereIn('id',$sales_order_id);
+
+            //指派后
+            $user_id = $user['id'];
+            $depart_id = $user['depart_range'];
+            $sales_order_id = SalesOrderRange::where('del_time',0)
+                ->where(function ($query) use($user_id, $depart_id) {
+                    $query->where('employee_id',$user_id)
+                        ->orWhereIn('depart_id', $depart_id);
+                })->select('sales_order_id')->get()
+                ->toArray();
+            $model->whereIn('id',array_column($sales_order_id,'sales_order_id'));
+        }
         if(! empty($data['sales_order_type'])) $model->where('sales_order_type',$data['sales_order_type']);
         if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
         if(! empty($data['model_type'])) $model->where('model_type',$data['model_type']);
@@ -369,6 +400,7 @@ class SalesOrderService extends Service
                 $model->where('crt_time','<=',$end);
             }
         }
+        if(! empty($data['add_construction'])) $model->where('state','>=',SalesOrder::State_two);
 
         $list = $this->limit($model,'',$data);
         $list = $this->fillData($list,$data);
@@ -475,27 +507,9 @@ class SalesOrderService extends Service
         if(! empty($ergs['product'])){
             $sales_p_info = SalesOrderProductInfo::where('del_time',0)
                 ->where('sales_order_id',array_column($data['data'],'id'))
-                ->select('id','sales_order_id','product_id','mark','price','number')
-                ->get()->toArray();
-            $pro = Product::whereIn('id',array_column($sales_p_info,'product_id'))
-                ->select('bar_code','code','cost','depart_price','size','title','id')
                 ->get()->toArray();
-            $pro = array_column($pro,null,'id');
             foreach ($sales_p_info as $value){
-                $p = $pro[$value['product_id']] ?? [];
-                $tmp = [
-                    'product_id' => $value['product_id'],
-                    'mark' => $value['mark'],
-                    'retail_price' => $value['price'],
-                    'number' => $value['number'],
-                    'bar_code' => $p['bar_code'] ?? '',
-                    'code' => $p['code'] ?? '',
-                    'cost' => $p['cost'] ?? 0,
-                    'depart_price' => $p['depart_price'] ?? 0,
-                    'size' => $p['size'] ?? '',
-                    'title' => $p['title'] ?? '',
-                ];
-                $product[$value['sales_order_id']][] = $tmp;
+                $product[$value['sales_order_id']][] = $value;
             }
         }
         foreach ($data['data'] as $key => $value){
@@ -512,6 +526,7 @@ class SalesOrderService extends Service
             $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]['product'] = $product[$value['id']] ?? [];
+            $data['data'][$key]['state_name'] = SalesOrder::$state[$value['state']] ?? '';
         }
 
         return $data;
@@ -527,12 +542,119 @@ class SalesOrderService extends Service
         return [true, ['order_number' => $order_number]];
     }
 
-    public function salesOrderDispatch($data){
-//        list($status,$msg)
+    public function salesOrderDispatchSale($data){
+        list($status,$msg) = $this->salesOrderDispatchSaleRule($data);
+        if(! $status) return [false,$msg];
+
+        try {
+            DB::beginTransaction();
+            SalesOrder::where('del_time',0)->where('id',$msg['id'])->update([
+                'state' => SalesOrder::State_two
+            ]);
+
+            $time = time();
+            SalesOrderRange::where('del_time',0)->where('sales_order_id',$msg['id'])->update([
+                'del_time' => $time
+            ]);
+
+            if(! empty($data['depart'])){
+                $insert = [];
+                foreach ($data['depart'] as $value){
+                    $insert[] = [
+                        'sales_order_id' => $msg['id'],
+                        'depart_id' => $value,
+                        'type' => SalesOrderRange::type_one,
+                        'crt_time' => $time,
+                    ];
+                }
+                SalesOrderRange::insert($insert);
+            }
+
+            if(! empty($data['employee'])){
+                $insert = [];
+                foreach ($data['employee'] as $value){
+                    $insert[] = [
+                        'sales_order_id' => $msg['id'],
+                        'employee_id' => $value,
+                        'type' => SalesOrderRange::type_two,
+                        'crt_time' => $time,
+                    ];
+                }
+                SalesOrderRange::insert($insert);
+            }
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
+
+        return [true,''];
     }
 
-    public function salesOrderDispatchRule($data){
+    public function salesOrderDispatchSaleRule($data){
+        if(empty($data['id'])) return [false,'请选择合同派单'];
+        $sale = SalesOrder::where('del_time',0)
+            ->where('id',$data['id'])
+            ->first();
+        if(empty($sale)) return [false,'合同不存在或已被删除'];
+        if($sale['state'] > SalesOrder::State_one) return [false,'请确认合同状态,操作失败'];
+        $sale = $sale->toArray();
+
+        if(empty($data['depart']) && empty($data['employee'])) return [false, '请指派部门或人员'];
+
+        return [true, $sale];
+    }
+
+    public function salesOrderDispatchCompany($data){
+        list($status,$msg) = $this->salesOrderDispatchCompanyRule($data);
+        if(! $status) return [false,$msg];
+
+        try {
+            DB::beginTransaction();
+            SalesOrder::where('del_time',0)->where('id',$msg['id'])->update([
+                'state' => SalesOrder::State_three
+            ]);
+
+            $time = time();
+            SalesOrderRange::where('del_time',0)
+                ->where('sales_order_id',$msg['id'])
+                ->where('type',SalesOrderRange::type_three)
+                ->update(['del_time' => $time]);
+
+            if(! empty($data['depart'])){
+                $insert = [];
+                foreach ($data['depart'] as $value){
+                    $insert[] = [
+                        'sales_order_id' => $msg['id'],
+                        'depart_id' => $value,
+                        'type' => SalesOrderRange::type_three,
+                        'crt_time' => $time,
+                    ];
+                }
+                SalesOrderRange::insert($insert);
+            }
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
 
         return [true,''];
     }
+
+    public function salesOrderDispatchCompanyRule($data){
+        if(empty($data['id'])) return [false,'请选择合同派单'];
+        $sale = SalesOrder::where('del_time',0)
+            ->where('id',$data['id'])
+            ->first();
+        if(empty($sale)) return [false,'合同不存在或已被删除'];
+        if($sale['state'] > SalesOrder::State_two) return [false,'请确认合同状态,操作失败'];
+        $sale = $sale->toArray();
+
+        if(empty($data['depart'])) return [false, '请指派总社或分社'];
+
+        return [true, $sale];
+    }
 }

+ 4 - 2
routes/api.php

@@ -112,7 +112,6 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('purchaseOrderDetail', 'Api\PurchaseOrderController@purchaseOrderDetail');
     $route->any('purchaseOrderAdd', 'Api\PurchaseOrderController@purchaseOrderAdd');
     $route->any('purchaseOrderDel', 'Api\PurchaseOrderController@purchaseOrderDel');
-    $route->any('purchaseOrderConfirm', 'Api\PurchaseOrderController@purchaseOrderConfirm');
 
     //发货单
     $route->any('invoiceOrderList', 'Api\InvoiceOrderController@invoiceOrderList');
@@ -135,7 +134,10 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('salesOrderDetail', 'Api\SalesOrderController@salesOrderDetail');
     $route->any('salesOrderAdd', 'Api\SalesOrderController@salesOrderAdd');
     $route->any('salesOrderDel', 'Api\SalesOrderController@salesOrderDel');
-    $route->any('salesOrderDispatch', 'Api\SalesOrderController@salesOrderDispatch');
+    //派单销售
+    $route->any('salesOrderDispatchSale', 'Api\SalesOrderController@salesOrderDispatchSale');
+    //派单总部或分社
+    $route->any('salesOrderDispatchCompany', 'Api\SalesOrderController@salesOrderDispatchCompany');
 
     //施工单
     $route->any('constructionGet', 'Api\ConstructionController@constructionGet');